mirror of
https://iceshrimp.dev/limepotato/jormungandr-bite.git
synced 2024-11-28 21:08:52 -07:00
[backend] Web API groundwork
This commit is contained in:
parent
52b0c6c8f8
commit
152cd72593
34 changed files with 755 additions and 58 deletions
244
.pnp.cjs
generated
244
.pnp.cjs
generated
|
@ -1819,7 +1819,24 @@ const RAW_RUNTIME_STATE =
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
|
["@hapi/boom", [\
|
||||||
|
["npm:10.0.1", {\
|
||||||
|
"packageLocation": "./.yarn/cache/@hapi-boom-npm-10.0.1-306fb2f69f-99415b0e2f.zip/node_modules/@hapi/boom/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["@hapi/boom", "npm:10.0.1"],\
|
||||||
|
["@hapi/hoek", "npm:11.0.4"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
|
}]\
|
||||||
|
]],\
|
||||||
["@hapi/hoek", [\
|
["@hapi/hoek", [\
|
||||||
|
["npm:11.0.4", {\
|
||||||
|
"packageLocation": "./.yarn/cache/@hapi-hoek-npm-11.0.4-3a5c13a5d9-0cf1c0dbd2.zip/node_modules/@hapi/hoek/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["@hapi/hoek", "npm:11.0.4"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
|
}],\
|
||||||
["npm:9.3.0", {\
|
["npm:9.3.0", {\
|
||||||
"packageLocation": "./.yarn/cache/@hapi-hoek-npm-9.3.0-447eb8d274-ad83a22378.zip/node_modules/@hapi/hoek/",\
|
"packageLocation": "./.yarn/cache/@hapi-hoek-npm-9.3.0-447eb8d274-ad83a22378.zip/node_modules/@hapi/hoek/",\
|
||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
|
@ -1868,6 +1885,28 @@ const RAW_RUNTIME_STATE =
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
|
["@iceshrimp/koa-openapi", [\
|
||||||
|
["npm:2.2.0::__archiveUrl=https%3A%2F%2Ficeshrimp.dev%2Fapi%2Fpackages%2Ficeshrimp%2Fnpm%2F%2540iceshrimp%252Fkoa-openapi%2F-%2F2.2.0%2Fkoa-openapi-2.2.0.tgz", {\
|
||||||
|
"packageLocation": "./.yarn/cache/@iceshrimp-koa-openapi-npm-2.2.0-b79af14354-a7ff2c0b1a.zip/node_modules/@iceshrimp/koa-openapi/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["@iceshrimp/koa-openapi", "npm:2.2.0::__archiveUrl=https%3A%2F%2Ficeshrimp.dev%2Fapi%2Fpackages%2Ficeshrimp%2Fnpm%2F%2540iceshrimp%252Fkoa-openapi%2F-%2F2.2.0%2Fkoa-openapi-2.2.0.tgz"],\
|
||||||
|
["@hapi/boom", "npm:10.0.1"],\
|
||||||
|
["@koa/cors", "npm:4.0.0"],\
|
||||||
|
["@koa/router", "npm:12.0.1"],\
|
||||||
|
["class-transformer", "npm:0.5.1"],\
|
||||||
|
["class-validator", "npm:0.14.0"],\
|
||||||
|
["helmet", "npm:6.0.1"],\
|
||||||
|
["koa", "npm:2.14.2"],\
|
||||||
|
["koa-body", "npm:6.0.1"],\
|
||||||
|
["koa-helmet", "npm:7.0.2"],\
|
||||||
|
["koa2-swagger-ui", "virtual:b79af143542f14e992898e20a1ab22405dbd6893d6a8c813e877de0a455aadcaf1a4faf2f8bc74ede210c0399435357919d77dcd4e83ecce226e0faf31581e3e#npm:5.10.0"],\
|
||||||
|
["lodash", "npm:4.17.21"],\
|
||||||
|
["openapi-types", "npm:12.1.3"],\
|
||||||
|
["reflect-metadata", "npm:0.1.13"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
|
}]\
|
||||||
|
]],\
|
||||||
["@ioredis/commands", [\
|
["@ioredis/commands", [\
|
||||||
["npm:1.2.0", {\
|
["npm:1.2.0", {\
|
||||||
"packageLocation": "./.yarn/cache/@ioredis-commands-npm-1.2.0-47541de88b-a8253c9539.zip/node_modules/@ioredis/commands/",\
|
"packageLocation": "./.yarn/cache/@ioredis-commands-npm-1.2.0-47541de88b-a8253c9539.zip/node_modules/@ioredis/commands/",\
|
||||||
|
@ -2262,6 +2301,14 @@ const RAW_RUNTIME_STATE =
|
||||||
["vary", "npm:1.1.2"]\
|
["vary", "npm:1.1.2"]\
|
||||||
],\
|
],\
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
|
}],\
|
||||||
|
["npm:4.0.0", {\
|
||||||
|
"packageLocation": "./.yarn/cache/@koa-cors-npm-4.0.0-e1649c9262-1509d98b72.zip/node_modules/@koa/cors/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["@koa/cors", "npm:4.0.0"],\
|
||||||
|
["vary", "npm:1.1.2"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
["@koa/multer", [\
|
["@koa/multer", [\
|
||||||
|
@ -2288,6 +2335,18 @@ const RAW_RUNTIME_STATE =
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
["@koa/router", [\
|
["@koa/router", [\
|
||||||
|
["npm:12.0.1", {\
|
||||||
|
"packageLocation": "./.yarn/cache/@koa-router-npm-12.0.1-6a9764e4df-f9427c8eb2.zip/node_modules/@koa/router/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["@koa/router", "npm:12.0.1"],\
|
||||||
|
["debug", "virtual:ac3d8e680759ce54399273724d44e041d6c9b73454d191d411a8c44bb27e22f02aaf6ed9d3ad0ac1c298eac4833cff369c9c7b84c573016112c4f84be2cd8543#npm:4.3.4"],\
|
||||||
|
["http-errors", "npm:2.0.0"],\
|
||||||
|
["koa-compose", "npm:4.1.0"],\
|
||||||
|
["methods", "npm:1.1.2"],\
|
||||||
|
["path-to-regexp", "npm:6.2.1"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
|
}],\
|
||||||
["npm:9.0.1", {\
|
["npm:9.0.1", {\
|
||||||
"packageLocation": "./.yarn/cache/@koa-router-npm-9.0.1-1df2e7d8d0-bd13ffa9e3.zip/node_modules/@koa/router/",\
|
"packageLocation": "./.yarn/cache/@koa-router-npm-9.0.1-1df2e7d8d0-bd13ffa9e3.zip/node_modules/@koa/router/",\
|
||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
|
@ -4107,21 +4166,6 @@ const RAW_RUNTIME_STATE =
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
["@types/koa", [\
|
["@types/koa", [\
|
||||||
["npm:2.13.6", {\
|
|
||||||
"packageLocation": "./.yarn/cache/@types-koa-npm-2.13.6-a8726b332e-cba52d2418.zip/node_modules/@types/koa/",\
|
|
||||||
"packageDependencies": [\
|
|
||||||
["@types/koa", "npm:2.13.6"],\
|
|
||||||
["@types/accepts", "npm:1.3.5"],\
|
|
||||||
["@types/content-disposition", "npm:0.5.5"],\
|
|
||||||
["@types/cookies", "npm:0.7.7"],\
|
|
||||||
["@types/http-assert", "npm:1.5.3"],\
|
|
||||||
["@types/http-errors", "npm:2.0.1"],\
|
|
||||||
["@types/keygrip", "npm:1.0.2"],\
|
|
||||||
["@types/koa-compose", "npm:3.2.5"],\
|
|
||||||
["@types/node", "npm:20.4.5"]\
|
|
||||||
],\
|
|
||||||
"linkType": "HARD"\
|
|
||||||
}],\
|
|
||||||
["npm:2.13.7", {\
|
["npm:2.13.7", {\
|
||||||
"packageLocation": "./.yarn/cache/@types-koa-npm-2.13.7-240d3cdcf2-4856cb68f7.zip/node_modules/@types/koa/",\
|
"packageLocation": "./.yarn/cache/@types-koa-npm-2.13.7-240d3cdcf2-4856cb68f7.zip/node_modules/@types/koa/",\
|
||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
|
@ -4198,6 +4242,18 @@ const RAW_RUNTIME_STATE =
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
|
["@types/koa-ratelimit", [\
|
||||||
|
["npm:5.0.4", {\
|
||||||
|
"packageLocation": "./.yarn/cache/@types-koa-ratelimit-npm-5.0.4-92296aa01b-5233eec465.zip/node_modules/@types/koa-ratelimit/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["@types/koa-ratelimit", "npm:5.0.4"],\
|
||||||
|
["@types/koa", "npm:2.13.7"],\
|
||||||
|
["@types/node", "npm:20.4.5"],\
|
||||||
|
["ioredis", "npm:5.3.2"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
|
}]\
|
||||||
|
]],\
|
||||||
["@types/koa-send", [\
|
["@types/koa-send", [\
|
||||||
["npm:4.1.3", {\
|
["npm:4.1.3", {\
|
||||||
"packageLocation": "./.yarn/cache/@types-koa-send-npm-4.1.3-07a2282495-f20f6a0dcc.zip/node_modules/@types/koa-send/",\
|
"packageLocation": "./.yarn/cache/@types-koa-send-npm-4.1.3-07a2282495-f20f6a0dcc.zip/node_modules/@types/koa-send/",\
|
||||||
|
@ -4707,6 +4763,15 @@ const RAW_RUNTIME_STATE =
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
|
["@types/validator", [\
|
||||||
|
["npm:13.11.7", {\
|
||||||
|
"packageLocation": "./.yarn/cache/@types-validator-npm-13.11.7-1eda8f8948-5935d363a9.zip/node_modules/@types/validator/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["@types/validator", "npm:13.11.7"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
|
}]\
|
||||||
|
]],\
|
||||||
["@types/vinyl", [\
|
["@types/vinyl", [\
|
||||||
["npm:2.0.7", {\
|
["npm:2.0.7", {\
|
||||||
"packageLocation": "./.yarn/cache/@types-vinyl-npm-2.0.7-975445872b-c13002667b.zip/node_modules/@types/vinyl/",\
|
"packageLocation": "./.yarn/cache/@types-vinyl-npm-2.0.7-975445872b-c13002667b.zip/node_modules/@types/vinyl/",\
|
||||||
|
@ -6556,6 +6621,15 @@ const RAW_RUNTIME_STATE =
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
|
["async-ratelimiter", [\
|
||||||
|
["npm:1.3.12", {\
|
||||||
|
"packageLocation": "./.yarn/cache/async-ratelimiter-npm-1.3.12-25c4d3ff00-bf492d85a3.zip/node_modules/async-ratelimiter/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["async-ratelimiter", "npm:1.3.12"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
|
}]\
|
||||||
|
]],\
|
||||||
["async-settle", [\
|
["async-settle", [\
|
||||||
["npm:1.0.0", {\
|
["npm:1.0.0", {\
|
||||||
"packageLocation": "./.yarn/cache/async-settle-npm-1.0.0-5d08fbf926-d2382ad4b9.zip/node_modules/async-settle/",\
|
"packageLocation": "./.yarn/cache/async-settle-npm-1.0.0-5d08fbf926-d2382ad4b9.zip/node_modules/async-settle/",\
|
||||||
|
@ -6932,6 +7006,8 @@ const RAW_RUNTIME_STATE =
|
||||||
["@bull-board/koa", "npm:5.6.0"],\
|
["@bull-board/koa", "npm:5.6.0"],\
|
||||||
["@bull-board/ui", "npm:5.6.0"],\
|
["@bull-board/ui", "npm:5.6.0"],\
|
||||||
["@discordapp/twemoji", "npm:14.1.2"],\
|
["@discordapp/twemoji", "npm:14.1.2"],\
|
||||||
|
["@hapi/boom", "npm:10.0.1"],\
|
||||||
|
["@iceshrimp/koa-openapi", "npm:2.2.0::__archiveUrl=https%3A%2F%2Ficeshrimp.dev%2Fapi%2Fpackages%2Ficeshrimp%2Fnpm%2F%2540iceshrimp%252Fkoa-openapi%2F-%2F2.2.0%2Fkoa-openapi-2.2.0.tgz"],\
|
||||||
["@koa/cors", "npm:3.4.3"],\
|
["@koa/cors", "npm:3.4.3"],\
|
||||||
["@koa/multer", "virtual:aa59773ac87791c4813d53447077fcf8a847d6de5a301d34dc31286584b1dbb26d30d3adb5b4c41c1e8aea04371e926fda05c09c6253647c432e11d872a304ba#npm:3.0.2"],\
|
["@koa/multer", "virtual:aa59773ac87791c4813d53447077fcf8a847d6de5a301d34dc31286584b1dbb26d30d3adb5b4c41c1e8aea04371e926fda05c09c6253647c432e11d872a304ba#npm:3.0.2"],\
|
||||||
["@koa/router", "npm:9.0.1"],\
|
["@koa/router", "npm:9.0.1"],\
|
||||||
|
@ -6954,12 +7030,13 @@ const RAW_RUNTIME_STATE =
|
||||||
["@types/jsdom", "npm:21.1.1"],\
|
["@types/jsdom", "npm:21.1.1"],\
|
||||||
["@types/jsonld", "npm:1.5.9"],\
|
["@types/jsonld", "npm:1.5.9"],\
|
||||||
["@types/jsrsasign", "npm:10.5.8"],\
|
["@types/jsrsasign", "npm:10.5.8"],\
|
||||||
["@types/koa", "npm:2.13.6"],\
|
["@types/koa", "npm:2.13.7"],\
|
||||||
["@types/koa-bodyparser", "npm:4.3.10"],\
|
["@types/koa-bodyparser", "npm:4.3.10"],\
|
||||||
["@types/koa-cors", "npm:0.0.2"],\
|
["@types/koa-cors", "npm:0.0.2"],\
|
||||||
["@types/koa-favicon", "npm:2.0.21"],\
|
["@types/koa-favicon", "npm:2.0.21"],\
|
||||||
["@types/koa-logger", "npm:3.1.2"],\
|
["@types/koa-logger", "npm:3.1.2"],\
|
||||||
["@types/koa-mount", "npm:4.0.2"],\
|
["@types/koa-mount", "npm:4.0.2"],\
|
||||||
|
["@types/koa-ratelimit", "npm:5.0.4"],\
|
||||||
["@types/koa-send", "npm:4.1.3"],\
|
["@types/koa-send", "npm:4.1.3"],\
|
||||||
["@types/koa-views", "npm:7.0.0"],\
|
["@types/koa-views", "npm:7.0.0"],\
|
||||||
["@types/koa__cors", "npm:3.3.0"],\
|
["@types/koa__cors", "npm:3.3.0"],\
|
||||||
|
@ -7042,6 +7119,7 @@ const RAW_RUNTIME_STATE =
|
||||||
["koa-json-body", "npm:5.3.0"],\
|
["koa-json-body", "npm:5.3.0"],\
|
||||||
["koa-logger", "npm:3.2.1"],\
|
["koa-logger", "npm:3.2.1"],\
|
||||||
["koa-mount", "npm:4.0.0"],\
|
["koa-mount", "npm:4.0.0"],\
|
||||||
|
["koa-ratelimit", "npm:5.1.0"],\
|
||||||
["koa-remove-trailing-slashes", "npm:2.0.3"],\
|
["koa-remove-trailing-slashes", "npm:2.0.3"],\
|
||||||
["koa-send", "npm:5.0.1"],\
|
["koa-send", "npm:5.0.1"],\
|
||||||
["koa-slow", "npm:2.1.0"],\
|
["koa-slow", "npm:2.1.0"],\
|
||||||
|
@ -8219,6 +8297,15 @@ const RAW_RUNTIME_STATE =
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
|
["class-transformer", [\
|
||||||
|
["npm:0.5.1", {\
|
||||||
|
"packageLocation": "./.yarn/cache/class-transformer-npm-0.5.1-96b5161e6c-750327e3e9.zip/node_modules/class-transformer/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["class-transformer", "npm:0.5.1"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
|
}]\
|
||||||
|
]],\
|
||||||
["class-utils", [\
|
["class-utils", [\
|
||||||
["npm:0.3.6", {\
|
["npm:0.3.6", {\
|
||||||
"packageLocation": "./.yarn/cache/class-utils-npm-0.3.6-2c691ad006-b236d9deb6.zip/node_modules/class-utils/",\
|
"packageLocation": "./.yarn/cache/class-utils-npm-0.3.6-2c691ad006-b236d9deb6.zip/node_modules/class-utils/",\
|
||||||
|
@ -8232,6 +8319,18 @@ const RAW_RUNTIME_STATE =
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
|
["class-validator", [\
|
||||||
|
["npm:0.14.0", {\
|
||||||
|
"packageLocation": "./.yarn/cache/class-validator-npm-0.14.0-b600d5fe72-bf550a4ab7.zip/node_modules/class-validator/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["class-validator", "npm:0.14.0"],\
|
||||||
|
["@types/validator", "npm:13.11.7"],\
|
||||||
|
["libphonenumber-js", "npm:1.10.51"],\
|
||||||
|
["validator", "npm:13.9.0"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
|
}]\
|
||||||
|
]],\
|
||||||
["clean-regexp", [\
|
["clean-regexp", [\
|
||||||
["npm:1.0.0", {\
|
["npm:1.0.0", {\
|
||||||
"packageLocation": "./.yarn/cache/clean-regexp-npm-1.0.0-f349f98f15-0b1ce281b0.zip/node_modules/clean-regexp/",\
|
"packageLocation": "./.yarn/cache/clean-regexp-npm-1.0.0-f349f98f15-0b1ce281b0.zip/node_modules/clean-regexp/",\
|
||||||
|
@ -13444,6 +13543,20 @@ const RAW_RUNTIME_STATE =
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
|
["handlebars", [\
|
||||||
|
["npm:4.7.8", {\
|
||||||
|
"packageLocation": "./.yarn/cache/handlebars-npm-4.7.8-25244c2c82-bd528f4dd1.zip/node_modules/handlebars/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["handlebars", "npm:4.7.8"],\
|
||||||
|
["minimist", "npm:1.2.8"],\
|
||||||
|
["neo-async", "npm:2.6.2"],\
|
||||||
|
["source-map", "npm:0.6.1"],\
|
||||||
|
["uglify-js", "npm:3.17.4"],\
|
||||||
|
["wordwrap", "npm:1.0.0"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
|
}]\
|
||||||
|
]],\
|
||||||
["happy-dom", [\
|
["happy-dom", [\
|
||||||
["npm:12.10.3", {\
|
["npm:12.10.3", {\
|
||||||
"packageLocation": "./.yarn/cache/happy-dom-npm-12.10.3-5cca1a5e23-de82ddd1c9.zip/node_modules/happy-dom/",\
|
"packageLocation": "./.yarn/cache/happy-dom-npm-12.10.3-5cca1a5e23-de82ddd1c9.zip/node_modules/happy-dom/",\
|
||||||
|
@ -13616,6 +13729,22 @@ const RAW_RUNTIME_STATE =
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
|
["helmet", [\
|
||||||
|
["npm:6.0.1", {\
|
||||||
|
"packageLocation": "./.yarn/cache/helmet-npm-6.0.1-204284f33b-0eec311e1a.zip/node_modules/helmet/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["helmet", "npm:6.0.1"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
|
}],\
|
||||||
|
["npm:6.2.0", {\
|
||||||
|
"packageLocation": "./.yarn/cache/helmet-npm-6.2.0-43622c54ea-f112fcd0d8.zip/node_modules/helmet/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["helmet", "npm:6.2.0"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
|
}]\
|
||||||
|
]],\
|
||||||
["hexoid", [\
|
["hexoid", [\
|
||||||
["npm:1.0.0", {\
|
["npm:1.0.0", {\
|
||||||
"packageLocation": "./.yarn/cache/hexoid-npm-1.0.0-2274609209-f2271b8b6b.zip/node_modules/hexoid/",\
|
"packageLocation": "./.yarn/cache/hexoid-npm-1.0.0-2274609209-f2271b8b6b.zip/node_modules/hexoid/",\
|
||||||
|
@ -16545,6 +16674,16 @@ const RAW_RUNTIME_STATE =
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
|
["koa-helmet", [\
|
||||||
|
["npm:7.0.2", {\
|
||||||
|
"packageLocation": "./.yarn/cache/koa-helmet-npm-7.0.2-4d457c75ac-a2f8f72f05.zip/node_modules/koa-helmet/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["koa-helmet", "npm:7.0.2"],\
|
||||||
|
["helmet", "npm:6.2.0"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
|
}]\
|
||||||
|
]],\
|
||||||
["koa-json-body", [\
|
["koa-json-body", [\
|
||||||
["npm:5.3.0", {\
|
["npm:5.3.0", {\
|
||||||
"packageLocation": "./.yarn/cache/koa-json-body-npm-5.3.0-599f1cafdb-d5b3cef1b1.zip/node_modules/koa-json-body/",\
|
"packageLocation": "./.yarn/cache/koa-json-body-npm-5.3.0-599f1cafdb-d5b3cef1b1.zip/node_modules/koa-json-body/",\
|
||||||
|
@ -16579,6 +16718,18 @@ const RAW_RUNTIME_STATE =
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
|
["koa-ratelimit", [\
|
||||||
|
["npm:5.1.0", {\
|
||||||
|
"packageLocation": "./.yarn/cache/koa-ratelimit-npm-5.1.0-1ab589a18d-09c718b727.zip/node_modules/koa-ratelimit/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["koa-ratelimit", "npm:5.1.0"],\
|
||||||
|
["async-ratelimiter", "npm:1.3.12"],\
|
||||||
|
["debug", "virtual:ac3d8e680759ce54399273724d44e041d6c9b73454d191d411a8c44bb27e22f02aaf6ed9d3ad0ac1c298eac4833cff369c9c7b84c573016112c4f84be2cd8543#npm:4.3.4"],\
|
||||||
|
["ms", "npm:2.1.3"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
|
}]\
|
||||||
|
]],\
|
||||||
["koa-remove-trailing-slashes", [\
|
["koa-remove-trailing-slashes", [\
|
||||||
["npm:2.0.3", {\
|
["npm:2.0.3", {\
|
||||||
"packageLocation": "./.yarn/cache/koa-remove-trailing-slashes-npm-2.0.3-2b7f265a71-43336f9792.zip/node_modules/koa-remove-trailing-slashes/",\
|
"packageLocation": "./.yarn/cache/koa-remove-trailing-slashes-npm-2.0.3-2b7f265a71-43336f9792.zip/node_modules/koa-remove-trailing-slashes/",\
|
||||||
|
@ -16673,7 +16824,7 @@ const RAW_RUNTIME_STATE =
|
||||||
"packageLocation": "./.yarn/__virtual__/koa-views-virtual-bf8ad99819/0/cache/koa-views-npm-7.0.2-f4a5c0091b-edff754c9f.zip/node_modules/koa-views/",\
|
"packageLocation": "./.yarn/__virtual__/koa-views-virtual-bf8ad99819/0/cache/koa-views-npm-7.0.2-f4a5c0091b-edff754c9f.zip/node_modules/koa-views/",\
|
||||||
"packageDependencies": [\
|
"packageDependencies": [\
|
||||||
["koa-views", "virtual:aa59773ac87791c4813d53447077fcf8a847d6de5a301d34dc31286584b1dbb26d30d3adb5b4c41c1e8aea04371e926fda05c09c6253647c432e11d872a304ba#npm:7.0.2"],\
|
["koa-views", "virtual:aa59773ac87791c4813d53447077fcf8a847d6de5a301d34dc31286584b1dbb26d30d3adb5b4c41c1e8aea04371e926fda05c09c6253647c432e11d872a304ba#npm:7.0.2"],\
|
||||||
["@types/koa", "npm:2.13.6"],\
|
["@types/koa", "npm:2.13.7"],\
|
||||||
["consolidate", "virtual:92dc05b84fde30e8037028575c990319f08cb08b0698e442e4c8d1ac4aceb7d666cb7b6454e308d767b637ef0226cb4e16e0c82a358c214878c7185041270440#npm:0.16.0"],\
|
["consolidate", "virtual:92dc05b84fde30e8037028575c990319f08cb08b0698e442e4c8d1ac4aceb7d666cb7b6454e308d767b637ef0226cb4e16e0c82a358c214878c7185041270440#npm:0.16.0"],\
|
||||||
["debug", "virtual:ac3d8e680759ce54399273724d44e041d6c9b73454d191d411a8c44bb27e22f02aaf6ed9d3ad0ac1c298eac4833cff369c9c7b84c573016112c4f84be2cd8543#npm:4.3.4"],\
|
["debug", "virtual:ac3d8e680759ce54399273724d44e041d6c9b73454d191d411a8c44bb27e22f02aaf6ed9d3ad0ac1c298eac4833cff369c9c7b84c573016112c4f84be2cd8543#npm:4.3.4"],\
|
||||||
["get-paths", "npm:0.0.7"],\
|
["get-paths", "npm:0.0.7"],\
|
||||||
|
@ -16706,6 +16857,29 @@ const RAW_RUNTIME_STATE =
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
|
["koa2-swagger-ui", [\
|
||||||
|
["npm:5.10.0", {\
|
||||||
|
"packageLocation": "./.yarn/cache/koa2-swagger-ui-npm-5.10.0-54bce94261-40575d377d.zip/node_modules/koa2-swagger-ui/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["koa2-swagger-ui", "npm:5.10.0"]\
|
||||||
|
],\
|
||||||
|
"linkType": "SOFT"\
|
||||||
|
}],\
|
||||||
|
["virtual:b79af143542f14e992898e20a1ab22405dbd6893d6a8c813e877de0a455aadcaf1a4faf2f8bc74ede210c0399435357919d77dcd4e83ecce226e0faf31581e3e#npm:5.10.0", {\
|
||||||
|
"packageLocation": "./.yarn/__virtual__/koa2-swagger-ui-virtual-7468e59b3e/0/cache/koa2-swagger-ui-npm-5.10.0-54bce94261-40575d377d.zip/node_modules/koa2-swagger-ui/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["koa2-swagger-ui", "virtual:b79af143542f14e992898e20a1ab22405dbd6893d6a8c813e877de0a455aadcaf1a4faf2f8bc74ede210c0399435357919d77dcd4e83ecce226e0faf31581e3e#npm:5.10.0"],\
|
||||||
|
["@types/koa", null],\
|
||||||
|
["handlebars", "npm:4.7.8"],\
|
||||||
|
["lodash", "npm:4.17.21"],\
|
||||||
|
["read-pkg-up", "npm:7.0.1"]\
|
||||||
|
],\
|
||||||
|
"packagePeers": [\
|
||||||
|
"@types/koa"\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
|
}]\
|
||||||
|
]],\
|
||||||
["ky", [\
|
["ky", [\
|
||||||
["npm:0.33.3", {\
|
["npm:0.33.3", {\
|
||||||
"packageLocation": "./.yarn/cache/ky-npm-0.33.3-7d1cbfa9f4-556b2241fe.zip/node_modules/ky/",\
|
"packageLocation": "./.yarn/cache/ky-npm-0.33.3-7d1cbfa9f4-556b2241fe.zip/node_modules/ky/",\
|
||||||
|
@ -16813,6 +16987,15 @@ const RAW_RUNTIME_STATE =
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
|
["libphonenumber-js", [\
|
||||||
|
["npm:1.10.51", {\
|
||||||
|
"packageLocation": "./.yarn/cache/libphonenumber-js-npm-1.10.51-4ff79b15f8-925fda2ecb.zip/node_modules/libphonenumber-js/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["libphonenumber-js", "npm:1.10.51"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
|
}]\
|
||||||
|
]],\
|
||||||
["liftoff", [\
|
["liftoff", [\
|
||||||
["npm:3.1.0", {\
|
["npm:3.1.0", {\
|
||||||
"packageLocation": "./.yarn/cache/liftoff-npm-3.1.0-6dd0a868bd-af0ea7c51c.zip/node_modules/liftoff/",\
|
"packageLocation": "./.yarn/cache/liftoff-npm-3.1.0-6dd0a868bd-af0ea7c51c.zip/node_modules/liftoff/",\
|
||||||
|
@ -18738,6 +18921,15 @@ const RAW_RUNTIME_STATE =
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
|
["openapi-types", [\
|
||||||
|
["npm:12.1.3", {\
|
||||||
|
"packageLocation": "./.yarn/cache/openapi-types-npm-12.1.3-1b8ae4a632-9d1d7ed848.zip/node_modules/openapi-types/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["openapi-types", "npm:12.1.3"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
|
}]\
|
||||||
|
]],\
|
||||||
["opencollective-postinstall", [\
|
["opencollective-postinstall", [\
|
||||||
["npm:2.0.3", {\
|
["npm:2.0.3", {\
|
||||||
"packageLocation": "./.yarn/cache/opencollective-postinstall-npm-2.0.3-954643c36b-69d6377808.zip/node_modules/opencollective-postinstall/",\
|
"packageLocation": "./.yarn/cache/opencollective-postinstall-npm-2.0.3-954643c36b-69d6377808.zip/node_modules/opencollective-postinstall/",\
|
||||||
|
@ -24205,6 +24397,15 @@ const RAW_RUNTIME_STATE =
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
|
["uglify-js", [\
|
||||||
|
["npm:3.17.4", {\
|
||||||
|
"packageLocation": "./.yarn/cache/uglify-js-npm-3.17.4-58d4ab56aa-4c0b800e0f.zip/node_modules/uglify-js/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["uglify-js", "npm:3.17.4"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
|
}]\
|
||||||
|
]],\
|
||||||
["ulid", [\
|
["ulid", [\
|
||||||
["npm:2.3.0", {\
|
["npm:2.3.0", {\
|
||||||
"packageLocation": "./.yarn/cache/ulid-npm-2.3.0-2dd679bbd3-11d7dd3507.zip/node_modules/ulid/",\
|
"packageLocation": "./.yarn/cache/ulid-npm-2.3.0-2dd679bbd3-11d7dd3507.zip/node_modules/ulid/",\
|
||||||
|
@ -25467,6 +25668,15 @@ const RAW_RUNTIME_STATE =
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
|
["wordwrap", [\
|
||||||
|
["npm:1.0.0", {\
|
||||||
|
"packageLocation": "./.yarn/cache/wordwrap-npm-1.0.0-ae57a645e8-497d40beb2.zip/node_modules/wordwrap/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["wordwrap", "npm:1.0.0"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
|
}]\
|
||||||
|
]],\
|
||||||
["workerpool", [\
|
["workerpool", [\
|
||||||
["npm:6.2.1", {\
|
["npm:6.2.1", {\
|
||||||
"packageLocation": "./.yarn/cache/workerpool-npm-6.2.1-1486cb2056-3e637f7632.zip/node_modules/workerpool/",\
|
"packageLocation": "./.yarn/cache/workerpool-npm-6.2.1-1486cb2056-3e637f7632.zip/node_modules/workerpool/",\
|
||||||
|
|
BIN
.yarn/cache/@hapi-boom-npm-10.0.1-306fb2f69f-99415b0e2f.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/@hapi-boom-npm-10.0.1-306fb2f69f-99415b0e2f.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/@hapi-hoek-npm-11.0.4-3a5c13a5d9-0cf1c0dbd2.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/@hapi-hoek-npm-11.0.4-3a5c13a5d9-0cf1c0dbd2.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/@iceshrimp-koa-openapi-npm-2.2.0-b79af14354-a7ff2c0b1a.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/@iceshrimp-koa-openapi-npm-2.2.0-b79af14354-a7ff2c0b1a.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/@koa-cors-npm-4.0.0-e1649c9262-1509d98b72.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/@koa-cors-npm-4.0.0-e1649c9262-1509d98b72.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/@koa-router-npm-12.0.1-6a9764e4df-f9427c8eb2.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/@koa-router-npm-12.0.1-6a9764e4df-f9427c8eb2.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/@types-koa-npm-2.13.6-a8726b332e-cba52d2418.zip
(Stored with Git LFS)
vendored
BIN
.yarn/cache/@types-koa-npm-2.13.6-a8726b332e-cba52d2418.zip
(Stored with Git LFS)
vendored
Binary file not shown.
BIN
.yarn/cache/@types-koa-ratelimit-npm-5.0.4-92296aa01b-5233eec465.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/@types-koa-ratelimit-npm-5.0.4-92296aa01b-5233eec465.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/@types-validator-npm-13.11.7-1eda8f8948-5935d363a9.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/@types-validator-npm-13.11.7-1eda8f8948-5935d363a9.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/async-ratelimiter-npm-1.3.12-25c4d3ff00-bf492d85a3.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/async-ratelimiter-npm-1.3.12-25c4d3ff00-bf492d85a3.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/class-transformer-npm-0.5.1-96b5161e6c-750327e3e9.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/class-transformer-npm-0.5.1-96b5161e6c-750327e3e9.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/class-validator-npm-0.14.0-b600d5fe72-bf550a4ab7.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/class-validator-npm-0.14.0-b600d5fe72-bf550a4ab7.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/handlebars-npm-4.7.8-25244c2c82-bd528f4dd1.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/handlebars-npm-4.7.8-25244c2c82-bd528f4dd1.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/helmet-npm-6.0.1-204284f33b-0eec311e1a.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/helmet-npm-6.0.1-204284f33b-0eec311e1a.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/helmet-npm-6.2.0-43622c54ea-f112fcd0d8.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/helmet-npm-6.2.0-43622c54ea-f112fcd0d8.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/koa-helmet-npm-7.0.2-4d457c75ac-a2f8f72f05.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/koa-helmet-npm-7.0.2-4d457c75ac-a2f8f72f05.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/koa-ratelimit-npm-5.1.0-1ab589a18d-09c718b727.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/koa-ratelimit-npm-5.1.0-1ab589a18d-09c718b727.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/koa2-swagger-ui-npm-5.10.0-54bce94261-40575d377d.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/koa2-swagger-ui-npm-5.10.0-54bce94261-40575d377d.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/libphonenumber-js-npm-1.10.51-4ff79b15f8-925fda2ecb.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/libphonenumber-js-npm-1.10.51-4ff79b15f8-925fda2ecb.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/openapi-types-npm-12.1.3-1b8ae4a632-9d1d7ed848.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/openapi-types-npm-12.1.3-1b8ae4a632-9d1d7ed848.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/uglify-js-npm-3.17.4-58d4ab56aa-4c0b800e0f.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/uglify-js-npm-3.17.4-58d4ab56aa-4c0b800e0f.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/wordwrap-npm-1.0.0-ae57a645e8-497d40beb2.zip
(Stored with Git LFS)
vendored
Normal file
BIN
.yarn/cache/wordwrap-npm-1.0.0-ae57a645e8-497d40beb2.zip
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
|
@ -27,6 +27,8 @@
|
||||||
"@bull-board/koa": "5.6.0",
|
"@bull-board/koa": "5.6.0",
|
||||||
"@bull-board/ui": "5.6.0",
|
"@bull-board/ui": "5.6.0",
|
||||||
"@discordapp/twemoji": "14.1.2",
|
"@discordapp/twemoji": "14.1.2",
|
||||||
|
"@hapi/boom": "^10.0.1",
|
||||||
|
"@iceshrimp/koa-openapi": "^2.2.0",
|
||||||
"@koa/cors": "3.4.3",
|
"@koa/cors": "3.4.3",
|
||||||
"@koa/multer": "3.0.2",
|
"@koa/multer": "3.0.2",
|
||||||
"@koa/router": "9.0.1",
|
"@koa/router": "9.0.1",
|
||||||
|
@ -84,6 +86,7 @@
|
||||||
"koa-json-body": "5.3.0",
|
"koa-json-body": "5.3.0",
|
||||||
"koa-logger": "3.2.1",
|
"koa-logger": "3.2.1",
|
||||||
"koa-mount": "4.0.0",
|
"koa-mount": "4.0.0",
|
||||||
|
"koa-ratelimit": "^5.1.0",
|
||||||
"koa-remove-trailing-slashes": "2.0.3",
|
"koa-remove-trailing-slashes": "2.0.3",
|
||||||
"koa-send": "5.0.1",
|
"koa-send": "5.0.1",
|
||||||
"koa-slow": "2.1.0",
|
"koa-slow": "2.1.0",
|
||||||
|
@ -150,12 +153,13 @@
|
||||||
"@types/jsdom": "21.1.1",
|
"@types/jsdom": "21.1.1",
|
||||||
"@types/jsonld": "1.5.9",
|
"@types/jsonld": "1.5.9",
|
||||||
"@types/jsrsasign": "10.5.8",
|
"@types/jsrsasign": "10.5.8",
|
||||||
"@types/koa": "2.13.6",
|
"@types/koa": "2.13.7",
|
||||||
"@types/koa-bodyparser": "4.3.10",
|
"@types/koa-bodyparser": "4.3.10",
|
||||||
"@types/koa-cors": "0.0.2",
|
"@types/koa-cors": "0.0.2",
|
||||||
"@types/koa-favicon": "2.0.21",
|
"@types/koa-favicon": "2.0.21",
|
||||||
"@types/koa-logger": "3.1.2",
|
"@types/koa-logger": "3.1.2",
|
||||||
"@types/koa-mount": "4.0.2",
|
"@types/koa-mount": "4.0.2",
|
||||||
|
"@types/koa-ratelimit": "^5.0.4",
|
||||||
"@types/koa-send": "4.1.3",
|
"@types/koa-send": "4.1.3",
|
||||||
"@types/koa-views": "7.0.0",
|
"@types/koa-views": "7.0.0",
|
||||||
"@types/koa__cors": "3.3.0",
|
"@types/koa__cors": "3.3.0",
|
||||||
|
|
|
@ -19,6 +19,8 @@ import signupPending from "./private/signup-pending.js";
|
||||||
import verifyEmail from "./private/verify-email.js";
|
import verifyEmail from "./private/verify-email.js";
|
||||||
import discord from "./service/discord.js";
|
import discord from "./service/discord.js";
|
||||||
import github from "./service/github.js";
|
import github from "./service/github.js";
|
||||||
|
import { WebAPI } from "./web/index.js";
|
||||||
|
import mount from "koa-mount";
|
||||||
|
|
||||||
// Init app
|
// Init app
|
||||||
const app = new Koa();
|
const app = new Koa();
|
||||||
|
@ -138,6 +140,9 @@ errorRouter.all("(.*)", async (ctx) => {
|
||||||
ctx.status = 404;
|
ctx.status = 404;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Register Web API
|
||||||
|
await new WebAPI('/iceshrimp').setup(app);
|
||||||
|
|
||||||
// Register router
|
// Register router
|
||||||
app.use(mastoRouter.routes());
|
app.use(mastoRouter.routes());
|
||||||
app.use(mastoRouter.allowedMethods());
|
app.use(mastoRouter.allowedMethods());
|
||||||
|
|
29
packages/backend/src/server/api/web/controllers/user.ts
Normal file
29
packages/backend/src/server/api/web/controllers/user.ts
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
import { Controller, CurrentUser, Get, Params, Query } from "@iceshrimp/koa-openapi";
|
||||||
|
import { UserDetailedResponse, UserResponse } from "@/server/api/web/entities/user.js";
|
||||||
|
import { TimelineResponse } from "@/server/api/web/entities/note.js";
|
||||||
|
import type { ILocalUser } from "@/models/entities/user.js";
|
||||||
|
import { UserHandler } from "@/server/api/web/handlers/user.js";
|
||||||
|
|
||||||
|
@Controller('/user')
|
||||||
|
export class UserController {
|
||||||
|
@Get('/:id')
|
||||||
|
async getUser(
|
||||||
|
@CurrentUser() me: ILocalUser | null,
|
||||||
|
@Params('id') id: string,
|
||||||
|
@Query('detail') detail: boolean
|
||||||
|
): Promise<UserResponse | UserDetailedResponse> {
|
||||||
|
return detail
|
||||||
|
? UserHandler.getUser(me, id)
|
||||||
|
: UserHandler.getUserDetailed(me, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get('/:id/notes')
|
||||||
|
async getUserNotes(
|
||||||
|
@CurrentUser() me: ILocalUser | null,
|
||||||
|
@Params('id') id: string,
|
||||||
|
@Query('limit') limit: number = 20,
|
||||||
|
@Query('replies') replies: boolean = false,
|
||||||
|
): Promise<TimelineResponse> {
|
||||||
|
return UserHandler.getUserNotes(me, id, limit, replies);
|
||||||
|
}
|
||||||
|
}
|
4
packages/backend/src/server/api/web/entities/note.ts
Normal file
4
packages/backend/src/server/api/web/entities/note.ts
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
import { Note } from "@/models/entities/note.js";
|
||||||
|
|
||||||
|
export type NoteResponse = {} & Note;
|
||||||
|
export type TimelineResponse = NoteResponse[];
|
11
packages/backend/src/server/api/web/entities/user.ts
Normal file
11
packages/backend/src/server/api/web/entities/user.ts
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
export type UserResponse = {
|
||||||
|
id: string;
|
||||||
|
username: string;
|
||||||
|
avatarUrl?: string;
|
||||||
|
bannerUrl?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type UserDetailedResponse = UserResponse & {
|
||||||
|
followers: number;
|
||||||
|
following: number;
|
||||||
|
}
|
56
packages/backend/src/server/api/web/handlers/user.ts
Normal file
56
packages/backend/src/server/api/web/handlers/user.ts
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
import { TimelineResponse } from "@/server/api/web/entities/note.js";
|
||||||
|
import { UserDetailedResponse, UserResponse } from "@/server/api/web/entities/user.js";
|
||||||
|
import { Notes, UserProfiles, Users } from "@/models/index.js";
|
||||||
|
import { makePaginationQuery } from "@/server/api/common/make-pagination-query.js";
|
||||||
|
import { generateVisibilityQuery } from "@/server/api/common/generate-visibility-query.js";
|
||||||
|
import { generateMutedUserQuery } from "@/server/api/common/generate-muted-user-query.js";
|
||||||
|
import { generateBlockedUserQuery } from "@/server/api/common/generate-block-query.js";
|
||||||
|
import { ILocalUser } from "@/models/entities/user.js";
|
||||||
|
import { notFound } from "@hapi/boom";
|
||||||
|
|
||||||
|
export class UserHandler {
|
||||||
|
public static async getUserNotes(me: ILocalUser | null, id: string, limit: number, replies: boolean): Promise<TimelineResponse> {
|
||||||
|
const user = await Users.findOneBy({ id });
|
||||||
|
if (!user) throw notFound('No such user');
|
||||||
|
|
||||||
|
const query = makePaginationQuery(Notes.createQueryBuilder('note'))
|
||||||
|
.andWhere("note.userId = :userId", { userId: id })
|
||||||
|
.innerJoinAndSelect("note.user", "user")
|
||||||
|
.leftJoinAndSelect("note.reply", "reply")
|
||||||
|
.leftJoinAndSelect("note.renote", "renote")
|
||||||
|
.leftJoinAndSelect("reply.user", "replyUser")
|
||||||
|
.leftJoinAndSelect("renote.user", "renoteUser");
|
||||||
|
|
||||||
|
generateVisibilityQuery(query, me);
|
||||||
|
if (me) {
|
||||||
|
generateMutedUserQuery(query, me, user);
|
||||||
|
generateBlockedUserQuery(query, me);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!replies) {
|
||||||
|
query.andWhere("note.replyId IS NULL");
|
||||||
|
}
|
||||||
|
|
||||||
|
return query.take(Math.min(limit, 100)).getMany();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async getUser(me: ILocalUser | null, id: string): Promise<UserResponse> {
|
||||||
|
const user = await Users.findOneBy({ id });
|
||||||
|
if (!user) throw notFound('No such user');
|
||||||
|
return {
|
||||||
|
id: user.id,
|
||||||
|
username: user.username,
|
||||||
|
avatarUrl: user.avatarUrl ?? undefined,
|
||||||
|
bannerUrl: user.bannerUrl ?? undefined,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async getUserDetailed(me: ILocalUser | null, id: string): Promise<UserDetailedResponse> {
|
||||||
|
const profile = await UserProfiles.findOneBy({ userId: id });
|
||||||
|
return {
|
||||||
|
followers: 0,
|
||||||
|
following: 0,
|
||||||
|
...await this.getUser(me, id),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
63
packages/backend/src/server/api/web/index.ts
Normal file
63
packages/backend/src/server/api/web/index.ts
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
import Router from "@koa/router";
|
||||||
|
import Koa, { DefaultState, Context, Middleware } from "koa";
|
||||||
|
import { bootstrapControllers, Ctx } from "@iceshrimp/koa-openapi";
|
||||||
|
import { ILocalUser } from "@/models/entities/user.js";
|
||||||
|
import { AccessToken } from "@/models/entities/access-token.js";
|
||||||
|
import { UserController } from "@/server/api/web/controllers/user.js";
|
||||||
|
import { RatelimitMiddleware } from "@/server/api/web/middleware/rate-limit.js";
|
||||||
|
import { AuthenticationMiddleware } from "@/server/api/web/middleware/auth.js";
|
||||||
|
import { ErrorHandlingMiddleware } from "@/server/api/web/middleware/error-handling.js";
|
||||||
|
|
||||||
|
export type WebRouter = Router<WebState, WebContext>;
|
||||||
|
export type WebMiddleware = Middleware<WebState, WebContext>;
|
||||||
|
|
||||||
|
export interface WebState extends DefaultState {}
|
||||||
|
|
||||||
|
export interface WebContext extends Context {
|
||||||
|
user: ILocalUser | null;
|
||||||
|
token: AccessToken | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class WebAPI {
|
||||||
|
private readonly router: WebRouter;
|
||||||
|
|
||||||
|
constructor(prefix: string) {
|
||||||
|
this.router = new Router<DefaultState, WebContext>({ prefix });
|
||||||
|
}
|
||||||
|
|
||||||
|
public async setup(app: Koa): Promise<void> {
|
||||||
|
await bootstrapControllers({
|
||||||
|
app: app,
|
||||||
|
router: this.router,
|
||||||
|
attachRoutes: true,
|
||||||
|
errorHandler: ErrorHandlingMiddleware,
|
||||||
|
controllers: [
|
||||||
|
UserController,
|
||||||
|
],
|
||||||
|
flow: [
|
||||||
|
AuthenticationMiddleware,
|
||||||
|
RatelimitMiddleware,
|
||||||
|
],
|
||||||
|
versions: {
|
||||||
|
1: true
|
||||||
|
},
|
||||||
|
bodyParser: {
|
||||||
|
multipart: true,
|
||||||
|
},
|
||||||
|
openAPI: {
|
||||||
|
enabled: true,
|
||||||
|
publicURL: '/api/iceshrimp',
|
||||||
|
options: {
|
||||||
|
title: "Iceshrimp Web API documentation"
|
||||||
|
},
|
||||||
|
spec: {
|
||||||
|
info: {
|
||||||
|
title: "Iceshrimp Web API",
|
||||||
|
description: "Documentation for using Iceshrimp's Web API",
|
||||||
|
version: "1.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
28
packages/backend/src/server/api/web/middleware/auth.ts
Normal file
28
packages/backend/src/server/api/web/middleware/auth.ts
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
import { WebMiddleware, WebContext, WebState } from "@/server/api/web/index.js";
|
||||||
|
import { Next } from "koa";
|
||||||
|
import authenticate from "@/server/api/authenticate.js";
|
||||||
|
|
||||||
|
export const AuthenticationMiddleware: WebMiddleware = async (ctx: WebContext, next: Next) => {
|
||||||
|
try {
|
||||||
|
const [ user, token ] = await authenticate(ctx.headers.authorization, null, false);
|
||||||
|
|
||||||
|
//FIXME we shouldn't need to cast this
|
||||||
|
(ctx.state as WebState).user = user ?? null;
|
||||||
|
(ctx.state as WebState).token = token ?? null;
|
||||||
|
|
||||||
|
} catch {}
|
||||||
|
|
||||||
|
await next();
|
||||||
|
}
|
||||||
|
|
||||||
|
export function AuthorizationMiddleware(required: boolean, scopes: string[] = []): WebMiddleware {
|
||||||
|
return async (ctx: WebContext, next: Next) => {
|
||||||
|
try {
|
||||||
|
if (required && !(ctx.state as WebState).user) {
|
||||||
|
throw new Error(); //FIXME
|
||||||
|
}
|
||||||
|
} catch {}
|
||||||
|
|
||||||
|
await next();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
export const ErrorHandlingMiddleware = async (err: any, ctx: any) => {
|
||||||
|
if (err.isBoom) {
|
||||||
|
const error = err.output.payload;
|
||||||
|
error.errorDetails = error.statusCode >= 500 ? undefined : err.data;
|
||||||
|
ctx.body = error;
|
||||||
|
ctx.status = error.statusCode;
|
||||||
|
if (error.statusCode >= 500) console.error(err);
|
||||||
|
} else {
|
||||||
|
ctx.body = {error: 'Internal Server Error'};
|
||||||
|
ctx.status = 500;
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
}
|
32
packages/backend/src/server/api/web/middleware/rate-limit.ts
Normal file
32
packages/backend/src/server/api/web/middleware/rate-limit.ts
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
import koaRatelimit from "koa-ratelimit";
|
||||||
|
import { WebContext, WebMiddleware } from "@/server/api/web/index.js";
|
||||||
|
import { Next } from "koa";
|
||||||
|
import { redisClient } from "@/db/redis.js";
|
||||||
|
import { tooManyRequests } from "@hapi/boom";
|
||||||
|
|
||||||
|
export const RatelimitMiddleware: WebMiddleware = async (ctx: WebContext, next: Next) => {
|
||||||
|
// We can't assign limiter directly if we want to preserve type hints for WebContext and WebState
|
||||||
|
//TODO: server config options (disable limiter entirely, set max/duration, set different rate limits for auth/noauth, bypass rate limit for admins)
|
||||||
|
const limiter = koaRatelimit({
|
||||||
|
driver: "redis",
|
||||||
|
db: redisClient,
|
||||||
|
max: 500,
|
||||||
|
duration: 60000,
|
||||||
|
id: () => ctx.state.user?.id ?? ctx.request.ip,
|
||||||
|
headers: {
|
||||||
|
remaining: 'X-RateLimit-Remaining',
|
||||||
|
total: 'X-RateLimit-Limit',
|
||||||
|
reset: 'X-RateLimit-Reset',
|
||||||
|
},
|
||||||
|
throw: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
await limiter(ctx, next);
|
||||||
|
}
|
||||||
|
catch (e: any) {
|
||||||
|
if (e.name === 'TooManyRequestsError')
|
||||||
|
throw tooManyRequests(e.message);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
};
|
|
@ -10,7 +10,7 @@
|
||||||
"declaration": false,
|
"declaration": false,
|
||||||
"sourceMap": false,
|
"sourceMap": false,
|
||||||
"target": "es2021",
|
"target": "es2021",
|
||||||
"module": "es2020",
|
"module": "es2022",
|
||||||
"moduleResolution": "node",
|
"moduleResolution": "node",
|
||||||
"allowSyntheticDefaultImports": true,
|
"allowSyntheticDefaultImports": true,
|
||||||
"removeComments": false,
|
"removeComments": false,
|
||||||
|
|
257
yarn.lock
257
yarn.lock
|
@ -1140,6 +1140,22 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@hapi/boom@npm:^10.0.1":
|
||||||
|
version: 10.0.1
|
||||||
|
resolution: "@hapi/boom@npm:10.0.1"
|
||||||
|
dependencies:
|
||||||
|
"@hapi/hoek": "npm:^11.0.2"
|
||||||
|
checksum: 99415b0e2f6aeefae91475e9215620d6cb0cc9f16b836e052c006cffb59cf39c45f724e545c2c50ba036d786c6c7935bffc97ae1cb504c65d2540d200bd40fff
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
|
"@hapi/hoek@npm:^11.0.2":
|
||||||
|
version: 11.0.4
|
||||||
|
resolution: "@hapi/hoek@npm:11.0.4"
|
||||||
|
checksum: 0cf1c0dbd203701baccae2a78fc2381a77a2f5d2e46722a99c004ddb7eb7440da1bdeb58605acb1afd3287c940e88eec54ec5a35296bcda11e789092b0e58c36
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@hapi/hoek@npm:^9.0.0":
|
"@hapi/hoek@npm:^9.0.0":
|
||||||
version: 9.3.0
|
version: 9.3.0
|
||||||
resolution: "@hapi/hoek@npm:9.3.0"
|
resolution: "@hapi/hoek@npm:9.3.0"
|
||||||
|
@ -1181,6 +1197,27 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@iceshrimp/koa-openapi@npm:^2.2.0":
|
||||||
|
version: 2.2.0
|
||||||
|
resolution: "@iceshrimp/koa-openapi@npm:2.2.0::__archiveUrl=https%3A%2F%2Ficeshrimp.dev%2Fapi%2Fpackages%2Ficeshrimp%2Fnpm%2F%2540iceshrimp%252Fkoa-openapi%2F-%2F2.2.0%2Fkoa-openapi-2.2.0.tgz"
|
||||||
|
dependencies:
|
||||||
|
"@hapi/boom": "npm:^10.0.1"
|
||||||
|
"@koa/cors": "npm:^4.0.0"
|
||||||
|
"@koa/router": "npm:^12.0.1"
|
||||||
|
class-transformer: "npm:*"
|
||||||
|
class-validator: "npm:*"
|
||||||
|
helmet: "npm:6.0.1"
|
||||||
|
koa: "npm:^2.14.2"
|
||||||
|
koa-body: "npm:*"
|
||||||
|
koa-helmet: "npm:^7.0.2"
|
||||||
|
koa2-swagger-ui: "npm:^5.9.1"
|
||||||
|
lodash: "npm:^4.17.21"
|
||||||
|
openapi-types: "npm:^12.1.3"
|
||||||
|
reflect-metadata: "npm:*"
|
||||||
|
checksum: a7ff2c0b1a6fa54dacb9cc9a84d6a3008928f76396e47be42ddf93456f98c55bca42b027db378035b7f9d336ee703e44deb2a0e7d55167ddb081ff066c27f0a0
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@ioredis/commands@npm:^1.1.1":
|
"@ioredis/commands@npm:^1.1.1":
|
||||||
version: 1.2.0
|
version: 1.2.0
|
||||||
resolution: "@ioredis/commands@npm:1.2.0"
|
resolution: "@ioredis/commands@npm:1.2.0"
|
||||||
|
@ -1526,6 +1563,15 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@koa/cors@npm:^4.0.0":
|
||||||
|
version: 4.0.0
|
||||||
|
resolution: "@koa/cors@npm:4.0.0"
|
||||||
|
dependencies:
|
||||||
|
vary: "npm:^1.1.2"
|
||||||
|
checksum: 1509d98b72e321dda99a78b28626142a473533c84bde72b4ee7a76716bd91243765ec3d1790a214e4c5b4c398e72a6abace77f04dbcc7c499c955eed943494f0
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@koa/multer@npm:3.0.2":
|
"@koa/multer@npm:3.0.2":
|
||||||
version: 3.0.2
|
version: 3.0.2
|
||||||
resolution: "@koa/multer@npm:3.0.2"
|
resolution: "@koa/multer@npm:3.0.2"
|
||||||
|
@ -1550,6 +1596,19 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@koa/router@npm:^12.0.1":
|
||||||
|
version: 12.0.1
|
||||||
|
resolution: "@koa/router@npm:12.0.1"
|
||||||
|
dependencies:
|
||||||
|
debug: "npm:^4.3.4"
|
||||||
|
http-errors: "npm:^2.0.0"
|
||||||
|
koa-compose: "npm:^4.1.0"
|
||||||
|
methods: "npm:^1.1.2"
|
||||||
|
path-to-regexp: "npm:^6.2.1"
|
||||||
|
checksum: f9427c8eb21a2d7c880dae192b7298ecb243af32a8270b5e3e32c4420da157111bc326ab0bc75ff0f17320b9d9ab9df235295fc2d53d8681b5a14103c27ad22d
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@kurkle/color@npm:^0.3.0":
|
"@kurkle/color@npm:^0.3.0":
|
||||||
version: 0.3.2
|
version: 0.3.2
|
||||||
resolution: "@kurkle/color@npm:0.3.2"
|
resolution: "@kurkle/color@npm:0.3.2"
|
||||||
|
@ -3053,6 +3112,17 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@types/koa-ratelimit@npm:^5.0.4":
|
||||||
|
version: 5.0.4
|
||||||
|
resolution: "@types/koa-ratelimit@npm:5.0.4"
|
||||||
|
dependencies:
|
||||||
|
"@types/koa": "npm:*"
|
||||||
|
"@types/node": "npm:*"
|
||||||
|
ioredis: "npm:^5.2.3"
|
||||||
|
checksum: 5233eec4658d1300656cb5ecd8d55fa2ea7bed8310409c225ff975782844478d2f1bf722bdf87b81e0b270c010d9771287774f87e9fc2d766e908be82a69f398
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@types/koa-send@npm:4.1.3":
|
"@types/koa-send@npm:4.1.3":
|
||||||
version: 4.1.3
|
version: 4.1.3
|
||||||
resolution: "@types/koa-send@npm:4.1.3"
|
resolution: "@types/koa-send@npm:4.1.3"
|
||||||
|
@ -3071,7 +3141,7 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@types/koa@npm:*, @types/koa@npm:^2.13.5":
|
"@types/koa@npm:*, @types/koa@npm:2.13.7, @types/koa@npm:^2.13.5":
|
||||||
version: 2.13.7
|
version: 2.13.7
|
||||||
resolution: "@types/koa@npm:2.13.7"
|
resolution: "@types/koa@npm:2.13.7"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -3087,22 +3157,6 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@types/koa@npm:2.13.6":
|
|
||||||
version: 2.13.6
|
|
||||||
resolution: "@types/koa@npm:2.13.6"
|
|
||||||
dependencies:
|
|
||||||
"@types/accepts": "npm:*"
|
|
||||||
"@types/content-disposition": "npm:*"
|
|
||||||
"@types/cookies": "npm:*"
|
|
||||||
"@types/http-assert": "npm:*"
|
|
||||||
"@types/http-errors": "npm:*"
|
|
||||||
"@types/keygrip": "npm:*"
|
|
||||||
"@types/koa-compose": "npm:*"
|
|
||||||
"@types/node": "npm:*"
|
|
||||||
checksum: cba52d2418668a2b7b6e8da791faab019584b50f7820130082cd97d46386f2a4c4a7bc59eecd734b98ca73ee8df9cda22485eb7e72738da223f54632dd0a020e
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"@types/koa__cors@npm:3.3.0":
|
"@types/koa__cors@npm:3.3.0":
|
||||||
version: 3.3.0
|
version: 3.3.0
|
||||||
resolution: "@types/koa__cors@npm:3.3.0"
|
resolution: "@types/koa__cors@npm:3.3.0"
|
||||||
|
@ -3518,6 +3572,13 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@types/validator@npm:^13.7.10":
|
||||||
|
version: 13.11.7
|
||||||
|
resolution: "@types/validator@npm:13.11.7"
|
||||||
|
checksum: 5935d363a9a6099ee6a2100ae3be46d9d1f113dbea16e03b627b48b2f746f01100535febc564d215a7054dd9a632ec0cda10ecd6a75d088e3e38834290fb76f6
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@types/vinyl-fs@npm:*":
|
"@types/vinyl-fs@npm:*":
|
||||||
version: 3.0.2
|
version: 3.0.2
|
||||||
resolution: "@types/vinyl-fs@npm:3.0.2"
|
resolution: "@types/vinyl-fs@npm:3.0.2"
|
||||||
|
@ -4961,6 +5022,13 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"async-ratelimiter@npm:^1.3.0":
|
||||||
|
version: 1.3.12
|
||||||
|
resolution: "async-ratelimiter@npm:1.3.12"
|
||||||
|
checksum: bf492d85a3d9caa6a1a36be80f17c85afba4e2911228a50c73ad2bd14e775e7a140d690fba20948d994f4d33e8aaa4b5de4feabb618b971531bce4fe2b6764ce
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"async-settle@npm:^1.0.0":
|
"async-settle@npm:^1.0.0":
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
resolution: "async-settle@npm:1.0.0"
|
resolution: "async-settle@npm:1.0.0"
|
||||||
|
@ -5248,6 +5316,8 @@ __metadata:
|
||||||
"@bull-board/koa": "npm:5.6.0"
|
"@bull-board/koa": "npm:5.6.0"
|
||||||
"@bull-board/ui": "npm:5.6.0"
|
"@bull-board/ui": "npm:5.6.0"
|
||||||
"@discordapp/twemoji": "npm:14.1.2"
|
"@discordapp/twemoji": "npm:14.1.2"
|
||||||
|
"@hapi/boom": "npm:^10.0.1"
|
||||||
|
"@iceshrimp/koa-openapi": "npm:^2.2.0"
|
||||||
"@koa/cors": "npm:3.4.3"
|
"@koa/cors": "npm:3.4.3"
|
||||||
"@koa/multer": "npm:3.0.2"
|
"@koa/multer": "npm:3.0.2"
|
||||||
"@koa/router": "npm:9.0.1"
|
"@koa/router": "npm:9.0.1"
|
||||||
|
@ -5270,12 +5340,13 @@ __metadata:
|
||||||
"@types/jsdom": "npm:21.1.1"
|
"@types/jsdom": "npm:21.1.1"
|
||||||
"@types/jsonld": "npm:1.5.9"
|
"@types/jsonld": "npm:1.5.9"
|
||||||
"@types/jsrsasign": "npm:10.5.8"
|
"@types/jsrsasign": "npm:10.5.8"
|
||||||
"@types/koa": "npm:2.13.6"
|
"@types/koa": "npm:2.13.7"
|
||||||
"@types/koa-bodyparser": "npm:4.3.10"
|
"@types/koa-bodyparser": "npm:4.3.10"
|
||||||
"@types/koa-cors": "npm:0.0.2"
|
"@types/koa-cors": "npm:0.0.2"
|
||||||
"@types/koa-favicon": "npm:2.0.21"
|
"@types/koa-favicon": "npm:2.0.21"
|
||||||
"@types/koa-logger": "npm:3.1.2"
|
"@types/koa-logger": "npm:3.1.2"
|
||||||
"@types/koa-mount": "npm:4.0.2"
|
"@types/koa-mount": "npm:4.0.2"
|
||||||
|
"@types/koa-ratelimit": "npm:^5.0.4"
|
||||||
"@types/koa-send": "npm:4.1.3"
|
"@types/koa-send": "npm:4.1.3"
|
||||||
"@types/koa-views": "npm:7.0.0"
|
"@types/koa-views": "npm:7.0.0"
|
||||||
"@types/koa__cors": "npm:3.3.0"
|
"@types/koa__cors": "npm:3.3.0"
|
||||||
|
@ -5358,6 +5429,7 @@ __metadata:
|
||||||
koa-json-body: "npm:5.3.0"
|
koa-json-body: "npm:5.3.0"
|
||||||
koa-logger: "npm:3.2.1"
|
koa-logger: "npm:3.2.1"
|
||||||
koa-mount: "npm:4.0.0"
|
koa-mount: "npm:4.0.0"
|
||||||
|
koa-ratelimit: "npm:^5.1.0"
|
||||||
koa-remove-trailing-slashes: "npm:2.0.3"
|
koa-remove-trailing-slashes: "npm:2.0.3"
|
||||||
koa-send: "npm:5.0.1"
|
koa-send: "npm:5.0.1"
|
||||||
koa-slow: "npm:2.1.0"
|
koa-slow: "npm:2.1.0"
|
||||||
|
@ -6381,6 +6453,13 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"class-transformer@npm:*":
|
||||||
|
version: 0.5.1
|
||||||
|
resolution: "class-transformer@npm:0.5.1"
|
||||||
|
checksum: 750327e3e9a5cf233c5234252f4caf6b06c437bf68a24acbdcfb06c8e0bfff7aa97c30428184813e38e08111b42871f20c5cf669ea4490f8ae837c09f08b31e7
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"class-utils@npm:^0.3.5":
|
"class-utils@npm:^0.3.5":
|
||||||
version: 0.3.6
|
version: 0.3.6
|
||||||
resolution: "class-utils@npm:0.3.6"
|
resolution: "class-utils@npm:0.3.6"
|
||||||
|
@ -6393,6 +6472,17 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"class-validator@npm:*":
|
||||||
|
version: 0.14.0
|
||||||
|
resolution: "class-validator@npm:0.14.0"
|
||||||
|
dependencies:
|
||||||
|
"@types/validator": "npm:^13.7.10"
|
||||||
|
libphonenumber-js: "npm:^1.10.14"
|
||||||
|
validator: "npm:^13.7.0"
|
||||||
|
checksum: bf550a4ab7b424467737c75e7e6171a45fe010ccab6af50793539d9d2e1f5cce1a35fbc8b11f9a5de4f049852f768232acca16f05cf80993a36369b494560f44
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"clean-regexp@npm:^1.0.0":
|
"clean-regexp@npm:^1.0.0":
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
resolution: "clean-regexp@npm:1.0.0"
|
resolution: "clean-regexp@npm:1.0.0"
|
||||||
|
@ -10761,6 +10851,24 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"handlebars@npm:^4.7.8":
|
||||||
|
version: 4.7.8
|
||||||
|
resolution: "handlebars@npm:4.7.8"
|
||||||
|
dependencies:
|
||||||
|
minimist: "npm:^1.2.5"
|
||||||
|
neo-async: "npm:^2.6.2"
|
||||||
|
source-map: "npm:^0.6.1"
|
||||||
|
uglify-js: "npm:^3.1.4"
|
||||||
|
wordwrap: "npm:^1.0.0"
|
||||||
|
dependenciesMeta:
|
||||||
|
uglify-js:
|
||||||
|
optional: true
|
||||||
|
bin:
|
||||||
|
handlebars: bin/handlebars
|
||||||
|
checksum: bd528f4dd150adf67f3f857118ef0fa43ff79a153b1d943fa0a770f2599e38b25a7a0dbac1a3611a4ec86970fd2325a81310fb788b5c892308c9f8743bd02e11
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"happy-dom@npm:^12.10.3":
|
"happy-dom@npm:^12.10.3":
|
||||||
version: 12.10.3
|
version: 12.10.3
|
||||||
resolution: "happy-dom@npm:12.10.3"
|
resolution: "happy-dom@npm:12.10.3"
|
||||||
|
@ -10915,6 +11023,20 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"helmet@npm:6.0.1":
|
||||||
|
version: 6.0.1
|
||||||
|
resolution: "helmet@npm:6.0.1"
|
||||||
|
checksum: 0eec311e1a3820e206226563e55d7115fa66e9a34922229472c1dac407c5d00f0d5c4f5f7afed714fba40287aac1c30dcbfa9b3c096f1146f9d6a55c4527d65d
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
|
"helmet@npm:^6.0.1":
|
||||||
|
version: 6.2.0
|
||||||
|
resolution: "helmet@npm:6.2.0"
|
||||||
|
checksum: f112fcd0d8494e6c8ad10e9307e182f1be9c9c4917a3f9a3718c13ae120d4c4e1f251e735297d6a9266e068dcc0463ab101c8d7f2b809c0ceabcef4681f81a2a
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"hexoid@npm:^1.0.0":
|
"hexoid@npm:^1.0.0":
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
resolution: "hexoid@npm:1.0.0"
|
resolution: "hexoid@npm:1.0.0"
|
||||||
|
@ -11043,7 +11165,7 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"http-errors@npm:2.0.0":
|
"http-errors@npm:2.0.0, http-errors@npm:^2.0.0":
|
||||||
version: 2.0.0
|
version: 2.0.0
|
||||||
resolution: "http-errors@npm:2.0.0"
|
resolution: "http-errors@npm:2.0.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -11501,7 +11623,7 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"ioredis@npm:5.3.2, ioredis@npm:^5.0.0":
|
"ioredis@npm:5.3.2, ioredis@npm:^5.0.0, ioredis@npm:^5.2.3":
|
||||||
version: 5.3.2
|
version: 5.3.2
|
||||||
resolution: "ioredis@npm:5.3.2"
|
resolution: "ioredis@npm:5.3.2"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -13474,7 +13596,7 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"koa-body@npm:^6.0.1":
|
"koa-body@npm:*, koa-body@npm:^6.0.1":
|
||||||
version: 6.0.1
|
version: 6.0.1
|
||||||
resolution: "koa-body@npm:6.0.1"
|
resolution: "koa-body@npm:6.0.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -13525,6 +13647,15 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"koa-helmet@npm:^7.0.2":
|
||||||
|
version: 7.0.2
|
||||||
|
resolution: "koa-helmet@npm:7.0.2"
|
||||||
|
dependencies:
|
||||||
|
helmet: "npm:^6.0.1"
|
||||||
|
checksum: a2f8f72f053402fd8b70deb219ab1535cb6dbc8975ae9bd84d2a976a88a2349f47289485d5db718f21c4d493a9555e8b4bb962119f47d2b0ff95877edc232004
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"koa-json-body@npm:5.3.0":
|
"koa-json-body@npm:5.3.0":
|
||||||
version: 5.3.0
|
version: 5.3.0
|
||||||
resolution: "koa-json-body@npm:5.3.0"
|
resolution: "koa-json-body@npm:5.3.0"
|
||||||
|
@ -13556,6 +13687,17 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"koa-ratelimit@npm:^5.1.0":
|
||||||
|
version: 5.1.0
|
||||||
|
resolution: "koa-ratelimit@npm:5.1.0"
|
||||||
|
dependencies:
|
||||||
|
async-ratelimiter: "npm:^1.3.0"
|
||||||
|
debug: "npm:^4.1.1"
|
||||||
|
ms: "npm:^2.1.2"
|
||||||
|
checksum: 09c718b72750c590eef55b59236457e6c9cfdbe7e5b07a955549e421f08ba92c41c3c32e538700dc932c8be628814ec6a4cac9e79f53a3243fda92915412c838
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"koa-remove-trailing-slashes@npm:2.0.3":
|
"koa-remove-trailing-slashes@npm:2.0.3":
|
||||||
version: 2.0.3
|
version: 2.0.3
|
||||||
resolution: "koa-remove-trailing-slashes@npm:2.0.3"
|
resolution: "koa-remove-trailing-slashes@npm:2.0.3"
|
||||||
|
@ -13647,6 +13789,19 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"koa2-swagger-ui@npm:^5.9.1":
|
||||||
|
version: 5.10.0
|
||||||
|
resolution: "koa2-swagger-ui@npm:5.10.0"
|
||||||
|
dependencies:
|
||||||
|
handlebars: "npm:^4.7.8"
|
||||||
|
lodash: "npm:^4.17.21"
|
||||||
|
read-pkg-up: "npm:7.0.1"
|
||||||
|
peerDependencies:
|
||||||
|
"@types/koa": "*"
|
||||||
|
checksum: 40575d377ddb264ec6f2d19290d02dd52cd9e6d392437b2fdfa208975559c6ebdf4b0938f46ded32aea0bb91263f7a7676df49d191d7e07a1cc0ce5ab1e34fe0
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"koa@npm:2.13.4":
|
"koa@npm:2.13.4":
|
||||||
version: 2.13.4
|
version: 2.13.4
|
||||||
resolution: "koa@npm:2.13.4"
|
resolution: "koa@npm:2.13.4"
|
||||||
|
@ -13678,7 +13833,7 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"koa@npm:2.14.2, koa@npm:^2.13.1":
|
"koa@npm:2.14.2, koa@npm:^2.13.1, koa@npm:^2.14.2":
|
||||||
version: 2.14.2
|
version: 2.14.2
|
||||||
resolution: "koa@npm:2.14.2"
|
resolution: "koa@npm:2.14.2"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -13793,6 +13948,13 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"libphonenumber-js@npm:^1.10.14":
|
||||||
|
version: 1.10.51
|
||||||
|
resolution: "libphonenumber-js@npm:1.10.51"
|
||||||
|
checksum: 925fda2ecba5d1e655f9d6e43cd15b2d41f7fe9db38828f4159442bc263ae959a26f212223336831c6f64e58b82e91477f7ac814d66b48c80e5852529545032b
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"liftoff@npm:^3.1.0":
|
"liftoff@npm:^3.1.0":
|
||||||
version: 3.1.0
|
version: 3.1.0
|
||||||
resolution: "liftoff@npm:3.1.0"
|
resolution: "liftoff@npm:3.1.0"
|
||||||
|
@ -14796,7 +14958,7 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1":
|
"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.2":
|
||||||
version: 2.1.3
|
version: 2.1.3
|
||||||
resolution: "ms@npm:2.1.3"
|
resolution: "ms@npm:2.1.3"
|
||||||
checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d
|
checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d
|
||||||
|
@ -15555,6 +15717,13 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"openapi-types@npm:^12.1.3":
|
||||||
|
version: 12.1.3
|
||||||
|
resolution: "openapi-types@npm:12.1.3"
|
||||||
|
checksum: 9d1d7ed848622b63d0a4c3f881689161b99427133054e46b8e3241e137f1c78bb0031c5d80b420ee79ac2e91d2e727ffd6fc13c553d1b0488ddc8ad389dcbef8
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"opencollective-postinstall@npm:^2.0.2":
|
"opencollective-postinstall@npm:^2.0.2":
|
||||||
version: 2.0.3
|
version: 2.0.3
|
||||||
resolution: "opencollective-postinstall@npm:2.0.3"
|
resolution: "opencollective-postinstall@npm:2.0.3"
|
||||||
|
@ -15995,7 +16164,7 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"path-to-regexp@npm:^6.1.0":
|
"path-to-regexp@npm:^6.1.0, path-to-regexp@npm:^6.2.1":
|
||||||
version: 6.2.1
|
version: 6.2.1
|
||||||
resolution: "path-to-regexp@npm:6.2.1"
|
resolution: "path-to-regexp@npm:6.2.1"
|
||||||
checksum: 1e266be712d1a08086ee77beab12a1804842ec635dfed44f9ee1ba960a0e01cec8063fb8c92561115cdc0ce73158cdc7766e353ffa039340b4a85b370084c4d4
|
checksum: 1e266be712d1a08086ee77beab12a1804842ec635dfed44f9ee1ba960a0e01cec8063fb8c92561115cdc0ce73158cdc7766e353ffa039340b4a85b370084c4d4
|
||||||
|
@ -17408,17 +17577,7 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"read-pkg-up@npm:^1.0.1":
|
"read-pkg-up@npm:7.0.1, read-pkg-up@npm:^7.0.0, read-pkg-up@npm:^7.0.1":
|
||||||
version: 1.0.1
|
|
||||||
resolution: "read-pkg-up@npm:1.0.1"
|
|
||||||
dependencies:
|
|
||||||
find-up: "npm:^1.0.0"
|
|
||||||
read-pkg: "npm:^1.0.0"
|
|
||||||
checksum: d18399a0f46e2da32beb2f041edd0cda49d2f2cc30195a05c759ef3ed9b5e6e19ba1ad1bae2362bdec8c6a9f2c3d18f4d5e8c369e808b03d498d5781cb9122c7
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"read-pkg-up@npm:^7.0.0, read-pkg-up@npm:^7.0.1":
|
|
||||||
version: 7.0.1
|
version: 7.0.1
|
||||||
resolution: "read-pkg-up@npm:7.0.1"
|
resolution: "read-pkg-up@npm:7.0.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -17429,6 +17588,16 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"read-pkg-up@npm:^1.0.1":
|
||||||
|
version: 1.0.1
|
||||||
|
resolution: "read-pkg-up@npm:1.0.1"
|
||||||
|
dependencies:
|
||||||
|
find-up: "npm:^1.0.0"
|
||||||
|
read-pkg: "npm:^1.0.0"
|
||||||
|
checksum: d18399a0f46e2da32beb2f041edd0cda49d2f2cc30195a05c759ef3ed9b5e6e19ba1ad1bae2362bdec8c6a9f2c3d18f4d5e8c369e808b03d498d5781cb9122c7
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"read-pkg@npm:^1.0.0":
|
"read-pkg@npm:^1.0.0":
|
||||||
version: 1.1.0
|
version: 1.1.0
|
||||||
resolution: "read-pkg@npm:1.1.0"
|
resolution: "read-pkg@npm:1.1.0"
|
||||||
|
@ -17617,7 +17786,7 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"reflect-metadata@npm:0.1.13, reflect-metadata@npm:^0.1.13":
|
"reflect-metadata@npm:*, reflect-metadata@npm:0.1.13, reflect-metadata@npm:^0.1.13":
|
||||||
version: 0.1.13
|
version: 0.1.13
|
||||||
resolution: "reflect-metadata@npm:0.1.13"
|
resolution: "reflect-metadata@npm:0.1.13"
|
||||||
checksum: 732570da35d2d96f8fdd5aac60fb263aa92f6512eaded5962b052bd9e90f22a9dec5aaf0d7ff4bfe97646c9530e8444e8435c2d80b24d0bdf938b5d47f6f5b83
|
checksum: 732570da35d2d96f8fdd5aac60fb263aa92f6512eaded5962b052bd9e90f22a9dec5aaf0d7ff4bfe97646c9530e8444e8435c2d80b24d0bdf938b5d47f6f5b83
|
||||||
|
@ -20398,6 +20567,15 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"uglify-js@npm:^3.1.4":
|
||||||
|
version: 3.17.4
|
||||||
|
resolution: "uglify-js@npm:3.17.4"
|
||||||
|
bin:
|
||||||
|
uglifyjs: bin/uglifyjs
|
||||||
|
checksum: 4c0b800e0ff192079d2c3ce8414fd3b656a570028c7c79af5c29c53d5c532b68bbcae4ad47307f89c2ee124d11826fff7a136b59d5c5bb18422bcdf5568afe1e
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"ulid@npm:2.3.0":
|
"ulid@npm:2.3.0":
|
||||||
version: 2.3.0
|
version: 2.3.0
|
||||||
resolution: "ulid@npm:2.3.0"
|
resolution: "ulid@npm:2.3.0"
|
||||||
|
@ -21438,6 +21616,13 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"wordwrap@npm:^1.0.0":
|
||||||
|
version: 1.0.0
|
||||||
|
resolution: "wordwrap@npm:1.0.0"
|
||||||
|
checksum: 497d40beb2bdb08e6d38754faa17ce20b0bf1306327f80cb777927edb23f461ee1f6bc659b3c3c93f26b08e1cf4b46acc5bae8fda1f0be3b5ab9a1a0211034cd
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"workerpool@npm:6.2.1":
|
"workerpool@npm:6.2.1":
|
||||||
version: 6.2.1
|
version: 6.2.1
|
||||||
resolution: "workerpool@npm:6.2.1"
|
resolution: "workerpool@npm:6.2.1"
|
||||||
|
|
Loading…
Reference in a new issue