├── server ├── .gitignore ├── node_modules │ ├── mime │ │ ├── .npmignore │ │ ├── cli.js │ │ ├── LICENSE │ │ └── src │ │ │ └── build.js │ ├── .bin │ │ ├── mime │ │ └── uuid │ ├── qs │ │ ├── .eslintignore │ │ ├── test │ │ │ ├── index.js │ │ │ └── .eslintrc │ │ ├── lib │ │ │ ├── index.js │ │ │ └── formats.js │ │ ├── .editorconfig │ │ ├── .eslintrc │ │ └── LICENSE │ ├── debug │ │ ├── node.js │ │ ├── .coveralls.yml │ │ ├── .npmignore │ │ ├── .travis.yml │ │ ├── .eslintrc │ │ ├── src │ │ │ ├── index.js │ │ │ └── inspector-log.js │ │ ├── component.json │ │ ├── LICENSE │ │ └── Makefile │ ├── cookie-signature │ │ ├── .npmignore │ │ ├── History.md │ │ ├── index.js │ │ ├── Readme.md │ │ └── package.json │ ├── uuid │ │ ├── dist │ │ │ ├── bin │ │ │ │ └── uuid │ │ │ ├── esm-browser │ │ │ │ ├── nil.js │ │ │ │ ├── v3.js │ │ │ │ ├── v5.js │ │ │ │ ├── regex.js │ │ │ │ ├── validate.js │ │ │ │ ├── version.js │ │ │ │ ├── index.js │ │ │ │ ├── v4.js │ │ │ │ ├── rng.js │ │ │ │ ├── parse.js │ │ │ │ ├── stringify.js │ │ │ │ └── v35.js │ │ │ ├── esm-node │ │ │ │ ├── nil.js │ │ │ │ ├── v3.js │ │ │ │ ├── v5.js │ │ │ │ ├── regex.js │ │ │ │ ├── validate.js │ │ │ │ ├── version.js │ │ │ │ ├── md5.js │ │ │ │ ├── sha1.js │ │ │ │ ├── rng.js │ │ │ │ ├── index.js │ │ │ │ ├── v4.js │ │ │ │ ├── parse.js │ │ │ │ ├── stringify.js │ │ │ │ └── v35.js │ │ │ ├── nil.js │ │ │ ├── umd │ │ │ │ ├── uuidNIL.min.js │ │ │ │ ├── uuidValidate.min.js │ │ │ │ ├── uuidVersion.min.js │ │ │ │ ├── uuidStringify.min.js │ │ │ │ ├── uuidParse.min.js │ │ │ │ └── uuidv4.min.js │ │ │ ├── regex.js │ │ │ ├── v3.js │ │ │ ├── v5.js │ │ │ ├── validate.js │ │ │ ├── version.js │ │ │ ├── md5.js │ │ │ ├── rng.js │ │ │ ├── sha1.js │ │ │ ├── v4.js │ │ │ ├── rng-browser.js │ │ │ ├── parse.js │ │ │ └── stringify.js │ │ ├── wrapper.mjs │ │ ├── CONTRIBUTING.md │ │ └── LICENSE.md │ ├── unpipe │ │ ├── HISTORY.md │ │ ├── LICENSE │ │ ├── README.md │ │ └── index.js │ ├── setprototypeof │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── LICENSE │ │ ├── test │ │ │ └── index.js │ │ └── README.md │ ├── utils-merge │ │ ├── .npmignore │ │ ├── index.js │ │ ├── LICENSE │ │ └── README.md │ ├── mime-db │ │ ├── index.js │ │ └── LICENSE │ ├── inherits │ │ ├── inherits.js │ │ ├── inherits_browser.js │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── express │ │ ├── index.js │ │ ├── lib │ │ │ └── middleware │ │ │ │ ├── init.js │ │ │ │ └── query.js │ │ └── LICENSE │ ├── encodeurl │ │ ├── HISTORY.md │ │ ├── LICENSE │ │ └── index.js │ ├── forwarded │ │ ├── HISTORY.md │ │ ├── LICENSE │ │ ├── index.js │ │ └── README.md │ ├── depd │ │ ├── lib │ │ │ ├── compat │ │ │ │ ├── event-listener-count.js │ │ │ │ └── index.js │ │ │ └── browser │ │ │ │ └── index.js │ │ └── LICENSE │ ├── merge-descriptors │ │ ├── HISTORY.md │ │ ├── LICENSE │ │ ├── README.md │ │ └── index.js │ ├── content-type │ │ ├── HISTORY.md │ │ └── LICENSE │ ├── methods │ │ ├── HISTORY.md │ │ ├── LICENSE │ │ ├── index.js │ │ └── README.md │ ├── media-typer │ │ ├── HISTORY.md │ │ └── LICENSE │ ├── toidentifier │ │ ├── index.js │ │ └── LICENSE │ ├── iconv-lite │ │ ├── encodings │ │ │ ├── index.js │ │ │ └── tables │ │ │ │ └── gbk-added.json │ │ ├── lib │ │ │ ├── index.d.ts │ │ │ └── bom-handling.js │ │ └── LICENSE │ ├── path-to-regexp │ │ ├── History.md │ │ ├── LICENSE │ │ ├── Readme.md │ │ └── package.json │ ├── escape-html │ │ ├── Readme.md │ │ ├── LICENSE │ │ ├── index.js │ │ └── package.json │ ├── vary │ │ ├── HISTORY.md │ │ └── LICENSE │ ├── ms │ │ ├── license.md │ │ ├── package.json │ │ └── readme.md │ ├── ipaddr.js │ │ └── LICENSE │ ├── safe-buffer │ │ ├── LICENSE │ │ ├── index.js │ │ └── package.json │ ├── etag │ │ └── LICENSE │ ├── send │ │ ├── node_modules │ │ │ └── ms │ │ │ │ ├── license.md │ │ │ │ └── package.json │ │ └── LICENSE │ ├── proxy-addr │ │ └── LICENSE │ ├── range-parser │ │ ├── HISTORY.md │ │ └── LICENSE │ ├── safer-buffer │ │ ├── LICENSE │ │ └── dangerous.js │ ├── destroy │ │ ├── LICENSE │ │ └── index.js │ ├── ee-first │ │ └── LICENSE │ ├── array-flatten │ │ ├── LICENSE │ │ ├── README.md │ │ ├── array-flatten.js │ │ └── package.json │ ├── content-disposition │ │ ├── LICENSE │ │ └── HISTORY.md │ ├── finalhandler │ │ └── LICENSE │ ├── bytes │ │ ├── LICENSE │ │ └── History.md │ ├── accepts │ │ └── LICENSE │ ├── fresh │ │ ├── LICENSE │ │ └── HISTORY.md │ ├── http-errors │ │ └── LICENSE │ ├── mime-types │ │ └── LICENSE │ ├── on-finished │ │ └── LICENSE │ ├── type-is │ │ └── LICENSE │ ├── body-parser │ │ └── LICENSE │ ├── raw-body │ │ └── LICENSE │ ├── statuses │ │ ├── LICENSE │ │ └── HISTORY.md │ ├── cookie │ │ └── LICENSE │ ├── parseurl │ │ ├── LICENSE │ │ └── HISTORY.md │ ├── negotiator │ │ └── LICENSE │ └── serve-static │ │ └── LICENSE ├── Dockerfile ├── package.json └── src │ └── index.js ├── .DS_Store ├── client ├── src │ ├── react-app-env.d.ts │ ├── index.css │ ├── setupTests.ts │ ├── App.css │ ├── App.test.tsx │ ├── components │ │ ├── SideNav │ │ │ ├── SideNav.css │ │ │ └── SideNav.tsx │ │ ├── Habit │ │ │ ├── Habit.css │ │ │ └── Habit.tsx │ │ └── HabitCard │ │ │ ├── HabitCard.css │ │ │ └── HabitCard.tsx │ ├── App.tsx │ ├── svg │ │ ├── check.svg │ │ └── close.svg │ ├── reportWebVitals.ts │ └── index.tsx ├── public │ ├── robots.txt │ ├── favicon.ico │ ├── logo192.png │ ├── logo512.png │ └── manifest.json ├── Dockerfile ├── .gitignore ├── tsconfig.json └── package.json ├── infra ├── .DS_Store └── k8s │ ├── .DS_Store │ ├── mongo-secret.yaml │ ├── mongo-pvc.yaml │ ├── ingress-srv.yaml │ ├── client-depl.yaml │ ├── mongo-depl.yaml │ └── server-depl.yaml └── skaffold.yaml /server/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /server/node_modules/mime/.npmignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/node_modules/.bin/mime: -------------------------------------------------------------------------------- 1 | ../mime/cli.js -------------------------------------------------------------------------------- /server/node_modules/qs/.eslintignore: -------------------------------------------------------------------------------- 1 | dist 2 | -------------------------------------------------------------------------------- /server/node_modules/.bin/uuid: -------------------------------------------------------------------------------- 1 | ../uuid/dist/bin/uuid -------------------------------------------------------------------------------- /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/k8s-app/HEAD/.DS_Store -------------------------------------------------------------------------------- /client/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /server/node_modules/debug/node.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./src/node'); 2 | -------------------------------------------------------------------------------- /infra/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/k8s-app/HEAD/infra/.DS_Store -------------------------------------------------------------------------------- /infra/k8s/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/k8s-app/HEAD/infra/k8s/.DS_Store -------------------------------------------------------------------------------- /server/node_modules/cookie-signature/.npmignore: -------------------------------------------------------------------------------- 1 | support 2 | test 3 | examples 4 | *.sock 5 | -------------------------------------------------------------------------------- /server/node_modules/debug/.coveralls.yml: -------------------------------------------------------------------------------- 1 | repo_token: SIAeZjKYlHK74rbcFvNHMUzjRiMpflxve 2 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/bin/uuid: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | require('../uuid-bin'); 3 | -------------------------------------------------------------------------------- /client/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-browser/nil.js: -------------------------------------------------------------------------------- 1 | export default '00000000-0000-0000-0000-000000000000'; -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-node/nil.js: -------------------------------------------------------------------------------- 1 | export default '00000000-0000-0000-0000-000000000000'; -------------------------------------------------------------------------------- /client/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/k8s-app/HEAD/client/public/favicon.ico -------------------------------------------------------------------------------- /client/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/k8s-app/HEAD/client/public/logo192.png -------------------------------------------------------------------------------- /client/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/k8s-app/HEAD/client/public/logo512.png -------------------------------------------------------------------------------- /server/node_modules/unpipe/HISTORY.md: -------------------------------------------------------------------------------- 1 | 1.0.0 / 2015-06-14 2 | ================== 3 | 4 | * Initial release 5 | -------------------------------------------------------------------------------- /client/src/index.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | box-sizing: border-box; 5 | font-family: "Roboto"; 6 | } -------------------------------------------------------------------------------- /server/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:alpine 2 | 3 | WORKDIR /app 4 | COPY package.json . 5 | RUN npm install 6 | COPY . . 7 | 8 | CMD ["npm", "start"] -------------------------------------------------------------------------------- /client/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:alpine 2 | 3 | WORKDIR /app 4 | COPY package.json . 5 | RUN yarn install 6 | COPY . . 7 | 8 | CMD ["yarn", "start"] -------------------------------------------------------------------------------- /server/node_modules/qs/test/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | require('./parse'); 4 | 5 | require('./stringify'); 6 | 7 | require('./utils'); 8 | -------------------------------------------------------------------------------- /server/node_modules/setprototypeof/index.d.ts: -------------------------------------------------------------------------------- 1 | declare function setPrototypeOf(o: any, proto: object | null): any; 2 | export = setPrototypeOf; 3 | -------------------------------------------------------------------------------- /server/node_modules/debug/.npmignore: -------------------------------------------------------------------------------- 1 | support 2 | test 3 | examples 4 | example 5 | *.sock 6 | dist 7 | yarn.lock 8 | coverage 9 | bower.json 10 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-node/v3.js: -------------------------------------------------------------------------------- 1 | import v35 from './v35.js'; 2 | import md5 from './md5.js'; 3 | const v3 = v35('v3', 0x30, md5); 4 | export default v3; -------------------------------------------------------------------------------- /infra/k8s/mongo-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: mongo-credentials 5 | stringData: 6 | mongo-url: "mongodb://mongo-srv/habits" -------------------------------------------------------------------------------- /server/node_modules/utils-merge/.npmignore: -------------------------------------------------------------------------------- 1 | CONTRIBUTING.md 2 | Makefile 3 | docs/ 4 | examples/ 5 | reports/ 6 | test/ 7 | 8 | .jshintrc 9 | .travis.yml 10 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-browser/v3.js: -------------------------------------------------------------------------------- 1 | import v35 from './v35.js'; 2 | import md5 from './md5.js'; 3 | var v3 = v35('v3', 0x30, md5); 4 | export default v3; -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-browser/v5.js: -------------------------------------------------------------------------------- 1 | import v35 from './v35.js'; 2 | import sha1 from './sha1.js'; 3 | var v5 = v35('v5', 0x50, sha1); 4 | export default v5; -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-node/v5.js: -------------------------------------------------------------------------------- 1 | import v35 from './v35.js'; 2 | import sha1 from './sha1.js'; 3 | const v5 = v35('v5', 0x50, sha1); 4 | export default v5; -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-browser/regex.js: -------------------------------------------------------------------------------- 1 | export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-node/regex.js: -------------------------------------------------------------------------------- 1 | export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; -------------------------------------------------------------------------------- /server/node_modules/mime/cli.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var mime = require('./mime.js'); 4 | var file = process.argv[2]; 5 | var type = mime.lookup(file); 6 | 7 | process.stdout.write(type + '\n'); 8 | 9 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-browser/validate.js: -------------------------------------------------------------------------------- 1 | import REGEX from './regex.js'; 2 | 3 | function validate(uuid) { 4 | return typeof uuid === 'string' && REGEX.test(uuid); 5 | } 6 | 7 | export default validate; -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-node/validate.js: -------------------------------------------------------------------------------- 1 | import REGEX from './regex.js'; 2 | 3 | function validate(uuid) { 4 | return typeof uuid === 'string' && REGEX.test(uuid); 5 | } 6 | 7 | export default validate; -------------------------------------------------------------------------------- /infra/k8s/mongo-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: mongo-pvc 5 | spec: 6 | accessModes: 7 | - ReadWriteOnce 8 | resources: 9 | requests: 10 | storage: 2Gi -------------------------------------------------------------------------------- /server/node_modules/mime-db/index.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * mime-db 3 | * Copyright(c) 2014 Jonathan Ong 4 | * MIT Licensed 5 | */ 6 | 7 | /** 8 | * Module exports. 9 | */ 10 | 11 | module.exports = require('./db.json') 12 | -------------------------------------------------------------------------------- /server/node_modules/debug/.travis.yml: -------------------------------------------------------------------------------- 1 | 2 | language: node_js 3 | node_js: 4 | - "6" 5 | - "5" 6 | - "4" 7 | 8 | install: 9 | - make node_modules 10 | 11 | script: 12 | - make lint 13 | - make test 14 | - make coveralls 15 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/nil.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = void 0; 7 | var _default = '00000000-0000-0000-0000-000000000000'; 8 | exports.default = _default; -------------------------------------------------------------------------------- /server/node_modules/inherits/inherits.js: -------------------------------------------------------------------------------- 1 | try { 2 | var util = require('util'); 3 | if (typeof util.inherits !== 'function') throw ''; 4 | module.exports = util.inherits; 5 | } catch (e) { 6 | module.exports = require('./inherits_browser.js'); 7 | } 8 | -------------------------------------------------------------------------------- /server/node_modules/debug/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "node": true 5 | }, 6 | "rules": { 7 | "no-console": 0, 8 | "no-empty": [1, { "allowEmptyCatch": true }] 9 | }, 10 | "extends": "eslint:recommended" 11 | } 12 | -------------------------------------------------------------------------------- /client/src/setupTests.ts: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /client/src/App.css: -------------------------------------------------------------------------------- 1 | .App { 2 | background-color: rgba(240, 248, 255, 0.514); 3 | height: 100vh; 4 | } 5 | 6 | .App-container { 7 | max-width: 75rem; 8 | margin: 0 auto; 9 | display: flex; 10 | } 11 | 12 | .SideNav-list-items { 13 | list-style: none; 14 | font-size: 1.4rem; 15 | } -------------------------------------------------------------------------------- /server/node_modules/qs/lib/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var stringify = require('./stringify'); 4 | var parse = require('./parse'); 5 | var formats = require('./formats'); 6 | 7 | module.exports = { 8 | formats: formats, 9 | parse: parse, 10 | stringify: stringify 11 | }; 12 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-browser/version.js: -------------------------------------------------------------------------------- 1 | import validate from './validate.js'; 2 | 3 | function version(uuid) { 4 | if (!validate(uuid)) { 5 | throw TypeError('Invalid UUID'); 6 | } 7 | 8 | return parseInt(uuid.substr(14, 1), 16); 9 | } 10 | 11 | export default version; -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-node/version.js: -------------------------------------------------------------------------------- 1 | import validate from './validate.js'; 2 | 3 | function version(uuid) { 4 | if (!validate(uuid)) { 5 | throw TypeError('Invalid UUID'); 6 | } 7 | 8 | return parseInt(uuid.substr(14, 1), 16); 9 | } 10 | 11 | export default version; -------------------------------------------------------------------------------- /server/node_modules/express/index.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * express 3 | * Copyright(c) 2009-2013 TJ Holowaychuk 4 | * Copyright(c) 2013 Roman Shtylman 5 | * Copyright(c) 2014-2015 Douglas Christopher Wilson 6 | * MIT Licensed 7 | */ 8 | 9 | 'use strict'; 10 | 11 | module.exports = require('./lib/express'); 12 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/umd/uuidNIL.min.js: -------------------------------------------------------------------------------- 1 | !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidNIL=n()}(this,(function(){"use strict";return"00000000-0000-0000-0000-000000000000"})); -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/regex.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = void 0; 7 | var _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; 8 | exports.default = _default; -------------------------------------------------------------------------------- /client/src/App.test.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render, screen } from '@testing-library/react'; 3 | import App from './App'; 4 | 5 | test('renders learn react link', () => { 6 | render(); 7 | const linkElement = screen.getByText(/learn react/i); 8 | expect(linkElement).toBeInTheDocument(); 9 | }); 10 | -------------------------------------------------------------------------------- /server/node_modules/debug/src/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Detect Electron renderer process, which is node, but we should 3 | * treat as a browser. 4 | */ 5 | 6 | if (typeof process !== 'undefined' && process.type === 'renderer') { 7 | module.exports = require('./browser.js'); 8 | } else { 9 | module.exports = require('./node.js'); 10 | } 11 | -------------------------------------------------------------------------------- /server/node_modules/encodeurl/HISTORY.md: -------------------------------------------------------------------------------- 1 | 1.0.2 / 2018-01-21 2 | ================== 3 | 4 | * Fix encoding `%` as last character 5 | 6 | 1.0.1 / 2016-06-09 7 | ================== 8 | 9 | * Fix encoding unpaired surrogates at start/end of string 10 | 11 | 1.0.0 / 2016-06-08 12 | ================== 13 | 14 | * Initial release 15 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-node/md5.js: -------------------------------------------------------------------------------- 1 | import crypto from 'crypto'; 2 | 3 | function md5(bytes) { 4 | if (Array.isArray(bytes)) { 5 | bytes = Buffer.from(bytes); 6 | } else if (typeof bytes === 'string') { 7 | bytes = Buffer.from(bytes, 'utf8'); 8 | } 9 | 10 | return crypto.createHash('md5').update(bytes).digest(); 11 | } 12 | 13 | export default md5; -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-node/sha1.js: -------------------------------------------------------------------------------- 1 | import crypto from 'crypto'; 2 | 3 | function sha1(bytes) { 4 | if (Array.isArray(bytes)) { 5 | bytes = Buffer.from(bytes); 6 | } else if (typeof bytes === 'string') { 7 | bytes = Buffer.from(bytes, 'utf8'); 8 | } 9 | 10 | return crypto.createHash('sha1').update(bytes).digest(); 11 | } 12 | 13 | export default sha1; -------------------------------------------------------------------------------- /client/src/components/SideNav/SideNav.css: -------------------------------------------------------------------------------- 1 | .SideNav { 2 | width: 25%; 3 | padding: 5rem 2.5rem; 4 | } 5 | 6 | .SideNav-list-items { 7 | padding: 0.5rem; 8 | border-radius: 0.4rem; 9 | margin-bottom: 0.5rem; 10 | cursor: pointer; 11 | font-size: 1.1rem; 12 | } 13 | 14 | .SideNav-list-items--active { 15 | background-color: rgba(70, 178, 240, 0.157); 16 | } -------------------------------------------------------------------------------- /server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node ./src/index.js" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "express": "^4.17.1", 14 | "mongoose": "^5.12.7", 15 | "uuid": "^8.3.2" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /server/node_modules/uuid/wrapper.mjs: -------------------------------------------------------------------------------- 1 | import uuid from './dist/index.js'; 2 | export const v1 = uuid.v1; 3 | export const v3 = uuid.v3; 4 | export const v4 = uuid.v4; 5 | export const v5 = uuid.v5; 6 | export const NIL = uuid.NIL; 7 | export const version = uuid.version; 8 | export const validate = uuid.validate; 9 | export const stringify = uuid.stringify; 10 | export const parse = uuid.parse; 11 | -------------------------------------------------------------------------------- /server/node_modules/forwarded/HISTORY.md: -------------------------------------------------------------------------------- 1 | 0.1.2 / 2017-09-14 2 | ================== 3 | 4 | * perf: improve header parsing 5 | * perf: reduce overhead when no `X-Forwarded-For` header 6 | 7 | 0.1.1 / 2017-09-10 8 | ================== 9 | 10 | * Fix trimming leading / trailing OWS 11 | * perf: hoist regular expression 12 | 13 | 0.1.0 / 2014-09-21 14 | ================== 15 | 16 | * Initial release 17 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-node/rng.js: -------------------------------------------------------------------------------- 1 | import crypto from 'crypto'; 2 | const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate 3 | 4 | let poolPtr = rnds8Pool.length; 5 | export default function rng() { 6 | if (poolPtr > rnds8Pool.length - 16) { 7 | crypto.randomFillSync(rnds8Pool); 8 | poolPtr = 0; 9 | } 10 | 11 | return rnds8Pool.slice(poolPtr, poolPtr += 16); 12 | } -------------------------------------------------------------------------------- /client/src/App.tsx: -------------------------------------------------------------------------------- 1 | import logo from './logo.svg'; 2 | import './App.css'; 3 | import SideNav from './components/SideNav/SideNav'; 4 | import Habit from "./components/Habit/Habit" 5 | 6 | function App() { 7 | return ( 8 |
9 |
10 | 11 | 12 |
13 |
14 | ); 15 | } 16 | 17 | export default App; 18 | -------------------------------------------------------------------------------- /client/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /server/node_modules/debug/component.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "debug", 3 | "repo": "visionmedia/debug", 4 | "description": "small debugging utility", 5 | "version": "2.6.9", 6 | "keywords": [ 7 | "debug", 8 | "log", 9 | "debugger" 10 | ], 11 | "main": "src/browser.js", 12 | "scripts": [ 13 | "src/browser.js", 14 | "src/debug.js" 15 | ], 16 | "dependencies": { 17 | "rauchg/ms.js": "0.7.1" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/umd/uuidValidate.min.js: -------------------------------------------------------------------------------- 1 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidValidate=t()}(this,(function(){"use strict";var e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;return function(t){return"string"==typeof t&&e.test(t)}})); -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-node/index.js: -------------------------------------------------------------------------------- 1 | export { default as v1 } from './v1.js'; 2 | export { default as v3 } from './v3.js'; 3 | export { default as v4 } from './v4.js'; 4 | export { default as v5 } from './v5.js'; 5 | export { default as NIL } from './nil.js'; 6 | export { default as version } from './version.js'; 7 | export { default as validate } from './validate.js'; 8 | export { default as stringify } from './stringify.js'; 9 | export { default as parse } from './parse.js'; -------------------------------------------------------------------------------- /server/node_modules/debug/src/inspector-log.js: -------------------------------------------------------------------------------- 1 | module.exports = inspectorLog; 2 | 3 | // black hole 4 | const nullStream = new (require('stream').Writable)(); 5 | nullStream._write = () => {}; 6 | 7 | /** 8 | * Outputs a `console.log()` to the Node.js Inspector console *only*. 9 | */ 10 | function inspectorLog() { 11 | const stdout = console._stdout; 12 | console._stdout = nullStream; 13 | console.log.apply(console, arguments); 14 | console._stdout = stdout; 15 | } 16 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-browser/index.js: -------------------------------------------------------------------------------- 1 | export { default as v1 } from './v1.js'; 2 | export { default as v3 } from './v3.js'; 3 | export { default as v4 } from './v4.js'; 4 | export { default as v5 } from './v5.js'; 5 | export { default as NIL } from './nil.js'; 6 | export { default as version } from './version.js'; 7 | export { default as validate } from './validate.js'; 8 | export { default as stringify } from './stringify.js'; 9 | export { default as parse } from './parse.js'; -------------------------------------------------------------------------------- /server/node_modules/depd/lib/compat/event-listener-count.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * depd 3 | * Copyright(c) 2015 Douglas Christopher Wilson 4 | * MIT Licensed 5 | */ 6 | 7 | 'use strict' 8 | 9 | /** 10 | * Module exports. 11 | * @public 12 | */ 13 | 14 | module.exports = eventListenerCount 15 | 16 | /** 17 | * Get the count of listeners on an event emitter of a specific type. 18 | */ 19 | 20 | function eventListenerCount (emitter, type) { 21 | return emitter.listeners(type).length 22 | } 23 | -------------------------------------------------------------------------------- /server/node_modules/setprototypeof/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | /* eslint no-proto: 0 */ 3 | module.exports = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties) 4 | 5 | function setProtoOf (obj, proto) { 6 | obj.__proto__ = proto 7 | return obj 8 | } 9 | 10 | function mixinProperties (obj, proto) { 11 | for (var prop in proto) { 12 | if (!obj.hasOwnProperty(prop)) { 13 | obj[prop] = proto[prop] 14 | } 15 | } 16 | return obj 17 | } 18 | -------------------------------------------------------------------------------- /client/src/svg/check.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/node_modules/merge-descriptors/HISTORY.md: -------------------------------------------------------------------------------- 1 | 1.0.1 / 2016-01-17 2 | ================== 3 | 4 | * perf: enable strict mode 5 | 6 | 1.0.0 / 2015-03-01 7 | ================== 8 | 9 | * Add option to only add new descriptors 10 | * Add simple argument validation 11 | * Add jsdoc to source file 12 | 13 | 0.0.2 / 2013-12-14 14 | ================== 15 | 16 | * Move repository to `component` organization 17 | 18 | 0.0.1 / 2013-10-29 19 | ================== 20 | 21 | * Initial release 22 | -------------------------------------------------------------------------------- /server/node_modules/qs/lib/formats.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var replace = String.prototype.replace; 4 | var percentTwenties = /%20/g; 5 | 6 | module.exports = { 7 | 'default': 'RFC3986', 8 | formatters: { 9 | RFC1738: function (value) { 10 | return replace.call(value, percentTwenties, '+'); 11 | }, 12 | RFC3986: function (value) { 13 | return value; 14 | } 15 | }, 16 | RFC1738: 'RFC1738', 17 | RFC3986: 'RFC3986' 18 | }; 19 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/v3.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = void 0; 7 | 8 | var _v = _interopRequireDefault(require("./v35.js")); 9 | 10 | var _md = _interopRequireDefault(require("./md5.js")); 11 | 12 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 13 | 14 | const v3 = (0, _v.default)('v3', 0x30, _md.default); 15 | var _default = v3; 16 | exports.default = _default; -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/v5.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = void 0; 7 | 8 | var _v = _interopRequireDefault(require("./v35.js")); 9 | 10 | var _sha = _interopRequireDefault(require("./sha1.js")); 11 | 12 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 13 | 14 | const v5 = (0, _v.default)('v5', 0x50, _sha.default); 15 | var _default = v5; 16 | exports.default = _default; -------------------------------------------------------------------------------- /client/src/reportWebVitals.ts: -------------------------------------------------------------------------------- 1 | import { ReportHandler } from 'web-vitals'; 2 | 3 | const reportWebVitals = (onPerfEntry?: ReportHandler) => { 4 | if (onPerfEntry && onPerfEntry instanceof Function) { 5 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 6 | getCLS(onPerfEntry); 7 | getFID(onPerfEntry); 8 | getFCP(onPerfEntry); 9 | getLCP(onPerfEntry); 10 | getTTFB(onPerfEntry); 11 | }); 12 | } 13 | }; 14 | 15 | export default reportWebVitals; 16 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/validate.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = void 0; 7 | 8 | var _regex = _interopRequireDefault(require("./regex.js")); 9 | 10 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 11 | 12 | function validate(uuid) { 13 | return typeof uuid === 'string' && _regex.default.test(uuid); 14 | } 15 | 16 | var _default = validate; 17 | exports.default = _default; -------------------------------------------------------------------------------- /server/node_modules/utils-merge/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Merge object b with object a. 3 | * 4 | * var a = { foo: 'bar' } 5 | * , b = { bar: 'baz' }; 6 | * 7 | * merge(a, b); 8 | * // => { foo: 'bar', bar: 'baz' } 9 | * 10 | * @param {Object} a 11 | * @param {Object} b 12 | * @return {Object} 13 | * @api public 14 | */ 15 | 16 | exports = module.exports = function(a, b){ 17 | if (a && b) { 18 | for (var key in b) { 19 | a[key] = b[key]; 20 | } 21 | } 22 | return a; 23 | }; 24 | -------------------------------------------------------------------------------- /server/node_modules/qs/test/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "array-bracket-newline": 0, 4 | "array-element-newline": 0, 5 | "consistent-return": 2, 6 | "function-paren-newline": 0, 7 | "max-lines": 0, 8 | "max-lines-per-function": 0, 9 | "max-nested-callbacks": [2, 3], 10 | "max-statements": 0, 11 | "no-buffer-constructor": 0, 12 | "no-extend-native": 0, 13 | "no-magic-numbers": 0, 14 | "object-curly-newline": 0, 15 | "sort-keys": 0 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/umd/uuidVersion.min.js: -------------------------------------------------------------------------------- 1 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidVersion=t()}(this,(function(){"use strict";var e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;return function(t){if(!function(t){return"string"==typeof t&&e.test(t)}(t))throw TypeError("Invalid UUID");return parseInt(t.substr(14,1),16)}})); -------------------------------------------------------------------------------- /client/src/components/SideNav/SideNav.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import "./SideNav.css" 3 | 4 | function SideNav() { 5 | return ( 6 |
7 |
  • Habit
  • 8 |
  • Accomplishments
  • 9 |
  • Rewards
  • 10 |
  • Experiences
  • 11 |
    12 | ) 13 | } 14 | 15 | export default SideNav 16 | -------------------------------------------------------------------------------- /server/node_modules/qs/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 4 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | max_line_length = 160 11 | 12 | [test/*] 13 | max_line_length = off 14 | 15 | [*.md] 16 | max_line_length = off 17 | 18 | [*.json] 19 | max_line_length = off 20 | 21 | [Makefile] 22 | max_line_length = off 23 | 24 | [CHANGELOG.md] 25 | indent_style = space 26 | indent_size = 2 27 | 28 | [LICENSE] 29 | indent_size = 2 30 | max_line_length = off 31 | -------------------------------------------------------------------------------- /client/src/components/Habit/Habit.css: -------------------------------------------------------------------------------- 1 | .Habit { 2 | width: 75%; 3 | padding: 5rem 2.5rem; 4 | } 5 | 6 | .Habit-header { 7 | font-weight: 500; 8 | letter-spacing: 0.1rem; 9 | margin-bottom: 1rem; 10 | } 11 | 12 | .Habit__heading-container { 13 | display: flex; 14 | justify-content: space-between; 15 | align-items: center; 16 | } 17 | 18 | .Habit__heading-container button { 19 | padding: 0.25rem 2rem; 20 | border: none; 21 | background-color: rgba(70, 178, 240, 0.157); 22 | border-radius: 0.2rem; 23 | cursor: pointer; 24 | } -------------------------------------------------------------------------------- /server/node_modules/content-type/HISTORY.md: -------------------------------------------------------------------------------- 1 | 1.0.4 / 2017-09-11 2 | ================== 3 | 4 | * perf: skip parameter parsing when no parameters 5 | 6 | 1.0.3 / 2017-09-10 7 | ================== 8 | 9 | * perf: remove argument reassignment 10 | 11 | 1.0.2 / 2016-05-09 12 | ================== 13 | 14 | * perf: enable strict mode 15 | 16 | 1.0.1 / 2015-02-13 17 | ================== 18 | 19 | * Improve missing `Content-Type` header error message 20 | 21 | 1.0.0 / 2015-02-01 22 | ================== 23 | 24 | * Initial implementation, derived from `media-typer@0.3.0` 25 | -------------------------------------------------------------------------------- /client/src/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './index.css'; 4 | import App from './App'; 5 | import reportWebVitals from './reportWebVitals'; 6 | 7 | ReactDOM.render( 8 | 9 | 10 | , 11 | document.getElementById('root') 12 | ); 13 | 14 | // If you want to start measuring performance in your app, pass a function 15 | // to log results (for example: reportWebVitals(console.log)) 16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 17 | reportWebVitals(); 18 | -------------------------------------------------------------------------------- /infra/k8s/ingress-srv.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: Ingress 3 | metadata: 4 | name: ingress-service 5 | annotations: 6 | kubernetes.io/ingress.class: nginx 7 | nginx.ingress.kubernetes.io/use-regex: 'true' 8 | spec: 9 | rules: 10 | - host: habittracker.com 11 | http: 12 | paths: 13 | - path: /api/?(.*) 14 | backend: 15 | serviceName: server-srv 16 | servicePort: 3000 17 | - path: /?(.*) 18 | backend: 19 | serviceName: client-srv 20 | servicePort: 3000 -------------------------------------------------------------------------------- /server/node_modules/methods/HISTORY.md: -------------------------------------------------------------------------------- 1 | 1.1.2 / 2016-01-17 2 | ================== 3 | 4 | * perf: enable strict mode 5 | 6 | 1.1.1 / 2014-12-30 7 | ================== 8 | 9 | * Improve `browserify` support 10 | 11 | 1.1.0 / 2014-07-05 12 | ================== 13 | 14 | * Add `CONNECT` method 15 | 16 | 1.0.1 / 2014-06-02 17 | ================== 18 | 19 | * Fix module to work with harmony transform 20 | 21 | 1.0.0 / 2014-05-08 22 | ================== 23 | 24 | * Add `PURGE` method 25 | 26 | 0.1.0 / 2013-10-28 27 | ================== 28 | 29 | * Add `http.METHODS` support 30 | -------------------------------------------------------------------------------- /server/node_modules/media-typer/HISTORY.md: -------------------------------------------------------------------------------- 1 | 0.3.0 / 2014-09-07 2 | ================== 3 | 4 | * Support Node.js 0.6 5 | * Throw error when parameter format invalid on parse 6 | 7 | 0.2.0 / 2014-06-18 8 | ================== 9 | 10 | * Add `typer.format()` to format media types 11 | 12 | 0.1.0 / 2014-06-17 13 | ================== 14 | 15 | * Accept `req` as argument to `parse` 16 | * Accept `res` as argument to `parse` 17 | * Parse media type with extra LWS between type and first parameter 18 | 19 | 0.0.0 / 2014-06-13 20 | ================== 21 | 22 | * Initial implementation 23 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/version.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = void 0; 7 | 8 | var _validate = _interopRequireDefault(require("./validate.js")); 9 | 10 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 11 | 12 | function version(uuid) { 13 | if (!(0, _validate.default)(uuid)) { 14 | throw TypeError('Invalid UUID'); 15 | } 16 | 17 | return parseInt(uuid.substr(14, 1), 16); 18 | } 19 | 20 | var _default = version; 21 | exports.default = _default; -------------------------------------------------------------------------------- /client/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /server/node_modules/uuid/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Please feel free to file GitHub Issues or propose Pull Requests. We're always happy to discuss improvements to this library! 4 | 5 | ## Testing 6 | 7 | ```shell 8 | npm test 9 | ``` 10 | 11 | ## Releasing 12 | 13 | Releases are supposed to be done from master, version bumping is automated through [`standard-version`](https://github.com/conventional-changelog/standard-version): 14 | 15 | ```shell 16 | npm run release -- --dry-run # verify output manually 17 | npm run release # follow the instructions from the output of this command 18 | ``` 19 | -------------------------------------------------------------------------------- /infra/k8s/client-depl.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: client-depl 5 | spec: 6 | replicas: 1 7 | selector: 8 | matchLabels: 9 | app: client 10 | template: 11 | metadata: 12 | name: client-pod 13 | labels: 14 | app: client 15 | spec: 16 | containers: 17 | - name: client 18 | image: laithharb/web-app:v2 19 | 20 | --- 21 | 22 | apiVersion: v1 23 | kind: Service 24 | metadata: 25 | name: client-srv 26 | spec: 27 | type: NodePort 28 | selector: 29 | app: client 30 | ports: 31 | - port: 3000 32 | targetPort: 3000 33 | nodePort: 30007 -------------------------------------------------------------------------------- /client/src/components/HabitCard/HabitCard.css: -------------------------------------------------------------------------------- 1 | .HabitCard { 2 | background-color: white; 3 | border-radius: 0.25rem; 4 | box-shadow: 0.1rem 0.1rem 1rem rgba(0, 0, 0, 0.071); 5 | display: flex; 6 | margin-bottom: 0.75rem; 7 | } 8 | 9 | .HabitCard__completion-container { 10 | width: 15%; 11 | border-right: 0.1rem solid rgba(0, 0, 0, 0.062); 12 | padding: 1rem; 13 | justify-content: center; 14 | display: flex; 15 | } 16 | 17 | .HabitCard__habit-container { 18 | display: flex; 19 | align-items: center; 20 | padding: 1rem 21 | } 22 | 23 | .HabitCard__completion-icon { 24 | width: 1rem; 25 | opacity: 0.5; 26 | } -------------------------------------------------------------------------------- /server/node_modules/toidentifier/index.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * toidentifier 3 | * Copyright(c) 2016 Douglas Christopher Wilson 4 | * MIT Licensed 5 | */ 6 | 7 | /** 8 | * Module exports. 9 | * @public 10 | */ 11 | 12 | module.exports = toIdentifier 13 | 14 | /** 15 | * Trasform the given string into a JavaScript identifier 16 | * 17 | * @param {string} str 18 | * @returns {string} 19 | * @public 20 | */ 21 | 22 | function toIdentifier (str) { 23 | return str 24 | .split(' ') 25 | .map(function (token) { 26 | return token.slice(0, 1).toUpperCase() + token.slice(1) 27 | }) 28 | .join('') 29 | .replace(/[^ _0-9a-z]/gi, '') 30 | } 31 | -------------------------------------------------------------------------------- /client/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "esModuleInterop": true, 12 | "allowSyntheticDefaultImports": true, 13 | "strict": true, 14 | "forceConsistentCasingInFileNames": true, 15 | "noFallthroughCasesInSwitch": true, 16 | "module": "esnext", 17 | "moduleResolution": "node", 18 | "resolveJsonModule": true, 19 | "isolatedModules": true, 20 | "noEmit": true, 21 | "jsx": "react-jsx" 22 | }, 23 | "include": [ 24 | "src" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/md5.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = void 0; 7 | 8 | var _crypto = _interopRequireDefault(require("crypto")); 9 | 10 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 11 | 12 | function md5(bytes) { 13 | if (Array.isArray(bytes)) { 14 | bytes = Buffer.from(bytes); 15 | } else if (typeof bytes === 'string') { 16 | bytes = Buffer.from(bytes, 'utf8'); 17 | } 18 | 19 | return _crypto.default.createHash('md5').update(bytes).digest(); 20 | } 21 | 22 | var _default = md5; 23 | exports.default = _default; -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/rng.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = rng; 7 | 8 | var _crypto = _interopRequireDefault(require("crypto")); 9 | 10 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 11 | 12 | const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate 13 | 14 | let poolPtr = rnds8Pool.length; 15 | 16 | function rng() { 17 | if (poolPtr > rnds8Pool.length - 16) { 18 | _crypto.default.randomFillSync(rnds8Pool); 19 | 20 | poolPtr = 0; 21 | } 22 | 23 | return rnds8Pool.slice(poolPtr, poolPtr += 16); 24 | } -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/sha1.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = void 0; 7 | 8 | var _crypto = _interopRequireDefault(require("crypto")); 9 | 10 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 11 | 12 | function sha1(bytes) { 13 | if (Array.isArray(bytes)) { 14 | bytes = Buffer.from(bytes); 15 | } else if (typeof bytes === 'string') { 16 | bytes = Buffer.from(bytes, 'utf8'); 17 | } 18 | 19 | return _crypto.default.createHash('sha1').update(bytes).digest(); 20 | } 21 | 22 | var _default = sha1; 23 | exports.default = _default; -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-browser/v4.js: -------------------------------------------------------------------------------- 1 | import rng from './rng.js'; 2 | import stringify from './stringify.js'; 3 | 4 | function v4(options, buf, offset) { 5 | options = options || {}; 6 | var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` 7 | 8 | rnds[6] = rnds[6] & 0x0f | 0x40; 9 | rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided 10 | 11 | if (buf) { 12 | offset = offset || 0; 13 | 14 | for (var i = 0; i < 16; ++i) { 15 | buf[offset + i] = rnds[i]; 16 | } 17 | 18 | return buf; 19 | } 20 | 21 | return stringify(rnds); 22 | } 23 | 24 | export default v4; -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-node/v4.js: -------------------------------------------------------------------------------- 1 | import rng from './rng.js'; 2 | import stringify from './stringify.js'; 3 | 4 | function v4(options, buf, offset) { 5 | options = options || {}; 6 | const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` 7 | 8 | rnds[6] = rnds[6] & 0x0f | 0x40; 9 | rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided 10 | 11 | if (buf) { 12 | offset = offset || 0; 13 | 14 | for (let i = 0; i < 16; ++i) { 15 | buf[offset + i] = rnds[i]; 16 | } 17 | 18 | return buf; 19 | } 20 | 21 | return stringify(rnds); 22 | } 23 | 24 | export default v4; -------------------------------------------------------------------------------- /client/src/svg/close.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/node_modules/qs/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | 4 | "extends": "@ljharb", 5 | 6 | "rules": { 7 | "complexity": 0, 8 | "consistent-return": 1, 9 | "func-name-matching": 0, 10 | "id-length": [2, { "min": 1, "max": 25, "properties": "never" }], 11 | "indent": [2, 4], 12 | "max-lines-per-function": [2, { "max": 150 }], 13 | "max-params": [2, 14], 14 | "max-statements": [2, 52], 15 | "multiline-comment-style": 0, 16 | "no-continue": 1, 17 | "no-magic-numbers": 0, 18 | "no-restricted-syntax": [2, "BreakStatement", "DebuggerStatement", "ForInStatement", "LabeledStatement", "WithStatement"], 19 | "operator-linebreak": [2, "before"], 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /skaffold.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: skaffold/v2alpha3 2 | kind: Config 3 | deploy: 4 | kubectl: 5 | manifests: 6 | - ./infra/k8s/* 7 | build: 8 | local: 9 | push: false 10 | artifacts: 11 | - image: laithharb/web-app 12 | context: client 13 | docker: 14 | dockerfile: Dockerfile 15 | sync: 16 | manual: 17 | - src: 'src/**/*.tsx' 18 | dest: . 19 | - src: 'src/**/*.ts' 20 | dest: . 21 | - src: 'src/**/*.css' 22 | dest: . 23 | - src: 'src/**/*.svg' 24 | dest: . 25 | - image: laithharb/server 26 | context: server 27 | docker: 28 | dockerfile: Dockerfile 29 | sync: 30 | manual: 31 | - src: 'src/**/*.js' 32 | dest: . -------------------------------------------------------------------------------- /server/node_modules/inherits/inherits_browser.js: -------------------------------------------------------------------------------- 1 | if (typeof Object.create === 'function') { 2 | // implementation from standard node.js 'util' module 3 | module.exports = function inherits(ctor, superCtor) { 4 | ctor.super_ = superCtor 5 | ctor.prototype = Object.create(superCtor.prototype, { 6 | constructor: { 7 | value: ctor, 8 | enumerable: false, 9 | writable: true, 10 | configurable: true 11 | } 12 | }); 13 | }; 14 | } else { 15 | // old school shim for old browsers 16 | module.exports = function inherits(ctor, superCtor) { 17 | ctor.super_ = superCtor 18 | var TempCtor = function () {} 19 | TempCtor.prototype = superCtor.prototype 20 | ctor.prototype = new TempCtor() 21 | ctor.prototype.constructor = ctor 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /server/node_modules/setprototypeof/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015, Wes Todd 2 | 3 | Permission to use, copy, modify, and/or distribute this software for any 4 | purpose with or without fee is hereby granted, provided that the above 5 | copyright notice and this permission notice appear in all copies. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 8 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 9 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 10 | SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 11 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 12 | OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 13 | CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 14 | -------------------------------------------------------------------------------- /server/node_modules/setprototypeof/test/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | /* eslint-env mocha */ 3 | /* eslint no-proto: 0 */ 4 | var assert = require('assert') 5 | var setPrototypeOf = require('..') 6 | 7 | describe('setProtoOf(obj, proto)', function () { 8 | it('should merge objects', function () { 9 | var obj = { a: 1, b: 2 } 10 | var proto = { b: 3, c: 4 } 11 | var mergeObj = setPrototypeOf(obj, proto) 12 | 13 | if (Object.getPrototypeOf) { 14 | assert.strictEqual(Object.getPrototypeOf(obj), proto) 15 | } else if ({ __proto__: [] } instanceof Array) { 16 | assert.strictEqual(obj.__proto__, proto) 17 | } else { 18 | assert.strictEqual(obj.a, 1) 19 | assert.strictEqual(obj.b, 2) 20 | assert.strictEqual(obj.c, 4) 21 | } 22 | assert.strictEqual(mergeObj, obj) 23 | }) 24 | }) 25 | -------------------------------------------------------------------------------- /server/node_modules/inherits/LICENSE: -------------------------------------------------------------------------------- 1 | The ISC License 2 | 3 | Copyright (c) Isaac Z. Schlueter 4 | 5 | Permission to use, copy, modify, and/or distribute this software for any 6 | purpose with or without fee is hereby granted, provided that the above 7 | copyright notice and this permission notice appear in all copies. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 10 | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND 11 | FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 12 | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 13 | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 14 | OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 15 | PERFORMANCE OF THIS SOFTWARE. 16 | 17 | -------------------------------------------------------------------------------- /server/node_modules/iconv-lite/encodings/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Update this array if you add/rename/remove files in this directory. 4 | // We support Browserify by skipping automatic module discovery and requiring modules directly. 5 | var modules = [ 6 | require("./internal"), 7 | require("./utf16"), 8 | require("./utf7"), 9 | require("./sbcs-codec"), 10 | require("./sbcs-data"), 11 | require("./sbcs-data-generated"), 12 | require("./dbcs-codec"), 13 | require("./dbcs-data"), 14 | ]; 15 | 16 | // Put all encoding/alias/codec definitions to single object and export it. 17 | for (var i = 0; i < modules.length; i++) { 18 | var module = modules[i]; 19 | for (var enc in module) 20 | if (Object.prototype.hasOwnProperty.call(module, enc)) 21 | exports[enc] = module[enc]; 22 | } 23 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/umd/uuidStringify.min.js: -------------------------------------------------------------------------------- 1 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidStringify=t()}(this,(function(){"use strict";var e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function t(t){return"string"==typeof t&&e.test(t)}for(var i=[],n=0;n<256;++n)i.push((n+256).toString(16).substr(1));return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,f=(i[e[n+0]]+i[e[n+1]]+i[e[n+2]]+i[e[n+3]]+"-"+i[e[n+4]]+i[e[n+5]]+"-"+i[e[n+6]]+i[e[n+7]]+"-"+i[e[n+8]]+i[e[n+9]]+"-"+i[e[n+10]]+i[e[n+11]]+i[e[n+12]]+i[e[n+13]]+i[e[n+14]]+i[e[n+15]]).toLowerCase();if(!t(f))throw TypeError("Stringified UUID is invalid");return f}})); -------------------------------------------------------------------------------- /server/node_modules/path-to-regexp/History.md: -------------------------------------------------------------------------------- 1 | 0.1.7 / 2015-07-28 2 | ================== 3 | 4 | * Fixed regression with escaped round brackets and matching groups. 5 | 6 | 0.1.6 / 2015-06-19 7 | ================== 8 | 9 | * Replace `index` feature by outputting all parameters, unnamed and named. 10 | 11 | 0.1.5 / 2015-05-08 12 | ================== 13 | 14 | * Add an index property for position in match result. 15 | 16 | 0.1.4 / 2015-03-05 17 | ================== 18 | 19 | * Add license information 20 | 21 | 0.1.3 / 2014-07-06 22 | ================== 23 | 24 | * Better array support 25 | * Improved support for trailing slash in non-ending mode 26 | 27 | 0.1.0 / 2014-03-06 28 | ================== 29 | 30 | * add options.end 31 | 32 | 0.0.2 / 2013-02-10 33 | ================== 34 | 35 | * Update to match current express 36 | * add .license property to component.json 37 | -------------------------------------------------------------------------------- /server/node_modules/cookie-signature/History.md: -------------------------------------------------------------------------------- 1 | 1.0.6 / 2015-02-03 2 | ================== 3 | 4 | * use `npm test` instead of `make test` to run tests 5 | * clearer assertion messages when checking input 6 | 7 | 8 | 1.0.5 / 2014-09-05 9 | ================== 10 | 11 | * add license to package.json 12 | 13 | 1.0.4 / 2014-06-25 14 | ================== 15 | 16 | * corrected avoidance of timing attacks (thanks @tenbits!) 17 | 18 | 1.0.3 / 2014-01-28 19 | ================== 20 | 21 | * [incorrect] fix for timing attacks 22 | 23 | 1.0.2 / 2014-01-28 24 | ================== 25 | 26 | * fix missing repository warning 27 | * fix typo in test 28 | 29 | 1.0.1 / 2013-04-15 30 | ================== 31 | 32 | * Revert "Changed underlying HMAC algo. to sha512." 33 | * Revert "Fix for timing attacks on MAC verification." 34 | 35 | 0.0.1 / 2010-01-03 36 | ================== 37 | 38 | * Initial release 39 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/umd/uuidParse.min.js: -------------------------------------------------------------------------------- 1 | !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidParse=n()}(this,(function(){"use strict";var e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;return function(n){if(!function(n){return"string"==typeof n&&e.test(n)}(n))throw TypeError("Invalid UUID");var t,i=new Uint8Array(16);return i[0]=(t=parseInt(n.slice(0,8),16))>>>24,i[1]=t>>>16&255,i[2]=t>>>8&255,i[3]=255&t,i[4]=(t=parseInt(n.slice(9,13),16))>>>8,i[5]=255&t,i[6]=(t=parseInt(n.slice(14,18),16))>>>8,i[7]=255&t,i[8]=(t=parseInt(n.slice(19,23),16))>>>8,i[9]=255&t,i[10]=(t=parseInt(n.slice(24,36),16))/1099511627776&255,i[11]=t/4294967296&255,i[12]=t>>>24&255,i[13]=t>>>16&255,i[14]=t>>>8&255,i[15]=255&t,i}})); -------------------------------------------------------------------------------- /server/node_modules/escape-html/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | # escape-html 3 | 4 | Escape string for use in HTML 5 | 6 | ## Example 7 | 8 | ```js 9 | var escape = require('escape-html'); 10 | var html = escape('foo & bar'); 11 | // -> foo & bar 12 | ``` 13 | 14 | ## Benchmark 15 | 16 | ``` 17 | $ npm run-script bench 18 | 19 | > escape-html@1.0.3 bench nodejs-escape-html 20 | > node benchmark/index.js 21 | 22 | 23 | http_parser@1.0 24 | node@0.10.33 25 | v8@3.14.5.9 26 | ares@1.9.0-DEV 27 | uv@0.10.29 28 | zlib@1.2.3 29 | modules@11 30 | openssl@1.0.1j 31 | 32 | 1 test completed. 33 | 2 tests completed. 34 | 3 tests completed. 35 | 36 | no special characters x 19,435,271 ops/sec ±0.85% (187 runs sampled) 37 | single special character x 6,132,421 ops/sec ±0.67% (194 runs sampled) 38 | many special characters x 3,175,826 ops/sec ±0.65% (193 runs sampled) 39 | ``` 40 | 41 | ## License 42 | 43 | MIT -------------------------------------------------------------------------------- /server/node_modules/vary/HISTORY.md: -------------------------------------------------------------------------------- 1 | 1.1.2 / 2017-09-23 2 | ================== 3 | 4 | * perf: improve header token parsing speed 5 | 6 | 1.1.1 / 2017-03-20 7 | ================== 8 | 9 | * perf: hoist regular expression 10 | 11 | 1.1.0 / 2015-09-29 12 | ================== 13 | 14 | * Only accept valid field names in the `field` argument 15 | - Ensures the resulting string is a valid HTTP header value 16 | 17 | 1.0.1 / 2015-07-08 18 | ================== 19 | 20 | * Fix setting empty header from empty `field` 21 | * perf: enable strict mode 22 | * perf: remove argument reassignments 23 | 24 | 1.0.0 / 2014-08-10 25 | ================== 26 | 27 | * Accept valid `Vary` header string as `field` 28 | * Add `vary.append` for low-level string manipulation 29 | * Move to `jshttp` orgainzation 30 | 31 | 0.1.0 / 2014-06-05 32 | ================== 33 | 34 | * Support array of fields to set 35 | 36 | 0.0.0 / 2014-06-04 37 | ================== 38 | 39 | * Initial release 40 | -------------------------------------------------------------------------------- /server/node_modules/setprototypeof/README.md: -------------------------------------------------------------------------------- 1 | # Polyfill for `Object.setPrototypeOf` 2 | 3 | [![NPM Version](https://img.shields.io/npm/v/setprototypeof.svg)](https://npmjs.org/package/setprototypeof) 4 | [![NPM Downloads](https://img.shields.io/npm/dm/setprototypeof.svg)](https://npmjs.org/package/setprototypeof) 5 | [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](https://github.com/standard/standard) 6 | 7 | A simple cross platform implementation to set the prototype of an instianted object. Supports all modern browsers and at least back to IE8. 8 | 9 | ## Usage: 10 | 11 | ``` 12 | $ npm install --save setprototypeof 13 | ``` 14 | 15 | ```javascript 16 | var setPrototypeOf = require('setprototypeof') 17 | 18 | var obj = {} 19 | setPrototypeOf(obj, { 20 | foo: function () { 21 | return 'bar' 22 | } 23 | }) 24 | obj.foo() // bar 25 | ``` 26 | 27 | TypeScript is also supported: 28 | 29 | ```typescript 30 | import setPrototypeOf = require('setprototypeof') 31 | ``` 32 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/v4.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = void 0; 7 | 8 | var _rng = _interopRequireDefault(require("./rng.js")); 9 | 10 | var _stringify = _interopRequireDefault(require("./stringify.js")); 11 | 12 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 13 | 14 | function v4(options, buf, offset) { 15 | options = options || {}; 16 | 17 | const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` 18 | 19 | 20 | rnds[6] = rnds[6] & 0x0f | 0x40; 21 | rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided 22 | 23 | if (buf) { 24 | offset = offset || 0; 25 | 26 | for (let i = 0; i < 16; ++i) { 27 | buf[offset + i] = rnds[i]; 28 | } 29 | 30 | return buf; 31 | } 32 | 33 | return (0, _stringify.default)(rnds); 34 | } 35 | 36 | var _default = v4; 37 | exports.default = _default; -------------------------------------------------------------------------------- /infra/k8s/mongo-depl.yaml: -------------------------------------------------------------------------------- 1 | 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | name: mongo-depl 6 | spec: 7 | replicas: 1 8 | selector: 9 | matchLabels: 10 | app: mongo 11 | template: 12 | metadata: 13 | labels: 14 | app: mongo 15 | spec: 16 | containers: 17 | - name: mongo 18 | image: mongo 19 | resources: 20 | requests: 21 | memory: 200Mi 22 | cpu: 100m 23 | limits: 24 | memory: 200Mi 25 | cpu: 100m 26 | volumeMounts: 27 | - name: mongo-storage 28 | mountPath: /data/db 29 | volumes: 30 | - name: mongo-storage 31 | persistentVolumeClaim: 32 | claimName: mongo-pvc 33 | 34 | --- 35 | 36 | apiVersion: v1 37 | kind: Service 38 | metadata: 39 | name: mongo-srv 40 | spec: 41 | selector: 42 | app: mongo 43 | ports: 44 | - name: db 45 | protocol: TCP 46 | port: 27017 47 | targetPort: 27017 -------------------------------------------------------------------------------- /infra/k8s/server-depl.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: server-depl 5 | spec: 6 | replicas: 1 7 | selector: 8 | matchLabels: 9 | app: server 10 | template: 11 | metadata: 12 | name: server-pod 13 | labels: 14 | app: server 15 | spec: 16 | containers: 17 | - name: server 18 | image: laithharb/server:v2 19 | resources: 20 | requests: 21 | memory: 200Mi 22 | cpu: 100m 23 | env: 24 | - name: MONGO_URL 25 | valueFrom: 26 | secretKeyRef: 27 | name: mongo-credentials 28 | key: mongo-url 29 | # name: MONGO_URL 30 | # value: mongodb://mongo-srv/habits 31 | 32 | --- 33 | 34 | apiVersion: v1 35 | kind: Service 36 | metadata: 37 | name: server-srv 38 | spec: 39 | type: NodePort 40 | selector: 41 | app: server 42 | ports: 43 | - protocol: TCP 44 | port: 3000 45 | targetPort: 3000 46 | nodePort: 30005 -------------------------------------------------------------------------------- /server/node_modules/express/lib/middleware/init.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * express 3 | * Copyright(c) 2009-2013 TJ Holowaychuk 4 | * Copyright(c) 2013 Roman Shtylman 5 | * Copyright(c) 2014-2015 Douglas Christopher Wilson 6 | * MIT Licensed 7 | */ 8 | 9 | 'use strict'; 10 | 11 | /** 12 | * Module dependencies. 13 | * @private 14 | */ 15 | 16 | var setPrototypeOf = require('setprototypeof') 17 | 18 | /** 19 | * Initialization middleware, exposing the 20 | * request and response to each other, as well 21 | * as defaulting the X-Powered-By header field. 22 | * 23 | * @param {Function} app 24 | * @return {Function} 25 | * @api private 26 | */ 27 | 28 | exports.init = function(app){ 29 | return function expressInit(req, res, next){ 30 | if (app.enabled('x-powered-by')) res.setHeader('X-Powered-By', 'Express'); 31 | req.res = res; 32 | res.req = req; 33 | req.next = next; 34 | 35 | setPrototypeOf(req, app.request) 36 | setPrototypeOf(res, app.response) 37 | 38 | res.locals = res.locals || Object.create(null); 39 | 40 | next(); 41 | }; 42 | }; 43 | 44 | -------------------------------------------------------------------------------- /server/node_modules/iconv-lite/lib/index.d.ts: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Licensed under the MIT License. 4 | * REQUIREMENT: This definition is dependent on the @types/node definition. 5 | * Install with `npm install @types/node --save-dev` 6 | *--------------------------------------------------------------------------------------------*/ 7 | 8 | declare module 'iconv-lite' { 9 | export function decode(buffer: Buffer, encoding: string, options?: Options): string; 10 | 11 | export function encode(content: string, encoding: string, options?: Options): Buffer; 12 | 13 | export function encodingExists(encoding: string): boolean; 14 | 15 | export function decodeStream(encoding: string, options?: Options): NodeJS.ReadWriteStream; 16 | 17 | export function encodeStream(encoding: string, options?: Options): NodeJS.ReadWriteStream; 18 | } 19 | 20 | export interface Options { 21 | stripBOM?: boolean; 22 | addBOM?: boolean; 23 | defaultEncoding?: string; 24 | } 25 | -------------------------------------------------------------------------------- /server/node_modules/express/lib/middleware/query.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * express 3 | * Copyright(c) 2009-2013 TJ Holowaychuk 4 | * Copyright(c) 2013 Roman Shtylman 5 | * Copyright(c) 2014-2015 Douglas Christopher Wilson 6 | * MIT Licensed 7 | */ 8 | 9 | 'use strict'; 10 | 11 | /** 12 | * Module dependencies. 13 | */ 14 | 15 | var merge = require('utils-merge') 16 | var parseUrl = require('parseurl'); 17 | var qs = require('qs'); 18 | 19 | /** 20 | * @param {Object} options 21 | * @return {Function} 22 | * @api public 23 | */ 24 | 25 | module.exports = function query(options) { 26 | var opts = merge({}, options) 27 | var queryparse = qs.parse; 28 | 29 | if (typeof options === 'function') { 30 | queryparse = options; 31 | opts = undefined; 32 | } 33 | 34 | if (opts !== undefined && opts.allowPrototypes === undefined) { 35 | // back-compat for qs module 36 | opts.allowPrototypes = true; 37 | } 38 | 39 | return function query(req, res, next){ 40 | if (!req.query) { 41 | var val = parseUrl(req).query; 42 | req.query = queryparse(val, opts); 43 | } 44 | 45 | next(); 46 | }; 47 | }; 48 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-browser/rng.js: -------------------------------------------------------------------------------- 1 | // Unique ID creation requires a high quality random # generator. In the browser we therefore 2 | // require the crypto API and do not support built-in fallback to lower quality random number 3 | // generators (like Math.random()). 4 | var getRandomValues; 5 | var rnds8 = new Uint8Array(16); 6 | export default function rng() { 7 | // lazy load so that environments that need to polyfill have a chance to do so 8 | if (!getRandomValues) { 9 | // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, 10 | // find the complete implementation of crypto (msCrypto) on IE11. 11 | getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); 12 | 13 | if (!getRandomValues) { 14 | throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); 15 | } 16 | } 17 | 18 | return getRandomValues(rnds8); 19 | } -------------------------------------------------------------------------------- /server/node_modules/uuid/LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2010-2020 Robert Kieffer and other contributors 4 | 5 | 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: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | 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. 10 | -------------------------------------------------------------------------------- /server/node_modules/iconv-lite/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011 Alexander Shtuchkin 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | 22 | -------------------------------------------------------------------------------- /server/node_modules/ms/license.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Zeit, Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /server/node_modules/ipaddr.js/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (C) 2011-2017 whitequark 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /server/node_modules/safe-buffer/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) Feross Aboukhadijeh 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /server/node_modules/utils-merge/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013-2017 Jared Hanson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /server/node_modules/debug/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2014 TJ Holowaychuk 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software 6 | and associated documentation files (the 'Software'), to deal in the Software without restriction, 7 | including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 | and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 9 | subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all copies or substantial 12 | portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 15 | LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 16 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 17 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 18 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | -------------------------------------------------------------------------------- /server/node_modules/depd/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2014-2017 Douglas Christopher Wilson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | 'Software'), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /server/node_modules/encodeurl/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2016 Douglas Christopher Wilson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | 'Software'), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /server/node_modules/etag/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2014-2016 Douglas Christopher Wilson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | 'Software'), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /server/node_modules/mime/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2010 Benjamin Thomas, Robert Kieffer 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /server/node_modules/send/node_modules/ms/license.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Zeit, Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /server/node_modules/vary/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2014-2017 Douglas Christopher Wilson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | 'Software'), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /server/node_modules/content-type/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2015 Douglas Christopher Wilson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | 'Software'), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /server/node_modules/forwarded/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2014-2017 Douglas Christopher Wilson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | 'Software'), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /server/node_modules/media-typer/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2014 Douglas Christopher Wilson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | 'Software'), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /server/node_modules/proxy-addr/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2014-2016 Douglas Christopher Wilson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | 'Software'), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /server/node_modules/range-parser/HISTORY.md: -------------------------------------------------------------------------------- 1 | 1.2.1 / 2019-05-10 2 | ================== 3 | 4 | * Improve error when `str` is not a string 5 | 6 | 1.2.0 / 2016-06-01 7 | ================== 8 | 9 | * Add `combine` option to combine overlapping ranges 10 | 11 | 1.1.0 / 2016-05-13 12 | ================== 13 | 14 | * Fix incorrectly returning -1 when there is at least one valid range 15 | * perf: remove internal function 16 | 17 | 1.0.3 / 2015-10-29 18 | ================== 19 | 20 | * perf: enable strict mode 21 | 22 | 1.0.2 / 2014-09-08 23 | ================== 24 | 25 | * Support Node.js 0.6 26 | 27 | 1.0.1 / 2014-09-07 28 | ================== 29 | 30 | * Move repository to jshttp 31 | 32 | 1.0.0 / 2013-12-11 33 | ================== 34 | 35 | * Add repository to package.json 36 | * Add MIT license 37 | 38 | 0.0.4 / 2012-06-17 39 | ================== 40 | 41 | * Change ret -1 for unsatisfiable and -2 when invalid 42 | 43 | 0.0.3 / 2012-06-17 44 | ================== 45 | 46 | * Fix last-byte-pos default to len - 1 47 | 48 | 0.0.2 / 2012-06-14 49 | ================== 50 | 51 | * Add `.type` 52 | 53 | 0.0.1 / 2012-06-11 54 | ================== 55 | 56 | * Initial release 57 | -------------------------------------------------------------------------------- /server/node_modules/safer-buffer/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Nikita Skovoroda 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /server/node_modules/destroy/LICENSE: -------------------------------------------------------------------------------- 1 | 2 | The MIT License (MIT) 3 | 4 | Copyright (c) 2014 Jonathan Ong me@jongleberry.com 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /server/node_modules/ee-first/LICENSE: -------------------------------------------------------------------------------- 1 | 2 | The MIT License (MIT) 3 | 4 | Copyright (c) 2014 Jonathan Ong me@jongleberry.com 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /server/node_modules/mime-db/LICENSE: -------------------------------------------------------------------------------- 1 | 2 | The MIT License (MIT) 3 | 4 | Copyright (c) 2014 Jonathan Ong me@jongleberry.com 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /server/node_modules/array-flatten/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /server/node_modules/content-disposition/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2014-2017 Douglas Christopher Wilson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | 'Software'), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /server/node_modules/path-to-regexp/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /server/node_modules/toidentifier/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Douglas Christopher Wilson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /server/node_modules/unpipe/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2015 Douglas Christopher Wilson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | 'Software'), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /server/node_modules/finalhandler/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2014-2017 Douglas Christopher Wilson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | 'Software'), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /server/node_modules/content-disposition/HISTORY.md: -------------------------------------------------------------------------------- 1 | 0.5.3 / 2018-12-17 2 | ================== 3 | 4 | * Use `safe-buffer` for improved Buffer API 5 | 6 | 0.5.2 / 2016-12-08 7 | ================== 8 | 9 | * Fix `parse` to accept any linear whitespace character 10 | 11 | 0.5.1 / 2016-01-17 12 | ================== 13 | 14 | * perf: enable strict mode 15 | 16 | 0.5.0 / 2014-10-11 17 | ================== 18 | 19 | * Add `parse` function 20 | 21 | 0.4.0 / 2014-09-21 22 | ================== 23 | 24 | * Expand non-Unicode `filename` to the full ISO-8859-1 charset 25 | 26 | 0.3.0 / 2014-09-20 27 | ================== 28 | 29 | * Add `fallback` option 30 | * Add `type` option 31 | 32 | 0.2.0 / 2014-09-19 33 | ================== 34 | 35 | * Reduce ambiguity of file names with hex escape in buggy browsers 36 | 37 | 0.1.2 / 2014-09-19 38 | ================== 39 | 40 | * Fix periodic invalid Unicode filename header 41 | 42 | 0.1.1 / 2014-09-19 43 | ================== 44 | 45 | * Fix invalid characters appearing in `filename*` parameter 46 | 47 | 0.1.0 / 2014-09-18 48 | ================== 49 | 50 | * Make the `filename` argument optional 51 | 52 | 0.0.0 / 2014-09-18 53 | ================== 54 | 55 | * Initial release 56 | -------------------------------------------------------------------------------- /server/node_modules/send/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2012 TJ Holowaychuk 4 | Copyright (c) 2014-2016 Douglas Christopher Wilson 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining 7 | a copy of this software and associated documentation files (the 8 | 'Software'), to deal in the Software without restriction, including 9 | without limitation the rights to use, copy, modify, merge, publish, 10 | distribute, sublicense, and/or sell copies of the Software, and to 11 | permit persons to whom the Software is furnished to do so, subject to 12 | the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be 15 | included in all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 20 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 21 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /server/node_modules/iconv-lite/encodings/tables/gbk-added.json: -------------------------------------------------------------------------------- 1 | [ 2 | ["a140","",62], 3 | ["a180","",32], 4 | ["a240","",62], 5 | ["a280","",32], 6 | ["a2ab","",5], 7 | ["a2e3","€"], 8 | ["a2ef",""], 9 | ["a2fd",""], 10 | ["a340","",62], 11 | ["a380","",31," "], 12 | ["a440","",62], 13 | ["a480","",32], 14 | ["a4f4","",10], 15 | ["a540","",62], 16 | ["a580","",32], 17 | ["a5f7","",7], 18 | ["a640","",62], 19 | ["a680","",32], 20 | ["a6b9","",7], 21 | ["a6d9","",6], 22 | ["a6ec",""], 23 | ["a6f3",""], 24 | ["a6f6","",8], 25 | ["a740","",62], 26 | ["a780","",32], 27 | ["a7c2","",14], 28 | ["a7f2","",12], 29 | ["a896","",10], 30 | ["a8bc",""], 31 | ["a8bf","ǹ"], 32 | ["a8c1",""], 33 | ["a8ea","",20], 34 | ["a958",""], 35 | ["a95b",""], 36 | ["a95d",""], 37 | ["a989","〾⿰",11], 38 | ["a997","",12], 39 | ["a9f0","",14], 40 | ["aaa1","",93], 41 | ["aba1","",93], 42 | ["aca1","",93], 43 | ["ada1","",93], 44 | ["aea1","",93], 45 | ["afa1","",93], 46 | ["d7fa","",4], 47 | ["f8a1","",93], 48 | ["f9a1","",93], 49 | ["faa1","",93], 50 | ["fba1","",93], 51 | ["fca1","",93], 52 | ["fda1","",93], 53 | ["fe50","⺁⺄㑳㑇⺈⺋㖞㘚㘎⺌⺗㥮㤘㧏㧟㩳㧐㭎㱮㳠⺧⺪䁖䅟⺮䌷⺳⺶⺷䎱䎬⺻䏝䓖䙡䙌"], 54 | ["fe80","䜣䜩䝼䞍⻊䥇䥺䥽䦂䦃䦅䦆䦟䦛䦷䦶䲣䲟䲠䲡䱷䲢䴓",6,"䶮",93] 55 | ] 56 | -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@testing-library/jest-dom": "^5.11.4", 7 | "@testing-library/react": "^11.1.0", 8 | "@testing-library/user-event": "^12.1.10", 9 | "@types/jest": "^26.0.15", 10 | "@types/node": "^12.0.0", 11 | "@types/react": "^17.0.4", 12 | "@types/react-dom": "^17.0.0", 13 | "axios": "^0.21.1", 14 | "bootstrap": "^4.6.0", 15 | "react": "^17.0.2", 16 | "react-bootstrap": "^1.5.2", 17 | "react-dom": "^17.0.2", 18 | "react-scripts": "4.0.3", 19 | "typescript": "^4.1.2", 20 | "web-vitals": "^1.0.1" 21 | }, 22 | "scripts": { 23 | "start": "react-scripts start", 24 | "build": "react-scripts build", 25 | "test": "react-scripts test", 26 | "eject": "react-scripts eject" 27 | }, 28 | "eslintConfig": { 29 | "extends": [ 30 | "react-app", 31 | "react-app/jest" 32 | ] 33 | }, 34 | "browserslist": { 35 | "production": [ 36 | ">0.2%", 37 | "not dead", 38 | "not op_mini all" 39 | ], 40 | "development": [ 41 | "last 1 chrome version", 42 | "last 1 firefox version", 43 | "last 1 safari version" 44 | ] 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /server/node_modules/bytes/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2012-2014 TJ Holowaychuk 4 | Copyright (c) 2015 Jed Watson 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining 7 | a copy of this software and associated documentation files (the 8 | 'Software'), to deal in the Software without restriction, including 9 | without limitation the rights to use, copy, modify, merge, publish, 10 | distribute, sublicense, and/or sell copies of the Software, and to 11 | permit persons to whom the Software is furnished to do so, subject to 12 | the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be 15 | included in all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 20 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 21 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/rng-browser.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = rng; 7 | // Unique ID creation requires a high quality random # generator. In the browser we therefore 8 | // require the crypto API and do not support built-in fallback to lower quality random number 9 | // generators (like Math.random()). 10 | let getRandomValues; 11 | const rnds8 = new Uint8Array(16); 12 | 13 | function rng() { 14 | // lazy load so that environments that need to polyfill have a chance to do so 15 | if (!getRandomValues) { 16 | // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, 17 | // find the complete implementation of crypto (msCrypto) on IE11. 18 | getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); 19 | 20 | if (!getRandomValues) { 21 | throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); 22 | } 23 | } 24 | 25 | return getRandomValues(rnds8); 26 | } -------------------------------------------------------------------------------- /server/node_modules/accepts/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2014 Jonathan Ong 4 | Copyright (c) 2015 Douglas Christopher Wilson 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining 7 | a copy of this software and associated documentation files (the 8 | 'Software'), to deal in the Software without restriction, including 9 | without limitation the rights to use, copy, modify, merge, publish, 10 | distribute, sublicense, and/or sell copies of the Software, and to 11 | permit persons to whom the Software is furnished to do so, subject to 12 | the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be 15 | included in all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 20 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 21 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /server/node_modules/escape-html/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2012-2013 TJ Holowaychuk 4 | Copyright (c) 2015 Andreas Lubbe 5 | Copyright (c) 2015 Tiancheng "Timothy" Gu 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining 8 | a copy of this software and associated documentation files (the 9 | 'Software'), to deal in the Software without restriction, including 10 | without limitation the rights to use, copy, modify, merge, publish, 11 | distribute, sublicense, and/or sell copies of the Software, and to 12 | permit persons to whom the Software is furnished to do so, subject to 13 | the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be 16 | included in all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 19 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 21 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 22 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25 | -------------------------------------------------------------------------------- /server/node_modules/fresh/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2012 TJ Holowaychuk 4 | Copyright (c) 2016-2017 Douglas Christopher Wilson 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining 7 | a copy of this software and associated documentation files (the 8 | 'Software'), to deal in the Software without restriction, including 9 | without limitation the rights to use, copy, modify, merge, publish, 10 | distribute, sublicense, and/or sell copies of the Software, and to 11 | permit persons to whom the Software is furnished to do so, subject to 12 | the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be 15 | included in all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 20 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 21 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /server/node_modules/http-errors/LICENSE: -------------------------------------------------------------------------------- 1 | 2 | The MIT License (MIT) 3 | 4 | Copyright (c) 2014 Jonathan Ong me@jongleberry.com 5 | Copyright (c) 2016 Douglas Christopher Wilson doug@somethingdoug.com 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in 15 | all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 | THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /server/node_modules/mime-types/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2014 Jonathan Ong 4 | Copyright (c) 2015 Douglas Christopher Wilson 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining 7 | a copy of this software and associated documentation files (the 8 | 'Software'), to deal in the Software without restriction, including 9 | without limitation the rights to use, copy, modify, merge, publish, 10 | distribute, sublicense, and/or sell copies of the Software, and to 11 | permit persons to whom the Software is furnished to do so, subject to 12 | the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be 15 | included in all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 20 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 21 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /server/node_modules/on-finished/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2013 Jonathan Ong 4 | Copyright (c) 2014 Douglas Christopher Wilson 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining 7 | a copy of this software and associated documentation files (the 8 | 'Software'), to deal in the Software without restriction, including 9 | without limitation the rights to use, copy, modify, merge, publish, 10 | distribute, sublicense, and/or sell copies of the Software, and to 11 | permit persons to whom the Software is furnished to do so, subject to 12 | the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be 15 | included in all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 20 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 21 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /server/node_modules/path-to-regexp/Readme.md: -------------------------------------------------------------------------------- 1 | # Path-to-RegExp 2 | 3 | Turn an Express-style path string such as `/user/:name` into a regular expression. 4 | 5 | **Note:** This is a legacy branch. You should upgrade to `1.x`. 6 | 7 | ## Usage 8 | 9 | ```javascript 10 | var pathToRegexp = require('path-to-regexp'); 11 | ``` 12 | 13 | ### pathToRegexp(path, keys, options) 14 | 15 | - **path** A string in the express format, an array of such strings, or a regular expression 16 | - **keys** An array to be populated with the keys present in the url. Once the function completes, this will be an array of strings. 17 | - **options** 18 | - **options.sensitive** Defaults to false, set this to true to make routes case sensitive 19 | - **options.strict** Defaults to false, set this to true to make the trailing slash matter. 20 | - **options.end** Defaults to true, set this to false to only match the prefix of the URL. 21 | 22 | ```javascript 23 | var keys = []; 24 | var exp = pathToRegexp('/foo/:bar', keys); 25 | //keys = ['bar'] 26 | //exp = /^\/foo\/(?:([^\/]+?))\/?$/i 27 | ``` 28 | 29 | ## Live Demo 30 | 31 | You can see a live demo of this library in use at [express-route-tester](http://forbeslindesay.github.com/express-route-tester/). 32 | 33 | ## License 34 | 35 | MIT 36 | -------------------------------------------------------------------------------- /server/node_modules/type-is/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2014 Jonathan Ong 4 | Copyright (c) 2014-2015 Douglas Christopher Wilson 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining 7 | a copy of this software and associated documentation files (the 8 | 'Software'), to deal in the Software without restriction, including 9 | without limitation the rights to use, copy, modify, merge, publish, 10 | distribute, sublicense, and/or sell copies of the Software, and to 11 | permit persons to whom the Software is furnished to do so, subject to 12 | the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be 15 | included in all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 20 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 21 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /server/node_modules/body-parser/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2014 Jonathan Ong 4 | Copyright (c) 2014-2015 Douglas Christopher Wilson 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining 7 | a copy of this software and associated documentation files (the 8 | 'Software'), to deal in the Software without restriction, including 9 | without limitation the rights to use, copy, modify, merge, publish, 10 | distribute, sublicense, and/or sell copies of the Software, and to 11 | permit persons to whom the Software is furnished to do so, subject to 12 | the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be 15 | included in all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 20 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 21 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /server/node_modules/merge-descriptors/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2013 Jonathan Ong 4 | Copyright (c) 2015 Douglas Christopher Wilson 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining 7 | a copy of this software and associated documentation files (the 8 | 'Software'), to deal in the Software without restriction, including 9 | without limitation the rights to use, copy, modify, merge, publish, 10 | distribute, sublicense, and/or sell copies of the Software, and to 11 | permit persons to whom the Software is furnished to do so, subject to 12 | the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be 15 | included in all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 20 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 21 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /server/node_modules/raw-body/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013-2014 Jonathan Ong 4 | Copyright (c) 2014-2015 Douglas Christopher Wilson 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /server/node_modules/statuses/LICENSE: -------------------------------------------------------------------------------- 1 | 2 | The MIT License (MIT) 3 | 4 | Copyright (c) 2014 Jonathan Ong 5 | Copyright (c) 2016 Douglas Christopher Wilson 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in 15 | all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 | THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-browser/parse.js: -------------------------------------------------------------------------------- 1 | import validate from './validate.js'; 2 | 3 | function parse(uuid) { 4 | if (!validate(uuid)) { 5 | throw TypeError('Invalid UUID'); 6 | } 7 | 8 | var v; 9 | var arr = new Uint8Array(16); // Parse ########-....-....-....-............ 10 | 11 | arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; 12 | arr[1] = v >>> 16 & 0xff; 13 | arr[2] = v >>> 8 & 0xff; 14 | arr[3] = v & 0xff; // Parse ........-####-....-....-............ 15 | 16 | arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; 17 | arr[5] = v & 0xff; // Parse ........-....-####-....-............ 18 | 19 | arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; 20 | arr[7] = v & 0xff; // Parse ........-....-....-####-............ 21 | 22 | arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; 23 | arr[9] = v & 0xff; // Parse ........-....-....-....-############ 24 | // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) 25 | 26 | arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; 27 | arr[11] = v / 0x100000000 & 0xff; 28 | arr[12] = v >>> 24 & 0xff; 29 | arr[13] = v >>> 16 & 0xff; 30 | arr[14] = v >>> 8 & 0xff; 31 | arr[15] = v & 0xff; 32 | return arr; 33 | } 34 | 35 | export default parse; -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-node/parse.js: -------------------------------------------------------------------------------- 1 | import validate from './validate.js'; 2 | 3 | function parse(uuid) { 4 | if (!validate(uuid)) { 5 | throw TypeError('Invalid UUID'); 6 | } 7 | 8 | let v; 9 | const arr = new Uint8Array(16); // Parse ########-....-....-....-............ 10 | 11 | arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; 12 | arr[1] = v >>> 16 & 0xff; 13 | arr[2] = v >>> 8 & 0xff; 14 | arr[3] = v & 0xff; // Parse ........-####-....-....-............ 15 | 16 | arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; 17 | arr[5] = v & 0xff; // Parse ........-....-####-....-............ 18 | 19 | arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; 20 | arr[7] = v & 0xff; // Parse ........-....-....-####-............ 21 | 22 | arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; 23 | arr[9] = v & 0xff; // Parse ........-....-....-....-############ 24 | // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) 25 | 26 | arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; 27 | arr[11] = v / 0x100000000 & 0xff; 28 | arr[12] = v >>> 24 & 0xff; 29 | arr[13] = v >>> 16 & 0xff; 30 | arr[14] = v >>> 8 & 0xff; 31 | arr[15] = v & 0xff; 32 | return arr; 33 | } 34 | 35 | export default parse; -------------------------------------------------------------------------------- /server/node_modules/cookie/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2012-2014 Roman Shtylman 4 | Copyright (c) 2015 Douglas Christopher Wilson 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining 7 | a copy of this software and associated documentation files (the 8 | 'Software'), to deal in the Software without restriction, including 9 | without limitation the rights to use, copy, modify, merge, publish, 10 | distribute, sublicense, and/or sell copies of the Software, and to 11 | permit persons to whom the Software is furnished to do so, subject to 12 | the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be 15 | included in all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 20 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 21 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 | 25 | -------------------------------------------------------------------------------- /server/node_modules/parseurl/LICENSE: -------------------------------------------------------------------------------- 1 | 2 | (The MIT License) 3 | 4 | Copyright (c) 2014 Jonathan Ong 5 | Copyright (c) 2014-2017 Douglas Christopher Wilson 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining 8 | a copy of this software and associated documentation files (the 9 | 'Software'), to deal in the Software without restriction, including 10 | without limitation the rights to use, copy, modify, merge, publish, 11 | distribute, sublicense, and/or sell copies of the Software, and to 12 | permit persons to whom the Software is furnished to do so, subject to 13 | the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be 16 | included in all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 19 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 21 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 22 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25 | -------------------------------------------------------------------------------- /server/src/index.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const { v4 } = require("uuid") 3 | const mongoose = require("mongoose") 4 | const app = express(); 5 | app.use(express.json()); 6 | 7 | const Habit = mongoose.model('Habit', { 8 | completed: Boolean, 9 | habit: String 10 | }); 11 | 12 | app.get("/api", (req, res) => { 13 | res.send("This is habit app API") 14 | }); 15 | 16 | app.post("/api/habit", async (req, res) => { 17 | const { habit } = req.body; 18 | const newHabit = new Habit({ 19 | habit: habit.habit, 20 | completed: habit.completed 21 | }) 22 | await newHabit.save() 23 | res.send(newHabit) 24 | }); 25 | 26 | app.get("/api/habits", async (req, res) => { 27 | const habits = await Habit.find({}) 28 | res.json(habits) 29 | }); 30 | 31 | const main = async () => { 32 | 33 | try { 34 | await mongoose.connect(process.env.MONGO_URL, { 35 | useNewUrlParser: true, 36 | useUnifiedTopology: true, 37 | useCreateIndex: true 38 | }); 39 | console.log("connected to mongodb") 40 | } catch (error) { 41 | console.log(error) 42 | } 43 | 44 | app.listen(3000, () => { 45 | console.log('Listening on port 3000!!') 46 | }) 47 | } 48 | 49 | main() 50 | -------------------------------------------------------------------------------- /server/node_modules/methods/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2013-2014 TJ Holowaychuk 4 | Copyright (c) 2015-2016 Douglas Christopher Wilson 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining 7 | a copy of this software and associated documentation files (the 8 | 'Software'), to deal in the Software without restriction, including 9 | without limitation the rights to use, copy, modify, merge, publish, 10 | distribute, sublicense, and/or sell copies of the Software, and to 11 | permit persons to whom the Software is furnished to do so, subject to 12 | the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be 15 | included in all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 20 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 21 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 | 25 | -------------------------------------------------------------------------------- /server/node_modules/negotiator/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2012-2014 Federico Romero 4 | Copyright (c) 2012-2014 Isaac Z. Schlueter 5 | Copyright (c) 2014-2015 Douglas Christopher Wilson 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining 8 | a copy of this software and associated documentation files (the 9 | 'Software'), to deal in the Software without restriction, including 10 | without limitation the rights to use, copy, modify, merge, publish, 11 | distribute, sublicense, and/or sell copies of the Software, and to 12 | permit persons to whom the Software is furnished to do so, subject to 13 | the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be 16 | included in all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 19 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 21 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 22 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25 | -------------------------------------------------------------------------------- /server/node_modules/range-parser/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2012-2014 TJ Holowaychuk 4 | Copyright (c) 2015-2016 Douglas Christopher Wilson dist/debug.js 38 | 39 | karma start --single-run 40 | rimraf dist 41 | 42 | test: .FORCE 43 | concurrently \ 44 | "make test-node" \ 45 | "make test-browser" 46 | 47 | coveralls: 48 | cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js 49 | 50 | .PHONY: all install clean distclean 51 | -------------------------------------------------------------------------------- /server/node_modules/serve-static/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2010 Sencha Inc. 4 | Copyright (c) 2011 LearnBoost 5 | Copyright (c) 2011 TJ Holowaychuk 6 | Copyright (c) 2014-2016 Douglas Christopher Wilson 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining 9 | a copy of this software and associated documentation files (the 10 | 'Software'), to deal in the Software without restriction, including 11 | without limitation the rights to use, copy, modify, merge, publish, 12 | distribute, sublicense, and/or sell copies of the Software, and to 13 | permit persons to whom the Software is furnished to do so, subject to 14 | the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 21 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 22 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 23 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 24 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 25 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 26 | -------------------------------------------------------------------------------- /server/node_modules/parseurl/HISTORY.md: -------------------------------------------------------------------------------- 1 | 1.3.3 / 2019-04-15 2 | ================== 3 | 4 | * Fix Node.js 0.8 return value inconsistencies 5 | 6 | 1.3.2 / 2017-09-09 7 | ================== 8 | 9 | * perf: reduce overhead for full URLs 10 | * perf: unroll the "fast-path" `RegExp` 11 | 12 | 1.3.1 / 2016-01-17 13 | ================== 14 | 15 | * perf: enable strict mode 16 | 17 | 1.3.0 / 2014-08-09 18 | ================== 19 | 20 | * Add `parseurl.original` for parsing `req.originalUrl` with fallback 21 | * Return `undefined` if `req.url` is `undefined` 22 | 23 | 1.2.0 / 2014-07-21 24 | ================== 25 | 26 | * Cache URLs based on original value 27 | * Remove no-longer-needed URL mis-parse work-around 28 | * Simplify the "fast-path" `RegExp` 29 | 30 | 1.1.3 / 2014-07-08 31 | ================== 32 | 33 | * Fix typo 34 | 35 | 1.1.2 / 2014-07-08 36 | ================== 37 | 38 | * Seriously fix Node.js 0.8 compatibility 39 | 40 | 1.1.1 / 2014-07-08 41 | ================== 42 | 43 | * Fix Node.js 0.8 compatibility 44 | 45 | 1.1.0 / 2014-07-08 46 | ================== 47 | 48 | * Incorporate URL href-only parse fast-path 49 | 50 | 1.0.1 / 2014-03-08 51 | ================== 52 | 53 | * Add missing `require` 54 | 55 | 1.0.0 / 2014-03-08 56 | ================== 57 | 58 | * Genesis from `connect` 59 | -------------------------------------------------------------------------------- /server/node_modules/statuses/HISTORY.md: -------------------------------------------------------------------------------- 1 | 1.5.0 / 2018-03-27 2 | ================== 3 | 4 | * Add `103 Early Hints` 5 | 6 | 1.4.0 / 2017-10-20 7 | ================== 8 | 9 | * Add `STATUS_CODES` export 10 | 11 | 1.3.1 / 2016-11-11 12 | ================== 13 | 14 | * Fix return type in JSDoc 15 | 16 | 1.3.0 / 2016-05-17 17 | ================== 18 | 19 | * Add `421 Misdirected Request` 20 | * perf: enable strict mode 21 | 22 | 1.2.1 / 2015-02-01 23 | ================== 24 | 25 | * Fix message for status 451 26 | - `451 Unavailable For Legal Reasons` 27 | 28 | 1.2.0 / 2014-09-28 29 | ================== 30 | 31 | * Add `208 Already Repored` 32 | * Add `226 IM Used` 33 | * Add `306 (Unused)` 34 | * Add `415 Unable For Legal Reasons` 35 | * Add `508 Loop Detected` 36 | 37 | 1.1.1 / 2014-09-24 38 | ================== 39 | 40 | * Add missing 308 to `codes.json` 41 | 42 | 1.1.0 / 2014-09-21 43 | ================== 44 | 45 | * Add `codes.json` for universal support 46 | 47 | 1.0.4 / 2014-08-20 48 | ================== 49 | 50 | * Package cleanup 51 | 52 | 1.0.3 / 2014-06-08 53 | ================== 54 | 55 | * Add 308 to `.redirect` category 56 | 57 | 1.0.2 / 2014-03-13 58 | ================== 59 | 60 | * Add `.retry` category 61 | 62 | 1.0.1 / 2014-03-12 63 | ================== 64 | 65 | * Initial release 66 | -------------------------------------------------------------------------------- /client/src/components/Habit/Habit.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState, useEffect } from 'react' 2 | import HabitCard from '../HabitCard/HabitCard' 3 | import Modal from "../Modal/Modal" 4 | import "./Habit.css" 5 | import axios from "axios" 6 | 7 | type IState = { 8 | _id: string; 9 | habit: string; 10 | completed: boolean; 11 | }[] 12 | 13 | function Habit() { 14 | 15 | const [habits, setHabits] = useState([]); 16 | 17 | useEffect(() => { 18 | fetchHabits() 19 | }, []) 20 | 21 | const fetchHabits = async () => { 22 | let response: { 23 | data: IState 24 | } = await axios.get("/api/habits"); 25 | setHabits(response.data) 26 | } 27 | 28 | return ( 29 |
    30 |
    31 |

    Habit Checklist

    32 | 36 |
    37 |
    38 | {habits.map(habit => { 39 | return 40 | })} 41 |
    42 |
    43 | ) 44 | } 45 | 46 | export default Habit 47 | -------------------------------------------------------------------------------- /server/node_modules/express/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2009-2014 TJ Holowaychuk 4 | Copyright (c) 2013-2014 Roman Shtylman 5 | Copyright (c) 2014-2015 Douglas Christopher Wilson 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining 8 | a copy of this software and associated documentation files (the 9 | 'Software'), to deal in the Software without restriction, including 10 | without limitation the rights to use, copy, modify, merge, publish, 11 | distribute, sublicense, and/or sell copies of the Software, and to 12 | permit persons to whom the Software is furnished to do so, subject to 13 | the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be 16 | included in all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 19 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 21 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 22 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/umd/uuidv4.min.js: -------------------------------------------------------------------------------- 1 | !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).uuidv4=e()}(this,(function(){"use strict";var t,e=new Uint8Array(16);function o(){if(!t&&!(t="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return t(e)}var n=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function r(t){return"string"==typeof t&&n.test(t)}for(var i=[],u=0;u<256;++u)i.push((u+256).toString(16).substr(1));return function(t,e,n){var u=(t=t||{}).random||(t.rng||o)();if(u[6]=15&u[6]|64,u[8]=63&u[8]|128,e){n=n||0;for(var f=0;f<16;++f)e[n+f]=u[f];return e}return function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=(i[t[e+0]]+i[t[e+1]]+i[t[e+2]]+i[t[e+3]]+"-"+i[t[e+4]]+i[t[e+5]]+"-"+i[t[e+6]]+i[t[e+7]]+"-"+i[t[e+8]]+i[t[e+9]]+"-"+i[t[e+10]]+i[t[e+11]]+i[t[e+12]]+i[t[e+13]]+i[t[e+14]]+i[t[e+15]]).toLowerCase();if(!r(o))throw TypeError("Stringified UUID is invalid");return o}(u)}})); -------------------------------------------------------------------------------- /server/node_modules/iconv-lite/lib/bom-handling.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var BOMChar = '\uFEFF'; 4 | 5 | exports.PrependBOM = PrependBOMWrapper 6 | function PrependBOMWrapper(encoder, options) { 7 | this.encoder = encoder; 8 | this.addBOM = true; 9 | } 10 | 11 | PrependBOMWrapper.prototype.write = function(str) { 12 | if (this.addBOM) { 13 | str = BOMChar + str; 14 | this.addBOM = false; 15 | } 16 | 17 | return this.encoder.write(str); 18 | } 19 | 20 | PrependBOMWrapper.prototype.end = function() { 21 | return this.encoder.end(); 22 | } 23 | 24 | 25 | //------------------------------------------------------------------------------ 26 | 27 | exports.StripBOM = StripBOMWrapper; 28 | function StripBOMWrapper(decoder, options) { 29 | this.decoder = decoder; 30 | this.pass = false; 31 | this.options = options || {}; 32 | } 33 | 34 | StripBOMWrapper.prototype.write = function(buf) { 35 | var res = this.decoder.write(buf); 36 | if (this.pass || !res) 37 | return res; 38 | 39 | if (res[0] === BOMChar) { 40 | res = res.slice(1); 41 | if (typeof this.options.stripBOM === 'function') 42 | this.options.stripBOM(); 43 | } 44 | 45 | this.pass = true; 46 | return res; 47 | } 48 | 49 | StripBOMWrapper.prototype.end = function() { 50 | return this.decoder.end(); 51 | } 52 | 53 | -------------------------------------------------------------------------------- /server/node_modules/methods/index.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * methods 3 | * Copyright(c) 2013-2014 TJ Holowaychuk 4 | * Copyright(c) 2015-2016 Douglas Christopher Wilson 5 | * MIT Licensed 6 | */ 7 | 8 | 'use strict'; 9 | 10 | /** 11 | * Module dependencies. 12 | * @private 13 | */ 14 | 15 | var http = require('http'); 16 | 17 | /** 18 | * Module exports. 19 | * @public 20 | */ 21 | 22 | module.exports = getCurrentNodeMethods() || getBasicNodeMethods(); 23 | 24 | /** 25 | * Get the current Node.js methods. 26 | * @private 27 | */ 28 | 29 | function getCurrentNodeMethods() { 30 | return http.METHODS && http.METHODS.map(function lowerCaseMethod(method) { 31 | return method.toLowerCase(); 32 | }); 33 | } 34 | 35 | /** 36 | * Get the "basic" Node.js methods, a snapshot from Node.js 0.10. 37 | * @private 38 | */ 39 | 40 | function getBasicNodeMethods() { 41 | return [ 42 | 'get', 43 | 'post', 44 | 'put', 45 | 'head', 46 | 'delete', 47 | 'options', 48 | 'trace', 49 | 'copy', 50 | 'lock', 51 | 'mkcol', 52 | 'move', 53 | 'purge', 54 | 'propfind', 55 | 'proppatch', 56 | 'unlock', 57 | 'report', 58 | 'mkactivity', 59 | 'checkout', 60 | 'merge', 61 | 'm-search', 62 | 'notify', 63 | 'subscribe', 64 | 'unsubscribe', 65 | 'patch', 66 | 'search', 67 | 'connect' 68 | ]; 69 | } 70 | -------------------------------------------------------------------------------- /server/node_modules/destroy/index.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * destroy 3 | * Copyright(c) 2014 Jonathan Ong 4 | * MIT Licensed 5 | */ 6 | 7 | 'use strict' 8 | 9 | /** 10 | * Module dependencies. 11 | * @private 12 | */ 13 | 14 | var ReadStream = require('fs').ReadStream 15 | var Stream = require('stream') 16 | 17 | /** 18 | * Module exports. 19 | * @public 20 | */ 21 | 22 | module.exports = destroy 23 | 24 | /** 25 | * Destroy a stream. 26 | * 27 | * @param {object} stream 28 | * @public 29 | */ 30 | 31 | function destroy(stream) { 32 | if (stream instanceof ReadStream) { 33 | return destroyReadStream(stream) 34 | } 35 | 36 | if (!(stream instanceof Stream)) { 37 | return stream 38 | } 39 | 40 | if (typeof stream.destroy === 'function') { 41 | stream.destroy() 42 | } 43 | 44 | return stream 45 | } 46 | 47 | /** 48 | * Destroy a ReadStream. 49 | * 50 | * @param {object} stream 51 | * @private 52 | */ 53 | 54 | function destroyReadStream(stream) { 55 | stream.destroy() 56 | 57 | if (typeof stream.close === 'function') { 58 | // node.js core bug work-around 59 | stream.on('open', onOpenClose) 60 | } 61 | 62 | return stream 63 | } 64 | 65 | /** 66 | * On open handler to close stream. 67 | * @private 68 | */ 69 | 70 | function onOpenClose() { 71 | if (typeof this.fd === 'number') { 72 | // actually close down the fd 73 | this.close() 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /server/node_modules/merge-descriptors/README.md: -------------------------------------------------------------------------------- 1 | # Merge Descriptors 2 | 3 | [![NPM Version][npm-image]][npm-url] 4 | [![NPM Downloads][downloads-image]][downloads-url] 5 | [![Build Status][travis-image]][travis-url] 6 | [![Test Coverage][coveralls-image]][coveralls-url] 7 | 8 | Merge objects using descriptors. 9 | 10 | ```js 11 | var thing = { 12 | get name() { 13 | return 'jon' 14 | } 15 | } 16 | 17 | var animal = { 18 | 19 | } 20 | 21 | merge(animal, thing) 22 | 23 | animal.name === 'jon' 24 | ``` 25 | 26 | ## API 27 | 28 | ### merge(destination, source) 29 | 30 | Redefines `destination`'s descriptors with `source`'s. 31 | 32 | ### merge(destination, source, false) 33 | 34 | Defines `source`'s descriptors on `destination` if `destination` does not have 35 | a descriptor by the same name. 36 | 37 | ## License 38 | 39 | [MIT](LICENSE) 40 | 41 | [npm-image]: https://img.shields.io/npm/v/merge-descriptors.svg 42 | [npm-url]: https://npmjs.org/package/merge-descriptors 43 | [travis-image]: https://img.shields.io/travis/component/merge-descriptors/master.svg 44 | [travis-url]: https://travis-ci.org/component/merge-descriptors 45 | [coveralls-image]: https://img.shields.io/coveralls/component/merge-descriptors/master.svg 46 | [coveralls-url]: https://coveralls.io/r/component/merge-descriptors?branch=master 47 | [downloads-image]: https://img.shields.io/npm/dm/merge-descriptors.svg 48 | [downloads-url]: https://npmjs.org/package/merge-descriptors 49 | -------------------------------------------------------------------------------- /server/node_modules/unpipe/README.md: -------------------------------------------------------------------------------- 1 | # unpipe 2 | 3 | [![NPM Version][npm-image]][npm-url] 4 | [![NPM Downloads][downloads-image]][downloads-url] 5 | [![Node.js Version][node-image]][node-url] 6 | [![Build Status][travis-image]][travis-url] 7 | [![Test Coverage][coveralls-image]][coveralls-url] 8 | 9 | Unpipe a stream from all destinations. 10 | 11 | ## Installation 12 | 13 | ```sh 14 | $ npm install unpipe 15 | ``` 16 | 17 | ## API 18 | 19 | ```js 20 | var unpipe = require('unpipe') 21 | ``` 22 | 23 | ### unpipe(stream) 24 | 25 | Unpipes all destinations from a given stream. With stream 2+, this is 26 | equivalent to `stream.unpipe()`. When used with streams 1 style streams 27 | (typically Node.js 0.8 and below), this module attempts to undo the 28 | actions done in `stream.pipe(dest)`. 29 | 30 | ## License 31 | 32 | [MIT](LICENSE) 33 | 34 | [npm-image]: https://img.shields.io/npm/v/unpipe.svg 35 | [npm-url]: https://npmjs.org/package/unpipe 36 | [node-image]: https://img.shields.io/node/v/unpipe.svg 37 | [node-url]: http://nodejs.org/download/ 38 | [travis-image]: https://img.shields.io/travis/stream-utils/unpipe.svg 39 | [travis-url]: https://travis-ci.org/stream-utils/unpipe 40 | [coveralls-image]: https://img.shields.io/coveralls/stream-utils/unpipe.svg 41 | [coveralls-url]: https://coveralls.io/r/stream-utils/unpipe?branch=master 42 | [downloads-image]: https://img.shields.io/npm/dm/unpipe.svg 43 | [downloads-url]: https://npmjs.org/package/unpipe 44 | -------------------------------------------------------------------------------- /server/node_modules/unpipe/index.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * unpipe 3 | * Copyright(c) 2015 Douglas Christopher Wilson 4 | * MIT Licensed 5 | */ 6 | 7 | 'use strict' 8 | 9 | /** 10 | * Module exports. 11 | * @public 12 | */ 13 | 14 | module.exports = unpipe 15 | 16 | /** 17 | * Determine if there are Node.js pipe-like data listeners. 18 | * @private 19 | */ 20 | 21 | function hasPipeDataListeners(stream) { 22 | var listeners = stream.listeners('data') 23 | 24 | for (var i = 0; i < listeners.length; i++) { 25 | if (listeners[i].name === 'ondata') { 26 | return true 27 | } 28 | } 29 | 30 | return false 31 | } 32 | 33 | /** 34 | * Unpipe a stream from all destinations. 35 | * 36 | * @param {object} stream 37 | * @public 38 | */ 39 | 40 | function unpipe(stream) { 41 | if (!stream) { 42 | throw new TypeError('argument stream is required') 43 | } 44 | 45 | if (typeof stream.unpipe === 'function') { 46 | // new-style 47 | stream.unpipe() 48 | return 49 | } 50 | 51 | // Node.js 0.8 hack 52 | if (!hasPipeDataListeners(stream)) { 53 | return 54 | } 55 | 56 | var listener 57 | var listeners = stream.listeners('close') 58 | 59 | for (var i = 0; i < listeners.length; i++) { 60 | listener = listeners[i] 61 | 62 | if (listener.name !== 'cleanup' && listener.name !== 'onclose') { 63 | continue 64 | } 65 | 66 | // invoke the listener 67 | listener.call(stream) 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /server/node_modules/array-flatten/README.md: -------------------------------------------------------------------------------- 1 | # Array Flatten 2 | 3 | [![NPM version][npm-image]][npm-url] 4 | [![NPM downloads][downloads-image]][downloads-url] 5 | [![Build status][travis-image]][travis-url] 6 | [![Test coverage][coveralls-image]][coveralls-url] 7 | 8 | > Flatten an array of nested arrays into a single flat array. Accepts an optional depth. 9 | 10 | ## Installation 11 | 12 | ``` 13 | npm install array-flatten --save 14 | ``` 15 | 16 | ## Usage 17 | 18 | ```javascript 19 | var flatten = require('array-flatten') 20 | 21 | flatten([1, [2, [3, [4, [5], 6], 7], 8], 9]) 22 | //=> [1, 2, 3, 4, 5, 6, 7, 8, 9] 23 | 24 | flatten([1, [2, [3, [4, [5], 6], 7], 8], 9], 2) 25 | //=> [1, 2, 3, [4, [5], 6], 7, 8, 9] 26 | 27 | (function () { 28 | flatten(arguments) //=> [1, 2, 3] 29 | })(1, [2, 3]) 30 | ``` 31 | 32 | ## License 33 | 34 | MIT 35 | 36 | [npm-image]: https://img.shields.io/npm/v/array-flatten.svg?style=flat 37 | [npm-url]: https://npmjs.org/package/array-flatten 38 | [downloads-image]: https://img.shields.io/npm/dm/array-flatten.svg?style=flat 39 | [downloads-url]: https://npmjs.org/package/array-flatten 40 | [travis-image]: https://img.shields.io/travis/blakeembrey/array-flatten.svg?style=flat 41 | [travis-url]: https://travis-ci.org/blakeembrey/array-flatten 42 | [coveralls-image]: https://img.shields.io/coveralls/blakeembrey/array-flatten.svg?style=flat 43 | [coveralls-url]: https://coveralls.io/r/blakeembrey/array-flatten?branch=master 44 | -------------------------------------------------------------------------------- /server/node_modules/cookie-signature/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Module dependencies. 3 | */ 4 | 5 | var crypto = require('crypto'); 6 | 7 | /** 8 | * Sign the given `val` with `secret`. 9 | * 10 | * @param {String} val 11 | * @param {String} secret 12 | * @return {String} 13 | * @api private 14 | */ 15 | 16 | exports.sign = function(val, secret){ 17 | if ('string' != typeof val) throw new TypeError("Cookie value must be provided as a string."); 18 | if ('string' != typeof secret) throw new TypeError("Secret string must be provided."); 19 | return val + '.' + crypto 20 | .createHmac('sha256', secret) 21 | .update(val) 22 | .digest('base64') 23 | .replace(/\=+$/, ''); 24 | }; 25 | 26 | /** 27 | * Unsign and decode the given `val` with `secret`, 28 | * returning `false` if the signature is invalid. 29 | * 30 | * @param {String} val 31 | * @param {String} secret 32 | * @return {String|Boolean} 33 | * @api private 34 | */ 35 | 36 | exports.unsign = function(val, secret){ 37 | if ('string' != typeof val) throw new TypeError("Signed cookie string must be provided."); 38 | if ('string' != typeof secret) throw new TypeError("Secret string must be provided."); 39 | var str = val.slice(0, val.lastIndexOf('.')) 40 | , mac = exports.sign(str, secret); 41 | 42 | return sha1(mac) == sha1(val) ? str : false; 43 | }; 44 | 45 | /** 46 | * Private 47 | */ 48 | 49 | function sha1(str){ 50 | return crypto.createHash('sha1').update(str).digest('hex'); 51 | } 52 | -------------------------------------------------------------------------------- /server/node_modules/utils-merge/README.md: -------------------------------------------------------------------------------- 1 | # utils-merge 2 | 3 | [![Version](https://img.shields.io/npm/v/utils-merge.svg?label=version)](https://www.npmjs.com/package/utils-merge) 4 | [![Build](https://img.shields.io/travis/jaredhanson/utils-merge.svg)](https://travis-ci.org/jaredhanson/utils-merge) 5 | [![Quality](https://img.shields.io/codeclimate/github/jaredhanson/utils-merge.svg?label=quality)](https://codeclimate.com/github/jaredhanson/utils-merge) 6 | [![Coverage](https://img.shields.io/coveralls/jaredhanson/utils-merge.svg)](https://coveralls.io/r/jaredhanson/utils-merge) 7 | [![Dependencies](https://img.shields.io/david/jaredhanson/utils-merge.svg)](https://david-dm.org/jaredhanson/utils-merge) 8 | 9 | 10 | Merges the properties from a source object into a destination object. 11 | 12 | ## Install 13 | 14 | ```bash 15 | $ npm install utils-merge 16 | ``` 17 | 18 | ## Usage 19 | 20 | ```javascript 21 | var a = { foo: 'bar' } 22 | , b = { bar: 'baz' }; 23 | 24 | merge(a, b); 25 | // => { foo: 'bar', bar: 'baz' } 26 | ``` 27 | 28 | ## License 29 | 30 | [The MIT License](http://opensource.org/licenses/MIT) 31 | 32 | Copyright (c) 2013-2017 Jared Hanson <[http://jaredhanson.net/](http://jaredhanson.net/)> 33 | 34 | Sponsor 35 | -------------------------------------------------------------------------------- /server/node_modules/merge-descriptors/index.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * merge-descriptors 3 | * Copyright(c) 2014 Jonathan Ong 4 | * Copyright(c) 2015 Douglas Christopher Wilson 5 | * MIT Licensed 6 | */ 7 | 8 | 'use strict' 9 | 10 | /** 11 | * Module exports. 12 | * @public 13 | */ 14 | 15 | module.exports = merge 16 | 17 | /** 18 | * Module variables. 19 | * @private 20 | */ 21 | 22 | var hasOwnProperty = Object.prototype.hasOwnProperty 23 | 24 | /** 25 | * Merge the property descriptors of `src` into `dest` 26 | * 27 | * @param {object} dest Object to add descriptors to 28 | * @param {object} src Object to clone descriptors from 29 | * @param {boolean} [redefine=true] Redefine `dest` properties with `src` properties 30 | * @returns {object} Reference to dest 31 | * @public 32 | */ 33 | 34 | function merge(dest, src, redefine) { 35 | if (!dest) { 36 | throw new TypeError('argument dest is required') 37 | } 38 | 39 | if (!src) { 40 | throw new TypeError('argument src is required') 41 | } 42 | 43 | if (redefine === undefined) { 44 | // Default to true 45 | redefine = true 46 | } 47 | 48 | Object.getOwnPropertyNames(src).forEach(function forEachOwnPropertyName(name) { 49 | if (!redefine && hasOwnProperty.call(dest, name)) { 50 | // Skip desriptor 51 | return 52 | } 53 | 54 | // Copy descriptor 55 | var descriptor = Object.getOwnPropertyDescriptor(src, name) 56 | Object.defineProperty(dest, name, descriptor) 57 | }) 58 | 59 | return dest 60 | } 61 | -------------------------------------------------------------------------------- /server/node_modules/array-flatten/array-flatten.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | /** 4 | * Expose `arrayFlatten`. 5 | */ 6 | module.exports = arrayFlatten 7 | 8 | /** 9 | * Recursive flatten function with depth. 10 | * 11 | * @param {Array} array 12 | * @param {Array} result 13 | * @param {Number} depth 14 | * @return {Array} 15 | */ 16 | function flattenWithDepth (array, result, depth) { 17 | for (var i = 0; i < array.length; i++) { 18 | var value = array[i] 19 | 20 | if (depth > 0 && Array.isArray(value)) { 21 | flattenWithDepth(value, result, depth - 1) 22 | } else { 23 | result.push(value) 24 | } 25 | } 26 | 27 | return result 28 | } 29 | 30 | /** 31 | * Recursive flatten function. Omitting depth is slightly faster. 32 | * 33 | * @param {Array} array 34 | * @param {Array} result 35 | * @return {Array} 36 | */ 37 | function flattenForever (array, result) { 38 | for (var i = 0; i < array.length; i++) { 39 | var value = array[i] 40 | 41 | if (Array.isArray(value)) { 42 | flattenForever(value, result) 43 | } else { 44 | result.push(value) 45 | } 46 | } 47 | 48 | return result 49 | } 50 | 51 | /** 52 | * Flatten an array, with the ability to define a depth. 53 | * 54 | * @param {Array} array 55 | * @param {Number} depth 56 | * @return {Array} 57 | */ 58 | function arrayFlatten (array, depth) { 59 | if (depth == null) { 60 | return flattenForever(array, []) 61 | } 62 | 63 | return flattenWithDepth(array, [], depth) 64 | } 65 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-node/stringify.js: -------------------------------------------------------------------------------- 1 | import validate from './validate.js'; 2 | /** 3 | * Convert array of 16 byte values to UUID string format of the form: 4 | * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 5 | */ 6 | 7 | const byteToHex = []; 8 | 9 | for (let i = 0; i < 256; ++i) { 10 | byteToHex.push((i + 0x100).toString(16).substr(1)); 11 | } 12 | 13 | function stringify(arr, offset = 0) { 14 | // Note: Be careful editing this code! It's been tuned for performance 15 | // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 16 | const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one 17 | // of the following: 18 | // - One or more input array values don't map to a hex octet (leading to 19 | // "undefined" in the uuid) 20 | // - Invalid input values for the RFC `version` or `variant` fields 21 | 22 | if (!validate(uuid)) { 23 | throw TypeError('Stringified UUID is invalid'); 24 | } 25 | 26 | return uuid; 27 | } 28 | 29 | export default stringify; -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/parse.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = void 0; 7 | 8 | var _validate = _interopRequireDefault(require("./validate.js")); 9 | 10 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 11 | 12 | function parse(uuid) { 13 | if (!(0, _validate.default)(uuid)) { 14 | throw TypeError('Invalid UUID'); 15 | } 16 | 17 | let v; 18 | const arr = new Uint8Array(16); // Parse ########-....-....-....-............ 19 | 20 | arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; 21 | arr[1] = v >>> 16 & 0xff; 22 | arr[2] = v >>> 8 & 0xff; 23 | arr[3] = v & 0xff; // Parse ........-####-....-....-............ 24 | 25 | arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; 26 | arr[5] = v & 0xff; // Parse ........-....-####-....-............ 27 | 28 | arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; 29 | arr[7] = v & 0xff; // Parse ........-....-....-####-............ 30 | 31 | arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; 32 | arr[9] = v & 0xff; // Parse ........-....-....-....-############ 33 | // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) 34 | 35 | arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; 36 | arr[11] = v / 0x100000000 & 0xff; 37 | arr[12] = v >>> 24 & 0xff; 38 | arr[13] = v >>> 16 & 0xff; 39 | arr[14] = v >>> 8 & 0xff; 40 | arr[15] = v & 0xff; 41 | return arr; 42 | } 43 | 44 | var _default = parse; 45 | exports.default = _default; -------------------------------------------------------------------------------- /client/src/components/HabitCard/HabitCard.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react' 2 | import "./HabitCard.css" 3 | import close from "../../svg/close.svg" 4 | import check from "../../svg/check.svg" 5 | 6 | interface IProps { 7 | habit: { 8 | _id: string, 9 | habit: string, 10 | completed: boolean 11 | }, 12 | habits: { 13 | _id: string, 14 | habit: string, 15 | completed: boolean 16 | }[], 17 | setHabits: React.Dispatch> 22 | } 23 | 24 | function HabitCard({ habit, setHabits, habits }: IProps) { 25 | 26 | const [complete, setComplete] = useState(false) 27 | 28 | return ( 29 |
    { 30 | let newHabits = habits.map(updatedHabit => { 31 | if(updatedHabit._id === habit._id){ 32 | return { 33 | ...habit, 34 | completed: !habit.completed 35 | } 36 | } else return updatedHabit 37 | }); 38 | setHabits(newHabits) 39 | }}> 40 |
    41 | 42 |
    43 |
    44 | {habit.habit} 45 |
    46 |
    47 | ) 48 | } 49 | 50 | export default HabitCard 51 | -------------------------------------------------------------------------------- /server/node_modules/mime/src/build.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | 'use strict'; 4 | 5 | const fs = require('fs'); 6 | const path = require('path'); 7 | const mimeScore = require('mime-score'); 8 | 9 | let db = require('mime-db'); 10 | let chalk = require('chalk'); 11 | 12 | const STANDARD_FACET_SCORE = 900; 13 | 14 | const byExtension = {}; 15 | 16 | // Clear out any conflict extensions in mime-db 17 | for (let type in db) { 18 | let entry = db[type]; 19 | entry.type = type; 20 | 21 | if (!entry.extensions) continue; 22 | 23 | entry.extensions.forEach(ext => { 24 | if (ext in byExtension) { 25 | const e0 = entry; 26 | const e1 = byExtension[ext]; 27 | e0.pri = mimeScore(e0.type, e0.source); 28 | e1.pri = mimeScore(e1.type, e1.source); 29 | 30 | let drop = e0.pri < e1.pri ? e0 : e1; 31 | let keep = e0.pri >= e1.pri ? e0 : e1; 32 | drop.extensions = drop.extensions.filter(e => e !== ext); 33 | 34 | console.log(`${ext}: Keeping ${chalk.green(keep.type)} (${keep.pri}), dropping ${chalk.red(drop.type)} (${drop.pri})`); 35 | } 36 | byExtension[ext] = entry; 37 | }); 38 | } 39 | 40 | function writeTypesFile(types, path) { 41 | fs.writeFileSync(path, JSON.stringify(types)); 42 | } 43 | 44 | // Segregate into standard and non-standard types based on facet per 45 | // https://tools.ietf.org/html/rfc6838#section-3.1 46 | const types = {}; 47 | 48 | Object.keys(db).sort().forEach(k => { 49 | const entry = db[k]; 50 | types[entry.type] = entry.extensions; 51 | }); 52 | 53 | writeTypesFile(types, path.join(__dirname, '..', 'types.json')); 54 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-browser/stringify.js: -------------------------------------------------------------------------------- 1 | import validate from './validate.js'; 2 | /** 3 | * Convert array of 16 byte values to UUID string format of the form: 4 | * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 5 | */ 6 | 7 | var byteToHex = []; 8 | 9 | for (var i = 0; i < 256; ++i) { 10 | byteToHex.push((i + 0x100).toString(16).substr(1)); 11 | } 12 | 13 | function stringify(arr) { 14 | var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; 15 | // Note: Be careful editing this code! It's been tuned for performance 16 | // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 17 | var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one 18 | // of the following: 19 | // - One or more input array values don't map to a hex octet (leading to 20 | // "undefined" in the uuid) 21 | // - Invalid input values for the RFC `version` or `variant` fields 22 | 23 | if (!validate(uuid)) { 24 | throw TypeError('Stringified UUID is invalid'); 25 | } 26 | 27 | return uuid; 28 | } 29 | 30 | export default stringify; -------------------------------------------------------------------------------- /server/node_modules/cookie-signature/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | # cookie-signature 3 | 4 | Sign and unsign cookies. 5 | 6 | ## Example 7 | 8 | ```js 9 | var cookie = require('cookie-signature'); 10 | 11 | var val = cookie.sign('hello', 'tobiiscool'); 12 | val.should.equal('hello.DGDUkGlIkCzPz+C0B064FNgHdEjox7ch8tOBGslZ5QI'); 13 | 14 | var val = cookie.sign('hello', 'tobiiscool'); 15 | cookie.unsign(val, 'tobiiscool').should.equal('hello'); 16 | cookie.unsign(val, 'luna').should.be.false; 17 | ``` 18 | 19 | ## License 20 | 21 | (The MIT License) 22 | 23 | Copyright (c) 2012 LearnBoost <tj@learnboost.com> 24 | 25 | Permission is hereby granted, free of charge, to any person obtaining 26 | a copy of this software and associated documentation files (the 27 | 'Software'), to deal in the Software without restriction, including 28 | without limitation the rights to use, copy, modify, merge, publish, 29 | distribute, sublicense, and/or sell copies of the Software, and to 30 | permit persons to whom the Software is furnished to do so, subject to 31 | the following conditions: 32 | 33 | The above copyright notice and this permission notice shall be 34 | included in all copies or substantial portions of the Software. 35 | 36 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 37 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 38 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 39 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 40 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 41 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 42 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /server/node_modules/forwarded/index.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * forwarded 3 | * Copyright(c) 2014-2017 Douglas Christopher Wilson 4 | * MIT Licensed 5 | */ 6 | 7 | 'use strict' 8 | 9 | /** 10 | * Module exports. 11 | * @public 12 | */ 13 | 14 | module.exports = forwarded 15 | 16 | /** 17 | * Get all addresses in the request, using the `X-Forwarded-For` header. 18 | * 19 | * @param {object} req 20 | * @return {array} 21 | * @public 22 | */ 23 | 24 | function forwarded (req) { 25 | if (!req) { 26 | throw new TypeError('argument req is required') 27 | } 28 | 29 | // simple header parsing 30 | var proxyAddrs = parse(req.headers['x-forwarded-for'] || '') 31 | var socketAddr = req.connection.remoteAddress 32 | var addrs = [socketAddr].concat(proxyAddrs) 33 | 34 | // return all addresses 35 | return addrs 36 | } 37 | 38 | /** 39 | * Parse the X-Forwarded-For header. 40 | * 41 | * @param {string} header 42 | * @private 43 | */ 44 | 45 | function parse (header) { 46 | var end = header.length 47 | var list = [] 48 | var start = header.length 49 | 50 | // gather addresses, backwards 51 | for (var i = header.length - 1; i >= 0; i--) { 52 | switch (header.charCodeAt(i)) { 53 | case 0x20: /* */ 54 | if (start === end) { 55 | start = end = i 56 | } 57 | break 58 | case 0x2c: /* , */ 59 | if (start !== end) { 60 | list.push(header.substring(start, end)) 61 | } 62 | start = end = i 63 | break 64 | default: 65 | start = i 66 | break 67 | } 68 | } 69 | 70 | // final address 71 | if (start !== end) { 72 | list.push(header.substring(start, end)) 73 | } 74 | 75 | return list 76 | } 77 | -------------------------------------------------------------------------------- /server/node_modules/escape-html/index.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * escape-html 3 | * Copyright(c) 2012-2013 TJ Holowaychuk 4 | * Copyright(c) 2015 Andreas Lubbe 5 | * Copyright(c) 2015 Tiancheng "Timothy" Gu 6 | * MIT Licensed 7 | */ 8 | 9 | 'use strict'; 10 | 11 | /** 12 | * Module variables. 13 | * @private 14 | */ 15 | 16 | var matchHtmlRegExp = /["'&<>]/; 17 | 18 | /** 19 | * Module exports. 20 | * @public 21 | */ 22 | 23 | module.exports = escapeHtml; 24 | 25 | /** 26 | * Escape special characters in the given string of html. 27 | * 28 | * @param {string} string The string to escape for inserting into HTML 29 | * @return {string} 30 | * @public 31 | */ 32 | 33 | function escapeHtml(string) { 34 | var str = '' + string; 35 | var match = matchHtmlRegExp.exec(str); 36 | 37 | if (!match) { 38 | return str; 39 | } 40 | 41 | var escape; 42 | var html = ''; 43 | var index = 0; 44 | var lastIndex = 0; 45 | 46 | for (index = match.index; index < str.length; index++) { 47 | switch (str.charCodeAt(index)) { 48 | case 34: // " 49 | escape = '"'; 50 | break; 51 | case 38: // & 52 | escape = '&'; 53 | break; 54 | case 39: // ' 55 | escape = '''; 56 | break; 57 | case 60: // < 58 | escape = '<'; 59 | break; 60 | case 62: // > 61 | escape = '>'; 62 | break; 63 | default: 64 | continue; 65 | } 66 | 67 | if (lastIndex !== index) { 68 | html += str.substring(lastIndex, index); 69 | } 70 | 71 | lastIndex = index + 1; 72 | html += escape; 73 | } 74 | 75 | return lastIndex !== index 76 | ? html + str.substring(lastIndex, index) 77 | : html; 78 | } 79 | -------------------------------------------------------------------------------- /server/node_modules/escape-html/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "escape-html@~1.0.3", 3 | "_id": "escape-html@1.0.3", 4 | "_inBundle": false, 5 | "_integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", 6 | "_location": "/escape-html", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "range", 10 | "registry": true, 11 | "raw": "escape-html@~1.0.3", 12 | "name": "escape-html", 13 | "escapedName": "escape-html", 14 | "rawSpec": "~1.0.3", 15 | "saveSpec": null, 16 | "fetchSpec": "~1.0.3" 17 | }, 18 | "_requiredBy": [ 19 | "/express", 20 | "/finalhandler", 21 | "/send", 22 | "/serve-static" 23 | ], 24 | "_resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 25 | "_shasum": "0258eae4d3d0c0974de1c169188ef0051d1d1988", 26 | "_spec": "escape-html@~1.0.3", 27 | "_where": "/Users/demoadmin/Desktop/youtube/k8s/todo-app/server/node_modules/express", 28 | "bugs": { 29 | "url": "https://github.com/component/escape-html/issues" 30 | }, 31 | "bundleDependencies": false, 32 | "deprecated": false, 33 | "description": "Escape string for use in HTML", 34 | "devDependencies": { 35 | "beautify-benchmark": "0.2.4", 36 | "benchmark": "1.0.0" 37 | }, 38 | "files": [ 39 | "LICENSE", 40 | "Readme.md", 41 | "index.js" 42 | ], 43 | "homepage": "https://github.com/component/escape-html#readme", 44 | "keywords": [ 45 | "escape", 46 | "html", 47 | "utility" 48 | ], 49 | "license": "MIT", 50 | "name": "escape-html", 51 | "repository": { 52 | "type": "git", 53 | "url": "git+https://github.com/component/escape-html.git" 54 | }, 55 | "scripts": { 56 | "bench": "node benchmark/index.js" 57 | }, 58 | "version": "1.0.3" 59 | } 60 | -------------------------------------------------------------------------------- /server/node_modules/safer-buffer/dangerous.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable node/no-deprecated-api */ 2 | 3 | 'use strict' 4 | 5 | var buffer = require('buffer') 6 | var Buffer = buffer.Buffer 7 | var safer = require('./safer.js') 8 | var Safer = safer.Buffer 9 | 10 | var dangerous = {} 11 | 12 | var key 13 | 14 | for (key in safer) { 15 | if (!safer.hasOwnProperty(key)) continue 16 | dangerous[key] = safer[key] 17 | } 18 | 19 | var Dangereous = dangerous.Buffer = {} 20 | 21 | // Copy Safer API 22 | for (key in Safer) { 23 | if (!Safer.hasOwnProperty(key)) continue 24 | Dangereous[key] = Safer[key] 25 | } 26 | 27 | // Copy those missing unsafe methods, if they are present 28 | for (key in Buffer) { 29 | if (!Buffer.hasOwnProperty(key)) continue 30 | if (Dangereous.hasOwnProperty(key)) continue 31 | Dangereous[key] = Buffer[key] 32 | } 33 | 34 | if (!Dangereous.allocUnsafe) { 35 | Dangereous.allocUnsafe = function (size) { 36 | if (typeof size !== 'number') { 37 | throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size) 38 | } 39 | if (size < 0 || size >= 2 * (1 << 30)) { 40 | throw new RangeError('The value "' + size + '" is invalid for option "size"') 41 | } 42 | return Buffer(size) 43 | } 44 | } 45 | 46 | if (!Dangereous.allocUnsafeSlow) { 47 | Dangereous.allocUnsafeSlow = function (size) { 48 | if (typeof size !== 'number') { 49 | throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size) 50 | } 51 | if (size < 0 || size >= 2 * (1 << 30)) { 52 | throw new RangeError('The value "' + size + '" is invalid for option "size"') 53 | } 54 | return buffer.SlowBuffer(size) 55 | } 56 | } 57 | 58 | module.exports = dangerous 59 | -------------------------------------------------------------------------------- /server/node_modules/qs/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014 Nathan LaFreniere and other contributors. 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | * Redistributions of source code must retain the above copyright 7 | notice, this list of conditions and the following disclaimer. 8 | * Redistributions in binary form must reproduce the above copyright 9 | notice, this list of conditions and the following disclaimer in the 10 | documentation and/or other materials provided with the distribution. 11 | * The names of any contributors may not be used to endorse or promote 12 | products derived from this software without specific prior written 13 | permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 16 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY 19 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 | 26 | * * * 27 | 28 | The complete list of contributors can be found at: https://github.com/hapijs/qs/graphs/contributors 29 | -------------------------------------------------------------------------------- /server/node_modules/path-to-regexp/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "path-to-regexp@0.1.7", 3 | "_id": "path-to-regexp@0.1.7", 4 | "_inBundle": false, 5 | "_integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", 6 | "_location": "/path-to-regexp", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "version", 10 | "registry": true, 11 | "raw": "path-to-regexp@0.1.7", 12 | "name": "path-to-regexp", 13 | "escapedName": "path-to-regexp", 14 | "rawSpec": "0.1.7", 15 | "saveSpec": null, 16 | "fetchSpec": "0.1.7" 17 | }, 18 | "_requiredBy": [ 19 | "/express" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 22 | "_shasum": "df604178005f522f15eb4490e7247a1bfaa67f8c", 23 | "_spec": "path-to-regexp@0.1.7", 24 | "_where": "/Users/demoadmin/Desktop/youtube/k8s/todo-app/server/node_modules/express", 25 | "bugs": { 26 | "url": "https://github.com/component/path-to-regexp/issues" 27 | }, 28 | "bundleDependencies": false, 29 | "component": { 30 | "scripts": { 31 | "path-to-regexp": "index.js" 32 | } 33 | }, 34 | "deprecated": false, 35 | "description": "Express style path to RegExp utility", 36 | "devDependencies": { 37 | "istanbul": "^0.2.6", 38 | "mocha": "^1.17.1" 39 | }, 40 | "files": [ 41 | "index.js", 42 | "LICENSE" 43 | ], 44 | "homepage": "https://github.com/component/path-to-regexp#readme", 45 | "keywords": [ 46 | "express", 47 | "regexp" 48 | ], 49 | "license": "MIT", 50 | "name": "path-to-regexp", 51 | "repository": { 52 | "type": "git", 53 | "url": "git+https://github.com/component/path-to-regexp.git" 54 | }, 55 | "scripts": { 56 | "test": "istanbul cover _mocha -- -R spec" 57 | }, 58 | "version": "0.1.7" 59 | } 60 | -------------------------------------------------------------------------------- /server/node_modules/depd/lib/compat/index.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * depd 3 | * Copyright(c) 2014-2015 Douglas Christopher Wilson 4 | * MIT Licensed 5 | */ 6 | 7 | 'use strict' 8 | 9 | /** 10 | * Module dependencies. 11 | * @private 12 | */ 13 | 14 | var EventEmitter = require('events').EventEmitter 15 | 16 | /** 17 | * Module exports. 18 | * @public 19 | */ 20 | 21 | lazyProperty(module.exports, 'callSiteToString', function callSiteToString () { 22 | var limit = Error.stackTraceLimit 23 | var obj = {} 24 | var prep = Error.prepareStackTrace 25 | 26 | function prepareObjectStackTrace (obj, stack) { 27 | return stack 28 | } 29 | 30 | Error.prepareStackTrace = prepareObjectStackTrace 31 | Error.stackTraceLimit = 2 32 | 33 | // capture the stack 34 | Error.captureStackTrace(obj) 35 | 36 | // slice the stack 37 | var stack = obj.stack.slice() 38 | 39 | Error.prepareStackTrace = prep 40 | Error.stackTraceLimit = limit 41 | 42 | return stack[0].toString ? toString : require('./callsite-tostring') 43 | }) 44 | 45 | lazyProperty(module.exports, 'eventListenerCount', function eventListenerCount () { 46 | return EventEmitter.listenerCount || require('./event-listener-count') 47 | }) 48 | 49 | /** 50 | * Define a lazy property. 51 | */ 52 | 53 | function lazyProperty (obj, prop, getter) { 54 | function get () { 55 | var val = getter() 56 | 57 | Object.defineProperty(obj, prop, { 58 | configurable: true, 59 | enumerable: true, 60 | value: val 61 | }) 62 | 63 | return val 64 | } 65 | 66 | Object.defineProperty(obj, prop, { 67 | configurable: true, 68 | enumerable: true, 69 | get: get 70 | }) 71 | } 72 | 73 | /** 74 | * Call toString() on the obj 75 | */ 76 | 77 | function toString (obj) { 78 | return obj.toString() 79 | } 80 | -------------------------------------------------------------------------------- /server/node_modules/inherits/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "inherits@2.0.3", 3 | "_id": "inherits@2.0.3", 4 | "_inBundle": false, 5 | "_integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 6 | "_location": "/inherits", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "version", 10 | "registry": true, 11 | "raw": "inherits@2.0.3", 12 | "name": "inherits", 13 | "escapedName": "inherits", 14 | "rawSpec": "2.0.3", 15 | "saveSpec": null, 16 | "fetchSpec": "2.0.3" 17 | }, 18 | "_requiredBy": [ 19 | "/http-errors" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 22 | "_shasum": "633c2c83e3da42a502f52466022480f4208261de", 23 | "_spec": "inherits@2.0.3", 24 | "_where": "/Users/demoadmin/Desktop/youtube/k8s/todo-app/server/node_modules/http-errors", 25 | "browser": "./inherits_browser.js", 26 | "bugs": { 27 | "url": "https://github.com/isaacs/inherits/issues" 28 | }, 29 | "bundleDependencies": false, 30 | "deprecated": false, 31 | "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", 32 | "devDependencies": { 33 | "tap": "^7.1.0" 34 | }, 35 | "files": [ 36 | "inherits.js", 37 | "inherits_browser.js" 38 | ], 39 | "homepage": "https://github.com/isaacs/inherits#readme", 40 | "keywords": [ 41 | "inheritance", 42 | "class", 43 | "klass", 44 | "oop", 45 | "object-oriented", 46 | "inherits", 47 | "browser", 48 | "browserify" 49 | ], 50 | "license": "ISC", 51 | "main": "./inherits.js", 52 | "name": "inherits", 53 | "repository": { 54 | "type": "git", 55 | "url": "git://github.com/isaacs/inherits.git" 56 | }, 57 | "scripts": { 58 | "test": "node test" 59 | }, 60 | "version": "2.0.3" 61 | } 62 | -------------------------------------------------------------------------------- /server/node_modules/inherits/README.md: -------------------------------------------------------------------------------- 1 | Browser-friendly inheritance fully compatible with standard node.js 2 | [inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor). 3 | 4 | This package exports standard `inherits` from node.js `util` module in 5 | node environment, but also provides alternative browser-friendly 6 | implementation through [browser 7 | field](https://gist.github.com/shtylman/4339901). Alternative 8 | implementation is a literal copy of standard one located in standalone 9 | module to avoid requiring of `util`. It also has a shim for old 10 | browsers with no `Object.create` support. 11 | 12 | While keeping you sure you are using standard `inherits` 13 | implementation in node.js environment, it allows bundlers such as 14 | [browserify](https://github.com/substack/node-browserify) to not 15 | include full `util` package to your client code if all you need is 16 | just `inherits` function. It worth, because browser shim for `util` 17 | package is large and `inherits` is often the single function you need 18 | from it. 19 | 20 | It's recommended to use this package instead of 21 | `require('util').inherits` for any code that has chances to be used 22 | not only in node.js but in browser too. 23 | 24 | ## usage 25 | 26 | ```js 27 | var inherits = require('inherits'); 28 | // then use exactly as the standard one 29 | ``` 30 | 31 | ## note on version ~1.0 32 | 33 | Version ~1.0 had completely different motivation and is not compatible 34 | neither with 2.0 nor with standard node.js `inherits`. 35 | 36 | If you are using version ~1.0 and planning to switch to ~2.0, be 37 | careful: 38 | 39 | * new version uses `super_` instead of `super` for referencing 40 | superclass 41 | * new version overwrites current prototype while old one preserves any 42 | existing fields on it 43 | -------------------------------------------------------------------------------- /server/node_modules/cookie-signature/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "cookie-signature@1.0.6", 3 | "_id": "cookie-signature@1.0.6", 4 | "_inBundle": false, 5 | "_integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", 6 | "_location": "/cookie-signature", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "version", 10 | "registry": true, 11 | "raw": "cookie-signature@1.0.6", 12 | "name": "cookie-signature", 13 | "escapedName": "cookie-signature", 14 | "rawSpec": "1.0.6", 15 | "saveSpec": null, 16 | "fetchSpec": "1.0.6" 17 | }, 18 | "_requiredBy": [ 19 | "/express" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 22 | "_shasum": "e303a882b342cc3ee8ca513a79999734dab3ae2c", 23 | "_spec": "cookie-signature@1.0.6", 24 | "_where": "/Users/demoadmin/Desktop/youtube/k8s/todo-app/server/node_modules/express", 25 | "author": { 26 | "name": "TJ Holowaychuk", 27 | "email": "tj@learnboost.com" 28 | }, 29 | "bugs": { 30 | "url": "https://github.com/visionmedia/node-cookie-signature/issues" 31 | }, 32 | "bundleDependencies": false, 33 | "dependencies": {}, 34 | "deprecated": false, 35 | "description": "Sign and unsign cookies", 36 | "devDependencies": { 37 | "mocha": "*", 38 | "should": "*" 39 | }, 40 | "homepage": "https://github.com/visionmedia/node-cookie-signature#readme", 41 | "keywords": [ 42 | "cookie", 43 | "sign", 44 | "unsign" 45 | ], 46 | "license": "MIT", 47 | "main": "index", 48 | "name": "cookie-signature", 49 | "repository": { 50 | "type": "git", 51 | "url": "git+https://github.com/visionmedia/node-cookie-signature.git" 52 | }, 53 | "scripts": { 54 | "test": "mocha --require should --reporter spec" 55 | }, 56 | "version": "1.0.6" 57 | } 58 | -------------------------------------------------------------------------------- /server/node_modules/safe-buffer/index.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable node/no-deprecated-api */ 2 | var buffer = require('buffer') 3 | var Buffer = buffer.Buffer 4 | 5 | // alternative to using Object.keys for old browsers 6 | function copyProps (src, dst) { 7 | for (var key in src) { 8 | dst[key] = src[key] 9 | } 10 | } 11 | if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { 12 | module.exports = buffer 13 | } else { 14 | // Copy properties from require('buffer') 15 | copyProps(buffer, exports) 16 | exports.Buffer = SafeBuffer 17 | } 18 | 19 | function SafeBuffer (arg, encodingOrOffset, length) { 20 | return Buffer(arg, encodingOrOffset, length) 21 | } 22 | 23 | // Copy static methods from Buffer 24 | copyProps(Buffer, SafeBuffer) 25 | 26 | SafeBuffer.from = function (arg, encodingOrOffset, length) { 27 | if (typeof arg === 'number') { 28 | throw new TypeError('Argument must not be a number') 29 | } 30 | return Buffer(arg, encodingOrOffset, length) 31 | } 32 | 33 | SafeBuffer.alloc = function (size, fill, encoding) { 34 | if (typeof size !== 'number') { 35 | throw new TypeError('Argument must be a number') 36 | } 37 | var buf = Buffer(size) 38 | if (fill !== undefined) { 39 | if (typeof encoding === 'string') { 40 | buf.fill(fill, encoding) 41 | } else { 42 | buf.fill(fill) 43 | } 44 | } else { 45 | buf.fill(0) 46 | } 47 | return buf 48 | } 49 | 50 | SafeBuffer.allocUnsafe = function (size) { 51 | if (typeof size !== 'number') { 52 | throw new TypeError('Argument must be a number') 53 | } 54 | return Buffer(size) 55 | } 56 | 57 | SafeBuffer.allocUnsafeSlow = function (size) { 58 | if (typeof size !== 'number') { 59 | throw new TypeError('Argument must be a number') 60 | } 61 | return buffer.SlowBuffer(size) 62 | } 63 | -------------------------------------------------------------------------------- /server/node_modules/fresh/HISTORY.md: -------------------------------------------------------------------------------- 1 | 0.5.2 / 2017-09-13 2 | ================== 3 | 4 | * Fix regression matching multiple ETags in `If-None-Match` 5 | * perf: improve `If-None-Match` token parsing 6 | 7 | 0.5.1 / 2017-09-11 8 | ================== 9 | 10 | * Fix handling of modified headers with invalid dates 11 | * perf: improve ETag match loop 12 | 13 | 0.5.0 / 2017-02-21 14 | ================== 15 | 16 | * Fix incorrect result when `If-None-Match` has both `*` and ETags 17 | * Fix weak `ETag` matching to match spec 18 | * perf: delay reading header values until needed 19 | * perf: skip checking modified time if ETag check failed 20 | * perf: skip parsing `If-None-Match` when no `ETag` header 21 | * perf: use `Date.parse` instead of `new Date` 22 | 23 | 0.4.0 / 2017-02-05 24 | ================== 25 | 26 | * Fix false detection of `no-cache` request directive 27 | * perf: enable strict mode 28 | * perf: hoist regular expressions 29 | * perf: remove duplicate conditional 30 | * perf: remove unnecessary boolean coercions 31 | 32 | 0.3.0 / 2015-05-12 33 | ================== 34 | 35 | * Add weak `ETag` matching support 36 | 37 | 0.2.4 / 2014-09-07 38 | ================== 39 | 40 | * Support Node.js 0.6 41 | 42 | 0.2.3 / 2014-09-07 43 | ================== 44 | 45 | * Move repository to jshttp 46 | 47 | 0.2.2 / 2014-02-19 48 | ================== 49 | 50 | * Revert "Fix for blank page on Safari reload" 51 | 52 | 0.2.1 / 2014-01-29 53 | ================== 54 | 55 | * Fix for blank page on Safari reload 56 | 57 | 0.2.0 / 2013-08-11 58 | ================== 59 | 60 | * Return stale for `Cache-Control: no-cache` 61 | 62 | 0.1.0 / 2012-06-15 63 | ================== 64 | 65 | * Add `If-None-Match: *` support 66 | 67 | 0.0.1 / 2012-06-10 68 | ================== 69 | 70 | * Initial release 71 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/stringify.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.default = void 0; 7 | 8 | var _validate = _interopRequireDefault(require("./validate.js")); 9 | 10 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 11 | 12 | /** 13 | * Convert array of 16 byte values to UUID string format of the form: 14 | * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 15 | */ 16 | const byteToHex = []; 17 | 18 | for (let i = 0; i < 256; ++i) { 19 | byteToHex.push((i + 0x100).toString(16).substr(1)); 20 | } 21 | 22 | function stringify(arr, offset = 0) { 23 | // Note: Be careful editing this code! It's been tuned for performance 24 | // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 25 | const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one 26 | // of the following: 27 | // - One or more input array values don't map to a hex octet (leading to 28 | // "undefined" in the uuid) 29 | // - Invalid input values for the RFC `version` or `variant` fields 30 | 31 | if (!(0, _validate.default)(uuid)) { 32 | throw TypeError('Stringified UUID is invalid'); 33 | } 34 | 35 | return uuid; 36 | } 37 | 38 | var _default = stringify; 39 | exports.default = _default; -------------------------------------------------------------------------------- /server/node_modules/encodeurl/index.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * encodeurl 3 | * Copyright(c) 2016 Douglas Christopher Wilson 4 | * MIT Licensed 5 | */ 6 | 7 | 'use strict' 8 | 9 | /** 10 | * Module exports. 11 | * @public 12 | */ 13 | 14 | module.exports = encodeUrl 15 | 16 | /** 17 | * RegExp to match non-URL code points, *after* encoding (i.e. not including "%") 18 | * and including invalid escape sequences. 19 | * @private 20 | */ 21 | 22 | var ENCODE_CHARS_REGEXP = /(?:[^\x21\x25\x26-\x3B\x3D\x3F-\x5B\x5D\x5F\x61-\x7A\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g 23 | 24 | /** 25 | * RegExp to match unmatched surrogate pair. 26 | * @private 27 | */ 28 | 29 | var UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF]([^\uDC00-\uDFFF]|$)/g 30 | 31 | /** 32 | * String to replace unmatched surrogate pair with. 33 | * @private 34 | */ 35 | 36 | var UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\uFFFD$2' 37 | 38 | /** 39 | * Encode a URL to a percent-encoded form, excluding already-encoded sequences. 40 | * 41 | * This function will take an already-encoded URL and encode all the non-URL 42 | * code points. This function will not encode the "%" character unless it is 43 | * not part of a valid sequence (`%20` will be left as-is, but `%foo` will 44 | * be encoded as `%25foo`). 45 | * 46 | * This encode is meant to be "safe" and does not throw errors. It will try as 47 | * hard as it can to properly encode the given URL, including replacing any raw, 48 | * unpaired surrogate pairs with the Unicode replacement character prior to 49 | * encoding. 50 | * 51 | * @param {string} url 52 | * @return {string} 53 | * @public 54 | */ 55 | 56 | function encodeUrl (url) { 57 | return String(url) 58 | .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE) 59 | .replace(ENCODE_CHARS_REGEXP, encodeURI) 60 | } 61 | -------------------------------------------------------------------------------- /server/node_modules/depd/lib/browser/index.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * depd 3 | * Copyright(c) 2015 Douglas Christopher Wilson 4 | * MIT Licensed 5 | */ 6 | 7 | 'use strict' 8 | 9 | /** 10 | * Module exports. 11 | * @public 12 | */ 13 | 14 | module.exports = depd 15 | 16 | /** 17 | * Create deprecate for namespace in caller. 18 | */ 19 | 20 | function depd (namespace) { 21 | if (!namespace) { 22 | throw new TypeError('argument namespace is required') 23 | } 24 | 25 | function deprecate (message) { 26 | // no-op in browser 27 | } 28 | 29 | deprecate._file = undefined 30 | deprecate._ignored = true 31 | deprecate._namespace = namespace 32 | deprecate._traced = false 33 | deprecate._warned = Object.create(null) 34 | 35 | deprecate.function = wrapfunction 36 | deprecate.property = wrapproperty 37 | 38 | return deprecate 39 | } 40 | 41 | /** 42 | * Return a wrapped function in a deprecation message. 43 | * 44 | * This is a no-op version of the wrapper, which does nothing but call 45 | * validation. 46 | */ 47 | 48 | function wrapfunction (fn, message) { 49 | if (typeof fn !== 'function') { 50 | throw new TypeError('argument fn must be a function') 51 | } 52 | 53 | return fn 54 | } 55 | 56 | /** 57 | * Wrap property in a deprecation message. 58 | * 59 | * This is a no-op version of the wrapper, which does nothing but call 60 | * validation. 61 | */ 62 | 63 | function wrapproperty (obj, prop, message) { 64 | if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) { 65 | throw new TypeError('argument obj must be object') 66 | } 67 | 68 | var descriptor = Object.getOwnPropertyDescriptor(obj, prop) 69 | 70 | if (!descriptor) { 71 | throw new TypeError('must call property on owner object') 72 | } 73 | 74 | if (!descriptor.configurable) { 75 | throw new TypeError('property must be configurable') 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /server/node_modules/ms/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "ms@2.0.0", 3 | "_id": "ms@2.0.0", 4 | "_inBundle": false, 5 | "_integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 6 | "_location": "/ms", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "version", 10 | "registry": true, 11 | "raw": "ms@2.0.0", 12 | "name": "ms", 13 | "escapedName": "ms", 14 | "rawSpec": "2.0.0", 15 | "saveSpec": null, 16 | "fetchSpec": "2.0.0" 17 | }, 18 | "_requiredBy": [ 19 | "/debug" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 22 | "_shasum": "5608aeadfc00be6c2901df5f9861788de0d597c8", 23 | "_spec": "ms@2.0.0", 24 | "_where": "/Users/demoadmin/Desktop/youtube/k8s/todo-app/server/node_modules/debug", 25 | "bugs": { 26 | "url": "https://github.com/zeit/ms/issues" 27 | }, 28 | "bundleDependencies": false, 29 | "deprecated": false, 30 | "description": "Tiny milisecond conversion utility", 31 | "devDependencies": { 32 | "eslint": "3.19.0", 33 | "expect.js": "0.3.1", 34 | "husky": "0.13.3", 35 | "lint-staged": "3.4.1", 36 | "mocha": "3.4.1" 37 | }, 38 | "eslintConfig": { 39 | "extends": "eslint:recommended", 40 | "env": { 41 | "node": true, 42 | "es6": true 43 | } 44 | }, 45 | "files": [ 46 | "index.js" 47 | ], 48 | "homepage": "https://github.com/zeit/ms#readme", 49 | "license": "MIT", 50 | "lint-staged": { 51 | "*.js": [ 52 | "npm run lint", 53 | "prettier --single-quote --write", 54 | "git add" 55 | ] 56 | }, 57 | "main": "./index", 58 | "name": "ms", 59 | "repository": { 60 | "type": "git", 61 | "url": "git+https://github.com/zeit/ms.git" 62 | }, 63 | "scripts": { 64 | "lint": "eslint lib/* bin/*", 65 | "precommit": "lint-staged", 66 | "test": "mocha tests.js" 67 | }, 68 | "version": "2.0.0" 69 | } 70 | -------------------------------------------------------------------------------- /server/node_modules/forwarded/README.md: -------------------------------------------------------------------------------- 1 | # forwarded 2 | 3 | [![NPM Version][npm-image]][npm-url] 4 | [![NPM Downloads][downloads-image]][downloads-url] 5 | [![Node.js Version][node-version-image]][node-version-url] 6 | [![Build Status][travis-image]][travis-url] 7 | [![Test Coverage][coveralls-image]][coveralls-url] 8 | 9 | Parse HTTP X-Forwarded-For header 10 | 11 | ## Installation 12 | 13 | This is a [Node.js](https://nodejs.org/en/) module available through the 14 | [npm registry](https://www.npmjs.com/). Installation is done using the 15 | [`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): 16 | 17 | ```sh 18 | $ npm install forwarded 19 | ``` 20 | 21 | ## API 22 | 23 | ```js 24 | var forwarded = require('forwarded') 25 | ``` 26 | 27 | ### forwarded(req) 28 | 29 | ```js 30 | var addresses = forwarded(req) 31 | ``` 32 | 33 | Parse the `X-Forwarded-For` header from the request. Returns an array 34 | of the addresses, including the socket address for the `req`, in reverse 35 | order (i.e. index `0` is the socket address and the last index is the 36 | furthest address, typically the end-user). 37 | 38 | ## Testing 39 | 40 | ```sh 41 | $ npm test 42 | ``` 43 | 44 | ## License 45 | 46 | [MIT](LICENSE) 47 | 48 | [npm-image]: https://img.shields.io/npm/v/forwarded.svg 49 | [npm-url]: https://npmjs.org/package/forwarded 50 | [node-version-image]: https://img.shields.io/node/v/forwarded.svg 51 | [node-version-url]: https://nodejs.org/en/download/ 52 | [travis-image]: https://img.shields.io/travis/jshttp/forwarded/master.svg 53 | [travis-url]: https://travis-ci.org/jshttp/forwarded 54 | [coveralls-image]: https://img.shields.io/coveralls/jshttp/forwarded/master.svg 55 | [coveralls-url]: https://coveralls.io/r/jshttp/forwarded?branch=master 56 | [downloads-image]: https://img.shields.io/npm/dm/forwarded.svg 57 | [downloads-url]: https://npmjs.org/package/forwarded 58 | -------------------------------------------------------------------------------- /server/node_modules/methods/README.md: -------------------------------------------------------------------------------- 1 | # Methods 2 | 3 | [![NPM Version][npm-image]][npm-url] 4 | [![NPM Downloads][downloads-image]][downloads-url] 5 | [![Node.js Version][node-version-image]][node-version-url] 6 | [![Build Status][travis-image]][travis-url] 7 | [![Test Coverage][coveralls-image]][coveralls-url] 8 | 9 | HTTP verbs that Node.js core's HTTP parser supports. 10 | 11 | This module provides an export that is just like `http.METHODS` from Node.js core, 12 | with the following differences: 13 | 14 | * All method names are lower-cased. 15 | * Contains a fallback list of methods for Node.js versions that do not have a 16 | `http.METHODS` export (0.10 and lower). 17 | * Provides the fallback list when using tools like `browserify` without pulling 18 | in the `http` shim module. 19 | 20 | ## Install 21 | 22 | ```bash 23 | $ npm install methods 24 | ``` 25 | 26 | ## API 27 | 28 | ```js 29 | var methods = require('methods') 30 | ``` 31 | 32 | ### methods 33 | 34 | This is an array of lower-cased method names that Node.js supports. If Node.js 35 | provides the `http.METHODS` export, then this is the same array lower-cased, 36 | otherwise it is a snapshot of the verbs from Node.js 0.10. 37 | 38 | ## License 39 | 40 | [MIT](LICENSE) 41 | 42 | [npm-image]: https://img.shields.io/npm/v/methods.svg?style=flat 43 | [npm-url]: https://npmjs.org/package/methods 44 | [node-version-image]: https://img.shields.io/node/v/methods.svg?style=flat 45 | [node-version-url]: https://nodejs.org/en/download/ 46 | [travis-image]: https://img.shields.io/travis/jshttp/methods.svg?style=flat 47 | [travis-url]: https://travis-ci.org/jshttp/methods 48 | [coveralls-image]: https://img.shields.io/coveralls/jshttp/methods.svg?style=flat 49 | [coveralls-url]: https://coveralls.io/r/jshttp/methods?branch=master 50 | [downloads-image]: https://img.shields.io/npm/dm/methods.svg?style=flat 51 | [downloads-url]: https://npmjs.org/package/methods 52 | -------------------------------------------------------------------------------- /server/node_modules/ms/readme.md: -------------------------------------------------------------------------------- 1 | # ms 2 | 3 | [![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms) 4 | [![Slack Channel](http://zeit-slackin.now.sh/badge.svg)](https://zeit.chat/) 5 | 6 | Use this package to easily convert various time formats to milliseconds. 7 | 8 | ## Examples 9 | 10 | ```js 11 | ms('2 days') // 172800000 12 | ms('1d') // 86400000 13 | ms('10h') // 36000000 14 | ms('2.5 hrs') // 9000000 15 | ms('2h') // 7200000 16 | ms('1m') // 60000 17 | ms('5s') // 5000 18 | ms('1y') // 31557600000 19 | ms('100') // 100 20 | ``` 21 | 22 | ### Convert from milliseconds 23 | 24 | ```js 25 | ms(60000) // "1m" 26 | ms(2 * 60000) // "2m" 27 | ms(ms('10 hours')) // "10h" 28 | ``` 29 | 30 | ### Time format written-out 31 | 32 | ```js 33 | ms(60000, { long: true }) // "1 minute" 34 | ms(2 * 60000, { long: true }) // "2 minutes" 35 | ms(ms('10 hours'), { long: true }) // "10 hours" 36 | ``` 37 | 38 | ## Features 39 | 40 | - Works both in [node](https://nodejs.org) and in the browser. 41 | - If a number is supplied to `ms`, a string with a unit is returned. 42 | - If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`). 43 | - If you pass a string with a number and a valid unit, the number of equivalent ms is returned. 44 | 45 | ## Caught a bug? 46 | 47 | 1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device 48 | 2. Link the package to the global module directory: `npm link` 49 | 3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, node will now use your clone of ms! 50 | 51 | As always, you can run the tests using: `npm test` 52 | -------------------------------------------------------------------------------- /server/node_modules/safe-buffer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "safe-buffer@5.1.2", 3 | "_id": "safe-buffer@5.1.2", 4 | "_inBundle": false, 5 | "_integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 6 | "_location": "/safe-buffer", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "version", 10 | "registry": true, 11 | "raw": "safe-buffer@5.1.2", 12 | "name": "safe-buffer", 13 | "escapedName": "safe-buffer", 14 | "rawSpec": "5.1.2", 15 | "saveSpec": null, 16 | "fetchSpec": "5.1.2" 17 | }, 18 | "_requiredBy": [ 19 | "/content-disposition", 20 | "/express" 21 | ], 22 | "_resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 23 | "_shasum": "991ec69d296e0313747d59bdfd2b745c35f8828d", 24 | "_spec": "safe-buffer@5.1.2", 25 | "_where": "/Users/demoadmin/Desktop/youtube/k8s/todo-app/server/node_modules/express", 26 | "author": { 27 | "name": "Feross Aboukhadijeh", 28 | "email": "feross@feross.org", 29 | "url": "http://feross.org" 30 | }, 31 | "bugs": { 32 | "url": "https://github.com/feross/safe-buffer/issues" 33 | }, 34 | "bundleDependencies": false, 35 | "deprecated": false, 36 | "description": "Safer Node.js Buffer API", 37 | "devDependencies": { 38 | "standard": "*", 39 | "tape": "^4.0.0" 40 | }, 41 | "homepage": "https://github.com/feross/safe-buffer", 42 | "keywords": [ 43 | "buffer", 44 | "buffer allocate", 45 | "node security", 46 | "safe", 47 | "safe-buffer", 48 | "security", 49 | "uninitialized" 50 | ], 51 | "license": "MIT", 52 | "main": "index.js", 53 | "name": "safe-buffer", 54 | "repository": { 55 | "type": "git", 56 | "url": "git://github.com/feross/safe-buffer.git" 57 | }, 58 | "scripts": { 59 | "test": "standard && tape test/*.js" 60 | }, 61 | "types": "index.d.ts", 62 | "version": "5.1.2" 63 | } 64 | -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-browser/v35.js: -------------------------------------------------------------------------------- 1 | import stringify from './stringify.js'; 2 | import parse from './parse.js'; 3 | 4 | function stringToBytes(str) { 5 | str = unescape(encodeURIComponent(str)); // UTF8 escape 6 | 7 | var bytes = []; 8 | 9 | for (var i = 0; i < str.length; ++i) { 10 | bytes.push(str.charCodeAt(i)); 11 | } 12 | 13 | return bytes; 14 | } 15 | 16 | export var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; 17 | export var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; 18 | export default function (name, version, hashfunc) { 19 | function generateUUID(value, namespace, buf, offset) { 20 | if (typeof value === 'string') { 21 | value = stringToBytes(value); 22 | } 23 | 24 | if (typeof namespace === 'string') { 25 | namespace = parse(namespace); 26 | } 27 | 28 | if (namespace.length !== 16) { 29 | throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); 30 | } // Compute hash of namespace and value, Per 4.3 31 | // Future: Use spread syntax when supported on all platforms, e.g. `bytes = 32 | // hashfunc([...namespace, ... value])` 33 | 34 | 35 | var bytes = new Uint8Array(16 + value.length); 36 | bytes.set(namespace); 37 | bytes.set(value, namespace.length); 38 | bytes = hashfunc(bytes); 39 | bytes[6] = bytes[6] & 0x0f | version; 40 | bytes[8] = bytes[8] & 0x3f | 0x80; 41 | 42 | if (buf) { 43 | offset = offset || 0; 44 | 45 | for (var i = 0; i < 16; ++i) { 46 | buf[offset + i] = bytes[i]; 47 | } 48 | 49 | return buf; 50 | } 51 | 52 | return stringify(bytes); 53 | } // Function#name is not settable on some platforms (#270) 54 | 55 | 56 | try { 57 | generateUUID.name = name; // eslint-disable-next-line no-empty 58 | } catch (err) {} // For CommonJS default export support 59 | 60 | 61 | generateUUID.DNS = DNS; 62 | generateUUID.URL = URL; 63 | return generateUUID; 64 | } -------------------------------------------------------------------------------- /server/node_modules/uuid/dist/esm-node/v35.js: -------------------------------------------------------------------------------- 1 | import stringify from './stringify.js'; 2 | import parse from './parse.js'; 3 | 4 | function stringToBytes(str) { 5 | str = unescape(encodeURIComponent(str)); // UTF8 escape 6 | 7 | const bytes = []; 8 | 9 | for (let i = 0; i < str.length; ++i) { 10 | bytes.push(str.charCodeAt(i)); 11 | } 12 | 13 | return bytes; 14 | } 15 | 16 | export const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; 17 | export const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; 18 | export default function (name, version, hashfunc) { 19 | function generateUUID(value, namespace, buf, offset) { 20 | if (typeof value === 'string') { 21 | value = stringToBytes(value); 22 | } 23 | 24 | if (typeof namespace === 'string') { 25 | namespace = parse(namespace); 26 | } 27 | 28 | if (namespace.length !== 16) { 29 | throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); 30 | } // Compute hash of namespace and value, Per 4.3 31 | // Future: Use spread syntax when supported on all platforms, e.g. `bytes = 32 | // hashfunc([...namespace, ... value])` 33 | 34 | 35 | let bytes = new Uint8Array(16 + value.length); 36 | bytes.set(namespace); 37 | bytes.set(value, namespace.length); 38 | bytes = hashfunc(bytes); 39 | bytes[6] = bytes[6] & 0x0f | version; 40 | bytes[8] = bytes[8] & 0x3f | 0x80; 41 | 42 | if (buf) { 43 | offset = offset || 0; 44 | 45 | for (let i = 0; i < 16; ++i) { 46 | buf[offset + i] = bytes[i]; 47 | } 48 | 49 | return buf; 50 | } 51 | 52 | return stringify(bytes); 53 | } // Function#name is not settable on some platforms (#270) 54 | 55 | 56 | try { 57 | generateUUID.name = name; // eslint-disable-next-line no-empty 58 | } catch (err) {} // For CommonJS default export support 59 | 60 | 61 | generateUUID.DNS = DNS; 62 | generateUUID.URL = URL; 63 | return generateUUID; 64 | } -------------------------------------------------------------------------------- /server/node_modules/array-flatten/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "array-flatten@1.1.1", 3 | "_id": "array-flatten@1.1.1", 4 | "_inBundle": false, 5 | "_integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", 6 | "_location": "/array-flatten", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "version", 10 | "registry": true, 11 | "raw": "array-flatten@1.1.1", 12 | "name": "array-flatten", 13 | "escapedName": "array-flatten", 14 | "rawSpec": "1.1.1", 15 | "saveSpec": null, 16 | "fetchSpec": "1.1.1" 17 | }, 18 | "_requiredBy": [ 19 | "/express" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 22 | "_shasum": "9a5f699051b1e7073328f2a008968b64ea2955d2", 23 | "_spec": "array-flatten@1.1.1", 24 | "_where": "/Users/demoadmin/Desktop/youtube/k8s/todo-app/server/node_modules/express", 25 | "author": { 26 | "name": "Blake Embrey", 27 | "email": "hello@blakeembrey.com", 28 | "url": "http://blakeembrey.me" 29 | }, 30 | "bugs": { 31 | "url": "https://github.com/blakeembrey/array-flatten/issues" 32 | }, 33 | "bundleDependencies": false, 34 | "deprecated": false, 35 | "description": "Flatten an array of nested arrays into a single flat array", 36 | "devDependencies": { 37 | "istanbul": "^0.3.13", 38 | "mocha": "^2.2.4", 39 | "pre-commit": "^1.0.7", 40 | "standard": "^3.7.3" 41 | }, 42 | "files": [ 43 | "array-flatten.js", 44 | "LICENSE" 45 | ], 46 | "homepage": "https://github.com/blakeembrey/array-flatten", 47 | "keywords": [ 48 | "array", 49 | "flatten", 50 | "arguments", 51 | "depth" 52 | ], 53 | "license": "MIT", 54 | "main": "array-flatten.js", 55 | "name": "array-flatten", 56 | "repository": { 57 | "type": "git", 58 | "url": "git://github.com/blakeembrey/array-flatten.git" 59 | }, 60 | "scripts": { 61 | "test": "istanbul cover _mocha -- -R spec" 62 | }, 63 | "version": "1.1.1" 64 | } 65 | -------------------------------------------------------------------------------- /server/node_modules/send/node_modules/ms/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "ms@2.1.1", 3 | "_id": "ms@2.1.1", 4 | "_inBundle": false, 5 | "_integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", 6 | "_location": "/send/ms", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "version", 10 | "registry": true, 11 | "raw": "ms@2.1.1", 12 | "name": "ms", 13 | "escapedName": "ms", 14 | "rawSpec": "2.1.1", 15 | "saveSpec": null, 16 | "fetchSpec": "2.1.1" 17 | }, 18 | "_requiredBy": [ 19 | "/send" 20 | ], 21 | "_resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 22 | "_shasum": "30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a", 23 | "_spec": "ms@2.1.1", 24 | "_where": "/Users/demoadmin/Desktop/youtube/k8s/todo-app/server/node_modules/send", 25 | "bugs": { 26 | "url": "https://github.com/zeit/ms/issues" 27 | }, 28 | "bundleDependencies": false, 29 | "deprecated": false, 30 | "description": "Tiny millisecond conversion utility", 31 | "devDependencies": { 32 | "eslint": "4.12.1", 33 | "expect.js": "0.3.1", 34 | "husky": "0.14.3", 35 | "lint-staged": "5.0.0", 36 | "mocha": "4.0.1" 37 | }, 38 | "eslintConfig": { 39 | "extends": "eslint:recommended", 40 | "env": { 41 | "node": true, 42 | "es6": true 43 | } 44 | }, 45 | "files": [ 46 | "index.js" 47 | ], 48 | "homepage": "https://github.com/zeit/ms#readme", 49 | "license": "MIT", 50 | "lint-staged": { 51 | "*.js": [ 52 | "npm run lint", 53 | "prettier --single-quote --write", 54 | "git add" 55 | ] 56 | }, 57 | "main": "./index", 58 | "name": "ms", 59 | "repository": { 60 | "type": "git", 61 | "url": "git+https://github.com/zeit/ms.git" 62 | }, 63 | "scripts": { 64 | "lint": "eslint lib/* bin/*", 65 | "precommit": "lint-staged", 66 | "test": "mocha tests.js" 67 | }, 68 | "version": "2.1.1" 69 | } 70 | -------------------------------------------------------------------------------- /server/node_modules/bytes/History.md: -------------------------------------------------------------------------------- 1 | 3.1.0 / 2019-01-22 2 | ================== 3 | 4 | * Add petabyte (`pb`) support 5 | 6 | 3.0.0 / 2017-08-31 7 | ================== 8 | 9 | * Change "kB" to "KB" in format output 10 | * Remove support for Node.js 0.6 11 | * Remove support for ComponentJS 12 | 13 | 2.5.0 / 2017-03-24 14 | ================== 15 | 16 | * Add option "unit" 17 | 18 | 2.4.0 / 2016-06-01 19 | ================== 20 | 21 | * Add option "unitSeparator" 22 | 23 | 2.3.0 / 2016-02-15 24 | ================== 25 | 26 | * Drop partial bytes on all parsed units 27 | * Fix non-finite numbers to `.format` to return `null` 28 | * Fix parsing byte string that looks like hex 29 | * perf: hoist regular expressions 30 | 31 | 2.2.0 / 2015-11-13 32 | ================== 33 | 34 | * add option "decimalPlaces" 35 | * add option "fixedDecimals" 36 | 37 | 2.1.0 / 2015-05-21 38 | ================== 39 | 40 | * add `.format` export 41 | * add `.parse` export 42 | 43 | 2.0.2 / 2015-05-20 44 | ================== 45 | 46 | * remove map recreation 47 | * remove unnecessary object construction 48 | 49 | 2.0.1 / 2015-05-07 50 | ================== 51 | 52 | * fix browserify require 53 | * remove node.extend dependency 54 | 55 | 2.0.0 / 2015-04-12 56 | ================== 57 | 58 | * add option "case" 59 | * add option "thousandsSeparator" 60 | * return "null" on invalid parse input 61 | * support proper round-trip: bytes(bytes(num)) === num 62 | * units no longer case sensitive when parsing 63 | 64 | 1.0.0 / 2014-05-05 65 | ================== 66 | 67 | * add negative support. fixes #6 68 | 69 | 0.3.0 / 2014-03-19 70 | ================== 71 | 72 | * added terabyte support 73 | 74 | 0.2.1 / 2013-04-01 75 | ================== 76 | 77 | * add .component 78 | 79 | 0.2.0 / 2012-10-28 80 | ================== 81 | 82 | * bytes(200).should.eql('200b') 83 | 84 | 0.1.0 / 2012-07-04 85 | ================== 86 | 87 | * add bytes to string conversion [yields] 88 | --------------------------------------------------------------------------------