diff --git a/.circleci/config.yml b/.circleci/config.yml
index 65cb863..824a697 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -3,7 +3,7 @@ jobs:
build-job:
working_directory: ~/origin-calendar
docker:
- - image: circleci/node:8.11.0
+ - image: circleci/node:latest-browsers
- image: mongo:3.4.4
steps:
- checkout
diff --git a/client/css/style.css b/client/css/style.css
index cc6951f..0258b28 100644
--- a/client/css/style.css
+++ b/client/css/style.css
@@ -124,6 +124,14 @@ label {
border-top: 1px solid #9393932b;
}
+.table-striped {
+ overflow: scroll;
+ max-height: 500px;
+}
+.trash {
+ fill: #dc4245;
+}
+
th {
color: whitesmoke;
background-color: #4f6995;
@@ -145,3 +153,22 @@ th {
opacity: 1
}
}
+
+.text-center{
+ margin:auto;
+ justify-content: center;
+}
+
+#cancelbro{
+ margin:10;
+}
+
+select.form-control{
+ width:30%;
+ margin:left;
+}
+.auth {
+ position: absolute;
+ right: 15px;
+ top: 3px;
+}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 17f7a6c..ee3e468 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -103,138 +103,138 @@
}
},
"@webassemblyjs/ast": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.6.tgz",
- "integrity": "sha512-8nkZS48EVsMUU0v6F1LCIOw4RYWLm2plMtbhFTjNgeXmsTNLuU3xTRtnljt9BFQB+iPbLRobkNrCWftWnNC7wQ==",
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.8.tgz",
+ "integrity": "sha512-dOrtdtEyB8sInpl75yLPNksY4sRl0j/+t6aHyB/YA+ab9hV3Fo7FmG12FHzP+2MvWVAJtDb+6eXR5EZbZJ+uVg==",
"requires": {
"@webassemblyjs/helper-module-context": "1.7.6",
"@webassemblyjs/helper-wasm-bytecode": "1.7.6",
"@webassemblyjs/wast-parser": "1.7.6",
- "mamacro": "^0.0.3"
+ "mamacro": "0.0.3"
}
},
"@webassemblyjs/floating-point-hex-parser": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.6.tgz",
- "integrity": "sha512-VBOZvaOyBSkPZdIt5VBMg3vPWxouuM13dPXGWI1cBh3oFLNcFJ8s9YA7S9l4mPI7+Q950QqOmqj06oa83hNWBA=="
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.8.tgz",
+ "integrity": "sha512-kn2zNKGsbql5i56VAgRYkpG+VazqHhQQZQycT2uXAazrAEDs23gy+Odkh5VblybjnwX2/BITkDtNmSO76hdIvQ=="
},
"@webassemblyjs/helper-api-error": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.6.tgz",
- "integrity": "sha512-SCzhcQWHXfrfMSKcj8zHg1/kL9kb3aa5TN4plc/EREOs5Xop0ci5bdVBApbk2yfVi8aL+Ly4Qpp3/TRAUInjrg=="
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.8.tgz",
+ "integrity": "sha512-xUwxDXsd1dUKArJEP5wWM5zxgCSwZApSOJyP1XO7M8rNUChUDblcLQ4FpzTpWG2YeylMwMl1MlP5Ztryiz1x4g=="
},
"@webassemblyjs/helper-buffer": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.6.tgz",
- "integrity": "sha512-1/gW5NaGsEOZ02fjnFiU8/OEEXU1uVbv2um0pQ9YVL3IHSkyk6xOwokzyqqO1qDZQUAllb+V8irtClPWntbVqw=="
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.8.tgz",
+ "integrity": "sha512-WXiIMnuvuwlhWvVOm8xEXU9DnHaa3AgAU0ZPfvY8vO1cSsmYb2WbGbHnMLgs43vXnA7XAob9b56zuZaMkxpCBg=="
},
"@webassemblyjs/helper-code-frame": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.6.tgz",
- "integrity": "sha512-+suMJOkSn9+vEvDvgyWyrJo5vJsWSDXZmJAjtoUq4zS4eqHyXImpktvHOZwXp1XQjO5H+YQwsBgqTQEc0J/5zg==",
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.8.tgz",
+ "integrity": "sha512-TLQxyD9qGOIdX5LPQOPo0Ernd88U5rHkFb8WAjeMIeA0sPjCHeVPaGqUGGIXjUcblUkjuDAc07bruCcNHUrHDA==",
"requires": {
- "@webassemblyjs/wast-printer": "1.7.6"
+ "@webassemblyjs/wast-printer": "1.7.8"
}
},
"@webassemblyjs/helper-fsm": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.6.tgz",
- "integrity": "sha512-HCS6KN3wgxUihGBW7WFzEC/o8Eyvk0d56uazusnxXthDPnkWiMv+kGi9xXswL2cvfYfeK5yiM17z2K5BVlwypw=="
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.8.tgz",
+ "integrity": "sha512-TjK0CnD8hAPkV5mbSp5aWl6SO1+H3WFcjWtixWoy8EMA99YnNzYhpc/WSYWhf7yrhpzkq5tZB0tvLK3Svr3IXA=="
},
"@webassemblyjs/helper-module-context": {
"version": "1.7.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.6.tgz",
"integrity": "sha512-e8/6GbY7OjLM+6OsN7f2krC2qYVNaSr0B0oe4lWdmq5sL++8dYDD1TFbD1TdAdWMRTYNr/Qq7ovXWzia2EbSjw==",
"requires": {
- "mamacro": "^0.0.3"
+ "mamacro": "0.0.3"
}
},
"@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.6.tgz",
- "integrity": "sha512-PzYFCb7RjjSdAOljyvLWVqd6adAOabJW+8yRT+NWhXuf1nNZWH+igFZCUK9k7Cx7CsBbzIfXjJc7u56zZgFj9Q=="
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.8.tgz",
+ "integrity": "sha512-AdCCE3BMW6V34WYaKUmPgVHa88t2Z14P4/0LjLwuGkI0X6pf7nzp0CehzVVk51cKm2ymVXjl9dCG+gR1yhITIQ=="
},
"@webassemblyjs/helper-wasm-section": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.6.tgz",
- "integrity": "sha512-3GS628ppDPSuwcYlQ7cDCGr4W2n9c4hLzvnRKeuz+lGsJSmc/ADVoYpm1ts2vlB1tGHkjtQMni+yu8mHoMlKlA==",
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.8.tgz",
+ "integrity": "sha512-BkBhYQuzyl4hgTGOKo87Vdw6f9nj8HhI7WYpI0MCC5qFa5ahrAPOGgyETVdnRbv+Rjukl9MxxfDmVcVC435lDg==",
"requires": {
- "@webassemblyjs/ast": "1.7.6",
- "@webassemblyjs/helper-buffer": "1.7.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.7.6",
- "@webassemblyjs/wasm-gen": "1.7.6"
+ "@webassemblyjs/ast": "1.7.8",
+ "@webassemblyjs/helper-buffer": "1.7.8",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.8",
+ "@webassemblyjs/wasm-gen": "1.7.8"
}
},
"@webassemblyjs/ieee754": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.6.tgz",
- "integrity": "sha512-V4cIp0ruyw+hawUHwQLn6o2mFEw4t50tk530oKsYXQhEzKR+xNGDxs/SFFuyTO7X3NzEu4usA3w5jzhl2RYyzQ==",
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.8.tgz",
+ "integrity": "sha512-tOarWChdG1a3y1yqCX0JMDKzrat5tQe4pV6K/TX19BcXsBLYxFQOL1DEDa5KG9syeyvCrvZ+i1+Mv1ExngvktQ==",
"requires": {
"@xtuc/ieee754": "^1.2.0"
}
},
"@webassemblyjs/leb128": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.6.tgz",
- "integrity": "sha512-ojdlG8WpM394lBow4ncTGJoIVZ4aAtNOWHhfAM7m7zprmkVcKK+2kK5YJ9Bmj6/ketTtOn7wGSHCtMt+LzqgYQ==",
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.8.tgz",
+ "integrity": "sha512-GCYeGPgUFWJiZuP4NICbcyUQNxNLJIf476Ei+K+jVuuebtLpfvwkvYT6iTUE7oZYehhkor4Zz2g7SJ/iZaPudQ==",
"requires": {
"@xtuc/long": "4.2.1"
}
},
"@webassemblyjs/utf8": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.6.tgz",
- "integrity": "sha512-oId+tLxQ+AeDC34ELRYNSqJRaScB0TClUU6KQfpB8rNT6oelYlz8axsPhf6yPTg7PBJ/Z5WcXmUYiHEWgbbHJw=="
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.8.tgz",
+ "integrity": "sha512-9X+f0VV+xNXW2ujfIRSXBJENGE6Qh7bNVKqu3yDjTFB3ar3nsThsGBBKdTG58aXOm2iUH6v28VIf88ymPXODHA=="
},
"@webassemblyjs/wasm-edit": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.6.tgz",
- "integrity": "sha512-pTNjLO3o41v/Vz9VFLl+I3YLImpCSpodFW77pNoH4agn5I6GgSxXHXtvWDTvYJFty0jSeXZWLEmbaSIRUDlekg==",
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.8.tgz",
+ "integrity": "sha512-6D3Hm2gFixrfyx9XjSON4ml1FZTugqpkIz5Awvrou8fnpyprVzcm4X8pyGRtA2Piixjl3DqmX/HB1xdWyE097A==",
"requires": {
- "@webassemblyjs/ast": "1.7.6",
- "@webassemblyjs/helper-buffer": "1.7.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.7.6",
- "@webassemblyjs/helper-wasm-section": "1.7.6",
- "@webassemblyjs/wasm-gen": "1.7.6",
- "@webassemblyjs/wasm-opt": "1.7.6",
- "@webassemblyjs/wasm-parser": "1.7.6",
- "@webassemblyjs/wast-printer": "1.7.6"
+ "@webassemblyjs/ast": "1.7.8",
+ "@webassemblyjs/helper-buffer": "1.7.8",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.8",
+ "@webassemblyjs/helper-wasm-section": "1.7.8",
+ "@webassemblyjs/wasm-gen": "1.7.8",
+ "@webassemblyjs/wasm-opt": "1.7.8",
+ "@webassemblyjs/wasm-parser": "1.7.8",
+ "@webassemblyjs/wast-printer": "1.7.8"
}
},
"@webassemblyjs/wasm-gen": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.6.tgz",
- "integrity": "sha512-mQvFJVumtmRKEUXMohwn8nSrtjJJl6oXwF3FotC5t6e2hlKMh8sIaW03Sck2MDzw9xPogZD7tdP5kjPlbH9EcQ==",
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.8.tgz",
+ "integrity": "sha512-a7O/wE6eBeVKKUYgpMK7NOHmMADD85rSXLe3CqrWRDwWff5y3cSVbzpN6Qv3z6C4hdkpq9qyij1Ga1kemOZGvQ==",
"requires": {
- "@webassemblyjs/ast": "1.7.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.7.6",
- "@webassemblyjs/ieee754": "1.7.6",
- "@webassemblyjs/leb128": "1.7.6",
- "@webassemblyjs/utf8": "1.7.6"
+ "@webassemblyjs/ast": "1.7.8",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.8",
+ "@webassemblyjs/ieee754": "1.7.8",
+ "@webassemblyjs/leb128": "1.7.8",
+ "@webassemblyjs/utf8": "1.7.8"
}
},
"@webassemblyjs/wasm-opt": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.6.tgz",
- "integrity": "sha512-go44K90fSIsDwRgtHhX14VtbdDPdK2sZQtZqUcMRvTojdozj5tLI0VVJAzLCfz51NOkFXezPeVTAYFqrZ6rI8Q==",
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.8.tgz",
+ "integrity": "sha512-3lbQ0PT81NHCdi1sR/7+SNpZadM4qYcTSr62nFFAA7e5lFwJr14M1Gi+A/Y3PgcDWOHYjsaNGPpPU0H03N6Blg==",
"requires": {
- "@webassemblyjs/ast": "1.7.6",
- "@webassemblyjs/helper-buffer": "1.7.6",
- "@webassemblyjs/wasm-gen": "1.7.6",
- "@webassemblyjs/wasm-parser": "1.7.6"
+ "@webassemblyjs/ast": "1.7.8",
+ "@webassemblyjs/helper-buffer": "1.7.8",
+ "@webassemblyjs/wasm-gen": "1.7.8",
+ "@webassemblyjs/wasm-parser": "1.7.8"
}
},
"@webassemblyjs/wasm-parser": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.6.tgz",
- "integrity": "sha512-t1T6TfwNY85pDA/HWPA8kB9xA4sp9ajlRg5W7EKikqrynTyFo+/qDzIpvdkOkOGjlS6d4n4SX59SPuIayR22Yg==",
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.8.tgz",
+ "integrity": "sha512-rZ/zlhp9DHR/05zh1MbAjT2t624sjrPP/OkJCjXqzm7ynH+nIdNcn9Ixc+qzPMFXhIrk0rBoQ3to6sEIvHh9jQ==",
"requires": {
- "@webassemblyjs/ast": "1.7.6",
- "@webassemblyjs/helper-api-error": "1.7.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.7.6",
- "@webassemblyjs/ieee754": "1.7.6",
- "@webassemblyjs/leb128": "1.7.6",
- "@webassemblyjs/utf8": "1.7.6"
+ "@webassemblyjs/ast": "1.7.8",
+ "@webassemblyjs/helper-api-error": "1.7.8",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.8",
+ "@webassemblyjs/ieee754": "1.7.8",
+ "@webassemblyjs/leb128": "1.7.8",
+ "@webassemblyjs/utf8": "1.7.8"
}
},
"@webassemblyjs/wast-parser": {
@@ -248,16 +248,16 @@
"@webassemblyjs/helper-code-frame": "1.7.6",
"@webassemblyjs/helper-fsm": "1.7.6",
"@xtuc/long": "4.2.1",
- "mamacro": "^0.0.3"
+ "mamacro": "0.0.3"
}
},
"@webassemblyjs/wast-printer": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.6.tgz",
- "integrity": "sha512-vHdHSK1tOetvDcl1IV1OdDeGNe/NDDQ+KzuZHMtqTVP1xO/tZ/IKNpj5BaGk1OYFdsDWQqb31PIwdEyPntOWRQ==",
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.8.tgz",
+ "integrity": "sha512-GllIthRtwTxRDAURRNXscu7Napzmdf1jt1gpiZiK/QN4fH0lSGs3OTmvdfsMNP7tqI4B3ZtfaaWRlNIQug6Xyg==",
"requires": {
- "@webassemblyjs/ast": "1.7.6",
- "@webassemblyjs/wast-parser": "1.7.6",
+ "@webassemblyjs/ast": "1.7.8",
+ "@webassemblyjs/wast-parser": "1.7.8",
"@xtuc/long": "4.2.1"
}
},
@@ -401,6 +401,11 @@
"resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
"integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
},
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E="
+ },
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
@@ -1393,9 +1398,9 @@
"integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q=="
},
"binary-extensions": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz",
- "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU="
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz",
+ "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg=="
},
"bl": {
"version": "2.0.1",
@@ -1601,6 +1606,11 @@
"ieee754": "^1.1.4"
}
},
+ "buffer-equal-constant-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
+ "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
+ },
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
@@ -1611,6 +1621,11 @@
"resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
"integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
},
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8="
+ },
"builtin-status-codes": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
@@ -1687,6 +1702,22 @@
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
"integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
},
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
+ }
+ }
+ },
"camelize": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz",
@@ -1873,6 +1904,11 @@
}
}
},
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
+ },
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -2150,6 +2186,14 @@
"randomfill": "^1.0.3"
}
},
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "requires": {
+ "array-find-index": "^1.0.1"
+ }
+ },
"cyclist": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
@@ -2203,6 +2247,14 @@
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
},
+ "deep-defaults": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/deep-defaults/-/deep-defaults-1.0.5.tgz",
+ "integrity": "sha512-5ev/sNkiHTmeTqbDJEDgdQa/Ub0eOMQNix9l+dLLGbwOos7/in5HdvHXI014wqxsET4YeJG9Eq4qj0PJRL8rSw==",
+ "requires": {
+ "lodash": "^4.17.5"
+ }
+ },
"deep-eql": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
@@ -2227,6 +2279,14 @@
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
"dev": true
},
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "requires": {
+ "clone": "^1.0.2"
+ }
+ },
"define-property": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
@@ -2432,6 +2492,14 @@
"safer-buffer": "^2.1.0"
}
},
+ "ecdsa-sig-formatter": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.10.tgz",
+ "integrity": "sha1-HFlQAPBKiJffuFAAiSoPTDOvhsM=",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -2442,6 +2510,62 @@
"resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz",
"integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ=="
},
+ "electron": {
+ "version": "1.8.8",
+ "resolved": "https://registry.npmjs.org/electron/-/electron-1.8.8.tgz",
+ "integrity": "sha512-1f9zJehcTTGjrkb06o6ds+gsRq6SYhZJyxOk6zIWjRH8hVy03y/RzUDELzNas71f5vcvXmfGVvyjeEsadDI8tg==",
+ "requires": {
+ "@types/node": "^8.0.24",
+ "electron-download": "^3.0.1",
+ "extract-zip": "^1.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.30",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.30.tgz",
+ "integrity": "sha512-Le8HGMI5gjFSBqcCuKP/wfHC19oURzkU2D+ERIescUoJd+CmNEMYBib9LQ4zj1HHEZOJQWhw2ZTnbD8weASh/Q=="
+ }
+ }
+ },
+ "electron-download": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-3.3.0.tgz",
+ "integrity": "sha1-LP1U1pZsAZxNSa1l++Zcyc3vaMg=",
+ "requires": {
+ "debug": "^2.2.0",
+ "fs-extra": "^0.30.0",
+ "home-path": "^1.0.1",
+ "minimist": "^1.2.0",
+ "nugget": "^2.0.0",
+ "path-exists": "^2.1.0",
+ "rc": "^1.1.2",
+ "semver": "^5.3.0",
+ "sumchecker": "^1.2.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"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ },
+ "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"
+ }
+ }
+ }
+ },
"electron-to-chromium": {
"version": "1.3.68",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.68.tgz",
@@ -2502,6 +2626,21 @@
"tapable": "^1.0.0"
}
},
+ "enqueue": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/enqueue/-/enqueue-1.0.2.tgz",
+ "integrity": "sha1-kBTpvOVw7pPKlubI5jrVTBkra8g=",
+ "requires": {
+ "sliced": "0.0.5"
+ },
+ "dependencies": {
+ "sliced": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/sliced/-/sliced-0.0.5.tgz",
+ "integrity": "sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8="
+ }
+ }
+ },
"entities": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
@@ -2515,6 +2654,14 @@
"prr": "~1.0.1"
}
},
+ "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"
+ }
+ },
"es5-ext": {
"version": "0.10.46",
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz",
@@ -2855,7 +3002,7 @@
},
"events": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz",
"integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
},
"evp_bytestokey": {
@@ -3092,6 +3239,27 @@
}
}
},
+ "extract-zip": {
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz",
+ "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=",
+ "requires": {
+ "concat-stream": "1.6.2",
+ "debug": "2.6.9",
+ "mkdirp": "0.5.1",
+ "yauzl": "2.4.1"
+ },
+ "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"
+ }
+ }
+ }
+ },
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
@@ -3126,6 +3294,14 @@
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
"dev": true
},
+ "fd-slicer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
+ "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
+ "requires": {
+ "pend": "~1.2.0"
+ }
+ },
"figures": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
@@ -3293,6 +3469,18 @@
"readable-stream": "^2.0.0"
}
},
+ "fs-extra": {
+ "version": "0.30.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
+ "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^2.1.0",
+ "klaw": "^1.0.0",
+ "path-is-absolute": "^1.0.0",
+ "rimraf": "^2.2.8"
+ }
+ },
"fs-write-stream-atomic": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
@@ -3771,6 +3959,11 @@
}
}
},
+ "function-source": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/function-source/-/function-source-0.1.0.tgz",
+ "integrity": "sha1-2RBL8+RniLVUaMAr8bL6vPj8Ga8="
+ },
"g11n-pipeline": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/g11n-pipeline/-/g11n-pipeline-2.0.6.tgz",
@@ -3779,6 +3972,16 @@
"swagger-client": "^3.8.3"
}
},
+ "gcp-metadata": {
+ "version": "0.6.3",
+ "resolved": "http://registry.npmjs.org/gcp-metadata/-/gcp-metadata-0.6.3.tgz",
+ "integrity": "sha512-MSmczZctbz91AxCvqp9GHBoZOSbJKAICV7Ow/AIWSJZRrRchUd5NL1b2P4OfP+4m490BEUPhhARfpHdqCxuCvg==",
+ "requires": {
+ "axios": "^0.18.0",
+ "extend": "^3.0.1",
+ "retry-axios": "0.3.2"
+ }
+ },
"generate-function": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
@@ -3807,6 +4010,11 @@
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
"integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE="
},
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4="
+ },
"get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
@@ -3897,6 +4105,41 @@
}
}
},
+ "google-auth-library": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-1.6.1.tgz",
+ "integrity": "sha512-jYiWC8NA9n9OtQM7ANn0Tk464do9yhKEtaJ72pKcaBiEwn4LwcGYIYOfwtfsSm3aur/ed3tlSxbmg24IAT6gAg==",
+ "requires": {
+ "axios": "^0.18.0",
+ "gcp-metadata": "^0.6.3",
+ "gtoken": "^2.3.0",
+ "jws": "^3.1.5",
+ "lodash.isstring": "^4.0.1",
+ "lru-cache": "^4.1.3",
+ "retry-axios": "^0.3.2"
+ }
+ },
+ "google-p12-pem": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-1.0.2.tgz",
+ "integrity": "sha512-+EuKr4CLlGsnXx4XIJIVkcKYrsa2xkAmCvxRhX2HsazJzUBAJ35wARGeApHUn4nNfPD03Vl057FskNr20VaCyg==",
+ "requires": {
+ "node-forge": "^0.7.4",
+ "pify": "^3.0.0"
+ }
+ },
+ "googleapis": {
+ "version": "27.0.0",
+ "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-27.0.0.tgz",
+ "integrity": "sha512-Cz0BRsZmewc21N50x5nAUW5cqaGhJ9ETQKZMGqGL4BxmCV7ETELazSqmNi4oCDeRwM4Iub/fIJWAWZk2i6XLCg==",
+ "requires": {
+ "google-auth-library": "^1.3.1",
+ "pify": "^3.0.0",
+ "qs": "^6.5.1",
+ "string-template": "1.0.0",
+ "uuid": "^3.2.1"
+ }
+ },
"graceful-fs": {
"version": "4.1.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
@@ -3907,6 +4150,25 @@
"resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
"integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA=="
},
+ "gtoken": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-2.3.0.tgz",
+ "integrity": "sha512-Jc9/8mV630cZE9FC5tIlJCZNdUjwunvlwOtCz6IDlaiB4Sz68ki29a1+q97sWTnTYroiuF9B135rod9zrQdHLw==",
+ "requires": {
+ "axios": "^0.18.0",
+ "google-p12-pem": "^1.0.0",
+ "jws": "^3.1.4",
+ "mime": "^2.2.0",
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz",
+ "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg=="
+ }
+ }
+ },
"har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
@@ -4073,6 +4335,16 @@
"os-tmpdir": "^1.0.1"
}
},
+ "home-path": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.6.tgz",
+ "integrity": "sha512-wo+yjrdAtoXt43Vy92a+0IPCYViiyLAHyp0QVS4xL/tfvVz5sXIW1ubLZk3nhVkD92fQpUMKX+fzMjr5F489vw=="
+ },
+ "hosted-git-info": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w=="
+ },
"hpkp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz",
@@ -4181,6 +4453,14 @@
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
},
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
"indexof": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
@@ -4205,6 +4485,11 @@
"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=="
+ },
"inquirer": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz",
@@ -4312,6 +4597,11 @@
}
}
},
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ },
"is-binary-path": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
@@ -4325,6 +4615,14 @@
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
},
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "requires": {
+ "builtin-modules": "^1.0.0"
+ }
+ },
"is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
@@ -4503,11 +4801,21 @@
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
},
+ "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",
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
},
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
+ },
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -4630,6 +4938,14 @@
"resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
"integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
},
+ "jsonfile": {
+ "version": "2.4.0",
+ "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
"jsonify": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
@@ -4658,11 +4974,43 @@
"verror": "1.10.0"
}
},
+ "jwa": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.6.tgz",
+ "integrity": "sha512-tBO/cf++BUsJkYql/kBbJroKOgHWEigTKBAjjBEmrMGYd1QMBC74Hr4Wo2zCZw6ZrVhlJPvoMrkcOnlWR/DJfw==",
+ "requires": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.10",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "jws": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.5.tgz",
+ "integrity": "sha512-GsCSexFADNQUr8T5HPJvayTjvPIfoyJPtLQBwn5a4WZQchcrPMPMAWcC1AzJVRDKyD6ZPROPAxgv6rfHViO4uQ==",
+ "requires": {
+ "jwa": "^1.1.5",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "keypress": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz",
+ "integrity": "sha1-SjGI1CkbZrT2XtuZ+AaqmuKTWSo="
+ },
"kind-of": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
"integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
},
+ "klaw": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
+ "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
+ "requires": {
+ "graceful-fs": "^4.1.9"
+ }
+ },
"lcid": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
@@ -4681,10 +5029,37 @@
"type-check": "~0.3.2"
}
},
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "http://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"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ },
+ "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"
+ }
+ }
+ }
+ },
"loader-runner": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz",
- "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI="
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz",
+ "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw=="
},
"loader-utils": {
"version": "1.1.0",
@@ -4720,6 +5095,11 @@
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
"integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
},
+ "lodash.isstring": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE="
+ },
"loopback": {
"version": "3.22.3",
"resolved": "https://registry.npmjs.org/loopback/-/loopback-3.22.3.tgz",
@@ -5092,6 +5472,15 @@
"js-tokens": "^3.0.0 || ^4.0.0"
}
},
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "requires": {
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
+ }
+ },
"lru-cache": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
@@ -5120,11 +5509,6 @@
"pify": "^3.0.0"
}
},
- "mamacro": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz",
- "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA=="
- },
"map-age-cleaner": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz",
@@ -5138,6 +5522,11 @@
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
"integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
},
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0="
+ },
"map-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
@@ -5157,12 +5546,13 @@
}
},
"md5.js": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
- "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
"requires": {
"hash-base": "^3.0.0",
- "inherits": "^2.0.1"
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
}
},
"media-typer": {
@@ -5193,6 +5583,35 @@
"integrity": "sha512-Mf9OHV/Y7h6YWDxTzX/b4ZZ4oh9NSXblQL8dtPCOomOtZciEHxePR78+uHFLLlsk01A6jVHhHsQZZ/WcIPpnzg==",
"optional": true
},
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ },
+ "dependencies": {
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ }
+ }
+ },
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
@@ -5287,6 +5706,24 @@
"resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
},
+ "minstache": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minstache/-/minstache-1.2.0.tgz",
+ "integrity": "sha1-/xzEA6woRPaNvxjGYhKb5+sO/EE=",
+ "requires": {
+ "commander": "1.0.4"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "1.0.4",
+ "resolved": "http://registry.npmjs.org/commander/-/commander-1.0.4.tgz",
+ "integrity": "sha1-Xt6xruI8T7VBprcNaSq+8ZZpotM=",
+ "requires": {
+ "keypress": "0.1.x"
+ }
+ }
+ }
+ },
"mississippi": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz",
@@ -5390,6 +5827,14 @@
"resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz",
"integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y="
},
+ "moment-timezone": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.21.tgz",
+ "integrity": "sha512-j96bAh4otsgj3lKydm3K7kdtA3iKf2m6MY2iSYCzCm5a1zmHo1g+aK3068dDEeocLZQIS9kU8bsdQHLqEvgW0A==",
+ "requires": {
+ "moment": ">= 2.9.0"
+ }
+ },
"mongodb": {
"version": "3.1.6",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.1.6.tgz",
@@ -5512,6 +5957,14 @@
"safe-buffer": "^5.1.2"
}
},
+ "multiline": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/multiline/-/multiline-1.0.2.tgz",
+ "integrity": "sha1-abHyX/B00oKJBPJE3dBrfZbvbJM=",
+ "requires": {
+ "strip-indent": "^1.0.0"
+ }
+ },
"mute-stream": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
@@ -5532,9 +5985,9 @@
}
},
"nan": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.0.tgz",
- "integrity": "sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw==",
+ "version": "2.11.1",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
+ "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==",
"optional": true
},
"nanoid": {
@@ -5587,6 +6040,50 @@
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
},
+ "nightmare": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/nightmare/-/nightmare-3.0.1.tgz",
+ "integrity": "sha512-WptvyPfp5mHRRYHzt6+4xazaR9cc437BuLJI6cLFnqwwgxgdtsFImfBVDeTUCPAeLrkp5VryX5jlw7Wwg+UnFQ==",
+ "requires": {
+ "debug": "^2.2.0",
+ "deep-defaults": "^1.0.3",
+ "defaults": "^1.0.2",
+ "electron": "^1.8.4",
+ "enqueue": "^1.0.2",
+ "function-source": "^0.1.0",
+ "jsesc": "^0.5.0",
+ "minstache": "^1.2.0",
+ "mkdirp": "^0.5.1",
+ "multiline": "^1.0.2",
+ "once": "^1.3.3",
+ "rimraf": "^2.4.3",
+ "sliced": "1.0.1",
+ "split2": "^2.0.1"
+ },
+ "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"
+ }
+ },
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ }
+ }
+ },
"nocache": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/nocache/-/nocache-2.0.0.tgz",
@@ -5601,6 +6098,11 @@
"is-stream": "^1.0.1"
}
},
+ "node-forge": {
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz",
+ "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw=="
+ },
"node-libs-browser": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz",
@@ -5675,6 +6177,17 @@
"resolved": "https://registry.npmjs.org/nodemailer-stub-transport/-/nodemailer-stub-transport-1.1.0.tgz",
"integrity": "sha1-EUIdLWa07m9AU1T5FMH0ZB6ySw0="
},
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
"normalize-path": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
@@ -5691,6 +6204,35 @@
"path-key": "^2.0.0"
}
},
+ "nugget": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz",
+ "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=",
+ "requires": {
+ "debug": "^2.1.3",
+ "minimist": "^1.1.0",
+ "pretty-bytes": "^1.0.2",
+ "progress-stream": "^1.1.0",
+ "request": "^2.45.0",
+ "single-line-log": "^1.1.2",
+ "throttleit": "0.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"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ }
+ }
+ },
"number-is-nan": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
@@ -5734,6 +6276,11 @@
}
}
},
+ "object-keys": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
+ "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY="
+ },
"object-visit": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
@@ -5779,6 +6326,14 @@
"mimic-fn": "^1.0.0"
}
},
+ "opn": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz",
+ "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==",
+ "requires": {
+ "is-wsl": "^1.1.0"
+ }
+ },
"optional": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/optional/-/optional-0.1.4.tgz",
@@ -5891,6 +6446,14 @@
"pbkdf2": "^3.0.3"
}
},
+ "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"
+ }
+ },
"parseurl": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
@@ -5943,15 +6506,32 @@
"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"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ }
+ }
+ },
"pathval": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
"integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA="
},
"pbkdf2": {
- "version": "3.0.16",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz",
- "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==",
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
+ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
"requires": {
"create-hash": "^1.1.2",
"create-hmac": "^1.1.4",
@@ -5960,6 +6540,11 @@
"sha.js": "^2.4.8"
}
},
+ "pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
+ },
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
@@ -5973,14 +6558,12 @@
"pinkie": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
- "dev": true
+ "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=",
- "dev": true,
"requires": {
"pinkie": "^2.0.0"
}
@@ -6020,6 +6603,15 @@
"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
"dev": true
},
+ "pretty-bytes": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz",
+ "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=",
+ "requires": {
+ "get-stdin": "^4.0.1",
+ "meow": "^3.1.0"
+ }
+ },
"private": {
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
@@ -6041,6 +6633,55 @@
"integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
"dev": true
},
+ "progress-stream": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz",
+ "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=",
+ "requires": {
+ "speedometer": "~0.1.2",
+ "through2": "~0.2.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ },
+ "through2": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz",
+ "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=",
+ "requires": {
+ "readable-stream": "~1.1.9",
+ "xtend": "~2.1.1"
+ }
+ },
+ "xtend": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+ "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
+ "requires": {
+ "object-keys": "~0.4.0"
+ }
+ }
+ }
+ },
"promise-inflight": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
@@ -6080,15 +6721,16 @@
"integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ=="
},
"public-encrypt": {
- "version": "4.0.2",
- "resolved": "http://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz",
- "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
"requires": {
"bn.js": "^4.1.0",
"browserify-rsa": "^4.0.0",
"create-hash": "^1.1.0",
"parse-asn1": "^5.0.0",
- "randombytes": "^2.0.1"
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
}
},
"pump": {
@@ -6201,6 +6843,29 @@
}
}
},
+ "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"
+ },
+ "dependencies": {
+ "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=="
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ }
+ }
+ },
"react": {
"version": "16.5.1",
"resolved": "https://registry.npmjs.org/react/-/react-16.5.1.tgz",
@@ -6265,6 +6930,44 @@
"warning": "^4.0.1"
}
},
+ "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"
+ },
+ "dependencies": {
+ "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"
+ }
+ },
+ "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"
+ }
+ }
+ }
+ },
"readable-stream": {
"version": "2.3.6",
"resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
@@ -6326,6 +7029,15 @@
"resolve": "^1.1.6"
}
},
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "requires": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ }
+ },
"referrer-policy": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.1.0.tgz",
@@ -6530,6 +7242,11 @@
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
"integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
},
+ "retry-axios": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/retry-axios/-/retry-axios-0.3.2.tgz",
+ "integrity": "sha512-jp4YlI0qyDFfXiXGhkCOliBN1G7fRH03Nqy8YdShzGqbY5/9S2x/IR6C88ls2DFkbWuL3ASkP7QD3pVrNpPgwQ=="
+ },
"rimraf": {
"version": "2.2.8",
"resolved": "http://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
@@ -6624,9 +7341,9 @@
},
"dependencies": {
"ajv": {
- "version": "6.5.3",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz",
- "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==",
+ "version": "6.5.4",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz",
+ "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==",
"requires": {
"fast-deep-equal": "^2.0.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -6837,6 +7554,34 @@
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
},
+ "single-line-log": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz",
+ "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=",
+ "requires": {
+ "string-width": "^1.0.1"
+ },
+ "dependencies": {
+ "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"
+ }
+ }
+ }
+ },
"slash": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
@@ -6848,6 +7593,11 @@
"integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
"dev": true
},
+ "sliced": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
+ "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
+ },
"smtp-connection": {
"version": "2.12.0",
"resolved": "https://registry.npmjs.org/smtp-connection/-/smtp-connection-2.12.0.tgz",
@@ -7006,6 +7756,39 @@
"memory-pager": "^1.0.2"
}
},
+ "spdx-correct": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
+ "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg=="
+ },
+ "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.1",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz",
+ "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w=="
+ },
+ "speedometer": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz",
+ "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0="
+ },
"split-string": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
@@ -7014,6 +7797,14 @@
"extend-shallow": "^3.0.0"
}
},
+ "split2": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz",
+ "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
+ "requires": {
+ "through2": "^2.0.2"
+ }
+ },
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -7135,6 +7926,11 @@
"resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
"integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI="
},
+ "string-template": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz",
+ "integrity": "sha1-np8iM9wA8hhxjsN5oopWc+zKi5Y="
+ },
"string-width": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
@@ -7186,11 +7982,18 @@
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
},
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "requires": {
+ "get-stdin": "^4.0.1"
+ }
+ },
"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=",
- "dev": true
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
},
"strong-error-handler": {
"version": "2.3.2",
@@ -7318,6 +8121,25 @@
}
}
},
+ "sumchecker": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-1.3.1.tgz",
+ "integrity": "sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=",
+ "requires": {
+ "debug": "^2.2.0",
+ "es6-promise": "^4.0.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"
+ }
+ }
+ }
+ },
"superagent": {
"version": "3.8.3",
"resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz",
@@ -7412,6 +8234,11 @@
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
"dev": true
},
+ "throttleit": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz",
+ "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8="
+ },
"through": {
"version": "2.3.8",
"resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
@@ -7521,6 +8348,11 @@
"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
"integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc="
},
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM="
+ },
"trim-right": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
@@ -7673,19 +8505,21 @@
}
},
"unique-filename": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz",
- "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
"requires": {
"unique-slug": "^2.0.0"
- }
- },
- "unique-slug": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz",
- "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=",
- "requires": {
- "imurmurhash": "^0.1.4"
+ },
+ "dependencies": {
+ "unique-slug": {
+ "version": "2.0.0",
+ "resolved": "http://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz",
+ "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=",
+ "requires": {
+ "imurmurhash": "^0.1.4"
+ }
+ }
}
},
"unpipe": {
@@ -7831,6 +8665,15 @@
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz",
"integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw=="
},
+ "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"
+ }
+ },
"value-equal": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz",
@@ -7886,32 +8729,32 @@
"@webassemblyjs/helper-module-context": "1.7.6",
"@webassemblyjs/wasm-edit": "1.7.6",
"@webassemblyjs/wasm-parser": "1.7.6",
- "acorn": "^5.6.2",
- "acorn-dynamic-import": "^3.0.0",
- "ajv": "^6.1.0",
- "ajv-keywords": "^3.1.0",
- "chrome-trace-event": "^1.0.0",
- "enhanced-resolve": "^4.1.0",
- "eslint-scope": "^4.0.0",
- "json-parse-better-errors": "^1.0.2",
- "loader-runner": "^2.3.0",
- "loader-utils": "^1.1.0",
- "memory-fs": "~0.4.1",
- "micromatch": "^3.1.8",
- "mkdirp": "~0.5.0",
- "neo-async": "^2.5.0",
- "node-libs-browser": "^2.0.0",
- "schema-utils": "^0.4.4",
- "tapable": "^1.1.0",
- "uglifyjs-webpack-plugin": "^1.2.4",
- "watchpack": "^1.5.0",
- "webpack-sources": "^1.2.0"
+ "acorn": "5.7.3",
+ "acorn-dynamic-import": "3.0.0",
+ "ajv": "6.5.3",
+ "ajv-keywords": "3.2.0",
+ "chrome-trace-event": "1.0.0",
+ "enhanced-resolve": "4.1.0",
+ "eslint-scope": "4.0.0",
+ "json-parse-better-errors": "1.0.2",
+ "loader-runner": "2.3.0",
+ "loader-utils": "1.1.0",
+ "memory-fs": "0.4.1",
+ "micromatch": "3.1.10",
+ "mkdirp": "0.5.1",
+ "neo-async": "2.5.2",
+ "node-libs-browser": "2.1.0",
+ "schema-utils": "0.4.7",
+ "tapable": "1.1.0",
+ "uglifyjs-webpack-plugin": "1.3.0",
+ "watchpack": "1.6.0",
+ "webpack-sources": "1.2.0"
},
"dependencies": {
"ajv": {
- "version": "6.5.3",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz",
- "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==",
+ "version": "6.5.4",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz",
+ "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==",
"requires": {
"fast-deep-equal": "^2.0.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -7989,10 +8832,15 @@
}
}
},
+ "webpack-node-externals": {
+ "version": "1.7.2",
+ "resolved": "http://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-1.7.2.tgz",
+ "integrity": "sha512-ajerHZ+BJKeCLviLUUmnyd5B4RavLF76uv3cs6KNuO8W+HuQaEs0y0L7o40NQxdPy5w0pcv8Ew7yPUAQG0UdCg=="
+ },
"webpack-sources": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.2.0.tgz",
- "integrity": "sha512-9BZwxR85dNsjWz3blyxdOhTgtnQvv3OEs5xofI0wPYTwu5kaWxS08UuD1oI7WLBLpRO+ylf0ofnXLXWmGb2WMw==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz",
+ "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==",
"requires": {
"source-list-map": "^2.0.0",
"source-map": "~0.6.1"
@@ -8263,6 +9111,14 @@
"requires": {
"camelcase": "^4.1.0"
}
+ },
+ "yauzl": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
+ "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
+ "requires": {
+ "fd-slicer": "~1.0.1"
+ }
}
}
}
diff --git a/package.json b/package.json
index e0bb94b..8b880ae 100644
--- a/package.json
+++ b/package.json
@@ -8,10 +8,10 @@
"scripts": {
"build": "webpack --mode production",
"lint": "eslint .",
- "start": "node .",
+ "start": "node server/server.js",
"dev-start": "npm run build && node server/server.js",
"dev": "webpack -w --mode development",
- "test": "mocha tests --exit",
+ "test": "npm run build && mocha tests/* --exit",
"posttest": " "
},
"dependencies": {
@@ -27,6 +27,7 @@
"cors": "^2.5.2",
"dotenv": "^6.0.0",
"express": "^4.16.3",
+ "googleapis": "^27.0.0",
"helmet": "^3.13.0",
"loopback": "^3.0.0",
"loopback-boot": "^2.6.5",
@@ -35,14 +36,18 @@
"loopback-connector-sendgrid": "^2.2.4",
"mocha": "^5.2.0",
"moment": "^2.22.2",
+ "moment-timezone": "^0.5.21",
"morgan": "^1.9.0",
+ "nightmare": "^3.0.1",
+ "opn": "^5.4.0",
"react": "^16.4.1",
"react-dom": "^16.4.1",
"react-router-dom": "^4.3.1",
"serve-favicon": "^2.0.1",
"strong-error-handler": "^2.0.0",
- "webpack": "^4.12.0",
- "webpack-cli": "^3.0.8"
+ "webpack": "^4.20.2",
+ "webpack-cli": "^3.0.8",
+ "webpack-node-externals": "^1.7.2"
},
"devDependencies": {
"eslint": "^3.17.1",
diff --git a/server/boot/create-admin.js b/server/boot/create-admin.js
index e4be9c9..f20dc76 100644
--- a/server/boot/create-admin.js
+++ b/server/boot/create-admin.js
@@ -1,44 +1,86 @@
'use strict';
-require('dotenv').config();
-
module.exports = (app) => {
const {Visitor, Role, RoleMapping} = app.models;
- Visitor.findOrCreate({
- where: {
- email: 'instructor@origincodeacademy.com',
- },
- },
+
+ const instructors = [
{
email: 'instructor@origincodeacademy.com',
firstName: 'John',
lastName: 'Doe',
password: process.env.ADMIN_PASSWORD,
- emailVerified: true,
},
- (err, visitor) => {
- if (err) console.log(err);
- Role.findOrCreate({
- where: {
- name: 'ADMIN',
- },
+ {
+ email: 'anthony@origincodeacademy.com',
+ firstName: 'Anthony',
+ lastName: 'Valera',
+ password: process.env.ADMIN_PASSWORD,
+ },
+ {
+ email: 'christian@origincodeacademy.com',
+ firstName: 'Christian',
+ lastName: 'McFarland',
+ password: process.env.ADMIN_PASSWORD2,
+ },
+ {
+ email: 'michael@origincodeacademy.com',
+ firstName: 'Michael',
+ lastName: 'Roberts',
+ password: process.env.ADMIN_PASSWORD3,
+ },
+ ];
+
+ instructors.forEach(({email, firstName, lastName, password}) => {
+ Visitor.findOrCreate({
+ where: {
+ email,
+ },
+ },
+ {
+ email,
+ firstName,
+ lastName,
+ password,
+ emailVerified: true,
+ authToken: {},
},
- {
- name: 'ADMIN',
+ (err, visitor) => {
+ Role.findOrCreate({
+ where: {
+ name: 'ADMIN',
+ },
},
- (err, role) => {
- if (err) console.log('error creating role', err);
- RoleMapping.findOrCreate({
- where: {
- principalType: 'ADMIN',
- },
+ {
+ name: 'ADMIN',
},
- {
- principalType: 'ADMIN',
- principalId: visitor.id,
- }, (error, mapping) => {
- if (err) console.log(err);
- });
- });
+ (err, role) => {
+ if (err) console.log('error creating role', err);
+ RoleMapping.findOrCreate({
+ where: {
+ principalType: 'ADMIN',
+ principalId: visitor.id,
+ },
+ },
+ {
+ principalType: 'ADMIN',
+ principalId: visitor.id,
+ }, (error, mapping) => {
+ if (err) console.log(err);
+ });
+ });
+ });
+ });
+
+ Visitor.findOrCreate({
+ where: {
+ email: 'student@origincodeacademy.com',
+ },
+ },
+ {
+ email: 'student@origincodeacademy.com',
+ firstName: 'Student',
+ lastName: 'Studentson',
+ password: 'abc123',
+ emailVerified: true,
});
};
diff --git a/server/models/apt-request.js b/server/models/apt-request.js
index 297452a..507d981 100644
--- a/server/models/apt-request.js
+++ b/server/models/apt-request.js
@@ -39,4 +39,63 @@ module.exports = function(Aptrequest) {
{arg: 'time', type: 'string', required: true}],
returns: {arg: 'res', type: 'Object'},
});
+
+ Aptrequest.removeApt = function(email, time, cb) {
+ Aptrequest.app.models.Email.send({
+ to: email,
+ from: 'instructor@origincodeacademy.com',
+ subject: 'Appointment Removed',
+ text: `Your appointment on ${moment(time).format('L')}
+ at ${moment(time).format('hh:mm a')} was removed`,
+ }, function(err, mail) {
+ if (err) console.log(err);
+ return cb(null, mail);
+ });
+ };
+
+ Aptrequest.remoteMethod('removeApt', {
+ accepts: [{arg: 'email', type: 'string', required: true},
+ {arg: 'time', type: 'string', required: true}],
+ returns: {arg: 'res', type: 'Object'},
+ });
+
+ Aptrequest.replacedApt = function(email, time, cb) {
+ Aptrequest.app.models.Email.send({
+ to: email,
+ from: 'instructor@origincodeacademy.com',
+ subject: 'Appointment unavailable',
+ text: `Your appointment on ${moment(time).format('L')}
+ at ${moment(time).format('hh:mm a')} is no longer available.`,
+ }, function(err, mail) {
+ if (err) cb(err);
+ return cb(null, mail);
+ });
+ };
+
+ Aptrequest.remoteMethod('replacedApt', {
+ accepts: [{arg: 'email', type: 'string', required: true},
+ {arg: 'time', type: 'string', required: true}],
+ returns: {arg: 'res', type: 'Object'},
+ });
+
+ Aptrequest.emailAdmin = function(instructorEmail, time, studentName, cb) {
+ Aptrequest.app.models.Email.send({
+ to: instructorEmail,
+ from: 'instructor@origincodeacademy.com',
+ subject: `${studentName} Requested Your
+ ${moment(time).format('hh:mma')} Appointment`,
+ text: `${studentName} has requested your appointment at
+ ${moment(time).format('hh:mm a')} on ${moment(time).format('L')}`,
+ }, function(err, mail) {
+ if (err) cb(err);
+ return cb(null, mail);
+ });
+ };
+
+ Aptrequest.remoteMethod('emailAdmin', {
+ accepts: [{arg: 'instructorEmail', type: 'string', required: true},
+ {arg: 'time', type: 'string', required: true},
+ {arg: 'studentName', type: 'string', required: true}],
+ returns: {arg: 'res', type: 'Object'},
+ });
};
diff --git a/server/models/apt-request.json b/server/models/apt-request.json
index 00d00f6..70e2e7c 100644
--- a/server/models/apt-request.json
+++ b/server/models/apt-request.json
@@ -18,6 +18,10 @@
"type": "string",
"required": true
},
+ "instructorId": {
+ "type": "string",
+ "required": false
+ },
"time": {
"type": "date",
"required": true
diff --git a/server/models/booked-apt.js b/server/models/booked-apt.js
index 1568cfe..b689630 100644
--- a/server/models/booked-apt.js
+++ b/server/models/booked-apt.js
@@ -1,5 +1,30 @@
'use strict';
+const moment = require('moment');
-module.exports = function(Bookedapt) {
+module.exports = function(BookedApt) {
+
+
+ BookedApt.removedConfirmed = function(email, time, studentName, cb) {
+ BookedApt.app.models.Email.send({
+ to: email,
+ from: 'instructor@origincodeacademy.com',
+ subject: ' Confirmed Appointment Removed',
+ text: `Your appointment on ${moment(time).format('L')}
+ at ${moment(time).format('hh:mm a')} was removed${studentName}`,
+ }, function(err, mail) {
+ if (err) console.log(err);
+ return cb(null, mail);
+ });
+ };
+
+ BookedApt.remoteMethod('removedConfirmed', {
+ accepts: [{arg: 'email', type: 'string', required: true},
+ {arg: 'time', type: 'string', required: true},
+ {arg: 'studentName', type: 'string', required: true}],
+ http:{path:'/removedConfirmed', verb:'post'},
+ returns: {arg: 'res', type: 'Object'},
+ });
+
+
};
diff --git a/server/models/booked-apt.json b/server/models/booked-apt.json
index 95b64b6..19a9da5 100644
--- a/server/models/booked-apt.json
+++ b/server/models/booked-apt.json
@@ -14,6 +14,10 @@
"type": "string",
"required": true
},
+ "instructorId": {
+ "type": "string",
+ "required": true
+ },
"duration": {
"type": "number",
"required": true
diff --git a/server/models/visitor.js b/server/models/visitor.js
index aaacc1f..962f76b 100644
--- a/server/models/visitor.js
+++ b/server/models/visitor.js
@@ -1,5 +1,23 @@
'use strict';
+require('dotenv').config();
+const {google} = require('googleapis');
+const opn = require('opn');
+const axios = require('axios');
+let currentUser = {};
+
+const credentials = {
+ installed: {
+ clientId: process.env.CLIENT_ID,
+ projectId: process.env.PROJECT_ID,
+ authuri: process.env.AUTH_URI,
+ tokenUri: process.env.TOKEN_URI,
+ authProviderX509CertUri: process.env.AUTH_PROVIDER_X509_CERT_URL,
+ clientSecret: process.env.CLIENT_SECRET,
+ redirectUris: JSON.parse(process.env.REDIRECT_URIS),
+ },
+};
+
module.exports = function(Visitor) {
Visitor.isAdminRole = (id, callback) => {
const {RoleMapping} = Visitor.app.models;
@@ -15,4 +33,79 @@ module.exports = function(Visitor) {
http: {path: '/isAdminRole', verb: 'get'},
returns: {arg: 'data', type: 'object', root: true},
});
+
+ Visitor.oAuth = (user) => {
+ currentUser = user;
+ authorize(credentials);
+
+ function authorize(credentials) {
+ const {clientId, clientSecret, redirectUris} = credentials.installed;
+ const oAuth2Client = new google.auth.OAuth2(clientId, clientSecret, redirectUris[0]);
+
+ if (Object.keys(user.authToken).length == 0) {
+ return getAccessToken(oAuth2Client);
+ } else {
+ oAuth2Client.refreshToken(user.authToken.refresh_token)
+ .then(res => {
+ Visitor.upsertWithWhere(
+ {id: currentUser.id},
+ {
+ authToken: {
+ access_token: res.tokens.access_token,
+ refresh_token: user.authToken.refresh_token,
+ scope: 'https://www.googleapis.com/auth/calendar',
+ token_type: 'Bearer',
+ expiry_date: res.tokens.expiry_date,
+ },
+ });
+ })
+ .catch(err => console.log(err));
+ }
+
+ oAuth2Client.setCredentials(user.authToken);
+ }
+
+ function getAccessToken(oAuth2Client) {
+ const authUrl = oAuth2Client.generateAuthUrl({
+ access_type: 'offline',
+ prompt: 'consent',
+ scope: ['https://www.googleapis.com/auth/calendar'],
+ });
+
+ opn(authUrl);
+ }
+ };
+
+ Visitor.remoteMethod('oAuth', {
+ description: 'Returns a user oAuth.',
+ accepts: [
+ {arg: 'user', type: 'object'},
+ {arg: 'res', type: 'object', http: ctx => ctx.res},
+ ],
+ http: {path: '/oAuth', verb: 'post'},
+ returns: {arg: 'data', type: 'object', root: true},
+ });
+
+ Visitor.oAuthConfirm = (code, res) => {
+ const {clientId, clientSecret, redirectUris} = credentials.installed;
+ const oAuth2Client = new google.auth.OAuth2(clientId, clientSecret, redirectUris[0]);
+
+ oAuth2Client.getToken(code, (err, token) => {
+ if (err) return console.error('Error retrieving access token', err);
+ oAuth2Client.setCredentials(token);
+ Visitor.upsertWithWhere({id: currentUser.id}, {authToken: token});
+
+ res.redirect('/');
+ });
+ };
+
+ Visitor.remoteMethod('oAuthConfirm', {
+ description: 'Returns a user oAuth Token.',
+ accepts: [
+ {arg: 'code', type: 'string'},
+ {arg: 'res', type: 'object', http: ctx => ctx.res},
+ ],
+ http: {path: '/oAuthConfirm', verb: 'get'},
+ returns: {arg: 'data', type: 'object', root: true},
+ });
};
diff --git a/server/models/visitor.json b/server/models/visitor.json
index 78078c5..622859d 100644
--- a/server/models/visitor.json
+++ b/server/models/visitor.json
@@ -24,6 +24,10 @@
"emailVerified": {
"type": "boolean",
"requires": true
+ },
+ "authToken": {
+ "type": "object",
+ "required": false
}
},
"validations": [],
diff --git a/src/components/AdminAvailability/index.jsx b/src/components/AdminAvailability/index.jsx
index 26c374f..f39e461 100644
--- a/src/components/AdminAvailability/index.jsx
+++ b/src/components/AdminAvailability/index.jsx
@@ -1,18 +1,20 @@
import React, { Component } from 'react';
import axios from 'axios';
-import moment from 'moment';
+import moment from 'moment-timezone';
class Availability extends Component {
constructor(props) {
super(props);
this.state = {
- admin: 'Instructor A',
+ admin: 'anthony',
dateTime: '',
adminAvailSlots: []
};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
+ this.handleDelete = this.handleDelete.bind(this);
}
+
handleChange(event) {
this.setState({ [event.target.name]: event.target.value });
}
@@ -21,31 +23,55 @@ class Availability extends Component {
if (!this.state.dateTime) {
alert('Error: Please pick a date and time!')
} else {
-
event.preventDefault();
-
axios.post(`/api/Slots`, {
"instructorId": this.state.admin,
"timeSlot": this.state.dateTime,
"duration": 30
- }).then((response) => {
- }).catch((error) => {
+ })
+ .catch((error) => {
console.log(error)
})
const currentDate = new Date();
const currentDateIsoFormat = currentDate.toISOString();
axios.get(`/api/Slots?filter[where][timeSlot][gt]=` + currentDateIsoFormat)
- .then(res => this.setState({ adminAvailSlots: res.data})
- )
+ .then(res => this.setState({ adminAvailSlots: res.data })
+ )
}
}
+ handleDelete(event) {
+ let adminAvailSlots = this.state.adminAvailSlots
+ let slot = adminAvailSlots.findIndex(slot => slot.id == event.target.id);
+
+ axios.get(`/api/Slots/${adminAvailSlots[slot].id}/aptRequests`)
+ .then(res => {
+ res.data.map(request => {
+ axios.delete(`/api/AptRequests/${request.id}`)
+ .then(res => {
+ axios.post(`/api/AptRequests/denyEmail`, {
+ email: request.email,
+ time: request.time,
+ })
+ })
+ .catch(response => console.log(response))
+ })
+ })
+ .catch(response => console.log(response))
+ axios.delete(`/api/Slots/${event.target.id}`)
+ adminAvailSlots.splice(slot, 1);
+
+ this.setState({
+ adminAvailSlots: adminAvailSlots,
+ })
+ }
+
componentDidMount() {
- const currentDate = new Date();
- const currentDateIsoFormat = currentDate.toISOString();
- axios.get(`/api/Slots?filter[where][timeSlot][gt]=` + currentDateIsoFormat)
- .then(res => this.setState({ adminAvailSlots: res.data })
- )
+ const currentDate = new Date();
+ const currentDateIsoFormat = currentDate.toISOString();
+ axios.get(`/api/Slots?filter[where][timeSlot][gt]=` + currentDateIsoFormat)
+ .then(res => this.setState({ adminAvailSlots: res.data })
+ )
}
render() {
@@ -63,16 +89,16 @@ class Availability extends Component {
onChange={this.handleChange}
name="admin"
>
-
-
-
+
+
+
| Date | Time | Duration | +- { this.state.appointments.map(singleApt => | |
|---|---|---|---|---|
| {e.studentName} | +{moment(e.timeSlot).format('L')} | +{moment(e.timeSlot).format('hh:mm a')} | +{e.duration} | ++ + | +