rough build out

This commit is contained in:
Peter Morton 2022-10-13 00:17:28 -05:00
parent 0a5be1ae0e
commit 3fc46d970e
21 changed files with 10728 additions and 0 deletions

926
.gitignore vendored Normal file
View File

@ -0,0 +1,926 @@
server/node_modules/.bin/mime
server/node_modules/.bin/nodemon
server/node_modules/.bin/nodetouch
server/node_modules/.bin/nopt
server/node_modules/.bin/semver
server/node_modules/abbrev/abbrev.js
server/node_modules/abbrev/LICENSE
server/node_modules/abbrev/package.json
server/node_modules/abbrev/README.md
server/node_modules/accepts/HISTORY.md
server/node_modules/accepts/index.js
server/node_modules/accepts/LICENSE
server/node_modules/accepts/package.json
server/node_modules/accepts/README.md
server/node_modules/anymatch/index.d.ts
server/node_modules/anymatch/index.js
server/node_modules/anymatch/LICENSE
server/node_modules/anymatch/package.json
server/node_modules/anymatch/README.md
server/node_modules/array-flatten/array-flatten.js
server/node_modules/array-flatten/LICENSE
server/node_modules/array-flatten/package.json
server/node_modules/array-flatten/README.md
server/node_modules/asynckit/bench.js
server/node_modules/asynckit/index.js
server/node_modules/asynckit/LICENSE
server/node_modules/asynckit/package.json
server/node_modules/asynckit/parallel.js
server/node_modules/asynckit/README.md
server/node_modules/asynckit/serial.js
server/node_modules/asynckit/serialOrdered.js
server/node_modules/asynckit/stream.js
server/node_modules/asynckit/lib/abort.js
server/node_modules/asynckit/lib/async.js
server/node_modules/asynckit/lib/defer.js
server/node_modules/asynckit/lib/iterate.js
server/node_modules/asynckit/lib/readable_asynckit.js
server/node_modules/asynckit/lib/readable_parallel.js
server/node_modules/asynckit/lib/readable_serial_ordered.js
server/node_modules/asynckit/lib/readable_serial.js
server/node_modules/asynckit/lib/state.js
server/node_modules/asynckit/lib/streamify.js
server/node_modules/asynckit/lib/terminator.js
server/node_modules/axios/CHANGELOG.md
server/node_modules/axios/gulpfile.js
server/node_modules/axios/index.d.ts
server/node_modules/axios/index.js
server/node_modules/axios/karma.conf.cjs
server/node_modules/axios/LICENSE
server/node_modules/axios/package.json
server/node_modules/axios/README.md
server/node_modules/axios/rollup.config.js
server/node_modules/axios/SECURITY.md
server/node_modules/axios/tsconfig.json
server/node_modules/axios/tslint.json
server/node_modules/axios/UPGRADE_GUIDE.md
server/node_modules/axios/bin/ssl_hotfix.js
server/node_modules/axios/dist/axios.js
server/node_modules/axios/dist/axios.js.map
server/node_modules/axios/dist/axios.min.js
server/node_modules/axios/dist/axios.min.js.map
server/node_modules/axios/dist/esm/axios.js
server/node_modules/axios/dist/esm/axios.js.map
server/node_modules/axios/dist/esm/axios.min.js
server/node_modules/axios/dist/esm/axios.min.js.map
server/node_modules/axios/dist/node/axios.cjs
server/node_modules/axios/dist/node/axios.cjs.map
server/node_modules/axios/lib/axios.js
server/node_modules/axios/lib/utils.js
server/node_modules/axios/lib/adapters/http.js
server/node_modules/axios/lib/adapters/index.js
server/node_modules/axios/lib/adapters/README.md
server/node_modules/axios/lib/adapters/xhr.js
server/node_modules/axios/lib/cancel/CanceledError.js
server/node_modules/axios/lib/cancel/CancelToken.js
server/node_modules/axios/lib/cancel/isCancel.js
server/node_modules/axios/lib/core/Axios.js
server/node_modules/axios/lib/core/AxiosError.js
server/node_modules/axios/lib/core/AxiosHeaders.js
server/node_modules/axios/lib/core/buildFullPath.js
server/node_modules/axios/lib/core/dispatchRequest.js
server/node_modules/axios/lib/core/InterceptorManager.js
server/node_modules/axios/lib/core/mergeConfig.js
server/node_modules/axios/lib/core/README.md
server/node_modules/axios/lib/core/settle.js
server/node_modules/axios/lib/core/transformData.js
server/node_modules/axios/lib/defaults/index.js
server/node_modules/axios/lib/defaults/transitional.js
server/node_modules/axios/lib/env/data.js
server/node_modules/axios/lib/env/README.md
server/node_modules/axios/lib/env/classes/FormData.js
server/node_modules/axios/lib/helpers/AxiosTransformStream.js
server/node_modules/axios/lib/helpers/AxiosURLSearchParams.js
server/node_modules/axios/lib/helpers/bind.js
server/node_modules/axios/lib/helpers/buildURL.js
server/node_modules/axios/lib/helpers/combineURLs.js
server/node_modules/axios/lib/helpers/cookies.js
server/node_modules/axios/lib/helpers/deprecatedMethod.js
server/node_modules/axios/lib/helpers/formDataToJSON.js
server/node_modules/axios/lib/helpers/fromDataURI.js
server/node_modules/axios/lib/helpers/isAbsoluteURL.js
server/node_modules/axios/lib/helpers/isAxiosError.js
server/node_modules/axios/lib/helpers/isURLSameOrigin.js
server/node_modules/axios/lib/helpers/null.js
server/node_modules/axios/lib/helpers/parseHeaders.js
server/node_modules/axios/lib/helpers/parseProtocol.js
server/node_modules/axios/lib/helpers/README.md
server/node_modules/axios/lib/helpers/speedometer.js
server/node_modules/axios/lib/helpers/spread.js
server/node_modules/axios/lib/helpers/throttle.js
server/node_modules/axios/lib/helpers/toFormData.js
server/node_modules/axios/lib/helpers/toURLEncodedForm.js
server/node_modules/axios/lib/helpers/validator.js
server/node_modules/axios/lib/platform/index.js
server/node_modules/axios/lib/platform/browser/index.js
server/node_modules/axios/lib/platform/browser/classes/FormData.js
server/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js
server/node_modules/axios/lib/platform/node/index.js
server/node_modules/axios/lib/platform/node/classes/FormData.js
server/node_modules/axios/lib/platform/node/classes/URLSearchParams.js
server/node_modules/balanced-match/index.js
server/node_modules/balanced-match/LICENSE.md
server/node_modules/balanced-match/package.json
server/node_modules/balanced-match/README.md
server/node_modules/balanced-match/.github/FUNDING.yml
server/node_modules/basic-auth/HISTORY.md
server/node_modules/basic-auth/index.js
server/node_modules/basic-auth/LICENSE
server/node_modules/basic-auth/package.json
server/node_modules/basic-auth/README.md
server/node_modules/basic-auth/node_modules/safe-buffer/index.d.ts
server/node_modules/basic-auth/node_modules/safe-buffer/index.js
server/node_modules/basic-auth/node_modules/safe-buffer/LICENSE
server/node_modules/basic-auth/node_modules/safe-buffer/package.json
server/node_modules/basic-auth/node_modules/safe-buffer/README.md
server/node_modules/binary-extensions/binary-extensions.json
server/node_modules/binary-extensions/binary-extensions.json.d.ts
server/node_modules/binary-extensions/index.d.ts
server/node_modules/binary-extensions/index.js
server/node_modules/binary-extensions/license
server/node_modules/binary-extensions/package.json
server/node_modules/binary-extensions/readme.md
server/node_modules/body-parser/HISTORY.md
server/node_modules/body-parser/index.js
server/node_modules/body-parser/LICENSE
server/node_modules/body-parser/package.json
server/node_modules/body-parser/README.md
server/node_modules/body-parser/SECURITY.md
server/node_modules/body-parser/lib/read.js
server/node_modules/body-parser/lib/types/json.js
server/node_modules/body-parser/lib/types/raw.js
server/node_modules/body-parser/lib/types/text.js
server/node_modules/body-parser/lib/types/urlencoded.js
server/node_modules/brace-expansion/index.js
server/node_modules/brace-expansion/LICENSE
server/node_modules/brace-expansion/package.json
server/node_modules/brace-expansion/README.md
server/node_modules/braces/CHANGELOG.md
server/node_modules/braces/index.js
server/node_modules/braces/LICENSE
server/node_modules/braces/package.json
server/node_modules/braces/README.md
server/node_modules/braces/lib/compile.js
server/node_modules/braces/lib/constants.js
server/node_modules/braces/lib/expand.js
server/node_modules/braces/lib/parse.js
server/node_modules/braces/lib/stringify.js
server/node_modules/braces/lib/utils.js
server/node_modules/bytes/History.md
server/node_modules/bytes/index.js
server/node_modules/bytes/LICENSE
server/node_modules/bytes/package.json
server/node_modules/bytes/Readme.md
server/node_modules/call-bind/.eslintignore
server/node_modules/call-bind/.eslintrc
server/node_modules/call-bind/.nycrc
server/node_modules/call-bind/callBound.js
server/node_modules/call-bind/CHANGELOG.md
server/node_modules/call-bind/index.js
server/node_modules/call-bind/LICENSE
server/node_modules/call-bind/package.json
server/node_modules/call-bind/README.md
server/node_modules/call-bind/.github/FUNDING.yml
server/node_modules/call-bind/test/callBound.js
server/node_modules/call-bind/test/index.js
server/node_modules/chokidar/index.js
server/node_modules/chokidar/LICENSE
server/node_modules/chokidar/package.json
server/node_modules/chokidar/README.md
server/node_modules/chokidar/lib/constants.js
server/node_modules/chokidar/lib/fsevents-handler.js
server/node_modules/chokidar/lib/nodefs-handler.js
server/node_modules/chokidar/types/index.d.ts
server/node_modules/combined-stream/License
server/node_modules/combined-stream/package.json
server/node_modules/combined-stream/Readme.md
server/node_modules/combined-stream/yarn.lock
server/node_modules/combined-stream/lib/combined_stream.js
server/node_modules/concat-map/.travis.yml
server/node_modules/concat-map/index.js
server/node_modules/concat-map/LICENSE
server/node_modules/concat-map/package.json
server/node_modules/concat-map/README.markdown
server/node_modules/concat-map/example/map.js
server/node_modules/concat-map/test/map.js
server/node_modules/content-disposition/HISTORY.md
server/node_modules/content-disposition/index.js
server/node_modules/content-disposition/LICENSE
server/node_modules/content-disposition/package.json
server/node_modules/content-disposition/README.md
server/node_modules/content-type/HISTORY.md
server/node_modules/content-type/index.js
server/node_modules/content-type/LICENSE
server/node_modules/content-type/package.json
server/node_modules/content-type/README.md
server/node_modules/cookie/HISTORY.md
server/node_modules/cookie/index.js
server/node_modules/cookie/LICENSE
server/node_modules/cookie/package.json
server/node_modules/cookie/README.md
server/node_modules/cookie/SECURITY.md
server/node_modules/cookie-signature/.npmignore
server/node_modules/cookie-signature/History.md
server/node_modules/cookie-signature/index.js
server/node_modules/cookie-signature/package.json
server/node_modules/cookie-signature/Readme.md
server/node_modules/cors/CONTRIBUTING.md
server/node_modules/cors/HISTORY.md
server/node_modules/cors/LICENSE
server/node_modules/cors/package.json
server/node_modules/cors/README.md
server/node_modules/cors/lib/index.js
server/node_modules/debug/.coveralls.yml
server/node_modules/debug/.eslintrc
server/node_modules/debug/.npmignore
server/node_modules/debug/.travis.yml
server/node_modules/debug/CHANGELOG.md
server/node_modules/debug/component.json
server/node_modules/debug/karma.conf.js
server/node_modules/debug/LICENSE
server/node_modules/debug/Makefile
server/node_modules/debug/node.js
server/node_modules/debug/package.json
server/node_modules/debug/README.md
server/node_modules/debug/src/browser.js
server/node_modules/debug/src/debug.js
server/node_modules/debug/src/index.js
server/node_modules/debug/src/inspector-log.js
server/node_modules/debug/src/node.js
server/node_modules/decode-uri-component/index.js
server/node_modules/decode-uri-component/license
server/node_modules/decode-uri-component/package.json
server/node_modules/decode-uri-component/readme.md
server/node_modules/delayed-stream/.npmignore
server/node_modules/delayed-stream/License
server/node_modules/delayed-stream/Makefile
server/node_modules/delayed-stream/package.json
server/node_modules/delayed-stream/Readme.md
server/node_modules/delayed-stream/lib/delayed_stream.js
server/node_modules/depd/History.md
server/node_modules/depd/index.js
server/node_modules/depd/LICENSE
server/node_modules/depd/package.json
server/node_modules/depd/Readme.md
server/node_modules/depd/lib/browser/index.js
server/node_modules/destroy/index.js
server/node_modules/destroy/LICENSE
server/node_modules/destroy/package.json
server/node_modules/destroy/README.md
server/node_modules/dotenv/CHANGELOG.md
server/node_modules/dotenv/config.d.ts
server/node_modules/dotenv/config.js
server/node_modules/dotenv/LICENSE
server/node_modules/dotenv/package.json
server/node_modules/dotenv/README.md
server/node_modules/dotenv/lib/cli-options.js
server/node_modules/dotenv/lib/env-options.js
server/node_modules/dotenv/lib/main.d.ts
server/node_modules/dotenv/lib/main.js
server/node_modules/ee-first/index.js
server/node_modules/ee-first/LICENSE
server/node_modules/ee-first/package.json
server/node_modules/ee-first/README.md
server/node_modules/encodeurl/HISTORY.md
server/node_modules/encodeurl/index.js
server/node_modules/encodeurl/LICENSE
server/node_modules/encodeurl/package.json
server/node_modules/encodeurl/README.md
server/node_modules/escape-html/index.js
server/node_modules/escape-html/LICENSE
server/node_modules/escape-html/package.json
server/node_modules/escape-html/Readme.md
server/node_modules/etag/HISTORY.md
server/node_modules/etag/index.js
server/node_modules/etag/LICENSE
server/node_modules/etag/package.json
server/node_modules/etag/README.md
server/node_modules/express/History.md
server/node_modules/express/index.js
server/node_modules/express/LICENSE
server/node_modules/express/package.json
server/node_modules/express/Readme.md
server/node_modules/express/lib/application.js
server/node_modules/express/lib/express.js
server/node_modules/express/lib/request.js
server/node_modules/express/lib/response.js
server/node_modules/express/lib/utils.js
server/node_modules/express/lib/view.js
server/node_modules/express/lib/middleware/init.js
server/node_modules/express/lib/middleware/query.js
server/node_modules/express/lib/router/index.js
server/node_modules/express/lib/router/layer.js
server/node_modules/express/lib/router/route.js
server/node_modules/express-session/HISTORY.md
server/node_modules/express-session/index.js
server/node_modules/express-session/LICENSE
server/node_modules/express-session/package.json
server/node_modules/express-session/README.md
server/node_modules/express-session/node_modules/cookie/HISTORY.md
server/node_modules/express-session/node_modules/cookie/index.js
server/node_modules/express-session/node_modules/cookie/LICENSE
server/node_modules/express-session/node_modules/cookie/package.json
server/node_modules/express-session/node_modules/cookie/README.md
server/node_modules/express-session/session/cookie.js
server/node_modules/express-session/session/memory.js
server/node_modules/express-session/session/session.js
server/node_modules/express-session/session/store.js
server/node_modules/fill-range/index.js
server/node_modules/fill-range/LICENSE
server/node_modules/fill-range/package.json
server/node_modules/fill-range/README.md
server/node_modules/filter-obj/index.js
server/node_modules/filter-obj/license
server/node_modules/filter-obj/package.json
server/node_modules/filter-obj/readme.md
server/node_modules/finalhandler/HISTORY.md
server/node_modules/finalhandler/index.js
server/node_modules/finalhandler/LICENSE
server/node_modules/finalhandler/package.json
server/node_modules/finalhandler/README.md
server/node_modules/finalhandler/SECURITY.md
server/node_modules/follow-redirects/debug.js
server/node_modules/follow-redirects/http.js
server/node_modules/follow-redirects/https.js
server/node_modules/follow-redirects/index.js
server/node_modules/follow-redirects/LICENSE
server/node_modules/follow-redirects/package.json
server/node_modules/follow-redirects/README.md
server/node_modules/form-data/index.d.ts
server/node_modules/form-data/License
server/node_modules/form-data/package.json
server/node_modules/form-data/Readme.md
server/node_modules/form-data/README.md.bak
server/node_modules/form-data/lib/browser.js
server/node_modules/form-data/lib/form_data.js
server/node_modules/form-data/lib/populate.js
server/node_modules/forwarded/HISTORY.md
server/node_modules/forwarded/index.js
server/node_modules/forwarded/LICENSE
server/node_modules/forwarded/package.json
server/node_modules/forwarded/README.md
server/node_modules/fresh/HISTORY.md
server/node_modules/fresh/index.js
server/node_modules/fresh/LICENSE
server/node_modules/fresh/package.json
server/node_modules/fresh/README.md
server/node_modules/fsevents/fsevents.d.ts
server/node_modules/fsevents/fsevents.js
server/node_modules/fsevents/fsevents.node
server/node_modules/fsevents/LICENSE
server/node_modules/fsevents/package.json
server/node_modules/fsevents/README.md
server/node_modules/function-bind/.editorconfig
server/node_modules/function-bind/.eslintrc
server/node_modules/function-bind/.jscs.json
server/node_modules/function-bind/.npmignore
server/node_modules/function-bind/.travis.yml
server/node_modules/function-bind/implementation.js
server/node_modules/function-bind/index.js
server/node_modules/function-bind/LICENSE
server/node_modules/function-bind/package.json
server/node_modules/function-bind/README.md
server/node_modules/function-bind/test/.eslintrc
server/node_modules/function-bind/test/index.js
server/node_modules/get-intrinsic/.eslintrc
server/node_modules/get-intrinsic/.nycrc
server/node_modules/get-intrinsic/CHANGELOG.md
server/node_modules/get-intrinsic/index.js
server/node_modules/get-intrinsic/LICENSE
server/node_modules/get-intrinsic/package.json
server/node_modules/get-intrinsic/README.md
server/node_modules/get-intrinsic/.github/FUNDING.yml
server/node_modules/get-intrinsic/test/GetIntrinsic.js
server/node_modules/glob-parent/CHANGELOG.md
server/node_modules/glob-parent/index.js
server/node_modules/glob-parent/LICENSE
server/node_modules/glob-parent/package.json
server/node_modules/glob-parent/README.md
server/node_modules/has/LICENSE-MIT
server/node_modules/has/package.json
server/node_modules/has/README.md
server/node_modules/has/src/index.js
server/node_modules/has/test/index.js
server/node_modules/has-flag/index.js
server/node_modules/has-flag/license
server/node_modules/has-flag/package.json
server/node_modules/has-flag/readme.md
server/node_modules/has-symbols/.eslintrc
server/node_modules/has-symbols/.nycrc
server/node_modules/has-symbols/CHANGELOG.md
server/node_modules/has-symbols/index.js
server/node_modules/has-symbols/LICENSE
server/node_modules/has-symbols/package.json
server/node_modules/has-symbols/README.md
server/node_modules/has-symbols/shams.js
server/node_modules/has-symbols/.github/FUNDING.yml
server/node_modules/has-symbols/test/index.js
server/node_modules/has-symbols/test/tests.js
server/node_modules/has-symbols/test/shams/core-js.js
server/node_modules/has-symbols/test/shams/get-own-property-symbols.js
server/node_modules/http-errors/HISTORY.md
server/node_modules/http-errors/index.js
server/node_modules/http-errors/LICENSE
server/node_modules/http-errors/package.json
server/node_modules/http-errors/README.md
server/node_modules/iconv-lite/Changelog.md
server/node_modules/iconv-lite/LICENSE
server/node_modules/iconv-lite/package.json
server/node_modules/iconv-lite/README.md
server/node_modules/iconv-lite/encodings/dbcs-codec.js
server/node_modules/iconv-lite/encodings/dbcs-data.js
server/node_modules/iconv-lite/encodings/index.js
server/node_modules/iconv-lite/encodings/internal.js
server/node_modules/iconv-lite/encodings/sbcs-codec.js
server/node_modules/iconv-lite/encodings/sbcs-data-generated.js
server/node_modules/iconv-lite/encodings/sbcs-data.js
server/node_modules/iconv-lite/encodings/utf7.js
server/node_modules/iconv-lite/encodings/utf16.js
server/node_modules/iconv-lite/encodings/tables/big5-added.json
server/node_modules/iconv-lite/encodings/tables/cp936.json
server/node_modules/iconv-lite/encodings/tables/cp949.json
server/node_modules/iconv-lite/encodings/tables/cp950.json
server/node_modules/iconv-lite/encodings/tables/eucjp.json
server/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json
server/node_modules/iconv-lite/encodings/tables/gbk-added.json
server/node_modules/iconv-lite/encodings/tables/shiftjis.json
server/node_modules/iconv-lite/lib/bom-handling.js
server/node_modules/iconv-lite/lib/extend-node.js
server/node_modules/iconv-lite/lib/index.d.ts
server/node_modules/iconv-lite/lib/index.js
server/node_modules/iconv-lite/lib/streams.js
server/node_modules/ignore-by-default/index.js
server/node_modules/ignore-by-default/LICENSE
server/node_modules/ignore-by-default/package.json
server/node_modules/ignore-by-default/README.md
server/node_modules/inherits/inherits_browser.js
server/node_modules/inherits/inherits.js
server/node_modules/inherits/LICENSE
server/node_modules/inherits/package.json
server/node_modules/inherits/README.md
server/node_modules/ipaddr.js/ipaddr.min.js
server/node_modules/ipaddr.js/LICENSE
server/node_modules/ipaddr.js/package.json
server/node_modules/ipaddr.js/README.md
server/node_modules/ipaddr.js/lib/ipaddr.js
server/node_modules/ipaddr.js/lib/ipaddr.js.d.ts
server/node_modules/is-binary-path/index.d.ts
server/node_modules/is-binary-path/index.js
server/node_modules/is-binary-path/license
server/node_modules/is-binary-path/package.json
server/node_modules/is-binary-path/readme.md
server/node_modules/is-extglob/index.js
server/node_modules/is-extglob/LICENSE
server/node_modules/is-extglob/package.json
server/node_modules/is-extglob/README.md
server/node_modules/is-glob/index.js
server/node_modules/is-glob/LICENSE
server/node_modules/is-glob/package.json
server/node_modules/is-glob/README.md
server/node_modules/is-number/index.js
server/node_modules/is-number/LICENSE
server/node_modules/is-number/package.json
server/node_modules/is-number/README.md
server/node_modules/media-typer/HISTORY.md
server/node_modules/media-typer/index.js
server/node_modules/media-typer/LICENSE
server/node_modules/media-typer/package.json
server/node_modules/media-typer/README.md
server/node_modules/merge-descriptors/HISTORY.md
server/node_modules/merge-descriptors/index.js
server/node_modules/merge-descriptors/LICENSE
server/node_modules/merge-descriptors/package.json
server/node_modules/merge-descriptors/README.md
server/node_modules/methods/HISTORY.md
server/node_modules/methods/index.js
server/node_modules/methods/LICENSE
server/node_modules/methods/package.json
server/node_modules/methods/README.md
server/node_modules/mime/.npmignore
server/node_modules/mime/CHANGELOG.md
server/node_modules/mime/cli.js
server/node_modules/mime/LICENSE
server/node_modules/mime/mime.js
server/node_modules/mime/package.json
server/node_modules/mime/README.md
server/node_modules/mime/types.json
server/node_modules/mime/src/build.js
server/node_modules/mime/src/test.js
server/node_modules/mime-db/db.json
server/node_modules/mime-db/HISTORY.md
server/node_modules/mime-db/index.js
server/node_modules/mime-db/LICENSE
server/node_modules/mime-db/package.json
server/node_modules/mime-db/README.md
server/node_modules/mime-types/HISTORY.md
server/node_modules/mime-types/index.js
server/node_modules/mime-types/LICENSE
server/node_modules/mime-types/package.json
server/node_modules/mime-types/README.md
server/node_modules/minimatch/LICENSE
server/node_modules/minimatch/minimatch.js
server/node_modules/minimatch/package.json
server/node_modules/minimatch/README.md
server/node_modules/morgan/HISTORY.md
server/node_modules/morgan/index.js
server/node_modules/morgan/LICENSE
server/node_modules/morgan/package.json
server/node_modules/morgan/README.md
server/node_modules/morgan/node_modules/on-finished/HISTORY.md
server/node_modules/morgan/node_modules/on-finished/index.js
server/node_modules/morgan/node_modules/on-finished/LICENSE
server/node_modules/morgan/node_modules/on-finished/package.json
server/node_modules/morgan/node_modules/on-finished/README.md
server/node_modules/ms/index.js
server/node_modules/ms/license.md
server/node_modules/ms/package.json
server/node_modules/ms/readme.md
server/node_modules/negotiator/HISTORY.md
server/node_modules/negotiator/index.js
server/node_modules/negotiator/LICENSE
server/node_modules/negotiator/package.json
server/node_modules/negotiator/README.md
server/node_modules/negotiator/lib/charset.js
server/node_modules/negotiator/lib/encoding.js
server/node_modules/negotiator/lib/language.js
server/node_modules/negotiator/lib/mediaType.js
server/node_modules/nodemon/LICENSE
server/node_modules/nodemon/package.json
server/node_modules/nodemon/README.md
server/node_modules/nodemon/bin/nodemon.js
server/node_modules/nodemon/bin/windows-kill.exe
server/node_modules/nodemon/doc/cli/authors.txt
server/node_modules/nodemon/doc/cli/config.txt
server/node_modules/nodemon/doc/cli/help.txt
server/node_modules/nodemon/doc/cli/logo.txt
server/node_modules/nodemon/doc/cli/options.txt
server/node_modules/nodemon/doc/cli/topics.txt
server/node_modules/nodemon/doc/cli/usage.txt
server/node_modules/nodemon/doc/cli/whoami.txt
server/node_modules/nodemon/lib/index.js
server/node_modules/nodemon/lib/nodemon.js
server/node_modules/nodemon/lib/spawn.js
server/node_modules/nodemon/lib/version.js
server/node_modules/nodemon/lib/cli/index.js
server/node_modules/nodemon/lib/cli/parse.js
server/node_modules/nodemon/lib/config/command.js
server/node_modules/nodemon/lib/config/defaults.js
server/node_modules/nodemon/lib/config/exec.js
server/node_modules/nodemon/lib/config/index.js
server/node_modules/nodemon/lib/config/load.js
server/node_modules/nodemon/lib/help/index.js
server/node_modules/nodemon/lib/monitor/index.js
server/node_modules/nodemon/lib/monitor/match.js
server/node_modules/nodemon/lib/monitor/run.js
server/node_modules/nodemon/lib/monitor/signals.js
server/node_modules/nodemon/lib/monitor/watch.js
server/node_modules/nodemon/lib/rules/add.js
server/node_modules/nodemon/lib/rules/index.js
server/node_modules/nodemon/lib/rules/parse.js
server/node_modules/nodemon/lib/utils/bus.js
server/node_modules/nodemon/lib/utils/clone.js
server/node_modules/nodemon/lib/utils/colour.js
server/node_modules/nodemon/lib/utils/index.js
server/node_modules/nodemon/lib/utils/log.js
server/node_modules/nodemon/lib/utils/merge.js
server/node_modules/nodemon/node_modules/debug/CHANGELOG.md
server/node_modules/nodemon/node_modules/debug/LICENSE
server/node_modules/nodemon/node_modules/debug/node.js
server/node_modules/nodemon/node_modules/debug/package.json
server/node_modules/nodemon/node_modules/debug/README.md
server/node_modules/nodemon/node_modules/debug/src/browser.js
server/node_modules/nodemon/node_modules/debug/src/common.js
server/node_modules/nodemon/node_modules/debug/src/index.js
server/node_modules/nodemon/node_modules/debug/src/node.js
server/node_modules/nodemon/node_modules/ms/index.js
server/node_modules/nodemon/node_modules/ms/license.md
server/node_modules/nodemon/node_modules/ms/package.json
server/node_modules/nodemon/node_modules/ms/readme.md
server/node_modules/nopt/.npmignore
server/node_modules/nopt/LICENSE
server/node_modules/nopt/package.json
server/node_modules/nopt/README.md
server/node_modules/nopt/bin/nopt.js
server/node_modules/nopt/examples/my-program.js
server/node_modules/nopt/lib/nopt.js
server/node_modules/normalize-path/index.js
server/node_modules/normalize-path/LICENSE
server/node_modules/normalize-path/package.json
server/node_modules/normalize-path/README.md
server/node_modules/object-assign/index.js
server/node_modules/object-assign/license
server/node_modules/object-assign/package.json
server/node_modules/object-assign/readme.md
server/node_modules/object-inspect/.eslintrc
server/node_modules/object-inspect/.nycrc
server/node_modules/object-inspect/CHANGELOG.md
server/node_modules/object-inspect/index.js
server/node_modules/object-inspect/LICENSE
server/node_modules/object-inspect/package-support.json
server/node_modules/object-inspect/package.json
server/node_modules/object-inspect/readme.markdown
server/node_modules/object-inspect/test-core-js.js
server/node_modules/object-inspect/util.inspect.js
server/node_modules/object-inspect/.github/FUNDING.yml
server/node_modules/object-inspect/example/all.js
server/node_modules/object-inspect/example/circular.js
server/node_modules/object-inspect/example/fn.js
server/node_modules/object-inspect/example/inspect.js
server/node_modules/object-inspect/test/bigint.js
server/node_modules/object-inspect/test/circular.js
server/node_modules/object-inspect/test/deep.js
server/node_modules/object-inspect/test/element.js
server/node_modules/object-inspect/test/err.js
server/node_modules/object-inspect/test/fakes.js
server/node_modules/object-inspect/test/fn.js
server/node_modules/object-inspect/test/has.js
server/node_modules/object-inspect/test/holes.js
server/node_modules/object-inspect/test/indent-option.js
server/node_modules/object-inspect/test/inspect.js
server/node_modules/object-inspect/test/lowbyte.js
server/node_modules/object-inspect/test/number.js
server/node_modules/object-inspect/test/quoteStyle.js
server/node_modules/object-inspect/test/toStringTag.js
server/node_modules/object-inspect/test/undef.js
server/node_modules/object-inspect/test/values.js
server/node_modules/object-inspect/test/browser/dom.js
server/node_modules/on-finished/HISTORY.md
server/node_modules/on-finished/index.js
server/node_modules/on-finished/LICENSE
server/node_modules/on-finished/package.json
server/node_modules/on-finished/README.md
server/node_modules/on-headers/HISTORY.md
server/node_modules/on-headers/index.js
server/node_modules/on-headers/LICENSE
server/node_modules/on-headers/package.json
server/node_modules/on-headers/README.md
server/node_modules/parseurl/HISTORY.md
server/node_modules/parseurl/index.js
server/node_modules/parseurl/LICENSE
server/node_modules/parseurl/package.json
server/node_modules/parseurl/README.md
server/node_modules/path-to-regexp/History.md
server/node_modules/path-to-regexp/index.js
server/node_modules/path-to-regexp/LICENSE
server/node_modules/path-to-regexp/package.json
server/node_modules/path-to-regexp/Readme.md
server/node_modules/picomatch/CHANGELOG.md
server/node_modules/picomatch/index.js
server/node_modules/picomatch/LICENSE
server/node_modules/picomatch/package.json
server/node_modules/picomatch/README.md
server/node_modules/picomatch/lib/constants.js
server/node_modules/picomatch/lib/parse.js
server/node_modules/picomatch/lib/picomatch.js
server/node_modules/picomatch/lib/scan.js
server/node_modules/picomatch/lib/utils.js
server/node_modules/proxy-addr/HISTORY.md
server/node_modules/proxy-addr/index.js
server/node_modules/proxy-addr/LICENSE
server/node_modules/proxy-addr/package.json
server/node_modules/proxy-addr/README.md
server/node_modules/proxy-from-env/.eslintrc
server/node_modules/proxy-from-env/.travis.yml
server/node_modules/proxy-from-env/index.js
server/node_modules/proxy-from-env/LICENSE
server/node_modules/proxy-from-env/package.json
server/node_modules/proxy-from-env/README.md
server/node_modules/proxy-from-env/test.js
server/node_modules/pstree.remy/.travis.yml
server/node_modules/pstree.remy/LICENSE
server/node_modules/pstree.remy/package.json
server/node_modules/pstree.remy/README.md
server/node_modules/pstree.remy/lib/index.js
server/node_modules/pstree.remy/lib/tree.js
server/node_modules/pstree.remy/lib/utils.js
server/node_modules/pstree.remy/tests/index.test.js
server/node_modules/pstree.remy/tests/fixtures/index.js
server/node_modules/pstree.remy/tests/fixtures/out1
server/node_modules/pstree.remy/tests/fixtures/out2
server/node_modules/qs/.editorconfig
server/node_modules/qs/.eslintrc
server/node_modules/qs/.nycrc
server/node_modules/qs/CHANGELOG.md
server/node_modules/qs/LICENSE.md
server/node_modules/qs/package.json
server/node_modules/qs/README.md
server/node_modules/qs/.github/FUNDING.yml
server/node_modules/qs/dist/qs.js
server/node_modules/qs/lib/formats.js
server/node_modules/qs/lib/index.js
server/node_modules/qs/lib/parse.js
server/node_modules/qs/lib/stringify.js
server/node_modules/qs/lib/utils.js
server/node_modules/qs/test/parse.js
server/node_modules/qs/test/stringify.js
server/node_modules/qs/test/utils.js
server/node_modules/query-string/index.d.ts
server/node_modules/query-string/index.js
server/node_modules/query-string/license
server/node_modules/query-string/package.json
server/node_modules/query-string/readme.md
server/node_modules/random-bytes/HISTORY.md
server/node_modules/random-bytes/index.js
server/node_modules/random-bytes/LICENSE
server/node_modules/random-bytes/package.json
server/node_modules/random-bytes/README.md
server/node_modules/range-parser/HISTORY.md
server/node_modules/range-parser/index.js
server/node_modules/range-parser/LICENSE
server/node_modules/range-parser/package.json
server/node_modules/range-parser/README.md
server/node_modules/raw-body/HISTORY.md
server/node_modules/raw-body/index.d.ts
server/node_modules/raw-body/index.js
server/node_modules/raw-body/LICENSE
server/node_modules/raw-body/package.json
server/node_modules/raw-body/README.md
server/node_modules/raw-body/SECURITY.md
server/node_modules/readdirp/index.d.ts
server/node_modules/readdirp/index.js
server/node_modules/readdirp/LICENSE
server/node_modules/readdirp/package.json
server/node_modules/readdirp/README.md
server/node_modules/safe-buffer/index.d.ts
server/node_modules/safe-buffer/index.js
server/node_modules/safe-buffer/LICENSE
server/node_modules/safe-buffer/package.json
server/node_modules/safe-buffer/README.md
server/node_modules/safer-buffer/dangerous.js
server/node_modules/safer-buffer/LICENSE
server/node_modules/safer-buffer/package.json
server/node_modules/safer-buffer/Porting-Buffer.md
server/node_modules/safer-buffer/Readme.md
server/node_modules/safer-buffer/safer.js
server/node_modules/safer-buffer/tests.js
server/node_modules/semver/CHANGELOG.md
server/node_modules/semver/LICENSE
server/node_modules/semver/package.json
server/node_modules/semver/range.bnf
server/node_modules/semver/README.md
server/node_modules/semver/semver.js
server/node_modules/semver/bin/semver
server/node_modules/send/HISTORY.md
server/node_modules/send/index.js
server/node_modules/send/LICENSE
server/node_modules/send/package.json
server/node_modules/send/README.md
server/node_modules/send/SECURITY.md
server/node_modules/send/node_modules/ms/index.js
server/node_modules/send/node_modules/ms/license.md
server/node_modules/send/node_modules/ms/package.json
server/node_modules/send/node_modules/ms/readme.md
server/node_modules/serve-static/HISTORY.md
server/node_modules/serve-static/index.js
server/node_modules/serve-static/LICENSE
server/node_modules/serve-static/package.json
server/node_modules/serve-static/README.md
server/node_modules/setprototypeof/index.d.ts
server/node_modules/setprototypeof/index.js
server/node_modules/setprototypeof/LICENSE
server/node_modules/setprototypeof/package.json
server/node_modules/setprototypeof/README.md
server/node_modules/setprototypeof/test/index.js
server/node_modules/side-channel/.eslintignore
server/node_modules/side-channel/.eslintrc
server/node_modules/side-channel/.nycrc
server/node_modules/side-channel/CHANGELOG.md
server/node_modules/side-channel/index.js
server/node_modules/side-channel/LICENSE
server/node_modules/side-channel/package.json
server/node_modules/side-channel/README.md
server/node_modules/side-channel/.github/FUNDING.yml
server/node_modules/side-channel/test/index.js
server/node_modules/simple-update-notifier/LICENSE
server/node_modules/simple-update-notifier/package.json
server/node_modules/simple-update-notifier/README.md
server/node_modules/simple-update-notifier/build/index.d.ts
server/node_modules/simple-update-notifier/build/index.js
server/node_modules/simple-update-notifier/node_modules/.bin/semver
server/node_modules/simple-update-notifier/node_modules/semver/CHANGELOG.md
server/node_modules/simple-update-notifier/node_modules/semver/index.js
server/node_modules/simple-update-notifier/node_modules/semver/LICENSE
server/node_modules/simple-update-notifier/node_modules/semver/package.json
server/node_modules/simple-update-notifier/node_modules/semver/range.bnf
server/node_modules/simple-update-notifier/node_modules/semver/README.md
server/node_modules/simple-update-notifier/node_modules/semver/bin/semver.js
server/node_modules/simple-update-notifier/node_modules/semver/classes/comparator.js
server/node_modules/simple-update-notifier/node_modules/semver/classes/index.js
server/node_modules/simple-update-notifier/node_modules/semver/classes/range.js
server/node_modules/simple-update-notifier/node_modules/semver/classes/semver.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/clean.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/cmp.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/coerce.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/compare-build.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/compare-loose.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/compare.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/diff.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/eq.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/gt.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/gte.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/inc.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/lt.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/lte.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/major.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/minor.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/neq.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/parse.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/patch.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/prerelease.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/rcompare.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/rsort.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/satisfies.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/sort.js
server/node_modules/simple-update-notifier/node_modules/semver/functions/valid.js
server/node_modules/simple-update-notifier/node_modules/semver/internal/constants.js
server/node_modules/simple-update-notifier/node_modules/semver/internal/debug.js
server/node_modules/simple-update-notifier/node_modules/semver/internal/identifiers.js
server/node_modules/simple-update-notifier/node_modules/semver/internal/re.js
server/node_modules/simple-update-notifier/node_modules/semver/ranges/gtr.js
server/node_modules/simple-update-notifier/node_modules/semver/ranges/intersects.js
server/node_modules/simple-update-notifier/node_modules/semver/ranges/ltr.js
server/node_modules/simple-update-notifier/node_modules/semver/ranges/max-satisfying.js
server/node_modules/simple-update-notifier/node_modules/semver/ranges/min-satisfying.js
server/node_modules/simple-update-notifier/node_modules/semver/ranges/min-version.js
server/node_modules/simple-update-notifier/node_modules/semver/ranges/outside.js
server/node_modules/simple-update-notifier/node_modules/semver/ranges/to-comparators.js
server/node_modules/simple-update-notifier/node_modules/semver/ranges/valid.js
server/node_modules/simple-update-notifier/src/borderedText.ts
server/node_modules/simple-update-notifier/src/cache.spec.ts
server/node_modules/simple-update-notifier/src/cache.ts
server/node_modules/simple-update-notifier/src/getDistVersion.spec.ts
server/node_modules/simple-update-notifier/src/getDistVersion.ts
server/node_modules/simple-update-notifier/src/hasNewVersion.spec.ts
server/node_modules/simple-update-notifier/src/hasNewVersion.ts
server/node_modules/simple-update-notifier/src/index.spec.ts
server/node_modules/simple-update-notifier/src/index.ts
server/node_modules/simple-update-notifier/src/isNpmOrYarn.ts
server/node_modules/simple-update-notifier/src/types.ts
server/node_modules/split-on-first/index.d.ts
server/node_modules/split-on-first/index.js
server/node_modules/split-on-first/license
server/node_modules/split-on-first/package.json
server/node_modules/split-on-first/readme.md
server/node_modules/statuses/codes.json
server/node_modules/statuses/HISTORY.md
server/node_modules/statuses/index.js
server/node_modules/statuses/LICENSE
server/node_modules/statuses/package.json
server/node_modules/statuses/README.md
server/node_modules/strict-uri-encode/index.js
server/node_modules/strict-uri-encode/license
server/node_modules/strict-uri-encode/package.json
server/node_modules/strict-uri-encode/readme.md
server/node_modules/supports-color/browser.js
server/node_modules/supports-color/index.js
server/node_modules/supports-color/license
server/node_modules/supports-color/package.json
server/node_modules/supports-color/readme.md
server/node_modules/to-regex-range/index.js
server/node_modules/to-regex-range/LICENSE
server/node_modules/to-regex-range/package.json
server/node_modules/to-regex-range/README.md
server/node_modules/toidentifier/HISTORY.md
server/node_modules/toidentifier/index.js
server/node_modules/toidentifier/LICENSE
server/node_modules/toidentifier/package.json
server/node_modules/toidentifier/README.md
server/node_modules/touch/index.js
server/node_modules/touch/LICENSE
server/node_modules/touch/package.json
server/node_modules/touch/README.md
server/node_modules/touch/bin/nodetouch.js
server/node_modules/type-is/HISTORY.md
server/node_modules/type-is/index.js
server/node_modules/type-is/LICENSE
server/node_modules/type-is/package.json
server/node_modules/type-is/README.md
server/node_modules/uid-safe/HISTORY.md
server/node_modules/uid-safe/index.js
server/node_modules/uid-safe/LICENSE
server/node_modules/uid-safe/package.json
server/node_modules/uid-safe/README.md
server/node_modules/undefsafe/.jscsrc
server/node_modules/undefsafe/.jshintrc
server/node_modules/undefsafe/.travis.yml
server/node_modules/undefsafe/example.js
server/node_modules/undefsafe/LICENSE
server/node_modules/undefsafe/package.json
server/node_modules/undefsafe/README.md
server/node_modules/undefsafe/.github/workflows/release.yml
server/node_modules/undefsafe/lib/undefsafe.js
server/node_modules/unpipe/HISTORY.md
server/node_modules/unpipe/index.js
server/node_modules/unpipe/LICENSE
server/node_modules/unpipe/package.json
server/node_modules/unpipe/README.md
server/node_modules/utils-merge/.npmignore
server/node_modules/utils-merge/index.js
server/node_modules/utils-merge/LICENSE
server/node_modules/utils-merge/package.json
server/node_modules/utils-merge/README.md
server/node_modules/vary/HISTORY.md
server/node_modules/vary/index.js
server/node_modules/vary/LICENSE
server/node_modules/vary/package.json
server/node_modules/vary/README.md

