From d15cfe8fe44c3779c396c830117d1f45d826f137 Mon Sep 17 00:00:00 2001 From: Katerina Date: Wed, 15 Jul 2020 20:47:07 +1000 Subject: [PATCH] first commit --- .gitignore | 1 + README.md | 54 + models/config.js | 23 + models/convert-date.js | 19 + models/users.js | 22 + package-lock.json | 2129 ++++++++++++++++++++++++++++++ package.json | 29 + public/Trashure ERD.jpg | Bin 0 -> 42786 bytes public/images/TrashureERD.jpg | Bin 0 -> 42786 bytes public/images/available.png | Bin 0 -> 3759 bytes public/images/map.png | Bin 0 -> 3903 bytes public/images/new.png | Bin 0 -> 2315 bytes public/images/reserve.png | Bin 0 -> 3107 bytes public/images/treasure-chest.png | Bin 0 -> 2948 bytes public/item.js | 74 ++ public/style.css | 217 +++ public/style2.css | 45 + public/trashure-client.js | 201 +++ sql/schema.sql | 56 + sql/seed.sql | 47 + trashure-server.js | 175 +++ views/edit-item.ejs | 91 ++ views/index.ejs | 74 ++ views/log-in.ejs | 30 + views/new-item.ejs | 80 ++ views/show-items.ejs | 0 views/sign-up.ejs | 42 + views/view-my-items.ejs | 60 + 28 files changed, 3469 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 models/config.js create mode 100644 models/convert-date.js create mode 100644 models/users.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/Trashure ERD.jpg create mode 100644 public/images/TrashureERD.jpg create mode 100644 public/images/available.png create mode 100644 public/images/map.png create mode 100644 public/images/new.png create mode 100644 public/images/reserve.png create mode 100644 public/images/treasure-chest.png create mode 100644 public/item.js create mode 100644 public/style.css create mode 100644 public/style2.css create mode 100644 public/trashure-client.js create mode 100644 sql/schema.sql create mode 100644 sql/seed.sql create mode 100644 trashure-server.js create mode 100644 views/edit-item.ejs create mode 100644 views/index.ejs create mode 100644 views/log-in.ejs create mode 100644 views/new-item.ejs create mode 100644 views/show-items.ejs create mode 100644 views/sign-up.ejs create mode 100644 views/view-my-items.ejs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..3f6616b --- /dev/null +++ b/README.md @@ -0,0 +1,54 @@ +# Trashure App, v. 1.0.0 +## Team Project + +### [Try it now](https://heroku.... need to update) + +### Overview + +🏘 Are you moving out soon? +🚚 Still have some stuff you love but not able to take with you? +🎫 Have spare tickets fot tonight? + Give it to someone for free! Share your Trashure! + +--- +### Featutes + + * User can see on the map 🌏 any Trashure Items available in nearby area (user-geolocation feature is implemented) + * User can sign up and login + * Registered User can Reserve any available item + * Registered User can Post Items + * Registered User can see a list of Items (posted and reserved) + +--- + +### Technical Requirements + +🛠 To build the App the following technologies and tools were used: + + - HTML, CSS, JavaScript + - PostgreSQL + - Node.js + - Express + - middleware: pg, bcrypt, passport, express-session, method-overide, ejs + - Heroku for deployment + - version control system: Git + - Whimsical for creating storyboards + - Trello for keeping track of development + +--- +## Trashure DB - ERD + +![ERD](/public/images/TrashureERD.jpg "Trashure ERD") + +--- + +## Challenges and next release Features + +One of the main challenges the Team faced with the project is being able to obtain information from a 3d party API, manipulatianig with geodata, storing these data in DB + +For Future releases some extra features can be added: + + - Search option so User can sort all available in DB items by certain criteria + - Email notifications with details of reservation can be sent to the User who posted the Item and to the User who reserved the Item + - Integrate third party API to improve UX uploading images (e.g. use Cloudinary) + diff --git a/models/config.js b/models/config.js new file mode 100644 index 0000000..ccbfe32 --- /dev/null +++ b/models/config.js @@ -0,0 +1,23 @@ +const pg = require('pg'); + +let pool; + +if (process.env.PRODUCTION) { + pool = new pg.Pool({ + connectionString: process.env.DATABASE_URL, + }) +} else { + pool = new pg.Pool({ + database: 'trashure', + user: 'debbiepaterson', + password: 'hello' + }) +} + +module.exports = { + query: (sql, params, callback) => { + return pool.query(sql, params, callback) + } +} + + diff --git a/models/convert-date.js b/models/convert-date.js new file mode 100644 index 0000000..d6d488c --- /dev/null +++ b/models/convert-date.js @@ -0,0 +1,19 @@ + module.exports = { + convertDate: function convertDate(date) { + var d = new Date(date), + month = '' + (d.getMonth() + 1), + day = '' + d.getDate(), + year = d.getFullYear(); + + if (month.length < 2) + month = '0' + month; + if (day.length < 2) + day = '0' + day; + + return [year, month, day].join('-'); + } +} + +// module.exports = { +// convertDate: convertDate +// } \ No newline at end of file diff --git a/models/users.js b/models/users.js new file mode 100644 index 0000000..b69abe5 --- /dev/null +++ b/models/users.js @@ -0,0 +1,22 @@ +// substitute records array with the trashure db +// var records = [ +// { id: 1, username: 'jack', password: 'secret', displayName: 'Jack', emails: [ { value: 'jack@example.com' } ] } +// , { id: 2, username: 'jill', password: 'birthday', displayName: 'Jill', emails: [ { value: 'jill@example.com' } ] } +// ]; + +const db = require('./config') + +module.exports = { + findByUsername: (username, cb) => { + const records = db.query('select * from users;') + process.nextTick(function() { + for (var i = 0, len = records.length; i < len; i++) { + var record = records[i]; + if (record.username === username) { + return cb(null, record); + } + } + return cb(null, null); + }); + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..912a697 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2129 @@ +{ + "name": "trashure", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dev": true, + "requires": { + "string-width": "^3.0.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + }, + "axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "requires": { + "follow-redirects": "1.5.10" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "bcrypt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-4.0.1.tgz", + "integrity": "sha512-hSIZHkUxIDS5zA2o00Kf2O5RfVbQ888n54xQoF/eIaquU4uaLxK8vhhBdktd0B3n2MjkcAWzv4mnhogykBKOUQ==", + "requires": { + "node-addon-api": "^2.0.0", + "node-pre-gyp": "0.14.0" + } + }, + "binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", + "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cli-boxes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz", + "integrity": "sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "connect-ensure-login": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/connect-ensure-login/-/connect-ensure-login-0.1.1.tgz", + "integrity": "sha1-F03MUSQ7nqwj+NmCFa62aU4uihI=" + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, + "dot-prop": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", + "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "ejs": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.3.tgz", + "integrity": "sha512-wmtrUGyfSC23GC/B1SMv2ogAUgbQEtDmTIhfqielrG5ExIM9TP4UoYdi90jLF1aTcsWCJNEO0UrgKzP0y3nTSg==", + "requires": { + "jake": "^10.6.1" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "express-session": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.1.tgz", + "integrity": "sha512-UbHwgqjxQZJiWRTMyhvWGvjBQduGCSBDhhZXYenziMFjxst5rMV+aJZ6hKPHZnPyHGsrqRICxtX8jtEbm/z36Q==", + "requires": { + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.0", + "uid-safe": "~2.1.5" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + } + } + }, + "filelist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.1.tgz", + "integrity": "sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", + "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", + "dev": true, + "requires": { + "ini": "^1.3.5" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, + "requires": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + } + }, + "is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "jake": { + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.6.1.tgz", + "integrity": "sha512-pHUK3+V0BjOb1XSi95rbBksrMdIqLVC9bJqDnshVyleYsET3H0XAq+3VB2E3notcYvv4wRdRHn13p7vobG+wfQ==", + "requires": { + "async": "0.9.x", + "chalk": "^2.4.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + } + } + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "method-override": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/method-override/-/method-override-3.0.0.tgz", + "integrity": "sha512-IJ2NNN/mSl9w3kzWB92rcdHpz+HjkxhDJWNDBqSlas+zQdP8wBiJzITPg08M/k2uVvMow7Sk41atndNtt/PHSA==", + "requires": { + "debug": "3.1.0", + "methods": "~1.1.2", + "parseurl": "~1.3.2", + "vary": "~1.1.2" + } + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "requires": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "needle": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.1.tgz", + "integrity": "sha512-x/gi6ijr4B7fwl6WYL9FwlCvRQKGlUNvnceho8wxkwXqN8jvVmmmATTmZPRRG7b/yC1eode26C2HO9jl78Du9g==", + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "node-addon-api": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz", + "integrity": "sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA==" + }, + "node-pre-gyp": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz", + "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==", + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + }, + "dependencies": { + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + } + } + }, + "nodemon": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.4.tgz", + "integrity": "sha512-Ltced+hIfTmaS28Zjv1BM552oQ3dbwPqI4+zI0SLgq+wpJhSyqgYude/aZa/3i31VCQWMfXJVxvu86abcam3uQ==", + "dev": true, + "requires": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.2", + "update-notifier": "^4.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true + }, + "npm-bundled": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + }, + "npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "passport": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz", + "integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==", + "requires": { + "passport-strategy": "1.x.x", + "pause": "0.0.1" + } + }, + "passport-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", + "integrity": "sha1-H+YyaMkudWBmJkN+O5BmYsFbpu4=", + "requires": { + "passport-strategy": "1.x.x" + } + }, + "passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" + }, + "pg": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.2.1.tgz", + "integrity": "sha512-DKzffhpkWRr9jx7vKxA+ur79KG+SKw+PdjMb1IRhMiKI9zqYUGczwFprqy+5Veh/DCcFs1Y6V8lRLN5I1DlleQ==", + "requires": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "^2.2.3", + "pg-pool": "^3.2.1", + "pg-protocol": "^1.2.4", + "pg-types": "^2.1.0", + "pgpass": "1.x", + "semver": "4.3.2" + }, + "dependencies": { + "semver": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz", + "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=" + } + } + }, + "pg-connection-string": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.2.3.tgz", + "integrity": "sha512-I/KCSQGmOrZx6sMHXkOs2MjddrYcqpza3Dtsy0AjIgBr/bZiPJRK9WhABXN1Uy1UDazRbi9gZEzO2sAhL5EqiQ==" + }, + "pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" + }, + "pg-pool": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.2.1.tgz", + "integrity": "sha512-BQDPWUeKenVrMMDN9opfns/kZo4lxmSWhIqo+cSAF7+lfi9ZclQbr9vfnlNaPr8wYF3UYjm5X0yPAhbcgqNOdA==" + }, + "pg-protocol": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.2.4.tgz", + "integrity": "sha512-/8L/G+vW/VhWjTGXpGh8XVkXOFx1ZDY+Yuz//Ab8CfjInzFkreI+fDG3WjCeSra7fIZwAFxzbGptNbm8xSXenw==" + }, + "pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "requires": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + } + }, + "pgpass": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz", + "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=", + "requires": { + "split": "^1.0.0" + } + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" + }, + "postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" + }, + "postgres-date": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.5.tgz", + "integrity": "sha512-pdau6GRPERdAYUQwkBnGKxEfPyhVZXG/JiS44iZWiNdSOWE09N2lUgN6yshuq6fVSon4Pm0VMXd1srUUkLe9iA==" + }, + "postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "requires": { + "xtend": "^4.0.0" + } + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pupa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz", + "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "registry-auth-token": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.1.1.tgz", + "integrity": "sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "requires": { + "through": "2" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "term-size": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", + "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "requires": { + "random-bytes": "~1.0.0" + } + }, + "undefsafe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "dev": true, + "requires": { + "debug": "^2.2.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "update-notifier": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.0.tgz", + "integrity": "sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew==", + "dev": true, + "requires": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..1259108 --- /dev/null +++ b/package.json @@ -0,0 +1,29 @@ +{ + "name": "trashure", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "node trashure-server.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "axios": "^0.19.2", + "bcrypt": "^4.0.1", + "body-parser": "^1.19.0", + "connect-ensure-login": "^0.1.1", + "ejs": "^3.1.3", + "express": "^4.17.1", + "express-session": "^1.17.1", + "method-override": "^3.0.0", + "morgan": "^1.10.0", + "passport": "^0.4.1", + "passport-local": "^1.0.0", + "pg": "^8.2.1" + }, + "devDependencies": { + "nodemon": "^2.0.4" + } +} diff --git a/public/Trashure ERD.jpg b/public/Trashure ERD.jpg new file mode 100644 index 0000000000000000000000000000000000000000..333a86d0b5f53f054c3d773299ba6de10a249abb GIT binary patch literal 42786 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̒t3&A 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

