From 20fa90a23c7d131115a281b51ab6fe3b18d5286c Mon Sep 17 00:00:00 2001 From: Nutomic Date: Thu, 6 Feb 2025 03:56:37 +0000 Subject: [PATCH] Rename actor_id columns to ap_id (#5393) * Rename actor_id columns to ap_id * update api tests * fix * lint --- api_tests/package.json | 4 +- api_tests/pnpm-lock.yaml | 1291 ++++++++++++++++- api_tests/src/comment.spec.ts | 4 +- api_tests/src/community.spec.ts | 29 +- api_tests/src/image.spec.ts | 4 +- api_tests/src/post.spec.ts | 14 +- api_tests/src/private_community.spec.ts | 14 +- api_tests/src/shared.ts | 4 +- api_tests/src/user.spec.ts | 2 +- crates/api_common/src/utils.rs | 20 +- crates/api_crud/src/community/create.rs | 11 +- crates/api_crud/src/site/create.rs | 4 +- crates/api_crud/src/user/create.rs | 4 +- crates/apub/src/activities/block/mod.rs | 6 +- .../apub/src/activities/community/announce.rs | 4 +- .../activities/community/collection_add.rs | 4 +- .../activities/community/collection_remove.rs | 4 +- .../src/activities/community/lock_page.rs | 4 +- .../apub/src/activities/community/update.rs | 4 +- crates/apub/src/activities/deletion/delete.rs | 4 +- crates/apub/src/activities/deletion/mod.rs | 2 +- .../src/activities/deletion/undo_delete.rs | 4 +- crates/apub/src/activities/following/mod.rs | 6 +- crates/apub/src/activities/mod.rs | 12 +- crates/apub/src/api/list_comments.rs | 4 +- crates/apub/src/api/list_posts.rs | 4 +- crates/apub/src/api/mod.rs | 4 +- crates/apub/src/api/read_community.rs | 6 +- crates/apub/src/api/read_person.rs | 2 +- crates/apub/src/api/search.rs | 4 +- crates/apub/src/api/user_settings_backup.rs | 2 +- .../src/collections/community_featured.rs | 2 +- .../src/collections/community_follower.rs | 2 +- .../src/collections/community_moderators.rs | 12 +- .../apub/src/collections/community_outbox.rs | 2 +- crates/apub/src/fetcher/markdown_links.rs | 2 +- crates/apub/src/fetcher/mod.rs | 2 +- crates/apub/src/http/community.rs | 2 +- crates/apub/src/http/person.rs | 4 +- crates/apub/src/mentions.rs | 4 +- crates/apub/src/objects/comment.rs | 2 +- crates/apub/src/objects/community.rs | 10 +- crates/apub/src/objects/instance.rs | 8 +- crates/apub/src/objects/person.rs | 10 +- crates/apub/src/objects/post.rs | 2 +- crates/apub/src/objects/private_message.rs | 6 +- crates/db_perf/src/main.rs | 2 +- crates/db_schema/src/impls/community.rs | 8 +- crates/db_schema/src/impls/local_user.rs | 6 +- crates/db_schema/src/impls/person.rs | 8 +- crates/db_schema/src/impls/site.rs | 8 +- crates/db_schema/src/lib.rs | 2 +- crates/db_schema/src/schema.rs | 6 +- crates/db_schema/src/source/community.rs | 8 +- crates/db_schema/src/source/person.rs | 8 +- crates/db_schema/src/source/site.rs | 8 +- crates/db_views/src/comment/comment_view.rs | 4 +- .../db_views/src/community/community_view.rs | 2 +- crates/db_views/src/post/post_view.rs | 10 +- .../registration_application_view.rs | 4 +- crates/federate/src/inboxes.rs | 6 +- crates/federate/src/worker.rs | 16 +- crates/routes/src/feeds.rs | 10 +- crates/routes/src/utils/code_migrations.rs | 32 +- crates/routes/src/webfinger.rs | 4 +- migrations/2025-02-05-090155_ap_id/down.sql | 6 + migrations/2025-02-05-090155_ap_id/up.sql | 6 + 67 files changed, 1505 insertions(+), 214 deletions(-) create mode 100644 migrations/2025-02-05-090155_ap_id/down.sql create mode 100644 migrations/2025-02-05-090155_ap_id/up.sql diff --git a/api_tests/package.json b/api_tests/package.json index 993136742..46e14ab15 100644 --- a/api_tests/package.json +++ b/api_tests/package.json @@ -22,15 +22,17 @@ }, "devDependencies": { "@types/jest": "^29.5.12", + "@types/joi": "^17.2.3", "@types/node": "^22.10.7", "@typescript-eslint/eslint-plugin": "^8.21.0", "@typescript-eslint/parser": "^8.21.0", "eslint": "^9.18.0", "eslint-plugin-prettier": "^5.2.3", "jest": "^29.5.0", - "lemmy-js-client": "0.20.0-search-combined.1", + "lemmy-js-client": "0.20.0-ap-id.1", "prettier": "^3.4.2", "ts-jest": "^29.1.0", + "tsoa": "^6.6.0", "typescript": "^5.7.3", "typescript-eslint": "^8.21.0" } diff --git a/api_tests/pnpm-lock.yaml b/api_tests/pnpm-lock.yaml index a0721bba3..e218e3896 100644 --- a/api_tests/pnpm-lock.yaml +++ b/api_tests/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: '@types/jest': specifier: ^29.5.12 version: 29.5.14 + '@types/joi': + specifier: ^17.2.3 + version: 17.2.3 '@types/node': specifier: ^22.10.7 version: 22.10.7 @@ -30,14 +33,17 @@ importers: specifier: ^29.5.0 version: 29.7.0(@types/node@22.10.7) lemmy-js-client: - specifier: 0.20.0-search-combined.1 - version: 0.20.0-search-combined.1 + specifier: 0.20.0-ap-id.1 + version: 0.20.0-ap-id.1 prettier: specifier: ^3.4.2 version: 3.4.2 ts-jest: specifier: ^29.1.0 version: 29.2.5(@babel/core@7.23.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.23.9))(jest@29.7.0(@types/node@22.10.7))(typescript@5.7.3) + tsoa: + specifier: ^6.6.0 + version: 6.6.0 typescript: specifier: ^5.7.3 version: 5.7.3 @@ -252,6 +258,103 @@ packages: resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@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'} @@ -272,6 +375,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'} + '@istanbuljs/load-nyc-config@1.1.0': resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -376,10 +483,23 @@ 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} + '@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==} + '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -389,6 +509,18 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@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/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -401,12 +533,36 @@ packages: '@types/babel__traverse@7.20.5': resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} + '@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.6': + resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==} + + '@types/express@5.0.0': + resolution: {integrity: sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==} + '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + '@types/http-assert@1.5.6': + resolution: {integrity: sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw==} + + '@types/http-errors@2.0.4': + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} @@ -419,12 +575,43 @@ packages: '@types/jest@29.5.14': resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} + '@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/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} @@ -481,6 +668,10 @@ packages: resolution: {integrity: sha512-BkLMNpdV6prozk8LlyK/SOoWLmUFi+ZD+pcqti9ILCbVvHGk1ui1g4jJOc2WDLaeExz2qWwojxlPce5PljcT3w==} 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: @@ -502,6 +693,10 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -510,6 +705,10 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -520,6 +719,9 @@ 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==} + async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} @@ -551,6 +753,10 @@ packages: 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==} @@ -580,6 +786,18 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + 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'} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -631,9 +849,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'} + create-jest@29.7.0: resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -647,6 +880,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'} @@ -671,6 +912,14 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + 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-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} @@ -679,6 +928,16 @@ packages: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.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==} + ejs@3.1.10: resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} engines: {node: '>=0.10.0'} @@ -694,13 +953,39 @@ packages: 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'} + 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.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} @@ -770,6 +1055,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'} + execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -782,6 +1071,10 @@ packages: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + 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==} @@ -819,6 +1112,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-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -834,6 +1131,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'} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -853,10 +1166,18 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-intrinsic@1.2.7: + resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + engines: {node: '>= 0.4'} + get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -869,6 +1190,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 + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -881,27 +1206,52 @@ 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@4.0.0: 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.0: resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} engines: {node: '>= 0.4'} + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} + 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'} @@ -926,6 +1276,10 @@ packages: 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==} @@ -956,6 +1310,10 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -983,6 +1341,9 @@ packages: resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} engines: {node: '>=8'} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jake@10.9.2: resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} engines: {node: '>=10'} @@ -1117,6 +1478,9 @@ packages: node-notifier: optional: true + joi@17.13.3: + resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -1150,6 +1514,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==} @@ -1157,8 +1524,8 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} - lemmy-js-client@0.20.0-search-combined.1: - resolution: {integrity: sha512-K4bk6r+26lxZqL8WKiJlqfZb+ZnhNrZz1gAQTb4FQkGXQLFeqQ41ZyGmQZzjX+NPy7O9mt9d9d7zI8t/QYJ82Q==} + lemmy-js-client@0.20.0-ap-id.1: + resolution: {integrity: sha512-HzY005mhbINXa5i+GabuJSrwN27ExZKj2XxM1cAnfTWJ4ZqvbLuz4i26JDeE8pj6GGKbXBIj2VX4aOhKgCjkSA==} leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} @@ -1185,6 +1552,9 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -1198,6 +1568,21 @@ packages: makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + 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==} @@ -1205,6 +1590,10 @@ 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.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} @@ -1213,6 +1602,23 @@ packages: 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@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -1228,12 +1634,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-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -1248,6 +1671,14 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -1279,6 +1710,9 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + 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'} @@ -1287,6 +1721,10 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + 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'} @@ -1302,6 +1740,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.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -1338,6 +1783,10 @@ packages: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -1345,12 +1794,27 @@ packages: pure-rand@6.0.4: resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} + 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'} + react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + 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'} @@ -1382,6 +1846,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 @@ -1396,6 +1866,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'} @@ -1404,9 +1885,29 @@ 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@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -1428,6 +1929,10 @@ packages: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -1436,10 +1941,18 @@ packages: 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'} + 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'} + strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} @@ -1483,12 +1996,20 @@ 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'} + ts-jest@29.2.5: resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} @@ -1516,6 +2037,11 @@ packages: tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + 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'} @@ -1528,6 +2054,10 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + typescript-eslint@8.21.0: resolution: {integrity: sha512-txEKYY4XMKwPXxNkN8+AxAdX6iIJAPiJbHE/FpQccs/sxw8Lf26kqwC3cn0xkHlW8kEbLhkhCsjWuMveaY9Rxw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1540,9 +2070,22 @@ packages: engines: {node: '>=14.17'} hasBin: true + 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.0.13: resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true @@ -1552,10 +2095,22 @@ 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'} + v8-to-istanbul@9.2.0: resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} engines: {node: '>=10.12.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'} + walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} @@ -1568,10 +2123,17 @@ 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'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -1586,6 +2148,11 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + engines: {node: '>= 14'} + hasBin: true + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -1843,6 +2410,175 @@ snapshots: '@eslint/core': 0.10.0 levn: 0.4.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': @@ -1856,6 +2592,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 + '@istanbuljs/load-nyc-config@1.1.0': dependencies: camelcase: 5.3.1 @@ -2057,8 +2802,19 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.18.0 + '@pkgjs/parseargs@0.11.0': + optional: true + '@pkgr/core@0.1.1': {} + '@sideway/address@4.1.5': + dependencies: + '@hapi/hoek': 9.3.0 + + '@sideway/formula@3.0.1': {} + + '@sideway/pinpoint@2.0.0': {} + '@sinclair/typebox@0.27.8': {} '@sinonjs/commons@3.0.1': @@ -2069,6 +2825,39 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 + '@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.7.0 + 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/babel__core@7.20.5': dependencies: '@babel/parser': 7.23.9 @@ -2090,12 +2879,48 @@ snapshots: dependencies: '@babel/types': 7.23.9 + '@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.6': + 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.6 + '@types/qs': 6.9.18 + '@types/serve-static': 1.15.7 + '@types/graceful-fs@4.1.9': dependencies: '@types/node': 22.10.7 + '@types/http-assert@1.5.6': {} + + '@types/http-errors@2.0.4': {} + '@types/istanbul-lib-coverage@2.0.6': {} '@types/istanbul-lib-report@3.0.3': @@ -2111,12 +2936,54 @@ snapshots: expect: 29.7.0 pretty-format: 29.7.0 + '@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/stack-utils@2.0.3': {} '@types/yargs-parser@21.0.3': {} @@ -2202,6 +3069,11 @@ snapshots: '@typescript-eslint/types': 8.21.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 @@ -2221,12 +3093,16 @@ snapshots: ansi-regex@5.0.1: {} + ansi-regex@6.1.0: {} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 ansi-styles@5.2.0: {} + ansi-styles@6.2.1: {} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 @@ -2238,6 +3114,8 @@ snapshots: argparse@2.0.1: {} + array-flatten@1.1.1: {} + async@3.2.6: {} babel-jest@29.7.0(@babel/core@7.23.9): @@ -2294,6 +3172,23 @@ snapshots: 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 @@ -2328,6 +3223,18 @@ snapshots: buffer-from@1.1.2: {} + 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 + callsites@3.1.0: {} camelcase@5.3.1: {} @@ -2365,8 +3272,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: {} + create-jest@29.7.0(@types/node@22.10.7): dependencies: '@jest/types': 29.6.3 @@ -2394,6 +3311,10 @@ 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 @@ -2404,10 +3325,24 @@ snapshots: deepmerge@4.3.1: {} + depd@2.0.0: {} + + destroy@1.2.0: {} + detect-newline@3.1.0: {} diff-sequences@29.6.3: {} + 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: {} + ejs@3.1.10: dependencies: jake: 10.9.2 @@ -2418,12 +3353,28 @@ snapshots: emoji-regex@8.0.0: {} + emoji-regex@9.2.2: {} + + encodeurl@1.0.2: {} + + encodeurl@2.0.0: {} + error-ex@1.3.2: 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.1: {} + escape-html@1.0.3: {} + escape-string-regexp@2.0.0: {} escape-string-regexp@4.0.0: {} @@ -2503,6 +3454,8 @@ snapshots: esutils@2.0.3: {} + etag@1.8.1: {} + execa@5.1.1: dependencies: cross-spawn: 7.0.3 @@ -2525,6 +3478,42 @@ snapshots: jest-message-util: 29.7.0 jest-util: 29.7.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: {} @@ -2565,6 +3554,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-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -2582,6 +3583,21 @@ 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 + fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -2593,8 +3609,26 @@ snapshots: get-caller-file@2.0.5: {} + 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-package-type@0.1.0: {} + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + get-stream@6.0.1: {} glob-parent@5.1.2: @@ -2605,6 +3639,15 @@ 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 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -2618,20 +3661,49 @@ snapshots: 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@4.0.0: {} + has-symbols@1.1.0: {} + hasown@2.0.0: dependencies: function-bind: 1.1.2 + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + html-escaper@2.0.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@2.1.0: {} + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + ignore@5.3.2: {} import-fresh@3.3.0: @@ -2653,6 +3725,8 @@ snapshots: inherits@2.0.4: {} + ipaddr.js@1.9.1: {} + is-arrayish@0.2.1: {} is-core-module@2.13.1: @@ -2673,6 +3747,8 @@ snapshots: is-stream@2.0.1: {} + is-what@4.1.16: {} + isexe@2.0.0: {} istanbul-lib-coverage@3.2.2: {} @@ -2716,6 +3792,12 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + jake@10.9.2: dependencies: async: 3.2.6 @@ -3031,6 +4113,14 @@ snapshots: - supports-color - ts-node + 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: @@ -3054,13 +4144,19 @@ 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 kleur@3.0.3: {} - lemmy-js-client@0.20.0-search-combined.1: {} + lemmy-js-client@0.20.0-ap-id.1: {} leven@3.1.0: {} @@ -3083,6 +4179,8 @@ snapshots: lodash.merge@4.6.2: {} + lru-cache@10.4.3: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -3097,10 +4195,22 @@ snapshots: dependencies: tmpl: 1.0.5 + math-intrinsics@1.1.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.5: dependencies: braces: 3.0.2 @@ -3111,6 +4221,16 @@ snapshots: 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@2.1.0: {} minimatch@3.1.2: @@ -3125,10 +4245,20 @@ 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-int64@0.4.0: {} node-releases@2.0.14: {} @@ -3139,6 +4269,12 @@ snapshots: dependencies: path-key: 3.1.1 + object-inspect@1.13.4: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + once@1.4.0: dependencies: wrappy: 1.0.2 @@ -3174,6 +4310,8 @@ snapshots: p-try@2.2.0: {} + package-json-from-dist@1.0.1: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -3185,6 +4323,8 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parseurl@1.3.3: {} + path-exists@4.0.0: {} path-is-absolute@1.0.1: {} @@ -3193,6 +4333,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.1.1: {} picomatch@2.3.1: {} @@ -3222,14 +4369,34 @@ snapshots: kleur: 3.0.3 sisteransi: 1.0.5 + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + punycode@2.3.1: {} pure-rand@6.0.4: {} + 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 + react-is@18.3.1: {} + reflect-metadata@0.2.2: {} + require-directory@2.1.1: {} resolve-cwd@3.0.0: @@ -3254,20 +4421,83 @@ snapshots: dependencies: queue-microtask: 1.2.3 + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + semver@6.3.1: {} semver@7.6.2: {} 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.4 + + 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.4 + + 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.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + signal-exit@3.0.7: {} + signal-exit@4.1.0: {} + sisteransi@1.0.5: {} slash@3.0.0: {} @@ -3285,6 +4515,8 @@ snapshots: dependencies: escape-string-regexp: 2.0.0 + statuses@2.0.1: {} + string-length@4.0.2: dependencies: char-regex: 1.0.2 @@ -3296,10 +4528,20 @@ snapshots: 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 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + strip-bom@4.0.0: {} strip-final-newline@2.0.0: {} @@ -3335,10 +4577,14 @@ 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: {} + ts-jest@29.2.5(@babel/core@7.23.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.23.9))(jest@29.7.0(@types/node@22.10.7))(typescript@5.7.3): dependencies: bs-logger: 0.2.6 @@ -3360,6 +4606,13 @@ snapshots: tslib@2.6.3: {} + 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 @@ -3368,6 +4621,11 @@ snapshots: type-fest@0.21.3: {} + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + typescript-eslint@8.21.0(eslint@9.18.0)(typescript@5.7.3): dependencies: '@typescript-eslint/eslint-plugin': 8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0)(typescript@5.7.3))(eslint@9.18.0)(typescript@5.7.3) @@ -3380,8 +4638,15 @@ snapshots: typescript@5.7.3: {} + uglify-js@3.19.3: + optional: true + undici-types@6.20.0: {} + universalify@2.0.1: {} + + unpipe@1.0.0: {} + update-browserslist-db@1.0.13(browserslist@4.22.3): dependencies: browserslist: 4.22.3 @@ -3392,12 +4657,18 @@ snapshots: dependencies: punycode: 2.3.1 + utils-merge@1.0.1: {} + v8-to-istanbul@9.2.0: dependencies: '@jridgewell/trace-mapping': 0.3.22 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 + validator@13.12.0: {} + + vary@1.1.2: {} + walker@1.0.8: dependencies: makeerror: 1.0.12 @@ -3408,12 +4679,20 @@ snapshots: 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 + wrappy@1.0.2: {} write-file-atomic@4.0.2: @@ -3425,6 +4704,8 @@ snapshots: yallist@3.1.1: {} + yaml@2.7.0: {} + yargs-parser@21.1.1: {} yargs@17.7.2: diff --git a/api_tests/src/comment.spec.ts b/api_tests/src/comment.spec.ts index 42fc06882..8fcf25abf 100644 --- a/api_tests/src/comment.spec.ts +++ b/api_tests/src/comment.spec.ts @@ -69,7 +69,7 @@ function assertCommentFederation( expect(commentOne?.comment.ap_id).toBe(commentTwo?.comment.ap_id); expect(commentOne?.comment.content).toBe(commentTwo?.comment.content); expect(commentOne?.creator.name).toBe(commentTwo?.creator.name); - expect(commentOne?.community.actor_id).toBe(commentTwo?.community.actor_id); + expect(commentOne?.community.ap_id).toBe(commentTwo?.community.ap_id); expect(commentOne?.comment.published).toBe(commentTwo?.comment.published); expect(commentOne?.comment.updated).toBe(commentOne?.comment.updated); expect(commentOne?.comment.deleted).toBe(commentOne?.comment.deleted); @@ -581,7 +581,7 @@ test("A and G subscribe to B (center) A posts, G mentions B, it gets announced t // follow community from beta so that it accepts the mention let betaCommunity = await resolveCommunity( beta, - alphaCommunity.community.actor_id, + alphaCommunity.community.ap_id, ); await followCommunity(beta, true, betaCommunity.community!.community.id); diff --git a/api_tests/src/community.spec.ts b/api_tests/src/community.spec.ts index 2258b020e..06a317b47 100644 --- a/api_tests/src/community.spec.ts +++ b/api_tests/src/community.spec.ts @@ -44,9 +44,7 @@ function assertCommunityFederation( communityOne?: CommunityView, communityTwo?: CommunityView, ) { - expect(communityOne?.community.actor_id).toBe( - communityTwo?.community.actor_id, - ); + expect(communityOne?.community.ap_id).toBe(communityTwo?.community.ap_id); expect(communityOne?.community.name).toBe(communityTwo?.community.name); expect(communityOne?.community.title).toBe(communityTwo?.community.title); expect(communityOne?.community.description).toBe( @@ -198,7 +196,7 @@ test("Admin actions in remote community are not federated to origin", async () = // gamma follows community and posts in it let gammaCommunity = ( - await resolveCommunity(gamma, communityRes.community.actor_id) + await resolveCommunity(gamma, communityRes.community.ap_id) ).community; if (!gammaCommunity) { throw "Missing gamma community"; @@ -206,7 +204,7 @@ test("Admin actions in remote community are not federated to origin", async () = await followCommunity(gamma, true, gammaCommunity.community.id); gammaCommunity = ( await waitUntil( - () => resolveCommunity(gamma, communityRes.community.actor_id), + () => resolveCommunity(gamma, communityRes.community.ap_id), g => g.community?.subscribed === "Subscribed", ) ).community; @@ -221,7 +219,7 @@ test("Admin actions in remote community are not federated to origin", async () = // admin of beta decides to ban gamma from community let betaCommunity = ( - await resolveCommunity(beta, communityRes.community.actor_id) + await resolveCommunity(beta, communityRes.community.ap_id) ).community; if (!betaCommunity) { throw "Missing beta community"; @@ -230,7 +228,7 @@ test("Admin actions in remote community are not federated to origin", async () = if (!bannedUserInfo1) { throw "Missing banned user 1"; } - let bannedUserInfo2 = (await resolvePerson(beta, bannedUserInfo1.actor_id)) + let bannedUserInfo2 = (await resolvePerson(beta, bannedUserInfo1.ap_id)) .person; if (!bannedUserInfo2) { throw "Missing banned user 2"; @@ -383,7 +381,7 @@ test("User blocks instance, communities are hidden", async () => { test.skip("Community follower count is federated", async () => { // Follow the beta community from alpha let community = await createCommunity(beta); - let communityActorId = community.community_view.community.actor_id; + let communityActorId = community.community_view.community.ap_id; let resolved = await resolveCommunity(alpha, communityActorId); if (!resolved.community) { throw "Missing beta community"; @@ -441,7 +439,7 @@ test("Dont receive community activities after unsubscribe", async () => { expect(communityRes.community_view.counts.subscribers).toBe(1); let betaCommunity = ( - await resolveCommunity(beta, communityRes.community_view.community.actor_id) + await resolveCommunity(beta, communityRes.community_view.community.ap_id) ).community; assertCommunityFederation(betaCommunity, communityRes.community_view); @@ -503,13 +501,12 @@ test("Fetch community, includes posts", async () => { expect(postRes.post_view.post).toBeDefined(); let resolvedCommunity = await waitUntil( - () => - resolveCommunity(beta, communityRes.community_view.community.actor_id), + () => resolveCommunity(beta, communityRes.community_view.community.ap_id), c => c.community?.community.id != undefined, ); let betaCommunity = resolvedCommunity.community; - expect(betaCommunity?.community.actor_id).toBe( - communityRes.community_view.community.actor_id, + expect(betaCommunity?.community.ap_id).toBe( + communityRes.community_view.community.ap_id, ); await longDelay(); @@ -530,7 +527,7 @@ test("Content in local-only community doesn't federate", async () => { // cant resolve the community from another instance await expect( - resolveCommunity(beta, communityRes.actor_id), + resolveCommunity(beta, communityRes.ap_id), ).rejects.toStrictEqual(Error("not_found")); // create a post, also cant resolve it @@ -545,7 +542,7 @@ test("Remote mods can edit communities", async () => { let betaCommunity = await resolveCommunity( beta, - communityRes.community_view.community.actor_id, + communityRes.community_view.community.ap_id, ); if (!betaCommunity.community) { throw "Missing beta community"; @@ -584,7 +581,7 @@ test("Community name with non-ascii chars", async () => { let betaCommunity1 = await resolveCommunity( beta, - communityRes.community_view.community.actor_id, + communityRes.community_view.community.ap_id, ); expect(betaCommunity1.community!.community.name).toBe(name); diff --git a/api_tests/src/image.spec.ts b/api_tests/src/image.spec.ts index b5cc72fe0..b1cf321d4 100644 --- a/api_tests/src/image.spec.ts +++ b/api_tests/src/image.spec.ts @@ -75,7 +75,7 @@ test("Upload image and delete it", async () => { expect(listAllMediaRes.images.length).toBe(previousThumbnails); // Make sure the uploader is correct - expect(listMediaRes.images[0].person.actor_id).toBe( + expect(listMediaRes.images[0].person.ap_id).toBe( `http://lemmy-alpha:8541/u/lemmy_alpha`, ); @@ -268,7 +268,7 @@ test("No image proxying if setting is disabled", async () => { let community = await createCommunity(alpha); let betaCommunity = await resolveCommunity( beta, - community.community_view.community.actor_id, + community.community_view.community.ap_id, ); await followCommunity(beta, true, betaCommunity.community!.community.id); diff --git a/api_tests/src/post.spec.ts b/api_tests/src/post.spec.ts index a1a089d03..18419cf26 100644 --- a/api_tests/src/post.spec.ts +++ b/api_tests/src/post.spec.ts @@ -39,14 +39,12 @@ import { listReports, getMyUser, listInbox, - allowInstance, } from "./shared"; import { PostView } from "lemmy-js-client/dist/types/PostView"; import { AdminBlockInstanceParams } from "lemmy-js-client/dist/types/AdminBlockInstanceParams"; import { AddModToCommunity, EditSite, - LemmyHttp, PersonPostMentionView, PostReport, PostReportView, @@ -98,7 +96,7 @@ async function assertPostFederation( expect(postOne?.post.embed_description).toBe(postTwo?.post.embed_description); expect(postOne?.post.embed_video_url).toBe(postTwo?.post.embed_video_url); expect(postOne?.post.published).toBe(postTwo?.post.published); - expect(postOne?.community.actor_id).toBe(postTwo?.community.actor_id); + expect(postOne?.community.ap_id).toBe(postTwo?.community.ap_id); expect(postOne?.post.locked).toBe(postTwo?.post.locked); expect(postOne?.post.removed).toBe(postTwo?.post.removed); expect(postOne?.post.deleted).toBe(postTwo?.post.deleted); @@ -262,7 +260,7 @@ test("Collection of featured posts gets federated", async () => { // fetch the community, ensure that post is also fetched and marked as featured let betaCommunity = await resolveCommunity( beta, - community.community_view.community.actor_id, + community.community_view.community.ap_id, ); expect(betaCommunity).toBeDefined(); @@ -368,7 +366,7 @@ test("Remove a post from admin and community on different instance", async () => } let gammaCommunity = ( - await resolveCommunity(gamma, betaCommunity.community.actor_id) + await resolveCommunity(gamma, betaCommunity.community.ap_id) ).community?.community; if (!gammaCommunity) { throw "Missing gamma community"; @@ -407,7 +405,7 @@ test("Remove a post from admin and community on same instance", async () => { await followBeta(alpha); let gammaCommunity = await resolveCommunity( gamma, - betaCommunity.community.actor_id, + betaCommunity.community.ap_id, ); let postRes = await createPost(gamma, gammaCommunity.community!.community.id); expect(postRes.post_view.post).toBeDefined(); @@ -469,7 +467,7 @@ test("Enforce site ban federation for local user", async () => { // create a test user let alphaUserHttp = await registerUser(alpha, alphaUrl); let alphaUserPerson = (await getMyUser(alphaUserHttp)).local_user_view.person; - let alphaUserActorId = alphaUserPerson?.actor_id; + let alphaUserActorId = alphaUserPerson?.ap_id; if (!alphaUserActorId) { throw "Missing alpha user actor id"; } @@ -549,7 +547,7 @@ test("Enforce site ban federation for federated user", async () => { // create a test user let alphaUserHttp = await registerUser(alpha, alphaUrl); let alphaUserPerson = (await getMyUser(alphaUserHttp)).local_user_view.person; - let alphaUserActorId = alphaUserPerson?.actor_id; + let alphaUserActorId = alphaUserPerson?.ap_id; if (!alphaUserActorId) { throw "Missing alpha user actor id"; } diff --git a/api_tests/src/private_community.spec.ts b/api_tests/src/private_community.spec.ts index 65340a1dd..abe5336ad 100644 --- a/api_tests/src/private_community.spec.ts +++ b/api_tests/src/private_community.spec.ts @@ -47,7 +47,7 @@ test("Follow a private community", async () => { // follow as new user const user = await registerUser(beta, betaUrl); const betaCommunity = ( - await resolveCommunity(user, community.community_view.community.actor_id) + await resolveCommunity(user, community.community_view.community.ap_id) ).community; expect(betaCommunity).toBeDefined(); expect(betaCommunity?.community.visibility).toBe("Private"); @@ -134,7 +134,7 @@ test("Only followers can view and interact with private community content", asyn // user is not following the community and cannot view nor create posts const user = await registerUser(beta, betaUrl); const betaCommunity = ( - await resolveCommunity(user, community.community_view.community.actor_id) + await resolveCommunity(user, community.community_view.community.ap_id) ).community!.community; await expect(resolvePost(user, post0.post_view.post)).rejects.toStrictEqual( Error("not_found"), @@ -179,7 +179,7 @@ test("Reject follower", async () => { // user is not following the community and cannot view nor create posts const user = await registerUser(beta, betaUrl); const betaCommunity1 = ( - await resolveCommunity(user, community.community_view.community.actor_id) + await resolveCommunity(user, community.community_view.community.ap_id) ).community!.community; // follow the community and reject @@ -216,7 +216,7 @@ test("Follow a private community and receive activities", async () => { // follow with users from beta and gamma const betaCommunity = ( - await resolveCommunity(beta, community.community_view.community.actor_id) + await resolveCommunity(beta, community.community_view.community.ap_id) ).community; expect(betaCommunity).toBeDefined(); const betaCommunityId = betaCommunity!.community.id; @@ -228,7 +228,7 @@ test("Follow a private community and receive activities", async () => { await approveFollower(alpha, alphaCommunityId); const gammaCommunityId = ( - await resolveCommunity(gamma, community.community_view.community.actor_id) + await resolveCommunity(gamma, community.community_view.community.ap_id) ).community!.community.id; const follow_form_gamma: FollowCommunity = { community_id: gammaCommunityId, @@ -281,7 +281,7 @@ test("Fetch remote content in private community", async () => { const alphaCommunityId = community.community_view.community.id; const betaCommunityId = ( - await resolveCommunity(beta, community.community_view.community.actor_id) + await resolveCommunity(beta, community.community_view.community.ap_id) ).community!.community.id; const follow_form_beta: FollowCommunity = { community_id: betaCommunityId, @@ -312,7 +312,7 @@ test("Fetch remote content in private community", async () => { // create gamma user const gammaCommunityId = ( - await resolveCommunity(gamma, community.community_view.community.actor_id) + await resolveCommunity(gamma, community.community_view.community.ap_id) ).community!.community.id; const follow_form: FollowCommunity = { community_id: gammaCommunityId, diff --git a/api_tests/src/shared.ts b/api_tests/src/shared.ts index 6ea944c20..a79bf8655 100644 --- a/api_tests/src/shared.ts +++ b/api_tests/src/shared.ts @@ -83,6 +83,7 @@ import { GetPosts } from "lemmy-js-client/dist/types/GetPosts"; import { GetPersonDetailsResponse } from "lemmy-js-client/dist/types/GetPersonDetailsResponse"; import { GetPersonDetails } from "lemmy-js-client/dist/types/GetPersonDetails"; import { ListingType } from "lemmy-js-client/dist/types/ListingType"; +import { GetCommunityPendingFollowsCountI } from "lemmy-js-client/dist/other_types"; export const fetchFunction = fetch; export const imageFetchLimit = 50; @@ -882,7 +883,8 @@ export function getCommunityPendingFollowsCount( api: LemmyHttp, community_id: CommunityId, ): Promise { - return api.getCommunityPendingFollowsCount(community_id); + let form: GetCommunityPendingFollowsCountI = { community_id }; + return api.getCommunityPendingFollowsCount(form); } export function approveCommunityPendingFollow( diff --git a/api_tests/src/user.spec.ts b/api_tests/src/user.spec.ts index edb8a4c83..15d972aa0 100644 --- a/api_tests/src/user.spec.ts +++ b/api_tests/src/user.spec.ts @@ -41,7 +41,7 @@ function assertUserFederation(userOne?: PersonView, userTwo?: PersonView) { expect(userOne?.person.name).toBe(userTwo?.person.name); expect(userOne?.person.display_name).toBe(userTwo?.person.display_name); expect(userOne?.person.bio).toBe(userTwo?.person.bio); - expect(userOne?.person.actor_id).toBe(userTwo?.person.actor_id); + expect(userOne?.person.ap_id).toBe(userTwo?.person.ap_id); expect(userOne?.person.avatar).toBe(userTwo?.person.avatar); expect(userOne?.person.banner).toBe(userTwo?.person.banner); expect(userOne?.person.published).toBe(userTwo?.person.published); diff --git a/crates/api_common/src/utils.rs b/crates/api_common/src/utils.rs index d90c04b70..dcad1e53f 100644 --- a/crates/api_common/src/utils.rs +++ b/crates/api_common/src/utils.rs @@ -568,7 +568,7 @@ pub async fn send_application_approved_email( .clone() .ok_or(LemmyErrorType::EmailRequired)?; let lang = get_interface_language(user); - let subject = lang.registration_approved_subject(&user.person.actor_id); + let subject = lang.registration_approved_subject(&user.person.ap_id); let body = lang.registration_approved_body(&settings.hostname); send_email(&subject, email, &user.person.name, &body, settings).await } @@ -633,14 +633,14 @@ pub fn check_private_instance_and_federation_enabled(local_site: &LocalSite) -> } } -/// Read the site for an actor_id. +/// Read the site for an ap_id. /// /// Used for GetCommunityResponse and GetPersonDetails pub async fn read_site_for_actor( - actor_id: DbUrl, + ap_id: DbUrl, context: &LemmyContext, ) -> LemmyResult> { - let site_id = Site::instance_actor_id_from_url(actor_id.clone().into()); + let site_id = Site::instance_ap_id_from_url(ap_id.clone().into()); let site = Site::read_from_apub_id(&mut context.pool(), &site_id.into()).await?; Ok(site) } @@ -979,8 +979,8 @@ pub fn generate_local_apub_endpoint( Ok(Url::parse(&format!("{domain}/{point}/{name}"))?.into()) } -pub fn generate_followers_url(actor_id: &DbUrl) -> Result { - Ok(Url::parse(&format!("{actor_id}/followers"))?.into()) +pub fn generate_followers_url(ap_id: &DbUrl) -> Result { + Ok(Url::parse(&format!("{ap_id}/followers"))?.into()) } pub fn generate_inbox_url() -> LemmyResult { @@ -988,12 +988,12 @@ pub fn generate_inbox_url() -> LemmyResult { Ok(Url::parse(&url)?.into()) } -pub fn generate_outbox_url(actor_id: &DbUrl) -> Result { - Ok(Url::parse(&format!("{actor_id}/outbox"))?.into()) +pub fn generate_outbox_url(ap_id: &DbUrl) -> Result { + Ok(Url::parse(&format!("{ap_id}/outbox"))?.into()) } -pub fn generate_featured_url(actor_id: &DbUrl) -> Result { - Ok(Url::parse(&format!("{actor_id}/featured"))?.into()) +pub fn generate_featured_url(ap_id: &DbUrl) -> Result { + Ok(Url::parse(&format!("{ap_id}/featured"))?.into()) } pub fn generate_moderators_url(community_id: &DbUrl) -> LemmyResult { diff --git a/crates/api_crud/src/community/create.rs b/crates/api_crud/src/community/create.rs index 796badb4c..93d68a871 100644 --- a/crates/api_crud/src/community/create.rs +++ b/crates/api_crud/src/community/create.rs @@ -81,14 +81,13 @@ pub async fn create_community( check_community_visibility_allowed(data.visibility, &local_user_view)?; - // Double check for duplicate community actor_ids - let community_actor_id = generate_local_apub_endpoint( + // Double check for duplicate community ap_ids + let community_ap_id = generate_local_apub_endpoint( EndpointType::Community, &data.name, &context.settings().get_protocol_and_hostname(), )?; - let community_dupe = - Community::read_from_apub_id(&mut context.pool(), &community_actor_id).await?; + let community_dupe = Community::read_from_apub_id(&mut context.pool(), &community_ap_id).await?; if community_dupe.is_some() { Err(LemmyErrorType::CommunityAlreadyExists)? } @@ -100,9 +99,9 @@ pub async fn create_community( sidebar, description, nsfw: data.nsfw, - actor_id: Some(community_actor_id.clone()), + ap_id: Some(community_ap_id.clone()), private_key: Some(keypair.private_key), - followers_url: Some(generate_followers_url(&community_actor_id)?), + followers_url: Some(generate_followers_url(&community_ap_id)?), inbox_url: Some(generate_inbox_url()?), posting_restricted_to_mods: data.posting_restricted_to_mods, visibility: data.visibility, diff --git a/crates/api_crud/src/site/create.rs b/crates/api_crud/src/site/create.rs index 655b8f5c7..dd1bfe7e0 100644 --- a/crates/api_crud/src/site/create.rs +++ b/crates/api_crud/src/site/create.rs @@ -53,7 +53,7 @@ pub async fn create_site( validate_create_payload(&local_site, &data)?; - let actor_id: DbUrl = Url::parse(&context.settings().get_protocol_and_hostname())?.into(); + let ap_id: DbUrl = Url::parse(&context.settings().get_protocol_and_hostname())?.into(); let inbox_url = Some(generate_inbox_url()?); let keypair = generate_actor_keypair()?; @@ -65,7 +65,7 @@ pub async fn create_site( name: Some(data.name.clone()), sidebar: diesel_string_update(sidebar.as_deref()), description: diesel_string_update(data.description.as_deref()), - actor_id: Some(actor_id), + ap_id: Some(ap_id), last_refreshed_at: Some(Utc::now()), inbox_url, private_key: Some(Some(keypair.private_key)), diff --git a/crates/api_crud/src/user/create.rs b/crates/api_crud/src/user/create.rs index d03169694..ed4f3cbb5 100644 --- a/crates/api_crud/src/user/create.rs +++ b/crates/api_crud/src/user/create.rs @@ -414,7 +414,7 @@ async fn create_person( ) -> Result { let actor_keypair = generate_actor_keypair()?; is_valid_actor_name(&username, local_site.actor_name_max_length as usize)?; - let actor_id = generate_local_apub_endpoint( + let ap_id = generate_local_apub_endpoint( EndpointType::Person, &username, &context.settings().get_protocol_and_hostname(), @@ -422,7 +422,7 @@ async fn create_person( // Register the new person let person_form = PersonInsertForm { - actor_id: Some(actor_id.clone()), + ap_id: Some(ap_id.clone()), inbox_url: Some(generate_inbox_url()?), private_key: Some(actor_keypair.private_key), ..PersonInsertForm::new(username.clone(), actor_keypair.public_key, instance_id) diff --git a/crates/apub/src/activities/block/mod.rs b/crates/apub/src/activities/block/mod.rs index 11cdc62fa..0d635e09d 100644 --- a/crates/apub/src/activities/block/mod.rs +++ b/crates/apub/src/activities/block/mod.rs @@ -110,8 +110,8 @@ impl Object for SiteOrCommunity { impl SiteOrCommunity { fn id(&self) -> ObjectId { match self { - SiteOrCommunity::Site(s) => ObjectId::from(s.actor_id.clone()), - SiteOrCommunity::Community(c) => ObjectId::from(c.actor_id.clone()), + SiteOrCommunity::Site(s) => ObjectId::from(s.ap_id.clone()), + SiteOrCommunity::Community(c) => ObjectId::from(c.ap_id.clone()), } } } @@ -121,7 +121,7 @@ async fn generate_cc(target: &SiteOrCommunity, pool: &mut DbPool<'_>) -> LemmyRe SiteOrCommunity::Site(_) => Site::read_remote_sites(pool) .await? .into_iter() - .map(|s| s.actor_id.into()) + .map(|s| s.ap_id.into()) .collect(), SiteOrCommunity::Community(c) => vec![c.id()], }) diff --git a/crates/apub/src/activities/community/announce.rs b/crates/apub/src/activities/community/announce.rs index 25f7f77f1..d78ead935 100644 --- a/crates/apub/src/activities/community/announce.rs +++ b/crates/apub/src/activities/community/announce.rs @@ -62,13 +62,13 @@ impl ActivityHandler for RawAnnouncableActivities { // verify and receive activity activity.verify(context).await?; - let actor_id = activity.actor().clone().into(); + let ap_id = activity.actor().clone().into(); activity.receive(context).await?; // if community is local, send activity to followers if let Some(community) = community { if community.local { - verify_person_in_community(&actor_id, &community, context).await?; + verify_person_in_community(&ap_id, &community, context).await?; AnnounceActivity::send(self, &community, context).await?; } } diff --git a/crates/apub/src/activities/community/collection_add.rs b/crates/apub/src/activities/community/collection_add.rs index e1b087140..8edfb3583 100644 --- a/crates/apub/src/activities/community/collection_add.rs +++ b/crates/apub/src/activities/community/collection_add.rs @@ -55,7 +55,7 @@ impl CollectionAdd { actor: actor.id().into(), to: generate_to(community)?, object: added_mod.id(), - target: generate_moderators_url(&community.actor_id)?.into(), + target: generate_moderators_url(&community.ap_id)?.into(), cc: vec![community.id()], kind: AddType::Add, id: id.clone(), @@ -80,7 +80,7 @@ impl CollectionAdd { actor: actor.id().into(), to: generate_to(community)?, object: featured_post.ap_id.clone().into(), - target: generate_featured_url(&community.actor_id)?.into(), + target: generate_featured_url(&community.ap_id)?.into(), cc: vec![community.id()], kind: AddType::Add, id: id.clone(), diff --git a/crates/apub/src/activities/community/collection_remove.rs b/crates/apub/src/activities/community/collection_remove.rs index 596d90bcb..a5d5e4616 100644 --- a/crates/apub/src/activities/community/collection_remove.rs +++ b/crates/apub/src/activities/community/collection_remove.rs @@ -50,7 +50,7 @@ impl CollectionRemove { actor: actor.id().into(), to: generate_to(community)?, object: removed_mod.id(), - target: generate_moderators_url(&community.actor_id)?.into(), + target: generate_moderators_url(&community.ap_id)?.into(), id: id.clone(), cc: vec![community.id()], kind: RemoveType::Remove, @@ -75,7 +75,7 @@ impl CollectionRemove { actor: actor.id().into(), to: generate_to(community)?, object: featured_post.ap_id.clone().into(), - target: generate_featured_url(&community.actor_id)?.into(), + target: generate_featured_url(&community.ap_id)?.into(), cc: vec![community.id()], kind: RemoveType::Remove, id: id.clone(), diff --git a/crates/apub/src/activities/community/lock_page.rs b/crates/apub/src/activities/community/lock_page.rs index 412711c6b..d22ef74d1 100644 --- a/crates/apub/src/activities/community/lock_page.rs +++ b/crates/apub/src/activities/community/lock_page.rs @@ -135,9 +135,9 @@ pub(crate) async fn send_lock_post( LockType::Lock, &context.settings().get_protocol_and_hostname(), )?; - let community_id = community.actor_id.inner().clone(); + let community_id = community.ap_id.inner().clone(); let lock = LockPage { - actor: actor.actor_id.clone().into(), + actor: actor.ap_id.clone().into(), to: generate_to(&community)?, object: ObjectId::from(post.ap_id), cc: vec![community_id.clone()], diff --git a/crates/apub/src/activities/community/update.rs b/crates/apub/src/activities/community/update.rs index 3904b7575..5de47089f 100644 --- a/crates/apub/src/activities/community/update.rs +++ b/crates/apub/src/activities/community/update.rs @@ -80,7 +80,7 @@ impl ActivityHandler for UpdateCommunity { verify_visibility(&self.to, &self.cc, &community)?; verify_person_in_community(&self.actor, &community, context).await?; verify_mod_action(&self.actor, &community, context).await?; - ApubCommunity::verify(&self.object, &community.actor_id.clone().into(), context).await?; + ApubCommunity::verify(&self.object, &community.ap_id.clone().into(), context).await?; Ok(()) } @@ -98,7 +98,7 @@ impl ActivityHandler for UpdateCommunity { published: self.object.published, updated: Some(self.object.updated), nsfw: Some(self.object.sensitive.unwrap_or(false)), - actor_id: Some(self.object.id.into()), + ap_id: Some(self.object.id.into()), public_key: Some(self.object.public_key.public_key_pem), last_refreshed_at: Some(Utc::now()), icon: Some(self.object.icon.map(|i| i.url.into())), diff --git a/crates/apub/src/activities/deletion/delete.rs b/crates/apub/src/activities/deletion/delete.rs index d154a7da6..9ad30d93a 100644 --- a/crates/apub/src/activities/deletion/delete.rs +++ b/crates/apub/src/activities/deletion/delete.rs @@ -91,9 +91,9 @@ impl Delete { DeleteType::Delete, &context.settings().get_protocol_and_hostname(), )?; - let cc: Option = community.map(|c| c.actor_id.clone().into()); + let cc: Option = community.map(|c| c.ap_id.clone().into()); Ok(Delete { - actor: actor.actor_id.clone().into(), + actor: actor.ap_id.clone().into(), to, object: IdOrNestedObject::Id(object.id()), cc: cc.into_iter().collect(), diff --git a/crates/apub/src/activities/deletion/mod.rs b/crates/apub/src/activities/deletion/mod.rs index c316f4abe..c95d1086c 100644 --- a/crates/apub/src/activities/deletion/mod.rs +++ b/crates/apub/src/activities/deletion/mod.rs @@ -180,7 +180,7 @@ pub(in crate::activities) async fn verify_delete_activity( DeletableObjects::Person(person) => { verify_is_public(&activity.to, &[])?; verify_person(&activity.actor, context).await?; - verify_urls_match(person.actor_id.inner(), activity.object.id())?; + verify_urls_match(person.ap_id.inner(), activity.object.id())?; } DeletableObjects::Post(p) => { let community = activity.community(context).await?; diff --git a/crates/apub/src/activities/deletion/undo_delete.rs b/crates/apub/src/activities/deletion/undo_delete.rs index e91b6e335..6badff6bc 100644 --- a/crates/apub/src/activities/deletion/undo_delete.rs +++ b/crates/apub/src/activities/deletion/undo_delete.rs @@ -77,9 +77,9 @@ impl UndoDelete { UndoType::Undo, &context.settings().get_protocol_and_hostname(), )?; - let cc: Option = community.map(|c| c.actor_id.clone().into()); + let cc: Option = community.map(|c| c.ap_id.clone().into()); Ok(UndoDelete { - actor: actor.actor_id.clone().into(), + actor: actor.ap_id.clone().into(), to, object, cc: cc.into_iter().collect(), diff --git a/crates/apub/src/activities/following/mod.rs b/crates/apub/src/activities/following/mod.rs index 83cdc841c..db4cb0143 100644 --- a/crates/apub/src/activities/following/mod.rs +++ b/crates/apub/src/activities/following/mod.rs @@ -47,9 +47,9 @@ pub async fn send_accept_or_reject_follow( let person = Person::read(&mut context.pool(), person_id).await?; let follow = Follow { - actor: person.actor_id.into(), - to: Some([community.actor_id.clone().into()]), - object: community.actor_id.into(), + actor: person.ap_id.into(), + to: Some([community.ap_id.clone().into()]), + object: community.ap_id.into(), kind: FollowType::Follow, id: generate_activity_id( FollowType::Follow, diff --git a/crates/apub/src/activities/mod.rs b/crates/apub/src/activities/mod.rs index 4a284aa7b..ea08ac956 100644 --- a/crates/apub/src/activities/mod.rs +++ b/crates/apub/src/activities/mod.rs @@ -82,7 +82,7 @@ pub(crate) async fn verify_person_in_community( let person = person_id.dereference(context).await?; if person.banned { Err(FederationError::PersonIsBannedFromSite( - person.actor_id.to_string(), + person.ap_id.to_string(), ))? } let person_id = person.id; @@ -103,7 +103,7 @@ pub(crate) async fn verify_mod_action( // mod action comes from the same instance as the community, so it was presumably done // by an instance admin. // TODO: federate instance admin status and check it here - if mod_id.inner().domain() == community.actor_id.domain() { + if mod_id.inner().domain() == community.ap_id.domain() { return Ok(()); } @@ -134,13 +134,13 @@ pub(crate) fn verify_visibility(to: &[Url], cc: &[Url], community: &Community) - /// Marks object as public only if the community is public pub(crate) fn generate_to(community: &Community) -> LemmyResult> { - let actor_id = community.actor_id.clone().into(); + let ap_id = community.ap_id.clone().into(); if community.visibility == CommunityVisibility::Public { - Ok(vec![actor_id, public()]) + Ok(vec![ap_id, public()]) } else { Ok(vec![ - actor_id.clone(), - Url::parse(&format!("{}/followers", actor_id))?, + ap_id.clone(), + Url::parse(&format!("{}/followers", ap_id))?, ]) } } diff --git a/crates/apub/src/api/list_comments.rs b/crates/apub/src/api/list_comments.rs index a0b84e076..395428394 100644 --- a/crates/apub/src/api/list_comments.rs +++ b/crates/apub/src/api/list_comments.rs @@ -1,7 +1,7 @@ use super::comment_sort_type_with_default; use crate::{ api::listing_type_with_default, - fetcher::resolve_actor_identifier, + fetcher::resolve_ap_identifier, objects::community::ApubCommunity, }; use activitypub_federation::config::Data; @@ -32,7 +32,7 @@ async fn list_comments_common( let community_id = if let Some(name) = &data.community_name { Some( - resolve_actor_identifier::(name, &context, &local_user_view, true) + resolve_ap_identifier::(name, &context, &local_user_view, true) .await?, ) .map(|c| c.id) diff --git a/crates/apub/src/api/list_posts.rs b/crates/apub/src/api/list_posts.rs index 8a18201b8..e7942502a 100644 --- a/crates/apub/src/api/list_posts.rs +++ b/crates/apub/src/api/list_posts.rs @@ -1,6 +1,6 @@ use crate::{ api::{listing_type_with_default, post_sort_type_with_default}, - fetcher::resolve_actor_identifier, + fetcher::resolve_ap_identifier, objects::community::ApubCommunity, }; use activitypub_federation::config::Data; @@ -33,7 +33,7 @@ pub async fn list_posts( let limit = data.limit; let community_id = if let Some(name) = &data.community_name { Some( - resolve_actor_identifier::(name, &context, &local_user_view, true) + resolve_ap_identifier::(name, &context, &local_user_view, true) .await?, ) .map(|c| c.id) diff --git a/crates/apub/src/api/mod.rs b/crates/apub/src/api/mod.rs index 9359eabc4..f69ef4d6f 100644 --- a/crates/apub/src/api/mod.rs +++ b/crates/apub/src/api/mod.rs @@ -1,4 +1,4 @@ -use crate::{fetcher::resolve_actor_identifier, objects::person::ApubPerson}; +use crate::{fetcher::resolve_ap_identifier, objects::person::ApubPerson}; use activitypub_federation::config::Data; use lemmy_api_common::{context::LemmyContext, LemmyErrorType}; use lemmy_db_schema::{ @@ -83,7 +83,7 @@ async fn resolve_person_id_from_id_or_username( Some(id) => *id, None => { if let Some(username) = username { - resolve_actor_identifier::(username, context, local_user_view, true) + resolve_ap_identifier::(username, context, local_user_view, true) .await? .id } else { diff --git a/crates/apub/src/api/read_community.rs b/crates/apub/src/api/read_community.rs index b7a85f495..bebec90a2 100644 --- a/crates/apub/src/api/read_community.rs +++ b/crates/apub/src/api/read_community.rs @@ -1,4 +1,4 @@ -use crate::{fetcher::resolve_actor_identifier, objects::community::ApubCommunity}; +use crate::{fetcher::resolve_ap_identifier, objects::community::ApubCommunity}; use activitypub_federation::config::Data; use actix_web::web::{Json, Query}; use lemmy_api_common::{ @@ -33,7 +33,7 @@ pub async fn get_community( Some(id) => id, None => { let name = data.name.clone().unwrap_or_else(|| "main".to_string()); - resolve_actor_identifier::(&name, &context, &local_user_view, true) + resolve_ap_identifier::(&name, &context, &local_user_view, true) .await? .id } @@ -57,7 +57,7 @@ pub async fn get_community( let moderators = CommunityModeratorView::for_community(&mut context.pool(), community_id).await?; - let site = read_site_for_actor(community_view.community.actor_id.clone(), &context).await?; + let site = read_site_for_actor(community_view.community.ap_id.clone(), &context).await?; let community_id = community_view.community.id; let discussion_languages = CommunityLanguage::read(&mut context.pool(), community_id).await?; diff --git a/crates/apub/src/api/read_person.rs b/crates/apub/src/api/read_person.rs index d2b63d8a5..54eca0646 100644 --- a/crates/apub/src/api/read_person.rs +++ b/crates/apub/src/api/read_person.rs @@ -40,7 +40,7 @@ pub async fn read_person( ) .await?; - let site = read_site_for_actor(person_view.person.actor_id.clone(), &context).await?; + let site = read_site_for_actor(person_view.person.ap_id.clone(), &context).await?; Ok(Json(GetPersonDetailsResponse { person_view, diff --git a/crates/apub/src/api/search.rs b/crates/apub/src/api/search.rs index 2a7e573fb..29a0f9e78 100644 --- a/crates/apub/src/api/search.rs +++ b/crates/apub/src/api/search.rs @@ -1,4 +1,4 @@ -use crate::{fetcher::resolve_actor_identifier, objects::community::ApubCommunity}; +use crate::{fetcher::resolve_ap_identifier, objects::community::ApubCommunity}; use activitypub_federation::config::Data; use actix_web::web::{Json, Query}; use lemmy_api_common::{ @@ -25,7 +25,7 @@ pub async fn search( let community_id = if let Some(name) = &data.community_name { Some( - resolve_actor_identifier::(name, &context, &local_user_view, false) + resolve_ap_identifier::(name, &context, &local_user_view, false) .await?, ) .map(|c| c.id) diff --git a/crates/apub/src/api/user_settings_backup.rs b/crates/apub/src/api/user_settings_backup.rs index 84e7f7132..8bfeb813c 100644 --- a/crates/apub/src/api/user_settings_backup.rs +++ b/crates/apub/src/api/user_settings_backup.rs @@ -368,7 +368,7 @@ pub(crate) mod tests { let follows = CommunityFollowerView::for_person(pool, import_user.person.id).await?; assert_eq!(follows.len(), 1); - assert_eq!(follows[0].community.actor_id, community.actor_id); + assert_eq!(follows[0].community.ap_id, community.ap_id); Person::delete(pool, export_user.person.id).await?; Person::delete(pool, import_user.person.id).await?; diff --git a/crates/apub/src/collections/community_featured.rs b/crates/apub/src/collections/community_featured.rs index e092693e6..6e496d2fe 100644 --- a/crates/apub/src/collections/community_featured.rs +++ b/crates/apub/src/collections/community_featured.rs @@ -41,7 +41,7 @@ impl Collection for ApubCommunityFeatured { .await?; Ok(GroupFeatured { r#type: OrderedCollectionType::OrderedCollection, - id: generate_featured_url(&owner.actor_id)?.into(), + id: generate_featured_url(&owner.ap_id)?.into(), total_items: ordered_items.len() as i32, ordered_items, }) diff --git a/crates/apub/src/collections/community_follower.rs b/crates/apub/src/collections/community_follower.rs index 7293b2297..a95016c94 100644 --- a/crates/apub/src/collections/community_follower.rs +++ b/crates/apub/src/collections/community_follower.rs @@ -33,7 +33,7 @@ impl Collection for ApubCommunityFollower { CommunityFollowerView::count_community_followers(&mut context.pool(), community_id).await?; Ok(GroupFollowers { - id: generate_followers_url(&community.actor_id)?.into(), + id: generate_followers_url(&community.ap_id)?.into(), r#type: CollectionType::Collection, total_items: community_followers as i32, items: vec![], diff --git a/crates/apub/src/collections/community_moderators.rs b/crates/apub/src/collections/community_moderators.rs index 31987d308..f2c667bd9 100644 --- a/crates/apub/src/collections/community_moderators.rs +++ b/crates/apub/src/collections/community_moderators.rs @@ -32,11 +32,11 @@ impl Collection for ApubCommunityModerators { let moderators = CommunityModeratorView::for_community(&mut data.pool(), owner.id).await?; let ordered_items = moderators .into_iter() - .map(|m| ObjectId::::from(m.moderator.actor_id)) + .map(|m| ObjectId::::from(m.moderator.ap_id)) .collect(); Ok(GroupModerators { r#type: OrderedCollectionType::OrderedCollection, - id: generate_moderators_url(&owner.actor_id)?.into(), + id: generate_moderators_url(&owner.ap_id)?.into(), ordered_items, }) } @@ -60,7 +60,7 @@ impl Collection for ApubCommunityModerators { CommunityModeratorView::for_community(&mut data.pool(), community_id).await?; // Remove old mods from database which arent in the moderators collection anymore for mod_user in ¤t_moderators { - let mod_id = ObjectId::from(mod_user.moderator.actor_id.clone()); + let mod_id = ObjectId::from(mod_user.moderator.ap_id.clone()); if !apub.ordered_items.contains(&mod_id) { let community_moderator_form = CommunityModeratorForm { community_id: mod_user.community.id, @@ -77,8 +77,8 @@ impl Collection for ApubCommunityModerators { if let Some(mod_user) = mod_user { if !current_moderators .iter() - .map(|c| c.moderator.actor_id.clone()) - .any(|x| x == mod_user.actor_id) + .map(|c| c.moderator.ap_id.clone()) + .any(|x| x == mod_user.ap_id) { let community_moderator_form = CommunityModeratorForm { community_id: owner.id, @@ -136,7 +136,7 @@ mod tests { CommunityModerator::join(&mut context.pool(), &community_moderator_form).await?; - assert_eq!(site.actor_id.to_string(), "https://enterprise.lemmy.ml/"); + assert_eq!(site.ap_id.to_string(), "https://enterprise.lemmy.ml/"); let json: GroupModerators = file_to_json_object("assets/lemmy/collections/group_moderators.json")?; diff --git a/crates/apub/src/collections/community_outbox.rs b/crates/apub/src/collections/community_outbox.rs index f77e5a1e5..c015dc591 100644 --- a/crates/apub/src/collections/community_outbox.rs +++ b/crates/apub/src/collections/community_outbox.rs @@ -62,7 +62,7 @@ impl Collection for ApubCommunityOutbox { Ok(GroupOutbox { r#type: OrderedCollectionType::OrderedCollection, - id: generate_outbox_url(&owner.actor_id)?.into(), + id: generate_outbox_url(&owner.ap_id)?.into(), total_items: ordered_items.len() as i32, ordered_items, }) diff --git a/crates/apub/src/fetcher/markdown_links.rs b/crates/apub/src/fetcher/markdown_links.rs index a5e51caa7..dfee663cd 100644 --- a/crates/apub/src/fetcher/markdown_links.rs +++ b/crates/apub/src/fetcher/markdown_links.rs @@ -150,7 +150,7 @@ mod tests { ), ( "rewrite community link", - format!("[link]({})", community.actor_id), + format!("[link]({})", community.ap_id), "[link](https://lemmy-alpha/c/my_community@example.com)", ), ( diff --git a/crates/apub/src/fetcher/mod.rs b/crates/apub/src/fetcher/mod.rs index 45170612b..a6b2f24ca 100644 --- a/crates/apub/src/fetcher/mod.rs +++ b/crates/apub/src/fetcher/mod.rs @@ -20,7 +20,7 @@ pub mod user_or_community; /// /// In case the requesting user is logged in and the object was not found locally, it is attempted /// to fetch via webfinger from the original instance. -pub async fn resolve_actor_identifier( +pub async fn resolve_ap_identifier( identifier: &str, context: &Data, local_user_view: &Option, diff --git a/crates/apub/src/http/community.rs b/crates/apub/src/http/community.rs index 93575d826..8a6785a41 100644 --- a/crates/apub/src/http/community.rs +++ b/crates/apub/src/http/community.rs @@ -49,7 +49,7 @@ pub(crate) async fn get_apub_community_http( .into(); if community.deleted || community.removed { - return create_apub_tombstone_response(community.actor_id.clone()); + return create_apub_tombstone_response(community.ap_id.clone()); } check_community_fetchable(&community)?; diff --git a/crates/apub/src/http/person.rs b/crates/apub/src/http/person.rs index 84f63bf6a..ca1b3af65 100644 --- a/crates/apub/src/http/person.rs +++ b/crates/apub/src/http/person.rs @@ -32,7 +32,7 @@ pub(crate) async fn get_apub_person_http( create_apub_response(&apub) } else { - create_apub_tombstone_response(person.actor_id.clone()) + create_apub_tombstone_response(person.ap_id.clone()) } } @@ -43,7 +43,7 @@ pub(crate) async fn get_apub_person_outbox( let person = Person::read_from_name(&mut context.pool(), &info.user_name, false) .await? .ok_or(LemmyErrorType::NotFound)?; - let outbox_id = generate_outbox_url(&person.actor_id)?.into(); + let outbox_id = generate_outbox_url(&person.ap_id)?.into(); let outbox = EmptyOutbox::new(outbox_id)?; create_apub_response(&outbox) } diff --git a/crates/apub/src/mentions.rs b/crates/apub/src/mentions.rs index 9fe15771f..ecdf8c1a0 100644 --- a/crates/apub/src/mentions.rs +++ b/crates/apub/src/mentions.rs @@ -51,7 +51,7 @@ pub async fn collect_non_local_mentions( // Add the mention tag let parent_creator_tag = Mention { - href: parent_creator.actor_id.clone().into(), + href: parent_creator.ap_id.clone().into(), name: Some(format!( "@{}@{}", &parent_creator.name, @@ -74,7 +74,7 @@ pub async fn collect_non_local_mentions( let identifier = format!("{}@{}", mention.name, mention.domain); let person = webfinger_resolve_actor::(&identifier, context).await; if let Ok(person) = person { - addressed_ccs.push(person.actor_id.to_string().parse()?); + addressed_ccs.push(person.ap_id.to_string().parse()?); let mention_tag = Mention { href: person.id(), diff --git a/crates/apub/src/objects/comment.rs b/crates/apub/src/objects/comment.rs index 75bc0046a..fb13d377f 100644 --- a/crates/apub/src/objects/comment.rs +++ b/crates/apub/src/objects/comment.rs @@ -110,7 +110,7 @@ impl Object for ApubComment { let note = Note { r#type: NoteType::Note, id: self.ap_id.clone().into(), - attributed_to: creator.actor_id.into(), + attributed_to: creator.ap_id.into(), to: generate_to(&community)?, cc: maa.ccs, content: markdown_to_html(&self.content), diff --git a/crates/apub/src/objects/community.rs b/crates/apub/src/objects/community.rs index e2689c45d..7aa509ec8 100644 --- a/crates/apub/src/objects/community.rs +++ b/crates/apub/src/objects/community.rs @@ -109,9 +109,9 @@ impl Object for ApubCommunity { icon: self.icon.clone().map(ImageObject::new), image: self.banner.clone().map(ImageObject::new), sensitive: Some(self.nsfw), - featured: Some(generate_featured_url(&self.actor_id)?.into()), + featured: Some(generate_featured_url(&self.ap_id)?.into()), inbox: self.inbox_url.clone().into(), - outbox: generate_outbox_url(&self.actor_id)?.into(), + outbox: generate_outbox_url(&self.ap_id)?.into(), followers: self.followers_url.clone().map(Into::into), endpoints: None, public_key: self.public_key(), @@ -119,7 +119,7 @@ impl Object for ApubCommunity { published: Some(self.published), updated: self.updated, posting_restricted_to_mods: Some(self.posting_restricted_to_mods), - attributed_to: Some(generate_moderators_url(&self.actor_id)?.into()), + attributed_to: Some(generate_moderators_url(&self.ap_id)?.into()), manually_approves_followers: Some(self.visibility == CommunityVisibility::Private), }; Ok(group) @@ -156,7 +156,7 @@ impl Object for ApubCommunity { updated: group.updated, deleted: Some(false), nsfw: Some(group.sensitive.unwrap_or(false)), - actor_id: Some(group.id.into()), + ap_id: Some(group.id.into()), local: Some(false), last_refreshed_at: Some(Utc::now()), icon, @@ -214,7 +214,7 @@ impl Object for ApubCommunity { impl Actor for ApubCommunity { fn id(&self) -> Url { - self.actor_id.inner().clone() + self.ap_id.inner().clone() } fn public_key_pem(&self) -> &str { diff --git a/crates/apub/src/objects/instance.rs b/crates/apub/src/objects/instance.rs index 6b1b60f34..160ba1a9a 100644 --- a/crates/apub/src/objects/instance.rs +++ b/crates/apub/src/objects/instance.rs @@ -108,7 +108,7 @@ impl Object for ApubSite { icon: self.icon.clone().map(ImageObject::new), image: self.banner.clone().map(ImageObject::new), inbox: self.inbox_url.clone().into(), - outbox: Url::parse(&format!("{}site_outbox", self.actor_id))?, + outbox: Url::parse(&format!("{}site_outbox", self.ap_id))?, public_key: self.public_key(), language, content_warning: self.content_warning.clone(), @@ -159,7 +159,7 @@ impl Object for ApubSite { icon, banner, description: apub.summary, - actor_id: Some(apub.id.clone().into()), + ap_id: Some(apub.id.clone().into()), last_refreshed_at: Some(Utc::now()), inbox_url: Some(apub.inbox.clone().into()), public_key: Some(apub.public_key.public_key_pem.clone()), @@ -178,7 +178,7 @@ impl Object for ApubSite { impl Actor for ApubSite { fn id(&self) -> Url { - self.actor_id.inner().clone() + self.ap_id.inner().clone() } fn public_key_pem(&self) -> &str { @@ -205,7 +205,7 @@ pub(in crate::objects) async fn fetch_instance_actor_for_object + C context: &Data, ) -> LemmyResult { let object_id: Url = object_id.clone().into(); - let instance_id = Site::instance_actor_id_from_url(object_id); + let instance_id = Site::instance_ap_id_from_url(object_id); let site = ObjectId::::from(instance_id.clone()) .dereference(context) .await; diff --git a/crates/apub/src/objects/person.rs b/crates/apub/src/objects/person.rs index 920a840b4..294ced4a2 100644 --- a/crates/apub/src/objects/person.rs +++ b/crates/apub/src/objects/person.rs @@ -100,7 +100,7 @@ impl Object for ApubPerson { let person = Person { kind, - id: self.actor_id.clone().into(), + id: self.ap_id.clone().into(), preferred_username: self.name.clone(), name: self.display_name.clone(), summary: self.bio.as_ref().map(|b| markdown_to_html(b)), @@ -109,7 +109,7 @@ impl Object for ApubPerson { image: self.banner.clone().map(ImageObject::new), matrix_user_id: self.matrix_user_id.clone(), published: Some(self.published), - outbox: generate_outbox_url(&self.actor_id)?.into(), + outbox: generate_outbox_url(&self.ap_id)?.into(), endpoints: None, public_key: self.public_key(), updated: self.updated, @@ -163,7 +163,7 @@ impl Object for ApubPerson { banner, published: person.published, updated: person.updated, - actor_id: Some(person.id.into()), + ap_id: Some(person.id.into()), bio, local: Some(false), bot_account: Some(person.kind == UserTypes::Service), @@ -188,7 +188,7 @@ impl Object for ApubPerson { impl Actor for ApubPerson { fn id(&self) -> Url { - self.actor_id.inner().clone() + self.ap_id.inner().clone() } fn public_key_pem(&self) -> &str { @@ -268,7 +268,7 @@ pub(crate) mod tests { ApubPerson::verify(&json, &url, &context).await?; let person = ApubPerson::from_json(json, &context).await?; - assert_eq!(person.actor_id, url.into()); + assert_eq!(person.ap_id, url.into()); assert_eq!(person.name, "lanodan"); assert!(!person.local); assert_eq!(context.request_count(), 0); diff --git a/crates/apub/src/objects/post.rs b/crates/apub/src/objects/post.rs index 38d331770..b196cbdf0 100644 --- a/crates/apub/src/objects/post.rs +++ b/crates/apub/src/objects/post.rs @@ -133,7 +133,7 @@ impl Object for ApubPost { let page = Page { kind: PageType::Page, id: self.ap_id.clone().into(), - attributed_to: AttributedTo::Lemmy(creator.actor_id.into()), + attributed_to: AttributedTo::Lemmy(creator.ap_id.into()), to: generate_to(&community)?, cc: vec![], name: Some(self.name.clone()), diff --git a/crates/apub/src/objects/private_message.rs b/crates/apub/src/objects/private_message.rs index d732f0b06..ba86e41f5 100644 --- a/crates/apub/src/objects/private_message.rs +++ b/crates/apub/src/objects/private_message.rs @@ -107,8 +107,8 @@ impl Object for ApubPrivateMessage { let note = PrivateMessage { kind, id: self.ap_id.clone().into(), - attributed_to: creator.actor_id.into(), - to: [recipient.actor_id.into()], + attributed_to: creator.ap_id.into(), + to: [recipient.ap_id.into()], content: markdown_to_html(&self.content), media_type: Some(MediaTypeHtml::Html), source: Some(Source::new(self.content.clone())), @@ -131,7 +131,7 @@ impl Object for ApubPrivateMessage { let person = note.attributed_to.dereference(context).await?; if person.banned { Err(FederationError::PersonIsBannedFromSite( - person.actor_id.to_string(), + person.ap_id.to_string(), ))? } else { Ok(()) diff --git a/crates/db_perf/src/main.rs b/crates/db_perf/src/main.rs index aac40d660..451d43c5c 100644 --- a/crates/db_perf/src/main.rs +++ b/crates/db_perf/src/main.rs @@ -192,7 +192,7 @@ fn site() -> LemmyResult { icon: None, banner: None, description: None, - actor_id: Url::parse("http://example.com")?.into(), + ap_id: Url::parse("http://example.com")?.into(), last_refreshed_at: Default::default(), inbox_url: Url::parse("http://example.com")?.into(), private_key: None, diff --git a/crates/db_schema/src/impls/community.rs b/crates/db_schema/src/impls/community.rs index b4748d196..66f8b98cc 100644 --- a/crates/db_schema/src/impls/community.rs +++ b/crates/db_schema/src/impls/community.rs @@ -133,7 +133,7 @@ impl Community { timestamp: DateTime, form: &CommunityInsertForm, ) -> Result { - let is_new_community = match &form.actor_id { + let is_new_community = match &form.ap_id { Some(id) => Community::read_from_apub_id(pool, id).await?.is_none(), None => true, }; @@ -142,7 +142,7 @@ impl Community { // Can't do separate insert/update commands because InsertForm/UpdateForm aren't convertible let community_ = insert_into(community::table) .values(form) - .on_conflict(community::actor_id) + .on_conflict(community::ap_id) .filter_target(coalesce(community::updated, community::published).lt(timestamp)) .do_update() .set(form) @@ -500,7 +500,7 @@ impl ApubActor for Community { ) -> Result, Error> { let conn = &mut get_conn(pool).await?; community::table - .filter(community::actor_id.eq(object_id)) + .filter(community::ap_id.eq(object_id)) .first(conn) .await .optional() @@ -600,7 +600,7 @@ mod tests { deleted: false, published: inserted_community.published, updated: None, - actor_id: inserted_community.actor_id.clone(), + ap_id: inserted_community.ap_id.clone(), local: true, private_key: None, public_key: "pubkey".to_owned(), diff --git a/crates/db_schema/src/impls/local_user.rs b/crates/db_schema/src/impls/local_user.rs index e6c02ced1..fa3b82178 100644 --- a/crates/db_schema/src/impls/local_user.rs +++ b/crates/db_schema/src/impls/local_user.rs @@ -171,7 +171,7 @@ impl LocalUser { .filter(community_actions::followed.is_not_null()) .filter(community_actions::person_id.eq(person_id_)) .inner_join(community::table) - .select(community::actor_id) + .select(community::ap_id) .get_results(conn) .await?; @@ -195,7 +195,7 @@ impl LocalUser { .filter(community_actions::blocked.is_not_null()) .filter(community_actions::person_id.eq(person_id_)) .inner_join(community::table) - .select(community::actor_id) + .select(community::ap_id) .get_results(conn) .await?; @@ -203,7 +203,7 @@ impl LocalUser { .filter(person_actions::blocked.is_not_null()) .filter(person_actions::person_id.eq(person_id_)) .inner_join(person::table.on(person_actions::target_id.eq(person::id))) - .select(person::actor_id) + .select(person::ap_id) .get_results(conn) .await?; diff --git a/crates/db_schema/src/impls/person.rs b/crates/db_schema/src/impls/person.rs index 70e2f7f8d..cf1fd3a99 100644 --- a/crates/db_schema/src/impls/person.rs +++ b/crates/db_schema/src/impls/person.rs @@ -71,7 +71,7 @@ impl Person { let conn = &mut get_conn(pool).await?; insert_into(person::table) .values(form) - .on_conflict(person::actor_id) + .on_conflict(person::ap_id) .do_update() .set(form) .get_result::(conn) @@ -155,7 +155,7 @@ impl ApubActor for Person { let conn = &mut get_conn(pool).await?; person::table .filter(person::deleted.eq(false)) - .filter(person::actor_id.eq(object_id)) + .filter(person::ap_id.eq(object_id)) .first(conn) .await .optional() @@ -282,7 +282,7 @@ mod tests { deleted: false, published: inserted_person.published, updated: None, - actor_id: inserted_person.actor_id.clone(), + ap_id: inserted_person.ap_id.clone(), bio: None, local: true, bot_account: false, @@ -298,7 +298,7 @@ mod tests { let read_person = Person::read(pool, inserted_person.id).await?; let update_person_form = PersonUpdateForm { - actor_id: Some(inserted_person.actor_id.clone()), + ap_id: Some(inserted_person.ap_id.clone()), ..Default::default() }; let updated_person = Person::update(pool, inserted_person.id, &update_person_form).await?; diff --git a/crates/db_schema/src/impls/site.rs b/crates/db_schema/src/impls/site.rs index 7ab13b8e2..2368fa801 100644 --- a/crates/db_schema/src/impls/site.rs +++ b/crates/db_schema/src/impls/site.rs @@ -25,7 +25,7 @@ impl Crud for Site { } async fn create(pool: &mut DbPool<'_>, form: &Self::InsertForm) -> Result { - let is_new_site = match &form.actor_id { + let is_new_site = match &form.ap_id { Some(id_) => Site::read_from_apub_id(pool, id_).await?.is_none(), None => true, }; @@ -34,7 +34,7 @@ impl Crud for Site { // Can't do separate insert/update commands because InsertForm/UpdateForm aren't convertible let site_ = insert_into(site::table) .values(form) - .on_conflict(site::actor_id) + .on_conflict(site::ap_id) .do_update() .set(form) .get_result::(conn) @@ -80,7 +80,7 @@ impl Site { let conn = &mut get_conn(pool).await?; site::table - .filter(site::actor_id.eq(object_id)) + .filter(site::ap_id.eq(object_id)) .first(conn) .await .optional() @@ -97,7 +97,7 @@ impl Site { /// Instance actor is at the root path, so we simply need to clear the path and other unnecessary /// parts of the url. - pub fn instance_actor_id_from_url(mut url: Url) -> Url { + pub fn instance_ap_id_from_url(mut url: Url) -> Url { url.set_fragment(None); url.set_path(""); url.set_query(None); diff --git a/crates/db_schema/src/lib.rs b/crates/db_schema/src/lib.rs index c5fa14f5a..a9c918b7a 100644 --- a/crates/db_schema/src/lib.rs +++ b/crates/db_schema/src/lib.rs @@ -341,7 +341,7 @@ pub type Person1AliasAllColumnsTuple = ( AliasedField, AliasedField, AliasedField, - AliasedField, + AliasedField, AliasedField, AliasedField, AliasedField, diff --git a/crates/db_schema/src/schema.rs b/crates/db_schema/src/schema.rs index dea61bf4d..3fecdd737 100644 --- a/crates/db_schema/src/schema.rs +++ b/crates/db_schema/src/schema.rs @@ -199,7 +199,7 @@ diesel::table! { deleted -> Bool, nsfw -> Bool, #[max_length = 255] - actor_id -> Varchar, + ap_id -> Varchar, local -> Bool, private_key -> Nullable, public_key -> Text, @@ -745,7 +745,7 @@ diesel::table! { published -> Timestamptz, updated -> Nullable, #[max_length = 255] - actor_id -> Varchar, + ap_id -> Varchar, bio -> Nullable, local -> Bool, private_key -> Nullable, @@ -1046,7 +1046,7 @@ diesel::table! { #[max_length = 150] description -> Nullable, #[max_length = 255] - actor_id -> Varchar, + ap_id -> Varchar, last_refreshed_at -> Timestamptz, #[max_length = 255] inbox_url -> Varchar, diff --git a/crates/db_schema/src/source/community.rs b/crates/db_schema/src/source/community.rs index 92dc3c16a..f5dbd6915 100644 --- a/crates/db_schema/src/source/community.rs +++ b/crates/db_schema/src/source/community.rs @@ -39,8 +39,8 @@ pub struct Community { pub deleted: bool, /// Whether its an NSFW community. pub nsfw: bool, - /// The federated actor_id. - pub actor_id: DbUrl, + /// The federated ap_id. + pub ap_id: DbUrl, /// Whether the community is local. pub local: bool, #[serde(skip)] @@ -101,7 +101,7 @@ pub struct CommunityInsertForm { #[new(default)] pub nsfw: Option, #[new(default)] - pub actor_id: Option, + pub ap_id: Option, #[new(default)] pub local: Option, #[new(default)] @@ -141,7 +141,7 @@ pub struct CommunityUpdateForm { pub updated: Option>>, pub deleted: Option, pub nsfw: Option, - pub actor_id: Option, + pub ap_id: Option, pub local: Option, pub public_key: Option, pub private_key: Option>, diff --git a/crates/db_schema/src/source/person.rs b/crates/db_schema/src/source/person.rs index 9c2a2d426..49f9cd1b8 100644 --- a/crates/db_schema/src/source/person.rs +++ b/crates/db_schema/src/source/person.rs @@ -34,8 +34,8 @@ pub struct Person { pub published: DateTime, #[cfg_attr(feature = "full", ts(optional))] pub updated: Option>, - /// The federated actor_id. - pub actor_id: DbUrl, + /// The federated ap_id. + pub ap_id: DbUrl, /// An optional bio, in markdown. #[cfg_attr(feature = "full", ts(optional))] pub bio: Option, @@ -84,7 +84,7 @@ pub struct PersonInsertForm { #[new(default)] pub updated: Option>, #[new(default)] - pub actor_id: Option, + pub ap_id: Option, #[new(default)] pub bio: Option, #[new(default)] @@ -115,7 +115,7 @@ pub struct PersonUpdateForm { pub avatar: Option>, pub banned: Option, pub updated: Option>>, - pub actor_id: Option, + pub ap_id: Option, pub bio: Option>, pub local: Option, pub public_key: Option, diff --git a/crates/db_schema/src/source/site.rs b/crates/db_schema/src/source/site.rs index 0fe33de01..e438e74b4 100644 --- a/crates/db_schema/src/source/site.rs +++ b/crates/db_schema/src/source/site.rs @@ -35,8 +35,8 @@ pub struct Site { /// A shorter, one-line description of the site. #[cfg_attr(feature = "full", ts(optional))] pub description: Option, - /// The federated actor_id. - pub actor_id: DbUrl, + /// The federated ap_id. + pub ap_id: DbUrl, /// The time the site was last refreshed. pub last_refreshed_at: DateTime, /// The site inbox @@ -69,7 +69,7 @@ pub struct SiteInsertForm { #[new(default)] pub description: Option, #[new(default)] - pub actor_id: Option, + pub ap_id: Option, #[new(default)] pub last_refreshed_at: Option>, #[new(default)] @@ -94,7 +94,7 @@ pub struct SiteUpdateForm { pub icon: Option>, pub banner: Option>, pub description: Option>, - pub actor_id: Option, + pub ap_id: Option, pub last_refreshed_at: Option>, pub inbox_url: Option, pub private_key: Option>, diff --git a/crates/db_views/src/comment/comment_view.rs b/crates/db_views/src/comment/comment_view.rs index 2fac1d420..8b2794217 100644 --- a/crates/db_views/src/comment/comment_view.rs +++ b/crates/db_views/src/comment/comment_view.rs @@ -917,7 +917,7 @@ mod tests { display_name: None, published: data.timmy_local_user_view.person.published, avatar: None, - actor_id: data.timmy_local_user_view.person.actor_id.clone(), + ap_id: data.timmy_local_user_view.person.ap_id.clone(), local: true, banned: false, deleted: false, @@ -966,7 +966,7 @@ mod tests { removed: false, deleted: false, nsfw: false, - actor_id: data.inserted_community.actor_id.clone(), + ap_id: data.inserted_community.ap_id.clone(), local: true, title: "nada".to_owned(), sidebar: None, diff --git a/crates/db_views/src/community/community_view.rs b/crates/db_views/src/community/community_view.rs index 2728d0926..332c407fd 100644 --- a/crates/db_views/src/community/community_view.rs +++ b/crates/db_views/src/community/community_view.rs @@ -280,7 +280,7 @@ mod tests { icon: None, banner: None, description: None, - actor_id: url.clone().into(), + ap_id: url.clone().into(), last_refreshed_at: Default::default(), inbox_url: url.into(), private_key: None, diff --git a/crates/db_views/src/post/post_view.rs b/crates/db_views/src/post/post_view.rs index eeadc8f62..de7350c13 100644 --- a/crates/db_views/src/post/post_view.rs +++ b/crates/db_views/src/post/post_view.rs @@ -814,7 +814,7 @@ mod tests { let tag_1 = Tag::create( pool, &TagInsertForm { - ap_id: Url::parse(&format!("{}/tags/test_tag1", inserted_community.actor_id))?.into(), + ap_id: Url::parse(&format!("{}/tags/test_tag1", inserted_community.ap_id))?.into(), name: "Test Tag 1".into(), community_id: inserted_community.id, published: None, @@ -826,7 +826,7 @@ mod tests { let tag_2 = Tag::create( pool, &TagInsertForm { - ap_id: Url::parse(&format!("{}/tags/test_tag2", inserted_community.actor_id))?.into(), + ap_id: Url::parse(&format!("{}/tags/test_tag2", inserted_community.ap_id))?.into(), name: "Test Tag 2".into(), community_id: inserted_community.id, published: None, @@ -896,7 +896,7 @@ mod tests { icon: None, banner: None, description: None, - actor_id: Url::parse("http://example.com")?.into(), + ap_id: Url::parse("http://example.com")?.into(), last_refreshed_at: Default::default(), inbox_url: Url::parse("http://example.com")?.into(), private_key: None, @@ -1844,7 +1844,7 @@ mod tests { display_name: None, published: inserted_person.published, avatar: None, - actor_id: inserted_person.actor_id.clone(), + ap_id: inserted_person.ap_id.clone(), local: true, bot_account: false, banned: false, @@ -1872,7 +1872,7 @@ mod tests { removed: false, deleted: false, nsfw: false, - actor_id: inserted_community.actor_id.clone(), + ap_id: inserted_community.ap_id.clone(), local: true, title: "nada".to_owned(), sidebar: None, diff --git a/crates/db_views/src/registration_applications/registration_application_view.rs b/crates/db_views/src/registration_applications/registration_application_view.rs index f10b085c4..df2aa7b6c 100644 --- a/crates/db_views/src/registration_applications/registration_application_view.rs +++ b/crates/db_views/src/registration_applications/registration_application_view.rs @@ -225,7 +225,7 @@ mod tests { display_name: None, published: inserted_sara_person.published, avatar: None, - actor_id: inserted_sara_person.actor_id.clone(), + ap_id: inserted_sara_person.ap_id.clone(), local: true, banned: false, ban_expires: None, @@ -294,7 +294,7 @@ mod tests { display_name: None, published: inserted_timmy_person.published, avatar: None, - actor_id: inserted_timmy_person.actor_id.clone(), + ap_id: inserted_timmy_person.ap_id.clone(), local: true, banned: false, ban_expires: None, diff --git a/crates/federate/src/inboxes.rs b/crates/federate/src/inboxes.rs index a3997bc3b..f146c5f1f 100644 --- a/crates/federate/src/inboxes.rs +++ b/crates/federate/src/inboxes.rs @@ -284,7 +284,7 @@ mod tests { icon: None, banner: None, description: None, - actor_id: Url::parse("https://example.com/site")?.into(), + ap_id: Url::parse("https://example.com/site")?.into(), last_refreshed_at: Utc::now(), inbox_url: site_inbox.clone().into(), private_key: None, @@ -407,7 +407,7 @@ mod tests { icon: None, banner: None, description: None, - actor_id: Url::parse("https://example.com/site")?.into(), + ap_id: Url::parse("https://example.com/site")?.into(), last_refreshed_at: Utc::now(), inbox_url: site_inbox.clone().into(), private_key: None, @@ -524,7 +524,7 @@ mod tests { icon: None, banner: None, description: None, - actor_id: Url::parse("https://example.com/site")?.into(), + ap_id: Url::parse("https://example.com/site")?.into(), last_refreshed_at: Utc::now(), inbox_url: site_inbox.clone().into(), private_key: None, diff --git a/crates/federate/src/worker.rs b/crates/federate/src/worker.rs index 260103c4a..ae88e57c5 100644 --- a/crates/federate/src/worker.rs +++ b/crates/federate/src/worker.rs @@ -487,9 +487,9 @@ mod test { let instance = Instance::read_or_create(&mut context.pool(), "localhost".to_string()).await?; let actor_keypair = generate_actor_keypair()?; - let actor_id: DbUrl = Url::parse("http://local.com/u/alice")?.into(); + let ap_id: DbUrl = Url::parse("http://local.com/u/alice")?.into(); let person_form = PersonInsertForm { - actor_id: Some(actor_id.clone()), + ap_id: Some(ap_id.clone()), private_key: (Some(actor_keypair.private_key)), inbox_url: Some(generate_inbox_url()?), ..PersonInsertForm::new("alice".to_string(), actor_keypair.public_key, instance.id) @@ -571,7 +571,7 @@ mod test { tracing::debug!("received first stats"); assert_eq!(data.instance.id, rcv.state.instance_id); - let sent = send_activity(data.person.actor_id.clone(), &data.context, true).await?; + let sent = send_activity(data.person.ap_id.clone(), &data.context, true).await?; tracing::debug!("sent activity"); // receive for successfully sent activity let inbox_rcv = data.inbox_receiver.recv().await.unwrap(); @@ -614,7 +614,7 @@ mod test { // let last_id_before = rcv.state.last_successful_id.unwrap(); let mut sent = Vec::new(); for _ in 0..40 { - sent.push(send_activity(data.person.actor_id.clone(), &data.context, false).await?); + sent.push(send_activity(data.person.ap_id.clone(), &data.context, false).await?); } sleep(2 * *WORK_FINISHED_RECHECK_DELAY).await; tracing::debug!("sent activity"); @@ -643,7 +643,7 @@ mod test { tracing::debug!("sending {} activities", count); let mut sent = Vec::new(); for _ in 0..count { - sent.push(send_activity(data.person.actor_id.clone(), &data.context, false).await?); + sent.push(send_activity(data.person.ap_id.clone(), &data.context, false).await?); } sleep(2 * *WORK_FINISHED_RECHECK_DELAY).await; tracing::debug!("sent activity"); @@ -660,7 +660,7 @@ mod test { let form = InstanceForm::new(data.instance.domain.clone()); Instance::update(&mut data.context.pool(), data.instance.id, form).await?; - send_activity(data.person.actor_id.clone(), &data.context, true).await?; + send_activity(data.person.ap_id.clone(), &data.context, true).await?; data.inbox_receiver.recv().await.unwrap(); let instance = @@ -702,7 +702,7 @@ mod test { } async fn send_activity( - actor_id: DbUrl, + ap_id: DbUrl, context: &LemmyContext, wait: bool, ) -> LemmyResult { @@ -725,7 +725,7 @@ mod test { send_all_instances: false, send_community_followers_of: None, actor_type: ActorType::Person, - actor_apub_id: actor_id, + actor_apub_id: ap_id, }; let sent = SentActivity::create(&mut context.pool(), form).await?; diff --git a/crates/routes/src/feeds.rs b/crates/routes/src/feeds.rs index 505b93a7e..fc4f23456 100644 --- a/crates/routes/src/feeds.rs +++ b/crates/routes/src/feeds.rs @@ -254,7 +254,7 @@ async fn get_feed_user( let channel = Channel { namespaces: RSS_NAMESPACE.clone(), title: format!("{} - {}", site_view.site.name, person.name), - link: person.actor_id.to_string(), + link: person.ap_id.to_string(), items, ..Default::default() }; @@ -294,7 +294,7 @@ async fn get_feed_community( let mut channel = Channel { namespaces: RSS_NAMESPACE.clone(), title: format!("{} - {}", site_view.site.name, community.name), - link: community.actor_id.to_string(), + link: community.ap_id.to_string(), items, ..Default::default() }; @@ -468,7 +468,7 @@ fn create_post_items(posts: Vec, protocol_and_hostname: &str) -> Lemmy let post_url = format!("{}/post/{}", protocol_and_hostname, p.post.id); let community_url = format!("{}/c/{}", protocol_and_hostname, &p.community.name); let dublin_core_ext = Some(DublinCoreExtension { - creators: vec![p.creator.actor_id.to_string()], + creators: vec![p.creator.ap_id.to_string()], ..DublinCoreExtension::default() }); let guid = Some(Guid { @@ -476,7 +476,7 @@ fn create_post_items(posts: Vec, protocol_and_hostname: &str) -> Lemmy value: post_url.clone(), }); let mut description = format!("submitted by {} to {}
{} points | {} comments", - p.creator.actor_id, + p.creator.ap_id, &p.creator.name, community_url, &p.community.name, @@ -526,7 +526,7 @@ fn create_post_items(posts: Vec, protocol_and_hostname: &str) -> Lemmy } let category = Category { name: p.community.title, - domain: Some(p.community.actor_id.to_string()), + domain: Some(p.community.ap_id.to_string()), }; let i = Item { diff --git a/crates/routes/src/utils/code_migrations.rs b/crates/routes/src/utils/code_migrations.rs index 1c23a3f00..7382c4729 100644 --- a/crates/routes/src/utils/code_migrations.rs +++ b/crates/routes/src/utils/code_migrations.rs @@ -59,14 +59,14 @@ async fn user_updates_2020_04_02( pool: &mut DbPool<'_>, protocol_and_hostname: &str, ) -> LemmyResult<()> { - use lemmy_db_schema::schema::person::dsl::{actor_id, local, person}; + use lemmy_db_schema::schema::person::dsl::{ap_id, local, person}; let conn = &mut get_conn(pool).await?; info!("Running user_updates_2020_04_02"); - // Update the actor_id, private_key, and public_key, last_refreshed_at + // Update the ap_id, private_key, and public_key, last_refreshed_at let incorrect_persons = person - .filter(actor_id.like("http://changeme%")) + .filter(ap_id.like("http://changeme%")) .filter(local.eq(true)) .load::(conn) .await?; @@ -75,7 +75,7 @@ async fn user_updates_2020_04_02( let keypair = generate_actor_keypair()?; let form = PersonUpdateForm { - actor_id: Some(generate_local_apub_endpoint( + ap_id: Some(generate_local_apub_endpoint( EndpointType::Person, &cperson.name, protocol_and_hostname, @@ -98,28 +98,28 @@ async fn community_updates_2020_04_02( pool: &mut DbPool<'_>, protocol_and_hostname: &str, ) -> LemmyResult<()> { - use lemmy_db_schema::schema::community::dsl::{actor_id, community, local}; + use lemmy_db_schema::schema::community::dsl::{ap_id, community, local}; let conn = &mut get_conn(pool).await?; info!("Running community_updates_2020_04_02"); - // Update the actor_id, private_key, and public_key, last_refreshed_at + // Update the ap_id, private_key, and public_key, last_refreshed_at let incorrect_communities = community - .filter(actor_id.like("http://changeme%")) + .filter(ap_id.like("http://changeme%")) .filter(local.eq(true)) .load::(conn) .await?; for ccommunity in &incorrect_communities { let keypair = generate_actor_keypair()?; - let community_actor_id = generate_local_apub_endpoint( + let community_ap_id = generate_local_apub_endpoint( EndpointType::Community, &ccommunity.name, protocol_and_hostname, )?; let form = CommunityUpdateForm { - actor_id: Some(community_actor_id.clone()), + ap_id: Some(community_ap_id.clone()), private_key: Some(Some(keypair.private_key)), public_key: Some(keypair.public_key), last_refreshed_at: Some(Utc::now()), @@ -307,7 +307,7 @@ async fn apub_columns_2021_02_02(pool: &mut DbPool<'_>) -> LemmyResult<()> { .await?; for c in &communities { - let followers_url_ = generate_followers_url(&c.actor_id)?; + let followers_url_ = generate_followers_url(&c.ap_id)?; let inbox_url_ = generate_inbox_url()?; diesel::update(community.find(c.id)) .set((followers_url.eq(followers_url_), inbox_url.eq(inbox_url_))) @@ -335,9 +335,9 @@ async fn instance_actor_2022_01_28( return Ok(()); } let key_pair = generate_actor_keypair()?; - let actor_id = Url::parse(protocol_and_hostname)?; + let ap_id = Url::parse(protocol_and_hostname)?; let site_form = SiteUpdateForm { - actor_id: Some(actor_id.clone().into()), + ap_id: Some(ap_id.clone().into()), last_refreshed_at: Some(Utc::now()), inbox_url: Some(generate_inbox_url()?), private_key: Some(Some(key_pair.private_key)), @@ -431,7 +431,7 @@ async fn initialize_local_site_2022_10_10( if let Some(setup) = &settings.setup { let person_keypair = generate_actor_keypair()?; - let person_actor_id = generate_local_apub_endpoint( + let person_ap_id = generate_local_apub_endpoint( EndpointType::Person, &setup.admin_username, &settings.get_protocol_and_hostname(), @@ -439,7 +439,7 @@ async fn initialize_local_site_2022_10_10( // Register the user if there's a site setup let person_form = PersonInsertForm { - actor_id: Some(person_actor_id.clone()), + ap_id: Some(person_ap_id.clone()), inbox_url: Some(generate_inbox_url()?), private_key: Some(person_keypair.private_key), ..PersonInsertForm::new( @@ -460,7 +460,7 @@ async fn initialize_local_site_2022_10_10( // Add an entry for the site table let site_key_pair = generate_actor_keypair()?; - let site_actor_id = Url::parse(&settings.get_protocol_and_hostname())?; + let site_ap_id = Url::parse(&settings.get_protocol_and_hostname())?; let name = settings .setup @@ -468,7 +468,7 @@ async fn initialize_local_site_2022_10_10( .map(|s| s.site_name) .unwrap_or_else(|| "New Site".to_string()); let site_form = SiteInsertForm { - actor_id: Some(site_actor_id.clone().into()), + ap_id: Some(site_ap_id.clone().into()), last_refreshed_at: Some(Utc::now()), inbox_url: Some(generate_inbox_url()?), private_key: Some(site_key_pair.private_key), diff --git a/crates/routes/src/webfinger.rs b/crates/routes/src/webfinger.rs index a20a786f9..f223d33a6 100644 --- a/crates/routes/src/webfinger.rs +++ b/crates/routes/src/webfinger.rs @@ -51,14 +51,14 @@ async fn get_webfinger_response( .await .ok() .flatten() - .map(|c| c.actor_id.into()); + .map(|c| c.ap_id.into()); let community_id: Option = Community::read_from_name(&mut context.pool(), name, false) .await .ok() .flatten() .and_then(|c| { if c.visibility == CommunityVisibility::Public { - let id: Url = c.actor_id.into(); + let id: Url = c.ap_id.into(); Some(id) } else { None diff --git a/migrations/2025-02-05-090155_ap_id/down.sql b/migrations/2025-02-05-090155_ap_id/down.sql new file mode 100644 index 000000000..f2dc19a4e --- /dev/null +++ b/migrations/2025-02-05-090155_ap_id/down.sql @@ -0,0 +1,6 @@ +ALTER TABLE person RENAME ap_id TO actor_id; + +ALTER TABLE community RENAME ap_id TO actor_id; + +ALTER TABLE site RENAME ap_id TO actor_id; + diff --git a/migrations/2025-02-05-090155_ap_id/up.sql b/migrations/2025-02-05-090155_ap_id/up.sql new file mode 100644 index 000000000..ec7f9c74c --- /dev/null +++ b/migrations/2025-02-05-090155_ap_id/up.sql @@ -0,0 +1,6 @@ +ALTER TABLE person RENAME actor_id TO ap_id; + +ALTER TABLE community RENAME actor_id TO ap_id; + +ALTER TABLE site RENAME actor_id TO ap_id; +