23
client/.gitignore vendored Normal file
View File

@ -0,0 +1,23 @@
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

24
client/README.md Normal file
View File

@ -0,0 +1,24 @@
# client
## Project setup
```
npm install
```
### Compiles and hot-reloads for development
```
npm run serve
```
### Compiles and minifies for production
```
npm run build
```
### Lints and fixes files
```
npm run lint
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).

5
client/babel.config.js Normal file
View File

@ -0,0 +1,5 @@
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
]
}

19
client/jsconfig.json Normal file
View File

@ -0,0 +1,19 @@
{
"compilerOptions": {
"target": "es5",
"module": "esnext",
"baseUrl": "./",
"moduleResolution": "node",
"paths": {
"@/*": [
"src/*"
]
},
"lib": [
"esnext",
"dom",
"dom.iterable",
"scripthost"
]
}
}

8414
client/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

43
client/package.json Normal file
View File

@ -0,0 +1,43 @@
{
"name": "client",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
"dependencies": {
"core-js": "^3.8.3",
"vue": "^3.2.13"
},
"devDependencies": {
"@babel/core": "^7.12.16",
"@babel/eslint-parser": "^7.12.16",
"@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-eslint": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"eslint": "^7.32.0",
"eslint-plugin-vue": "^8.0.3"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/vue3-essential",
"eslint:recommended"
],
"parserOptions": {
"parser": "@babel/eslint-parser"
},
"rules": {}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead",
"not ie 11"
]
}

BIN
client/public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

17
client/public/index.html Normal file
View File

@ -0,0 +1,17 @@
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

56
client/src/App.vue Normal file
View File

@ -0,0 +1,56 @@
<script setup>
import { ref } from 'vue'
import ThreadSummary from './components/ThreadSummary.vue'
import ContactTable from './components/ContactTable.vue'
const titleClass = ref('title')
const threadId = ref('')
const contactData = ref(null)
function onInput(e) {
threadId.value = e.target.value
}
async function fetchData() {
console.log('fetchingData');
contactData.value = null
const res = await fetch(`http://localhost:9000/thread-tracker`, {
credentials: "include" // fetch won't send cookies unless you set credentials
})
contactData.value = await res.json()
}
</script>
<template>
<div id="app">
<header>
<h1 :class="titleClass">Thread Tracker</h1>
</header>
<input :value="text" @input="onInput" placeholder="Enter threadId here">
<button @click="fetchData">Fetch next todo</button>
<ThreadSummary v-if="contactData" :results="contactData.data.findContactsCompletedBetween" />
<ContactTable v-if="contactData" :tableData="contactData.data.findContactsCompletedBetween.edges" />
<!-- <span>{{ contactData }}</span> -->
</div>
</template>
<style>
.title {
text-align: center;
font-size: 40px;
font-family: Arial, Helvetica, sans-serif;
}
#container {
box-sizing: border-box;
border: 5px solid gray;
border-radius: 15%;
width: 400px;
height: 400px;
margin: auto;
}
</style>