bud2>G3`R3CJOHJ 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̒t3&A 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

bud2>G3`R3CJOHJ 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 Sw14iX8356agm173Ncj^GNhdG> literal 0 HcmV?d00001 diff --git a/public/images/reserve.png b/public/images/reserve.png new file mode 100644 index 0000000000000000000000000000000000000000..7249f5a3feaeb2cb9b6c9b5468aa9d6163f8830d GIT binary patch literal 3107 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 V;|0~x6~UAbaC7l+ZgM(*>pv>#%fJ8t literal 0 HcmV?d00001 diff --git a/public/images/treasure-chest.png b/public/images/treasure-chest.png new file mode 100644 index 0000000000000000000000000000000000000000..f3c88f007f4fc1bae1b52e6cf60048873c06f922 GIT binary patch literal 2948 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 Q-#w!N2v;P$6^1JKC!L&L#{d8T literal 0 HcmV?d00001 diff --git a/public/item.js b/public/item.js new file mode 100644 index 0000000..2dc0275 --- /dev/null +++ b/public/item.js @@ -0,0 +1,74 @@ +console.log('item.js is linked') + +const itemAddress = document.querySelector('.item-location') +const itemLatitude = document.querySelector('.lat') +const itemLongitude = document.querySelector('.long') +const itemLocation = document.querySelector('.item-location') + +var map, searchManager, address, infobox +var item_location = {} + +const reverseGeocode = function(e) { + // infobox.setMap(null) + itemAddress.value = ''; + if (map.entities != []) { + map.entities.clear(); + } + //If search manager is not defined, load the search module. + if (!searchManager) { + //Create an instance of the search manager and call the reverseGeocode function again. + Microsoft.Maps.loadModule('Microsoft.Maps.Search', function () { + searchManager = new Microsoft.Maps.Search.SearchManager(map); + reverseGeocode(); + }); + } else { + + var searchRequest = { + // local arguement to be passed in + location: e.location, + callback: function (res) { + //Tell the user the name of the result. + itemAddress.value = res.name; + itemLatitude.value = res.location.latitude; + itemLongitude.value = res.location.longitude; + + infobox = new Microsoft.Maps.Infobox(e.location, { + title: 'Address', + description: res.name, + latitude: res.location.latitude, + longitude: res.location.longitude + }); + infobox.setMap(map); + console.log(infobox) + setTimeout(function () { infobox.setMap(null) }, 2000); + }, + errorCallback: function (e) { + //If there is an error, alert the user about it. + alert("Unable to reverse geocode location."); + } + }; + + //Make the reverse geocode request. + searchManager.reverseGeocode(searchRequest); + + var pin = new Microsoft.Maps.Pushpin(e.location, { + // title: address + // color: 'green' + + }) + map.entities.push(pin); + console.log(map.entities) + } +} + +function getMap() { + map = new Microsoft.Maps.Map('.item-map', { + // user location + center: new Microsoft.Maps.Location(-37.7989538, 144.9597395) + }); + + Microsoft.Maps.Events.addHandler(map, 'click', (e) => { + reverseGeocode(e) + }) +} + diff --git a/public/style.css b/public/style.css new file mode 100644 index 0000000..8da4b00 --- /dev/null +++ b/public/style.css @@ -0,0 +1,217 @@ +* { + box-sizing: border-box; +} + +#map { + height: 500px; + border: 5px solid #87A8A0; +} +.item-map { + height: 500px; + margin: 10px; +} + +body{ + background-color: #B8F5E5; + width: 70%; + margin: 20px auto; + font-family: 'Livvic', sans-serif; + font-size: 12pt; +} + +header { + display: grid; + grid-template-rows: 1fr 1fr; +} + +.header-title { + display: grid; + grid-template-columns: 3fr 1fr; + font-weight: 600; + font-size: 2em; +} + +.user-name { + font-weight: 400; + font-size: 0.5em; +} + +nav { + display: grid; + grid-template-columns: repeat(3, 1fr); + font-weight: 500; + +} + +.nav-item { + display: inline; + text-align: center; +} + +.page-nav { + margin: 40px auto; +} + +a { + text-decoration: none; + color: black; +} + +button { + background-color: #F1D0F5; + border-radius: 5px; + border: 2px solid #A47EA8; + color: black; + margin: 20px; +} + +/* Item Details Display Box */ +.description-of-item { + margin: 30px 0px; + border: 5px solid #87A8A0; + width: 100%; + display: grid; + grid-template-columns: 1fr 2fr; + background-color :#F5E5B8; +} +.description-of-item div { + margin: 10px; +} + +.item-image{ + width: 100%; + margin: auto 0px; +} + +.image-of-item { + width: 100%; + padding: 0px 10px; +} + + +/* sign-up.ejs css */ +.signup-box{ + background-color: white; + width: 50%; + border: solid 1px grey; + border-radius: 10px; + margin: 0 auto; +} + +.input-box form{ + display: grid; + width: 70%; + margin: 10px auto; +} + +.input-box label, input{ + margin: 5px; +} + +.input-box input{ + padding: 5px; +} + +.input-box button{ + width: 30%; + margin: 5px auto; + padding: 5px; + border: 1px solid black; + background-color: aquamarine; +} + +.text-in-signup{ + text-align: center; +} + +.create-form-div, .update-form-div { + border: 1px solid grey; + border-radius: 10px; + text-align: center; + margin: 50px; +} + +.create-form, .update-form { + margin: 20px; + padding: 20px auto; +} + +.create-form label, .update-form label { + display: inline-block; + width: 300px; + text-align: right; +} + +.create-form input, .update-form input { + width: 300px; +} + +.form-h1 { + text-align: center; +} +/* log-in.ejs css */ + + +/* log-in.ejs css */ +.login-box{ + width: 40%; + border: 1px solid grey; + margin: 30px auto; + background-color: white; +} + +.login-box h1{ + text-align: center; +} + +.login-input-box form{ + display: grid; + width: 70%; + grid-gap: 5px; + margin: 0 auto; +} + +.login-input-box input{ + padding: 5px; +} + +.login-input-box button{ + width: 50%; + padding: 5px; + margin: 0 auto 10px; + border: 1px solid black; +} + +/* view-my-items.ejs css */ +.my-items-box{ + border: 1px solid grey; + width: 80%; + margin: 10px auto; +} + +.my-items-box img{ + width: 30%; + float: left; +} + +.item-box-text{ + width: 40%; + display: inline; + float: left; + margin-left: 40px; +} + +.my-items-box::after { + content: ""; + clear: both; + display: table; +} + +.nav-icon { + width: 50px; +} + +.reserved { + background-color: aqua; +} +/* login signup logout button */ diff --git a/public/style2.css b/public/style2.css new file mode 100644 index 0000000..7c65154 --- /dev/null +++ b/public/style2.css @@ -0,0 +1,45 @@ +.create-form-div, .update-form-div { + background-color: rgb(241, 237, 237); + box-shadow: 1px 0px 40px 0px rgba(78, 108, 246, 0.99); + min-width: 700px; +} + +.create-form-div input, .update-form-div input{ + height: 20px; + border-radius: 3px; + border: 0.5px solid rgb(180, 179, 179); + padding: 5px; + font-size: 1em; +} + +.item-map { + border: 1px solid rgb(180, 179, 179); + border-radius: 3px; +} + +.create-btn, .update-btn { + width: 30%; + margin: 10px auto; + padding: 5px; + border: 1px solid black; + border-radius: 3px; + font-size: 1.25em; + background-color: aquamarine; +} + +.create-btn:hover, .update-btn:hover { + background-color: rgb(82, 199, 160); + cursor: pointer; +} + +.selection { + height: 25px; + width: 310px; + margin: 0; + font-size: 1em; +} + +.hidden { + display: none; +} + diff --git a/public/trashure-client.js b/public/trashure-client.js new file mode 100644 index 0000000..f5e0d3c --- /dev/null +++ b/public/trashure-client.js @@ -0,0 +1,201 @@ + + +const reserveBtn = document.querySelector('.reserve-btn') +const unreserveBtn = document.querySelector('.unreserve-btn') + +// // display time format +// var startTime = data.pickup_start_time.slice(0,5) +// if (data.pickup_start_time.slice(0,2) < 12) { +// startTime += 'am' +// } else { +// startTime += 'pm' +// } + +// var endTime = data.pickup_end_time.slice(0,5) +// if (data.pickup_end_time.slice(0,2) < 12) { +// endTime += 'am' +// } else { +// endTime = (data.pickup_end_time.slice(0,2) - 12) + 'pm' +// } + +// convert Date Function +function convertDate(date) { + var d = new Date(date), + month = '' + (d.getMonth() + 1), + day = '' + d.getDate(), + year = d.getFullYear(); + + if (month.length < 2) + month = '0' + month; + if (day.length < 2) + day = '0' + day; + + return [year, month, day].join('-'); +} + +var map, searchManager, address + + +const reverseGeocode = function(e) { + //If search manager is not defined, load the search module. + if (!searchManager) { + //Create an instance of the search manager and call the reverseGeocode function again. + Microsoft.Maps.loadModule('Microsoft.Maps.Search', function () { + searchManager = new Microsoft.Maps.Search.SearchManager(map); + reverseGeocode(e); + }); + } else { + var searchRequest = { + // loca arguement to be passed in + location: e.location, + callback: function (r) { + //Tell the user the name of the result. + // debugger + document.querySelector(".location-of-item").textContent = `Address: ${r.name}`; + }, + errorCallback: function (e) { + //If there is an error, alert the user about it. + alert("Unable to reverse geocode location."); + } + }; + //Make the reverse geocode request. + searchManager.reverseGeocode(searchRequest); + + } +} + +function getLocation(cb) { + if (navigator.geolocation) { + navigator.geolocation.getCurrentPosition((position) => showPosition(position, cb)); + + + } else { + //For ERROR Handling + // If user or browser blocks location sharing, then default userLocation is center of Melboure + var userLocation = {"latitude": -37.814629, "longitude": 144.963384} + + cb(userLocation) + } +} + +function showPosition(position, cb) { + + var userLocation = { + "latitude": position.coords.latitude, + "longitude": position.coords.longitude + } + + cb(userLocation) +} + +// Fetches information to be displayed +const handlePinClick = function (e) { + const url = `http://localhost:8080/api/trashure_items/${e.target._options.text}` + axios.get(url).then(res => { + res.data.forEach(function(data) { + + document.querySelector(".description-of-item").classList.remove('hidden') + + document.querySelector(".image-of-item").src = data.image_url + + document.querySelector(".name-of-item").textContent = `Name: ${data.name}` + document.querySelector(".quantity-of-item").textContent = 'Quantity: 1' + // document.querySelector(".location-of-item").textContent = 'Address: Need to get Address from lat % long' + + let fakevent = { location: {latitude: Number(data.lat), longitude: Number(data.long)}} + + reverseGeocode(fakevent) + + const url = `http://localhost:8080/api/users/${data.owner_id}` + axios.get(url).then(res => { + document.querySelector(".owner-of-item").textContent = `Owner: ${res.data[0].name}` + }) + + //display time format + var startTime = data.pickup_start_time.slice(0,5) + if (data.pickup_start_time.slice(0,2) < 12) { + startTime += 'am' + } else { + startTime += 'pm' + } + + var endTime = data.pickup_end_time.slice(0,5) + if (data.pickup_end_time.slice(0,2) < 12) { + endTime += 'am' + } else if (data.pickup_end_time.slice(0,2) >13) { + endTime = (data.pickup_end_time.slice(0,2) - 12) + 'pm' + } else { + endTime += 'pm' + } + document.querySelector(".expiration-date-of-item").textContent = `Expiration Date: ${convertDate(data.expiration_date)}` + document.querySelector(".pickup-date-of-item").textContent = `Pickup Date: ${convertDate(data.pickup_date)}` + document.querySelector(".pickup-time-of-item").textContent = `Pickup Time: ${startTime} - ${endTime}` + + if (reserveBtn) { + let url = `/api/reservations/${data.id}` + axios.get(url).then(reserve => { + if (data.status === 'available') { + reserveBtn.classList.remove('hidden') + document.querySelector('.post-trashure-item-id').value = data.id + } else if (reserve.data[0].requester_id === user.id){ + unreserveBtn.classList.remove('hidden') + document.querySelector('.delete-trashure-item-id').value = data.id + } + }) + } + }) + }) +} + +function getMap() { + + getLocation(function (userLocation){ + + map = new Microsoft.Maps.Map('#map', { + // user location + center: new Microsoft.Maps.Location(userLocation.latitude, userLocation.longitude), + zoom: 10 + }); + + var center = map.getCenter() + + const url = 'http://localhost:8080/api/trashure_items' + + axios.get(url).then(res => { + + res.data.forEach(function(data) { + if (data.status !== 'expired'){ + + if (data.status === 'available'){ + var location = { latitude: data.lat, longitude: data.long} + pin = new Microsoft.Maps.Pushpin(location, { + title: data.name, + text: `${data.id}`, + icon: 'https://static.thenounproject.com/png/875681-200.png' + }) + map.entities.push(pin) + + // Handles the click event of a pin, note changes textContent of Div to display it + Microsoft.Maps.Events.addHandler(pin, 'click', handlePinClick) + } + + if (data.status === 'reserved'){ + var location = { latitude: data.lat, longitude: data.long} + pin = new Microsoft.Maps.Pushpin(location, { + title: data.name, + text: `${data.id}`, + icon: 'https://static.thenounproject.com/png/875653-200.png' + }) + map.entities.push(pin) + + // Handles the click event of a pin, note changes textContent of Div to display it + Microsoft.Maps.Events.addHandler(pin, 'click', handlePinClick) + } + + } + }) + }) + + }) + +} \ No newline at end of file diff --git a/sql/schema.sql b/sql/schema.sql new file mode 100644 index 0000000..9e7a939 --- /dev/null +++ b/sql/schema.sql @@ -0,0 +1,56 @@ +drop database trashure; + +create database trashure; + +\c trashure + +create table users ( + id serial primary key, + username text, + name text, + email text, + encrypted_password text, + lat decimal, + long decimal, + avatar_url text +); + +create table trashure_items ( + id serial primary key, + owner_id integer references users(id), + name text, + item_type text, + quantity text, + lat decimal, + long decimal, + address text, + expiration_date date not null default current_date, + status text default 'available', + image_url text, + pickup_date date not null default current_date, + pickup_start_time time with time zone not null default current_time, + pickup_end_time time with time zone not null default current_time +); + +create table comments ( + id serial primary key, + poster_id integer references users(id), + item_id integer references trashure_items(id), + content text, + deletion_status boolean not null default false +); + + +create table reservations ( + id serial primary key, + owner_id integer references users(id), + requester_id integer references users(id), + item_id integer references trashure_items(id), + request_date date not null default current_date, + request_time time with time zone not null default current_time +); + + + + + diff --git a/sql/seed.sql b/sql/seed.sql new file mode 100644 index 0000000..ba7fba5 --- /dev/null +++ b/sql/seed.sql @@ -0,0 +1,47 @@ +-- USERS + +insert into users (username, name, email, encrypted_password, lat, long, avatar_url) values ('ben', 'ben johnson', 'ben@home.com', '$2b$10$r8zXFvR6OacAyaU8uEeQIe/pjZwCiKc4MoasuUfXhXrqXk4zgiB/2', -37.8140692, 144.9487768, 'https://qph.fs.quoracdn.net/main-qimg-8d945bbaf167b063040eca16b0c59cd8.webp'); + +insert into users (username, name, email, encrypted_password, lat, long, avatar_url) values ('sugarlover', 'Jess Smith', 'jess@home.com', '$2b$10$r8zXFvR6OacAyaU8uEeQIe/pjZwCiKc4MoasuUfXhXrqXk4zgiB/2', -37.8107004, 144.9570023, 'https://pickaface.net/gallery/avatar/unr_example_161122_0416_qss004g.png'); + +insert into users (username, name, email, encrypted_password, lat, long, avatar_url) values ('furniturelover', 'Jane Doe', 'emma@home.com', '$2b$10$r8zXFvR6OacAyaU8uEeQIe/pjZwCiKc4MoasuUfXhXrqXk4zgiB/2', -37.8149745, 144.9552722, 'avatar_url'); + + +-- TRASHURE ITEMS + +insert into trashure_items (owner_id, name, lat, long, address, image_url +) values (1, 'Chocolate Brownie', -37.8140692, 144.9487768, '4 Flinders St, Melbourne VIC, 3000, Australia','https://img.delicious.com.au/hNHNN2Ck/w759-h506-cfill/del/2017/04/chocolate-brownies-44943-3.jpg'); + +insert into trashure_items (owner_id, name, lat, long, address, image_url +) values (1, 'Concert Tickets', -37.8140692, 144.9487768, '4 Flinders St, Melbourne VIC, 3000, Australia', 'https://theindustryobserver.thebrag.com/wp-content/uploads/2017/10/o-concert-tickets-facebook.jpg'); + + +insert into trashure_items (owner_id, name, lat, long, address, image_url +) values (2, 'Pallets', -37.8107004, 144.9570023, '4 Flinders St, Melbourne VIC, 3000, Australia', 'https://www.palletwest.com.au/wp-content/uploads/2018/05/ST-2400-NH25.jpg'); + +insert into trashure_items (owner_id, name, lat, long, address, image_url +) values (3, 'Coffee Table', -37.8149745, 144.9552722, '4 Flinders St, Melbourne VIC, 3000, Australia', 'https://www.mocka.com.au/media/product/09/jesse-coffee-table-94.jpg?12-03-2020-03-49-25'); + + + +-- RESERVATIONS + + insert into reservations (owner_id, requester_id, item_id) values (1, 2, 1); + update trashure_items set status = 'reserved' where id = 1; + + insert into reservations (owner_id, requester_id, item_id) values (1, 2, 2); + update trashure_items set status = 'reserved' where id = 2; + + insert into reservations (owner_id, requester_id, item_id) values (3, 2, 4); + update trashure_items set status = 'reserved' where id = 4; + + +-- COMMENTS + +insert into comments (poster_id, item_id, content) values (2, 1, 'Chocolate brownie is my favourite'); + +insert into comments (poster_id, item_id, content) values (2, 1, 'I love this band. Cannot beleive you have extra tickets. See you at 4pm'); + +insert into comments (poster_id, item_id, content) values (1, 3, 'I am going to build a bed out of these pallets!'); + +insert into comments (poster_id, item_id, content) values (1, 4, 'I love this coffee table. I will take it!'); diff --git a/trashure-server.js b/trashure-server.js new file mode 100644 index 0000000..7074898 --- /dev/null +++ b/trashure-server.js @@ -0,0 +1,175 @@ +const express = require('express') +const app = express() +const port = process.env.PORT || 8080 +const db = require('./models/config') +const methodOverride = require('method-override') +// const convertDate = require('./models/convert-date') +// const user = require('./models/users') +// const pg = require('pg') +const bcrypt = require('bcrypt') +const saltRounds = 10; +const session = require('express-session') +const passport = require('passport') +const Strategy = require('passport-local').Strategy; +const ensureLoggedIn = require('connect-ensure-login').ensureLoggedIn + +const bodyParser = require('body-parser') + +app.use(bodyParser.urlencoded({ extended: false })) +app.use(methodOverride('_method')) + +app.set('view engine', 'ejs') + +app.use(express.static('public')) + +passport.use(new Strategy( + function(username, password, cb) { + db.query('select * from users where username = $1;', [username]).then(function(dbRes){ + let hash = dbRes.rows[0].encrypted_password + if(bcrypt.compareSync(password, hash)){ + cb(null, dbRes.rows[0]) + } + }) +})); + +passport.serializeUser(function(user, cb) { + cb(null, user.id); +}); + +passport.deserializeUser(function(id, cb) { + db.query('select * from users where id = $1;', [id]).then(function(dbRes){ + cb(null, dbRes.rows[0]) + }) +}); + +app.use(require('express-session')({ secret: 'keyboard cat', resave: false, saveUninitialized: false })); +app.use(passport.initialize()); +app.use(passport.session()); + + +app.get('/', (req, res) => { + res.render('index', { user: req.user }) +}) + +app.get('/login', (req, res)=>{ + res.render('log-in') +}) + +app.post('/login', + passport.authenticate('local', { failureRedirect: '/login' }), + function(req, res) { + res.redirect('/'); +}); + + +app.get('/signup', (req, res) => { + res.render('sign-up') +}) + +app.post('/signup', (req, res) => { + + const hash = bcrypt.hashSync(req.body.password, 10); + + db.query( + 'insert into users (username, name, email, encrypted_password, avatar_url) values ($1, $2, $3, $4, $5)', [req.body.username, req.body.name, req.body.email, hash, req.body.avatar_url], (err, dbRes) => { + + res.redirect('/login') + }) +}) + +app.get('/logout', (req, res) => { + req.logout() + res.redirect('/') +}); + +app.post('/reservation/delete', (req, res) => { + db.query('delete from reservations where item_id = $1;', [req.body.item_id]) + db.query('update trashure_items SET status = $1 where id = $2;', ['available', req.body.item_id]) + res.redirect('/myitems') +}) + +app.post('/reservation', (req, res) => { + db.query('select * from trashure_items where id = $1', [req.body.item_id], (err, items) => { + db.query('insert into reservations (owner_id, requester_id, item_id, request_date, request_time) VALUES ($1, $2, $3, $4, $5);', + [items.rows[0].owner_id, req.user.id, req.body.item_id, items.rows[0].pickup_date, items.rows[0].pickup_start_time]) + }) + db.query('update trashure_items SET status = $1 where id = $2', ['reserved', req.body.item_id]) + res.redirect('/myitems') +}) + +app.get('/myitems',ensureLoggedIn('/login'), (req,res) => { + db.query('select * from trashure_items where owner_id = $1;', [req.user.id], (err, items) => { + db.query('select * from reservations join trashure_items on (reservations.item_id = trashure_items.id) where requester_id = $1;', [req.user.id], (err, reservations) => { + res.render('view-my-items', {items: items.rows, reservations: reservations.rows}) + }) + }) +}) + +app.get('/item',ensureLoggedIn('/login'), (req, res) => { + res.render('new-item') +}) + +app.post('/item', (req,res) => { + + const sql = 'insert into trashure_items (owner_id, name,item_type, lat, long, address, quantity, image_url, pickup_date, expiration_date,pickup_start_time, pickup_end_time) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12);' + + // need to get owner_id from db, at the moment it's hard coded + db.query(sql, [req.user.id, req.body.name, req.body.item_type, req.body.latitude, req.body.longitude, req.body.address, req.body.quantity, req.body.image_url, req.body.pickup_date,req.body.pickup_date, req.body.pickup_start_time,req.body.pickup_end_time], (err,dbRes) => { + res.redirect('/myitems') + }) +}) + +app.get('/item/:id', (req,res) => { + + db.query('select * from trashure_items where id = $1;', [req.params.id], (err, dbRes) => { + res.render('edit-item', { item: dbRes.rows }) + }) +}) + +app.put('/item/:id', (req, res) => { + + const sql = 'update trashure_items set name = $1,item_type = $2, lat = $3, long = $4, address = $5, quantity = $6, image_url = $7, pickup_date = $8,expiration_date = $9, pickup_start_time = $10, pickup_end_time = $11 where id = $12;' + + db.query(sql, [req.body.name, req.body.item_type, req.body.latitude, req.body.longitude, req.body.address, req.body.quantity, req.body.image_url, req.body.pickup_date, req.body.pickup_date, req.body.pickup_start_time,req.body.pickup_end_time, req.params.id], (err,dbRes) => { + res.redirect('/myitems') + + }) +}) + +app.get('/api/trashure_items', (req, res) => { + db.query('select * from trashure_items;', (err, dbRes) => { + res.json(dbRes.rows) + }) +}) + +app.get('/api/trashure_items/:id', (req, res) => { + db.query('select * from trashure_items where id =$1;', [req.params.id], (err, dbRes) => { + res.json(dbRes.rows) + }) +}) + +app.get('/api/users/:id', (req, res) => { + db.query( + 'select * from users where id = $1;', + [req.params.id], + (err, dbRes) => { + res.json(dbRes.rows) + }) +}) + +app.get('/api/reservations/:id', (req, res) => { + db.query( + 'select * from reservations where item_id = $1;', + [req.params.id], + (err, dbRes) => { + res.json(dbRes.rows) + }) +}) + +app.get('/api/current_user', (req, res) => { + res.json(req.user) +}) + +app.listen(port, () => { + (`listening on ${port}`) +}) diff --git a/views/edit-item.ejs b/views/edit-item.ejs new file mode 100644 index 0000000..8a439fa --- /dev/null +++ b/views/edit-item.ejs @@ -0,0 +1,91 @@ + + + + + + Update Trashure Item + + + + + + +

+ + + <% today = new Date() %> + <% function convertDate(date = today) { %> + <% d = new Date(date)%> + <% month = '' + (d.getMonth() + 1)%> + <% day = '' + d.getDate()%> + <% year = d.getFullYear()%> + <%if (month.length < 2) %> + <% { month = '0' + month }%> + <% return convertedDate = [year, month, day].join('-')%> + <% } %> + <% savedDateInDB = convertDate(item[0].pickup_date)%> + <% currentDate = convertDate()%> + +

Update Item

+
+
+ +
+ + +
+
+ + + +
+
+ + + + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+ + + diff --git a/views/index.ejs b/views/index.ejs new file mode 100644 index 0000000..0d295e9 --- /dev/null +++ b/views/index.ejs @@ -0,0 +1,74 @@ + + + + + + Document + + + + + + + +
+
+

Trashure

+ + <% if (!user) { %> +
+
+ +
+
+ +
+
+ <% } else { %> +

Hello, <%= user.username %>.

+
+ +
+ <% } %> + +
+ + +
+
+ + + + + + + diff --git a/views/log-in.ejs b/views/log-in.ejs new file mode 100644 index 0000000..22bb653 --- /dev/null +++ b/views/log-in.ejs @@ -0,0 +1,30 @@ + + + + + + + Document + + + + + + + + + diff --git a/views/new-item.ejs b/views/new-item.ejs new file mode 100644 index 0000000..c45ca0d --- /dev/null +++ b/views/new-item.ejs @@ -0,0 +1,80 @@ + + + + + + Trashure Item + + + + + + + <% d = new Date()%> + <% month = '' + (d.getMonth() + 1)%> + <% day = '' + d.getDate()%> + <% year = d.getFullYear()%> + <%if (month.length < 2) %> + <% { month = '0' + month }%> + <% [year, month, day].join('-')%> + + +

Create New Trashure

+
+
+
+ + +
+
+ + +
+
+ + + + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + +
+ +
+
+ + + \ No newline at end of file diff --git a/views/show-items.ejs b/views/show-items.ejs new file mode 100644 index 0000000..e69de29 diff --git a/views/sign-up.ejs b/views/sign-up.ejs new file mode 100644 index 0000000..6287c04 --- /dev/null +++ b/views/sign-up.ejs @@ -0,0 +1,42 @@ + + + + + + + Document + + + + + + + + \ No newline at end of file diff --git a/views/view-my-items.ejs b/views/view-my-items.ejs new file mode 100644 index 0000000..18e9978 --- /dev/null +++ b/views/view-my-items.ejs @@ -0,0 +1,60 @@ + + + + + + + Document + + + + + +

View my items

+ + <% items.forEach(function(item){ %> +
+ + <% if (item.status === "reserved") { %> +
+ <% } else { %> +
+ <% } %> +

Name: <%= item.name %>

+

Item type: <%= item.item_type %>

+

Pickup date: <%= item.pickup_date %>

+

Item status: <%= item.status %>

+

Item address: <%= item.address %>

+
+
+
+ +
+
+
+ <% }); %> + +

Reserved

+ + <% reservations.forEach(function(res){ %> +
+ +
+

Name: <%= res.name %>

+

Address: <%= res.Address %>

+

Pickup date: <%= res.pickup_date %>

+

Pickup time: <%= res.pickup_time %>

+
+
+ + +
+
+ <% }) %> + + +