From d5d76a51cf79238c3177aa507213191d279d45ed Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Mon, 17 Sep 2018 00:46:06 +0200 Subject: signup works --- app/client/api/crud.fetch.js | 6 +-- app/client/auth/auth.actions.js | 89 ++++++++++++++++++++----------------- app/client/auth/login.component.js | 4 +- app/client/auth/signup.component.js | 18 ++++---- app/server/db/model.js | 55 ++++++++++++----------- app/server/db/models.js | 4 +- app/server/util/auth.js | 55 ++++++++++------------- public/bundle.js | 87 ++++++++++++++++++++++-------------- public/bundle.js.map | 2 +- 9 files changed, 171 insertions(+), 149 deletions(-) diff --git a/app/client/api/crud.fetch.js b/app/client/api/crud.fetch.js index 421510b..a160175 100644 --- a/app/client/api/crud.fetch.js +++ b/app/client/api/crud.fetch.js @@ -50,7 +50,7 @@ function _get_headers() { }, } } -function post(data) { +export function post(data) { return { method: 'POST', body: JSON.stringify(data), @@ -69,7 +69,7 @@ export function postBody(data) { }, } } -function put(data) { +export function put(data) { return { method: 'PUT', body: JSON.stringify(data), @@ -79,7 +79,7 @@ function put(data) { }, } } -function destroy(data) { +export function destroy(data) { return { method: 'DELETE', body: JSON.stringify(data), diff --git a/app/client/auth/auth.actions.js b/app/client/auth/auth.actions.js index 5968f87..991a3f9 100644 --- a/app/client/auth/auth.actions.js +++ b/app/client/auth/auth.actions.js @@ -1,4 +1,5 @@ -import * as types from '../types'; +import types from '../types' +import { put } from '../api/crud.fetch' export const setToken = (data) => { return { type: types.auth.set_token, data } @@ -10,73 +11,81 @@ export const setCurrentUser = (data) => { return { type: types.auth.set_current_user, data } } export function logout() { - return { type: types.auth.logout_user }; + return { type: types.auth.logout_user } } export function authLoading() { - return { type: types.auth.loading }; + return { type: types.auth.loading } } export function InvalidCredentialsException(message) { - this.message = message; - this.name = 'InvalidCredentialsException'; + this.message = message + this.name = 'InvalidCredentialsException' +} + +const api = { + login: '/api/login', + logout: '/api/logout', + signup: '/api/signup', + checkin: '/api/checkin', } export function login(username, password) { return (dispatch) => { - dispatch(authLoading()); - apiClient() - .post(api.GET_TOKEN, { + dispatch(authLoading()) + fetch(api.login, put({ username, password + })) + .then(req => req.json()) + .then(data => { + dispatch(setToken(data.token)) + dispatch(checkin()) }) - .then(function (response) { - dispatch(setToken(response.data.token)); - dispatch(getCurrentUser()); - }) - .catch(function (error) { - dispatch(setError(true)); + .catch(error => { + dispatch(setError(true)) if (error.response.status === 400) { - throw new InvalidCredentialsException(error); + throw new InvalidCredentialsException(error) } - throw error; - }); - }; + throw error + }) + } } export function signup(data) { return (dispatch) => { - dispatch(authLoading()); - apiClient() - .post(api.SIGNUP, data) - .then(function (response) { - console.log(response.data); - dispatch(login(data.username, data.password)); + dispatch(authLoading()) + fetch(api.signup, put(data)) + .then(req => req.json()) + .then(data => { + console.log(data) + dispatch(login(data.username, data.password)) }) - .catch(function (error) { + .catch(error => { console.log(error) if (error.response.status === 400) { // dispatch(accountError("There was an error creating your account.")) - throw new InvalidCredentialsException(error); + throw new InvalidCredentialsException(error) } - throw error; - }); - }; + throw error + }) + } } -export function getCurrentUser() { +export function checkin() { return (dispatch) => { - dispatch(authLoading()); - apiClient() - .get(api.CURRENT_USER) - .then(function (response) { - dispatch(setCurrentUser(response.data)); + dispatch(authLoading()) + fetch(api.checkin) + .then(req => req.json()) + .then(data => { + console.log(data) + dispatch(setCurrentUser(data)) console.log('set current user') }) - .catch(function (error) { + .catch(error => { if (error.response.status === 400) { - throw new InvalidCredentialsException(error); + throw new InvalidCredentialsException(error) } - throw error; - }); - }; + throw error + }) + } } diff --git a/app/client/auth/login.component.js b/app/client/auth/login.component.js index 4ffab34..58c3eaf 100644 --- a/app/client/auth/login.component.js +++ b/app/client/auth/login.component.js @@ -46,14 +46,14 @@ class Login extends Component { name="username" type="text" value={this.state.username} - onChange={this.handleChange} + onInput={this.handleChange} /> {this.renderAuthError()} diff --git a/app/server/db/model.js b/app/server/db/model.js index dd851bf..c829c85 100644 --- a/app/server/db/model.js +++ b/app/server/db/model.js @@ -17,9 +17,8 @@ module.exports = function modelScope(type, db_model, _props) { crud: crud, index: (query) => { - - return new Promise( (resolve, reject) => { - crud.index(query).then( (data) => { + return new Promise((resolve, reject) => { + crud.index(query).then(data => { if (! props.hasOne) { resolve(data ? data.toJSON() : []) @@ -27,13 +26,13 @@ module.exports = function modelScope(type, db_model, _props) { else { let recs = data.toJSON() const loader = new Loader () - loader.onReady( () => { + loader.onReady(() => { // console.log(type, 'ready') resolve(recs) }) // console.log('hasOne') loader.register('hasOne') - Object.keys(props.hasOne).forEach( (key,i) => { + Object.keys(props.hasOne).forEach((key, i) => { loader.register(key) // console.log('register', key) const type = props.hasOne[key] @@ -45,7 +44,7 @@ module.exports = function modelScope(type, db_model, _props) { }) // console.log('\n\n%%%%%%%%%%%%%%%%%%%%%%%% index > hasOne ' + key + '\n\n\n') // console.log(recs.length, Object.keys(id_lookup).length) - db_crud(type).show_ids(Object.keys(id_lookup)).then( (sub_recs) => { + db_crud(type).show_ids(Object.keys(id_lookup)).then(sub_recs => { // console.log(key, 'sub_recs', sub_recs) const short_key = key.replace('_id','') sub_recs.toJSON().forEach(rec => { @@ -57,49 +56,51 @@ module.exports = function modelScope(type, db_model, _props) { }) loader.ready('hasOne') } - }) // }).catch( () => res.sendStatus(500) ) + }) }) }, - show: (id) => { - return new Promise( (resolve, reject) => { - crud.show(id).then( (data) => { - if (! props.hasOne) { + show: (id, field = 'id') => { + return new Promise((resolve, reject) => { + crud.show(id, field).then(data => { + if (!data) { + resolve() + } else if (! props.hasOne) { resolve(data.toJSON()) } else { let rec = data.toJSON() const loader = new Loader () - loader.onReady( () => { + loader.onReady(() => { resolve(rec) }) loader.register('hasOne') - Object.keys(props.hasOne).forEach( (key,i) => { + Object.keys(props.hasOne).forEach((key, i) => { loader.register(key) const type = props.hasOne[key] - db_crud(type).show(rec[key + '_id']).then( (sub_rec) => { + db_crud(type).show(rec[key + '_id']).then((sub_rec) => { rec[key] = sub_rec loader.ready(key) }) }) loader.ready('hasOne') } - }) // .catch( (err) => res.sendStatus(500) ) + }) }) }, findOrCreate: (data) => { - return new Promise( (resolve, reject) => { + return new Promise((resolve, reject) => { let query = Object.assign({}, data) query.limit = 1 - crud.index(query).then( (recs) => { + crud.index(query).then((recs) => { if (recs && recs.length) { const rec = recs.at(0) // console.log('found rec', data.name) return resolve(rec) } // console.log('creating rec', data.name) - model.create(data).then( (rec) => { + model.create(data).then((rec) => { resolve(rec) }) }) @@ -107,12 +108,12 @@ module.exports = function modelScope(type, db_model, _props) { }, create: (data) => { - return new Promise( (resolve, reject) => { + return new Promise((resolve, reject) => { const should_relay = data.should_relay === 'true' - crud.create( model.sanitize(data) ).then( (rec) => { + crud.create( model.sanitize(data) ).then((rec) => { resolve(rec.toJSON()) props.afterCreate && props.afterCreate(rec, should_relay) - }).catch( (e) => { + }).catch(e => { console.error('error creating', e) reject() }) @@ -121,10 +122,10 @@ module.exports = function modelScope(type, db_model, _props) { update: (id, data) => { // console.log('update', id) - return new Promise( (resolve, reject) => { - crud.update(id, model.sanitize(data)).then( (data) => { + return new Promise((resolve, reject) => { + crud.update(id, model.sanitize(data)).then(data => { resolve(data.toJSON()) - }).catch( (e) => { + }).catch(e => { console.error('error updating', e) reject() }) @@ -132,7 +133,7 @@ module.exports = function modelScope(type, db_model, _props) { }, destroy: (id) => { - return new Promise( (resolve, reject) => { + return new Promise((resolve, reject) => { crud.show(id).then( data => { if (! data) { console.error('no record found', id) @@ -141,9 +142,9 @@ module.exports = function modelScope(type, db_model, _props) { if (type === 'file') { upload.destroyFile(data) } - crud.destroy(id).then( (destroyData) => { + crud.destroy(id).then((destroyData) => { resolve(data.toJSON()) - })// .catch( () => res.sendStatus(500) ) + }) }) }) }, diff --git a/app/server/db/models.js b/app/server/db/models.js index 24be774..8bf6d9a 100644 --- a/app/server/db/models.js +++ b/app/server/db/models.js @@ -21,7 +21,7 @@ let Task = bookshelf.Model.extend({ jsonColumns: ['opt'], }) let User = bookshelf.Model.extend({ - tableName: 'user', + tableName: 'users', hasTimestamps: true, }, { jsonColumns: ['profile'], @@ -61,7 +61,7 @@ module.exports = { // bridge.processTasks() } }), - user: model('user', Task, { + user: model('user', User, { fields: "username password realname level avatar lastseen profile created_at updated_at".split(" "), afterCreate: (user) => { console.log('created user') diff --git a/app/server/util/auth.js b/app/server/util/auth.js index d280927..fde0263 100644 --- a/app/server/util/auth.js +++ b/app/server/util/auth.js @@ -1,8 +1,9 @@ -let passport = require('passport') -let LocalStrategy = require('passport-local').Strategy -let crypto = require('crypto') -// let fs = require('fs') -let db = require('../db') +import passport from 'passport' +import { Strategy as LocalStrategy } from 'passport-local' +import crypto from 'crypto' +import db from '../db' + +const { user: userModel } = db.models export function route(app, serve_index){ passport.serializeUser(serializeUser) @@ -36,32 +37,38 @@ export function ensureAuthenticated(req, res, next) { } export function checkIfUserExists(req, res, next) { - db.getUserByUsername(sanitizeName(req.body.username)).then((user) => { + userModel.show(sanitizeName(req.body.username), 'username').then((user) => { + console.log('gotta user?', !!user); user ? res.json({ error: "user exists" }) : next() + }).catch(err => { + console.error('error', err) }) } -export function sanitizeName(s) { return (s || "").replace(new RegExp("[^-_a-zA-Z0-9]", 'g'), "") } +export function sanitizeName(s) { return (s || "").replace(new RegExp('[^-_a-zA-Z0-9]', 'g'), "") } export function sanitizeUser(req_user) { // sanitize user object - var user = JSON.parse(JSON.stringify(req_user)) + let user = JSON.parse(JSON.stringify(req_user)) delete user.password return user } export function createUser(req, res, next) { - if (req.body.password !== req.body.password2) { + const { username, password, password2 } = req.body + if (password !== password2) { return res.json({ error: "passwords don't match" }) } let data = { - username: sanitizeName(req.body.username), - realname: sanitize(req.body.realname), - password: makePassword(username, req.body.password), - firstseen: new Date(), + username: sanitizeName(username), + realname: sanitizeName(username), + password: makePassword(username, password), lastseen: new Date(), - // lastsession: util.now(), + level: 0, + profile: {}, } - db.createUser(data).then(() => next()) + userModel.create(data) + .then(user => next(user)) + .catch(err => res.json({ error })) } export function login(req, res) { @@ -101,11 +108,11 @@ export function validPassword(user, password) { } export function changePassword(req, res, next) { - if (! req.body.oldpassword && ! req.body.newpassword) return next() + if (!req.body.oldpassword && !req.body.newpassword) return next() if (req.body.newpassword !== req.body.newpassword2) { return res.send({ error: 'Passwords don\'t match.' }) } - if (! validPassword(res.user, req.body.oldpassword)) { + if (!validPassword(res.user, req.body.oldpassword)) { return res.send({ error: 'Password is incorrect.' }) } let username = req.user.get('username') @@ -113,19 +120,6 @@ export function changePassword(req, res, next) { res.user.set('password', newPassword) res.user.save().then(() => next()).catch(err => res.send({ error: err })) } -export function changePasswordDangerously(req, res, next) { - if (! req.body.password && ! req.body.newpassword) return next() - if (req.body.newpassword !== req.body.newpassword2) { - return res.send({ error: 'Passwords don\'t match.' }) - } - if (! validPassword(req.user, req.body.password)) { - return res.send({ error: 'Password is incorrect.' }) - } - let username = res.user.get('username') - let newPassword = makePassword(username, req.body.newpassword) - res.user.set('password', newPassword) - res.user.save().then(() => next()).catch(err => res.send({ error: err })) -} export function verifyLocalUser(username, password, done) { // handle passwords!! @@ -142,7 +136,6 @@ export function verifyLocalUser(username, password, done) { }) } - export function checkin(req, res) { res.json({ user: sanitizeUser(req.user) }) } diff --git a/public/bundle.js b/public/bundle.js index 85e2795..ba9e322 100644 --- a/public/bundle.js +++ b/public/bundle.js @@ -198,8 +198,11 @@ var crud_action = exports.crud_action = function crud_action(type, method, fn) { Object.defineProperty(exports, "__esModule", { value: true }); +exports.destroy = undefined; exports.crud_fetch = crud_fetch; +exports.post = post; exports.postBody = postBody; +exports.put = put; var _nodeFetch = __webpack_require__(/*! node-fetch */ "./node_modules/node-fetch/browser.js"); @@ -298,6 +301,7 @@ function _destroy(data) { } }; } +exports.destroy = _destroy; function error(err) { console.warn(err); } @@ -1940,28 +1944,30 @@ exports.authLoading = authLoading; exports.InvalidCredentialsException = InvalidCredentialsException; exports.login = login; exports.signup = signup; -exports.getCurrentUser = getCurrentUser; +exports.checkin = checkin; var _types = __webpack_require__(/*! ../types */ "./app/client/types.js"); -var types = _interopRequireWildcard(_types); +var _types2 = _interopRequireDefault(_types); -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } +var _crud = __webpack_require__(/*! ../api/crud.fetch */ "./app/client/api/crud.fetch.js"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var setToken = exports.setToken = function setToken(data) { - return { type: types.auth.set_token, data: data }; + return { type: _types2.default.auth.set_token, data: data }; }; var setError = exports.setError = function setError(data) { - return { type: types.auth.set_error, data: data }; + return { type: _types2.default.auth.set_error, data: data }; }; var setCurrentUser = exports.setCurrentUser = function setCurrentUser(data) { - return { type: types.auth.set_current_user, data: data }; + return { type: _types2.default.auth.set_current_user, data: data }; }; function logout() { - return { type: types.auth.logout_user }; + return { type: _types2.default.auth.logout_user }; } function authLoading() { - return { type: types.auth.loading }; + return { type: _types2.default.auth.loading }; } function InvalidCredentialsException(message) { @@ -1969,15 +1975,24 @@ function InvalidCredentialsException(message) { this.name = 'InvalidCredentialsException'; } +var api = { + login: '/api/login', + logout: '/api/logout', + signup: '/api/signup', + checkin: '/api/checkin' +}; + function login(username, password) { return function (dispatch) { dispatch(authLoading()); - apiClient().post(api.GET_TOKEN, { + fetch(api.login, (0, _crud.put)({ username: username, password: password - }).then(function (response) { - dispatch(setToken(response.data.token)); - dispatch(getCurrentUser()); + })).then(function (req) { + return req.json(); + }).then(function (data) { + dispatch(setToken(data.token)); + dispatch(checkin()); }).catch(function (error) { dispatch(setError(true)); if (error.response.status === 400) { @@ -1991,8 +2006,10 @@ function login(username, password) { function signup(data) { return function (dispatch) { dispatch(authLoading()); - apiClient().post(api.SIGNUP, data).then(function (response) { - console.log(response.data); + fetch(api.signup, (0, _crud.put)(data)).then(function (req) { + return req.json(); + }).then(function (data) { + console.log(data); dispatch(login(data.username, data.password)); }).catch(function (error) { console.log(error); @@ -2005,11 +2022,14 @@ function signup(data) { }; } -function getCurrentUser() { +function checkin() { return function (dispatch) { dispatch(authLoading()); - apiClient().get(api.CURRENT_USER).then(function (response) { - dispatch(setCurrentUser(response.data)); + fetch(api.checkin).then(function (req) { + return req.json(); + }).then(function (data) { + console.log(data); + dispatch(setCurrentUser(data)); console.log('set current user'); }).catch(function (error) { if (error.response.status === 400) { @@ -2369,14 +2389,14 @@ var Login = function (_Component) { name: 'username', type: 'text', value: this.state.username, - onChange: this.handleChange + onInput: this.handleChange }), (0, _preact.h)(_common.TextInput, { title: 'Password', name: 'password', type: 'password', value: this.state.password, - onChange: this.handleChange + onInput: this.handleChange }), (0, _preact.h)( _common.Button, @@ -2526,11 +2546,13 @@ var _reactRouterDom = __webpack_require__(/*! react-router-dom */ "./node_module var _auth = __webpack_require__(/*! ./auth.actions */ "./app/client/auth/auth.actions.js"); -var _auth2 = _interopRequireDefault(_auth); +var actions = _interopRequireWildcard(_auth); var _common = __webpack_require__(/*! ../common */ "./app/client/common/index.js"); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } @@ -2561,12 +2583,8 @@ var Signup = function (_Component) { _createClass(Signup, [{ key: 'handleChange', - value: function handleChange(e) { - var _setState; - - var name = e.target.name; - var value = e.target.value; - this.setState((_setState = {}, _defineProperty(_setState, name, value), _defineProperty(_setState, 'error', null), _setState)); + value: function handleChange(value, name) { + this.setState(_defineProperty({}, name, value)); } }, { key: 'validate', @@ -2583,7 +2601,10 @@ var Signup = function (_Component) { if (!this.validate) { return this.props.actions.setError('bad password'); } - this.props.actions.signup(this.state); + + var user = _objectWithoutProperties(this.state, []); + + this.props.actions.signup(user); } }, { key: 'render', @@ -2611,28 +2632,28 @@ var Signup = function (_Component) { name: 'username', type: 'text', value: this.state.username, - onChange: this.handleChange + onInput: this.handleChange }), (0, _preact.h)(_common.TextInput, { title: 'Password', name: 'password', type: 'password', value: this.state.password, - onChange: this.handleChange + onInput: this.handleChange }), (0, _preact.h)(_common.TextInput, { title: 'Password again :)', name: 'password2', type: 'password', value: this.state.password2, - onChange: this.handleChange + onInput: this.handleChange }), (0, _preact.h)( _common.Button, { loading: this.props.auth.loading }, - 'Login' + 'Sign up' ), this.renderAuthError() ) @@ -2663,7 +2684,7 @@ var mapStateToProps = function mapStateToProps(state) { var mapDispatchToProps = function mapDispatchToProps(dispatch) { return { - actions: (0, _redux.bindActionCreators)(_extends({}, _auth2.default), dispatch) + actions: (0, _redux.bindActionCreators)(_extends({}, actions), dispatch) }; }; diff --git a/public/bundle.js.map b/public/bundle.js.map index 1b9f4b6..fe6f629 100644 --- a/public/bundle.js.map +++ b/public/bundle.js.map @@ -1 +1 @@ -{"version":3,"file":"bundle.js","sources":["webpack:///webpack/bootstrap","webpack:///./app/client/actions.js","webpack:///./app/client/api/crud.actions.js","webpack:///./app/client/api/crud.fetch.js","webpack:///./app/client/api/crud.types.js","webpack:///./app/client/api/crud.upload.js","webpack:///./app/client/api/index.js","webpack:///./app/client/api/parser.js","webpack:///./app/client/audio/lib/draw.js","webpack:///./app/client/audio/lib/index.js","webpack:///./app/client/audio/lib/output.js","webpack:///./app/client/audio/lib/spectrum.js","webpack:///./app/client/audio/lib/startAudioContext.js","webpack:///./app/client/audio/pix2wav.js","webpack:///./app/client/audio/wav2pix.js","webpack:///./app/client/auth/auth.actions.js","webpack:///./app/client/auth/auth.gate.js","webpack:///./app/client/auth/auth.reducer.js","webpack:///./app/client/auth/index.js","webpack:///./app/client/auth/login.component.js","webpack:///./app/client/auth/logout.component.js","webpack:///./app/client/auth/signup.component.js","webpack:///./app/client/common/audioPlayer/audioPlayer.actions.js","webpack:///./app/client/common/audioPlayer/audioPlayer.component.js","webpack:///./app/client/common/audioPlayer/audioPlayer.reducer.js","webpack:///./app/client/common/augmentationGrid.component.js","webpack:///./app/client/common/button.component.js","webpack:///./app/client/common/buttonGrid.component.js","webpack:///./app/client/common/checkbox.component.js","webpack:///./app/client/common/currentTask.component.js","webpack:///./app/client/common/fileList.component.js","webpack:///./app/client/common/fileUpload.component.js","webpack:///./app/client/common/folderList.component.js","webpack:///./app/client/common/gallery.component.js","webpack:///./app/client/common/group.component.js","webpack:///./app/client/common/header.component.js","webpack:///./app/client/common/index.js","webpack:///./app/client/common/loading.component.js","webpack:///./app/client/common/numberInput.component.js","webpack:///./app/client/common/param.component.js","webpack:///./app/client/common/paramGroup.component.js","webpack:///./app/client/common/player.component.js","webpack:///./app/client/common/progress.component.js","webpack:///./app/client/common/select.component.js","webpack:///./app/client/common/selectGroup.component.js","webpack:///./app/client/common/slider.component.js","webpack:///./app/client/common/taskList.component.js","webpack:///./app/client/common/textInput.component.js","webpack:///./app/client/common/views/index.js","webpack:///./app/client/common/views/new.view.js","webpack:///./app/client/dashboard/dashboard.actions.js","webpack:///./app/client/dashboard/dashboard.component.js","webpack:///./app/client/dashboard/dashboard.reducer.js","webpack:///./app/client/dashboard/dashboardheader.component.js","webpack:///./app/client/dataset/dataset.actions.js","webpack:///./app/client/dataset/dataset.component.js","webpack:///./app/client/dataset/dataset.form.js","webpack:///./app/client/dataset/dataset.loader.js","webpack:///./app/client/dataset/dataset.new.js","webpack:///./app/client/dataset/dataset.reducer.js","webpack:///./app/client/dataset/upload.reducer.js","webpack:///./app/client/dataset/upload.status.js","webpack:///./app/client/index.jsx","webpack:///./app/client/live/live.actions.js","webpack:///./app/client/live/live.reducer.js","webpack:///./app/client/live/player.js","webpack:///./app/client/live/whammy.js","webpack:///./app/client/modules/index.js","webpack:///./app/client/modules/module.reducer.js","webpack:///./app/client/modules/morph/index.js","webpack:///./app/client/modules/morph/morph.actions.js","webpack:///./app/client/modules/morph/morph.module.js","webpack:///./app/client/modules/morph/morph.reducer.js","webpack:///./app/client/modules/morph/morph.tasks.js","webpack:///./app/client/modules/morph/views/morph.app.js","webpack:///./app/client/modules/pix2pix/index.js","webpack:///./app/client/modules/pix2pix/pix2pix.actions.js","webpack:///./app/client/modules/pix2pix/pix2pix.module.js","webpack:///./app/client/modules/pix2pix/pix2pix.reducer.js","webpack:///./app/client/modules/pix2pix/pix2pix.tasks.js","webpack:///./app/client/modules/pix2pix/views/pix2pix.live.js","webpack:///./app/client/modules/pix2pix/views/pix2pix.new.js","webpack:///./app/client/modules/pix2pix/views/pix2pix.show.js","webpack:///./app/client/modules/pix2pixhd/index.js","webpack:///./app/client/modules/pix2pixhd/pix2pixhd.actions.js","webpack:///./app/client/modules/pix2pixhd/pix2pixhd.module.js","webpack:///./app/client/modules/pix2pixhd/pix2pixhd.reducer.js","webpack:///./app/client/modules/pix2pixhd/pix2pixhd.tasks.js","webpack:///./app/client/modules/pix2pixhd/views/pix2pixhd.live.js","webpack:///./app/client/modules/pix2pixhd/views/pix2pixhd.new.js","webpack:///./app/client/modules/pix2pixhd/views/pix2pixhd.results.js","webpack:///./app/client/modules/pix2pixhd/views/pix2pixhd.show.js","webpack:///./app/client/modules/pix2pixhd/views/pix2pixhd.train.js","webpack:///./app/client/modules/pix2wav/index.js","webpack:///./app/client/modules/pix2wav/pix2wav.actions.js","webpack:///./app/client/modules/pix2wav/pix2wav.module.js","webpack:///./app/client/modules/pix2wav/pix2wav.reducer.js","webpack:///./app/client/modules/pix2wav/pix2wav.tasks.js","webpack:///./app/client/modules/pix2wav/views/pix2wav.live.js","webpack:///./app/client/modules/pix2wav/views/pix2wav.new.js","webpack:///./app/client/modules/pix2wav/views/pix2wav.show.js","webpack:///./app/client/modules/pix2wav/views/spectrogram.upload.js","webpack:///./app/client/modules/samplernn/index.js","webpack:///./app/client/modules/samplernn/samplernn.actions.js","webpack:///./app/client/modules/samplernn/samplernn.module.js","webpack:///./app/client/modules/samplernn/samplernn.reducer.js","webpack:///./app/client/modules/samplernn/samplernn.tasks.js","webpack:///./app/client/modules/samplernn/views/samplernn.graph.js","webpack:///./app/client/modules/samplernn/views/samplernn.import.js","webpack:///./app/client/modules/samplernn/views/samplernn.new.js","webpack:///./app/client/modules/samplernn/views/samplernn.results.js","webpack:///./app/client/modules/samplernn/views/samplernn.show.js","webpack:///./app/client/queue/queue.actions.js","webpack:///./app/client/queue/queue.reducer.js","webpack:///./app/client/socket/index.js","webpack:///./app/client/socket/socket.actions.js","webpack:///./app/client/socket/socket.api.js","webpack:///./app/client/socket/socket.connection.js","webpack:///./app/client/socket/socket.live.js","webpack:///./app/client/socket/socket.system.js","webpack:///./app/client/socket/socket.task.js","webpack:///./app/client/store.js","webpack:///./app/client/system/system.actions.js","webpack:///./app/client/system/system.component.js","webpack:///./app/client/system/system.reducer.js","webpack:///./app/client/types.js","webpack:///./app/client/util/format.js","webpack:///./app/client/util/hidpi-canvas.js","webpack:///./app/client/util/index.js","webpack:///./app/client/util/math.js","webpack:///./app/client/util/sort.js","webpack:///./node_modules/fetch-jsonp/build/fetch-jsonp.js","webpack:///./node_modules/fft.js/lib/fft.js","webpack:///./node_modules/file-saver/FileSaver.js","webpack:///./node_modules/history/DOMUtils.js","webpack:///./node_modules/history/LocationUtils.js","webpack:///./node_modules/history/PathUtils.js","webpack:///./node_modules/history/createBrowserHistory.js","webpack:///./node_modules/history/createTransitionManager.js","webpack:///./node_modules/invariant/browser.js","webpack:///./node_modules/jszip/lib/base64.js","webpack:///./node_modules/jszip/lib/compressedObject.js","webpack:///./node_modules/jszip/lib/compressions.js","webpack:///./node_modules/jszip/lib/crc32.js","webpack:///./node_modules/jszip/lib/defaults.js","webpack:///./node_modules/jszip/lib/external.js","webpack:///./node_modules/jszip/lib/flate.js","webpack:///./node_modules/jszip/lib/generate/ZipFileWorker.js","webpack:///./node_modules/jszip/lib/generate/index.js","webpack:///./node_modules/jszip/lib/index.js","webpack:///./node_modules/jszip/lib/load.js","webpack:///./node_modules/jszip/lib/nodejs/NodejsStreamInputAdapter.js","webpack:///./node_modules/jszip/lib/nodejs/NodejsStreamOutputAdapter.js","webpack:///./node_modules/jszip/lib/nodejsUtils.js","webpack:///./node_modules/jszip/lib/object.js","webpack:///./node_modules/jszip/lib/readable-stream-browser.js","webpack:///./node_modules/jszip/lib/reader/ArrayReader.js","webpack:///./node_modules/jszip/lib/reader/DataReader.js","webpack:///./node_modules/jszip/lib/reader/NodeBufferReader.js","webpack:///./node_modules/jszip/lib/reader/StringReader.js","webpack:///./node_modules/jszip/lib/reader/Uint8ArrayReader.js","webpack:///./node_modules/jszip/lib/reader/readerFor.js","webpack:///./node_modules/jszip/lib/signature.js","webpack:///./node_modules/jszip/lib/stream/ConvertWorker.js","webpack:///./node_modules/jszip/lib/stream/Crc32Probe.js","webpack:///./node_modules/jszip/lib/stream/DataLengthProbe.js","webpack:///./node_modules/jszip/lib/stream/DataWorker.js","webpack:///./node_modules/jszip/lib/stream/GenericWorker.js","webpack:///./node_modules/jszip/lib/stream/StreamHelper.js","webpack:///./node_modules/jszip/lib/support.js","webpack:///./node_modules/jszip/lib/utf8.js","webpack:///./node_modules/jszip/lib/utils.js","webpack:///./node_modules/jszip/lib/zipEntries.js","webpack:///./node_modules/jszip/lib/zipEntry.js","webpack:///./node_modules/jszip/lib/zipObject.js","webpack:///./node_modules/jszip/node_modules/core-js/library/fn/set-immediate.js","webpack:///./node_modules/jszip/node_modules/core-js/library/modules/_a-function.js","webpack:///./node_modules/jszip/node_modules/core-js/library/modules/_an-object.js","webpack:///./node_modules/jszip/node_modules/core-js/library/modules/_cof.js","webpack:///./node_modules/jszip/node_modules/core-js/library/modules/_core.js","webpack:///./node_modules/jszip/node_modules/core-js/library/modules/_ctx.js","webpack:///./node_modules/jszip/node_modules/core-js/library/modules/_descriptors.js","webpack:///./node_modules/jszip/node_modules/core-js/library/modules/_dom-create.js","webpack:///./node_modules/jszip/node_modules/core-js/library/modules/_export.js","webpack:///./node_modules/jszip/node_modules/core-js/library/modules/_fails.js","webpack:///./node_modules/jszip/node_modules/core-js/library/modules/_global.js","webpack:///./node_modules/jszip/node_modules/core-js/library/modules/_hide.js","webpack:///./node_modules/jszip/node_modules/core-js/library/modules/_html.js","webpack:///./node_modules/jszip/node_modules/core-js/library/modules/_ie8-dom-define.js","webpack:///./node_modules/jszip/node_modules/core-js/library/modules/_invoke.js","webpack:///./node_modules/jszip/node_modules/core-js/library/modules/_is-object.js","webpack:///./node_modules/jszip/node_modules/core-js/library/modules/_object-dp.js","webpack:///./node_modules/jszip/node_modules/core-js/library/modules/_property-desc.js","webpack:///./node_modules/jszip/node_modules/core-js/library/modules/_task.js","webpack:///./node_modules/jszip/node_modules/core-js/library/modules/_to-primitive.js","webpack:///./node_modules/jszip/node_modules/core-js/library/modules/web.immediate.js","webpack:///./node_modules/jszip/node_modules/immediate/lib/browser.js","webpack:///./node_modules/jszip/node_modules/lie/lib/browser.js","webpack:///./node_modules/jszip/node_modules/pako/index.js","webpack:///./node_modules/jszip/node_modules/pako/lib/deflate.js","webpack:///./node_modules/jszip/node_modules/pako/lib/inflate.js","webpack:///./node_modules/jszip/node_modules/pako/lib/utils/common.js","webpack:///./node_modules/jszip/node_modules/pako/lib/utils/strings.js","webpack:///./node_modules/jszip/node_modules/pako/lib/zlib/adler32.js","webpack:///./node_modules/jszip/node_modules/pako/lib/zlib/constants.js","webpack:///./node_modules/jszip/node_modules/pako/lib/zlib/crc32.js","webpack:///./node_modules/jszip/node_modules/pako/lib/zlib/deflate.js","webpack:///./node_modules/jszip/node_modules/pako/lib/zlib/gzheader.js","webpack:///./node_modules/jszip/node_modules/pako/lib/zlib/inffast.js","webpack:///./node_modules/jszip/node_modules/pako/lib/zlib/inflate.js","webpack:///./node_modules/jszip/node_modules/pako/lib/zlib/inftrees.js","webpack:///./node_modules/jszip/node_modules/pako/lib/zlib/messages.js","webpack:///./node_modules/jszip/node_modules/pako/lib/zlib/trees.js","webpack:///./node_modules/jszip/node_modules/pako/lib/zlib/zstream.js","webpack:///./node_modules/moment/min/moment.min.js","webpack:///./node_modules/node-fetch/browser.js","webpack:///./node_modules/preact-compat/dist/preact-compat.es.js","webpack:///./node_modules/preact-compat/node_modules/fbjs/lib/emptyFunction.js","webpack:///./node_modules/preact-compat/node_modules/fbjs/lib/invariant.js","webpack:///./node_modules/preact-compat/node_modules/fbjs/lib/warning.js","webpack:///./node_modules/preact-compat/node_modules/object-assign/index.js","webpack:///./node_modules/preact-compat/node_modules/prop-types/checkPropTypes.js","webpack:///./node_modules/preact-compat/node_modules/prop-types/factoryWithTypeCheckers.js","webpack:///./node_modules/preact-compat/node_modules/prop-types/index.js","webpack:///./node_modules/preact-compat/node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./node_modules/preact/dist/preact.esm.js","webpack:///./node_modules/react-redux/es/components/Provider.js","webpack:///./node_modules/react-redux/es/components/connectAdvanced.js","webpack:///./node_modules/react-redux/es/connect/connect.js","webpack:///./node_modules/react-redux/es/connect/mapDispatchToProps.js","webpack:///./node_modules/react-redux/es/connect/mapStateToProps.js","webpack:///./node_modules/react-redux/es/connect/mergeProps.js","webpack:///./node_modules/react-redux/es/connect/selectorFactory.js","webpack:///./node_modules/react-redux/es/connect/verifySubselectors.js","webpack:///./node_modules/react-redux/es/connect/wrapMapToProps.js","webpack:///./node_modules/react-redux/es/index.js","webpack:///./node_modules/react-redux/es/utils/PropTypes.js","webpack:///./node_modules/react-redux/es/utils/Subscription.js","webpack:///./node_modules/react-redux/es/utils/shallowEqual.js","webpack:///./node_modules/react-redux/es/utils/verifyPlainObject.js","webpack:///./node_modules/react-redux/es/utils/warning.js","webpack:///./node_modules/react-redux/node_modules/fbjs/lib/emptyFunction.js","webpack:///./node_modules/react-redux/node_modules/fbjs/lib/invariant.js","webpack:///./node_modules/react-redux/node_modules/fbjs/lib/warning.js","webpack:///./node_modules/react-redux/node_modules/hoist-non-react-statics/index.js","webpack:///./node_modules/react-redux/node_modules/invariant/browser.js","webpack:///./node_modules/react-redux/node_modules/lodash-es/_Symbol.js","webpack:///./node_modules/react-redux/node_modules/lodash-es/_baseGetTag.js","webpack:///./node_modules/react-redux/node_modules/lodash-es/_freeGlobal.js","webpack:///./node_modules/react-redux/node_modules/lodash-es/_getPrototype.js","webpack:///./node_modules/react-redux/node_modules/lodash-es/_getRawTag.js","webpack:///./node_modules/react-redux/node_modules/lodash-es/_objectToString.js","webpack:///./node_modules/react-redux/node_modules/lodash-es/_overArg.js","webpack:///./node_modules/react-redux/node_modules/lodash-es/_root.js","webpack:///./node_modules/react-redux/node_modules/lodash-es/isObjectLike.js","webpack:///./node_modules/react-redux/node_modules/lodash-es/isPlainObject.js","webpack:///./node_modules/react-redux/node_modules/object-assign/index.js","webpack:///./node_modules/react-redux/node_modules/prop-types/checkPropTypes.js","webpack:///./node_modules/react-redux/node_modules/prop-types/factoryWithTypeCheckers.js","webpack:///./node_modules/react-redux/node_modules/prop-types/index.js","webpack:///./node_modules/react-redux/node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./node_modules/react-router-dom/es/BrowserRouter.js","webpack:///./node_modules/react-router-dom/es/HashRouter.js","webpack:///./node_modules/react-router-dom/es/Link.js","webpack:///./node_modules/react-router-dom/es/MemoryRouter.js","webpack:///./node_modules/react-router-dom/es/NavLink.js","webpack:///./node_modules/react-router-dom/es/Prompt.js","webpack:///./node_modules/react-router-dom/es/Redirect.js","webpack:///./node_modules/react-router-dom/es/Route.js","webpack:///./node_modules/react-router-dom/es/Router.js","webpack:///./node_modules/react-router-dom/es/StaticRouter.js","webpack:///./node_modules/react-router-dom/es/Switch.js","webpack:///./node_modules/react-router-dom/es/index.js","webpack:///./node_modules/react-router-dom/es/matchPath.js","webpack:///./node_modules/react-router-dom/es/withRouter.js","webpack:///./node_modules/react-router-dom/node_modules/fbjs/lib/emptyFunction.js","webpack:///./node_modules/react-router-dom/node_modules/fbjs/lib/invariant.js","webpack:///./node_modules/react-router-dom/node_modules/fbjs/lib/warning.js","webpack:///./node_modules/react-router-dom/node_modules/history/DOMUtils.js","webpack:///./node_modules/react-router-dom/node_modules/history/LocationUtils.js","webpack:///./node_modules/react-router-dom/node_modules/history/PathUtils.js","webpack:///./node_modules/react-router-dom/node_modules/history/createBrowserHistory.js","webpack:///./node_modules/react-router-dom/node_modules/history/createHashHistory.js","webpack:///./node_modules/react-router-dom/node_modules/history/createTransitionManager.js","webpack:///./node_modules/react-router-dom/node_modules/history/es/DOMUtils.js","webpack:///./node_modules/react-router-dom/node_modules/history/es/LocationUtils.js","webpack:///./node_modules/react-router-dom/node_modules/history/es/PathUtils.js","webpack:///./node_modules/react-router-dom/node_modules/history/es/createBrowserHistory.js","webpack:///./node_modules/react-router-dom/node_modules/history/es/createHashHistory.js","webpack:///./node_modules/react-router-dom/node_modules/history/es/createMemoryHistory.js","webpack:///./node_modules/react-router-dom/node_modules/history/es/createTransitionManager.js","webpack:///./node_modules/react-router-dom/node_modules/history/es/index.js","webpack:///./node_modules/react-router-dom/node_modules/hoist-non-react-statics/index.js","webpack:///./node_modules/react-router-dom/node_modules/invariant/browser.js","webpack:///./node_modules/react-router-dom/node_modules/isarray/index.js","webpack:///./node_modules/react-router-dom/node_modules/object-assign/index.js","webpack:///./node_modules/react-router-dom/node_modules/path-to-regexp/index.js","webpack:///./node_modules/react-router-dom/node_modules/prop-types/checkPropTypes.js","webpack:///./node_modules/react-router-dom/node_modules/prop-types/factoryWithTypeCheckers.js","webpack:///./node_modules/react-router-dom/node_modules/prop-types/index.js","webpack:///./node_modules/react-router-dom/node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./node_modules/react-router-dom/node_modules/react-router/es/MemoryRouter.js","webpack:///./node_modules/react-router-dom/node_modules/react-router/es/Prompt.js","webpack:///./node_modules/react-router-dom/node_modules/react-router/es/Redirect.js","webpack:///./node_modules/react-router-dom/node_modules/react-router/es/Route.js","webpack:///./node_modules/react-router-dom/node_modules/react-router/es/Router.js","webpack:///./node_modules/react-router-dom/node_modules/react-router/es/StaticRouter.js","webpack:///./node_modules/react-router-dom/node_modules/react-router/es/Switch.js","webpack:///./node_modules/react-router-dom/node_modules/react-router/es/generatePath.js","webpack:///./node_modules/react-router-dom/node_modules/react-router/es/matchPath.js","webpack:///./node_modules/react-router-dom/node_modules/react-router/es/withRouter.js","webpack:///./node_modules/react-router-dom/node_modules/react-router/node_modules/warning/warning.js","webpack:///./node_modules/react-router-dom/node_modules/resolve-pathname/index.js","webpack:///./node_modules/react-router-dom/node_modules/value-equal/index.js","webpack:///./node_modules/react-router-dom/node_modules/warning/browser.js","webpack:///./node_modules/react-router-redux/lib/actions.js","webpack:///./node_modules/react-router-redux/lib/index.js","webpack:///./node_modules/react-router-redux/lib/middleware.js","webpack:///./node_modules/react-router-redux/lib/reducer.js","webpack:///./node_modules/react-router-redux/lib/sync.js","webpack:///./node_modules/redux-thunk/lib/index.js","webpack:///./node_modules/redux/es/redux.js","webpack:///./node_modules/redux/node_modules/symbol-observable/es/index.js","webpack:///./node_modules/redux/node_modules/symbol-observable/es/ponyfill.js","webpack:///./node_modules/resolve-pathname/index.js","webpack:///./node_modules/signal-windows/index.js","webpack:///./node_modules/signal-windows/src/framer.js","webpack:///./node_modules/signal-windows/src/windows.js","webpack:///./node_modules/sprintf-js/src/sprintf.js","webpack:///./node_modules/tone/build/Tone.js","webpack:///./node_modules/uuid/lib/bytesToUuid.js","webpack:///./node_modules/uuid/lib/rng-browser.js","webpack:///./node_modules/uuid/v1.js","webpack:///./node_modules/value-equal/index.js","webpack:///./node_modules/warning/browser.js","webpack:///(webpack)/buildin/amd-define.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///(webpack)/buildin/global.js","webpack:///(webpack)/buildin/harmony-module.js","webpack:///(webpack)/buildin/module.js","webpack:///(webpack)/node_modules/base64-js/index.js","webpack:///(webpack)/node_modules/buffer/index.js","webpack:///(webpack)/node_modules/core-util-is/lib/util.js","webpack:///(webpack)/node_modules/events/events.js","webpack:///(webpack)/node_modules/ieee754/index.js","webpack:///(webpack)/node_modules/inherits/inherits_browser.js","webpack:///(webpack)/node_modules/isarray/index.js","webpack:///(webpack)/node_modules/process-nextick-args/index.js","webpack:///(webpack)/node_modules/process/browser.js","webpack:///(webpack)/node_modules/readable-stream/duplex-browser.js","webpack:///(webpack)/node_modules/readable-stream/lib/_stream_duplex.js","webpack:///(webpack)/node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///(webpack)/node_modules/readable-stream/lib/_stream_readable.js","webpack:///(webpack)/node_modules/readable-stream/lib/_stream_transform.js","webpack:///(webpack)/node_modules/readable-stream/lib/_stream_writable.js","webpack:///(webpack)/node_modules/readable-stream/lib/internal/streams/BufferList.js","webpack:///(webpack)/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///(webpack)/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///(webpack)/node_modules/readable-stream/passthrough.js","webpack:///(webpack)/node_modules/readable-stream/readable-browser.js","webpack:///(webpack)/node_modules/readable-stream/transform.js","webpack:///(webpack)/node_modules/readable-stream/writable-browser.js","webpack:///(webpack)/node_modules/safe-buffer/index.js","webpack:///(webpack)/node_modules/setimmediate/setImmediate.js","webpack:///(webpack)/node_modules/stream-browserify/index.js","webpack:///(webpack)/node_modules/string_decoder/lib/string_decoder.js","webpack:///(webpack)/node_modules/timers-browserify/main.js","webpack:///(webpack)/node_modules/util-deprecate/browser.js"],"sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./app/client/index.jsx\");\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _redux = require('redux');\n\nvar _api = require('./api');\n\nvar _live = require('./live/live.actions');\n\nvar liveActions = _interopRequireWildcard(_live);\n\nvar _queue = require('./queue/queue.actions');\n\nvar queueActions = _interopRequireWildcard(_queue);\n\nvar _system = require('./system/system.actions');\n\nvar systemActions = _interopRequireWildcard(_system);\n\nvar _socket = require('./socket/socket.actions');\n\nvar socketActions = _interopRequireWildcard(_socket);\n\nvar _dataset = require('./dataset/dataset.actions');\n\nvar datasetActions = _interopRequireWildcard(_dataset);\n\nvar _audioPlayer = require('./common/audioPlayer/audioPlayer.actions');\n\nvar audioPlayerActions = _interopRequireWildcard(_audioPlayer);\n\nvar _store = require('./store');\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nexports.default = Object.keys(_api.actions).map(function (a) {\n return [a, _api.actions[a]];\n}).concat([['live', liveActions], ['queue', queueActions], ['system', systemActions], ['dataset', datasetActions], ['audioPlayer', audioPlayerActions]]).map(function (p) {\n return [p[0], (0, _redux.bindActionCreators)(p[1], _store.store.dispatch)];\n}).concat([['socket', socketActions]]).reduce(function (a, b) {\n return (a[b[0]] = b[1]) && a;\n}, {});","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.crud_action = undefined;\nexports.crud_actions = crud_actions;\n\nvar _crud = require('./crud.fetch');\n\nvar _crud2 = require('./crud.types');\n\nvar _crud3 = require('./crud.upload');\n\nfunction crud_actions(type) {\n var fetch_type = (0, _crud.crud_fetch)(type);\n return ['index', 'show', 'create', 'update', 'destroy'].reduce(function (lookup, param) {\n lookup[param] = crud_action(type, param, function (q) {\n return fetch_type[param](q);\n });\n return lookup;\n }, {\n action: function action(method, fn) {\n return crud_action(type, method, fn);\n },\n upload: function upload(id, fd) {\n return (0, _crud3.upload_action)(type, id, fd);\n }\n });\n}\n\nvar crud_action = exports.crud_action = function crud_action(type, method, fn) {\n return function (q) {\n return function (dispatch) {\n return new Promise(function (resolve, reject) {\n dispatch({ type: (0, _crud2.as_type)(type, method + '_loading') });\n fn(q).then(function (data) {\n dispatch({ type: (0, _crud2.as_type)(type, method), data: data });\n resolve(data);\n }).catch(function (e) {\n dispatch({ type: (0, _crud2.as_type)(type, method + '_error') });\n reject(e);\n });\n });\n };\n };\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.crud_fetch = crud_fetch;\nexports.postBody = postBody;\n\nvar _nodeFetch = require('node-fetch');\n\nvar _nodeFetch2 = _interopRequireDefault(_nodeFetch);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction crud_fetch(type, tag) {\n var uri = '/api/' + type + '/' + (tag || '');\n return {\n index: function index(q) {\n return (0, _nodeFetch2.default)(_get_url(uri, q), _get_headers()).then(function (req) {\n return req.json();\n }).catch(error);\n },\n\n show: function show(id) {\n return (0, _nodeFetch2.default)(uri + id).then(function (req) {\n return req.json();\n }).catch(error);\n },\n\n create: function create(data) {\n return (0, _nodeFetch2.default)(uri, post(data)).then(function (req) {\n return req.json();\n }).catch(error);\n },\n\n update: function update(data) {\n return (0, _nodeFetch2.default)(uri + data.id, put(data)).then(function (req) {\n return req.json();\n }).catch(error);\n },\n\n destroy: function destroy(data) {\n return (0, _nodeFetch2.default)(uri + data.id, _destroy(data)).then(function (req) {\n return req.json();\n }).catch(error);\n }\n };\n}\n\nfunction _get_url(_url, data) {\n var url = new URL(window.location.origin + _url);\n if (data) {\n Object.keys(data).forEach(function (key) {\n return url.searchParams.append(key, data[key]);\n });\n }\n return url;\n}\nfunction _get_headers() {\n return {\n method: 'GET',\n headers: {\n 'Accept': 'application/json'\n }\n };\n}\nfunction post(data) {\n return {\n method: 'POST',\n body: JSON.stringify(data),\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n }\n };\n}\nfunction postBody(data) {\n return {\n method: 'POST',\n body: data,\n headers: {\n 'Accept': 'application/json'\n }\n };\n}\nfunction put(data) {\n return {\n method: 'PUT',\n body: JSON.stringify(data),\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n }\n };\n}\nfunction _destroy(data) {\n return {\n method: 'DELETE',\n body: JSON.stringify(data),\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n }\n };\n}\nfunction error(err) {\n console.warn(err);\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar as_type = exports.as_type = function as_type(a, b) {\n return [a, b].join('_').toUpperCase();\n};\n\nvar with_type = exports.with_type = function with_type(type, actions) {\n return actions.reduce(function (a, b) {\n return (a[b] = as_type(type, b)) && a;\n }, {});\n};\n\nvar crud_type = exports.crud_type = function crud_type(type) {\n var actions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n return with_type(type, actions.concat(['index_loading', 'index', 'index_error', 'show_loading', 'show', 'show_error', 'create_loading', 'create', 'create_error', 'update_loading', 'update', 'update_error', 'destroy_loading', 'destroy', 'destroy_error', 'upload_loading', 'upload_progress', 'upload_waiting', 'upload_complete', 'upload_error', 'sort']));\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.upload_action = undefined;\nexports.crud_upload = crud_upload;\n\nvar _crud = require('./crud.types');\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction crud_upload(type, fd, data, dispatch) {\n return new Promise(function (resolve, reject) {\n var id = data.id;\n\n Object.keys(data).forEach(function (key) {\n if (key !== 'id') {\n fd.append(key, data[key]);\n }\n });\n\n console.log('/api/' + type + '/' + id + '/upload/');\n\n var xhr = new XMLHttpRequest();\n xhr.upload.addEventListener(\"progress\", uploadProgress, false);\n xhr.addEventListener(\"load\", uploadComplete, false);\n xhr.addEventListener(\"error\", uploadFailed, false);\n xhr.addEventListener(\"abort\", uploadCancelled, false);\n xhr.open(\"POST\", '/api/' + type + '/' + id + '/upload/');\n xhr.send(fd);\n\n dispatch && dispatch({ type: (0, _crud.as_type)(type, 'upload_loading') });\n\n var complete = false;\n\n function uploadProgress(e) {\n if (e.lengthComputable) {\n var percent = Math.round(e.loaded * 100 / e.total) || 0;\n if (percent > 99) {\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_waiting'),\n percent: percent\n }, type, id));\n } else {\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_progress'),\n percent: percent\n }, type, id));\n }\n } else {\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_error'),\n error: 'unable to compute upload progress'\n }, type, id));\n }\n }\n\n function uploadComplete(e) {\n var parsed = void 0;\n try {\n parsed = JSON.parse(e.target.responseText);\n } catch (e) {\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_error'),\n error: 'upload failed'\n }, type, id));\n reject(e);\n return;\n }\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_complete'),\n data: parsed\n }, type, id));\n if (parsed.files && parsed.files.length) {\n parsed.files.forEach(function (file) {\n console.log(file);\n dispatch && dispatch({\n type: (0, _crud.as_type)('file', 'create'),\n data: file\n });\n });\n }\n resolve(parsed);\n }\n\n function uploadFailed(evt) {\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_error'),\n error: 'upload failed'\n }, type, id));\n reject(evt);\n }\n\n function uploadCancelled(evt) {\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_error'),\n error: 'upload cancelled'\n }, type, id));\n reject(evt);\n }\n });\n}\n\nvar upload_action = exports.upload_action = function upload_action(type, id, fd) {\n return function (dispatch) {\n return crud_upload(type, id, fd, dispatch);\n };\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.actions = exports.parser = exports.util = undefined;\n\nvar _crud = require('./crud.actions');\n\nvar _util = require('../util');\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _parser = require('./parser');\n\nvar parser = _interopRequireWildcard(_parser);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*\nfor our crud events, create corresponding actions\nthe actions fire a 'loading' event, call the underlying api method, and then resolve.\nso you can do ... \n import { folderActions } from '../../api'\n folderActions.index({ module: 'samplernn' })\n folderActions.show(12)\n folderActions.create({ module: 'samplernn', name: 'foo' })\n folderActions.update(12, { module: 'pix2pix' })\n folderActions.destroy(12, { confirm: true })\n folderActions.upload(12, form_data)\n*/\n\nexports.util = _util2.default;\nexports.parser = parser;\nvar actions = exports.actions = ['folder', 'file', 'dataset', 'task', 'user'].reduce(function (a, b) {\n return (a[b] = (0, _crud.crud_actions)(b)) && a;\n}, {});","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.tumblr = exports.thumbnail = exports.loadImage = exports.tag = exports.parse = exports.lookup = exports.integrations = undefined;\n\nvar _nodeFetch = require('node-fetch');\n\nvar _nodeFetch2 = _interopRequireDefault(_nodeFetch);\n\nvar _fetchJsonp = require('fetch-jsonp');\n\nvar _fetchJsonp2 = _interopRequireDefault(_fetchJsonp);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar integrations = exports.integrations = [{\n type: 'image',\n regex: /\\.(jpeg|jpg|gif|png|svg)(\\?.*)?$/i,\n fetch: function fetch(url, done) {\n var img = new Image();\n img.onload = function () {\n if (!img) return;\n var width = img.naturalWidth,\n height = img.naturalHeight;\n img = null;\n done({\n url: url,\n type: \"image\",\n token: \"\",\n thumbnail: \"\",\n title: \"\",\n width: width,\n height: height\n });\n };\n img.src = url;\n if (img.complete) {\n img.onload();\n }\n },\n tag: function tag(media) {\n return '';\n }\n}, {\n type: 'video',\n regex: /\\.(mp4|webm)(\\?.*)?$/i,\n fetch: function fetch(url, done) {\n var video = document.createElement(\"video\");\n var url_parts = url.replace(/\\?.*$/, \"\").split(\"/\");\n var filename = url_parts[url_parts.length - 1];\n video.addEventListener(\"loadedmetadata\", function () {\n var width = video.videoWidth,\n height = video.videoHeight;\n video = null;\n done({\n url: url,\n type: \"video\",\n token: url,\n thumbnail: \"/public/assets/img/video-thumbnail.png\",\n title: filename,\n width: width,\n height: height\n });\n });\n video.src = url;\n video.load();\n },\n tag: function tag(media) {\n return '