21
client/src/Greeting.vue Normal file
View File

@ -0,0 +1,21 @@
<template>
<div class="greet">
<h3 v-if="data">{{data}}</h3>
<h3 v-else>No Data</h3>
</div>
</template>
<script>
export default {
name: 'display-greeting',
props: ["data"],
};
</script>
<style>
* {
margin-top: 30px;
text-align: center;
font-size: 20px;
font-family: 'Courier New', Courier, monospace;
}
</style>

BIN
client/src/assets/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

@ -0,0 +1,37 @@
<script setup>
// eslint-disable-next-line
defineProps(["tableData"]);
</script>
<template>
<table>
<thead>
<tr>
<th>System ID</th>
<th>Start Time</th>
<th>End Time</th>
<th>Direction</th>
<th>Handled By</th>
<th>Active Duration (s)</th>
<th>Notes</th>
<th>Interaction</th>
<th>Outcome</th>
<th>Customer</th>
</tr>
</thead>
<tbody>
<tr v-for="td in tableData" :key="td">
<td>{{ td.node.systemId }}</td>
<td>{{ td.node.startTime }}</td>
<td>{{ td.node.endTime }}</td>
<td>{{ td.node.direction }}</td>
<td>{{ td.node.handledBy }}</td>
<td>{{ td.node.activeDuration }}</td>
<td>{{ td.node.notes }}</td>
<td>{{ td.node.interaction }}</td>
<td>{{ td.node.outcome }}</td>
<td>{{ td.node.customer }}</td>
</tr>
</tbody>
</table>
</template>

