diff --git a/.pnp.js b/.pnp.js index e4b0405..190db66 100755 --- a/.pnp.js +++ b/.pnp.js @@ -37,6 +37,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { [null, { "packageLocation": "./", "packageDependencies": [ + ["got", "npm:11.8.2"], ["jest", "npm:26.6.3"], ["koa", "npm:2.13.1"], ["koa-body", "npm:4.2.0"], @@ -858,6 +859,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["@sindresorhus/is", [ + ["npm:4.0.0", { + "packageLocation": "./.yarn/cache/@sindresorhus-is-npm-4.0.0-5aa71e5397-7022d5037f.zip/node_modules/@sindresorhus/is/", + "packageDependencies": [ + ["@sindresorhus/is", "npm:4.0.0"] + ], + "linkType": "HARD", + }] + ]], ["@sinonjs/commons", [ ["npm:1.8.2", { "packageLocation": "./.yarn/cache/@sinonjs-commons-npm-1.8.2-36d9339683-b7eb499e35.zip/node_modules/@sinonjs/commons/", @@ -878,6 +888,16 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["@szmarczak/http-timer", [ + ["npm:4.0.5", { + "packageLocation": "./.yarn/cache/@szmarczak-http-timer-npm-4.0.5-03463d10ab-13d8f71dbd.zip/node_modules/@szmarczak/http-timer/", + "packageDependencies": [ + ["@szmarczak/http-timer", "npm:4.0.5"], + ["defer-to-connect", "npm:2.0.1"] + ], + "linkType": "HARD", + }] + ]], ["@types/babel__core", [ ["npm:7.1.12", { "packageLocation": "./.yarn/cache/@types-babel__core-npm-7.1.12-0093691d63-e2642b77b8.zip/node_modules/@types/babel__core/", @@ -933,6 +953,19 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["@types/cacheable-request", [ + ["npm:6.0.1", { + "packageLocation": "./.yarn/cache/@types-cacheable-request-npm-6.0.1-067bf7714d-3dae802a08.zip/node_modules/@types/cacheable-request/", + "packageDependencies": [ + ["@types/cacheable-request", "npm:6.0.1"], + ["@types/http-cache-semantics", "npm:4.0.0"], + ["@types/keyv", "npm:3.1.1"], + ["@types/node", "npm:14.14.32"], + ["@types/responselike", "npm:1.0.0"] + ], + "linkType": "HARD", + }] + ]], ["@types/formidable", [ ["npm:1.0.32", { "packageLocation": "./.yarn/cache/@types-formidable-npm-1.0.32-12f895a971-98f3f54727.zip/node_modules/@types/formidable/", @@ -953,6 +986,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["@types/http-cache-semantics", [ + ["npm:4.0.0", { + "packageLocation": "./.yarn/cache/@types-http-cache-semantics-npm-4.0.0-000c9dc8e0-e16fae56d4.zip/node_modules/@types/http-cache-semantics/", + "packageDependencies": [ + ["@types/http-cache-semantics", "npm:4.0.0"] + ], + "linkType": "HARD", + }] + ]], ["@types/istanbul-lib-coverage", [ ["npm:2.0.3", { "packageLocation": "./.yarn/cache/@types-istanbul-lib-coverage-npm-2.0.3-67a37eb00a-d6f6dbf66d.zip/node_modules/@types/istanbul-lib-coverage/", @@ -982,6 +1024,16 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["@types/keyv", [ + ["npm:3.1.1", { + "packageLocation": "./.yarn/cache/@types-keyv-npm-3.1.1-779a80f2c7-3aaf557d5b.zip/node_modules/@types/keyv/", + "packageDependencies": [ + ["@types/keyv", "npm:3.1.1"], + ["@types/node", "npm:14.14.32"] + ], + "linkType": "HARD", + }] + ]], ["@types/mongodb", [ ["npm:3.6.9", { "packageLocation": "./.yarn/cache/@types-mongodb-npm-3.6.9-2e9fa33eb9-ab78a36f7d.zip/node_modules/@types/mongodb/", @@ -1020,6 +1072,16 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["@types/responselike", [ + ["npm:1.0.0", { + "packageLocation": "./.yarn/cache/@types-responselike-npm-1.0.0-85dd08af42-e6e6613c80.zip/node_modules/@types/responselike/", + "packageDependencies": [ + ["@types/responselike", "npm:1.0.0"], + ["@types/node", "npm:14.14.32"] + ], + "linkType": "HARD", + }] + ]], ["@types/stack-utils", [ ["npm:2.0.0", { "packageLocation": "./.yarn/cache/@types-stack-utils-npm-2.0.0-8ded8461bc-662312302e.zip/node_modules/@types/stack-utils/", @@ -1631,6 +1693,31 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["cacheable-lookup", [ + ["npm:5.0.4", { + "packageLocation": "./.yarn/cache/cacheable-lookup-npm-5.0.4-8f13e8b44b-cb5849f584.zip/node_modules/cacheable-lookup/", + "packageDependencies": [ + ["cacheable-lookup", "npm:5.0.4"] + ], + "linkType": "HARD", + }] + ]], + ["cacheable-request", [ + ["npm:7.0.1", { + "packageLocation": "./.yarn/cache/cacheable-request-npm-7.0.1-d870be2496-fe0b6f3b8a.zip/node_modules/cacheable-request/", + "packageDependencies": [ + ["cacheable-request", "npm:7.0.1"], + ["clone-response", "npm:1.0.2"], + ["get-stream", "npm:5.2.0"], + ["http-cache-semantics", "npm:4.1.0"], + ["keyv", "npm:4.0.3"], + ["lowercase-keys", "npm:2.0.0"], + ["normalize-url", "npm:4.5.0"], + ["responselike", "npm:2.0.0"] + ], + "linkType": "HARD", + }] + ]], ["callsites", [ ["npm:3.1.0", { "packageLocation": "./.yarn/cache/callsites-npm-3.1.0-268f989910-f726bf10d7.zip/node_modules/callsites/", @@ -1766,6 +1853,16 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["clone-response", [ + ["npm:1.0.2", { + "packageLocation": "./.yarn/cache/clone-response-npm-1.0.2-135ae8239d-71832f9219.zip/node_modules/clone-response/", + "packageDependencies": [ + ["clone-response", "npm:1.0.2"], + ["mimic-response", "npm:1.0.1"] + ], + "linkType": "HARD", + }] + ]], ["cls-bluebird", [ ["npm:2.1.0", { "packageLocation": "./.yarn/cache/cls-bluebird-npm-2.1.0-1a11680445-f3b31004a9.zip/node_modules/cls-bluebird/", @@ -2124,6 +2221,16 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["decompress-response", [ + ["npm:6.0.0", { + "packageLocation": "./.yarn/cache/decompress-response-npm-6.0.0-359de2878c-bb8b8c42be.zip/node_modules/decompress-response/", + "packageDependencies": [ + ["decompress-response", "npm:6.0.0"], + ["mimic-response", "npm:3.1.0"] + ], + "linkType": "HARD", + }] + ]], ["deep-equal", [ ["npm:1.0.1", { "packageLocation": "./.yarn/cache/deep-equal-npm-1.0.1-f05565c4e5-97d8558d19.zip/node_modules/deep-equal/", @@ -2151,6 +2258,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["defer-to-connect", [ + ["npm:2.0.1", { + "packageLocation": "./.yarn/cache/defer-to-connect-npm-2.0.1-9005cc8c60-6641e63777.zip/node_modules/defer-to-connect/", + "packageDependencies": [ + ["defer-to-connect", "npm:2.0.1"] + ], + "linkType": "HARD", + }] + ]], ["define-property", [ ["npm:0.2.5", { "packageLocation": "./.yarn/cache/define-property-npm-0.2.5-44a0da3575-6fed054072.zip/node_modules/define-property/", @@ -2839,6 +2955,26 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["got", [ + ["npm:11.8.2", { + "packageLocation": "./.yarn/cache/got-npm-11.8.2-c1eb105458-6415f98ec2.zip/node_modules/got/", + "packageDependencies": [ + ["got", "npm:11.8.2"], + ["@sindresorhus/is", "npm:4.0.0"], + ["@szmarczak/http-timer", "npm:4.0.5"], + ["@types/cacheable-request", "npm:6.0.1"], + ["@types/responselike", "npm:1.0.0"], + ["cacheable-lookup", "npm:5.0.4"], + ["cacheable-request", "npm:7.0.1"], + ["decompress-response", "npm:6.0.0"], + ["http2-wrapper", "npm:1.0.3"], + ["lowercase-keys", "npm:2.0.0"], + ["p-cancelable", "npm:2.0.0"], + ["responselike", "npm:2.0.0"] + ], + "linkType": "HARD", + }] + ]], ["graceful-fs", [ ["npm:4.2.6", { "packageLocation": "./.yarn/cache/graceful-fs-npm-4.2.6-535b2234f1-84d39c7756.zip/node_modules/graceful-fs/", @@ -3000,6 +3136,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["http-cache-semantics", [ + ["npm:4.1.0", { + "packageLocation": "./.yarn/cache/http-cache-semantics-npm-4.1.0-860520a31f-451df9784a.zip/node_modules/http-cache-semantics/", + "packageDependencies": [ + ["http-cache-semantics", "npm:4.1.0"] + ], + "linkType": "HARD", + }] + ]], ["http-errors", [ ["npm:1.7.3", { "packageLocation": "./.yarn/cache/http-errors-npm-1.7.3-f6dc83b082-563ae4a3f1.zip/node_modules/http-errors/", @@ -3038,6 +3183,17 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["http2-wrapper", [ + ["npm:1.0.3", { + "packageLocation": "./.yarn/cache/http2-wrapper-npm-1.0.3-5b58ade1df-2fc0140a69.zip/node_modules/http2-wrapper/", + "packageDependencies": [ + ["http2-wrapper", "npm:1.0.3"], + ["quick-lru", "npm:5.1.1"], + ["resolve-alpn", "npm:1.0.0"] + ], + "linkType": "HARD", + }] + ]], ["human-signals", [ ["npm:1.1.1", { "packageLocation": "./.yarn/cache/human-signals-npm-1.1.1-616b2586c2-cac115f635.zip/node_modules/human-signals/", @@ -4058,6 +4214,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["json-buffer", [ + ["npm:3.0.1", { + "packageLocation": "./.yarn/cache/json-buffer-npm-3.0.1-f8f6d20603-78011309cb.zip/node_modules/json-buffer/", + "packageDependencies": [ + ["json-buffer", "npm:3.0.1"] + ], + "linkType": "HARD", + }] + ]], ["json-parse-even-better-errors", [ ["npm:2.3.1", { "packageLocation": "./.yarn/cache/json-parse-even-better-errors-npm-2.3.1-144d62256e-d89fa7fe57.zip/node_modules/json-parse-even-better-errors/", @@ -4136,6 +4301,16 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["keyv", [ + ["npm:4.0.3", { + "packageLocation": "./.yarn/cache/keyv-npm-4.0.3-4018fb536e-63527e3d01.zip/node_modules/keyv/", + "packageDependencies": [ + ["keyv", "npm:4.0.3"], + ["json-buffer", "npm:3.0.1"] + ], + "linkType": "HARD", + }] + ]], ["kind-of", [ ["npm:3.2.2", { "packageLocation": "./.yarn/cache/kind-of-npm-3.2.2-7deaffa5f9-e8a1835c4b.zip/node_modules/kind-of/", @@ -4355,6 +4530,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["lowercase-keys", [ + ["npm:2.0.0", { + "packageLocation": "./.yarn/cache/lowercase-keys-npm-2.0.0-1876065a32-4da67f4186.zip/node_modules/lowercase-keys/", + "packageDependencies": [ + ["lowercase-keys", "npm:2.0.0"] + ], + "linkType": "HARD", + }] + ]], ["lru-cache", [ ["npm:6.0.0", { "packageLocation": "./.yarn/cache/lru-cache-npm-6.0.0-b4c8668fe1-b8b78353d2.zip/node_modules/lru-cache/", @@ -4499,6 +4683,22 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["mimic-response", [ + ["npm:1.0.1", { + "packageLocation": "./.yarn/cache/mimic-response-npm-1.0.1-f6f85dde84-64b43c717e.zip/node_modules/mimic-response/", + "packageDependencies": [ + ["mimic-response", "npm:1.0.1"] + ], + "linkType": "HARD", + }], + ["npm:3.1.0", { + "packageLocation": "./.yarn/cache/mimic-response-npm-3.1.0-a4a24b4e96-cfbf19f66d.zip/node_modules/mimic-response/", + "packageDependencies": [ + ["mimic-response", "npm:3.1.0"] + ], + "linkType": "HARD", + }] + ]], ["minimatch", [ ["npm:3.0.4", { "packageLocation": "./.yarn/cache/minimatch-npm-3.0.4-6e76f51c23-47eab92639.zip/node_modules/minimatch/", @@ -4844,6 +5044,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["normalize-url", [ + ["npm:4.5.0", { + "packageLocation": "./.yarn/cache/normalize-url-npm-4.5.0-14a0c5430f-09794941db.zip/node_modules/normalize-url/", + "packageDependencies": [ + ["normalize-url", "npm:4.5.0"] + ], + "linkType": "HARD", + }] + ]], ["npm-run-path", [ ["npm:2.0.2", { "packageLocation": "./.yarn/cache/npm-run-path-npm-2.0.2-96c8b48857-0a1bc9a1e0.zip/node_modules/npm-run-path/", @@ -4997,6 +5206,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["p-cancelable", [ + ["npm:2.0.0", { + "packageLocation": "./.yarn/cache/p-cancelable-npm-2.0.0-5f988ffca4-966065f056.zip/node_modules/p-cancelable/", + "packageDependencies": [ + ["p-cancelable", "npm:2.0.0"] + ], + "linkType": "HARD", + }] + ]], ["p-each-series", [ ["npm:2.2.0", { "packageLocation": "./.yarn/cache/p-each-series-npm-2.2.0-b9907a1ae6-d5a0896eb7.zip/node_modules/p-each-series/", @@ -5290,6 +5508,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["quick-lru", [ + ["npm:5.1.1", { + "packageLocation": "./.yarn/cache/quick-lru-npm-5.1.1-e38e0edce3-fafb2b2fa1.zip/node_modules/quick-lru/", + "packageDependencies": [ + ["quick-lru", "npm:5.1.1"] + ], + "linkType": "HARD", + }] + ]], ["raw-body", [ ["npm:2.4.1", { "packageLocation": "./.yarn/cache/raw-body-npm-2.4.1-e6e30ccf94-dc56e010d2.zip/node_modules/raw-body/", @@ -5558,6 +5785,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["resolve-alpn", [ + ["npm:1.0.0", { + "packageLocation": "./.yarn/cache/resolve-alpn-npm-1.0.0-f655c150b7-17baee01c0.zip/node_modules/resolve-alpn/", + "packageDependencies": [ + ["resolve-alpn", "npm:1.0.0"] + ], + "linkType": "HARD", + }] + ]], ["resolve-cwd", [ ["npm:3.0.0", { "packageLocation": "./.yarn/cache/resolve-cwd-npm-3.0.0-e6f4e296bf-97edfbbf83.zip/node_modules/resolve-cwd/", @@ -5593,6 +5829,16 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["responselike", [ + ["npm:2.0.0", { + "packageLocation": "./.yarn/cache/responselike-npm-2.0.0-7813864e97-11d8225dd8.zip/node_modules/responselike/", + "packageDependencies": [ + ["responselike", "npm:2.0.0"], + ["lowercase-keys", "npm:2.0.0"] + ], + "linkType": "HARD", + }] + ]], ["ret", [ ["npm:0.1.15", { "packageLocation": "./.yarn/cache/ret-npm-0.1.15-0d3c19de76-749c2fcae7.zip/node_modules/ret/", @@ -5766,6 +6012,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "packageLocation": "./", "packageDependencies": [ ["serve-my-jams", "workspace:."], + ["got", "npm:11.8.2"], ["jest", "npm:26.6.3"], ["koa", "npm:2.13.1"], ["koa-body", "npm:4.2.0"], diff --git a/package.json b/package.json index b2bf15d..0817722 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "jest": "^26.6.3" }, "dependencies": { + "got": "^11.8.2", "koa": "^2.13.1", "koa-body": "^4.2.0", "koa-helmet": "^6.0.0", diff --git a/src/config.js b/src/config.js new file mode 100644 index 0000000..cf13d95 --- /dev/null +++ b/src/config.js @@ -0,0 +1,10 @@ + +module.exports = { + port: 4000, + host: "localhost", + + allowedWebmentionSources: [ + "brainbaking.com", + "jefklakscodex.com" + ] +} diff --git a/src/serve.js b/src/serve.js index 99ae9a1..e8dba6a 100644 --- a/src/serve.js +++ b/src/serve.js @@ -30,12 +30,13 @@ app.use(bodyParser({ // route docs: https://github.com/koajs/router/blob/HEAD/API.md#module_koa-router--Router+get%7Cput%7Cpost%7Cpatch%7Cdelete%7Cdel require("./webmention/route").route(router); +const config = require("./config"); app.use(router.routes()).use(router.allowedMethods()); -const port = process.env.PORT || 4000 +const port = process.env.PORT || config.port -app.listen(port, "localhost", () => { +app.listen(port, config.host, () => { console.log(`Started localhost at port ${port}`) }); diff --git a/src/webmention/receive.js b/src/webmention/receive.js index 8f85918..d5551b3 100644 --- a/src/webmention/receive.js +++ b/src/webmention/receive.js @@ -1,10 +1,20 @@ +const got = require('got') +const config = require('./../config') + function isValidUrl(url) { return url !== undefined && (url.startsWith("http://") || url.startsWith("https://")) } +function isValidDomain(url) { + return config.allowedWebmentionSources.some(domain => { + return url.indexOf(domain) !== -1 + }) +} + /** +Remember, TARGET is own domain, SOURCE is the article to process https://www.w3.org/TR/webmention/#sender-notifies-receiver example: POST /webmention-endpoint HTTP/1.1 @@ -20,12 +30,31 @@ function isValidUrl(url) { function validate(request) { return request.type === "application/x-www-form-urlencoded" && request.body !== undefined && - isValidUrl(request?.body.source) && - isValidUrl(request?.body.target) + isValidUrl(request?.body?.source) && + isValidUrl(request?.body?.target) && + request?.body?.source !== request?.body?.target && + isValidDomain(request?.body?.source) +} + +function processSourceBody(body, target) { + if(body.indexOf(target) === -1) { + return + } } async function receive(body) { - // do stuff with it + try { + await got(body.target) + } catch(unknownTarget) { + return + } + + try { + const src = await got(body.source) + processSourceBody(src.body, body.target) + } catch(unknownSource) { + return + } } module.exports = { diff --git a/src/webmention/route.js b/src/webmention/route.js index 17c9659..29a2b0a 100644 --- a/src/webmention/route.js +++ b/src/webmention/route.js @@ -6,6 +6,7 @@ function route(router) { if(!validate(ctx.request)) { ctx.throw(400, "malformed webmention request") } + // we do NOT await this on purpose. receive(ctx.request.body) ctx.body = "Thanks, bro. Will process this webmention soon, pinky swear!"; diff --git a/test/webmention/receive.test.js b/test/webmention/receive.test.js index b7f2040..2a64c44 100644 --- a/test/webmention/receive.test.js +++ b/test/webmention/receive.test.js @@ -3,11 +3,34 @@ const { receive, validate } = require('../../src/webmention/receive') describe("validate tests", () => { - const validhttpurl = "http://localhost/bla" - const validhttpsurl = "https://localhost/blie" + const validhttpurl = "http://brainbaking.com/bla" + const validhttpsurl = "https://brainbaking.com/blie" + const urlfrominvaliddomain = "http://brainthe.bake/jup" const invalidurl = "lolzw" test("is valid if source and target https urls", () => { + const result = validate({ + type: "application/x-www-form-urlencoded", + body: { + source: validhttpsurl + "1", + target: validhttpsurl + "2" + } + }) + + expect(result).toBe(true) + }) + test("is NOT valid if source is a valid url but not form valid domain", () => { + const result = validate({ + type: "application/x-www-form-urlencoded", + body: { + source: urlfrominvaliddomain, + target: validhttpsurl + "2" + } + }) + + expect(result).toBe(false) + }) + test("is NOT valid if source and target are the same urls", () => { const result = validate({ type: "application/x-www-form-urlencoded", body: { @@ -16,14 +39,14 @@ describe("validate tests", () => { } }) - expect(result).toBe(true) + expect(result).toBe(false) }) test("is valid if source and target http urls", () => { const result = validate({ type: "application/x-www-form-urlencoded", body: { - source: validhttpurl, - target: validhttpurl + source: validhttpurl + "1", + target: validhttpurl + "2" } }) diff --git a/yarn.lock b/yarn.lock index a05b132..29052d5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -621,6 +621,13 @@ __metadata: languageName: node linkType: hard +"@sindresorhus/is@npm:^4.0.0": + version: 4.0.0 + resolution: "@sindresorhus/is@npm:4.0.0" + checksum: 7022d5037ff778c5c369c353e16a173c3797de5f4196b631ec00b0f710a3ccb016937ce454d4fac6ca32d695ed30a59444e941f8f78ff7692dc3c50959b3fe61 + languageName: node + linkType: hard + "@sinonjs/commons@npm:^1.7.0": version: 1.8.2 resolution: "@sinonjs/commons@npm:1.8.2" @@ -639,6 +646,15 @@ __metadata: languageName: node linkType: hard +"@szmarczak/http-timer@npm:^4.0.5": + version: 4.0.5 + resolution: "@szmarczak/http-timer@npm:4.0.5" + dependencies: + defer-to-connect: ^2.0.0 + checksum: 13d8f71dbd792b620b2cd13d72d086ef031ebefd5263a9db2f34693a32e4d90920fa1d7075cd59bf0c9810b2b1b93ad36d89fc88aba4cd3b8022df7ecc5ffdec + languageName: node + linkType: hard + "@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.7": version: 7.1.12 resolution: "@types/babel__core@npm:7.1.12" @@ -689,6 +705,18 @@ __metadata: languageName: node linkType: hard +"@types/cacheable-request@npm:^6.0.1": + version: 6.0.1 + resolution: "@types/cacheable-request@npm:6.0.1" + dependencies: + "@types/http-cache-semantics": "*" + "@types/keyv": "*" + "@types/node": "*" + "@types/responselike": "*" + checksum: 3dae802a0808573986c56b92bf16cd031a5b648b6c893d20c7ef6bfda3fc72a2107c7978697d2b27b14febc597162d6959985eeb5befc307a9f9f3c5081d4905 + languageName: node + linkType: hard + "@types/formidable@npm:^1.0.31": version: 1.0.32 resolution: "@types/formidable@npm:1.0.32" @@ -707,6 +735,13 @@ __metadata: languageName: node linkType: hard +"@types/http-cache-semantics@npm:*": + version: 4.0.0 + resolution: "@types/http-cache-semantics@npm:4.0.0" + checksum: e16fae56d4daea4ed678b4d5918b693b44ca12fb5e479b87d242d3a35bf3a014974dcf9ed7aba7e29149fdb6c3719f9987fca51b20ef10aa84b58f86553c2f74 + languageName: node + linkType: hard + "@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": version: 2.0.3 resolution: "@types/istanbul-lib-coverage@npm:2.0.3" @@ -732,6 +767,15 @@ __metadata: languageName: node linkType: hard +"@types/keyv@npm:*": + version: 3.1.1 + resolution: "@types/keyv@npm:3.1.1" + dependencies: + "@types/node": "*" + checksum: 3aaf557d5b82e733d5a17b7f55af5d6be953363c3a594f006d64265790fe87c301c6e1400c0b6b1cf72add50a0ceddc25afb8231ab8302a2e5b6ebfbfac30e5d + languageName: node + linkType: hard + "@types/mongodb@npm:^3.5.27": version: 3.6.9 resolution: "@types/mongodb@npm:3.6.9" @@ -763,6 +807,15 @@ __metadata: languageName: node linkType: hard +"@types/responselike@npm:*, @types/responselike@npm:^1.0.0": + version: 1.0.0 + resolution: "@types/responselike@npm:1.0.0" + dependencies: + "@types/node": "*" + checksum: e6e6613c800aeda63e2331e753e8d21df1a2c9aa7a4bc71ed792a848e4811fc96e609759089355314a2318c76eff1f161499cd242044838ab1e6f56e463ebb9c + languageName: node + linkType: hard + "@types/stack-utils@npm:^2.0.0": version: 2.0.0 resolution: "@types/stack-utils@npm:2.0.0" @@ -1278,6 +1331,28 @@ __metadata: languageName: node linkType: hard +"cacheable-lookup@npm:^5.0.3": + version: 5.0.4 + resolution: "cacheable-lookup@npm:5.0.4" + checksum: cb5849f5841e37f007aeaea2516ecf2cb0a9730667694d131331a04413f6c3bf2587391d55003cc2b95ef59085b5f50ac9887a0b7c673fc0c8102bcc69b6d73d + languageName: node + linkType: hard + +"cacheable-request@npm:^7.0.1": + version: 7.0.1 + resolution: "cacheable-request@npm:7.0.1" + dependencies: + clone-response: ^1.0.2 + get-stream: ^5.1.0 + http-cache-semantics: ^4.0.0 + keyv: ^4.0.0 + lowercase-keys: ^2.0.0 + normalize-url: ^4.1.0 + responselike: ^2.0.0 + checksum: fe0b6f3b8a145c98fecc00f0f1b13a9886cad9bf4537533c5568cba19db81c8ee09ace9c61967d5a4e72615e174d771b6b8080c3816f0b74fc6f9c69060c3ff0 + languageName: node + linkType: hard + "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -1394,6 +1469,15 @@ __metadata: languageName: node linkType: hard +"clone-response@npm:^1.0.2": + version: 1.0.2 + resolution: "clone-response@npm:1.0.2" + dependencies: + mimic-response: ^1.0.0 + checksum: 71832f9219f2682b0915bdbc0dd187ba8e63d16b0af5342b44f97b34afe9400a1f528a253dd2f70a8dd8b23bfa4c4e106928fcc520fa5899d769af95e4cce53c + languageName: node + linkType: hard + "cls-bluebird@npm:^2.1.0": version: 2.1.0 resolution: "cls-bluebird@npm:2.1.0" @@ -1683,6 +1767,15 @@ __metadata: languageName: node linkType: hard +"decompress-response@npm:^6.0.0": + version: 6.0.0 + resolution: "decompress-response@npm:6.0.0" + dependencies: + mimic-response: ^3.1.0 + checksum: bb8b8c42be7767994764d27f91a3949e3dc9008da82f1aaeab1de40f1ebb50d7abf17b31b2e4000f8d267a1e75f76052efd58d4419124c04bf430e184c164fad + languageName: node + linkType: hard + "deep-equal@npm:~1.0.1": version: 1.0.1 resolution: "deep-equal@npm:1.0.1" @@ -1704,6 +1797,13 @@ __metadata: languageName: node linkType: hard +"defer-to-connect@npm:^2.0.0": + version: 2.0.1 + resolution: "defer-to-connect@npm:2.0.1" + checksum: 6641e6377732f3066e5f101ae4f22de6b85c45fda3ff0cd710412901af7570cfbb77c9c25cb6dcd5d1b52b816e37fccfc013c9ec7f1f6a95823773625e8be6c5 + languageName: node + linkType: hard + "define-property@npm:^0.2.5": version: 0.2.5 resolution: "define-property@npm:0.2.5" @@ -2272,7 +2372,7 @@ fsevents@^2.1.2: languageName: node linkType: hard -"get-stream@npm:^5.0.0": +"get-stream@npm:^5.0.0, get-stream@npm:^5.1.0": version: 5.2.0 resolution: "get-stream@npm:5.2.0" dependencies: @@ -2318,6 +2418,25 @@ fsevents@^2.1.2: languageName: node linkType: hard +"got@npm:^11.8.2": + version: 11.8.2 + resolution: "got@npm:11.8.2" + dependencies: + "@sindresorhus/is": ^4.0.0 + "@szmarczak/http-timer": ^4.0.5 + "@types/cacheable-request": ^6.0.1 + "@types/responselike": ^1.0.0 + cacheable-lookup: ^5.0.3 + cacheable-request: ^7.0.1 + decompress-response: ^6.0.0 + http2-wrapper: ^1.0.0-beta.5.2 + lowercase-keys: ^2.0.0 + p-cancelable: ^2.0.0 + responselike: ^2.0.0 + checksum: 6415f98ec249e932ca8223396e58ec18017ade64e21efc40db62f994f3551eaf7eca945671d40b2486f0650b1f17b5a2a0f11655ea501712566ef60be010f07f + languageName: node + linkType: hard + "graceful-fs@npm:^4.2.3, graceful-fs@npm:^4.2.4": version: 4.2.6 resolution: "graceful-fs@npm:4.2.6" @@ -2458,6 +2577,13 @@ fsevents@^2.1.2: languageName: node linkType: hard +"http-cache-semantics@npm:^4.0.0": + version: 4.1.0 + resolution: "http-cache-semantics@npm:4.1.0" + checksum: 451df9784af2acbe0cc1fd70291285c08ca4a8966ab5ee4d3975e003d1ad4d74c81473086d628f31296b31221966fda8bc5ea1e29dd8f1f33f9fc2b0fdca65ca + languageName: node + linkType: hard + "http-errors@npm:1.7.3, http-errors@npm:~1.7.2": version: 1.7.3 resolution: "http-errors@npm:1.7.3" @@ -2495,6 +2621,16 @@ fsevents@^2.1.2: languageName: node linkType: hard +"http2-wrapper@npm:^1.0.0-beta.5.2": + version: 1.0.3 + resolution: "http2-wrapper@npm:1.0.3" + dependencies: + quick-lru: ^5.1.1 + resolve-alpn: ^1.0.0 + checksum: 2fc0140a69558cf1352372ed6cdf94eb6d108b2755ca087a5626044667033ca9fd6d0e5e04db3c3d2129aadff99b9b07b5bcf3952f5b7138926cb7a1d3128c6e + languageName: node + linkType: hard + "human-signals@npm:^1.1.1": version: 1.1.1 resolution: "human-signals@npm:1.1.1" @@ -3414,6 +3550,13 @@ fsevents@^2.1.2: languageName: node linkType: hard +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 78011309cb53c19195702ece9e282c8c58d7facd8d6e286857fd4daf511f0bd93424498898d0b9ecfde6ab8e87a2ab0c0a654fba4b1a4ec81fa51f2c48a5ddba + languageName: node + linkType: hard + "json-parse-even-better-errors@npm:^2.3.0": version: 2.3.1 resolution: "json-parse-even-better-errors@npm:2.3.1" @@ -3481,6 +3624,15 @@ fsevents@^2.1.2: languageName: node linkType: hard +"keyv@npm:^4.0.0": + version: 4.0.3 + resolution: "keyv@npm:4.0.3" + dependencies: + json-buffer: 3.0.1 + checksum: 63527e3d010dd9b8f8e62435130cdb1518de7b7d0ebafcff1359611caa0e79c7f80f1863ff73e712d99ce69fa06be62b66a78fb5cfee6483f2f95eeac340f12b + languageName: node + linkType: hard + "kind-of@npm:^3.0.2, kind-of@npm:^3.0.3, kind-of@npm:^3.2.0": version: 3.2.2 resolution: "kind-of@npm:3.2.2" @@ -3680,6 +3832,13 @@ fsevents@^2.1.2: languageName: node linkType: hard +"lowercase-keys@npm:^2.0.0": + version: 2.0.0 + resolution: "lowercase-keys@npm:2.0.0" + checksum: 4da67f41865a25360bb05749a66a83c60987c7efa0b8ec443941a19978c21ba916ae9fedca25b96fc652026c4264a437d3fec099d1949716b5483eec42395ec9 + languageName: node + linkType: hard + "lru-cache@npm:^6.0.0": version: 6.0.0 resolution: "lru-cache@npm:6.0.0" @@ -3805,6 +3964,20 @@ fsevents@^2.1.2: languageName: node linkType: hard +"mimic-response@npm:^1.0.0": + version: 1.0.1 + resolution: "mimic-response@npm:1.0.1" + checksum: 64b43c717ed8710bc920576e96d38d0e504e9eec3114af8e00c9e3d7ae53cd459ee38febb0badc83e3a4e6d21cd571db43e9011f8cf014809989c87a1a9f0ea4 + languageName: node + linkType: hard + +"mimic-response@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-response@npm:3.1.0" + checksum: cfbf19f66de6ad46df7481d9e8c1a7f30b6fa77dd771ad4a72a0443265041a39768182bde6d1de39001c2774168635bc74f42902e401c8ba33db55d69b773004 + languageName: node + linkType: hard + "minimatch@npm:^3.0.4": version: 3.0.4 resolution: "minimatch@npm:3.0.4" @@ -4102,6 +4275,13 @@ fsevents@^2.1.2: languageName: node linkType: hard +"normalize-url@npm:^4.1.0": + version: 4.5.0 + resolution: "normalize-url@npm:4.5.0" + checksum: 09794941dbe5c7b91caf6f3cd1ae167c27f6d09793e4a03601a68b62de7e8ee9e5de21a246130cdbab98b01481de292f9556d492444a527648f9cf1220e4b0df + languageName: node + linkType: hard + "npm-run-path@npm:^2.0.0": version: 2.0.2 resolution: "npm-run-path@npm:2.0.2" @@ -4237,6 +4417,13 @@ fsevents@^2.1.2: languageName: node linkType: hard +"p-cancelable@npm:^2.0.0": + version: 2.0.0 + resolution: "p-cancelable@npm:2.0.0" + checksum: 966065f056a116a1ca3b6c7064d4d27a65bc1740c25cc60729faa5deea385bbd0f2317aedabb8e64c0cfc3c6b2dafe7f3ea65c267373d6d9be1602af443b4f12 + languageName: node + linkType: hard + "p-each-series@npm:^2.1.0": version: 2.2.0 resolution: "p-each-series@npm:2.2.0" @@ -4481,6 +4668,13 @@ fsevents@^2.1.2: languageName: node linkType: hard +"quick-lru@npm:^5.1.1": + version: 5.1.1 + resolution: "quick-lru@npm:5.1.1" + checksum: fafb2b2fa1a948d6f2e88d4a60571be70b316d9b0be857d24fba0ac28fc31acebf535b643fe968473d689f8c655bcb2a0e4da67912f571059a4e4eb15740b021 + languageName: node + linkType: hard + "raw-body@npm:^2.2.0": version: 2.4.1 resolution: "raw-body@npm:2.4.1" @@ -4687,6 +4881,13 @@ fsevents@^2.1.2: languageName: node linkType: hard +"resolve-alpn@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-alpn@npm:1.0.0" + checksum: 17baee01c03a57cebd163aa5c9bd94f33646378bce8aa94c7a8d29fc0e1bf0807532bda3c36bb929511606633921d0f4a69e7fcc894cf02ad1c742e649b71673 + languageName: node + linkType: hard + "resolve-cwd@npm:^3.0.0": version: 3.0.0 resolution: "resolve-cwd@npm:3.0.0" @@ -4737,6 +4938,15 @@ fsevents@^2.1.2: languageName: node linkType: hard +"responselike@npm:^2.0.0": + version: 2.0.0 + resolution: "responselike@npm:2.0.0" + dependencies: + lowercase-keys: ^2.0.0 + checksum: 11d8225dd8bbbd2ab7482c2e54ff2618e346c7d785e66d2ff5da03d6eafa8b33c3a4c6d685324dccf06f36ee2695db9bd2579382548c2a7253d770204694a63d + languageName: node + linkType: hard + "ret@npm:~0.1.10": version: 0.1.15 resolution: "ret@npm:0.1.15" @@ -4901,6 +5111,7 @@ fsevents@^2.1.2: version: 0.0.0-use.local resolution: "serve-my-jams@workspace:." dependencies: + got: ^11.8.2 jest: ^26.6.3 koa: ^2.13.1 koa-body: ^4.2.0