diff --git a/.gitignore b/.gitignore index d49f885..09457ea 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ dist package node_modules docs +tsoa_build diff --git a/eslint.config.mjs b/eslint.config.mjs index e5c519b..134a927 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -21,6 +21,7 @@ export default [ "@typescript-eslint/ban-ts-comment": 0, "@typescript-eslint/no-explicit-any": 0, "@typescript-eslint/explicit-module-boundary-types": 0, + "@typescript-eslint/no-empty-object-type": 0, "arrow-body-style": 0, curly: 0, "eol-last": 0, diff --git a/package.json b/package.json index 7425b3a..066c4fb 100644 --- a/package.json +++ b/package.json @@ -12,13 +12,15 @@ "build": "tsc", "docs": "typedoc src/index.ts", "lint": "tsc --noEmit && eslint --report-unused-disable-directives && prettier --check src", - "prepare": "pnpm run build && husky" + "prepare": "pnpm run build && husky", + "tsoa": "tsoa spec-and-routes && tsc" }, "repository": { "type": "git", "url": "git+https://github.com/LemmyNet/lemmy-js-client.git" }, "devDependencies": { + "@types/joi": "^17.2.3", "@types/node": "^22.7.4", "@typescript-eslint/eslint-plugin": "^8.7.0", "@typescript-eslint/parser": "^8.7.0", @@ -31,6 +33,7 @@ "prettier-plugin-organize-imports": "^4.0.0", "prettier-plugin-packagejson": "^2.5.1", "sortpack": "^2.4.0", + "tsoa": "^6.6.0", "typedoc": "^0.27.0", "typescript": "^5.5.4", "typescript-eslint": "^8.7.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9373f66..d1ca90d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: devDependencies: + '@types/joi': + specifier: ^17.2.3 + version: 17.2.3 '@types/node': specifier: ^22.7.4 version: 22.10.7 @@ -44,6 +47,9 @@ importers: sortpack: specifier: ^2.4.0 version: 2.4.0 + tsoa: + specifier: ^6.6.0 + version: 6.6.0 typedoc: specifier: ^0.27.0 version: 0.27.6(typescript@5.7.3) @@ -168,6 +174,103 @@ packages: '@gerrit0/mini-shiki@1.24.4': resolution: {integrity: sha512-YEHW1QeAg6UmxEmswiQbOVEg1CW22b1XUD/lNTliOsu0LD0wqoyleFMnmbTp697QE0pcadQiR5cVtbbAPncvpw==} + '@hapi/accept@6.0.3': + resolution: {integrity: sha512-p72f9k56EuF0n3MwlBNThyVE5PXX40g+aQh+C/xbKrfzahM2Oispv3AXmOIU51t3j77zay1qrX7IIziZXspMlw==} + + '@hapi/ammo@6.0.1': + resolution: {integrity: sha512-pmL+nPod4g58kXrMcsGLp05O2jF4P2Q3GiL8qYV7nKYEh3cGf+rV4P5Jyi2Uq0agGhVU63GtaSAfBEZOlrJn9w==} + + '@hapi/b64@6.0.1': + resolution: {integrity: sha512-ZvjX4JQReUmBheeCq+S9YavcnMMHWqx3S0jHNXWIM1kQDxB9cyfSycpVvjfrKcIS8Mh5N3hmu/YKo4Iag9g2Kw==} + + '@hapi/boom@10.0.1': + resolution: {integrity: sha512-ERcCZaEjdH3OgSJlyjVk8pHIFeus91CjKP3v+MpgBNp5IvGzP2l/bRiD78nqYcKPaZdbKkK5vDBVPd2ohHBlsA==} + + '@hapi/bounce@3.0.2': + resolution: {integrity: sha512-d0XmlTi3H9HFDHhQLjg4F4auL1EY3Wqj7j7/hGDhFFe6xAbnm3qiGrXeT93zZnPH8gH+SKAFYiRzu26xkXcH3g==} + + '@hapi/bourne@3.0.0': + resolution: {integrity: sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w==} + + '@hapi/call@9.0.1': + resolution: {integrity: sha512-uPojQRqEL1GRZR4xXPqcLMujQGaEpyVPRyBlD8Pp5rqgIwLhtveF9PkixiKru2THXvuN8mUrLeet5fqxKAAMGg==} + + '@hapi/catbox-memory@6.0.2': + resolution: {integrity: sha512-H1l4ugoFW/ZRkqeFrIo8p1rWN0PA4MDTfu4JmcoNDvnY975o29mqoZblqFTotxNHlEkMPpIiIBJTV+Mbi+aF0g==} + + '@hapi/catbox@12.1.1': + resolution: {integrity: sha512-hDqYB1J+R0HtZg4iPH3LEnldoaBsar6bYp0EonBmNQ9t5CO+1CqgCul2ZtFveW1ReA5SQuze9GPSU7/aecERhw==} + + '@hapi/content@6.0.0': + resolution: {integrity: sha512-CEhs7j+H0iQffKfe5Htdak5LBOz/Qc8TRh51cF+BFv0qnuph3Em4pjGVzJMkI2gfTDdlJKWJISGWS1rK34POGA==} + + '@hapi/cryptiles@6.0.1': + resolution: {integrity: sha512-9GM9ECEHfR8lk5ASOKG4+4ZsEzFqLfhiryIJ2ISePVB92OHLp/yne4m+zn7z9dgvM98TLpiFebjDFQ0UHcqxXQ==} + engines: {node: '>=14.0.0'} + + '@hapi/file@3.0.0': + resolution: {integrity: sha512-w+lKW+yRrLhJu620jT3y+5g2mHqnKfepreykvdOcl9/6up8GrQQn+l3FRTsjHTKbkbfQFkuksHpdv2EcpKcJ4Q==} + + '@hapi/hapi@21.3.12': + resolution: {integrity: sha512-GCUP12dkb3QMjpFl+wEFO73nqKRmsnD5um/QDOn6lj2GjGBrDXPcT194mNARO+PPNXZOR4KmvIpHt/lceUncfg==} + engines: {node: '>=14.15.0'} + + '@hapi/heavy@8.0.1': + resolution: {integrity: sha512-gBD/NANosNCOp6RsYTsjo2vhr5eYA3BEuogk6cxY0QdhllkkTaJFYtTXv46xd6qhBVMbMMqcSdtqey+UQU3//w==} + + '@hapi/hoek@11.0.7': + resolution: {integrity: sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==} + + '@hapi/hoek@9.3.0': + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + + '@hapi/iron@7.0.1': + resolution: {integrity: sha512-tEZnrOujKpS6jLKliyWBl3A9PaE+ppuL/+gkbyPPDb/l2KSKQyH4lhMkVb+sBhwN+qaxxlig01JRqB8dk/mPxQ==} + + '@hapi/mimos@7.0.1': + resolution: {integrity: sha512-b79V+BrG0gJ9zcRx1VGcCI6r6GEzzZUgiGEJVoq5gwzuB2Ig9Cax8dUuBauQCFKvl2YWSWyOc8mZ8HDaJOtkew==} + + '@hapi/nigel@5.0.1': + resolution: {integrity: sha512-uv3dtYuB4IsNaha+tigWmN8mQw/O9Qzl5U26Gm4ZcJVtDdB1AVJOwX3X5wOX+A07qzpEZnOMBAm8jjSqGsU6Nw==} + engines: {node: '>=14.0.0'} + + '@hapi/pez@6.1.0': + resolution: {integrity: sha512-+FE3sFPYuXCpuVeHQ/Qag1b45clR2o54QoonE/gKHv9gukxQ8oJJZPR7o3/ydDTK6racnCJXxOyT1T93FCJMIg==} + + '@hapi/podium@5.0.2': + resolution: {integrity: sha512-T7gf2JYHQQfEfewTQFbsaXoZxSvuXO/QBIGljucUQ/lmPnTTNAepoIKOakWNVWvo2fMEDjycu77r8k6dhreqHA==} + + '@hapi/shot@6.0.1': + resolution: {integrity: sha512-s5ynMKZXYoDd3dqPw5YTvOR/vjHvMTxc388+0qL0jZZP1+uwXuUD32o9DuuuLsmTlyXCWi02BJl1pBpwRuUrNA==} + + '@hapi/somever@4.1.1': + resolution: {integrity: sha512-lt3QQiDDOVRatS0ionFDNrDIv4eXz58IibQaZQDOg4DqqdNme8oa0iPWcE0+hkq/KTeBCPtEOjDOBKBKwDumVg==} + + '@hapi/statehood@8.1.1': + resolution: {integrity: sha512-YbK7PSVUA59NArAW5Np0tKRoIZ5VNYUicOk7uJmWZF6XyH5gGL+k62w77SIJb0AoAJ0QdGQMCQ/WOGL1S3Ydow==} + + '@hapi/subtext@8.1.0': + resolution: {integrity: sha512-PyaN4oSMtqPjjVxLny1k0iYg4+fwGusIhaom9B2StinBclHs7v46mIW706Y+Wo21lcgulGyXbQrmT/w4dus6ww==} + + '@hapi/teamwork@6.0.0': + resolution: {integrity: sha512-05HumSy3LWfXpmJ9cr6HzwhAavrHkJ1ZRCmNE2qJMihdM5YcWreWPfyN0yKT2ZjCM92au3ZkuodjBxOibxM67A==} + engines: {node: '>=14.0.0'} + + '@hapi/topo@5.1.0': + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + + '@hapi/topo@6.0.2': + resolution: {integrity: sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==} + + '@hapi/validate@2.0.1': + resolution: {integrity: sha512-NZmXRnrSLK8MQ9y/CMqE9WSspgB9xA41/LlYR0k967aSZebWr4yNrpxIbov12ICwKy4APSlWXZga9jN5p6puPA==} + + '@hapi/vise@5.0.1': + resolution: {integrity: sha512-XZYWzzRtINQLedPYlIkSkUr7m5Ddwlu99V9elh8CSygXstfv3UnWIXT0QD+wmR0VAG34d2Vx3olqcEhRRoTu9A==} + + '@hapi/wreck@18.1.0': + resolution: {integrity: sha512-0z6ZRCmFEfV/MQqkQomJ7sl/hyxvcZM7LtuVqN3vdAO4vM9eBbowl0kaqQj9EJJQab+3Uuh1GxbGIBFy4NfJ4w==} + '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -188,6 +291,10 @@ packages: resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} engines: {node: '>=18.18'} + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -218,6 +325,10 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + '@pkgr/core@0.1.1': resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -231,18 +342,94 @@ packages: '@shikijs/vscode-textmate@9.3.1': resolution: {integrity: sha512-79QfK1393x9Ho60QFyLti+QfdJzRQCVLFb97kOIV7Eo9vQU/roINgk7m24uv0a7AUvN//RDH36FLjjK48v0s9g==} + '@sideway/address@4.1.5': + resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} + + '@sideway/formula@3.0.1': + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + + '@sideway/pinpoint@2.0.0': + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + + '@tsoa/cli@6.6.0': + resolution: {integrity: sha512-thSW0EiqjkF7HspcPIVIy0ZX65VqbWALHbxwl8Sk83j2kakOMq+fJvfo8FcBAWlMki+JDH7CO5iaAaSLHbeqtg==} + engines: {node: '>=18.0.0', yarn: '>=1.9.4'} + hasBin: true + + '@tsoa/runtime@6.6.0': + resolution: {integrity: sha512-+rF2gdL8CX+jQ82/IBc+MRJFNAvWPoBBl77HHJv3ESVMqbKhlhlo97JHmKyFbLcX6XOJN8zl8gfQpAEJN4SOMQ==} + engines: {node: '>=18.0.0', yarn: '>=1.9.4'} + + '@types/accepts@1.3.7': + resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} + + '@types/body-parser@1.19.5': + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/content-disposition@0.5.8': + resolution: {integrity: sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==} + + '@types/cookies@0.9.0': + resolution: {integrity: sha512-40Zk8qR147RABiQ7NQnBzWzDcjKzNrntB5BAmeGCb2p/MIyOE+4BVvc17wumsUqUw00bJYqoXFHYygQnEFh4/Q==} + '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/express-serve-static-core@5.0.5': + resolution: {integrity: sha512-GLZPrd9ckqEBFMcVM/qRFAP0Hg3qiVEojgEFsx/N/zKXsBzbGF6z5FBDpZ0+Xhp1xr+qRZYjfGr1cWHB9oFHSA==} + + '@types/express@5.0.0': + resolution: {integrity: sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==} + '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/http-assert@1.5.6': + resolution: {integrity: sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw==} + + '@types/http-errors@2.0.4': + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + + '@types/joi@17.2.3': + resolution: {integrity: sha512-dGjs/lhrWOa+eO0HwgxCSnDm5eMGCsXuvLglMghJq32F6q5LyyNuXb41DHzrg501CKNOSSAHmfB7FDGeUnDmzw==} + deprecated: This is a stub types definition. joi provides its own type definitions, so you do not need this installed. + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/keygrip@1.0.6': + resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==} + + '@types/koa-compose@3.2.8': + resolution: {integrity: sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==} + + '@types/koa@2.15.0': + resolution: {integrity: sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==} + + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + + '@types/multer@1.4.12': + resolution: {integrity: sha512-pQ2hoqvXiJt2FP9WQVLPRO+AmiIm/ZYkavPlIQnx282u4ZrVdztx0pkh3jjpQt0Kz+YI0YhSG264y08UJKoUQg==} + '@types/node@22.10.7': resolution: {integrity: sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==} + '@types/qs@6.9.18': + resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} + + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + '@types/send@0.17.4': + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + + '@types/serve-static@1.15.7': + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} @@ -293,6 +480,10 @@ packages: resolution: {integrity: sha512-v/BpkeeYAsPkKCkR8BDwcno0llhzWVqPOamQrAEMdpZav2Y9OVjd9dwJyBLJWwf335B5DmlifECIkZRJCaGaHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -310,6 +501,10 @@ packages: resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} engines: {node: '>=18'} + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + ansi-regex@6.1.0: resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} @@ -332,9 +527,16 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -354,6 +556,18 @@ packages: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + call-bind-apply-helpers@1.0.1: + resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + engines: {node: '>= 0.4'} + + call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + engines: {node: '>= 0.4'} + caller-callsite@2.0.0: resolution: {integrity: sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==} engines: {node: '>=4'} @@ -393,6 +607,10 @@ packages: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -416,9 +634,24 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + cosmiconfig@5.2.1: resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==} engines: {node: '>=4'} @@ -427,6 +660,14 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.4.0: resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} @@ -439,6 +680,14 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + detect-indent@7.0.1: resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} engines: {node: '>=12.20'} @@ -451,12 +700,36 @@ packages: resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + electron-to-chromium@1.5.4: resolution: {integrity: sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==} emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -468,10 +741,25 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -547,6 +835,10 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} @@ -554,6 +846,10 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + engines: {node: '>= 0.10.0'} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -589,6 +885,10 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + find-line-column@0.5.2: resolution: {integrity: sha512-eNhNkDt5RbxY4X++JwyDURP62FYhV1bh9LF4dfOiwpVCTk5vvfEANhnui5ypUEELGR02QZSrWFtaTgd4ulW5tw==} @@ -606,6 +906,22 @@ packages: flatted@3.3.2: resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} + function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -613,10 +929,22 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + get-east-asian-width@1.3.0: resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} engines: {node: '>=18'} + get-intrinsic@1.2.7: + resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + get-stdin@9.0.0: resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} engines: {node: '>=12'} @@ -636,6 +964,10 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -644,9 +976,21 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -655,10 +999,18 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} @@ -668,6 +1020,10 @@ packages: engines: {node: '>=18'} hasBin: true + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -702,6 +1058,13 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -721,6 +1084,10 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + is-fullwidth-code-point@4.0.0: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} engines: {node: '>=12'} @@ -745,9 +1112,19 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + joi@17.13.3: + resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -781,6 +1158,9 @@ packages: engines: {node: '>=6'} hasBin: true + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -815,6 +1195,9 @@ packages: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -825,9 +1208,24 @@ packages: resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} hasBin: true + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + merge-anything@5.1.7: + resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} + engines: {node: '>=12.13'} + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -835,10 +1233,31 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.53.0: + resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} @@ -854,12 +1273,29 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} @@ -867,6 +1303,14 @@ packages: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + object-inspect@1.13.3: + resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} + engines: {node: '>= 0.4'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} @@ -887,6 +1331,9 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -895,6 +1342,10 @@ packages: resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} engines: {node: '>=4'} + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -910,6 +1361,13 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} @@ -962,6 +1420,10 @@ packages: engines: {node: '>=14'} hasBin: true + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} @@ -970,9 +1432,28 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + resolve-from@3.0.0: resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} engines: {node: '>=4'} @@ -999,6 +1480,12 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -1008,6 +1495,17 @@ packages: engines: {node: '>=10'} hasBin: true + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -1016,6 +1514,22 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} @@ -1040,17 +1554,37 @@ packages: engines: {node: '>=10.0.0'} hasBin: true + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + string-width@7.2.0: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + strip-ansi@7.1.0: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} @@ -1091,19 +1625,36 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + ts-api-utils@2.0.0: resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' + ts-deepmerge@7.0.2: + resolution: {integrity: sha512-akcpDTPuez4xzULo5NwuoKwYRtjQJ9eoNfBACiBMaXwNAx7B1PKfe5wqUFJuW5uKzQ68YjDFwPaWHDG1KnFGsA==} + engines: {node: '>=14.13.1'} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsoa@6.6.0: + resolution: {integrity: sha512-7FudRojmbEpbSQ3t1pyG5EjV3scF7/X75giQt1q+tnuGjjJppB8BOEmIdCK/G8S5Dqnmpwz5Q3vxluKozpIW9A==} + engines: {node: '>=18.0.0', yarn: '>=1.9.4'} + hasBin: true + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + typedoc@0.27.6: resolution: {integrity: sha512-oBFRoh2Px6jFx366db0lLlihcalq/JzyCVp7Vaq1yphL/tbgx2e+bkpkCgJPunaPvPwoTOXSwasfklWHm7GfAw==} engines: {node: '>= 18'} @@ -1131,9 +1682,22 @@ packages: uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + engines: {node: '>=0.8.0'} + hasBin: true + undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + update-browserslist-db@1.1.0: resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true @@ -1143,6 +1707,18 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + validator@13.12.0: + resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} + engines: {node: '>= 0.10'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -1152,10 +1728,25 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + wrap-ansi@9.0.0: resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} engines: {node: '>=18'} + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -1164,6 +1755,14 @@ packages: engines: {node: '>= 14'} hasBin: true + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -1335,6 +1934,175 @@ snapshots: '@shikijs/types': 1.24.4 '@shikijs/vscode-textmate': 9.3.1 + '@hapi/accept@6.0.3': + dependencies: + '@hapi/boom': 10.0.1 + '@hapi/hoek': 11.0.7 + + '@hapi/ammo@6.0.1': + dependencies: + '@hapi/hoek': 11.0.7 + + '@hapi/b64@6.0.1': + dependencies: + '@hapi/hoek': 11.0.7 + + '@hapi/boom@10.0.1': + dependencies: + '@hapi/hoek': 11.0.7 + + '@hapi/bounce@3.0.2': + dependencies: + '@hapi/boom': 10.0.1 + '@hapi/hoek': 11.0.7 + + '@hapi/bourne@3.0.0': {} + + '@hapi/call@9.0.1': + dependencies: + '@hapi/boom': 10.0.1 + '@hapi/hoek': 11.0.7 + + '@hapi/catbox-memory@6.0.2': + dependencies: + '@hapi/boom': 10.0.1 + '@hapi/hoek': 11.0.7 + + '@hapi/catbox@12.1.1': + dependencies: + '@hapi/boom': 10.0.1 + '@hapi/hoek': 11.0.7 + '@hapi/podium': 5.0.2 + '@hapi/validate': 2.0.1 + + '@hapi/content@6.0.0': + dependencies: + '@hapi/boom': 10.0.1 + + '@hapi/cryptiles@6.0.1': + dependencies: + '@hapi/boom': 10.0.1 + + '@hapi/file@3.0.0': {} + + '@hapi/hapi@21.3.12': + dependencies: + '@hapi/accept': 6.0.3 + '@hapi/ammo': 6.0.1 + '@hapi/boom': 10.0.1 + '@hapi/bounce': 3.0.2 + '@hapi/call': 9.0.1 + '@hapi/catbox': 12.1.1 + '@hapi/catbox-memory': 6.0.2 + '@hapi/heavy': 8.0.1 + '@hapi/hoek': 11.0.7 + '@hapi/mimos': 7.0.1 + '@hapi/podium': 5.0.2 + '@hapi/shot': 6.0.1 + '@hapi/somever': 4.1.1 + '@hapi/statehood': 8.1.1 + '@hapi/subtext': 8.1.0 + '@hapi/teamwork': 6.0.0 + '@hapi/topo': 6.0.2 + '@hapi/validate': 2.0.1 + + '@hapi/heavy@8.0.1': + dependencies: + '@hapi/boom': 10.0.1 + '@hapi/hoek': 11.0.7 + '@hapi/validate': 2.0.1 + + '@hapi/hoek@11.0.7': {} + + '@hapi/hoek@9.3.0': {} + + '@hapi/iron@7.0.1': + dependencies: + '@hapi/b64': 6.0.1 + '@hapi/boom': 10.0.1 + '@hapi/bourne': 3.0.0 + '@hapi/cryptiles': 6.0.1 + '@hapi/hoek': 11.0.7 + + '@hapi/mimos@7.0.1': + dependencies: + '@hapi/hoek': 11.0.7 + mime-db: 1.53.0 + + '@hapi/nigel@5.0.1': + dependencies: + '@hapi/hoek': 11.0.7 + '@hapi/vise': 5.0.1 + + '@hapi/pez@6.1.0': + dependencies: + '@hapi/b64': 6.0.1 + '@hapi/boom': 10.0.1 + '@hapi/content': 6.0.0 + '@hapi/hoek': 11.0.7 + '@hapi/nigel': 5.0.1 + + '@hapi/podium@5.0.2': + dependencies: + '@hapi/hoek': 11.0.7 + '@hapi/teamwork': 6.0.0 + '@hapi/validate': 2.0.1 + + '@hapi/shot@6.0.1': + dependencies: + '@hapi/hoek': 11.0.7 + '@hapi/validate': 2.0.1 + + '@hapi/somever@4.1.1': + dependencies: + '@hapi/bounce': 3.0.2 + '@hapi/hoek': 11.0.7 + + '@hapi/statehood@8.1.1': + dependencies: + '@hapi/boom': 10.0.1 + '@hapi/bounce': 3.0.2 + '@hapi/bourne': 3.0.0 + '@hapi/cryptiles': 6.0.1 + '@hapi/hoek': 11.0.7 + '@hapi/iron': 7.0.1 + '@hapi/validate': 2.0.1 + + '@hapi/subtext@8.1.0': + dependencies: + '@hapi/boom': 10.0.1 + '@hapi/bourne': 3.0.0 + '@hapi/content': 6.0.0 + '@hapi/file': 3.0.0 + '@hapi/hoek': 11.0.7 + '@hapi/pez': 6.1.0 + '@hapi/wreck': 18.1.0 + + '@hapi/teamwork@6.0.0': {} + + '@hapi/topo@5.1.0': + dependencies: + '@hapi/hoek': 9.3.0 + + '@hapi/topo@6.0.2': + dependencies: + '@hapi/hoek': 11.0.7 + + '@hapi/validate@2.0.1': + dependencies: + '@hapi/hoek': 11.0.7 + '@hapi/topo': 6.0.2 + + '@hapi/vise@5.0.1': + dependencies: + '@hapi/hoek': 11.0.7 + + '@hapi/wreck@18.1.0': + dependencies: + '@hapi/boom': 10.0.1 + '@hapi/bourne': 3.0.0 + '@hapi/hoek': 11.0.7 + '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.6': @@ -1348,6 +2116,15 @@ snapshots: '@humanwhocodes/retry@0.4.1': {} + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 @@ -1377,6 +2154,9 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.18.0 + '@pkgjs/parseargs@0.11.0': + optional: true + '@pkgr/core@0.1.1': {} '@shikijs/engine-oniguruma@1.24.4': @@ -1391,18 +2171,137 @@ snapshots: '@shikijs/vscode-textmate@9.3.1': {} + '@sideway/address@4.1.5': + dependencies: + '@hapi/hoek': 9.3.0 + + '@sideway/formula@3.0.1': {} + + '@sideway/pinpoint@2.0.0': {} + + '@tsoa/cli@6.6.0': + dependencies: + '@tsoa/runtime': 6.6.0 + '@types/multer': 1.4.12 + fs-extra: 11.3.0 + glob: 10.4.5 + handlebars: 4.7.8 + merge-anything: 5.1.7 + minimatch: 9.0.5 + ts-deepmerge: 7.0.2 + typescript: 5.7.3 + validator: 13.12.0 + yaml: 2.6.1 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + + '@tsoa/runtime@6.6.0': + dependencies: + '@hapi/boom': 10.0.1 + '@hapi/hapi': 21.3.12 + '@types/koa': 2.15.0 + '@types/multer': 1.4.12 + express: 4.21.2 + reflect-metadata: 0.2.2 + validator: 13.12.0 + transitivePeerDependencies: + - supports-color + + '@types/accepts@1.3.7': + dependencies: + '@types/node': 22.10.7 + + '@types/body-parser@1.19.5': + dependencies: + '@types/connect': 3.4.38 + '@types/node': 22.10.7 + + '@types/connect@3.4.38': + dependencies: + '@types/node': 22.10.7 + + '@types/content-disposition@0.5.8': {} + + '@types/cookies@0.9.0': + dependencies: + '@types/connect': 3.4.38 + '@types/express': 5.0.0 + '@types/keygrip': 1.0.6 + '@types/node': 22.10.7 + '@types/estree@1.0.6': {} + '@types/express-serve-static-core@5.0.5': + dependencies: + '@types/node': 22.10.7 + '@types/qs': 6.9.18 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + + '@types/express@5.0.0': + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 5.0.5 + '@types/qs': 6.9.18 + '@types/serve-static': 1.15.7 + '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 + '@types/http-assert@1.5.6': {} + + '@types/http-errors@2.0.4': {} + + '@types/joi@17.2.3': + dependencies: + joi: 17.13.3 + '@types/json-schema@7.0.15': {} + '@types/keygrip@1.0.6': {} + + '@types/koa-compose@3.2.8': + dependencies: + '@types/koa': 2.15.0 + + '@types/koa@2.15.0': + dependencies: + '@types/accepts': 1.3.7 + '@types/content-disposition': 0.5.8 + '@types/cookies': 0.9.0 + '@types/http-assert': 1.5.6 + '@types/http-errors': 2.0.4 + '@types/keygrip': 1.0.6 + '@types/koa-compose': 3.2.8 + '@types/node': 22.10.7 + + '@types/mime@1.3.5': {} + + '@types/multer@1.4.12': + dependencies: + '@types/express': 5.0.0 + '@types/node@22.10.7': dependencies: undici-types: 6.20.0 + '@types/qs@6.9.18': {} + + '@types/range-parser@1.2.7': {} + + '@types/send@0.17.4': + dependencies: + '@types/mime': 1.3.5 + '@types/node': 22.10.7 + + '@types/serve-static@1.15.7': + dependencies: + '@types/http-errors': 2.0.4 + '@types/node': 22.10.7 + '@types/send': 0.17.4 + '@types/unist@3.0.3': {} '@typescript-eslint/eslint-plugin@8.20.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0)(typescript@5.7.3))(eslint@9.18.0)(typescript@5.7.3)': @@ -1482,6 +2381,11 @@ snapshots: '@typescript-eslint/types': 8.20.0 eslint-visitor-keys: 4.2.0 + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 @@ -1499,6 +2403,8 @@ snapshots: dependencies: environment: 1.1.0 + ansi-regex@5.0.1: {} + ansi-regex@6.1.0: {} ansi-styles@3.2.1: @@ -1517,8 +2423,27 @@ snapshots: argparse@2.0.1: {} + array-flatten@1.1.1: {} + balanced-match@1.0.2: {} + body-parser@1.20.3: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -1541,6 +2466,18 @@ snapshots: builtin-modules@3.3.0: {} + bytes@3.1.2: {} + + call-bind-apply-helpers@1.0.1: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bound@1.0.3: + dependencies: + call-bind-apply-helpers: 1.0.1 + get-intrinsic: 1.2.7 + caller-callsite@2.0.0: dependencies: callsites: 2.0.0 @@ -1577,6 +2514,12 @@ snapshots: slice-ansi: 5.0.0 string-width: 7.2.0 + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -1595,8 +2538,18 @@ snapshots: concat-map@0.0.1: {} + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + convert-source-map@2.0.0: {} + cookie-signature@1.0.6: {} + + cookie@0.7.1: {} + cosmiconfig@5.2.1: dependencies: import-fresh: 2.0.0 @@ -1610,22 +2563,48 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + debug@2.6.9: + dependencies: + ms: 2.0.0 + debug@4.4.0: dependencies: ms: 2.1.3 deep-is@0.1.4: {} + depd@2.0.0: {} + + destroy@1.2.0: {} + detect-indent@7.0.1: {} detect-newline@2.1.0: {} detect-newline@4.0.1: {} + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + eastasianwidth@0.2.0: {} + + ee-first@1.1.1: {} + electron-to-chromium@1.5.4: {} emoji-regex@10.4.0: {} + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + encodeurl@1.0.2: {} + + encodeurl@2.0.0: {} + entities@4.5.0: {} environment@1.1.0: {} @@ -1634,8 +2613,18 @@ snapshots: dependencies: is-arrayish: 0.2.1 + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + escalade@3.1.2: {} + escape-html@1.0.3: {} + escape-string-regexp@1.0.5: {} escape-string-regexp@4.0.0: {} @@ -1722,6 +2711,8 @@ snapshots: esutils@2.0.3: {} + etag@1.8.1: {} + eventemitter3@5.0.1: {} execa@8.0.1: @@ -1736,6 +2727,42 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 + express@4.21.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.12 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -1768,6 +2795,18 @@ snapshots: dependencies: to-regex-range: 5.0.1 + finalhandler@1.3.1: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + find-line-column@0.5.2: {} find-root@1.1.0: {} @@ -1784,12 +2823,47 @@ snapshots: flatted@3.3.2: {} + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + forwarded@0.2.0: {} + + fresh@0.5.2: {} + + fs-extra@11.3.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + function-bind@1.1.2: {} gensync@1.0.0-beta.2: {} + get-caller-file@2.0.5: {} + get-east-asian-width@1.3.0: {} + get-intrinsic@1.2.7: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + get-stdin@9.0.0: {} get-stream@8.0.1: {} @@ -1804,24 +2878,60 @@ snapshots: dependencies: is-glob: 4.0.3 + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + globals@11.12.0: {} globals@14.0.0: {} + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + graphemer@1.4.0: {} + handlebars@4.7.8: + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.3 + has-flag@3.0.0: {} has-flag@4.0.0: {} + has-symbols@1.1.0: {} + hasown@2.0.2: dependencies: function-bind: 1.1.2 + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + human-signals@5.0.0: {} husky@9.1.7: {} + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + ignore@5.3.2: {} import-fresh@2.0.0: @@ -1869,6 +2979,10 @@ snapshots: imurmurhash@0.1.4: {} + inherits@2.0.4: {} + + ipaddr.js@1.9.1: {} + is-arrayish@0.2.1: {} is-builtin-module@3.2.1: @@ -1883,6 +2997,8 @@ snapshots: is-extglob@2.1.1: {} + is-fullwidth-code-point@3.0.0: {} + is-fullwidth-code-point@4.0.0: {} is-fullwidth-code-point@5.0.0: @@ -1899,8 +3015,24 @@ snapshots: is-stream@3.0.0: {} + is-what@4.1.16: {} + isexe@2.0.0: {} + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + joi@17.13.3: + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.5 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + js-tokens@4.0.0: {} js-yaml@3.14.1: @@ -1924,6 +3056,12 @@ snapshots: json5@2.2.3: {} + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -1977,6 +3115,8 @@ snapshots: strip-ansi: 7.1.0 wrap-ansi: 9.0.0 + lru-cache@10.4.3: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -1992,17 +3132,39 @@ snapshots: punycode.js: 2.3.1 uc.micro: 2.1.0 + math-intrinsics@1.1.0: {} + mdurl@2.0.0: {} + media-typer@0.3.0: {} + + merge-anything@5.1.7: + dependencies: + is-what: 4.1.16 + + merge-descriptors@1.0.3: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} + methods@1.1.2: {} + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 + mime-db@1.52.0: {} + + mime-db@1.53.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + mimic-fn@4.0.0: {} mimic-function@5.0.1: {} @@ -2015,16 +3177,32 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minimist@1.2.8: {} + + minipass@7.1.2: {} + + ms@2.0.0: {} + ms@2.1.3: {} natural-compare@1.4.0: {} + negotiator@0.6.3: {} + + neo-async@2.6.2: {} + node-releases@2.0.18: {} npm-run-path@5.3.0: dependencies: path-key: 4.0.0 + object-inspect@1.13.3: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + onetime@6.0.0: dependencies: mimic-fn: 4.0.0 @@ -2050,6 +3228,8 @@ snapshots: dependencies: p-limit: 3.1.0 + package-json-from-dist@1.0.1: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -2059,6 +3239,8 @@ snapshots: error-ex: 1.3.2 json-parse-better-errors: 1.0.2 + parseurl@1.3.3: {} + path-exists@4.0.0: {} path-key@3.1.1: {} @@ -2067,6 +3249,13 @@ snapshots: path-parse@1.0.7: {} + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-to-regexp@0.1.12: {} + picocolors@1.0.1: {} picomatch@2.3.1: {} @@ -2105,12 +3294,34 @@ snapshots: prettier@3.4.2: {} + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + punycode.js@2.3.1: {} punycode@2.3.1: {} + qs@6.13.0: + dependencies: + side-channel: 1.1.0 + queue-microtask@1.2.3: {} + range-parser@1.2.1: {} + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + reflect-metadata@0.2.2: {} + + require-directory@2.1.1: {} + resolve-from@3.0.0: {} resolve-from@4.0.0: {} @@ -2134,16 +3345,77 @@ snapshots: dependencies: queue-microtask: 1.2.3 + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + semver@6.3.1: {} semver@7.6.3: {} + send@0.19.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + serve-static@1.16.2: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.0 + transitivePeerDependencies: + - supports-color + + setprototypeof@1.2.0: {} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 shebang-regex@3.0.0: {} + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.3 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.3 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.3 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.3 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + signal-exit@4.1.0: {} slice-ansi@5.0.0: @@ -2171,16 +3443,36 @@ snapshots: sortpack@2.4.0: {} + source-map@0.6.1: {} + sprintf-js@1.0.3: {} + statuses@2.0.1: {} + string-argv@0.3.2: {} + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + string-width@7.2.0: dependencies: emoji-regex: 10.4.0 get-east-asian-width: 1.3.0 strip-ansi: 7.1.0 + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + strip-ansi@7.1.0: dependencies: ansi-regex: 6.1.0 @@ -2215,16 +3507,32 @@ snapshots: dependencies: is-number: 7.0.0 + toidentifier@1.0.1: {} + ts-api-utils@2.0.0(typescript@5.7.3): dependencies: typescript: 5.7.3 + ts-deepmerge@7.0.2: {} + tslib@2.8.1: {} + tsoa@6.6.0: + dependencies: + '@tsoa/cli': 6.6.0 + '@tsoa/runtime': 6.6.0 + transitivePeerDependencies: + - supports-color + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + typedoc@0.27.6(typescript@5.7.3): dependencies: '@gerrit0/mini-shiki': 1.24.4 @@ -2250,8 +3558,15 @@ snapshots: uc.micro@2.1.0: {} + uglify-js@3.19.3: + optional: true + undici-types@6.20.0: {} + universalify@2.0.1: {} + + unpipe@1.0.0: {} + update-browserslist-db@1.1.0(browserslist@4.23.3): dependencies: browserslist: 4.23.3 @@ -2262,20 +3577,54 @@ snapshots: dependencies: punycode: 2.3.1 + utils-merge@1.0.1: {} + + validator@13.12.0: {} + + vary@1.1.2: {} + which@2.0.2: dependencies: isexe: 2.0.0 word-wrap@1.2.5: {} + wordwrap@1.0.0: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + wrap-ansi@9.0.0: dependencies: ansi-styles: 6.2.1 string-width: 7.2.0 strip-ansi: 7.1.0 + y18n@5.0.8: {} + yallist@3.1.1: {} yaml@2.6.1: {} + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + yocto-queue@0.1.0: {} diff --git a/src/http.ts b/src/http.ts index 81ea6d8..9996207 100644 --- a/src/http.ts +++ b/src/http.ts @@ -108,7 +108,36 @@ import { SearchResponse } from "./types/SearchResponse"; import { SiteResponse } from "./types/SiteResponse"; import { TransferCommunity } from "./types/TransferCommunity"; import { VerifyEmail } from "./types/VerifyEmail"; -import { UploadImage, VERSION } from "./other_types"; +import { + GetCommentI, + GetCommentsI, + GetCommunityI, + GetCommunityPendingFollowsCountI, + GetModlogI, + GetPersonDetailsI, + GetPostI, + GetPostsI, + GetRandomCommunityI, + GetRegistrationApplicationI, + GetReportCountI, + GetSiteMetadataI, + ListCommentLikesI, + ListCommunitiesI, + ListCommunityPendingFollowsI, + ListCustomEmojisI, + ListInboxI, + ListMediaI, + ListPersonContentI, + ListPersonSavedI, + ListPostLikesI, + ListRegistrationApplicationsI, + ListReportsI, + ListTaglinesI, + ResolveObjectI, + SearchI, + UploadImage, + VERSION, +} from "./other_types"; import { HideCommunity } from "./types/HideCommunity"; import { GenerateTotpSecretResponse } from "./types/GenerateTotpSecretResponse"; import { UpdateTotp } from "./types/UpdateTotp"; @@ -138,7 +167,6 @@ import { GetCommunityPendingFollowsCount } from "./types/GetCommunityPendingFoll import { GetCommunityPendingFollowsCountResponse } from "./types/GetCommunityPendingFollowsCountResponse"; import { ListCommunityPendingFollowsResponse } from "./types/ListCommunityPendingFollowsResponse"; import { ListCommunityPendingFollows } from "./types/ListCommunityPendingFollows"; -import { CommunityId } from "./types/CommunityId"; import { ListReports } from "./types/ListReports"; import { ListReportsResponse } from "./types/ListReportsResponse"; import { MyUserInfo } from "./types/MyUserInfo"; @@ -155,6 +183,18 @@ import { ListInboxResponse } from "./types/ListInboxResponse"; import { ListInbox } from "./types/ListInbox"; import { MarkPersonCommentMentionAsRead } from "./types/MarkPersonCommentMentionAsRead"; import { MarkPersonPostMentionAsRead } from "./types/MarkPersonPostMentionAsRead"; +import { + Body, + Controller, + Get, + Post, + Put, + Queries, + Route, + Inject, + UploadedFile, + Delete, +} from "tsoa"; enum HttpType { Get = "GET", @@ -168,7 +208,8 @@ type RequestOptions = Pick; /** * Helps build lemmy HTTP requests. */ -export class LemmyHttp { +@Route("/") +export class LemmyHttp extends Controller { #apiUrl: string; #headers: { [key: string]: string } = {}; #fetchFunction: typeof fetch = fetch.bind(globalThis); @@ -185,6 +226,7 @@ export class LemmyHttp { headers?: { [key: string]: string }; }, ) { + super(); this.#apiUrl = `${baseUrl.replace(/\/+$/, "")}/api/${VERSION}`; if (options?.headers) { @@ -197,10 +239,9 @@ export class LemmyHttp { /** * Gets the site, and your user data. - * - * `HTTP.GET /site` */ - getSite(options?: RequestOptions) { + @Get("/site") + getSite(@Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Get, "/site", @@ -211,10 +252,9 @@ export class LemmyHttp { /** * Create your site. - * - * `HTTP.POST /site` */ - createSite(form: CreateSite, options?: RequestOptions) { + @Post("/site") + createSite(@Body() form: CreateSite, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/site", @@ -225,10 +265,9 @@ export class LemmyHttp { /** * Edit your site. - * - * `HTTP.PUT /site` */ - editSite(form: EditSite, options?: RequestOptions) { + @Put("/site") + editSite(@Body() form: EditSite, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Put, "/site", @@ -239,10 +278,9 @@ export class LemmyHttp { /** * Leave the Site admins. - * - * `HTTP.POST /admin/leave` */ - leaveAdmin(options?: RequestOptions) { + @Post("/admin/leave") + leaveAdmin(@Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/admin/leave", @@ -255,10 +293,9 @@ export class LemmyHttp { * Generate a TOTP / two-factor secret. * * Afterwards you need to call `/account/auth/totp/update` with a valid token to enable it. - * - * `HTTP.POST /account/auth/totp/generate` */ - generateTotpSecret(options?: RequestOptions) { + @Post("/account/auth/totp/generate") + generateTotpSecret(@Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/account/auth/totp/generate", @@ -269,10 +306,9 @@ export class LemmyHttp { /** * Get data of current user. - * - * `HTTP.GET /account` */ - getMyUser(options?: RequestOptions) { + @Get("/account") + getMyUser(@Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Get, "/account", @@ -284,10 +320,9 @@ export class LemmyHttp { /** * Export a backup of your user settings, including your saved content, * followed communities, and blocks. - * - * `HTTP.GET /account/settings/export` */ - exportSettings(options?: RequestOptions) { + @Get("/account/settings/export") + exportSettings(@Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Get, "/account/settings/export", @@ -298,10 +333,9 @@ export class LemmyHttp { /** * Import a backup of your user settings. - * - * `HTTP.POST /account/settings/import` */ - importSettings(form: any, options?: RequestOptions) { + @Post("/account/settings/import") + importSettings(@Body() form: any, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/account/settings/import", @@ -312,10 +346,9 @@ export class LemmyHttp { /** * List login tokens for your user - * - * `HTTP.GET /account/list_logins` */ - listLogins(options?: RequestOptions) { + @Get("/account/list_logins") + listLogins(@Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Get, "/account/list_logins", @@ -326,10 +359,9 @@ export class LemmyHttp { /** * Returns an error message if your auth token is invalid - * - * `HTTP.GET /account/validate_auth` */ - validateAuth(options?: RequestOptions) { + @Get("/account/validate_auth") + validateAuth(@Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Get, "/account/validate_auth", @@ -340,10 +372,12 @@ export class LemmyHttp { /** * List all the media for your user - * - * `HTTP.GET /account/list_media` */ - listMedia(form: ListMedia = {}, options?: RequestOptions) { + @Get("/account/list_media") + listMedia( + @Queries() form: ListMediaI = {}, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Get, "/account/list_media", @@ -354,10 +388,12 @@ export class LemmyHttp { /** * List all the media known to your instance. - * - * `HTTP.GET /admin/list_all_media` */ - listAllMedia(form: ListMedia = {}, options?: RequestOptions) { + @Get("/admin/list_all_media") + listAllMedia( + @Queries() form: ListMediaI = {}, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Get, "/admin/list_all_media", @@ -372,10 +408,10 @@ export class LemmyHttp { * To enable, you need to first call `/account/auth/totp/generate` and then pass a valid token to this. * * Disabling is only possible if 2FA was previously enabled. Again it is necessary to pass a valid token. - * - * `HTTP.POST /account/auth/totp/update` */ - updateTotp(form: UpdateTotp, options?: RequestOptions) { + + @Post("/account/auth/totp/update") + updateTotp(@Body() form: UpdateTotp, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/account/auth/totp/update", @@ -386,10 +422,12 @@ export class LemmyHttp { /** * Get the modlog. - * - * `HTTP.GET /modlog` */ - getModlog(form: GetModlog = {}, options?: RequestOptions) { + @Get("/modlog") + getModlog( + @Queries() form: GetModlogI = {}, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Get, "/modlog", @@ -400,10 +438,9 @@ export class LemmyHttp { /** * Search lemmy. - * - * `HTTP.GET /search` */ - search(form: Search, options?: RequestOptions) { + @Get("/search") + search(@Queries() form: SearchI, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Get, "/search", @@ -414,10 +451,12 @@ export class LemmyHttp { /** * Fetch a non-local / federated object. - * - * `HTTP.GET /resolve_object` */ - resolveObject(form: ResolveObject, options?: RequestOptions) { + @Get("/resolve_object") + resolveObject( + @Queries() form: ResolveObjectI, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Get, "/resolve_object", @@ -428,10 +467,12 @@ export class LemmyHttp { /** * Create a new community. - * - * `HTTP.POST /community` */ - createCommunity(form: CreateCommunity, options?: RequestOptions) { + @Post("/community") + createCommunity( + @Body() form: CreateCommunity, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/community", @@ -442,10 +483,12 @@ export class LemmyHttp { /** * Get / fetch a community. - * - * `HTTP.GET /community` */ - getCommunity(form: GetCommunity = {}, options?: RequestOptions) { + @Get("/community") + getCommunity( + @Queries() form: GetCommunityI = {}, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Get, "/community", @@ -456,10 +499,12 @@ export class LemmyHttp { /** * Edit a community. - * - * `HTTP.PUT /community` */ - editCommunity(form: EditCommunity, options?: RequestOptions) { + @Put("/community") + editCommunity( + @Body() form: EditCommunity, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Put, "/community", @@ -470,10 +515,12 @@ export class LemmyHttp { /** * List communities, with various filters. - * - * `HTTP.GET /community/list` */ - listCommunities(form: ListCommunities = {}, options?: RequestOptions) { + @Get("/community/list") + listCommunities( + @Queries() form: ListCommunitiesI = {}, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Get, "/community/list", @@ -484,10 +531,12 @@ export class LemmyHttp { /** * Follow / subscribe to a community. - * - * `HTTP.POST /community/follow` */ - followCommunity(form: FollowCommunity, options?: RequestOptions) { + @Post("/community/follow") + followCommunity( + @Body() form: FollowCommunity, + @Inject() @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/community/follow", @@ -496,20 +545,27 @@ export class LemmyHttp { ); } + /** + * Get a community's pending follows count. + */ + @Get("/community/pending_follows/count") getCommunityPendingFollowsCount( - community_id: CommunityId, - options?: RequestOptions, + @Queries() form: GetCommunityPendingFollowsCountI, + @Inject() options?: RequestOptions, ) { - const form: GetCommunityPendingFollowsCount = { community_id }; return this.#wrapper< GetCommunityPendingFollowsCount, GetCommunityPendingFollowsCountResponse >(HttpType.Get, "/community/pending_follows/count", form, options); } + /** + * Get a community's pending followers. + */ + @Get("/community/pending_follows/list") listCommunityPendingFollows( - form: ListCommunityPendingFollows, - options?: RequestOptions, + @Queries() form: ListCommunityPendingFollowsI, + @Inject() options?: RequestOptions, ) { return this.#wrapper< ListCommunityPendingFollows, @@ -517,9 +573,13 @@ export class LemmyHttp { >(HttpType.Get, "/community/pending_follows/list", form, options); } + /** + * Approve a community pending follow request. + */ + @Post("/community/pending_follows/approve") approveCommunityPendingFollow( - form: ApproveCommunityPendingFollower, - options?: RequestOptions, + @Body() form: ApproveCommunityPendingFollower, + @Inject() options?: RequestOptions, ) { return this.#wrapper( HttpType.Post, @@ -531,10 +591,12 @@ export class LemmyHttp { /** * Block a community. - * - * `HTTP.POST /account/block/community` */ - blockCommunity(form: BlockCommunity, options?: RequestOptions) { + @Post("/account/block/community") + blockCommunity( + @Body() form: BlockCommunity, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/account/block/community", @@ -545,10 +607,12 @@ export class LemmyHttp { /** * Delete a community. - * - * `HTTP.POST /community/delete` */ - deleteCommunity(form: DeleteCommunity, options?: RequestOptions) { + @Post("/community/delete") + deleteCommunity( + @Body() form: DeleteCommunity, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/community/delete", @@ -559,10 +623,12 @@ export class LemmyHttp { /** * Hide a community from public / "All" view. Admins only. - * - * `HTTP.PUT /community/hide` */ - hideCommunity(form: HideCommunity, options?: RequestOptions) { + @Put("/community/hide") + hideCommunity( + @Body() form: HideCommunity, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Put, "/community/hide", @@ -573,10 +639,12 @@ export class LemmyHttp { /** * A moderator remove for a community. - * - * `HTTP.POST /community/remove` */ - removeCommunity(form: RemoveCommunity, options?: RequestOptions) { + @Post("/community/remove") + removeCommunity( + @Body() form: RemoveCommunity, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/community/remove", @@ -587,10 +655,12 @@ export class LemmyHttp { /** * Transfer your community to an existing moderator. - * - * `HTTP.POST /community/transfer` */ - transferCommunity(form: TransferCommunity, options?: RequestOptions) { + @Post("/community/transfer") + transferCommunity( + @Body() form: TransferCommunity, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/community/transfer", @@ -601,10 +671,12 @@ export class LemmyHttp { /** * Ban a user from a community. - * - * `HTTP.POST /community/ban_user` */ - banFromCommunity(form: BanFromCommunity, options?: RequestOptions) { + @Post("/community/ban_user") + banFromCommunity( + @Body() form: BanFromCommunity, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/community/ban_user", @@ -615,10 +687,12 @@ export class LemmyHttp { /** * Add a moderator to your community. - * - * `HTTP.POST /community/mod` */ - addModToCommunity(form: AddModToCommunity, options?: RequestOptions) { + @Post("/community/mod") + addModToCommunity( + @Body() form: AddModToCommunity, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/community/mod", @@ -629,10 +703,12 @@ export class LemmyHttp { /** * Get a random community. - * - * `HTTP.GET /community/random` */ - getRandomCommunity(form: GetRandomCommunity, options?: RequestOptions) { + @Get("/community/random") + getRandomCommunity( + @Queries() form: GetRandomCommunityI, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Get, "/community/random", @@ -643,10 +719,9 @@ export class LemmyHttp { /** * Create a post. - * - * `HTTP.POST /post` */ - createPost(form: CreatePost, options?: RequestOptions) { + @Post("/post") + createPost(@Body() form: CreatePost, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/post", @@ -657,10 +732,9 @@ export class LemmyHttp { /** * Get / fetch a post. - * - * `HTTP.GET /post` */ - getPost(form: GetPost = {}, options?: RequestOptions) { + @Get("/post") + getPost(@Queries() form: GetPostI = {}, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Get, "/post", @@ -671,10 +745,9 @@ export class LemmyHttp { /** * Edit a post. - * - * `HTTP.PUT /post` */ - editPost(form: EditPost, options?: RequestOptions) { + @Put("/post") + editPost(@Body() form: EditPost, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Put, "/post", @@ -685,10 +758,9 @@ export class LemmyHttp { /** * Delete a post. - * - * `HTTP.POST /post/delete` */ - deletePost(form: DeletePost, options?: RequestOptions) { + @Post("/post/delete") + deletePost(@Body() form: DeletePost, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/post/delete", @@ -699,10 +771,9 @@ export class LemmyHttp { /** * A moderator remove for a post. - * - * `HTTP.POST /post/remove` */ - removePost(form: RemovePost, options?: RequestOptions) { + @Post("/post/remove") + removePost(@Body() form: RemovePost, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/post/remove", @@ -713,10 +784,12 @@ export class LemmyHttp { /** * Mark a post as read. - * - * `HTTP.POST /post/mark_as_read` */ - markPostAsRead(form: MarkPostAsRead, options?: RequestOptions) { + @Post("/post/mark_as_read") + markPostAsRead( + @Body() form: MarkPostAsRead, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/post/mark_as_read", @@ -727,10 +800,12 @@ export class LemmyHttp { /** * Mark multiple posts as read. - * - * `HTTP.POST /post/mark_as_read/many` */ - markManyPostAsRead(form: MarkManyPostsAsRead, options?: RequestOptions) { + @Post("/post/mark_as_read/many") + markManyPostAsRead( + @Body() form: MarkManyPostsAsRead, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/post/mark_as_read/many", @@ -741,10 +816,9 @@ export class LemmyHttp { /** * Hide a post from list views. - * - * `HTTP.POST /post/hide` */ - hidePost(form: HidePost, options?: RequestOptions) { + @Post("/post/hide") + hidePost(@Body() form: HidePost, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/post/hide", @@ -755,10 +829,9 @@ export class LemmyHttp { /** * A moderator can lock a post ( IE disable new comments ). - * - * `HTTP.POST /post/lock` */ - lockPost(form: LockPost, options?: RequestOptions) { + @Post("/post/lock") + lockPost(@Body() form: LockPost, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/post/lock", @@ -769,10 +842,9 @@ export class LemmyHttp { /** * A moderator can feature a community post ( IE stick it to the top of a community ). - * - * `HTTP.POST /post/feature` */ - featurePost(form: FeaturePost, options?: RequestOptions) { + @Post("/post/feature") + featurePost(@Body() form: FeaturePost, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/post/feature", @@ -783,10 +855,12 @@ export class LemmyHttp { /** * Get / fetch posts, with various filters. - * - * `HTTP.GET /post/list` */ - getPosts(form: GetPosts = {}, options?: RequestOptions) { + @Get("/post/list") + getPosts( + @Queries() form: GetPostsI = {}, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Get, "/post/list", @@ -797,10 +871,9 @@ export class LemmyHttp { /** * Like / vote on a post. - * - * `HTTP.POST /post/like` */ - likePost(form: CreatePostLike, options?: RequestOptions) { + @Post("/post/like") + likePost(@Body() form: CreatePostLike, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/post/like", @@ -811,10 +884,12 @@ export class LemmyHttp { /** * List a post's likes. Admin-only. - * - * `HTTP.GET /post/like/list` */ - listPostLikes(form: ListPostLikes, options?: RequestOptions) { + @Get("/post/like/list") + listPostLikes( + @Queries() form: ListPostLikesI, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Get, "/post/like/list", @@ -825,10 +900,9 @@ export class LemmyHttp { /** * Save a post. - * - * `HTTP.PUT /post/save` */ - savePost(form: SavePost, options?: RequestOptions) { + @Put("/post/save") + savePost(@Body() form: SavePost, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Put, "/post/save", @@ -839,10 +913,12 @@ export class LemmyHttp { /** * Report a post. - * - * `HTTP.POST /post/report` */ - createPostReport(form: CreatePostReport, options?: RequestOptions) { + @Post("/post/report") + createPostReport( + @Body() form: CreatePostReport, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/post/report", @@ -853,10 +929,12 @@ export class LemmyHttp { /** * Resolve a post report. Only a mod can do this. - * - * `HTTP.PUT /post/report/resolve` */ - resolvePostReport(form: ResolvePostReport, options?: RequestOptions) { + @Put("/post/report/resolve") + resolvePostReport( + @Body() form: ResolvePostReport, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Put, "/post/report/resolve", @@ -867,10 +945,12 @@ export class LemmyHttp { /** * Fetch metadata for any given site. - * - * `HTTP.GET /post/site_metadata` */ - getSiteMetadata(form: GetSiteMetadata, options?: RequestOptions) { + @Get("/post/site_metadata") + getSiteMetadata( + @Queries() form: GetSiteMetadataI, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Get, "/post/site_metadata", @@ -881,10 +961,12 @@ export class LemmyHttp { /** * Create a comment. - * - * `HTTP.POST /comment` */ - createComment(form: CreateComment, options?: RequestOptions) { + @Post("/comment") + createComment( + @Body() form: CreateComment, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/comment", @@ -895,10 +977,9 @@ export class LemmyHttp { /** * Edit a comment. - * - * `HTTP.PUT /comment` */ - editComment(form: EditComment, options?: RequestOptions) { + @Put("/comment") + editComment(@Body() form: EditComment, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Put, "/comment", @@ -909,10 +990,12 @@ export class LemmyHttp { /** * Delete a comment. - * - * `HTTP.POST /comment/delete` */ - deleteComment(form: DeleteComment, options?: RequestOptions) { + @Post("/comment/delete") + deleteComment( + @Body() form: DeleteComment, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/comment/delete", @@ -923,10 +1006,12 @@ export class LemmyHttp { /** * A moderator remove for a comment. - * - * `HTTP.POST /comment/remove` */ - removeComment(form: RemoveComment, options?: RequestOptions) { + @Post("/comment/remove") + removeComment( + @Body() form: RemoveComment, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/comment/remove", @@ -937,12 +1022,11 @@ export class LemmyHttp { /** * Mark a comment as read. - * - * `HTTP.POST /comment/mark_as_read` */ + @Post("/comment/mark_as_read") markCommentReplyAsRead( - form: MarkCommentReplyAsRead, - options?: RequestOptions, + @Body() form: MarkCommentReplyAsRead, + @Inject() options?: RequestOptions, ) { return this.#wrapper( HttpType.Post, @@ -954,10 +1038,12 @@ export class LemmyHttp { /** * Like / vote on a comment. - * - * `HTTP.POST /comment/like` */ - likeComment(form: CreateCommentLike, options?: RequestOptions) { + @Post("/comment/like") + likeComment( + @Body() form: CreateCommentLike, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/comment/like", @@ -968,10 +1054,12 @@ export class LemmyHttp { /** * List a comment's likes. Admin-only. - * - * `HTTP.GET /comment/like/list` */ - listCommentLikes(form: ListCommentLikes, options?: RequestOptions) { + @Get("/comment/like/list") + listCommentLikes( + @Queries() form: ListCommentLikesI, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Get, "/comment/like/list", @@ -982,10 +1070,9 @@ export class LemmyHttp { /** * Save a comment. - * - * `HTTP.PUT /comment/save` */ - saveComment(form: SaveComment, options?: RequestOptions) { + @Put("/comment/save") + saveComment(@Body() form: SaveComment, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Put, "/comment/save", @@ -996,10 +1083,12 @@ export class LemmyHttp { /** * Distinguishes a comment (speak as moderator) - * - * `HTTP.POST /comment/distinguish` */ - distinguishComment(form: DistinguishComment, options?: RequestOptions) { + @Post("/comment/distinguish") + distinguishComment( + @Body() form: DistinguishComment, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/comment/distinguish", @@ -1010,10 +1099,12 @@ export class LemmyHttp { /** * Get / fetch comments. - * - * `HTTP.GET /comment/list` */ - getComments(form: GetComments = {}, options?: RequestOptions) { + @Get("/comment/list") + getComments( + @Queries() form: GetCommentsI = {}, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Get, "/comment/list", @@ -1024,10 +1115,9 @@ export class LemmyHttp { /** * Get / fetch comment. - * - * `HTTP.GET /comment` */ - getComment(form: GetComment, options?: RequestOptions) { + @Get("/comment") + getComment(@Queries() form: GetCommentI, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Get, "/comment", @@ -1038,10 +1128,12 @@ export class LemmyHttp { /** * Report a comment. - * - * `HTTP.POST /comment/report` */ - createCommentReport(form: CreateCommentReport, options?: RequestOptions) { + @Post("/comment/report") + createCommentReport( + @Body() form: CreateCommentReport, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/comment/report", @@ -1052,10 +1144,12 @@ export class LemmyHttp { /** * Resolve a comment report. Only a mod can do this. - * - * `HTTP.PUT /comment/report/resolve` */ - resolveCommentReport(form: ResolveCommentReport, options?: RequestOptions) { + @Put("/comment/report/resolve") + resolveCommentReport( + @Body() form: ResolveCommentReport, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Put, "/comment/report/resolve", @@ -1066,10 +1160,12 @@ export class LemmyHttp { /** * Create a private message. - * - * `HTTP.POST /private_message` */ - createPrivateMessage(form: CreatePrivateMessage, options?: RequestOptions) { + @Post("/private_message") + createPrivateMessage( + @Body() form: CreatePrivateMessage, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/private_message", @@ -1080,10 +1176,12 @@ export class LemmyHttp { /** * Edit a private message. - * - * `HTTP.PUT /private_message` */ - editPrivateMessage(form: EditPrivateMessage, options?: RequestOptions) { + @Put("/private_message") + editPrivateMessage( + @Body() form: EditPrivateMessage, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Put, "/private_message", @@ -1094,10 +1192,12 @@ export class LemmyHttp { /** * Delete a private message. - * - * `HTTP.POST /private_message/delete` */ - deletePrivateMessage(form: DeletePrivateMessage, options?: RequestOptions) { + @Post("/private_message/delete") + deletePrivateMessage( + @Body() form: DeletePrivateMessage, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/private_message/delete", @@ -1108,12 +1208,11 @@ export class LemmyHttp { /** * Mark a private message as read. - * - * `HTTP.POST /private_message/mark_as_read` */ + @Post("/private_message/mark_as_read") markPrivateMessageAsRead( - form: MarkPrivateMessageAsRead, - options?: RequestOptions, + @Body() form: MarkPrivateMessageAsRead, + @Inject() options?: RequestOptions, ) { return this.#wrapper( HttpType.Post, @@ -1125,12 +1224,11 @@ export class LemmyHttp { /** * Create a report for a private message. - * - * `HTTP.POST /private_message/report` */ + @Post("/private_message/report") createPrivateMessageReport( - form: CreatePrivateMessageReport, - options?: RequestOptions, + @Body() form: CreatePrivateMessageReport, + @Inject() options?: RequestOptions, ) { return this.#wrapper< CreatePrivateMessageReport, @@ -1140,12 +1238,11 @@ export class LemmyHttp { /** * Resolve a report for a private message. - * - * `HTTP.PUT /private_message/report/resolve` */ + @Put("/private_message/report/resolve") resolvePrivateMessageReport( - form: ResolvePrivateMessageReport, - options?: RequestOptions, + @Body() form: ResolvePrivateMessageReport, + @Inject() options?: RequestOptions, ) { return this.#wrapper< ResolvePrivateMessageReport, @@ -1155,10 +1252,9 @@ export class LemmyHttp { /** * Register a new user. - * - * `HTTP.POST /account/auth/register` */ - register(form: Register, options?: RequestOptions) { + @Post("/account/auth/register") + register(@Body() form: Register, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/account/auth/register", @@ -1169,10 +1265,9 @@ export class LemmyHttp { /** * Log into lemmy. - * - * `HTTP.POST /account/auth/login` */ - login(form: Login, options?: RequestOptions) { + @Post("/account/auth/login") + login(@Body() form: Login, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/account/auth/login", @@ -1183,10 +1278,9 @@ export class LemmyHttp { /** * Invalidate the currently used auth token. - * - * `HTTP.POST /account/auth/logout` */ - logout(options?: RequestOptions) { + @Post("/account/auth/logout") + logout(@Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/account/auth/logout", @@ -1197,10 +1291,12 @@ export class LemmyHttp { /** * Get the details for a person. - * - * `HTTP.GET /person` */ - getPersonDetails(form: GetPersonDetails = {}, options?: RequestOptions) { + @Get("/person") + getPersonDetails( + @Queries() form: GetPersonDetailsI = {}, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Get, "/person", @@ -1211,10 +1307,12 @@ export class LemmyHttp { /** * List the content for a person. - * - * `HTTP.GET /person/content` */ - listPersonContent(form: ListPersonContent = {}, options?: RequestOptions) { + @Get("/person/content") + listPersonContent( + @Queries() form: ListPersonContentI = {}, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Get, "/person/content", @@ -1225,12 +1323,11 @@ export class LemmyHttp { /** * Mark a person mention as read. - * - * `HTTP.POST /account/mention/comment/mark_as_read` */ + @Post("/account/mention/comment/mark_as_read") markCommentMentionAsRead( - form: MarkPersonCommentMentionAsRead, - options?: RequestOptions, + @Body() form: MarkPersonCommentMentionAsRead, + @Inject() options?: RequestOptions, ) { return this.#wrapper( HttpType.Post, @@ -1242,12 +1339,11 @@ export class LemmyHttp { /** * Mark a person post body mention as read. - * - * `HTTP.POST /account/mention/post/mark_as_read` */ + @Post("/account/mention/post/mark_as_read") markPostMentionAsRead( - form: MarkPersonPostMentionAsRead, - options?: RequestOptions, + @Body() form: MarkPersonPostMentionAsRead, + @Inject() options?: RequestOptions, ) { return this.#wrapper( HttpType.Post, @@ -1259,10 +1355,9 @@ export class LemmyHttp { /** * Ban a person from your site. - * - * `HTTP.POST /admin/ban` */ - banPerson(form: BanPerson, options?: RequestOptions) { + @Post("/admin/ban") + banPerson(@Body() form: BanPerson, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/admin/ban", @@ -1272,11 +1367,10 @@ export class LemmyHttp { } /** - * Get a list of banned users - * - * `HTTP.GET /admin/banned` + * Get a list of banned users. */ - getBannedPersons(options?: RequestOptions) { + @Get("/admin/banned") + getBannedPersons(@Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Get, "/admin/banned", @@ -1287,10 +1381,9 @@ export class LemmyHttp { /** * Block a person. - * - * `HTTP.POST /account/block/person` */ - blockPerson(form: BlockPerson, options?: RequestOptions) { + @Post("/account/block/person") + blockPerson(@Body() form: BlockPerson, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/account/block/person", @@ -1301,10 +1394,9 @@ export class LemmyHttp { /** * Fetch a Captcha. - * - * `HTTP.GET /account/auth/get_captcha` */ - getCaptcha(options?: RequestOptions) { + @Get("/account/auth/get_captcha") + getCaptcha(@Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Get, "/account/auth/get_captcha", @@ -1315,10 +1407,12 @@ export class LemmyHttp { /** * Delete your account. - * - * `HTTP.POST /account/delete` */ - deleteAccount(form: DeleteAccount, options?: RequestOptions) { + @Post("/account/delete") + deleteAccount( + @Body() form: DeleteAccount, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/account/delete", @@ -1329,10 +1423,12 @@ export class LemmyHttp { /** * Reset your password. - * - * `HTTP.POST /account/auth/password_reset` */ - passwordReset(form: PasswordReset, options?: RequestOptions) { + @Post("/account/auth/password_reset") + passwordReset( + @Body() form: PasswordReset, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/account/auth/password_reset", @@ -1343,12 +1439,11 @@ export class LemmyHttp { /** * Change your password from an email / token based reset. - * - * `HTTP.POST /account/auth/password_change` */ + @Post("/account/auth/password_change") passwordChangeAfterReset( - form: PasswordChangeAfterReset, - options?: RequestOptions, + @Body() form: PasswordChangeAfterReset, + @Inject() options?: RequestOptions, ) { return this.#wrapper( HttpType.Post, @@ -1360,10 +1455,9 @@ export class LemmyHttp { /** * Mark all replies as read. - * - * `HTTP.POST /account/mark_as_read/all` */ - markAllNotificationsAsRead(options?: RequestOptions) { + @Post("/account/mark_as_read/all") + markAllNotificationsAsRead(@Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/account/mark_as_read/all", @@ -1374,10 +1468,12 @@ export class LemmyHttp { /** * Save your user settings. - * - * `HTTP.PUT /account/settings/save` */ - saveUserSettings(form: SaveUserSettings, options?: RequestOptions) { + @Put("/account/settings/save") + saveUserSettings( + @Body() form: SaveUserSettings, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Put, "/account/settings/save", @@ -1388,10 +1484,12 @@ export class LemmyHttp { /** * Change your user password. - * - * `HTTP.PUT /account/auth/change_password` */ - changePassword(form: ChangePassword, options?: RequestOptions) { + @Put("/account/auth/change_password") + changePassword( + @Body() form: ChangePassword, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Put, "/account/auth/change_password", @@ -1402,10 +1500,12 @@ export class LemmyHttp { /** * Get counts for your reports - * - * `HTTP.GET /account/report_count` */ - getReportCount(form: GetReportCount, options?: RequestOptions) { + @Get("/account/report_count") + getReportCount( + @Queries() form: GetReportCountI, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Get, "/account/report_count", @@ -1416,10 +1516,9 @@ export class LemmyHttp { /** * Get your unread counts - * - * `HTTP.GET /account/unread_count` */ - getUnreadCount(options?: RequestOptions) { + @Get("/account/unread_count") + getUnreadCount(@Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Get, "/account/unread_count", @@ -1430,10 +1529,9 @@ export class LemmyHttp { /** * Get your inbox (replies, comment mentions, post mentions, and messages) - * - * `HTTP.GET /account/inbox` */ - listInbox(form: ListInbox, options?: RequestOptions) { + @Get("/account/inbox") + listInbox(@Queries() form: ListInboxI, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Get, "/account/inbox", @@ -1444,10 +1542,9 @@ export class LemmyHttp { /** * Verify your email - * - * `HTTP.POST /account/auth/verify_email` */ - verifyEmail(form: VerifyEmail, options?: RequestOptions) { + @Post("/account/auth/verify_email") + verifyEmail(@Body() form: VerifyEmail, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/account/auth/verify_email", @@ -1458,12 +1555,14 @@ export class LemmyHttp { /** * List your saved content. - * - * `HTTP.GET /account/auth/saved` */ - listPersonSaved(form: ListPersonSaved, options?: RequestOptions) { + @Get("/account/auth/saved") + listPersonSaved( + @Queries() form: ListPersonSavedI, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( - HttpType.Post, + HttpType.Get, "/account/auth/saved", form, options, @@ -1472,10 +1571,9 @@ export class LemmyHttp { /** * Add an admin to your site. - * - * `HTTP.POST /admin/add` */ - addAdmin(form: AddAdmin, options?: RequestOptions) { + @Post("/admin/add") + addAdmin(@Body() form: AddAdmin, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/admin/add", @@ -1486,10 +1584,9 @@ export class LemmyHttp { /** * Get the unread registration applications count. - * - * `HTTP.GET /admin/registration_application/count` */ - getUnreadRegistrationApplicationCount(options?: RequestOptions) { + @Get("/admin/registration_application/count") + getUnreadRegistrationApplicationCount(@Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Get, "/admin/registration_application/count", @@ -1500,12 +1597,11 @@ export class LemmyHttp { /** * List the registration applications. - * - * `HTTP.GET /admin/registration_application/list` */ + @Get("/admin/registration_application/list") listRegistrationApplications( - form: ListRegistrationApplications, - options?: RequestOptions, + @Queries() form: ListRegistrationApplicationsI, + @Inject() options?: RequestOptions, ) { return this.#wrapper< ListRegistrationApplications, @@ -1515,12 +1611,11 @@ export class LemmyHttp { /** * Approve a registration application - * - * `HTTP.PUT /admin/registration_application/approve` */ + @Put("/admin/registration_application/approve") approveRegistrationApplication( - form: ApproveRegistrationApplication, - options?: RequestOptions, + @Body() form: ApproveRegistrationApplication, + @Inject() options?: RequestOptions, ) { return this.#wrapper< ApproveRegistrationApplication, @@ -1530,12 +1625,11 @@ export class LemmyHttp { /** * Get the application a user submitted when they first registered their account - * - * `HTTP.GET /admin/registration_application` */ + @Get("/admin/registration_application") getRegistrationApplication( - form: GetRegistrationApplication, - options?: RequestOptions, + @Queries() form: GetRegistrationApplicationI, + @Inject() options?: RequestOptions, ) { return this.#wrapper< GetRegistrationApplication, @@ -1545,10 +1639,9 @@ export class LemmyHttp { /** * Purge / Delete a person from the database. - * - * `HTTP.POST /admin/purge/person` */ - purgePerson(form: PurgePerson, options?: RequestOptions) { + @Post("/admin/purge/person") + purgePerson(@Body() form: PurgePerson, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/admin/purge/person", @@ -1559,10 +1652,12 @@ export class LemmyHttp { /** * Purge / Delete a community from the database. - * - * `HTTP.POST /admin/purge/community` */ - purgeCommunity(form: PurgeCommunity, options?: RequestOptions) { + @Post("/admin/purge/community") + purgeCommunity( + @Body() form: PurgeCommunity, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/admin/purge/community", @@ -1573,10 +1668,9 @@ export class LemmyHttp { /** * Purge / Delete a post from the database. - * - * `HTTP.POST /admin/purge/post` */ - purgePost(form: PurgePost, options?: RequestOptions) { + @Post("/admin/purge/post") + purgePost(@Body() form: PurgePost, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/admin/purge/post", @@ -1587,10 +1681,9 @@ export class LemmyHttp { /** * Purge / Delete a comment from the database. - * - * `HTTP.POST /admin/purge/comment` */ - purgeComment(form: PurgeComment, options?: RequestOptions) { + @Post("/admin/purge/comment") + purgeComment(@Body() form: PurgeComment, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Post, "/admin/purge/comment", @@ -1600,11 +1693,13 @@ export class LemmyHttp { } /** - * Create a new custom emoji - * - * `HTTP.POST /custom_emoji` + * Create a new custom emoji. */ - createCustomEmoji(form: CreateCustomEmoji, options?: RequestOptions) { + @Post("/custom_emoji") + createCustomEmoji( + @Body() form: CreateCustomEmoji, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/custom_emoji", @@ -1614,11 +1709,13 @@ export class LemmyHttp { } /** - * Edit an existing custom emoji - * - * `HTTP.PUT /custom_emoji` + * Edit an existing custom emoji. */ - editCustomEmoji(form: EditCustomEmoji, options?: RequestOptions) { + @Put("/custom_emoji") + editCustomEmoji( + @Body() form: EditCustomEmoji, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Put, "/custom_emoji", @@ -1628,11 +1725,13 @@ export class LemmyHttp { } /** - * Delete a custom emoji - * - * `HTTP.Post /custom_emoji/delete` + * Delete a custom emoji. */ - deleteCustomEmoji(form: DeleteCustomEmoji, options?: RequestOptions) { + @Post("/custom_emoji/delete") + deleteCustomEmoji( + @Body() form: DeleteCustomEmoji, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/custom_emoji/delete", @@ -1643,10 +1742,12 @@ export class LemmyHttp { /** * List custom emojis - * - * `HTTP.GET /custom_emoji/list` */ - listCustomEmojis(form: ListCustomEmojis, options?: RequestOptions) { + @Get("/custom_emoji/list") + listCustomEmojis( + @Queries() form: ListCustomEmojisI, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Get, "/custom_emoji/list", @@ -1657,10 +1758,12 @@ export class LemmyHttp { /** * Create a new tagline - * - * `HTTP.POST /admin/tagline` */ - createTagline(form: CreateTagline, options?: RequestOptions) { + @Post("/admin/tagline") + createTagline( + @Body() form: CreateTagline, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/admin/tagline", @@ -1671,10 +1774,9 @@ export class LemmyHttp { /** * Edit an existing tagline - * - * `HTTP.PUT /admin/tagline` */ - editTagline(form: UpdateTagline, options?: RequestOptions) { + @Put("/admin/tagline") + editTagline(@Body() form: UpdateTagline, @Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Put, "/admin/tagline", @@ -1685,10 +1787,12 @@ export class LemmyHttp { /** * Delete a tagline - * - * `HTTP.Post /admin/tagline/delete` */ - deleteTagline(form: DeleteTagline, options?: RequestOptions) { + @Post("/admin/tagline/delete") + deleteTagline( + @Body() form: DeleteTagline, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/admin/tagline/delete", @@ -1698,11 +1802,13 @@ export class LemmyHttp { } /** - * List taglines - * - * `HTTP.GET /admin/tagline/list` + * List taglines. */ - listTaglines(form: ListTaglines, options?: RequestOptions) { + @Get("/admin/tagline/list") + listTaglines( + @Queries() form: ListTaglinesI, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Get, "/admin/tagline/list", @@ -1713,10 +1819,12 @@ export class LemmyHttp { /** * Create a new oauth provider method - * - * `HTTP.POST /oauth_provider` */ - createOAuthProvider(form: CreateOAuthProvider, options?: RequestOptions) { + @Post("/oauth_provider") + createOAuthProvider( + @Body() form: CreateOAuthProvider, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/oauth_provider", @@ -1727,10 +1835,12 @@ export class LemmyHttp { /** * Edit an existing oauth provider method - * - * `HTTP.PUT /oauth_provider` */ - editOAuthProvider(form: EditOAuthProvider, options?: RequestOptions) { + @Put("/oauth_provider") + editOAuthProvider( + @Body() form: EditOAuthProvider, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Put, "/oauth_provider", @@ -1741,10 +1851,12 @@ export class LemmyHttp { /** * Delete an oauth provider method - * - * `HTTP.Post /oauth_provider/delete` */ - deleteOAuthProvider(form: DeleteOAuthProvider, options?: RequestOptions) { + @Post("/oauth_provider/delete") + deleteOAuthProvider( + @Body() form: DeleteOAuthProvider, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/oauth_provider/delete", @@ -1755,10 +1867,12 @@ export class LemmyHttp { /** * Authenticate with OAuth - * - * `HTTP.Post /oauth/authenticate` */ - authenticateWithOAuth(form: AuthenticateWithOauth, options?: RequestOptions) { + @Post("/oauth/authenticate") + authenticateWithOAuth( + @Body() form: AuthenticateWithOauth, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/oauth/authenticate", @@ -1769,10 +1883,9 @@ export class LemmyHttp { /** * Fetch federated instances. - * - * `HTTP.Get /federated_instances` */ - getFederatedInstances(options?: RequestOptions) { + @Get("/federated_instances") + getFederatedInstances(@Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Get, "/federated_instances", @@ -1783,10 +1896,12 @@ export class LemmyHttp { /** * List user reports. - * - * `HTTP.GET /report/list` */ - listReports(form: ListReports, options?: RequestOptions) { + @Get("/report/list") + listReports( + @Queries() form: ListReportsI, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Get, "/report/list", @@ -1797,10 +1912,12 @@ export class LemmyHttp { /** * Block an instance as user. - * - * `HTTP.Post /account/block/instance` */ - userBlockInstance(form: UserBlockInstanceParams, options?: RequestOptions) { + @Post("/account/block/instance") + userBlockInstance( + @Body() form: UserBlockInstanceParams, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/account/block/instance", @@ -1811,10 +1928,12 @@ export class LemmyHttp { /** * Globally block an instance as admin. - * - * `HTTP.Post /admin/instance/block` */ - adminBlockInstance(form: AdminBlockInstanceParams, options?: RequestOptions) { + @Post("/admin/instance/block") + adminBlockInstance( + @Body() form: AdminBlockInstanceParams, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/admin/instance/block", @@ -1825,10 +1944,12 @@ export class LemmyHttp { /** * Globally allow an instance as admin. - * - * `HTTP.Post /admin/instance/allow` */ - adminAllowInstance(form: AdminAllowInstanceParams, options?: RequestOptions) { + @Post("/admin/instance/allow") + adminAllowInstance( + @Body() form: AdminAllowInstanceParams, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Post, "/admin/instance/allow", @@ -1839,22 +1960,22 @@ export class LemmyHttp { /** * Upload new user avatar. - * - * `HTTP.Post /account/avatar` */ + @Post("/account/avatar") async uploadUserAvatar( - image: UploadImage, - options?: RequestOptions, + @UploadedFile() image: UploadImage, + @Inject() options?: RequestOptions, ): Promise { return this.#upload("/account/avatar", image, options); } /** * Delete the user avatar. - * - * `HTTP.Delete /account/avatar` */ - async deleteUserAvatar(options?: RequestOptions): Promise { + @Delete("/account/avatar") + async deleteUserAvatar( + @Inject() options?: RequestOptions, + ): Promise { return this.#wrapper( HttpType.Delete, "/account/avatar", @@ -1865,22 +1986,20 @@ export class LemmyHttp { /** * Upload new user banner. - * - * `HTTP.Post /account/banner` */ + @Post("/account/banner") async uploadUserBanner( - image: UploadImage, - options?: RequestOptions, + @UploadedFile() image: UploadImage, + @Inject() options?: RequestOptions, ): Promise { return this.#upload("/account/banner", image, options); } /** * Delete the user banner. - * - * `HTTP.Delete /account/banner` */ - async deleteUserBanner(options?: RequestOptions): Promise { + @Delete("/account/banner") + async deleteUserBanner(@Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Delete, "/account/banner", @@ -1891,23 +2010,21 @@ export class LemmyHttp { /** * Upload new community icon. - * - * `HTTP.Post /community/icon` */ + @Post("/community/icon") async uploadCommunityIcon( - image: UploadImage, - options?: RequestOptions, + @UploadedFile() image: UploadImage, + @Inject() options?: RequestOptions, ): Promise { return this.#upload("/community/icon", image, options); } /** * Delete the community icon. - * - * `HTTP.Delete /community/icon` */ + @Delete("/community/icon") async deleteCommunityIcon( - options?: RequestOptions, + @Inject() options?: RequestOptions, ): Promise { return this.#wrapper( HttpType.Delete, @@ -1919,23 +2036,21 @@ export class LemmyHttp { /** * Upload new community banner. - * - * `HTTP.Post /community/banner` */ + @Post("/community/banner") async uploadCommunityBanner( - image: UploadImage, - options?: RequestOptions, + @UploadedFile() image: UploadImage, + @Inject() options?: RequestOptions, ): Promise { return this.#upload("/community/banner", image, options); } /** * Delete the community banner. - * - * `HTTP.Delete /community/banner` */ + @Delete("/community/banner") async deleteCommunityBanner( - options?: RequestOptions, + @Inject() options?: RequestOptions, ): Promise { return this.#wrapper( HttpType.Delete, @@ -1947,22 +2062,22 @@ export class LemmyHttp { /** * Upload new site icon. - * - * `HTTP.Post /site/icon` */ + @Post("/site/icon") async uploadSiteIcon( - image: UploadImage, - options?: RequestOptions, + @UploadedFile() image: UploadImage, + @Inject() options?: RequestOptions, ): Promise { return this.#upload("/site/icon", image, options); } /** * Delete the site icon. - * - * `HTTP.Delete /site/icon` */ - async deleteSiteIcon(options?: RequestOptions): Promise { + @Delete("/site/icon") + async deleteSiteIcon( + @Inject() options?: RequestOptions, + ): Promise { return this.#wrapper( HttpType.Delete, "/site/icon", @@ -1973,22 +2088,22 @@ export class LemmyHttp { /** * Upload new site banner. - * - * `HTTP.Post /site/banner` */ + @Post("/site/banner") async uploadSiteBanner( - image: UploadImage, - options?: RequestOptions, + @UploadedFile() image: UploadImage, + @Inject() options?: RequestOptions, ): Promise { return this.#upload("/site/banner", image, options); } /** * Delete the site banner. - * - * `HTTP.Delete /site/banner` */ - async deleteSiteBanner(options?: RequestOptions): Promise { + @Delete("/site/banner") + async deleteSiteBanner( + @Inject() options?: RequestOptions, + ): Promise { return this.#wrapper( HttpType.Delete, "/site/banner", @@ -1999,22 +2114,23 @@ export class LemmyHttp { /** * Upload an image to the server. - * - * `HTTP.Post /image` */ + @Post("/image") async uploadImage( - image: UploadImage, - options?: RequestOptions, + @UploadedFile() image: UploadImage, + @Inject() options?: RequestOptions, ): Promise { return this.#upload("/image", image, options); } /** * Delete a pictrs image - * - * `HTTP.Delete /image` */ - async deleteImage(form: DeleteImageParams, options?: RequestOptions) { + @Delete("/image") + async deleteImage( + @Body() form: DeleteImageParams, + @Inject() options?: RequestOptions, + ) { return this.#wrapper( HttpType.Delete, "/image", @@ -2025,10 +2141,9 @@ export class LemmyHttp { /** * Health check for image functionality - * - * `HTTP.Get /image/health` */ - async imageHealth(options?: RequestOptions) { + @Get("image/health") + async imageHealth(@Inject() options?: RequestOptions) { return this.#wrapper( HttpType.Get, "/image/health", diff --git a/src/other_types.ts b/src/other_types.ts index b3be06c..8f7e373 100644 --- a/src/other_types.ts +++ b/src/other_types.ts @@ -1,5 +1,65 @@ +import { GetComment } from "./types/GetComment"; +import { GetComments } from "./types/GetComments"; +import { GetCommunity } from "./types/GetCommunity"; +import { GetCommunityPendingFollowsCount } from "./types/GetCommunityPendingFollowsCount"; +import { GetModlog } from "./types/GetModlog"; +import { GetPersonDetails } from "./types/GetPersonDetails"; +import { GetPost } from "./types/GetPost"; +import { GetPosts } from "./types/GetPosts"; +import { GetRandomCommunity } from "./types/GetRandomCommunity"; +import { GetRegistrationApplication } from "./types/GetRegistrationApplication"; +import { GetReportCount } from "./types/GetReportCount"; +import { GetSiteMetadata } from "./types/GetSiteMetadata"; +import { ListCommentLikes } from "./types/ListCommentLikes"; +import { ListCommunities } from "./types/ListCommunities"; +import { ListCommunityPendingFollows } from "./types/ListCommunityPendingFollows"; +import { ListCustomEmojis } from "./types/ListCustomEmojis"; +import { ListInbox } from "./types/ListInbox"; +import { ListMedia } from "./types/ListMedia"; +import { ListPersonContent } from "./types/ListPersonContent"; +import { ListPersonSaved } from "./types/ListPersonSaved"; +import { ListPostLikes } from "./types/ListPostLikes"; +import { ListRegistrationApplications } from "./types/ListRegistrationApplications"; +import { ListReports } from "./types/ListReports"; +import { ListTaglines } from "./types/ListTaglines"; +import { ResolveObject } from "./types/ResolveObject"; +import { Search } from "./types/Search"; + export const VERSION = "v4"; export interface UploadImage { image: File | Buffer; } + +// tsoa doesn't currently support types in GET queries, so these need to be extended. +// https://github.com/lukeautry/tsoa/issues/1743 +export interface ListMediaI extends ListMedia {} +export interface GetModlogI extends GetModlog {} +export interface SearchI extends Search {} +export interface ResolveObjectI extends ResolveObject {} +export interface GetCommunityI extends GetCommunity {} +export interface ListCommunitiesI extends ListCommunities {} +export interface GetCommunityPendingFollowsCountI + extends GetCommunityPendingFollowsCount {} +export interface ListCommunityPendingFollowsI + extends ListCommunityPendingFollows {} +export interface GetRandomCommunityI extends GetRandomCommunity {} +export interface GetPostI extends GetPost {} +export interface GetPostsI extends GetPosts {} +export interface ListPostLikesI extends ListPostLikes {} +export interface GetSiteMetadataI extends GetSiteMetadata {} +export interface ListCommentLikesI extends ListCommentLikes {} +export interface GetCommentsI extends GetComments {} +export interface GetCommentI extends GetComment {} +export interface GetPersonDetailsI extends GetPersonDetails {} +export interface ListPersonContentI extends ListPersonContent {} +export interface GetReportCountI extends GetReportCount {} +export interface ListInboxI extends ListInbox {} +export interface ListPersonSavedI extends ListPersonSaved {} +export interface ListRegistrationApplicationsI + extends ListRegistrationApplications {} +export interface GetRegistrationApplicationI + extends GetRegistrationApplication {} +export interface ListCustomEmojisI extends ListCustomEmojis {} +export interface ListTaglinesI extends ListTaglines {} +export interface ListReportsI extends ListReports {} diff --git a/tsoa.json b/tsoa.json new file mode 100644 index 0000000..d26740a --- /dev/null +++ b/tsoa.json @@ -0,0 +1,12 @@ +{ + "entryFile": "src/http.ts", + "noImplicitAdditionalProperties": "throw-on-extras", + "controllerPathGlobs": ["src/http.ts"], + "spec": { + "outputDirectory": "tsoa_build", + "specVersion": 3 + }, + "routes": { + "routesDir": "tsoa_build" + } +}