View File

@ -0,0 +1,11 @@
<script setup>
// eslint-disable-next-line
defineProps(["results"]);
</script>
<template>
<h4>Contacts Found: {{ results.totalCount }}</h4>
<h4>Total Handle Time: {{ results.totalHTDays }}</h4>
<h4>Active Handle Time: {{ results.activeHTDays }}</h4>
<h4>Total Active Time: {{ results.totalATHours }}</h4>
</template>

4
client/src/main.js Normal file
View File

@ -0,0 +1,4 @@
import { createApp } from 'vue'
import App from './App.vue'
createApp(App).mount('#app')

4
client/vue.config.js Normal file
View File

@ -0,0 +1,4 @@
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
transpileDependencies: true
})

8
server/.env Normal file
View File

@ -0,0 +1,8 @@
SERVER_PORT = 9000
EO_API_USERNAME = apiclient
EO_API_PASSWORD = apiclient12345
EO_API_SCOPE = oidc tags context_entitlements content_entitlements em_api_access
EO_API_CLIENT_ID = default
EO_API_CLIENT_SECRET =
EO_API_ACCESS_TOKEN_URL = https://em5.verint.training/oidc-token-service/default/token
EO_API_UDG_URL = https://em5.verint.training/unified-data-gateway/default/graphql

