This commit is contained in:
ntr committed 2022-09-04 18:47:51 +10:00
1 parent 0bf75d7faa
commit 65d37eeb61
11 files changed
+708 -19

No files matched your search

+1 -1
View File
@@ -29,7 +29,7 @@ async function start() {
} = createServices(log); } = createServices(log);
// events.emit(Events.StartupSync); // events.emit(Events.StartupSync);
events.emit(Events.ListingsUpdated); // events.emit(Events.ListingsUpdated);
await api.listen(); await api.listen();
} }
+655
View File
@@ -20,6 +20,8 @@
"koa-body": "^5.0.0", "koa-body": "^5.0.0",
"koa-passport": "^5.0.0", "koa-passport": "^5.0.0",
"koa-session": "^6.2.0", "koa-session": "^6.2.0",
"koa-websocket": "^7.0.0",
"koa-ws": "^1.0.1",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"passport-local": "^1.0.0" "passport-local": "^1.0.0"
}, },
@@ -488,6 +490,11 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1" "url": "https://github.com/chalk/ansi-styles?sponsor=1"
} }
}, },
"node_modules/any-promise": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
"integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
},
"node_modules/anymatch": { "node_modules/anymatch": {
"version": "3.1.2", "version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
@@ -597,6 +604,12 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/bindings": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz",
"integrity": "sha512-u4cBQNepWxYA55FunZSM7wMi55yQaN0otnhhilNoWHq0MfOfJeQx0v0mRRpolGOExPjZcl6FtB0BB8Xkb88F0g==",
"optional": true
},
"node_modules/bluebird": { "node_modules/bluebird": {
"version": "3.7.2", "version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
@@ -663,6 +676,23 @@
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"dev": true "dev": true
}, },
"node_modules/bufferutil": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-1.1.0.tgz",
"integrity": "sha512-bttEVtkre4VYrZH+ciatjApTuac7jLMQXVXzM/ymw82WFREdOrJO496C4Bkh0/FfYoBUSOFaAYF32a5Q8dyiLw==",
"hasInstallScript": true,
"optional": true,
"dependencies": {
"bindings": "1.2.x",
"nan": "1.8.x"
}
},
"node_modules/bufferutil/node_modules/nan": {
"version": "1.8.4",
"resolved": "https://registry.npmjs.org/nan/-/nan-1.8.4.tgz",
"integrity": "sha512-609zQ1h3ApgH/94qmbbEklSrjcYYXCHnsWk4MAojq4OUk3tidhDYhPaMasMFKsZPZ96r4eQA1hbR2W4H7/77XA==",
"optional": true
},
"node_modules/bunyan": { "node_modules/bunyan": {
"version": "1.8.15", "version": "1.8.15",
"resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz",
@@ -892,6 +922,15 @@
"node": ">= 0.8" "node": ">= 0.8"
} }
}, },
"node_modules/composition": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/composition/-/composition-2.3.0.tgz",
"integrity": "sha512-b2wTferUuej6qDfrwPnM6KNd6MHSA1q0/aatvJhUmH2/kUM5wsn4t8sc5vj0NECwsLbAM+H4WitN4d2uL0pIRg==",
"dependencies": {
"any-promise": "^1.1.0",
"co": "^4.0.2"
}
},
"node_modules/concat-map": { "node_modules/concat-map": {
"version": "0.0.1", "version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -1177,6 +1216,11 @@
"url": "https://github.com/fb55/entities?sponsor=1" "url": "https://github.com/fb55/entities?sponsor=1"
} }
}, },
"node_modules/error-inject": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/error-inject/-/error-inject-1.0.0.tgz",
"integrity": "sha512-JM8N6PytDbmIYm1IhPWlo8vr3NtfjhDY/1MhD/a5b/aad/USE8a0+NsqE9d5n+GVGmuNkPQWm4bFQWv18d8tMg=="
},
"node_modules/escalade": { "node_modules/escalade": {
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -1899,6 +1943,11 @@
"node": ">= 10" "node": ">= 10"
} }
}, },
"node_modules/koa-is-json": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz",
"integrity": "sha512-+97CtHAlWDx0ndt0J8y3P12EWLwTLMXIfMnYDev3wOTwH/RpBGMlfn4bDXlMEg1u73K6XRE9BbUp+5ZAYoRYWw=="
},
"node_modules/koa-passport": { "node_modules/koa-passport": {
"version": "5.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/koa-passport/-/koa-passport-5.0.0.tgz", "resolved": "https://registry.npmjs.org/koa-passport/-/koa-passport-5.0.0.tgz",
@@ -1933,6 +1982,246 @@
"uuid": "bin/uuid" "uuid": "bin/uuid"
} }
}, },
"node_modules/koa-websocket": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/koa-websocket/-/koa-websocket-7.0.0.tgz",
"integrity": "sha512-MsHUFKqA4+j+0dpPKWtsvZfnpQ1NcgF+AaTZQZ4B3Xj/cWK31qqmKx9HnA5Gw1LV2aIDzqwy0IDBsZYRurTUAg==",
"dependencies": {
"co": "^4.6.0",
"debug": "^4.3.4",
"koa-compose": "^4.1.0",
"ws": "^8.5.0"
}
},
"node_modules/koa-websocket/node_modules/bufferutil": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz",
"integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==",
"hasInstallScript": true,
"optional": true,
"peer": true,
"dependencies": {
"node-gyp-build": "^4.3.0"
},
"engines": {
"node": ">=6.14.2"
}
},
"node_modules/koa-websocket/node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
"ms": "2.1.2"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/koa-websocket/node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/koa-websocket/node_modules/utf-8-validate": {
"version": "5.0.9",
"resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz",
"integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==",
"hasInstallScript": true,
"optional": true,
"peer": true,
"dependencies": {
"node-gyp-build": "^4.3.0"
},
"engines": {
"node": ">=6.14.2"
}
},
"node_modules/koa-websocket/node_modules/ws": {
"version": "8.8.1",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz",
"integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==",
"engines": {
"node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
"utf-8-validate": "^5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
"optional": true
},
"utf-8-validate": {
"optional": true
}
}
},
"node_modules/koa-ws": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/koa-ws/-/koa-ws-1.0.1.tgz",
"integrity": "sha512-Wfs/s/p0fuuzdnFrYviQ2ej7bSIBo+LA0xcStsu2W9RstxMpsBf3+DmGEQVC6FBuLRTJS5lZYdcZtAZ3fH6Ztw==",
"dependencies": {
"co": "^4.3.1",
"debug": "^2.1.1",
"keygrip": "^1.0.1",
"koa-ws-cookie-helper": "^1.0.3",
"object-assign": "^2.0.0",
"replacestream": "^2.0.0",
"ws": "^0.7.1"
}
},
"node_modules/koa-ws-cookie-helper": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/koa-ws-cookie-helper/-/koa-ws-cookie-helper-1.1.0.tgz",
"integrity": "sha512-qgBt3jjOoU2CEGxx5cZj8HF3+xmdNFNYy8iJdG51++F1H33jQRPMRSh0ooNavej6WXw3/cMCGJs6mKCjXc1fIg==",
"dependencies": {
"keygrip": "1.0.x",
"koa": "0.21.x",
"ws": "0.7.x"
}
},
"node_modules/koa-ws-cookie-helper/node_modules/cookies": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/cookies/-/cookies-0.5.1.tgz",
"integrity": "sha512-k+gB4hHN2aBVzTqJ/XVlPCq02TeKRAbG1f/lY6grWwHc3uRlqv9VhitVGVZmykEMglQiAMqEiP1Wk/ffVOhGsg==",
"dependencies": {
"keygrip": "~1.0.0"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/koa-ws-cookie-helper/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/koa-ws-cookie-helper/node_modules/delegates": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-0.1.0.tgz",
"integrity": "sha512-tPYr58xmVlUWcL8zPk6ZAxP6XqiYx5IIn395dkeER12JmMy8P6ipGKnUvgD++g8+uCaALfs/CRERixvKBu1pow=="
},
"node_modules/koa-ws-cookie-helper/node_modules/depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/koa-ws-cookie-helper/node_modules/fresh": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz",
"integrity": "sha512-akx5WBKAwMSg36qoHTuMMVncHWctlaDGslJASDYAhoLrzDUDCjZlOngNa/iC6lPm9aA0qk8pN5KnpmbJHSIIQQ==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/koa-ws-cookie-helper/node_modules/http-errors": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
"integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
"dependencies": {
"depd": "~1.1.2",
"inherits": "2.0.4",
"setprototypeof": "1.2.0",
"statuses": ">= 1.5.0 < 2",
"toidentifier": "1.0.1"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/koa-ws-cookie-helper/node_modules/keygrip": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.0.3.tgz",
"integrity": "sha512-/PpesirAIfaklxUzp4Yb7xBper9MwP6hNRA6BGGUFCgbJ+BM5CKBtsoxinNXkLHAr+GXS1/lSlF2rP7cv5Fl+g==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/koa-ws-cookie-helper/node_modules/koa": {
"version": "0.21.1",
"resolved": "https://registry.npmjs.org/koa/-/koa-0.21.1.tgz",
"integrity": "sha512-j+GQ6KLN+m3UEHNHmHkdUOiHKfWe7cOA3hMcZffr67bSbJ4SQgRw3aZaRXMSIx96cn0q5LCd50ywjBYu/3xD8g==",
"dependencies": {
"accepts": "^1.2.2",
"co": "^4.4.0",
"composition": "^2.1.1",
"content-disposition": "~0.5.0",
"content-type": "^1.0.0",
"cookies": "~0.5.0",
"debug": "^2.6.9",
"delegates": "0.1.0",
"destroy": "^1.0.3",
"error-inject": "~1.0.0",
"escape-html": "~1.0.1",
"fresh": "^0.3.0",
"http-assert": "^1.1.0",
"http-errors": "^1.2.8",
"koa-compose": "^2.3.0",
"koa-is-json": "^1.0.0",
"mime-types": "^2.0.7",
"on-finished": "^2.1.0",
"only": "0.0.2",
"parseurl": "^1.3.0",
"statuses": "^1.2.0",
"type-is": "^1.5.5",
"vary": "^1.0.0"
},
"engines": {
"iojs": ">= 1.0.0",
"node": ">= 0.11.16"
}
},
"node_modules/koa-ws-cookie-helper/node_modules/koa-compose": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-2.5.1.tgz",
"integrity": "sha512-bOGNe+7ZqVVCnGNej7qP8uJ+6ugiGLgpYgVnoj6KJAR8+rH0WzktzBXrRk/eHWisEYUa9I8ess0ROiVDfFXIOw=="
},
"node_modules/koa-ws-cookie-helper/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"node_modules/koa-ws-cookie-helper/node_modules/statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/koa-ws/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/koa-ws/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"node_modules/koa-ws/node_modules/object-assign": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
"integrity": "sha512-CdsOUYIh5wIiozhJ3rLQgmUTgcyzFwZZrqhkKhODMoGtPKM+wt0h0CNIoauJWMsS9822EdzPsF/6mb4nLvPN5g==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/koa/node_modules/debug": { "node_modules/koa/node_modules/debug": {
"version": "4.3.4", "version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -2433,6 +2722,18 @@
} }
} }
}, },
"node_modules/node-gyp-build": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz",
"integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==",
"optional": true,
"peer": true,
"bin": {
"node-gyp-build": "bin.js",
"node-gyp-build-optional": "optional.js",
"node-gyp-build-test": "build-test.js"
}
},
"node_modules/node-notifier": { "node_modules/node-notifier": {
"version": "8.0.2", "version": "8.0.2",
"resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz",
@@ -2532,6 +2833,14 @@
"resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz",
"integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==" "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ=="
}, },
"node_modules/options": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
"integrity": "sha512-bOj3L1ypm++N+n7CEbbe473A414AB7z+amKYshRb//iuL3MpdDCLhPnw6aVTdKB9g5ZRVHIEp8eUln6L2NUStg==",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/p-limit": { "node_modules/p-limit": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@@ -2752,6 +3061,14 @@
"node": ">=8.10.0" "node": ">=8.10.0"
} }
}, },
"node_modules/replacestream": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/replacestream/-/replacestream-2.1.0.tgz",
"integrity": "sha512-431BXd+suHsl7XLUxBhvZJKjMzouhF1XZixijpB4FTrlkdPwdSK9k5Jkaz0/UErOGu5zqHEXHRgZdvgPy8F0ZA==",
"dependencies": {
"through": "~2.3.4"
}
},
"node_modules/require-directory": { "node_modules/require-directory": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -2997,6 +3314,11 @@
"node": ">= 10" "node": ">= 10"
} }
}, },
"node_modules/through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
"integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="
},
"node_modules/to-regex-range": { "node_modules/to-regex-range": {
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -3153,6 +3475,11 @@
"node": ">=4.2.0" "node": ">=4.2.0"
} }
}, },
"node_modules/ultron": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
"integrity": "sha512-QMpnpVtYaWEeY+MwKDN/UdKlE/LsFZXM5lO1u7GaZzNgmIbGixHEmVMIKT+vqYOALu3m5GYQy9kz4Xu4IVn7Ow=="
},
"node_modules/unpipe": { "node_modules/unpipe": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -3161,6 +3488,23 @@
"node": ">= 0.8" "node": ">= 0.8"
} }
}, },
"node_modules/utf-8-validate": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-1.1.0.tgz",
"integrity": "sha512-Qsgu1u2akdyOneurUEVf/tXhkqBQMoE3x0GY5+P7ayPHvVzTqOkkgBhtl26wm6ap10Amhwy0jIhPwMGywx76QQ==",
"hasInstallScript": true,
"optional": true,
"dependencies": {
"bindings": "1.2.x",
"nan": "1.8.x"
}
},
"node_modules/utf-8-validate/node_modules/nan": {
"version": "1.8.4",
"resolved": "https://registry.npmjs.org/nan/-/nan-1.8.4.tgz",
"integrity": "sha512-609zQ1h3ApgH/94qmbbEklSrjcYYXCHnsWk4MAojq4OUk3tidhDYhPaMasMFKsZPZ96r4eQA1hbR2W4H7/77XA==",
"optional": true
},
"node_modules/util-deprecate": { "node_modules/util-deprecate": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -3254,6 +3598,19 @@
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
}, },
"node_modules/ws": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/ws/-/ws-0.7.2.tgz",
"integrity": "sha512-8mJ1Ku743qD/PKmO9Dg+y7BXTwzUgKdXguecfIyOVHFmez4JMqMF+V+M684btmQXHlwzyrJqRl3NYDltGDf6CQ==",
"dependencies": {
"options": ">=0.0.5",
"ultron": "1.0.x"
},
"optionalDependencies": {
"bufferutil": "1.1.x",
"utf-8-validate": "1.1.x"
}
},
"node_modules/xtend": { "node_modules/xtend": {
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
@@ -3736,6 +4093,11 @@
"color-convert": "^2.0.1" "color-convert": "^2.0.1"
} }
}, },
"any-promise": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
"integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
},
"anymatch": { "anymatch": {
"version": "3.1.2", "version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
@@ -3818,6 +4180,12 @@
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true "dev": true
}, },
"bindings": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz",
"integrity": "sha512-u4cBQNepWxYA55FunZSM7wMi55yQaN0otnhhilNoWHq0MfOfJeQx0v0mRRpolGOExPjZcl6FtB0BB8Xkb88F0g==",
"optional": true
},
"bluebird": { "bluebird": {
"version": "3.7.2", "version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
@@ -3867,6 +4235,24 @@
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"dev": true "dev": true
}, },
"bufferutil": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-1.1.0.tgz",
"integrity": "sha512-bttEVtkre4VYrZH+ciatjApTuac7jLMQXVXzM/ymw82WFREdOrJO496C4Bkh0/FfYoBUSOFaAYF32a5Q8dyiLw==",
"optional": true,
"requires": {
"bindings": "1.2.x",
"nan": "1.8.x"
},
"dependencies": {
"nan": {
"version": "1.8.4",
"resolved": "https://registry.npmjs.org/nan/-/nan-1.8.4.tgz",
"integrity": "sha512-609zQ1h3ApgH/94qmbbEklSrjcYYXCHnsWk4MAojq4OUk3tidhDYhPaMasMFKsZPZ96r4eQA1hbR2W4H7/77XA==",
"optional": true
}
}
},
"bunyan": { "bunyan": {
"version": "1.8.15", "version": "1.8.15",
"resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz",
@@ -4032,6 +4418,15 @@
"delayed-stream": "~1.0.0" "delayed-stream": "~1.0.0"
} }
}, },
"composition": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/composition/-/composition-2.3.0.tgz",
"integrity": "sha512-b2wTferUuej6qDfrwPnM6KNd6MHSA1q0/aatvJhUmH2/kUM5wsn4t8sc5vj0NECwsLbAM+H4WitN4d2uL0pIRg==",
"requires": {
"any-promise": "^1.1.0",
"co": "^4.0.2"
}
},
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -4243,6 +4638,11 @@
"resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz", "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz",
"integrity": "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==" "integrity": "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg=="
}, },
"error-inject": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/error-inject/-/error-inject-1.0.0.tgz",
"integrity": "sha512-JM8N6PytDbmIYm1IhPWlo8vr3NtfjhDY/1MhD/a5b/aad/USE8a0+NsqE9d5n+GVGmuNkPQWm4bFQWv18d8tMg=="
},
"escalade": { "escalade": {
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -4795,6 +5195,11 @@
"koa-compose": "^4.1.0" "koa-compose": "^4.1.0"
} }
}, },
"koa-is-json": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz",
"integrity": "sha512-+97CtHAlWDx0ndt0J8y3P12EWLwTLMXIfMnYDev3wOTwH/RpBGMlfn4bDXlMEg1u73K6XRE9BbUp+5ZAYoRYWw=="
},
"koa-passport": { "koa-passport": {
"version": "5.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/koa-passport/-/koa-passport-5.0.0.tgz", "resolved": "https://registry.npmjs.org/koa-passport/-/koa-passport-5.0.0.tgz",
@@ -4821,6 +5226,197 @@
} }
} }
}, },
"koa-websocket": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/koa-websocket/-/koa-websocket-7.0.0.tgz",
"integrity": "sha512-MsHUFKqA4+j+0dpPKWtsvZfnpQ1NcgF+AaTZQZ4B3Xj/cWK31qqmKx9HnA5Gw1LV2aIDzqwy0IDBsZYRurTUAg==",
"requires": {
"co": "^4.6.0",
"debug": "^4.3.4",
"koa-compose": "^4.1.0",
"ws": "^8.5.0"
},
"dependencies": {
"bufferutil": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz",
"integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==",
"optional": true,
"peer": true,
"requires": {
"node-gyp-build": "^4.3.0"
}
},
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"utf-8-validate": {
"version": "5.0.9",
"resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz",
"integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==",
"optional": true,
"peer": true,
"requires": {
"node-gyp-build": "^4.3.0"
}
},
"ws": {
"version": "8.8.1",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz",
"integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==",
"requires": {}
}
}
},
"koa-ws": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/koa-ws/-/koa-ws-1.0.1.tgz",
"integrity": "sha512-Wfs/s/p0fuuzdnFrYviQ2ej7bSIBo+LA0xcStsu2W9RstxMpsBf3+DmGEQVC6FBuLRTJS5lZYdcZtAZ3fH6Ztw==",
"requires": {
"co": "^4.3.1",
"debug": "^2.1.1",
"keygrip": "^1.0.1",
"koa-ws-cookie-helper": "^1.0.3",
"object-assign": "^2.0.0",
"replacestream": "^2.0.0",
"ws": "^0.7.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"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"object-assign": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
"integrity": "sha512-CdsOUYIh5wIiozhJ3rLQgmUTgcyzFwZZrqhkKhODMoGtPKM+wt0h0CNIoauJWMsS9822EdzPsF/6mb4nLvPN5g=="
}
}
},
"koa-ws-cookie-helper": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/koa-ws-cookie-helper/-/koa-ws-cookie-helper-1.1.0.tgz",
"integrity": "sha512-qgBt3jjOoU2CEGxx5cZj8HF3+xmdNFNYy8iJdG51++F1H33jQRPMRSh0ooNavej6WXw3/cMCGJs6mKCjXc1fIg==",
"requires": {
"keygrip": "1.0.x",
"koa": "0.21.x",
"ws": "0.7.x"
},
"dependencies": {
"cookies": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/cookies/-/cookies-0.5.1.tgz",
"integrity": "sha512-k+gB4hHN2aBVzTqJ/XVlPCq02TeKRAbG1f/lY6grWwHc3uRlqv9VhitVGVZmykEMglQiAMqEiP1Wk/ffVOhGsg==",
"requires": {
"keygrip": "~1.0.0"
}
},
"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"
}
},
"delegates": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-0.1.0.tgz",
"integrity": "sha512-tPYr58xmVlUWcL8zPk6ZAxP6XqiYx5IIn395dkeER12JmMy8P6ipGKnUvgD++g8+uCaALfs/CRERixvKBu1pow=="
},
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ=="
},
"fresh": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz",
"integrity": "sha512-akx5WBKAwMSg36qoHTuMMVncHWctlaDGslJASDYAhoLrzDUDCjZlOngNa/iC6lPm9aA0qk8pN5KnpmbJHSIIQQ=="
},
"http-errors": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
"integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
"requires": {
"depd": "~1.1.2",
"inherits": "2.0.4",
"setprototypeof": "1.2.0",
"statuses": ">= 1.5.0 < 2",
"toidentifier": "1.0.1"
}
},
"keygrip": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.0.3.tgz",
"integrity": "sha512-/PpesirAIfaklxUzp4Yb7xBper9MwP6hNRA6BGGUFCgbJ+BM5CKBtsoxinNXkLHAr+GXS1/lSlF2rP7cv5Fl+g=="
},
"koa": {
"version": "0.21.1",
"resolved": "https://registry.npmjs.org/koa/-/koa-0.21.1.tgz",
"integrity": "sha512-j+GQ6KLN+m3UEHNHmHkdUOiHKfWe7cOA3hMcZffr67bSbJ4SQgRw3aZaRXMSIx96cn0q5LCd50ywjBYu/3xD8g==",
"requires": {
"accepts": "^1.2.2",
"co": "^4.4.0",
"composition": "^2.1.1",
"content-disposition": "~0.5.0",
"content-type": "^1.0.0",
"cookies": "~0.5.0",
"debug": "^2.6.9",
"delegates": "0.1.0",
"destroy": "^1.0.3",
"error-inject": "~1.0.0",
"escape-html": "~1.0.1",
"fresh": "^0.3.0",
"http-assert": "^1.1.0",
"http-errors": "^1.2.8",
"koa-compose": "^2.3.0",
"koa-is-json": "^1.0.0",
"mime-types": "^2.0.7",
"on-finished": "^2.1.0",
"only": "0.0.2",
"parseurl": "^1.3.0",
"statuses": "^1.2.0",
"type-is": "^1.5.5",
"vary": "^1.0.0"
}
},
"koa-compose": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-2.5.1.tgz",
"integrity": "sha512-bOGNe+7ZqVVCnGNej7qP8uJ+6ugiGLgpYgVnoj6KJAR8+rH0WzktzBXrRk/eHWisEYUa9I8ess0ROiVDfFXIOw=="
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA=="
}
}
},
"locate-path": { "locate-path": {
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -5146,6 +5742,13 @@
"whatwg-url": "^5.0.0" "whatwg-url": "^5.0.0"
} }
}, },
"node-gyp-build": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz",
"integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==",
"optional": true,
"peer": true
},
"node-notifier": { "node-notifier": {
"version": "8.0.2", "version": "8.0.2",
"resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz",
@@ -5224,6 +5827,11 @@
"resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz",
"integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==" "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ=="
}, },
"options": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
"integrity": "sha512-bOj3L1ypm++N+n7CEbbe473A414AB7z+amKYshRb//iuL3MpdDCLhPnw6aVTdKB9g5ZRVHIEp8eUln6L2NUStg=="
},
"p-limit": { "p-limit": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@@ -5375,6 +5983,14 @@
"picomatch": "^2.2.1" "picomatch": "^2.2.1"
} }
}, },
"replacestream": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/replacestream/-/replacestream-2.1.0.tgz",
"integrity": "sha512-431BXd+suHsl7XLUxBhvZJKjMzouhF1XZixijpB4FTrlkdPwdSK9k5Jkaz0/UErOGu5zqHEXHRgZdvgPy8F0ZA==",
"requires": {
"through": "~2.3.4"
}
},
"require-directory": { "require-directory": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -5552,6 +6168,11 @@
"yallist": "^4.0.0" "yallist": "^4.0.0"
} }
}, },
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
"integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="
},
"to-regex-range": { "to-regex-range": {
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -5648,11 +6269,34 @@
"integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==",
"dev": true "dev": true
}, },
"ultron": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
"integrity": "sha512-QMpnpVtYaWEeY+MwKDN/UdKlE/LsFZXM5lO1u7GaZzNgmIbGixHEmVMIKT+vqYOALu3m5GYQy9kz4Xu4IVn7Ow=="
},
"unpipe": { "unpipe": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
}, },
"utf-8-validate": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-1.1.0.tgz",
"integrity": "sha512-Qsgu1u2akdyOneurUEVf/tXhkqBQMoE3x0GY5+P7ayPHvVzTqOkkgBhtl26wm6ap10Amhwy0jIhPwMGywx76QQ==",
"optional": true,
"requires": {
"bindings": "1.2.x",
"nan": "1.8.x"
},
"dependencies": {
"nan": {
"version": "1.8.4",
"resolved": "https://registry.npmjs.org/nan/-/nan-1.8.4.tgz",
"integrity": "sha512-609zQ1h3ApgH/94qmbbEklSrjcYYXCHnsWk4MAojq4OUk3tidhDYhPaMasMFKsZPZ96r4eQA1hbR2W4H7/77XA==",
"optional": true
}
}
},
"util-deprecate": { "util-deprecate": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -5728,6 +6372,17 @@
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
}, },
"ws": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/ws/-/ws-0.7.2.tgz",
"integrity": "sha512-8mJ1Ku743qD/PKmO9Dg+y7BXTwzUgKdXguecfIyOVHFmez4JMqMF+V+M684btmQXHlwzyrJqRl3NYDltGDf6CQ==",
"requires": {
"bufferutil": "1.1.x",
"options": ">=0.0.5",
"ultron": "1.0.x",
"utf-8-validate": "1.1.x"
}
},
"xtend": { "xtend": {
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+2
View File
@@ -37,6 +37,8 @@
"koa-body": "^5.0.0", "koa-body": "^5.0.0",
"koa-passport": "^5.0.0", "koa-passport": "^5.0.0",
"koa-session": "^6.2.0", "koa-session": "^6.2.0",
"koa-websocket": "^7.0.0",
"koa-ws": "^1.0.1",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"passport-local": "^1.0.0" "passport-local": "^1.0.0"
}, },
+23
View File
@@ -1,6 +1,7 @@
import http from 'http'; import http from 'http';
import koa from 'koa'; import koa from 'koa';
import koaWebsocket from 'koa-websocket';
import bodyParser from 'koa-body'; import bodyParser from 'koa-body';
import session from 'koa-session'; import session from 'koa-session';
import koaRouter from '@koa/router' import koaRouter from '@koa/router'
@@ -18,10 +19,13 @@ import { Events } from './events';
export default function createApi(log: Log, pg: Pg, discogs, offers, events) { export default function createApi(log: Log, pg: Pg, discogs, offers, events) {
const PORT = 41337; const PORT = 41337;
const WS_PORT = 40055;
const SECRET = 'ohja4Eif9eidah3aj5ta2haa4iemooth'; const SECRET = 'ohja4Eif9eidah3aj5ta2haa4iemooth';
const app = new koa(); const app = new koa();
const server = http.createServer(app.callback()); const server = http.createServer(app.callback());
const wsApp = koaWebsocket(new koa());
const wsServer = http.createServer(wsApp.callback());
app.use(async (ctx, next) => { app.use(async (ctx, next) => {
try { try {
@@ -46,6 +50,9 @@ export default function createApi(log: Log, pg: Pg, discogs, offers, events) {
server.listen(PORT, () => { server.listen(PORT, () => {
log.info('listening', { PORT }); log.info('listening', { PORT });
}); });
wsApp.listen(WS_PORT);
log.info('ws listening', { WS_PORT });
}); });
} }
@@ -153,7 +160,23 @@ export default function createApi(log: Log, pg: Pg, discogs, offers, events) {
ctx.body = { success: true }; ctx.body = { success: true };
}); });
const wsRouter = koaRouter();
// Using routes
wsRouter.get('/ws', async (ctx, next) => {
// `ctx` is the regular koa context created from the `ws` onConnection `socket.upgradeReq` object.
// the websocket is added to the context on `ctx.websocket`.
ctx.websocket.send('Hello World');
ctx.websocket.on('message', (message) => {
// do something with the message from client
if (message.toString() === 'ping') {
ctx.websocket.send('pong');
}
});
return next;
});
app.use(router.routes()); app.use(router.routes());
wsApp.ws.use(wsRouter.routes());
return { return {
app, app,
+3 -1
View File
@@ -3,7 +3,7 @@ import { useState, useEffect } from 'preact/hooks';
import { Route, Router, route } from 'preact-router'; import { Route, Router, route } from 'preact-router';
import { Provider, connect } from 'unistore/preact' import { Provider, connect } from 'unistore/preact'
import { createStore, actions } from './store'; import createStore from './store';
import createWs from './ws'; import createWs from './ws';
import http from './http'; import http from './http';
@@ -19,6 +19,8 @@ import List from './routes/list';
const store = createStore(); const store = createStore();
const ws = createWs(store); const ws = createWs(store);
ws.connect();
async function init() { async function init() {
const [error, user] = await http.getLogin(); const [error, user] = await http.getLogin();
if (error) return route('/login'); if (error) return route('/login');
+1 -1
View File
@@ -3,7 +3,7 @@ import { route } from 'preact-router';
import { connect } from 'unistore/preact' import { connect } from 'unistore/preact'
import http from './../http'; import http from './../http';
import { actions } from './../actions'; import actions from './../actions';
const Header = ({ user, logout }) => { const Header = ({ user, logout }) => {
+1 -1
View File
@@ -4,7 +4,7 @@ import { route } from 'preact-router';
import { connect } from 'unistore/preact' import { connect } from 'unistore/preact'
import http from './../http'; import http from './../http';
import { actions } from './../actions'; import actions from './../actions';
import Offer from './../components/offer'; import Offer from './../components/offer';
+1 -1
View File
@@ -4,7 +4,7 @@ import { useState, useEffect, useRef } from 'preact/hooks';
import { connect } from 'unistore/preact' import { connect } from 'unistore/preact'
import http from './../http'; import http from './../http';
import { actions } from './../actions'; import actions from './../actions';
const Login = ({ setUser, mode }) => { const Login = ({ setUser, mode }) => {
const [email, setEmail] = useState('') const [email, setEmail] = useState('')
+5 -3
View File
@@ -1,6 +1,8 @@
const SOCKET_URL = (window.location.host.includes('localhost') || window.location.host === '' || window.location.host.includes('192.168.0')) // const SOCKET_URL = (window.location.host.includes('localhost') || window.location.host === '' || window.location.host.includes('192.168.0'))
? `ws://${window.location.hostname}:40080` // ? `ws://${window.location.hostname}:40080`
: `${window.location.protocol === 'https:' ? 'wss://' : 'ws://'}${window.location.host}/api/ws`; // : `${window.location.protocol === 'https:' ? 'wss://' : 'ws://'}${window.location.host}/api/ws`;
const SOCKET_URL = `${window.location.protocol === 'https:' ? 'wss://' : 'ws://'}${window.location.host}/api/ws`;
export default function createSocket(store) { export default function createSocket(store) {
let ws; let ws;
+5
View File
@@ -22,11 +22,16 @@ services:
DATABASE_URL: 'postgresql://mcrates:digdeep@pg:5432/mcrates?schema=public' DATABASE_URL: 'postgresql://mcrates:digdeep@pg:5432/mcrates?schema=public'
volumes: volumes:
- "./api:/opt/mcrates/api" - "./api:/opt/mcrates/api"
ports:
- '41337:41337'
- '40055:40055'
client: client:
image: node:16 image: node:16
working_dir: /opt/mcrates/client working_dir: /opt/mcrates/client
entrypoint: npm start entrypoint: npm start
ports:
- '8080:8080' # fwd the hmr websocket
volumes: volumes:
- "./client:/opt/mcrates/client" - "./client:/opt/mcrates/client"
+11 -11
View File
@@ -2,14 +2,14 @@ upstream mcrates_api {
server api:41337; server api:41337;
} }
upstream mcrates_ws {
server api:40055;
}
upstream mcrates_client { upstream mcrates_client {
server client:8080; server client:8080;
} }
# upstream mcrates_ws {
# server 127.0.0.1:40055;
# }
map $http_upgrade $connection_upgrade { map $http_upgrade $connection_upgrade {
default upgrade; default upgrade;
'' close; '' close;
@@ -21,13 +21,13 @@ server {
proxy_read_timeout 600s; proxy_read_timeout 600s;
} }
# location /api/ws { location /api/ws {
# proxy_pass http://mcrates_ws; proxy_pass http://mcrates_ws;
# proxy_http_version 1.1; proxy_http_version 1.1;
# proxy_set_header Upgrade $http_upgrade; proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection $connection_upgrade; proxy_set_header Connection $connection_upgrade;
# proxy_read_timeout 600s; proxy_read_timeout 600s;
# } }
location /api/ { location /api/ {
# trailing slash means api will receive url WITHOUT /api # trailing slash means api will receive url WITHOUT /api