From 4c18946614657a9f8955408e514172a74eacc28e Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Mon, 17 Sep 2018 02:25:36 +0200 Subject: logging i --- app/client/api/crud.fetch.js | 7 +- app/client/auth/auth.actions.js | 9 +- app/client/auth/auth.gate.js | 4 +- app/client/auth/auth.reducer.js | 3 + app/client/auth/login.component.js | 6 +- app/server/site.js | 29 +++ app/server/util/auth.js | 11 +- package-lock.json | 468 +++++++++++++++++++++++++++++++++++++ package.json | 3 + public/bundle.js | 34 ++- public/bundle.js.map | 2 +- 11 files changed, 550 insertions(+), 26 deletions(-) diff --git a/app/client/api/crud.fetch.js b/app/client/api/crud.fetch.js index a160175..716ab3e 100644 --- a/app/client/api/crud.fetch.js +++ b/app/client/api/crud.fetch.js @@ -10,7 +10,7 @@ export function crud_fetch(type, tag) { }, show: id => { - return fetch(uri + id) + return fetch(uri + id, _get_headers(), _get_headers()) .then(req => req.json()) .catch(error) }, @@ -45,6 +45,7 @@ function _get_url(_url, data) { function _get_headers() { return { method: 'GET', + credentials: 'same-origin', headers: { 'Accept': 'application/json', }, @@ -54,6 +55,7 @@ export function post(data) { return { method: 'POST', body: JSON.stringify(data), + credentials: 'same-origin', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' @@ -64,6 +66,7 @@ export function postBody(data) { return { method: 'POST', body: data, + credentials: 'same-origin', headers: { 'Accept': 'application/json', }, @@ -73,6 +76,7 @@ export function put(data) { return { method: 'PUT', body: JSON.stringify(data), + credentials: 'same-origin', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' @@ -83,6 +87,7 @@ export function destroy(data) { return { method: 'DELETE', body: JSON.stringify(data), + credentials: 'same-origin', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' diff --git a/app/client/auth/auth.actions.js b/app/client/auth/auth.actions.js index 8d9a819..33af206 100644 --- a/app/client/auth/auth.actions.js +++ b/app/client/auth/auth.actions.js @@ -45,9 +45,8 @@ export function login(username, password) { .then(req => req.json()) .then(data => { console.log(data) - dispatch(setCurrentUser(data)) + dispatch(setCurrentUser(data.user)) // dispatch(setToken(data.token)) - dispatch(checkin()) }) .catch(error => { console.log(error) @@ -78,13 +77,11 @@ export function checkin() { fetch(api.checkin, put({})) .then(req => req.json()) .then(data => { - console.log(data) - dispatch(setCurrentUser(data)) - console.log('set current user') + dispatch(setCurrentUser(data.user)) }) .catch(error => { console.log(error) - dispatch(initialized(true)) + dispatch(initialized()) }) } } diff --git a/app/client/auth/auth.gate.js b/app/client/auth/auth.gate.js index 4890864..087dfc6 100644 --- a/app/client/auth/auth.gate.js +++ b/app/client/auth/auth.gate.js @@ -44,11 +44,11 @@ class AuthGate extends Component { if (!this.props.auth.initialized) { return
Loading
} - if (this.props.auth.isAuthenticated) return children + if (this.props.auth.isAuthenticated) return
{this.props.children}
return } componentDidMount(){ - this.props.actions.checkin(history) + this.props.actions.checkin() } } diff --git a/app/client/auth/auth.reducer.js b/app/client/auth/auth.reducer.js index 7b3193a..80b1ec5 100644 --- a/app/client/auth/auth.reducer.js +++ b/app/client/auth/auth.reducer.js @@ -39,6 +39,9 @@ const auth = (state = authInitialState, action) => { case types.auth.set_current_user: return { ...state, + loading: false, + initialized: true, + isAuthenticated: true, user: action.data, error: null, } diff --git a/app/client/auth/login.component.js b/app/client/auth/login.component.js index 3cfcb78..2ef01a6 100644 --- a/app/client/auth/login.component.js +++ b/app/client/auth/login.component.js @@ -31,7 +31,11 @@ class Login extends Component { } render(){ if (this.props.auth.isAuthenticated) { - return + let { returnTo } = this.props.auth + if (!returnTo || returnTo.match(/(login|logout|signup)/i)) { + returnTo = '/' + } + return } return (
diff --git a/app/server/site.js b/app/server/site.js index d07c07b..717e42b 100644 --- a/app/server/site.js +++ b/app/server/site.js @@ -2,7 +2,11 @@ const express = require('express') const http = require('http') const path = require('path') const multer = require('multer')() +const sessionstore = require('sessionstore') +const session = require('express-session') const bodyParser = require('body-parser') +const cookieParser = require('cookie-parser') +const MongoStore = require('connect-mongo')(session); const compression = require('compression') // const multer = require('multer') // const upload = multer({ dest: 'uploads/' }) @@ -19,6 +23,31 @@ app.use(bodyParser.urlencoded({ extended: false, limit: '100mb', })) app.use(express.query()) app.use(express.static(path.join(__dirname, '../../public'))) app.use(compression()) +app.use(cookieParser()) +var sessionSettings = { + secret: 'argonauts', + proxy: true, + key: 'cortex.sid', + cookie: { + secure: process.env.NODE_ENV === 'production', + domain: '.' + process.env.HOST_NAME, + maxAge: 43200000000, + }, + resave: true, + saveUninitialized: false, +} +if (!process.env.SESSIONS_IN_MEMORY) { + sessionSettings.store = new MongoStore({ + url: 'mongodb://127.0.0.1:28108/cortexSessionDb' + // type: 'mongodb', + // host: 'localhost', + // port: 27017, + // dbName: 'buckySessionDb', + // collectionName: 'sessions', + // timeout: 10000, + }) +} +app.use(session(sessionSettings)) auth.route(app, serve_index) export const io = require('socket.io').listen(server) diff --git a/app/server/util/auth.js b/app/server/util/auth.js index b2faf2a..0d7dbd8 100644 --- a/app/server/util/auth.js +++ b/app/server/util/auth.js @@ -92,7 +92,7 @@ export function login(req, res) { return res.json({ status: "OK", user: sanitizeUser(req.user), - returnTo: returnTo || "/index", + returnTo: returnTo || "/", }) } res.json({ @@ -105,9 +105,9 @@ export function serializeUser(user, done) { } export function deserializeUser(id, done) { - db.getUser(id).then(function(user){ - done(! user, user) - }) + userModel.show(id).then(user => { + done(!user, user) + }).catch(done) } export function makePassword(password) { @@ -143,7 +143,7 @@ export function verifyLocalUser(username, password, done) { console.log(user) // if (err) { return done(err) } if (! user) { return done("no user") } - if (! user || ! validPassword(user, password)) { + if (! user || !validPassword(user, password)) { return done(null, false, { error: { message: 'Bad username/password.' } }) } return done(null, user) @@ -151,6 +151,7 @@ export function verifyLocalUser(username, password, done) { } export function checkin(req, res) { + console.log(req.user) res.json({ user: sanitizeUser(req.user) }) } diff --git a/package-lock.json b/package-lock.json index b61398d..7a502ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,29 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + }, + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "requires": { + "lodash": "^4.14.0" + } + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, "babel-cli": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", @@ -4616,12 +4639,35 @@ } } }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, "bindings": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz", "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=", "dev": true }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" + }, "body-parser": { "version": "1.18.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", @@ -4883,6 +4929,36 @@ "resolved": "https://registry.npmjs.org/bookshelf-json-columns/-/bookshelf-json-columns-2.1.1.tgz", "integrity": "sha1-DBBOT2s8Qu33YV+pa4eG6Zd+efg=" }, + "bson": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.9.tgz", + "integrity": "sha512-IQX9/h7WdMBIW/q/++tGd+emQr0XMdeZ6icnT/74Xk9fnabWn+gZgpE+9V+gujL3hhJOoNrnDVY7tWdzc7NUTg==" + }, + "buffer-shims": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, "compression": { "version": "1.7.2", "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz", @@ -4974,6 +5050,19 @@ } } }, + "connect-mongo": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/connect-mongo/-/connect-mongo-2.0.1.tgz", + "integrity": "sha512-ghBvVq0SA0SkTFsbAB8HdF1+uoHdFJICSlrTklNloMKXuRpX9IuVBnG0DlKnXBZSQI0Joyaq22cazsrV9+5g2A==", + "requires": { + "mongodb": "^2.0.36" + } + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, "cookie-parser": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", @@ -4995,11 +5084,84 @@ } } }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "crc": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", + "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, "dotenv": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==" }, + "engine.io-client": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", + "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary2": "~1.0.2" + } + }, + "es6-promise": { + "version": "3.2.1", + "resolved": "http://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", + "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=" + }, "express": { "version": "4.16.3", "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", @@ -5372,6 +5534,22 @@ "resolved": "https://registry.npmjs.org/express-json/-/express-json-1.0.0.tgz", "integrity": "sha1-n91TI5rQpvPgdvVFhdiiJDB1+zY=" }, + "express-session": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.15.6.tgz", + "integrity": "sha512-r0nrHTCYtAMrFwZ0kBzZEXa1vtPVrw0dKvGSrKP4dahwBQ1BJpF2/y1Pp4sCD/0kvxV4zZeclyvfmw0B4RMJQA==", + "requires": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "crc": "3.4.4", + "debug": "2.6.9", + "depd": "~1.1.1", + "on-headers": "~1.0.1", + "parseurl": "~1.3.2", + "uid-safe": "~2.1.5", + "utils-merge": "1.0.1" + } + }, "fetch-jsonp": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/fetch-jsonp/-/fetch-jsonp-1.1.3.tgz", @@ -5467,6 +5645,26 @@ } } }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, "history": { "version": "4.7.2", "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", @@ -5479,6 +5677,16 @@ "warning": "^3.0.0" } }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -5487,11 +5695,21 @@ "loose-envify": "^1.0.0" } }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, + "jsondate": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsondate/-/jsondate-0.0.1.tgz", + "integrity": "sha1-RXqa4Bgm0Z+vfofJviY9TzqiN/w=" + }, "jszip": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", @@ -7104,6 +7322,11 @@ } } }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -7117,6 +7340,30 @@ "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz", "integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ==" }, + "mongodb": { + "version": "2.2.36", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.36.tgz", + "integrity": "sha512-P2SBLQ8Z0PVx71ngoXwo12+FiSfbNfGOClAao03/bant5DgLNkOPAck5IaJcEk4gKlQhDEURzfR3xuBG1/B+IA==", + "requires": { + "es6-promise": "3.2.1", + "mongodb-core": "2.1.20", + "readable-stream": "2.2.7" + } + }, + "mongodb-core": { + "version": "2.1.20", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.20.tgz", + "integrity": "sha512-IN57CX5/Q1bhDq6ShAR6gIv4koFsZP7L8WOK1S0lR0pVDQaScffSMV5jxubLsmZ7J+UdqmykKw4r9hG3XQEGgQ==", + "requires": { + "bson": "~1.0.4", + "require_optional": "~1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, "msgpack": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/msgpack/-/msgpack-1.0.2.tgz", @@ -7526,6 +7773,42 @@ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=" }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + }, + "parent-require": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parent-require/-/parent-require-1.0.0.tgz", + "integrity": "sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc=" + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, "passport": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.0.tgz", @@ -7738,6 +8021,16 @@ } } }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" + }, "react-redux": { "version": "5.0.7", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.7.tgz", @@ -8254,6 +8547,20 @@ "resolved": "https://registry.npmjs.org/react-router-redux/-/react-router-redux-4.0.8.tgz", "integrity": "sha1-InQDWWtRUeGCN32rg1tdRfD4BU4=" }, + "readable-stream": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", + "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=", + "requires": { + "buffer-shims": "~1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~1.0.0", + "util-deprecate": "~1.0.1" + } + }, "redux": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.0.tgz", @@ -8288,11 +8595,52 @@ "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.2.0.tgz", "integrity": "sha1-5hWhbha0ehmlFXZhM9Hj6Zt4UuU=" }, + "require_optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "requires": { + "resolve-from": "^2.0.0", + "semver": "^5.1.0" + } + }, + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, "resolve-pathname": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==" }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "semver": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==" + }, + "sessionstore": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/sessionstore/-/sessionstore-1.3.3.tgz", + "integrity": "sha512-6DSWrLLPmenxp7r5SWM48RalJ4TjXGEshQQEVAO0KeNH4wX4fTfgHDQoUV7t/MMdXtYH5XJyoabF2qS3tzFShQ==", + "requires": { + "async": "2.6.0", + "jsondate": "0.0.1", + "lodash": "4.17.10", + "parent-require": "1.0.0", + "tolerance": "1.0.0" + } + }, "signal-windows": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/signal-windows/-/signal-windows-0.0.1.tgz", @@ -8579,11 +8927,88 @@ } } }, + "socket.io-client": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.2.0", + "to-array": "0.1.4" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "socket.io-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, "sprintf-js": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.1.tgz", "integrity": "sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw=" }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "tolerance": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tolerance/-/tolerance-1.0.0.tgz", + "integrity": "sha1-mFFo5d0TwJ3tQUrHOGb4R7QI2mw=", + "requires": { + "retry": ">=0.6.0" + } + }, "tone": { "version": "0.12.80", "resolved": "https://registry.npmjs.org/tone/-/tone-0.12.80.tgz", @@ -8594,12 +9019,35 @@ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.0.tgz", "integrity": "sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg==" }, + "uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "requires": { + "random-bytes": "~1.0.0" + } + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, "underscore": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.3.3.tgz", "integrity": "sha1-R6xTaD2vgyv6lS4XdEF9pHgXrkI=", "dev": true }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, "uuid": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", @@ -17763,11 +18211,31 @@ } } }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + }, "zerorpc": { "version": "0.9.7", "resolved": "https://registry.npmjs.org/zerorpc/-/zerorpc-0.9.7.tgz", diff --git a/package.json b/package.json index 88b86ba..2b047e2 100644 --- a/package.json +++ b/package.json @@ -30,10 +30,12 @@ "bookshelf": "^0.13.3", "bookshelf-json-columns": "^2.1.1", "compression": "^1.7.2", + "connect-mongo": "^2.0.1", "cookie-parser": "^1.4.3", "dotenv": "^5.0.1", "express": "^4.16.3", "express-json": "^1.0.0", + "express-session": "^1.15.6", "fetch-jsonp": "^1.1.3", "fft.js": "^4.0.3", "file-saver": "^1.3.8", @@ -58,6 +60,7 @@ "react-router-redux": "^4.0.8", "redux": "^4.0.0", "redux-thunk": "^2.2.0", + "sessionstore": "^1.3.3", "signal-windows": "0.0.1", "socket.io": "^2.1.1", "socket.io-client": "^2.1.1", diff --git a/public/bundle.js b/public/bundle.js index d6adf97..92ee2bf 100644 --- a/public/bundle.js +++ b/public/bundle.js @@ -220,7 +220,7 @@ function crud_fetch(type, tag) { }, show: function show(id) { - return (0, _nodeFetch2.default)(uri + id).then(function (req) { + return (0, _nodeFetch2.default)(uri + id, _get_headers(), _get_headers()).then(function (req) { return req.json(); }).catch(error); }, @@ -257,6 +257,7 @@ function _get_url(_url, data) { function _get_headers() { return { method: 'GET', + credentials: 'same-origin', headers: { 'Accept': 'application/json' } @@ -266,6 +267,7 @@ function post(data) { return { method: 'POST', body: JSON.stringify(data), + credentials: 'same-origin', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' @@ -276,6 +278,7 @@ function postBody(data) { return { method: 'POST', body: data, + credentials: 'same-origin', headers: { 'Accept': 'application/json' } @@ -285,6 +288,7 @@ function put(data) { return { method: 'PUT', body: JSON.stringify(data), + credentials: 'same-origin', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' @@ -295,6 +299,7 @@ function _destroy(data) { return { method: 'DELETE', body: JSON.stringify(data), + credentials: 'same-origin', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' @@ -1999,9 +2004,8 @@ function login(username, password) { return req.json(); }).then(function (data) { console.log(data); - dispatch(setCurrentUser(data)); + dispatch(setCurrentUser(data.user)); // dispatch(setToken(data.token)) - dispatch(checkin()); }).catch(function (error) { console.log(error); dispatch(setError(true)); @@ -2030,12 +2034,10 @@ function checkin() { fetch(api.checkin, (0, _crud.put)({})).then(function (req) { return req.json(); }).then(function (data) { - console.log(data); - dispatch(setCurrentUser(data)); - console.log('set current user'); + dispatch(setCurrentUser(data.user)); }).catch(function (error) { console.log(error); - dispatch(initialized(true)); + dispatch(initialized()); }); }; } @@ -2161,13 +2163,17 @@ var AuthGate = function (_Component2) { 'Loading' ); } - if (this.props.auth.isAuthenticated) return children; + if (this.props.auth.isAuthenticated) return (0, _preact.h)( + 'div', + null, + this.props.children + ); return (0, _preact.h)(AuthRouter, this.props); } }, { key: 'componentDidMount', value: function componentDidMount() { - this.props.actions.checkin(history); + this.props.actions.checkin(); } }]); @@ -2250,6 +2256,9 @@ var auth = function auth() { case _types2.default.auth.set_current_user: return _extends({}, state, { + loading: false, + initialized: true, + isAuthenticated: true, user: action.data, error: null }); @@ -2418,7 +2427,12 @@ var Login = function (_Component) { key: 'render', value: function render() { if (this.props.auth.isAuthenticated) { - return (0, _preact.h)(_reactRouterDom.Redirect, { to: this.props.auth.returnTo || '/' }); + var returnTo = this.props.auth.returnTo; + + if (!returnTo || returnTo.match(/(login|logout|signup)/i)) { + returnTo = '/'; + } + return (0, _preact.h)(_reactRouterDom.Redirect, { to: returnTo }); } return (0, _preact.h)( 'form', diff --git a/public/bundle.js.map b/public/bundle.js.map index d968609..f90af6b 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.destroy = undefined;\nexports.crud_fetch = crud_fetch;\nexports.post = post;\nexports.postBody = postBody;\nexports.put = put;\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}\nexports.destroy = _destroy;\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 '