47
server/index.js Normal file
View File

@ -0,0 +1,47 @@
const express = require("express");
const cors = require("cors");
const morgan = require("morgan");
const session = require("express-session");
const axios = require("axios");
const qs = require("query-string");
// dotenv
require("dotenv").config();
const app = express();
// Use our middlewares
app.use(cors({ origin: true, credentials: true }));
app.use(morgan("common"));
app.use(express.json());
app.use(
session({
secret: "1234567890", // don't use this secret in prod :)
resave: false,
saveUninitialized: false,
cookie: {
secure: "auto",
httpOnly: true,
maxAge: 3600000,
},
})
);
// Provide a default port
const port = process.env.SERVER_PORT || 3000;
// Listen to server
app.listen(port, () => {
console.log(`Listening on port ${port}`);
});
//...
// Main Page
app.get("/", (req, res) => {
res.send({
message: "FusionAuth Example With Vue",
});
});
//...
app.use("/thread-tracker", require("./routes/threadTracker"));

846
server/package-lock.json generated Normal file
View File

@ -0,0 +1,846 @@
{
"name": "server",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
},
"accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
"integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
"requires": {
"mime-types": "~2.1.34",
"negotiator": "0.6.3"
}
},
"anymatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
"requires": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
}
},
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
},
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"axios": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.1.2.tgz",
"integrity": "sha512-bznQyETwElsXl2RK7HLLwb5GPpOLlycxHCtrpDR/4RqqBzjARaOTo3jz4IgtntWUYee7Ne4S8UHd92VCuzPaWA==",
"requires": {
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
}
},
"balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"basic-auth": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
"integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
"requires": {
"safe-buffer": "5.1.2"
},
"dependencies": {
"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=="
}
}
},
"binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
},
"body-parser": {
"version": "1.20.1",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
"integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
"requires": {
"bytes": "3.1.2",
"content-type": "~1.0.4",
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
"qs": "6.11.0",
"raw-body": "2.5.1",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
}
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"requires": {
"fill-range": "^7.0.1"
}
},
"bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
},
"call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"requires": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
}
},
"chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"requires": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
"fsevents": "~2.3.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
}
},
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"requires": {
"delayed-stream": "~1.0.0"
}
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
},
"content-disposition": {
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
"requires": {
"safe-buffer": "5.2.1"
}
},
"content-type": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
},
"cookie": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
"integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
},
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
},
"cors": {
"version": "2.8.5",
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
"integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
"requires": {
"object-assign": "^4",
"vary": "^1"
}
},
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
},
"decode-uri-component": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
"integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og=="
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
},
"depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
},
"destroy": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
},
"dotenv": {
"version": "16.0.3",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz",
"integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ=="
},
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
"encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
},
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
},
"etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
},
"express": {
"version": "4.18.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
"integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
"requires": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
"body-parser": "1.20.1",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
"cookie": "0.5.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"finalhandler": "1.2.0",
"fresh": "0.5.2",
"http-errors": "2.0.0",
"merge-descriptors": "1.0.1",
"methods": "~1.1.2",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.7",
"proxy-addr": "~2.0.7",
"qs": "6.11.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.2.1",
"send": "0.18.0",
"serve-static": "1.15.0",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
}
},
"express-session": {
"version": "1.17.3",
"resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz",
"integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==",
"requires": {
"cookie": "0.4.2",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "~2.0.0",
"on-headers": "~1.0.2",
"parseurl": "~1.3.3",
"safe-buffer": "5.2.1",
"uid-safe": "~2.1.5"
},
"dependencies": {
"cookie": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
"integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA=="
}
}
},
"fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"requires": {
"to-regex-range": "^5.0.1"
}
},
"filter-obj": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz",
"integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ=="
},
"finalhandler": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
"integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
"requires": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
"statuses": "2.0.1",
"unpipe": "~1.0.0"
}
},
"follow-redirects": {
"version": "1.15.2",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
},
"form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
}
},
"forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
},
"fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
},
"fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"optional": true
},
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"get-intrinsic": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
"integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
"requires": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.3"
}
},
"glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"requires": {
"is-glob": "^4.0.1"
}
},
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"requires": {
"function-bind": "^1.1.1"
}
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
},
"has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
},
"http-errors": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"requires": {
"depd": "2.0.0",
"inherits": "2.0.4",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"toidentifier": "1.0.1"
}
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"ignore-by-default": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
"integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA=="
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
},
"is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"requires": {
"binary-extensions": "^2.0.0"
}
},
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
},
"is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"requires": {
"is-extglob": "^2.1.1"
}
},
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
},
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
},
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
},
"methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
},
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
},
"mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
},
"mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"requires": {
"mime-db": "1.52.0"
}
},
"minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"requires": {
"brace-expansion": "^1.1.7"
}
},
"morgan": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
"integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
"requires": {
"basic-auth": "~2.0.1",
"debug": "2.6.9",
"depd": "~2.0.0",
"on-finished": "~2.3.0",
"on-headers": "~1.0.2"
},
"dependencies": {
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
"integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
"requires": {
"ee-first": "1.1.1"
}
}
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"negotiator": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
},
"nodemon": {
"version": "2.0.20",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz",
"integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==",
"requires": {
"chokidar": "^3.5.2",
"debug": "^3.2.7",
"ignore-by-default": "^1.0.1",
"minimatch": "^3.1.2",
"pstree.remy": "^1.1.8",
"semver": "^5.7.1",
"simple-update-notifier": "^1.0.7",
"supports-color": "^5.5.0",
"touch": "^3.1.0",
"undefsafe": "^2.0.5"
},
"dependencies": {
"debug": {
"version": "3.2.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"requires": {
"ms": "^2.1.1"
}
},
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
}
}
},
"nopt": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
"integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==",
"requires": {
"abbrev": "1"
}
},
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
},
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
},
"object-inspect": {
"version": "1.12.2",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
"integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ=="
},
"on-finished": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
"requires": {
"ee-first": "1.1.1"
}
},
"on-headers": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
"integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
},
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
},
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
},
"picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
},
"proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
"requires": {
"forwarded": "0.2.0",
"ipaddr.js": "1.9.1"
}
},
"proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
},
"pstree.remy": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
"integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w=="
},
"qs": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"requires": {
"side-channel": "^1.0.4"
}
},
"query-string": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.1.tgz",
"integrity": "sha512-MplouLRDHBZSG9z7fpuAAcI7aAYjDLhtsiVZsevsfaHWDS2IDdORKbSd1kWUA+V4zyva/HZoSfpwnYMMQDhb0w==",
"requires": {
"decode-uri-component": "^0.2.0",
"filter-obj": "^1.1.0",
"split-on-first": "^1.0.0",
"strict-uri-encode": "^2.0.0"
}
},
"random-bytes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
"integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ=="
},
"range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
},
"raw-body": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
"integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
"requires": {
"bytes": "3.1.2",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
}
},
"readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"requires": {
"picomatch": "^2.2.1"
}
},
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
},
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
},
"send": {
"version": "0.18.0",
"resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
"integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
"requires": {
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
"http-errors": "2.0.0",
"mime": "1.6.0",
"ms": "2.1.3",
"on-finished": "2.4.1",
"range-parser": "~1.2.1",
"statuses": "2.0.1"
},
"dependencies": {
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
}
}
},
"serve-static": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
"integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
"requires": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
"send": "0.18.0"
}
},
"setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
},
"side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
"integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
"requires": {
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",
"object-inspect": "^1.9.0"
}
},
"simple-update-notifier": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz",
"integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==",
"requires": {
"semver": "~7.0.0"
},
"dependencies": {
"semver": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
"integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A=="
}
}
},
"split-on-first": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz",
"integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw=="
},
"statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
},
"strict-uri-encode": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz",
"integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ=="
},
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"requires": {
"has-flag": "^3.0.0"
}
},
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"requires": {
"is-number": "^7.0.0"
}
},
"toidentifier": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
},
"touch": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
"integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
"requires": {
"nopt": "~1.0.10"
}
},
"type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
"requires": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
}
},
"uid-safe": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
"integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
"requires": {
"random-bytes": "~1.0.0"
}
},
"undefsafe": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
"integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA=="
},
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
},
"utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
},
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
}
}
}

