@fedify/botkit 0.3.0-dev.115 → 0.3.0-dev.117
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bot-impl.d.ts.map +1 -1
- package/dist/bot-impl.js +23 -15
- package/dist/bot-impl.js.map +1 -1
- package/dist/components/Message.d.ts +2 -2
- package/dist/deno.js +2 -2
- package/dist/deno.js.map +1 -1
- package/dist/pages.d.ts +2 -2
- package/dist/repository.d.ts +50 -0
- package/dist/repository.d.ts.map +1 -1
- package/dist/repository.js +106 -0
- package/dist/repository.js.map +1 -1
- package/dist/repository.test.js +57 -0
- package/dist/repository.test.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.test.js","names":["factories: Record<string, () => Repository>","keyPairs: CryptoKeyPair[]","messageC"],"sources":["../src/repository.test.ts"],"sourcesContent":["// BotKit by Fedify: A framework for creating ActivityPub bots\n// Copyright (C) 2025 Hong Minhee <https://hongminhee.org/>\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as\n// published by the Free Software Foundation, either version 3 of the\n// License, or (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see <https://www.gnu.org/licenses/>.\nimport { MemoryKvStore } from \"@fedify/fedify/federation\";\nimport { importJwk } from \"@fedify/fedify/sig\";\nimport {\n Create,\n Follow,\n Note,\n Person,\n PUBLIC_COLLECTION,\n} from \"@fedify/fedify/vocab\";\nimport assert from \"node:assert\";\nimport { describe, test } from \"node:test\";\nimport {\n KvRepository,\n MemoryCachedRepository,\n MemoryRepository,\n type Repository,\n} from \"./repository.ts\";\n\nfunction createKvRepository(): Repository {\n return new KvRepository(new MemoryKvStore());\n}\n\nfunction createMemoryRepository(): Repository {\n return new MemoryRepository();\n}\n\nfunction createMemoryCachedRepository(): Repository {\n return new MemoryCachedRepository(createKvRepository());\n}\n\nconst factories: Record<string, () => Repository> = {\n KvRepository: createKvRepository,\n MemoryRepository: createMemoryRepository,\n MemoryCachedRepository: createMemoryCachedRepository,\n};\n\nconst keyPairs: CryptoKeyPair[] = [\n {\n publicKey: await importJwk({\n kty: \"RSA\",\n alg: \"RS256\",\n // cSpell: disable\n n: \"1NZblYSc2beQqDmDUF_VDMeS7bUXShvIMK6NHd9OB-7ivBwad8vUcmqKwWj_ivqZva6EgD-n0549t0Pzn5xTArqEJ-c1DTyhC7TNtof0KIbU75qziHwHOqcyYCHusQgDm_TT7frDuxLqHJQ1UrdADMyCVDPFfcstPHhHp3NYStGeNcBo5B05DB_wkgqX2QF2MamQwkdRRMdZkVees38AsC6GTGoOFRI2lvJuUODtndpyjGAKOkLfkr9XzAcggRYx9ddsHBd5wylffwKhtUtWHkdVBdVAiEX8sZ38LhqNYm161PE83nfEvut6_lCCQ7DlPJ8Tp6SY-f2JTXA-C9sN0uJF8_YGhaCPgolv5Pk2UerQmvhMhql9MLDen1AvZrw0u1CWic0GQeIDA6Op9Exd5azhhdm4iKeYzAekUHFDi6WZRRZRCYgHaEEzXyFt9W3N3paolMYVOh1008d-aIgbYnZMToiwH897uQsNGkd1FVIutycXdeuhAbqB7AtLrzuD78wkKLO8k3DFcix2qaHRqiBKC3lUlDCD_I5yzinY_SOcagdpRxczvi6JN1ahUg39ZKYRtJIxUOp1H3iRrebbaOoxM19-axKH1om0sYtyX4JqYfN9QrSf3cO1I6CGnJY8hIkQ6CDH5Tmk_4VRRKdzphq4jZiiOYfR94WODPKDjTM\",\n e: \"AQAB\",\n // cSpell: enable\n key_ops: [\"verify\"],\n ext: true,\n }, \"public\"),\n privateKey: await importJwk({\n kty: \"RSA\",\n alg: \"RS256\",\n // cSpell: disable\n n: \"1NZblYSc2beQqDmDUF_VDMeS7bUXShvIMK6NHd9OB-7ivBwad8vUcmqKwWj_ivqZva6EgD-n0549t0Pzn5xTArqEJ-c1DTyhC7TNtof0KIbU75qziHwHOqcyYCHusQgDm_TT7frDuxLqHJQ1UrdADMyCVDPFfcstPHhHp3NYStGeNcBo5B05DB_wkgqX2QF2MamQwkdRRMdZkVees38AsC6GTGoOFRI2lvJuUODtndpyjGAKOkLfkr9XzAcggRYx9ddsHBd5wylffwKhtUtWHkdVBdVAiEX8sZ38LhqNYm161PE83nfEvut6_lCCQ7DlPJ8Tp6SY-f2JTXA-C9sN0uJF8_YGhaCPgolv5Pk2UerQmvhMhql9MLDen1AvZrw0u1CWic0GQeIDA6Op9Exd5azhhdm4iKeYzAekUHFDi6WZRRZRCYgHaEEzXyFt9W3N3paolMYVOh1008d-aIgbYnZMToiwH897uQsNGkd1FVIutycXdeuhAbqB7AtLrzuD78wkKLO8k3DFcix2qaHRqiBKC3lUlDCD_I5yzinY_SOcagdpRxczvi6JN1ahUg39ZKYRtJIxUOp1H3iRrebbaOoxM19-axKH1om0sYtyX4JqYfN9QrSf3cO1I6CGnJY8hIkQ6CDH5Tmk_4VRRKdzphq4jZiiOYfR94WODPKDjTM\",\n e: \"AQAB\",\n d: \"Yl3DrCHDIDhfifAyyWXRIHvoYyZL4jte1WkG3WSEOtRkRA41CWLSCCNHh8YQPNo_TdQnduJ0nTBIU7f7E6x7DQrI42xPL5Py1mc0oATLiiNurGJyUUUJTklR1e440-bhTCXmANnhtkcyngy9bEI3PvMR1PqsbswFVyo76586kjG5DhykHbGH2Ru14rk0nt23E5LLzY6Kd-AufCbjuQ-ccNC_zvdBFOn7At5-r7CVAVyhjlEgyPZ5P-hhGnG8ywxIANgUJhOPeexYL2o29IQiBBJxsCV0EsdN14UttN0etPvmRh5MRIFUE-zfRkRNQB20hMT8n4FKFlfgKkMS2gXep91h9VVyfYPHAt9jGJgUbIcbx_igeLK3nQlaUXaePf2bAuVRM1kW3P2UR0FOoUKDI5FZmi9XBoEtt0taQYySdKbPSXKaJWO2vKQ4SPyVXzzz-obfVe2zIe1msQ3Tco5RFoHfnufbvvnLC_WUAC9LSfp4jrPvr5lY3uoCFmPma56R-E3mVd2q87Ybk6mqvSh4yWHjid7sfzQ8Ovh9OhZlq_7Mfa3q3M92vNL98iHs8xYkJbE0DJs691UdgX45iNi4DVD-hJ7EbKQQgePsYNovWA611kM-cartevQWk7TBBggy9VYqmdWN0QuVQX9bsHFeYjjKSXg24bV5vYQW3EPkqZk\",\n p: \"9DeEDfMVdV605MbHCtHnw5xEbzTHd7vK-qAQNIjz5i4EmFC0tK7dvUiSn0WeyMNYJkuxVxTMHoDbWXzXq45tzbTEYuzEo5wsxyoVvldfFnnJIwMu6Hb7PWjyWfpBcbwLISr8fAJaGPzgcFsJE__KxrvLA66m1q_4k1y1L9CvXWfHDvFqb7VLGzKWXXp2wlbsACZuqx2Ff3THcWoOWb-wSww6AGsYAc3zC_DiYvAaTn9MxszZ0UYuMeJIHjLA1dmjL-Nksvq5GukjFxSSTpUS87zJ08fHoB0FzTKIIjJGpMRf6ebReLqbYCdo2Kr7eC7lbcTfwQTPI6gnHSKgPIYF5Q\",\n q: \"3xtArH_4MQjwRpl7JVivzQUZgDTARkynMpX-4Gvyny6Gxx0QLhHH0lQMRhtFWlI6qLZxCCLC9zhXPmGlqW-QWya8-xE80mX45JTrQlwBHISpTWTV3sI2Lp5dg7CW8Sc40CE4kB4Q2rHhf7V-Aimgmqhnl1uguzH2DXfr3RaCor0ge44k6gi1LXEJN_aFQIIFYL8HQOM0ctdY147Kr2rVHLchRnh8Q4GzBAJvpOcfvEDk9HF09NVxeaivLMXChpuSUHqbEGg_lVkotLnCMb-fUWk8QmO8EFFVU0pyOFDqHKIgrHOLSHjgUvV8moBwnMGQxMgu7rpY3g-9cXfsCoKVNw\",\n dp:\n \"bL1vajqrelhSGW-83r95_-pLumx4yIJwrcmpjYrRdtNUrnF5FN6r0wVGa-629dOtI1gevZSAErDzelQRP80qbSapLxcXs3XtpjzB87-5kitl-NYJA-8-jSh2iMPacgb1ua4HQDxX27p1QPH4B9SkeHrTuW8B0KQH_a2Q65pzCxcTVj7-UoEZ0SFkPHkz-fJ0INj7--soLwlTaNd9Tk8A81mdVeRZiywlpVJ7quwX-o3KJNa_weQK26FS1Udp_45pkAAjLWJgG3BldHhvcNgF2UtdXpQc-dkSZTyzyu4x8FmUD3T8HlKQrm69y4POdsQC2i6IJsy6YrkTuXBagrh2VQ\",\n dq:\n \"j0CQZjJEyjdTEAG8cF5hguKjXQ6B5qGROYnV_YNSZaMaJv8iRHJmO0Z8GwenoDbsMyfxq6emR9aFLijEleZsahqVfR-0TePry9lStWkdzZHgozD7oexRnd1Rbh0UzgLBF-I8z0x-xe0xPS7rmbfgx20aFrVentOViVBWwb6SYqvND4hVa2_r5SGPKb_AD4tsqJH_tkosgxCCmuW0fq256JYtZ3I1V6MPrqNhzCAa4GVKnSm8Tvg9xD_rOnRAUu3RJJuUtRQ6v0pgOKqNZiQDx-IqLvaa6l9OygwjCsXpjDkNga0u4Xm7j4jQWOPfasdejPt8Jwy_wtWYbiLyDE2MQQ\",\n qi:\n \"Th3TS6fHquqNljwZU2Vg7ndI0SmJidIwSTS2LlhM-Y2bxaAUF-orpS504xDVk1xjRYBrdxiTOmohbtoKtiWhLveOUAWVoNilMqgEU7lwnhaE3yfiUoE1x8df_wLP_YiAccFKeMZwsQp29aKLxuYQtO2dRSSQkN0IuxMGchnJtGOGNTbyA44O25IwggV1nlJN7OTX-nsJCSCe1XMojnGezhnD4xXGeSuR3S07oDDiWpvAO7qtRphEavVTtXdJWIr27tBvnUytbpb4uq6A3J4-TZ6X9uzlOw6jBSQhbL7fc83Z9E_wjPTnxfHufiC_AtXow6sK7lCy10aJGHp3jnGVdQ\",\n // cSpell: enable\n key_ops: [\"sign\"],\n ext: true,\n }, \"private\"),\n },\n {\n privateKey: await importJwk({\n kty: \"OKP\",\n crv: \"Ed25519\",\n // cSpell: disable-next-line\n x: \"CwcwyY7tu4wVzVW3KKX7AnBO8HakA2pg0rhAiMbGtfk\",\n key_ops: [\"sign\"],\n ext: true,\n // cSpell: disable-next-line\n d: \"K64nFsAPt892l7rr10uDsBXCW151CUM29SugU6l4ZzE\",\n }, \"private\"),\n publicKey: await importJwk({\n kty: \"OKP\",\n crv: \"Ed25519\",\n // cSpell: disable-next-line\n x: \"CwcwyY7tu4wVzVW3KKX7AnBO8HakA2pg0rhAiMbGtfk\",\n key_ops: [\"verify\"],\n ext: true,\n }, \"public\"),\n },\n];\n\nfor (const name in factories) {\n const factory = factories[name];\n\n describe(name, () => {\n const repo = factory();\n\n test(\"key pairs\", async () => {\n assert.deepStrictEqual(await repo.getKeyPairs(), undefined);\n await repo.setKeyPairs(keyPairs);\n assert.deepStrictEqual(await repo.getKeyPairs(), keyPairs);\n });\n\n test(\"messages\", async () => {\n assert.deepStrictEqual(await repo.countMessages(), 0);\n assert.deepStrictEqual(\n await repo.getMessage(\"01941f29-7c00-7fe8-ab0a-7b593990a3c0\"),\n undefined,\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"0194244f-d800-7873-8993-ef71ccd47306\"),\n undefined,\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"01942976-3400-7f34-872e-2cbf0f9eeac4\"),\n undefined,\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"01942e9c-9000-7480-a553-7a6ce737ce14\"),\n undefined,\n );\n assert.deepStrictEqual(await Array.fromAsync(repo.getMessages()), []);\n\n const messageA = new Create({\n id: new URL(\n \"https://example.com/ap/create/01941f29-7c00-7fe8-ab0a-7b593990a3c0\",\n ),\n actor: new URL(\"https://example.com/ap/actor/bot\"),\n to: new URL(\"https://example.com/ap/actor/bot/followers\"),\n cc: PUBLIC_COLLECTION,\n object: new Note({\n id: new URL(\n \"https://example.com/ap/note/01941f29-7c00-7fe8-ab0a-7b593990a3c0\",\n ),\n attribution: new URL(\"https://example.com/ap/actor/bot\"),\n to: new URL(\"https://example.com/ap/actor/bot/followers\"),\n cc: PUBLIC_COLLECTION,\n content: \"Hello, world!\",\n published: Temporal.Instant.from(\"2025-01-01T00:00:00Z\"),\n }),\n published: Temporal.Instant.from(\"2025-01-01T00:00:00Z\"),\n });\n const messageB = new Create({\n id: new URL(\n \"https://example.com/ap/create/0194244f-d800-7873-8993-ef71ccd47306\",\n ),\n actor: new URL(\"https://example.com/ap/actor/bot\"),\n to: new URL(\"https://example.com/ap/actor/bot/followers\"),\n cc: PUBLIC_COLLECTION,\n object: new Note({\n id: new URL(\n \"https://example.com/ap/note/0194244f-d800-7873-8993-ef71ccd47306\",\n ),\n attribution: new URL(\"https://example.com/ap/actor/bot\"),\n to: new URL(\"https://example.com/ap/actor/bot/followers\"),\n cc: PUBLIC_COLLECTION,\n content: \"Hello, world!\",\n published: Temporal.Instant.from(\"2025-01-02T00:00:00Z\"),\n }),\n published: Temporal.Instant.from(\"2025-01-02T00:00:00Z\"),\n });\n const messageC = new Create({\n id: new URL(\n \"https://example.com/ap/create/01942976-3400-7f34-872e-2cbf0f9eeac4\",\n ),\n actor: new URL(\"https://example.com/ap/actor/bot\"),\n to: new URL(\"https://example.com/ap/actor/bot/followers\"),\n cc: PUBLIC_COLLECTION,\n object: new Note({\n id: new URL(\n \"https://example.com/ap/note/01942976-3400-7f34-872e-2cbf0f9eeac4\",\n ),\n attribution: new URL(\"https://example.com/ap/actor/bot\"),\n to: new URL(\"https://example.com/ap/actor/bot/followers\"),\n cc: PUBLIC_COLLECTION,\n content: \"Hello, world!\",\n published: Temporal.Instant.from(\"2025-01-03T00:00:00Z\"),\n }),\n published: Temporal.Instant.from(\"2025-01-03T00:00:00Z\"),\n });\n const messageD = new Create({\n id: new URL(\n \"https://example.com/ap/create/01942e9c-9000-7480-a553-7a6ce737ce14\",\n ),\n actor: new URL(\"https://example.com/ap/actor/bot\"),\n to: new URL(\"https://example.com/ap/actor/bot/followers\"),\n cc: PUBLIC_COLLECTION,\n object: new Note({\n id: new URL(\n \"https://example.com/ap/note/01942e9c-9000-7480-a553-7a6ce737ce14\",\n ),\n attribution: new URL(\"https://example.com/ap/actor/bot\"),\n to: new URL(\"https://example.com/ap/actor/bot/followers\"),\n cc: PUBLIC_COLLECTION,\n content: \"Hello, world!\",\n published: Temporal.Instant.from(\"2025-01-04T00:00:00Z\"),\n }),\n published: Temporal.Instant.from(\"2025-01-04T00:00:00Z\"),\n });\n const messageC2 = new Create({\n id: new URL(\n \"https://example.com/ap/create/01942976-3400-7f34-872e-2cbf0f9eeac4\",\n ),\n actor: new URL(\"https://example.com/ap/actor/bot\"),\n to: new URL(\"https://example.com/ap/actor/bot/followers\"),\n cc: PUBLIC_COLLECTION,\n object: new Note({\n id: new URL(\n \"https://example.com/ap/note/01942976-3400-7f34-872e-2cbf0f9eeac4\",\n ),\n attribution: new URL(\"https://example.com/ap/actor/bot\"),\n to: new URL(\"https://example.com/ap/actor/bot/followers\"),\n cc: PUBLIC_COLLECTION,\n content: \"Hi, world!\",\n published: Temporal.Instant.from(\"2025-01-03T00:00:00Z\"),\n updated: Temporal.Instant.from(\"2025-01-03T12:00:00Z\"),\n }),\n published: Temporal.Instant.from(\"2025-01-03T00:00:00Z\"),\n updated: Temporal.Instant.from(\"2025-01-03T12:00:00Z\"),\n });\n\n await repo.addMessage(\"01941f29-7c00-7fe8-ab0a-7b593990a3c0\", messageA);\n assert.deepStrictEqual(await repo.countMessages(), 1);\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01941f29-7c00-7fe8-ab0a-7b593990a3c0\"))\n ?.toJsonLd(),\n await messageA.toJsonLd(),\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"0194244f-d800-7873-8993-ef71ccd47306\"),\n undefined,\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"01942976-3400-7f34-872e-2cbf0f9eeac4\"),\n undefined,\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"01942e9c-9000-7480-a553-7a6ce737ce14\"),\n undefined,\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getMessages())).map((m) => m.toJsonLd()),\n ),\n [await messageA.toJsonLd()],\n );\n\n await repo.addMessage(\"0194244f-d800-7873-8993-ef71ccd47306\", messageB);\n assert.deepStrictEqual(await repo.countMessages(), 2);\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01941f29-7c00-7fe8-ab0a-7b593990a3c0\"))\n ?.toJsonLd(),\n await messageA.toJsonLd(),\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"0194244f-d800-7873-8993-ef71ccd47306\"))\n ?.toJsonLd(),\n await messageB.toJsonLd(),\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"01942976-3400-7f34-872e-2cbf0f9eeac4\"),\n undefined,\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"01942e9c-9000-7480-a553-7a6ce737ce14\"),\n undefined,\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getMessages())).map((m) => m.toJsonLd()),\n ),\n [await messageB.toJsonLd(), await messageA.toJsonLd()],\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getMessages({ order: \"oldest\" }))).map((\n m,\n ) => m.toJsonLd()),\n ),\n [await messageA.toJsonLd(), await messageB.toJsonLd()],\n );\n\n await repo.addMessage(\"01942976-3400-7f34-872e-2cbf0f9eeac4\", messageC);\n assert.deepStrictEqual(await repo.countMessages(), 3);\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01941f29-7c00-7fe8-ab0a-7b593990a3c0\"))\n ?.toJsonLd(),\n await messageA.toJsonLd(),\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"0194244f-d800-7873-8993-ef71ccd47306\"))\n ?.toJsonLd(),\n await messageB.toJsonLd(),\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942976-3400-7f34-872e-2cbf0f9eeac4\"))\n ?.toJsonLd(),\n await messageC.toJsonLd(),\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"01942e9c-9000-7480-a553-7a6ce737ce14\"),\n undefined,\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getMessages({ order: \"newest\" }))).map((\n m,\n ) => m.toJsonLd()),\n ),\n [\n await messageC.toJsonLd(),\n await messageB.toJsonLd(),\n await messageA.toJsonLd(),\n ],\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getMessages({ order: \"oldest\" }))).map((\n m,\n ) => m.toJsonLd()),\n ),\n [\n await messageA.toJsonLd(),\n await messageB.toJsonLd(),\n await messageC.toJsonLd(),\n ],\n );\n\n await repo.addMessage(\"01942e9c-9000-7480-a553-7a6ce737ce14\", messageD);\n assert.deepStrictEqual(await repo.countMessages(), 4);\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01941f29-7c00-7fe8-ab0a-7b593990a3c0\"))\n ?.toJsonLd(),\n await messageA.toJsonLd(),\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"0194244f-d800-7873-8993-ef71ccd47306\"))\n ?.toJsonLd(),\n await messageB.toJsonLd(),\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942976-3400-7f34-872e-2cbf0f9eeac4\"))\n ?.toJsonLd(),\n await messageC.toJsonLd(),\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942e9c-9000-7480-a553-7a6ce737ce14\"))\n ?.toJsonLd(),\n await messageD.toJsonLd(),\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getMessages())).map((\n m,\n ) => m.toJsonLd()),\n ),\n [\n await messageD.toJsonLd(),\n await messageC.toJsonLd(),\n await messageB.toJsonLd(),\n await messageA.toJsonLd(),\n ],\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(\n repo.getMessages({\n order: \"oldest\",\n until: Temporal.Instant.from(\"2025-01-03T00:00:00Z\"),\n }),\n )).map((m) => m.toJsonLd()),\n ),\n [\n await messageA.toJsonLd(),\n await messageB.toJsonLd(),\n await messageC.toJsonLd(),\n ],\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(\n repo.getMessages({\n since: Temporal.Instant.from(\"2025-01-02T00:00:00Z\"),\n }),\n )).map((m) => m.toJsonLd()),\n ),\n [\n await messageD.toJsonLd(),\n await messageC.toJsonLd(),\n await messageB.toJsonLd(),\n ],\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(\n repo.getMessages({\n until: Temporal.Instant.from(\"2025-01-03T00:00:00Z\"),\n since: Temporal.Instant.from(\"2025-01-02T00:00:00Z\"),\n }),\n )).map((m) => m.toJsonLd()),\n ),\n [\n await messageC.toJsonLd(),\n await messageB.toJsonLd(),\n ],\n );\n\n const removed = await repo.removeMessage(\n \"0194244f-d800-7873-8993-ef71ccd47306\",\n );\n assert.deepStrictEqual(\n await removed?.toJsonLd(),\n await messageB.toJsonLd(),\n );\n assert.deepStrictEqual(await repo.countMessages(), 3);\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01941f29-7c00-7fe8-ab0a-7b593990a3c0\"))\n ?.toJsonLd(),\n await messageA.toJsonLd(),\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"0194244f-d800-7873-8993-ef71ccd47306\"),\n undefined,\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942976-3400-7f34-872e-2cbf0f9eeac4\"))\n ?.toJsonLd(),\n await messageC.toJsonLd(),\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942e9c-9000-7480-a553-7a6ce737ce14\"))\n ?.toJsonLd(),\n await messageD.toJsonLd(),\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getMessages({ order: \"newest\" }))).map((\n m,\n ) => m.toJsonLd()),\n ),\n [\n await messageD.toJsonLd(),\n await messageC.toJsonLd(),\n await messageA.toJsonLd(),\n ],\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getMessages({ order: \"oldest\" }))).map((\n m,\n ) => m.toJsonLd()),\n ),\n [\n await messageA.toJsonLd(),\n await messageC.toJsonLd(),\n await messageD.toJsonLd(),\n ],\n );\n\n await repo.updateMessage(\n \"01942976-3400-7f34-872e-2cbf0f9eeac4\",\n async (messageC) =>\n messageC.clone({\n object: await messageC2.getObject(),\n updated: messageC2.updated,\n }),\n );\n assert.deepStrictEqual(await repo.countMessages(), 3);\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01941f29-7c00-7fe8-ab0a-7b593990a3c0\"))\n ?.toJsonLd(),\n await messageA.toJsonLd(),\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"0194244f-d800-7873-8993-ef71ccd47306\"),\n undefined,\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942976-3400-7f34-872e-2cbf0f9eeac4\"))\n ?.toJsonLd(),\n await messageC2.toJsonLd(),\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942e9c-9000-7480-a553-7a6ce737ce14\"))\n ?.toJsonLd(),\n await messageD.toJsonLd(),\n );\n\n let updaterCalled = false;\n const updated = await repo.updateMessage(\n \"00000000-0000-0000-0000-000000000000\",\n (message) => {\n updaterCalled = true;\n return message;\n },\n );\n assert.deepStrictEqual(updated, false);\n assert.deepStrictEqual(updaterCalled, false);\n assert.deepStrictEqual(await repo.countMessages(), 3);\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01941f29-7c00-7fe8-ab0a-7b593990a3c0\"))\n ?.toJsonLd(),\n await messageA.toJsonLd(),\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"0194244f-d800-7873-8993-ef71ccd47306\"),\n undefined,\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942976-3400-7f34-872e-2cbf0f9eeac4\"))\n ?.toJsonLd(),\n await messageC2.toJsonLd(),\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942e9c-9000-7480-a553-7a6ce737ce14\"))\n ?.toJsonLd(),\n await messageD.toJsonLd(),\n );\n\n const updated2 = await repo.updateMessage(\n \"01942e9c-9000-7480-a553-7a6ce737ce14\",\n (_) => undefined,\n );\n assert.deepStrictEqual(updated2, false);\n assert.deepStrictEqual(await repo.countMessages(), 3);\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01941f29-7c00-7fe8-ab0a-7b593990a3c0\"))\n ?.toJsonLd(),\n await messageA.toJsonLd(),\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"0194244f-d800-7873-8993-ef71ccd47306\"),\n undefined,\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942976-3400-7f34-872e-2cbf0f9eeac4\"))\n ?.toJsonLd(),\n await messageC2.toJsonLd(),\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942e9c-9000-7480-a553-7a6ce737ce14\"))\n ?.toJsonLd(),\n await messageD.toJsonLd(),\n );\n });\n\n test(\"followers\", async () => {\n const followerA = new Person({\n id: new URL(\"https://example.com/ap/actor/john\"),\n preferredUsername: \"john\",\n });\n const followFromA = new URL(\n \"https://example.com/ap/follow/be2da56a-0ea3-4a6a-9dff-2a1837be67e0\",\n );\n const followerB = new Person({\n id: new URL(\"https://example.com/ap/actor/jane\"),\n preferredUsername: \"jane\",\n });\n const followFromB = new URL(\n \"https://example.com/ap/follow/8b76286d-5eef-4f02-8a16-080ff2b0e2ca\",\n );\n\n assert.deepStrictEqual(await repo.countFollowers(), 0);\n assert.deepStrictEqual(await repo.hasFollower(followerA.id!), false);\n assert.deepStrictEqual(await repo.hasFollower(followerB.id!), false);\n assert.deepStrictEqual(await Array.fromAsync(repo.getFollowers()), []);\n\n await repo.addFollower(followFromA, followerA);\n assert.deepStrictEqual(await repo.countFollowers(), 1);\n assert.ok(await repo.hasFollower(followerA.id!));\n assert.deepStrictEqual(await repo.hasFollower(followerB.id!), false);\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getFollowers())).map((f) => f.toJsonLd()),\n ),\n [await followerA.toJsonLd()],\n );\n\n await repo.addFollower(followFromB, followerB);\n assert.deepStrictEqual(await repo.countFollowers(), 2);\n assert.ok(await repo.hasFollower(followerA.id!));\n assert.ok(await repo.hasFollower(followerB.id!));\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getFollowers())).map((f) => f.toJsonLd()),\n ),\n [await followerA.toJsonLd(), await followerB.toJsonLd()],\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getFollowers({ offset: 1 }))).map((f) =>\n f.toJsonLd()\n ),\n ),\n [await followerB.toJsonLd()],\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getFollowers({ limit: 1 }))).map((f) =>\n f.toJsonLd()\n ),\n ),\n [await followerA.toJsonLd()],\n );\n\n assert.deepStrictEqual(\n await repo.removeFollower(followFromA, followerB.id!),\n undefined,\n );\n assert.deepStrictEqual(\n await repo.removeFollower(followFromB, followerA.id!),\n undefined,\n );\n assert.deepStrictEqual(await repo.countFollowers(), 2);\n assert.ok(await repo.hasFollower(followerA.id!));\n assert.ok(await repo.hasFollower(followerB.id!));\n\n await repo.removeFollower(followFromA, followerA.id!);\n assert.deepStrictEqual(await repo.countFollowers(), 1);\n assert.deepStrictEqual(await repo.hasFollower(followerA.id!), false);\n assert.ok(await repo.hasFollower(followerB.id!));\n\n await repo.removeFollower(followFromB, followerB.id!);\n assert.deepStrictEqual(await repo.countFollowers(), 0);\n assert.deepStrictEqual(await repo.hasFollower(followerA.id!), false);\n assert.deepStrictEqual(await repo.hasFollower(followerB.id!), false);\n });\n\n test(\"sent follows\", async () => {\n const follow = new Follow({\n id: new URL(\n \"https://example.com/ap/follow/03a395a2-353a-4894-afdb-2cab31a7b004\",\n ),\n actor: new URL(\"https://example.com/ap/actor/bot\"),\n object: new URL(\"https://example.com/ap/actor/john\"),\n });\n\n assert.deepStrictEqual(\n await repo.getSentFollow(\"03a395a2-353a-4894-afdb-2cab31a7b004\"),\n undefined,\n );\n\n await repo.addSentFollow(\"03a395a2-353a-4894-afdb-2cab31a7b004\", follow);\n assert.deepStrictEqual(\n await (await repo.getSentFollow(\"03a395a2-353a-4894-afdb-2cab31a7b004\"))\n ?.toJsonLd(),\n await follow.toJsonLd(),\n );\n\n await repo.removeSentFollow(\"03a395a2-353a-4894-afdb-2cab31a7b004\");\n assert.deepStrictEqual(\n await repo.getSentFollow(\"03a395a2-353a-4894-afdb-2cab31a7b004\"),\n undefined,\n );\n });\n\n test(\"followees\", async () => {\n const followeeId = new URL(\"https://example.com/ap/actor/john\");\n const follow = new Follow({\n id: new URL(\n \"https://example.com/ap/follow/03a395a2-353a-4894-afdb-2cab31a7b004\",\n ),\n actor: new URL(\"https://example.com/ap/actor/bot\"),\n object: followeeId,\n });\n\n assert.deepStrictEqual(await repo.getFollowee(followeeId), undefined);\n\n await repo.addFollowee(followeeId, follow);\n assert.deepStrictEqual(\n await (await repo.getFollowee(followeeId))?.toJsonLd(),\n await follow.toJsonLd(),\n );\n\n await repo.removeFollowee(followeeId);\n assert.deepStrictEqual(await repo.getFollowee(followeeId), undefined);\n });\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"repository.test.js","names":["factories: Record<string, () => Repository>","keyPairs: CryptoKeyPair[]","messageC"],"sources":["../src/repository.test.ts"],"sourcesContent":["// BotKit by Fedify: A framework for creating ActivityPub bots\n// Copyright (C) 2025 Hong Minhee <https://hongminhee.org/>\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as\n// published by the Free Software Foundation, either version 3 of the\n// License, or (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see <https://www.gnu.org/licenses/>.\nimport { MemoryKvStore } from \"@fedify/fedify/federation\";\nimport { importJwk } from \"@fedify/fedify/sig\";\nimport {\n Create,\n Follow,\n Note,\n Person,\n PUBLIC_COLLECTION,\n} from \"@fedify/fedify/vocab\";\nimport assert from \"node:assert\";\nimport { describe, test } from \"node:test\";\nimport {\n KvRepository,\n MemoryCachedRepository,\n MemoryRepository,\n type Repository,\n} from \"./repository.ts\";\n\nfunction createKvRepository(): Repository {\n return new KvRepository(new MemoryKvStore());\n}\n\nfunction createMemoryRepository(): Repository {\n return new MemoryRepository();\n}\n\nfunction createMemoryCachedRepository(): Repository {\n return new MemoryCachedRepository(createKvRepository());\n}\n\nconst factories: Record<string, () => Repository> = {\n KvRepository: createKvRepository,\n MemoryRepository: createMemoryRepository,\n MemoryCachedRepository: createMemoryCachedRepository,\n};\n\nconst keyPairs: CryptoKeyPair[] = [\n {\n publicKey: await importJwk({\n kty: \"RSA\",\n alg: \"RS256\",\n // cSpell: disable\n n: \"1NZblYSc2beQqDmDUF_VDMeS7bUXShvIMK6NHd9OB-7ivBwad8vUcmqKwWj_ivqZva6EgD-n0549t0Pzn5xTArqEJ-c1DTyhC7TNtof0KIbU75qziHwHOqcyYCHusQgDm_TT7frDuxLqHJQ1UrdADMyCVDPFfcstPHhHp3NYStGeNcBo5B05DB_wkgqX2QF2MamQwkdRRMdZkVees38AsC6GTGoOFRI2lvJuUODtndpyjGAKOkLfkr9XzAcggRYx9ddsHBd5wylffwKhtUtWHkdVBdVAiEX8sZ38LhqNYm161PE83nfEvut6_lCCQ7DlPJ8Tp6SY-f2JTXA-C9sN0uJF8_YGhaCPgolv5Pk2UerQmvhMhql9MLDen1AvZrw0u1CWic0GQeIDA6Op9Exd5azhhdm4iKeYzAekUHFDi6WZRRZRCYgHaEEzXyFt9W3N3paolMYVOh1008d-aIgbYnZMToiwH897uQsNGkd1FVIutycXdeuhAbqB7AtLrzuD78wkKLO8k3DFcix2qaHRqiBKC3lUlDCD_I5yzinY_SOcagdpRxczvi6JN1ahUg39ZKYRtJIxUOp1H3iRrebbaOoxM19-axKH1om0sYtyX4JqYfN9QrSf3cO1I6CGnJY8hIkQ6CDH5Tmk_4VRRKdzphq4jZiiOYfR94WODPKDjTM\",\n e: \"AQAB\",\n // cSpell: enable\n key_ops: [\"verify\"],\n ext: true,\n }, \"public\"),\n privateKey: await importJwk({\n kty: \"RSA\",\n alg: \"RS256\",\n // cSpell: disable\n n: \"1NZblYSc2beQqDmDUF_VDMeS7bUXShvIMK6NHd9OB-7ivBwad8vUcmqKwWj_ivqZva6EgD-n0549t0Pzn5xTArqEJ-c1DTyhC7TNtof0KIbU75qziHwHOqcyYCHusQgDm_TT7frDuxLqHJQ1UrdADMyCVDPFfcstPHhHp3NYStGeNcBo5B05DB_wkgqX2QF2MamQwkdRRMdZkVees38AsC6GTGoOFRI2lvJuUODtndpyjGAKOkLfkr9XzAcggRYx9ddsHBd5wylffwKhtUtWHkdVBdVAiEX8sZ38LhqNYm161PE83nfEvut6_lCCQ7DlPJ8Tp6SY-f2JTXA-C9sN0uJF8_YGhaCPgolv5Pk2UerQmvhMhql9MLDen1AvZrw0u1CWic0GQeIDA6Op9Exd5azhhdm4iKeYzAekUHFDi6WZRRZRCYgHaEEzXyFt9W3N3paolMYVOh1008d-aIgbYnZMToiwH897uQsNGkd1FVIutycXdeuhAbqB7AtLrzuD78wkKLO8k3DFcix2qaHRqiBKC3lUlDCD_I5yzinY_SOcagdpRxczvi6JN1ahUg39ZKYRtJIxUOp1H3iRrebbaOoxM19-axKH1om0sYtyX4JqYfN9QrSf3cO1I6CGnJY8hIkQ6CDH5Tmk_4VRRKdzphq4jZiiOYfR94WODPKDjTM\",\n e: \"AQAB\",\n d: \"Yl3DrCHDIDhfifAyyWXRIHvoYyZL4jte1WkG3WSEOtRkRA41CWLSCCNHh8YQPNo_TdQnduJ0nTBIU7f7E6x7DQrI42xPL5Py1mc0oATLiiNurGJyUUUJTklR1e440-bhTCXmANnhtkcyngy9bEI3PvMR1PqsbswFVyo76586kjG5DhykHbGH2Ru14rk0nt23E5LLzY6Kd-AufCbjuQ-ccNC_zvdBFOn7At5-r7CVAVyhjlEgyPZ5P-hhGnG8ywxIANgUJhOPeexYL2o29IQiBBJxsCV0EsdN14UttN0etPvmRh5MRIFUE-zfRkRNQB20hMT8n4FKFlfgKkMS2gXep91h9VVyfYPHAt9jGJgUbIcbx_igeLK3nQlaUXaePf2bAuVRM1kW3P2UR0FOoUKDI5FZmi9XBoEtt0taQYySdKbPSXKaJWO2vKQ4SPyVXzzz-obfVe2zIe1msQ3Tco5RFoHfnufbvvnLC_WUAC9LSfp4jrPvr5lY3uoCFmPma56R-E3mVd2q87Ybk6mqvSh4yWHjid7sfzQ8Ovh9OhZlq_7Mfa3q3M92vNL98iHs8xYkJbE0DJs691UdgX45iNi4DVD-hJ7EbKQQgePsYNovWA611kM-cartevQWk7TBBggy9VYqmdWN0QuVQX9bsHFeYjjKSXg24bV5vYQW3EPkqZk\",\n p: \"9DeEDfMVdV605MbHCtHnw5xEbzTHd7vK-qAQNIjz5i4EmFC0tK7dvUiSn0WeyMNYJkuxVxTMHoDbWXzXq45tzbTEYuzEo5wsxyoVvldfFnnJIwMu6Hb7PWjyWfpBcbwLISr8fAJaGPzgcFsJE__KxrvLA66m1q_4k1y1L9CvXWfHDvFqb7VLGzKWXXp2wlbsACZuqx2Ff3THcWoOWb-wSww6AGsYAc3zC_DiYvAaTn9MxszZ0UYuMeJIHjLA1dmjL-Nksvq5GukjFxSSTpUS87zJ08fHoB0FzTKIIjJGpMRf6ebReLqbYCdo2Kr7eC7lbcTfwQTPI6gnHSKgPIYF5Q\",\n q: \"3xtArH_4MQjwRpl7JVivzQUZgDTARkynMpX-4Gvyny6Gxx0QLhHH0lQMRhtFWlI6qLZxCCLC9zhXPmGlqW-QWya8-xE80mX45JTrQlwBHISpTWTV3sI2Lp5dg7CW8Sc40CE4kB4Q2rHhf7V-Aimgmqhnl1uguzH2DXfr3RaCor0ge44k6gi1LXEJN_aFQIIFYL8HQOM0ctdY147Kr2rVHLchRnh8Q4GzBAJvpOcfvEDk9HF09NVxeaivLMXChpuSUHqbEGg_lVkotLnCMb-fUWk8QmO8EFFVU0pyOFDqHKIgrHOLSHjgUvV8moBwnMGQxMgu7rpY3g-9cXfsCoKVNw\",\n dp:\n \"bL1vajqrelhSGW-83r95_-pLumx4yIJwrcmpjYrRdtNUrnF5FN6r0wVGa-629dOtI1gevZSAErDzelQRP80qbSapLxcXs3XtpjzB87-5kitl-NYJA-8-jSh2iMPacgb1ua4HQDxX27p1QPH4B9SkeHrTuW8B0KQH_a2Q65pzCxcTVj7-UoEZ0SFkPHkz-fJ0INj7--soLwlTaNd9Tk8A81mdVeRZiywlpVJ7quwX-o3KJNa_weQK26FS1Udp_45pkAAjLWJgG3BldHhvcNgF2UtdXpQc-dkSZTyzyu4x8FmUD3T8HlKQrm69y4POdsQC2i6IJsy6YrkTuXBagrh2VQ\",\n dq:\n \"j0CQZjJEyjdTEAG8cF5hguKjXQ6B5qGROYnV_YNSZaMaJv8iRHJmO0Z8GwenoDbsMyfxq6emR9aFLijEleZsahqVfR-0TePry9lStWkdzZHgozD7oexRnd1Rbh0UzgLBF-I8z0x-xe0xPS7rmbfgx20aFrVentOViVBWwb6SYqvND4hVa2_r5SGPKb_AD4tsqJH_tkosgxCCmuW0fq256JYtZ3I1V6MPrqNhzCAa4GVKnSm8Tvg9xD_rOnRAUu3RJJuUtRQ6v0pgOKqNZiQDx-IqLvaa6l9OygwjCsXpjDkNga0u4Xm7j4jQWOPfasdejPt8Jwy_wtWYbiLyDE2MQQ\",\n qi:\n \"Th3TS6fHquqNljwZU2Vg7ndI0SmJidIwSTS2LlhM-Y2bxaAUF-orpS504xDVk1xjRYBrdxiTOmohbtoKtiWhLveOUAWVoNilMqgEU7lwnhaE3yfiUoE1x8df_wLP_YiAccFKeMZwsQp29aKLxuYQtO2dRSSQkN0IuxMGchnJtGOGNTbyA44O25IwggV1nlJN7OTX-nsJCSCe1XMojnGezhnD4xXGeSuR3S07oDDiWpvAO7qtRphEavVTtXdJWIr27tBvnUytbpb4uq6A3J4-TZ6X9uzlOw6jBSQhbL7fc83Z9E_wjPTnxfHufiC_AtXow6sK7lCy10aJGHp3jnGVdQ\",\n // cSpell: enable\n key_ops: [\"sign\"],\n ext: true,\n }, \"private\"),\n },\n {\n privateKey: await importJwk({\n kty: \"OKP\",\n crv: \"Ed25519\",\n // cSpell: disable-next-line\n x: \"CwcwyY7tu4wVzVW3KKX7AnBO8HakA2pg0rhAiMbGtfk\",\n key_ops: [\"sign\"],\n ext: true,\n // cSpell: disable-next-line\n d: \"K64nFsAPt892l7rr10uDsBXCW151CUM29SugU6l4ZzE\",\n }, \"private\"),\n publicKey: await importJwk({\n kty: \"OKP\",\n crv: \"Ed25519\",\n // cSpell: disable-next-line\n x: \"CwcwyY7tu4wVzVW3KKX7AnBO8HakA2pg0rhAiMbGtfk\",\n key_ops: [\"verify\"],\n ext: true,\n }, \"public\"),\n },\n];\n\nfor (const name in factories) {\n const factory = factories[name];\n\n describe(name, () => {\n const repo = factory();\n\n test(\"key pairs\", async () => {\n assert.deepStrictEqual(await repo.getKeyPairs(), undefined);\n await repo.setKeyPairs(keyPairs);\n assert.deepStrictEqual(await repo.getKeyPairs(), keyPairs);\n });\n\n test(\"messages\", async () => {\n assert.deepStrictEqual(await repo.countMessages(), 0);\n assert.deepStrictEqual(\n await repo.getMessage(\"01941f29-7c00-7fe8-ab0a-7b593990a3c0\"),\n undefined,\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"0194244f-d800-7873-8993-ef71ccd47306\"),\n undefined,\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"01942976-3400-7f34-872e-2cbf0f9eeac4\"),\n undefined,\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"01942e9c-9000-7480-a553-7a6ce737ce14\"),\n undefined,\n );\n assert.deepStrictEqual(await Array.fromAsync(repo.getMessages()), []);\n\n const messageA = new Create({\n id: new URL(\n \"https://example.com/ap/create/01941f29-7c00-7fe8-ab0a-7b593990a3c0\",\n ),\n actor: new URL(\"https://example.com/ap/actor/bot\"),\n to: new URL(\"https://example.com/ap/actor/bot/followers\"),\n cc: PUBLIC_COLLECTION,\n object: new Note({\n id: new URL(\n \"https://example.com/ap/note/01941f29-7c00-7fe8-ab0a-7b593990a3c0\",\n ),\n attribution: new URL(\"https://example.com/ap/actor/bot\"),\n to: new URL(\"https://example.com/ap/actor/bot/followers\"),\n cc: PUBLIC_COLLECTION,\n content: \"Hello, world!\",\n published: Temporal.Instant.from(\"2025-01-01T00:00:00Z\"),\n }),\n published: Temporal.Instant.from(\"2025-01-01T00:00:00Z\"),\n });\n const messageB = new Create({\n id: new URL(\n \"https://example.com/ap/create/0194244f-d800-7873-8993-ef71ccd47306\",\n ),\n actor: new URL(\"https://example.com/ap/actor/bot\"),\n to: new URL(\"https://example.com/ap/actor/bot/followers\"),\n cc: PUBLIC_COLLECTION,\n object: new Note({\n id: new URL(\n \"https://example.com/ap/note/0194244f-d800-7873-8993-ef71ccd47306\",\n ),\n attribution: new URL(\"https://example.com/ap/actor/bot\"),\n to: new URL(\"https://example.com/ap/actor/bot/followers\"),\n cc: PUBLIC_COLLECTION,\n content: \"Hello, world!\",\n published: Temporal.Instant.from(\"2025-01-02T00:00:00Z\"),\n }),\n published: Temporal.Instant.from(\"2025-01-02T00:00:00Z\"),\n });\n const messageC = new Create({\n id: new URL(\n \"https://example.com/ap/create/01942976-3400-7f34-872e-2cbf0f9eeac4\",\n ),\n actor: new URL(\"https://example.com/ap/actor/bot\"),\n to: new URL(\"https://example.com/ap/actor/bot/followers\"),\n cc: PUBLIC_COLLECTION,\n object: new Note({\n id: new URL(\n \"https://example.com/ap/note/01942976-3400-7f34-872e-2cbf0f9eeac4\",\n ),\n attribution: new URL(\"https://example.com/ap/actor/bot\"),\n to: new URL(\"https://example.com/ap/actor/bot/followers\"),\n cc: PUBLIC_COLLECTION,\n content: \"Hello, world!\",\n published: Temporal.Instant.from(\"2025-01-03T00:00:00Z\"),\n }),\n published: Temporal.Instant.from(\"2025-01-03T00:00:00Z\"),\n });\n const messageD = new Create({\n id: new URL(\n \"https://example.com/ap/create/01942e9c-9000-7480-a553-7a6ce737ce14\",\n ),\n actor: new URL(\"https://example.com/ap/actor/bot\"),\n to: new URL(\"https://example.com/ap/actor/bot/followers\"),\n cc: PUBLIC_COLLECTION,\n object: new Note({\n id: new URL(\n \"https://example.com/ap/note/01942e9c-9000-7480-a553-7a6ce737ce14\",\n ),\n attribution: new URL(\"https://example.com/ap/actor/bot\"),\n to: new URL(\"https://example.com/ap/actor/bot/followers\"),\n cc: PUBLIC_COLLECTION,\n content: \"Hello, world!\",\n published: Temporal.Instant.from(\"2025-01-04T00:00:00Z\"),\n }),\n published: Temporal.Instant.from(\"2025-01-04T00:00:00Z\"),\n });\n const messageC2 = new Create({\n id: new URL(\n \"https://example.com/ap/create/01942976-3400-7f34-872e-2cbf0f9eeac4\",\n ),\n actor: new URL(\"https://example.com/ap/actor/bot\"),\n to: new URL(\"https://example.com/ap/actor/bot/followers\"),\n cc: PUBLIC_COLLECTION,\n object: new Note({\n id: new URL(\n \"https://example.com/ap/note/01942976-3400-7f34-872e-2cbf0f9eeac4\",\n ),\n attribution: new URL(\"https://example.com/ap/actor/bot\"),\n to: new URL(\"https://example.com/ap/actor/bot/followers\"),\n cc: PUBLIC_COLLECTION,\n content: \"Hi, world!\",\n published: Temporal.Instant.from(\"2025-01-03T00:00:00Z\"),\n updated: Temporal.Instant.from(\"2025-01-03T12:00:00Z\"),\n }),\n published: Temporal.Instant.from(\"2025-01-03T00:00:00Z\"),\n updated: Temporal.Instant.from(\"2025-01-03T12:00:00Z\"),\n });\n\n await repo.addMessage(\"01941f29-7c00-7fe8-ab0a-7b593990a3c0\", messageA);\n assert.deepStrictEqual(await repo.countMessages(), 1);\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01941f29-7c00-7fe8-ab0a-7b593990a3c0\"))\n ?.toJsonLd(),\n await messageA.toJsonLd(),\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"0194244f-d800-7873-8993-ef71ccd47306\"),\n undefined,\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"01942976-3400-7f34-872e-2cbf0f9eeac4\"),\n undefined,\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"01942e9c-9000-7480-a553-7a6ce737ce14\"),\n undefined,\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getMessages())).map((m) => m.toJsonLd()),\n ),\n [await messageA.toJsonLd()],\n );\n\n await repo.addMessage(\"0194244f-d800-7873-8993-ef71ccd47306\", messageB);\n assert.deepStrictEqual(await repo.countMessages(), 2);\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01941f29-7c00-7fe8-ab0a-7b593990a3c0\"))\n ?.toJsonLd(),\n await messageA.toJsonLd(),\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"0194244f-d800-7873-8993-ef71ccd47306\"))\n ?.toJsonLd(),\n await messageB.toJsonLd(),\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"01942976-3400-7f34-872e-2cbf0f9eeac4\"),\n undefined,\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"01942e9c-9000-7480-a553-7a6ce737ce14\"),\n undefined,\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getMessages())).map((m) => m.toJsonLd()),\n ),\n [await messageB.toJsonLd(), await messageA.toJsonLd()],\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getMessages({ order: \"oldest\" }))).map((\n m,\n ) => m.toJsonLd()),\n ),\n [await messageA.toJsonLd(), await messageB.toJsonLd()],\n );\n\n await repo.addMessage(\"01942976-3400-7f34-872e-2cbf0f9eeac4\", messageC);\n assert.deepStrictEqual(await repo.countMessages(), 3);\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01941f29-7c00-7fe8-ab0a-7b593990a3c0\"))\n ?.toJsonLd(),\n await messageA.toJsonLd(),\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"0194244f-d800-7873-8993-ef71ccd47306\"))\n ?.toJsonLd(),\n await messageB.toJsonLd(),\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942976-3400-7f34-872e-2cbf0f9eeac4\"))\n ?.toJsonLd(),\n await messageC.toJsonLd(),\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"01942e9c-9000-7480-a553-7a6ce737ce14\"),\n undefined,\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getMessages({ order: \"newest\" }))).map((\n m,\n ) => m.toJsonLd()),\n ),\n [\n await messageC.toJsonLd(),\n await messageB.toJsonLd(),\n await messageA.toJsonLd(),\n ],\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getMessages({ order: \"oldest\" }))).map((\n m,\n ) => m.toJsonLd()),\n ),\n [\n await messageA.toJsonLd(),\n await messageB.toJsonLd(),\n await messageC.toJsonLd(),\n ],\n );\n\n await repo.addMessage(\"01942e9c-9000-7480-a553-7a6ce737ce14\", messageD);\n assert.deepStrictEqual(await repo.countMessages(), 4);\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01941f29-7c00-7fe8-ab0a-7b593990a3c0\"))\n ?.toJsonLd(),\n await messageA.toJsonLd(),\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"0194244f-d800-7873-8993-ef71ccd47306\"))\n ?.toJsonLd(),\n await messageB.toJsonLd(),\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942976-3400-7f34-872e-2cbf0f9eeac4\"))\n ?.toJsonLd(),\n await messageC.toJsonLd(),\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942e9c-9000-7480-a553-7a6ce737ce14\"))\n ?.toJsonLd(),\n await messageD.toJsonLd(),\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getMessages())).map((\n m,\n ) => m.toJsonLd()),\n ),\n [\n await messageD.toJsonLd(),\n await messageC.toJsonLd(),\n await messageB.toJsonLd(),\n await messageA.toJsonLd(),\n ],\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(\n repo.getMessages({\n order: \"oldest\",\n until: Temporal.Instant.from(\"2025-01-03T00:00:00Z\"),\n }),\n )).map((m) => m.toJsonLd()),\n ),\n [\n await messageA.toJsonLd(),\n await messageB.toJsonLd(),\n await messageC.toJsonLd(),\n ],\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(\n repo.getMessages({\n since: Temporal.Instant.from(\"2025-01-02T00:00:00Z\"),\n }),\n )).map((m) => m.toJsonLd()),\n ),\n [\n await messageD.toJsonLd(),\n await messageC.toJsonLd(),\n await messageB.toJsonLd(),\n ],\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(\n repo.getMessages({\n until: Temporal.Instant.from(\"2025-01-03T00:00:00Z\"),\n since: Temporal.Instant.from(\"2025-01-02T00:00:00Z\"),\n }),\n )).map((m) => m.toJsonLd()),\n ),\n [\n await messageC.toJsonLd(),\n await messageB.toJsonLd(),\n ],\n );\n\n const removed = await repo.removeMessage(\n \"0194244f-d800-7873-8993-ef71ccd47306\",\n );\n assert.deepStrictEqual(\n await removed?.toJsonLd(),\n await messageB.toJsonLd(),\n );\n assert.deepStrictEqual(await repo.countMessages(), 3);\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01941f29-7c00-7fe8-ab0a-7b593990a3c0\"))\n ?.toJsonLd(),\n await messageA.toJsonLd(),\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"0194244f-d800-7873-8993-ef71ccd47306\"),\n undefined,\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942976-3400-7f34-872e-2cbf0f9eeac4\"))\n ?.toJsonLd(),\n await messageC.toJsonLd(),\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942e9c-9000-7480-a553-7a6ce737ce14\"))\n ?.toJsonLd(),\n await messageD.toJsonLd(),\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getMessages({ order: \"newest\" }))).map((\n m,\n ) => m.toJsonLd()),\n ),\n [\n await messageD.toJsonLd(),\n await messageC.toJsonLd(),\n await messageA.toJsonLd(),\n ],\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getMessages({ order: \"oldest\" }))).map((\n m,\n ) => m.toJsonLd()),\n ),\n [\n await messageA.toJsonLd(),\n await messageC.toJsonLd(),\n await messageD.toJsonLd(),\n ],\n );\n\n await repo.updateMessage(\n \"01942976-3400-7f34-872e-2cbf0f9eeac4\",\n async (messageC) =>\n messageC.clone({\n object: await messageC2.getObject(),\n updated: messageC2.updated,\n }),\n );\n assert.deepStrictEqual(await repo.countMessages(), 3);\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01941f29-7c00-7fe8-ab0a-7b593990a3c0\"))\n ?.toJsonLd(),\n await messageA.toJsonLd(),\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"0194244f-d800-7873-8993-ef71ccd47306\"),\n undefined,\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942976-3400-7f34-872e-2cbf0f9eeac4\"))\n ?.toJsonLd(),\n await messageC2.toJsonLd(),\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942e9c-9000-7480-a553-7a6ce737ce14\"))\n ?.toJsonLd(),\n await messageD.toJsonLd(),\n );\n\n let updaterCalled = false;\n const updated = await repo.updateMessage(\n \"00000000-0000-0000-0000-000000000000\",\n (message) => {\n updaterCalled = true;\n return message;\n },\n );\n assert.deepStrictEqual(updated, false);\n assert.deepStrictEqual(updaterCalled, false);\n assert.deepStrictEqual(await repo.countMessages(), 3);\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01941f29-7c00-7fe8-ab0a-7b593990a3c0\"))\n ?.toJsonLd(),\n await messageA.toJsonLd(),\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"0194244f-d800-7873-8993-ef71ccd47306\"),\n undefined,\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942976-3400-7f34-872e-2cbf0f9eeac4\"))\n ?.toJsonLd(),\n await messageC2.toJsonLd(),\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942e9c-9000-7480-a553-7a6ce737ce14\"))\n ?.toJsonLd(),\n await messageD.toJsonLd(),\n );\n\n const updated2 = await repo.updateMessage(\n \"01942e9c-9000-7480-a553-7a6ce737ce14\",\n (_) => undefined,\n );\n assert.deepStrictEqual(updated2, false);\n assert.deepStrictEqual(await repo.countMessages(), 3);\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01941f29-7c00-7fe8-ab0a-7b593990a3c0\"))\n ?.toJsonLd(),\n await messageA.toJsonLd(),\n );\n assert.deepStrictEqual(\n await repo.getMessage(\"0194244f-d800-7873-8993-ef71ccd47306\"),\n undefined,\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942976-3400-7f34-872e-2cbf0f9eeac4\"))\n ?.toJsonLd(),\n await messageC2.toJsonLd(),\n );\n assert.deepStrictEqual(\n await (await repo.getMessage(\"01942e9c-9000-7480-a553-7a6ce737ce14\"))\n ?.toJsonLd(),\n await messageD.toJsonLd(),\n );\n });\n\n test(\"followers\", async () => {\n const followerA = new Person({\n id: new URL(\"https://example.com/ap/actor/john\"),\n preferredUsername: \"john\",\n });\n const followFromA = new URL(\n \"https://example.com/ap/follow/be2da56a-0ea3-4a6a-9dff-2a1837be67e0\",\n );\n const followerB = new Person({\n id: new URL(\"https://example.com/ap/actor/jane\"),\n preferredUsername: \"jane\",\n });\n const followFromB = new URL(\n \"https://example.com/ap/follow/8b76286d-5eef-4f02-8a16-080ff2b0e2ca\",\n );\n\n assert.deepStrictEqual(await repo.countFollowers(), 0);\n assert.deepStrictEqual(await repo.hasFollower(followerA.id!), false);\n assert.deepStrictEqual(await repo.hasFollower(followerB.id!), false);\n assert.deepStrictEqual(await Array.fromAsync(repo.getFollowers()), []);\n\n await repo.addFollower(followFromA, followerA);\n assert.deepStrictEqual(await repo.countFollowers(), 1);\n assert.ok(await repo.hasFollower(followerA.id!));\n assert.deepStrictEqual(await repo.hasFollower(followerB.id!), false);\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getFollowers())).map((f) => f.toJsonLd()),\n ),\n [await followerA.toJsonLd()],\n );\n\n await repo.addFollower(followFromB, followerB);\n assert.deepStrictEqual(await repo.countFollowers(), 2);\n assert.ok(await repo.hasFollower(followerA.id!));\n assert.ok(await repo.hasFollower(followerB.id!));\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getFollowers())).map((f) => f.toJsonLd()),\n ),\n [await followerA.toJsonLd(), await followerB.toJsonLd()],\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getFollowers({ offset: 1 }))).map((f) =>\n f.toJsonLd()\n ),\n ),\n [await followerB.toJsonLd()],\n );\n assert.deepStrictEqual(\n await Promise.all(\n (await Array.fromAsync(repo.getFollowers({ limit: 1 }))).map((f) =>\n f.toJsonLd()\n ),\n ),\n [await followerA.toJsonLd()],\n );\n\n assert.deepStrictEqual(\n await repo.removeFollower(followFromA, followerB.id!),\n undefined,\n );\n assert.deepStrictEqual(\n await repo.removeFollower(followFromB, followerA.id!),\n undefined,\n );\n assert.deepStrictEqual(await repo.countFollowers(), 2);\n assert.ok(await repo.hasFollower(followerA.id!));\n assert.ok(await repo.hasFollower(followerB.id!));\n\n await repo.removeFollower(followFromA, followerA.id!);\n assert.deepStrictEqual(await repo.countFollowers(), 1);\n assert.deepStrictEqual(await repo.hasFollower(followerA.id!), false);\n assert.ok(await repo.hasFollower(followerB.id!));\n\n await repo.removeFollower(followFromB, followerB.id!);\n assert.deepStrictEqual(await repo.countFollowers(), 0);\n assert.deepStrictEqual(await repo.hasFollower(followerA.id!), false);\n assert.deepStrictEqual(await repo.hasFollower(followerB.id!), false);\n });\n\n test(\"sent follows\", async () => {\n const follow = new Follow({\n id: new URL(\n \"https://example.com/ap/follow/03a395a2-353a-4894-afdb-2cab31a7b004\",\n ),\n actor: new URL(\"https://example.com/ap/actor/bot\"),\n object: new URL(\"https://example.com/ap/actor/john\"),\n });\n\n assert.deepStrictEqual(\n await repo.getSentFollow(\"03a395a2-353a-4894-afdb-2cab31a7b004\"),\n undefined,\n );\n\n await repo.addSentFollow(\"03a395a2-353a-4894-afdb-2cab31a7b004\", follow);\n assert.deepStrictEqual(\n await (await repo.getSentFollow(\"03a395a2-353a-4894-afdb-2cab31a7b004\"))\n ?.toJsonLd(),\n await follow.toJsonLd(),\n );\n\n await repo.removeSentFollow(\"03a395a2-353a-4894-afdb-2cab31a7b004\");\n assert.deepStrictEqual(\n await repo.getSentFollow(\"03a395a2-353a-4894-afdb-2cab31a7b004\"),\n undefined,\n );\n });\n\n test(\"followees\", async () => {\n const followeeId = new URL(\"https://example.com/ap/actor/john\");\n const follow = new Follow({\n id: new URL(\n \"https://example.com/ap/follow/03a395a2-353a-4894-afdb-2cab31a7b004\",\n ),\n actor: new URL(\"https://example.com/ap/actor/bot\"),\n object: followeeId,\n });\n\n assert.deepStrictEqual(await repo.getFollowee(followeeId), undefined);\n\n await repo.addFollowee(followeeId, follow);\n assert.deepStrictEqual(\n await (await repo.getFollowee(followeeId))?.toJsonLd(),\n await follow.toJsonLd(),\n );\n\n await repo.removeFollowee(followeeId);\n assert.deepStrictEqual(await repo.getFollowee(followeeId), undefined);\n });\n\n test(\"poll voting\", async () => {\n const messageId1 = \"01945678-1234-7890-abcd-ef0123456789\";\n const messageId2 = \"01945678-5678-7890-abcd-ef0123456789\";\n const voter1 = new URL(\"https://example.com/ap/actor/alice\");\n const voter2 = new URL(\"https://example.com/ap/actor/bob\");\n const voter3 = new URL(\"https://example.com/ap/actor/charlie\");\n\n // Initially, no votes exist\n assert.deepStrictEqual(await repo.countVoters(messageId1), 0);\n assert.deepStrictEqual(await repo.countVotes(messageId1), {});\n assert.deepStrictEqual(await repo.countVoters(messageId2), 0);\n assert.deepStrictEqual(await repo.countVotes(messageId2), {});\n\n // Single voter, single option\n await repo.vote(messageId1, voter1, \"option1\");\n assert.deepStrictEqual(await repo.countVoters(messageId1), 1);\n assert.deepStrictEqual(await repo.countVotes(messageId1), {\n \"option1\": 1,\n });\n\n // Same voter votes for same option again (should be ignored)\n await repo.vote(messageId1, voter1, \"option1\");\n assert.deepStrictEqual(await repo.countVoters(messageId1), 1);\n assert.deepStrictEqual(await repo.countVotes(messageId1), {\n \"option1\": 1,\n });\n\n // Same voter votes for different option (multiple choice)\n await repo.vote(messageId1, voter1, \"option2\");\n assert.deepStrictEqual(await repo.countVoters(messageId1), 1);\n assert.deepStrictEqual(await repo.countVotes(messageId1), {\n \"option1\": 1,\n \"option2\": 1,\n });\n\n // Different voter votes for same option\n await repo.vote(messageId1, voter2, \"option1\");\n assert.deepStrictEqual(await repo.countVoters(messageId1), 2);\n assert.deepStrictEqual(await repo.countVotes(messageId1), {\n \"option1\": 2,\n \"option2\": 1,\n });\n\n // Third voter votes for new option\n await repo.vote(messageId1, voter3, \"option3\");\n assert.deepStrictEqual(await repo.countVoters(messageId1), 3);\n assert.deepStrictEqual(await repo.countVotes(messageId1), {\n \"option1\": 2,\n \"option2\": 1,\n \"option3\": 1,\n });\n\n // Votes for different message should be separate\n await repo.vote(messageId2, voter1, \"optionA\");\n await repo.vote(messageId2, voter2, \"optionB\");\n assert.deepStrictEqual(await repo.countVoters(messageId2), 2);\n assert.deepStrictEqual(await repo.countVotes(messageId2), {\n \"optionA\": 1,\n \"optionB\": 1,\n });\n\n // Original message votes should remain unchanged\n assert.deepStrictEqual(await repo.countVoters(messageId1), 3);\n assert.deepStrictEqual(await repo.countVotes(messageId1), {\n \"option1\": 2,\n \"option2\": 1,\n \"option3\": 1,\n });\n\n // Test with empty options (edge case)\n await repo.vote(messageId1, voter1, \"\");\n assert.deepStrictEqual(await repo.countVoters(messageId1), 3);\n assert.deepStrictEqual(await repo.countVotes(messageId1), {\n \"option1\": 2,\n \"option2\": 1,\n \"option3\": 1,\n \"\": 1,\n });\n });\n });\n}\n"],"mappings":";;;;;;;;;;;;AAiCA,SAAS,qBAAiC;AACxC,QAAO,IAAI,aAAa,IAAI;AAC7B;AAED,SAAS,yBAAqC;AAC5C,QAAO,IAAI;AACZ;AAED,SAAS,+BAA2C;AAClD,QAAO,IAAI,uBAAuB,oBAAoB;AACvD;AAED,MAAMA,YAA8C;CAClD,cAAc;CACd,kBAAkB;CAClB,wBAAwB;AACzB;AAED,MAAMC,WAA4B,CAChC;CACE,WAAW,MAAM,UAAU;EACzB,KAAK;EACL,KAAK;EAEL,GAAG;EACH,GAAG;EAEH,SAAS,CAAC,QAAS;EACnB,KAAK;CACN,GAAE,SAAS;CACZ,YAAY,MAAM,UAAU;EAC1B,KAAK;EACL,KAAK;EAEL,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,IACE;EACF,IACE;EACF,IACE;EAEF,SAAS,CAAC,MAAO;EACjB,KAAK;CACN,GAAE,UAAU;AACd,GACD;CACE,YAAY,MAAM,UAAU;EAC1B,KAAK;EACL,KAAK;EAEL,GAAG;EACH,SAAS,CAAC,MAAO;EACjB,KAAK;EAEL,GAAG;CACJ,GAAE,UAAU;CACb,WAAW,MAAM,UAAU;EACzB,KAAK;EACL,KAAK;EAEL,GAAG;EACH,SAAS,CAAC,QAAS;EACnB,KAAK;CACN,GAAE,SAAS;AACb,CACF;AAED,KAAK,MAAM,QAAQ,WAAW;CAC5B,MAAM,UAAU,UAAU;AAE1B,UAAS,MAAM,MAAM;EACnB,MAAM,OAAO,SAAS;AAEtB,OAAK,aAAa,YAAY;AAC5B,UAAO,gBAAgB,MAAM,KAAK,aAAa,SAAY;AAC3D,SAAM,KAAK,YAAY,SAAS;AAChC,UAAO,gBAAgB,MAAM,KAAK,aAAa,EAAE,SAAS;EAC3D,EAAC;AAEF,OAAK,YAAY,YAAY;AAC3B,UAAO,gBAAgB,MAAM,KAAK,eAAe,EAAE,EAAE;AACrD,UAAO,gBACL,MAAM,KAAK,WAAW,uCAAuC,SAE9D;AACD,UAAO,gBACL,MAAM,KAAK,WAAW,uCAAuC,SAE9D;AACD,UAAO,gBACL,MAAM,KAAK,WAAW,uCAAuC,SAE9D;AACD,UAAO,gBACL,MAAM,KAAK,WAAW,uCAAuC,SAE9D;AACD,UAAO,gBAAgB,MAAM,MAAM,UAAU,KAAK,aAAa,CAAC,EAAE,CAAE,EAAC;GAErE,MAAM,WAAW,IAAI,OAAO;IAC1B,IAAI,IAAI,IACN;IAEF,OAAO,IAAI,IAAI;IACf,IAAI,IAAI,IAAI;IACZ,IAAI;IACJ,QAAQ,IAAI,KAAK;KACf,IAAI,IAAI,IACN;KAEF,aAAa,IAAI,IAAI;KACrB,IAAI,IAAI,IAAI;KACZ,IAAI;KACJ,SAAS;KACT,WAAW,SAAS,QAAQ,KAAK,uBAAuB;IACzD;IACD,WAAW,SAAS,QAAQ,KAAK,uBAAuB;GACzD;GACD,MAAM,WAAW,IAAI,OAAO;IAC1B,IAAI,IAAI,IACN;IAEF,OAAO,IAAI,IAAI;IACf,IAAI,IAAI,IAAI;IACZ,IAAI;IACJ,QAAQ,IAAI,KAAK;KACf,IAAI,IAAI,IACN;KAEF,aAAa,IAAI,IAAI;KACrB,IAAI,IAAI,IAAI;KACZ,IAAI;KACJ,SAAS;KACT,WAAW,SAAS,QAAQ,KAAK,uBAAuB;IACzD;IACD,WAAW,SAAS,QAAQ,KAAK,uBAAuB;GACzD;GACD,MAAM,WAAW,IAAI,OAAO;IAC1B,IAAI,IAAI,IACN;IAEF,OAAO,IAAI,IAAI;IACf,IAAI,IAAI,IAAI;IACZ,IAAI;IACJ,QAAQ,IAAI,KAAK;KACf,IAAI,IAAI,IACN;KAEF,aAAa,IAAI,IAAI;KACrB,IAAI,IAAI,IAAI;KACZ,IAAI;KACJ,SAAS;KACT,WAAW,SAAS,QAAQ,KAAK,uBAAuB;IACzD;IACD,WAAW,SAAS,QAAQ,KAAK,uBAAuB;GACzD;GACD,MAAM,WAAW,IAAI,OAAO;IAC1B,IAAI,IAAI,IACN;IAEF,OAAO,IAAI,IAAI;IACf,IAAI,IAAI,IAAI;IACZ,IAAI;IACJ,QAAQ,IAAI,KAAK;KACf,IAAI,IAAI,IACN;KAEF,aAAa,IAAI,IAAI;KACrB,IAAI,IAAI,IAAI;KACZ,IAAI;KACJ,SAAS;KACT,WAAW,SAAS,QAAQ,KAAK,uBAAuB;IACzD;IACD,WAAW,SAAS,QAAQ,KAAK,uBAAuB;GACzD;GACD,MAAM,YAAY,IAAI,OAAO;IAC3B,IAAI,IAAI,IACN;IAEF,OAAO,IAAI,IAAI;IACf,IAAI,IAAI,IAAI;IACZ,IAAI;IACJ,QAAQ,IAAI,KAAK;KACf,IAAI,IAAI,IACN;KAEF,aAAa,IAAI,IAAI;KACrB,IAAI,IAAI,IAAI;KACZ,IAAI;KACJ,SAAS;KACT,WAAW,SAAS,QAAQ,KAAK,uBAAuB;KACxD,SAAS,SAAS,QAAQ,KAAK,uBAAuB;IACvD;IACD,WAAW,SAAS,QAAQ,KAAK,uBAAuB;IACxD,SAAS,SAAS,QAAQ,KAAK,uBAAuB;GACvD;AAED,SAAM,KAAK,WAAW,wCAAwC,SAAS;AACvE,UAAO,gBAAgB,MAAM,KAAK,eAAe,EAAE,EAAE;AACrD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,SAAS,UAAU,CAC1B;AACD,UAAO,gBACL,MAAM,KAAK,WAAW,uCAAuC,SAE9D;AACD,UAAO,gBACL,MAAM,KAAK,WAAW,uCAAuC,SAE9D;AACD,UAAO,gBACL,MAAM,KAAK,WAAW,uCAAuC,SAE9D;AACD,UAAO,gBACL,MAAM,QAAQ,IACZ,CAAC,MAAM,MAAM,UAAU,KAAK,aAAa,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CACrE,EACD,CAAC,MAAM,SAAS,UAAU,AAAC,EAC5B;AAED,SAAM,KAAK,WAAW,wCAAwC,SAAS;AACvE,UAAO,gBAAgB,MAAM,KAAK,eAAe,EAAE,EAAE;AACrD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,SAAS,UAAU,CAC1B;AACD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,SAAS,UAAU,CAC1B;AACD,UAAO,gBACL,MAAM,KAAK,WAAW,uCAAuC,SAE9D;AACD,UAAO,gBACL,MAAM,KAAK,WAAW,uCAAuC,SAE9D;AACD,UAAO,gBACL,MAAM,QAAQ,IACZ,CAAC,MAAM,MAAM,UAAU,KAAK,aAAa,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CACrE,EACD,CAAC,MAAM,SAAS,UAAU,EAAE,MAAM,SAAS,UAAU,AAAC,EACvD;AACD,UAAO,gBACL,MAAM,QAAQ,IACZ,CAAC,MAAM,MAAM,UAAU,KAAK,YAAY,EAAE,OAAO,SAAU,EAAC,CAAC,EAAE,IAAI,CACjE,MACG,EAAE,UAAU,CAAC,CACnB,EACD,CAAC,MAAM,SAAS,UAAU,EAAE,MAAM,SAAS,UAAU,AAAC,EACvD;AAED,SAAM,KAAK,WAAW,wCAAwC,SAAS;AACvE,UAAO,gBAAgB,MAAM,KAAK,eAAe,EAAE,EAAE;AACrD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,SAAS,UAAU,CAC1B;AACD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,SAAS,UAAU,CAC1B;AACD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,SAAS,UAAU,CAC1B;AACD,UAAO,gBACL,MAAM,KAAK,WAAW,uCAAuC,SAE9D;AACD,UAAO,gBACL,MAAM,QAAQ,IACZ,CAAC,MAAM,MAAM,UAAU,KAAK,YAAY,EAAE,OAAO,SAAU,EAAC,CAAC,EAAE,IAAI,CACjE,MACG,EAAE,UAAU,CAAC,CACnB,EACD;IACE,MAAM,SAAS,UAAU;IACzB,MAAM,SAAS,UAAU;IACzB,MAAM,SAAS,UAAU;GAC1B,EACF;AACD,UAAO,gBACL,MAAM,QAAQ,IACZ,CAAC,MAAM,MAAM,UAAU,KAAK,YAAY,EAAE,OAAO,SAAU,EAAC,CAAC,EAAE,IAAI,CACjE,MACG,EAAE,UAAU,CAAC,CACnB,EACD;IACE,MAAM,SAAS,UAAU;IACzB,MAAM,SAAS,UAAU;IACzB,MAAM,SAAS,UAAU;GAC1B,EACF;AAED,SAAM,KAAK,WAAW,wCAAwC,SAAS;AACvE,UAAO,gBAAgB,MAAM,KAAK,eAAe,EAAE,EAAE;AACrD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,SAAS,UAAU,CAC1B;AACD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,SAAS,UAAU,CAC1B;AACD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,SAAS,UAAU,CAC1B;AACD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,SAAS,UAAU,CAC1B;AACD,UAAO,gBACL,MAAM,QAAQ,IACZ,CAAC,MAAM,MAAM,UAAU,KAAK,aAAa,CAAC,EAAE,IAAI,CAC9C,MACG,EAAE,UAAU,CAAC,CACnB,EACD;IACE,MAAM,SAAS,UAAU;IACzB,MAAM,SAAS,UAAU;IACzB,MAAM,SAAS,UAAU;IACzB,MAAM,SAAS,UAAU;GAC1B,EACF;AACD,UAAO,gBACL,MAAM,QAAQ,IACZ,CAAC,MAAM,MAAM,UACX,KAAK,YAAY;IACf,OAAO;IACP,OAAO,SAAS,QAAQ,KAAK,uBAAuB;GACrD,EAAC,CACH,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAC5B,EACD;IACE,MAAM,SAAS,UAAU;IACzB,MAAM,SAAS,UAAU;IACzB,MAAM,SAAS,UAAU;GAC1B,EACF;AACD,UAAO,gBACL,MAAM,QAAQ,IACZ,CAAC,MAAM,MAAM,UACX,KAAK,YAAY,EACf,OAAO,SAAS,QAAQ,KAAK,uBAAuB,CACrD,EAAC,CACH,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAC5B,EACD;IACE,MAAM,SAAS,UAAU;IACzB,MAAM,SAAS,UAAU;IACzB,MAAM,SAAS,UAAU;GAC1B,EACF;AACD,UAAO,gBACL,MAAM,QAAQ,IACZ,CAAC,MAAM,MAAM,UACX,KAAK,YAAY;IACf,OAAO,SAAS,QAAQ,KAAK,uBAAuB;IACpD,OAAO,SAAS,QAAQ,KAAK,uBAAuB;GACrD,EAAC,CACH,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAC5B,EACD,CACE,MAAM,SAAS,UAAU,EACzB,MAAM,SAAS,UAAU,AAC1B,EACF;GAED,MAAM,UAAU,MAAM,KAAK,cACzB,uCACD;AACD,UAAO,gBACL,MAAM,SAAS,UAAU,EACzB,MAAM,SAAS,UAAU,CAC1B;AACD,UAAO,gBAAgB,MAAM,KAAK,eAAe,EAAE,EAAE;AACrD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,SAAS,UAAU,CAC1B;AACD,UAAO,gBACL,MAAM,KAAK,WAAW,uCAAuC,SAE9D;AACD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,SAAS,UAAU,CAC1B;AACD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,SAAS,UAAU,CAC1B;AACD,UAAO,gBACL,MAAM,QAAQ,IACZ,CAAC,MAAM,MAAM,UAAU,KAAK,YAAY,EAAE,OAAO,SAAU,EAAC,CAAC,EAAE,IAAI,CACjE,MACG,EAAE,UAAU,CAAC,CACnB,EACD;IACE,MAAM,SAAS,UAAU;IACzB,MAAM,SAAS,UAAU;IACzB,MAAM,SAAS,UAAU;GAC1B,EACF;AACD,UAAO,gBACL,MAAM,QAAQ,IACZ,CAAC,MAAM,MAAM,UAAU,KAAK,YAAY,EAAE,OAAO,SAAU,EAAC,CAAC,EAAE,IAAI,CACjE,MACG,EAAE,UAAU,CAAC,CACnB,EACD;IACE,MAAM,SAAS,UAAU;IACzB,MAAM,SAAS,UAAU;IACzB,MAAM,SAAS,UAAU;GAC1B,EACF;AAED,SAAM,KAAK,cACT,wCACA,OAAOC,eACL,WAAS,MAAM;IACb,QAAQ,MAAM,UAAU,WAAW;IACnC,SAAS,UAAU;GACpB,EAAC,CACL;AACD,UAAO,gBAAgB,MAAM,KAAK,eAAe,EAAE,EAAE;AACrD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,SAAS,UAAU,CAC1B;AACD,UAAO,gBACL,MAAM,KAAK,WAAW,uCAAuC,SAE9D;AACD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,UAAU,UAAU,CAC3B;AACD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,SAAS,UAAU,CAC1B;GAED,IAAI,gBAAgB;GACpB,MAAM,UAAU,MAAM,KAAK,cACzB,wCACA,CAAC,YAAY;AACX,oBAAgB;AAChB,WAAO;GACR,EACF;AACD,UAAO,gBAAgB,SAAS,MAAM;AACtC,UAAO,gBAAgB,eAAe,MAAM;AAC5C,UAAO,gBAAgB,MAAM,KAAK,eAAe,EAAE,EAAE;AACrD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,SAAS,UAAU,CAC1B;AACD,UAAO,gBACL,MAAM,KAAK,WAAW,uCAAuC,SAE9D;AACD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,UAAU,UAAU,CAC3B;AACD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,SAAS,UAAU,CAC1B;GAED,MAAM,WAAW,MAAM,KAAK,cAC1B,wCACA,CAAC,aACF;AACD,UAAO,gBAAgB,UAAU,MAAM;AACvC,UAAO,gBAAgB,MAAM,KAAK,eAAe,EAAE,EAAE;AACrD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,SAAS,UAAU,CAC1B;AACD,UAAO,gBACL,MAAM,KAAK,WAAW,uCAAuC,SAE9D;AACD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,UAAU,UAAU,CAC3B;AACD,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,WAAW,uCAAuC,GAChE,UAAU,EACd,MAAM,SAAS,UAAU,CAC1B;EACF,EAAC;AAEF,OAAK,aAAa,YAAY;GAC5B,MAAM,YAAY,IAAI,OAAO;IAC3B,IAAI,IAAI,IAAI;IACZ,mBAAmB;GACpB;GACD,MAAM,cAAc,IAAI,IACtB;GAEF,MAAM,YAAY,IAAI,OAAO;IAC3B,IAAI,IAAI,IAAI;IACZ,mBAAmB;GACpB;GACD,MAAM,cAAc,IAAI,IACtB;AAGF,UAAO,gBAAgB,MAAM,KAAK,gBAAgB,EAAE,EAAE;AACtD,UAAO,gBAAgB,MAAM,KAAK,YAAY,UAAU,GAAI,EAAE,MAAM;AACpE,UAAO,gBAAgB,MAAM,KAAK,YAAY,UAAU,GAAI,EAAE,MAAM;AACpE,UAAO,gBAAgB,MAAM,MAAM,UAAU,KAAK,cAAc,CAAC,EAAE,CAAE,EAAC;AAEtE,SAAM,KAAK,YAAY,aAAa,UAAU;AAC9C,UAAO,gBAAgB,MAAM,KAAK,gBAAgB,EAAE,EAAE;AACtD,UAAO,GAAG,MAAM,KAAK,YAAY,UAAU,GAAI,CAAC;AAChD,UAAO,gBAAgB,MAAM,KAAK,YAAY,UAAU,GAAI,EAAE,MAAM;AACpE,UAAO,gBACL,MAAM,QAAQ,IACZ,CAAC,MAAM,MAAM,UAAU,KAAK,cAAc,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CACtE,EACD,CAAC,MAAM,UAAU,UAAU,AAAC,EAC7B;AAED,SAAM,KAAK,YAAY,aAAa,UAAU;AAC9C,UAAO,gBAAgB,MAAM,KAAK,gBAAgB,EAAE,EAAE;AACtD,UAAO,GAAG,MAAM,KAAK,YAAY,UAAU,GAAI,CAAC;AAChD,UAAO,GAAG,MAAM,KAAK,YAAY,UAAU,GAAI,CAAC;AAChD,UAAO,gBACL,MAAM,QAAQ,IACZ,CAAC,MAAM,MAAM,UAAU,KAAK,cAAc,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CACtE,EACD,CAAC,MAAM,UAAU,UAAU,EAAE,MAAM,UAAU,UAAU,AAAC,EACzD;AACD,UAAO,gBACL,MAAM,QAAQ,IACZ,CAAC,MAAM,MAAM,UAAU,KAAK,aAAa,EAAE,QAAQ,EAAG,EAAC,CAAC,EAAE,IAAI,CAAC,MAC7D,EAAE,UAAU,CACb,CACF,EACD,CAAC,MAAM,UAAU,UAAU,AAAC,EAC7B;AACD,UAAO,gBACL,MAAM,QAAQ,IACZ,CAAC,MAAM,MAAM,UAAU,KAAK,aAAa,EAAE,OAAO,EAAG,EAAC,CAAC,EAAE,IAAI,CAAC,MAC5D,EAAE,UAAU,CACb,CACF,EACD,CAAC,MAAM,UAAU,UAAU,AAAC,EAC7B;AAED,UAAO,gBACL,MAAM,KAAK,eAAe,aAAa,UAAU,GAAI,SAEtD;AACD,UAAO,gBACL,MAAM,KAAK,eAAe,aAAa,UAAU,GAAI,SAEtD;AACD,UAAO,gBAAgB,MAAM,KAAK,gBAAgB,EAAE,EAAE;AACtD,UAAO,GAAG,MAAM,KAAK,YAAY,UAAU,GAAI,CAAC;AAChD,UAAO,GAAG,MAAM,KAAK,YAAY,UAAU,GAAI,CAAC;AAEhD,SAAM,KAAK,eAAe,aAAa,UAAU,GAAI;AACrD,UAAO,gBAAgB,MAAM,KAAK,gBAAgB,EAAE,EAAE;AACtD,UAAO,gBAAgB,MAAM,KAAK,YAAY,UAAU,GAAI,EAAE,MAAM;AACpE,UAAO,GAAG,MAAM,KAAK,YAAY,UAAU,GAAI,CAAC;AAEhD,SAAM,KAAK,eAAe,aAAa,UAAU,GAAI;AACrD,UAAO,gBAAgB,MAAM,KAAK,gBAAgB,EAAE,EAAE;AACtD,UAAO,gBAAgB,MAAM,KAAK,YAAY,UAAU,GAAI,EAAE,MAAM;AACpE,UAAO,gBAAgB,MAAM,KAAK,YAAY,UAAU,GAAI,EAAE,MAAM;EACrE,EAAC;AAEF,OAAK,gBAAgB,YAAY;GAC/B,MAAM,SAAS,IAAI,OAAO;IACxB,IAAI,IAAI,IACN;IAEF,OAAO,IAAI,IAAI;IACf,QAAQ,IAAI,IAAI;GACjB;AAED,UAAO,gBACL,MAAM,KAAK,cAAc,uCAAuC,SAEjE;AAED,SAAM,KAAK,cAAc,wCAAwC,OAAO;AACxE,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,cAAc,uCAAuC,GACnE,UAAU,EACd,MAAM,OAAO,UAAU,CACxB;AAED,SAAM,KAAK,iBAAiB,uCAAuC;AACnE,UAAO,gBACL,MAAM,KAAK,cAAc,uCAAuC,SAEjE;EACF,EAAC;AAEF,OAAK,aAAa,YAAY;GAC5B,MAAM,aAAa,IAAI,IAAI;GAC3B,MAAM,SAAS,IAAI,OAAO;IACxB,IAAI,IAAI,IACN;IAEF,OAAO,IAAI,IAAI;IACf,QAAQ;GACT;AAED,UAAO,gBAAgB,MAAM,KAAK,YAAY,WAAW,SAAY;AAErE,SAAM,KAAK,YAAY,YAAY,OAAO;AAC1C,UAAO,gBACL,MAAM,CAAC,MAAM,KAAK,YAAY,WAAW,GAAG,UAAU,EACtD,MAAM,OAAO,UAAU,CACxB;AAED,SAAM,KAAK,eAAe,WAAW;AACrC,UAAO,gBAAgB,MAAM,KAAK,YAAY,WAAW,SAAY;EACtE,EAAC;AAEF,OAAK,eAAe,YAAY;GAC9B,MAAM,aAAa;GACnB,MAAM,aAAa;GACnB,MAAM,SAAS,IAAI,IAAI;GACvB,MAAM,SAAS,IAAI,IAAI;GACvB,MAAM,SAAS,IAAI,IAAI;AAGvB,UAAO,gBAAgB,MAAM,KAAK,YAAY,WAAW,EAAE,EAAE;AAC7D,UAAO,gBAAgB,MAAM,KAAK,WAAW,WAAW,EAAE,CAAE,EAAC;AAC7D,UAAO,gBAAgB,MAAM,KAAK,YAAY,WAAW,EAAE,EAAE;AAC7D,UAAO,gBAAgB,MAAM,KAAK,WAAW,WAAW,EAAE,CAAE,EAAC;AAG7D,SAAM,KAAK,KAAK,YAAY,QAAQ,UAAU;AAC9C,UAAO,gBAAgB,MAAM,KAAK,YAAY,WAAW,EAAE,EAAE;AAC7D,UAAO,gBAAgB,MAAM,KAAK,WAAW,WAAW,EAAE,EACxD,WAAW,EACZ,EAAC;AAGF,SAAM,KAAK,KAAK,YAAY,QAAQ,UAAU;AAC9C,UAAO,gBAAgB,MAAM,KAAK,YAAY,WAAW,EAAE,EAAE;AAC7D,UAAO,gBAAgB,MAAM,KAAK,WAAW,WAAW,EAAE,EACxD,WAAW,EACZ,EAAC;AAGF,SAAM,KAAK,KAAK,YAAY,QAAQ,UAAU;AAC9C,UAAO,gBAAgB,MAAM,KAAK,YAAY,WAAW,EAAE,EAAE;AAC7D,UAAO,gBAAgB,MAAM,KAAK,WAAW,WAAW,EAAE;IACxD,WAAW;IACX,WAAW;GACZ,EAAC;AAGF,SAAM,KAAK,KAAK,YAAY,QAAQ,UAAU;AAC9C,UAAO,gBAAgB,MAAM,KAAK,YAAY,WAAW,EAAE,EAAE;AAC7D,UAAO,gBAAgB,MAAM,KAAK,WAAW,WAAW,EAAE;IACxD,WAAW;IACX,WAAW;GACZ,EAAC;AAGF,SAAM,KAAK,KAAK,YAAY,QAAQ,UAAU;AAC9C,UAAO,gBAAgB,MAAM,KAAK,YAAY,WAAW,EAAE,EAAE;AAC7D,UAAO,gBAAgB,MAAM,KAAK,WAAW,WAAW,EAAE;IACxD,WAAW;IACX,WAAW;IACX,WAAW;GACZ,EAAC;AAGF,SAAM,KAAK,KAAK,YAAY,QAAQ,UAAU;AAC9C,SAAM,KAAK,KAAK,YAAY,QAAQ,UAAU;AAC9C,UAAO,gBAAgB,MAAM,KAAK,YAAY,WAAW,EAAE,EAAE;AAC7D,UAAO,gBAAgB,MAAM,KAAK,WAAW,WAAW,EAAE;IACxD,WAAW;IACX,WAAW;GACZ,EAAC;AAGF,UAAO,gBAAgB,MAAM,KAAK,YAAY,WAAW,EAAE,EAAE;AAC7D,UAAO,gBAAgB,MAAM,KAAK,WAAW,WAAW,EAAE;IACxD,WAAW;IACX,WAAW;IACX,WAAW;GACZ,EAAC;AAGF,SAAM,KAAK,KAAK,YAAY,QAAQ,GAAG;AACvC,UAAO,gBAAgB,MAAM,KAAK,YAAY,WAAW,EAAE,EAAE;AAC7D,UAAO,gBAAgB,MAAM,KAAK,WAAW,WAAW,EAAE;IACxD,WAAW;IACX,WAAW;IACX,WAAW;IACX,IAAI;GACL,EAAC;EACH,EAAC;CACH,EAAC;AACH"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fedify/botkit",
|
|
3
|
-
"version": "0.3.0-dev.
|
|
3
|
+
"version": "0.3.0-dev.117+4eae51f5",
|
|
4
4
|
"description": "A framework for creating ActivityPub bots",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"author": {
|
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
"README.md"
|
|
129
129
|
],
|
|
130
130
|
"dependencies": {
|
|
131
|
-
"@fedify/fedify": "^1.
|
|
131
|
+
"@fedify/fedify": "^1.8.0-dev.910",
|
|
132
132
|
"@fedify/markdown-it-hashtag": "^0.3.0",
|
|
133
133
|
"@fedify/markdown-it-mention": "^0.3.0",
|
|
134
134
|
"@js-temporal/polyfill": "^0.5.1",
|