diff --git a/.gitattributes b/.gitattributes
index 052fb762cc0980f648a35a422650930151858beb..ef355c5b99233d0bf2ca538a5867dcdde01e52e6 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -34,3 +34,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text
*tfevents* filter=lfs diff=lfs merge=lfs -text
video/test_video.mp4 filter=lfs diff=lfs merge=lfs -text
+masteringModule/output.wav filter=lfs diff=lfs merge=lfs -text
+masteringModule/test.wav filter=lfs diff=lfs merge=lfs -text
diff --git a/masteringModule/.gitignore b/masteringModule/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..58c0c57d73efc1d4cafebcc6529168ac1c9d3afb
--- /dev/null
+++ b/masteringModule/.gitignore
@@ -0,0 +1,81 @@
+# Created by https://www.gitignore.io/api/node
+
+### Node ###
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# TypeScript v1 declaration files
+typings/
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+
+# parcel-bundler cache (https://parceljs.org/)
+.cache
+
+# next.js build output
+.next
+
+# nuxt.js build output
+.nuxt
+
+# vuepress build output
+.vuepress/dist
+
+# Serverless directories
+.serverless
+
+
+# End of https://www.gitignore.io/api/node
+
+/output.wav
diff --git a/masteringModule/main.js b/masteringModule/main.js
new file mode 100644
index 0000000000000000000000000000000000000000..d2cd80a468ded2b52d936e945cca38de87f8d2a4
--- /dev/null
+++ b/masteringModule/main.js
@@ -0,0 +1,85 @@
+const fs = require("fs");
+const _ = require("lodash");
+const Aimastering = require('aimastering');
+const program = require('commander');
+const srs = require('secure-random-string');
+
+// parse command line arguments
+program
+ .option('-i, --input ', 'Input audio file path')
+ .option('-o, --output ', 'Output audio file path')
+ .parse(process.argv);
+if (program.input.length === 0) {
+ program.help();
+}
+
+// Call API with promise interface
+const callApiDeferred = async function (api, method) {
+ const apiArgments = Array.prototype.slice.call(arguments, 2);
+
+ return new Promise((resolve, reject) => {
+ const callback = (error, data, response) => {
+ if (error) {
+ reject(error, response);
+ } else {
+ resolve(data, response);
+ }
+ };
+ const args = _.flatten([
+ apiArgments,
+ callback
+ ]);
+
+ method.apply(api, args);
+ });
+};
+
+const sleep = async function (ms) {
+ return new Promise((resolve) => {
+ setTimeout(resolve, ms);
+ });
+};
+
+const main = async function () {
+ // configure API client
+ const client = Aimastering.ApiClient.instance;
+ const bearer = client.authentications['bearer'];
+ // bearer.apiKey = process.env.AIMASTERING_ACCESS_TOKEN;
+
+ // API key must be 'guest_' + [arbitrary string]
+ // Unless the API key is leaked, the data will not be visible to others.
+ bearer.apiKey = 'guest_' + srs({length: 32})
+
+ // create api
+ const audioApi = new Aimastering.AudioApi(client);
+ const masteringApi = new Aimastering.MasteringApi(client);
+
+ // upload input audio
+ const inputAudioData = fs.createReadStream(program.input);
+ const inputAudio = await callApiDeferred(audioApi, audioApi.createAudio, {
+ 'file': inputAudioData,
+ });
+ console.error(inputAudio);
+
+ // start mastering
+ let mastering = await callApiDeferred(masteringApi, masteringApi.createMastering, inputAudio.id, {
+ 'mode': 'default',
+ });
+ console.error(mastering);
+
+ // wait for the mastering completion
+ while (mastering.status === 'waiting' || mastering.status === 'processing') {
+ mastering = await callApiDeferred(masteringApi, masteringApi.getMastering, mastering.id);
+ console.error('waiting for the mastering completion progression: '
+ + (100 * mastering.progression).toFixed() + '%');
+ await sleep(5000);
+ }
+
+ // download output audio
+ const outputAudioData = await callApiDeferred(audioApi, audioApi.downloadAudio, mastering.output_audio_id);
+ fs.writeFileSync(program.output, outputAudioData);
+
+ console.error('the output file was written to ' + program.output);
+};
+
+main();
diff --git a/masteringModule/node_modules/.bin/mime b/masteringModule/node_modules/.bin/mime
new file mode 100644
index 0000000000000000000000000000000000000000..ea7dfc127ed0e0c3a3f895a14adfd4898dc6447d
--- /dev/null
+++ b/masteringModule/node_modules/.bin/mime
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:35c181f94e140d910d2bf4c5c4a2cb084cf76b19a2e6aff6b4b9e93dbe6f3c32
+size 290
diff --git a/masteringModule/node_modules/.bin/mime.cmd b/masteringModule/node_modules/.bin/mime.cmd
new file mode 100644
index 0000000000000000000000000000000000000000..c8cdcfe14d764464c2477d67bcd6c10fc3d907a5
--- /dev/null
+++ b/masteringModule/node_modules/.bin/mime.cmd
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cd5ca2f059e780c0a4b1aa9cdd6edc7dc10413d30bf51ad537adbd428e5e7a16
+size 316
diff --git a/masteringModule/node_modules/.bin/mime.ps1 b/masteringModule/node_modules/.bin/mime.ps1
new file mode 100644
index 0000000000000000000000000000000000000000..7fc075f176f4a4a61c6ddd29c152249a6bcef7dd
--- /dev/null
+++ b/masteringModule/node_modules/.bin/mime.ps1
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a43d8b7d57dbbb21f2f98c331970d011177fa1c6be327aa0dbb84c1ad01e9201
+size 769
diff --git a/masteringModule/node_modules/.package-lock.json b/masteringModule/node_modules/.package-lock.json
new file mode 100644
index 0000000000000000000000000000000000000000..a976e6a0e90cc7e58d099e08c49b8f9e537be532
--- /dev/null
+++ b/masteringModule/node_modules/.package-lock.json
@@ -0,0 +1,303 @@
+{
+ "name": "tutorial-node",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "node_modules/aimastering": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/aimastering/-/aimastering-1.1.0.tgz",
+ "integrity": "sha512-cxHG3nGu5E3wUDLJ8veQXSby0yVV0ZkapYrC44HC+LPmqTxbB/58w+b/uQ3i/EJQqr8JS6kVhZ6nqOUbuuJBhw==",
+ "dependencies": {
+ "superagent": "3.5.2"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "2.17.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+ "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
+ },
+ "node_modules/component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
+ },
+ "node_modules/cookiejar": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz",
+ "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA=="
+ },
+ "node_modules/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="
+ },
+ "node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "node_modules/form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/formidable": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz",
+ "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==",
+ "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau",
+ "funding": {
+ "url": "https://ko-fi.com/tunnckoCore/commissions"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
+ "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
+ "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "node_modules/methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.49.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz",
+ "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.32",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz",
+ "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==",
+ "dependencies": {
+ "mime-db": "1.49.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "node_modules/object-inspect": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
+ "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "node_modules/qs": {
+ "version": "6.10.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz",
+ "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==",
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/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=="
+ },
+ "node_modules/secure-random-string": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/secure-random-string/-/secure-random-string-1.1.3.tgz",
+ "integrity": "sha512-298HxkJJp5mjpPhxDsN26S/2JmMaUIrQ4PxDI/F4fXKRBTOKendQ5i6JCkc+a8F8koLh0vdfwSCw8+RJkY7N6A=="
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/superagent": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.5.2.tgz",
+ "integrity": "sha1-M2GjlxVnUEw1EGOr6q4PqiPb8/g=",
+ "deprecated": "Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at .",
+ "dependencies": {
+ "component-emitter": "^1.2.0",
+ "cookiejar": "^2.0.6",
+ "debug": "^2.2.0",
+ "extend": "^3.0.0",
+ "form-data": "^2.1.1",
+ "formidable": "^1.1.1",
+ "methods": "^1.1.1",
+ "mime": "^1.3.4",
+ "qs": "^6.1.0",
+ "readable-stream": "^2.0.5"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ }
+ }
+}
diff --git a/masteringModule/node_modules/aimastering/.idea/aimastering-js.iml b/masteringModule/node_modules/aimastering/.idea/aimastering-js.iml
new file mode 100644
index 0000000000000000000000000000000000000000..d6ebd4805981b8400db3e3291c74a743fef9a824
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/.idea/aimastering-js.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/masteringModule/node_modules/aimastering/.idea/misc.xml b/masteringModule/node_modules/aimastering/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28a804d8932aba40f168fd757a74cb718a955a1a
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/masteringModule/node_modules/aimastering/.idea/modules.xml b/masteringModule/node_modules/aimastering/.idea/modules.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c36f240c66c50dd48fb52ebbdb6fe8106e451697
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/masteringModule/node_modules/aimastering/.idea/vcs.xml b/masteringModule/node_modules/aimastering/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..35eb1ddfbbc029bcab630581847471d7f238ec53
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/masteringModule/node_modules/aimastering/.idea/workspace.xml b/masteringModule/node_modules/aimastering/.idea/workspace.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9f3923175e1581d2f8dff883c5ed236de9e14ebe
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/.idea/workspace.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1629329857311
+
+
+ 1629329857311
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/masteringModule/node_modules/aimastering/.swagger-codegen-ignore b/masteringModule/node_modules/aimastering/.swagger-codegen-ignore
new file mode 100644
index 0000000000000000000000000000000000000000..c5fa491b4c557bf997d5dd21797de782545dc9e5
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/.swagger-codegen-ignore
@@ -0,0 +1,23 @@
+# Swagger Codegen Ignore
+# Generated by swagger-codegen https://github.com/swagger-api/swagger-codegen
+
+# Use this file to prevent files from being overwritten by the generator.
+# The patterns follow closely to .gitignore or .dockerignore.
+
+# As an example, the C# client generator defines ApiClient.cs.
+# You can make changes and tell Swagger Codgen to ignore just this file by uncommenting the following line:
+#ApiClient.cs
+
+# You can match any string of characters against a directory, file or extension with a single asterisk (*):
+#foo/*/qux
+# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
+
+# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
+#foo/**/qux
+# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
+
+# You can also negate patterns with an exclamation (!).
+# For example, you can ignore all files in a docs folder with the file extension .md:
+#docs/*.md
+# Then explicitly reverse the ignore rule for a single file:
+#!docs/README.md
diff --git a/masteringModule/node_modules/aimastering/.swagger-codegen/VERSION b/masteringModule/node_modules/aimastering/.swagger-codegen/VERSION
new file mode 100644
index 0000000000000000000000000000000000000000..a6254504e40175d135cea7feb34ad31fa0d0bca3
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/.swagger-codegen/VERSION
@@ -0,0 +1 @@
+2.3.1
\ No newline at end of file
diff --git a/masteringModule/node_modules/aimastering/.travis.yml b/masteringModule/node_modules/aimastering/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e49f4692f7c8ca9ee3e5839187e1c68e1b6dc64c
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/.travis.yml
@@ -0,0 +1,7 @@
+language: node_js
+node_js:
+ - "6"
+ - "6.1"
+ - "5"
+ - "5.11"
+
diff --git a/masteringModule/node_modules/aimastering/README.md b/masteringModule/node_modules/aimastering/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..6792d326d00c48d40d4fec3d4d74496fa1f08b94
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/README.md
@@ -0,0 +1,222 @@
+# aimastering
+
+Aimastering - JavaScript client for aimastering
+This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+This SDK is automatically generated by the [Swagger Codegen](https://github.com/swagger-api/swagger-codegen) project:
+
+- API version: 1.0.0
+- Package version: 1.1.0
+- Build package: io.swagger.codegen.languages.JavascriptClientCodegen
+
+## Installation
+
+### For [Node.js](https://nodejs.org/)
+
+#### npm
+
+To publish the library as a [npm](https://www.npmjs.com/),
+please follow the procedure in ["Publishing npm packages"](https://docs.npmjs.com/getting-started/publishing-npm-packages).
+
+Then install it via:
+
+```shell
+npm install aimastering --save
+```
+
+##### Local development
+
+To use the library locally without publishing to a remote npm registry, first install the dependencies by changing
+into the directory containing `package.json` (and this README). Let's call this `JAVASCRIPT_CLIENT_DIR`. Then run:
+
+```shell
+npm install
+```
+
+Next, [link](https://docs.npmjs.com/cli/link) it globally in npm with the following, also from `JAVASCRIPT_CLIENT_DIR`:
+
+```shell
+npm link
+```
+
+Finally, switch to the directory you want to use your aimastering from, and run:
+
+```shell
+npm link /path/to/
+```
+
+You should now be able to `require('aimastering')` in javascript files from the directory you ran the last
+command above from.
+
+#### git
+#
+If the library is hosted at a git repository, e.g.
+https://github.com/GIT_USER_ID/GIT_REPO_ID
+then install it via:
+
+```shell
+ npm install GIT_USER_ID/GIT_REPO_ID --save
+```
+
+### For browser
+
+The library also works in the browser environment via npm and [browserify](http://browserify.org/). After following
+the above steps with Node.js and installing browserify with `npm install -g browserify`,
+perform the following (assuming *main.js* is your entry file, that's to say your javascript file where you actually
+use this library):
+
+```shell
+browserify main.js > bundle.js
+```
+
+Then include *bundle.js* in the HTML pages.
+
+### Webpack Configuration
+
+Using Webpack you may encounter the following error: "Module not found: Error:
+Cannot resolve module", most certainly you should disable AMD loader. Add/merge
+the following section to your webpack config:
+
+```javascript
+module: {
+ rules: [
+ {
+ parser: {
+ amd: false
+ }
+ }
+ ]
+}
+```
+
+## Getting Started
+
+Please follow the [installation](#installation) instruction and execute the following JS code:
+
+```javascript
+var Aimastering = require('aimastering');
+
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = "YOUR API KEY"
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix['Authorization'] = "Token"
+
+var api = new Aimastering.AccessTokenApi()
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+api.createAccessToken(callback);
+
+```
+
+## Documentation for API Endpoints
+
+All URIs are relative to *https://api.bakuage.com:443*
+
+Class | Method | HTTP request | Description
+------------ | ------------- | ------------- | -------------
+*Aimastering.AccessTokenApi* | [**createAccessToken**](docs/AccessTokenApi.md#createAccessToken) | **POST** /access_tokens | Create an API access token.
+*Aimastering.AmazonSubscriptionApi* | [**listAmazonSubscriptions**](docs/AmazonSubscriptionApi.md#listAmazonSubscriptions) | **GET** /amazon_subscriptions | Get all accessable amazon subscriptions.
+*Aimastering.AudioApi* | [**createAudio**](docs/AudioApi.md#createAudio) | **POST** /audios | Create a new audio.
+*Aimastering.AudioApi* | [**downloadAudio**](docs/AudioApi.md#downloadAudio) | **GET** /audios/{id}/download | Download an audio data by id.
+*Aimastering.AudioApi* | [**downloadAudioByToken**](docs/AudioApi.md#downloadAudioByToken) | **GET** /audios/download_by_token | Download an audio data by audio_download_token.
+*Aimastering.AudioApi* | [**getAudio**](docs/AudioApi.md#getAudio) | **GET** /audios/{id} | Get an audio by id.
+*Aimastering.AudioApi* | [**getAudioAnalysis**](docs/AudioApi.md#getAudioAnalysis) | **GET** /audios/{id}/analysis | Get an audio analysis by id.
+*Aimastering.AudioApi* | [**getAudioDownloadToken**](docs/AudioApi.md#getAudioDownloadToken) | **GET** /audios/{id}/download_token | Get an audio download token by id.
+*Aimastering.AudioApi* | [**listAudios**](docs/AudioApi.md#listAudios) | **GET** /audios | Get all audios accessable.
+*Aimastering.ConfigApi* | [**getConfig**](docs/ConfigApi.md#getConfig) | **GET** /config | Get config.
+*Aimastering.ExternalSearchApi* | [**searchExternal**](docs/ExternalSearchApi.md#searchExternal) | **GET** /external_search | Search external music and get name, url, thumbnails, etc.
+*Aimastering.LibraryAudioApi* | [**createLibraryAudio**](docs/LibraryAudioApi.md#createLibraryAudio) | **POST** /library_audios | Create a new library audio.
+*Aimastering.LibraryAudioApi* | [**createLibraryAudioLike**](docs/LibraryAudioApi.md#createLibraryAudioLike) | **POST** /library_audios/{id}/like | Create a new library audio like.
+*Aimastering.LibraryAudioApi* | [**deleteLibraryAudio**](docs/LibraryAudioApi.md#deleteLibraryAudio) | **DELETE** /library_audios/{id} | Delete library audio.
+*Aimastering.LibraryAudioApi* | [**getLibraryAudio**](docs/LibraryAudioApi.md#getLibraryAudio) | **GET** /library_audios/{id} | Get a library audio by id.
+*Aimastering.LibraryAudioApi* | [**getLibraryAudioAnalysis**](docs/LibraryAudioApi.md#getLibraryAudioAnalysis) | **GET** /library_audios/{id}/analysis | Get a library audio analysis by id.
+*Aimastering.LibraryAudioApi* | [**listLibraryAudios**](docs/LibraryAudioApi.md#listLibraryAudios) | **GET** /library_audios | Get all library audios accessable.
+*Aimastering.LibraryAudioApi* | [**updateLibraryAudio**](docs/LibraryAudioApi.md#updateLibraryAudio) | **PUT** /library_audios/{id} | Update library audio.
+*Aimastering.MasteringApi* | [**cancelMastering**](docs/MasteringApi.md#cancelMastering) | **PUT** /masterings/{id}/cancel | Cancel a mastering by id.
+*Aimastering.MasteringApi* | [**createMastering**](docs/MasteringApi.md#createMastering) | **POST** /masterings | Create a new mastering.
+*Aimastering.MasteringApi* | [**deleteMastering**](docs/MasteringApi.md#deleteMastering) | **DELETE** /masterings/{id} | Delete mastering.
+*Aimastering.MasteringApi* | [**freeUnlockMastering**](docs/MasteringApi.md#freeUnlockMastering) | **PUT** /masterings/{id}/free_unlock | Free unlock a mastering by id.
+*Aimastering.MasteringApi* | [**getMastering**](docs/MasteringApi.md#getMastering) | **GET** /masterings/{id} | Get a mastering by id.
+*Aimastering.MasteringApi* | [**getMasteringUnlockProduct**](docs/MasteringApi.md#getMasteringUnlockProduct) | **GET** /masterings/{id}/unlock_product | Review a mastering by id.
+*Aimastering.MasteringApi* | [**listMasterings**](docs/MasteringApi.md#listMasterings) | **GET** /masterings | Get all accessable masterings.
+*Aimastering.MasteringApi* | [**publishMastering**](docs/MasteringApi.md#publishMastering) | **POST** /masterings/{id}/publish | Publish a mastering by id.
+*Aimastering.MasteringApi* | [**reviewMastering**](docs/MasteringApi.md#reviewMastering) | **PUT** /masterings/{id}/review | Review a mastering by id.
+*Aimastering.MasteringApi* | [**updateMastering**](docs/MasteringApi.md#updateMastering) | **PUT** /masterings/{id} | Update a mastering.
+*Aimastering.PaymentApi* | [**createPayment**](docs/PaymentApi.md#createPayment) | **POST** /payments | Create a new payment.
+*Aimastering.PaymentApi* | [**executePayment**](docs/PaymentApi.md#executePayment) | **PUT** /payments/{id}/execute | Execute a payment by id.
+*Aimastering.PaymentApi* | [**getPayment**](docs/PaymentApi.md#getPayment) | **GET** /payments/{id} | Get a payment by id.
+*Aimastering.PaymentApi* | [**listPayments**](docs/PaymentApi.md#listPayments) | **GET** /payments | Get all accessable payments.
+*Aimastering.PaymentCustomerApi* | [**getDefaultPaymentCustomer**](docs/PaymentCustomerApi.md#getDefaultPaymentCustomer) | **GET** /payment_customers/default | Get a default payment customer.
+*Aimastering.PlanApi* | [**listPlans**](docs/PlanApi.md#listPlans) | **GET** /plans | Get all accessable plans.
+*Aimastering.SpSubscriptionApi* | [**createSpSubscription**](docs/SpSubscriptionApi.md#createSpSubscription) | **POST** /sp_subscriptions | Create a new smartphone subscription.
+*Aimastering.SpSubscriptionApi* | [**listSpSubscriptions**](docs/SpSubscriptionApi.md#listSpSubscriptions) | **GET** /sp_subscriptions | Get all accessable smartphone subscriptions.
+*Aimastering.StatisticsApi* | [**getGroupBuyStatistics**](docs/StatisticsApi.md#getGroupBuyStatistics) | **GET** /statistics/group_buy | Get group buy statistics.
+*Aimastering.StatisticsApi* | [**listAnonymizedMasterings**](docs/StatisticsApi.md#listAnonymizedMasterings) | **GET** /statistics/anonymized_masterings | Get anonymized masterings.
+*Aimastering.StatisticsApi* | [**listKpis**](docs/StatisticsApi.md#listKpis) | **GET** /statistics/kpis | Get KPIs.
+*Aimastering.SubscriptionApi* | [**cancelSubscription**](docs/SubscriptionApi.md#cancelSubscription) | **PUT** /subscriptions/{id}/cancel | Cancel a subscription by id.
+*Aimastering.SubscriptionApi* | [**cancelSubscriptionCancellation**](docs/SubscriptionApi.md#cancelSubscriptionCancellation) | **PUT** /subscriptions/{id}/cancel_cancellation | Cancel the subscription cancellation by id.
+*Aimastering.SubscriptionApi* | [**createSubscription**](docs/SubscriptionApi.md#createSubscription) | **POST** /subscriptions | Create a new subscription.
+*Aimastering.SubscriptionApi* | [**getSubscription**](docs/SubscriptionApi.md#getSubscription) | **GET** /subscriptions/{id} | Get a subscription by id.
+*Aimastering.SubscriptionApi* | [**listSubscriptions**](docs/SubscriptionApi.md#listSubscriptions) | **GET** /subscriptions | Get all accessable subscriptions.
+*Aimastering.UserApi* | [**getSelf**](docs/UserApi.md#getSelf) | **GET** /users/self | Get self user.
+*Aimastering.UserApi* | [**notifyRegistration**](docs/UserApi.md#notifyRegistration) | **PUT** /users/self/notify_registration | Notify user is registered.
+*Aimastering.UserApi* | [**sendInvitation**](docs/UserApi.md#sendInvitation) | **POST** /users/self/send_invitation | Send invitation.
+*Aimastering.UserApi* | [**updateSelf**](docs/UserApi.md#updateSelf) | **PUT** /users/self | Update self user.
+*Aimastering.VideoApi* | [**downloadVideo**](docs/VideoApi.md#downloadVideo) | **GET** /videos/{id}/download | Download an video data by id.
+*Aimastering.VideoApi* | [**downloadVideoByToken**](docs/VideoApi.md#downloadVideoByToken) | **GET** /videos/download_by_token | Download an video data by video_download_token.
+*Aimastering.VideoApi* | [**getVideo**](docs/VideoApi.md#getVideo) | **GET** /videos/{id} | Get an video by id.
+*Aimastering.VideoApi* | [**getVideoDownloadToken**](docs/VideoApi.md#getVideoDownloadToken) | **GET** /videos/{id}/download_token | Get an video download token by id.
+*Aimastering.VideoApi* | [**listVideos**](docs/VideoApi.md#listVideos) | **GET** /videos | Get all videos accessable.
+
+
+## Documentation for Models
+
+ - [Aimastering.AccessToken](docs/AccessToken.md)
+ - [Aimastering.AmazonSubscription](docs/AmazonSubscription.md)
+ - [Aimastering.AnonymizedMastering](docs/AnonymizedMastering.md)
+ - [Aimastering.Audio](docs/Audio.md)
+ - [Aimastering.AudioAnalysis](docs/AudioAnalysis.md)
+ - [Aimastering.AudioDownloadToken](docs/AudioDownloadToken.md)
+ - [Aimastering.Config](docs/Config.md)
+ - [Aimastering.ConfigAuth0](docs/ConfigAuth0.md)
+ - [Aimastering.ConfigPaypal](docs/ConfigPaypal.md)
+ - [Aimastering.ConfigStripe](docs/ConfigStripe.md)
+ - [Aimastering.ConfigVersion](docs/ConfigVersion.md)
+ - [Aimastering.ExternalSearchResult](docs/ExternalSearchResult.md)
+ - [Aimastering.ExternalSearchResultItunes](docs/ExternalSearchResultItunes.md)
+ - [Aimastering.ExternalSearchResultYoutube](docs/ExternalSearchResultYoutube.md)
+ - [Aimastering.GroupBuyStatistics](docs/GroupBuyStatistics.md)
+ - [Aimastering.JWT](docs/JWT.md)
+ - [Aimastering.Kpi](docs/Kpi.md)
+ - [Aimastering.LibraryAudio](docs/LibraryAudio.md)
+ - [Aimastering.LibraryAudioAnalysis](docs/LibraryAudioAnalysis.md)
+ - [Aimastering.LibraryAudioLike](docs/LibraryAudioLike.md)
+ - [Aimastering.Mastering](docs/Mastering.md)
+ - [Aimastering.Payment](docs/Payment.md)
+ - [Aimastering.PaymentCustomer](docs/PaymentCustomer.md)
+ - [Aimastering.Plan](docs/Plan.md)
+ - [Aimastering.SpSubscription](docs/SpSubscription.md)
+ - [Aimastering.Subscription](docs/Subscription.md)
+ - [Aimastering.User](docs/User.md)
+ - [Aimastering.UserStatistics](docs/UserStatistics.md)
+ - [Aimastering.Video](docs/Video.md)
+ - [Aimastering.VideoDownloadToken](docs/VideoDownloadToken.md)
+
+
+## Documentation for Authorization
+
+
+### bearer
+
+- **Type**: API key
+- **API key parameter name**: Authorization
+- **Location**: HTTP header
+
diff --git a/masteringModule/node_modules/aimastering/docs/AccessToken.md b/masteringModule/node_modules/aimastering/docs/AccessToken.md
new file mode 100644
index 0000000000000000000000000000000000000000..31e5cae87c7ed16969bc167ad950d052d038f2c8
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/AccessToken.md
@@ -0,0 +1,8 @@
+# Aimastering.AccessToken
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**accessToken** | [**JWT**](JWT.md) | | [optional]
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/AccessTokenApi.md b/masteringModule/node_modules/aimastering/docs/AccessTokenApi.md
new file mode 100644
index 0000000000000000000000000000000000000000..a2d07e7da37d8fb4b802b7ee0685eeea4d74a45e
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/AccessTokenApi.md
@@ -0,0 +1,54 @@
+# Aimastering.AccessTokenApi
+
+All URIs are relative to *https://api.bakuage.com:443*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**createAccessToken**](AccessTokenApi.md#createAccessToken) | **POST** /access_tokens | Create an API access token.
+
+
+
+# **createAccessToken**
+> AccessToken createAccessToken()
+
+Create an API access token.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.AccessTokenApi();
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.createAccessToken(callback);
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**AccessToken**](AccessToken.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
diff --git a/masteringModule/node_modules/aimastering/docs/AmazonSubscription.md b/masteringModule/node_modules/aimastering/docs/AmazonSubscription.md
new file mode 100644
index 0000000000000000000000000000000000000000..e6485e65285f038b442bf50ace5518267c33f934
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/AmazonSubscription.md
@@ -0,0 +1,23 @@
+# Aimastering.AmazonSubscription
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **Number** | | [optional]
+**userId** | **Number** | | [optional]
+**status** | **String** | | [optional]
+**createdAt** | **Date** | | [optional]
+**updatedAt** | **Date** | | [optional]
+
+
+
+## Enum: StatusEnum
+
+
+* `active` (value: `"active"`)
+
+* `deactivated` (value: `"deactivated"`)
+
+
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/AmazonSubscriptionApi.md b/masteringModule/node_modules/aimastering/docs/AmazonSubscriptionApi.md
new file mode 100644
index 0000000000000000000000000000000000000000..ac1944527453f57917674089e1277de1ca2aad29
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/AmazonSubscriptionApi.md
@@ -0,0 +1,54 @@
+# Aimastering.AmazonSubscriptionApi
+
+All URIs are relative to *https://api.bakuage.com:443*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**listAmazonSubscriptions**](AmazonSubscriptionApi.md#listAmazonSubscriptions) | **GET** /amazon_subscriptions | Get all accessable amazon subscriptions.
+
+
+
+# **listAmazonSubscriptions**
+> [AmazonSubscription] listAmazonSubscriptions()
+
+Get all accessable amazon subscriptions.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.AmazonSubscriptionApi();
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.listAmazonSubscriptions(callback);
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**[AmazonSubscription]**](AmazonSubscription.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
diff --git a/masteringModule/node_modules/aimastering/docs/AnonymizedMastering.md b/masteringModule/node_modules/aimastering/docs/AnonymizedMastering.md
new file mode 100644
index 0000000000000000000000000000000000000000..afdbd1c4d2c7467c341d7f2c379cc5358ebff9e3
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/AnonymizedMastering.md
@@ -0,0 +1,107 @@
+# Aimastering.AnonymizedMastering
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**userId** | **String** | | [optional]
+**userAuthProvider** | **String** | | [optional]
+**mode** | **String** | | [optional]
+**status** | **String** | | [optional]
+**failureReason** | **String** | | [optional]
+**targetLoudness** | **Number** | | [optional]
+**outputFormat** | **String** | | [optional]
+**preset** | **String** | | [optional]
+**bitDepth** | **Number** | | [optional]
+**sampleRate** | **Number** | | [optional]
+**reviewScore** | **Number** | | [optional]
+**masteringMatchingLevel** | **Number** | | [optional]
+**mastering** | **Boolean** | | [optional]
+**paid** | **Boolean** | | [optional]
+**paymentService** | **String** | | [optional]
+**retryCount** | **Number** | | [optional]
+**masteringReverb** | **Boolean** | | [optional]
+**masteringReverbGain** | **Number** | | [optional]
+**lowCutFreq** | **Number** | | [optional]
+**highCutFreq** | **Number** | | [optional]
+**createdAt** | **Date** | | [optional]
+**updatedAt** | **Date** | | [optional]
+
+
+
+## Enum: ModeEnum
+
+
+* `default` (value: `"default"`)
+
+* `custom` (value: `"custom"`)
+
+
+
+
+
+## Enum: StatusEnum
+
+
+* `waiting` (value: `"waiting"`)
+
+* `processing` (value: `"processing"`)
+
+* `canceled` (value: `"canceled"`)
+
+* `failed` (value: `"failed"`)
+
+* `succeeded` (value: `"succeeded"`)
+
+
+
+
+
+## Enum: FailureReasonEnum
+
+
+* `unknown` (value: `"unknown"`)
+
+* `expired` (value: `"expired"`)
+
+* `failed_to_prepare` (value: `"failed_to_prepare"`)
+
+
+
+
+
+## Enum: OutputFormatEnum
+
+
+* `wav` (value: `"wav"`)
+
+* `mp3` (value: `"mp3"`)
+
+
+
+
+
+## Enum: PresetEnum
+
+
+* `general` (value: `"general"`)
+
+* `pop` (value: `"pop"`)
+
+* `jazz` (value: `"jazz"`)
+
+* `classical` (value: `"classical"`)
+
+
+
+
+
+## Enum: PaymentServiceEnum
+
+
+* `paypal` (value: `"paypal"`)
+
+* `stripe` (value: `"stripe"`)
+
+
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/Audio.md b/masteringModule/node_modules/aimastering/docs/Audio.md
new file mode 100644
index 0000000000000000000000000000000000000000..6b8b87604b94a3300a75c2f745625db76d5ec3af
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/Audio.md
@@ -0,0 +1,33 @@
+# Aimastering.Audio
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **Number** | | [optional]
+**fileResourceId** | **Number** | | [optional]
+**userId** | **Number** | | [optional]
+**name** | **String** | | [optional]
+**createdByUser** | **Boolean** | | [optional]
+**status** | **String** | | [optional]
+**failureReason** | **String** | | [optional]
+**probeJson** | **String** | | [optional]
+**rms** | **Number** | | [optional]
+**peak** | **Number** | | [optional]
+**truePeak** | **Number** | | [optional]
+**lowpassTruePeak15khz** | **Number** | | [optional]
+**loudness** | **Number** | | [optional]
+**dynamics** | **Number** | | [optional]
+**sharpness** | **Number** | | [optional]
+**space** | **Number** | | [optional]
+**loudnessRange** | **Number** | | [optional]
+**drr** | **Number** | | [optional]
+**soundQuality** | **Number** | | [optional]
+**soundQuality2** | **Number** | | [optional]
+**dissonance** | **Number** | | [optional]
+**frames** | **Number** | | [optional]
+**sampleRate** | **Number** | | [optional]
+**channels** | **Number** | | [optional]
+**createdAt** | **Date** | | [optional]
+**updatedAt** | **Date** | | [optional]
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/AudioAnalysis.md b/masteringModule/node_modules/aimastering/docs/AudioAnalysis.md
new file mode 100644
index 0000000000000000000000000000000000000000..e6f4a1399fc62e4582fe4e09c203d8d3aa60e4b4
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/AudioAnalysis.md
@@ -0,0 +1,10 @@
+# Aimastering.AudioAnalysis
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **Number** | Audio analysis id | [optional]
+**audioId** | **Number** | Audio id | [optional]
+**analysis** | **Object** | Audio analysis data. The schema changes frequently. | [optional]
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/AudioApi.md b/masteringModule/node_modules/aimastering/docs/AudioApi.md
new file mode 100644
index 0000000000000000000000000000000000000000..392c52a9c316708c6fc41190a866f94d155fd3b4
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/AudioApi.md
@@ -0,0 +1,369 @@
+# Aimastering.AudioApi
+
+All URIs are relative to *https://api.bakuage.com:443*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**createAudio**](AudioApi.md#createAudio) | **POST** /audios | Create a new audio.
+[**downloadAudio**](AudioApi.md#downloadAudio) | **GET** /audios/{id}/download | Download an audio data by id.
+[**downloadAudioByToken**](AudioApi.md#downloadAudioByToken) | **GET** /audios/download_by_token | Download an audio data by audio_download_token.
+[**getAudio**](AudioApi.md#getAudio) | **GET** /audios/{id} | Get an audio by id.
+[**getAudioAnalysis**](AudioApi.md#getAudioAnalysis) | **GET** /audios/{id}/analysis | Get an audio analysis by id.
+[**getAudioDownloadToken**](AudioApi.md#getAudioDownloadToken) | **GET** /audios/{id}/download_token | Get an audio download token by id.
+[**listAudios**](AudioApi.md#listAudios) | **GET** /audios | Get all audios accessable.
+
+
+
+# **createAudio**
+> Audio createAudio(opts)
+
+Create a new audio.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.AudioApi();
+
+var opts = {
+ 'file': "/path/to/file.txt", // File | The file to upload.
+ 'name': "name_example" // String | Audio name. If this is not specified, the name in file parameter is used.
+};
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.createAudio(opts, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **file** | **File**| The file to upload. | [optional]
+ **name** | **String**| Audio name. If this is not specified, the name in file parameter is used. | [optional]
+
+### Return type
+
+[**Audio**](Audio.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
+
+# **downloadAudio**
+> 'Blob' downloadAudio(id)
+
+Download an audio data by id.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.AudioApi();
+
+var id = 56; // Number | Audio id
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.downloadAudio(id, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Audio id |
+
+### Return type
+
+**'Blob'**
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/octet-stream
+
+
+# **downloadAudioByToken**
+> 'Blob' downloadAudioByToken(downloadToken)
+
+Download an audio data by audio_download_token.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.AudioApi();
+
+var downloadToken = "downloadToken_example"; // String | Audio download token
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.downloadAudioByToken(downloadToken, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **downloadToken** | **String**| Audio download token |
+
+### Return type
+
+**'Blob'**
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/octet-stream
+
+
+# **getAudio**
+> Audio getAudio(id)
+
+Get an audio by id.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.AudioApi();
+
+var id = 56; // Number | Audio id
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.getAudio(id, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Audio id |
+
+### Return type
+
+[**Audio**](Audio.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+# **getAudioAnalysis**
+> AudioAnalysis getAudioAnalysis(id)
+
+Get an audio analysis by id.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.AudioApi();
+
+var id = 56; // Number | Audio id
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.getAudioAnalysis(id, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Audio id |
+
+### Return type
+
+[**AudioAnalysis**](AudioAnalysis.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+# **getAudioDownloadToken**
+> AudioDownloadToken getAudioDownloadToken(id)
+
+Get an audio download token by id.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.AudioApi();
+
+var id = 56; // Number | Audio id
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.getAudioDownloadToken(id, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Audio id |
+
+### Return type
+
+[**AudioDownloadToken**](AudioDownloadToken.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+# **listAudios**
+> [Audio] listAudios()
+
+Get all audios accessable.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.AudioApi();
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.listAudios(callback);
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**[Audio]**](Audio.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
diff --git a/masteringModule/node_modules/aimastering/docs/AudioDownloadToken.md b/masteringModule/node_modules/aimastering/docs/AudioDownloadToken.md
new file mode 100644
index 0000000000000000000000000000000000000000..9115a508bbfc7e0db3614a2f81d2582702aad01d
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/AudioDownloadToken.md
@@ -0,0 +1,9 @@
+# Aimastering.AudioDownloadToken
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**downloadToken** | [**JWT**](JWT.md) | | [optional]
+**downloadUrl** | **String** | | [optional]
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/Config.md b/masteringModule/node_modules/aimastering/docs/Config.md
new file mode 100644
index 0000000000000000000000000000000000000000..bc109b57ef1719b2324fa0b1cc31f6148ab0e53f
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/Config.md
@@ -0,0 +1,11 @@
+# Aimastering.Config
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**auth0** | [**ConfigAuth0**](ConfigAuth0.md) | | [optional]
+**paypal** | [**ConfigPaypal**](ConfigPaypal.md) | | [optional]
+**stripe** | [**ConfigStripe**](ConfigStripe.md) | | [optional]
+**version** | [**ConfigVersion**](ConfigVersion.md) | | [optional]
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/ConfigApi.md b/masteringModule/node_modules/aimastering/docs/ConfigApi.md
new file mode 100644
index 0000000000000000000000000000000000000000..450cd2bac5ad79727376ebf553c5c9a653e99b77
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/ConfigApi.md
@@ -0,0 +1,54 @@
+# Aimastering.ConfigApi
+
+All URIs are relative to *https://api.bakuage.com:443*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**getConfig**](ConfigApi.md#getConfig) | **GET** /config | Get config.
+
+
+
+# **getConfig**
+> Config getConfig()
+
+Get config.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.ConfigApi();
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.getConfig(callback);
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**Config**](Config.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
diff --git a/masteringModule/node_modules/aimastering/docs/ConfigAuth0.md b/masteringModule/node_modules/aimastering/docs/ConfigAuth0.md
new file mode 100644
index 0000000000000000000000000000000000000000..9055b7d03ab168436f1e98083f9c7be042f4a98b
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/ConfigAuth0.md
@@ -0,0 +1,10 @@
+# Aimastering.ConfigAuth0
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**audience** | **String** | | [optional]
+**domain** | **String** | | [optional]
+**clientId** | **String** | | [optional]
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/ConfigPaypal.md b/masteringModule/node_modules/aimastering/docs/ConfigPaypal.md
new file mode 100644
index 0000000000000000000000000000000000000000..201f3f35891c28f22eab3e738a6a1a2d6cd4ef26
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/ConfigPaypal.md
@@ -0,0 +1,9 @@
+# Aimastering.ConfigPaypal
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**mode** | **String** | | [optional]
+**clientId** | **String** | | [optional]
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/ConfigStripe.md b/masteringModule/node_modules/aimastering/docs/ConfigStripe.md
new file mode 100644
index 0000000000000000000000000000000000000000..5c0be73da79c5753d05623e5b1386e1e322292cf
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/ConfigStripe.md
@@ -0,0 +1,8 @@
+# Aimastering.ConfigStripe
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**publishableKey** | **String** | | [optional]
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/ConfigVersion.md b/masteringModule/node_modules/aimastering/docs/ConfigVersion.md
new file mode 100644
index 0000000000000000000000000000000000000000..b2edeb5f5a383bdbd14aa762fb11872e22e84d88
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/ConfigVersion.md
@@ -0,0 +1,8 @@
+# Aimastering.ConfigVersion
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**commit** | **String** | | [optional]
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/ExternalSearchApi.md b/masteringModule/node_modules/aimastering/docs/ExternalSearchApi.md
new file mode 100644
index 0000000000000000000000000000000000000000..44bce0c0dd858cc05d7fb86a71b6d8dc77cb6d30
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/ExternalSearchApi.md
@@ -0,0 +1,63 @@
+# Aimastering.ExternalSearchApi
+
+All URIs are relative to *https://api.bakuage.com:443*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**searchExternal**](ExternalSearchApi.md#searchExternal) | **GET** /external_search | Search external music and get name, url, thumbnails, etc.
+
+
+
+# **searchExternal**
+> ExternalSearchResult searchExternal(query, country)
+
+Search external music and get name, url, thumbnails, etc.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.ExternalSearchApi();
+
+var query = "query_example"; // String | Search query
+
+var country = "country_example"; // String | Country ex. US, JP, etc
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.searchExternal(query, country, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **query** | **String**| Search query |
+ **country** | **String**| Country ex. US, JP, etc |
+
+### Return type
+
+[**ExternalSearchResult**](ExternalSearchResult.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
diff --git a/masteringModule/node_modules/aimastering/docs/ExternalSearchResult.md b/masteringModule/node_modules/aimastering/docs/ExternalSearchResult.md
new file mode 100644
index 0000000000000000000000000000000000000000..f952f60c74daf51412c345d24c2b099f42266750
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/ExternalSearchResult.md
@@ -0,0 +1,9 @@
+# Aimastering.ExternalSearchResult
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**itunes** | [**[ExternalSearchResultItunes]**](ExternalSearchResultItunes.md) | | [optional]
+**youtube** | [**[ExternalSearchResultYoutube]**](ExternalSearchResultYoutube.md) | | [optional]
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/ExternalSearchResultItunes.md b/masteringModule/node_modules/aimastering/docs/ExternalSearchResultItunes.md
new file mode 100644
index 0000000000000000000000000000000000000000..a31721565d759d59cebfd07388efcc848bd6254f
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/ExternalSearchResultItunes.md
@@ -0,0 +1,18 @@
+# Aimastering.ExternalSearchResultItunes
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **String** | | [optional]
+**name** | **String** | | [optional]
+**description** | **String** | | [optional]
+**url** | **String** | | [optional]
+**thumbnailUrl** | **String** | | [optional]
+**previewUrl** | **String** | | [optional]
+**albumName** | **String** | | [optional]
+**albumUrl** | **String** | | [optional]
+**artistName** | **String** | | [optional]
+**artistUrl** | **String** | | [optional]
+**trackNumber** | **Number** | | [optional]
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/ExternalSearchResultYoutube.md b/masteringModule/node_modules/aimastering/docs/ExternalSearchResultYoutube.md
new file mode 100644
index 0000000000000000000000000000000000000000..62ed7c1984b4e3afbdc46c65dec1629794b56aca
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/ExternalSearchResultYoutube.md
@@ -0,0 +1,15 @@
+# Aimastering.ExternalSearchResultYoutube
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **String** | | [optional]
+**name** | **String** | | [optional]
+**description** | **String** | | [optional]
+**url** | **String** | | [optional]
+**thumbnailUrl** | **String** | | [optional]
+**channelId** | **String** | | [optional]
+**channelUrl** | **String** | | [optional]
+**channelName** | **String** | | [optional]
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/GroupBuyStatistics.md b/masteringModule/node_modules/aimastering/docs/GroupBuyStatistics.md
new file mode 100644
index 0000000000000000000000000000000000000000..244864d830b3aa36614e452ee2b17e343c5a6025
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/GroupBuyStatistics.md
@@ -0,0 +1,8 @@
+# Aimastering.GroupBuyStatistics
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**premiumPlanSubscribedUserCount** | **Number** | | [optional]
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/JWT.md b/masteringModule/node_modules/aimastering/docs/JWT.md
new file mode 100644
index 0000000000000000000000000000000000000000..bdb903100ba9c98fd294cd22d501dcf741c4f572
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/JWT.md
@@ -0,0 +1,7 @@
+# Aimastering.JWT
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/Kpi.md b/masteringModule/node_modules/aimastering/docs/Kpi.md
new file mode 100644
index 0000000000000000000000000000000000000000..4c0605c8b5dcb4a2a756d8d9ed2af9909d8437e7
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/Kpi.md
@@ -0,0 +1,7 @@
+# Aimastering.Kpi
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/LibraryAudio.md b/masteringModule/node_modules/aimastering/docs/LibraryAudio.md
new file mode 100644
index 0000000000000000000000000000000000000000..a582a1f9570a4f7aac481cbad07ee5699141cda2
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/LibraryAudio.md
@@ -0,0 +1,42 @@
+# Aimastering.LibraryAudio
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **Number** | | [optional]
+**userId** | **Number** | | [optional]
+**name** | **String** | | [optional]
+**album** | **String** | | [optional]
+**albumArtist** | **String** | | [optional]
+**artist** | **String** | | [optional]
+**genre** | **String** | | [optional]
+**track** | **Number** | | [optional]
+**publisher** | **String** | | [optional]
+**fileHash** | **String** | | [optional]
+**size** | **Number** | | [optional]
+**status** | **String** | | [optional]
+**failureReason** | **String** | | [optional]
+**probeJson** | **String** | | [optional]
+**rms** | **Number** | | [optional]
+**peak** | **Number** | | [optional]
+**truePeak** | **Number** | | [optional]
+**lowpassTruePeak15khz** | **Number** | | [optional]
+**loudness** | **Number** | | [optional]
+**dynamics** | **Number** | | [optional]
+**sharpness** | **Number** | | [optional]
+**space** | **Number** | | [optional]
+**loudnessRange** | **Number** | | [optional]
+**drr** | **Number** | | [optional]
+**soundQuality** | **Number** | | [optional]
+**soundQuality2** | **Number** | | [optional]
+**dissonance** | **Number** | | [optional]
+**frames** | **Number** | | [optional]
+**sampleRate** | **Number** | | [optional]
+**channels** | **Number** | | [optional]
+**isPublic** | **Boolean** | | [optional]
+**likedBySelf** | **Boolean** | | [optional]
+**likeCount** | **Number** | | [optional]
+**createdAt** | **Date** | | [optional]
+**updatedAt** | **Date** | | [optional]
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/LibraryAudioAnalysis.md b/masteringModule/node_modules/aimastering/docs/LibraryAudioAnalysis.md
new file mode 100644
index 0000000000000000000000000000000000000000..a8520afa88c38777ad94114f0f0ce20ec41adde3
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/LibraryAudioAnalysis.md
@@ -0,0 +1,10 @@
+# Aimastering.LibraryAudioAnalysis
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **Number** | Audio analysis id | [optional]
+**libraryAudioId** | **Number** | Audio id | [optional]
+**analysis** | **Object** | Audio analysis data. The schema changes frequently. | [optional]
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/LibraryAudioApi.md b/masteringModule/node_modules/aimastering/docs/LibraryAudioApi.md
new file mode 100644
index 0000000000000000000000000000000000000000..4565922b3094f644b198b091d814f9de710d99ed
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/LibraryAudioApi.md
@@ -0,0 +1,371 @@
+# Aimastering.LibraryAudioApi
+
+All URIs are relative to *https://api.bakuage.com:443*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**createLibraryAudio**](LibraryAudioApi.md#createLibraryAudio) | **POST** /library_audios | Create a new library audio.
+[**createLibraryAudioLike**](LibraryAudioApi.md#createLibraryAudioLike) | **POST** /library_audios/{id}/like | Create a new library audio like.
+[**deleteLibraryAudio**](LibraryAudioApi.md#deleteLibraryAudio) | **DELETE** /library_audios/{id} | Delete library audio.
+[**getLibraryAudio**](LibraryAudioApi.md#getLibraryAudio) | **GET** /library_audios/{id} | Get a library audio by id.
+[**getLibraryAudioAnalysis**](LibraryAudioApi.md#getLibraryAudioAnalysis) | **GET** /library_audios/{id}/analysis | Get a library audio analysis by id.
+[**listLibraryAudios**](LibraryAudioApi.md#listLibraryAudios) | **GET** /library_audios | Get all library audios accessable.
+[**updateLibraryAudio**](LibraryAudioApi.md#updateLibraryAudio) | **PUT** /library_audios/{id} | Update library audio.
+
+
+
+# **createLibraryAudio**
+> LibraryAudio createLibraryAudio(opts)
+
+Create a new library audio.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.LibraryAudioApi();
+
+var opts = {
+ 'file': "/path/to/file.txt" // File | The file to upload.
+};
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.createLibraryAudio(opts, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **file** | **File**| The file to upload. | [optional]
+
+### Return type
+
+[**LibraryAudio**](LibraryAudio.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
+
+# **createLibraryAudioLike**
+> LibraryAudioLike createLibraryAudioLike(id)
+
+Create a new library audio like.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.LibraryAudioApi();
+
+var id = 56; // Number | Library audio id
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.createLibraryAudioLike(id, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Library audio id |
+
+### Return type
+
+[**LibraryAudioLike**](LibraryAudioLike.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
+
+# **deleteLibraryAudio**
+> LibraryAudio deleteLibraryAudio(id)
+
+Delete library audio.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.LibraryAudioApi();
+
+var id = 56; // Number | Library audio id
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.deleteLibraryAudio(id, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Library audio id |
+
+### Return type
+
+[**LibraryAudio**](LibraryAudio.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
+
+# **getLibraryAudio**
+> LibraryAudio getLibraryAudio(id)
+
+Get a library audio by id.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.LibraryAudioApi();
+
+var id = 56; // Number | Library audio id
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.getLibraryAudio(id, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Library audio id |
+
+### Return type
+
+[**LibraryAudio**](LibraryAudio.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+# **getLibraryAudioAnalysis**
+> LibraryAudioAnalysis getLibraryAudioAnalysis(id)
+
+Get a library audio analysis by id.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.LibraryAudioApi();
+
+var id = 56; // Number | Library audio id
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.getLibraryAudioAnalysis(id, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Library audio id |
+
+### Return type
+
+[**LibraryAudioAnalysis**](LibraryAudioAnalysis.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+# **listLibraryAudios**
+> [LibraryAudio] listLibraryAudios()
+
+Get all library audios accessable.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.LibraryAudioApi();
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.listLibraryAudios(callback);
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**[LibraryAudio]**](LibraryAudio.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+# **updateLibraryAudio**
+> LibraryAudio updateLibraryAudio(id, opts)
+
+Update library audio.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.LibraryAudioApi();
+
+var id = 56; // Number | Library audio id
+
+var opts = {
+ 'isPublic': true // Boolean | Whether the library audio is public.
+};
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.updateLibraryAudio(id, opts, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Library audio id |
+ **isPublic** | **Boolean**| Whether the library audio is public. | [optional]
+
+### Return type
+
+[**LibraryAudio**](LibraryAudio.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
diff --git a/masteringModule/node_modules/aimastering/docs/LibraryAudioLike.md b/masteringModule/node_modules/aimastering/docs/LibraryAudioLike.md
new file mode 100644
index 0000000000000000000000000000000000000000..180854e87d3f2a58fb8acccc7f71cb6e0fc70dbc
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/LibraryAudioLike.md
@@ -0,0 +1,10 @@
+# Aimastering.LibraryAudioLike
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **Number** | Audio analysis id | [optional]
+**libraryAudioId** | **Number** | Audio id | [optional]
+**userId** | **Number** | User id | [optional]
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/Mastering.md b/masteringModule/node_modules/aimastering/docs/Mastering.md
new file mode 100644
index 0000000000000000000000000000000000000000..91570c6c8008137fb54754f5df9a5b53b7d182e8
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/Mastering.md
@@ -0,0 +1,150 @@
+# Aimastering.Mastering
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **Number** | | [optional]
+**userId** | **Number** | | [optional]
+**inputAudioId** | **Number** | | [optional]
+**outputAudioId** | **Number** | | [optional]
+**outputVideoId** | **Number** | | [optional]
+**referenceAudioId** | **Number** | | [optional]
+**mode** | **String** | | [optional]
+**status** | **String** | | [optional]
+**failureReason** | **String** | | [optional]
+**targetLoudnessMode** | **String** | | [optional]
+**targetLoudness** | **Number** | | [optional]
+**outputFormat** | **String** | | [optional]
+**preset** | **String** | | [optional]
+**bitDepth** | **Number** | | [optional]
+**sampleRate** | **Number** | | [optional]
+**reviewComment** | **String** | | [optional]
+**reviewScore** | **Number** | | [optional]
+**masteringMatchingLevel** | **Number** | | [optional]
+**progression** | **Number** | | [optional]
+**bassPreservation** | **Boolean** | | [optional]
+**mastering** | **Boolean** | | [optional]
+**masteringAlgorithm** | **String** | | [optional]
+**preserved** | **Boolean** | | [optional]
+**retryCount** | **Number** | | [optional]
+**masteringReverb** | **Boolean** | | [optional]
+**masteringReverbGain** | **Number** | | [optional]
+**lowCutFreq** | **Number** | | [optional]
+**highCutFreq** | **Number** | | [optional]
+**ceiling** | **Number** | | [optional]
+**ceilingMode** | **String** | | [optional]
+**oversample** | **Number** | | [optional]
+**limitingError** | **Number** | | [optional]
+**videoTitle** | **String** | | [optional]
+**videoStatus** | **String** | | [optional]
+**expireAt** | **Date** | | [optional]
+**createdAt** | **Date** | | [optional]
+**updatedAt** | **Date** | | [optional]
+
+
+
+## Enum: ModeEnum
+
+
+* `default` (value: `"default"`)
+
+* `custom` (value: `"custom"`)
+
+
+
+
+
+## Enum: StatusEnum
+
+
+* `waiting` (value: `"waiting"`)
+
+* `processing` (value: `"processing"`)
+
+* `canceled` (value: `"canceled"`)
+
+* `failed` (value: `"failed"`)
+
+* `succeeded` (value: `"succeeded"`)
+
+
+
+
+
+## Enum: FailureReasonEnum
+
+
+* `unknown` (value: `"unknown"`)
+
+* `expired` (value: `"expired"`)
+
+* `failed_to_prepare` (value: `"failed_to_prepare"`)
+
+
+
+
+
+## Enum: TargetLoudnessModeEnum
+
+
+* `loudness` (value: `"loudness"`)
+
+* `rms` (value: `"rms"`)
+
+* `peak` (value: `"peak"`)
+
+* `youtube_loudness` (value: `"youtube_loudness"`)
+
+
+
+
+
+## Enum: OutputFormatEnum
+
+
+* `wav` (value: `"wav"`)
+
+* `mp3` (value: `"mp3"`)
+
+
+
+
+
+## Enum: PresetEnum
+
+
+* `general` (value: `"general"`)
+
+* `pop` (value: `"pop"`)
+
+* `jazz` (value: `"jazz"`)
+
+* `classical` (value: `"classical"`)
+
+
+
+
+
+## Enum: MasteringAlgorithmEnum
+
+
+* `v1` (value: `"v1"`)
+
+* `v2` (value: `"v2"`)
+
+
+
+
+
+## Enum: VideoStatusEnum
+
+
+* `waiting` (value: `"waiting"`)
+
+* `failed` (value: `"failed"`)
+
+* `succeeded` (value: `"succeeded"`)
+
+
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/MasteringApi.md b/masteringModule/node_modules/aimastering/docs/MasteringApi.md
new file mode 100644
index 0000000000000000000000000000000000000000..60d8d9a81c7d116046d32a38a085c996b854a720
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/MasteringApi.md
@@ -0,0 +1,594 @@
+# Aimastering.MasteringApi
+
+All URIs are relative to *https://api.bakuage.com:443*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**cancelMastering**](MasteringApi.md#cancelMastering) | **PUT** /masterings/{id}/cancel | Cancel a mastering by id.
+[**createMastering**](MasteringApi.md#createMastering) | **POST** /masterings | Create a new mastering.
+[**deleteMastering**](MasteringApi.md#deleteMastering) | **DELETE** /masterings/{id} | Delete mastering.
+[**freeUnlockMastering**](MasteringApi.md#freeUnlockMastering) | **PUT** /masterings/{id}/free_unlock | Free unlock a mastering by id.
+[**getMastering**](MasteringApi.md#getMastering) | **GET** /masterings/{id} | Get a mastering by id.
+[**getMasteringUnlockProduct**](MasteringApi.md#getMasteringUnlockProduct) | **GET** /masterings/{id}/unlock_product | Review a mastering by id.
+[**listMasterings**](MasteringApi.md#listMasterings) | **GET** /masterings | Get all accessable masterings.
+[**publishMastering**](MasteringApi.md#publishMastering) | **POST** /masterings/{id}/publish | Publish a mastering by id.
+[**reviewMastering**](MasteringApi.md#reviewMastering) | **PUT** /masterings/{id}/review | Review a mastering by id.
+[**updateMastering**](MasteringApi.md#updateMastering) | **PUT** /masterings/{id} | Update a mastering.
+
+
+
+# **cancelMastering**
+> Mastering cancelMastering(id, )
+
+Cancel a mastering by id.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.MasteringApi();
+
+var id = 56; // Number | Mastering id
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.cancelMastering(id, , callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Mastering id |
+
+### Return type
+
+[**Mastering**](Mastering.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+# **createMastering**
+> Mastering createMastering(inputAudioId, opts)
+
+Create a new mastering.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.MasteringApi();
+
+var inputAudioId = 56; // Number | Input audio id
+
+var opts = {
+ 'mode': "default", // String | Mode
+ 'bassPreservation': false, // Boolean | This parameter represents if the bass preservation is enabled.
+ 'mastering': false, // Boolean | This parameter represents if the mastering is enabled. This parameter is effective only when the mode is \"default\" or \"custom\".
+ 'masteringAlgorithm': "v2", // String |
+ 'noiseReduction': false, // Boolean | This parameter represents if the nosie reduction is enabled. This parameter is effective only when the mode is \"custom\".
+ 'preset': "general", // String | This parameter is effective only when the mode is \"custom\".
+ 'targetLoudness': -5, // Number | This parameter represents the target loudness of the output audio in dB. This parameter is effective only when the mode is \"custom\".
+ 'targetLoudnessMode': "loudness", // String |
+ 'masteringMatchingLevel': 0.5, // Number | This parameter represents the mastering reference matching level. This parameter is effective only when the mode is \"custom\" and the mastering is enabled.
+ 'masteringReverb': false, // Boolean | This parameter represents if the mastering reverb is enabled. This parameter is effective only when the mode is \"custom\" and the mastering is enabled.
+ 'masteringReverbGain': -36, // Number | This parameter represents the mastering reverb gain relative to the dry sound in dB. This parameter is effective only when the mode is \"custom\" and the mastering is \"true\" and the mastering_reverb is \"true\".
+ 'referenceAudioId': 56, // Number | Reference audio id. This parameter is effective only when the mode is \"custom\" and the mastering is enabled.
+ 'lowCutFreq': 20, // Number | This parameter represents the low cut freq of the output audio in Hz. This parameter is effective only when the mode is \"custom\".
+ 'highCutFreq': 20000, // Number | This parameter represents the high cut freq of the output audio in Hz. This parameter is effective only when the mode is \"custom\".
+ 'ceiling': 0, // Number |
+ 'ceilingMode': "0", // String |
+ 'oversample': 1, // Number |
+ 'sampleRate': 44100, // Number | This parameter represents the sample rate of the output audio in dB. This parameter is effective only when the mode is \"custom\".
+ 'bitDepth': 16, // Number | This parameter represents the bit depth of the output audio in dB. This parameter is effective only when the mode is \"custom\".
+ 'outputFormat': "wav", // String | This parameter represents the format of the output audio. This parameter is effective only when the mode is \"custom\".
+ 'forPreview': false, // Boolean | If this is true, the mastering is treated for preview purpose (ex. not purchasable, not publishable, short lifetime).
+ 'startAt': 0, // Number | Partial mastering start at.
+ 'endAt': -1, // Number | Partial mastering end at.
+ 'videoTitle': "" // String | This parameter represents the title of output video.
+};
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.createMastering(inputAudioId, opts, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **inputAudioId** | **Number**| Input audio id |
+ **mode** | **String**| Mode | [optional] [default to default]
+ **bassPreservation** | **Boolean**| This parameter represents if the bass preservation is enabled. | [optional] [default to false]
+ **mastering** | **Boolean**| This parameter represents if the mastering is enabled. This parameter is effective only when the mode is \"default\" or \"custom\". | [optional] [default to false]
+ **masteringAlgorithm** | **String**| | [optional] [default to v2]
+ **noiseReduction** | **Boolean**| This parameter represents if the nosie reduction is enabled. This parameter is effective only when the mode is \"custom\". | [optional] [default to false]
+ **preset** | **String**| This parameter is effective only when the mode is \"custom\". | [optional] [default to general]
+ **targetLoudness** | **Number**| This parameter represents the target loudness of the output audio in dB. This parameter is effective only when the mode is \"custom\". | [optional] [default to -5]
+ **targetLoudnessMode** | **String**| | [optional] [default to loudness]
+ **masteringMatchingLevel** | **Number**| This parameter represents the mastering reference matching level. This parameter is effective only when the mode is \"custom\" and the mastering is enabled. | [optional] [default to 0.5]
+ **masteringReverb** | **Boolean**| This parameter represents if the mastering reverb is enabled. This parameter is effective only when the mode is \"custom\" and the mastering is enabled. | [optional] [default to false]
+ **masteringReverbGain** | **Number**| This parameter represents the mastering reverb gain relative to the dry sound in dB. This parameter is effective only when the mode is \"custom\" and the mastering is \"true\" and the mastering_reverb is \"true\". | [optional] [default to -36]
+ **referenceAudioId** | **Number**| Reference audio id. This parameter is effective only when the mode is \"custom\" and the mastering is enabled. | [optional]
+ **lowCutFreq** | **Number**| This parameter represents the low cut freq of the output audio in Hz. This parameter is effective only when the mode is \"custom\". | [optional] [default to 20]
+ **highCutFreq** | **Number**| This parameter represents the high cut freq of the output audio in Hz. This parameter is effective only when the mode is \"custom\". | [optional] [default to 20000]
+ **ceiling** | **Number**| | [optional] [default to 0]
+ **ceilingMode** | **String**| | [optional] [default to 0]
+ **oversample** | **Number**| | [optional] [default to 1]
+ **sampleRate** | **Number**| This parameter represents the sample rate of the output audio in dB. This parameter is effective only when the mode is \"custom\". | [optional] [default to 44100]
+ **bitDepth** | **Number**| This parameter represents the bit depth of the output audio in dB. This parameter is effective only when the mode is \"custom\". | [optional] [default to 16]
+ **outputFormat** | **String**| This parameter represents the format of the output audio. This parameter is effective only when the mode is \"custom\". | [optional] [default to wav]
+ **forPreview** | **Boolean**| If this is true, the mastering is treated for preview purpose (ex. not purchasable, not publishable, short lifetime). | [optional] [default to false]
+ **startAt** | **Number**| Partial mastering start at. | [optional] [default to 0]
+ **endAt** | **Number**| Partial mastering end at. | [optional] [default to -1]
+ **videoTitle** | **String**| This parameter represents the title of output video. | [optional] [default to ]
+
+### Return type
+
+[**Mastering**](Mastering.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
+
+# **deleteMastering**
+> Mastering deleteMastering(id, )
+
+Delete mastering.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.MasteringApi();
+
+var id = 56; // Number | Mastering id
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.deleteMastering(id, , callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Mastering id |
+
+### Return type
+
+[**Mastering**](Mastering.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+# **freeUnlockMastering**
+> Mastering freeUnlockMastering(id, )
+
+Free unlock a mastering by id.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.MasteringApi();
+
+var id = 56; // Number | Mastering id
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.freeUnlockMastering(id, , callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Mastering id |
+
+### Return type
+
+[**Mastering**](Mastering.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+# **getMastering**
+> Mastering getMastering(id, )
+
+Get a mastering by id.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.MasteringApi();
+
+var id = 56; // Number | Mastering id
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.getMastering(id, , callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Mastering id |
+
+### Return type
+
+[**Mastering**](Mastering.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+# **getMasteringUnlockProduct**
+> Mastering getMasteringUnlockProduct(id, )
+
+Review a mastering by id.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.MasteringApi();
+
+var id = 56; // Number | Mastering id
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.getMasteringUnlockProduct(id, , callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Mastering id |
+
+### Return type
+
+[**Mastering**](Mastering.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+# **listMasterings**
+> [Mastering] listMasterings()
+
+Get all accessable masterings.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.MasteringApi();
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.listMasterings(callback);
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**[Mastering]**](Mastering.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+# **publishMastering**
+> Mastering publishMastering(id, accessToken, message, opts)
+
+Publish a mastering by id.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.MasteringApi();
+
+var id = 56; // Number | Mastering id
+
+var accessToken = "accessToken_example"; // String | This parameter represents if the access token of the publishment service API.
+
+var message = "message_example"; // String | This parameter represents the publishment message.
+
+var opts = {
+ 'service': "service_example", // String | This parameter represents the publishment service.
+ 'accessTokenSecret': "accessTokenSecret_example" // String | This parameter represents the access token secret of the publishment service API. This parameter is effective only when the service is \"twitter\".
+};
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.publishMastering(id, accessToken, message, opts, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Mastering id |
+ **accessToken** | **String**| This parameter represents if the access token of the publishment service API. |
+ **message** | **String**| This parameter represents the publishment message. |
+ **service** | **String**| This parameter represents the publishment service. | [optional]
+ **accessTokenSecret** | **String**| This parameter represents the access token secret of the publishment service API. This parameter is effective only when the service is \"twitter\". | [optional]
+
+### Return type
+
+[**Mastering**](Mastering.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
+
+# **reviewMastering**
+> Mastering reviewMastering(id, , opts)
+
+Review a mastering by id.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.MasteringApi();
+
+var id = 56; // Number | Mastering id
+
+var opts = {
+ 'reviewComment': "reviewComment_example", // String | This parameter represents the review comment.
+ 'reviewScore': 8.14 // Number | This parameter represents the review score.
+};
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.reviewMastering(id, , opts, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Mastering id |
+ **reviewComment** | **String**| This parameter represents the review comment. | [optional]
+ **reviewScore** | **Number**| This parameter represents the review score. | [optional]
+
+### Return type
+
+[**Mastering**](Mastering.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
+
+# **updateMastering**
+> Mastering updateMastering(id, , opts)
+
+Update a mastering.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.MasteringApi();
+
+var id = 56; // Number | Mastering id
+
+var opts = {
+ 'preserved': true // Boolean | Disable auto delete.
+};
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.updateMastering(id, , opts, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Mastering id |
+ **preserved** | **Boolean**| Disable auto delete. | [optional]
+
+### Return type
+
+[**Mastering**](Mastering.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
diff --git a/masteringModule/node_modules/aimastering/docs/Payment.md b/masteringModule/node_modules/aimastering/docs/Payment.md
new file mode 100644
index 0000000000000000000000000000000000000000..59368844b549832efa4443472b8af6985a76602e
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/Payment.md
@@ -0,0 +1,25 @@
+# Aimastering.Payment
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **Number** | | [optional]
+**service** | **String** | | [optional]
+**productGiven** | **Boolean** | | [optional]
+**product** | **Object** | | [optional]
+**transactionId** | **String** | | [optional]
+**transactionDetail** | **Object** | | [optional]
+**createdAt** | **Date** | | [optional]
+
+
+
+## Enum: ServiceEnum
+
+
+* `paypal` (value: `"paypal"`)
+
+* `stripe` (value: `"stripe"`)
+
+
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/PaymentApi.md b/masteringModule/node_modules/aimastering/docs/PaymentApi.md
new file mode 100644
index 0000000000000000000000000000000000000000..861bbf09e75d6e679dc815d0fde33dd7fdab2b23
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/PaymentApi.md
@@ -0,0 +1,220 @@
+# Aimastering.PaymentApi
+
+All URIs are relative to *https://api.bakuage.com:443*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**createPayment**](PaymentApi.md#createPayment) | **POST** /payments | Create a new payment.
+[**executePayment**](PaymentApi.md#executePayment) | **PUT** /payments/{id}/execute | Execute a payment by id.
+[**getPayment**](PaymentApi.md#getPayment) | **GET** /payments/{id} | Get a payment by id.
+[**listPayments**](PaymentApi.md#listPayments) | **GET** /payments | Get all accessable payments.
+
+
+
+# **createPayment**
+> Payment createPayment(productToken, service, opts)
+
+Create a new payment.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.PaymentApi();
+
+var productToken = "productToken_example"; // String | This parameter represents the product token.
+
+var service = "service_example"; // String | This parameter represents the payment message.
+
+var opts = {
+ 'token': "token_example" // String | This parameter represents the card token. This parameter is effective only when the service is \"stripe\".
+};
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.createPayment(productToken, service, opts, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **productToken** | **String**| This parameter represents the product token. |
+ **service** | **String**| This parameter represents the payment message. |
+ **token** | **String**| This parameter represents the card token. This parameter is effective only when the service is \"stripe\". | [optional]
+
+### Return type
+
+[**Payment**](Payment.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
+
+# **executePayment**
+> Payment executePayment(id, payerId)
+
+Execute a payment by id.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.PaymentApi();
+
+var id = 56; // Number | Payment id
+
+var payerId = "payerId_example"; // String | This parameter represents the card token. This parameter is effective only when the service is \"paypal\".
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.executePayment(id, payerId, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Payment id |
+ **payerId** | **String**| This parameter represents the card token. This parameter is effective only when the service is \"paypal\". |
+
+### Return type
+
+[**Payment**](Payment.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
+
+# **getPayment**
+> Payment getPayment(id, )
+
+Get a payment by id.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.PaymentApi();
+
+var id = 56; // Number | Payment id
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.getPayment(id, , callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Payment id |
+
+### Return type
+
+[**Payment**](Payment.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+# **listPayments**
+> [Payment] listPayments()
+
+Get all accessable payments.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.PaymentApi();
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.listPayments(callback);
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**[Payment]**](Payment.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
diff --git a/masteringModule/node_modules/aimastering/docs/PaymentCustomer.md b/masteringModule/node_modules/aimastering/docs/PaymentCustomer.md
new file mode 100644
index 0000000000000000000000000000000000000000..c97c45666662d8863754aba6c7628c2cfd4a2393
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/PaymentCustomer.md
@@ -0,0 +1,11 @@
+# Aimastering.PaymentCustomer
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **Number** | | [optional]
+**paymentCustomerDetail** | **Object** | | [optional]
+**createdAt** | **Date** | | [optional]
+**updatedAt** | **Date** | | [optional]
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/PaymentCustomerApi.md b/masteringModule/node_modules/aimastering/docs/PaymentCustomerApi.md
new file mode 100644
index 0000000000000000000000000000000000000000..2d99d1f4d1d34f78616f50d4430dab060140e0d1
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/PaymentCustomerApi.md
@@ -0,0 +1,54 @@
+# Aimastering.PaymentCustomerApi
+
+All URIs are relative to *https://api.bakuage.com:443*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**getDefaultPaymentCustomer**](PaymentCustomerApi.md#getDefaultPaymentCustomer) | **GET** /payment_customers/default | Get a default payment customer.
+
+
+
+# **getDefaultPaymentCustomer**
+> [PaymentCustomer] getDefaultPaymentCustomer()
+
+Get a default payment customer.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.PaymentCustomerApi();
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.getDefaultPaymentCustomer(callback);
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**[PaymentCustomer]**](PaymentCustomer.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
diff --git a/masteringModule/node_modules/aimastering/docs/Plan.md b/masteringModule/node_modules/aimastering/docs/Plan.md
new file mode 100644
index 0000000000000000000000000000000000000000..f72edc59aec72c8e7f8eb21d6ae02e4491286786
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/Plan.md
@@ -0,0 +1,32 @@
+# Aimastering.Plan
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**amount** | **Number** | | [optional]
+**currency** | **String** | | [optional]
+**interval** | **String** | | [optional]
+**name** | **String** | | [optional]
+**stripePlanId** | **String** | | [optional]
+
+
+
+## Enum: CurrencyEnum
+
+
+* `jpy` (value: `"jpy"`)
+
+* `usd` (value: `"usd"`)
+
+
+
+
+
+## Enum: IntervalEnum
+
+
+* `month` (value: `"month"`)
+
+
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/PlanApi.md b/masteringModule/node_modules/aimastering/docs/PlanApi.md
new file mode 100644
index 0000000000000000000000000000000000000000..15e22055c579286bca87d801d63f7d8b2e93192d
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/PlanApi.md
@@ -0,0 +1,54 @@
+# Aimastering.PlanApi
+
+All URIs are relative to *https://api.bakuage.com:443*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**listPlans**](PlanApi.md#listPlans) | **GET** /plans | Get all accessable plans.
+
+
+
+# **listPlans**
+> [Plan] listPlans()
+
+Get all accessable plans.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.PlanApi();
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.listPlans(callback);
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**[Plan]**](Plan.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
diff --git a/masteringModule/node_modules/aimastering/docs/SpSubscription.md b/masteringModule/node_modules/aimastering/docs/SpSubscription.md
new file mode 100644
index 0000000000000000000000000000000000000000..cc3d331c3b61e06ef5ab4e99c4b303287696df70
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/SpSubscription.md
@@ -0,0 +1,23 @@
+# Aimastering.SpSubscription
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **Number** | | [optional]
+**userId** | **Number** | | [optional]
+**status** | **String** | | [optional]
+**createdAt** | **Date** | | [optional]
+**updatedAt** | **Date** | | [optional]
+
+
+
+## Enum: StatusEnum
+
+
+* `active` (value: `"active"`)
+
+* `inactive` (value: `"inactive"`)
+
+
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/SpSubscriptionApi.md b/masteringModule/node_modules/aimastering/docs/SpSubscriptionApi.md
new file mode 100644
index 0000000000000000000000000000000000000000..bc3a4d15e2d9300230280a59d3cad3b5a1c3bb19
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/SpSubscriptionApi.md
@@ -0,0 +1,110 @@
+# Aimastering.SpSubscriptionApi
+
+All URIs are relative to *https://api.bakuage.com:443*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**createSpSubscription**](SpSubscriptionApi.md#createSpSubscription) | **POST** /sp_subscriptions | Create a new smartphone subscription.
+[**listSpSubscriptions**](SpSubscriptionApi.md#listSpSubscriptions) | **GET** /sp_subscriptions | Get all accessable smartphone subscriptions.
+
+
+
+# **createSpSubscription**
+> SpSubscription createSpSubscription(service, opts)
+
+Create a new smartphone subscription.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.SpSubscriptionApi();
+
+var service = "service_example"; // String | Service.
+
+var opts = {
+ 'receipt': "receipt_example" // String | Base64 encoded app store receipt. This parameter is effective only when the service is \"appstore\".
+};
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.createSpSubscription(service, opts, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **service** | **String**| Service. |
+ **receipt** | **String**| Base64 encoded app store receipt. This parameter is effective only when the service is \"appstore\". | [optional]
+
+### Return type
+
+[**SpSubscription**](SpSubscription.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
+
+# **listSpSubscriptions**
+> [SpSubscription] listSpSubscriptions()
+
+Get all accessable smartphone subscriptions.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.SpSubscriptionApi();
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.listSpSubscriptions(callback);
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**[SpSubscription]**](SpSubscription.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
diff --git a/masteringModule/node_modules/aimastering/docs/StatisticsApi.md b/masteringModule/node_modules/aimastering/docs/StatisticsApi.md
new file mode 100644
index 0000000000000000000000000000000000000000..8391cd604b28bbacf813abc6ed9c0bf2b6b15fd2
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/StatisticsApi.md
@@ -0,0 +1,146 @@
+# Aimastering.StatisticsApi
+
+All URIs are relative to *https://api.bakuage.com:443*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**getGroupBuyStatistics**](StatisticsApi.md#getGroupBuyStatistics) | **GET** /statistics/group_buy | Get group buy statistics.
+[**listAnonymizedMasterings**](StatisticsApi.md#listAnonymizedMasterings) | **GET** /statistics/anonymized_masterings | Get anonymized masterings.
+[**listKpis**](StatisticsApi.md#listKpis) | **GET** /statistics/kpis | Get KPIs.
+
+
+
+# **getGroupBuyStatistics**
+> GroupBuyStatistics getGroupBuyStatistics()
+
+Get group buy statistics.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.StatisticsApi();
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.getGroupBuyStatistics(callback);
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**GroupBuyStatistics**](GroupBuyStatistics.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+# **listAnonymizedMasterings**
+> [AnonymizedMastering] listAnonymizedMasterings()
+
+Get anonymized masterings.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.StatisticsApi();
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.listAnonymizedMasterings(callback);
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**[AnonymizedMastering]**](AnonymizedMastering.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+# **listKpis**
+> Kpi listKpis()
+
+Get KPIs.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.StatisticsApi();
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.listKpis(callback);
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**Kpi**](Kpi.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
diff --git a/masteringModule/node_modules/aimastering/docs/Subscription.md b/masteringModule/node_modules/aimastering/docs/Subscription.md
new file mode 100644
index 0000000000000000000000000000000000000000..39f21df18c2d02e26a9d637d9fe994fe54de4cad
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/Subscription.md
@@ -0,0 +1,35 @@
+# Aimastering.Subscription
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **Number** | | [optional]
+**userId** | **Number** | | [optional]
+**stripeSubscriptionId** | **String** | | [optional]
+**currentPeriodStartAt** | **Date** | | [optional]
+**currentPeriodEndAt** | **Date** | | [optional]
+**canceled** | **Boolean** | | [optional]
+**cancelAtPeriodEnd** | **Boolean** | | [optional]
+**trialEnd** | **Date** | | [optional]
+**status** | **String** | | [optional]
+**createdAt** | **Date** | | [optional]
+**updatedAt** | **Date** | | [optional]
+
+
+
+## Enum: StatusEnum
+
+
+* `trialing` (value: `"trialing"`)
+
+* `active` (value: `"active"`)
+
+* `past_due` (value: `"past_due"`)
+
+* `unpaid` (value: `"unpaid"`)
+
+* `canceled` (value: `"canceled"`)
+
+
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/SubscriptionApi.md b/masteringModule/node_modules/aimastering/docs/SubscriptionApi.md
new file mode 100644
index 0000000000000000000000000000000000000000..952dab150fc674c0ad7e9cff34cecbf73b1923e0
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/SubscriptionApi.md
@@ -0,0 +1,270 @@
+# Aimastering.SubscriptionApi
+
+All URIs are relative to *https://api.bakuage.com:443*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**cancelSubscription**](SubscriptionApi.md#cancelSubscription) | **PUT** /subscriptions/{id}/cancel | Cancel a subscription by id.
+[**cancelSubscriptionCancellation**](SubscriptionApi.md#cancelSubscriptionCancellation) | **PUT** /subscriptions/{id}/cancel_cancellation | Cancel the subscription cancellation by id.
+[**createSubscription**](SubscriptionApi.md#createSubscription) | **POST** /subscriptions | Create a new subscription.
+[**getSubscription**](SubscriptionApi.md#getSubscription) | **GET** /subscriptions/{id} | Get a subscription by id.
+[**listSubscriptions**](SubscriptionApi.md#listSubscriptions) | **GET** /subscriptions | Get all accessable subscriptions.
+
+
+
+# **cancelSubscription**
+> Subscription cancelSubscription(id)
+
+Cancel a subscription by id.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.SubscriptionApi();
+
+var id = 56; // Number | Subscription id
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.cancelSubscription(id, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Subscription id |
+
+### Return type
+
+[**Subscription**](Subscription.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
+
+# **cancelSubscriptionCancellation**
+> Subscription cancelSubscriptionCancellation(id)
+
+Cancel the subscription cancellation by id.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.SubscriptionApi();
+
+var id = 56; // Number | Subscription id
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.cancelSubscriptionCancellation(id, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Subscription id |
+
+### Return type
+
+[**Subscription**](Subscription.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
+
+# **createSubscription**
+> Subscription createSubscription(service, opts)
+
+Create a new subscription.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.SubscriptionApi();
+
+var service = "service_example"; // String | This parameter represents the payment message.
+
+var opts = {
+ 'stripePlanId': "stripePlanId_example", // String | The Stripe plan id. This parameter is effective only when the service is \"stripe\".
+ 'token': "token_example", // String | This parameter represents the card token. This parameter is effective only when the service is \"stripe\".
+ 'affiliateId': "affiliateId_example" // String | Affiliate id of inviter user.
+};
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.createSubscription(service, opts, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **service** | **String**| This parameter represents the payment message. |
+ **stripePlanId** | **String**| The Stripe plan id. This parameter is effective only when the service is \"stripe\". | [optional]
+ **token** | **String**| This parameter represents the card token. This parameter is effective only when the service is \"stripe\". | [optional]
+ **affiliateId** | **String**| Affiliate id of inviter user. | [optional]
+
+### Return type
+
+[**Subscription**](Subscription.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
+
+# **getSubscription**
+> Subscription getSubscription(id)
+
+Get a subscription by id.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.SubscriptionApi();
+
+var id = 56; // Number | Subscription id
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.getSubscription(id, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Subscription id |
+
+### Return type
+
+[**Subscription**](Subscription.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+# **listSubscriptions**
+> [Subscription] listSubscriptions()
+
+Get all accessable subscriptions.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.SubscriptionApi();
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.listSubscriptions(callback);
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**[Subscription]**](Subscription.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
diff --git a/masteringModule/node_modules/aimastering/docs/User.md b/masteringModule/node_modules/aimastering/docs/User.md
new file mode 100644
index 0000000000000000000000000000000000000000..b2d3f001d8b115d4332b58e89fd12be818b86c64
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/User.md
@@ -0,0 +1,32 @@
+# Aimastering.User
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **Number** | | [optional]
+**affiliateEnabled** | **Boolean** | | [optional]
+**agreedTermsOfService** | **Boolean** | | [optional]
+**authId** | **String** | | [optional]
+**authProvider** | **String** | | [optional]
+**email** | **String** | | [optional]
+**registrationNotified** | **Boolean** | | [optional]
+**statistics** | [**UserStatistics**](UserStatistics.md) | | [optional]
+**createdAt** | **Date** | | [optional]
+**updatedAt** | **Date** | | [optional]
+
+
+
+## Enum: AuthProviderEnum
+
+
+* `auth0` (value: `"auth0"`)
+
+* `github` (value: `"github"`)
+
+* `google` (value: `"google"`)
+
+* `twitter` (value: `"twitter"`)
+
+
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/UserApi.md b/masteringModule/node_modules/aimastering/docs/UserApi.md
new file mode 100644
index 0000000000000000000000000000000000000000..d3e09e50e66793cceccafe23d5adee1af7401bd3
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/UserApi.md
@@ -0,0 +1,216 @@
+# Aimastering.UserApi
+
+All URIs are relative to *https://api.bakuage.com:443*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**getSelf**](UserApi.md#getSelf) | **GET** /users/self | Get self user.
+[**notifyRegistration**](UserApi.md#notifyRegistration) | **PUT** /users/self/notify_registration | Notify user is registered.
+[**sendInvitation**](UserApi.md#sendInvitation) | **POST** /users/self/send_invitation | Send invitation.
+[**updateSelf**](UserApi.md#updateSelf) | **PUT** /users/self | Update self user.
+
+
+
+# **getSelf**
+> User getSelf()
+
+Get self user.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.UserApi();
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.getSelf(callback);
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**User**](User.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+# **notifyRegistration**
+> User notifyRegistration(opts)
+
+Notify user is registered.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.UserApi();
+
+var opts = {
+ 'affiliateId': "affiliateId_example", // String | The affiliate id of inviter.
+ 'referrerUrl': "referrerUrl_example" // String | The referrer URL.
+};
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.notifyRegistration(opts, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **affiliateId** | **String**| The affiliate id of inviter. | [optional]
+ **referrerUrl** | **String**| The referrer URL. | [optional]
+
+### Return type
+
+[**User**](User.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
+
+# **sendInvitation**
+> User sendInvitation(inviteeEmail)
+
+Send invitation.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.UserApi();
+
+var inviteeEmail = "inviteeEmail_example"; // String | The email of invitee.
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.sendInvitation(inviteeEmail, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **inviteeEmail** | **String**| The email of invitee. |
+
+### Return type
+
+[**User**](User.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
+
+# **updateSelf**
+> User updateSelf(opts)
+
+Update self user.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.UserApi();
+
+var opts = {
+ 'agreedTermsOfService': true, // Boolean | Whether you agreed terms of service.
+ 'email': "email_example" // String | The email.
+};
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.updateSelf(opts, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **agreedTermsOfService** | **Boolean**| Whether you agreed terms of service. | [optional]
+ **email** | **String**| The email. | [optional]
+
+### Return type
+
+[**User**](User.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: multipart/form-data
+ - **Accept**: application/json
+
diff --git a/masteringModule/node_modules/aimastering/docs/UserStatistics.md b/masteringModule/node_modules/aimastering/docs/UserStatistics.md
new file mode 100644
index 0000000000000000000000000000000000000000..059b7b12900bcadf2366e48e336d17914f708a23
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/UserStatistics.md
@@ -0,0 +1,13 @@
+# Aimastering.UserStatistics
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**registrationInvitationCount** | **Number** | | [optional]
+**subscriptionInvitationCount** | **Number** | | [optional]
+**masteringCount** | **Number** | | [optional]
+**monthlyRegistrationInvitationCount** | **Number** | | [optional]
+**monthlySubscriptionInvitationCount** | **Number** | | [optional]
+**monthlyMasteringCount** | **Number** | | [optional]
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/Video.md b/masteringModule/node_modules/aimastering/docs/Video.md
new file mode 100644
index 0000000000000000000000000000000000000000..14558b870d89e25db020135d0e38f5687aba1ea2
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/Video.md
@@ -0,0 +1,13 @@
+# Aimastering.Video
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **Number** | | [optional]
+**fileResourceId** | **Number** | | [optional]
+**userId** | **Number** | | [optional]
+**name** | **String** | | [optional]
+**createdAt** | **Date** | | [optional]
+**updatedAt** | **Date** | | [optional]
+
+
diff --git a/masteringModule/node_modules/aimastering/docs/VideoApi.md b/masteringModule/node_modules/aimastering/docs/VideoApi.md
new file mode 100644
index 0000000000000000000000000000000000000000..b5748235380d7554971446111d6451cb1266fe36
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/VideoApi.md
@@ -0,0 +1,262 @@
+# Aimastering.VideoApi
+
+All URIs are relative to *https://api.bakuage.com:443*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**downloadVideo**](VideoApi.md#downloadVideo) | **GET** /videos/{id}/download | Download an video data by id.
+[**downloadVideoByToken**](VideoApi.md#downloadVideoByToken) | **GET** /videos/download_by_token | Download an video data by video_download_token.
+[**getVideo**](VideoApi.md#getVideo) | **GET** /videos/{id} | Get an video by id.
+[**getVideoDownloadToken**](VideoApi.md#getVideoDownloadToken) | **GET** /videos/{id}/download_token | Get an video download token by id.
+[**listVideos**](VideoApi.md#listVideos) | **GET** /videos | Get all videos accessable.
+
+
+
+# **downloadVideo**
+> 'Blob' downloadVideo(id)
+
+Download an video data by id.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.VideoApi();
+
+var id = 56; // Number | Video id
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.downloadVideo(id, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Video id |
+
+### Return type
+
+**'Blob'**
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/octet-stream
+
+
+# **downloadVideoByToken**
+> 'Blob' downloadVideoByToken(downloadToken)
+
+Download an video data by video_download_token.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.VideoApi();
+
+var downloadToken = "downloadToken_example"; // String | Video download token
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.downloadVideoByToken(downloadToken, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **downloadToken** | **String**| Video download token |
+
+### Return type
+
+**'Blob'**
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/octet-stream
+
+
+# **getVideo**
+> Video getVideo(id)
+
+Get an video by id.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.VideoApi();
+
+var id = 56; // Number | Video id
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.getVideo(id, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Video id |
+
+### Return type
+
+[**Video**](Video.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+# **getVideoDownloadToken**
+> VideoDownloadToken getVideoDownloadToken(id)
+
+Get an video download token by id.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.VideoApi();
+
+var id = 56; // Number | Video id
+
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.getVideoDownloadToken(id, callback);
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **Number**| Video id |
+
+### Return type
+
+[**VideoDownloadToken**](VideoDownloadToken.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+# **listVideos**
+> [Video] listVideos()
+
+Get all videos accessable.
+
+### Example
+```javascript
+var Aimastering = require('aimastering');
+var defaultClient = Aimastering.ApiClient.instance;
+
+// Configure API key authorization: bearer
+var bearer = defaultClient.authentications['bearer'];
+bearer.apiKey = 'YOUR API KEY';
+// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+//bearer.apiKeyPrefix = 'Token';
+
+var apiInstance = new Aimastering.VideoApi();
+
+var callback = function(error, data, response) {
+ if (error) {
+ console.error(error);
+ } else {
+ console.log('API called successfully. Returned data: ' + data);
+ }
+};
+apiInstance.listVideos(callback);
+```
+
+### Parameters
+This endpoint does not need any parameter.
+
+### Return type
+
+[**[Video]**](Video.md)
+
+### Authorization
+
+[bearer](../README.md#bearer)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
diff --git a/masteringModule/node_modules/aimastering/docs/VideoDownloadToken.md b/masteringModule/node_modules/aimastering/docs/VideoDownloadToken.md
new file mode 100644
index 0000000000000000000000000000000000000000..ddc8319f326ae80eb78e09d7fdc1ec3b3c127e52
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/docs/VideoDownloadToken.md
@@ -0,0 +1,9 @@
+# Aimastering.VideoDownloadToken
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**downloadToken** | [**JWT**](JWT.md) | | [optional]
+**downloadUrl** | **String** | | [optional]
+
+
diff --git a/masteringModule/node_modules/aimastering/git_push.sh b/masteringModule/node_modules/aimastering/git_push.sh
new file mode 100644
index 0000000000000000000000000000000000000000..0d041ad0ba492f6c23af91d7afdd8568b33eb183
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/git_push.sh
@@ -0,0 +1,52 @@
+#!/bin/sh
+# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
+#
+# Usage example: /bin/sh ./git_push.sh wing328 swagger-petstore-perl "minor update"
+
+git_user_id=$1
+git_repo_id=$2
+release_note=$3
+
+if [ "$git_user_id" = "" ]; then
+ git_user_id="GIT_USER_ID"
+ echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id"
+fi
+
+if [ "$git_repo_id" = "" ]; then
+ git_repo_id="GIT_REPO_ID"
+ echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id"
+fi
+
+if [ "$release_note" = "" ]; then
+ release_note="Minor update"
+ echo "[INFO] No command line input provided. Set \$release_note to $release_note"
+fi
+
+# Initialize the local directory as a Git repository
+git init
+
+# Adds the files in the local repository and stages them for commit.
+git add .
+
+# Commits the tracked changes and prepares them to be pushed to a remote repository.
+git commit -m "$release_note"
+
+# Sets the new remote
+git_remote=`git remote`
+if [ "$git_remote" = "" ]; then # git remote not defined
+
+ if [ "$GIT_TOKEN" = "" ]; then
+ echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the Git credential in your environment."
+ git remote add origin https://github.com/${git_user_id}/${git_repo_id}.git
+ else
+ git remote add origin https://${git_user_id}:${GIT_TOKEN}@github.com/${git_user_id}/${git_repo_id}.git
+ fi
+
+fi
+
+git pull origin master
+
+# Pushes (Forces) the changes in the local repository up to the remote repository
+echo "Git pushing to https://github.com/${git_user_id}/${git_repo_id}.git"
+git push origin master 2>&1 | grep -v 'To https'
+
diff --git a/masteringModule/node_modules/aimastering/mocha.opts b/masteringModule/node_modules/aimastering/mocha.opts
new file mode 100644
index 0000000000000000000000000000000000000000..907011807d680edb272de32bab832a628e2d5064
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/mocha.opts
@@ -0,0 +1 @@
+--timeout 10000
diff --git a/masteringModule/node_modules/aimastering/package.json b/masteringModule/node_modules/aimastering/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..6924b3e8e8978eb47be01edab5444c9e97b0bb6a
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "aimastering",
+ "version": "1.1.0",
+ "description": "This_is_a_AI_Mastering_API_document__You_can_use_the_mastering_feature_of__AI_Mastering_httpsaimastering_com_through_this_API_",
+ "license": "Apache 2.0",
+ "main": "src/index.js",
+ "scripts": {
+ "test": "./node_modules/mocha/bin/mocha --recursive"
+ },
+ "browser": {
+ "fs": false
+ },
+ "dependencies": {
+ "superagent": "3.5.2"
+ },
+ "devDependencies": {
+ "mocha": "~2.3.4",
+ "sinon": "1.17.3",
+ "expect.js": "~0.3.1"
+ }
+}
diff --git a/masteringModule/node_modules/aimastering/src/ApiClient.js b/masteringModule/node_modules/aimastering/src/ApiClient.js
new file mode 100644
index 0000000000000000000000000000000000000000..6dfa4fb6f12ab7c821aeab961e49f95d173f13b8
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/ApiClient.js
@@ -0,0 +1,598 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['superagent', 'querystring'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('superagent'), require('querystring'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.ApiClient = factory(root.superagent, root.querystring);
+ }
+}(this, function(superagent, querystring) {
+ 'use strict';
+
+ /**
+ * @module ApiClient
+ * @version 1.1.0
+ */
+
+ /**
+ * Manages low level client-server communications, parameter marshalling, etc. There should not be any need for an
+ * application to use this class directly - the *Api and model classes provide the public API for the service. The
+ * contents of this file should be regarded as internal but are documented for completeness.
+ * @alias module:ApiClient
+ * @class
+ */
+ var exports = function() {
+ /**
+ * The base URL against which to resolve every API call's (relative) path.
+ * @type {String}
+ * @default https://api.bakuage.com:443
+ */
+ this.basePath = 'https://api.bakuage.com:443'.replace(/\/+$/, '');
+
+ /**
+ * The authentication methods to be included for all API calls.
+ * @type {Array.}
+ */
+ this.authentications = {
+ 'bearer': {type: 'apiKey', 'in': 'header', name: 'Authorization'}
+ };
+ /**
+ * The default HTTP headers to be included for all API calls.
+ * @type {Array.}
+ * @default {}
+ */
+ this.defaultHeaders = {};
+
+ /**
+ * The default HTTP timeout for all API calls.
+ * @type {Number}
+ * @default 60000
+ */
+ this.timeout = 60000;
+
+ /**
+ * If set to false an additional timestamp parameter is added to all API GET calls to
+ * prevent browser caching
+ * @type {Boolean}
+ * @default true
+ */
+ this.cache = true;
+
+ /**
+ * If set to true, the client will save the cookies from each server
+ * response, and return them in the next request.
+ * @default false
+ */
+ this.enableCookies = false;
+
+ /*
+ * Used to save and return cookies in a node.js (non-browser) setting,
+ * if this.enableCookies is set to true.
+ */
+ if (typeof window === 'undefined') {
+ this.agent = new superagent.agent();
+ }
+
+ /*
+ * Allow user to override superagent agent
+ */
+ this.requestAgent = null;
+ };
+
+ /**
+ * Returns a string representation for an actual parameter.
+ * @param param The actual parameter.
+ * @returns {String} The string representation of param.
+ */
+ exports.prototype.paramToString = function(param) {
+ if (param == undefined || param == null) {
+ return '';
+ }
+ if (param instanceof Date) {
+ return param.toJSON();
+ }
+ return param.toString();
+ };
+
+ /**
+ * Builds full URL by appending the given path to the base URL and replacing path parameter place-holders with parameter values.
+ * NOTE: query parameters are not handled here.
+ * @param {String} path The path to append to the base URL.
+ * @param {Object} pathParams The parameter values to append.
+ * @returns {String} The encoded path with parameter values substituted.
+ */
+ exports.prototype.buildUrl = function(path, pathParams) {
+ if (!path.match(/^\//)) {
+ path = '/' + path;
+ }
+ var url = this.basePath + path;
+ var _this = this;
+ url = url.replace(/\{([\w-]+)\}/g, function(fullMatch, key) {
+ var value;
+ if (pathParams.hasOwnProperty(key)) {
+ value = _this.paramToString(pathParams[key]);
+ } else {
+ value = fullMatch;
+ }
+ return encodeURIComponent(value);
+ });
+ return url;
+ };
+
+ /**
+ * Checks whether the given content type represents JSON.
+ * JSON content type examples:
+ *
+ *
application/json
+ *
application/json; charset=UTF8
+ *
APPLICATION/JSON
+ *
+ * @param {String} contentType The MIME content type to check.
+ * @returns {Boolean} true if contentType represents JSON, otherwise false.
+ */
+ exports.prototype.isJsonMime = function(contentType) {
+ return Boolean(contentType != null && contentType.match(/^application\/json(;.*)?$/i));
+ };
+
+ /**
+ * Chooses a content type from the given array, with JSON preferred; i.e. return JSON if included, otherwise return the first.
+ * @param {Array.} contentTypes
+ * @returns {String} The chosen content type, preferring JSON.
+ */
+ exports.prototype.jsonPreferredMime = function(contentTypes) {
+ for (var i = 0; i < contentTypes.length; i++) {
+ if (this.isJsonMime(contentTypes[i])) {
+ return contentTypes[i];
+ }
+ }
+ return contentTypes[0];
+ };
+
+ /**
+ * Checks whether the given parameter value represents file-like content.
+ * @param param The parameter to check.
+ * @returns {Boolean} true if param represents a file.
+ */
+ exports.prototype.isFileParam = function(param) {
+ // fs.ReadStream in Node.js and Electron (but not in runtime like browserify)
+ if (typeof require === 'function') {
+ var fs;
+ try {
+ fs = require('fs');
+ } catch (err) {}
+ if (fs && fs.ReadStream && param instanceof fs.ReadStream) {
+ return true;
+ }
+ }
+ // Buffer in Node.js
+ if (typeof Buffer === 'function' && param instanceof Buffer) {
+ return true;
+ }
+ // Blob in browser
+ if (typeof Blob === 'function' && param instanceof Blob) {
+ return true;
+ }
+ // File in browser (it seems File object is also instance of Blob, but keep this for safe)
+ if (typeof File === 'function' && param instanceof File) {
+ return true;
+ }
+ return false;
+ };
+
+ /**
+ * Normalizes parameter values:
+ *
+ *
remove nils
+ *
keep files and arrays
+ *
format to string with `paramToString` for other cases
+ *
+ * @param {Object.} params The parameters as object properties.
+ * @returns {Object.} normalized parameters.
+ */
+ exports.prototype.normalizeParams = function(params) {
+ var newParams = {};
+ for (var key in params) {
+ if (params.hasOwnProperty(key) && params[key] != undefined && params[key] != null) {
+ var value = params[key];
+ if (this.isFileParam(value) || Array.isArray(value)) {
+ newParams[key] = value;
+ } else {
+ newParams[key] = this.paramToString(value);
+ }
+ }
+ }
+ return newParams;
+ };
+
+ /**
+ * Enumeration of collection format separator strategies.
+ * @enum {String}
+ * @readonly
+ */
+ exports.CollectionFormatEnum = {
+ /**
+ * Comma-separated values. Value: csv
+ * @const
+ */
+ CSV: ',',
+ /**
+ * Space-separated values. Value: ssv
+ * @const
+ */
+ SSV: ' ',
+ /**
+ * Tab-separated values. Value: tsv
+ * @const
+ */
+ TSV: '\t',
+ /**
+ * Pipe(|)-separated values. Value: pipes
+ * @const
+ */
+ PIPES: '|',
+ /**
+ * Native array. Value: multi
+ * @const
+ */
+ MULTI: 'multi'
+ };
+
+ /**
+ * Builds a string representation of an array-type actual parameter, according to the given collection format.
+ * @param {Array} param An array parameter.
+ * @param {module:ApiClient.CollectionFormatEnum} collectionFormat The array element separator strategy.
+ * @returns {String|Array} A string representation of the supplied collection, using the specified delimiter. Returns
+ * param as is if collectionFormat is multi.
+ */
+ exports.prototype.buildCollectionParam = function buildCollectionParam(param, collectionFormat) {
+ if (param == null) {
+ return null;
+ }
+ switch (collectionFormat) {
+ case 'csv':
+ return param.map(this.paramToString).join(',');
+ case 'ssv':
+ return param.map(this.paramToString).join(' ');
+ case 'tsv':
+ return param.map(this.paramToString).join('\t');
+ case 'pipes':
+ return param.map(this.paramToString).join('|');
+ case 'multi':
+ // return the array directly as SuperAgent will handle it as expected
+ return param.map(this.paramToString);
+ default:
+ throw new Error('Unknown collection format: ' + collectionFormat);
+ }
+ };
+
+ /**
+ * Applies authentication headers to the request.
+ * @param {Object} request The request object created by a superagent() call.
+ * @param {Array.} authNames An array of authentication method names.
+ */
+ exports.prototype.applyAuthToRequest = function(request, authNames) {
+ var _this = this;
+ authNames.forEach(function(authName) {
+ var auth = _this.authentications[authName];
+ switch (auth.type) {
+ case 'basic':
+ if (auth.username || auth.password) {
+ request.auth(auth.username || '', auth.password || '');
+ }
+ break;
+ case 'apiKey':
+ if (auth.apiKey) {
+ var data = {};
+ if (auth.apiKeyPrefix) {
+ data[auth.name] = auth.apiKeyPrefix + ' ' + auth.apiKey;
+ } else {
+ data[auth.name] = auth.apiKey;
+ }
+ if (auth['in'] === 'header') {
+ request.set(data);
+ } else {
+ request.query(data);
+ }
+ }
+ break;
+ case 'oauth2':
+ if (auth.accessToken) {
+ request.set({'Authorization': 'Bearer ' + auth.accessToken});
+ }
+ break;
+ default:
+ throw new Error('Unknown authentication type: ' + auth.type);
+ }
+ });
+ };
+
+ /**
+ * Deserializes an HTTP response body into a value of the specified type.
+ * @param {Object} response A SuperAgent response object.
+ * @param {(String|Array.|Object.|Function)} returnType The type to return. Pass a string for simple types
+ * or the constructor function for a complex type. Pass an array containing the type name to return an array of that type. To
+ * return an object, pass an object with one property whose name is the key type and whose value is the corresponding value type:
+ * all properties on data will be converted to this type.
+ * @returns A value of the specified type.
+ */
+ exports.prototype.deserialize = function deserialize(response, returnType) {
+ if (response == null || returnType == null || response.status == 204) {
+ return null;
+ }
+ // Rely on SuperAgent for parsing response body.
+ // See http://visionmedia.github.io/superagent/#parsing-response-bodies
+ var data = response.body;
+ if (data == null || (typeof data === 'object' && typeof data.length === 'undefined' && !Object.keys(data).length)) {
+ // SuperAgent does not always produce a body; use the unparsed response as a fallback
+ data = response.text;
+ }
+ return exports.convertToType(data, returnType);
+ };
+
+ /**
+ * Callback function to receive the result of the operation.
+ * @callback module:ApiClient~callApiCallback
+ * @param {String} error Error message, if any.
+ * @param data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Invokes the REST service using the supplied settings and parameters.
+ * @param {String} path The base URL to invoke.
+ * @param {String} httpMethod The HTTP method to use.
+ * @param {Object.} pathParams A map of path parameters and their values.
+ * @param {Object.} queryParams A map of query parameters and their values.
+ * @param {Object.} collectionQueryParams A map of collection query parameters and their values.
+ * @param {Object.} headerParams A map of header parameters and their values.
+ * @param {Object.} formParams A map of form parameters and their values.
+ * @param {Object} bodyParam The value to pass as the request body.
+ * @param {Array.} authNames An array of authentication type names.
+ * @param {Array.} contentTypes An array of request MIME types.
+ * @param {Array.} accepts An array of acceptable response MIME types.
+ * @param {(String|Array|ObjectFunction)} returnType The required type to return; can be a string for simple types or the
+ * constructor for a complex type.
+ * @param {module:ApiClient~callApiCallback} callback The callback function.
+ * @returns {Object} The SuperAgent request object.
+ */
+ exports.prototype.callApi = function callApi(path, httpMethod, pathParams,
+ queryParams, collectionQueryParams, headerParams, formParams, bodyParam, authNames, contentTypes, accepts,
+ returnType, callback) {
+
+ var _this = this;
+ var url = this.buildUrl(path, pathParams);
+ var request = superagent(httpMethod, url);
+
+ // apply authentications
+ this.applyAuthToRequest(request, authNames);
+
+ // set collection query parameters
+ for (var key in collectionQueryParams) {
+ if (collectionQueryParams.hasOwnProperty(key)) {
+ var param = collectionQueryParams[key];
+ if (param.collectionFormat === 'csv') {
+ // SuperAgent normally percent-encodes all reserved characters in a query parameter. However,
+ // commas are used as delimiters for the 'csv' collectionFormat so they must not be encoded. We
+ // must therefore construct and encode 'csv' collection query parameters manually.
+ if (param.value != null) {
+ var value = param.value.map(this.paramToString).map(encodeURIComponent).join(',');
+ request.query(encodeURIComponent(key) + "=" + value);
+ }
+ } else {
+ // All other collection query parameters should be treated as ordinary query parameters.
+ queryParams[key] = this.buildCollectionParam(param.value, param.collectionFormat);
+ }
+ }
+ }
+
+ // set query parameters
+ if (httpMethod.toUpperCase() === 'GET' && this.cache === false) {
+ queryParams['_'] = new Date().getTime();
+ }
+ request.query(this.normalizeParams(queryParams));
+
+ // set header parameters
+ request.set(this.defaultHeaders).set(this.normalizeParams(headerParams));
+
+
+ // set requestAgent if it is set by user
+ if (this.requestAgent) {
+ request.agent(this.requestAgent);
+ }
+
+ // set request timeout
+ request.timeout(this.timeout);
+
+ var contentType = this.jsonPreferredMime(contentTypes);
+ if (contentType) {
+ // Issue with superagent and multipart/form-data (https://github.com/visionmedia/superagent/issues/746)
+ if(contentType != 'multipart/form-data') {
+ request.type(contentType);
+ }
+ } else if (!request.header['Content-Type']) {
+ request.type('application/json');
+ }
+
+ if (contentType === 'application/x-www-form-urlencoded') {
+ request.send(querystring.stringify(this.normalizeParams(formParams)));
+ } else if (contentType == 'multipart/form-data') {
+ var _formParams = this.normalizeParams(formParams);
+ for (var key in _formParams) {
+ if (_formParams.hasOwnProperty(key)) {
+ if (this.isFileParam(_formParams[key])) {
+ // file field
+ request.attach(key, _formParams[key]);
+ } else {
+ request.field(key, _formParams[key]);
+ }
+ }
+ }
+ } else if (bodyParam) {
+ request.send(bodyParam);
+ }
+
+ var accept = this.jsonPreferredMime(accepts);
+ if (accept) {
+ request.accept(accept);
+ }
+
+ if (returnType === 'Blob') {
+ request.responseType('blob');
+ } else if (returnType === 'String') {
+ request.responseType('string');
+ }
+
+ // Attach previously saved cookies, if enabled
+ if (this.enableCookies){
+ if (typeof window === 'undefined') {
+ this.agent.attachCookies(request);
+ }
+ else {
+ request.withCredentials();
+ }
+ }
+
+
+ request.end(function(error, response) {
+ if (callback) {
+ var data = null;
+ if (!error) {
+ try {
+ data = _this.deserialize(response, returnType);
+ if (_this.enableCookies && typeof window === 'undefined'){
+ _this.agent.saveCookies(response);
+ }
+ } catch (err) {
+ error = err;
+ }
+ }
+ callback(error, data, response);
+ }
+ });
+
+ return request;
+ };
+
+ /**
+ * Parses an ISO-8601 string representation of a date value.
+ * @param {String} str The date value as a string.
+ * @returns {Date} The parsed date object.
+ */
+ exports.parseDate = function(str) {
+ return new Date(str.replace(/T/i, ' '));
+ };
+
+ /**
+ * Converts a value to the specified type.
+ * @param {(String|Object)} data The data to convert, as a string or object.
+ * @param {(String|Array.|Object.|Function)} type The type to return. Pass a string for simple types
+ * or the constructor function for a complex type. Pass an array containing the type name to return an array of that type. To
+ * return an object, pass an object with one property whose name is the key type and whose value is the corresponding value type:
+ * all properties on data will be converted to this type.
+ * @returns An instance of the specified type or null or undefined if data is null or undefined.
+ */
+ exports.convertToType = function(data, type) {
+ if (data === null || data === undefined)
+ return data
+
+ switch (type) {
+ case 'Boolean':
+ return Boolean(data);
+ case 'Integer':
+ return parseInt(data, 10);
+ case 'Number':
+ return parseFloat(data);
+ case 'String':
+ return String(data);
+ case 'Date':
+ return this.parseDate(String(data));
+ case 'Blob':
+ return data;
+ default:
+ if (type === Object) {
+ // generic object, return directly
+ return data;
+ } else if (typeof type === 'function') {
+ // for model type like: User
+ return type.constructFromObject(data);
+ } else if (Array.isArray(type)) {
+ // for array type like: ['String']
+ var itemType = type[0];
+ return data.map(function(item) {
+ return exports.convertToType(item, itemType);
+ });
+ } else if (typeof type === 'object') {
+ // for plain object type like: {'String': 'Integer'}
+ var keyType, valueType;
+ for (var k in type) {
+ if (type.hasOwnProperty(k)) {
+ keyType = k;
+ valueType = type[k];
+ break;
+ }
+ }
+ var result = {};
+ for (var k in data) {
+ if (data.hasOwnProperty(k)) {
+ var key = exports.convertToType(k, keyType);
+ var value = exports.convertToType(data[k], valueType);
+ result[key] = value;
+ }
+ }
+ return result;
+ } else {
+ // for unknown type, return the data directly
+ return data;
+ }
+ }
+ };
+
+ /**
+ * Constructs a new map or array model from REST data.
+ * @param data {Object|Array} The REST data.
+ * @param obj {Object|Array} The target object or array.
+ */
+ exports.constructFromObject = function(data, obj, itemType) {
+ if (Array.isArray(data)) {
+ for (var i = 0; i < data.length; i++) {
+ if (data.hasOwnProperty(i))
+ obj[i] = exports.convertToType(data[i], itemType);
+ }
+ } else {
+ for (var k in data) {
+ if (data.hasOwnProperty(k))
+ obj[k] = exports.convertToType(data[k], itemType);
+ }
+ }
+ };
+
+ /**
+ * The default API client implementation.
+ * @type {module:ApiClient}
+ */
+ exports.instance = new exports();
+
+ return exports;
+}));
diff --git a/masteringModule/node_modules/aimastering/src/api/AccessTokenApi.js b/masteringModule/node_modules/aimastering/src/api/AccessTokenApi.js
new file mode 100644
index 0000000000000000000000000000000000000000..fea4dd696bc0d80ca85ad0e522f0feb32e1b377e
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/api/AccessTokenApi.js
@@ -0,0 +1,93 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/AccessToken'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'), require('../model/AccessToken'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.AccessTokenApi = factory(root.Aimastering.ApiClient, root.Aimastering.AccessToken);
+ }
+}(this, function(ApiClient, AccessToken) {
+ 'use strict';
+
+ /**
+ * AccessToken service.
+ * @module api/AccessTokenApi
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new AccessTokenApi.
+ * @alias module:api/AccessTokenApi
+ * @class
+ * @param {module:ApiClient} [apiClient] Optional API client implementation to use,
+ * default to {@link module:ApiClient#instance} if unspecified.
+ */
+ var exports = function(apiClient) {
+ this.apiClient = apiClient || ApiClient.instance;
+
+
+ /**
+ * Callback function to receive the result of the createAccessToken operation.
+ * @callback module:api/AccessTokenApi~createAccessTokenCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/AccessToken} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Create an API access token.
+ * @param {module:api/AccessTokenApi~createAccessTokenCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/AccessToken}
+ */
+ this.createAccessToken = function(callback) {
+ var postBody = null;
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = AccessToken;
+
+ return this.apiClient.callApi(
+ '/access_tokens', 'POST',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+ };
+
+ return exports;
+}));
diff --git a/masteringModule/node_modules/aimastering/src/api/AmazonSubscriptionApi.js b/masteringModule/node_modules/aimastering/src/api/AmazonSubscriptionApi.js
new file mode 100644
index 0000000000000000000000000000000000000000..8b90e0d7dfe71f69feecac94d97af26c01a526c1
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/api/AmazonSubscriptionApi.js
@@ -0,0 +1,93 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/AmazonSubscription'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'), require('../model/AmazonSubscription'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.AmazonSubscriptionApi = factory(root.Aimastering.ApiClient, root.Aimastering.AmazonSubscription);
+ }
+}(this, function(ApiClient, AmazonSubscription) {
+ 'use strict';
+
+ /**
+ * AmazonSubscription service.
+ * @module api/AmazonSubscriptionApi
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new AmazonSubscriptionApi.
+ * @alias module:api/AmazonSubscriptionApi
+ * @class
+ * @param {module:ApiClient} [apiClient] Optional API client implementation to use,
+ * default to {@link module:ApiClient#instance} if unspecified.
+ */
+ var exports = function(apiClient) {
+ this.apiClient = apiClient || ApiClient.instance;
+
+
+ /**
+ * Callback function to receive the result of the listAmazonSubscriptions operation.
+ * @callback module:api/AmazonSubscriptionApi~listAmazonSubscriptionsCallback
+ * @param {String} error Error message, if any.
+ * @param {Array.} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get all accessable amazon subscriptions.
+ * @param {module:api/AmazonSubscriptionApi~listAmazonSubscriptionsCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link Array.}
+ */
+ this.listAmazonSubscriptions = function(callback) {
+ var postBody = null;
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = [AmazonSubscription];
+
+ return this.apiClient.callApi(
+ '/amazon_subscriptions', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+ };
+
+ return exports;
+}));
diff --git a/masteringModule/node_modules/aimastering/src/api/AudioApi.js b/masteringModule/node_modules/aimastering/src/api/AudioApi.js
new file mode 100644
index 0000000000000000000000000000000000000000..b046b3ca1a9703e705359287ad18027623b26aaa
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/api/AudioApi.js
@@ -0,0 +1,374 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/Audio', 'model/AudioAnalysis', 'model/AudioDownloadToken'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'), require('../model/Audio'), require('../model/AudioAnalysis'), require('../model/AudioDownloadToken'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.AudioApi = factory(root.Aimastering.ApiClient, root.Aimastering.Audio, root.Aimastering.AudioAnalysis, root.Aimastering.AudioDownloadToken);
+ }
+}(this, function(ApiClient, Audio, AudioAnalysis, AudioDownloadToken) {
+ 'use strict';
+
+ /**
+ * Audio service.
+ * @module api/AudioApi
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new AudioApi.
+ * @alias module:api/AudioApi
+ * @class
+ * @param {module:ApiClient} [apiClient] Optional API client implementation to use,
+ * default to {@link module:ApiClient#instance} if unspecified.
+ */
+ var exports = function(apiClient) {
+ this.apiClient = apiClient || ApiClient.instance;
+
+
+ /**
+ * Callback function to receive the result of the createAudio operation.
+ * @callback module:api/AudioApi~createAudioCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/Audio} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Create a new audio.
+ * @param {Object} opts Optional parameters
+ * @param {File} opts.file The file to upload.
+ * @param {String} opts.name Audio name. If this is not specified, the name in file parameter is used.
+ * @param {module:api/AudioApi~createAudioCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/Audio}
+ */
+ this.createAudio = function(opts, callback) {
+ opts = opts || {};
+ var postBody = null;
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ 'file': opts['file'],
+ 'name': opts['name']
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = ['multipart/form-data'];
+ var accepts = ['application/json'];
+ var returnType = Audio;
+
+ return this.apiClient.callApi(
+ '/audios', 'POST',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the downloadAudio operation.
+ * @callback module:api/AudioApi~downloadAudioCallback
+ * @param {String} error Error message, if any.
+ * @param {'Blob'} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Download an audio data by id.
+ * @param {Number} id Audio id
+ * @param {module:api/AudioApi~downloadAudioCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link 'Blob'}
+ */
+ this.downloadAudio = function(id, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling downloadAudio");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/octet-stream'];
+ var returnType = 'Blob';
+
+ return this.apiClient.callApi(
+ '/audios/{id}/download', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the downloadAudioByToken operation.
+ * @callback module:api/AudioApi~downloadAudioByTokenCallback
+ * @param {String} error Error message, if any.
+ * @param {'Blob'} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Download an audio data by audio_download_token.
+ * @param {String} downloadToken Audio download token
+ * @param {module:api/AudioApi~downloadAudioByTokenCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link 'Blob'}
+ */
+ this.downloadAudioByToken = function(downloadToken, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'downloadToken' is set
+ if (downloadToken === undefined || downloadToken === null) {
+ throw new Error("Missing the required parameter 'downloadToken' when calling downloadAudioByToken");
+ }
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ 'download_token': downloadToken,
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/octet-stream'];
+ var returnType = 'Blob';
+
+ return this.apiClient.callApi(
+ '/audios/download_by_token', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the getAudio operation.
+ * @callback module:api/AudioApi~getAudioCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/Audio} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get an audio by id.
+ * @param {Number} id Audio id
+ * @param {module:api/AudioApi~getAudioCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/Audio}
+ */
+ this.getAudio = function(id, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling getAudio");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = Audio;
+
+ return this.apiClient.callApi(
+ '/audios/{id}', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the getAudioAnalysis operation.
+ * @callback module:api/AudioApi~getAudioAnalysisCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/AudioAnalysis} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get an audio analysis by id.
+ * @param {Number} id Audio id
+ * @param {module:api/AudioApi~getAudioAnalysisCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/AudioAnalysis}
+ */
+ this.getAudioAnalysis = function(id, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling getAudioAnalysis");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = AudioAnalysis;
+
+ return this.apiClient.callApi(
+ '/audios/{id}/analysis', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the getAudioDownloadToken operation.
+ * @callback module:api/AudioApi~getAudioDownloadTokenCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/AudioDownloadToken} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get an audio download token by id.
+ * @param {Number} id Audio id
+ * @param {module:api/AudioApi~getAudioDownloadTokenCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/AudioDownloadToken}
+ */
+ this.getAudioDownloadToken = function(id, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling getAudioDownloadToken");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = AudioDownloadToken;
+
+ return this.apiClient.callApi(
+ '/audios/{id}/download_token', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the listAudios operation.
+ * @callback module:api/AudioApi~listAudiosCallback
+ * @param {String} error Error message, if any.
+ * @param {Array.} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get all audios accessable.
+ * @param {module:api/AudioApi~listAudiosCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link Array.}
+ */
+ this.listAudios = function(callback) {
+ var postBody = null;
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = [Audio];
+
+ return this.apiClient.callApi(
+ '/audios', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+ };
+
+ return exports;
+}));
diff --git a/masteringModule/node_modules/aimastering/src/api/ConfigApi.js b/masteringModule/node_modules/aimastering/src/api/ConfigApi.js
new file mode 100644
index 0000000000000000000000000000000000000000..7bf6066b649375e565e8705dc73733c074c01e1d
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/api/ConfigApi.js
@@ -0,0 +1,93 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/Config'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'), require('../model/Config'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.ConfigApi = factory(root.Aimastering.ApiClient, root.Aimastering.Config);
+ }
+}(this, function(ApiClient, Config) {
+ 'use strict';
+
+ /**
+ * Config service.
+ * @module api/ConfigApi
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new ConfigApi.
+ * @alias module:api/ConfigApi
+ * @class
+ * @param {module:ApiClient} [apiClient] Optional API client implementation to use,
+ * default to {@link module:ApiClient#instance} if unspecified.
+ */
+ var exports = function(apiClient) {
+ this.apiClient = apiClient || ApiClient.instance;
+
+
+ /**
+ * Callback function to receive the result of the getConfig operation.
+ * @callback module:api/ConfigApi~getConfigCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/Config} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get config.
+ * @param {module:api/ConfigApi~getConfigCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/Config}
+ */
+ this.getConfig = function(callback) {
+ var postBody = null;
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = Config;
+
+ return this.apiClient.callApi(
+ '/config', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+ };
+
+ return exports;
+}));
diff --git a/masteringModule/node_modules/aimastering/src/api/ExternalSearchApi.js b/masteringModule/node_modules/aimastering/src/api/ExternalSearchApi.js
new file mode 100644
index 0000000000000000000000000000000000000000..a376de2e1dd965106d109c43d473ac33e81a06f8
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/api/ExternalSearchApi.js
@@ -0,0 +1,107 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/ExternalSearchResult'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'), require('../model/ExternalSearchResult'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.ExternalSearchApi = factory(root.Aimastering.ApiClient, root.Aimastering.ExternalSearchResult);
+ }
+}(this, function(ApiClient, ExternalSearchResult) {
+ 'use strict';
+
+ /**
+ * ExternalSearch service.
+ * @module api/ExternalSearchApi
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new ExternalSearchApi.
+ * @alias module:api/ExternalSearchApi
+ * @class
+ * @param {module:ApiClient} [apiClient] Optional API client implementation to use,
+ * default to {@link module:ApiClient#instance} if unspecified.
+ */
+ var exports = function(apiClient) {
+ this.apiClient = apiClient || ApiClient.instance;
+
+
+ /**
+ * Callback function to receive the result of the searchExternal operation.
+ * @callback module:api/ExternalSearchApi~searchExternalCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/ExternalSearchResult} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Search external music and get name, url, thumbnails, etc.
+ * @param {String} query Search query
+ * @param {String} country Country ex. US, JP, etc
+ * @param {module:api/ExternalSearchApi~searchExternalCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/ExternalSearchResult}
+ */
+ this.searchExternal = function(query, country, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'query' is set
+ if (query === undefined || query === null) {
+ throw new Error("Missing the required parameter 'query' when calling searchExternal");
+ }
+
+ // verify the required parameter 'country' is set
+ if (country === undefined || country === null) {
+ throw new Error("Missing the required parameter 'country' when calling searchExternal");
+ }
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ 'query': query,
+ 'country': country,
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = ExternalSearchResult;
+
+ return this.apiClient.callApi(
+ '/external_search', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+ };
+
+ return exports;
+}));
diff --git a/masteringModule/node_modules/aimastering/src/api/LibraryAudioApi.js b/masteringModule/node_modules/aimastering/src/api/LibraryAudioApi.js
new file mode 100644
index 0000000000000000000000000000000000000000..175b3e650bcd9e4153caef4d1fb927851716fae3
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/api/LibraryAudioApi.js
@@ -0,0 +1,376 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/LibraryAudio', 'model/LibraryAudioAnalysis', 'model/LibraryAudioLike'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'), require('../model/LibraryAudio'), require('../model/LibraryAudioAnalysis'), require('../model/LibraryAudioLike'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.LibraryAudioApi = factory(root.Aimastering.ApiClient, root.Aimastering.LibraryAudio, root.Aimastering.LibraryAudioAnalysis, root.Aimastering.LibraryAudioLike);
+ }
+}(this, function(ApiClient, LibraryAudio, LibraryAudioAnalysis, LibraryAudioLike) {
+ 'use strict';
+
+ /**
+ * LibraryAudio service.
+ * @module api/LibraryAudioApi
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new LibraryAudioApi.
+ * @alias module:api/LibraryAudioApi
+ * @class
+ * @param {module:ApiClient} [apiClient] Optional API client implementation to use,
+ * default to {@link module:ApiClient#instance} if unspecified.
+ */
+ var exports = function(apiClient) {
+ this.apiClient = apiClient || ApiClient.instance;
+
+
+ /**
+ * Callback function to receive the result of the createLibraryAudio operation.
+ * @callback module:api/LibraryAudioApi~createLibraryAudioCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/LibraryAudio} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Create a new library audio.
+ * @param {Object} opts Optional parameters
+ * @param {File} opts.file The file to upload.
+ * @param {module:api/LibraryAudioApi~createLibraryAudioCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/LibraryAudio}
+ */
+ this.createLibraryAudio = function(opts, callback) {
+ opts = opts || {};
+ var postBody = null;
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ 'file': opts['file']
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = ['multipart/form-data'];
+ var accepts = ['application/json'];
+ var returnType = LibraryAudio;
+
+ return this.apiClient.callApi(
+ '/library_audios', 'POST',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the createLibraryAudioLike operation.
+ * @callback module:api/LibraryAudioApi~createLibraryAudioLikeCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/LibraryAudioLike} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Create a new library audio like.
+ * @param {Number} id Library audio id
+ * @param {module:api/LibraryAudioApi~createLibraryAudioLikeCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/LibraryAudioLike}
+ */
+ this.createLibraryAudioLike = function(id, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling createLibraryAudioLike");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = ['multipart/form-data'];
+ var accepts = ['application/json'];
+ var returnType = LibraryAudioLike;
+
+ return this.apiClient.callApi(
+ '/library_audios/{id}/like', 'POST',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the deleteLibraryAudio operation.
+ * @callback module:api/LibraryAudioApi~deleteLibraryAudioCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/LibraryAudio} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Delete library audio.
+ * @param {Number} id Library audio id
+ * @param {module:api/LibraryAudioApi~deleteLibraryAudioCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/LibraryAudio}
+ */
+ this.deleteLibraryAudio = function(id, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling deleteLibraryAudio");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = ['multipart/form-data'];
+ var accepts = ['application/json'];
+ var returnType = LibraryAudio;
+
+ return this.apiClient.callApi(
+ '/library_audios/{id}', 'DELETE',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the getLibraryAudio operation.
+ * @callback module:api/LibraryAudioApi~getLibraryAudioCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/LibraryAudio} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get a library audio by id.
+ * @param {Number} id Library audio id
+ * @param {module:api/LibraryAudioApi~getLibraryAudioCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/LibraryAudio}
+ */
+ this.getLibraryAudio = function(id, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling getLibraryAudio");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = LibraryAudio;
+
+ return this.apiClient.callApi(
+ '/library_audios/{id}', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the getLibraryAudioAnalysis operation.
+ * @callback module:api/LibraryAudioApi~getLibraryAudioAnalysisCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/LibraryAudioAnalysis} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get a library audio analysis by id.
+ * @param {Number} id Library audio id
+ * @param {module:api/LibraryAudioApi~getLibraryAudioAnalysisCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/LibraryAudioAnalysis}
+ */
+ this.getLibraryAudioAnalysis = function(id, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling getLibraryAudioAnalysis");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = LibraryAudioAnalysis;
+
+ return this.apiClient.callApi(
+ '/library_audios/{id}/analysis', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the listLibraryAudios operation.
+ * @callback module:api/LibraryAudioApi~listLibraryAudiosCallback
+ * @param {String} error Error message, if any.
+ * @param {Array.} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get all library audios accessable.
+ * @param {module:api/LibraryAudioApi~listLibraryAudiosCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link Array.}
+ */
+ this.listLibraryAudios = function(callback) {
+ var postBody = null;
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = [LibraryAudio];
+
+ return this.apiClient.callApi(
+ '/library_audios', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the updateLibraryAudio operation.
+ * @callback module:api/LibraryAudioApi~updateLibraryAudioCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/LibraryAudio} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Update library audio.
+ * @param {Number} id Library audio id
+ * @param {Object} opts Optional parameters
+ * @param {Boolean} opts.isPublic Whether the library audio is public.
+ * @param {module:api/LibraryAudioApi~updateLibraryAudioCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/LibraryAudio}
+ */
+ this.updateLibraryAudio = function(id, opts, callback) {
+ opts = opts || {};
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling updateLibraryAudio");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ 'is_public': opts['isPublic']
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = ['multipart/form-data'];
+ var accepts = ['application/json'];
+ var returnType = LibraryAudio;
+
+ return this.apiClient.callApi(
+ '/library_audios/{id}', 'PUT',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+ };
+
+ return exports;
+}));
diff --git a/masteringModule/node_modules/aimastering/src/api/MasteringApi.js b/masteringModule/node_modules/aimastering/src/api/MasteringApi.js
new file mode 100644
index 0000000000000000000000000000000000000000..fff94659359220a70332b040216828b63d466eda
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/api/MasteringApi.js
@@ -0,0 +1,596 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/Mastering'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'), require('../model/Mastering'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.MasteringApi = factory(root.Aimastering.ApiClient, root.Aimastering.Mastering);
+ }
+}(this, function(ApiClient, Mastering) {
+ 'use strict';
+
+ /**
+ * Mastering service.
+ * @module api/MasteringApi
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new MasteringApi.
+ * @alias module:api/MasteringApi
+ * @class
+ * @param {module:ApiClient} [apiClient] Optional API client implementation to use,
+ * default to {@link module:ApiClient#instance} if unspecified.
+ */
+ var exports = function(apiClient) {
+ this.apiClient = apiClient || ApiClient.instance;
+
+
+ /**
+ * Callback function to receive the result of the cancelMastering operation.
+ * @callback module:api/MasteringApi~cancelMasteringCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/Mastering} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Cancel a mastering by id.
+ * @param {Number} id Mastering id
+ * @param {module:api/MasteringApi~cancelMasteringCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/Mastering}
+ */
+ this.cancelMastering = function(id, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling cancelMastering");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = Mastering;
+
+ return this.apiClient.callApi(
+ '/masterings/{id}/cancel', 'PUT',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the createMastering operation.
+ * @callback module:api/MasteringApi~createMasteringCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/Mastering} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Create a new mastering.
+ * @param {Number} inputAudioId Input audio id
+ * @param {Object} opts Optional parameters
+ * @param {module:model/String} opts.mode Mode (default to default)
+ * @param {Boolean} opts.bassPreservation This parameter represents if the bass preservation is enabled. (default to false)
+ * @param {Boolean} opts.mastering This parameter represents if the mastering is enabled. This parameter is effective only when the mode is \"default\" or \"custom\". (default to false)
+ * @param {module:model/String} opts.masteringAlgorithm (default to v2)
+ * @param {Boolean} opts.noiseReduction This parameter represents if the nosie reduction is enabled. This parameter is effective only when the mode is \"custom\". (default to false)
+ * @param {module:model/String} opts.preset This parameter is effective only when the mode is \"custom\". (default to general)
+ * @param {Number} opts.targetLoudness This parameter represents the target loudness of the output audio in dB. This parameter is effective only when the mode is \"custom\". (default to -5)
+ * @param {module:model/String} opts.targetLoudnessMode (default to loudness)
+ * @param {Number} opts.masteringMatchingLevel This parameter represents the mastering reference matching level. This parameter is effective only when the mode is \"custom\" and the mastering is enabled. (default to 0.5)
+ * @param {Boolean} opts.masteringReverb This parameter represents if the mastering reverb is enabled. This parameter is effective only when the mode is \"custom\" and the mastering is enabled. (default to false)
+ * @param {Number} opts.masteringReverbGain This parameter represents the mastering reverb gain relative to the dry sound in dB. This parameter is effective only when the mode is \"custom\" and the mastering is \"true\" and the mastering_reverb is \"true\". (default to -36)
+ * @param {Number} opts.referenceAudioId Reference audio id. This parameter is effective only when the mode is \"custom\" and the mastering is enabled.
+ * @param {Number} opts.lowCutFreq This parameter represents the low cut freq of the output audio in Hz. This parameter is effective only when the mode is \"custom\". (default to 20)
+ * @param {Number} opts.highCutFreq This parameter represents the high cut freq of the output audio in Hz. This parameter is effective only when the mode is \"custom\". (default to 20000)
+ * @param {Number} opts.ceiling (default to 0)
+ * @param {module:model/String} opts.ceilingMode (default to 0)
+ * @param {Number} opts.oversample (default to 1)
+ * @param {Number} opts.sampleRate This parameter represents the sample rate of the output audio in dB. This parameter is effective only when the mode is \"custom\". (default to 44100)
+ * @param {Number} opts.bitDepth This parameter represents the bit depth of the output audio in dB. This parameter is effective only when the mode is \"custom\". (default to 16)
+ * @param {module:model/String} opts.outputFormat This parameter represents the format of the output audio. This parameter is effective only when the mode is \"custom\". (default to wav)
+ * @param {Boolean} opts.forPreview If this is true, the mastering is treated for preview purpose (ex. not purchasable, not publishable, short lifetime). (default to false)
+ * @param {Number} opts.startAt Partial mastering start at. (default to 0)
+ * @param {Number} opts.endAt Partial mastering end at. (default to -1)
+ * @param {String} opts.videoTitle This parameter represents the title of output video. (default to )
+ * @param {module:api/MasteringApi~createMasteringCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/Mastering}
+ */
+ this.createMastering = function(inputAudioId, opts, callback) {
+ opts = opts || {};
+ var postBody = null;
+
+ // verify the required parameter 'inputAudioId' is set
+ if (inputAudioId === undefined || inputAudioId === null) {
+ throw new Error("Missing the required parameter 'inputAudioId' when calling createMastering");
+ }
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ 'mode': opts['mode'],
+ 'input_audio_id': inputAudioId,
+ 'bass_preservation': opts['bassPreservation'],
+ 'mastering': opts['mastering'],
+ 'mastering_algorithm': opts['masteringAlgorithm'],
+ 'noise_reduction': opts['noiseReduction'],
+ 'preset': opts['preset'],
+ 'target_loudness': opts['targetLoudness'],
+ 'target_loudness_mode': opts['targetLoudnessMode'],
+ 'mastering_matching_level': opts['masteringMatchingLevel'],
+ 'mastering_reverb': opts['masteringReverb'],
+ 'mastering_reverb_gain': opts['masteringReverbGain'],
+ 'reference_audio_id': opts['referenceAudioId'],
+ 'low_cut_freq': opts['lowCutFreq'],
+ 'high_cut_freq': opts['highCutFreq'],
+ 'ceiling': opts['ceiling'],
+ 'ceiling_mode': opts['ceilingMode'],
+ 'oversample': opts['oversample'],
+ 'sample_rate': opts['sampleRate'],
+ 'bit_depth': opts['bitDepth'],
+ 'output_format': opts['outputFormat'],
+ 'for_preview': opts['forPreview'],
+ 'start_at': opts['startAt'],
+ 'end_at': opts['endAt'],
+ 'video_title': opts['videoTitle']
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = ['multipart/form-data'];
+ var accepts = ['application/json'];
+ var returnType = Mastering;
+
+ return this.apiClient.callApi(
+ '/masterings', 'POST',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the deleteMastering operation.
+ * @callback module:api/MasteringApi~deleteMasteringCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/Mastering} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Delete mastering.
+ * @param {Number} id Mastering id
+ * @param {module:api/MasteringApi~deleteMasteringCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/Mastering}
+ */
+ this.deleteMastering = function(id, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling deleteMastering");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = Mastering;
+
+ return this.apiClient.callApi(
+ '/masterings/{id}', 'DELETE',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the freeUnlockMastering operation.
+ * @callback module:api/MasteringApi~freeUnlockMasteringCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/Mastering} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Free unlock a mastering by id.
+ * @param {Number} id Mastering id
+ * @param {module:api/MasteringApi~freeUnlockMasteringCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/Mastering}
+ */
+ this.freeUnlockMastering = function(id, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling freeUnlockMastering");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = Mastering;
+
+ return this.apiClient.callApi(
+ '/masterings/{id}/free_unlock', 'PUT',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the getMastering operation.
+ * @callback module:api/MasteringApi~getMasteringCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/Mastering} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get a mastering by id.
+ * @param {Number} id Mastering id
+ * @param {module:api/MasteringApi~getMasteringCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/Mastering}
+ */
+ this.getMastering = function(id, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling getMastering");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = Mastering;
+
+ return this.apiClient.callApi(
+ '/masterings/{id}', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the getMasteringUnlockProduct operation.
+ * @callback module:api/MasteringApi~getMasteringUnlockProductCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/Mastering} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Review a mastering by id.
+ * @param {Number} id Mastering id
+ * @param {module:api/MasteringApi~getMasteringUnlockProductCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/Mastering}
+ */
+ this.getMasteringUnlockProduct = function(id, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling getMasteringUnlockProduct");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = Mastering;
+
+ return this.apiClient.callApi(
+ '/masterings/{id}/unlock_product', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the listMasterings operation.
+ * @callback module:api/MasteringApi~listMasteringsCallback
+ * @param {String} error Error message, if any.
+ * @param {Array.} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get all accessable masterings.
+ * @param {module:api/MasteringApi~listMasteringsCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link Array.}
+ */
+ this.listMasterings = function(callback) {
+ var postBody = null;
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = [Mastering];
+
+ return this.apiClient.callApi(
+ '/masterings', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the publishMastering operation.
+ * @callback module:api/MasteringApi~publishMasteringCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/Mastering} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Publish a mastering by id.
+ * @param {Number} id Mastering id
+ * @param {String} accessToken This parameter represents if the access token of the publishment service API.
+ * @param {String} message This parameter represents the publishment message.
+ * @param {Object} opts Optional parameters
+ * @param {module:model/String} opts.service This parameter represents the publishment service.
+ * @param {String} opts.accessTokenSecret This parameter represents the access token secret of the publishment service API. This parameter is effective only when the service is \"twitter\".
+ * @param {module:api/MasteringApi~publishMasteringCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/Mastering}
+ */
+ this.publishMastering = function(id, accessToken, message, opts, callback) {
+ opts = opts || {};
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling publishMastering");
+ }
+
+ // verify the required parameter 'accessToken' is set
+ if (accessToken === undefined || accessToken === null) {
+ throw new Error("Missing the required parameter 'accessToken' when calling publishMastering");
+ }
+
+ // verify the required parameter 'message' is set
+ if (message === undefined || message === null) {
+ throw new Error("Missing the required parameter 'message' when calling publishMastering");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ 'service': opts['service'],
+ 'access_token': accessToken,
+ 'access_token_secret': opts['accessTokenSecret'],
+ 'message': message
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = ['multipart/form-data'];
+ var accepts = ['application/json'];
+ var returnType = Mastering;
+
+ return this.apiClient.callApi(
+ '/masterings/{id}/publish', 'POST',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the reviewMastering operation.
+ * @callback module:api/MasteringApi~reviewMasteringCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/Mastering} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Review a mastering by id.
+ * @param {Number} id Mastering id
+ * @param {Object} opts Optional parameters
+ * @param {String} opts.reviewComment This parameter represents the review comment.
+ * @param {Number} opts.reviewScore This parameter represents the review score.
+ * @param {module:api/MasteringApi~reviewMasteringCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/Mastering}
+ */
+ this.reviewMastering = function(id, opts, callback) {
+ opts = opts || {};
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling reviewMastering");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ 'review_comment': opts['reviewComment'],
+ 'review_score': opts['reviewScore']
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = ['multipart/form-data'];
+ var accepts = ['application/json'];
+ var returnType = Mastering;
+
+ return this.apiClient.callApi(
+ '/masterings/{id}/review', 'PUT',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the updateMastering operation.
+ * @callback module:api/MasteringApi~updateMasteringCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/Mastering} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Update a mastering.
+ * @param {Number} id Mastering id
+ * @param {Object} opts Optional parameters
+ * @param {Boolean} opts.preserved Disable auto delete.
+ * @param {module:api/MasteringApi~updateMasteringCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/Mastering}
+ */
+ this.updateMastering = function(id, opts, callback) {
+ opts = opts || {};
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling updateMastering");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ 'preserved': opts['preserved']
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = ['multipart/form-data'];
+ var accepts = ['application/json'];
+ var returnType = Mastering;
+
+ return this.apiClient.callApi(
+ '/masterings/{id}', 'PUT',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+ };
+
+ return exports;
+}));
diff --git a/masteringModule/node_modules/aimastering/src/api/PaymentApi.js b/masteringModule/node_modules/aimastering/src/api/PaymentApi.js
new file mode 100644
index 0000000000000000000000000000000000000000..98cbd3623274269f838e92ba1067e18a1067a804
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/api/PaymentApi.js
@@ -0,0 +1,252 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/Payment'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'), require('../model/Payment'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.PaymentApi = factory(root.Aimastering.ApiClient, root.Aimastering.Payment);
+ }
+}(this, function(ApiClient, Payment) {
+ 'use strict';
+
+ /**
+ * Payment service.
+ * @module api/PaymentApi
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new PaymentApi.
+ * @alias module:api/PaymentApi
+ * @class
+ * @param {module:ApiClient} [apiClient] Optional API client implementation to use,
+ * default to {@link module:ApiClient#instance} if unspecified.
+ */
+ var exports = function(apiClient) {
+ this.apiClient = apiClient || ApiClient.instance;
+
+
+ /**
+ * Callback function to receive the result of the createPayment operation.
+ * @callback module:api/PaymentApi~createPaymentCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/Payment} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Create a new payment.
+ * @param {String} productToken This parameter represents the product token.
+ * @param {module:model/String} service This parameter represents the payment message.
+ * @param {Object} opts Optional parameters
+ * @param {String} opts.token This parameter represents the card token. This parameter is effective only when the service is \"stripe\".
+ * @param {module:api/PaymentApi~createPaymentCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/Payment}
+ */
+ this.createPayment = function(productToken, service, opts, callback) {
+ opts = opts || {};
+ var postBody = null;
+
+ // verify the required parameter 'productToken' is set
+ if (productToken === undefined || productToken === null) {
+ throw new Error("Missing the required parameter 'productToken' when calling createPayment");
+ }
+
+ // verify the required parameter 'service' is set
+ if (service === undefined || service === null) {
+ throw new Error("Missing the required parameter 'service' when calling createPayment");
+ }
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ 'product_token': productToken,
+ 'service': service,
+ 'token': opts['token']
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = ['multipart/form-data'];
+ var accepts = ['application/json'];
+ var returnType = Payment;
+
+ return this.apiClient.callApi(
+ '/payments', 'POST',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the executePayment operation.
+ * @callback module:api/PaymentApi~executePaymentCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/Payment} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Execute a payment by id.
+ * @param {Number} id Payment id
+ * @param {String} payerId This parameter represents the card token. This parameter is effective only when the service is \"paypal\".
+ * @param {module:api/PaymentApi~executePaymentCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/Payment}
+ */
+ this.executePayment = function(id, payerId, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling executePayment");
+ }
+
+ // verify the required parameter 'payerId' is set
+ if (payerId === undefined || payerId === null) {
+ throw new Error("Missing the required parameter 'payerId' when calling executePayment");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ 'payer_id': payerId
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = ['multipart/form-data'];
+ var accepts = ['application/json'];
+ var returnType = Payment;
+
+ return this.apiClient.callApi(
+ '/payments/{id}/execute', 'PUT',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the getPayment operation.
+ * @callback module:api/PaymentApi~getPaymentCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/Payment} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get a payment by id.
+ * @param {Number} id Payment id
+ * @param {module:api/PaymentApi~getPaymentCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/Payment}
+ */
+ this.getPayment = function(id, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling getPayment");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = Payment;
+
+ return this.apiClient.callApi(
+ '/payments/{id}', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the listPayments operation.
+ * @callback module:api/PaymentApi~listPaymentsCallback
+ * @param {String} error Error message, if any.
+ * @param {Array.} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get all accessable payments.
+ * @param {module:api/PaymentApi~listPaymentsCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link Array.}
+ */
+ this.listPayments = function(callback) {
+ var postBody = null;
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = [Payment];
+
+ return this.apiClient.callApi(
+ '/payments', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+ };
+
+ return exports;
+}));
diff --git a/masteringModule/node_modules/aimastering/src/api/PaymentCustomerApi.js b/masteringModule/node_modules/aimastering/src/api/PaymentCustomerApi.js
new file mode 100644
index 0000000000000000000000000000000000000000..2c8033fcfc7dac42be3550adae9c658514b2d26d
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/api/PaymentCustomerApi.js
@@ -0,0 +1,93 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/PaymentCustomer'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'), require('../model/PaymentCustomer'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.PaymentCustomerApi = factory(root.Aimastering.ApiClient, root.Aimastering.PaymentCustomer);
+ }
+}(this, function(ApiClient, PaymentCustomer) {
+ 'use strict';
+
+ /**
+ * PaymentCustomer service.
+ * @module api/PaymentCustomerApi
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new PaymentCustomerApi.
+ * @alias module:api/PaymentCustomerApi
+ * @class
+ * @param {module:ApiClient} [apiClient] Optional API client implementation to use,
+ * default to {@link module:ApiClient#instance} if unspecified.
+ */
+ var exports = function(apiClient) {
+ this.apiClient = apiClient || ApiClient.instance;
+
+
+ /**
+ * Callback function to receive the result of the getDefaultPaymentCustomer operation.
+ * @callback module:api/PaymentCustomerApi~getDefaultPaymentCustomerCallback
+ * @param {String} error Error message, if any.
+ * @param {Array.} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get a default payment customer.
+ * @param {module:api/PaymentCustomerApi~getDefaultPaymentCustomerCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link Array.}
+ */
+ this.getDefaultPaymentCustomer = function(callback) {
+ var postBody = null;
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = [PaymentCustomer];
+
+ return this.apiClient.callApi(
+ '/payment_customers/default', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+ };
+
+ return exports;
+}));
diff --git a/masteringModule/node_modules/aimastering/src/api/PlanApi.js b/masteringModule/node_modules/aimastering/src/api/PlanApi.js
new file mode 100644
index 0000000000000000000000000000000000000000..d45a8ba12e7f0653506cc26fe8de567b380cf614
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/api/PlanApi.js
@@ -0,0 +1,93 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/Plan'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'), require('../model/Plan'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.PlanApi = factory(root.Aimastering.ApiClient, root.Aimastering.Plan);
+ }
+}(this, function(ApiClient, Plan) {
+ 'use strict';
+
+ /**
+ * Plan service.
+ * @module api/PlanApi
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new PlanApi.
+ * @alias module:api/PlanApi
+ * @class
+ * @param {module:ApiClient} [apiClient] Optional API client implementation to use,
+ * default to {@link module:ApiClient#instance} if unspecified.
+ */
+ var exports = function(apiClient) {
+ this.apiClient = apiClient || ApiClient.instance;
+
+
+ /**
+ * Callback function to receive the result of the listPlans operation.
+ * @callback module:api/PlanApi~listPlansCallback
+ * @param {String} error Error message, if any.
+ * @param {Array.} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get all accessable plans.
+ * @param {module:api/PlanApi~listPlansCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link Array.}
+ */
+ this.listPlans = function(callback) {
+ var postBody = null;
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = [Plan];
+
+ return this.apiClient.callApi(
+ '/plans', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+ };
+
+ return exports;
+}));
diff --git a/masteringModule/node_modules/aimastering/src/api/SpSubscriptionApi.js b/masteringModule/node_modules/aimastering/src/api/SpSubscriptionApi.js
new file mode 100644
index 0000000000000000000000000000000000000000..7c969bb958238a7626f22d32c974b3b159b75af4
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/api/SpSubscriptionApi.js
@@ -0,0 +1,144 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/SpSubscription'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'), require('../model/SpSubscription'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.SpSubscriptionApi = factory(root.Aimastering.ApiClient, root.Aimastering.SpSubscription);
+ }
+}(this, function(ApiClient, SpSubscription) {
+ 'use strict';
+
+ /**
+ * SpSubscription service.
+ * @module api/SpSubscriptionApi
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new SpSubscriptionApi.
+ * @alias module:api/SpSubscriptionApi
+ * @class
+ * @param {module:ApiClient} [apiClient] Optional API client implementation to use,
+ * default to {@link module:ApiClient#instance} if unspecified.
+ */
+ var exports = function(apiClient) {
+ this.apiClient = apiClient || ApiClient.instance;
+
+
+ /**
+ * Callback function to receive the result of the createSpSubscription operation.
+ * @callback module:api/SpSubscriptionApi~createSpSubscriptionCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/SpSubscription} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Create a new smartphone subscription.
+ * @param {module:model/String} service Service.
+ * @param {Object} opts Optional parameters
+ * @param {String} opts.receipt Base64 encoded app store receipt. This parameter is effective only when the service is \"appstore\".
+ * @param {module:api/SpSubscriptionApi~createSpSubscriptionCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/SpSubscription}
+ */
+ this.createSpSubscription = function(service, opts, callback) {
+ opts = opts || {};
+ var postBody = null;
+
+ // verify the required parameter 'service' is set
+ if (service === undefined || service === null) {
+ throw new Error("Missing the required parameter 'service' when calling createSpSubscription");
+ }
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ 'service': service,
+ 'receipt': opts['receipt']
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = ['multipart/form-data'];
+ var accepts = ['application/json'];
+ var returnType = SpSubscription;
+
+ return this.apiClient.callApi(
+ '/sp_subscriptions', 'POST',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the listSpSubscriptions operation.
+ * @callback module:api/SpSubscriptionApi~listSpSubscriptionsCallback
+ * @param {String} error Error message, if any.
+ * @param {Array.} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get all accessable smartphone subscriptions.
+ * @param {module:api/SpSubscriptionApi~listSpSubscriptionsCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link Array.}
+ */
+ this.listSpSubscriptions = function(callback) {
+ var postBody = null;
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = [SpSubscription];
+
+ return this.apiClient.callApi(
+ '/sp_subscriptions', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+ };
+
+ return exports;
+}));
diff --git a/masteringModule/node_modules/aimastering/src/api/StatisticsApi.js b/masteringModule/node_modules/aimastering/src/api/StatisticsApi.js
new file mode 100644
index 0000000000000000000000000000000000000000..f1c3c8967ad7a06b5a8d1765ac965b14186e5a19
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/api/StatisticsApi.js
@@ -0,0 +1,173 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/AnonymizedMastering', 'model/GroupBuyStatistics', 'model/Kpi'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'), require('../model/AnonymizedMastering'), require('../model/GroupBuyStatistics'), require('../model/Kpi'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.StatisticsApi = factory(root.Aimastering.ApiClient, root.Aimastering.AnonymizedMastering, root.Aimastering.GroupBuyStatistics, root.Aimastering.Kpi);
+ }
+}(this, function(ApiClient, AnonymizedMastering, GroupBuyStatistics, Kpi) {
+ 'use strict';
+
+ /**
+ * Statistics service.
+ * @module api/StatisticsApi
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new StatisticsApi.
+ * @alias module:api/StatisticsApi
+ * @class
+ * @param {module:ApiClient} [apiClient] Optional API client implementation to use,
+ * default to {@link module:ApiClient#instance} if unspecified.
+ */
+ var exports = function(apiClient) {
+ this.apiClient = apiClient || ApiClient.instance;
+
+
+ /**
+ * Callback function to receive the result of the getGroupBuyStatistics operation.
+ * @callback module:api/StatisticsApi~getGroupBuyStatisticsCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/GroupBuyStatistics} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get group buy statistics.
+ * @param {module:api/StatisticsApi~getGroupBuyStatisticsCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/GroupBuyStatistics}
+ */
+ this.getGroupBuyStatistics = function(callback) {
+ var postBody = null;
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = GroupBuyStatistics;
+
+ return this.apiClient.callApi(
+ '/statistics/group_buy', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the listAnonymizedMasterings operation.
+ * @callback module:api/StatisticsApi~listAnonymizedMasteringsCallback
+ * @param {String} error Error message, if any.
+ * @param {Array.} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get anonymized masterings.
+ * @param {module:api/StatisticsApi~listAnonymizedMasteringsCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link Array.}
+ */
+ this.listAnonymizedMasterings = function(callback) {
+ var postBody = null;
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = [AnonymizedMastering];
+
+ return this.apiClient.callApi(
+ '/statistics/anonymized_masterings', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the listKpis operation.
+ * @callback module:api/StatisticsApi~listKpisCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/Kpi} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get KPIs.
+ * @param {module:api/StatisticsApi~listKpisCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/Kpi}
+ */
+ this.listKpis = function(callback) {
+ var postBody = null;
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = Kpi;
+
+ return this.apiClient.callApi(
+ '/statistics/kpis', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+ };
+
+ return exports;
+}));
diff --git a/masteringModule/node_modules/aimastering/src/api/SubscriptionApi.js b/masteringModule/node_modules/aimastering/src/api/SubscriptionApi.js
new file mode 100644
index 0000000000000000000000000000000000000000..f0161e7d9b3f9c870dfccd908d25abc9ab49ea67
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/api/SubscriptionApi.js
@@ -0,0 +1,289 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/Subscription'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'), require('../model/Subscription'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.SubscriptionApi = factory(root.Aimastering.ApiClient, root.Aimastering.Subscription);
+ }
+}(this, function(ApiClient, Subscription) {
+ 'use strict';
+
+ /**
+ * Subscription service.
+ * @module api/SubscriptionApi
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new SubscriptionApi.
+ * @alias module:api/SubscriptionApi
+ * @class
+ * @param {module:ApiClient} [apiClient] Optional API client implementation to use,
+ * default to {@link module:ApiClient#instance} if unspecified.
+ */
+ var exports = function(apiClient) {
+ this.apiClient = apiClient || ApiClient.instance;
+
+
+ /**
+ * Callback function to receive the result of the cancelSubscription operation.
+ * @callback module:api/SubscriptionApi~cancelSubscriptionCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/Subscription} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Cancel a subscription by id.
+ * @param {Number} id Subscription id
+ * @param {module:api/SubscriptionApi~cancelSubscriptionCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/Subscription}
+ */
+ this.cancelSubscription = function(id, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling cancelSubscription");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = ['multipart/form-data'];
+ var accepts = ['application/json'];
+ var returnType = Subscription;
+
+ return this.apiClient.callApi(
+ '/subscriptions/{id}/cancel', 'PUT',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the cancelSubscriptionCancellation operation.
+ * @callback module:api/SubscriptionApi~cancelSubscriptionCancellationCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/Subscription} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Cancel the subscription cancellation by id.
+ * @param {Number} id Subscription id
+ * @param {module:api/SubscriptionApi~cancelSubscriptionCancellationCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/Subscription}
+ */
+ this.cancelSubscriptionCancellation = function(id, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling cancelSubscriptionCancellation");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = ['multipart/form-data'];
+ var accepts = ['application/json'];
+ var returnType = Subscription;
+
+ return this.apiClient.callApi(
+ '/subscriptions/{id}/cancel_cancellation', 'PUT',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the createSubscription operation.
+ * @callback module:api/SubscriptionApi~createSubscriptionCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/Subscription} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Create a new subscription.
+ * @param {module:model/String} service This parameter represents the payment message.
+ * @param {Object} opts Optional parameters
+ * @param {String} opts.stripePlanId The Stripe plan id. This parameter is effective only when the service is \"stripe\".
+ * @param {String} opts.token This parameter represents the card token. This parameter is effective only when the service is \"stripe\".
+ * @param {String} opts.affiliateId Affiliate id of inviter user.
+ * @param {module:api/SubscriptionApi~createSubscriptionCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/Subscription}
+ */
+ this.createSubscription = function(service, opts, callback) {
+ opts = opts || {};
+ var postBody = null;
+
+ // verify the required parameter 'service' is set
+ if (service === undefined || service === null) {
+ throw new Error("Missing the required parameter 'service' when calling createSubscription");
+ }
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ 'service': service,
+ 'stripe_plan_id': opts['stripePlanId'],
+ 'token': opts['token'],
+ 'affiliate_id': opts['affiliateId']
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = ['multipart/form-data'];
+ var accepts = ['application/json'];
+ var returnType = Subscription;
+
+ return this.apiClient.callApi(
+ '/subscriptions', 'POST',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the getSubscription operation.
+ * @callback module:api/SubscriptionApi~getSubscriptionCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/Subscription} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get a subscription by id.
+ * @param {Number} id Subscription id
+ * @param {module:api/SubscriptionApi~getSubscriptionCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/Subscription}
+ */
+ this.getSubscription = function(id, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling getSubscription");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = Subscription;
+
+ return this.apiClient.callApi(
+ '/subscriptions/{id}', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the listSubscriptions operation.
+ * @callback module:api/SubscriptionApi~listSubscriptionsCallback
+ * @param {String} error Error message, if any.
+ * @param {Array.} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get all accessable subscriptions.
+ * @param {module:api/SubscriptionApi~listSubscriptionsCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link Array.}
+ */
+ this.listSubscriptions = function(callback) {
+ var postBody = null;
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = [Subscription];
+
+ return this.apiClient.callApi(
+ '/subscriptions', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+ };
+
+ return exports;
+}));
diff --git a/masteringModule/node_modules/aimastering/src/api/UserApi.js b/masteringModule/node_modules/aimastering/src/api/UserApi.js
new file mode 100644
index 0000000000000000000000000000000000000000..452dee3b79754f1ff47402ebdb0aa17e602bad8e
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/api/UserApi.js
@@ -0,0 +1,232 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/User'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'), require('../model/User'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.UserApi = factory(root.Aimastering.ApiClient, root.Aimastering.User);
+ }
+}(this, function(ApiClient, User) {
+ 'use strict';
+
+ /**
+ * User service.
+ * @module api/UserApi
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new UserApi.
+ * @alias module:api/UserApi
+ * @class
+ * @param {module:ApiClient} [apiClient] Optional API client implementation to use,
+ * default to {@link module:ApiClient#instance} if unspecified.
+ */
+ var exports = function(apiClient) {
+ this.apiClient = apiClient || ApiClient.instance;
+
+
+ /**
+ * Callback function to receive the result of the getSelf operation.
+ * @callback module:api/UserApi~getSelfCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/User} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get self user.
+ * @param {module:api/UserApi~getSelfCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/User}
+ */
+ this.getSelf = function(callback) {
+ var postBody = null;
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = User;
+
+ return this.apiClient.callApi(
+ '/users/self', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the notifyRegistration operation.
+ * @callback module:api/UserApi~notifyRegistrationCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/User} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Notify user is registered.
+ * @param {Object} opts Optional parameters
+ * @param {String} opts.affiliateId The affiliate id of inviter.
+ * @param {String} opts.referrerUrl The referrer URL.
+ * @param {module:api/UserApi~notifyRegistrationCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/User}
+ */
+ this.notifyRegistration = function(opts, callback) {
+ opts = opts || {};
+ var postBody = null;
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ 'affiliate_id': opts['affiliateId'],
+ 'referrer_url': opts['referrerUrl']
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = ['multipart/form-data'];
+ var accepts = ['application/json'];
+ var returnType = User;
+
+ return this.apiClient.callApi(
+ '/users/self/notify_registration', 'PUT',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the sendInvitation operation.
+ * @callback module:api/UserApi~sendInvitationCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/User} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Send invitation.
+ * @param {String} inviteeEmail The email of invitee.
+ * @param {module:api/UserApi~sendInvitationCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/User}
+ */
+ this.sendInvitation = function(inviteeEmail, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'inviteeEmail' is set
+ if (inviteeEmail === undefined || inviteeEmail === null) {
+ throw new Error("Missing the required parameter 'inviteeEmail' when calling sendInvitation");
+ }
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ 'invitee_email': inviteeEmail
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = ['multipart/form-data'];
+ var accepts = ['application/json'];
+ var returnType = User;
+
+ return this.apiClient.callApi(
+ '/users/self/send_invitation', 'POST',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the updateSelf operation.
+ * @callback module:api/UserApi~updateSelfCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/User} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Update self user.
+ * @param {Object} opts Optional parameters
+ * @param {Boolean} opts.agreedTermsOfService Whether you agreed terms of service.
+ * @param {String} opts.email The email.
+ * @param {module:api/UserApi~updateSelfCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/User}
+ */
+ this.updateSelf = function(opts, callback) {
+ opts = opts || {};
+ var postBody = null;
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ 'agreed_terms_of_service': opts['agreedTermsOfService'],
+ 'email': opts['email']
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = ['multipart/form-data'];
+ var accepts = ['application/json'];
+ var returnType = User;
+
+ return this.apiClient.callApi(
+ '/users/self', 'PUT',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+ };
+
+ return exports;
+}));
diff --git a/masteringModule/node_modules/aimastering/src/api/VideoApi.js b/masteringModule/node_modules/aimastering/src/api/VideoApi.js
new file mode 100644
index 0000000000000000000000000000000000000000..55e967ac0d9881fe806f8b3c41b73303b6703bfc
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/api/VideoApi.js
@@ -0,0 +1,281 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/Video', 'model/VideoDownloadToken'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'), require('../model/Video'), require('../model/VideoDownloadToken'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.VideoApi = factory(root.Aimastering.ApiClient, root.Aimastering.Video, root.Aimastering.VideoDownloadToken);
+ }
+}(this, function(ApiClient, Video, VideoDownloadToken) {
+ 'use strict';
+
+ /**
+ * Video service.
+ * @module api/VideoApi
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new VideoApi.
+ * @alias module:api/VideoApi
+ * @class
+ * @param {module:ApiClient} [apiClient] Optional API client implementation to use,
+ * default to {@link module:ApiClient#instance} if unspecified.
+ */
+ var exports = function(apiClient) {
+ this.apiClient = apiClient || ApiClient.instance;
+
+
+ /**
+ * Callback function to receive the result of the downloadVideo operation.
+ * @callback module:api/VideoApi~downloadVideoCallback
+ * @param {String} error Error message, if any.
+ * @param {'Blob'} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Download an video data by id.
+ * @param {Number} id Video id
+ * @param {module:api/VideoApi~downloadVideoCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link 'Blob'}
+ */
+ this.downloadVideo = function(id, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling downloadVideo");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/octet-stream'];
+ var returnType = 'Blob';
+
+ return this.apiClient.callApi(
+ '/videos/{id}/download', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the downloadVideoByToken operation.
+ * @callback module:api/VideoApi~downloadVideoByTokenCallback
+ * @param {String} error Error message, if any.
+ * @param {'Blob'} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Download an video data by video_download_token.
+ * @param {String} downloadToken Video download token
+ * @param {module:api/VideoApi~downloadVideoByTokenCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link 'Blob'}
+ */
+ this.downloadVideoByToken = function(downloadToken, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'downloadToken' is set
+ if (downloadToken === undefined || downloadToken === null) {
+ throw new Error("Missing the required parameter 'downloadToken' when calling downloadVideoByToken");
+ }
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ 'download_token': downloadToken,
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/octet-stream'];
+ var returnType = 'Blob';
+
+ return this.apiClient.callApi(
+ '/videos/download_by_token', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the getVideo operation.
+ * @callback module:api/VideoApi~getVideoCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/Video} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get an video by id.
+ * @param {Number} id Video id
+ * @param {module:api/VideoApi~getVideoCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/Video}
+ */
+ this.getVideo = function(id, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling getVideo");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = Video;
+
+ return this.apiClient.callApi(
+ '/videos/{id}', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the getVideoDownloadToken operation.
+ * @callback module:api/VideoApi~getVideoDownloadTokenCallback
+ * @param {String} error Error message, if any.
+ * @param {module:model/VideoDownloadToken} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get an video download token by id.
+ * @param {Number} id Video id
+ * @param {module:api/VideoApi~getVideoDownloadTokenCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link module:model/VideoDownloadToken}
+ */
+ this.getVideoDownloadToken = function(id, callback) {
+ var postBody = null;
+
+ // verify the required parameter 'id' is set
+ if (id === undefined || id === null) {
+ throw new Error("Missing the required parameter 'id' when calling getVideoDownloadToken");
+ }
+
+
+ var pathParams = {
+ 'id': id
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = VideoDownloadToken;
+
+ return this.apiClient.callApi(
+ '/videos/{id}/download_token', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+
+ /**
+ * Callback function to receive the result of the listVideos operation.
+ * @callback module:api/VideoApi~listVideosCallback
+ * @param {String} error Error message, if any.
+ * @param {Array.} data The data returned by the service call.
+ * @param {String} response The complete HTTP response.
+ */
+
+ /**
+ * Get all videos accessable.
+ * @param {module:api/VideoApi~listVideosCallback} callback The callback function, accepting three arguments: error, data, response
+ * data is of type: {@link Array.}
+ */
+ this.listVideos = function(callback) {
+ var postBody = null;
+
+
+ var pathParams = {
+ };
+ var queryParams = {
+ };
+ var collectionQueryParams = {
+ };
+ var headerParams = {
+ };
+ var formParams = {
+ };
+
+ var authNames = ['bearer'];
+ var contentTypes = [];
+ var accepts = ['application/json'];
+ var returnType = [Video];
+
+ return this.apiClient.callApi(
+ '/videos', 'GET',
+ pathParams, queryParams, collectionQueryParams, headerParams, formParams, postBody,
+ authNames, contentTypes, accepts, returnType, callback
+ );
+ }
+ };
+
+ return exports;
+}));
diff --git a/masteringModule/node_modules/aimastering/src/index.js b/masteringModule/node_modules/aimastering/src/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..a56ad47e54467cfe5b885e128134ef35dfee3fc5
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/index.js
@@ -0,0 +1,293 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/AccessToken', 'model/AmazonSubscription', 'model/AnonymizedMastering', 'model/Audio', 'model/AudioAnalysis', 'model/AudioDownloadToken', 'model/Config', 'model/ConfigAuth0', 'model/ConfigPaypal', 'model/ConfigStripe', 'model/ConfigVersion', 'model/ExternalSearchResult', 'model/ExternalSearchResultItunes', 'model/ExternalSearchResultYoutube', 'model/GroupBuyStatistics', 'model/JWT', 'model/Kpi', 'model/LibraryAudio', 'model/LibraryAudioAnalysis', 'model/LibraryAudioLike', 'model/Mastering', 'model/Payment', 'model/PaymentCustomer', 'model/Plan', 'model/SpSubscription', 'model/Subscription', 'model/User', 'model/UserStatistics', 'model/Video', 'model/VideoDownloadToken', 'api/AccessTokenApi', 'api/AmazonSubscriptionApi', 'api/AudioApi', 'api/ConfigApi', 'api/ExternalSearchApi', 'api/LibraryAudioApi', 'api/MasteringApi', 'api/PaymentApi', 'api/PaymentCustomerApi', 'api/PlanApi', 'api/SpSubscriptionApi', 'api/StatisticsApi', 'api/SubscriptionApi', 'api/UserApi', 'api/VideoApi'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('./ApiClient'), require('./model/AccessToken'), require('./model/AmazonSubscription'), require('./model/AnonymizedMastering'), require('./model/Audio'), require('./model/AudioAnalysis'), require('./model/AudioDownloadToken'), require('./model/Config'), require('./model/ConfigAuth0'), require('./model/ConfigPaypal'), require('./model/ConfigStripe'), require('./model/ConfigVersion'), require('./model/ExternalSearchResult'), require('./model/ExternalSearchResultItunes'), require('./model/ExternalSearchResultYoutube'), require('./model/GroupBuyStatistics'), require('./model/JWT'), require('./model/Kpi'), require('./model/LibraryAudio'), require('./model/LibraryAudioAnalysis'), require('./model/LibraryAudioLike'), require('./model/Mastering'), require('./model/Payment'), require('./model/PaymentCustomer'), require('./model/Plan'), require('./model/SpSubscription'), require('./model/Subscription'), require('./model/User'), require('./model/UserStatistics'), require('./model/Video'), require('./model/VideoDownloadToken'), require('./api/AccessTokenApi'), require('./api/AmazonSubscriptionApi'), require('./api/AudioApi'), require('./api/ConfigApi'), require('./api/ExternalSearchApi'), require('./api/LibraryAudioApi'), require('./api/MasteringApi'), require('./api/PaymentApi'), require('./api/PaymentCustomerApi'), require('./api/PlanApi'), require('./api/SpSubscriptionApi'), require('./api/StatisticsApi'), require('./api/SubscriptionApi'), require('./api/UserApi'), require('./api/VideoApi'));
+ }
+}(function(ApiClient, AccessToken, AmazonSubscription, AnonymizedMastering, Audio, AudioAnalysis, AudioDownloadToken, Config, ConfigAuth0, ConfigPaypal, ConfigStripe, ConfigVersion, ExternalSearchResult, ExternalSearchResultItunes, ExternalSearchResultYoutube, GroupBuyStatistics, JWT, Kpi, LibraryAudio, LibraryAudioAnalysis, LibraryAudioLike, Mastering, Payment, PaymentCustomer, Plan, SpSubscription, Subscription, User, UserStatistics, Video, VideoDownloadToken, AccessTokenApi, AmazonSubscriptionApi, AudioApi, ConfigApi, ExternalSearchApi, LibraryAudioApi, MasteringApi, PaymentApi, PaymentCustomerApi, PlanApi, SpSubscriptionApi, StatisticsApi, SubscriptionApi, UserApi, VideoApi) {
+ 'use strict';
+
+ /**
+ * This_is_a_AI_Mastering_API_document__You_can_use_the_mastering_feature_of__AI_Mastering_httpsaimastering_com_through_this_API_.
+ * The index module provides access to constructors for all the classes which comprise the public API.
+ *
+ * An AMD (recommended!) or CommonJS application will generally do something equivalent to the following:
+ *
+ * var Aimastering = require('index'); // See note below*.
+ * var xxxSvc = new Aimastering.XxxApi(); // Allocate the API class we're going to use.
+ * var yyyModel = new Aimastering.Yyy(); // Construct a model instance.
+ * yyyModel.someProperty = 'someValue';
+ * ...
+ * var zzz = xxxSvc.doSomething(yyyModel); // Invoke the service.
+ * ...
+ *
+ * *NOTE: For a top-level AMD script, use require(['index'], function(){...})
+ * and put the application logic within the callback function.
+ *
+ *
+ * A non-AMD browser application (discouraged) might do something like this:
+ *
+ * var xxxSvc = new Aimastering.XxxApi(); // Allocate the API class we're going to use.
+ * var yyy = new Aimastering.Yyy(); // Construct a model instance.
+ * yyyModel.someProperty = 'someValue';
+ * ...
+ * var zzz = xxxSvc.doSomething(yyyModel); // Invoke the service.
+ * ...
+ *
+ *
+ * @module index
+ * @version 1.1.0
+ */
+ var exports = {
+ /**
+ * The ApiClient constructor.
+ * @property {module:ApiClient}
+ */
+ ApiClient: ApiClient,
+ /**
+ * The AccessToken model constructor.
+ * @property {module:model/AccessToken}
+ */
+ AccessToken: AccessToken,
+ /**
+ * The AmazonSubscription model constructor.
+ * @property {module:model/AmazonSubscription}
+ */
+ AmazonSubscription: AmazonSubscription,
+ /**
+ * The AnonymizedMastering model constructor.
+ * @property {module:model/AnonymizedMastering}
+ */
+ AnonymizedMastering: AnonymizedMastering,
+ /**
+ * The Audio model constructor.
+ * @property {module:model/Audio}
+ */
+ Audio: Audio,
+ /**
+ * The AudioAnalysis model constructor.
+ * @property {module:model/AudioAnalysis}
+ */
+ AudioAnalysis: AudioAnalysis,
+ /**
+ * The AudioDownloadToken model constructor.
+ * @property {module:model/AudioDownloadToken}
+ */
+ AudioDownloadToken: AudioDownloadToken,
+ /**
+ * The Config model constructor.
+ * @property {module:model/Config}
+ */
+ Config: Config,
+ /**
+ * The ConfigAuth0 model constructor.
+ * @property {module:model/ConfigAuth0}
+ */
+ ConfigAuth0: ConfigAuth0,
+ /**
+ * The ConfigPaypal model constructor.
+ * @property {module:model/ConfigPaypal}
+ */
+ ConfigPaypal: ConfigPaypal,
+ /**
+ * The ConfigStripe model constructor.
+ * @property {module:model/ConfigStripe}
+ */
+ ConfigStripe: ConfigStripe,
+ /**
+ * The ConfigVersion model constructor.
+ * @property {module:model/ConfigVersion}
+ */
+ ConfigVersion: ConfigVersion,
+ /**
+ * The ExternalSearchResult model constructor.
+ * @property {module:model/ExternalSearchResult}
+ */
+ ExternalSearchResult: ExternalSearchResult,
+ /**
+ * The ExternalSearchResultItunes model constructor.
+ * @property {module:model/ExternalSearchResultItunes}
+ */
+ ExternalSearchResultItunes: ExternalSearchResultItunes,
+ /**
+ * The ExternalSearchResultYoutube model constructor.
+ * @property {module:model/ExternalSearchResultYoutube}
+ */
+ ExternalSearchResultYoutube: ExternalSearchResultYoutube,
+ /**
+ * The GroupBuyStatistics model constructor.
+ * @property {module:model/GroupBuyStatistics}
+ */
+ GroupBuyStatistics: GroupBuyStatistics,
+ /**
+ * The JWT model constructor.
+ * @property {module:model/JWT}
+ */
+ JWT: JWT,
+ /**
+ * The Kpi model constructor.
+ * @property {module:model/Kpi}
+ */
+ Kpi: Kpi,
+ /**
+ * The LibraryAudio model constructor.
+ * @property {module:model/LibraryAudio}
+ */
+ LibraryAudio: LibraryAudio,
+ /**
+ * The LibraryAudioAnalysis model constructor.
+ * @property {module:model/LibraryAudioAnalysis}
+ */
+ LibraryAudioAnalysis: LibraryAudioAnalysis,
+ /**
+ * The LibraryAudioLike model constructor.
+ * @property {module:model/LibraryAudioLike}
+ */
+ LibraryAudioLike: LibraryAudioLike,
+ /**
+ * The Mastering model constructor.
+ * @property {module:model/Mastering}
+ */
+ Mastering: Mastering,
+ /**
+ * The Payment model constructor.
+ * @property {module:model/Payment}
+ */
+ Payment: Payment,
+ /**
+ * The PaymentCustomer model constructor.
+ * @property {module:model/PaymentCustomer}
+ */
+ PaymentCustomer: PaymentCustomer,
+ /**
+ * The Plan model constructor.
+ * @property {module:model/Plan}
+ */
+ Plan: Plan,
+ /**
+ * The SpSubscription model constructor.
+ * @property {module:model/SpSubscription}
+ */
+ SpSubscription: SpSubscription,
+ /**
+ * The Subscription model constructor.
+ * @property {module:model/Subscription}
+ */
+ Subscription: Subscription,
+ /**
+ * The User model constructor.
+ * @property {module:model/User}
+ */
+ User: User,
+ /**
+ * The UserStatistics model constructor.
+ * @property {module:model/UserStatistics}
+ */
+ UserStatistics: UserStatistics,
+ /**
+ * The Video model constructor.
+ * @property {module:model/Video}
+ */
+ Video: Video,
+ /**
+ * The VideoDownloadToken model constructor.
+ * @property {module:model/VideoDownloadToken}
+ */
+ VideoDownloadToken: VideoDownloadToken,
+ /**
+ * The AccessTokenApi service constructor.
+ * @property {module:api/AccessTokenApi}
+ */
+ AccessTokenApi: AccessTokenApi,
+ /**
+ * The AmazonSubscriptionApi service constructor.
+ * @property {module:api/AmazonSubscriptionApi}
+ */
+ AmazonSubscriptionApi: AmazonSubscriptionApi,
+ /**
+ * The AudioApi service constructor.
+ * @property {module:api/AudioApi}
+ */
+ AudioApi: AudioApi,
+ /**
+ * The ConfigApi service constructor.
+ * @property {module:api/ConfigApi}
+ */
+ ConfigApi: ConfigApi,
+ /**
+ * The ExternalSearchApi service constructor.
+ * @property {module:api/ExternalSearchApi}
+ */
+ ExternalSearchApi: ExternalSearchApi,
+ /**
+ * The LibraryAudioApi service constructor.
+ * @property {module:api/LibraryAudioApi}
+ */
+ LibraryAudioApi: LibraryAudioApi,
+ /**
+ * The MasteringApi service constructor.
+ * @property {module:api/MasteringApi}
+ */
+ MasteringApi: MasteringApi,
+ /**
+ * The PaymentApi service constructor.
+ * @property {module:api/PaymentApi}
+ */
+ PaymentApi: PaymentApi,
+ /**
+ * The PaymentCustomerApi service constructor.
+ * @property {module:api/PaymentCustomerApi}
+ */
+ PaymentCustomerApi: PaymentCustomerApi,
+ /**
+ * The PlanApi service constructor.
+ * @property {module:api/PlanApi}
+ */
+ PlanApi: PlanApi,
+ /**
+ * The SpSubscriptionApi service constructor.
+ * @property {module:api/SpSubscriptionApi}
+ */
+ SpSubscriptionApi: SpSubscriptionApi,
+ /**
+ * The StatisticsApi service constructor.
+ * @property {module:api/StatisticsApi}
+ */
+ StatisticsApi: StatisticsApi,
+ /**
+ * The SubscriptionApi service constructor.
+ * @property {module:api/SubscriptionApi}
+ */
+ SubscriptionApi: SubscriptionApi,
+ /**
+ * The UserApi service constructor.
+ * @property {module:api/UserApi}
+ */
+ UserApi: UserApi,
+ /**
+ * The VideoApi service constructor.
+ * @property {module:api/VideoApi}
+ */
+ VideoApi: VideoApi
+ };
+
+ return exports;
+}));
diff --git a/masteringModule/node_modules/aimastering/src/model/AccessToken.js b/masteringModule/node_modules/aimastering/src/model/AccessToken.js
new file mode 100644
index 0000000000000000000000000000000000000000..61aca1b0a9ea489969f4d20d0d5f6bb627f01973
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/AccessToken.js
@@ -0,0 +1,82 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/JWT'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'), require('./JWT'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.AccessToken = factory(root.Aimastering.ApiClient, root.Aimastering.JWT);
+ }
+}(this, function(ApiClient, JWT) {
+ 'use strict';
+
+
+
+
+ /**
+ * The AccessToken model module.
+ * @module model/AccessToken
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new AccessToken.
+ * @alias module:model/AccessToken
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+ };
+
+ /**
+ * Constructs a AccessToken from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/AccessToken} obj Optional instance to populate.
+ * @return {module:model/AccessToken} The populated AccessToken instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('access_token')) {
+ obj['access_token'] = JWT.constructFromObject(data['access_token']);
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {module:model/JWT} access_token
+ */
+ exports.prototype['access_token'] = undefined;
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/AmazonSubscription.js b/masteringModule/node_modules/aimastering/src/model/AmazonSubscription.js
new file mode 100644
index 0000000000000000000000000000000000000000..c5eab0c3804c9eb054d76149f8235c0b40f165cb
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/AmazonSubscription.js
@@ -0,0 +1,131 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.AmazonSubscription = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The AmazonSubscription model module.
+ * @module model/AmazonSubscription
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new AmazonSubscription.
+ * @alias module:model/AmazonSubscription
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+
+
+
+ };
+
+ /**
+ * Constructs a AmazonSubscription from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/AmazonSubscription} obj Optional instance to populate.
+ * @return {module:model/AmazonSubscription} The populated AmazonSubscription instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('id')) {
+ obj['id'] = ApiClient.convertToType(data['id'], 'Number');
+ }
+ if (data.hasOwnProperty('user_id')) {
+ obj['user_id'] = ApiClient.convertToType(data['user_id'], 'Number');
+ }
+ if (data.hasOwnProperty('status')) {
+ obj['status'] = ApiClient.convertToType(data['status'], 'String');
+ }
+ if (data.hasOwnProperty('created_at')) {
+ obj['created_at'] = ApiClient.convertToType(data['created_at'], 'Date');
+ }
+ if (data.hasOwnProperty('updated_at')) {
+ obj['updated_at'] = ApiClient.convertToType(data['updated_at'], 'Date');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {Number} id
+ */
+ exports.prototype['id'] = undefined;
+ /**
+ * @member {Number} user_id
+ */
+ exports.prototype['user_id'] = undefined;
+ /**
+ * @member {module:model/AmazonSubscription.StatusEnum} status
+ */
+ exports.prototype['status'] = undefined;
+ /**
+ * @member {Date} created_at
+ */
+ exports.prototype['created_at'] = undefined;
+ /**
+ * @member {Date} updated_at
+ */
+ exports.prototype['updated_at'] = undefined;
+
+
+ /**
+ * Allowed values for the status property.
+ * @enum {String}
+ * @readonly
+ */
+ exports.StatusEnum = {
+ /**
+ * value: "active"
+ * @const
+ */
+ "active": "active",
+ /**
+ * value: "deactivated"
+ * @const
+ */
+ "deactivated": "deactivated" };
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/AnonymizedMastering.js b/masteringModule/node_modules/aimastering/src/model/AnonymizedMastering.js
new file mode 100644
index 0000000000000000000000000000000000000000..9b545ac823dd8c21e1fbb131bc772c837b084830
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/AnonymizedMastering.js
@@ -0,0 +1,382 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.AnonymizedMastering = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The AnonymizedMastering model module.
+ * @module model/AnonymizedMastering
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new AnonymizedMastering.
+ * @alias module:model/AnonymizedMastering
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ };
+
+ /**
+ * Constructs a AnonymizedMastering from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/AnonymizedMastering} obj Optional instance to populate.
+ * @return {module:model/AnonymizedMastering} The populated AnonymizedMastering instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('user_id')) {
+ obj['user_id'] = ApiClient.convertToType(data['user_id'], 'String');
+ }
+ if (data.hasOwnProperty('user_auth_provider')) {
+ obj['user_auth_provider'] = ApiClient.convertToType(data['user_auth_provider'], 'String');
+ }
+ if (data.hasOwnProperty('mode')) {
+ obj['mode'] = ApiClient.convertToType(data['mode'], 'String');
+ }
+ if (data.hasOwnProperty('status')) {
+ obj['status'] = ApiClient.convertToType(data['status'], 'String');
+ }
+ if (data.hasOwnProperty('failure_reason')) {
+ obj['failure_reason'] = ApiClient.convertToType(data['failure_reason'], 'String');
+ }
+ if (data.hasOwnProperty('target_loudness')) {
+ obj['target_loudness'] = ApiClient.convertToType(data['target_loudness'], 'Number');
+ }
+ if (data.hasOwnProperty('output_format')) {
+ obj['output_format'] = ApiClient.convertToType(data['output_format'], 'String');
+ }
+ if (data.hasOwnProperty('preset')) {
+ obj['preset'] = ApiClient.convertToType(data['preset'], 'String');
+ }
+ if (data.hasOwnProperty('bit_depth')) {
+ obj['bit_depth'] = ApiClient.convertToType(data['bit_depth'], 'Number');
+ }
+ if (data.hasOwnProperty('sample_rate')) {
+ obj['sample_rate'] = ApiClient.convertToType(data['sample_rate'], 'Number');
+ }
+ if (data.hasOwnProperty('review_score')) {
+ obj['review_score'] = ApiClient.convertToType(data['review_score'], 'Number');
+ }
+ if (data.hasOwnProperty('mastering_matching_level')) {
+ obj['mastering_matching_level'] = ApiClient.convertToType(data['mastering_matching_level'], 'Number');
+ }
+ if (data.hasOwnProperty('mastering')) {
+ obj['mastering'] = ApiClient.convertToType(data['mastering'], 'Boolean');
+ }
+ if (data.hasOwnProperty('paid')) {
+ obj['paid'] = ApiClient.convertToType(data['paid'], 'Boolean');
+ }
+ if (data.hasOwnProperty('payment_service')) {
+ obj['payment_service'] = ApiClient.convertToType(data['payment_service'], 'String');
+ }
+ if (data.hasOwnProperty('retry_count')) {
+ obj['retry_count'] = ApiClient.convertToType(data['retry_count'], 'Number');
+ }
+ if (data.hasOwnProperty('mastering_reverb')) {
+ obj['mastering_reverb'] = ApiClient.convertToType(data['mastering_reverb'], 'Boolean');
+ }
+ if (data.hasOwnProperty('mastering_reverb_gain')) {
+ obj['mastering_reverb_gain'] = ApiClient.convertToType(data['mastering_reverb_gain'], 'Number');
+ }
+ if (data.hasOwnProperty('low_cut_freq')) {
+ obj['low_cut_freq'] = ApiClient.convertToType(data['low_cut_freq'], 'Number');
+ }
+ if (data.hasOwnProperty('high_cut_freq')) {
+ obj['high_cut_freq'] = ApiClient.convertToType(data['high_cut_freq'], 'Number');
+ }
+ if (data.hasOwnProperty('created_at')) {
+ obj['created_at'] = ApiClient.convertToType(data['created_at'], 'Date');
+ }
+ if (data.hasOwnProperty('updated_at')) {
+ obj['updated_at'] = ApiClient.convertToType(data['updated_at'], 'Date');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {String} user_id
+ */
+ exports.prototype['user_id'] = undefined;
+ /**
+ * @member {String} user_auth_provider
+ */
+ exports.prototype['user_auth_provider'] = undefined;
+ /**
+ * @member {module:model/AnonymizedMastering.ModeEnum} mode
+ */
+ exports.prototype['mode'] = undefined;
+ /**
+ * @member {module:model/AnonymizedMastering.StatusEnum} status
+ */
+ exports.prototype['status'] = undefined;
+ /**
+ * @member {module:model/AnonymizedMastering.FailureReasonEnum} failure_reason
+ */
+ exports.prototype['failure_reason'] = undefined;
+ /**
+ * @member {Number} target_loudness
+ */
+ exports.prototype['target_loudness'] = undefined;
+ /**
+ * @member {module:model/AnonymizedMastering.OutputFormatEnum} output_format
+ */
+ exports.prototype['output_format'] = undefined;
+ /**
+ * @member {module:model/AnonymizedMastering.PresetEnum} preset
+ */
+ exports.prototype['preset'] = undefined;
+ /**
+ * @member {Number} bit_depth
+ */
+ exports.prototype['bit_depth'] = undefined;
+ /**
+ * @member {Number} sample_rate
+ */
+ exports.prototype['sample_rate'] = undefined;
+ /**
+ * @member {Number} review_score
+ */
+ exports.prototype['review_score'] = undefined;
+ /**
+ * @member {Number} mastering_matching_level
+ */
+ exports.prototype['mastering_matching_level'] = undefined;
+ /**
+ * @member {Boolean} mastering
+ */
+ exports.prototype['mastering'] = undefined;
+ /**
+ * @member {Boolean} paid
+ */
+ exports.prototype['paid'] = undefined;
+ /**
+ * @member {module:model/AnonymizedMastering.PaymentServiceEnum} payment_service
+ */
+ exports.prototype['payment_service'] = undefined;
+ /**
+ * @member {Number} retry_count
+ */
+ exports.prototype['retry_count'] = undefined;
+ /**
+ * @member {Boolean} mastering_reverb
+ */
+ exports.prototype['mastering_reverb'] = undefined;
+ /**
+ * @member {Number} mastering_reverb_gain
+ */
+ exports.prototype['mastering_reverb_gain'] = undefined;
+ /**
+ * @member {Number} low_cut_freq
+ */
+ exports.prototype['low_cut_freq'] = undefined;
+ /**
+ * @member {Number} high_cut_freq
+ */
+ exports.prototype['high_cut_freq'] = undefined;
+ /**
+ * @member {Date} created_at
+ */
+ exports.prototype['created_at'] = undefined;
+ /**
+ * @member {Date} updated_at
+ */
+ exports.prototype['updated_at'] = undefined;
+
+
+ /**
+ * Allowed values for the mode property.
+ * @enum {String}
+ * @readonly
+ */
+ exports.ModeEnum = {
+ /**
+ * value: "default"
+ * @const
+ */
+ "default": "default",
+ /**
+ * value: "custom"
+ * @const
+ */
+ "custom": "custom" };
+
+ /**
+ * Allowed values for the status property.
+ * @enum {String}
+ * @readonly
+ */
+ exports.StatusEnum = {
+ /**
+ * value: "waiting"
+ * @const
+ */
+ "waiting": "waiting",
+ /**
+ * value: "processing"
+ * @const
+ */
+ "processing": "processing",
+ /**
+ * value: "canceled"
+ * @const
+ */
+ "canceled": "canceled",
+ /**
+ * value: "failed"
+ * @const
+ */
+ "failed": "failed",
+ /**
+ * value: "succeeded"
+ * @const
+ */
+ "succeeded": "succeeded" };
+
+ /**
+ * Allowed values for the failure_reason property.
+ * @enum {String}
+ * @readonly
+ */
+ exports.FailureReasonEnum = {
+ /**
+ * value: "unknown"
+ * @const
+ */
+ "unknown": "unknown",
+ /**
+ * value: "expired"
+ * @const
+ */
+ "expired": "expired",
+ /**
+ * value: "failed_to_prepare"
+ * @const
+ */
+ "failed_to_prepare": "failed_to_prepare" };
+
+ /**
+ * Allowed values for the output_format property.
+ * @enum {String}
+ * @readonly
+ */
+ exports.OutputFormatEnum = {
+ /**
+ * value: "wav"
+ * @const
+ */
+ "wav": "wav",
+ /**
+ * value: "mp3"
+ * @const
+ */
+ "mp3": "mp3" };
+
+ /**
+ * Allowed values for the preset property.
+ * @enum {String}
+ * @readonly
+ */
+ exports.PresetEnum = {
+ /**
+ * value: "general"
+ * @const
+ */
+ "general": "general",
+ /**
+ * value: "pop"
+ * @const
+ */
+ "pop": "pop",
+ /**
+ * value: "jazz"
+ * @const
+ */
+ "jazz": "jazz",
+ /**
+ * value: "classical"
+ * @const
+ */
+ "classical": "classical" };
+
+ /**
+ * Allowed values for the payment_service property.
+ * @enum {String}
+ * @readonly
+ */
+ exports.PaymentServiceEnum = {
+ /**
+ * value: "paypal"
+ * @const
+ */
+ "paypal": "paypal",
+ /**
+ * value: "stripe"
+ * @const
+ */
+ "stripe": "stripe" };
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/Audio.js b/masteringModule/node_modules/aimastering/src/model/Audio.js
new file mode 100644
index 0000000000000000000000000000000000000000..25f67251d80b55a56667bf51ce9850abc0159132
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/Audio.js
@@ -0,0 +1,282 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.Audio = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The Audio model module.
+ * @module model/Audio
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new Audio.
+ * @alias module:model/Audio
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ };
+
+ /**
+ * Constructs a Audio from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/Audio} obj Optional instance to populate.
+ * @return {module:model/Audio} The populated Audio instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('id')) {
+ obj['id'] = ApiClient.convertToType(data['id'], 'Number');
+ }
+ if (data.hasOwnProperty('file_resource_id')) {
+ obj['file_resource_id'] = ApiClient.convertToType(data['file_resource_id'], 'Number');
+ }
+ if (data.hasOwnProperty('user_id')) {
+ obj['user_id'] = ApiClient.convertToType(data['user_id'], 'Number');
+ }
+ if (data.hasOwnProperty('name')) {
+ obj['name'] = ApiClient.convertToType(data['name'], 'String');
+ }
+ if (data.hasOwnProperty('created_by_user')) {
+ obj['created_by_user'] = ApiClient.convertToType(data['created_by_user'], 'Boolean');
+ }
+ if (data.hasOwnProperty('status')) {
+ obj['status'] = ApiClient.convertToType(data['status'], 'String');
+ }
+ if (data.hasOwnProperty('failure_reason')) {
+ obj['failure_reason'] = ApiClient.convertToType(data['failure_reason'], 'String');
+ }
+ if (data.hasOwnProperty('probe_json')) {
+ obj['probe_json'] = ApiClient.convertToType(data['probe_json'], 'String');
+ }
+ if (data.hasOwnProperty('rms')) {
+ obj['rms'] = ApiClient.convertToType(data['rms'], 'Number');
+ }
+ if (data.hasOwnProperty('peak')) {
+ obj['peak'] = ApiClient.convertToType(data['peak'], 'Number');
+ }
+ if (data.hasOwnProperty('true_peak')) {
+ obj['true_peak'] = ApiClient.convertToType(data['true_peak'], 'Number');
+ }
+ if (data.hasOwnProperty('lowpass_true_peak_15khz')) {
+ obj['lowpass_true_peak_15khz'] = ApiClient.convertToType(data['lowpass_true_peak_15khz'], 'Number');
+ }
+ if (data.hasOwnProperty('loudness')) {
+ obj['loudness'] = ApiClient.convertToType(data['loudness'], 'Number');
+ }
+ if (data.hasOwnProperty('dynamics')) {
+ obj['dynamics'] = ApiClient.convertToType(data['dynamics'], 'Number');
+ }
+ if (data.hasOwnProperty('sharpness')) {
+ obj['sharpness'] = ApiClient.convertToType(data['sharpness'], 'Number');
+ }
+ if (data.hasOwnProperty('space')) {
+ obj['space'] = ApiClient.convertToType(data['space'], 'Number');
+ }
+ if (data.hasOwnProperty('loudness_range')) {
+ obj['loudness_range'] = ApiClient.convertToType(data['loudness_range'], 'Number');
+ }
+ if (data.hasOwnProperty('drr')) {
+ obj['drr'] = ApiClient.convertToType(data['drr'], 'Number');
+ }
+ if (data.hasOwnProperty('sound_quality')) {
+ obj['sound_quality'] = ApiClient.convertToType(data['sound_quality'], 'Number');
+ }
+ if (data.hasOwnProperty('sound_quality2')) {
+ obj['sound_quality2'] = ApiClient.convertToType(data['sound_quality2'], 'Number');
+ }
+ if (data.hasOwnProperty('dissonance')) {
+ obj['dissonance'] = ApiClient.convertToType(data['dissonance'], 'Number');
+ }
+ if (data.hasOwnProperty('frames')) {
+ obj['frames'] = ApiClient.convertToType(data['frames'], 'Number');
+ }
+ if (data.hasOwnProperty('sample_rate')) {
+ obj['sample_rate'] = ApiClient.convertToType(data['sample_rate'], 'Number');
+ }
+ if (data.hasOwnProperty('channels')) {
+ obj['channels'] = ApiClient.convertToType(data['channels'], 'Number');
+ }
+ if (data.hasOwnProperty('created_at')) {
+ obj['created_at'] = ApiClient.convertToType(data['created_at'], 'Date');
+ }
+ if (data.hasOwnProperty('updated_at')) {
+ obj['updated_at'] = ApiClient.convertToType(data['updated_at'], 'Date');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {Number} id
+ */
+ exports.prototype['id'] = undefined;
+ /**
+ * @member {Number} file_resource_id
+ */
+ exports.prototype['file_resource_id'] = undefined;
+ /**
+ * @member {Number} user_id
+ */
+ exports.prototype['user_id'] = undefined;
+ /**
+ * @member {String} name
+ */
+ exports.prototype['name'] = undefined;
+ /**
+ * @member {Boolean} created_by_user
+ */
+ exports.prototype['created_by_user'] = undefined;
+ /**
+ * @member {String} status
+ */
+ exports.prototype['status'] = undefined;
+ /**
+ * @member {String} failure_reason
+ */
+ exports.prototype['failure_reason'] = undefined;
+ /**
+ * @member {String} probe_json
+ */
+ exports.prototype['probe_json'] = undefined;
+ /**
+ * @member {Number} rms
+ */
+ exports.prototype['rms'] = undefined;
+ /**
+ * @member {Number} peak
+ */
+ exports.prototype['peak'] = undefined;
+ /**
+ * @member {Number} true_peak
+ */
+ exports.prototype['true_peak'] = undefined;
+ /**
+ * @member {Number} lowpass_true_peak_15khz
+ */
+ exports.prototype['lowpass_true_peak_15khz'] = undefined;
+ /**
+ * @member {Number} loudness
+ */
+ exports.prototype['loudness'] = undefined;
+ /**
+ * @member {Number} dynamics
+ */
+ exports.prototype['dynamics'] = undefined;
+ /**
+ * @member {Number} sharpness
+ */
+ exports.prototype['sharpness'] = undefined;
+ /**
+ * @member {Number} space
+ */
+ exports.prototype['space'] = undefined;
+ /**
+ * @member {Number} loudness_range
+ */
+ exports.prototype['loudness_range'] = undefined;
+ /**
+ * @member {Number} drr
+ */
+ exports.prototype['drr'] = undefined;
+ /**
+ * @member {Number} sound_quality
+ */
+ exports.prototype['sound_quality'] = undefined;
+ /**
+ * @member {Number} sound_quality2
+ */
+ exports.prototype['sound_quality2'] = undefined;
+ /**
+ * @member {Number} dissonance
+ */
+ exports.prototype['dissonance'] = undefined;
+ /**
+ * @member {Number} frames
+ */
+ exports.prototype['frames'] = undefined;
+ /**
+ * @member {Number} sample_rate
+ */
+ exports.prototype['sample_rate'] = undefined;
+ /**
+ * @member {Number} channels
+ */
+ exports.prototype['channels'] = undefined;
+ /**
+ * @member {Date} created_at
+ */
+ exports.prototype['created_at'] = undefined;
+ /**
+ * @member {Date} updated_at
+ */
+ exports.prototype['updated_at'] = undefined;
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/AudioAnalysis.js b/masteringModule/node_modules/aimastering/src/model/AudioAnalysis.js
new file mode 100644
index 0000000000000000000000000000000000000000..15e96e2c2937c085c513538265c0ad297c130313
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/AudioAnalysis.js
@@ -0,0 +1,101 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.AudioAnalysis = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The AudioAnalysis model module.
+ * @module model/AudioAnalysis
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new AudioAnalysis.
+ * @alias module:model/AudioAnalysis
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+
+ };
+
+ /**
+ * Constructs a AudioAnalysis from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/AudioAnalysis} obj Optional instance to populate.
+ * @return {module:model/AudioAnalysis} The populated AudioAnalysis instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('id')) {
+ obj['id'] = ApiClient.convertToType(data['id'], 'Number');
+ }
+ if (data.hasOwnProperty('audio_id')) {
+ obj['audio_id'] = ApiClient.convertToType(data['audio_id'], 'Number');
+ }
+ if (data.hasOwnProperty('analysis')) {
+ obj['analysis'] = ApiClient.convertToType(data['analysis'], Object);
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * Audio analysis id
+ * @member {Number} id
+ */
+ exports.prototype['id'] = undefined;
+ /**
+ * Audio id
+ * @member {Number} audio_id
+ */
+ exports.prototype['audio_id'] = undefined;
+ /**
+ * Audio analysis data. The schema changes frequently.
+ * @member {Object} analysis
+ */
+ exports.prototype['analysis'] = undefined;
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/AudioDownloadToken.js b/masteringModule/node_modules/aimastering/src/model/AudioDownloadToken.js
new file mode 100644
index 0000000000000000000000000000000000000000..979b2ffee9355cf2d324b353a75c2c9eb12cc324
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/AudioDownloadToken.js
@@ -0,0 +1,90 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/JWT'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'), require('./JWT'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.AudioDownloadToken = factory(root.Aimastering.ApiClient, root.Aimastering.JWT);
+ }
+}(this, function(ApiClient, JWT) {
+ 'use strict';
+
+
+
+
+ /**
+ * The AudioDownloadToken model module.
+ * @module model/AudioDownloadToken
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new AudioDownloadToken.
+ * @alias module:model/AudioDownloadToken
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+ };
+
+ /**
+ * Constructs a AudioDownloadToken from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/AudioDownloadToken} obj Optional instance to populate.
+ * @return {module:model/AudioDownloadToken} The populated AudioDownloadToken instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('download_token')) {
+ obj['download_token'] = JWT.constructFromObject(data['download_token']);
+ }
+ if (data.hasOwnProperty('download_url')) {
+ obj['download_url'] = ApiClient.convertToType(data['download_url'], 'String');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {module:model/JWT} download_token
+ */
+ exports.prototype['download_token'] = undefined;
+ /**
+ * @member {String} download_url
+ */
+ exports.prototype['download_url'] = undefined;
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/Config.js b/masteringModule/node_modules/aimastering/src/model/Config.js
new file mode 100644
index 0000000000000000000000000000000000000000..ca82bb0b745c0ea21e35994bd191f8bb76795fea
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/Config.js
@@ -0,0 +1,106 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/ConfigAuth0', 'model/ConfigPaypal', 'model/ConfigStripe', 'model/ConfigVersion'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'), require('./ConfigAuth0'), require('./ConfigPaypal'), require('./ConfigStripe'), require('./ConfigVersion'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.Config = factory(root.Aimastering.ApiClient, root.Aimastering.ConfigAuth0, root.Aimastering.ConfigPaypal, root.Aimastering.ConfigStripe, root.Aimastering.ConfigVersion);
+ }
+}(this, function(ApiClient, ConfigAuth0, ConfigPaypal, ConfigStripe, ConfigVersion) {
+ 'use strict';
+
+
+
+
+ /**
+ * The Config model module.
+ * @module model/Config
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new Config.
+ * @alias module:model/Config
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+
+
+ };
+
+ /**
+ * Constructs a Config from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/Config} obj Optional instance to populate.
+ * @return {module:model/Config} The populated Config instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('auth0')) {
+ obj['auth0'] = ConfigAuth0.constructFromObject(data['auth0']);
+ }
+ if (data.hasOwnProperty('paypal')) {
+ obj['paypal'] = ConfigPaypal.constructFromObject(data['paypal']);
+ }
+ if (data.hasOwnProperty('stripe')) {
+ obj['stripe'] = ConfigStripe.constructFromObject(data['stripe']);
+ }
+ if (data.hasOwnProperty('version')) {
+ obj['version'] = ConfigVersion.constructFromObject(data['version']);
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {module:model/ConfigAuth0} auth0
+ */
+ exports.prototype['auth0'] = undefined;
+ /**
+ * @member {module:model/ConfigPaypal} paypal
+ */
+ exports.prototype['paypal'] = undefined;
+ /**
+ * @member {module:model/ConfigStripe} stripe
+ */
+ exports.prototype['stripe'] = undefined;
+ /**
+ * @member {module:model/ConfigVersion} version
+ */
+ exports.prototype['version'] = undefined;
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/ConfigAuth0.js b/masteringModule/node_modules/aimastering/src/model/ConfigAuth0.js
new file mode 100644
index 0000000000000000000000000000000000000000..67876a58c63c515bdf7fcc5483a6946d6a818a58
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/ConfigAuth0.js
@@ -0,0 +1,98 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.ConfigAuth0 = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The ConfigAuth0 model module.
+ * @module model/ConfigAuth0
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new ConfigAuth0.
+ * @alias module:model/ConfigAuth0
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+
+ };
+
+ /**
+ * Constructs a ConfigAuth0 from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/ConfigAuth0} obj Optional instance to populate.
+ * @return {module:model/ConfigAuth0} The populated ConfigAuth0 instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('audience')) {
+ obj['audience'] = ApiClient.convertToType(data['audience'], 'String');
+ }
+ if (data.hasOwnProperty('domain')) {
+ obj['domain'] = ApiClient.convertToType(data['domain'], 'String');
+ }
+ if (data.hasOwnProperty('client_id')) {
+ obj['client_id'] = ApiClient.convertToType(data['client_id'], 'String');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {String} audience
+ */
+ exports.prototype['audience'] = undefined;
+ /**
+ * @member {String} domain
+ */
+ exports.prototype['domain'] = undefined;
+ /**
+ * @member {String} client_id
+ */
+ exports.prototype['client_id'] = undefined;
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/ConfigPaypal.js b/masteringModule/node_modules/aimastering/src/model/ConfigPaypal.js
new file mode 100644
index 0000000000000000000000000000000000000000..bdd6c30bfff8ecbe063e20220945741b7270f385
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/ConfigPaypal.js
@@ -0,0 +1,90 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.ConfigPaypal = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The ConfigPaypal model module.
+ * @module model/ConfigPaypal
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new ConfigPaypal.
+ * @alias module:model/ConfigPaypal
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+ };
+
+ /**
+ * Constructs a ConfigPaypal from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/ConfigPaypal} obj Optional instance to populate.
+ * @return {module:model/ConfigPaypal} The populated ConfigPaypal instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('mode')) {
+ obj['mode'] = ApiClient.convertToType(data['mode'], 'String');
+ }
+ if (data.hasOwnProperty('client_id')) {
+ obj['client_id'] = ApiClient.convertToType(data['client_id'], 'String');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {String} mode
+ */
+ exports.prototype['mode'] = undefined;
+ /**
+ * @member {String} client_id
+ */
+ exports.prototype['client_id'] = undefined;
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/ConfigStripe.js b/masteringModule/node_modules/aimastering/src/model/ConfigStripe.js
new file mode 100644
index 0000000000000000000000000000000000000000..992db9131aa88437041c964bfa205980df03946a
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/ConfigStripe.js
@@ -0,0 +1,82 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.ConfigStripe = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The ConfigStripe model module.
+ * @module model/ConfigStripe
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new ConfigStripe.
+ * @alias module:model/ConfigStripe
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+ };
+
+ /**
+ * Constructs a ConfigStripe from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/ConfigStripe} obj Optional instance to populate.
+ * @return {module:model/ConfigStripe} The populated ConfigStripe instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('publishable_key')) {
+ obj['publishable_key'] = ApiClient.convertToType(data['publishable_key'], 'String');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {String} publishable_key
+ */
+ exports.prototype['publishable_key'] = undefined;
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/ConfigVersion.js b/masteringModule/node_modules/aimastering/src/model/ConfigVersion.js
new file mode 100644
index 0000000000000000000000000000000000000000..b98270c5391fea72159c395112d1f9d03e10efb3
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/ConfigVersion.js
@@ -0,0 +1,82 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.ConfigVersion = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The ConfigVersion model module.
+ * @module model/ConfigVersion
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new ConfigVersion.
+ * @alias module:model/ConfigVersion
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+ };
+
+ /**
+ * Constructs a ConfigVersion from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/ConfigVersion} obj Optional instance to populate.
+ * @return {module:model/ConfigVersion} The populated ConfigVersion instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('commit')) {
+ obj['commit'] = ApiClient.convertToType(data['commit'], 'String');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {String} commit
+ */
+ exports.prototype['commit'] = undefined;
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/ExternalSearchResult.js b/masteringModule/node_modules/aimastering/src/model/ExternalSearchResult.js
new file mode 100644
index 0000000000000000000000000000000000000000..4bebdfb855a715c5f41b4fbcecea537988ba8ebc
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/ExternalSearchResult.js
@@ -0,0 +1,90 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/ExternalSearchResultItunes', 'model/ExternalSearchResultYoutube'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'), require('./ExternalSearchResultItunes'), require('./ExternalSearchResultYoutube'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.ExternalSearchResult = factory(root.Aimastering.ApiClient, root.Aimastering.ExternalSearchResultItunes, root.Aimastering.ExternalSearchResultYoutube);
+ }
+}(this, function(ApiClient, ExternalSearchResultItunes, ExternalSearchResultYoutube) {
+ 'use strict';
+
+
+
+
+ /**
+ * The ExternalSearchResult model module.
+ * @module model/ExternalSearchResult
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new ExternalSearchResult.
+ * @alias module:model/ExternalSearchResult
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+ };
+
+ /**
+ * Constructs a ExternalSearchResult from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/ExternalSearchResult} obj Optional instance to populate.
+ * @return {module:model/ExternalSearchResult} The populated ExternalSearchResult instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('itunes')) {
+ obj['itunes'] = ApiClient.convertToType(data['itunes'], [ExternalSearchResultItunes]);
+ }
+ if (data.hasOwnProperty('youtube')) {
+ obj['youtube'] = ApiClient.convertToType(data['youtube'], [ExternalSearchResultYoutube]);
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {Array.} itunes
+ */
+ exports.prototype['itunes'] = undefined;
+ /**
+ * @member {Array.} youtube
+ */
+ exports.prototype['youtube'] = undefined;
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/ExternalSearchResultItunes.js b/masteringModule/node_modules/aimastering/src/model/ExternalSearchResultItunes.js
new file mode 100644
index 0000000000000000000000000000000000000000..29f1ced66a9b4a70d071faa9a78dbb6d70b56bca
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/ExternalSearchResultItunes.js
@@ -0,0 +1,162 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.ExternalSearchResultItunes = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The ExternalSearchResultItunes model module.
+ * @module model/ExternalSearchResultItunes
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new ExternalSearchResultItunes.
+ * @alias module:model/ExternalSearchResultItunes
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+
+
+
+
+
+
+
+
+
+ };
+
+ /**
+ * Constructs a ExternalSearchResultItunes from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/ExternalSearchResultItunes} obj Optional instance to populate.
+ * @return {module:model/ExternalSearchResultItunes} The populated ExternalSearchResultItunes instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('id')) {
+ obj['id'] = ApiClient.convertToType(data['id'], 'String');
+ }
+ if (data.hasOwnProperty('name')) {
+ obj['name'] = ApiClient.convertToType(data['name'], 'String');
+ }
+ if (data.hasOwnProperty('description')) {
+ obj['description'] = ApiClient.convertToType(data['description'], 'String');
+ }
+ if (data.hasOwnProperty('url')) {
+ obj['url'] = ApiClient.convertToType(data['url'], 'String');
+ }
+ if (data.hasOwnProperty('thumbnail_url')) {
+ obj['thumbnail_url'] = ApiClient.convertToType(data['thumbnail_url'], 'String');
+ }
+ if (data.hasOwnProperty('preview_url')) {
+ obj['preview_url'] = ApiClient.convertToType(data['preview_url'], 'String');
+ }
+ if (data.hasOwnProperty('album_name')) {
+ obj['album_name'] = ApiClient.convertToType(data['album_name'], 'String');
+ }
+ if (data.hasOwnProperty('album_url')) {
+ obj['album_url'] = ApiClient.convertToType(data['album_url'], 'String');
+ }
+ if (data.hasOwnProperty('artist_name')) {
+ obj['artist_name'] = ApiClient.convertToType(data['artist_name'], 'String');
+ }
+ if (data.hasOwnProperty('artist_url')) {
+ obj['artist_url'] = ApiClient.convertToType(data['artist_url'], 'String');
+ }
+ if (data.hasOwnProperty('track_number')) {
+ obj['track_number'] = ApiClient.convertToType(data['track_number'], 'Number');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {String} id
+ */
+ exports.prototype['id'] = undefined;
+ /**
+ * @member {String} name
+ */
+ exports.prototype['name'] = undefined;
+ /**
+ * @member {String} description
+ */
+ exports.prototype['description'] = undefined;
+ /**
+ * @member {String} url
+ */
+ exports.prototype['url'] = undefined;
+ /**
+ * @member {String} thumbnail_url
+ */
+ exports.prototype['thumbnail_url'] = undefined;
+ /**
+ * @member {String} preview_url
+ */
+ exports.prototype['preview_url'] = undefined;
+ /**
+ * @member {String} album_name
+ */
+ exports.prototype['album_name'] = undefined;
+ /**
+ * @member {String} album_url
+ */
+ exports.prototype['album_url'] = undefined;
+ /**
+ * @member {String} artist_name
+ */
+ exports.prototype['artist_name'] = undefined;
+ /**
+ * @member {String} artist_url
+ */
+ exports.prototype['artist_url'] = undefined;
+ /**
+ * @member {Number} track_number
+ */
+ exports.prototype['track_number'] = undefined;
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/ExternalSearchResultYoutube.js b/masteringModule/node_modules/aimastering/src/model/ExternalSearchResultYoutube.js
new file mode 100644
index 0000000000000000000000000000000000000000..beccdad8fa5372976e95a8dde8a08f997f57fd36
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/ExternalSearchResultYoutube.js
@@ -0,0 +1,138 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.ExternalSearchResultYoutube = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The ExternalSearchResultYoutube model module.
+ * @module model/ExternalSearchResultYoutube
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new ExternalSearchResultYoutube.
+ * @alias module:model/ExternalSearchResultYoutube
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+
+
+
+
+
+
+ };
+
+ /**
+ * Constructs a ExternalSearchResultYoutube from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/ExternalSearchResultYoutube} obj Optional instance to populate.
+ * @return {module:model/ExternalSearchResultYoutube} The populated ExternalSearchResultYoutube instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('id')) {
+ obj['id'] = ApiClient.convertToType(data['id'], 'String');
+ }
+ if (data.hasOwnProperty('name')) {
+ obj['name'] = ApiClient.convertToType(data['name'], 'String');
+ }
+ if (data.hasOwnProperty('description')) {
+ obj['description'] = ApiClient.convertToType(data['description'], 'String');
+ }
+ if (data.hasOwnProperty('url')) {
+ obj['url'] = ApiClient.convertToType(data['url'], 'String');
+ }
+ if (data.hasOwnProperty('thumbnail_url')) {
+ obj['thumbnail_url'] = ApiClient.convertToType(data['thumbnail_url'], 'String');
+ }
+ if (data.hasOwnProperty('channel_id')) {
+ obj['channel_id'] = ApiClient.convertToType(data['channel_id'], 'String');
+ }
+ if (data.hasOwnProperty('channel_url')) {
+ obj['channel_url'] = ApiClient.convertToType(data['channel_url'], 'String');
+ }
+ if (data.hasOwnProperty('channel_name')) {
+ obj['channel_name'] = ApiClient.convertToType(data['channel_name'], 'String');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {String} id
+ */
+ exports.prototype['id'] = undefined;
+ /**
+ * @member {String} name
+ */
+ exports.prototype['name'] = undefined;
+ /**
+ * @member {String} description
+ */
+ exports.prototype['description'] = undefined;
+ /**
+ * @member {String} url
+ */
+ exports.prototype['url'] = undefined;
+ /**
+ * @member {String} thumbnail_url
+ */
+ exports.prototype['thumbnail_url'] = undefined;
+ /**
+ * @member {String} channel_id
+ */
+ exports.prototype['channel_id'] = undefined;
+ /**
+ * @member {String} channel_url
+ */
+ exports.prototype['channel_url'] = undefined;
+ /**
+ * @member {String} channel_name
+ */
+ exports.prototype['channel_name'] = undefined;
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/GroupBuyStatistics.js b/masteringModule/node_modules/aimastering/src/model/GroupBuyStatistics.js
new file mode 100644
index 0000000000000000000000000000000000000000..9f8b7e5853a808cabd5c38a84fb518623f16ea91
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/GroupBuyStatistics.js
@@ -0,0 +1,82 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.GroupBuyStatistics = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The GroupBuyStatistics model module.
+ * @module model/GroupBuyStatistics
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new GroupBuyStatistics.
+ * @alias module:model/GroupBuyStatistics
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+ };
+
+ /**
+ * Constructs a GroupBuyStatistics from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/GroupBuyStatistics} obj Optional instance to populate.
+ * @return {module:model/GroupBuyStatistics} The populated GroupBuyStatistics instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('premium_plan_subscribed_user_count')) {
+ obj['premium_plan_subscribed_user_count'] = ApiClient.convertToType(data['premium_plan_subscribed_user_count'], 'Number');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {Number} premium_plan_subscribed_user_count
+ */
+ exports.prototype['premium_plan_subscribed_user_count'] = undefined;
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/JWT.js b/masteringModule/node_modules/aimastering/src/model/JWT.js
new file mode 100644
index 0000000000000000000000000000000000000000..679e93141c7cc68d4c9ebec3f84fcbd8878f55e2
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/JWT.js
@@ -0,0 +1,74 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.JWT = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The JWT model module.
+ * @module model/JWT
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new JWT.
+ * @alias module:model/JWT
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+ };
+
+ /**
+ * Constructs a JWT from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/JWT} obj Optional instance to populate.
+ * @return {module:model/JWT} The populated JWT instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ }
+ return obj;
+ }
+
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/Kpi.js b/masteringModule/node_modules/aimastering/src/model/Kpi.js
new file mode 100644
index 0000000000000000000000000000000000000000..9abcb00116e6dc5069224535369170afe63d1abd
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/Kpi.js
@@ -0,0 +1,74 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.Kpi = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The Kpi model module.
+ * @module model/Kpi
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new Kpi.
+ * @alias module:model/Kpi
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+ };
+
+ /**
+ * Constructs a Kpi from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/Kpi} obj Optional instance to populate.
+ * @return {module:model/Kpi} The populated Kpi instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ }
+ return obj;
+ }
+
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/LibraryAudio.js b/masteringModule/node_modules/aimastering/src/model/LibraryAudio.js
new file mode 100644
index 0000000000000000000000000000000000000000..1acef139fd10dee377b28221ae38d22f9e6da478
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/LibraryAudio.js
@@ -0,0 +1,354 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.LibraryAudio = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The LibraryAudio model module.
+ * @module model/LibraryAudio
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new LibraryAudio.
+ * @alias module:model/LibraryAudio
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ };
+
+ /**
+ * Constructs a LibraryAudio from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/LibraryAudio} obj Optional instance to populate.
+ * @return {module:model/LibraryAudio} The populated LibraryAudio instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('id')) {
+ obj['id'] = ApiClient.convertToType(data['id'], 'Number');
+ }
+ if (data.hasOwnProperty('user_id')) {
+ obj['user_id'] = ApiClient.convertToType(data['user_id'], 'Number');
+ }
+ if (data.hasOwnProperty('name')) {
+ obj['name'] = ApiClient.convertToType(data['name'], 'String');
+ }
+ if (data.hasOwnProperty('album')) {
+ obj['album'] = ApiClient.convertToType(data['album'], 'String');
+ }
+ if (data.hasOwnProperty('album_artist')) {
+ obj['album_artist'] = ApiClient.convertToType(data['album_artist'], 'String');
+ }
+ if (data.hasOwnProperty('artist')) {
+ obj['artist'] = ApiClient.convertToType(data['artist'], 'String');
+ }
+ if (data.hasOwnProperty('genre')) {
+ obj['genre'] = ApiClient.convertToType(data['genre'], 'String');
+ }
+ if (data.hasOwnProperty('track')) {
+ obj['track'] = ApiClient.convertToType(data['track'], 'Number');
+ }
+ if (data.hasOwnProperty('publisher')) {
+ obj['publisher'] = ApiClient.convertToType(data['publisher'], 'String');
+ }
+ if (data.hasOwnProperty('file_hash')) {
+ obj['file_hash'] = ApiClient.convertToType(data['file_hash'], 'String');
+ }
+ if (data.hasOwnProperty('size')) {
+ obj['size'] = ApiClient.convertToType(data['size'], 'Number');
+ }
+ if (data.hasOwnProperty('status')) {
+ obj['status'] = ApiClient.convertToType(data['status'], 'String');
+ }
+ if (data.hasOwnProperty('failure_reason')) {
+ obj['failure_reason'] = ApiClient.convertToType(data['failure_reason'], 'String');
+ }
+ if (data.hasOwnProperty('probe_json')) {
+ obj['probe_json'] = ApiClient.convertToType(data['probe_json'], 'String');
+ }
+ if (data.hasOwnProperty('rms')) {
+ obj['rms'] = ApiClient.convertToType(data['rms'], 'Number');
+ }
+ if (data.hasOwnProperty('peak')) {
+ obj['peak'] = ApiClient.convertToType(data['peak'], 'Number');
+ }
+ if (data.hasOwnProperty('true_peak')) {
+ obj['true_peak'] = ApiClient.convertToType(data['true_peak'], 'Number');
+ }
+ if (data.hasOwnProperty('lowpass_true_peak_15khz')) {
+ obj['lowpass_true_peak_15khz'] = ApiClient.convertToType(data['lowpass_true_peak_15khz'], 'Number');
+ }
+ if (data.hasOwnProperty('loudness')) {
+ obj['loudness'] = ApiClient.convertToType(data['loudness'], 'Number');
+ }
+ if (data.hasOwnProperty('dynamics')) {
+ obj['dynamics'] = ApiClient.convertToType(data['dynamics'], 'Number');
+ }
+ if (data.hasOwnProperty('sharpness')) {
+ obj['sharpness'] = ApiClient.convertToType(data['sharpness'], 'Number');
+ }
+ if (data.hasOwnProperty('space')) {
+ obj['space'] = ApiClient.convertToType(data['space'], 'Number');
+ }
+ if (data.hasOwnProperty('loudness_range')) {
+ obj['loudness_range'] = ApiClient.convertToType(data['loudness_range'], 'Number');
+ }
+ if (data.hasOwnProperty('drr')) {
+ obj['drr'] = ApiClient.convertToType(data['drr'], 'Number');
+ }
+ if (data.hasOwnProperty('sound_quality')) {
+ obj['sound_quality'] = ApiClient.convertToType(data['sound_quality'], 'Number');
+ }
+ if (data.hasOwnProperty('sound_quality2')) {
+ obj['sound_quality2'] = ApiClient.convertToType(data['sound_quality2'], 'Number');
+ }
+ if (data.hasOwnProperty('dissonance')) {
+ obj['dissonance'] = ApiClient.convertToType(data['dissonance'], 'Number');
+ }
+ if (data.hasOwnProperty('frames')) {
+ obj['frames'] = ApiClient.convertToType(data['frames'], 'Number');
+ }
+ if (data.hasOwnProperty('sample_rate')) {
+ obj['sample_rate'] = ApiClient.convertToType(data['sample_rate'], 'Number');
+ }
+ if (data.hasOwnProperty('channels')) {
+ obj['channels'] = ApiClient.convertToType(data['channels'], 'Number');
+ }
+ if (data.hasOwnProperty('is_public')) {
+ obj['is_public'] = ApiClient.convertToType(data['is_public'], 'Boolean');
+ }
+ if (data.hasOwnProperty('liked_by_self')) {
+ obj['liked_by_self'] = ApiClient.convertToType(data['liked_by_self'], 'Boolean');
+ }
+ if (data.hasOwnProperty('like_count')) {
+ obj['like_count'] = ApiClient.convertToType(data['like_count'], 'Number');
+ }
+ if (data.hasOwnProperty('created_at')) {
+ obj['created_at'] = ApiClient.convertToType(data['created_at'], 'Date');
+ }
+ if (data.hasOwnProperty('updated_at')) {
+ obj['updated_at'] = ApiClient.convertToType(data['updated_at'], 'Date');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {Number} id
+ */
+ exports.prototype['id'] = undefined;
+ /**
+ * @member {Number} user_id
+ */
+ exports.prototype['user_id'] = undefined;
+ /**
+ * @member {String} name
+ */
+ exports.prototype['name'] = undefined;
+ /**
+ * @member {String} album
+ */
+ exports.prototype['album'] = undefined;
+ /**
+ * @member {String} album_artist
+ */
+ exports.prototype['album_artist'] = undefined;
+ /**
+ * @member {String} artist
+ */
+ exports.prototype['artist'] = undefined;
+ /**
+ * @member {String} genre
+ */
+ exports.prototype['genre'] = undefined;
+ /**
+ * @member {Number} track
+ */
+ exports.prototype['track'] = undefined;
+ /**
+ * @member {String} publisher
+ */
+ exports.prototype['publisher'] = undefined;
+ /**
+ * @member {String} file_hash
+ */
+ exports.prototype['file_hash'] = undefined;
+ /**
+ * @member {Number} size
+ */
+ exports.prototype['size'] = undefined;
+ /**
+ * @member {String} status
+ */
+ exports.prototype['status'] = undefined;
+ /**
+ * @member {String} failure_reason
+ */
+ exports.prototype['failure_reason'] = undefined;
+ /**
+ * @member {String} probe_json
+ */
+ exports.prototype['probe_json'] = undefined;
+ /**
+ * @member {Number} rms
+ */
+ exports.prototype['rms'] = undefined;
+ /**
+ * @member {Number} peak
+ */
+ exports.prototype['peak'] = undefined;
+ /**
+ * @member {Number} true_peak
+ */
+ exports.prototype['true_peak'] = undefined;
+ /**
+ * @member {Number} lowpass_true_peak_15khz
+ */
+ exports.prototype['lowpass_true_peak_15khz'] = undefined;
+ /**
+ * @member {Number} loudness
+ */
+ exports.prototype['loudness'] = undefined;
+ /**
+ * @member {Number} dynamics
+ */
+ exports.prototype['dynamics'] = undefined;
+ /**
+ * @member {Number} sharpness
+ */
+ exports.prototype['sharpness'] = undefined;
+ /**
+ * @member {Number} space
+ */
+ exports.prototype['space'] = undefined;
+ /**
+ * @member {Number} loudness_range
+ */
+ exports.prototype['loudness_range'] = undefined;
+ /**
+ * @member {Number} drr
+ */
+ exports.prototype['drr'] = undefined;
+ /**
+ * @member {Number} sound_quality
+ */
+ exports.prototype['sound_quality'] = undefined;
+ /**
+ * @member {Number} sound_quality2
+ */
+ exports.prototype['sound_quality2'] = undefined;
+ /**
+ * @member {Number} dissonance
+ */
+ exports.prototype['dissonance'] = undefined;
+ /**
+ * @member {Number} frames
+ */
+ exports.prototype['frames'] = undefined;
+ /**
+ * @member {Number} sample_rate
+ */
+ exports.prototype['sample_rate'] = undefined;
+ /**
+ * @member {Number} channels
+ */
+ exports.prototype['channels'] = undefined;
+ /**
+ * @member {Boolean} is_public
+ */
+ exports.prototype['is_public'] = undefined;
+ /**
+ * @member {Boolean} liked_by_self
+ */
+ exports.prototype['liked_by_self'] = undefined;
+ /**
+ * @member {Number} like_count
+ */
+ exports.prototype['like_count'] = undefined;
+ /**
+ * @member {Date} created_at
+ */
+ exports.prototype['created_at'] = undefined;
+ /**
+ * @member {Date} updated_at
+ */
+ exports.prototype['updated_at'] = undefined;
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/LibraryAudioAnalysis.js b/masteringModule/node_modules/aimastering/src/model/LibraryAudioAnalysis.js
new file mode 100644
index 0000000000000000000000000000000000000000..09660742b3b80fa1edc536ee60dd9a19e9b681d3
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/LibraryAudioAnalysis.js
@@ -0,0 +1,101 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.LibraryAudioAnalysis = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The LibraryAudioAnalysis model module.
+ * @module model/LibraryAudioAnalysis
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new LibraryAudioAnalysis.
+ * @alias module:model/LibraryAudioAnalysis
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+
+ };
+
+ /**
+ * Constructs a LibraryAudioAnalysis from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/LibraryAudioAnalysis} obj Optional instance to populate.
+ * @return {module:model/LibraryAudioAnalysis} The populated LibraryAudioAnalysis instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('id')) {
+ obj['id'] = ApiClient.convertToType(data['id'], 'Number');
+ }
+ if (data.hasOwnProperty('library_audio_id')) {
+ obj['library_audio_id'] = ApiClient.convertToType(data['library_audio_id'], 'Number');
+ }
+ if (data.hasOwnProperty('analysis')) {
+ obj['analysis'] = ApiClient.convertToType(data['analysis'], Object);
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * Audio analysis id
+ * @member {Number} id
+ */
+ exports.prototype['id'] = undefined;
+ /**
+ * Audio id
+ * @member {Number} library_audio_id
+ */
+ exports.prototype['library_audio_id'] = undefined;
+ /**
+ * Audio analysis data. The schema changes frequently.
+ * @member {Object} analysis
+ */
+ exports.prototype['analysis'] = undefined;
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/LibraryAudioLike.js b/masteringModule/node_modules/aimastering/src/model/LibraryAudioLike.js
new file mode 100644
index 0000000000000000000000000000000000000000..76e76e371066c44f0737ffa915fc760958215a9e
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/LibraryAudioLike.js
@@ -0,0 +1,101 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.LibraryAudioLike = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The LibraryAudioLike model module.
+ * @module model/LibraryAudioLike
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new LibraryAudioLike.
+ * @alias module:model/LibraryAudioLike
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+
+ };
+
+ /**
+ * Constructs a LibraryAudioLike from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/LibraryAudioLike} obj Optional instance to populate.
+ * @return {module:model/LibraryAudioLike} The populated LibraryAudioLike instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('id')) {
+ obj['id'] = ApiClient.convertToType(data['id'], 'Number');
+ }
+ if (data.hasOwnProperty('library_audio_id')) {
+ obj['library_audio_id'] = ApiClient.convertToType(data['library_audio_id'], 'Number');
+ }
+ if (data.hasOwnProperty('user_id')) {
+ obj['user_id'] = ApiClient.convertToType(data['user_id'], 'Number');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * Audio analysis id
+ * @member {Number} id
+ */
+ exports.prototype['id'] = undefined;
+ /**
+ * Audio id
+ * @member {Number} library_audio_id
+ */
+ exports.prototype['library_audio_id'] = undefined;
+ /**
+ * User id
+ * @member {Number} user_id
+ */
+ exports.prototype['user_id'] = undefined;
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/Mastering.js b/masteringModule/node_modules/aimastering/src/model/Mastering.js
new file mode 100644
index 0000000000000000000000000000000000000000..929861c9d93616ae895e318227f7682065b362ca
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/Mastering.js
@@ -0,0 +1,551 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.Mastering = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The Mastering model module.
+ * @module model/Mastering
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new Mastering.
+ * @alias module:model/Mastering
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ };
+
+ /**
+ * Constructs a Mastering from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/Mastering} obj Optional instance to populate.
+ * @return {module:model/Mastering} The populated Mastering instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('id')) {
+ obj['id'] = ApiClient.convertToType(data['id'], 'Number');
+ }
+ if (data.hasOwnProperty('user_id')) {
+ obj['user_id'] = ApiClient.convertToType(data['user_id'], 'Number');
+ }
+ if (data.hasOwnProperty('input_audio_id')) {
+ obj['input_audio_id'] = ApiClient.convertToType(data['input_audio_id'], 'Number');
+ }
+ if (data.hasOwnProperty('output_audio_id')) {
+ obj['output_audio_id'] = ApiClient.convertToType(data['output_audio_id'], 'Number');
+ }
+ if (data.hasOwnProperty('output_video_id')) {
+ obj['output_video_id'] = ApiClient.convertToType(data['output_video_id'], 'Number');
+ }
+ if (data.hasOwnProperty('reference_audio_id')) {
+ obj['reference_audio_id'] = ApiClient.convertToType(data['reference_audio_id'], 'Number');
+ }
+ if (data.hasOwnProperty('mode')) {
+ obj['mode'] = ApiClient.convertToType(data['mode'], 'String');
+ }
+ if (data.hasOwnProperty('status')) {
+ obj['status'] = ApiClient.convertToType(data['status'], 'String');
+ }
+ if (data.hasOwnProperty('failure_reason')) {
+ obj['failure_reason'] = ApiClient.convertToType(data['failure_reason'], 'String');
+ }
+ if (data.hasOwnProperty('target_loudness_mode')) {
+ obj['target_loudness_mode'] = ApiClient.convertToType(data['target_loudness_mode'], 'String');
+ }
+ if (data.hasOwnProperty('target_loudness')) {
+ obj['target_loudness'] = ApiClient.convertToType(data['target_loudness'], 'Number');
+ }
+ if (data.hasOwnProperty('output_format')) {
+ obj['output_format'] = ApiClient.convertToType(data['output_format'], 'String');
+ }
+ if (data.hasOwnProperty('preset')) {
+ obj['preset'] = ApiClient.convertToType(data['preset'], 'String');
+ }
+ if (data.hasOwnProperty('bit_depth')) {
+ obj['bit_depth'] = ApiClient.convertToType(data['bit_depth'], 'Number');
+ }
+ if (data.hasOwnProperty('sample_rate')) {
+ obj['sample_rate'] = ApiClient.convertToType(data['sample_rate'], 'Number');
+ }
+ if (data.hasOwnProperty('review_comment')) {
+ obj['review_comment'] = ApiClient.convertToType(data['review_comment'], 'String');
+ }
+ if (data.hasOwnProperty('review_score')) {
+ obj['review_score'] = ApiClient.convertToType(data['review_score'], 'Number');
+ }
+ if (data.hasOwnProperty('mastering_matching_level')) {
+ obj['mastering_matching_level'] = ApiClient.convertToType(data['mastering_matching_level'], 'Number');
+ }
+ if (data.hasOwnProperty('progression')) {
+ obj['progression'] = ApiClient.convertToType(data['progression'], 'Number');
+ }
+ if (data.hasOwnProperty('bass_preservation')) {
+ obj['bass_preservation'] = ApiClient.convertToType(data['bass_preservation'], 'Boolean');
+ }
+ if (data.hasOwnProperty('mastering')) {
+ obj['mastering'] = ApiClient.convertToType(data['mastering'], 'Boolean');
+ }
+ if (data.hasOwnProperty('mastering_algorithm')) {
+ obj['mastering_algorithm'] = ApiClient.convertToType(data['mastering_algorithm'], 'String');
+ }
+ if (data.hasOwnProperty('preserved')) {
+ obj['preserved'] = ApiClient.convertToType(data['preserved'], 'Boolean');
+ }
+ if (data.hasOwnProperty('retry_count')) {
+ obj['retry_count'] = ApiClient.convertToType(data['retry_count'], 'Number');
+ }
+ if (data.hasOwnProperty('mastering_reverb')) {
+ obj['mastering_reverb'] = ApiClient.convertToType(data['mastering_reverb'], 'Boolean');
+ }
+ if (data.hasOwnProperty('mastering_reverb_gain')) {
+ obj['mastering_reverb_gain'] = ApiClient.convertToType(data['mastering_reverb_gain'], 'Number');
+ }
+ if (data.hasOwnProperty('low_cut_freq')) {
+ obj['low_cut_freq'] = ApiClient.convertToType(data['low_cut_freq'], 'Number');
+ }
+ if (data.hasOwnProperty('high_cut_freq')) {
+ obj['high_cut_freq'] = ApiClient.convertToType(data['high_cut_freq'], 'Number');
+ }
+ if (data.hasOwnProperty('ceiling')) {
+ obj['ceiling'] = ApiClient.convertToType(data['ceiling'], 'Number');
+ }
+ if (data.hasOwnProperty('ceiling_mode')) {
+ obj['ceiling_mode'] = ApiClient.convertToType(data['ceiling_mode'], 'String');
+ }
+ if (data.hasOwnProperty('oversample')) {
+ obj['oversample'] = ApiClient.convertToType(data['oversample'], 'Number');
+ }
+ if (data.hasOwnProperty('limiting_error')) {
+ obj['limiting_error'] = ApiClient.convertToType(data['limiting_error'], 'Number');
+ }
+ if (data.hasOwnProperty('video_title')) {
+ obj['video_title'] = ApiClient.convertToType(data['video_title'], 'String');
+ }
+ if (data.hasOwnProperty('video_status')) {
+ obj['video_status'] = ApiClient.convertToType(data['video_status'], 'String');
+ }
+ if (data.hasOwnProperty('expire_at')) {
+ obj['expire_at'] = ApiClient.convertToType(data['expire_at'], 'Date');
+ }
+ if (data.hasOwnProperty('created_at')) {
+ obj['created_at'] = ApiClient.convertToType(data['created_at'], 'Date');
+ }
+ if (data.hasOwnProperty('updated_at')) {
+ obj['updated_at'] = ApiClient.convertToType(data['updated_at'], 'Date');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {Number} id
+ */
+ exports.prototype['id'] = undefined;
+ /**
+ * @member {Number} user_id
+ */
+ exports.prototype['user_id'] = undefined;
+ /**
+ * @member {Number} input_audio_id
+ */
+ exports.prototype['input_audio_id'] = undefined;
+ /**
+ * @member {Number} output_audio_id
+ */
+ exports.prototype['output_audio_id'] = undefined;
+ /**
+ * @member {Number} output_video_id
+ */
+ exports.prototype['output_video_id'] = undefined;
+ /**
+ * @member {Number} reference_audio_id
+ */
+ exports.prototype['reference_audio_id'] = undefined;
+ /**
+ * @member {module:model/Mastering.ModeEnum} mode
+ */
+ exports.prototype['mode'] = undefined;
+ /**
+ * @member {module:model/Mastering.StatusEnum} status
+ */
+ exports.prototype['status'] = undefined;
+ /**
+ * @member {module:model/Mastering.FailureReasonEnum} failure_reason
+ */
+ exports.prototype['failure_reason'] = undefined;
+ /**
+ * @member {module:model/Mastering.TargetLoudnessModeEnum} target_loudness_mode
+ */
+ exports.prototype['target_loudness_mode'] = undefined;
+ /**
+ * @member {Number} target_loudness
+ */
+ exports.prototype['target_loudness'] = undefined;
+ /**
+ * @member {module:model/Mastering.OutputFormatEnum} output_format
+ */
+ exports.prototype['output_format'] = undefined;
+ /**
+ * @member {module:model/Mastering.PresetEnum} preset
+ */
+ exports.prototype['preset'] = undefined;
+ /**
+ * @member {Number} bit_depth
+ */
+ exports.prototype['bit_depth'] = undefined;
+ /**
+ * @member {Number} sample_rate
+ */
+ exports.prototype['sample_rate'] = undefined;
+ /**
+ * @member {String} review_comment
+ */
+ exports.prototype['review_comment'] = undefined;
+ /**
+ * @member {Number} review_score
+ */
+ exports.prototype['review_score'] = undefined;
+ /**
+ * @member {Number} mastering_matching_level
+ */
+ exports.prototype['mastering_matching_level'] = undefined;
+ /**
+ * @member {Number} progression
+ */
+ exports.prototype['progression'] = undefined;
+ /**
+ * @member {Boolean} bass_preservation
+ */
+ exports.prototype['bass_preservation'] = undefined;
+ /**
+ * @member {Boolean} mastering
+ */
+ exports.prototype['mastering'] = undefined;
+ /**
+ * @member {module:model/Mastering.MasteringAlgorithmEnum} mastering_algorithm
+ */
+ exports.prototype['mastering_algorithm'] = undefined;
+ /**
+ * @member {Boolean} preserved
+ */
+ exports.prototype['preserved'] = undefined;
+ /**
+ * @member {Number} retry_count
+ */
+ exports.prototype['retry_count'] = undefined;
+ /**
+ * @member {Boolean} mastering_reverb
+ */
+ exports.prototype['mastering_reverb'] = undefined;
+ /**
+ * @member {Number} mastering_reverb_gain
+ */
+ exports.prototype['mastering_reverb_gain'] = undefined;
+ /**
+ * @member {Number} low_cut_freq
+ */
+ exports.prototype['low_cut_freq'] = undefined;
+ /**
+ * @member {Number} high_cut_freq
+ */
+ exports.prototype['high_cut_freq'] = undefined;
+ /**
+ * @member {Number} ceiling
+ */
+ exports.prototype['ceiling'] = undefined;
+ /**
+ * @member {String} ceiling_mode
+ */
+ exports.prototype['ceiling_mode'] = undefined;
+ /**
+ * @member {Number} oversample
+ */
+ exports.prototype['oversample'] = undefined;
+ /**
+ * @member {Number} limiting_error
+ */
+ exports.prototype['limiting_error'] = undefined;
+ /**
+ * @member {String} video_title
+ */
+ exports.prototype['video_title'] = undefined;
+ /**
+ * @member {module:model/Mastering.VideoStatusEnum} video_status
+ */
+ exports.prototype['video_status'] = undefined;
+ /**
+ * @member {Date} expire_at
+ */
+ exports.prototype['expire_at'] = undefined;
+ /**
+ * @member {Date} created_at
+ */
+ exports.prototype['created_at'] = undefined;
+ /**
+ * @member {Date} updated_at
+ */
+ exports.prototype['updated_at'] = undefined;
+
+
+ /**
+ * Allowed values for the mode property.
+ * @enum {String}
+ * @readonly
+ */
+ exports.ModeEnum = {
+ /**
+ * value: "default"
+ * @const
+ */
+ "default": "default",
+ /**
+ * value: "custom"
+ * @const
+ */
+ "custom": "custom" };
+
+ /**
+ * Allowed values for the status property.
+ * @enum {String}
+ * @readonly
+ */
+ exports.StatusEnum = {
+ /**
+ * value: "waiting"
+ * @const
+ */
+ "waiting": "waiting",
+ /**
+ * value: "processing"
+ * @const
+ */
+ "processing": "processing",
+ /**
+ * value: "canceled"
+ * @const
+ */
+ "canceled": "canceled",
+ /**
+ * value: "failed"
+ * @const
+ */
+ "failed": "failed",
+ /**
+ * value: "succeeded"
+ * @const
+ */
+ "succeeded": "succeeded" };
+
+ /**
+ * Allowed values for the failure_reason property.
+ * @enum {String}
+ * @readonly
+ */
+ exports.FailureReasonEnum = {
+ /**
+ * value: "unknown"
+ * @const
+ */
+ "unknown": "unknown",
+ /**
+ * value: "expired"
+ * @const
+ */
+ "expired": "expired",
+ /**
+ * value: "failed_to_prepare"
+ * @const
+ */
+ "failed_to_prepare": "failed_to_prepare" };
+
+ /**
+ * Allowed values for the target_loudness_mode property.
+ * @enum {String}
+ * @readonly
+ */
+ exports.TargetLoudnessModeEnum = {
+ /**
+ * value: "loudness"
+ * @const
+ */
+ "loudness": "loudness",
+ /**
+ * value: "rms"
+ * @const
+ */
+ "rms": "rms",
+ /**
+ * value: "peak"
+ * @const
+ */
+ "peak": "peak",
+ /**
+ * value: "youtube_loudness"
+ * @const
+ */
+ "youtube_loudness": "youtube_loudness" };
+
+ /**
+ * Allowed values for the output_format property.
+ * @enum {String}
+ * @readonly
+ */
+ exports.OutputFormatEnum = {
+ /**
+ * value: "wav"
+ * @const
+ */
+ "wav": "wav",
+ /**
+ * value: "mp3"
+ * @const
+ */
+ "mp3": "mp3" };
+
+ /**
+ * Allowed values for the preset property.
+ * @enum {String}
+ * @readonly
+ */
+ exports.PresetEnum = {
+ /**
+ * value: "general"
+ * @const
+ */
+ "general": "general",
+ /**
+ * value: "pop"
+ * @const
+ */
+ "pop": "pop",
+ /**
+ * value: "jazz"
+ * @const
+ */
+ "jazz": "jazz",
+ /**
+ * value: "classical"
+ * @const
+ */
+ "classical": "classical" };
+
+ /**
+ * Allowed values for the mastering_algorithm property.
+ * @enum {String}
+ * @readonly
+ */
+ exports.MasteringAlgorithmEnum = {
+ /**
+ * value: "v1"
+ * @const
+ */
+ "v1": "v1",
+ /**
+ * value: "v2"
+ * @const
+ */
+ "v2": "v2" };
+
+ /**
+ * Allowed values for the video_status property.
+ * @enum {String}
+ * @readonly
+ */
+ exports.VideoStatusEnum = {
+ /**
+ * value: "waiting"
+ * @const
+ */
+ "waiting": "waiting",
+ /**
+ * value: "failed"
+ * @const
+ */
+ "failed": "failed",
+ /**
+ * value: "succeeded"
+ * @const
+ */
+ "succeeded": "succeeded" };
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/Payment.js b/masteringModule/node_modules/aimastering/src/model/Payment.js
new file mode 100644
index 0000000000000000000000000000000000000000..82ec8fa4fb2456cdcb965f82f6a9bb050636c26a
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/Payment.js
@@ -0,0 +1,147 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.Payment = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The Payment model module.
+ * @module model/Payment
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new Payment.
+ * @alias module:model/Payment
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+
+
+
+
+
+ };
+
+ /**
+ * Constructs a Payment from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/Payment} obj Optional instance to populate.
+ * @return {module:model/Payment} The populated Payment instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('id')) {
+ obj['id'] = ApiClient.convertToType(data['id'], 'Number');
+ }
+ if (data.hasOwnProperty('service')) {
+ obj['service'] = ApiClient.convertToType(data['service'], 'String');
+ }
+ if (data.hasOwnProperty('product_given')) {
+ obj['product_given'] = ApiClient.convertToType(data['product_given'], 'Boolean');
+ }
+ if (data.hasOwnProperty('product')) {
+ obj['product'] = ApiClient.convertToType(data['product'], Object);
+ }
+ if (data.hasOwnProperty('transaction_id')) {
+ obj['transaction_id'] = ApiClient.convertToType(data['transaction_id'], 'String');
+ }
+ if (data.hasOwnProperty('transaction_detail')) {
+ obj['transaction_detail'] = ApiClient.convertToType(data['transaction_detail'], Object);
+ }
+ if (data.hasOwnProperty('created_at')) {
+ obj['created_at'] = ApiClient.convertToType(data['created_at'], 'Date');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {Number} id
+ */
+ exports.prototype['id'] = undefined;
+ /**
+ * @member {module:model/Payment.ServiceEnum} service
+ */
+ exports.prototype['service'] = undefined;
+ /**
+ * @member {Boolean} product_given
+ */
+ exports.prototype['product_given'] = undefined;
+ /**
+ * @member {Object} product
+ */
+ exports.prototype['product'] = undefined;
+ /**
+ * @member {String} transaction_id
+ */
+ exports.prototype['transaction_id'] = undefined;
+ /**
+ * @member {Object} transaction_detail
+ */
+ exports.prototype['transaction_detail'] = undefined;
+ /**
+ * @member {Date} created_at
+ */
+ exports.prototype['created_at'] = undefined;
+
+
+ /**
+ * Allowed values for the service property.
+ * @enum {String}
+ * @readonly
+ */
+ exports.ServiceEnum = {
+ /**
+ * value: "paypal"
+ * @const
+ */
+ "paypal": "paypal",
+ /**
+ * value: "stripe"
+ * @const
+ */
+ "stripe": "stripe" };
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/PaymentCustomer.js b/masteringModule/node_modules/aimastering/src/model/PaymentCustomer.js
new file mode 100644
index 0000000000000000000000000000000000000000..cc483ef47fe7f86aa34e4e07aab68cb87dc70d01
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/PaymentCustomer.js
@@ -0,0 +1,106 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.PaymentCustomer = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The PaymentCustomer model module.
+ * @module model/PaymentCustomer
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new PaymentCustomer.
+ * @alias module:model/PaymentCustomer
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+
+
+ };
+
+ /**
+ * Constructs a PaymentCustomer from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/PaymentCustomer} obj Optional instance to populate.
+ * @return {module:model/PaymentCustomer} The populated PaymentCustomer instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('id')) {
+ obj['id'] = ApiClient.convertToType(data['id'], 'Number');
+ }
+ if (data.hasOwnProperty('payment_customer_detail')) {
+ obj['payment_customer_detail'] = ApiClient.convertToType(data['payment_customer_detail'], Object);
+ }
+ if (data.hasOwnProperty('created_at')) {
+ obj['created_at'] = ApiClient.convertToType(data['created_at'], 'Date');
+ }
+ if (data.hasOwnProperty('updated_at')) {
+ obj['updated_at'] = ApiClient.convertToType(data['updated_at'], 'Date');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {Number} id
+ */
+ exports.prototype['id'] = undefined;
+ /**
+ * @member {Object} payment_customer_detail
+ */
+ exports.prototype['payment_customer_detail'] = undefined;
+ /**
+ * @member {Date} created_at
+ */
+ exports.prototype['created_at'] = undefined;
+ /**
+ * @member {Date} updated_at
+ */
+ exports.prototype['updated_at'] = undefined;
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/Plan.js b/masteringModule/node_modules/aimastering/src/model/Plan.js
new file mode 100644
index 0000000000000000000000000000000000000000..2dcb08fd58fc74002ea1156babe432c71eb687a6
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/Plan.js
@@ -0,0 +1,143 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.Plan = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The Plan model module.
+ * @module model/Plan
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new Plan.
+ * @alias module:model/Plan
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+
+
+
+ };
+
+ /**
+ * Constructs a Plan from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/Plan} obj Optional instance to populate.
+ * @return {module:model/Plan} The populated Plan instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('amount')) {
+ obj['amount'] = ApiClient.convertToType(data['amount'], 'Number');
+ }
+ if (data.hasOwnProperty('currency')) {
+ obj['currency'] = ApiClient.convertToType(data['currency'], 'String');
+ }
+ if (data.hasOwnProperty('interval')) {
+ obj['interval'] = ApiClient.convertToType(data['interval'], 'String');
+ }
+ if (data.hasOwnProperty('name')) {
+ obj['name'] = ApiClient.convertToType(data['name'], 'String');
+ }
+ if (data.hasOwnProperty('stripe_plan_id')) {
+ obj['stripe_plan_id'] = ApiClient.convertToType(data['stripe_plan_id'], 'String');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {Number} amount
+ */
+ exports.prototype['amount'] = undefined;
+ /**
+ * @member {module:model/Plan.CurrencyEnum} currency
+ */
+ exports.prototype['currency'] = undefined;
+ /**
+ * @member {module:model/Plan.IntervalEnum} interval
+ */
+ exports.prototype['interval'] = undefined;
+ /**
+ * @member {String} name
+ */
+ exports.prototype['name'] = undefined;
+ /**
+ * @member {String} stripe_plan_id
+ */
+ exports.prototype['stripe_plan_id'] = undefined;
+
+
+ /**
+ * Allowed values for the currency property.
+ * @enum {String}
+ * @readonly
+ */
+ exports.CurrencyEnum = {
+ /**
+ * value: "jpy"
+ * @const
+ */
+ "jpy": "jpy",
+ /**
+ * value: "usd"
+ * @const
+ */
+ "usd": "usd" };
+
+ /**
+ * Allowed values for the interval property.
+ * @enum {String}
+ * @readonly
+ */
+ exports.IntervalEnum = {
+ /**
+ * value: "month"
+ * @const
+ */
+ "month": "month" };
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/SpSubscription.js b/masteringModule/node_modules/aimastering/src/model/SpSubscription.js
new file mode 100644
index 0000000000000000000000000000000000000000..fae70d7251cebc1291714fd2f9b4101815ff7bb7
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/SpSubscription.js
@@ -0,0 +1,131 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.SpSubscription = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The SpSubscription model module.
+ * @module model/SpSubscription
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new SpSubscription.
+ * @alias module:model/SpSubscription
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+
+
+
+ };
+
+ /**
+ * Constructs a SpSubscription from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/SpSubscription} obj Optional instance to populate.
+ * @return {module:model/SpSubscription} The populated SpSubscription instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('id')) {
+ obj['id'] = ApiClient.convertToType(data['id'], 'Number');
+ }
+ if (data.hasOwnProperty('user_id')) {
+ obj['user_id'] = ApiClient.convertToType(data['user_id'], 'Number');
+ }
+ if (data.hasOwnProperty('status')) {
+ obj['status'] = ApiClient.convertToType(data['status'], 'String');
+ }
+ if (data.hasOwnProperty('created_at')) {
+ obj['created_at'] = ApiClient.convertToType(data['created_at'], 'Date');
+ }
+ if (data.hasOwnProperty('updated_at')) {
+ obj['updated_at'] = ApiClient.convertToType(data['updated_at'], 'Date');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {Number} id
+ */
+ exports.prototype['id'] = undefined;
+ /**
+ * @member {Number} user_id
+ */
+ exports.prototype['user_id'] = undefined;
+ /**
+ * @member {module:model/SpSubscription.StatusEnum} status
+ */
+ exports.prototype['status'] = undefined;
+ /**
+ * @member {Date} created_at
+ */
+ exports.prototype['created_at'] = undefined;
+ /**
+ * @member {Date} updated_at
+ */
+ exports.prototype['updated_at'] = undefined;
+
+
+ /**
+ * Allowed values for the status property.
+ * @enum {String}
+ * @readonly
+ */
+ exports.StatusEnum = {
+ /**
+ * value: "active"
+ * @const
+ */
+ "active": "active",
+ /**
+ * value: "inactive"
+ * @const
+ */
+ "inactive": "inactive" };
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/Subscription.js b/masteringModule/node_modules/aimastering/src/model/Subscription.js
new file mode 100644
index 0000000000000000000000000000000000000000..e189619d1594139f10562c4b76e0ffe06b32d67c
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/Subscription.js
@@ -0,0 +1,194 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.Subscription = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The Subscription model module.
+ * @module model/Subscription
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new Subscription.
+ * @alias module:model/Subscription
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+
+
+
+
+
+
+
+
+
+ };
+
+ /**
+ * Constructs a Subscription from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/Subscription} obj Optional instance to populate.
+ * @return {module:model/Subscription} The populated Subscription instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('id')) {
+ obj['id'] = ApiClient.convertToType(data['id'], 'Number');
+ }
+ if (data.hasOwnProperty('user_id')) {
+ obj['user_id'] = ApiClient.convertToType(data['user_id'], 'Number');
+ }
+ if (data.hasOwnProperty('stripe_subscription_id')) {
+ obj['stripe_subscription_id'] = ApiClient.convertToType(data['stripe_subscription_id'], 'String');
+ }
+ if (data.hasOwnProperty('current_period_start_at')) {
+ obj['current_period_start_at'] = ApiClient.convertToType(data['current_period_start_at'], 'Date');
+ }
+ if (data.hasOwnProperty('current_period_end_at')) {
+ obj['current_period_end_at'] = ApiClient.convertToType(data['current_period_end_at'], 'Date');
+ }
+ if (data.hasOwnProperty('canceled')) {
+ obj['canceled'] = ApiClient.convertToType(data['canceled'], 'Boolean');
+ }
+ if (data.hasOwnProperty('cancel_at_period_end')) {
+ obj['cancel_at_period_end'] = ApiClient.convertToType(data['cancel_at_period_end'], 'Boolean');
+ }
+ if (data.hasOwnProperty('trial_end')) {
+ obj['trial_end'] = ApiClient.convertToType(data['trial_end'], 'Date');
+ }
+ if (data.hasOwnProperty('status')) {
+ obj['status'] = ApiClient.convertToType(data['status'], 'String');
+ }
+ if (data.hasOwnProperty('created_at')) {
+ obj['created_at'] = ApiClient.convertToType(data['created_at'], 'Date');
+ }
+ if (data.hasOwnProperty('updated_at')) {
+ obj['updated_at'] = ApiClient.convertToType(data['updated_at'], 'Date');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {Number} id
+ */
+ exports.prototype['id'] = undefined;
+ /**
+ * @member {Number} user_id
+ */
+ exports.prototype['user_id'] = undefined;
+ /**
+ * @member {String} stripe_subscription_id
+ */
+ exports.prototype['stripe_subscription_id'] = undefined;
+ /**
+ * @member {Date} current_period_start_at
+ */
+ exports.prototype['current_period_start_at'] = undefined;
+ /**
+ * @member {Date} current_period_end_at
+ */
+ exports.prototype['current_period_end_at'] = undefined;
+ /**
+ * @member {Boolean} canceled
+ */
+ exports.prototype['canceled'] = undefined;
+ /**
+ * @member {Boolean} cancel_at_period_end
+ */
+ exports.prototype['cancel_at_period_end'] = undefined;
+ /**
+ * @member {Date} trial_end
+ */
+ exports.prototype['trial_end'] = undefined;
+ /**
+ * @member {module:model/Subscription.StatusEnum} status
+ */
+ exports.prototype['status'] = undefined;
+ /**
+ * @member {Date} created_at
+ */
+ exports.prototype['created_at'] = undefined;
+ /**
+ * @member {Date} updated_at
+ */
+ exports.prototype['updated_at'] = undefined;
+
+
+ /**
+ * Allowed values for the status property.
+ * @enum {String}
+ * @readonly
+ */
+ exports.StatusEnum = {
+ /**
+ * value: "trialing"
+ * @const
+ */
+ "trialing": "trialing",
+ /**
+ * value: "active"
+ * @const
+ */
+ "active": "active",
+ /**
+ * value: "past_due"
+ * @const
+ */
+ "past_due": "past_due",
+ /**
+ * value: "unpaid"
+ * @const
+ */
+ "unpaid": "unpaid",
+ /**
+ * value: "canceled"
+ * @const
+ */
+ "canceled": "canceled" };
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/User.js b/masteringModule/node_modules/aimastering/src/model/User.js
new file mode 100644
index 0000000000000000000000000000000000000000..1a4ad8334b7f096997236eae77d22c7823e6b08c
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/User.js
@@ -0,0 +1,181 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/UserStatistics'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'), require('./UserStatistics'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.User = factory(root.Aimastering.ApiClient, root.Aimastering.UserStatistics);
+ }
+}(this, function(ApiClient, UserStatistics) {
+ 'use strict';
+
+
+
+
+ /**
+ * The User model module.
+ * @module model/User
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new User.
+ * @alias module:model/User
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+
+
+
+
+
+
+
+
+ };
+
+ /**
+ * Constructs a User from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/User} obj Optional instance to populate.
+ * @return {module:model/User} The populated User instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('id')) {
+ obj['id'] = ApiClient.convertToType(data['id'], 'Number');
+ }
+ if (data.hasOwnProperty('affiliate_enabled')) {
+ obj['affiliate_enabled'] = ApiClient.convertToType(data['affiliate_enabled'], 'Boolean');
+ }
+ if (data.hasOwnProperty('agreed_terms_of_service')) {
+ obj['agreed_terms_of_service'] = ApiClient.convertToType(data['agreed_terms_of_service'], 'Boolean');
+ }
+ if (data.hasOwnProperty('auth_id')) {
+ obj['auth_id'] = ApiClient.convertToType(data['auth_id'], 'String');
+ }
+ if (data.hasOwnProperty('auth_provider')) {
+ obj['auth_provider'] = ApiClient.convertToType(data['auth_provider'], 'String');
+ }
+ if (data.hasOwnProperty('email')) {
+ obj['email'] = ApiClient.convertToType(data['email'], 'String');
+ }
+ if (data.hasOwnProperty('registration_notified')) {
+ obj['registration_notified'] = ApiClient.convertToType(data['registration_notified'], 'Boolean');
+ }
+ if (data.hasOwnProperty('statistics')) {
+ obj['statistics'] = UserStatistics.constructFromObject(data['statistics']);
+ }
+ if (data.hasOwnProperty('created_at')) {
+ obj['created_at'] = ApiClient.convertToType(data['created_at'], 'Date');
+ }
+ if (data.hasOwnProperty('updated_at')) {
+ obj['updated_at'] = ApiClient.convertToType(data['updated_at'], 'Date');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {Number} id
+ */
+ exports.prototype['id'] = undefined;
+ /**
+ * @member {Boolean} affiliate_enabled
+ */
+ exports.prototype['affiliate_enabled'] = undefined;
+ /**
+ * @member {Boolean} agreed_terms_of_service
+ */
+ exports.prototype['agreed_terms_of_service'] = undefined;
+ /**
+ * @member {String} auth_id
+ */
+ exports.prototype['auth_id'] = undefined;
+ /**
+ * @member {module:model/User.AuthProviderEnum} auth_provider
+ */
+ exports.prototype['auth_provider'] = undefined;
+ /**
+ * @member {String} email
+ */
+ exports.prototype['email'] = undefined;
+ /**
+ * @member {Boolean} registration_notified
+ */
+ exports.prototype['registration_notified'] = undefined;
+ /**
+ * @member {module:model/UserStatistics} statistics
+ */
+ exports.prototype['statistics'] = undefined;
+ /**
+ * @member {Date} created_at
+ */
+ exports.prototype['created_at'] = undefined;
+ /**
+ * @member {Date} updated_at
+ */
+ exports.prototype['updated_at'] = undefined;
+
+
+ /**
+ * Allowed values for the auth_provider property.
+ * @enum {String}
+ * @readonly
+ */
+ exports.AuthProviderEnum = {
+ /**
+ * value: "auth0"
+ * @const
+ */
+ "auth0": "auth0",
+ /**
+ * value: "github"
+ * @const
+ */
+ "github": "github",
+ /**
+ * value: "google"
+ * @const
+ */
+ "google": "google",
+ /**
+ * value: "twitter"
+ * @const
+ */
+ "twitter": "twitter" };
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/UserStatistics.js b/masteringModule/node_modules/aimastering/src/model/UserStatistics.js
new file mode 100644
index 0000000000000000000000000000000000000000..bdca9e5c7ebefb45484aec9b72869809944765e0
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/UserStatistics.js
@@ -0,0 +1,122 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.UserStatistics = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The UserStatistics model module.
+ * @module model/UserStatistics
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new UserStatistics.
+ * @alias module:model/UserStatistics
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+
+
+
+
+ };
+
+ /**
+ * Constructs a UserStatistics from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/UserStatistics} obj Optional instance to populate.
+ * @return {module:model/UserStatistics} The populated UserStatistics instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('registration_invitation_count')) {
+ obj['registration_invitation_count'] = ApiClient.convertToType(data['registration_invitation_count'], 'Number');
+ }
+ if (data.hasOwnProperty('subscription_invitation_count')) {
+ obj['subscription_invitation_count'] = ApiClient.convertToType(data['subscription_invitation_count'], 'Number');
+ }
+ if (data.hasOwnProperty('mastering_count')) {
+ obj['mastering_count'] = ApiClient.convertToType(data['mastering_count'], 'Number');
+ }
+ if (data.hasOwnProperty('monthly_registration_invitation_count')) {
+ obj['monthly_registration_invitation_count'] = ApiClient.convertToType(data['monthly_registration_invitation_count'], 'Number');
+ }
+ if (data.hasOwnProperty('monthly_subscription_invitation_count')) {
+ obj['monthly_subscription_invitation_count'] = ApiClient.convertToType(data['monthly_subscription_invitation_count'], 'Number');
+ }
+ if (data.hasOwnProperty('monthly_mastering_count')) {
+ obj['monthly_mastering_count'] = ApiClient.convertToType(data['monthly_mastering_count'], 'Number');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {Number} registration_invitation_count
+ */
+ exports.prototype['registration_invitation_count'] = undefined;
+ /**
+ * @member {Number} subscription_invitation_count
+ */
+ exports.prototype['subscription_invitation_count'] = undefined;
+ /**
+ * @member {Number} mastering_count
+ */
+ exports.prototype['mastering_count'] = undefined;
+ /**
+ * @member {Number} monthly_registration_invitation_count
+ */
+ exports.prototype['monthly_registration_invitation_count'] = undefined;
+ /**
+ * @member {Number} monthly_subscription_invitation_count
+ */
+ exports.prototype['monthly_subscription_invitation_count'] = undefined;
+ /**
+ * @member {Number} monthly_mastering_count
+ */
+ exports.prototype['monthly_mastering_count'] = undefined;
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/Video.js b/masteringModule/node_modules/aimastering/src/model/Video.js
new file mode 100644
index 0000000000000000000000000000000000000000..051e4e6eec22d37580c60afa2a2b5db5f61e1286
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/Video.js
@@ -0,0 +1,122 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.Video = factory(root.Aimastering.ApiClient);
+ }
+}(this, function(ApiClient) {
+ 'use strict';
+
+
+
+
+ /**
+ * The Video model module.
+ * @module model/Video
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new Video.
+ * @alias module:model/Video
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+
+
+
+
+ };
+
+ /**
+ * Constructs a Video from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/Video} obj Optional instance to populate.
+ * @return {module:model/Video} The populated Video instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('id')) {
+ obj['id'] = ApiClient.convertToType(data['id'], 'Number');
+ }
+ if (data.hasOwnProperty('file_resource_id')) {
+ obj['file_resource_id'] = ApiClient.convertToType(data['file_resource_id'], 'Number');
+ }
+ if (data.hasOwnProperty('user_id')) {
+ obj['user_id'] = ApiClient.convertToType(data['user_id'], 'Number');
+ }
+ if (data.hasOwnProperty('name')) {
+ obj['name'] = ApiClient.convertToType(data['name'], 'String');
+ }
+ if (data.hasOwnProperty('created_at')) {
+ obj['created_at'] = ApiClient.convertToType(data['created_at'], 'Date');
+ }
+ if (data.hasOwnProperty('updated_at')) {
+ obj['updated_at'] = ApiClient.convertToType(data['updated_at'], 'Date');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {Number} id
+ */
+ exports.prototype['id'] = undefined;
+ /**
+ * @member {Number} file_resource_id
+ */
+ exports.prototype['file_resource_id'] = undefined;
+ /**
+ * @member {Number} user_id
+ */
+ exports.prototype['user_id'] = undefined;
+ /**
+ * @member {String} name
+ */
+ exports.prototype['name'] = undefined;
+ /**
+ * @member {Date} created_at
+ */
+ exports.prototype['created_at'] = undefined;
+ /**
+ * @member {Date} updated_at
+ */
+ exports.prototype['updated_at'] = undefined;
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/src/model/VideoDownloadToken.js b/masteringModule/node_modules/aimastering/src/model/VideoDownloadToken.js
new file mode 100644
index 0000000000000000000000000000000000000000..d1e72ae117a5d3bc315c047db4bbb0b2b9d8b655
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/src/model/VideoDownloadToken.js
@@ -0,0 +1,90 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['ApiClient', 'model/JWT'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ module.exports = factory(require('../ApiClient'), require('./JWT'));
+ } else {
+ // Browser globals (root is window)
+ if (!root.Aimastering) {
+ root.Aimastering = {};
+ }
+ root.Aimastering.VideoDownloadToken = factory(root.Aimastering.ApiClient, root.Aimastering.JWT);
+ }
+}(this, function(ApiClient, JWT) {
+ 'use strict';
+
+
+
+
+ /**
+ * The VideoDownloadToken model module.
+ * @module model/VideoDownloadToken
+ * @version 1.1.0
+ */
+
+ /**
+ * Constructs a new VideoDownloadToken.
+ * @alias module:model/VideoDownloadToken
+ * @class
+ */
+ var exports = function() {
+ var _this = this;
+
+
+
+ };
+
+ /**
+ * Constructs a VideoDownloadToken from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data to obj if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/VideoDownloadToken} obj Optional instance to populate.
+ * @return {module:model/VideoDownloadToken} The populated VideoDownloadToken instance.
+ */
+ exports.constructFromObject = function(data, obj) {
+ if (data) {
+ obj = obj || new exports();
+
+ if (data.hasOwnProperty('download_token')) {
+ obj['download_token'] = JWT.constructFromObject(data['download_token']);
+ }
+ if (data.hasOwnProperty('download_url')) {
+ obj['download_url'] = ApiClient.convertToType(data['download_url'], 'String');
+ }
+ }
+ return obj;
+ }
+
+ /**
+ * @member {module:model/JWT} download_token
+ */
+ exports.prototype['download_token'] = undefined;
+ /**
+ * @member {String} download_url
+ */
+ exports.prototype['download_url'] = undefined;
+
+
+
+ return exports;
+}));
+
+
diff --git a/masteringModule/node_modules/aimastering/test/api/AccessTokenApi.spec.js b/masteringModule/node_modules/aimastering/test/api/AccessTokenApi.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..c9f734563b609e17e1b1ba0bd48b0c5e48a5b3e6
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/api/AccessTokenApi.spec.js
@@ -0,0 +1,66 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.AccessTokenApi();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('AccessTokenApi', function() {
+ describe('createAccessToken', function() {
+ it('should call createAccessToken successfully', function(done) {
+ //uncomment below and update the code to test createAccessToken
+ //instance.createAccessToken(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/api/AmazonSubscriptionApi.spec.js b/masteringModule/node_modules/aimastering/test/api/AmazonSubscriptionApi.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..3e576c47569bf304aab165b8e89cad30a009b239
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/api/AmazonSubscriptionApi.spec.js
@@ -0,0 +1,66 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.AmazonSubscriptionApi();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('AmazonSubscriptionApi', function() {
+ describe('listAmazonSubscriptions', function() {
+ it('should call listAmazonSubscriptions successfully', function(done) {
+ //uncomment below and update the code to test listAmazonSubscriptions
+ //instance.listAmazonSubscriptions(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/api/AudioApi.spec.js b/masteringModule/node_modules/aimastering/test/api/AudioApi.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..d712861c5bd275b499cbfccd1b3fca66607e5215
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/api/AudioApi.spec.js
@@ -0,0 +1,126 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.AudioApi();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('AudioApi', function() {
+ describe('createAudio', function() {
+ it('should call createAudio successfully', function(done) {
+ //uncomment below and update the code to test createAudio
+ //instance.createAudio(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('downloadAudio', function() {
+ it('should call downloadAudio successfully', function(done) {
+ //uncomment below and update the code to test downloadAudio
+ //instance.downloadAudio(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('downloadAudioByToken', function() {
+ it('should call downloadAudioByToken successfully', function(done) {
+ //uncomment below and update the code to test downloadAudioByToken
+ //instance.downloadAudioByToken(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('getAudio', function() {
+ it('should call getAudio successfully', function(done) {
+ //uncomment below and update the code to test getAudio
+ //instance.getAudio(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('getAudioAnalysis', function() {
+ it('should call getAudioAnalysis successfully', function(done) {
+ //uncomment below and update the code to test getAudioAnalysis
+ //instance.getAudioAnalysis(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('getAudioDownloadToken', function() {
+ it('should call getAudioDownloadToken successfully', function(done) {
+ //uncomment below and update the code to test getAudioDownloadToken
+ //instance.getAudioDownloadToken(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('listAudios', function() {
+ it('should call listAudios successfully', function(done) {
+ //uncomment below and update the code to test listAudios
+ //instance.listAudios(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/api/ConfigApi.spec.js b/masteringModule/node_modules/aimastering/test/api/ConfigApi.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..99937aa18ec7c0855ddf101bb266ff7af1eb8325
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/api/ConfigApi.spec.js
@@ -0,0 +1,66 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.ConfigApi();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('ConfigApi', function() {
+ describe('getConfig', function() {
+ it('should call getConfig successfully', function(done) {
+ //uncomment below and update the code to test getConfig
+ //instance.getConfig(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/api/ExternalSearchApi.spec.js b/masteringModule/node_modules/aimastering/test/api/ExternalSearchApi.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..51d06b5c4a12ac0636db2416a5d6af58a6ad9354
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/api/ExternalSearchApi.spec.js
@@ -0,0 +1,66 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.ExternalSearchApi();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('ExternalSearchApi', function() {
+ describe('searchExternal', function() {
+ it('should call searchExternal successfully', function(done) {
+ //uncomment below and update the code to test searchExternal
+ //instance.searchExternal(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/api/LibraryAudioApi.spec.js b/masteringModule/node_modules/aimastering/test/api/LibraryAudioApi.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..d50b4885388e02771929602314df573ddbd95e52
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/api/LibraryAudioApi.spec.js
@@ -0,0 +1,126 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.LibraryAudioApi();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('LibraryAudioApi', function() {
+ describe('createLibraryAudio', function() {
+ it('should call createLibraryAudio successfully', function(done) {
+ //uncomment below and update the code to test createLibraryAudio
+ //instance.createLibraryAudio(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('createLibraryAudioLike', function() {
+ it('should call createLibraryAudioLike successfully', function(done) {
+ //uncomment below and update the code to test createLibraryAudioLike
+ //instance.createLibraryAudioLike(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('deleteLibraryAudio', function() {
+ it('should call deleteLibraryAudio successfully', function(done) {
+ //uncomment below and update the code to test deleteLibraryAudio
+ //instance.deleteLibraryAudio(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('getLibraryAudio', function() {
+ it('should call getLibraryAudio successfully', function(done) {
+ //uncomment below and update the code to test getLibraryAudio
+ //instance.getLibraryAudio(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('getLibraryAudioAnalysis', function() {
+ it('should call getLibraryAudioAnalysis successfully', function(done) {
+ //uncomment below and update the code to test getLibraryAudioAnalysis
+ //instance.getLibraryAudioAnalysis(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('listLibraryAudios', function() {
+ it('should call listLibraryAudios successfully', function(done) {
+ //uncomment below and update the code to test listLibraryAudios
+ //instance.listLibraryAudios(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('updateLibraryAudio', function() {
+ it('should call updateLibraryAudio successfully', function(done) {
+ //uncomment below and update the code to test updateLibraryAudio
+ //instance.updateLibraryAudio(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/api/MasteringApi.spec.js b/masteringModule/node_modules/aimastering/test/api/MasteringApi.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..3b63f3e221b05ba763db9dee1fa82df8a006d538
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/api/MasteringApi.spec.js
@@ -0,0 +1,156 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.MasteringApi();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('MasteringApi', function() {
+ describe('cancelMastering', function() {
+ it('should call cancelMastering successfully', function(done) {
+ //uncomment below and update the code to test cancelMastering
+ //instance.cancelMastering(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('createMastering', function() {
+ it('should call createMastering successfully', function(done) {
+ //uncomment below and update the code to test createMastering
+ //instance.createMastering(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('deleteMastering', function() {
+ it('should call deleteMastering successfully', function(done) {
+ //uncomment below and update the code to test deleteMastering
+ //instance.deleteMastering(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('freeUnlockMastering', function() {
+ it('should call freeUnlockMastering successfully', function(done) {
+ //uncomment below and update the code to test freeUnlockMastering
+ //instance.freeUnlockMastering(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('getMastering', function() {
+ it('should call getMastering successfully', function(done) {
+ //uncomment below and update the code to test getMastering
+ //instance.getMastering(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('getMasteringUnlockProduct', function() {
+ it('should call getMasteringUnlockProduct successfully', function(done) {
+ //uncomment below and update the code to test getMasteringUnlockProduct
+ //instance.getMasteringUnlockProduct(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('listMasterings', function() {
+ it('should call listMasterings successfully', function(done) {
+ //uncomment below and update the code to test listMasterings
+ //instance.listMasterings(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('publishMastering', function() {
+ it('should call publishMastering successfully', function(done) {
+ //uncomment below and update the code to test publishMastering
+ //instance.publishMastering(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('reviewMastering', function() {
+ it('should call reviewMastering successfully', function(done) {
+ //uncomment below and update the code to test reviewMastering
+ //instance.reviewMastering(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('updateMastering', function() {
+ it('should call updateMastering successfully', function(done) {
+ //uncomment below and update the code to test updateMastering
+ //instance.updateMastering(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/api/PaymentApi.spec.js b/masteringModule/node_modules/aimastering/test/api/PaymentApi.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..2754700f3605b4b4ea2233cf79685350840a4e65
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/api/PaymentApi.spec.js
@@ -0,0 +1,96 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.PaymentApi();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('PaymentApi', function() {
+ describe('createPayment', function() {
+ it('should call createPayment successfully', function(done) {
+ //uncomment below and update the code to test createPayment
+ //instance.createPayment(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('executePayment', function() {
+ it('should call executePayment successfully', function(done) {
+ //uncomment below and update the code to test executePayment
+ //instance.executePayment(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('getPayment', function() {
+ it('should call getPayment successfully', function(done) {
+ //uncomment below and update the code to test getPayment
+ //instance.getPayment(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('listPayments', function() {
+ it('should call listPayments successfully', function(done) {
+ //uncomment below and update the code to test listPayments
+ //instance.listPayments(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/api/PaymentCustomerApi.spec.js b/masteringModule/node_modules/aimastering/test/api/PaymentCustomerApi.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..c44b15d08adbbab9624d05ee7afedc8bad5c7a54
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/api/PaymentCustomerApi.spec.js
@@ -0,0 +1,66 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.PaymentCustomerApi();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('PaymentCustomerApi', function() {
+ describe('getDefaultPaymentCustomer', function() {
+ it('should call getDefaultPaymentCustomer successfully', function(done) {
+ //uncomment below and update the code to test getDefaultPaymentCustomer
+ //instance.getDefaultPaymentCustomer(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/api/PlanApi.spec.js b/masteringModule/node_modules/aimastering/test/api/PlanApi.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..ef5c2ab4d9d24429294c8afb8f65c29f9adcbf89
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/api/PlanApi.spec.js
@@ -0,0 +1,66 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.PlanApi();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('PlanApi', function() {
+ describe('listPlans', function() {
+ it('should call listPlans successfully', function(done) {
+ //uncomment below and update the code to test listPlans
+ //instance.listPlans(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/api/SpSubscriptionApi.spec.js b/masteringModule/node_modules/aimastering/test/api/SpSubscriptionApi.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..36fa4c1ad62db9284ae3972afddc02297b39204c
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/api/SpSubscriptionApi.spec.js
@@ -0,0 +1,76 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.SpSubscriptionApi();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('SpSubscriptionApi', function() {
+ describe('createSpSubscription', function() {
+ it('should call createSpSubscription successfully', function(done) {
+ //uncomment below and update the code to test createSpSubscription
+ //instance.createSpSubscription(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('listSpSubscriptions', function() {
+ it('should call listSpSubscriptions successfully', function(done) {
+ //uncomment below and update the code to test listSpSubscriptions
+ //instance.listSpSubscriptions(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/api/StatisticsApi.spec.js b/masteringModule/node_modules/aimastering/test/api/StatisticsApi.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..39398a79e797364226e4ec79e43437df14716f83
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/api/StatisticsApi.spec.js
@@ -0,0 +1,86 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.StatisticsApi();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('StatisticsApi', function() {
+ describe('getGroupBuyStatistics', function() {
+ it('should call getGroupBuyStatistics successfully', function(done) {
+ //uncomment below and update the code to test getGroupBuyStatistics
+ //instance.getGroupBuyStatistics(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('listAnonymizedMasterings', function() {
+ it('should call listAnonymizedMasterings successfully', function(done) {
+ //uncomment below and update the code to test listAnonymizedMasterings
+ //instance.listAnonymizedMasterings(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('listKpis', function() {
+ it('should call listKpis successfully', function(done) {
+ //uncomment below and update the code to test listKpis
+ //instance.listKpis(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/api/SubscriptionApi.spec.js b/masteringModule/node_modules/aimastering/test/api/SubscriptionApi.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..3d253edc9d67e069ca791e2e31b7147fb1c30898
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/api/SubscriptionApi.spec.js
@@ -0,0 +1,106 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.SubscriptionApi();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('SubscriptionApi', function() {
+ describe('cancelSubscription', function() {
+ it('should call cancelSubscription successfully', function(done) {
+ //uncomment below and update the code to test cancelSubscription
+ //instance.cancelSubscription(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('cancelSubscriptionCancellation', function() {
+ it('should call cancelSubscriptionCancellation successfully', function(done) {
+ //uncomment below and update the code to test cancelSubscriptionCancellation
+ //instance.cancelSubscriptionCancellation(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('createSubscription', function() {
+ it('should call createSubscription successfully', function(done) {
+ //uncomment below and update the code to test createSubscription
+ //instance.createSubscription(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('getSubscription', function() {
+ it('should call getSubscription successfully', function(done) {
+ //uncomment below and update the code to test getSubscription
+ //instance.getSubscription(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('listSubscriptions', function() {
+ it('should call listSubscriptions successfully', function(done) {
+ //uncomment below and update the code to test listSubscriptions
+ //instance.listSubscriptions(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/api/UserApi.spec.js b/masteringModule/node_modules/aimastering/test/api/UserApi.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..7f3517a4b1b9230e061930424d8e0980a8df8a31
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/api/UserApi.spec.js
@@ -0,0 +1,96 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.UserApi();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('UserApi', function() {
+ describe('getSelf', function() {
+ it('should call getSelf successfully', function(done) {
+ //uncomment below and update the code to test getSelf
+ //instance.getSelf(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('notifyRegistration', function() {
+ it('should call notifyRegistration successfully', function(done) {
+ //uncomment below and update the code to test notifyRegistration
+ //instance.notifyRegistration(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('sendInvitation', function() {
+ it('should call sendInvitation successfully', function(done) {
+ //uncomment below and update the code to test sendInvitation
+ //instance.sendInvitation(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('updateSelf', function() {
+ it('should call updateSelf successfully', function(done) {
+ //uncomment below and update the code to test updateSelf
+ //instance.updateSelf(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/api/VideoApi.spec.js b/masteringModule/node_modules/aimastering/test/api/VideoApi.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..1cd22a963b77d819089394b320d55ae23f9d0386
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/api/VideoApi.spec.js
@@ -0,0 +1,106 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.VideoApi();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('VideoApi', function() {
+ describe('downloadVideo', function() {
+ it('should call downloadVideo successfully', function(done) {
+ //uncomment below and update the code to test downloadVideo
+ //instance.downloadVideo(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('downloadVideoByToken', function() {
+ it('should call downloadVideoByToken successfully', function(done) {
+ //uncomment below and update the code to test downloadVideoByToken
+ //instance.downloadVideoByToken(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('getVideo', function() {
+ it('should call getVideo successfully', function(done) {
+ //uncomment below and update the code to test getVideo
+ //instance.getVideo(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('getVideoDownloadToken', function() {
+ it('should call getVideoDownloadToken successfully', function(done) {
+ //uncomment below and update the code to test getVideoDownloadToken
+ //instance.getVideoDownloadToken(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ describe('listVideos', function() {
+ it('should call listVideos successfully', function(done) {
+ //uncomment below and update the code to test listVideos
+ //instance.listVideos(function(error) {
+ // if (error) throw error;
+ //expect().to.be();
+ //});
+ done();
+ });
+ });
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/AccessToken.spec.js b/masteringModule/node_modules/aimastering/test/model/AccessToken.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..6f012a7d122e341160602da8eca93869db7c1fe1
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/AccessToken.spec.js
@@ -0,0 +1,68 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.AccessToken();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('AccessToken', function() {
+ it('should create an instance of AccessToken', function() {
+ // uncomment below and update the code to test AccessToken
+ //var instane = new Aimastering.AccessToken();
+ //expect(instance).to.be.a(Aimastering.AccessToken);
+ });
+
+ it('should have the property accessToken (base name: "access_token")', function() {
+ // uncomment below and update the code to test the property accessToken
+ //var instane = new Aimastering.AccessToken();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/AmazonSubscription.spec.js b/masteringModule/node_modules/aimastering/test/model/AmazonSubscription.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..5229c366f83e8ec2e74ba7a15eded47cdf391c57
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/AmazonSubscription.spec.js
@@ -0,0 +1,92 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.AmazonSubscription();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('AmazonSubscription', function() {
+ it('should create an instance of AmazonSubscription', function() {
+ // uncomment below and update the code to test AmazonSubscription
+ //var instane = new Aimastering.AmazonSubscription();
+ //expect(instance).to.be.a(Aimastering.AmazonSubscription);
+ });
+
+ it('should have the property id (base name: "id")', function() {
+ // uncomment below and update the code to test the property id
+ //var instane = new Aimastering.AmazonSubscription();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property userId (base name: "user_id")', function() {
+ // uncomment below and update the code to test the property userId
+ //var instane = new Aimastering.AmazonSubscription();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property status (base name: "status")', function() {
+ // uncomment below and update the code to test the property status
+ //var instane = new Aimastering.AmazonSubscription();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property createdAt (base name: "created_at")', function() {
+ // uncomment below and update the code to test the property createdAt
+ //var instane = new Aimastering.AmazonSubscription();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property updatedAt (base name: "updated_at")', function() {
+ // uncomment below and update the code to test the property updatedAt
+ //var instane = new Aimastering.AmazonSubscription();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/AnonymizedMastering.spec.js b/masteringModule/node_modules/aimastering/test/model/AnonymizedMastering.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..f93a67b4d346624ae58b934294c5872585ee5481
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/AnonymizedMastering.spec.js
@@ -0,0 +1,194 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.AnonymizedMastering();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('AnonymizedMastering', function() {
+ it('should create an instance of AnonymizedMastering', function() {
+ // uncomment below and update the code to test AnonymizedMastering
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be.a(Aimastering.AnonymizedMastering);
+ });
+
+ it('should have the property userId (base name: "user_id")', function() {
+ // uncomment below and update the code to test the property userId
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property userAuthProvider (base name: "user_auth_provider")', function() {
+ // uncomment below and update the code to test the property userAuthProvider
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property mode (base name: "mode")', function() {
+ // uncomment below and update the code to test the property mode
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property status (base name: "status")', function() {
+ // uncomment below and update the code to test the property status
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property failureReason (base name: "failure_reason")', function() {
+ // uncomment below and update the code to test the property failureReason
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property targetLoudness (base name: "target_loudness")', function() {
+ // uncomment below and update the code to test the property targetLoudness
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property outputFormat (base name: "output_format")', function() {
+ // uncomment below and update the code to test the property outputFormat
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property preset (base name: "preset")', function() {
+ // uncomment below and update the code to test the property preset
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property bitDepth (base name: "bit_depth")', function() {
+ // uncomment below and update the code to test the property bitDepth
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property sampleRate (base name: "sample_rate")', function() {
+ // uncomment below and update the code to test the property sampleRate
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property reviewScore (base name: "review_score")', function() {
+ // uncomment below and update the code to test the property reviewScore
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property masteringMatchingLevel (base name: "mastering_matching_level")', function() {
+ // uncomment below and update the code to test the property masteringMatchingLevel
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property mastering (base name: "mastering")', function() {
+ // uncomment below and update the code to test the property mastering
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property paid (base name: "paid")', function() {
+ // uncomment below and update the code to test the property paid
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property paymentService (base name: "payment_service")', function() {
+ // uncomment below and update the code to test the property paymentService
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property retryCount (base name: "retry_count")', function() {
+ // uncomment below and update the code to test the property retryCount
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property masteringReverb (base name: "mastering_reverb")', function() {
+ // uncomment below and update the code to test the property masteringReverb
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property masteringReverbGain (base name: "mastering_reverb_gain")', function() {
+ // uncomment below and update the code to test the property masteringReverbGain
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property lowCutFreq (base name: "low_cut_freq")', function() {
+ // uncomment below and update the code to test the property lowCutFreq
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property highCutFreq (base name: "high_cut_freq")', function() {
+ // uncomment below and update the code to test the property highCutFreq
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property createdAt (base name: "created_at")', function() {
+ // uncomment below and update the code to test the property createdAt
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property updatedAt (base name: "updated_at")', function() {
+ // uncomment below and update the code to test the property updatedAt
+ //var instane = new Aimastering.AnonymizedMastering();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/Audio.spec.js b/masteringModule/node_modules/aimastering/test/model/Audio.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..8b5ecde1978766b8021276029b51a3b243820fa1
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/Audio.spec.js
@@ -0,0 +1,218 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.Audio();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('Audio', function() {
+ it('should create an instance of Audio', function() {
+ // uncomment below and update the code to test Audio
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be.a(Aimastering.Audio);
+ });
+
+ it('should have the property id (base name: "id")', function() {
+ // uncomment below and update the code to test the property id
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property fileResourceId (base name: "file_resource_id")', function() {
+ // uncomment below and update the code to test the property fileResourceId
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property userId (base name: "user_id")', function() {
+ // uncomment below and update the code to test the property userId
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property name (base name: "name")', function() {
+ // uncomment below and update the code to test the property name
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property createdByUser (base name: "created_by_user")', function() {
+ // uncomment below and update the code to test the property createdByUser
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property status (base name: "status")', function() {
+ // uncomment below and update the code to test the property status
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property failureReason (base name: "failure_reason")', function() {
+ // uncomment below and update the code to test the property failureReason
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property probeJson (base name: "probe_json")', function() {
+ // uncomment below and update the code to test the property probeJson
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property rms (base name: "rms")', function() {
+ // uncomment below and update the code to test the property rms
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property peak (base name: "peak")', function() {
+ // uncomment below and update the code to test the property peak
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property truePeak (base name: "true_peak")', function() {
+ // uncomment below and update the code to test the property truePeak
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property lowpassTruePeak15khz (base name: "lowpass_true_peak_15khz")', function() {
+ // uncomment below and update the code to test the property lowpassTruePeak15khz
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property loudness (base name: "loudness")', function() {
+ // uncomment below and update the code to test the property loudness
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property dynamics (base name: "dynamics")', function() {
+ // uncomment below and update the code to test the property dynamics
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property sharpness (base name: "sharpness")', function() {
+ // uncomment below and update the code to test the property sharpness
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property space (base name: "space")', function() {
+ // uncomment below and update the code to test the property space
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property loudnessRange (base name: "loudness_range")', function() {
+ // uncomment below and update the code to test the property loudnessRange
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property drr (base name: "drr")', function() {
+ // uncomment below and update the code to test the property drr
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property soundQuality (base name: "sound_quality")', function() {
+ // uncomment below and update the code to test the property soundQuality
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property soundQuality2 (base name: "sound_quality2")', function() {
+ // uncomment below and update the code to test the property soundQuality2
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property dissonance (base name: "dissonance")', function() {
+ // uncomment below and update the code to test the property dissonance
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property frames (base name: "frames")', function() {
+ // uncomment below and update the code to test the property frames
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property sampleRate (base name: "sample_rate")', function() {
+ // uncomment below and update the code to test the property sampleRate
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property channels (base name: "channels")', function() {
+ // uncomment below and update the code to test the property channels
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property createdAt (base name: "created_at")', function() {
+ // uncomment below and update the code to test the property createdAt
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property updatedAt (base name: "updated_at")', function() {
+ // uncomment below and update the code to test the property updatedAt
+ //var instane = new Aimastering.Audio();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/AudioAnalysis.spec.js b/masteringModule/node_modules/aimastering/test/model/AudioAnalysis.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..40a3f7f59cdc54a59590eee24f9e36c79fd01520
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/AudioAnalysis.spec.js
@@ -0,0 +1,80 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.AudioAnalysis();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('AudioAnalysis', function() {
+ it('should create an instance of AudioAnalysis', function() {
+ // uncomment below and update the code to test AudioAnalysis
+ //var instane = new Aimastering.AudioAnalysis();
+ //expect(instance).to.be.a(Aimastering.AudioAnalysis);
+ });
+
+ it('should have the property id (base name: "id")', function() {
+ // uncomment below and update the code to test the property id
+ //var instane = new Aimastering.AudioAnalysis();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property audioId (base name: "audio_id")', function() {
+ // uncomment below and update the code to test the property audioId
+ //var instane = new Aimastering.AudioAnalysis();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property analysis (base name: "analysis")', function() {
+ // uncomment below and update the code to test the property analysis
+ //var instane = new Aimastering.AudioAnalysis();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/AudioDownloadToken.spec.js b/masteringModule/node_modules/aimastering/test/model/AudioDownloadToken.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..38a37d005849cb60b7f29483f94e40235e827be7
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/AudioDownloadToken.spec.js
@@ -0,0 +1,74 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.AudioDownloadToken();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('AudioDownloadToken', function() {
+ it('should create an instance of AudioDownloadToken', function() {
+ // uncomment below and update the code to test AudioDownloadToken
+ //var instane = new Aimastering.AudioDownloadToken();
+ //expect(instance).to.be.a(Aimastering.AudioDownloadToken);
+ });
+
+ it('should have the property downloadToken (base name: "download_token")', function() {
+ // uncomment below and update the code to test the property downloadToken
+ //var instane = new Aimastering.AudioDownloadToken();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property downloadUrl (base name: "download_url")', function() {
+ // uncomment below and update the code to test the property downloadUrl
+ //var instane = new Aimastering.AudioDownloadToken();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/Config.spec.js b/masteringModule/node_modules/aimastering/test/model/Config.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..e871fc041a998c3dd393d78ed7ea37c4880ebadc
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/Config.spec.js
@@ -0,0 +1,86 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.Config();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('Config', function() {
+ it('should create an instance of Config', function() {
+ // uncomment below and update the code to test Config
+ //var instane = new Aimastering.Config();
+ //expect(instance).to.be.a(Aimastering.Config);
+ });
+
+ it('should have the property auth0 (base name: "auth0")', function() {
+ // uncomment below and update the code to test the property auth0
+ //var instane = new Aimastering.Config();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property paypal (base name: "paypal")', function() {
+ // uncomment below and update the code to test the property paypal
+ //var instane = new Aimastering.Config();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property stripe (base name: "stripe")', function() {
+ // uncomment below and update the code to test the property stripe
+ //var instane = new Aimastering.Config();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property version (base name: "version")', function() {
+ // uncomment below and update the code to test the property version
+ //var instane = new Aimastering.Config();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/ConfigAuth0.spec.js b/masteringModule/node_modules/aimastering/test/model/ConfigAuth0.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..277f2df6cfd6a184ec79f3aa484b7d5e0a5afb88
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/ConfigAuth0.spec.js
@@ -0,0 +1,80 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.ConfigAuth0();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('ConfigAuth0', function() {
+ it('should create an instance of ConfigAuth0', function() {
+ // uncomment below and update the code to test ConfigAuth0
+ //var instane = new Aimastering.ConfigAuth0();
+ //expect(instance).to.be.a(Aimastering.ConfigAuth0);
+ });
+
+ it('should have the property audience (base name: "audience")', function() {
+ // uncomment below and update the code to test the property audience
+ //var instane = new Aimastering.ConfigAuth0();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property domain (base name: "domain")', function() {
+ // uncomment below and update the code to test the property domain
+ //var instane = new Aimastering.ConfigAuth0();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property clientId (base name: "client_id")', function() {
+ // uncomment below and update the code to test the property clientId
+ //var instane = new Aimastering.ConfigAuth0();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/ConfigPaypal.spec.js b/masteringModule/node_modules/aimastering/test/model/ConfigPaypal.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..2f9475d2040eeebe03376d0aec55e53eaaf5daed
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/ConfigPaypal.spec.js
@@ -0,0 +1,74 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.ConfigPaypal();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('ConfigPaypal', function() {
+ it('should create an instance of ConfigPaypal', function() {
+ // uncomment below and update the code to test ConfigPaypal
+ //var instane = new Aimastering.ConfigPaypal();
+ //expect(instance).to.be.a(Aimastering.ConfigPaypal);
+ });
+
+ it('should have the property mode (base name: "mode")', function() {
+ // uncomment below and update the code to test the property mode
+ //var instane = new Aimastering.ConfigPaypal();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property clientId (base name: "client_id")', function() {
+ // uncomment below and update the code to test the property clientId
+ //var instane = new Aimastering.ConfigPaypal();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/ConfigStripe.spec.js b/masteringModule/node_modules/aimastering/test/model/ConfigStripe.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..6c3d2a16558d97d1bd662201e7da700dcb5b2b49
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/ConfigStripe.spec.js
@@ -0,0 +1,68 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.ConfigStripe();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('ConfigStripe', function() {
+ it('should create an instance of ConfigStripe', function() {
+ // uncomment below and update the code to test ConfigStripe
+ //var instane = new Aimastering.ConfigStripe();
+ //expect(instance).to.be.a(Aimastering.ConfigStripe);
+ });
+
+ it('should have the property publishableKey (base name: "publishable_key")', function() {
+ // uncomment below and update the code to test the property publishableKey
+ //var instane = new Aimastering.ConfigStripe();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/ConfigVersion.spec.js b/masteringModule/node_modules/aimastering/test/model/ConfigVersion.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..058e3ba6af8ee2147e8a9b91b34fcc8f39b90f85
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/ConfigVersion.spec.js
@@ -0,0 +1,68 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.ConfigVersion();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('ConfigVersion', function() {
+ it('should create an instance of ConfigVersion', function() {
+ // uncomment below and update the code to test ConfigVersion
+ //var instane = new Aimastering.ConfigVersion();
+ //expect(instance).to.be.a(Aimastering.ConfigVersion);
+ });
+
+ it('should have the property commit (base name: "commit")', function() {
+ // uncomment below and update the code to test the property commit
+ //var instane = new Aimastering.ConfigVersion();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/ExternalSearchResult.spec.js b/masteringModule/node_modules/aimastering/test/model/ExternalSearchResult.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..52c6ed5565453b7f4461aa5bfcce3d9f9b6da49a
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/ExternalSearchResult.spec.js
@@ -0,0 +1,74 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.ExternalSearchResult();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('ExternalSearchResult', function() {
+ it('should create an instance of ExternalSearchResult', function() {
+ // uncomment below and update the code to test ExternalSearchResult
+ //var instane = new Aimastering.ExternalSearchResult();
+ //expect(instance).to.be.a(Aimastering.ExternalSearchResult);
+ });
+
+ it('should have the property itunes (base name: "itunes")', function() {
+ // uncomment below and update the code to test the property itunes
+ //var instane = new Aimastering.ExternalSearchResult();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property youtube (base name: "youtube")', function() {
+ // uncomment below and update the code to test the property youtube
+ //var instane = new Aimastering.ExternalSearchResult();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/ExternalSearchResultItunes.spec.js b/masteringModule/node_modules/aimastering/test/model/ExternalSearchResultItunes.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..d62b646ba0ab35504b8a40d56aa1222e7b00ea28
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/ExternalSearchResultItunes.spec.js
@@ -0,0 +1,128 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.ExternalSearchResultItunes();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('ExternalSearchResultItunes', function() {
+ it('should create an instance of ExternalSearchResultItunes', function() {
+ // uncomment below and update the code to test ExternalSearchResultItunes
+ //var instane = new Aimastering.ExternalSearchResultItunes();
+ //expect(instance).to.be.a(Aimastering.ExternalSearchResultItunes);
+ });
+
+ it('should have the property id (base name: "id")', function() {
+ // uncomment below and update the code to test the property id
+ //var instane = new Aimastering.ExternalSearchResultItunes();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property name (base name: "name")', function() {
+ // uncomment below and update the code to test the property name
+ //var instane = new Aimastering.ExternalSearchResultItunes();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property description (base name: "description")', function() {
+ // uncomment below and update the code to test the property description
+ //var instane = new Aimastering.ExternalSearchResultItunes();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property url (base name: "url")', function() {
+ // uncomment below and update the code to test the property url
+ //var instane = new Aimastering.ExternalSearchResultItunes();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property thumbnailUrl (base name: "thumbnail_url")', function() {
+ // uncomment below and update the code to test the property thumbnailUrl
+ //var instane = new Aimastering.ExternalSearchResultItunes();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property previewUrl (base name: "preview_url")', function() {
+ // uncomment below and update the code to test the property previewUrl
+ //var instane = new Aimastering.ExternalSearchResultItunes();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property albumName (base name: "album_name")', function() {
+ // uncomment below and update the code to test the property albumName
+ //var instane = new Aimastering.ExternalSearchResultItunes();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property albumUrl (base name: "album_url")', function() {
+ // uncomment below and update the code to test the property albumUrl
+ //var instane = new Aimastering.ExternalSearchResultItunes();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property artistName (base name: "artist_name")', function() {
+ // uncomment below and update the code to test the property artistName
+ //var instane = new Aimastering.ExternalSearchResultItunes();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property artistUrl (base name: "artist_url")', function() {
+ // uncomment below and update the code to test the property artistUrl
+ //var instane = new Aimastering.ExternalSearchResultItunes();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property trackNumber (base name: "track_number")', function() {
+ // uncomment below and update the code to test the property trackNumber
+ //var instane = new Aimastering.ExternalSearchResultItunes();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/ExternalSearchResultYoutube.spec.js b/masteringModule/node_modules/aimastering/test/model/ExternalSearchResultYoutube.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..d42238475fb493d639fcd689e4869fbfc5e21ea0
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/ExternalSearchResultYoutube.spec.js
@@ -0,0 +1,110 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.ExternalSearchResultYoutube();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('ExternalSearchResultYoutube', function() {
+ it('should create an instance of ExternalSearchResultYoutube', function() {
+ // uncomment below and update the code to test ExternalSearchResultYoutube
+ //var instane = new Aimastering.ExternalSearchResultYoutube();
+ //expect(instance).to.be.a(Aimastering.ExternalSearchResultYoutube);
+ });
+
+ it('should have the property id (base name: "id")', function() {
+ // uncomment below and update the code to test the property id
+ //var instane = new Aimastering.ExternalSearchResultYoutube();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property name (base name: "name")', function() {
+ // uncomment below and update the code to test the property name
+ //var instane = new Aimastering.ExternalSearchResultYoutube();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property description (base name: "description")', function() {
+ // uncomment below and update the code to test the property description
+ //var instane = new Aimastering.ExternalSearchResultYoutube();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property url (base name: "url")', function() {
+ // uncomment below and update the code to test the property url
+ //var instane = new Aimastering.ExternalSearchResultYoutube();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property thumbnailUrl (base name: "thumbnail_url")', function() {
+ // uncomment below and update the code to test the property thumbnailUrl
+ //var instane = new Aimastering.ExternalSearchResultYoutube();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property channelId (base name: "channel_id")', function() {
+ // uncomment below and update the code to test the property channelId
+ //var instane = new Aimastering.ExternalSearchResultYoutube();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property channelUrl (base name: "channel_url")', function() {
+ // uncomment below and update the code to test the property channelUrl
+ //var instane = new Aimastering.ExternalSearchResultYoutube();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property channelName (base name: "channel_name")', function() {
+ // uncomment below and update the code to test the property channelName
+ //var instane = new Aimastering.ExternalSearchResultYoutube();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/GroupBuyStatistics.spec.js b/masteringModule/node_modules/aimastering/test/model/GroupBuyStatistics.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..244090835e16a6897c39e35993a0a9a06c62d336
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/GroupBuyStatistics.spec.js
@@ -0,0 +1,68 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.GroupBuyStatistics();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('GroupBuyStatistics', function() {
+ it('should create an instance of GroupBuyStatistics', function() {
+ // uncomment below and update the code to test GroupBuyStatistics
+ //var instane = new Aimastering.GroupBuyStatistics();
+ //expect(instance).to.be.a(Aimastering.GroupBuyStatistics);
+ });
+
+ it('should have the property premiumPlanSubscribedUserCount (base name: "premium_plan_subscribed_user_count")', function() {
+ // uncomment below and update the code to test the property premiumPlanSubscribedUserCount
+ //var instane = new Aimastering.GroupBuyStatistics();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/JWT.spec.js b/masteringModule/node_modules/aimastering/test/model/JWT.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..084220dd9fd9b114fdce2b4b50dd29089c0db4a9
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/JWT.spec.js
@@ -0,0 +1,62 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.JWT();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('JWT', function() {
+ it('should create an instance of JWT', function() {
+ // uncomment below and update the code to test JWT
+ //var instane = new Aimastering.JWT();
+ //expect(instance).to.be.a(Aimastering.JWT);
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/Kpi.spec.js b/masteringModule/node_modules/aimastering/test/model/Kpi.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..bb3043853e8926ea218caf783126684074872955
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/Kpi.spec.js
@@ -0,0 +1,62 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.Kpi();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('Kpi', function() {
+ it('should create an instance of Kpi', function() {
+ // uncomment below and update the code to test Kpi
+ //var instane = new Aimastering.Kpi();
+ //expect(instance).to.be.a(Aimastering.Kpi);
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/LibraryAudio.spec.js b/masteringModule/node_modules/aimastering/test/model/LibraryAudio.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..5ad91831631d9c776604632715578c2fc5cec8aa
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/LibraryAudio.spec.js
@@ -0,0 +1,272 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.LibraryAudio();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('LibraryAudio', function() {
+ it('should create an instance of LibraryAudio', function() {
+ // uncomment below and update the code to test LibraryAudio
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be.a(Aimastering.LibraryAudio);
+ });
+
+ it('should have the property id (base name: "id")', function() {
+ // uncomment below and update the code to test the property id
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property userId (base name: "user_id")', function() {
+ // uncomment below and update the code to test the property userId
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property name (base name: "name")', function() {
+ // uncomment below and update the code to test the property name
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property album (base name: "album")', function() {
+ // uncomment below and update the code to test the property album
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property albumArtist (base name: "album_artist")', function() {
+ // uncomment below and update the code to test the property albumArtist
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property artist (base name: "artist")', function() {
+ // uncomment below and update the code to test the property artist
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property genre (base name: "genre")', function() {
+ // uncomment below and update the code to test the property genre
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property track (base name: "track")', function() {
+ // uncomment below and update the code to test the property track
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property publisher (base name: "publisher")', function() {
+ // uncomment below and update the code to test the property publisher
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property fileHash (base name: "file_hash")', function() {
+ // uncomment below and update the code to test the property fileHash
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property size (base name: "size")', function() {
+ // uncomment below and update the code to test the property size
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property status (base name: "status")', function() {
+ // uncomment below and update the code to test the property status
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property failureReason (base name: "failure_reason")', function() {
+ // uncomment below and update the code to test the property failureReason
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property probeJson (base name: "probe_json")', function() {
+ // uncomment below and update the code to test the property probeJson
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property rms (base name: "rms")', function() {
+ // uncomment below and update the code to test the property rms
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property peak (base name: "peak")', function() {
+ // uncomment below and update the code to test the property peak
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property truePeak (base name: "true_peak")', function() {
+ // uncomment below and update the code to test the property truePeak
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property lowpassTruePeak15khz (base name: "lowpass_true_peak_15khz")', function() {
+ // uncomment below and update the code to test the property lowpassTruePeak15khz
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property loudness (base name: "loudness")', function() {
+ // uncomment below and update the code to test the property loudness
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property dynamics (base name: "dynamics")', function() {
+ // uncomment below and update the code to test the property dynamics
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property sharpness (base name: "sharpness")', function() {
+ // uncomment below and update the code to test the property sharpness
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property space (base name: "space")', function() {
+ // uncomment below and update the code to test the property space
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property loudnessRange (base name: "loudness_range")', function() {
+ // uncomment below and update the code to test the property loudnessRange
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property drr (base name: "drr")', function() {
+ // uncomment below and update the code to test the property drr
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property soundQuality (base name: "sound_quality")', function() {
+ // uncomment below and update the code to test the property soundQuality
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property soundQuality2 (base name: "sound_quality2")', function() {
+ // uncomment below and update the code to test the property soundQuality2
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property dissonance (base name: "dissonance")', function() {
+ // uncomment below and update the code to test the property dissonance
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property frames (base name: "frames")', function() {
+ // uncomment below and update the code to test the property frames
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property sampleRate (base name: "sample_rate")', function() {
+ // uncomment below and update the code to test the property sampleRate
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property channels (base name: "channels")', function() {
+ // uncomment below and update the code to test the property channels
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property isPublic (base name: "is_public")', function() {
+ // uncomment below and update the code to test the property isPublic
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property likedBySelf (base name: "liked_by_self")', function() {
+ // uncomment below and update the code to test the property likedBySelf
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property likeCount (base name: "like_count")', function() {
+ // uncomment below and update the code to test the property likeCount
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property createdAt (base name: "created_at")', function() {
+ // uncomment below and update the code to test the property createdAt
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property updatedAt (base name: "updated_at")', function() {
+ // uncomment below and update the code to test the property updatedAt
+ //var instane = new Aimastering.LibraryAudio();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/LibraryAudioAnalysis.spec.js b/masteringModule/node_modules/aimastering/test/model/LibraryAudioAnalysis.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..4b10d0a3f62c7ba040fdb106158daf664b98400e
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/LibraryAudioAnalysis.spec.js
@@ -0,0 +1,80 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.LibraryAudioAnalysis();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('LibraryAudioAnalysis', function() {
+ it('should create an instance of LibraryAudioAnalysis', function() {
+ // uncomment below and update the code to test LibraryAudioAnalysis
+ //var instane = new Aimastering.LibraryAudioAnalysis();
+ //expect(instance).to.be.a(Aimastering.LibraryAudioAnalysis);
+ });
+
+ it('should have the property id (base name: "id")', function() {
+ // uncomment below and update the code to test the property id
+ //var instane = new Aimastering.LibraryAudioAnalysis();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property libraryAudioId (base name: "library_audio_id")', function() {
+ // uncomment below and update the code to test the property libraryAudioId
+ //var instane = new Aimastering.LibraryAudioAnalysis();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property analysis (base name: "analysis")', function() {
+ // uncomment below and update the code to test the property analysis
+ //var instane = new Aimastering.LibraryAudioAnalysis();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/LibraryAudioLike.spec.js b/masteringModule/node_modules/aimastering/test/model/LibraryAudioLike.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..ac1ba6603f41c9fecfa68d7b6a9400fa34285827
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/LibraryAudioLike.spec.js
@@ -0,0 +1,80 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.LibraryAudioLike();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('LibraryAudioLike', function() {
+ it('should create an instance of LibraryAudioLike', function() {
+ // uncomment below and update the code to test LibraryAudioLike
+ //var instane = new Aimastering.LibraryAudioLike();
+ //expect(instance).to.be.a(Aimastering.LibraryAudioLike);
+ });
+
+ it('should have the property id (base name: "id")', function() {
+ // uncomment below and update the code to test the property id
+ //var instane = new Aimastering.LibraryAudioLike();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property libraryAudioId (base name: "library_audio_id")', function() {
+ // uncomment below and update the code to test the property libraryAudioId
+ //var instane = new Aimastering.LibraryAudioLike();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property userId (base name: "user_id")', function() {
+ // uncomment below and update the code to test the property userId
+ //var instane = new Aimastering.LibraryAudioLike();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/Mastering.spec.js b/masteringModule/node_modules/aimastering/test/model/Mastering.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..d1cc6b9fa233bc0cbd05207d09aef488fac0b4af
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/Mastering.spec.js
@@ -0,0 +1,284 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.Mastering();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('Mastering', function() {
+ it('should create an instance of Mastering', function() {
+ // uncomment below and update the code to test Mastering
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be.a(Aimastering.Mastering);
+ });
+
+ it('should have the property id (base name: "id")', function() {
+ // uncomment below and update the code to test the property id
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property userId (base name: "user_id")', function() {
+ // uncomment below and update the code to test the property userId
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property inputAudioId (base name: "input_audio_id")', function() {
+ // uncomment below and update the code to test the property inputAudioId
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property outputAudioId (base name: "output_audio_id")', function() {
+ // uncomment below and update the code to test the property outputAudioId
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property outputVideoId (base name: "output_video_id")', function() {
+ // uncomment below and update the code to test the property outputVideoId
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property referenceAudioId (base name: "reference_audio_id")', function() {
+ // uncomment below and update the code to test the property referenceAudioId
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property mode (base name: "mode")', function() {
+ // uncomment below and update the code to test the property mode
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property status (base name: "status")', function() {
+ // uncomment below and update the code to test the property status
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property failureReason (base name: "failure_reason")', function() {
+ // uncomment below and update the code to test the property failureReason
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property targetLoudnessMode (base name: "target_loudness_mode")', function() {
+ // uncomment below and update the code to test the property targetLoudnessMode
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property targetLoudness (base name: "target_loudness")', function() {
+ // uncomment below and update the code to test the property targetLoudness
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property outputFormat (base name: "output_format")', function() {
+ // uncomment below and update the code to test the property outputFormat
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property preset (base name: "preset")', function() {
+ // uncomment below and update the code to test the property preset
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property bitDepth (base name: "bit_depth")', function() {
+ // uncomment below and update the code to test the property bitDepth
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property sampleRate (base name: "sample_rate")', function() {
+ // uncomment below and update the code to test the property sampleRate
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property reviewComment (base name: "review_comment")', function() {
+ // uncomment below and update the code to test the property reviewComment
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property reviewScore (base name: "review_score")', function() {
+ // uncomment below and update the code to test the property reviewScore
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property masteringMatchingLevel (base name: "mastering_matching_level")', function() {
+ // uncomment below and update the code to test the property masteringMatchingLevel
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property progression (base name: "progression")', function() {
+ // uncomment below and update the code to test the property progression
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property bassPreservation (base name: "bass_preservation")', function() {
+ // uncomment below and update the code to test the property bassPreservation
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property mastering (base name: "mastering")', function() {
+ // uncomment below and update the code to test the property mastering
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property masteringAlgorithm (base name: "mastering_algorithm")', function() {
+ // uncomment below and update the code to test the property masteringAlgorithm
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property preserved (base name: "preserved")', function() {
+ // uncomment below and update the code to test the property preserved
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property retryCount (base name: "retry_count")', function() {
+ // uncomment below and update the code to test the property retryCount
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property masteringReverb (base name: "mastering_reverb")', function() {
+ // uncomment below and update the code to test the property masteringReverb
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property masteringReverbGain (base name: "mastering_reverb_gain")', function() {
+ // uncomment below and update the code to test the property masteringReverbGain
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property lowCutFreq (base name: "low_cut_freq")', function() {
+ // uncomment below and update the code to test the property lowCutFreq
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property highCutFreq (base name: "high_cut_freq")', function() {
+ // uncomment below and update the code to test the property highCutFreq
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property ceiling (base name: "ceiling")', function() {
+ // uncomment below and update the code to test the property ceiling
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property ceilingMode (base name: "ceiling_mode")', function() {
+ // uncomment below and update the code to test the property ceilingMode
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property oversample (base name: "oversample")', function() {
+ // uncomment below and update the code to test the property oversample
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property limitingError (base name: "limiting_error")', function() {
+ // uncomment below and update the code to test the property limitingError
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property videoTitle (base name: "video_title")', function() {
+ // uncomment below and update the code to test the property videoTitle
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property videoStatus (base name: "video_status")', function() {
+ // uncomment below and update the code to test the property videoStatus
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property expireAt (base name: "expire_at")', function() {
+ // uncomment below and update the code to test the property expireAt
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property createdAt (base name: "created_at")', function() {
+ // uncomment below and update the code to test the property createdAt
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property updatedAt (base name: "updated_at")', function() {
+ // uncomment below and update the code to test the property updatedAt
+ //var instane = new Aimastering.Mastering();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/Payment.spec.js b/masteringModule/node_modules/aimastering/test/model/Payment.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..432a85b50eb7848e737578cb8eb15009b9aed303
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/Payment.spec.js
@@ -0,0 +1,104 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.Payment();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('Payment', function() {
+ it('should create an instance of Payment', function() {
+ // uncomment below and update the code to test Payment
+ //var instane = new Aimastering.Payment();
+ //expect(instance).to.be.a(Aimastering.Payment);
+ });
+
+ it('should have the property id (base name: "id")', function() {
+ // uncomment below and update the code to test the property id
+ //var instane = new Aimastering.Payment();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property service (base name: "service")', function() {
+ // uncomment below and update the code to test the property service
+ //var instane = new Aimastering.Payment();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property productGiven (base name: "product_given")', function() {
+ // uncomment below and update the code to test the property productGiven
+ //var instane = new Aimastering.Payment();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property product (base name: "product")', function() {
+ // uncomment below and update the code to test the property product
+ //var instane = new Aimastering.Payment();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property transactionId (base name: "transaction_id")', function() {
+ // uncomment below and update the code to test the property transactionId
+ //var instane = new Aimastering.Payment();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property transactionDetail (base name: "transaction_detail")', function() {
+ // uncomment below and update the code to test the property transactionDetail
+ //var instane = new Aimastering.Payment();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property createdAt (base name: "created_at")', function() {
+ // uncomment below and update the code to test the property createdAt
+ //var instane = new Aimastering.Payment();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/PaymentCustomer.spec.js b/masteringModule/node_modules/aimastering/test/model/PaymentCustomer.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..4c632fb7a18ab9c83bc37eb3a3931f67225010c7
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/PaymentCustomer.spec.js
@@ -0,0 +1,86 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.PaymentCustomer();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('PaymentCustomer', function() {
+ it('should create an instance of PaymentCustomer', function() {
+ // uncomment below and update the code to test PaymentCustomer
+ //var instane = new Aimastering.PaymentCustomer();
+ //expect(instance).to.be.a(Aimastering.PaymentCustomer);
+ });
+
+ it('should have the property id (base name: "id")', function() {
+ // uncomment below and update the code to test the property id
+ //var instane = new Aimastering.PaymentCustomer();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property paymentCustomerDetail (base name: "payment_customer_detail")', function() {
+ // uncomment below and update the code to test the property paymentCustomerDetail
+ //var instane = new Aimastering.PaymentCustomer();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property createdAt (base name: "created_at")', function() {
+ // uncomment below and update the code to test the property createdAt
+ //var instane = new Aimastering.PaymentCustomer();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property updatedAt (base name: "updated_at")', function() {
+ // uncomment below and update the code to test the property updatedAt
+ //var instane = new Aimastering.PaymentCustomer();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/Plan.spec.js b/masteringModule/node_modules/aimastering/test/model/Plan.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..0b6fd3a7fde73f186332cf8510fa487506eea98e
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/Plan.spec.js
@@ -0,0 +1,92 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.Plan();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('Plan', function() {
+ it('should create an instance of Plan', function() {
+ // uncomment below and update the code to test Plan
+ //var instane = new Aimastering.Plan();
+ //expect(instance).to.be.a(Aimastering.Plan);
+ });
+
+ it('should have the property amount (base name: "amount")', function() {
+ // uncomment below and update the code to test the property amount
+ //var instane = new Aimastering.Plan();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property currency (base name: "currency")', function() {
+ // uncomment below and update the code to test the property currency
+ //var instane = new Aimastering.Plan();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property interval (base name: "interval")', function() {
+ // uncomment below and update the code to test the property interval
+ //var instane = new Aimastering.Plan();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property name (base name: "name")', function() {
+ // uncomment below and update the code to test the property name
+ //var instane = new Aimastering.Plan();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property stripePlanId (base name: "stripe_plan_id")', function() {
+ // uncomment below and update the code to test the property stripePlanId
+ //var instane = new Aimastering.Plan();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/SpSubscription.spec.js b/masteringModule/node_modules/aimastering/test/model/SpSubscription.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..d06c3a762374834347ca71407da0cf08361ef54e
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/SpSubscription.spec.js
@@ -0,0 +1,92 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.SpSubscription();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('SpSubscription', function() {
+ it('should create an instance of SpSubscription', function() {
+ // uncomment below and update the code to test SpSubscription
+ //var instane = new Aimastering.SpSubscription();
+ //expect(instance).to.be.a(Aimastering.SpSubscription);
+ });
+
+ it('should have the property id (base name: "id")', function() {
+ // uncomment below and update the code to test the property id
+ //var instane = new Aimastering.SpSubscription();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property userId (base name: "user_id")', function() {
+ // uncomment below and update the code to test the property userId
+ //var instane = new Aimastering.SpSubscription();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property status (base name: "status")', function() {
+ // uncomment below and update the code to test the property status
+ //var instane = new Aimastering.SpSubscription();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property createdAt (base name: "created_at")', function() {
+ // uncomment below and update the code to test the property createdAt
+ //var instane = new Aimastering.SpSubscription();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property updatedAt (base name: "updated_at")', function() {
+ // uncomment below and update the code to test the property updatedAt
+ //var instane = new Aimastering.SpSubscription();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/Subscription.spec.js b/masteringModule/node_modules/aimastering/test/model/Subscription.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..53f89f027004e6df7576a33def19fc88d7133867
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/Subscription.spec.js
@@ -0,0 +1,128 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.Subscription();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('Subscription', function() {
+ it('should create an instance of Subscription', function() {
+ // uncomment below and update the code to test Subscription
+ //var instane = new Aimastering.Subscription();
+ //expect(instance).to.be.a(Aimastering.Subscription);
+ });
+
+ it('should have the property id (base name: "id")', function() {
+ // uncomment below and update the code to test the property id
+ //var instane = new Aimastering.Subscription();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property userId (base name: "user_id")', function() {
+ // uncomment below and update the code to test the property userId
+ //var instane = new Aimastering.Subscription();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property stripeSubscriptionId (base name: "stripe_subscription_id")', function() {
+ // uncomment below and update the code to test the property stripeSubscriptionId
+ //var instane = new Aimastering.Subscription();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property currentPeriodStartAt (base name: "current_period_start_at")', function() {
+ // uncomment below and update the code to test the property currentPeriodStartAt
+ //var instane = new Aimastering.Subscription();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property currentPeriodEndAt (base name: "current_period_end_at")', function() {
+ // uncomment below and update the code to test the property currentPeriodEndAt
+ //var instane = new Aimastering.Subscription();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property canceled (base name: "canceled")', function() {
+ // uncomment below and update the code to test the property canceled
+ //var instane = new Aimastering.Subscription();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property cancelAtPeriodEnd (base name: "cancel_at_period_end")', function() {
+ // uncomment below and update the code to test the property cancelAtPeriodEnd
+ //var instane = new Aimastering.Subscription();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property trialEnd (base name: "trial_end")', function() {
+ // uncomment below and update the code to test the property trialEnd
+ //var instane = new Aimastering.Subscription();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property status (base name: "status")', function() {
+ // uncomment below and update the code to test the property status
+ //var instane = new Aimastering.Subscription();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property createdAt (base name: "created_at")', function() {
+ // uncomment below and update the code to test the property createdAt
+ //var instane = new Aimastering.Subscription();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property updatedAt (base name: "updated_at")', function() {
+ // uncomment below and update the code to test the property updatedAt
+ //var instane = new Aimastering.Subscription();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/User.spec.js b/masteringModule/node_modules/aimastering/test/model/User.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..9164fcdd3c0b5413fc4438aad8f4268b1b74a261
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/User.spec.js
@@ -0,0 +1,122 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.User();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('User', function() {
+ it('should create an instance of User', function() {
+ // uncomment below and update the code to test User
+ //var instane = new Aimastering.User();
+ //expect(instance).to.be.a(Aimastering.User);
+ });
+
+ it('should have the property id (base name: "id")', function() {
+ // uncomment below and update the code to test the property id
+ //var instane = new Aimastering.User();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property affiliateEnabled (base name: "affiliate_enabled")', function() {
+ // uncomment below and update the code to test the property affiliateEnabled
+ //var instane = new Aimastering.User();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property agreedTermsOfService (base name: "agreed_terms_of_service")', function() {
+ // uncomment below and update the code to test the property agreedTermsOfService
+ //var instane = new Aimastering.User();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property authId (base name: "auth_id")', function() {
+ // uncomment below and update the code to test the property authId
+ //var instane = new Aimastering.User();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property authProvider (base name: "auth_provider")', function() {
+ // uncomment below and update the code to test the property authProvider
+ //var instane = new Aimastering.User();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property email (base name: "email")', function() {
+ // uncomment below and update the code to test the property email
+ //var instane = new Aimastering.User();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property registrationNotified (base name: "registration_notified")', function() {
+ // uncomment below and update the code to test the property registrationNotified
+ //var instane = new Aimastering.User();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property statistics (base name: "statistics")', function() {
+ // uncomment below and update the code to test the property statistics
+ //var instane = new Aimastering.User();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property createdAt (base name: "created_at")', function() {
+ // uncomment below and update the code to test the property createdAt
+ //var instane = new Aimastering.User();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property updatedAt (base name: "updated_at")', function() {
+ // uncomment below and update the code to test the property updatedAt
+ //var instane = new Aimastering.User();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/UserStatistics.spec.js b/masteringModule/node_modules/aimastering/test/model/UserStatistics.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..6a3463917c084215b840a3fcfe7367d359b0414e
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/UserStatistics.spec.js
@@ -0,0 +1,98 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.UserStatistics();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('UserStatistics', function() {
+ it('should create an instance of UserStatistics', function() {
+ // uncomment below and update the code to test UserStatistics
+ //var instane = new Aimastering.UserStatistics();
+ //expect(instance).to.be.a(Aimastering.UserStatistics);
+ });
+
+ it('should have the property registrationInvitationCount (base name: "registration_invitation_count")', function() {
+ // uncomment below and update the code to test the property registrationInvitationCount
+ //var instane = new Aimastering.UserStatistics();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property subscriptionInvitationCount (base name: "subscription_invitation_count")', function() {
+ // uncomment below and update the code to test the property subscriptionInvitationCount
+ //var instane = new Aimastering.UserStatistics();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property masteringCount (base name: "mastering_count")', function() {
+ // uncomment below and update the code to test the property masteringCount
+ //var instane = new Aimastering.UserStatistics();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property monthlyRegistrationInvitationCount (base name: "monthly_registration_invitation_count")', function() {
+ // uncomment below and update the code to test the property monthlyRegistrationInvitationCount
+ //var instane = new Aimastering.UserStatistics();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property monthlySubscriptionInvitationCount (base name: "monthly_subscription_invitation_count")', function() {
+ // uncomment below and update the code to test the property monthlySubscriptionInvitationCount
+ //var instane = new Aimastering.UserStatistics();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property monthlyMasteringCount (base name: "monthly_mastering_count")', function() {
+ // uncomment below and update the code to test the property monthlyMasteringCount
+ //var instane = new Aimastering.UserStatistics();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/Video.spec.js b/masteringModule/node_modules/aimastering/test/model/Video.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..479fad17fc755ba7182e01187fddc4be5db50000
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/Video.spec.js
@@ -0,0 +1,98 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.Video();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('Video', function() {
+ it('should create an instance of Video', function() {
+ // uncomment below and update the code to test Video
+ //var instane = new Aimastering.Video();
+ //expect(instance).to.be.a(Aimastering.Video);
+ });
+
+ it('should have the property id (base name: "id")', function() {
+ // uncomment below and update the code to test the property id
+ //var instane = new Aimastering.Video();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property fileResourceId (base name: "file_resource_id")', function() {
+ // uncomment below and update the code to test the property fileResourceId
+ //var instane = new Aimastering.Video();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property userId (base name: "user_id")', function() {
+ // uncomment below and update the code to test the property userId
+ //var instane = new Aimastering.Video();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property name (base name: "name")', function() {
+ // uncomment below and update the code to test the property name
+ //var instane = new Aimastering.Video();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property createdAt (base name: "created_at")', function() {
+ // uncomment below and update the code to test the property createdAt
+ //var instane = new Aimastering.Video();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property updatedAt (base name: "updated_at")', function() {
+ // uncomment below and update the code to test the property updatedAt
+ //var instane = new Aimastering.Video();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/aimastering/test/model/VideoDownloadToken.spec.js b/masteringModule/node_modules/aimastering/test/model/VideoDownloadToken.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..a39b07debcbc43773486b846020319efec9094d3
--- /dev/null
+++ b/masteringModule/node_modules/aimastering/test/model/VideoDownloadToken.spec.js
@@ -0,0 +1,74 @@
+/**
+ * AI Mastering API
+ * This is a AI Mastering API document. You can use the mastering feature of [AI Mastering](https://aimastering.com) through this API.
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: info@bakuage.com
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ *
+ * Swagger Codegen version: 2.3.1
+ *
+ * Do not edit the class manually.
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD.
+ define(['expect.js', '../../src/index'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // CommonJS-like environments that support module.exports, like Node.
+ factory(require('expect.js'), require('../../src/index'));
+ } else {
+ // Browser globals (root is window)
+ factory(root.expect, root.Aimastering);
+ }
+}(this, function(expect, Aimastering) {
+ 'use strict';
+
+ var instance;
+
+ beforeEach(function() {
+ instance = new Aimastering.VideoDownloadToken();
+ });
+
+ var getProperty = function(object, getter, property) {
+ // Use getter method if present; otherwise, get the property directly.
+ if (typeof object[getter] === 'function')
+ return object[getter]();
+ else
+ return object[property];
+ }
+
+ var setProperty = function(object, setter, property, value) {
+ // Use setter method if present; otherwise, set the property directly.
+ if (typeof object[setter] === 'function')
+ object[setter](value);
+ else
+ object[property] = value;
+ }
+
+ describe('VideoDownloadToken', function() {
+ it('should create an instance of VideoDownloadToken', function() {
+ // uncomment below and update the code to test VideoDownloadToken
+ //var instane = new Aimastering.VideoDownloadToken();
+ //expect(instance).to.be.a(Aimastering.VideoDownloadToken);
+ });
+
+ it('should have the property downloadToken (base name: "download_token")', function() {
+ // uncomment below and update the code to test the property downloadToken
+ //var instane = new Aimastering.VideoDownloadToken();
+ //expect(instance).to.be();
+ });
+
+ it('should have the property downloadUrl (base name: "download_url")', function() {
+ // uncomment below and update the code to test the property downloadUrl
+ //var instane = new Aimastering.VideoDownloadToken();
+ //expect(instance).to.be();
+ });
+
+ });
+
+}));
diff --git a/masteringModule/node_modules/asynckit/LICENSE b/masteringModule/node_modules/asynckit/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..c9eca5dd999d7cead12f32f6089b577e8e78c23e
--- /dev/null
+++ b/masteringModule/node_modules/asynckit/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Alex Indigo
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/masteringModule/node_modules/asynckit/README.md b/masteringModule/node_modules/asynckit/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..ddcc7e6b95ca9aab30e8ef697e8941869adad32a
--- /dev/null
+++ b/masteringModule/node_modules/asynckit/README.md
@@ -0,0 +1,233 @@
+# asynckit [](https://www.npmjs.com/package/asynckit)
+
+Minimal async jobs utility library, with streams support.
+
+[](https://travis-ci.org/alexindigo/asynckit)
+[](https://travis-ci.org/alexindigo/asynckit)
+[](https://ci.appveyor.com/project/alexindigo/asynckit)
+
+[](https://coveralls.io/github/alexindigo/asynckit?branch=master)
+[](https://david-dm.org/alexindigo/asynckit)
+[](https://www.bithound.io/github/alexindigo/asynckit)
+
+
+
+AsyncKit provides harness for `parallel` and `serial` iterators over list of items represented by arrays or objects.
+Optionally it accepts abort function (should be synchronously return by iterator for each item), and terminates left over jobs upon an error event. For specific iteration order built-in (`ascending` and `descending`) and custom sort helpers also supported, via `asynckit.serialOrdered` method.
+
+It ensures async operations to keep behavior more stable and prevent `Maximum call stack size exceeded` errors, from sync iterators.
+
+| compression | size |
+| :----------------- | -------: |
+| asynckit.js | 12.34 kB |
+| asynckit.min.js | 4.11 kB |
+| asynckit.min.js.gz | 1.47 kB |
+
+
+## Install
+
+```sh
+$ npm install --save asynckit
+```
+
+## Examples
+
+### Parallel Jobs
+
+Runs iterator over provided array in parallel. Stores output in the `result` array,
+on the matching positions. In unlikely event of an error from one of the jobs,
+will terminate rest of the active jobs (if abort function is provided)
+and return error along with salvaged data to the main callback function.
+
+#### Input Array
+
+```javascript
+var parallel = require('asynckit').parallel
+ , assert = require('assert')
+ ;
+
+var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ]
+ , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ]
+ , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ]
+ , target = []
+ ;
+
+parallel(source, asyncJob, function(err, result)
+{
+ assert.deepEqual(result, expectedResult);
+ assert.deepEqual(target, expectedTarget);
+});
+
+// async job accepts one element from the array
+// and a callback function
+function asyncJob(item, cb)
+{
+ // different delays (in ms) per item
+ var delay = item * 25;
+
+ // pretend different jobs take different time to finish
+ // and not in consequential order
+ var timeoutId = setTimeout(function() {
+ target.push(item);
+ cb(null, item * 2);
+ }, delay);
+
+ // allow to cancel "leftover" jobs upon error
+ // return function, invoking of which will abort this job
+ return clearTimeout.bind(null, timeoutId);
+}
+```
+
+More examples could be found in [test/test-parallel-array.js](test/test-parallel-array.js).
+
+#### Input Object
+
+Also it supports named jobs, listed via object.
+
+```javascript
+var parallel = require('asynckit/parallel')
+ , assert = require('assert')
+ ;
+
+var source = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 }
+ , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 }
+ , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ]
+ , expectedKeys = [ 'first', 'one', 'two', 'four', 'eight', 'sixteen', 'thirtyTwo', 'sixtyFour' ]
+ , target = []
+ , keys = []
+ ;
+
+parallel(source, asyncJob, function(err, result)
+{
+ assert.deepEqual(result, expectedResult);
+ assert.deepEqual(target, expectedTarget);
+ assert.deepEqual(keys, expectedKeys);
+});
+
+// supports full value, key, callback (shortcut) interface
+function asyncJob(item, key, cb)
+{
+ // different delays (in ms) per item
+ var delay = item * 25;
+
+ // pretend different jobs take different time to finish
+ // and not in consequential order
+ var timeoutId = setTimeout(function() {
+ keys.push(key);
+ target.push(item);
+ cb(null, item * 2);
+ }, delay);
+
+ // allow to cancel "leftover" jobs upon error
+ // return function, invoking of which will abort this job
+ return clearTimeout.bind(null, timeoutId);
+}
+```
+
+More examples could be found in [test/test-parallel-object.js](test/test-parallel-object.js).
+
+### Serial Jobs
+
+Runs iterator over provided array sequentially. Stores output in the `result` array,
+on the matching positions. In unlikely event of an error from one of the jobs,
+will not proceed to the rest of the items in the list
+and return error along with salvaged data to the main callback function.
+
+#### Input Array
+
+```javascript
+var serial = require('asynckit/serial')
+ , assert = require('assert')
+ ;
+
+var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ]
+ , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ]
+ , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ]
+ , target = []
+ ;
+
+serial(source, asyncJob, function(err, result)
+{
+ assert.deepEqual(result, expectedResult);
+ assert.deepEqual(target, expectedTarget);
+});
+
+// extended interface (item, key, callback)
+// also supported for arrays
+function asyncJob(item, key, cb)
+{
+ target.push(key);
+
+ // it will be automatically made async
+ // even it iterator "returns" in the same event loop
+ cb(null, item * 2);
+}
+```
+
+More examples could be found in [test/test-serial-array.js](test/test-serial-array.js).
+
+#### Input Object
+
+Also it supports named jobs, listed via object.
+
+```javascript
+var serial = require('asynckit').serial
+ , assert = require('assert')
+ ;
+
+var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ]
+ , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ]
+ , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ]
+ , target = []
+ ;
+
+var source = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 }
+ , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 }
+ , expectedTarget = [ 1, 1, 4, 16, 64, 32, 8, 2 ]
+ , target = []
+ ;
+
+
+serial(source, asyncJob, function(err, result)
+{
+ assert.deepEqual(result, expectedResult);
+ assert.deepEqual(target, expectedTarget);
+});
+
+// shortcut interface (item, callback)
+// works for object as well as for the arrays
+function asyncJob(item, cb)
+{
+ target.push(item);
+
+ // it will be automatically made async
+ // even it iterator "returns" in the same event loop
+ cb(null, item * 2);
+}
+```
+
+More examples could be found in [test/test-serial-object.js](test/test-serial-object.js).
+
+_Note: Since _object_ is an _unordered_ collection of properties,
+it may produce unexpected results with sequential iterations.
+Whenever order of the jobs' execution is important please use `serialOrdered` method._
+
+### Ordered Serial Iterations
+
+TBD
+
+For example [compare-property](compare-property) package.
+
+### Streaming interface
+
+TBD
+
+## Want to Know More?
+
+More examples can be found in [test folder](test/).
+
+Or open an [issue](https://github.com/alexindigo/asynckit/issues) with questions and/or suggestions.
+
+## License
+
+AsyncKit is licensed under the MIT license.
diff --git a/masteringModule/node_modules/asynckit/bench.js b/masteringModule/node_modules/asynckit/bench.js
new file mode 100644
index 0000000000000000000000000000000000000000..c612f1a55fda02075d146f05a14343a0c73e6fb6
--- /dev/null
+++ b/masteringModule/node_modules/asynckit/bench.js
@@ -0,0 +1,76 @@
+/* eslint no-console: "off" */
+
+var asynckit = require('./')
+ , async = require('async')
+ , assert = require('assert')
+ , expected = 0
+ ;
+
+var Benchmark = require('benchmark');
+var suite = new Benchmark.Suite;
+
+var source = [];
+for (var z = 1; z < 100; z++)
+{
+ source.push(z);
+ expected += z;
+}
+
+suite
+// add tests
+
+.add('async.map', function(deferred)
+{
+ var total = 0;
+
+ async.map(source,
+ function(i, cb)
+ {
+ setImmediate(function()
+ {
+ total += i;
+ cb(null, total);
+ });
+ },
+ function(err, result)
+ {
+ assert.ifError(err);
+ assert.equal(result[result.length - 1], expected);
+ deferred.resolve();
+ });
+}, {'defer': true})
+
+
+.add('asynckit.parallel', function(deferred)
+{
+ var total = 0;
+
+ asynckit.parallel(source,
+ function(i, cb)
+ {
+ setImmediate(function()
+ {
+ total += i;
+ cb(null, total);
+ });
+ },
+ function(err, result)
+ {
+ assert.ifError(err);
+ assert.equal(result[result.length - 1], expected);
+ deferred.resolve();
+ });
+}, {'defer': true})
+
+
+// add listeners
+.on('cycle', function(ev)
+{
+ console.log(String(ev.target));
+})
+.on('complete', function()
+{
+ console.log('Fastest is ' + this.filter('fastest').map('name'));
+})
+// run async
+.run({ 'async': true });
diff --git a/masteringModule/node_modules/asynckit/index.js b/masteringModule/node_modules/asynckit/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..455f9454ee6483f450a3c7b2e4570a10d6e78d39
--- /dev/null
+++ b/masteringModule/node_modules/asynckit/index.js
@@ -0,0 +1,6 @@
+module.exports =
+{
+ parallel : require('./parallel.js'),
+ serial : require('./serial.js'),
+ serialOrdered : require('./serialOrdered.js')
+};
diff --git a/masteringModule/node_modules/asynckit/lib/abort.js b/masteringModule/node_modules/asynckit/lib/abort.js
new file mode 100644
index 0000000000000000000000000000000000000000..114367e5fbf144ad085f0fbe8081ad8adb101dcb
--- /dev/null
+++ b/masteringModule/node_modules/asynckit/lib/abort.js
@@ -0,0 +1,29 @@
+// API
+module.exports = abort;
+
+/**
+ * Aborts leftover active jobs
+ *
+ * @param {object} state - current state object
+ */
+function abort(state)
+{
+ Object.keys(state.jobs).forEach(clean.bind(state));
+
+ // reset leftover jobs
+ state.jobs = {};
+}
+
+/**
+ * Cleans up leftover job by invoking abort function for the provided job id
+ *
+ * @this state
+ * @param {string|number} key - job id to abort
+ */
+function clean(key)
+{
+ if (typeof this.jobs[key] == 'function')
+ {
+ this.jobs[key]();
+ }
+}
diff --git a/masteringModule/node_modules/asynckit/lib/async.js b/masteringModule/node_modules/asynckit/lib/async.js
new file mode 100644
index 0000000000000000000000000000000000000000..7f1288a4ce9ae031b0778d38afe16dc477c59ab1
--- /dev/null
+++ b/masteringModule/node_modules/asynckit/lib/async.js
@@ -0,0 +1,34 @@
+var defer = require('./defer.js');
+
+// API
+module.exports = async;
+
+/**
+ * Runs provided callback asynchronously
+ * even if callback itself is not
+ *
+ * @param {function} callback - callback to invoke
+ * @returns {function} - augmented callback
+ */
+function async(callback)
+{
+ var isAsync = false;
+
+ // check if async happened
+ defer(function() { isAsync = true; });
+
+ return function async_callback(err, result)
+ {
+ if (isAsync)
+ {
+ callback(err, result);
+ }
+ else
+ {
+ defer(function nextTick_callback()
+ {
+ callback(err, result);
+ });
+ }
+ };
+}
diff --git a/masteringModule/node_modules/asynckit/lib/defer.js b/masteringModule/node_modules/asynckit/lib/defer.js
new file mode 100644
index 0000000000000000000000000000000000000000..b67110c7ad6e5501a355b3c96f410b4216f0fda0
--- /dev/null
+++ b/masteringModule/node_modules/asynckit/lib/defer.js
@@ -0,0 +1,26 @@
+module.exports = defer;
+
+/**
+ * Runs provided function on next iteration of the event loop
+ *
+ * @param {function} fn - function to run
+ */
+function defer(fn)
+{
+ var nextTick = typeof setImmediate == 'function'
+ ? setImmediate
+ : (
+ typeof process == 'object' && typeof process.nextTick == 'function'
+ ? process.nextTick
+ : null
+ );
+
+ if (nextTick)
+ {
+ nextTick(fn);
+ }
+ else
+ {
+ setTimeout(fn, 0);
+ }
+}
diff --git a/masteringModule/node_modules/asynckit/lib/iterate.js b/masteringModule/node_modules/asynckit/lib/iterate.js
new file mode 100644
index 0000000000000000000000000000000000000000..5d2839a590b2bac46489909265bc3010fdc62b28
--- /dev/null
+++ b/masteringModule/node_modules/asynckit/lib/iterate.js
@@ -0,0 +1,75 @@
+var async = require('./async.js')
+ , abort = require('./abort.js')
+ ;
+
+// API
+module.exports = iterate;
+
+/**
+ * Iterates over each job object
+ *
+ * @param {array|object} list - array or object (named list) to iterate over
+ * @param {function} iterator - iterator to run
+ * @param {object} state - current job status
+ * @param {function} callback - invoked when all elements processed
+ */
+function iterate(list, iterator, state, callback)
+{
+ // store current index
+ var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;
+
+ state.jobs[key] = runJob(iterator, key, list[key], function(error, output)
+ {
+ // don't repeat yourself
+ // skip secondary callbacks
+ if (!(key in state.jobs))
+ {
+ return;
+ }
+
+ // clean up jobs
+ delete state.jobs[key];
+
+ if (error)
+ {
+ // don't process rest of the results
+ // stop still active jobs
+ // and reset the list
+ abort(state);
+ }
+ else
+ {
+ state.results[key] = output;
+ }
+
+ // return salvaged results
+ callback(error, state.results);
+ });
+}
+
+/**
+ * Runs iterator over provided job element
+ *
+ * @param {function} iterator - iterator to invoke
+ * @param {string|number} key - key/index of the element in the list of jobs
+ * @param {mixed} item - job description
+ * @param {function} callback - invoked after iterator is done with the job
+ * @returns {function|mixed} - job abort function or something else
+ */
+function runJob(iterator, key, item, callback)
+{
+ var aborter;
+
+ // allow shortcut if iterator expects only two arguments
+ if (iterator.length == 2)
+ {
+ aborter = iterator(item, async(callback));
+ }
+ // otherwise go with full three arguments
+ else
+ {
+ aborter = iterator(item, key, async(callback));
+ }
+
+ return aborter;
+}
diff --git a/masteringModule/node_modules/asynckit/lib/readable_asynckit.js b/masteringModule/node_modules/asynckit/lib/readable_asynckit.js
new file mode 100644
index 0000000000000000000000000000000000000000..78ad240f0afd80d9a632fc108ac482f7143615d2
--- /dev/null
+++ b/masteringModule/node_modules/asynckit/lib/readable_asynckit.js
@@ -0,0 +1,91 @@
+var streamify = require('./streamify.js')
+ , defer = require('./defer.js')
+ ;
+
+// API
+module.exports = ReadableAsyncKit;
+
+/**
+ * Base constructor for all streams
+ * used to hold properties/methods
+ */
+function ReadableAsyncKit()
+{
+ ReadableAsyncKit.super_.apply(this, arguments);
+
+ // list of active jobs
+ this.jobs = {};
+
+ // add stream methods
+ this.destroy = destroy;
+ this._start = _start;
+ this._read = _read;
+}
+
+/**
+ * Destroys readable stream,
+ * by aborting outstanding jobs
+ *
+ * @returns {void}
+ */
+function destroy()
+{
+ if (this.destroyed)
+ {
+ return;
+ }
+
+ this.destroyed = true;
+
+ if (typeof this.terminator == 'function')
+ {
+ this.terminator();
+ }
+}
+
+/**
+ * Starts provided jobs in async manner
+ *
+ * @private
+ */
+function _start()
+{
+ // first argument – runner function
+ var runner = arguments[0]
+ // take away first argument
+ , args = Array.prototype.slice.call(arguments, 1)
+ // second argument - input data
+ , input = args[0]
+ // last argument - result callback
+ , endCb = streamify.callback.call(this, args[args.length - 1])
+ ;
+
+ args[args.length - 1] = endCb;
+ // third argument - iterator
+ args[1] = streamify.iterator.call(this, args[1]);
+
+ // allow time for proper setup
+ defer(function()
+ {
+ if (!this.destroyed)
+ {
+ this.terminator = runner.apply(null, args);
+ }
+ else
+ {
+ endCb(null, Array.isArray(input) ? [] : {});
+ }
+ }.bind(this));
+}
+
+
+/**
+ * Implement _read to comply with Readable streams
+ * Doesn't really make sense for flowing object mode
+ *
+ * @private
+ */
+function _read()
+{
+
+}
diff --git a/masteringModule/node_modules/asynckit/lib/readable_parallel.js b/masteringModule/node_modules/asynckit/lib/readable_parallel.js
new file mode 100644
index 0000000000000000000000000000000000000000..5d2929f7a67750caca25e51ed80ced22c3f43e64
--- /dev/null
+++ b/masteringModule/node_modules/asynckit/lib/readable_parallel.js
@@ -0,0 +1,25 @@
+var parallel = require('../parallel.js');
+
+// API
+module.exports = ReadableParallel;
+
+/**
+ * Streaming wrapper to `asynckit.parallel`
+ *
+ * @param {array|object} list - array or object (named list) to iterate over
+ * @param {function} iterator - iterator to run
+ * @param {function} callback - invoked when all elements processed
+ * @returns {stream.Readable#}
+ */
+function ReadableParallel(list, iterator, callback)
+{
+ if (!(this instanceof ReadableParallel))
+ {
+ return new ReadableParallel(list, iterator, callback);
+ }
+
+ // turn on object mode
+ ReadableParallel.super_.call(this, {objectMode: true});
+
+ this._start(parallel, list, iterator, callback);
+}
diff --git a/masteringModule/node_modules/asynckit/lib/readable_serial.js b/masteringModule/node_modules/asynckit/lib/readable_serial.js
new file mode 100644
index 0000000000000000000000000000000000000000..78226982041ce40c7ed2906b34d3cd13b880767a
--- /dev/null
+++ b/masteringModule/node_modules/asynckit/lib/readable_serial.js
@@ -0,0 +1,25 @@
+var serial = require('../serial.js');
+
+// API
+module.exports = ReadableSerial;
+
+/**
+ * Streaming wrapper to `asynckit.serial`
+ *
+ * @param {array|object} list - array or object (named list) to iterate over
+ * @param {function} iterator - iterator to run
+ * @param {function} callback - invoked when all elements processed
+ * @returns {stream.Readable#}
+ */
+function ReadableSerial(list, iterator, callback)
+{
+ if (!(this instanceof ReadableSerial))
+ {
+ return new ReadableSerial(list, iterator, callback);
+ }
+
+ // turn on object mode
+ ReadableSerial.super_.call(this, {objectMode: true});
+
+ this._start(serial, list, iterator, callback);
+}
diff --git a/masteringModule/node_modules/asynckit/lib/readable_serial_ordered.js b/masteringModule/node_modules/asynckit/lib/readable_serial_ordered.js
new file mode 100644
index 0000000000000000000000000000000000000000..3de89c47291b403fa38a8340c11d4db0eb99c751
--- /dev/null
+++ b/masteringModule/node_modules/asynckit/lib/readable_serial_ordered.js
@@ -0,0 +1,29 @@
+var serialOrdered = require('../serialOrdered.js');
+
+// API
+module.exports = ReadableSerialOrdered;
+// expose sort helpers
+module.exports.ascending = serialOrdered.ascending;
+module.exports.descending = serialOrdered.descending;
+
+/**
+ * Streaming wrapper to `asynckit.serialOrdered`
+ *
+ * @param {array|object} list - array or object (named list) to iterate over
+ * @param {function} iterator - iterator to run
+ * @param {function} sortMethod - custom sort function
+ * @param {function} callback - invoked when all elements processed
+ * @returns {stream.Readable#}
+ */
+function ReadableSerialOrdered(list, iterator, sortMethod, callback)
+{
+ if (!(this instanceof ReadableSerialOrdered))
+ {
+ return new ReadableSerialOrdered(list, iterator, sortMethod, callback);
+ }
+
+ // turn on object mode
+ ReadableSerialOrdered.super_.call(this, {objectMode: true});
+
+ this._start(serialOrdered, list, iterator, sortMethod, callback);
+}
diff --git a/masteringModule/node_modules/asynckit/lib/state.js b/masteringModule/node_modules/asynckit/lib/state.js
new file mode 100644
index 0000000000000000000000000000000000000000..cbea7ad8f6bc63f0b9c5710b942852f9041edf73
--- /dev/null
+++ b/masteringModule/node_modules/asynckit/lib/state.js
@@ -0,0 +1,37 @@
+// API
+module.exports = state;
+
+/**
+ * Creates initial state object
+ * for iteration over list
+ *
+ * @param {array|object} list - list to iterate over
+ * @param {function|null} sortMethod - function to use for keys sort,
+ * or `null` to keep them as is
+ * @returns {object} - initial state object
+ */
+function state(list, sortMethod)
+{
+ var isNamedList = !Array.isArray(list)
+ , initState =
+ {
+ index : 0,
+ keyedList: isNamedList || sortMethod ? Object.keys(list) : null,
+ jobs : {},
+ results : isNamedList ? {} : [],
+ size : isNamedList ? Object.keys(list).length : list.length
+ }
+ ;
+
+ if (sortMethod)
+ {
+ // sort array keys based on it's values
+ // sort object's keys just on own merit
+ initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)
+ {
+ return sortMethod(list[a], list[b]);
+ });
+ }
+
+ return initState;
+}
diff --git a/masteringModule/node_modules/asynckit/lib/streamify.js b/masteringModule/node_modules/asynckit/lib/streamify.js
new file mode 100644
index 0000000000000000000000000000000000000000..f56a1c92bf5c21380396826493eff1be86f19027
--- /dev/null
+++ b/masteringModule/node_modules/asynckit/lib/streamify.js
@@ -0,0 +1,141 @@
+var async = require('./async.js');
+
+// API
+module.exports = {
+ iterator: wrapIterator,
+ callback: wrapCallback
+};
+
+/**
+ * Wraps iterators with long signature
+ *
+ * @this ReadableAsyncKit#
+ * @param {function} iterator - function to wrap
+ * @returns {function} - wrapped function
+ */
+function wrapIterator(iterator)
+{
+ var stream = this;
+
+ return function(item, key, cb)
+ {
+ var aborter
+ , wrappedCb = async(wrapIteratorCallback.call(stream, cb, key))
+ ;
+
+ stream.jobs[key] = wrappedCb;
+
+ // it's either shortcut (item, cb)
+ if (iterator.length == 2)
+ {
+ aborter = iterator(item, wrappedCb);
+ }
+ // or long format (item, key, cb)
+ else
+ {
+ aborter = iterator(item, key, wrappedCb);
+ }
+
+ return aborter;
+ };
+}
+
+/**
+ * Wraps provided callback function
+ * allowing to execute snitch function before
+ * real callback
+ *
+ * @this ReadableAsyncKit#
+ * @param {function} callback - function to wrap
+ * @returns {function} - wrapped function
+ */
+function wrapCallback(callback)
+{
+ var stream = this;
+
+ var wrapped = function(error, result)
+ {
+ return finisher.call(stream, error, result, callback);
+ };
+
+ return wrapped;
+}
+
+/**
+ * Wraps provided iterator callback function
+ * makes sure snitch only called once,
+ * but passes secondary calls to the original callback
+ *
+ * @this ReadableAsyncKit#
+ * @param {function} callback - callback to wrap
+ * @param {number|string} key - iteration key
+ * @returns {function} wrapped callback
+ */
+function wrapIteratorCallback(callback, key)
+{
+ var stream = this;
+
+ return function(error, output)
+ {
+ // don't repeat yourself
+ if (!(key in stream.jobs))
+ {
+ callback(error, output);
+ return;
+ }
+
+ // clean up jobs
+ delete stream.jobs[key];
+
+ return streamer.call(stream, error, {key: key, value: output}, callback);
+ };
+}
+
+/**
+ * Stream wrapper for iterator callback
+ *
+ * @this ReadableAsyncKit#
+ * @param {mixed} error - error response
+ * @param {mixed} output - iterator output
+ * @param {function} callback - callback that expects iterator results
+ */
+function streamer(error, output, callback)
+{
+ if (error && !this.error)
+ {
+ this.error = error;
+ this.pause();
+ this.emit('error', error);
+ // send back value only, as expected
+ callback(error, output && output.value);
+ return;
+ }
+
+ // stream stuff
+ this.push(output);
+
+ // back to original track
+ // send back value only, as expected
+ callback(error, output && output.value);
+}
+
+/**
+ * Stream wrapper for finishing callback
+ *
+ * @this ReadableAsyncKit#
+ * @param {mixed} error - error response
+ * @param {mixed} output - iterator output
+ * @param {function} callback - callback that expects final results
+ */
+function finisher(error, output, callback)
+{
+ // signal end of the stream
+ // only for successfully finished streams
+ if (!error)
+ {
+ this.push(null);
+ }
+
+ // back to original track
+ callback(error, output);
+}
diff --git a/masteringModule/node_modules/asynckit/lib/terminator.js b/masteringModule/node_modules/asynckit/lib/terminator.js
new file mode 100644
index 0000000000000000000000000000000000000000..d6eb99219f3d9d9d44a688312c204059aaf312f0
--- /dev/null
+++ b/masteringModule/node_modules/asynckit/lib/terminator.js
@@ -0,0 +1,29 @@
+var abort = require('./abort.js')
+ , async = require('./async.js')
+ ;
+
+// API
+module.exports = terminator;
+
+/**
+ * Terminates jobs in the attached state context
+ *
+ * @this AsyncKitState#
+ * @param {function} callback - final callback to invoke after termination
+ */
+function terminator(callback)
+{
+ if (!Object.keys(this.jobs).length)
+ {
+ return;
+ }
+
+ // fast forward iteration index
+ this.index = this.size;
+
+ // abort jobs
+ abort(this);
+
+ // send back results we have so far
+ async(callback)(null, this.results);
+}
diff --git a/masteringModule/node_modules/asynckit/package.json b/masteringModule/node_modules/asynckit/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..51147d6569aa0f44c087b01b93ff2db52bd1b2b7
--- /dev/null
+++ b/masteringModule/node_modules/asynckit/package.json
@@ -0,0 +1,63 @@
+{
+ "name": "asynckit",
+ "version": "0.4.0",
+ "description": "Minimal async jobs utility library, with streams support",
+ "main": "index.js",
+ "scripts": {
+ "clean": "rimraf coverage",
+ "lint": "eslint *.js lib/*.js test/*.js",
+ "test": "istanbul cover --reporter=json tape -- 'test/test-*.js' | tap-spec",
+ "win-test": "tape test/test-*.js",
+ "browser": "browserify -t browserify-istanbul test/lib/browserify_adjustment.js test/test-*.js | obake --coverage | tap-spec",
+ "report": "istanbul report",
+ "size": "browserify index.js | size-table asynckit",
+ "debug": "tape test/test-*.js"
+ },
+ "pre-commit": [
+ "clean",
+ "lint",
+ "test",
+ "browser",
+ "report",
+ "size"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/alexindigo/asynckit.git"
+ },
+ "keywords": [
+ "async",
+ "jobs",
+ "parallel",
+ "serial",
+ "iterator",
+ "array",
+ "object",
+ "stream",
+ "destroy",
+ "terminate",
+ "abort"
+ ],
+ "author": "Alex Indigo ",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/alexindigo/asynckit/issues"
+ },
+ "homepage": "https://github.com/alexindigo/asynckit#readme",
+ "devDependencies": {
+ "browserify": "^13.0.0",
+ "browserify-istanbul": "^2.0.0",
+ "coveralls": "^2.11.9",
+ "eslint": "^2.9.0",
+ "istanbul": "^0.4.3",
+ "obake": "^0.1.2",
+ "phantomjs-prebuilt": "^2.1.7",
+ "pre-commit": "^1.1.3",
+ "reamde": "^1.1.0",
+ "rimraf": "^2.5.2",
+ "size-table": "^0.2.0",
+ "tap-spec": "^4.1.1",
+ "tape": "^4.5.1"
+ },
+ "dependencies": {}
+}
diff --git a/masteringModule/node_modules/asynckit/parallel.js b/masteringModule/node_modules/asynckit/parallel.js
new file mode 100644
index 0000000000000000000000000000000000000000..3c50344d8515f80a01d21bf7bc61cadf363e24cd
--- /dev/null
+++ b/masteringModule/node_modules/asynckit/parallel.js
@@ -0,0 +1,43 @@
+var iterate = require('./lib/iterate.js')
+ , initState = require('./lib/state.js')
+ , terminator = require('./lib/terminator.js')
+ ;
+
+// Public API
+module.exports = parallel;
+
+/**
+ * Runs iterator over provided array elements in parallel
+ *
+ * @param {array|object} list - array or object (named list) to iterate over
+ * @param {function} iterator - iterator to run
+ * @param {function} callback - invoked when all elements processed
+ * @returns {function} - jobs terminator
+ */
+function parallel(list, iterator, callback)
+{
+ var state = initState(list);
+
+ while (state.index < (state['keyedList'] || list).length)
+ {
+ iterate(list, iterator, state, function(error, result)
+ {
+ if (error)
+ {
+ callback(error, result);
+ return;
+ }
+
+ // looks like it's the last one
+ if (Object.keys(state.jobs).length === 0)
+ {
+ callback(null, state.results);
+ return;
+ }
+ });
+
+ state.index++;
+ }
+
+ return terminator.bind(state, callback);
+}
diff --git a/masteringModule/node_modules/asynckit/serial.js b/masteringModule/node_modules/asynckit/serial.js
new file mode 100644
index 0000000000000000000000000000000000000000..6cd949a6777137da8128895053b743915ac7d067
--- /dev/null
+++ b/masteringModule/node_modules/asynckit/serial.js
@@ -0,0 +1,17 @@
+var serialOrdered = require('./serialOrdered.js');
+
+// Public API
+module.exports = serial;
+
+/**
+ * Runs iterator over provided array elements in series
+ *
+ * @param {array|object} list - array or object (named list) to iterate over
+ * @param {function} iterator - iterator to run
+ * @param {function} callback - invoked when all elements processed
+ * @returns {function} - jobs terminator
+ */
+function serial(list, iterator, callback)
+{
+ return serialOrdered(list, iterator, null, callback);
+}
diff --git a/masteringModule/node_modules/asynckit/serialOrdered.js b/masteringModule/node_modules/asynckit/serialOrdered.js
new file mode 100644
index 0000000000000000000000000000000000000000..607eafea56cb060292269b11c9809777c11abf62
--- /dev/null
+++ b/masteringModule/node_modules/asynckit/serialOrdered.js
@@ -0,0 +1,75 @@
+var iterate = require('./lib/iterate.js')
+ , initState = require('./lib/state.js')
+ , terminator = require('./lib/terminator.js')
+ ;
+
+// Public API
+module.exports = serialOrdered;
+// sorting helpers
+module.exports.ascending = ascending;
+module.exports.descending = descending;
+
+/**
+ * Runs iterator over provided sorted array elements in series
+ *
+ * @param {array|object} list - array or object (named list) to iterate over
+ * @param {function} iterator - iterator to run
+ * @param {function} sortMethod - custom sort function
+ * @param {function} callback - invoked when all elements processed
+ * @returns {function} - jobs terminator
+ */
+function serialOrdered(list, iterator, sortMethod, callback)
+{
+ var state = initState(list, sortMethod);
+
+ iterate(list, iterator, state, function iteratorHandler(error, result)
+ {
+ if (error)
+ {
+ callback(error, result);
+ return;
+ }
+
+ state.index++;
+
+ // are we there yet?
+ if (state.index < (state['keyedList'] || list).length)
+ {
+ iterate(list, iterator, state, iteratorHandler);
+ return;
+ }
+
+ // done here
+ callback(null, state.results);
+ });
+
+ return terminator.bind(state, callback);
+}
+
+/*
+ * -- Sort methods
+ */
+
+/**
+ * sort helper to sort array elements in ascending order
+ *
+ * @param {mixed} a - an item to compare
+ * @param {mixed} b - an item to compare
+ * @returns {number} - comparison result
+ */
+function ascending(a, b)
+{
+ return a < b ? -1 : a > b ? 1 : 0;
+}
+
+/**
+ * sort helper to sort array elements in descending order
+ *
+ * @param {mixed} a - an item to compare
+ * @param {mixed} b - an item to compare
+ * @returns {number} - comparison result
+ */
+function descending(a, b)
+{
+ return -1 * ascending(a, b);
+}
diff --git a/masteringModule/node_modules/asynckit/stream.js b/masteringModule/node_modules/asynckit/stream.js
new file mode 100644
index 0000000000000000000000000000000000000000..d43465f903ed6354a2ceae4a182768838955b528
--- /dev/null
+++ b/masteringModule/node_modules/asynckit/stream.js
@@ -0,0 +1,21 @@
+var inherits = require('util').inherits
+ , Readable = require('stream').Readable
+ , ReadableAsyncKit = require('./lib/readable_asynckit.js')
+ , ReadableParallel = require('./lib/readable_parallel.js')
+ , ReadableSerial = require('./lib/readable_serial.js')
+ , ReadableSerialOrdered = require('./lib/readable_serial_ordered.js')
+ ;
+
+// API
+module.exports =
+{
+ parallel : ReadableParallel,
+ serial : ReadableSerial,
+ serialOrdered : ReadableSerialOrdered,
+};
+
+inherits(ReadableAsyncKit, Readable);
+
+inherits(ReadableParallel, ReadableAsyncKit);
+inherits(ReadableSerial, ReadableAsyncKit);
+inherits(ReadableSerialOrdered, ReadableAsyncKit);
diff --git a/masteringModule/node_modules/call-bind/.eslintignore b/masteringModule/node_modules/call-bind/.eslintignore
new file mode 100644
index 0000000000000000000000000000000000000000..404abb22121cdcbb710c56f4ba2684789cb2868c
--- /dev/null
+++ b/masteringModule/node_modules/call-bind/.eslintignore
@@ -0,0 +1 @@
+coverage/
diff --git a/masteringModule/node_modules/call-bind/.eslintrc b/masteringModule/node_modules/call-bind/.eslintrc
new file mode 100644
index 0000000000000000000000000000000000000000..e5d3c9a945dea54591a5da5c5c90e886b4c5a5be
--- /dev/null
+++ b/masteringModule/node_modules/call-bind/.eslintrc
@@ -0,0 +1,17 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "rules": {
+ "func-name-matching": 0,
+ "id-length": 0,
+ "new-cap": [2, {
+ "capIsNewExceptions": [
+ "GetIntrinsic",
+ ],
+ }],
+ "no-magic-numbers": 0,
+ "operator-linebreak": [2, "before"],
+ },
+}
diff --git a/masteringModule/node_modules/call-bind/.github/FUNDING.yml b/masteringModule/node_modules/call-bind/.github/FUNDING.yml
new file mode 100644
index 0000000000000000000000000000000000000000..c70c2ecdb216df098ffbaba7773e6d8cf52e9bf3
--- /dev/null
+++ b/masteringModule/node_modules/call-bind/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: [ljharb]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: npm/call-bind
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/masteringModule/node_modules/call-bind/.nycrc b/masteringModule/node_modules/call-bind/.nycrc
new file mode 100644
index 0000000000000000000000000000000000000000..1826526e091b89c896e7099ccd891db79165e329
--- /dev/null
+++ b/masteringModule/node_modules/call-bind/.nycrc
@@ -0,0 +1,13 @@
+{
+ "all": true,
+ "check-coverage": false,
+ "reporter": ["text-summary", "text", "html", "json"],
+ "lines": 86,
+ "statements": 85.93,
+ "functions": 82.43,
+ "branches": 76.06,
+ "exclude": [
+ "coverage",
+ "test"
+ ]
+}
diff --git a/masteringModule/node_modules/call-bind/CHANGELOG.md b/masteringModule/node_modules/call-bind/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..62a37279ec6443c115d52ab16bed5c8645e6f3b6
--- /dev/null
+++ b/masteringModule/node_modules/call-bind/CHANGELOG.md
@@ -0,0 +1,42 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## [v1.0.2](https://github.com/ljharb/call-bind/compare/v1.0.1...v1.0.2) - 2021-01-11
+
+### Commits
+
+- [Fix] properly include the receiver in the bound length [`dbae7bc`](https://github.com/ljharb/call-bind/commit/dbae7bc676c079a0d33c0a43e9ef92cb7b01345d)
+
+## [v1.0.1](https://github.com/ljharb/call-bind/compare/v1.0.0...v1.0.1) - 2021-01-08
+
+### Commits
+
+- [Tests] migrate tests to Github Actions [`b6db284`](https://github.com/ljharb/call-bind/commit/b6db284c36f8ccd195b88a6764fe84b7223a0da1)
+- [meta] do not publish github action workflow files [`ec7fe46`](https://github.com/ljharb/call-bind/commit/ec7fe46e60cfa4764ee943d2755f5e5a366e578e)
+- [Fix] preserve original function’s length when possible [`adbceaa`](https://github.com/ljharb/call-bind/commit/adbceaa3cac4b41ea78bb19d7ccdbaaf7e0bdadb)
+- [Tests] gather coverage data on every job [`d69e23c`](https://github.com/ljharb/call-bind/commit/d69e23cc65f101ba1d4c19bb07fa8eb0ec624be8)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`2fd3586`](https://github.com/ljharb/call-bind/commit/2fd3586c5d47b335364c14293114c6b625ae1f71)
+- [Deps] update `get-intrinsic` [`f23e931`](https://github.com/ljharb/call-bind/commit/f23e9318cc271c2add8bb38cfded85ee7baf8eee)
+- [Deps] update `get-intrinsic` [`72d9f44`](https://github.com/ljharb/call-bind/commit/72d9f44e184465ba8dd3fb48260bbcff234985f2)
+- [meta] fix FUNDING.yml [`e723573`](https://github.com/ljharb/call-bind/commit/e723573438c5a68dcec31fb5d96ea6b7e4a93be8)
+- [eslint] ignore coverage output [`15e76d2`](https://github.com/ljharb/call-bind/commit/15e76d28a5f43e504696401e5b31ebb78ee1b532)
+- [meta] add Automatic Rebase and Require Allow Edits workflows [`8fa4dab`](https://github.com/ljharb/call-bind/commit/8fa4dabb23ba3dd7bb92c9571c1241c08b56e4b6)
+
+## v1.0.0 - 2020-10-30
+
+### Commits
+
+- Initial commit [`306cf98`](https://github.com/ljharb/call-bind/commit/306cf98c7ec9e7ef66b653ec152277ac1381eb50)
+- Tests [`e10d0bb`](https://github.com/ljharb/call-bind/commit/e10d0bbdadc7a10ecedc9a1c035112d3e368b8df)
+- Implementation [`43852ed`](https://github.com/ljharb/call-bind/commit/43852eda0f187327b7fad2423ca972149a52bd65)
+- npm init [`408f860`](https://github.com/ljharb/call-bind/commit/408f860b773a2f610805fd3613d0d71bac1b6249)
+- [meta] add Automatic Rebase and Require Allow Edits workflows [`fb349b2`](https://github.com/ljharb/call-bind/commit/fb349b2e48defbec8b5ec8a8395cc8f69f220b13)
+- [meta] add `auto-changelog` [`c4001fc`](https://github.com/ljharb/call-bind/commit/c4001fc43031799ef908211c98d3b0fb2b60fde4)
+- [meta] add "funding"; create `FUNDING.yml` [`d4d6d29`](https://github.com/ljharb/call-bind/commit/d4d6d2974a14bc2e98830468eda7fe6d6a776717)
+- [Tests] add `npm run lint` [`dedfb98`](https://github.com/ljharb/call-bind/commit/dedfb98bd0ecefb08ddb9a94061bd10cde4332af)
+- Only apps should have lockfiles [`54ac776`](https://github.com/ljharb/call-bind/commit/54ac77653db45a7361dc153d2f478e743f110650)
+- [meta] add `safe-publish-latest` [`9ea8e43`](https://github.com/ljharb/call-bind/commit/9ea8e435b950ce9b705559cd651039f9bf40140f)
diff --git a/masteringModule/node_modules/call-bind/LICENSE b/masteringModule/node_modules/call-bind/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..48f05d01d0acae75acada5bd42a3442d0699d067
--- /dev/null
+++ b/masteringModule/node_modules/call-bind/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 Jordan Harband
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/masteringModule/node_modules/call-bind/README.md b/masteringModule/node_modules/call-bind/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..53649eb4622446f00cafc3b657bf127e5c9e6889
--- /dev/null
+++ b/masteringModule/node_modules/call-bind/README.md
@@ -0,0 +1,2 @@
+# call-bind
+Robustly `.call.bind()` a function.
diff --git a/masteringModule/node_modules/call-bind/callBound.js b/masteringModule/node_modules/call-bind/callBound.js
new file mode 100644
index 0000000000000000000000000000000000000000..8374adfd0549fef7cc678ab66089596afb7f8172
--- /dev/null
+++ b/masteringModule/node_modules/call-bind/callBound.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var callBind = require('./');
+
+var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));
+
+module.exports = function callBoundIntrinsic(name, allowMissing) {
+ var intrinsic = GetIntrinsic(name, !!allowMissing);
+ if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {
+ return callBind(intrinsic);
+ }
+ return intrinsic;
+};
diff --git a/masteringModule/node_modules/call-bind/index.js b/masteringModule/node_modules/call-bind/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..6fa3e4af7e19fd9d15e61bf77d96f8ca4e7d5b74
--- /dev/null
+++ b/masteringModule/node_modules/call-bind/index.js
@@ -0,0 +1,47 @@
+'use strict';
+
+var bind = require('function-bind');
+var GetIntrinsic = require('get-intrinsic');
+
+var $apply = GetIntrinsic('%Function.prototype.apply%');
+var $call = GetIntrinsic('%Function.prototype.call%');
+var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);
+
+var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);
+var $defineProperty = GetIntrinsic('%Object.defineProperty%', true);
+var $max = GetIntrinsic('%Math.max%');
+
+if ($defineProperty) {
+ try {
+ $defineProperty({}, 'a', { value: 1 });
+ } catch (e) {
+ // IE 8 has a broken defineProperty
+ $defineProperty = null;
+ }
+}
+
+module.exports = function callBind(originalFunction) {
+ var func = $reflectApply(bind, $call, arguments);
+ if ($gOPD && $defineProperty) {
+ var desc = $gOPD(func, 'length');
+ if (desc.configurable) {
+ // original length, plus the receiver, minus any additional arguments (after the receiver)
+ $defineProperty(
+ func,
+ 'length',
+ { value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }
+ );
+ }
+ }
+ return func;
+};
+
+var applyBind = function applyBind() {
+ return $reflectApply(bind, $apply, arguments);
+};
+
+if ($defineProperty) {
+ $defineProperty(module.exports, 'apply', { value: applyBind });
+} else {
+ module.exports.apply = applyBind;
+}
diff --git a/masteringModule/node_modules/call-bind/package.json b/masteringModule/node_modules/call-bind/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..4360556a7fa0f1c3028fdff69e55efea26f776e3
--- /dev/null
+++ b/masteringModule/node_modules/call-bind/package.json
@@ -0,0 +1,80 @@
+{
+ "name": "call-bind",
+ "version": "1.0.2",
+ "description": "Robustly `.call.bind()` a function",
+ "main": "index.js",
+ "exports": {
+ ".": [
+ {
+ "default": "./index.js"
+ },
+ "./index.js"
+ ],
+ "./callBound": [
+ {
+ "default": "./callBound.js"
+ },
+ "./callBound.js"
+ ],
+ "./package.json": "./package.json"
+ },
+ "scripts": {
+ "prepublish": "safe-publish-latest",
+ "lint": "eslint --ext=.js,.mjs .",
+ "pretest": "npm run lint",
+ "tests-only": "nyc tape 'test/*'",
+ "test": "npm run tests-only",
+ "posttest": "aud --production",
+ "version": "auto-changelog && git add CHANGELOG.md",
+ "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\""
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/ljharb/call-bind.git"
+ },
+ "keywords": [
+ "javascript",
+ "ecmascript",
+ "es",
+ "js",
+ "callbind",
+ "callbound",
+ "call",
+ "bind",
+ "bound",
+ "call-bind",
+ "call-bound",
+ "function",
+ "es-abstract"
+ ],
+ "author": "Jordan Harband ",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/ljharb/call-bind/issues"
+ },
+ "homepage": "https://github.com/ljharb/call-bind#readme",
+ "devDependencies": {
+ "@ljharb/eslint-config": "^17.3.0",
+ "aud": "^1.1.3",
+ "auto-changelog": "^2.2.1",
+ "eslint": "^7.17.0",
+ "nyc": "^10.3.2",
+ "safe-publish-latest": "^1.1.4",
+ "tape": "^5.1.1"
+ },
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ },
+ "auto-changelog": {
+ "output": "CHANGELOG.md",
+ "template": "keepachangelog",
+ "unreleased": false,
+ "commitLimit": false,
+ "backfillLimit": false,
+ "hideCredit": true
+ }
+}
diff --git a/masteringModule/node_modules/call-bind/test/callBound.js b/masteringModule/node_modules/call-bind/test/callBound.js
new file mode 100644
index 0000000000000000000000000000000000000000..209ce3cc3b267b7ee6448f591590b312ee35721a
--- /dev/null
+++ b/masteringModule/node_modules/call-bind/test/callBound.js
@@ -0,0 +1,55 @@
+'use strict';
+
+var test = require('tape');
+
+var callBound = require('../callBound');
+
+test('callBound', function (t) {
+ // static primitive
+ t.equal(callBound('Array.length'), Array.length, 'Array.length yields itself');
+ t.equal(callBound('%Array.length%'), Array.length, '%Array.length% yields itself');
+
+ // static non-function object
+ t.equal(callBound('Array.prototype'), Array.prototype, 'Array.prototype yields itself');
+ t.equal(callBound('%Array.prototype%'), Array.prototype, '%Array.prototype% yields itself');
+ t.equal(callBound('Array.constructor'), Array.constructor, 'Array.constructor yields itself');
+ t.equal(callBound('%Array.constructor%'), Array.constructor, '%Array.constructor% yields itself');
+
+ // static function
+ t.equal(callBound('Date.parse'), Date.parse, 'Date.parse yields itself');
+ t.equal(callBound('%Date.parse%'), Date.parse, '%Date.parse% yields itself');
+
+ // prototype primitive
+ t.equal(callBound('Error.prototype.message'), Error.prototype.message, 'Error.prototype.message yields itself');
+ t.equal(callBound('%Error.prototype.message%'), Error.prototype.message, '%Error.prototype.message% yields itself');
+
+ // prototype function
+ t.notEqual(callBound('Object.prototype.toString'), Object.prototype.toString, 'Object.prototype.toString does not yield itself');
+ t.notEqual(callBound('%Object.prototype.toString%'), Object.prototype.toString, '%Object.prototype.toString% does not yield itself');
+ t.equal(callBound('Object.prototype.toString')(true), Object.prototype.toString.call(true), 'call-bound Object.prototype.toString calls into the original');
+ t.equal(callBound('%Object.prototype.toString%')(true), Object.prototype.toString.call(true), 'call-bound %Object.prototype.toString% calls into the original');
+
+ t['throws'](
+ function () { callBound('does not exist'); },
+ SyntaxError,
+ 'nonexistent intrinsic throws'
+ );
+ t['throws'](
+ function () { callBound('does not exist', true); },
+ SyntaxError,
+ 'allowMissing arg still throws for unknown intrinsic'
+ );
+
+ /* globals WeakRef: false */
+ t.test('real but absent intrinsic', { skip: typeof WeakRef !== 'undefined' }, function (st) {
+ st['throws'](
+ function () { callBound('WeakRef'); },
+ TypeError,
+ 'real but absent intrinsic throws'
+ );
+ st.equal(callBound('WeakRef', true), undefined, 'allowMissing arg avoids exception');
+ st.end();
+ });
+
+ t.end();
+});
diff --git a/masteringModule/node_modules/call-bind/test/index.js b/masteringModule/node_modules/call-bind/test/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..bf6769c7c89bfadc46132f1ffe91eb72081092fe
--- /dev/null
+++ b/masteringModule/node_modules/call-bind/test/index.js
@@ -0,0 +1,66 @@
+'use strict';
+
+var callBind = require('../');
+var bind = require('function-bind');
+
+var test = require('tape');
+
+/*
+ * older engines have length nonconfigurable
+ * in io.js v3, it is configurable except on bound functions, hence the .bind()
+ */
+var functionsHaveConfigurableLengths = !!(
+ Object.getOwnPropertyDescriptor
+ && Object.getOwnPropertyDescriptor(bind.call(function () {}), 'length').configurable
+);
+
+test('callBind', function (t) {
+ var sentinel = { sentinel: true };
+ var func = function (a, b) {
+ // eslint-disable-next-line no-invalid-this
+ return [this, a, b];
+ };
+ t.equal(func.length, 2, 'original function length is 2');
+ t.deepEqual(func(), [undefined, undefined, undefined], 'unbound func with too few args');
+ t.deepEqual(func(1, 2), [undefined, 1, 2], 'unbound func with right args');
+ t.deepEqual(func(1, 2, 3), [undefined, 1, 2], 'unbound func with too many args');
+
+ var bound = callBind(func);
+ t.equal(bound.length, func.length + 1, 'function length is preserved', { skip: !functionsHaveConfigurableLengths });
+ t.deepEqual(bound(), [undefined, undefined, undefined], 'bound func with too few args');
+ t.deepEqual(bound(1, 2), [1, 2, undefined], 'bound func with right args');
+ t.deepEqual(bound(1, 2, 3), [1, 2, 3], 'bound func with too many args');
+
+ var boundR = callBind(func, sentinel);
+ t.equal(boundR.length, func.length, 'function length is preserved', { skip: !functionsHaveConfigurableLengths });
+ t.deepEqual(boundR(), [sentinel, undefined, undefined], 'bound func with receiver, with too few args');
+ t.deepEqual(boundR(1, 2), [sentinel, 1, 2], 'bound func with receiver, with right args');
+ t.deepEqual(boundR(1, 2, 3), [sentinel, 1, 2], 'bound func with receiver, with too many args');
+
+ var boundArg = callBind(func, sentinel, 1);
+ t.equal(boundArg.length, func.length - 1, 'function length is preserved', { skip: !functionsHaveConfigurableLengths });
+ t.deepEqual(boundArg(), [sentinel, 1, undefined], 'bound func with receiver and arg, with too few args');
+ t.deepEqual(boundArg(2), [sentinel, 1, 2], 'bound func with receiver and arg, with right arg');
+ t.deepEqual(boundArg(2, 3), [sentinel, 1, 2], 'bound func with receiver and arg, with too many args');
+
+ t.test('callBind.apply', function (st) {
+ var aBound = callBind.apply(func);
+ st.deepEqual(aBound(sentinel), [sentinel, undefined, undefined], 'apply-bound func with no args');
+ st.deepEqual(aBound(sentinel, [1], 4), [sentinel, 1, undefined], 'apply-bound func with too few args');
+ st.deepEqual(aBound(sentinel, [1, 2], 4), [sentinel, 1, 2], 'apply-bound func with right args');
+
+ var aBoundArg = callBind.apply(func);
+ st.deepEqual(aBoundArg(sentinel, [1, 2, 3], 4), [sentinel, 1, 2], 'apply-bound func with too many args');
+ st.deepEqual(aBoundArg(sentinel, [1, 2], 4), [sentinel, 1, 2], 'apply-bound func with right args');
+ st.deepEqual(aBoundArg(sentinel, [1], 4), [sentinel, 1, undefined], 'apply-bound func with too few args');
+
+ var aBoundR = callBind.apply(func, sentinel);
+ st.deepEqual(aBoundR([1, 2, 3], 4), [sentinel, 1, 2], 'apply-bound func with receiver and too many args');
+ st.deepEqual(aBoundR([1, 2], 4), [sentinel, 1, 2], 'apply-bound func with receiver and right args');
+ st.deepEqual(aBoundR([1], 4), [sentinel, 1, undefined], 'apply-bound func with receiver and too few args');
+
+ st.end();
+ });
+
+ t.end();
+});
diff --git a/masteringModule/node_modules/combined-stream/License b/masteringModule/node_modules/combined-stream/License
new file mode 100644
index 0000000000000000000000000000000000000000..4804b7ab411f5f72ff74343a88bc503ecc309033
--- /dev/null
+++ b/masteringModule/node_modules/combined-stream/License
@@ -0,0 +1,19 @@
+Copyright (c) 2011 Debuggable Limited
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/masteringModule/node_modules/combined-stream/Readme.md b/masteringModule/node_modules/combined-stream/Readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..9e367b5bc5b59c98923b75d327799e5759f15e23
--- /dev/null
+++ b/masteringModule/node_modules/combined-stream/Readme.md
@@ -0,0 +1,138 @@
+# combined-stream
+
+A stream that emits multiple other streams one after another.
+
+**NB** Currently `combined-stream` works with streams version 1 only. There is ongoing effort to switch this library to streams version 2. Any help is welcome. :) Meanwhile you can explore other libraries that provide streams2 support with more or less compatibility with `combined-stream`.
+
+- [combined-stream2](https://www.npmjs.com/package/combined-stream2): A drop-in streams2-compatible replacement for the combined-stream module.
+
+- [multistream](https://www.npmjs.com/package/multistream): A stream that emits multiple other streams one after another.
+
+## Installation
+
+``` bash
+npm install combined-stream
+```
+
+## Usage
+
+Here is a simple example that shows how you can use combined-stream to combine
+two files into one:
+
+``` javascript
+var CombinedStream = require('combined-stream');
+var fs = require('fs');
+
+var combinedStream = CombinedStream.create();
+combinedStream.append(fs.createReadStream('file1.txt'));
+combinedStream.append(fs.createReadStream('file2.txt'));
+
+combinedStream.pipe(fs.createWriteStream('combined.txt'));
+```
+
+While the example above works great, it will pause all source streams until
+they are needed. If you don't want that to happen, you can set `pauseStreams`
+to `false`:
+
+``` javascript
+var CombinedStream = require('combined-stream');
+var fs = require('fs');
+
+var combinedStream = CombinedStream.create({pauseStreams: false});
+combinedStream.append(fs.createReadStream('file1.txt'));
+combinedStream.append(fs.createReadStream('file2.txt'));
+
+combinedStream.pipe(fs.createWriteStream('combined.txt'));
+```
+
+However, what if you don't have all the source streams yet, or you don't want
+to allocate the resources (file descriptors, memory, etc.) for them right away?
+Well, in that case you can simply provide a callback that supplies the stream
+by calling a `next()` function:
+
+``` javascript
+var CombinedStream = require('combined-stream');
+var fs = require('fs');
+
+var combinedStream = CombinedStream.create();
+combinedStream.append(function(next) {
+ next(fs.createReadStream('file1.txt'));
+});
+combinedStream.append(function(next) {
+ next(fs.createReadStream('file2.txt'));
+});
+
+combinedStream.pipe(fs.createWriteStream('combined.txt'));
+```
+
+## API
+
+### CombinedStream.create([options])
+
+Returns a new combined stream object. Available options are:
+
+* `maxDataSize`
+* `pauseStreams`
+
+The effect of those options is described below.
+
+### combinedStream.pauseStreams = `true`
+
+Whether to apply back pressure to the underlaying streams. If set to `false`,
+the underlaying streams will never be paused. If set to `true`, the
+underlaying streams will be paused right after being appended, as well as when
+`delayedStream.pipe()` wants to throttle.
+
+### combinedStream.maxDataSize = `2 * 1024 * 1024`
+
+The maximum amount of bytes (or characters) to buffer for all source streams.
+If this value is exceeded, `combinedStream` emits an `'error'` event.
+
+### combinedStream.dataSize = `0`
+
+The amount of bytes (or characters) currently buffered by `combinedStream`.
+
+### combinedStream.append(stream)
+
+Appends the given `stream` to the combinedStream object. If `pauseStreams` is
+set to `true, this stream will also be paused right away.
+
+`streams` can also be a function that takes one parameter called `next`. `next`
+is a function that must be invoked in order to provide the `next` stream, see
+example above.
+
+Regardless of how the `stream` is appended, combined-stream always attaches an
+`'error'` listener to it, so you don't have to do that manually.
+
+Special case: `stream` can also be a String or Buffer.
+
+### combinedStream.write(data)
+
+You should not call this, `combinedStream` takes care of piping the appended
+streams into itself for you.
+
+### combinedStream.resume()
+
+Causes `combinedStream` to start drain the streams it manages. The function is
+idempotent, and also emits a `'resume'` event each time which usually goes to
+the stream that is currently being drained.
+
+### combinedStream.pause();
+
+If `combinedStream.pauseStreams` is set to `false`, this does nothing.
+Otherwise a `'pause'` event is emitted, this goes to the stream that is
+currently being drained, so you can use it to apply back pressure.
+
+### combinedStream.end();
+
+Sets `combinedStream.writable` to false, emits an `'end'` event, and removes
+all streams from the queue.
+
+### combinedStream.destroy();
+
+Same as `combinedStream.end()`, except it emits a `'close'` event instead of
+`'end'`.
+
+## License
+
+combined-stream is licensed under the MIT license.
diff --git a/masteringModule/node_modules/combined-stream/lib/combined_stream.js b/masteringModule/node_modules/combined-stream/lib/combined_stream.js
new file mode 100644
index 0000000000000000000000000000000000000000..125f097f35818ba9bb6ca9f13f693909e6034097
--- /dev/null
+++ b/masteringModule/node_modules/combined-stream/lib/combined_stream.js
@@ -0,0 +1,208 @@
+var util = require('util');
+var Stream = require('stream').Stream;
+var DelayedStream = require('delayed-stream');
+
+module.exports = CombinedStream;
+function CombinedStream() {
+ this.writable = false;
+ this.readable = true;
+ this.dataSize = 0;
+ this.maxDataSize = 2 * 1024 * 1024;
+ this.pauseStreams = true;
+
+ this._released = false;
+ this._streams = [];
+ this._currentStream = null;
+ this._insideLoop = false;
+ this._pendingNext = false;
+}
+util.inherits(CombinedStream, Stream);
+
+CombinedStream.create = function(options) {
+ var combinedStream = new this();
+
+ options = options || {};
+ for (var option in options) {
+ combinedStream[option] = options[option];
+ }
+
+ return combinedStream;
+};
+
+CombinedStream.isStreamLike = function(stream) {
+ return (typeof stream !== 'function')
+ && (typeof stream !== 'string')
+ && (typeof stream !== 'boolean')
+ && (typeof stream !== 'number')
+ && (!Buffer.isBuffer(stream));
+};
+
+CombinedStream.prototype.append = function(stream) {
+ var isStreamLike = CombinedStream.isStreamLike(stream);
+
+ if (isStreamLike) {
+ if (!(stream instanceof DelayedStream)) {
+ var newStream = DelayedStream.create(stream, {
+ maxDataSize: Infinity,
+ pauseStream: this.pauseStreams,
+ });
+ stream.on('data', this._checkDataSize.bind(this));
+ stream = newStream;
+ }
+
+ this._handleErrors(stream);
+
+ if (this.pauseStreams) {
+ stream.pause();
+ }
+ }
+
+ this._streams.push(stream);
+ return this;
+};
+
+CombinedStream.prototype.pipe = function(dest, options) {
+ Stream.prototype.pipe.call(this, dest, options);
+ this.resume();
+ return dest;
+};
+
+CombinedStream.prototype._getNext = function() {
+ this._currentStream = null;
+
+ if (this._insideLoop) {
+ this._pendingNext = true;
+ return; // defer call
+ }
+
+ this._insideLoop = true;
+ try {
+ do {
+ this._pendingNext = false;
+ this._realGetNext();
+ } while (this._pendingNext);
+ } finally {
+ this._insideLoop = false;
+ }
+};
+
+CombinedStream.prototype._realGetNext = function() {
+ var stream = this._streams.shift();
+
+
+ if (typeof stream == 'undefined') {
+ this.end();
+ return;
+ }
+
+ if (typeof stream !== 'function') {
+ this._pipeNext(stream);
+ return;
+ }
+
+ var getStream = stream;
+ getStream(function(stream) {
+ var isStreamLike = CombinedStream.isStreamLike(stream);
+ if (isStreamLike) {
+ stream.on('data', this._checkDataSize.bind(this));
+ this._handleErrors(stream);
+ }
+
+ this._pipeNext(stream);
+ }.bind(this));
+};
+
+CombinedStream.prototype._pipeNext = function(stream) {
+ this._currentStream = stream;
+
+ var isStreamLike = CombinedStream.isStreamLike(stream);
+ if (isStreamLike) {
+ stream.on('end', this._getNext.bind(this));
+ stream.pipe(this, {end: false});
+ return;
+ }
+
+ var value = stream;
+ this.write(value);
+ this._getNext();
+};
+
+CombinedStream.prototype._handleErrors = function(stream) {
+ var self = this;
+ stream.on('error', function(err) {
+ self._emitError(err);
+ });
+};
+
+CombinedStream.prototype.write = function(data) {
+ this.emit('data', data);
+};
+
+CombinedStream.prototype.pause = function() {
+ if (!this.pauseStreams) {
+ return;
+ }
+
+ if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();
+ this.emit('pause');
+};
+
+CombinedStream.prototype.resume = function() {
+ if (!this._released) {
+ this._released = true;
+ this.writable = true;
+ this._getNext();
+ }
+
+ if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();
+ this.emit('resume');
+};
+
+CombinedStream.prototype.end = function() {
+ this._reset();
+ this.emit('end');
+};
+
+CombinedStream.prototype.destroy = function() {
+ this._reset();
+ this.emit('close');
+};
+
+CombinedStream.prototype._reset = function() {
+ this.writable = false;
+ this._streams = [];
+ this._currentStream = null;
+};
+
+CombinedStream.prototype._checkDataSize = function() {
+ this._updateDataSize();
+ if (this.dataSize <= this.maxDataSize) {
+ return;
+ }
+
+ var message =
+ 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';
+ this._emitError(new Error(message));
+};
+
+CombinedStream.prototype._updateDataSize = function() {
+ this.dataSize = 0;
+
+ var self = this;
+ this._streams.forEach(function(stream) {
+ if (!stream.dataSize) {
+ return;
+ }
+
+ self.dataSize += stream.dataSize;
+ });
+
+ if (this._currentStream && this._currentStream.dataSize) {
+ this.dataSize += this._currentStream.dataSize;
+ }
+};
+
+CombinedStream.prototype._emitError = function(err) {
+ this._reset();
+ this.emit('error', err);
+};
diff --git a/masteringModule/node_modules/combined-stream/package.json b/masteringModule/node_modules/combined-stream/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..6982b6da17561e86b110f0c8eb7add66b9180e7b
--- /dev/null
+++ b/masteringModule/node_modules/combined-stream/package.json
@@ -0,0 +1,25 @@
+{
+ "author": "Felix Geisendörfer (http://debuggable.com/)",
+ "name": "combined-stream",
+ "description": "A stream that emits multiple other streams one after another.",
+ "version": "1.0.8",
+ "homepage": "https://github.com/felixge/node-combined-stream",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/felixge/node-combined-stream.git"
+ },
+ "main": "./lib/combined_stream",
+ "scripts": {
+ "test": "node test/run.js"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ },
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "devDependencies": {
+ "far": "~0.0.7"
+ },
+ "license": "MIT"
+}
diff --git a/masteringModule/node_modules/combined-stream/yarn.lock b/masteringModule/node_modules/combined-stream/yarn.lock
new file mode 100644
index 0000000000000000000000000000000000000000..7edf41840c9812acddef7ae6d9b513f98d3509cb
--- /dev/null
+++ b/masteringModule/node_modules/combined-stream/yarn.lock
@@ -0,0 +1,17 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+
+far@~0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/far/-/far-0.0.7.tgz#01c1fd362bcd26ce9cf161af3938aa34619f79a7"
+ dependencies:
+ oop "0.0.3"
+
+oop@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/oop/-/oop-0.0.3.tgz#70fa405a5650891a194fdc82ca68dad6dabf4401"
diff --git a/masteringModule/node_modules/commander/CHANGELOG.md b/masteringModule/node_modules/commander/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..67d68c595d82ae7e4587b5e6e1f47738249f3c36
--- /dev/null
+++ b/masteringModule/node_modules/commander/CHANGELOG.md
@@ -0,0 +1,382 @@
+
+2.17.1 / 2018-08-07
+==================
+
+ * Fix bug in command emit (#844)
+
+2.17.0 / 2018-08-03
+==================
+
+ * fixed newline output after help information (#833)
+ * Fix to emit the action even without command (#778)
+ * npm update (#823)
+
+2.16.0 / 2018-06-29
+==================
+
+ * Remove Makefile and `test/run` (#821)
+ * Make 'npm test' run on Windows (#820)
+ * Add badge to display install size (#807)
+ * chore: cache node_modules (#814)
+ * chore: remove Node.js 4 (EOL), add Node.js 10 (#813)
+ * fixed typo in readme (#812)
+ * Fix types (#804)
+ * Update eslint to resolve vulnerabilities in lodash (#799)
+ * updated readme with custom event listeners. (#791)
+ * fix tests (#794)
+
+2.15.0 / 2018-03-07
+==================
+
+ * Update downloads badge to point to graph of downloads over time instead of duplicating link to npm
+ * Arguments description
+
+2.14.1 / 2018-02-07
+==================
+
+ * Fix typing of help function
+
+2.14.0 / 2018-02-05
+==================
+
+ * only register the option:version event once
+ * Fixes issue #727: Passing empty string for option on command is set to undefined
+ * enable eqeqeq rule
+ * resolves #754 add linter configuration to project
+ * resolves #560 respect custom name for version option
+ * document how to override the version flag
+ * document using options per command
+
+2.13.0 / 2018-01-09
+==================
+
+ * Do not print default for --no-
+ * remove trailing spaces in command help
+ * Update CI's Node.js to LTS and latest version
+ * typedefs: Command and Option types added to commander namespace
+
+2.12.2 / 2017-11-28
+==================
+
+ * fix: typings are not shipped
+
+2.12.1 / 2017-11-23
+==================
+
+ * Move @types/node to dev dependency
+
+2.12.0 / 2017-11-22
+==================
+
+ * add attributeName() method to Option objects
+ * Documentation updated for options with --no prefix
+ * typings: `outputHelp` takes a string as the first parameter
+ * typings: use overloads
+ * feat(typings): update to match js api
+ * Print default value in option help
+ * Fix translation error
+ * Fail when using same command and alias (#491)
+ * feat(typings): add help callback
+ * fix bug when description is add after command with options (#662)
+ * Format js code
+ * Rename History.md to CHANGELOG.md (#668)
+ * feat(typings): add typings to support TypeScript (#646)
+ * use current node
+
+2.11.0 / 2017-07-03
+==================
+
+ * Fix help section order and padding (#652)
+ * feature: support for signals to subcommands (#632)
+ * Fixed #37, --help should not display first (#447)
+ * Fix translation errors. (#570)
+ * Add package-lock.json
+ * Remove engines
+ * Upgrade package version
+ * Prefix events to prevent conflicts between commands and options (#494)
+ * Removing dependency on graceful-readlink
+ * Support setting name in #name function and make it chainable
+ * Add .vscode directory to .gitignore (Visual Studio Code metadata)
+ * Updated link to ruby commander in readme files
+
+2.10.0 / 2017-06-19
+==================
+
+ * Update .travis.yml. drop support for older node.js versions.
+ * Fix require arguments in README.md
+ * On SemVer you do not start from 0.0.1
+ * Add missing semi colon in readme
+ * Add save param to npm install
+ * node v6 travis test
+ * Update Readme_zh-CN.md
+ * Allow literal '--' to be passed-through as an argument
+ * Test subcommand alias help
+ * link build badge to master branch
+ * Support the alias of Git style sub-command
+ * added keyword commander for better search result on npm
+ * Fix Sub-Subcommands
+ * test node.js stable
+ * Fixes TypeError when a command has an option called `--description`
+ * Update README.md to make it beginner friendly and elaborate on the difference between angled and square brackets.
+ * Add chinese Readme file
+
+2.9.0 / 2015-10-13
+==================
+
+ * Add option `isDefault` to set default subcommand #415 @Qix-
+ * Add callback to allow filtering or post-processing of help text #434 @djulien
+ * Fix `undefined` text in help information close #414 #416 @zhiyelee
+
+2.8.1 / 2015-04-22
+==================
+
+ * Back out `support multiline description` Close #396 #397
+
+2.8.0 / 2015-04-07
+==================
+
+ * Add `process.execArg` support, execution args like `--harmony` will be passed to sub-commands #387 @DigitalIO @zhiyelee
+ * Fix bug in Git-style sub-commands #372 @zhiyelee
+ * Allow commands to be hidden from help #383 @tonylukasavage
+ * When git-style sub-commands are in use, yet none are called, display help #382 @claylo
+ * Add ability to specify arguments syntax for top-level command #258 @rrthomas
+ * Support multiline descriptions #208 @zxqfox
+
+2.7.1 / 2015-03-11
+==================
+
+ * Revert #347 (fix collisions when option and first arg have same name) which causes a bug in #367.
+
+2.7.0 / 2015-03-09
+==================
+
+ * Fix git-style bug when installed globally. Close #335 #349 @zhiyelee
+ * Fix collisions when option and first arg have same name. Close #346 #347 @tonylukasavage
+ * Add support for camelCase on `opts()`. Close #353 @nkzawa
+ * Add node.js 0.12 and io.js to travis.yml
+ * Allow RegEx options. #337 @palanik
+ * Fixes exit code when sub-command failing. Close #260 #332 @pirelenito
+ * git-style `bin` files in $PATH make sense. Close #196 #327 @zhiyelee
+
+2.6.0 / 2014-12-30
+==================
+
+ * added `Command#allowUnknownOption` method. Close #138 #318 @doozr @zhiyelee
+ * Add application description to the help msg. Close #112 @dalssoft
+
+2.5.1 / 2014-12-15
+==================
+
+ * fixed two bugs incurred by variadic arguments. Close #291 @Quentin01 #302 @zhiyelee
+
+2.5.0 / 2014-10-24
+==================
+
+ * add support for variadic arguments. Closes #277 @whitlockjc
+
+2.4.0 / 2014-10-17
+==================
+
+ * fixed a bug on executing the coercion function of subcommands option. Closes #270
+ * added `Command.prototype.name` to retrieve command name. Closes #264 #266 @tonylukasavage
+ * added `Command.prototype.opts` to retrieve all the options as a simple object of key-value pairs. Closes #262 @tonylukasavage
+ * fixed a bug on subcommand name. Closes #248 @jonathandelgado
+ * fixed function normalize doesn’t honor option terminator. Closes #216 @abbr
+
+2.3.0 / 2014-07-16
+==================
+
+ * add command alias'. Closes PR #210
+ * fix: Typos. Closes #99
+ * fix: Unused fs module. Closes #217
+
+2.2.0 / 2014-03-29
+==================
+
+ * add passing of previous option value
+ * fix: support subcommands on windows. Closes #142
+ * Now the defaultValue passed as the second argument of the coercion function.
+
+2.1.0 / 2013-11-21
+==================
+
+ * add: allow cflag style option params, unit test, fixes #174
+
+2.0.0 / 2013-07-18
+==================
+
+ * remove input methods (.prompt, .confirm, etc)
+
+1.3.2 / 2013-07-18
+==================
+
+ * add support for sub-commands to co-exist with the original command
+
+1.3.1 / 2013-07-18
+==================
+
+ * add quick .runningCommand hack so you can opt-out of other logic when running a sub command
+
+1.3.0 / 2013-07-09
+==================
+
+ * add EACCES error handling
+ * fix sub-command --help
+
+1.2.0 / 2013-06-13
+==================
+
+ * allow "-" hyphen as an option argument
+ * support for RegExp coercion
+
+1.1.1 / 2012-11-20
+==================
+
+ * add more sub-command padding
+ * fix .usage() when args are present. Closes #106
+
+1.1.0 / 2012-11-16
+==================
+
+ * add git-style executable subcommand support. Closes #94
+
+1.0.5 / 2012-10-09
+==================
+
+ * fix `--name` clobbering. Closes #92
+ * fix examples/help. Closes #89
+
+1.0.4 / 2012-09-03
+==================
+
+ * add `outputHelp()` method.
+
+1.0.3 / 2012-08-30
+==================
+
+ * remove invalid .version() defaulting
+
+1.0.2 / 2012-08-24
+==================
+
+ * add `--foo=bar` support [arv]
+ * fix password on node 0.8.8. Make backward compatible with 0.6 [focusaurus]
+
+1.0.1 / 2012-08-03
+==================
+
+ * fix issue #56
+ * fix tty.setRawMode(mode) was moved to tty.ReadStream#setRawMode() (i.e. process.stdin.setRawMode())
+
+1.0.0 / 2012-07-05
+==================
+
+ * add support for optional option descriptions
+ * add defaulting of `.version()` to package.json's version
+
+0.6.1 / 2012-06-01
+==================
+
+ * Added: append (yes or no) on confirmation
+ * Added: allow node.js v0.7.x
+
+0.6.0 / 2012-04-10
+==================
+
+ * Added `.prompt(obj, callback)` support. Closes #49
+ * Added default support to .choose(). Closes #41
+ * Fixed the choice example
+
+0.5.1 / 2011-12-20
+==================
+
+ * Fixed `password()` for recent nodes. Closes #36
+
+0.5.0 / 2011-12-04
+==================
+
+ * Added sub-command option support [itay]
+
+0.4.3 / 2011-12-04
+==================
+
+ * Fixed custom help ordering. Closes #32
+
+0.4.2 / 2011-11-24
+==================
+
+ * Added travis support
+ * Fixed: line-buffered input automatically trimmed. Closes #31
+
+0.4.1 / 2011-11-18
+==================
+
+ * Removed listening for "close" on --help
+
+0.4.0 / 2011-11-15
+==================
+
+ * Added support for `--`. Closes #24
+
+0.3.3 / 2011-11-14
+==================
+
+ * Fixed: wait for close event when writing help info [Jerry Hamlet]
+
+0.3.2 / 2011-11-01
+==================
+
+ * Fixed long flag definitions with values [felixge]
+
+0.3.1 / 2011-10-31
+==================
+
+ * Changed `--version` short flag to `-V` from `-v`
+ * Changed `.version()` so it's configurable [felixge]
+
+0.3.0 / 2011-10-31
+==================
+
+ * Added support for long flags only. Closes #18
+
+0.2.1 / 2011-10-24
+==================
+
+ * "node": ">= 0.4.x < 0.7.0". Closes #20
+
+0.2.0 / 2011-09-26
+==================
+
+ * Allow for defaults that are not just boolean. Default peassignment only occurs for --no-*, optional, and required arguments. [Jim Isaacs]
+
+0.1.0 / 2011-08-24
+==================
+
+ * Added support for custom `--help` output
+
+0.0.5 / 2011-08-18
+==================
+
+ * Changed: when the user enters nothing prompt for password again
+ * Fixed issue with passwords beginning with numbers [NuckChorris]
+
+0.0.4 / 2011-08-15
+==================
+
+ * Fixed `Commander#args`
+
+0.0.3 / 2011-08-15
+==================
+
+ * Added default option value support
+
+0.0.2 / 2011-08-15
+==================
+
+ * Added mask support to `Command#password(str[, mask], fn)`
+ * Added `Command#password(str, fn)`
+
+0.0.1 / 2010-01-03
+==================
+
+ * Initial release
diff --git a/masteringModule/node_modules/commander/LICENSE b/masteringModule/node_modules/commander/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..10f997ab104594695189c3fca8fa6c65ae9ccdd6
--- /dev/null
+++ b/masteringModule/node_modules/commander/LICENSE
@@ -0,0 +1,22 @@
+(The MIT License)
+
+Copyright (c) 2011 TJ Holowaychuk
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/masteringModule/node_modules/commander/Readme.md b/masteringModule/node_modules/commander/Readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..5897d371a9bd76f8ac8ec6c9e369d27e31d37228
--- /dev/null
+++ b/masteringModule/node_modules/commander/Readme.md
@@ -0,0 +1,425 @@
+# Commander.js
+
+
+[](http://travis-ci.org/tj/commander.js)
+[](https://www.npmjs.org/package/commander)
+[](https://npmcharts.com/compare/commander?minimal=true)
+[](https://packagephobia.now.sh/result?p=commander)
+[](https://gitter.im/tj/commander.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+
+ The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/commander-rb/commander).
+ [API documentation](http://tj.github.com/commander.js/)
+
+
+## Installation
+
+ $ npm install commander --save
+
+## Option parsing
+
+Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options.
+
+```js
+#!/usr/bin/env node
+
+/**
+ * Module dependencies.
+ */
+
+var program = require('commander');
+
+program
+ .version('0.1.0')
+ .option('-p, --peppers', 'Add peppers')
+ .option('-P, --pineapple', 'Add pineapple')
+ .option('-b, --bbq-sauce', 'Add bbq sauce')
+ .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')
+ .parse(process.argv);
+
+console.log('you ordered a pizza with:');
+if (program.peppers) console.log(' - peppers');
+if (program.pineapple) console.log(' - pineapple');
+if (program.bbqSauce) console.log(' - bbq');
+console.log(' - %s cheese', program.cheese);
+```
+
+Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc.
+
+Note that multi-word options starting with `--no` prefix negate the boolean value of the following word. For example, `--no-sauce` sets the value of `program.sauce` to false.
+
+```js
+#!/usr/bin/env node
+
+/**
+ * Module dependencies.
+ */
+
+var program = require('commander');
+
+program
+ .option('--no-sauce', 'Remove sauce')
+ .parse(process.argv);
+
+console.log('you ordered a pizza');
+if (program.sauce) console.log(' with sauce');
+else console.log(' without sauce');
+```
+
+## Version option
+
+Calling the `version` implicitly adds the `-V` and `--version` options to the command.
+When either of these options is present, the command prints the version number and exits.
+
+ $ ./examples/pizza -V
+ 0.0.1
+
+If you want your program to respond to the `-v` option instead of the `-V` option, simply pass custom flags to the `version` method using the same syntax as the `option` method.
+
+```js
+program
+ .version('0.0.1', '-v, --version')
+```
+
+The version flags can be named anything, but the long option is required.
+
+## Command-specific options
+
+You can attach options to a command.
+
+```js
+#!/usr/bin/env node
+
+var program = require('commander');
+
+program
+ .command('rm ')
+ .option('-r, --recursive', 'Remove recursively')
+ .action(function (dir, cmd) {
+ console.log('remove ' + dir + (cmd.recursive ? ' recursively' : ''))
+ })
+
+program.parse(process.argv)
+```
+
+A command's options are validated when the command is used. Any unknown options will be reported as an error. However, if an action-based command does not define an action, then the options are not validated.
+
+## Coercion
+
+```js
+function range(val) {
+ return val.split('..').map(Number);
+}
+
+function list(val) {
+ return val.split(',');
+}
+
+function collect(val, memo) {
+ memo.push(val);
+ return memo;
+}
+
+function increaseVerbosity(v, total) {
+ return total + 1;
+}
+
+program
+ .version('0.1.0')
+ .usage('[options] ')
+ .option('-i, --integer ', 'An integer argument', parseInt)
+ .option('-f, --float ', 'A float argument', parseFloat)
+ .option('-r, --range ..', 'A range', range)
+ .option('-l, --list ', 'A list', list)
+ .option('-o, --optional [value]', 'An optional value')
+ .option('-c, --collect [value]', 'A repeatable value', collect, [])
+ .option('-v, --verbose', 'A value that can be increased', increaseVerbosity, 0)
+ .parse(process.argv);
+
+console.log(' int: %j', program.integer);
+console.log(' float: %j', program.float);
+console.log(' optional: %j', program.optional);
+program.range = program.range || [];
+console.log(' range: %j..%j', program.range[0], program.range[1]);
+console.log(' list: %j', program.list);
+console.log(' collect: %j', program.collect);
+console.log(' verbosity: %j', program.verbose);
+console.log(' args: %j', program.args);
+```
+
+## Regular Expression
+```js
+program
+ .version('0.1.0')
+ .option('-s --size ', 'Pizza size', /^(large|medium|small)$/i, 'medium')
+ .option('-d --drink [drink]', 'Drink', /^(coke|pepsi|izze)$/i)
+ .parse(process.argv);
+
+console.log(' size: %j', program.size);
+console.log(' drink: %j', program.drink);
+```
+
+## Variadic arguments
+
+ The last argument of a command can be variadic, and only the last argument. To make an argument variadic you have to
+ append `...` to the argument name. Here is an example:
+
+```js
+#!/usr/bin/env node
+
+/**
+ * Module dependencies.
+ */
+
+var program = require('commander');
+
+program
+ .version('0.1.0')
+ .command('rmdir [otherDirs...]')
+ .action(function (dir, otherDirs) {
+ console.log('rmdir %s', dir);
+ if (otherDirs) {
+ otherDirs.forEach(function (oDir) {
+ console.log('rmdir %s', oDir);
+ });
+ }
+ });
+
+program.parse(process.argv);
+```
+
+ An `Array` is used for the value of a variadic argument. This applies to `program.args` as well as the argument passed
+ to your action as demonstrated above.
+
+## Specify the argument syntax
+
+```js
+#!/usr/bin/env node
+
+var program = require('commander');
+
+program
+ .version('0.1.0')
+ .arguments(' [env]')
+ .action(function (cmd, env) {
+ cmdValue = cmd;
+ envValue = env;
+ });
+
+program.parse(process.argv);
+
+if (typeof cmdValue === 'undefined') {
+ console.error('no command given!');
+ process.exit(1);
+}
+console.log('command:', cmdValue);
+console.log('environment:', envValue || "no environment given");
+```
+Angled brackets (e.g. ``) indicate required input. Square brackets (e.g. `[env]`) indicate optional input.
+
+## Git-style sub-commands
+
+```js
+// file: ./examples/pm
+var program = require('commander');
+
+program
+ .version('0.1.0')
+ .command('install [name]', 'install one or more packages')
+ .command('search [query]', 'search with optional query')
+ .command('list', 'list packages installed', {isDefault: true})
+ .parse(process.argv);
+```
+
+When `.command()` is invoked with a description argument, no `.action(callback)` should be called to handle sub-commands, otherwise there will be an error. This tells commander that you're going to use separate executables for sub-commands, much like `git(1)` and other popular tools.
+The commander will try to search the executables in the directory of the entry script (like `./examples/pm`) with the name `program-command`, like `pm-install`, `pm-search`.
+
+Options can be passed with the call to `.command()`. Specifying `true` for `opts.noHelp` will remove the subcommand from the generated help output. Specifying `true` for `opts.isDefault` will run the subcommand if no other subcommand is specified.
+
+If the program is designed to be installed globally, make sure the executables have proper modes, like `755`.
+
+### `--harmony`
+
+You can enable `--harmony` option in two ways:
+* Use `#! /usr/bin/env node --harmony` in the sub-commands scripts. Note some os version don’t support this pattern.
+* Use the `--harmony` option when call the command, like `node --harmony examples/pm publish`. The `--harmony` option will be preserved when spawning sub-command process.
+
+## Automated --help
+
+ The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free:
+
+```
+ $ ./examples/pizza --help
+
+ Usage: pizza [options]
+
+ An application for pizzas ordering
+
+ Options:
+
+ -h, --help output usage information
+ -V, --version output the version number
+ -p, --peppers Add peppers
+ -P, --pineapple Add pineapple
+ -b, --bbq Add bbq sauce
+ -c, --cheese Add the specified type of cheese [marble]
+ -C, --no-cheese You do not want any cheese
+
+```
+
+## Custom help
+
+ You can display arbitrary `-h, --help` information
+ by listening for "--help". Commander will automatically
+ exit once you are done so that the remainder of your program
+ does not execute causing undesired behaviours, for example
+ in the following executable "stuff" will not output when
+ `--help` is used.
+
+```js
+#!/usr/bin/env node
+
+/**
+ * Module dependencies.
+ */
+
+var program = require('commander');
+
+program
+ .version('0.1.0')
+ .option('-f, --foo', 'enable some foo')
+ .option('-b, --bar', 'enable some bar')
+ .option('-B, --baz', 'enable some baz');
+
+// must be before .parse() since
+// node's emit() is immediate
+
+program.on('--help', function(){
+ console.log(' Examples:');
+ console.log('');
+ console.log(' $ custom-help --help');
+ console.log(' $ custom-help -h');
+ console.log('');
+});
+
+program.parse(process.argv);
+
+console.log('stuff');
+```
+
+Yields the following help output when `node script-name.js -h` or `node script-name.js --help` are run:
+
+```
+
+Usage: custom-help [options]
+
+Options:
+
+ -h, --help output usage information
+ -V, --version output the version number
+ -f, --foo enable some foo
+ -b, --bar enable some bar
+ -B, --baz enable some baz
+
+Examples:
+
+ $ custom-help --help
+ $ custom-help -h
+
+```
+
+## .outputHelp(cb)
+
+Output help information without exiting.
+Optional callback cb allows post-processing of help text before it is displayed.
+
+If you want to display help by default (e.g. if no command was provided), you can use something like:
+
+```js
+var program = require('commander');
+var colors = require('colors');
+
+program
+ .version('0.1.0')
+ .command('getstream [url]', 'get stream URL')
+ .parse(process.argv);
+
+if (!process.argv.slice(2).length) {
+ program.outputHelp(make_red);
+}
+
+function make_red(txt) {
+ return colors.red(txt); //display the help text in red on the console
+}
+```
+
+## .help(cb)
+
+ Output help information and exit immediately.
+ Optional callback cb allows post-processing of help text before it is displayed.
+
+
+## Custom event listeners
+ You can execute custom actions by listening to command and option events.
+
+```js
+program.on('option:verbose', function () {
+ process.env.VERBOSE = this.verbose;
+});
+
+// error on unknown commands
+program.on('command:*', function () {
+ console.error('Invalid command: %s\nSee --help for a list of available commands.', program.args.join(' '));
+ process.exit(1);
+});
+```
+
+## Examples
+
+```js
+var program = require('commander');
+
+program
+ .version('0.1.0')
+ .option('-C, --chdir ', 'change the working directory')
+ .option('-c, --config ', 'set config path. defaults to ./deploy.conf')
+ .option('-T, --no-tests', 'ignore test hook');
+
+program
+ .command('setup [env]')
+ .description('run setup commands for all envs')
+ .option("-s, --setup_mode [mode]", "Which setup mode to use")
+ .action(function(env, options){
+ var mode = options.setup_mode || "normal";
+ env = env || 'all';
+ console.log('setup for %s env(s) with %s mode', env, mode);
+ });
+
+program
+ .command('exec ')
+ .alias('ex')
+ .description('execute the given remote cmd')
+ .option("-e, --exec_mode ", "Which exec mode to use")
+ .action(function(cmd, options){
+ console.log('exec "%s" using %s mode', cmd, options.exec_mode);
+ }).on('--help', function() {
+ console.log(' Examples:');
+ console.log();
+ console.log(' $ deploy exec sequential');
+ console.log(' $ deploy exec async');
+ console.log();
+ });
+
+program
+ .command('*')
+ .action(function(env){
+ console.log('deploying "%s"', env);
+ });
+
+program.parse(process.argv);
+```
+
+More Demos can be found in the [examples](https://github.com/tj/commander.js/tree/master/examples) directory.
+
+## License
+
+MIT
diff --git a/masteringModule/node_modules/commander/index.js b/masteringModule/node_modules/commander/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..3ad0cacfd638949ed5591048bf1ea4f5469329da
--- /dev/null
+++ b/masteringModule/node_modules/commander/index.js
@@ -0,0 +1,1236 @@
+/**
+ * Module dependencies.
+ */
+
+var EventEmitter = require('events').EventEmitter;
+var spawn = require('child_process').spawn;
+var path = require('path');
+var dirname = path.dirname;
+var basename = path.basename;
+var fs = require('fs');
+
+/**
+ * Inherit `Command` from `EventEmitter.prototype`.
+ */
+
+require('util').inherits(Command, EventEmitter);
+
+/**
+ * Expose the root command.
+ */
+
+exports = module.exports = new Command();
+
+/**
+ * Expose `Command`.
+ */
+
+exports.Command = Command;
+
+/**
+ * Expose `Option`.
+ */
+
+exports.Option = Option;
+
+/**
+ * Initialize a new `Option` with the given `flags` and `description`.
+ *
+ * @param {String} flags
+ * @param {String} description
+ * @api public
+ */
+
+function Option(flags, description) {
+ this.flags = flags;
+ this.required = flags.indexOf('<') >= 0;
+ this.optional = flags.indexOf('[') >= 0;
+ this.bool = flags.indexOf('-no-') === -1;
+ flags = flags.split(/[ ,|]+/);
+ if (flags.length > 1 && !/^[[<]/.test(flags[1])) this.short = flags.shift();
+ this.long = flags.shift();
+ this.description = description || '';
+}
+
+/**
+ * Return option name.
+ *
+ * @return {String}
+ * @api private
+ */
+
+Option.prototype.name = function() {
+ return this.long
+ .replace('--', '')
+ .replace('no-', '');
+};
+
+/**
+ * Return option name, in a camelcase format that can be used
+ * as a object attribute key.
+ *
+ * @return {String}
+ * @api private
+ */
+
+Option.prototype.attributeName = function() {
+ return camelcase(this.name());
+};
+
+/**
+ * Check if `arg` matches the short or long flag.
+ *
+ * @param {String} arg
+ * @return {Boolean}
+ * @api private
+ */
+
+Option.prototype.is = function(arg) {
+ return this.short === arg || this.long === arg;
+};
+
+/**
+ * Initialize a new `Command`.
+ *
+ * @param {String} name
+ * @api public
+ */
+
+function Command(name) {
+ this.commands = [];
+ this.options = [];
+ this._execs = {};
+ this._allowUnknownOption = false;
+ this._args = [];
+ this._name = name || '';
+}
+
+/**
+ * Add command `name`.
+ *
+ * The `.action()` callback is invoked when the
+ * command `name` is specified via __ARGV__,
+ * and the remaining arguments are applied to the
+ * function for access.
+ *
+ * When the `name` is "*" an un-matched command
+ * will be passed as the first arg, followed by
+ * the rest of __ARGV__ remaining.
+ *
+ * Examples:
+ *
+ * program
+ * .version('0.0.1')
+ * .option('-C, --chdir ', 'change the working directory')
+ * .option('-c, --config ', 'set config path. defaults to ./deploy.conf')
+ * .option('-T, --no-tests', 'ignore test hook')
+ *
+ * program
+ * .command('setup')
+ * .description('run remote setup commands')
+ * .action(function() {
+ * console.log('setup');
+ * });
+ *
+ * program
+ * .command('exec ')
+ * .description('run the given remote command')
+ * .action(function(cmd) {
+ * console.log('exec "%s"', cmd);
+ * });
+ *
+ * program
+ * .command('teardown [otherDirs...]')
+ * .description('run teardown commands')
+ * .action(function(dir, otherDirs) {
+ * console.log('dir "%s"', dir);
+ * if (otherDirs) {
+ * otherDirs.forEach(function (oDir) {
+ * console.log('dir "%s"', oDir);
+ * });
+ * }
+ * });
+ *
+ * program
+ * .command('*')
+ * .description('deploy the given env')
+ * .action(function(env) {
+ * console.log('deploying "%s"', env);
+ * });
+ *
+ * program.parse(process.argv);
+ *
+ * @param {String} name
+ * @param {String} [desc] for git-style sub-commands
+ * @return {Command} the new command
+ * @api public
+ */
+
+Command.prototype.command = function(name, desc, opts) {
+ if (typeof desc === 'object' && desc !== null) {
+ opts = desc;
+ desc = null;
+ }
+ opts = opts || {};
+ var args = name.split(/ +/);
+ var cmd = new Command(args.shift());
+
+ if (desc) {
+ cmd.description(desc);
+ this.executables = true;
+ this._execs[cmd._name] = true;
+ if (opts.isDefault) this.defaultExecutable = cmd._name;
+ }
+ cmd._noHelp = !!opts.noHelp;
+ this.commands.push(cmd);
+ cmd.parseExpectedArgs(args);
+ cmd.parent = this;
+
+ if (desc) return this;
+ return cmd;
+};
+
+/**
+ * Define argument syntax for the top-level command.
+ *
+ * @api public
+ */
+
+Command.prototype.arguments = function(desc) {
+ return this.parseExpectedArgs(desc.split(/ +/));
+};
+
+/**
+ * Add an implicit `help [cmd]` subcommand
+ * which invokes `--help` for the given command.
+ *
+ * @api private
+ */
+
+Command.prototype.addImplicitHelpCommand = function() {
+ this.command('help [cmd]', 'display help for [cmd]');
+};
+
+/**
+ * Parse expected `args`.
+ *
+ * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`.
+ *
+ * @param {Array} args
+ * @return {Command} for chaining
+ * @api public
+ */
+
+Command.prototype.parseExpectedArgs = function(args) {
+ if (!args.length) return;
+ var self = this;
+ args.forEach(function(arg) {
+ var argDetails = {
+ required: false,
+ name: '',
+ variadic: false
+ };
+
+ switch (arg[0]) {
+ case '<':
+ argDetails.required = true;
+ argDetails.name = arg.slice(1, -1);
+ break;
+ case '[':
+ argDetails.name = arg.slice(1, -1);
+ break;
+ }
+
+ if (argDetails.name.length > 3 && argDetails.name.slice(-3) === '...') {
+ argDetails.variadic = true;
+ argDetails.name = argDetails.name.slice(0, -3);
+ }
+ if (argDetails.name) {
+ self._args.push(argDetails);
+ }
+ });
+ return this;
+};
+
+/**
+ * Register callback `fn` for the command.
+ *
+ * Examples:
+ *
+ * program
+ * .command('help')
+ * .description('display verbose help')
+ * .action(function() {
+ * // output help here
+ * });
+ *
+ * @param {Function} fn
+ * @return {Command} for chaining
+ * @api public
+ */
+
+Command.prototype.action = function(fn) {
+ var self = this;
+ var listener = function(args, unknown) {
+ // Parse any so-far unknown options
+ args = args || [];
+ unknown = unknown || [];
+
+ var parsed = self.parseOptions(unknown);
+
+ // Output help if necessary
+ outputHelpIfNecessary(self, parsed.unknown);
+
+ // If there are still any unknown options, then we simply
+ // die, unless someone asked for help, in which case we give it
+ // to them, and then we die.
+ if (parsed.unknown.length > 0) {
+ self.unknownOption(parsed.unknown[0]);
+ }
+
+ // Leftover arguments need to be pushed back. Fixes issue #56
+ if (parsed.args.length) args = parsed.args.concat(args);
+
+ self._args.forEach(function(arg, i) {
+ if (arg.required && args[i] == null) {
+ self.missingArgument(arg.name);
+ } else if (arg.variadic) {
+ if (i !== self._args.length - 1) {
+ self.variadicArgNotLast(arg.name);
+ }
+
+ args[i] = args.splice(i);
+ }
+ });
+
+ // Always append ourselves to the end of the arguments,
+ // to make sure we match the number of arguments the user
+ // expects
+ if (self._args.length) {
+ args[self._args.length] = self;
+ } else {
+ args.push(self);
+ }
+
+ fn.apply(self, args);
+ };
+ var parent = this.parent || this;
+ var name = parent === this ? '*' : this._name;
+ parent.on('command:' + name, listener);
+ if (this._alias) parent.on('command:' + this._alias, listener);
+ return this;
+};
+
+/**
+ * Define option with `flags`, `description` and optional
+ * coercion `fn`.
+ *
+ * The `flags` string should contain both the short and long flags,
+ * separated by comma, a pipe or space. The following are all valid
+ * all will output this way when `--help` is used.
+ *
+ * "-p, --pepper"
+ * "-p|--pepper"
+ * "-p --pepper"
+ *
+ * Examples:
+ *
+ * // simple boolean defaulting to false
+ * program.option('-p, --pepper', 'add pepper');
+ *
+ * --pepper
+ * program.pepper
+ * // => Boolean
+ *
+ * // simple boolean defaulting to true
+ * program.option('-C, --no-cheese', 'remove cheese');
+ *
+ * program.cheese
+ * // => true
+ *
+ * --no-cheese
+ * program.cheese
+ * // => false
+ *
+ * // required argument
+ * program.option('-C, --chdir ', 'change the working directory');
+ *
+ * --chdir /tmp
+ * program.chdir
+ * // => "/tmp"
+ *
+ * // optional argument
+ * program.option('-c, --cheese [type]', 'add cheese [marble]');
+ *
+ * @param {String} flags
+ * @param {String} description
+ * @param {Function|*} [fn] or default
+ * @param {*} [defaultValue]
+ * @return {Command} for chaining
+ * @api public
+ */
+
+Command.prototype.option = function(flags, description, fn, defaultValue) {
+ var self = this,
+ option = new Option(flags, description),
+ oname = option.name(),
+ name = option.attributeName();
+
+ // default as 3rd arg
+ if (typeof fn !== 'function') {
+ if (fn instanceof RegExp) {
+ var regex = fn;
+ fn = function(val, def) {
+ var m = regex.exec(val);
+ return m ? m[0] : def;
+ };
+ } else {
+ defaultValue = fn;
+ fn = null;
+ }
+ }
+
+ // preassign default value only for --no-*, [optional], or
+ if (!option.bool || option.optional || option.required) {
+ // when --no-* we make sure default is true
+ if (!option.bool) defaultValue = true;
+ // preassign only if we have a default
+ if (defaultValue !== undefined) {
+ self[name] = defaultValue;
+ option.defaultValue = defaultValue;
+ }
+ }
+
+ // register the option
+ this.options.push(option);
+
+ // when it's passed assign the value
+ // and conditionally invoke the callback
+ this.on('option:' + oname, function(val) {
+ // coercion
+ if (val !== null && fn) {
+ val = fn(val, self[name] === undefined ? defaultValue : self[name]);
+ }
+
+ // unassigned or bool
+ if (typeof self[name] === 'boolean' || typeof self[name] === 'undefined') {
+ // if no value, bool true, and we have a default, then use it!
+ if (val == null) {
+ self[name] = option.bool
+ ? defaultValue || true
+ : false;
+ } else {
+ self[name] = val;
+ }
+ } else if (val !== null) {
+ // reassign
+ self[name] = val;
+ }
+ });
+
+ return this;
+};
+
+/**
+ * Allow unknown options on the command line.
+ *
+ * @param {Boolean} arg if `true` or omitted, no error will be thrown
+ * for unknown options.
+ * @api public
+ */
+Command.prototype.allowUnknownOption = function(arg) {
+ this._allowUnknownOption = arguments.length === 0 || arg;
+ return this;
+};
+
+/**
+ * Parse `argv`, settings options and invoking commands when defined.
+ *
+ * @param {Array} argv
+ * @return {Command} for chaining
+ * @api public
+ */
+
+Command.prototype.parse = function(argv) {
+ // implicit help
+ if (this.executables) this.addImplicitHelpCommand();
+
+ // store raw args
+ this.rawArgs = argv;
+
+ // guess name
+ this._name = this._name || basename(argv[1], '.js');
+
+ // github-style sub-commands with no sub-command
+ if (this.executables && argv.length < 3 && !this.defaultExecutable) {
+ // this user needs help
+ argv.push('--help');
+ }
+
+ // process argv
+ var parsed = this.parseOptions(this.normalize(argv.slice(2)));
+ var args = this.args = parsed.args;
+
+ var result = this.parseArgs(this.args, parsed.unknown);
+
+ // executable sub-commands
+ var name = result.args[0];
+
+ var aliasCommand = null;
+ // check alias of sub commands
+ if (name) {
+ aliasCommand = this.commands.filter(function(command) {
+ return command.alias() === name;
+ })[0];
+ }
+
+ if (this._execs[name] && typeof this._execs[name] !== 'function') {
+ return this.executeSubCommand(argv, args, parsed.unknown);
+ } else if (aliasCommand) {
+ // is alias of a subCommand
+ args[0] = aliasCommand._name;
+ return this.executeSubCommand(argv, args, parsed.unknown);
+ } else if (this.defaultExecutable) {
+ // use the default subcommand
+ args.unshift(this.defaultExecutable);
+ return this.executeSubCommand(argv, args, parsed.unknown);
+ }
+
+ return result;
+};
+
+/**
+ * Execute a sub-command executable.
+ *
+ * @param {Array} argv
+ * @param {Array} args
+ * @param {Array} unknown
+ * @api private
+ */
+
+Command.prototype.executeSubCommand = function(argv, args, unknown) {
+ args = args.concat(unknown);
+
+ if (!args.length) this.help();
+ if (args[0] === 'help' && args.length === 1) this.help();
+
+ // --help
+ if (args[0] === 'help') {
+ args[0] = args[1];
+ args[1] = '--help';
+ }
+
+ // executable
+ var f = argv[1];
+ // name of the subcommand, link `pm-install`
+ var bin = basename(f, '.js') + '-' + args[0];
+
+ // In case of globally installed, get the base dir where executable
+ // subcommand file should be located at
+ var baseDir,
+ link = fs.lstatSync(f).isSymbolicLink() ? fs.readlinkSync(f) : f;
+
+ // when symbolink is relative path
+ if (link !== f && link.charAt(0) !== '/') {
+ link = path.join(dirname(f), link);
+ }
+ baseDir = dirname(link);
+
+ // prefer local `./` to bin in the $PATH
+ var localBin = path.join(baseDir, bin);
+
+ // whether bin file is a js script with explicit `.js` extension
+ var isExplicitJS = false;
+ if (exists(localBin + '.js')) {
+ bin = localBin + '.js';
+ isExplicitJS = true;
+ } else if (exists(localBin)) {
+ bin = localBin;
+ }
+
+ args = args.slice(1);
+
+ var proc;
+ if (process.platform !== 'win32') {
+ if (isExplicitJS) {
+ args.unshift(bin);
+ // add executable arguments to spawn
+ args = (process.execArgv || []).concat(args);
+
+ proc = spawn(process.argv[0], args, { stdio: 'inherit', customFds: [0, 1, 2] });
+ } else {
+ proc = spawn(bin, args, { stdio: 'inherit', customFds: [0, 1, 2] });
+ }
+ } else {
+ args.unshift(bin);
+ proc = spawn(process.execPath, args, { stdio: 'inherit' });
+ }
+
+ var signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP'];
+ signals.forEach(function(signal) {
+ process.on(signal, function() {
+ if (proc.killed === false && proc.exitCode === null) {
+ proc.kill(signal);
+ }
+ });
+ });
+ proc.on('close', process.exit.bind(process));
+ proc.on('error', function(err) {
+ if (err.code === 'ENOENT') {
+ console.error('\n %s(1) does not exist, try --help\n', bin);
+ } else if (err.code === 'EACCES') {
+ console.error('\n %s(1) not executable. try chmod or run with root\n', bin);
+ }
+ process.exit(1);
+ });
+
+ // Store the reference to the child process
+ this.runningCommand = proc;
+};
+
+/**
+ * Normalize `args`, splitting joined short flags. For example
+ * the arg "-abc" is equivalent to "-a -b -c".
+ * This also normalizes equal sign and splits "--abc=def" into "--abc def".
+ *
+ * @param {Array} args
+ * @return {Array}
+ * @api private
+ */
+
+Command.prototype.normalize = function(args) {
+ var ret = [],
+ arg,
+ lastOpt,
+ index;
+
+ for (var i = 0, len = args.length; i < len; ++i) {
+ arg = args[i];
+ if (i > 0) {
+ lastOpt = this.optionFor(args[i - 1]);
+ }
+
+ if (arg === '--') {
+ // Honor option terminator
+ ret = ret.concat(args.slice(i));
+ break;
+ } else if (lastOpt && lastOpt.required) {
+ ret.push(arg);
+ } else if (arg.length > 1 && arg[0] === '-' && arg[1] !== '-') {
+ arg.slice(1).split('').forEach(function(c) {
+ ret.push('-' + c);
+ });
+ } else if (/^--/.test(arg) && ~(index = arg.indexOf('='))) {
+ ret.push(arg.slice(0, index), arg.slice(index + 1));
+ } else {
+ ret.push(arg);
+ }
+ }
+
+ return ret;
+};
+
+/**
+ * Parse command `args`.
+ *
+ * When listener(s) are available those
+ * callbacks are invoked, otherwise the "*"
+ * event is emitted and those actions are invoked.
+ *
+ * @param {Array} args
+ * @return {Command} for chaining
+ * @api private
+ */
+
+Command.prototype.parseArgs = function(args, unknown) {
+ var name;
+
+ if (args.length) {
+ name = args[0];
+ if (this.listeners('command:' + name).length) {
+ this.emit('command:' + args.shift(), args, unknown);
+ } else {
+ this.emit('command:*', args);
+ }
+ } else {
+ outputHelpIfNecessary(this, unknown);
+
+ // If there were no args and we have unknown options,
+ // then they are extraneous and we need to error.
+ if (unknown.length > 0) {
+ this.unknownOption(unknown[0]);
+ }
+ if (this.commands.length === 0 &&
+ this._args.filter(function(a) { return a.required }).length === 0) {
+ this.emit('command:*');
+ }
+ }
+
+ return this;
+};
+
+/**
+ * Return an option matching `arg` if any.
+ *
+ * @param {String} arg
+ * @return {Option}
+ * @api private
+ */
+
+Command.prototype.optionFor = function(arg) {
+ for (var i = 0, len = this.options.length; i < len; ++i) {
+ if (this.options[i].is(arg)) {
+ return this.options[i];
+ }
+ }
+};
+
+/**
+ * Parse options from `argv` returning `argv`
+ * void of these options.
+ *
+ * @param {Array} argv
+ * @return {Array}
+ * @api public
+ */
+
+Command.prototype.parseOptions = function(argv) {
+ var args = [],
+ len = argv.length,
+ literal,
+ option,
+ arg;
+
+ var unknownOptions = [];
+
+ // parse options
+ for (var i = 0; i < len; ++i) {
+ arg = argv[i];
+
+ // literal args after --
+ if (literal) {
+ args.push(arg);
+ continue;
+ }
+
+ if (arg === '--') {
+ literal = true;
+ continue;
+ }
+
+ // find matching Option
+ option = this.optionFor(arg);
+
+ // option is defined
+ if (option) {
+ // requires arg
+ if (option.required) {
+ arg = argv[++i];
+ if (arg == null) return this.optionMissingArgument(option);
+ this.emit('option:' + option.name(), arg);
+ // optional arg
+ } else if (option.optional) {
+ arg = argv[i + 1];
+ if (arg == null || (arg[0] === '-' && arg !== '-')) {
+ arg = null;
+ } else {
+ ++i;
+ }
+ this.emit('option:' + option.name(), arg);
+ // bool
+ } else {
+ this.emit('option:' + option.name());
+ }
+ continue;
+ }
+
+ // looks like an option
+ if (arg.length > 1 && arg[0] === '-') {
+ unknownOptions.push(arg);
+
+ // If the next argument looks like it might be
+ // an argument for this option, we pass it on.
+ // If it isn't, then it'll simply be ignored
+ if ((i + 1) < argv.length && argv[i + 1][0] !== '-') {
+ unknownOptions.push(argv[++i]);
+ }
+ continue;
+ }
+
+ // arg
+ args.push(arg);
+ }
+
+ return { args: args, unknown: unknownOptions };
+};
+
+/**
+ * Return an object containing options as key-value pairs
+ *
+ * @return {Object}
+ * @api public
+ */
+Command.prototype.opts = function() {
+ var result = {},
+ len = this.options.length;
+
+ for (var i = 0; i < len; i++) {
+ var key = this.options[i].attributeName();
+ result[key] = key === this._versionOptionName ? this._version : this[key];
+ }
+ return result;
+};
+
+/**
+ * Argument `name` is missing.
+ *
+ * @param {String} name
+ * @api private
+ */
+
+Command.prototype.missingArgument = function(name) {
+ console.error();
+ console.error(" error: missing required argument `%s'", name);
+ console.error();
+ process.exit(1);
+};
+
+/**
+ * `Option` is missing an argument, but received `flag` or nothing.
+ *
+ * @param {String} option
+ * @param {String} flag
+ * @api private
+ */
+
+Command.prototype.optionMissingArgument = function(option, flag) {
+ console.error();
+ if (flag) {
+ console.error(" error: option `%s' argument missing, got `%s'", option.flags, flag);
+ } else {
+ console.error(" error: option `%s' argument missing", option.flags);
+ }
+ console.error();
+ process.exit(1);
+};
+
+/**
+ * Unknown option `flag`.
+ *
+ * @param {String} flag
+ * @api private
+ */
+
+Command.prototype.unknownOption = function(flag) {
+ if (this._allowUnknownOption) return;
+ console.error();
+ console.error(" error: unknown option `%s'", flag);
+ console.error();
+ process.exit(1);
+};
+
+/**
+ * Variadic argument with `name` is not the last argument as required.
+ *
+ * @param {String} name
+ * @api private
+ */
+
+Command.prototype.variadicArgNotLast = function(name) {
+ console.error();
+ console.error(" error: variadic arguments must be last `%s'", name);
+ console.error();
+ process.exit(1);
+};
+
+/**
+ * Set the program version to `str`.
+ *
+ * This method auto-registers the "-V, --version" flag
+ * which will print the version number when passed.
+ *
+ * @param {String} str
+ * @param {String} [flags]
+ * @return {Command} for chaining
+ * @api public
+ */
+
+Command.prototype.version = function(str, flags) {
+ if (arguments.length === 0) return this._version;
+ this._version = str;
+ flags = flags || '-V, --version';
+ var versionOption = new Option(flags, 'output the version number');
+ this._versionOptionName = versionOption.long.substr(2) || 'version';
+ this.options.push(versionOption);
+ this.on('option:' + this._versionOptionName, function() {
+ process.stdout.write(str + '\n');
+ process.exit(0);
+ });
+ return this;
+};
+
+/**
+ * Set the description to `str`.
+ *
+ * @param {String} str
+ * @param {Object} argsDescription
+ * @return {String|Command}
+ * @api public
+ */
+
+Command.prototype.description = function(str, argsDescription) {
+ if (arguments.length === 0) return this._description;
+ this._description = str;
+ this._argsDescription = argsDescription;
+ return this;
+};
+
+/**
+ * Set an alias for the command
+ *
+ * @param {String} alias
+ * @return {String|Command}
+ * @api public
+ */
+
+Command.prototype.alias = function(alias) {
+ var command = this;
+ if (this.commands.length !== 0) {
+ command = this.commands[this.commands.length - 1];
+ }
+
+ if (arguments.length === 0) return command._alias;
+
+ if (alias === command._name) throw new Error('Command alias can\'t be the same as its name');
+
+ command._alias = alias;
+ return this;
+};
+
+/**
+ * Set / get the command usage `str`.
+ *
+ * @param {String} str
+ * @return {String|Command}
+ * @api public
+ */
+
+Command.prototype.usage = function(str) {
+ var args = this._args.map(function(arg) {
+ return humanReadableArgName(arg);
+ });
+
+ var usage = '[options]' +
+ (this.commands.length ? ' [command]' : '') +
+ (this._args.length ? ' ' + args.join(' ') : '');
+
+ if (arguments.length === 0) return this._usage || usage;
+ this._usage = str;
+
+ return this;
+};
+
+/**
+ * Get or set the name of the command
+ *
+ * @param {String} str
+ * @return {String|Command}
+ * @api public
+ */
+
+Command.prototype.name = function(str) {
+ if (arguments.length === 0) return this._name;
+ this._name = str;
+ return this;
+};
+
+/**
+ * Return prepared commands.
+ *
+ * @return {Array}
+ * @api private
+ */
+
+Command.prototype.prepareCommands = function() {
+ return this.commands.filter(function(cmd) {
+ return !cmd._noHelp;
+ }).map(function(cmd) {
+ var args = cmd._args.map(function(arg) {
+ return humanReadableArgName(arg);
+ }).join(' ');
+
+ return [
+ cmd._name +
+ (cmd._alias ? '|' + cmd._alias : '') +
+ (cmd.options.length ? ' [options]' : '') +
+ (args ? ' ' + args : ''),
+ cmd._description
+ ];
+ });
+};
+
+/**
+ * Return the largest command length.
+ *
+ * @return {Number}
+ * @api private
+ */
+
+Command.prototype.largestCommandLength = function() {
+ var commands = this.prepareCommands();
+ return commands.reduce(function(max, command) {
+ return Math.max(max, command[0].length);
+ }, 0);
+};
+
+/**
+ * Return the largest option length.
+ *
+ * @return {Number}
+ * @api private
+ */
+
+Command.prototype.largestOptionLength = function() {
+ var options = [].slice.call(this.options);
+ options.push({
+ flags: '-h, --help'
+ });
+ return options.reduce(function(max, option) {
+ return Math.max(max, option.flags.length);
+ }, 0);
+};
+
+/**
+ * Return the largest arg length.
+ *
+ * @return {Number}
+ * @api private
+ */
+
+Command.prototype.largestArgLength = function() {
+ return this._args.reduce(function(max, arg) {
+ return Math.max(max, arg.name.length);
+ }, 0);
+};
+
+/**
+ * Return the pad width.
+ *
+ * @return {Number}
+ * @api private
+ */
+
+Command.prototype.padWidth = function() {
+ var width = this.largestOptionLength();
+ if (this._argsDescription && this._args.length) {
+ if (this.largestArgLength() > width) {
+ width = this.largestArgLength();
+ }
+ }
+
+ if (this.commands && this.commands.length) {
+ if (this.largestCommandLength() > width) {
+ width = this.largestCommandLength();
+ }
+ }
+
+ return width;
+};
+
+/**
+ * Return help for options.
+ *
+ * @return {String}
+ * @api private
+ */
+
+Command.prototype.optionHelp = function() {
+ var width = this.padWidth();
+
+ // Append the help information
+ return this.options.map(function(option) {
+ return pad(option.flags, width) + ' ' + option.description +
+ ((option.bool && option.defaultValue !== undefined) ? ' (default: ' + option.defaultValue + ')' : '');
+ }).concat([pad('-h, --help', width) + ' ' + 'output usage information'])
+ .join('\n');
+};
+
+/**
+ * Return command help documentation.
+ *
+ * @return {String}
+ * @api private
+ */
+
+Command.prototype.commandHelp = function() {
+ if (!this.commands.length) return '';
+
+ var commands = this.prepareCommands();
+ var width = this.padWidth();
+
+ return [
+ ' Commands:',
+ '',
+ commands.map(function(cmd) {
+ var desc = cmd[1] ? ' ' + cmd[1] : '';
+ return (desc ? pad(cmd[0], width) : cmd[0]) + desc;
+ }).join('\n').replace(/^/gm, ' '),
+ ''
+ ].join('\n');
+};
+
+/**
+ * Return program help documentation.
+ *
+ * @return {String}
+ * @api private
+ */
+
+Command.prototype.helpInformation = function() {
+ var desc = [];
+ if (this._description) {
+ desc = [
+ ' ' + this._description,
+ ''
+ ];
+
+ var argsDescription = this._argsDescription;
+ if (argsDescription && this._args.length) {
+ var width = this.padWidth();
+ desc.push(' Arguments:');
+ desc.push('');
+ this._args.forEach(function(arg) {
+ desc.push(' ' + pad(arg.name, width) + ' ' + argsDescription[arg.name]);
+ });
+ desc.push('');
+ }
+ }
+
+ var cmdName = this._name;
+ if (this._alias) {
+ cmdName = cmdName + '|' + this._alias;
+ }
+ var usage = [
+ '',
+ ' Usage: ' + cmdName + ' ' + this.usage(),
+ ''
+ ];
+
+ var cmds = [];
+ var commandHelp = this.commandHelp();
+ if (commandHelp) cmds = [commandHelp];
+
+ var options = [
+ ' Options:',
+ '',
+ '' + this.optionHelp().replace(/^/gm, ' '),
+ ''
+ ];
+
+ return usage
+ .concat(desc)
+ .concat(options)
+ .concat(cmds)
+ .concat([''])
+ .join('\n');
+};
+
+/**
+ * Output help information for this command
+ *
+ * @api public
+ */
+
+Command.prototype.outputHelp = function(cb) {
+ if (!cb) {
+ cb = function(passthru) {
+ return passthru;
+ };
+ }
+ process.stdout.write(cb(this.helpInformation()));
+ this.emit('--help');
+};
+
+/**
+ * Output help information and exit.
+ *
+ * @api public
+ */
+
+Command.prototype.help = function(cb) {
+ this.outputHelp(cb);
+ process.exit();
+};
+
+/**
+ * Camel-case the given `flag`
+ *
+ * @param {String} flag
+ * @return {String}
+ * @api private
+ */
+
+function camelcase(flag) {
+ return flag.split('-').reduce(function(str, word) {
+ return str + word[0].toUpperCase() + word.slice(1);
+ });
+}
+
+/**
+ * Pad `str` to `width`.
+ *
+ * @param {String} str
+ * @param {Number} width
+ * @return {String}
+ * @api private
+ */
+
+function pad(str, width) {
+ var len = Math.max(0, width - str.length);
+ return str + Array(len + 1).join(' ');
+}
+
+/**
+ * Output help information if necessary
+ *
+ * @param {Command} command to output help for
+ * @param {Array} array of options to search for -h or --help
+ * @api private
+ */
+
+function outputHelpIfNecessary(cmd, options) {
+ options = options || [];
+ for (var i = 0; i < options.length; i++) {
+ if (options[i] === '--help' || options[i] === '-h') {
+ cmd.outputHelp();
+ process.exit(0);
+ }
+ }
+}
+
+/**
+ * Takes an argument an returns its human readable equivalent for help usage.
+ *
+ * @param {Object} arg
+ * @return {String}
+ * @api private
+ */
+
+function humanReadableArgName(arg) {
+ var nameOutput = arg.name + (arg.variadic === true ? '...' : '');
+
+ return arg.required
+ ? '<' + nameOutput + '>'
+ : '[' + nameOutput + ']';
+}
+
+// for versions before node v0.8 when there weren't `fs.existsSync`
+function exists(file) {
+ try {
+ if (fs.statSync(file).isFile()) {
+ return true;
+ }
+ } catch (e) {
+ return false;
+ }
+}
diff --git a/masteringModule/node_modules/commander/package.json b/masteringModule/node_modules/commander/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..d3a1b24b51ad04450f88ab73804ac6cf6aa50ef1
--- /dev/null
+++ b/masteringModule/node_modules/commander/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "commander",
+ "version": "2.17.1",
+ "description": "the complete solution for node.js command-line programs",
+ "keywords": [
+ "commander",
+ "command",
+ "option",
+ "parser"
+ ],
+ "author": "TJ Holowaychuk ",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/tj/commander.js.git"
+ },
+ "scripts": {
+ "lint": "eslint index.js",
+ "test": "node test/run.js && npm run test-typings",
+ "test-typings": "tsc -p tsconfig.json"
+ },
+ "main": "index",
+ "files": [
+ "index.js",
+ "typings/index.d.ts"
+ ],
+ "dependencies": {},
+ "devDependencies": {
+ "@types/node": "^10.5.7",
+ "eslint": "^5.3.0",
+ "should": "^13.2.3",
+ "sinon": "^6.1.4",
+ "standard": "^11.0.1",
+ "typescript": "^2.9.2"
+ },
+ "typings": "typings/index.d.ts"
+}
diff --git a/masteringModule/node_modules/commander/typings/index.d.ts b/masteringModule/node_modules/commander/typings/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..312b056dea3f50a8a2f29745efa2e6269690e794
--- /dev/null
+++ b/masteringModule/node_modules/commander/typings/index.d.ts
@@ -0,0 +1,309 @@
+// Type definitions for commander 2.11
+// Project: https://github.com/visionmedia/commander.js
+// Definitions by: Alan Agius , Marcelo Dezem , vvakame , Jules Randolph
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+declare namespace local {
+
+ class Option {
+ flags: string;
+ required: boolean;
+ optional: boolean;
+ bool: boolean;
+ short?: string;
+ long: string;
+ description: string;
+
+ /**
+ * Initialize a new `Option` with the given `flags` and `description`.
+ *
+ * @param {string} flags
+ * @param {string} [description]
+ */
+ constructor(flags: string, description?: string);
+ }
+
+ class Command extends NodeJS.EventEmitter {
+ [key: string]: any;
+
+ args: string[];
+
+ /**
+ * Initialize a new `Command`.
+ *
+ * @param {string} [name]
+ */
+ constructor(name?: string);
+
+ /**
+ * Set the program version to `str`.
+ *
+ * This method auto-registers the "-V, --version" flag
+ * which will print the version number when passed.
+ *
+ * @param {string} str
+ * @param {string} [flags]
+ * @returns {Command} for chaining
+ */
+ version(str: string, flags?: string): Command;
+
+ /**
+ * Add command `name`.
+ *
+ * The `.action()` callback is invoked when the
+ * command `name` is specified via __ARGV__,
+ * and the remaining arguments are applied to the
+ * function for access.
+ *
+ * When the `name` is "*" an un-matched command
+ * will be passed as the first arg, followed by
+ * the rest of __ARGV__ remaining.
+ *
+ * @example
+ * program
+ * .version('0.0.1')
+ * .option('-C, --chdir ', 'change the working directory')
+ * .option('-c, --config ', 'set config path. defaults to ./deploy.conf')
+ * .option('-T, --no-tests', 'ignore test hook')
+ *
+ * program
+ * .command('setup')
+ * .description('run remote setup commands')
+ * .action(function() {
+ * console.log('setup');
+ * });
+ *
+ * program
+ * .command('exec ')
+ * .description('run the given remote command')
+ * .action(function(cmd) {
+ * console.log('exec "%s"', cmd);
+ * });
+ *
+ * program
+ * .command('teardown [otherDirs...]')
+ * .description('run teardown commands')
+ * .action(function(dir, otherDirs) {
+ * console.log('dir "%s"', dir);
+ * if (otherDirs) {
+ * otherDirs.forEach(function (oDir) {
+ * console.log('dir "%s"', oDir);
+ * });
+ * }
+ * });
+ *
+ * program
+ * .command('*')
+ * .description('deploy the given env')
+ * .action(function(env) {
+ * console.log('deploying "%s"', env);
+ * });
+ *
+ * program.parse(process.argv);
+ *
+ * @param {string} name
+ * @param {string} [desc] for git-style sub-commands
+ * @param {CommandOptions} [opts] command options
+ * @returns {Command} the new command
+ */
+ command(name: string, desc?: string, opts?: commander.CommandOptions): Command;
+
+ /**
+ * Define argument syntax for the top-level command.
+ *
+ * @param {string} desc
+ * @returns {Command} for chaining
+ */
+ arguments(desc: string): Command;
+
+ /**
+ * Parse expected `args`.
+ *
+ * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`.
+ *
+ * @param {string[]} args
+ * @returns {Command} for chaining
+ */
+ parseExpectedArgs(args: string[]): Command;
+
+ /**
+ * Register callback `fn` for the command.
+ *
+ * @example
+ * program
+ * .command('help')
+ * .description('display verbose help')
+ * .action(function() {
+ * // output help here
+ * });
+ *
+ * @param {(...args: any[]) => void} fn
+ * @returns {Command} for chaining
+ */
+ action(fn: (...args: any[]) => void): Command;
+
+ /**
+ * Define option with `flags`, `description` and optional
+ * coercion `fn`.
+ *
+ * The `flags` string should contain both the short and long flags,
+ * separated by comma, a pipe or space. The following are all valid
+ * all will output this way when `--help` is used.
+ *
+ * "-p, --pepper"
+ * "-p|--pepper"
+ * "-p --pepper"
+ *
+ * @example
+ * // simple boolean defaulting to false
+ * program.option('-p, --pepper', 'add pepper');
+ *
+ * --pepper
+ * program.pepper
+ * // => Boolean
+ *
+ * // simple boolean defaulting to true
+ * program.option('-C, --no-cheese', 'remove cheese');
+ *
+ * program.cheese
+ * // => true
+ *
+ * --no-cheese
+ * program.cheese
+ * // => false
+ *
+ * // required argument
+ * program.option('-C, --chdir ', 'change the working directory');
+ *
+ * --chdir /tmp
+ * program.chdir
+ * // => "/tmp"
+ *
+ * // optional argument
+ * program.option('-c, --cheese [type]', 'add cheese [marble]');
+ *
+ * @param {string} flags
+ * @param {string} [description]
+ * @param {((arg1: any, arg2: any) => void) | RegExp} [fn] function or default
+ * @param {*} [defaultValue]
+ * @returns {Command} for chaining
+ */
+ option(flags: string, description?: string, fn?: ((arg1: any, arg2: any) => void) | RegExp, defaultValue?: any): Command;
+ option(flags: string, description?: string, defaultValue?: any): Command;
+
+ /**
+ * Allow unknown options on the command line.
+ *
+ * @param {boolean} [arg] if `true` or omitted, no error will be thrown for unknown options.
+ * @returns {Command} for chaining
+ */
+ allowUnknownOption(arg?: boolean): Command;
+
+ /**
+ * Parse `argv`, settings options and invoking commands when defined.
+ *
+ * @param {string[]} argv
+ * @returns {Command} for chaining
+ */
+ parse(argv: string[]): Command;
+
+ /**
+ * Parse options from `argv` returning `argv` void of these options.
+ *
+ * @param {string[]} argv
+ * @returns {ParseOptionsResult}
+ */
+ parseOptions(argv: string[]): commander.ParseOptionsResult;
+
+ /**
+ * Return an object containing options as key-value pairs
+ *
+ * @returns {{[key: string]: any}}
+ */
+ opts(): { [key: string]: any };
+
+ /**
+ * Set the description to `str`.
+ *
+ * @param {string} str
+ * @return {(Command | string)}
+ */
+ description(str: string): Command;
+ description(): string;
+
+ /**
+ * Set an alias for the command.
+ *
+ * @param {string} alias
+ * @return {(Command | string)}
+ */
+ alias(alias: string): Command;
+ alias(): string;
+
+ /**
+ * Set or get the command usage.
+ *
+ * @param {string} str
+ * @return {(Command | string)}
+ */
+ usage(str: string): Command;
+ usage(): string;
+
+ /**
+ * Set the name of the command.
+ *
+ * @param {string} str
+ * @return {Command}
+ */
+ name(str: string): Command;
+
+ /**
+ * Get the name of the command.
+ *
+ * @return {string}
+ */
+ name(): string;
+
+ /**
+ * Output help information for this command.
+ *
+ * @param {(str: string) => string} [cb]
+ */
+ outputHelp(cb?: (str: string) => string): void;
+
+ /** Output help information and exit.
+ *
+ * @param {(str: string) => string} [cb]
+ */
+ help(cb?: (str: string) => string): never;
+ }
+
+}
+
+declare namespace commander {
+
+ type Command = local.Command
+
+ type Option = local.Option
+
+ interface CommandOptions {
+ noHelp?: boolean;
+ isDefault?: boolean;
+ }
+
+ interface ParseOptionsResult {
+ args: string[];
+ unknown: string[];
+ }
+
+ interface CommanderStatic extends Command {
+ Command: typeof local.Command;
+ Option: typeof local.Option;
+ CommandOptions: CommandOptions;
+ ParseOptionsResult: ParseOptionsResult;
+ }
+
+}
+
+declare const commander: commander.CommanderStatic;
+export = commander;
diff --git a/masteringModule/node_modules/component-emitter/History.md b/masteringModule/node_modules/component-emitter/History.md
new file mode 100644
index 0000000000000000000000000000000000000000..e9fb4bc56d6d1b9cef1e1658e9a34586d03c91b1
--- /dev/null
+++ b/masteringModule/node_modules/component-emitter/History.md
@@ -0,0 +1,75 @@
+
+1.3.0 / 2018-04-15
+==================
+
+ * removed bower support
+ * expose emitter on `exports`
+ * prevent de-optimization from using `arguments`
+
+1.2.1 / 2016-04-18
+==================
+
+ * enable client side use
+
+1.2.0 / 2014-02-12
+==================
+
+ * prefix events with `$` to support object prototype method names
+
+1.1.3 / 2014-06-20
+==================
+
+ * republish for npm
+ * add LICENSE file
+
+1.1.2 / 2014-02-10
+==================
+
+ * package: rename to "component-emitter"
+ * package: update "main" and "component" fields
+ * Add license to Readme (same format as the other components)
+ * created .npmignore
+ * travis stuff
+
+1.1.1 / 2013-12-01
+==================
+
+ * fix .once adding .on to the listener
+ * docs: Emitter#off()
+ * component: add `.repo` prop
+
+1.1.0 / 2013-10-20
+==================
+
+ * add `.addEventListener()` and `.removeEventListener()` aliases
+
+1.0.1 / 2013-06-27
+==================
+
+ * add support for legacy ie
+
+1.0.0 / 2013-02-26
+==================
+
+ * add `.off()` support for removing all listeners
+
+0.0.6 / 2012-10-08
+==================
+
+ * add `this._callbacks` initialization to prevent funky gotcha
+
+0.0.5 / 2012-09-07
+==================
+
+ * fix `Emitter.call(this)` usage
+
+0.0.3 / 2012-07-11
+==================
+
+ * add `.listeners()`
+ * rename `.has()` to `.hasListeners()`
+
+0.0.2 / 2012-06-28
+==================
+
+ * fix `.off()` with `.once()`-registered callbacks
diff --git a/masteringModule/node_modules/component-emitter/LICENSE b/masteringModule/node_modules/component-emitter/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..de51692732f88b8c8114ecf11c8e40f47f3686b0
--- /dev/null
+++ b/masteringModule/node_modules/component-emitter/LICENSE
@@ -0,0 +1,24 @@
+(The MIT License)
+
+Copyright (c) 2014 Component contributors
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/masteringModule/node_modules/component-emitter/Readme.md b/masteringModule/node_modules/component-emitter/Readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..0f3f9b9fc37c883b3a7288a8dc5fd1ae2df57afe
--- /dev/null
+++ b/masteringModule/node_modules/component-emitter/Readme.md
@@ -0,0 +1,74 @@
+# Emitter [](https://travis-ci.org/component/emitter)
+
+ Event emitter component.
+
+## Installation
+
+```
+$ component install component/emitter
+```
+
+## API
+
+### Emitter(obj)
+
+ The `Emitter` may also be used as a mixin. For example
+ a "plain" object may become an emitter, or you may
+ extend an existing prototype.
+
+ As an `Emitter` instance:
+
+```js
+var Emitter = require('emitter');
+var emitter = new Emitter;
+emitter.emit('something');
+```
+
+ As a mixin:
+
+```js
+var Emitter = require('emitter');
+var user = { name: 'tobi' };
+Emitter(user);
+
+user.emit('im a user');
+```
+
+ As a prototype mixin:
+
+```js
+var Emitter = require('emitter');
+Emitter(User.prototype);
+```
+
+### Emitter#on(event, fn)
+
+ Register an `event` handler `fn`.
+
+### Emitter#once(event, fn)
+
+ Register a single-shot `event` handler `fn`,
+ removed immediately after it is invoked the
+ first time.
+
+### Emitter#off(event, fn)
+
+ * Pass `event` and `fn` to remove a listener.
+ * Pass `event` to remove all listeners on that event.
+ * Pass nothing to remove all listeners on all events.
+
+### Emitter#emit(event, ...)
+
+ Emit an `event` with variable option args.
+
+### Emitter#listeners(event)
+
+ Return an array of callbacks, or an empty array.
+
+### Emitter#hasListeners(event)
+
+ Check if this emitter has `event` handlers.
+
+## License
+
+MIT
diff --git a/masteringModule/node_modules/component-emitter/index.js b/masteringModule/node_modules/component-emitter/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..6d7ed0ab3c9d7a0d3f7f23f68c003ab5a818d21d
--- /dev/null
+++ b/masteringModule/node_modules/component-emitter/index.js
@@ -0,0 +1,175 @@
+
+/**
+ * Expose `Emitter`.
+ */
+
+if (typeof module !== 'undefined') {
+ module.exports = Emitter;
+}
+
+/**
+ * Initialize a new `Emitter`.
+ *
+ * @api public
+ */
+
+function Emitter(obj) {
+ if (obj) return mixin(obj);
+};
+
+/**
+ * Mixin the emitter properties.
+ *
+ * @param {Object} obj
+ * @return {Object}
+ * @api private
+ */
+
+function mixin(obj) {
+ for (var key in Emitter.prototype) {
+ obj[key] = Emitter.prototype[key];
+ }
+ return obj;
+}
+
+/**
+ * Listen on the given `event` with `fn`.
+ *
+ * @param {String} event
+ * @param {Function} fn
+ * @return {Emitter}
+ * @api public
+ */
+
+Emitter.prototype.on =
+Emitter.prototype.addEventListener = function(event, fn){
+ this._callbacks = this._callbacks || {};
+ (this._callbacks['$' + event] = this._callbacks['$' + event] || [])
+ .push(fn);
+ return this;
+};
+
+/**
+ * Adds an `event` listener that will be invoked a single
+ * time then automatically removed.
+ *
+ * @param {String} event
+ * @param {Function} fn
+ * @return {Emitter}
+ * @api public
+ */
+
+Emitter.prototype.once = function(event, fn){
+ function on() {
+ this.off(event, on);
+ fn.apply(this, arguments);
+ }
+
+ on.fn = fn;
+ this.on(event, on);
+ return this;
+};
+
+/**
+ * Remove the given callback for `event` or all
+ * registered callbacks.
+ *
+ * @param {String} event
+ * @param {Function} fn
+ * @return {Emitter}
+ * @api public
+ */
+
+Emitter.prototype.off =
+Emitter.prototype.removeListener =
+Emitter.prototype.removeAllListeners =
+Emitter.prototype.removeEventListener = function(event, fn){
+ this._callbacks = this._callbacks || {};
+
+ // all
+ if (0 == arguments.length) {
+ this._callbacks = {};
+ return this;
+ }
+
+ // specific event
+ var callbacks = this._callbacks['$' + event];
+ if (!callbacks) return this;
+
+ // remove all handlers
+ if (1 == arguments.length) {
+ delete this._callbacks['$' + event];
+ return this;
+ }
+
+ // remove specific handler
+ var cb;
+ for (var i = 0; i < callbacks.length; i++) {
+ cb = callbacks[i];
+ if (cb === fn || cb.fn === fn) {
+ callbacks.splice(i, 1);
+ break;
+ }
+ }
+
+ // Remove event specific arrays for event types that no
+ // one is subscribed for to avoid memory leak.
+ if (callbacks.length === 0) {
+ delete this._callbacks['$' + event];
+ }
+
+ return this;
+};
+
+/**
+ * Emit `event` with the given args.
+ *
+ * @param {String} event
+ * @param {Mixed} ...
+ * @return {Emitter}
+ */
+
+Emitter.prototype.emit = function(event){
+ this._callbacks = this._callbacks || {};
+
+ var args = new Array(arguments.length - 1)
+ , callbacks = this._callbacks['$' + event];
+
+ for (var i = 1; i < arguments.length; i++) {
+ args[i - 1] = arguments[i];
+ }
+
+ if (callbacks) {
+ callbacks = callbacks.slice(0);
+ for (var i = 0, len = callbacks.length; i < len; ++i) {
+ callbacks[i].apply(this, args);
+ }
+ }
+
+ return this;
+};
+
+/**
+ * Return array of callbacks for `event`.
+ *
+ * @param {String} event
+ * @return {Array}
+ * @api public
+ */
+
+Emitter.prototype.listeners = function(event){
+ this._callbacks = this._callbacks || {};
+ return this._callbacks['$' + event] || [];
+};
+
+/**
+ * Check if this emitter has `event` handlers.
+ *
+ * @param {String} event
+ * @return {Boolean}
+ * @api public
+ */
+
+Emitter.prototype.hasListeners = function(event){
+ return !! this.listeners(event).length;
+};
diff --git a/masteringModule/node_modules/component-emitter/package.json b/masteringModule/node_modules/component-emitter/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..403b8c0eac1314b4a435cbebec3834d2e5617cb1
--- /dev/null
+++ b/masteringModule/node_modules/component-emitter/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "component-emitter",
+ "description": "Event emitter",
+ "version": "1.3.0",
+ "license": "MIT",
+ "devDependencies": {
+ "mocha": "*",
+ "should": "*"
+ },
+ "component": {
+ "scripts": {
+ "emitter/index.js": "index.js"
+ }
+ },
+ "main": "index.js",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/component/emitter.git"
+ },
+ "scripts": {
+ "test": "make test"
+ },
+ "files": [
+ "index.js",
+ "LICENSE"
+ ]
+}
diff --git a/masteringModule/node_modules/cookiejar/LICENSE b/masteringModule/node_modules/cookiejar/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..58a23ecee681dfc5d9178cb856986686939a5416
--- /dev/null
+++ b/masteringModule/node_modules/cookiejar/LICENSE
@@ -0,0 +1,9 @@
+The MIT License (MIT)
+Copyright (c) 2013 Bradley Meck
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
diff --git a/masteringModule/node_modules/cookiejar/cookiejar.js b/masteringModule/node_modules/cookiejar/cookiejar.js
new file mode 100644
index 0000000000000000000000000000000000000000..d5969e449ed923a45aa53566ce81cf56eb46d979
--- /dev/null
+++ b/masteringModule/node_modules/cookiejar/cookiejar.js
@@ -0,0 +1,276 @@
+/* jshint node: true */
+(function () {
+ "use strict";
+
+ function CookieAccessInfo(domain, path, secure, script) {
+ if (this instanceof CookieAccessInfo) {
+ this.domain = domain || undefined;
+ this.path = path || "/";
+ this.secure = !!secure;
+ this.script = !!script;
+ return this;
+ }
+ return new CookieAccessInfo(domain, path, secure, script);
+ }
+ CookieAccessInfo.All = Object.freeze(Object.create(null));
+ exports.CookieAccessInfo = CookieAccessInfo;
+
+ function Cookie(cookiestr, request_domain, request_path) {
+ if (cookiestr instanceof Cookie) {
+ return cookiestr;
+ }
+ if (this instanceof Cookie) {
+ this.name = null;
+ this.value = null;
+ this.expiration_date = Infinity;
+ this.path = String(request_path || "/");
+ this.explicit_path = false;
+ this.domain = request_domain || null;
+ this.explicit_domain = false;
+ this.secure = false; //how to define default?
+ this.noscript = false; //httponly
+ if (cookiestr) {
+ this.parse(cookiestr, request_domain, request_path);
+ }
+ return this;
+ }
+ return new Cookie(cookiestr, request_domain, request_path);
+ }
+ exports.Cookie = Cookie;
+
+ Cookie.prototype.toString = function toString() {
+ var str = [this.name + "=" + this.value];
+ if (this.expiration_date !== Infinity) {
+ str.push("expires=" + (new Date(this.expiration_date)).toGMTString());
+ }
+ if (this.domain) {
+ str.push("domain=" + this.domain);
+ }
+ if (this.path) {
+ str.push("path=" + this.path);
+ }
+ if (this.secure) {
+ str.push("secure");
+ }
+ if (this.noscript) {
+ str.push("httponly");
+ }
+ return str.join("; ");
+ };
+
+ Cookie.prototype.toValueString = function toValueString() {
+ return this.name + "=" + this.value;
+ };
+
+ var cookie_str_splitter = /[:](?=\s*[a-zA-Z0-9_\-]+\s*[=])/g;
+ Cookie.prototype.parse = function parse(str, request_domain, request_path) {
+ if (this instanceof Cookie) {
+ var parts = str.split(";").filter(function (value) {
+ return !!value;
+ });
+ var i;
+
+ var pair = parts[0].match(/([^=]+)=([\s\S]*)/);
+ if (!pair) {
+ console.warn("Invalid cookie header encountered. Header: '"+str+"'");
+ return;
+ }
+
+ var key = pair[1];
+ var value = pair[2];
+ if ( typeof key !== 'string' || key.length === 0 || typeof value !== 'string' ) {
+ console.warn("Unable to extract values from cookie header. Cookie: '"+str+"'");
+ return;
+ }
+
+ this.name = key;
+ this.value = value;
+
+ for (i = 1; i < parts.length; i += 1) {
+ pair = parts[i].match(/([^=]+)(?:=([\s\S]*))?/);
+ key = pair[1].trim().toLowerCase();
+ value = pair[2];
+ switch (key) {
+ case "httponly":
+ this.noscript = true;
+ break;
+ case "expires":
+ this.expiration_date = value ?
+ Number(Date.parse(value)) :
+ Infinity;
+ break;
+ case "path":
+ this.path = value ?
+ value.trim() :
+ "";
+ this.explicit_path = true;
+ break;
+ case "domain":
+ this.domain = value ?
+ value.trim() :
+ "";
+ this.explicit_domain = !!this.domain;
+ break;
+ case "secure":
+ this.secure = true;
+ break;
+ }
+ }
+
+ if (!this.explicit_path) {
+ this.path = request_path || "/";
+ }
+ if (!this.explicit_domain) {
+ this.domain = request_domain;
+ }
+
+ return this;
+ }
+ return new Cookie().parse(str, request_domain, request_path);
+ };
+
+ Cookie.prototype.matches = function matches(access_info) {
+ if (access_info === CookieAccessInfo.All) {
+ return true;
+ }
+ if (this.noscript && access_info.script ||
+ this.secure && !access_info.secure ||
+ !this.collidesWith(access_info)) {
+ return false;
+ }
+ return true;
+ };
+
+ Cookie.prototype.collidesWith = function collidesWith(access_info) {
+ if ((this.path && !access_info.path) || (this.domain && !access_info.domain)) {
+ return false;
+ }
+ if (this.path && access_info.path.indexOf(this.path) !== 0) {
+ return false;
+ }
+ if (this.explicit_path && access_info.path.indexOf( this.path ) !== 0) {
+ return false;
+ }
+ var access_domain = access_info.domain && access_info.domain.replace(/^[\.]/,'');
+ var cookie_domain = this.domain && this.domain.replace(/^[\.]/,'');
+ if (cookie_domain === access_domain) {
+ return true;
+ }
+ if (cookie_domain) {
+ if (!this.explicit_domain) {
+ return false; // we already checked if the domains were exactly the same
+ }
+ var wildcard = access_domain.indexOf(cookie_domain);
+ if (wildcard === -1 || wildcard !== access_domain.length - cookie_domain.length) {
+ return false;
+ }
+ return true;
+ }
+ return true;
+ };
+
+ function CookieJar() {
+ var cookies, cookies_list, collidable_cookie;
+ if (this instanceof CookieJar) {
+ cookies = Object.create(null); //name: [Cookie]
+
+ this.setCookie = function setCookie(cookie, request_domain, request_path) {
+ var remove, i;
+ cookie = new Cookie(cookie, request_domain, request_path);
+ //Delete the cookie if the set is past the current time
+ remove = cookie.expiration_date <= Date.now();
+ if (cookies[cookie.name] !== undefined) {
+ cookies_list = cookies[cookie.name];
+ for (i = 0; i < cookies_list.length; i += 1) {
+ collidable_cookie = cookies_list[i];
+ if (collidable_cookie.collidesWith(cookie)) {
+ if (remove) {
+ cookies_list.splice(i, 1);
+ if (cookies_list.length === 0) {
+ delete cookies[cookie.name];
+ }
+ return false;
+ }
+ cookies_list[i] = cookie;
+ return cookie;
+ }
+ }
+ if (remove) {
+ return false;
+ }
+ cookies_list.push(cookie);
+ return cookie;
+ }
+ if (remove) {
+ return false;
+ }
+ cookies[cookie.name] = [cookie];
+ return cookies[cookie.name];
+ };
+ //returns a cookie
+ this.getCookie = function getCookie(cookie_name, access_info) {
+ var cookie, i;
+ cookies_list = cookies[cookie_name];
+ if (!cookies_list) {
+ return;
+ }
+ for (i = 0; i < cookies_list.length; i += 1) {
+ cookie = cookies_list[i];
+ if (cookie.expiration_date <= Date.now()) {
+ if (cookies_list.length === 0) {
+ delete cookies[cookie.name];
+ }
+ continue;
+ }
+
+ if (cookie.matches(access_info)) {
+ return cookie;
+ }
+ }
+ };
+ //returns a list of cookies
+ this.getCookies = function getCookies(access_info) {
+ var matches = [], cookie_name, cookie;
+ for (cookie_name in cookies) {
+ cookie = this.getCookie(cookie_name, access_info);
+ if (cookie) {
+ matches.push(cookie);
+ }
+ }
+ matches.toString = function toString() {
+ return matches.join(":");
+ };
+ matches.toValueString = function toValueString() {
+ return matches.map(function (c) {
+ return c.toValueString();
+ }).join(';');
+ };
+ return matches;
+ };
+
+ return this;
+ }
+ return new CookieJar();
+ }
+ exports.CookieJar = CookieJar;
+
+ //returns list of cookies that were set correctly. Cookies that are expired and removed are not returned.
+ CookieJar.prototype.setCookies = function setCookies(cookies, request_domain, request_path) {
+ cookies = Array.isArray(cookies) ?
+ cookies :
+ cookies.split(cookie_str_splitter);
+ var successful = [],
+ i,
+ cookie;
+ cookies = cookies.map(function(item){
+ return new Cookie(item, request_domain, request_path);
+ });
+ for (i = 0; i < cookies.length; i += 1) {
+ cookie = cookies[i];
+ if (this.setCookie(cookie, request_domain, request_path)) {
+ successful.push(cookie);
+ }
+ }
+ return successful;
+ };
+}());
diff --git a/masteringModule/node_modules/cookiejar/package.json b/masteringModule/node_modules/cookiejar/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..eee5b78518da4bb26b27f383baeef2a9e4c95ee0
--- /dev/null
+++ b/masteringModule/node_modules/cookiejar/package.json
@@ -0,0 +1,24 @@
+{
+ "name": "cookiejar",
+ "version": "2.1.2",
+ "author": {
+ "name": "bradleymeck"
+ },
+ "main": "cookiejar.js",
+ "description": "simple persistent cookiejar system",
+ "files": ["cookiejar.js"],
+ "license": "MIT",
+ "jshintConfig": {
+ "node": true
+ },
+ "scripts": {
+ "test": "node tests/test.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/bmeck/node-cookiejar.git"
+ },
+ "devDependencies": {
+ "jshint": "^2.9.4"
+ }
+}
diff --git a/masteringModule/node_modules/cookiejar/readme.md b/masteringModule/node_modules/cookiejar/readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..71a9f233bd4561b686d06790e2fbd05e3d919408
--- /dev/null
+++ b/masteringModule/node_modules/cookiejar/readme.md
@@ -0,0 +1,60 @@
+# CookieJar
+
+[](https://www.npmjs.org/package/cookiejar)
+[](https://david-dm.org/bmeck/node-cookiejar?type=dev)
+
+Simple robust cookie library
+
+## Exports
+
+### CookieAccessInfo(domain,path,secure,script)
+
+class to determine matching qualities of a cookie
+
+##### Properties
+
+* String domain - domain to match
+* String path - path to match
+* Boolean secure - access is secure (ssl generally)
+* Boolean script - access is from a script
+
+
+### Cookie(cookiestr_or_cookie, request_domain, request_path)
+
+It turns input into a Cookie (singleton if given a Cookie),
+the `request_domain` argument is used to default the domain if it is not explicit in the cookie string,
+the `request_path` argument is used to set the path if it is not explicit in a cookie String.
+
+Explicit domains/paths will cascade, implied domains/paths must *exactly* match (see http://en.wikipedia.org/wiki/HTTP_cookie#Domain_and_Pat).
+
+##### Properties
+
+* String name - name of the cookie
+* String value - string associated with the cookie
+* String domain - domain to match (on a cookie a '.' at the start means a wildcard matching anything ending in the rest)
+* Boolean explicit_domain - if the domain was explicitly set via the cookie string
+* String path - base path to match (matches any path starting with this '/' is root)
+* Boolean explicit_path - if the path was explicitly set via the cookie string
+* Boolean noscript - if it should be kept from scripts
+* Boolean secure - should it only be transmitted over secure means
+* Number expiration_date - number of millis since 1970 at which this should be removed
+
+##### Methods
+
+* `String toString()` - the __set-cookie:__ string for this cookie
+* `String toValueString()` - the __cookie:__ string for this cookie
+* `Cookie parse(cookiestr, request_domain, request_path)` - parses the string onto this cookie or a new one if called directly
+* `Boolean matches(access_info)` - returns true if the access_info allows retrieval of this cookie
+* `Boolean collidesWith(cookie)` - returns true if the cookies cannot exist in the same space (domain and path match)
+
+
+### CookieJar()
+
+class to hold numerous cookies from multiple domains correctly
+
+##### Methods
+
+* `Cookie setCookie(cookie, request_domain, request_path)` - modify (or add if not already-existing) a cookie to the jar
+* `Cookie[] setCookies(cookiestr_or_list, request_domain, request_path)` - modify (or add if not already-existing) a large number of cookies to the jar
+* `Cookie getCookie(cookie_name,access_info)` - get a cookie with the name and access_info matching
+* `Cookie[] getCookies(access_info)` - grab all cookies matching this access_info
diff --git a/masteringModule/node_modules/core-util-is/LICENSE b/masteringModule/node_modules/core-util-is/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..d8d7f9437dbf5ad54701a187f05988bcf0006fd8
--- /dev/null
+++ b/masteringModule/node_modules/core-util-is/LICENSE
@@ -0,0 +1,19 @@
+Copyright Node.js contributors. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
diff --git a/masteringModule/node_modules/core-util-is/README.md b/masteringModule/node_modules/core-util-is/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..5a76b4149c5eb5077c09578e349820bccbbd266e
--- /dev/null
+++ b/masteringModule/node_modules/core-util-is/README.md
@@ -0,0 +1,3 @@
+# core-util-is
+
+The `util.is*` functions introduced in Node v0.12.
diff --git a/masteringModule/node_modules/core-util-is/float.patch b/masteringModule/node_modules/core-util-is/float.patch
new file mode 100644
index 0000000000000000000000000000000000000000..a06d5c05f75fd5617f8849b43a88e0e3d8d824e9
--- /dev/null
+++ b/masteringModule/node_modules/core-util-is/float.patch
@@ -0,0 +1,604 @@
+diff --git a/lib/util.js b/lib/util.js
+index a03e874..9074e8e 100644
+--- a/lib/util.js
++++ b/lib/util.js
+@@ -19,430 +19,6 @@
+ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+-var formatRegExp = /%[sdj%]/g;
+-exports.format = function(f) {
+- if (!isString(f)) {
+- var objects = [];
+- for (var i = 0; i < arguments.length; i++) {
+- objects.push(inspect(arguments[i]));
+- }
+- return objects.join(' ');
+- }
+-
+- var i = 1;
+- var args = arguments;
+- var len = args.length;
+- var str = String(f).replace(formatRegExp, function(x) {
+- if (x === '%%') return '%';
+- if (i >= len) return x;
+- switch (x) {
+- case '%s': return String(args[i++]);
+- case '%d': return Number(args[i++]);
+- case '%j':
+- try {
+- return JSON.stringify(args[i++]);
+- } catch (_) {
+- return '[Circular]';
+- }
+- default:
+- return x;
+- }
+- });
+- for (var x = args[i]; i < len; x = args[++i]) {
+- if (isNull(x) || !isObject(x)) {
+- str += ' ' + x;
+- } else {
+- str += ' ' + inspect(x);
+- }
+- }
+- return str;
+-};
+-
+-
+-// Mark that a method should not be used.
+-// Returns a modified function which warns once by default.
+-// If --no-deprecation is set, then it is a no-op.
+-exports.deprecate = function(fn, msg) {
+- // Allow for deprecating things in the process of starting up.
+- if (isUndefined(global.process)) {
+- return function() {
+- return exports.deprecate(fn, msg).apply(this, arguments);
+- };
+- }
+-
+- if (process.noDeprecation === true) {
+- return fn;
+- }
+-
+- var warned = false;
+- function deprecated() {
+- if (!warned) {
+- if (process.throwDeprecation) {
+- throw new Error(msg);
+- } else if (process.traceDeprecation) {
+- console.trace(msg);
+- } else {
+- console.error(msg);
+- }
+- warned = true;
+- }
+- return fn.apply(this, arguments);
+- }
+-
+- return deprecated;
+-};
+-
+-
+-var debugs = {};
+-var debugEnviron;
+-exports.debuglog = function(set) {
+- if (isUndefined(debugEnviron))
+- debugEnviron = process.env.NODE_DEBUG || '';
+- set = set.toUpperCase();
+- if (!debugs[set]) {
+- if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
+- var pid = process.pid;
+- debugs[set] = function() {
+- var msg = exports.format.apply(exports, arguments);
+- console.error('%s %d: %s', set, pid, msg);
+- };
+- } else {
+- debugs[set] = function() {};
+- }
+- }
+- return debugs[set];
+-};
+-
+-
+-/**
+- * Echos the value of a value. Trys to print the value out
+- * in the best way possible given the different types.
+- *
+- * @param {Object} obj The object to print out.
+- * @param {Object} opts Optional options object that alters the output.
+- */
+-/* legacy: obj, showHidden, depth, colors*/
+-function inspect(obj, opts) {
+- // default options
+- var ctx = {
+- seen: [],
+- stylize: stylizeNoColor
+- };
+- // legacy...
+- if (arguments.length >= 3) ctx.depth = arguments[2];
+- if (arguments.length >= 4) ctx.colors = arguments[3];
+- if (isBoolean(opts)) {
+- // legacy...
+- ctx.showHidden = opts;
+- } else if (opts) {
+- // got an "options" object
+- exports._extend(ctx, opts);
+- }
+- // set default options
+- if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
+- if (isUndefined(ctx.depth)) ctx.depth = 2;
+- if (isUndefined(ctx.colors)) ctx.colors = false;
+- if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
+- if (ctx.colors) ctx.stylize = stylizeWithColor;
+- return formatValue(ctx, obj, ctx.depth);
+-}
+-exports.inspect = inspect;
+-
+-
+-// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
+-inspect.colors = {
+- 'bold' : [1, 22],
+- 'italic' : [3, 23],
+- 'underline' : [4, 24],
+- 'inverse' : [7, 27],
+- 'white' : [37, 39],
+- 'grey' : [90, 39],
+- 'black' : [30, 39],
+- 'blue' : [34, 39],
+- 'cyan' : [36, 39],
+- 'green' : [32, 39],
+- 'magenta' : [35, 39],
+- 'red' : [31, 39],
+- 'yellow' : [33, 39]
+-};
+-
+-// Don't use 'blue' not visible on cmd.exe
+-inspect.styles = {
+- 'special': 'cyan',
+- 'number': 'yellow',
+- 'boolean': 'yellow',
+- 'undefined': 'grey',
+- 'null': 'bold',
+- 'string': 'green',
+- 'date': 'magenta',
+- // "name": intentionally not styling
+- 'regexp': 'red'
+-};
+-
+-
+-function stylizeWithColor(str, styleType) {
+- var style = inspect.styles[styleType];
+-
+- if (style) {
+- return '\u001b[' + inspect.colors[style][0] + 'm' + str +
+- '\u001b[' + inspect.colors[style][1] + 'm';
+- } else {
+- return str;
+- }
+-}
+-
+-
+-function stylizeNoColor(str, styleType) {
+- return str;
+-}
+-
+-
+-function arrayToHash(array) {
+- var hash = {};
+-
+- array.forEach(function(val, idx) {
+- hash[val] = true;
+- });
+-
+- return hash;
+-}
+-
+-
+-function formatValue(ctx, value, recurseTimes) {
+- // Provide a hook for user-specified inspect functions.
+- // Check that value is an object with an inspect function on it
+- if (ctx.customInspect &&
+- value &&
+- isFunction(value.inspect) &&
+- // Filter out the util module, it's inspect function is special
+- value.inspect !== exports.inspect &&
+- // Also filter out any prototype objects using the circular check.
+- !(value.constructor && value.constructor.prototype === value)) {
+- var ret = value.inspect(recurseTimes, ctx);
+- if (!isString(ret)) {
+- ret = formatValue(ctx, ret, recurseTimes);
+- }
+- return ret;
+- }
+-
+- // Primitive types cannot have properties
+- var primitive = formatPrimitive(ctx, value);
+- if (primitive) {
+- return primitive;
+- }
+-
+- // Look up the keys of the object.
+- var keys = Object.keys(value);
+- var visibleKeys = arrayToHash(keys);
+-
+- if (ctx.showHidden) {
+- keys = Object.getOwnPropertyNames(value);
+- }
+-
+- // Some type of object without properties can be shortcutted.
+- if (keys.length === 0) {
+- if (isFunction(value)) {
+- var name = value.name ? ': ' + value.name : '';
+- return ctx.stylize('[Function' + name + ']', 'special');
+- }
+- if (isRegExp(value)) {
+- return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
+- }
+- if (isDate(value)) {
+- return ctx.stylize(Date.prototype.toString.call(value), 'date');
+- }
+- if (isError(value)) {
+- return formatError(value);
+- }
+- }
+-
+- var base = '', array = false, braces = ['{', '}'];
+-
+- // Make Array say that they are Array
+- if (isArray(value)) {
+- array = true;
+- braces = ['[', ']'];
+- }
+-
+- // Make functions say that they are functions
+- if (isFunction(value)) {
+- var n = value.name ? ': ' + value.name : '';
+- base = ' [Function' + n + ']';
+- }
+-
+- // Make RegExps say that they are RegExps
+- if (isRegExp(value)) {
+- base = ' ' + RegExp.prototype.toString.call(value);
+- }
+-
+- // Make dates with properties first say the date
+- if (isDate(value)) {
+- base = ' ' + Date.prototype.toUTCString.call(value);
+- }
+-
+- // Make error with message first say the error
+- if (isError(value)) {
+- base = ' ' + formatError(value);
+- }
+-
+- if (keys.length === 0 && (!array || value.length == 0)) {
+- return braces[0] + base + braces[1];
+- }
+-
+- if (recurseTimes < 0) {
+- if (isRegExp(value)) {
+- return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
+- } else {
+- return ctx.stylize('[Object]', 'special');
+- }
+- }
+-
+- ctx.seen.push(value);
+-
+- var output;
+- if (array) {
+- output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
+- } else {
+- output = keys.map(function(key) {
+- return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
+- });
+- }
+-
+- ctx.seen.pop();
+-
+- return reduceToSingleString(output, base, braces);
+-}
+-
+-
+-function formatPrimitive(ctx, value) {
+- if (isUndefined(value))
+- return ctx.stylize('undefined', 'undefined');
+- if (isString(value)) {
+- var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
+- .replace(/'/g, "\\'")
+- .replace(/\\"/g, '"') + '\'';
+- return ctx.stylize(simple, 'string');
+- }
+- if (isNumber(value)) {
+- // Format -0 as '-0'. Strict equality won't distinguish 0 from -0,
+- // so instead we use the fact that 1 / -0 < 0 whereas 1 / 0 > 0 .
+- if (value === 0 && 1 / value < 0)
+- return ctx.stylize('-0', 'number');
+- return ctx.stylize('' + value, 'number');
+- }
+- if (isBoolean(value))
+- return ctx.stylize('' + value, 'boolean');
+- // For some reason typeof null is "object", so special case here.
+- if (isNull(value))
+- return ctx.stylize('null', 'null');
+-}
+-
+-
+-function formatError(value) {
+- return '[' + Error.prototype.toString.call(value) + ']';
+-}
+-
+-
+-function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
+- var output = [];
+- for (var i = 0, l = value.length; i < l; ++i) {
+- if (hasOwnProperty(value, String(i))) {
+- output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
+- String(i), true));
+- } else {
+- output.push('');
+- }
+- }
+- keys.forEach(function(key) {
+- if (!key.match(/^\d+$/)) {
+- output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
+- key, true));
+- }
+- });
+- return output;
+-}
+-
+-
+-function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
+- var name, str, desc;
+- desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
+- if (desc.get) {
+- if (desc.set) {
+- str = ctx.stylize('[Getter/Setter]', 'special');
+- } else {
+- str = ctx.stylize('[Getter]', 'special');
+- }
+- } else {
+- if (desc.set) {
+- str = ctx.stylize('[Setter]', 'special');
+- }
+- }
+- if (!hasOwnProperty(visibleKeys, key)) {
+- name = '[' + key + ']';
+- }
+- if (!str) {
+- if (ctx.seen.indexOf(desc.value) < 0) {
+- if (isNull(recurseTimes)) {
+- str = formatValue(ctx, desc.value, null);
+- } else {
+- str = formatValue(ctx, desc.value, recurseTimes - 1);
+- }
+- if (str.indexOf('\n') > -1) {
+- if (array) {
+- str = str.split('\n').map(function(line) {
+- return ' ' + line;
+- }).join('\n').substr(2);
+- } else {
+- str = '\n' + str.split('\n').map(function(line) {
+- return ' ' + line;
+- }).join('\n');
+- }
+- }
+- } else {
+- str = ctx.stylize('[Circular]', 'special');
+- }
+- }
+- if (isUndefined(name)) {
+- if (array && key.match(/^\d+$/)) {
+- return str;
+- }
+- name = JSON.stringify('' + key);
+- if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
+- name = name.substr(1, name.length - 2);
+- name = ctx.stylize(name, 'name');
+- } else {
+- name = name.replace(/'/g, "\\'")
+- .replace(/\\"/g, '"')
+- .replace(/(^"|"$)/g, "'");
+- name = ctx.stylize(name, 'string');
+- }
+- }
+-
+- return name + ': ' + str;
+-}
+-
+-
+-function reduceToSingleString(output, base, braces) {
+- var numLinesEst = 0;
+- var length = output.reduce(function(prev, cur) {
+- numLinesEst++;
+- if (cur.indexOf('\n') >= 0) numLinesEst++;
+- return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
+- }, 0);
+-
+- if (length > 60) {
+- return braces[0] +
+- (base === '' ? '' : base + '\n ') +
+- ' ' +
+- output.join(',\n ') +
+- ' ' +
+- braces[1];
+- }
+-
+- return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
+-}
+-
+-
+ // NOTE: These type checking functions intentionally don't use `instanceof`
+ // because it is fragile and can be easily faked with `Object.create()`.
+ function isArray(ar) {
+@@ -522,166 +98,10 @@ function isPrimitive(arg) {
+ exports.isPrimitive = isPrimitive;
+
+ function isBuffer(arg) {
+- return arg instanceof Buffer;
++ return Buffer.isBuffer(arg);
+ }
+ exports.isBuffer = isBuffer;
+
+ function objectToString(o) {
+ return Object.prototype.toString.call(o);
+-}
+-
+-
+-function pad(n) {
+- return n < 10 ? '0' + n.toString(10) : n.toString(10);
+-}
+-
+-
+-var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
+- 'Oct', 'Nov', 'Dec'];
+-
+-// 26 Feb 16:19:34
+-function timestamp() {
+- var d = new Date();
+- var time = [pad(d.getHours()),
+- pad(d.getMinutes()),
+- pad(d.getSeconds())].join(':');
+- return [d.getDate(), months[d.getMonth()], time].join(' ');
+-}
+-
+-
+-// log is just a thin wrapper to console.log that prepends a timestamp
+-exports.log = function() {
+- console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
+-};
+-
+-
+-/**
+- * Inherit the prototype methods from one constructor into another.
+- *
+- * The Function.prototype.inherits from lang.js rewritten as a standalone
+- * function (not on Function.prototype). NOTE: If this file is to be loaded
+- * during bootstrapping this function needs to be rewritten using some native
+- * functions as prototype setup using normal JavaScript does not work as
+- * expected during bootstrapping (see mirror.js in r114903).
+- *
+- * @param {function} ctor Constructor function which needs to inherit the
+- * prototype.
+- * @param {function} superCtor Constructor function to inherit prototype from.
+- */
+-exports.inherits = function(ctor, superCtor) {
+- ctor.super_ = superCtor;
+- ctor.prototype = Object.create(superCtor.prototype, {
+- constructor: {
+- value: ctor,
+- enumerable: false,
+- writable: true,
+- configurable: true
+- }
+- });
+-};
+-
+-exports._extend = function(origin, add) {
+- // Don't do anything if add isn't an object
+- if (!add || !isObject(add)) return origin;
+-
+- var keys = Object.keys(add);
+- var i = keys.length;
+- while (i--) {
+- origin[keys[i]] = add[keys[i]];
+- }
+- return origin;
+-};
+-
+-function hasOwnProperty(obj, prop) {
+- return Object.prototype.hasOwnProperty.call(obj, prop);
+-}
+-
+-
+-// Deprecated old stuff.
+-
+-exports.p = exports.deprecate(function() {
+- for (var i = 0, len = arguments.length; i < len; ++i) {
+- console.error(exports.inspect(arguments[i]));
+- }
+-}, 'util.p: Use console.error() instead');
+-
+-
+-exports.exec = exports.deprecate(function() {
+- return require('child_process').exec.apply(this, arguments);
+-}, 'util.exec is now called `child_process.exec`.');
+-
+-
+-exports.print = exports.deprecate(function() {
+- for (var i = 0, len = arguments.length; i < len; ++i) {
+- process.stdout.write(String(arguments[i]));
+- }
+-}, 'util.print: Use console.log instead');
+-
+-
+-exports.puts = exports.deprecate(function() {
+- for (var i = 0, len = arguments.length; i < len; ++i) {
+- process.stdout.write(arguments[i] + '\n');
+- }
+-}, 'util.puts: Use console.log instead');
+-
+-
+-exports.debug = exports.deprecate(function(x) {
+- process.stderr.write('DEBUG: ' + x + '\n');
+-}, 'util.debug: Use console.error instead');
+-
+-
+-exports.error = exports.deprecate(function(x) {
+- for (var i = 0, len = arguments.length; i < len; ++i) {
+- process.stderr.write(arguments[i] + '\n');
+- }
+-}, 'util.error: Use console.error instead');
+-
+-
+-exports.pump = exports.deprecate(function(readStream, writeStream, callback) {
+- var callbackCalled = false;
+-
+- function call(a, b, c) {
+- if (callback && !callbackCalled) {
+- callback(a, b, c);
+- callbackCalled = true;
+- }
+- }
+-
+- readStream.addListener('data', function(chunk) {
+- if (writeStream.write(chunk) === false) readStream.pause();
+- });
+-
+- writeStream.addListener('drain', function() {
+- readStream.resume();
+- });
+-
+- readStream.addListener('end', function() {
+- writeStream.end();
+- });
+-
+- readStream.addListener('close', function() {
+- call();
+- });
+-
+- readStream.addListener('error', function(err) {
+- writeStream.end();
+- call(err);
+- });
+-
+- writeStream.addListener('error', function(err) {
+- readStream.destroy();
+- call(err);
+- });
+-}, 'util.pump(): Use readableStream.pipe() instead');
+-
+-
+-var uv;
+-exports._errnoException = function(err, syscall) {
+- if (isUndefined(uv)) uv = process.binding('uv');
+- var errname = uv.errname(err);
+- var e = new Error(syscall + ' ' + errname);
+- e.code = errname;
+- e.errno = errname;
+- e.syscall = syscall;
+- return e;
+-};
++}
\ No newline at end of file
diff --git a/masteringModule/node_modules/core-util-is/lib/util.js b/masteringModule/node_modules/core-util-is/lib/util.js
new file mode 100644
index 0000000000000000000000000000000000000000..ff4c851c075a2f0fd1654419178eceb22a836100
--- /dev/null
+++ b/masteringModule/node_modules/core-util-is/lib/util.js
@@ -0,0 +1,107 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// NOTE: These type checking functions intentionally don't use `instanceof`
+// because it is fragile and can be easily faked with `Object.create()`.
+
+function isArray(arg) {
+ if (Array.isArray) {
+ return Array.isArray(arg);
+ }
+ return objectToString(arg) === '[object Array]';
+}
+exports.isArray = isArray;
+
+function isBoolean(arg) {
+ return typeof arg === 'boolean';
+}
+exports.isBoolean = isBoolean;
+
+function isNull(arg) {
+ return arg === null;
+}
+exports.isNull = isNull;
+
+function isNullOrUndefined(arg) {
+ return arg == null;
+}
+exports.isNullOrUndefined = isNullOrUndefined;
+
+function isNumber(arg) {
+ return typeof arg === 'number';
+}
+exports.isNumber = isNumber;
+
+function isString(arg) {
+ return typeof arg === 'string';
+}
+exports.isString = isString;
+
+function isSymbol(arg) {
+ return typeof arg === 'symbol';
+}
+exports.isSymbol = isSymbol;
+
+function isUndefined(arg) {
+ return arg === void 0;
+}
+exports.isUndefined = isUndefined;
+
+function isRegExp(re) {
+ return objectToString(re) === '[object RegExp]';
+}
+exports.isRegExp = isRegExp;
+
+function isObject(arg) {
+ return typeof arg === 'object' && arg !== null;
+}
+exports.isObject = isObject;
+
+function isDate(d) {
+ return objectToString(d) === '[object Date]';
+}
+exports.isDate = isDate;
+
+function isError(e) {
+ return (objectToString(e) === '[object Error]' || e instanceof Error);
+}
+exports.isError = isError;
+
+function isFunction(arg) {
+ return typeof arg === 'function';
+}
+exports.isFunction = isFunction;
+
+function isPrimitive(arg) {
+ return arg === null ||
+ typeof arg === 'boolean' ||
+ typeof arg === 'number' ||
+ typeof arg === 'string' ||
+ typeof arg === 'symbol' || // ES6 symbol
+ typeof arg === 'undefined';
+}
+exports.isPrimitive = isPrimitive;
+
+exports.isBuffer = Buffer.isBuffer;
+
+function objectToString(o) {
+ return Object.prototype.toString.call(o);
+}
diff --git a/masteringModule/node_modules/core-util-is/package.json b/masteringModule/node_modules/core-util-is/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..3368e9519f964494f207a80eac9ff04c20459d29
--- /dev/null
+++ b/masteringModule/node_modules/core-util-is/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "core-util-is",
+ "version": "1.0.2",
+ "description": "The `util.is*` functions introduced in Node v0.12.",
+ "main": "lib/util.js",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/core-util-is"
+ },
+ "keywords": [
+ "util",
+ "isBuffer",
+ "isArray",
+ "isNumber",
+ "isString",
+ "isRegExp",
+ "isThis",
+ "isThat",
+ "polyfill"
+ ],
+ "author": "Isaac Z. Schlueter (http://blog.izs.me/)",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/isaacs/core-util-is/issues"
+ },
+ "scripts": {
+ "test": "tap test.js"
+ },
+ "devDependencies": {
+ "tap": "^2.3.0"
+ }
+}
diff --git a/masteringModule/node_modules/core-util-is/test.js b/masteringModule/node_modules/core-util-is/test.js
new file mode 100644
index 0000000000000000000000000000000000000000..1a490c65ac8b5df16357c0e90de3825e150d1164
--- /dev/null
+++ b/masteringModule/node_modules/core-util-is/test.js
@@ -0,0 +1,68 @@
+var assert = require('tap');
+
+var t = require('./lib/util');
+
+assert.equal(t.isArray([]), true);
+assert.equal(t.isArray({}), false);
+
+assert.equal(t.isBoolean(null), false);
+assert.equal(t.isBoolean(true), true);
+assert.equal(t.isBoolean(false), true);
+
+assert.equal(t.isNull(null), true);
+assert.equal(t.isNull(undefined), false);
+assert.equal(t.isNull(false), false);
+assert.equal(t.isNull(), false);
+
+assert.equal(t.isNullOrUndefined(null), true);
+assert.equal(t.isNullOrUndefined(undefined), true);
+assert.equal(t.isNullOrUndefined(false), false);
+assert.equal(t.isNullOrUndefined(), true);
+
+assert.equal(t.isNumber(null), false);
+assert.equal(t.isNumber('1'), false);
+assert.equal(t.isNumber(1), true);
+
+assert.equal(t.isString(null), false);
+assert.equal(t.isString('1'), true);
+assert.equal(t.isString(1), false);
+
+assert.equal(t.isSymbol(null), false);
+assert.equal(t.isSymbol('1'), false);
+assert.equal(t.isSymbol(1), false);
+assert.equal(t.isSymbol(Symbol()), true);
+
+assert.equal(t.isUndefined(null), false);
+assert.equal(t.isUndefined(undefined), true);
+assert.equal(t.isUndefined(false), false);
+assert.equal(t.isUndefined(), true);
+
+assert.equal(t.isRegExp(null), false);
+assert.equal(t.isRegExp('1'), false);
+assert.equal(t.isRegExp(new RegExp()), true);
+
+assert.equal(t.isObject({}), true);
+assert.equal(t.isObject([]), true);
+assert.equal(t.isObject(new RegExp()), true);
+assert.equal(t.isObject(new Date()), true);
+
+assert.equal(t.isDate(null), false);
+assert.equal(t.isDate('1'), false);
+assert.equal(t.isDate(new Date()), true);
+
+assert.equal(t.isError(null), false);
+assert.equal(t.isError({ err: true }), false);
+assert.equal(t.isError(new Error()), true);
+
+assert.equal(t.isFunction(null), false);
+assert.equal(t.isFunction({ }), false);
+assert.equal(t.isFunction(function() {}), true);
+
+assert.equal(t.isPrimitive(null), true);
+assert.equal(t.isPrimitive(''), true);
+assert.equal(t.isPrimitive(0), true);
+assert.equal(t.isPrimitive(new Date()), false);
+
+assert.equal(t.isBuffer(null), false);
+assert.equal(t.isBuffer({}), false);
+assert.equal(t.isBuffer(new Buffer(0)), true);
diff --git a/masteringModule/node_modules/debug/.coveralls.yml b/masteringModule/node_modules/debug/.coveralls.yml
new file mode 100644
index 0000000000000000000000000000000000000000..20a7068581791335487166ddc5001a2ca3a3b060
--- /dev/null
+++ b/masteringModule/node_modules/debug/.coveralls.yml
@@ -0,0 +1 @@
+repo_token: SIAeZjKYlHK74rbcFvNHMUzjRiMpflxve
diff --git a/masteringModule/node_modules/debug/.eslintrc b/masteringModule/node_modules/debug/.eslintrc
new file mode 100644
index 0000000000000000000000000000000000000000..8a37ae2c2e5a35db74b4607b4c74e0f4fe39a3e4
--- /dev/null
+++ b/masteringModule/node_modules/debug/.eslintrc
@@ -0,0 +1,11 @@
+{
+ "env": {
+ "browser": true,
+ "node": true
+ },
+ "rules": {
+ "no-console": 0,
+ "no-empty": [1, { "allowEmptyCatch": true }]
+ },
+ "extends": "eslint:recommended"
+}
diff --git a/masteringModule/node_modules/debug/.npmignore b/masteringModule/node_modules/debug/.npmignore
new file mode 100644
index 0000000000000000000000000000000000000000..5f60eecc84e219e52554407ad38d04abd1cf2111
--- /dev/null
+++ b/masteringModule/node_modules/debug/.npmignore
@@ -0,0 +1,9 @@
+support
+test
+examples
+example
+*.sock
+dist
+yarn.lock
+coverage
+bower.json
diff --git a/masteringModule/node_modules/debug/.travis.yml b/masteringModule/node_modules/debug/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..6c6090c3b09f2e45d8c0a1dc77ff5f4a81e78a3c
--- /dev/null
+++ b/masteringModule/node_modules/debug/.travis.yml
@@ -0,0 +1,14 @@
+
+language: node_js
+node_js:
+ - "6"
+ - "5"
+ - "4"
+
+install:
+ - make node_modules
+
+script:
+ - make lint
+ - make test
+ - make coveralls
diff --git a/masteringModule/node_modules/debug/CHANGELOG.md b/masteringModule/node_modules/debug/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..eadaa189517bbcfb2a6784a48ac8d05d2edafe7c
--- /dev/null
+++ b/masteringModule/node_modules/debug/CHANGELOG.md
@@ -0,0 +1,362 @@
+
+2.6.9 / 2017-09-22
+==================
+
+ * remove ReDoS regexp in %o formatter (#504)
+
+2.6.8 / 2017-05-18
+==================
+
+ * Fix: Check for undefined on browser globals (#462, @marbemac)
+
+2.6.7 / 2017-05-16
+==================
+
+ * Fix: Update ms to 2.0.0 to fix regular expression denial of service vulnerability (#458, @hubdotcom)
+ * Fix: Inline extend function in node implementation (#452, @dougwilson)
+ * Docs: Fix typo (#455, @msasad)
+
+2.6.5 / 2017-04-27
+==================
+
+ * Fix: null reference check on window.documentElement.style.WebkitAppearance (#447, @thebigredgeek)
+ * Misc: clean up browser reference checks (#447, @thebigredgeek)
+ * Misc: add npm-debug.log to .gitignore (@thebigredgeek)
+
+
+2.6.4 / 2017-04-20
+==================
+
+ * Fix: bug that would occure if process.env.DEBUG is a non-string value. (#444, @LucianBuzzo)
+ * Chore: ignore bower.json in npm installations. (#437, @joaovieira)
+ * Misc: update "ms" to v0.7.3 (@tootallnate)
+
+2.6.3 / 2017-03-13
+==================
+
+ * Fix: Electron reference to `process.env.DEBUG` (#431, @paulcbetts)
+ * Docs: Changelog fix (@thebigredgeek)
+
+2.6.2 / 2017-03-10
+==================
+
+ * Fix: DEBUG_MAX_ARRAY_LENGTH (#420, @slavaGanzin)
+ * Docs: Add backers and sponsors from Open Collective (#422, @piamancini)
+ * Docs: Add Slackin invite badge (@tootallnate)
+
+2.6.1 / 2017-02-10
+==================
+
+ * Fix: Module's `export default` syntax fix for IE8 `Expected identifier` error
+ * Fix: Whitelist DEBUG_FD for values 1 and 2 only (#415, @pi0)
+ * Fix: IE8 "Expected identifier" error (#414, @vgoma)
+ * Fix: Namespaces would not disable once enabled (#409, @musikov)
+
+2.6.0 / 2016-12-28
+==================
+
+ * Fix: added better null pointer checks for browser useColors (@thebigredgeek)
+ * Improvement: removed explicit `window.debug` export (#404, @tootallnate)
+ * Improvement: deprecated `DEBUG_FD` environment variable (#405, @tootallnate)
+
+2.5.2 / 2016-12-25
+==================
+
+ * Fix: reference error on window within webworkers (#393, @KlausTrainer)
+ * Docs: fixed README typo (#391, @lurch)
+ * Docs: added notice about v3 api discussion (@thebigredgeek)
+
+2.5.1 / 2016-12-20
+==================
+
+ * Fix: babel-core compatibility
+
+2.5.0 / 2016-12-20
+==================
+
+ * Fix: wrong reference in bower file (@thebigredgeek)
+ * Fix: webworker compatibility (@thebigredgeek)
+ * Fix: output formatting issue (#388, @kribblo)
+ * Fix: babel-loader compatibility (#383, @escwald)
+ * Misc: removed built asset from repo and publications (@thebigredgeek)
+ * Misc: moved source files to /src (#378, @yamikuronue)
+ * Test: added karma integration and replaced babel with browserify for browser tests (#378, @yamikuronue)
+ * Test: coveralls integration (#378, @yamikuronue)
+ * Docs: simplified language in the opening paragraph (#373, @yamikuronue)
+
+2.4.5 / 2016-12-17
+==================
+
+ * Fix: `navigator` undefined in Rhino (#376, @jochenberger)
+ * Fix: custom log function (#379, @hsiliev)
+ * Improvement: bit of cleanup + linting fixes (@thebigredgeek)
+ * Improvement: rm non-maintainted `dist/` dir (#375, @freewil)
+ * Docs: simplified language in the opening paragraph. (#373, @yamikuronue)
+
+2.4.4 / 2016-12-14
+==================
+
+ * Fix: work around debug being loaded in preload scripts for electron (#368, @paulcbetts)
+
+2.4.3 / 2016-12-14
+==================
+
+ * Fix: navigation.userAgent error for react native (#364, @escwald)
+
+2.4.2 / 2016-12-14
+==================
+
+ * Fix: browser colors (#367, @tootallnate)
+ * Misc: travis ci integration (@thebigredgeek)
+ * Misc: added linting and testing boilerplate with sanity check (@thebigredgeek)
+
+2.4.1 / 2016-12-13
+==================
+
+ * Fix: typo that broke the package (#356)
+
+2.4.0 / 2016-12-13
+==================
+
+ * Fix: bower.json references unbuilt src entry point (#342, @justmatt)
+ * Fix: revert "handle regex special characters" (@tootallnate)
+ * Feature: configurable util.inspect()`options for NodeJS (#327, @tootallnate)
+ * Feature: %O`(big O) pretty-prints objects (#322, @tootallnate)
+ * Improvement: allow colors in workers (#335, @botverse)
+ * Improvement: use same color for same namespace. (#338, @lchenay)
+
+2.3.3 / 2016-11-09
+==================
+
+ * Fix: Catch `JSON.stringify()` errors (#195, Jovan Alleyne)
+ * Fix: Returning `localStorage` saved values (#331, Levi Thomason)
+ * Improvement: Don't create an empty object when no `process` (Nathan Rajlich)
+
+2.3.2 / 2016-11-09
+==================
+
+ * Fix: be super-safe in index.js as well (@TooTallNate)
+ * Fix: should check whether process exists (Tom Newby)
+
+2.3.1 / 2016-11-09
+==================
+
+ * Fix: Added electron compatibility (#324, @paulcbetts)
+ * Improvement: Added performance optimizations (@tootallnate)
+ * Readme: Corrected PowerShell environment variable example (#252, @gimre)
+ * Misc: Removed yarn lock file from source control (#321, @fengmk2)
+
+2.3.0 / 2016-11-07
+==================
+
+ * Fix: Consistent placement of ms diff at end of output (#215, @gorangajic)
+ * Fix: Escaping of regex special characters in namespace strings (#250, @zacronos)
+ * Fix: Fixed bug causing crash on react-native (#282, @vkarpov15)
+ * Feature: Enabled ES6+ compatible import via default export (#212 @bucaran)
+ * Feature: Added %O formatter to reflect Chrome's console.log capability (#279, @oncletom)
+ * Package: Update "ms" to 0.7.2 (#315, @DevSide)
+ * Package: removed superfluous version property from bower.json (#207 @kkirsche)
+ * Readme: fix USE_COLORS to DEBUG_COLORS
+ * Readme: Doc fixes for format string sugar (#269, @mlucool)
+ * Readme: Updated docs for DEBUG_FD and DEBUG_COLORS environment variables (#232, @mattlyons0)
+ * Readme: doc fixes for PowerShell (#271 #243, @exoticknight @unreadable)
+ * Readme: better docs for browser support (#224, @matthewmueller)
+ * Tooling: Added yarn integration for development (#317, @thebigredgeek)
+ * Misc: Renamed History.md to CHANGELOG.md (@thebigredgeek)
+ * Misc: Added license file (#226 #274, @CantemoInternal @sdaitzman)
+ * Misc: Updated contributors (@thebigredgeek)
+
+2.2.0 / 2015-05-09
+==================
+
+ * package: update "ms" to v0.7.1 (#202, @dougwilson)
+ * README: add logging to file example (#193, @DanielOchoa)
+ * README: fixed a typo (#191, @amir-s)
+ * browser: expose `storage` (#190, @stephenmathieson)
+ * Makefile: add a `distclean` target (#189, @stephenmathieson)
+
+2.1.3 / 2015-03-13
+==================
+
+ * Updated stdout/stderr example (#186)
+ * Updated example/stdout.js to match debug current behaviour
+ * Renamed example/stderr.js to stdout.js
+ * Update Readme.md (#184)
+ * replace high intensity foreground color for bold (#182, #183)
+
+2.1.2 / 2015-03-01
+==================
+
+ * dist: recompile
+ * update "ms" to v0.7.0
+ * package: update "browserify" to v9.0.3
+ * component: fix "ms.js" repo location
+ * changed bower package name
+ * updated documentation about using debug in a browser
+ * fix: security error on safari (#167, #168, @yields)
+
+2.1.1 / 2014-12-29
+==================
+
+ * browser: use `typeof` to check for `console` existence
+ * browser: check for `console.log` truthiness (fix IE 8/9)
+ * browser: add support for Chrome apps
+ * Readme: added Windows usage remarks
+ * Add `bower.json` to properly support bower install
+
+2.1.0 / 2014-10-15
+==================
+
+ * node: implement `DEBUG_FD` env variable support
+ * package: update "browserify" to v6.1.0
+ * package: add "license" field to package.json (#135, @panuhorsmalahti)
+
+2.0.0 / 2014-09-01
+==================
+
+ * package: update "browserify" to v5.11.0
+ * node: use stderr rather than stdout for logging (#29, @stephenmathieson)
+
+1.0.4 / 2014-07-15
+==================
+
+ * dist: recompile
+ * example: remove `console.info()` log usage
+ * example: add "Content-Type" UTF-8 header to browser example
+ * browser: place %c marker after the space character
+ * browser: reset the "content" color via `color: inherit`
+ * browser: add colors support for Firefox >= v31
+ * debug: prefer an instance `log()` function over the global one (#119)
+ * Readme: update documentation about styled console logs for FF v31 (#116, @wryk)
+
+1.0.3 / 2014-07-09
+==================
+
+ * Add support for multiple wildcards in namespaces (#122, @seegno)
+ * browser: fix lint
+
+1.0.2 / 2014-06-10
+==================
+
+ * browser: update color palette (#113, @gscottolson)
+ * common: make console logging function configurable (#108, @timoxley)
+ * node: fix %o colors on old node <= 0.8.x
+ * Makefile: find node path using shell/which (#109, @timoxley)
+
+1.0.1 / 2014-06-06
+==================
+
+ * browser: use `removeItem()` to clear localStorage
+ * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777)
+ * package: add "contributors" section
+ * node: fix comment typo
+ * README: list authors
+
+1.0.0 / 2014-06-04
+==================
+
+ * make ms diff be global, not be scope
+ * debug: ignore empty strings in enable()
+ * node: make DEBUG_COLORS able to disable coloring
+ * *: export the `colors` array
+ * npmignore: don't publish the `dist` dir
+ * Makefile: refactor to use browserify
+ * package: add "browserify" as a dev dependency
+ * Readme: add Web Inspector Colors section
+ * node: reset terminal color for the debug content
+ * node: map "%o" to `util.inspect()`
+ * browser: map "%j" to `JSON.stringify()`
+ * debug: add custom "formatters"
+ * debug: use "ms" module for humanizing the diff
+ * Readme: add "bash" syntax highlighting
+ * browser: add Firebug color support
+ * browser: add colors for WebKit browsers
+ * node: apply log to `console`
+ * rewrite: abstract common logic for Node & browsers
+ * add .jshintrc file
+
+0.8.1 / 2014-04-14
+==================
+
+ * package: re-add the "component" section
+
+0.8.0 / 2014-03-30
+==================
+
+ * add `enable()` method for nodejs. Closes #27
+ * change from stderr to stdout
+ * remove unnecessary index.js file
+
+0.7.4 / 2013-11-13
+==================
+
+ * remove "browserify" key from package.json (fixes something in browserify)
+
+0.7.3 / 2013-10-30
+==================
+
+ * fix: catch localStorage security error when cookies are blocked (Chrome)
+ * add debug(err) support. Closes #46
+ * add .browser prop to package.json. Closes #42
+
+0.7.2 / 2013-02-06
+==================
+
+ * fix package.json
+ * fix: Mobile Safari (private mode) is broken with debug
+ * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript
+
+0.7.1 / 2013-02-05
+==================
+
+ * add repository URL to package.json
+ * add DEBUG_COLORED to force colored output
+ * add browserify support
+ * fix component. Closes #24
+
+0.7.0 / 2012-05-04
+==================
+
+ * Added .component to package.json
+ * Added debug.component.js build
+
+0.6.0 / 2012-03-16
+==================
+
+ * Added support for "-" prefix in DEBUG [Vinay Pulim]
+ * Added `.enabled` flag to the node version [TooTallNate]
+
+0.5.0 / 2012-02-02
+==================
+
+ * Added: humanize diffs. Closes #8
+ * Added `debug.disable()` to the CS variant
+ * Removed padding. Closes #10
+ * Fixed: persist client-side variant again. Closes #9
+
+0.4.0 / 2012-02-01
+==================
+
+ * Added browser variant support for older browsers [TooTallNate]
+ * Added `debug.enable('project:*')` to browser variant [TooTallNate]
+ * Added padding to diff (moved it to the right)
+
+0.3.0 / 2012-01-26
+==================
+
+ * Added millisecond diff when isatty, otherwise UTC string
+
+0.2.0 / 2012-01-22
+==================
+
+ * Added wildcard support
+
+0.1.0 / 2011-12-02
+==================
+
+ * Added: remove colors unless stderr isatty [TooTallNate]
+
+0.0.1 / 2010-01-03
+==================
+
+ * Initial release
diff --git a/masteringModule/node_modules/debug/LICENSE b/masteringModule/node_modules/debug/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..658c933d28255e8c716899789e8c0f846e5dc125
--- /dev/null
+++ b/masteringModule/node_modules/debug/LICENSE
@@ -0,0 +1,19 @@
+(The MIT License)
+
+Copyright (c) 2014 TJ Holowaychuk
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+and associated documentation files (the 'Software'), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
diff --git a/masteringModule/node_modules/debug/Makefile b/masteringModule/node_modules/debug/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..584da8bf938e639ece3ba2bd4105c215c2b1ff51
--- /dev/null
+++ b/masteringModule/node_modules/debug/Makefile
@@ -0,0 +1,50 @@
+# get Makefile directory name: http://stackoverflow.com/a/5982798/376773
+THIS_MAKEFILE_PATH:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
+THIS_DIR:=$(shell cd $(dir $(THIS_MAKEFILE_PATH));pwd)
+
+# BIN directory
+BIN := $(THIS_DIR)/node_modules/.bin
+
+# Path
+PATH := node_modules/.bin:$(PATH)
+SHELL := /bin/bash
+
+# applications
+NODE ?= $(shell which node)
+YARN ?= $(shell which yarn)
+PKG ?= $(if $(YARN),$(YARN),$(NODE) $(shell which npm))
+BROWSERIFY ?= $(NODE) $(BIN)/browserify
+
+.FORCE:
+
+install: node_modules
+
+node_modules: package.json
+ @NODE_ENV= $(PKG) install
+ @touch node_modules
+
+lint: .FORCE
+ eslint browser.js debug.js index.js node.js
+
+test-node: .FORCE
+ istanbul cover node_modules/mocha/bin/_mocha -- test/**.js
+
+test-browser: .FORCE
+ mkdir -p dist
+
+ @$(BROWSERIFY) \
+ --standalone debug \
+ . > dist/debug.js
+
+ karma start --single-run
+ rimraf dist
+
+test: .FORCE
+ concurrently \
+ "make test-node" \
+ "make test-browser"
+
+coveralls:
+ cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js
+
+.PHONY: all install clean distclean
diff --git a/masteringModule/node_modules/debug/README.md b/masteringModule/node_modules/debug/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..f67be6b317c19952bb506a9e15e797615eea4533
--- /dev/null
+++ b/masteringModule/node_modules/debug/README.md
@@ -0,0 +1,312 @@
+# debug
+[](https://travis-ci.org/visionmedia/debug) [](https://coveralls.io/github/visionmedia/debug?branch=master) [](https://visionmedia-community-slackin.now.sh/) [](#backers)
+[](#sponsors)
+
+
+
+A tiny node.js debugging utility modelled after node core's debugging technique.
+
+**Discussion around the V3 API is under way [here](https://github.com/visionmedia/debug/issues/370)**
+
+## Installation
+
+```bash
+$ npm install debug
+```
+
+## Usage
+
+`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole.
+
+Example _app.js_:
+
+```js
+var debug = require('debug')('http')
+ , http = require('http')
+ , name = 'My App';
+
+// fake app
+
+debug('booting %s', name);
+
+http.createServer(function(req, res){
+ debug(req.method + ' ' + req.url);
+ res.end('hello\n');
+}).listen(3000, function(){
+ debug('listening');
+});
+
+// fake worker of some kind
+
+require('./worker');
+```
+
+Example _worker.js_:
+
+```js
+var debug = require('debug')('worker');
+
+setInterval(function(){
+ debug('doing some work');
+}, 1000);
+```
+
+ The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples:
+
+ 
+
+ 
+
+#### Windows note
+
+ On Windows the environment variable is set using the `set` command.
+
+ ```cmd
+ set DEBUG=*,-not_this
+ ```
+
+ Note that PowerShell uses different syntax to set environment variables.
+
+ ```cmd
+ $env:DEBUG = "*,-not_this"
+ ```
+
+Then, run the program to be debugged as usual.
+
+## Millisecond diff
+
+ When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls.
+
+ 
+
+ When stdout is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below:
+
+ 
+
+## Conventions
+
+ If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser".
+
+## Wildcards
+
+ The `*` character may be used as a wildcard. Suppose for example your library has debuggers named "connect:bodyParser", "connect:compress", "connect:session", instead of listing all three with `DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`.
+
+ You can also exclude specific debuggers by prefixing them with a "-" character. For example, `DEBUG=*,-connect:*` would include all debuggers except those starting with "connect:".
+
+## Environment Variables
+
+ When running through Node.js, you can set a few environment variables that will
+ change the behavior of the debug logging:
+
+| Name | Purpose |
+|-----------|-------------------------------------------------|
+| `DEBUG` | Enables/disables specific debugging namespaces. |
+| `DEBUG_COLORS`| Whether or not to use colors in the debug output. |
+| `DEBUG_DEPTH` | Object inspection depth. |
+| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. |
+
+
+ __Note:__ The environment variables beginning with `DEBUG_` end up being
+ converted into an Options object that gets used with `%o`/`%O` formatters.
+ See the Node.js documentation for
+ [`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options)
+ for the complete list.
+
+## Formatters
+
+
+ Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. Below are the officially supported formatters:
+
+| Formatter | Representation |
+|-----------|----------------|
+| `%O` | Pretty-print an Object on multiple lines. |
+| `%o` | Pretty-print an Object all on a single line. |
+| `%s` | String. |
+| `%d` | Number (both integer and float). |
+| `%j` | JSON. Replaced with the string '[Circular]' if the argument contains circular references. |
+| `%%` | Single percent sign ('%'). This does not consume an argument. |
+
+### Custom formatters
+
+ You can add custom formatters by extending the `debug.formatters` object. For example, if you wanted to add support for rendering a Buffer as hex with `%h`, you could do something like:
+
+```js
+const createDebug = require('debug')
+createDebug.formatters.h = (v) => {
+ return v.toString('hex')
+}
+
+// …elsewhere
+const debug = createDebug('foo')
+debug('this is hex: %h', new Buffer('hello world'))
+// foo this is hex: 68656c6c6f20776f726c6421 +0ms
+```
+
+## Browser support
+ You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify),
+ or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest),
+ if you don't want to build it yourself.
+
+ Debug's enable state is currently persisted by `localStorage`.
+ Consider the situation shown below where you have `worker:a` and `worker:b`,
+ and wish to debug both. You can enable this using `localStorage.debug`:
+
+```js
+localStorage.debug = 'worker:*'
+```
+
+And then refresh the page.
+
+```js
+a = debug('worker:a');
+b = debug('worker:b');
+
+setInterval(function(){
+ a('doing some work');
+}, 1000);
+
+setInterval(function(){
+ b('doing some work');
+}, 1200);
+```
+
+#### Web Inspector Colors
+
+ Colors are also enabled on "Web Inspectors" that understand the `%c` formatting
+ option. These are WebKit web inspectors, Firefox ([since version
+ 31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/))
+ and the Firebug plugin for Firefox (any version).
+
+ Colored output looks something like:
+
+ 
+
+
+## Output streams
+
+ By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method:
+
+Example _stdout.js_:
+
+```js
+var debug = require('debug');
+var error = debug('app:error');
+
+// by default stderr is used
+error('goes to stderr!');
+
+var log = debug('app:log');
+// set this namespace to log via console.log
+log.log = console.log.bind(console); // don't forget to bind to console!
+log('goes to stdout');
+error('still goes to stderr!');
+
+// set all output to go via console.info
+// overrides all per-namespace log settings
+debug.log = console.info.bind(console);
+error('now goes to stdout via console.info');
+log('still goes to stdout, but via console.info now');
+```
+
+
+## Authors
+
+ - TJ Holowaychuk
+ - Nathan Rajlich
+ - Andrew Rhyne
+
+## Backers
+
+Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Sponsors
+
+Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## License
+
+(The MIT License)
+
+Copyright (c) 2014-2016 TJ Holowaychuk <tj@vision-media.ca>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/masteringModule/node_modules/debug/component.json b/masteringModule/node_modules/debug/component.json
new file mode 100644
index 0000000000000000000000000000000000000000..9de26410f0d0bba2e48a07f094407d602eb5dd89
--- /dev/null
+++ b/masteringModule/node_modules/debug/component.json
@@ -0,0 +1,19 @@
+{
+ "name": "debug",
+ "repo": "visionmedia/debug",
+ "description": "small debugging utility",
+ "version": "2.6.9",
+ "keywords": [
+ "debug",
+ "log",
+ "debugger"
+ ],
+ "main": "src/browser.js",
+ "scripts": [
+ "src/browser.js",
+ "src/debug.js"
+ ],
+ "dependencies": {
+ "rauchg/ms.js": "0.7.1"
+ }
+}
diff --git a/masteringModule/node_modules/debug/karma.conf.js b/masteringModule/node_modules/debug/karma.conf.js
new file mode 100644
index 0000000000000000000000000000000000000000..103a82d15bd72b3cdf9ba4108272985f7e0bfdb3
--- /dev/null
+++ b/masteringModule/node_modules/debug/karma.conf.js
@@ -0,0 +1,70 @@
+// Karma configuration
+// Generated on Fri Dec 16 2016 13:09:51 GMT+0000 (UTC)
+
+module.exports = function(config) {
+ config.set({
+
+ // base path that will be used to resolve all patterns (eg. files, exclude)
+ basePath: '',
+
+
+ // frameworks to use
+ // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
+ frameworks: ['mocha', 'chai', 'sinon'],
+
+
+ // list of files / patterns to load in the browser
+ files: [
+ 'dist/debug.js',
+ 'test/*spec.js'
+ ],
+
+
+ // list of files to exclude
+ exclude: [
+ 'src/node.js'
+ ],
+
+
+ // preprocess matching files before serving them to the browser
+ // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
+ preprocessors: {
+ },
+
+ // test results reporter to use
+ // possible values: 'dots', 'progress'
+ // available reporters: https://npmjs.org/browse/keyword/karma-reporter
+ reporters: ['progress'],
+
+
+ // web server port
+ port: 9876,
+
+
+ // enable / disable colors in the output (reporters and logs)
+ colors: true,
+
+
+ // level of logging
+ // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
+ logLevel: config.LOG_INFO,
+
+
+ // enable / disable watching file and executing tests whenever any file changes
+ autoWatch: true,
+
+
+ // start these browsers
+ // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
+ browsers: ['PhantomJS'],
+
+
+ // Continuous Integration mode
+ // if true, Karma captures browsers, runs the tests and exits
+ singleRun: false,
+
+ // Concurrency level
+ // how many browser should be started simultaneous
+ concurrency: Infinity
+ })
+}
diff --git a/masteringModule/node_modules/debug/node.js b/masteringModule/node_modules/debug/node.js
new file mode 100644
index 0000000000000000000000000000000000000000..7fc36fe6dbecbfd41530c5a490cc738ec2968653
--- /dev/null
+++ b/masteringModule/node_modules/debug/node.js
@@ -0,0 +1 @@
+module.exports = require('./src/node');
diff --git a/masteringModule/node_modules/debug/package.json b/masteringModule/node_modules/debug/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..dc787ba76781de4c1d4721b69aa881a548365a90
--- /dev/null
+++ b/masteringModule/node_modules/debug/package.json
@@ -0,0 +1,49 @@
+{
+ "name": "debug",
+ "version": "2.6.9",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/visionmedia/debug.git"
+ },
+ "description": "small debugging utility",
+ "keywords": [
+ "debug",
+ "log",
+ "debugger"
+ ],
+ "author": "TJ Holowaychuk ",
+ "contributors": [
+ "Nathan Rajlich (http://n8.io)",
+ "Andrew Rhyne "
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.0.0"
+ },
+ "devDependencies": {
+ "browserify": "9.0.3",
+ "chai": "^3.5.0",
+ "concurrently": "^3.1.0",
+ "coveralls": "^2.11.15",
+ "eslint": "^3.12.1",
+ "istanbul": "^0.4.5",
+ "karma": "^1.3.0",
+ "karma-chai": "^0.1.0",
+ "karma-mocha": "^1.3.0",
+ "karma-phantomjs-launcher": "^1.0.2",
+ "karma-sinon": "^1.0.5",
+ "mocha": "^3.2.0",
+ "mocha-lcov-reporter": "^1.2.0",
+ "rimraf": "^2.5.4",
+ "sinon": "^1.17.6",
+ "sinon-chai": "^2.8.0"
+ },
+ "main": "./src/index.js",
+ "browser": "./src/browser.js",
+ "component": {
+ "scripts": {
+ "debug/index.js": "browser.js",
+ "debug/debug.js": "debug.js"
+ }
+ }
+}
diff --git a/masteringModule/node_modules/debug/src/browser.js b/masteringModule/node_modules/debug/src/browser.js
new file mode 100644
index 0000000000000000000000000000000000000000..7106924934501fd4035efe78678281020328acc5
--- /dev/null
+++ b/masteringModule/node_modules/debug/src/browser.js
@@ -0,0 +1,185 @@
+/**
+ * This is the web browser implementation of `debug()`.
+ *
+ * Expose `debug()` as the module.
+ */
+
+exports = module.exports = require('./debug');
+exports.log = log;
+exports.formatArgs = formatArgs;
+exports.save = save;
+exports.load = load;
+exports.useColors = useColors;
+exports.storage = 'undefined' != typeof chrome
+ && 'undefined' != typeof chrome.storage
+ ? chrome.storage.local
+ : localstorage();
+
+/**
+ * Colors.
+ */
+
+exports.colors = [
+ 'lightseagreen',
+ 'forestgreen',
+ 'goldenrod',
+ 'dodgerblue',
+ 'darkorchid',
+ 'crimson'
+];
+
+/**
+ * Currently only WebKit-based Web Inspectors, Firefox >= v31,
+ * and the Firebug extension (any Firefox version) are known
+ * to support "%c" CSS customizations.
+ *
+ * TODO: add a `localStorage` variable to explicitly enable/disable colors
+ */
+
+function useColors() {
+ // NB: In an Electron preload script, document will be defined but not fully
+ // initialized. Since we know we're in Chrome, we'll just detect this case
+ // explicitly
+ if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
+ return true;
+ }
+
+ // is webkit? http://stackoverflow.com/a/16459606/376773
+ // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
+ return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
+ // is firebug? http://stackoverflow.com/a/398120/376773
+ (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
+ // is firefox >= v31?
+ // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
+ (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
+ // double check webkit in userAgent just in case we are in a worker
+ (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
+}
+
+/**
+ * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
+ */
+
+exports.formatters.j = function(v) {
+ try {
+ return JSON.stringify(v);
+ } catch (err) {
+ return '[UnexpectedJSONParseError]: ' + err.message;
+ }
+};
+
+
+/**
+ * Colorize log arguments if enabled.
+ *
+ * @api public
+ */
+
+function formatArgs(args) {
+ var useColors = this.useColors;
+
+ args[0] = (useColors ? '%c' : '')
+ + this.namespace
+ + (useColors ? ' %c' : ' ')
+ + args[0]
+ + (useColors ? '%c ' : ' ')
+ + '+' + exports.humanize(this.diff);
+
+ if (!useColors) return;
+
+ var c = 'color: ' + this.color;
+ args.splice(1, 0, c, 'color: inherit')
+
+ // the final "%c" is somewhat tricky, because there could be other
+ // arguments passed either before or after the %c, so we need to
+ // figure out the correct index to insert the CSS into
+ var index = 0;
+ var lastC = 0;
+ args[0].replace(/%[a-zA-Z%]/g, function(match) {
+ if ('%%' === match) return;
+ index++;
+ if ('%c' === match) {
+ // we only are interested in the *last* %c
+ // (the user may have provided their own)
+ lastC = index;
+ }
+ });
+
+ args.splice(lastC, 0, c);
+}
+
+/**
+ * Invokes `console.log()` when available.
+ * No-op when `console.log` is not a "function".
+ *
+ * @api public
+ */
+
+function log() {
+ // this hackery is required for IE8/9, where
+ // the `console.log` function doesn't have 'apply'
+ return 'object' === typeof console
+ && console.log
+ && Function.prototype.apply.call(console.log, console, arguments);
+}
+
+/**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+
+function save(namespaces) {
+ try {
+ if (null == namespaces) {
+ exports.storage.removeItem('debug');
+ } else {
+ exports.storage.debug = namespaces;
+ }
+ } catch(e) {}
+}
+
+/**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+
+function load() {
+ var r;
+ try {
+ r = exports.storage.debug;
+ } catch(e) {}
+
+ // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
+ if (!r && typeof process !== 'undefined' && 'env' in process) {
+ r = process.env.DEBUG;
+ }
+
+ return r;
+}
+
+/**
+ * Enable namespaces listed in `localStorage.debug` initially.
+ */
+
+exports.enable(load());
+
+/**
+ * Localstorage attempts to return the localstorage.
+ *
+ * This is necessary because safari throws
+ * when a user disables cookies/localstorage
+ * and you attempt to access it.
+ *
+ * @return {LocalStorage}
+ * @api private
+ */
+
+function localstorage() {
+ try {
+ return window.localStorage;
+ } catch (e) {}
+}
diff --git a/masteringModule/node_modules/debug/src/debug.js b/masteringModule/node_modules/debug/src/debug.js
new file mode 100644
index 0000000000000000000000000000000000000000..6a5e3fc94c3ab80e123c3056b6c5dbe056d21658
--- /dev/null
+++ b/masteringModule/node_modules/debug/src/debug.js
@@ -0,0 +1,202 @@
+
+/**
+ * This is the common logic for both the Node.js and web browser
+ * implementations of `debug()`.
+ *
+ * Expose `debug()` as the module.
+ */
+
+exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
+exports.coerce = coerce;
+exports.disable = disable;
+exports.enable = enable;
+exports.enabled = enabled;
+exports.humanize = require('ms');
+
+/**
+ * The currently active debug mode names, and names to skip.
+ */
+
+exports.names = [];
+exports.skips = [];
+
+/**
+ * Map of special "%n" handling functions, for the debug "format" argument.
+ *
+ * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
+ */
+
+exports.formatters = {};
+
+/**
+ * Previous log timestamp.
+ */
+
+var prevTime;
+
+/**
+ * Select a color.
+ * @param {String} namespace
+ * @return {Number}
+ * @api private
+ */
+
+function selectColor(namespace) {
+ var hash = 0, i;
+
+ for (i in namespace) {
+ hash = ((hash << 5) - hash) + namespace.charCodeAt(i);
+ hash |= 0; // Convert to 32bit integer
+ }
+
+ return exports.colors[Math.abs(hash) % exports.colors.length];
+}
+
+/**
+ * Create a debugger with the given `namespace`.
+ *
+ * @param {String} namespace
+ * @return {Function}
+ * @api public
+ */
+
+function createDebug(namespace) {
+
+ function debug() {
+ // disabled?
+ if (!debug.enabled) return;
+
+ var self = debug;
+
+ // set `diff` timestamp
+ var curr = +new Date();
+ var ms = curr - (prevTime || curr);
+ self.diff = ms;
+ self.prev = prevTime;
+ self.curr = curr;
+ prevTime = curr;
+
+ // turn the `arguments` into a proper Array
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; i++) {
+ args[i] = arguments[i];
+ }
+
+ args[0] = exports.coerce(args[0]);
+
+ if ('string' !== typeof args[0]) {
+ // anything else let's inspect with %O
+ args.unshift('%O');
+ }
+
+ // apply any `formatters` transformations
+ var index = 0;
+ args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
+ // if we encounter an escaped % then don't increase the array index
+ if (match === '%%') return match;
+ index++;
+ var formatter = exports.formatters[format];
+ if ('function' === typeof formatter) {
+ var val = args[index];
+ match = formatter.call(self, val);
+
+ // now we need to remove `args[index]` since it's inlined in the `format`
+ args.splice(index, 1);
+ index--;
+ }
+ return match;
+ });
+
+ // apply env-specific formatting (colors, etc.)
+ exports.formatArgs.call(self, args);
+
+ var logFn = debug.log || exports.log || console.log.bind(console);
+ logFn.apply(self, args);
+ }
+
+ debug.namespace = namespace;
+ debug.enabled = exports.enabled(namespace);
+ debug.useColors = exports.useColors();
+ debug.color = selectColor(namespace);
+
+ // env-specific initialization logic for debug instances
+ if ('function' === typeof exports.init) {
+ exports.init(debug);
+ }
+
+ return debug;
+}
+
+/**
+ * Enables a debug mode by namespaces. This can include modes
+ * separated by a colon and wildcards.
+ *
+ * @param {String} namespaces
+ * @api public
+ */
+
+function enable(namespaces) {
+ exports.save(namespaces);
+
+ exports.names = [];
+ exports.skips = [];
+
+ var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
+ var len = split.length;
+
+ for (var i = 0; i < len; i++) {
+ if (!split[i]) continue; // ignore empty strings
+ namespaces = split[i].replace(/\*/g, '.*?');
+ if (namespaces[0] === '-') {
+ exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
+ } else {
+ exports.names.push(new RegExp('^' + namespaces + '$'));
+ }
+ }
+}
+
+/**
+ * Disable debug output.
+ *
+ * @api public
+ */
+
+function disable() {
+ exports.enable('');
+}
+
+/**
+ * Returns true if the given mode name is enabled, false otherwise.
+ *
+ * @param {String} name
+ * @return {Boolean}
+ * @api public
+ */
+
+function enabled(name) {
+ var i, len;
+ for (i = 0, len = exports.skips.length; i < len; i++) {
+ if (exports.skips[i].test(name)) {
+ return false;
+ }
+ }
+ for (i = 0, len = exports.names.length; i < len; i++) {
+ if (exports.names[i].test(name)) {
+ return true;
+ }
+ }
+ return false;
+}
+
+/**
+ * Coerce `val`.
+ *
+ * @param {Mixed} val
+ * @return {Mixed}
+ * @api private
+ */
+
+function coerce(val) {
+ if (val instanceof Error) return val.stack || val.message;
+ return val;
+}
diff --git a/masteringModule/node_modules/debug/src/index.js b/masteringModule/node_modules/debug/src/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..e12cf4d58c9f2d6d2d2e656f9cbb0f703cb5fa29
--- /dev/null
+++ b/masteringModule/node_modules/debug/src/index.js
@@ -0,0 +1,10 @@
+/**
+ * Detect Electron renderer process, which is node, but we should
+ * treat as a browser.
+ */
+
+if (typeof process !== 'undefined' && process.type === 'renderer') {
+ module.exports = require('./browser.js');
+} else {
+ module.exports = require('./node.js');
+}
diff --git a/masteringModule/node_modules/debug/src/inspector-log.js b/masteringModule/node_modules/debug/src/inspector-log.js
new file mode 100644
index 0000000000000000000000000000000000000000..60ea6c04aafd41d0ea3bcd78f58312ecf0eda436
--- /dev/null
+++ b/masteringModule/node_modules/debug/src/inspector-log.js
@@ -0,0 +1,15 @@
+module.exports = inspectorLog;
+
+// black hole
+const nullStream = new (require('stream').Writable)();
+nullStream._write = () => {};
+
+/**
+ * Outputs a `console.log()` to the Node.js Inspector console *only*.
+ */
+function inspectorLog() {
+ const stdout = console._stdout;
+ console._stdout = nullStream;
+ console.log.apply(console, arguments);
+ console._stdout = stdout;
+}
diff --git a/masteringModule/node_modules/debug/src/node.js b/masteringModule/node_modules/debug/src/node.js
new file mode 100644
index 0000000000000000000000000000000000000000..b15109c905a45bcb5db701cf37cf4e19385c3167
--- /dev/null
+++ b/masteringModule/node_modules/debug/src/node.js
@@ -0,0 +1,248 @@
+/**
+ * Module dependencies.
+ */
+
+var tty = require('tty');
+var util = require('util');
+
+/**
+ * This is the Node.js implementation of `debug()`.
+ *
+ * Expose `debug()` as the module.
+ */
+
+exports = module.exports = require('./debug');
+exports.init = init;
+exports.log = log;
+exports.formatArgs = formatArgs;
+exports.save = save;
+exports.load = load;
+exports.useColors = useColors;
+
+/**
+ * Colors.
+ */
+
+exports.colors = [6, 2, 3, 4, 5, 1];
+
+/**
+ * Build up the default `inspectOpts` object from the environment variables.
+ *
+ * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
+ */
+
+exports.inspectOpts = Object.keys(process.env).filter(function (key) {
+ return /^debug_/i.test(key);
+}).reduce(function (obj, key) {
+ // camel-case
+ var prop = key
+ .substring(6)
+ .toLowerCase()
+ .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });
+
+ // coerce string value into JS value
+ var val = process.env[key];
+ if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
+ else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
+ else if (val === 'null') val = null;
+ else val = Number(val);
+
+ obj[prop] = val;
+ return obj;
+}, {});
+
+/**
+ * The file descriptor to write the `debug()` calls to.
+ * Set the `DEBUG_FD` env variable to override with another value. i.e.:
+ *
+ * $ DEBUG_FD=3 node script.js 3>debug.log
+ */
+
+var fd = parseInt(process.env.DEBUG_FD, 10) || 2;
+
+if (1 !== fd && 2 !== fd) {
+ util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()
+}
+
+var stream = 1 === fd ? process.stdout :
+ 2 === fd ? process.stderr :
+ createWritableStdioStream(fd);
+
+/**
+ * Is stdout a TTY? Colored output is enabled when `true`.
+ */
+
+function useColors() {
+ return 'colors' in exports.inspectOpts
+ ? Boolean(exports.inspectOpts.colors)
+ : tty.isatty(fd);
+}
+
+/**
+ * Map %o to `util.inspect()`, all on a single line.
+ */
+
+exports.formatters.o = function(v) {
+ this.inspectOpts.colors = this.useColors;
+ return util.inspect(v, this.inspectOpts)
+ .split('\n').map(function(str) {
+ return str.trim()
+ }).join(' ');
+};
+
+/**
+ * Map %o to `util.inspect()`, allowing multiple lines if needed.
+ */
+
+exports.formatters.O = function(v) {
+ this.inspectOpts.colors = this.useColors;
+ return util.inspect(v, this.inspectOpts);
+};
+
+/**
+ * Adds ANSI color escape codes if enabled.
+ *
+ * @api public
+ */
+
+function formatArgs(args) {
+ var name = this.namespace;
+ var useColors = this.useColors;
+
+ if (useColors) {
+ var c = this.color;
+ var prefix = ' \u001b[3' + c + ';1m' + name + ' ' + '\u001b[0m';
+
+ args[0] = prefix + args[0].split('\n').join('\n' + prefix);
+ args.push('\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\u001b[0m');
+ } else {
+ args[0] = new Date().toUTCString()
+ + ' ' + name + ' ' + args[0];
+ }
+}
+
+/**
+ * Invokes `util.format()` with the specified arguments and writes to `stream`.
+ */
+
+function log() {
+ return stream.write(util.format.apply(util, arguments) + '\n');
+}
+
+/**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+
+function save(namespaces) {
+ if (null == namespaces) {
+ // If you set a process.env field to null or undefined, it gets cast to the
+ // string 'null' or 'undefined'. Just delete instead.
+ delete process.env.DEBUG;
+ } else {
+ process.env.DEBUG = namespaces;
+ }
+}
+
+/**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+
+function load() {
+ return process.env.DEBUG;
+}
+
+/**
+ * Copied from `node/src/node.js`.
+ *
+ * XXX: It's lame that node doesn't expose this API out-of-the-box. It also
+ * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.
+ */
+
+function createWritableStdioStream (fd) {
+ var stream;
+ var tty_wrap = process.binding('tty_wrap');
+
+ // Note stream._type is used for test-module-load-list.js
+
+ switch (tty_wrap.guessHandleType(fd)) {
+ case 'TTY':
+ stream = new tty.WriteStream(fd);
+ stream._type = 'tty';
+
+ // Hack to have stream not keep the event loop alive.
+ // See https://github.com/joyent/node/issues/1726
+ if (stream._handle && stream._handle.unref) {
+ stream._handle.unref();
+ }
+ break;
+
+ case 'FILE':
+ var fs = require('fs');
+ stream = new fs.SyncWriteStream(fd, { autoClose: false });
+ stream._type = 'fs';
+ break;
+
+ case 'PIPE':
+ case 'TCP':
+ var net = require('net');
+ stream = new net.Socket({
+ fd: fd,
+ readable: false,
+ writable: true
+ });
+
+ // FIXME Should probably have an option in net.Socket to create a
+ // stream from an existing fd which is writable only. But for now
+ // we'll just add this hack and set the `readable` member to false.
+ // Test: ./node test/fixtures/echo.js < /etc/passwd
+ stream.readable = false;
+ stream.read = null;
+ stream._type = 'pipe';
+
+ // FIXME Hack to have stream not keep the event loop alive.
+ // See https://github.com/joyent/node/issues/1726
+ if (stream._handle && stream._handle.unref) {
+ stream._handle.unref();
+ }
+ break;
+
+ default:
+ // Probably an error on in uv_guess_handle()
+ throw new Error('Implement me. Unknown stream file type!');
+ }
+
+ // For supporting legacy API we put the FD here.
+ stream.fd = fd;
+
+ stream._isStdio = true;
+
+ return stream;
+}
+
+/**
+ * Init logic for `debug` instances.
+ *
+ * Create a new `inspectOpts` object in case `useColors` is set
+ * differently for a particular `debug` instance.
+ */
+
+function init (debug) {
+ debug.inspectOpts = {};
+
+ var keys = Object.keys(exports.inspectOpts);
+ for (var i = 0; i < keys.length; i++) {
+ debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
+ }
+}
+
+/**
+ * Enable namespaces listed in `process.env.DEBUG` initially.
+ */
+
+exports.enable(load());
diff --git a/masteringModule/node_modules/delayed-stream/.npmignore b/masteringModule/node_modules/delayed-stream/.npmignore
new file mode 100644
index 0000000000000000000000000000000000000000..9daeafb9864cf43055ae93beb0afd6c7d144bfa4
--- /dev/null
+++ b/masteringModule/node_modules/delayed-stream/.npmignore
@@ -0,0 +1 @@
+test
diff --git a/masteringModule/node_modules/delayed-stream/License b/masteringModule/node_modules/delayed-stream/License
new file mode 100644
index 0000000000000000000000000000000000000000..4804b7ab411f5f72ff74343a88bc503ecc309033
--- /dev/null
+++ b/masteringModule/node_modules/delayed-stream/License
@@ -0,0 +1,19 @@
+Copyright (c) 2011 Debuggable Limited
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/masteringModule/node_modules/delayed-stream/Makefile b/masteringModule/node_modules/delayed-stream/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..b4ff85a33b6eb482476385b7c3e6661ec9c9eb0c
--- /dev/null
+++ b/masteringModule/node_modules/delayed-stream/Makefile
@@ -0,0 +1,7 @@
+SHELL := /bin/bash
+
+test:
+ @./test/run.js
+
+.PHONY: test
+
diff --git a/masteringModule/node_modules/delayed-stream/Readme.md b/masteringModule/node_modules/delayed-stream/Readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..aca36f9f0bc9662c8ff39d6e61e727e69fbe5b2a
--- /dev/null
+++ b/masteringModule/node_modules/delayed-stream/Readme.md
@@ -0,0 +1,141 @@
+# delayed-stream
+
+Buffers events from a stream until you are ready to handle them.
+
+## Installation
+
+``` bash
+npm install delayed-stream
+```
+
+## Usage
+
+The following example shows how to write a http echo server that delays its
+response by 1000 ms.
+
+``` javascript
+var DelayedStream = require('delayed-stream');
+var http = require('http');
+
+http.createServer(function(req, res) {
+ var delayed = DelayedStream.create(req);
+
+ setTimeout(function() {
+ res.writeHead(200);
+ delayed.pipe(res);
+ }, 1000);
+});
+```
+
+If you are not using `Stream#pipe`, you can also manually release the buffered
+events by calling `delayedStream.resume()`:
+
+``` javascript
+var delayed = DelayedStream.create(req);
+
+setTimeout(function() {
+ // Emit all buffered events and resume underlaying source
+ delayed.resume();
+}, 1000);
+```
+
+## Implementation
+
+In order to use this meta stream properly, here are a few things you should
+know about the implementation.
+
+### Event Buffering / Proxying
+
+All events of the `source` stream are hijacked by overwriting the `source.emit`
+method. Until node implements a catch-all event listener, this is the only way.
+
+However, delayed-stream still continues to emit all events it captures on the
+`source`, regardless of whether you have released the delayed stream yet or
+not.
+
+Upon creation, delayed-stream captures all `source` events and stores them in
+an internal event buffer. Once `delayedStream.release()` is called, all
+buffered events are emitted on the `delayedStream`, and the event buffer is
+cleared. After that, delayed-stream merely acts as a proxy for the underlaying
+source.
+
+### Error handling
+
+Error events on `source` are buffered / proxied just like any other events.
+However, `delayedStream.create` attaches a no-op `'error'` listener to the
+`source`. This way you only have to handle errors on the `delayedStream`
+object, rather than in two places.
+
+### Buffer limits
+
+delayed-stream provides a `maxDataSize` property that can be used to limit
+the amount of data being buffered. In order to protect you from bad `source`
+streams that don't react to `source.pause()`, this feature is enabled by
+default.
+
+## API
+
+### DelayedStream.create(source, [options])
+
+Returns a new `delayedStream`. Available options are:
+
+* `pauseStream`
+* `maxDataSize`
+
+The description for those properties can be found below.
+
+### delayedStream.source
+
+The `source` stream managed by this object. This is useful if you are
+passing your `delayedStream` around, and you still want to access properties
+on the `source` object.
+
+### delayedStream.pauseStream = true
+
+Whether to pause the underlaying `source` when calling
+`DelayedStream.create()`. Modifying this property afterwards has no effect.
+
+### delayedStream.maxDataSize = 1024 * 1024
+
+The amount of data to buffer before emitting an `error`.
+
+If the underlaying source is emitting `Buffer` objects, the `maxDataSize`
+refers to bytes.
+
+If the underlaying source is emitting JavaScript strings, the size refers to
+characters.
+
+If you know what you are doing, you can set this property to `Infinity` to
+disable this feature. You can also modify this property during runtime.
+
+### delayedStream.dataSize = 0
+
+The amount of data buffered so far.
+
+### delayedStream.readable
+
+An ECMA5 getter that returns the value of `source.readable`.
+
+### delayedStream.resume()
+
+If the `delayedStream` has not been released so far, `delayedStream.release()`
+is called.
+
+In either case, `source.resume()` is called.
+
+### delayedStream.pause()
+
+Calls `source.pause()`.
+
+### delayedStream.pipe(dest)
+
+Calls `delayedStream.resume()` and then proxies the arguments to `source.pipe`.
+
+### delayedStream.release()
+
+Emits and clears all events that have been buffered up so far. This does not
+resume the underlaying source, use `delayedStream.resume()` instead.
+
+## License
+
+delayed-stream is licensed under the MIT license.
diff --git a/masteringModule/node_modules/delayed-stream/lib/delayed_stream.js b/masteringModule/node_modules/delayed-stream/lib/delayed_stream.js
new file mode 100644
index 0000000000000000000000000000000000000000..b38fc85ff415f0bbf893eb55eaf54dcbba67e73b
--- /dev/null
+++ b/masteringModule/node_modules/delayed-stream/lib/delayed_stream.js
@@ -0,0 +1,107 @@
+var Stream = require('stream').Stream;
+var util = require('util');
+
+module.exports = DelayedStream;
+function DelayedStream() {
+ this.source = null;
+ this.dataSize = 0;
+ this.maxDataSize = 1024 * 1024;
+ this.pauseStream = true;
+
+ this._maxDataSizeExceeded = false;
+ this._released = false;
+ this._bufferedEvents = [];
+}
+util.inherits(DelayedStream, Stream);
+
+DelayedStream.create = function(source, options) {
+ var delayedStream = new this();
+
+ options = options || {};
+ for (var option in options) {
+ delayedStream[option] = options[option];
+ }
+
+ delayedStream.source = source;
+
+ var realEmit = source.emit;
+ source.emit = function() {
+ delayedStream._handleEmit(arguments);
+ return realEmit.apply(source, arguments);
+ };
+
+ source.on('error', function() {});
+ if (delayedStream.pauseStream) {
+ source.pause();
+ }
+
+ return delayedStream;
+};
+
+Object.defineProperty(DelayedStream.prototype, 'readable', {
+ configurable: true,
+ enumerable: true,
+ get: function() {
+ return this.source.readable;
+ }
+});
+
+DelayedStream.prototype.setEncoding = function() {
+ return this.source.setEncoding.apply(this.source, arguments);
+};
+
+DelayedStream.prototype.resume = function() {
+ if (!this._released) {
+ this.release();
+ }
+
+ this.source.resume();
+};
+
+DelayedStream.prototype.pause = function() {
+ this.source.pause();
+};
+
+DelayedStream.prototype.release = function() {
+ this._released = true;
+
+ this._bufferedEvents.forEach(function(args) {
+ this.emit.apply(this, args);
+ }.bind(this));
+ this._bufferedEvents = [];
+};
+
+DelayedStream.prototype.pipe = function() {
+ var r = Stream.prototype.pipe.apply(this, arguments);
+ this.resume();
+ return r;
+};
+
+DelayedStream.prototype._handleEmit = function(args) {
+ if (this._released) {
+ this.emit.apply(this, args);
+ return;
+ }
+
+ if (args[0] === 'data') {
+ this.dataSize += args[1].length;
+ this._checkIfMaxDataSizeExceeded();
+ }
+
+ this._bufferedEvents.push(args);
+};
+
+DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {
+ if (this._maxDataSizeExceeded) {
+ return;
+ }
+
+ if (this.dataSize <= this.maxDataSize) {
+ return;
+ }
+
+ this._maxDataSizeExceeded = true;
+ var message =
+ 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'
+ this.emit('error', new Error(message));
+};
diff --git a/masteringModule/node_modules/delayed-stream/package.json b/masteringModule/node_modules/delayed-stream/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..eea3291c54b473ae55f4c8e5f5d2b323e2400f9b
--- /dev/null
+++ b/masteringModule/node_modules/delayed-stream/package.json
@@ -0,0 +1,27 @@
+{
+ "author": "Felix Geisendörfer (http://debuggable.com/)",
+ "contributors": [
+ "Mike Atkins "
+ ],
+ "name": "delayed-stream",
+ "description": "Buffers events from a stream until you are ready to handle them.",
+ "license": "MIT",
+ "version": "1.0.0",
+ "homepage": "https://github.com/felixge/node-delayed-stream",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/felixge/node-delayed-stream.git"
+ },
+ "main": "./lib/delayed_stream",
+ "engines": {
+ "node": ">=0.4.0"
+ },
+ "scripts": {
+ "test": "make test"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "fake": "0.2.0",
+ "far": "0.0.1"
+ }
+}
diff --git a/masteringModule/node_modules/extend/.editorconfig b/masteringModule/node_modules/extend/.editorconfig
new file mode 100644
index 0000000000000000000000000000000000000000..bc228f8269443bf772b437890dde7756a3e8a894
--- /dev/null
+++ b/masteringModule/node_modules/extend/.editorconfig
@@ -0,0 +1,20 @@
+root = true
+
+[*]
+indent_style = tab
+indent_size = 4
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+max_line_length = 150
+
+[CHANGELOG.md]
+indent_style = space
+indent_size = 2
+
+[*.json]
+max_line_length = off
+
+[Makefile]
+max_line_length = off
diff --git a/masteringModule/node_modules/extend/.eslintrc b/masteringModule/node_modules/extend/.eslintrc
new file mode 100644
index 0000000000000000000000000000000000000000..a34cf2831b7c383001ea86570f8b63686c285c60
--- /dev/null
+++ b/masteringModule/node_modules/extend/.eslintrc
@@ -0,0 +1,17 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "rules": {
+ "complexity": [2, 20],
+ "eqeqeq": [2, "allow-null"],
+ "func-name-matching": [1],
+ "max-depth": [1, 4],
+ "max-statements": [2, 26],
+ "no-extra-parens": [1],
+ "no-magic-numbers": [0],
+ "no-restricted-syntax": [2, "BreakStatement", "ContinueStatement", "DebuggerStatement", "LabeledStatement", "WithStatement"],
+ "sort-keys": [0],
+ }
+}
diff --git a/masteringModule/node_modules/extend/.jscs.json b/masteringModule/node_modules/extend/.jscs.json
new file mode 100644
index 0000000000000000000000000000000000000000..3cce01d7832943debaf60e58033d8a110daacbca
--- /dev/null
+++ b/masteringModule/node_modules/extend/.jscs.json
@@ -0,0 +1,175 @@
+{
+ "es3": true,
+
+ "additionalRules": [],
+
+ "requireSemicolons": true,
+
+ "disallowMultipleSpaces": true,
+
+ "disallowIdentifierNames": [],
+
+ "requireCurlyBraces": {
+ "allExcept": [],
+ "keywords": ["if", "else", "for", "while", "do", "try", "catch"]
+ },
+
+ "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"],
+
+ "disallowSpaceAfterKeywords": [],
+
+ "disallowSpaceBeforeComma": true,
+ "disallowSpaceAfterComma": false,
+ "disallowSpaceBeforeSemicolon": true,
+
+ "disallowNodeTypes": [
+ "DebuggerStatement",
+ "LabeledStatement",
+ "SwitchCase",
+ "SwitchStatement",
+ "WithStatement"
+ ],
+
+ "requireObjectKeysOnNewLine": { "allExcept": ["sameLine"] },
+
+ "requireSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true },
+ "requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true },
+ "disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true },
+ "requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true },
+ "disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true },
+
+ "requireSpaceBetweenArguments": true,
+
+ "disallowSpacesInsideParentheses": true,
+
+ "disallowSpacesInsideArrayBrackets": true,
+
+ "disallowQuotedKeysInObjects": { "allExcept": ["reserved"] },
+
+ "disallowSpaceAfterObjectKeys": true,
+
+ "requireCommaBeforeLineBreak": true,
+
+ "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"],
+ "requireSpaceAfterPrefixUnaryOperators": [],
+
+ "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
+ "requireSpaceBeforePostfixUnaryOperators": [],
+
+ "disallowSpaceBeforeBinaryOperators": [],
+ "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
+
+ "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
+ "disallowSpaceAfterBinaryOperators": [],
+
+ "disallowImplicitTypeConversion": ["binary", "string"],
+
+ "disallowKeywords": ["with", "eval"],
+
+ "requireKeywordsOnNewLine": [],
+ "disallowKeywordsOnNewLine": ["else"],
+
+ "requireLineFeedAtFileEnd": true,
+
+ "disallowTrailingWhitespace": true,
+
+ "disallowTrailingComma": true,
+
+ "excludeFiles": ["node_modules/**", "vendor/**"],
+
+ "disallowMultipleLineStrings": true,
+
+ "requireDotNotation": { "allExcept": ["keywords"] },
+
+ "requireParenthesesAroundIIFE": true,
+
+ "validateLineBreaks": "LF",
+
+ "validateQuoteMarks": {
+ "escape": true,
+ "mark": "'"
+ },
+
+ "disallowOperatorBeforeLineBreak": [],
+
+ "requireSpaceBeforeKeywords": [
+ "do",
+ "for",
+ "if",
+ "else",
+ "switch",
+ "case",
+ "try",
+ "catch",
+ "finally",
+ "while",
+ "with",
+ "return"
+ ],
+
+ "validateAlignedFunctionParameters": {
+ "lineBreakAfterOpeningBraces": true,
+ "lineBreakBeforeClosingBraces": true
+ },
+
+ "requirePaddingNewLinesBeforeExport": true,
+
+ "validateNewlineAfterArrayElements": {
+ "maximum": 6
+ },
+
+ "requirePaddingNewLinesAfterUseStrict": true,
+
+ "disallowArrowFunctions": true,
+
+ "disallowMultiLineTernary": true,
+
+ "validateOrderInObjectKeys": false,
+
+ "disallowIdenticalDestructuringNames": true,
+
+ "disallowNestedTernaries": { "maxLevel": 1 },
+
+ "requireSpaceAfterComma": { "allExcept": ["trailing"] },
+ "requireAlignedMultilineParams": false,
+
+ "requireSpacesInGenerator": {
+ "afterStar": true
+ },
+
+ "disallowSpacesInGenerator": {
+ "beforeStar": true
+ },
+
+ "disallowVar": false,
+
+ "requireArrayDestructuring": false,
+
+ "requireEnhancedObjectLiterals": false,
+
+ "requireObjectDestructuring": false,
+
+ "requireEarlyReturn": false,
+
+ "requireCapitalizedConstructorsNew": {
+ "allExcept": ["Function", "String", "Object", "Symbol", "Number", "Date", "RegExp", "Error", "Boolean", "Array"]
+ },
+
+ "requireImportAlphabetized": false,
+
+ "requireSpaceBeforeObjectValues": true,
+ "requireSpaceBeforeDestructuredValues": true,
+
+ "disallowSpacesInsideTemplateStringPlaceholders": true,
+
+ "disallowArrayDestructuringReturn": false,
+
+ "requireNewlineBeforeSingleStatementsInIf": false,
+
+ "disallowUnusedVariables": true,
+
+ "requireSpacesInsideImportedObjectBraces": true,
+
+ "requireUseStrict": true
+}
+
diff --git a/masteringModule/node_modules/extend/.travis.yml b/masteringModule/node_modules/extend/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5ccdfc4948155fbc286e92c049aa2a4468858762
--- /dev/null
+++ b/masteringModule/node_modules/extend/.travis.yml
@@ -0,0 +1,230 @@
+language: node_js
+os:
+ - linux
+node_js:
+ - "10.7"
+ - "9.11"
+ - "8.11"
+ - "7.10"
+ - "6.14"
+ - "5.12"
+ - "4.9"
+ - "iojs-v3.3"
+ - "iojs-v2.5"
+ - "iojs-v1.8"
+ - "0.12"
+ - "0.10"
+ - "0.8"
+before_install:
+ - 'case "${TRAVIS_NODE_VERSION}" in 0.*) export NPM_CONFIG_STRICT_SSL=false ;; esac'
+ - 'nvm install-latest-npm'
+install:
+ - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ] || [ "${TRAVIS_NODE_VERSION}" = "0.9" ]; then nvm install --latest-npm 0.8 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;'
+script:
+ - 'if [ -n "${PRETEST-}" ]; then npm run pretest ; fi'
+ - 'if [ -n "${POSTTEST-}" ]; then npm run posttest ; fi'
+ - 'if [ -n "${COVERAGE-}" ]; then npm run coverage ; fi'
+ - 'if [ -n "${TEST-}" ]; then npm run tests-only ; fi'
+sudo: false
+env:
+ - TEST=true
+matrix:
+ fast_finish: true
+ include:
+ - node_js: "lts/*"
+ env: PRETEST=true
+ - node_js: "lts/*"
+ env: POSTTEST=true
+ - node_js: "4"
+ env: COVERAGE=true
+ - node_js: "10.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "10.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "10.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "10.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "10.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "10.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "10.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.10"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.9"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.8"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.10"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.9"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.8"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.9"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.8"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.13"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.12"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.11"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.10"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.9"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.8"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.11"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.10"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.9"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.8"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.8"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v3.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v3.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v3.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v2.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v2.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v2.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v2.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v2.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "0.11"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "0.9"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "0.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "0.4"
+ env: TEST=true ALLOW_FAILURE=true
+ allow_failures:
+ - os: osx
+ - env: TEST=true ALLOW_FAILURE=true
diff --git a/masteringModule/node_modules/extend/CHANGELOG.md b/masteringModule/node_modules/extend/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..2cf7de6fb3ae5dc0c67aeb92f2d6969adc36630d
--- /dev/null
+++ b/masteringModule/node_modules/extend/CHANGELOG.md
@@ -0,0 +1,83 @@
+3.0.2 / 2018-07-19
+==================
+ * [Fix] Prevent merging `__proto__` property (#48)
+ * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape`
+ * [Tests] up to `node` `v10.7`, `v9.11`, `v8.11`, `v7.10`, `v6.14`, `v4.9`; use `nvm install-latest-npm`
+
+3.0.1 / 2017-04-27
+==================
+ * [Fix] deep extending should work with a non-object (#46)
+ * [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config`
+ * [Tests] up to `node` `v7.9`, `v6.10`, `v4.8`; improve matrix
+ * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG.
+ * [Docs] Add example to readme (#34)
+
+3.0.0 / 2015-07-01
+==================
+ * [Possible breaking change] Use global "strict" directive (#32)
+ * [Tests] `int` is an ES3 reserved word
+ * [Tests] Test up to `io.js` `v2.3`
+ * [Tests] Add `npm run eslint`
+ * [Dev Deps] Update `covert`, `jscs`
+
+2.0.1 / 2015-04-25
+==================
+ * Use an inline `isArray` check, for ES3 browsers. (#27)
+ * Some old browsers fail when an identifier is `toString`
+ * Test latest `node` and `io.js` versions on `travis-ci`; speed up builds
+ * Add license info to package.json (#25)
+ * Update `tape`, `jscs`
+ * Adding a CHANGELOG
+
+2.0.0 / 2014-10-01
+==================
+ * Increase code coverage to 100%; run code coverage as part of tests
+ * Add `npm run lint`; Run linter as part of tests
+ * Remove nodeType and setInterval checks in isPlainObject
+ * Updating `tape`, `jscs`, `covert`
+ * General style and README cleanup
+
+1.3.0 / 2014-06-20
+==================
+ * Add component.json for browser support (#18)
+ * Use SVG for badges in README (#16)
+ * Updating `tape`, `covert`
+ * Updating travis-ci to work with multiple node versions
+ * Fix `deep === false` bug (returning target as {}) (#14)
+ * Fixing constructor checks in isPlainObject
+ * Adding additional test coverage
+ * Adding `npm run coverage`
+ * Add LICENSE (#13)
+ * Adding a warning about `false`, per #11
+ * General style and whitespace cleanup
+
+1.2.1 / 2013-09-14
+==================
+ * Fixing hasOwnProperty bugs that would only have shown up in specific browsers. Fixes #8
+ * Updating `tape`
+
+1.2.0 / 2013-09-02
+==================
+ * Updating the README: add badges
+ * Adding a missing variable reference.
+ * Using `tape` instead of `buster` for tests; add more tests (#7)
+ * Adding node 0.10 to Travis CI (#6)
+ * Enabling "npm test" and cleaning up package.json (#5)
+ * Add Travis CI.
+
+1.1.3 / 2012-12-06
+==================
+ * Added unit tests.
+ * Ensure extend function is named. (Looks nicer in a stack trace.)
+ * README cleanup.
+
+1.1.1 / 2012-11-07
+==================
+ * README cleanup.
+ * Added installation instructions.
+ * Added a missing semicolon
+
+1.0.0 / 2012-04-08
+==================
+ * Initial commit
+
diff --git a/masteringModule/node_modules/extend/LICENSE b/masteringModule/node_modules/extend/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..e16d6a56ca64e235d9065c37f4566a0fe0be28d4
--- /dev/null
+++ b/masteringModule/node_modules/extend/LICENSE
@@ -0,0 +1,23 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Stefan Thomas
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
diff --git a/masteringModule/node_modules/extend/README.md b/masteringModule/node_modules/extend/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..5b8249aa95e5d34927c0b44988b29fcda85cb1cd
--- /dev/null
+++ b/masteringModule/node_modules/extend/README.md
@@ -0,0 +1,81 @@
+[![Build Status][travis-svg]][travis-url]
+[![dependency status][deps-svg]][deps-url]
+[![dev dependency status][dev-deps-svg]][dev-deps-url]
+
+# extend() for Node.js [![Version Badge][npm-version-png]][npm-url]
+
+`node-extend` is a port of the classic extend() method from jQuery. It behaves as you expect. It is simple, tried and true.
+
+Notes:
+
+* Since Node.js >= 4,
+ [`Object.assign`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
+ now offers the same functionality natively (but without the "deep copy" option).
+ See [ECMAScript 2015 (ES6) in Node.js](https://nodejs.org/en/docs/es6).
+* Some native implementations of `Object.assign` in both Node.js and many
+ browsers (since NPM modules are for the browser too) may not be fully
+ spec-compliant.
+ Check [`object.assign`](https://www.npmjs.com/package/object.assign) module for
+ a compliant candidate.
+
+## Installation
+
+This package is available on [npm][npm-url] as: `extend`
+
+``` sh
+npm install extend
+```
+
+## Usage
+
+**Syntax:** extend **(** [`deep`], `target`, `object1`, [`objectN`] **)**
+
+*Extend one object with one or more others, returning the modified object.*
+
+**Example:**
+
+``` js
+var extend = require('extend');
+extend(targetObject, object1, object2);
+```
+
+Keep in mind that the target object will be modified, and will be returned from extend().
+
+If a boolean true is specified as the first argument, extend performs a deep copy, recursively copying any objects it finds. Otherwise, the copy will share structure with the original object(s).
+Undefined properties are not copied. However, properties inherited from the object's prototype will be copied over.
+Warning: passing `false` as the first argument is not supported.
+
+### Arguments
+
+* `deep` *Boolean* (optional)
+If set, the merge becomes recursive (i.e. deep copy).
+* `target` *Object*
+The object to extend.
+* `object1` *Object*
+The object that will be merged into the first.
+* `objectN` *Object* (Optional)
+More objects to merge into the first.
+
+## License
+
+`node-extend` is licensed under the [MIT License][mit-license-url].
+
+## Acknowledgements
+
+All credit to the jQuery authors for perfecting this amazing utility.
+
+Ported to Node.js by [Stefan Thomas][github-justmoon] with contributions by [Jonathan Buchanan][github-insin] and [Jordan Harband][github-ljharb].
+
+[travis-svg]: https://travis-ci.org/justmoon/node-extend.svg
+[travis-url]: https://travis-ci.org/justmoon/node-extend
+[npm-url]: https://npmjs.org/package/extend
+[mit-license-url]: http://opensource.org/licenses/MIT
+[github-justmoon]: https://github.com/justmoon
+[github-insin]: https://github.com/insin
+[github-ljharb]: https://github.com/ljharb
+[npm-version-png]: http://versionbadg.es/justmoon/node-extend.svg
+[deps-svg]: https://david-dm.org/justmoon/node-extend.svg
+[deps-url]: https://david-dm.org/justmoon/node-extend
+[dev-deps-svg]: https://david-dm.org/justmoon/node-extend/dev-status.svg
+[dev-deps-url]: https://david-dm.org/justmoon/node-extend#info=devDependencies
+
diff --git a/masteringModule/node_modules/extend/component.json b/masteringModule/node_modules/extend/component.json
new file mode 100644
index 0000000000000000000000000000000000000000..1500a2f37181823ef8500854e8bbe613fbc5215a
--- /dev/null
+++ b/masteringModule/node_modules/extend/component.json
@@ -0,0 +1,32 @@
+{
+ "name": "extend",
+ "author": "Stefan Thomas (http://www.justmoon.net)",
+ "version": "3.0.0",
+ "description": "Port of jQuery.extend for node.js and the browser.",
+ "scripts": [
+ "index.js"
+ ],
+ "contributors": [
+ {
+ "name": "Jordan Harband",
+ "url": "https://github.com/ljharb"
+ }
+ ],
+ "keywords": [
+ "extend",
+ "clone",
+ "merge"
+ ],
+ "repository" : {
+ "type": "git",
+ "url": "https://github.com/justmoon/node-extend.git"
+ },
+ "dependencies": {
+ },
+ "devDependencies": {
+ "tape" : "~3.0.0",
+ "covert": "~0.4.0",
+ "jscs": "~1.6.2"
+ }
+}
+
diff --git a/masteringModule/node_modules/extend/index.js b/masteringModule/node_modules/extend/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..2aa3faae68c43e0221134e0ee72a713fd7d47a5f
--- /dev/null
+++ b/masteringModule/node_modules/extend/index.js
@@ -0,0 +1,117 @@
+'use strict';
+
+var hasOwn = Object.prototype.hasOwnProperty;
+var toStr = Object.prototype.toString;
+var defineProperty = Object.defineProperty;
+var gOPD = Object.getOwnPropertyDescriptor;
+
+var isArray = function isArray(arr) {
+ if (typeof Array.isArray === 'function') {
+ return Array.isArray(arr);
+ }
+
+ return toStr.call(arr) === '[object Array]';
+};
+
+var isPlainObject = function isPlainObject(obj) {
+ if (!obj || toStr.call(obj) !== '[object Object]') {
+ return false;
+ }
+
+ var hasOwnConstructor = hasOwn.call(obj, 'constructor');
+ var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');
+ // Not own constructor property must be Object
+ if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {
+ return false;
+ }
+
+ // Own properties are enumerated firstly, so to speed up,
+ // if last one is own, then all properties are own.
+ var key;
+ for (key in obj) { /**/ }
+
+ return typeof key === 'undefined' || hasOwn.call(obj, key);
+};
+
+// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target
+var setProperty = function setProperty(target, options) {
+ if (defineProperty && options.name === '__proto__') {
+ defineProperty(target, options.name, {
+ enumerable: true,
+ configurable: true,
+ value: options.newValue,
+ writable: true
+ });
+ } else {
+ target[options.name] = options.newValue;
+ }
+};
+
+// Return undefined instead of __proto__ if '__proto__' is not an own property
+var getProperty = function getProperty(obj, name) {
+ if (name === '__proto__') {
+ if (!hasOwn.call(obj, name)) {
+ return void 0;
+ } else if (gOPD) {
+ // In early versions of node, obj['__proto__'] is buggy when obj has
+ // __proto__ as an own property. Object.getOwnPropertyDescriptor() works.
+ return gOPD(obj, name).value;
+ }
+ }
+
+ return obj[name];
+};
+
+module.exports = function extend() {
+ var options, name, src, copy, copyIsArray, clone;
+ var target = arguments[0];
+ var i = 1;
+ var length = arguments.length;
+ var deep = false;
+
+ // Handle a deep copy situation
+ if (typeof target === 'boolean') {
+ deep = target;
+ target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
+ }
+ if (target == null || (typeof target !== 'object' && typeof target !== 'function')) {
+ target = {};
+ }
+
+ for (; i < length; ++i) {
+ options = arguments[i];
+ // Only deal with non-null/undefined values
+ if (options != null) {
+ // Extend the base object
+ for (name in options) {
+ src = getProperty(target, name);
+ copy = getProperty(options, name);
+
+ // Prevent never-ending loop
+ if (target !== copy) {
+ // Recurse if we're merging plain objects or arrays
+ if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {
+ if (copyIsArray) {
+ copyIsArray = false;
+ clone = src && isArray(src) ? src : [];
+ } else {
+ clone = src && isPlainObject(src) ? src : {};
+ }
+
+ // Never move original objects, clone them
+ setProperty(target, { name: name, newValue: extend(deep, clone, copy) });
+
+ // Don't bring in undefined values
+ } else if (typeof copy !== 'undefined') {
+ setProperty(target, { name: name, newValue: copy });
+ }
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
diff --git a/masteringModule/node_modules/extend/package.json b/masteringModule/node_modules/extend/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..85279f78054e5cc6d7f9899afaf9fca60b77d740
--- /dev/null
+++ b/masteringModule/node_modules/extend/package.json
@@ -0,0 +1,42 @@
+{
+ "name": "extend",
+ "author": "Stefan Thomas (http://www.justmoon.net)",
+ "version": "3.0.2",
+ "description": "Port of jQuery.extend for node.js and the browser",
+ "main": "index",
+ "scripts": {
+ "pretest": "npm run lint",
+ "test": "npm run tests-only",
+ "posttest": "npm run coverage-quiet",
+ "tests-only": "node test",
+ "coverage": "covert test/index.js",
+ "coverage-quiet": "covert test/index.js --quiet",
+ "lint": "npm run jscs && npm run eslint",
+ "jscs": "jscs *.js */*.js",
+ "eslint": "eslint *.js */*.js"
+ },
+ "contributors": [
+ {
+ "name": "Jordan Harband",
+ "url": "https://github.com/ljharb"
+ }
+ ],
+ "keywords": [
+ "extend",
+ "clone",
+ "merge"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/justmoon/node-extend.git"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "@ljharb/eslint-config": "^12.2.1",
+ "covert": "^1.1.0",
+ "eslint": "^4.19.1",
+ "jscs": "^3.0.7",
+ "tape": "^4.9.1"
+ },
+ "license": "MIT"
+}
diff --git a/masteringModule/node_modules/form-data/License b/masteringModule/node_modules/form-data/License
new file mode 100644
index 0000000000000000000000000000000000000000..c7ff12a2f8af2e2c57f39da1754409c25b35f46a
--- /dev/null
+++ b/masteringModule/node_modules/form-data/License
@@ -0,0 +1,19 @@
+Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and contributors
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
diff --git a/masteringModule/node_modules/form-data/README.md b/masteringModule/node_modules/form-data/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..f6b2ae9135bc7a03094fdf1674273d09fbbe36a0
--- /dev/null
+++ b/masteringModule/node_modules/form-data/README.md
@@ -0,0 +1,350 @@
+# Form-Data [](https://www.npmjs.com/package/form-data) [](https://gitter.im/form-data/form-data)
+
+A library to create readable ```"multipart/form-data"``` streams. Can be used to submit forms and file uploads to other web applications.
+
+The API of this library is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd].
+
+[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface
+
+[](https://travis-ci.org/form-data/form-data)
+[](https://travis-ci.org/form-data/form-data)
+[](https://travis-ci.org/form-data/form-data)
+
+[](https://coveralls.io/github/form-data/form-data?branch=master)
+[](https://david-dm.org/form-data/form-data)
+
+## Install
+
+```
+npm install --save form-data
+```
+
+## Usage
+
+In this example we are constructing a form with 3 fields that contain a string,
+a buffer and a file stream.
+
+``` javascript
+var FormData = require('form-data');
+var fs = require('fs');
+
+var form = new FormData();
+form.append('my_field', 'my value');
+form.append('my_buffer', new Buffer(10));
+form.append('my_file', fs.createReadStream('/foo/bar.jpg'));
+```
+
+Also you can use http-response stream:
+
+``` javascript
+var FormData = require('form-data');
+var http = require('http');
+
+var form = new FormData();
+
+http.request('http://nodejs.org/images/logo.png', function(response) {
+ form.append('my_field', 'my value');
+ form.append('my_buffer', new Buffer(10));
+ form.append('my_logo', response);
+});
+```
+
+Or @mikeal's [request](https://github.com/request/request) stream:
+
+``` javascript
+var FormData = require('form-data');
+var request = require('request');
+
+var form = new FormData();
+
+form.append('my_field', 'my value');
+form.append('my_buffer', new Buffer(10));
+form.append('my_logo', request('http://nodejs.org/images/logo.png'));
+```
+
+In order to submit this form to a web application, call ```submit(url, [callback])``` method:
+
+``` javascript
+form.submit('http://example.org/', function(err, res) {
+ // res – response object (http.IncomingMessage) //
+ res.resume();
+});
+
+```
+
+For more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods.
+
+### Custom options
+
+You can provide custom options, such as `maxDataSize`:
+
+``` javascript
+var FormData = require('form-data');
+
+var form = new FormData({ maxDataSize: 20971520 });
+form.append('my_field', 'my value');
+form.append('my_buffer', /* something big */);
+```
+
+List of available options could be found in [combined-stream](https://github.com/felixge/node-combined-stream/blob/master/lib/combined_stream.js#L7-L15)
+
+### Alternative submission methods
+
+You can use node's http client interface:
+
+``` javascript
+var http = require('http');
+
+var request = http.request({
+ method: 'post',
+ host: 'example.org',
+ path: '/upload',
+ headers: form.getHeaders()
+});
+
+form.pipe(request);
+
+request.on('response', function(res) {
+ console.log(res.statusCode);
+});
+```
+
+Or if you would prefer the `'Content-Length'` header to be set for you:
+
+``` javascript
+form.submit('example.org/upload', function(err, res) {
+ console.log(res.statusCode);
+});
+```
+
+To use custom headers and pre-known length in parts:
+
+``` javascript
+var CRLF = '\r\n';
+var form = new FormData();
+
+var options = {
+ header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF,
+ knownLength: 1
+};
+
+form.append('my_buffer', buffer, options);
+
+form.submit('http://example.com/', function(err, res) {
+ if (err) throw err;
+ console.log('Done');
+});
+```
+
+Form-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide "file"-related information manually:
+
+``` javascript
+someModule.stream(function(err, stdout, stderr) {
+ if (err) throw err;
+
+ var form = new FormData();
+
+ form.append('file', stdout, {
+ filename: 'unicycle.jpg', // ... or:
+ filepath: 'photos/toys/unicycle.jpg',
+ contentType: 'image/jpeg',
+ knownLength: 19806
+ });
+
+ form.submit('http://example.com/', function(err, res) {
+ if (err) throw err;
+ console.log('Done');
+ });
+});
+```
+
+The `filepath` property overrides `filename` and may contain a relative path. This is typically used when uploading [multiple files from a directory](https://wicg.github.io/entries-api/#dom-htmlinputelement-webkitdirectory).
+
+For edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter:
+
+``` javascript
+form.submit({
+ host: 'example.com',
+ path: '/probably.php?extra=params',
+ auth: 'username:password'
+}, function(err, res) {
+ console.log(res.statusCode);
+});
+```
+
+In case you need to also send custom HTTP headers with the POST request, you can use the `headers` key in first parameter of `form.submit()`:
+
+``` javascript
+form.submit({
+ host: 'example.com',
+ path: '/surelynot.php',
+ headers: {'x-test-header': 'test-header-value'}
+}, function(err, res) {
+ console.log(res.statusCode);
+});
+```
+
+### Methods
+
+- [_Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] )](https://github.com/form-data/form-data#void-append-string-field-mixed-value--mixed-options-).
+- [_Array_ getHeaders( [**Array** _userHeaders_] )](https://github.com/form-data/form-data#array-getheaders-array-userheaders-)
+- [_String_ getBoundary()](https://github.com/form-data/form-data#string-getboundary)
+- [_Buffer_ getBuffer()](https://github.com/form-data/form-data#buffer-getbuffer)
+- [_Integer_ getLengthSync()](https://github.com/form-data/form-data#integer-getlengthsync)
+- [_Integer_ getLength( **function** _callback_ )](https://github.com/form-data/form-data#integer-getlength-function-callback-)
+- [_Boolean_ hasKnownLength()](https://github.com/form-data/form-data#boolean-hasknownlength)
+- [_Request_ submit( _params_, **function** _callback_ )](https://github.com/form-data/form-data#request-submit-params-function-callback-)
+- [_String_ toString()](https://github.com/form-data/form-data#string-tostring)
+
+#### _Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] )
+Append data to the form. You can submit about any format (string, integer, boolean, buffer, etc.). However, Arrays are not supported and need to be turned into strings by the user.
+```javascript
+var form = new FormData();
+form.append( 'my_string', 'my value' );
+form.append( 'my_integer', 1 );
+form.append( 'my_boolean', true );
+form.append( 'my_buffer', new Buffer(10) );
+form.append( 'my_array_as_json', JSON.stringify( ['bird','cute'] ) )
+```
+
+You may provide a string for options, or an object.
+```javascript
+// Set filename by providing a string for options
+form.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), 'bar.jpg' );
+
+// provide an object.
+form.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), {filename: 'bar.jpg', contentType: 'image/jpeg', knownLength: 19806} );
+```
+
+#### _Array_ getHeaders( [**Array** _userHeaders_] )
+This method ads the correct `content-type` header to the provided array of `userHeaders`.
+
+#### _String_ getBoundary()
+Return the boundary of the formData. A boundary consists of 26 `-` followed by 24 numbers
+for example:
+```javascript
+--------------------------515890814546601021194782
+```
+_Note: The boundary must be unique and may not appear in the data._
+
+#### _Buffer_ getBuffer()
+Return the full formdata request package, as a Buffer. You can insert this Buffer in e.g. Axios to send multipart data.
+```javascript
+var form = new FormData();
+form.append( 'my_buffer', Buffer.from([0x4a,0x42,0x20,0x52,0x6f,0x63,0x6b,0x73]) );
+form.append( 'my_file', fs.readFileSync('/foo/bar.jpg') );
+
+axios.post( 'https://example.com/path/to/api',
+ form.getBuffer(),
+ form.getHeaders()
+ )
+```
+**Note:** Because the output is of type Buffer, you can only append types that are accepted by Buffer: *string, Buffer, ArrayBuffer, Array, or Array-like Object*. A ReadStream for example will result in an error.
+
+#### _Integer_ getLengthSync()
+Same as `getLength` but synchronous.
+
+_Note: getLengthSync __doesn't__ calculate streams length._
+
+#### _Integer_ getLength( **function** _callback_ )
+Returns the `Content-Length` async. The callback is used to handle errors and continue once the length has been calculated
+```javascript
+this.getLength(function(err, length) {
+ if (err) {
+ this._error(err);
+ return;
+ }
+
+ // add content length
+ request.setHeader('Content-Length', length);
+
+ ...
+}.bind(this));
+```
+
+#### _Boolean_ hasKnownLength()
+Checks if the length of added values is known.
+
+#### _Request_ submit( _params_, **function** _callback_ )
+Submit the form to a web application.
+```javascript
+var form = new FormData();
+form.append( 'my_string', 'Hello World' );
+
+form.submit( 'http://example.com/', function(err, res) {
+ // res – response object (http.IncomingMessage) //
+ res.resume();
+} );
+```
+
+#### _String_ toString()
+Returns the form data as a string. Don't use this if you are sending files or buffers, use `getBuffer()` instead.
+
+### Integration with other libraries
+
+#### Request
+
+Form submission using [request](https://github.com/request/request):
+
+```javascript
+var formData = {
+ my_field: 'my_value',
+ my_file: fs.createReadStream(__dirname + '/unicycle.jpg'),
+};
+
+request.post({url:'http://service.com/upload', formData: formData}, function(err, httpResponse, body) {
+ if (err) {
+ return console.error('upload failed:', err);
+ }
+ console.log('Upload successful! Server responded with:', body);
+});
+```
+
+For more details see [request readme](https://github.com/request/request#multipartform-data-multipart-form-uploads).
+
+#### node-fetch
+
+You can also submit a form using [node-fetch](https://github.com/bitinn/node-fetch):
+
+```javascript
+var form = new FormData();
+
+form.append('a', 1);
+
+fetch('http://example.com', { method: 'POST', body: form })
+ .then(function(res) {
+ return res.json();
+ }).then(function(json) {
+ console.log(json);
+ });
+```
+
+#### axios
+
+In Node.js you can post a file using [axios](https://github.com/axios/axios):
+```javascript
+const form = new FormData();
+const stream = fs.createReadStream(PATH_TO_FILE);
+
+form.append('image', stream);
+
+// In Node.js environment you need to set boundary in the header field 'Content-Type' by calling method `getHeaders`
+const formHeaders = form.getHeaders();
+
+axios.post('http://example.com', form, {
+ headers: {
+ ...formHeaders,
+ },
+})
+.then(response => response)
+.catch(error => error)
+```
+
+## Notes
+
+- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround.
+- Starting version `2.x` FormData has dropped support for `node@0.10.x`.
+
+## License
+
+Form-Data is released under the [MIT](License) license.
diff --git a/masteringModule/node_modules/form-data/README.md.bak b/masteringModule/node_modules/form-data/README.md.bak
new file mode 100644
index 0000000000000000000000000000000000000000..6077db9ad642268f00dd4c79f2cc173ae8f57227
--- /dev/null
+++ b/masteringModule/node_modules/form-data/README.md.bak
@@ -0,0 +1,350 @@
+# Form-Data [](https://www.npmjs.com/package/form-data) [](https://gitter.im/form-data/form-data)
+
+A library to create readable ```"multipart/form-data"``` streams. Can be used to submit forms and file uploads to other web applications.
+
+The API of this library is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd].
+
+[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface
+
+[](https://travis-ci.org/form-data/form-data)
+[](https://travis-ci.org/form-data/form-data)
+[](https://travis-ci.org/form-data/form-data)
+
+[](https://coveralls.io/github/form-data/form-data?branch=master)
+[](https://david-dm.org/form-data/form-data)
+
+## Install
+
+```
+npm install --save form-data
+```
+
+## Usage
+
+In this example we are constructing a form with 3 fields that contain a string,
+a buffer and a file stream.
+
+``` javascript
+var FormData = require('form-data');
+var fs = require('fs');
+
+var form = new FormData();
+form.append('my_field', 'my value');
+form.append('my_buffer', new Buffer(10));
+form.append('my_file', fs.createReadStream('/foo/bar.jpg'));
+```
+
+Also you can use http-response stream:
+
+``` javascript
+var FormData = require('form-data');
+var http = require('http');
+
+var form = new FormData();
+
+http.request('http://nodejs.org/images/logo.png', function(response) {
+ form.append('my_field', 'my value');
+ form.append('my_buffer', new Buffer(10));
+ form.append('my_logo', response);
+});
+```
+
+Or @mikeal's [request](https://github.com/request/request) stream:
+
+``` javascript
+var FormData = require('form-data');
+var request = require('request');
+
+var form = new FormData();
+
+form.append('my_field', 'my value');
+form.append('my_buffer', new Buffer(10));
+form.append('my_logo', request('http://nodejs.org/images/logo.png'));
+```
+
+In order to submit this form to a web application, call ```submit(url, [callback])``` method:
+
+``` javascript
+form.submit('http://example.org/', function(err, res) {
+ // res – response object (http.IncomingMessage) //
+ res.resume();
+});
+
+```
+
+For more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods.
+
+### Custom options
+
+You can provide custom options, such as `maxDataSize`:
+
+``` javascript
+var FormData = require('form-data');
+
+var form = new FormData({ maxDataSize: 20971520 });
+form.append('my_field', 'my value');
+form.append('my_buffer', /* something big */);
+```
+
+List of available options could be found in [combined-stream](https://github.com/felixge/node-combined-stream/blob/master/lib/combined_stream.js#L7-L15)
+
+### Alternative submission methods
+
+You can use node's http client interface:
+
+``` javascript
+var http = require('http');
+
+var request = http.request({
+ method: 'post',
+ host: 'example.org',
+ path: '/upload',
+ headers: form.getHeaders()
+});
+
+form.pipe(request);
+
+request.on('response', function(res) {
+ console.log(res.statusCode);
+});
+```
+
+Or if you would prefer the `'Content-Length'` header to be set for you:
+
+``` javascript
+form.submit('example.org/upload', function(err, res) {
+ console.log(res.statusCode);
+});
+```
+
+To use custom headers and pre-known length in parts:
+
+``` javascript
+var CRLF = '\r\n';
+var form = new FormData();
+
+var options = {
+ header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF,
+ knownLength: 1
+};
+
+form.append('my_buffer', buffer, options);
+
+form.submit('http://example.com/', function(err, res) {
+ if (err) throw err;
+ console.log('Done');
+});
+```
+
+Form-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide "file"-related information manually:
+
+``` javascript
+someModule.stream(function(err, stdout, stderr) {
+ if (err) throw err;
+
+ var form = new FormData();
+
+ form.append('file', stdout, {
+ filename: 'unicycle.jpg', // ... or:
+ filepath: 'photos/toys/unicycle.jpg',
+ contentType: 'image/jpeg',
+ knownLength: 19806
+ });
+
+ form.submit('http://example.com/', function(err, res) {
+ if (err) throw err;
+ console.log('Done');
+ });
+});
+```
+
+The `filepath` property overrides `filename` and may contain a relative path. This is typically used when uploading [multiple files from a directory](https://wicg.github.io/entries-api/#dom-htmlinputelement-webkitdirectory).
+
+For edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter:
+
+``` javascript
+form.submit({
+ host: 'example.com',
+ path: '/probably.php?extra=params',
+ auth: 'username:password'
+}, function(err, res) {
+ console.log(res.statusCode);
+});
+```
+
+In case you need to also send custom HTTP headers with the POST request, you can use the `headers` key in first parameter of `form.submit()`:
+
+``` javascript
+form.submit({
+ host: 'example.com',
+ path: '/surelynot.php',
+ headers: {'x-test-header': 'test-header-value'}
+}, function(err, res) {
+ console.log(res.statusCode);
+});
+```
+
+### Methods
+
+- [_Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] )](https://github.com/form-data/form-data#void-append-string-field-mixed-value--mixed-options-).
+- [_Array_ getHeaders( [**Array** _userHeaders_] )](https://github.com/form-data/form-data#array-getheaders-array-userheaders-)
+- [_String_ getBoundary()](https://github.com/form-data/form-data#string-getboundary)
+- [_Buffer_ getBuffer()](https://github.com/form-data/form-data#buffer-getbuffer)
+- [_Integer_ getLengthSync()](https://github.com/form-data/form-data#integer-getlengthsync)
+- [_Integer_ getLength( **function** _callback_ )](https://github.com/form-data/form-data#integer-getlength-function-callback-)
+- [_Boolean_ hasKnownLength()](https://github.com/form-data/form-data#boolean-hasknownlength)
+- [_Request_ submit( _params_, **function** _callback_ )](https://github.com/form-data/form-data#request-submit-params-function-callback-)
+- [_String_ toString()](https://github.com/form-data/form-data#string-tostring)
+
+#### _Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] )
+Append data to the form. You can submit about any format (string, integer, boolean, buffer, etc.). However, Arrays are not supported and need to be turned into strings by the user.
+```javascript
+var form = new FormData();
+form.append( 'my_string', 'my value' );
+form.append( 'my_integer', 1 );
+form.append( 'my_boolean', true );
+form.append( 'my_buffer', new Buffer(10) );
+form.append( 'my_array_as_json', JSON.stringify( ['bird','cute'] ) )
+```
+
+You may provide a string for options, or an object.
+```javascript
+// Set filename by providing a string for options
+form.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), 'bar.jpg' );
+
+// provide an object.
+form.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), {filename: 'bar.jpg', contentType: 'image/jpeg', knownLength: 19806} );
+```
+
+#### _Array_ getHeaders( [**Array** _userHeaders_] )
+This method ads the correct `content-type` header to the provided array of `userHeaders`.
+
+#### _String_ getBoundary()
+Return the boundary of the formData. A boundary consists of 26 `-` followed by 24 numbers
+for example:
+```javascript
+--------------------------515890814546601021194782
+```
+_Note: The boundary must be unique and may not appear in the data._
+
+#### _Buffer_ getBuffer()
+Return the full formdata request package, as a Buffer. You can insert this Buffer in e.g. Axios to send multipart data.
+```javascript
+var form = new FormData();
+form.append( 'my_buffer', Buffer.from([0x4a,0x42,0x20,0x52,0x6f,0x63,0x6b,0x73]) );
+form.append( 'my_file', fs.readFileSync('/foo/bar.jpg') );
+
+axios.post( 'https://example.com/path/to/api',
+ form.getBuffer(),
+ form.getHeaders()
+ )
+```
+**Note:** Because the output is of type Buffer, you can only append types that are accepted by Buffer: *string, Buffer, ArrayBuffer, Array, or Array-like Object*. A ReadStream for example will result in an error.
+
+#### _Integer_ getLengthSync()
+Same as `getLength` but synchronous.
+
+_Note: getLengthSync __doesn't__ calculate streams length._
+
+#### _Integer_ getLength( **function** _callback_ )
+Returns the `Content-Length` async. The callback is used to handle errors and continue once the length has been calculated
+```javascript
+this.getLength(function(err, length) {
+ if (err) {
+ this._error(err);
+ return;
+ }
+
+ // add content length
+ request.setHeader('Content-Length', length);
+
+ ...
+}.bind(this));
+```
+
+#### _Boolean_ hasKnownLength()
+Checks if the length of added values is known.
+
+#### _Request_ submit( _params_, **function** _callback_ )
+Submit the form to a web application.
+```javascript
+var form = new FormData();
+form.append( 'my_string', 'Hello World' );
+
+form.submit( 'http://example.com/', function(err, res) {
+ // res – response object (http.IncomingMessage) //
+ res.resume();
+} );
+```
+
+#### _String_ toString()
+Returns the form data as a string. Don't use this if you are sending files or buffers, use `getBuffer()` instead.
+
+### Integration with other libraries
+
+#### Request
+
+Form submission using [request](https://github.com/request/request):
+
+```javascript
+var formData = {
+ my_field: 'my_value',
+ my_file: fs.createReadStream(__dirname + '/unicycle.jpg'),
+};
+
+request.post({url:'http://service.com/upload', formData: formData}, function(err, httpResponse, body) {
+ if (err) {
+ return console.error('upload failed:', err);
+ }
+ console.log('Upload successful! Server responded with:', body);
+});
+```
+
+For more details see [request readme](https://github.com/request/request#multipartform-data-multipart-form-uploads).
+
+#### node-fetch
+
+You can also submit a form using [node-fetch](https://github.com/bitinn/node-fetch):
+
+```javascript
+var form = new FormData();
+
+form.append('a', 1);
+
+fetch('http://example.com', { method: 'POST', body: form })
+ .then(function(res) {
+ return res.json();
+ }).then(function(json) {
+ console.log(json);
+ });
+```
+
+#### axios
+
+In Node.js you can post a file using [axios](https://github.com/axios/axios):
+```javascript
+const form = new FormData();
+const stream = fs.createReadStream(PATH_TO_FILE);
+
+form.append('image', stream);
+
+// In Node.js environment you need to set boundary in the header field 'Content-Type' by calling method `getHeaders`
+const formHeaders = form.getHeaders();
+
+axios.post('http://example.com', form, {
+ headers: {
+ ...formHeaders,
+ },
+})
+.then(response => response)
+.catch(error => error)
+```
+
+## Notes
+
+- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround.
+- Starting version `2.x` FormData has dropped support for `node@0.10.x`.
+
+## License
+
+Form-Data is released under the [MIT](License) license.
diff --git a/masteringModule/node_modules/form-data/index.d.ts b/masteringModule/node_modules/form-data/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..255292d7e39643a2ea36ba7f1787a4642c82d829
--- /dev/null
+++ b/masteringModule/node_modules/form-data/index.d.ts
@@ -0,0 +1,51 @@
+// Definitions by: Carlos Ballesteros Velasco
+// Leon Yu
+// BendingBender
+// Maple Miao
+
+///
+import * as stream from 'stream';
+import * as http from 'http';
+
+export = FormData;
+
+interface Options {
+ writable?: boolean;
+ readable?: boolean;
+ dataSize?: number;
+ maxDataSize?: number;
+ pauseStreams?: boolean;
+}
+
+declare class FormData extends stream.Readable {
+ constructor(options?: Options);
+ append(key: string, value: any, options?: FormData.AppendOptions | string): void;
+ getHeaders(): FormData.Headers;
+ submit(
+ params: string | FormData.SubmitOptions,
+ callback?: (error: Error | null, response: http.IncomingMessage) => void
+ ): http.ClientRequest;
+ getBuffer(): Buffer;
+ getBoundary(): string;
+ getLength(callback: (err: Error | null, length: number) => void): void;
+ getLengthSync(): number;
+ hasKnownLength(): boolean;
+}
+
+declare namespace FormData {
+ interface Headers {
+ [key: string]: any;
+ }
+
+ interface AppendOptions {
+ header?: string | Headers;
+ knownLength?: number;
+ filename?: string;
+ filepath?: string;
+ contentType?: string;
+ }
+
+ interface SubmitOptions extends http.RequestOptions {
+ protocol?: 'https:' | 'http:';
+ }
+}
diff --git a/masteringModule/node_modules/form-data/lib/browser.js b/masteringModule/node_modules/form-data/lib/browser.js
new file mode 100644
index 0000000000000000000000000000000000000000..09e7c70e6e9d78790d5fca1029eb13803e0b872d
--- /dev/null
+++ b/masteringModule/node_modules/form-data/lib/browser.js
@@ -0,0 +1,2 @@
+/* eslint-env browser */
+module.exports = typeof self == 'object' ? self.FormData : window.FormData;
diff --git a/masteringModule/node_modules/form-data/lib/form_data.js b/masteringModule/node_modules/form-data/lib/form_data.js
new file mode 100644
index 0000000000000000000000000000000000000000..9c07e32c0f926376fddfd1081666de51cc564a39
--- /dev/null
+++ b/masteringModule/node_modules/form-data/lib/form_data.js
@@ -0,0 +1,483 @@
+var CombinedStream = require('combined-stream');
+var util = require('util');
+var path = require('path');
+var http = require('http');
+var https = require('https');
+var parseUrl = require('url').parse;
+var fs = require('fs');
+var mime = require('mime-types');
+var asynckit = require('asynckit');
+var populate = require('./populate.js');
+
+// Public API
+module.exports = FormData;
+
+// make it a Stream
+util.inherits(FormData, CombinedStream);
+
+/**
+ * Create readable "multipart/form-data" streams.
+ * Can be used to submit forms
+ * and file uploads to other web applications.
+ *
+ * @constructor
+ * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream
+ */
+function FormData(options) {
+ if (!(this instanceof FormData)) {
+ return new FormData();
+ }
+
+ this._overheadLength = 0;
+ this._valueLength = 0;
+ this._valuesToMeasure = [];
+
+ CombinedStream.call(this);
+
+ options = options || {};
+ for (var option in options) {
+ this[option] = options[option];
+ }
+}
+
+FormData.LINE_BREAK = '\r\n';
+FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';
+
+FormData.prototype.append = function(field, value, options) {
+
+ options = options || {};
+
+ // allow filename as single option
+ if (typeof options == 'string') {
+ options = {filename: options};
+ }
+
+ var append = CombinedStream.prototype.append.bind(this);
+
+ // all that streamy business can't handle numbers
+ if (typeof value == 'number') {
+ value = '' + value;
+ }
+
+ // https://github.com/felixge/node-form-data/issues/38
+ if (util.isArray(value)) {
+ // Please convert your array into string
+ // the way web server expects it
+ this._error(new Error('Arrays are not supported.'));
+ return;
+ }
+
+ var header = this._multiPartHeader(field, value, options);
+ var footer = this._multiPartFooter();
+
+ append(header);
+ append(value);
+ append(footer);
+
+ // pass along options.knownLength
+ this._trackLength(header, value, options);
+};
+
+FormData.prototype._trackLength = function(header, value, options) {
+ var valueLength = 0;
+
+ // used w/ getLengthSync(), when length is known.
+ // e.g. for streaming directly from a remote server,
+ // w/ a known file a size, and not wanting to wait for
+ // incoming file to finish to get its size.
+ if (options.knownLength != null) {
+ valueLength += +options.knownLength;
+ } else if (Buffer.isBuffer(value)) {
+ valueLength = value.length;
+ } else if (typeof value === 'string') {
+ valueLength = Buffer.byteLength(value);
+ }
+
+ this._valueLength += valueLength;
+
+ // @check why add CRLF? does this account for custom/multiple CRLFs?
+ this._overheadLength +=
+ Buffer.byteLength(header) +
+ FormData.LINE_BREAK.length;
+
+ // empty or either doesn't have path or not an http response
+ if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) )) {
+ return;
+ }
+
+ // no need to bother with the length
+ if (!options.knownLength) {
+ this._valuesToMeasure.push(value);
+ }
+};
+
+FormData.prototype._lengthRetriever = function(value, callback) {
+
+ if (value.hasOwnProperty('fd')) {
+
+ // take read range into a account
+ // `end` = Infinity –> read file till the end
+ //
+ // TODO: Looks like there is bug in Node fs.createReadStream
+ // it doesn't respect `end` options without `start` options
+ // Fix it when node fixes it.
+ // https://github.com/joyent/node/issues/7819
+ if (value.end != undefined && value.end != Infinity && value.start != undefined) {
+
+ // when end specified
+ // no need to calculate range
+ // inclusive, starts with 0
+ callback(null, value.end + 1 - (value.start ? value.start : 0));
+
+ // not that fast snoopy
+ } else {
+ // still need to fetch file size from fs
+ fs.stat(value.path, function(err, stat) {
+
+ var fileSize;
+
+ if (err) {
+ callback(err);
+ return;
+ }
+
+ // update final size based on the range options
+ fileSize = stat.size - (value.start ? value.start : 0);
+ callback(null, fileSize);
+ });
+ }
+
+ // or http response
+ } else if (value.hasOwnProperty('httpVersion')) {
+ callback(null, +value.headers['content-length']);
+
+ // or request stream http://github.com/mikeal/request
+ } else if (value.hasOwnProperty('httpModule')) {
+ // wait till response come back
+ value.on('response', function(response) {
+ value.pause();
+ callback(null, +response.headers['content-length']);
+ });
+ value.resume();
+
+ // something else
+ } else {
+ callback('Unknown stream');
+ }
+};
+
+FormData.prototype._multiPartHeader = function(field, value, options) {
+ // custom header specified (as string)?
+ // it becomes responsible for boundary
+ // (e.g. to handle extra CRLFs on .NET servers)
+ if (typeof options.header == 'string') {
+ return options.header;
+ }
+
+ var contentDisposition = this._getContentDisposition(value, options);
+ var contentType = this._getContentType(value, options);
+
+ var contents = '';
+ var headers = {
+ // add custom disposition as third element or keep it two elements if not
+ 'Content-Disposition': ['form-data', 'name="' + field + '"'].concat(contentDisposition || []),
+ // if no content type. allow it to be empty array
+ 'Content-Type': [].concat(contentType || [])
+ };
+
+ // allow custom headers.
+ if (typeof options.header == 'object') {
+ populate(headers, options.header);
+ }
+
+ var header;
+ for (var prop in headers) {
+ if (!headers.hasOwnProperty(prop)) continue;
+ header = headers[prop];
+
+ // skip nullish headers.
+ if (header == null) {
+ continue;
+ }
+
+ // convert all headers to arrays.
+ if (!Array.isArray(header)) {
+ header = [header];
+ }
+
+ // add non-empty headers.
+ if (header.length) {
+ contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;
+ }
+ }
+
+ return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;
+};
+
+FormData.prototype._getContentDisposition = function(value, options) {
+
+ var filename
+ , contentDisposition
+ ;
+
+ if (typeof options.filepath === 'string') {
+ // custom filepath for relative paths
+ filename = path.normalize(options.filepath).replace(/\\/g, '/');
+ } else if (options.filename || value.name || value.path) {
+ // custom filename take precedence
+ // formidable and the browser add a name property
+ // fs- and request- streams have path property
+ filename = path.basename(options.filename || value.name || value.path);
+ } else if (value.readable && value.hasOwnProperty('httpVersion')) {
+ // or try http response
+ filename = path.basename(value.client._httpMessage.path || '');
+ }
+
+ if (filename) {
+ contentDisposition = 'filename="' + filename + '"';
+ }
+
+ return contentDisposition;
+};
+
+FormData.prototype._getContentType = function(value, options) {
+
+ // use custom content-type above all
+ var contentType = options.contentType;
+
+ // or try `name` from formidable, browser
+ if (!contentType && value.name) {
+ contentType = mime.lookup(value.name);
+ }
+
+ // or try `path` from fs-, request- streams
+ if (!contentType && value.path) {
+ contentType = mime.lookup(value.path);
+ }
+
+ // or if it's http-reponse
+ if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) {
+ contentType = value.headers['content-type'];
+ }
+
+ // or guess it from the filepath or filename
+ if (!contentType && (options.filepath || options.filename)) {
+ contentType = mime.lookup(options.filepath || options.filename);
+ }
+
+ // fallback to the default content type if `value` is not simple value
+ if (!contentType && typeof value == 'object') {
+ contentType = FormData.DEFAULT_CONTENT_TYPE;
+ }
+
+ return contentType;
+};
+
+FormData.prototype._multiPartFooter = function() {
+ return function(next) {
+ var footer = FormData.LINE_BREAK;
+
+ var lastPart = (this._streams.length === 0);
+ if (lastPart) {
+ footer += this._lastBoundary();
+ }
+
+ next(footer);
+ }.bind(this);
+};
+
+FormData.prototype._lastBoundary = function() {
+ return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;
+};
+
+FormData.prototype.getHeaders = function(userHeaders) {
+ var header;
+ var formHeaders = {
+ 'content-type': 'multipart/form-data; boundary=' + this.getBoundary()
+ };
+
+ for (header in userHeaders) {
+ if (userHeaders.hasOwnProperty(header)) {
+ formHeaders[header.toLowerCase()] = userHeaders[header];
+ }
+ }
+
+ return formHeaders;
+};
+
+FormData.prototype.getBoundary = function() {
+ if (!this._boundary) {
+ this._generateBoundary();
+ }
+
+ return this._boundary;
+};
+
+FormData.prototype.getBuffer = function() {
+ var dataBuffer = new Buffer.alloc( 0 );
+ var boundary = this.getBoundary();
+
+ // Create the form content. Add Line breaks to the end of data.
+ for (var i = 0, len = this._streams.length; i < len; i++) {
+ if (typeof this._streams[i] !== 'function') {
+
+ // Add content to the buffer.
+ if(Buffer.isBuffer(this._streams[i])) {
+ dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]);
+ }else {
+ dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]);
+ }
+
+ // Add break after content.
+ if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) {
+ dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] );
+ }
+ }
+ }
+
+ // Add the footer and return the Buffer object.
+ return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] );
+};
+
+FormData.prototype._generateBoundary = function() {
+ // This generates a 50 character boundary similar to those used by Firefox.
+ // They are optimized for boyer-moore parsing.
+ var boundary = '--------------------------';
+ for (var i = 0; i < 24; i++) {
+ boundary += Math.floor(Math.random() * 10).toString(16);
+ }
+
+ this._boundary = boundary;
+};
+
+// Note: getLengthSync DOESN'T calculate streams length
+// As workaround one can calculate file size manually
+// and add it as knownLength option
+FormData.prototype.getLengthSync = function() {
+ var knownLength = this._overheadLength + this._valueLength;
+
+ // Don't get confused, there are 3 "internal" streams for each keyval pair
+ // so it basically checks if there is any value added to the form
+ if (this._streams.length) {
+ knownLength += this._lastBoundary().length;
+ }
+
+ // https://github.com/form-data/form-data/issues/40
+ if (!this.hasKnownLength()) {
+ // Some async length retrievers are present
+ // therefore synchronous length calculation is false.
+ // Please use getLength(callback) to get proper length
+ this._error(new Error('Cannot calculate proper length in synchronous way.'));
+ }
+
+ return knownLength;
+};
+
+// Public API to check if length of added values is known
+// https://github.com/form-data/form-data/issues/196
+// https://github.com/form-data/form-data/issues/262
+FormData.prototype.hasKnownLength = function() {
+ var hasKnownLength = true;
+
+ if (this._valuesToMeasure.length) {
+ hasKnownLength = false;
+ }
+
+ return hasKnownLength;
+};
+
+FormData.prototype.getLength = function(cb) {
+ var knownLength = this._overheadLength + this._valueLength;
+
+ if (this._streams.length) {
+ knownLength += this._lastBoundary().length;
+ }
+
+ if (!this._valuesToMeasure.length) {
+ process.nextTick(cb.bind(this, null, knownLength));
+ return;
+ }
+
+ asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {
+ if (err) {
+ cb(err);
+ return;
+ }
+
+ values.forEach(function(length) {
+ knownLength += length;
+ });
+
+ cb(null, knownLength);
+ });
+};
+
+FormData.prototype.submit = function(params, cb) {
+ var request
+ , options
+ , defaults = {method: 'post'}
+ ;
+
+ // parse provided url if it's string
+ // or treat it as options object
+ if (typeof params == 'string') {
+
+ params = parseUrl(params);
+ options = populate({
+ port: params.port,
+ path: params.pathname,
+ host: params.hostname,
+ protocol: params.protocol
+ }, defaults);
+
+ // use custom params
+ } else {
+
+ options = populate(params, defaults);
+ // if no port provided use default one
+ if (!options.port) {
+ options.port = options.protocol == 'https:' ? 443 : 80;
+ }
+ }
+
+ // put that good code in getHeaders to some use
+ options.headers = this.getHeaders(params.headers);
+
+ // https if specified, fallback to http in any other case
+ if (options.protocol == 'https:') {
+ request = https.request(options);
+ } else {
+ request = http.request(options);
+ }
+
+ // get content length and fire away
+ this.getLength(function(err, length) {
+ if (err) {
+ this._error(err);
+ return;
+ }
+
+ // add content length
+ request.setHeader('Content-Length', length);
+
+ this.pipe(request);
+ if (cb) {
+ request.on('error', cb);
+ request.on('response', cb.bind(this, null));
+ }
+ }.bind(this));
+
+ return request;
+};
+
+FormData.prototype._error = function(err) {
+ if (!this.error) {
+ this.error = err;
+ this.pause();
+ this.emit('error', err);
+ }
+};
+
+FormData.prototype.toString = function () {
+ return '[object FormData]';
+};
diff --git a/masteringModule/node_modules/form-data/lib/populate.js b/masteringModule/node_modules/form-data/lib/populate.js
new file mode 100644
index 0000000000000000000000000000000000000000..4d35738dd502a7592a440668bd0e72a1542dd6c7
--- /dev/null
+++ b/masteringModule/node_modules/form-data/lib/populate.js
@@ -0,0 +1,10 @@
+// populates missing values
+module.exports = function(dst, src) {
+
+ Object.keys(src).forEach(function(prop)
+ {
+ dst[prop] = dst[prop] || src[prop];
+ });
+
+ return dst;
+};
diff --git a/masteringModule/node_modules/form-data/package.json b/masteringModule/node_modules/form-data/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..7423f200d67f1ad2dd708a52981e039867a353f5
--- /dev/null
+++ b/masteringModule/node_modules/form-data/package.json
@@ -0,0 +1,68 @@
+{
+ "author": "Felix Geisendörfer (http://debuggable.com/)",
+ "name": "form-data",
+ "description": "A library to create readable \"multipart/form-data\" streams. Can be used to submit forms and file uploads to other web applications.",
+ "version": "2.5.1",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/form-data/form-data.git"
+ },
+ "main": "./lib/form_data",
+ "browser": "./lib/browser",
+ "typings": "./index.d.ts",
+ "scripts": {
+ "pretest": "rimraf coverage test/tmp",
+ "test": "istanbul cover test/run.js",
+ "posttest": "istanbul report lcov text",
+ "lint": "eslint lib/*.js test/*.js test/integration/*.js",
+ "report": "istanbul report lcov text",
+ "ci-lint": "is-node-modern 8 && npm run lint || is-node-not-modern 8",
+ "ci-test": "npm run test && npm run browser && npm run report",
+ "predebug": "rimraf coverage test/tmp",
+ "debug": "verbose=1 ./test/run.js",
+ "browser": "browserify -t browserify-istanbul test/run-browser.js | obake --coverage",
+ "check": "istanbul check-coverage coverage/coverage*.json",
+ "files": "pkgfiles --sort=name",
+ "get-version": "node -e \"console.log(require('./package.json').version)\"",
+ "update-readme": "sed -i.bak 's/\\/master\\.svg/\\/v'$(npm --silent run get-version)'.svg/g' README.md",
+ "restore-readme": "mv README.md.bak README.md",
+ "prepublish": "in-publish && npm run update-readme || not-in-publish",
+ "postpublish": "npm run restore-readme"
+ },
+ "pre-commit": [
+ "lint",
+ "ci-test",
+ "check"
+ ],
+ "engines": {
+ "node": ">= 0.12"
+ },
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "devDependencies": {
+ "@types/node": "^12.0.10",
+ "browserify": "^13.1.1",
+ "browserify-istanbul": "^2.0.0",
+ "coveralls": "^3.0.4",
+ "cross-spawn": "^6.0.5",
+ "eslint": "^6.0.1",
+ "fake": "^0.2.2",
+ "far": "^0.0.7",
+ "formidable": "^1.0.17",
+ "in-publish": "^2.0.0",
+ "is-node-modern": "^1.0.0",
+ "istanbul": "^0.4.5",
+ "obake": "^0.1.2",
+ "phantomjs-prebuilt": "^2.1.13",
+ "pkgfiles": "^2.3.0",
+ "pre-commit": "^1.1.3",
+ "request": "^2.88.0",
+ "rimraf": "^2.7.1",
+ "tape": "^4.6.2",
+ "typescript": "^3.5.2"
+ },
+ "license": "MIT"
+}
diff --git a/masteringModule/node_modules/formidable/LICENSE b/masteringModule/node_modules/formidable/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..7c66bea2c24f48c0f3e4f6aa019ea29f85c6e4fb
--- /dev/null
+++ b/masteringModule/node_modules/formidable/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2011-present Felix Geisendörfer, and contributors.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/masteringModule/node_modules/formidable/README.md b/masteringModule/node_modules/formidable/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..e6c5075edcf32d15a2674d39b81b7a16ab4ecfd9
--- /dev/null
+++ b/masteringModule/node_modules/formidable/README.md
@@ -0,0 +1,735 @@
+
+
+
+
+# formidable [![npm version][npmv-img]][npmv-url] [![MIT license][license-img]][license-url] [![Libera Manifesto][libera-manifesto-img]][libera-manifesto-url] [![Twitter][twitter-img]][twitter-url]
+
+> A Node.js module for parsing form data, especially file uploads.
+
+### Important Notes
+
+- This README is for the upcoming (end of February) v2 release!
+- Every version prior and including `v1.2.2` is deprecated, please upgrade!
+- Install with `formidable@canary` until v2 land officially in `latest`
+- see more about the changes in the [CHANGELOG.md](https://github.com/node-formidable/formidable/blob/master/CHANGELOG.md)
+
+[![Code style][codestyle-img]][codestyle-url]
+[![codecoverage][codecov-img]][codecov-url]
+[![linux build status][linux-build-img]][build-url]
+[![windows build status][windows-build-img]][build-url]
+[![macos build status][macos-build-img]][build-url]
+
+If you have any _how-to_ kind of questions, please read the [Contributing
+Guide][contributing-url] and [Code of Conduct][code_of_conduct-url]
+documents. For bugs reports and feature requests, [please create an
+issue][open-issue-url] or ping [@tunnckoCore](https://twitter.com/tunnckoCore)
+at Twitter.
+
+[![Conventional Commits][ccommits-img]][ccommits-url]
+[![Minimum Required Nodejs][nodejs-img]][npmv-url]
+[![Tidelift Subcsription][tidelift-img]][tidelift-url]
+[![Buy me a Kofi][kofi-img]][kofi-url]
+[![Renovate App Status][renovateapp-img]][renovateapp-url]
+[![Make A Pull Request][prs-welcome-img]][prs-welcome-url]
+
+This project is [semantically versioned](https://semver.org) and available as
+part of the [Tidelift Subscription][tidelift-url] for professional grade
+assurances, enhanced support and security.
+[Learn more.](https://tidelift.com/subscription/pkg/npm-formidable?utm_source=npm-formidable&utm_medium=referral&utm_campaign=enterprise)
+
+_The maintainers of `formidable` and thousands of other packages are working
+with Tidelift to deliver commercial support and maintenance for the Open Source
+dependencies you use to build your applications. Save time, reduce risk, and
+improve code health, while paying the maintainers of the exact dependencies you
+use._
+
+[![][npm-weekly-img]][npmv-url] [![][npm-monthly-img]][npmv-url]
+[![][npm-yearly-img]][npmv-url] [![][npm-alltime-img]][npmv-url]
+
+## Status: Maintained [![npm version][npmv-canary-img]][npmv-url]
+
+This module was initially developed by
+[**@felixge**](https://github.com/felixge) for
+[Transloadit](http://transloadit.com/), a service focused on uploading and
+encoding images and videos. It has been battle-tested against hundreds of GBs of
+file uploads from a large variety of clients and is considered production-ready
+and is used in production for years.
+
+Currently, we are few maintainers trying to deal with it. :) More contributors
+are always welcome! :heart: Jump on
+[issue #412](https://github.com/felixge/node-formidable/issues/412) which is
+closed, but if you are interested we can discuss it and add you after strict rules, like
+enabling Two-Factor Auth in your npm and GitHub accounts.
+
+_**Note:** The github `master` branch is a "canary" branch - try it with `npm i formidable@canary`.
+Do not expect (for now) things from it to be inside the`latest` "dist-tag" in the
+Npm. The`formidable@latest`is the`v1.2.1` version and probably it will be the
+last`v1` release!_
+
+_**Note: v2 is coming soon!**_
+
+## Highlights
+
+- [Fast (~900-2500 mb/sec)](#benchmarks) & streaming multipart parser
+- Automatically writing file uploads to disk (soon optionally)
+- [Plugins API](#useplugin-plugin) - allowing custom parsers and plugins
+- Low memory footprint
+- Graceful error handling
+- Very high test coverage
+
+## Install
+
+This project requires `Node.js >= 10.13`. Install it using
+[yarn](https://yarnpkg.com) or [npm](https://npmjs.com). _We highly
+recommend to use Yarn when you think to contribute to this project._
+
+```sh
+npm install formidable
+# or the canary version
+npm install formidable@canary
+```
+
+or with Yarn v1/v2
+
+```sh
+yarn add formidable
+# or the canary version
+yarn add formidable@canary
+```
+
+This is a low-level package, and if you're using a high-level framework it _may_
+already be included. Check the examples below and the `examples/` folder.
+
+## Examples
+
+For more examples look at the `examples/` directory.
+
+### with Node.js http module
+
+Parse an incoming file upload, with the
+[Node.js's built-in `http` module](https://nodejs.org/api/http.html).
+
+```js
+const http = require('http');
+const formidable = require('formidable');
+
+const server = http.createServer((req, res) => {
+ if (req.url === '/api/upload' && req.method.toLowerCase() === 'post') {
+ // parse a file upload
+ const form = formidable({ multiples: true });
+
+ form.parse(req, (err, fields, files) => {
+ res.writeHead(200, { 'content-type': 'application/json' });
+ res.end(JSON.stringify({ fields, files }, null, 2));
+ });
+
+ return;
+ }
+
+ // show a file upload form
+ res.writeHead(200, { 'content-type': 'text/html' });
+ res.end(`
+
With Node.js "http" module
+
+ `);
+});
+
+server.listen(8080, () => {
+ console.log('Server listening on http://localhost:8080/ ...');
+});
+```
+
+### with Express.js
+
+There are multiple variants to do this, but Formidable just need Node.js Request
+stream, so something like the following example should work just fine, without
+any third-party [Express.js](https://ghub.now.sh/express) middleware.
+
+Or try the
+[examples/with-express.js](https://github.com/node-formidable/node-formidable/blob/master/examples/with-express.js)
+
+```js
+const express = require('express');
+const formidable = require('formidable');
+
+const app = express();
+
+app.get('/', (req, res) => {
+ res.send(`
+
With "express" npm package
+
+ `);
+});
+
+app.post('/api/upload', (req, res, next) => {
+ const form = formidable({ multiples: true });
+
+ form.parse(req, (err, fields, files) => {
+ if (err) {
+ next(err);
+ return;
+ }
+ res.json({ fields, files });
+ });
+});
+
+app.listen(3000, () => {
+ console.log('Server listening on http://localhost:3000 ...');
+});
+```
+
+### with Koa and Formidable
+
+Of course, with [Koa v1, v2 or future v3](https://ghub.now.sh/koa) the things
+are very similar. You can use `formidable` manually as shown below or through
+the [koa-better-body](https://ghub.now.sh/koa-better-body) package which is
+using `formidable` under the hood and support more features and different
+request bodies, check its documentation for more info.
+
+_Note: this example is assuming Koa v2. Be aware that you should pass `ctx.req`
+which is Node.js's Request, and **NOT** the `ctx.request` which is Koa's Request
+object - there is a difference._
+
+```js
+const Koa = require('koa');
+const formidable = require('formidable');
+
+const app = new Koa();
+
+app.on('error', (err) => {
+ console.error('server error', err);
+});
+
+app.use(async (ctx, next) => {
+ if (ctx.url === '/api/upload' && ctx.method.toLowerCase() === 'post') {
+ const form = formidable({ multiples: true });
+
+ // not very elegant, but that's for now if you don't want touse `koa-better-body`
+ // or other middlewares.
+ await new Promise((resolve, reject) => {
+ form.parse(ctx.req, (err, fields, files) => {
+ if (err) {
+ reject(err);
+ return;
+ }
+
+ ctx.set('Content-Type', 'application/json');
+ ctx.status = 200;
+ ctx.state = { fields, files };
+ ctx.body = JSON.stringify(ctx.state, null, 2);
+ resolve();
+ });
+ });
+ await next();
+ return;
+ }
+
+ // show a file upload form
+ ctx.set('Content-Type', 'text/html');
+ ctx.status = 200;
+ ctx.body = `
+
With "koa" npm package
+
+ `;
+});
+
+app.use((ctx) => {
+ console.log('The next middleware is called');
+ console.log('Results:', ctx.state);
+});
+
+app.listen(3000, () => {
+ console.log('Server listening on http://localhost:3000 ...');
+});
+```
+
+## Benchmarks (for v2)
+
+The benchmark is quite old, from the old codebase. But maybe quite true though.
+Previously the numbers was around ~500 mb/sec. Currently with moving to the new
+Node.js Streams API it's faster. You can clearly see the differences between the
+Node versions.
+
+_Note: a lot better benchmarking could and should be done in future._
+
+Benchmarked on 8GB RAM, Xeon X3440 (2.53 GHz, 4 cores, 8 threads)
+
+```
+~/github/node-formidable master
+❯ nve --parallel 8 10 12 13 node benchmark/bench-multipart-parser.js
+
+ ⬢ Node 8
+
+1261.08 mb/sec
+
+ ⬢ Node 10
+
+1113.04 mb/sec
+
+ ⬢ Node 12
+
+2107.00 mb/sec
+
+ ⬢ Node 13
+
+2566.42 mb/sec
+```
+
+
+
+## API
+
+### Formidable / IncomingForm
+
+All shown are equivalent.
+
+_Please pass [`options`](#options) to the function/constructor, not by assigning
+them to the instance `form`_
+
+```js
+const formidable = require('formidable');
+const form = formidable(options);
+
+// or
+const { formidable } = require('formidable');
+const form = formidable(options);
+
+// or
+const { IncomingForm } = require('formidable');
+const form = new IncomingForm(options);
+
+// or
+const { Formidable } = require('formidable');
+const form = new Formidable(options);
+```
+
+### Options
+
+See it's defaults in [src/Formidable.js](./src/Formidable.js#L14-L22) (the
+`DEFAULT_OPTIONS` constant).
+
+- `options.encoding` **{string}** - default `'utf-8'`; sets encoding for
+ incoming form fields,
+- `options.uploadDir` **{string}** - default `os.tmpdir()`; the directory for
+ placing file uploads in. You can move them later by using `fs.rename()`
+- `options.keepExtensions` **{boolean}** - default `false`; to include the
+ extensions of the original files or not
+- `options.maxFileSize` **{number}** - default `200 * 1024 * 1024` (200mb);
+ limit the size of uploaded file.
+- `options.maxFields` **{number}** - default `1000`; limit the number of fields
+ that the Querystring parser will decode, set 0 for unlimited
+- `options.maxFieldsSize` **{number}** - default `20 * 1024 * 1024` (20mb);
+ limit the amount of memory all fields together (except files) can allocate in
+ bytes.
+- `options.hash` **{boolean}** - default `false`; include checksums calculated
+ for incoming files, set this to some hash algorithm, see
+ [crypto.createHash](https://nodejs.org/api/crypto.html#crypto_crypto_createhash_algorithm_options)
+ for available algorithms
+- `options.multiples` **{boolean}** - default `false`; when you call the
+ `.parse` method, the `files` argument (of the callback) will contain arrays of
+ files for inputs which submit multiple files using the HTML5 `multiple`
+ attribute. Also, the `fields` argument will contain arrays of values for
+ fields that have names ending with '[]'.
+
+_**Note:** If this size of combined fields, or size of some file is exceeded, an
+`'error'` event is fired._
+
+```js
+// The amount of bytes received for this form so far.
+form.bytesReceived;
+```
+
+```js
+// The expected number of bytes in this form.
+form.bytesExpected;
+```
+
+### .parse(request, callback)
+
+Parses an incoming Node.js `request` containing form data. If `callback` is
+provided, all fields and files are collected and passed to the callback.
+
+```js
+const formidable = require('formidable');
+
+const form = formidable({ multiples: true, uploadDir: __dirname });
+
+form.parse(req, (err, fields, files) => {
+ console.log('fields:', fields);
+ console.log('files:', files);
+});
+```
+
+You may overwrite this method if you are interested in directly accessing the
+multipart stream. Doing so will disable any `'field'` / `'file'` events
+processing which would occur otherwise, making you fully responsible for
+handling the processing.
+
+In the example below, we listen on couple of events and direct them to the
+`data` listener, so you can do whatever you choose there, based on whether its
+before the file been emitted, the header value, the header name, on field, on
+file and etc.
+
+Or the other way could be to just override the `form.onPart` as it's shown a bit
+later.
+
+```js
+form.once('error', console.error);
+
+form.on('fileBegin', (filename, file) => {
+ form.emit('data', { name: 'fileBegin', filename, value: file });
+});
+
+form.on('file', (filename, file) => {
+ form.emit('data', { name: 'file', key: filename, value: file });
+});
+
+form.on('field', (fieldName, fieldValue) => {
+ form.emit('data', { name: 'field', key: fieldName, value: fieldValue });
+});
+
+form.once('end', () => {
+ console.log('Done!');
+});
+
+// If you want to customize whatever you want...
+form.on('data', ({ name, key, value, buffer, start, end, ...more }) => {
+ if (name === 'partBegin') {
+ }
+ if (name === 'partData') {
+ }
+ if (name === 'headerField') {
+ }
+ if (name === 'headerValue') {
+ }
+ if (name === 'headerEnd') {
+ }
+ if (name === 'headersEnd') {
+ }
+ if (name === 'field') {
+ console.log('field name:', key);
+ console.log('field value:', value);
+ }
+ if (name === 'file') {
+ console.log('file:', key, value);
+ }
+ if (name === 'fileBegin') {
+ console.log('fileBegin:', key, value);
+ }
+});
+```
+
+### .use(plugin: Plugin)
+
+A method that allows you to extend the Formidable library. By default we include
+4 plugins, which esentially are adapters to plug the different built-in parsers.
+
+**The plugins added by this method are always enabled.**
+
+_See [src/plugins/](./src/plugins/) for more detailed look on default plugins._
+
+The `plugin` param has such signature:
+
+```typescript
+function(formidable: Formidable, options: Options): void;
+```
+
+The architecture is simple. The `plugin` is a function that is passed with the
+Formidable instance (the `form` across the README examples) and the options.
+
+**Note:** the plugin function's `this` context is also the same instance.
+
+```js
+const formidable = require('formidable');
+
+const form = formidable({ keepExtensions: true });
+
+form.use((self, options) => {
+ // self === this === form
+ console.log('woohoo, custom plugin');
+ // do your stuff; check `src/plugins` for inspiration
+});
+
+form.parse(req, (error, fields, files) => {
+ console.log('done!');
+});
+```
+
+**Important to note**, is that inside plugin `this.options`, `self.options` and
+`options` MAY or MAY NOT be the same. General best practice is to always use the
+`this`, so you can later test your plugin independently and more easily.
+
+If you want to disable some parsing capabilities of Formidable, you can disable
+the plugin which corresponds to the parser. For example, if you want to disable
+multipart parsing (so the [src/parsers/Multipart.js](./src/parsers/Multipart.js)
+which is used in [src/plugins/multipart.js](./src/plugins/multipart.js)), then
+you can remove it from the `options.enabledPlugins`, like so
+
+```js
+const { Formidable } = require('formidable');
+
+const form = new Formidable({
+ hash: 'sha1',
+ enabledPlugins: ['octetstream', 'querystring', 'json'],
+});
+```
+
+**Be aware** that the order _MAY_ be important too. The names corresponds 1:1 to
+files in [src/plugins/](./src/plugins) folder.
+
+Pull requests for new built-in plugins MAY be accepted - for example, more
+advanced querystring parser. Add your plugin as a new file in `src/plugins/`
+folder (lowercased) and follow how the other plugins are made.
+
+### form.onPart
+
+If you want to use Formidable to only handle certain parts for you, you can do
+something similar. Or see
+[#387](https://github.com/node-formidable/node-formidable/issues/387) for
+inspiration, you can for example validate the mime-type.
+
+```js
+const form = formidable();
+
+form.onPart = (part) => {
+ part.on('data', (buffer) {
+ // do whatever you want here
+ });
+};
+```
+
+For example, force Formidable to be used only on non-file "parts" (i.e., html
+fields)
+
+```js
+const form = formidable();
+
+form.onPart = function(part) {
+ // let formidable handle only non-file parts
+ if (part.filename === '' || !part.mime) {
+ // used internally, please do not override!
+ form.handlePart(part);
+ }
+};
+```
+
+### File
+
+```ts
+export interface File {
+ // The size of the uploaded file in bytes.
+ // If the file is still being uploaded (see `'fileBegin'` event),
+ // this property says how many bytes of the file have been written to disk yet.
+ file.size: number;
+
+ // The path this file is being written to. You can modify this in the `'fileBegin'` event in
+ // case you are unhappy with the way formidable generates a temporary path for your files.
+ file.path: string;
+
+ // The name this file had according to the uploading client.
+ file.name: string | null;
+
+ // The mime type of this file, according to the uploading client.
+ file.type: string | null;
+
+ // A Date object (or `null`) containing the time this file was last written to.
+ // Mostly here for compatibility with the [W3C File API Draft](http://dev.w3.org/2006/webapi/FileAPI/).
+ file.lastModifiedDate: Date | null;
+
+ // If `options.hash` calculation was set, you can read the hex digest out of this var.
+ file.hash: string | 'sha1' | 'md5' | 'sha256' | null;
+}
+```
+
+#### file.toJSON()
+
+This method returns a JSON-representation of the file, allowing you to
+`JSON.stringify()` the file which is useful for logging and responding to
+requests.
+
+### Events
+
+#### `'progress'`
+
+Emitted after each incoming chunk of data that has been parsed. Can be used to
+roll your own progress bar.
+
+```js
+form.on('progress', (bytesReceived, bytesExpected) => {});
+```
+
+#### `'field'`
+
+Emitted whenever a field / value pair has been received.
+
+```js
+form.on('field', (name, value) => {});
+```
+
+#### `'fileBegin'`
+
+Emitted whenever a new file is detected in the upload stream. Use this event if
+you want to stream the file to somewhere else while buffering the upload on the
+file system.
+
+```js
+form.on('fileBegin', (name, file) => {});
+```
+
+#### `'file'`
+
+Emitted whenever a field / file pair has been received. `file` is an instance of
+`File`.
+
+```js
+form.on('file', (name, file) => {});
+```
+
+#### `'error'`
+
+Emitted when there is an error processing the incoming form. A request that
+experiences an error is automatically paused, you will have to manually call
+`request.resume()` if you want the request to continue firing `'data'` events.
+
+```js
+form.on('error', (err) => {});
+```
+
+#### `'aborted'`
+
+Emitted when the request was aborted by the user. Right now this can be due to a
+'timeout' or 'close' event on the socket. After this event is emitted, an
+`error` event will follow. In the future there will be a separate 'timeout'
+event (needs a change in the node core).
+
+```js
+form.on('aborted', () => {});
+```
+
+#### `'end'`
+
+Emitted when the entire request has been received, and all contained files have
+finished flushing to disk. This is a great place for you to send your response.
+
+```js
+form.on('end', () => {});
+```
+
+## Ports & Credits
+
+- [multipart-parser](http://github.com/FooBarWidget/multipart-parser): a C++
+ parser based on formidable
+- [Ryan Dahl](http://twitter.com/ryah) for his work on
+ [http-parser](http://github.com/ry/http-parser) which heavily inspired the
+ initial `multipart_parser.js`.
+
+## Contributing
+
+If the documentation is unclear or has a typo, please click on the page's `Edit`
+button (pencil icon) and suggest a correction. If you would like to help us fix
+a bug or add a new feature, please check our
+[Contributing Guide](./CONTRIBUTING.md). Pull requests are welcome!
+
+Thanks goes to these wonderful people
+([emoji key](https://allcontributors.org/docs/en/emoji-key)):
+
+
+
+
+