24
server/package.json Normal file
View File

@ -0,0 +1,24 @@
{
"name": "server",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node index.js",
"dev": "nodemon index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^1.1.2",
"cors": "^2.8.5",
"dotenv": "^16.0.3",
"express": "^4.18.2",
"express-session": "^1.17.3",
"morgan": "^1.10.0",
"nodemon": "^2.0.20",
"query-string": "^7.1.1"
}
}

View File

@ -0,0 +1,199 @@
const express = require("express");
const router = express.Router();
const axios = require("axios");
const qs = require("querystring");
const { threadId } = require("worker_threads");
router.get("/", (req, res) => {
// token in session -> get user data and send it back to the vue app
if (req.session.token) {
query();
}
// no token -> send nothing
else {
axios
.post(
process.env.EO_API_ACCESS_TOKEN_URL,
qs.stringify({
grant_type: "password",
username: process.env.EO_API_USERNAME,
password: process.env.EO_API_PASSWORD,
scope: process.env.EO_API_SCOPE,
client_id: process.env.EO_API_CLIENT_ID,
client_secret: process.env.EO_API_SECRET,
}),
{
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
}
)
.then((result) => {
// save token to session
req.session.token = result.data.access_token;
console.log(result);
//redirect to Vue app
query();
})
.catch((err) => {
console.error(err);
});
}
function query() {
console.log("Executing Query");
var query = `query ($startTime: DateTime, $endTime: DateTime) {
findContactsCompletedBetween(startTime: $startTime, endTime: $endTime, filter: {interactionTypes : EMAIL}) {
totalCount
edges {
node {
systemId
startTime
endTime
direction
handledBy {
username
firstName
lastName
nickname
orgScope
}
activeDuration
notes {
totalCount
edges {
node {
text
}
}
}
interaction {
locale
__typename
... on Email {
messageId
threadId
sentDate
receivedDate
subject
fromAddress
ccAddresses
bccAddresses
detectedLanguage
mailboxName
attachmentCount
isDuplicate
}
}
outcome {
totalCount
edges {
node {
text
isActive
isVisible
}
}
}
customer {
totalCount
edges {
node {
ref
firstName
lastName
}
}
}
queue {
name
orgScope
}
}
}
}
}`;
var startTime = new Date(
new Date().setFullYear(new Date().getFullYear() - 1)
);
var endTime = new Date(new Date().setHours(new Date().getHours() - 1));
axios
.post(
process.env.EO_API_UDG_URL,
JSON.stringify({
query,
variables: { startTime, endTime },
}),
{
headers: {
Authorization: `OIDC_id_token ${req.session.token}`,
"Content-Type": "application/json",
},
}
)
.then((result) => {
const threadId = "1000503";
var contacts = result.data.data.findContactsCompletedBetween.edges;
var filteredContacts = [];
for (const contact of contacts) {
if (
contact.node.interaction.__typename === "Email" &&
contact.node.interaction.threadId === threadId
) {
filteredContacts.push(contact);
}
}
result.data.data.findContactsCompletedBetween.edges = filteredContacts;
result.data.data.findContactsCompletedBetween.totalCount =
filteredContacts.length;
// calculate elapsed
var contactReceived = new Date(
filteredContacts[0].node.interaction.receivedDate
);
var lastContactEndTime = new Date(
filteredContacts[filteredContacts.length - 1].node.endTime
);
var firstContactStartTime = new Date(
filteredContacts[0].node.startTime
);
var totalHTDays =
(lastContactEndTime.getTime() - contactReceived.getTime()) /
(1000 * 3600 * 24);
var activeHTDays =
(lastContactEndTime.getTime() - firstContactStartTime.getTime()) /
(1000 * 3600 * 24);
// var totalATHours = (lastContactEndTime.getTime() - firstContactStartTime.getTime()) / (1000 * 3600);
var totalATSeconds = 0;
for (const contact of filteredContacts) {
totalATSeconds += contact.node.activeDuration;
}
var totalATHours = totalATSeconds / (60 * 60);
result.data.data.findContactsCompletedBetween.totalHTDays =
totalHTDays.toPrecision(5);
result.data.data.findContactsCompletedBetween.activeHTDays =
activeHTDays.toPrecision(5);
result.data.data.findContactsCompletedBetween.totalATHours =
totalATHours.toPrecision(5);
if (result.data) {
res.send(result.data);
}
// expired token -> send nothing
else {
req.session.destroy();
res.send({});
}
})
.catch((err) => {
console.log(err);
});
}
});
module.exports = router;