diff --git a/api/models/accountModel.js b/api/models/accountModel.js
index 53b780c..5981bb9 100644
--- a/api/models/accountModel.js
+++ b/api/models/accountModel.js
@@ -1,4 +1,4 @@
-const db = require('../../data/dbConfig');
+const db = require('../../data/db');
module.exports = {
addUser,
diff --git a/api/server.js b/api/server.js
deleted file mode 100644
index 1610855..0000000
--- a/api/server.js
+++ /dev/null
@@ -1,13 +0,0 @@
-const express = require("express");
-const accountsRoute = require('./routes/accountRoute');
-const server = express();
-server.use(express.json());
-
-server.use('/api/accounts', accountsRoute);
-
-
-server.get('/', (req, res) =>
- res.status(200).send('
Welcome to Meeting Planner Backend API service.
'),
-);
-
-module.exports = server;
diff --git a/data/db.js b/data/db.js
new file mode 100644
index 0000000..4c2ad05
--- /dev/null
+++ b/data/db.js
@@ -0,0 +1,8 @@
+const knex = require('knex');
+
+const knexfile = require('../knexfile');
+
+const env = process.env.NODE_ENV || 'development';
+const configOptions = knexfile[env];
+
+module.exports = knex(configOptions);
diff --git a/data/dbConfig.js b/data/dbConfig.js
deleted file mode 100644
index 0d2784e..0000000
--- a/data/dbConfig.js
+++ /dev/null
@@ -1,5 +0,0 @@
-const pgp = require('pg-promise')();
-
-const db = pgp(process.env.DATABASE_URL);
-
-module.exports = db;
diff --git a/data/how_to_do_migration.md b/data/how_to_do_migration.md
index fe0c34c..26ab4a1 100644
--- a/data/how_to_do_migration.md
+++ b/data/how_to_do_migration.md
@@ -2,4 +2,4 @@
- Create `.env` to the root folder
- Add the database url to the `.env` file:
`DATABASE_URL=postgres://username:password@host:port/database`
- - Run `npm run migrate up`
\ No newline at end of file
+ - Run `npx knex migrate:latest`
\ No newline at end of file
diff --git a/data/migrations/0_initial-migration.js b/data/migrations/0_initial-migration.js
deleted file mode 100644
index 6f26a5f..0000000
--- a/data/migrations/0_initial-migration.js
+++ /dev/null
@@ -1,97 +0,0 @@
-const { PgLiteral } = require('node-pg-migrate');
-
-exports.shorthands = {
- id: { type: 'serial', primaryKey: true },
- varchar: { type: 'varchar(128)' },
- varchar_req: { type: 'varchar(128)', notNull: true },
- created_at: {
- type: 'timestamp',
- notNull: true,
- default: PgLiteral.create('CURRENT_TIMESTAMP'),
- },
-};
-
-exports.up = (pgm) => {
- pgm.createTable('account', {
- id: 'id',
- username: 'varchar_req',
- email: 'varchar_req',
- password: 'varchar_req',
- timezone: 'varchar',
- earliest_time: 'time',
- latest_time: 'time',
- createdAt: 'created_at',
- });
-
- pgm.createTable('meeting', {
- id: { type: 'uuid', primaryKey: true },
- title: 'varchar_req',
- description: 'varchar',
- start_time: 'time',
- timezone: 'varchar',
- duration: 'int',
- status: 'boolean',
- password: 'varchar',
- createdAt: 'created_at',
- });
-
- pgm.createTable('possible_date', {
- id: 'id',
- meeting_id: {
- type: 'uuid',
- references: 'meeting(id)',
- notNull: true,
- onDelete: 'cascade',
- },
- possible_date: { type: 'date', notNull: true },
- });
-
- pgm.createTable('participant', {
- id: 'id',
- account_id: {
- type: 'int',
- references: 'account(id)',
- notNull: true,
- onDelete: 'cascade',
- },
- meeting_id: {
- type: 'uuid',
- references: 'meeting(id)',
- notNull: true,
- onDelete: 'cascade',
- },
- earliest_time: 'time',
- latest_time: 'time',
- quorum: 'boolean',
- mandatory: 'boolean',
- host: 'boolean',
- answered: 'boolean',
- timezone: 'varchar',
- createdAt: 'created_at',
- });
-
- pgm.createTable('availibility', {
- id: 'id',
- participant_id: {
- type: 'id',
- references: 'participant(id)',
- notNull: true,
- onDelete: 'cascade',
- },
- possible_date_id: {
- type: 'id',
- references: 'possible_date(id)',
- notNull: true,
- onDelete: 'cascade',
- },
- preference: { type: 'boolean', notNull: true },
- start_time: { type: 'timestamp', notNull: true },
- end_time: { type: 'timestamp', notNull: true },
- timezone: 'varchar_req',
- createdAt: 'created_at',
- });
-};
-
-// exports.down = (pgm) => {
-// pgm.dropTable('accounts', { ifExists: true });
-// };
diff --git a/data/migrations/20200502184450_account.js b/data/migrations/20200502184450_account.js
new file mode 100644
index 0000000..73582a3
--- /dev/null
+++ b/data/migrations/20200502184450_account.js
@@ -0,0 +1,16 @@
+exports.up = (knex) => {
+ return knex.schema.createTable('account', (table) => {
+ table.increments('id').primary();
+ table.string('username').notNullable();
+ table.string('email').notNullable().unique();
+ table.string('password').notNullable();
+ table.string('timezone');
+ table.time('earliest_time');
+ table.time('latest_time');
+ table.timestamps(true, true);
+ });
+};
+
+exports.down = (knex) => {
+ return knex.schema.dropTable('account');
+};
diff --git a/data/migrations/20200502193249_meeting.js b/data/migrations/20200502193249_meeting.js
new file mode 100644
index 0000000..88ea0fd
--- /dev/null
+++ b/data/migrations/20200502193249_meeting.js
@@ -0,0 +1,17 @@
+exports.up = (knex) => {
+ return knex.schema.createTable('meeting', (table) => {
+ table.uuid('id').primary();
+ table.string('title').notNullable();
+ table.string('description');
+ table.time('start_time');
+ table.string('timezone').notNullable();
+ table.integer('duration').notNullable();
+ table.boolean('status').notNullable();
+ table.string('password');
+ table.timestamps(true, true);
+ });
+};
+
+exports.down = (knex) => {
+ return knex.schema.dropTable('meeting');
+};
diff --git a/data/migrations/20200502193341_participant.js b/data/migrations/20200502193341_participant.js
new file mode 100644
index 0000000..a06bf82
--- /dev/null
+++ b/data/migrations/20200502193341_participant.js
@@ -0,0 +1,29 @@
+exports.up = (knex) => {
+ return knex.schema.createTable('participant', (table) => {
+ table.increments('id').primary();
+ table
+ .integer('account_id')
+ .unsigned()
+ .notNullable()
+ .references('account.id')
+ .onDelete('cascade');
+ table
+ .uuid('meeting_id')
+ .unsigned()
+ .notNullable()
+ .references('meeting.id')
+ .onDelete('cascade');
+ table.time('earliest_time');
+ table.time('latest_time');
+ table.boolean('quorum');
+ table.boolean('mandatory');
+ table.boolean('host');
+ table.boolean('answered');
+ table.string('timezone').notNullable();
+ table.timestamps(true, true);
+ });
+};
+
+exports.down = (knex) => {
+ return knex.schema.dropTable('participant');
+};
diff --git a/data/migrations/20200502193352_possible_date.js b/data/migrations/20200502193352_possible_date.js
new file mode 100644
index 0000000..32c426e
--- /dev/null
+++ b/data/migrations/20200502193352_possible_date.js
@@ -0,0 +1,17 @@
+exports.up = (knex) => {
+ return knex.schema.createTable('possible_date', (table) => {
+ table.increments('id').primary();
+ table
+ .uuid('meeting_id')
+ .unsigned()
+ .notNullable()
+ .references('meeting.id')
+ .onDelete('cascade');
+ table.date('possible_date').notNullable();
+ table.timestamps(true, true);
+ });
+};
+
+exports.down = (knex) => {
+ return knex.schema.dropTable('possible_date');
+};
diff --git a/data/migrations/20200502193443_availibility.js b/data/migrations/20200502193443_availibility.js
new file mode 100644
index 0000000..a3e628e
--- /dev/null
+++ b/data/migrations/20200502193443_availibility.js
@@ -0,0 +1,26 @@
+exports.up = (knex) => {
+ return knex.schema.createTable('availibility', (table) => {
+ table.increments('id').primary();
+ table
+ .integer('participant_id')
+ .unsigned()
+ .notNullable()
+ .references('participant.id')
+ .onDelete('cascade');
+ table
+ .integer('possible_date_id')
+ .unsigned()
+ .notNullable()
+ .references('possible_date.id')
+ .onDelete('cascade');
+ table.boolean('preference').notNullable();
+ table.time('start_time').notNullable();
+ table.time('end_time').notNullable();
+ table.string('timezone').notNullable();
+ table.timestamps(true, true);
+ });
+};
+
+exports.down = (knex) => {
+ return knex.schema.dropTable('availibility');
+};
diff --git a/index.js b/index.js
index 1d1c9e5..1065256 100644
--- a/index.js
+++ b/index.js
@@ -1,7 +1,28 @@
-require('dotenv').config()
-const app = require("./api/server");
-const PORT = process.env.PORT || 3000;
+const express = require('express');
+const cors = require('cors');
+const helmet = require('helmet');
+require('dotenv').config();
-app.listen(PORT, () =>
- console.log(`Meeting Planner Backend listening at http://localhost:${PORT}`),
+const accountsRoute = require('./api/routes/accountRoute');
+
+const server = express();
+
+server.use(express.json());
+server.use(cors());
+server.use(helmet());
+
+server.use('/api/accounts', accountsRoute);
+
+server.get('/', (req, res) =>
+ res
+ .status(200)
+ .send('Welcome to Meeting Planner Backend API service.
'),
+);
+
+const PORT = process.env.PORT || 3001;
+
+server.listen(PORT, () =>
+ console.log(
+ `Meeting Planner Backend listening at http://localhost:${PORT}`,
+ ),
);
diff --git a/knexfile.js b/knexfile.js
new file mode 100644
index 0000000..8ad8755
--- /dev/null
+++ b/knexfile.js
@@ -0,0 +1,30 @@
+require('dotenv').config();
+
+module.exports = {
+ development: {
+ client: 'pg',
+ connection: process.env.DATABASE_URL,
+ migrations: {
+ directory: './data/migrations',
+ },
+ seeds: { directory: './data/seeds' },
+ },
+
+ testing: {
+ client: 'pg',
+ connection: process.env.DATABASE_URL,
+ migrations: {
+ directory: './data/migrations',
+ },
+ seeds: { directory: './data/seeds' },
+ },
+
+ production: {
+ client: 'pg',
+ connection: process.env.DATABASE_URL,
+ migrations: {
+ directory: './data/migrations',
+ },
+ seeds: { directory: './data/seeds' },
+ },
+};
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index a8d35cd..0296e36 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,6 +13,11 @@
"negotiator": "0.6.2"
}
},
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
"arr-diff": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
@@ -108,6 +113,11 @@
}
}
},
+ "bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
+ },
"body-parser": {
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
@@ -125,6 +135,11 @@
"type-is": "~1.6.17"
}
},
+ "bowser": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.9.0.tgz",
+ "integrity": "sha512-2ld76tuLBNFekRgmJfT2+3j5MIrP6bFict8WAIT3beq+srz1gcKNAdNKMqHqauQt63NmAa88HfP1/Ypa9Er3HA=="
+ },
"braces": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
@@ -178,6 +193,16 @@
"unset-value": "^1.0.0"
}
},
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo="
+ },
+ "camelize": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz",
+ "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs="
+ },
"class-utils": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
@@ -199,6 +224,21 @@
}
}
},
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.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="
+ },
"collection-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
@@ -231,6 +271,11 @@
"safe-buffer": "5.1.2"
}
},
+ "content-security-policy-builder": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.1.0.tgz",
+ "integrity": "sha512-/MtLWhJVvJNkA9dVLAp6fg9LxD2gfI6R2Fi1hPmfjYXSahJJzcfvoeDOxSyp4NvxMuwWv3WMssE9o31DoULHrQ=="
+ },
"content-type": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
@@ -251,6 +296,20 @@
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
},
+ "cors": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+ "requires": {
+ "object-assign": "^4",
+ "vary": "^1"
+ }
+ },
+ "dasherize": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz",
+ "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg="
+ },
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -259,6 +318,11 @@
"ms": "2.0.0"
}
},
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
"decode-uri-component": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
@@ -316,6 +380,16 @@
"resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
"integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc="
},
+ "dns-prefetch-control": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.2.0.tgz",
+ "integrity": "sha512-hvSnros73+qyZXhHFjx2CMLwoj3Fe7eR9EJsFsqmcI1bB2OBWL/+0YzaEaKssCHnj/6crawNnUyw74Gm2EKe+Q=="
+ },
+ "dont-sniff-mimetype": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.1.0.tgz",
+ "integrity": "sha512-ZjI4zqTaxveH2/tTlzS1wFp+7ncxNZaIEWYg3lzZRHkKf5zPT/MnEG6WL0BhHMJUabkh8GeU5NL5j+rEUCb7Ug=="
+ },
"dotenv": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
@@ -331,6 +405,14 @@
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
},
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -386,6 +468,11 @@
"homedir-polyfill": "^1.0.1"
}
},
+ "expect-ct": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.2.0.tgz",
+ "integrity": "sha512-6SK3MG/Bbhm8MsgyJAylg+ucIOU71/FzyFalcfu5nY19dH8y/z0tBJU0wrNBXD4B27EoQtqPF/9wqH0iYAd04g=="
+ },
"express": {
"version": "4.17.1",
"resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
@@ -506,6 +593,11 @@
}
}
},
+ "feature-policy": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz",
+ "integrity": "sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ=="
+ },
"fill-range": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
@@ -541,6 +633,15 @@
"unpipe": "~1.0.0"
}
},
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
"findup-sync": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
@@ -595,11 +696,26 @@
"map-cache": "^0.2.2"
}
},
+ "frameguard": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/frameguard/-/frameguard-3.1.0.tgz",
+ "integrity": "sha512-TxgSKM+7LTA6sidjOiSZK9wxY0ffMPY3Wta//MqwmX0nZuEHc8QrkV8Fh3ZhMJeiH+Uyh/tcaarImRy8u77O7g=="
+ },
"fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
+ "generic-pool": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.4.3.tgz",
+ "integrity": "sha1-eAw29p360FpaBF3Te+etyhGk9v8="
+ },
+ "get-caller-file": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w=="
+ },
"get-value": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
@@ -632,6 +748,11 @@
"which": "^1.2.14"
}
},
+ "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=="
+ },
"has-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
@@ -661,6 +782,56 @@
}
}
},
+ "helmet": {
+ "version": "3.22.0",
+ "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.22.0.tgz",
+ "integrity": "sha512-Xrqicn2nm1ZIUxP3YGuTBmbDL04neKsIT583Sjh0FkiwKDXYCMUqGqC88w3NUvVXtA75JyR2Jn6jw6ZEMOD+ZA==",
+ "requires": {
+ "depd": "2.0.0",
+ "dns-prefetch-control": "0.2.0",
+ "dont-sniff-mimetype": "1.1.0",
+ "expect-ct": "0.2.0",
+ "feature-policy": "0.3.0",
+ "frameguard": "3.1.0",
+ "helmet-crossdomain": "0.4.0",
+ "helmet-csp": "2.10.0",
+ "hide-powered-by": "1.1.0",
+ "hpkp": "2.0.0",
+ "hsts": "2.2.0",
+ "ienoopen": "1.1.0",
+ "nocache": "2.1.0",
+ "referrer-policy": "1.2.0",
+ "x-xss-protection": "1.3.0"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
+ }
+ }
+ },
+ "helmet-crossdomain": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/helmet-crossdomain/-/helmet-crossdomain-0.4.0.tgz",
+ "integrity": "sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA=="
+ },
+ "helmet-csp": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.10.0.tgz",
+ "integrity": "sha512-Rz953ZNEFk8sT2XvewXkYN0Ho4GEZdjAZy4stjiEQV3eN7GDxg1QKmYggH7otDyIA7uGA6XnUMVSgeJwbR5X+w==",
+ "requires": {
+ "bowser": "2.9.0",
+ "camelize": "1.0.0",
+ "content-security-policy-builder": "2.1.0",
+ "dasherize": "2.0.0"
+ }
+ },
+ "hide-powered-by": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.1.0.tgz",
+ "integrity": "sha512-Io1zA2yOA1YJslkr+AJlWSf2yWFkKjvkcL9Ni1XSUqnGLr/qRQe2UI3Cn/J9MsJht7yEVCe0SscY1HgVMujbgg=="
+ },
"homedir-polyfill": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
@@ -669,6 +840,31 @@
"parse-passwd": "^1.0.0"
}
},
+ "hosted-git-info": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
+ "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg=="
+ },
+ "hpkp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz",
+ "integrity": "sha1-EOFCJk52IVpdMMROxD3mTe5tFnI="
+ },
+ "hsts": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/hsts/-/hsts-2.2.0.tgz",
+ "integrity": "sha512-ToaTnQ2TbJkochoVcdXYm4HOCliNozlviNsg+X2XQLQvZNI/kCHR9rZxVYpJB3UPcHz80PgxRyWQ7PdU1r+VBQ==",
+ "requires": {
+ "depd": "2.0.0"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
+ }
+ }
+ },
"http-errors": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
@@ -689,6 +885,11 @@
"safer-buffer": ">= 2.1.2 < 3"
}
},
+ "ienoopen": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.1.0.tgz",
+ "integrity": "sha512-MFs36e/ca6ohEKtinTJ5VvAJ6oDRAYFdYXweUnGY9L9vcoqFOU4n2ZhmJ0C4z/cwGZ3YIQRSB3XZ1+ghZkY5NQ=="
+ },
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
@@ -704,6 +905,11 @@
"resolved": "https://registry.npmjs.org/interpret/-/interpret-2.0.0.tgz",
"integrity": "sha512-e0/LknJ8wpMMhTiWcjivB+ESwIuvHnBSlBbmP/pSb8CQJldoj1p2qv7xGZ/+BtbTziYRFSz8OsvdbiX45LtYQA=="
},
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
+ },
"ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
@@ -736,6 +942,11 @@
}
}
},
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ },
"is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
@@ -786,6 +997,14 @@
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
},
+ "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"
+ }
+ },
"is-glob": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
@@ -836,6 +1055,11 @@
"unc-path-regex": "^0.1.2"
}
},
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
+ },
"is-windows": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
@@ -856,6 +1080,11 @@
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
},
+ "js-string-escape": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz",
+ "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8="
+ },
"kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -908,6 +1137,14 @@
}
}
},
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
"liftoff": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz",
@@ -923,11 +1160,28 @@
"resolve": "^1.1.7"
}
},
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ }
+ },
"lodash": {
"version": "4.17.15",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
},
+ "lodash.assign": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+ "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc="
+ },
"make-iterator": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
@@ -1054,6 +1308,32 @@
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
},
+ "nocache": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz",
+ "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q=="
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "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="
+ },
"object-copy": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
@@ -1126,6 +1406,14 @@
"ee-first": "1.1.1"
}
},
+ "os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "requires": {
+ "lcid": "^1.0.0"
+ }
+ },
"packet-reader": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz",
@@ -1141,6 +1429,14 @@
"path-root": "^0.1.1"
}
},
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
"parse-passwd": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
@@ -1156,6 +1452,14 @@
"resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
"integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
},
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
"path-parse": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
@@ -1179,6 +1483,16 @@
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
"pg": {
"version": "8.0.3",
"resolved": "https://registry.npmjs.org/pg/-/pg-8.0.3.tgz",
@@ -1234,6 +1548,93 @@
"split": "^1.0.0"
}
},
+ "pgtools": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/pgtools/-/pgtools-0.3.0.tgz",
+ "integrity": "sha512-8NxDCJ8xJ6hOp9hVNZqxi+TZl7hM1Jc8pQyj8DlAbyaWnk5OsGwf3gB/UyDODdOguiim9QzbzPsslp//apO+Uw==",
+ "requires": {
+ "bluebird": "^3.3.5",
+ "pg": "^6.1.0",
+ "pg-connection-string": "^0.1.3",
+ "yargs": "^5.0.0"
+ },
+ "dependencies": {
+ "buffer-writer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz",
+ "integrity": "sha1-Iqk2kB4wKa/NdUfrRIfOtpejvwg="
+ },
+ "object-assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz",
+ "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A="
+ },
+ "packet-reader": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-0.3.1.tgz",
+ "integrity": "sha1-zWLmCvjX/qinBexP+ZCHHEaHHyc="
+ },
+ "pg": {
+ "version": "6.4.2",
+ "resolved": "https://registry.npmjs.org/pg/-/pg-6.4.2.tgz",
+ "integrity": "sha1-w2QBEGDqx6UHoq4GPrhX7OkQ4n8=",
+ "requires": {
+ "buffer-writer": "1.0.1",
+ "js-string-escape": "1.0.1",
+ "packet-reader": "0.3.1",
+ "pg-connection-string": "0.1.3",
+ "pg-pool": "1.*",
+ "pg-types": "1.*",
+ "pgpass": "1.*",
+ "semver": "4.3.2"
+ }
+ },
+ "pg-pool": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-1.8.0.tgz",
+ "integrity": "sha1-9+xzgkw3oD8Hb1G/33DjQBR8Tzc=",
+ "requires": {
+ "generic-pool": "2.4.3",
+ "object-assign": "4.1.0"
+ }
+ },
+ "pg-types": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-1.13.0.tgz",
+ "integrity": "sha512-lfKli0Gkl/+za/+b6lzENajczwZHc7D5kiUCZfgm914jipD2kIOIvEkAhZ8GrW3/TUoP9w8FHjwpPObBye5KQQ==",
+ "requires": {
+ "pg-int8": "1.0.1",
+ "postgres-array": "~1.0.0",
+ "postgres-bytea": "~1.0.0",
+ "postgres-date": "~1.0.0",
+ "postgres-interval": "^1.1.0"
+ }
+ },
+ "postgres-array": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-1.0.3.tgz",
+ "integrity": "sha512-5wClXrAP0+78mcsNX3/ithQ5exKvCyK5lr5NEEEeGwwM6NJdQgzIJBVxLvRW+huFpX92F2QnZ5CcokH0VhK2qQ=="
+ }
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
"posix-character-classes": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
@@ -1292,6 +1693,25 @@
"unpipe": "1.0.0"
}
},
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ }
+ },
"rechoir": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
@@ -1300,6 +1720,11 @@
"resolve": "^1.1.6"
}
},
+ "referrer-policy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz",
+ "integrity": "sha512-LgQJIuS6nAy1Jd88DCQRemyE3mS+ispwlqMk3b0yjZ257fI1v9c+/p6SD5gP5FGyXUIgrNOAfmyioHwZtYv2VA=="
+ },
"regex-not": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
@@ -1319,6 +1744,16 @@
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
"integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
},
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE="
+ },
"resolve": {
"version": "1.17.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
@@ -1407,6 +1842,11 @@
"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="
+ },
"set-value": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
@@ -1552,6 +1992,34 @@
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
},
+ "spdx-correct": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+ "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
+ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q=="
+ },
"split": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
@@ -1592,6 +2060,32 @@
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
},
+ "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"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
"tarn": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.0.tgz",
@@ -1744,6 +2238,15 @@
"homedir-polyfill": "^1.0.1"
}
},
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@@ -1757,10 +2260,69 @@
"isexe": "^2.0.0"
}
},
+ "which-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
+ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8="
+ },
+ "window-size": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz",
+ "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU="
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ }
+ },
+ "x-xss-protection": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.3.0.tgz",
+ "integrity": "sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg=="
+ },
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
+ },
+ "yargs": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-5.0.0.tgz",
+ "integrity": "sha1-M1UUSXfQV1fbuG1uOOwFYSOzpm4=",
+ "requires": {
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "lodash.assign": "^4.2.0",
+ "os-locale": "^1.4.0",
+ "read-pkg-up": "^1.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^1.0.2",
+ "which-module": "^1.0.0",
+ "window-size": "^0.2.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^3.2.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-3.2.0.tgz",
+ "integrity": "sha1-UIE1XRnZ0MjF2BrakIy05tGGZk8=",
+ "requires": {
+ "camelcase": "^3.0.0",
+ "lodash.assign": "^4.1.0"
+ }
}
}
}
diff --git a/package.json b/package.json
index 789be85..8337515 100644
--- a/package.json
+++ b/package.json
@@ -1,23 +1,25 @@
{
- "name": "backend",
- "version": "1.0.0",
- "description": "Backend for Meeting Planner",
- "main": "index.js",
- "scripts": {
- "dev": "nodemon index.js",
- "prod": "node index.js",
- "migrate": "node-pg-migrate"
- },
- "repository": {
- "type": "git",
- "url": "ssh://git@git.armada.digital:29418/meeting-planner/backend.git"
- },
- "author": "rui hildt",
- "license": "AGPL-3.0-or-later",
- "dependencies": {
- "dotenv": "^8.2.0",
- "express": "^4.17.1",
- "knex": "^0.21.1",
- "pg": "^8.0.3"
- }
+ "name": "backend",
+ "version": "1.0.0",
+ "description": "Backend for Meeting Planner",
+ "main": "index.js",
+ "scripts": {
+ "dev": "nodemon index.js",
+ "prod": "node index.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "ssh://git@git.armada.digital:29418/meeting-planner/backend.git"
+ },
+ "author": "rui hildt",
+ "license": "AGPL-3.0-or-later",
+ "dependencies": {
+ "cors": "^2.8.5",
+ "dotenv": "^8.2.0",
+ "express": "^4.17.1",
+ "helmet": "^3.22.0",
+ "knex": "^0.21.1",
+ "pg": "^8.0.3",
+ "pgtools": "^0.3.0"
+ }
}