@fedify/fedify 2.4.0-dev.2253 → 2.4.0-dev.2259

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.
Files changed (110) hide show
  1. package/dist/{builder-DdUWFCwL.mjs → builder-CBNa1Uw2.mjs} +8 -2
  2. package/dist/compat/mod.d.cts +1 -1
  3. package/dist/compat/mod.d.ts +1 -1
  4. package/dist/compat/transformers.test.mjs +1 -1
  5. package/dist/{compound-proof-CcWDD5VB.mjs → compound-proof-CMPv4UK0.mjs} +20 -3
  6. package/dist/{context-CtI307_A.d.ts → context-7NyiqIcg.d.ts} +111 -2
  7. package/dist/{context-B6X-t8gI.d.cts → context-tsYPJ2Ew.d.cts} +111 -2
  8. package/dist/{deno-D9uhdIuD.mjs → deno-C8XaXmPB.mjs} +1 -1
  9. package/dist/{docloader-fbmPhCdS.mjs → docloader-CpdFLwAg.mjs} +2 -2
  10. package/dist/federation/builder.test.mjs +1 -1
  11. package/dist/federation/compound-fanout.test.mjs +3 -3
  12. package/dist/federation/handler-compound-proof.test.mjs +3 -3
  13. package/dist/federation/handler.test.mjs +76 -5
  14. package/dist/federation/hashlink-media.test.mjs +2 -2
  15. package/dist/federation/idempotency.test.mjs +2 -2
  16. package/dist/federation/inbox-report.test.d.mts +2 -0
  17. package/dist/federation/inbox-report.test.mjs +475 -0
  18. package/dist/federation/metrics.test.mjs +1 -1
  19. package/dist/federation/middleware.test.mjs +7 -7
  20. package/dist/federation/mod.cjs +1 -1
  21. package/dist/federation/mod.d.cts +4 -3
  22. package/dist/federation/mod.d.ts +4 -3
  23. package/dist/federation/mod.js +1 -1
  24. package/dist/federation/outgoing-proof.test.mjs +5 -5
  25. package/dist/federation/portable-actor.test.mjs +3 -3
  26. package/dist/federation/portable-chain.test.mjs +3 -3
  27. package/dist/federation/portable-collection.test.mjs +4 -4
  28. package/dist/federation/portable-delivery.test.mjs +2 -2
  29. package/dist/federation/portable-gateway-keys.test.mjs +4 -4
  30. package/dist/federation/portable-inbox.test.mjs +67 -6
  31. package/dist/federation/portable-parse-uri.test.mjs +1 -1
  32. package/dist/federation/portable-route-activity.test.mjs +2 -2
  33. package/dist/federation/portable.test.mjs +3 -3
  34. package/dist/federation/send.test.mjs +3 -3
  35. package/dist/federation/tasks/enqueue.test.mjs +1 -1
  36. package/dist/federation/tasks/tasks.test.mjs +2 -2
  37. package/dist/federation/temporal.test.mjs +1 -1
  38. package/dist/federation/webfinger.test.mjs +1 -1
  39. package/dist/{federation-B858-Ylk.cjs → federation-D6giSGUT.cjs} +524 -118
  40. package/dist/{http-CUyBaVsQ.mjs → http-BqSbUEiQ.mjs} +141 -98
  41. package/dist/{http-Bp0MKAK3.cjs → http-Cki-npuA.cjs} +456 -116
  42. package/dist/{http-BoGE-nk7.js → http-OMtKlbx1.js} +439 -117
  43. package/dist/{http-DGx0KOws.d.ts → key-C1nv7_jD.d.ts} +638 -229
  44. package/dist/{http-BrwKINQn.d.cts → key-DYxuyd-s.d.cts} +638 -229
  45. package/dist/{key-BlTaKABr.mjs → key-DecAtABm.mjs} +30 -3
  46. package/dist/{kv-cache-Dmqd7s2a.mjs → kv-cache-CWWlMv-s.mjs} +1 -1
  47. package/dist/{kv-cache-BnWemxH2.cjs → kv-cache-D73yVcE5.cjs} +1 -1
  48. package/dist/{kv-cache-DhMzUXEE.js → kv-cache-J0v3UbUn.js} +1 -1
  49. package/dist/{ld-Dx8r_qJU.mjs → ld-UsN-TIPh.mjs} +40 -5
  50. package/dist/{metrics-DFkZkLrO.mjs → metrics-DWCn4VXX.mjs} +2 -1
  51. package/dist/{middleware-DC018B4u.js → middleware-BqzfIlUO.js} +524 -118
  52. package/dist/{middleware-B0RRI88k.mjs → middleware-CkjwiEBd.mjs} +512 -127
  53. package/dist/{middleware-BNhF-Ayx.mjs → middleware-DHn2q0L1.mjs} +1 -1
  54. package/dist/{mod-C7_2j7VT.d.cts → mod-BojP2Bw3.d.cts} +1 -1
  55. package/dist/{mod-Cy9VNHVw.d.ts → mod-CavhAgLw.d.cts} +5 -253
  56. package/dist/{mod-DoTWIc7F.d.cts → mod-CtpF2BU5.d.ts} +5 -253
  57. package/dist/{mod-B8MI1mpi.d.ts → mod-DEZXwV6J.d.ts} +1 -1
  58. package/dist/{mod-DFL6IxYQ.d.cts → mod-Dw-nPxQh.d.cts} +1 -1
  59. package/dist/{mod-BhTaDR5H.d.ts → mod-Xj5P4s4d.d.ts} +1 -1
  60. package/dist/mod.cjs +4 -4
  61. package/dist/mod.d.cts +7 -7
  62. package/dist/mod.d.ts +7 -7
  63. package/dist/mod.js +4 -4
  64. package/dist/nodeinfo/handler.test.mjs +1 -1
  65. package/dist/{owner-B61jjp5K.mjs → owner-CEBn81LD.mjs} +3 -3
  66. package/dist/{portable-collection-DhEA_nWT.cjs → portable-collection-DqTUBKY7.cjs} +1 -1
  67. package/dist/{portable-collection-BnktjQ04.js → portable-collection-ZkUNjtb7.js} +1 -1
  68. package/dist/{portable-collection-CyBJDEzs.mjs → portable-collection-qFSYw4TG.mjs} +2 -2
  69. package/dist/{portable-key-CPN0QZSA.mjs → portable-key-LlMkP-vz.mjs} +1 -1
  70. package/dist/{proof-CZrjvoJ3.mjs → proof-BHRf_jMG.mjs} +142 -22
  71. package/dist/{send-enxOnmZo.mjs → send-DjG8DDU_.mjs} +3 -3
  72. package/dist/sig/compound-proof-discovery.test.mjs +1 -1
  73. package/dist/sig/compound-proof-producer.test.mjs +1 -1
  74. package/dist/sig/compound-proof-verification.test.mjs +19 -2
  75. package/dist/sig/compound-proof.test.mjs +2 -2
  76. package/dist/sig/http.test.mjs +2 -2
  77. package/dist/sig/key.test.mjs +1 -1
  78. package/dist/sig/ld.test.mjs +2 -2
  79. package/dist/sig/mitra-receive-interop.test.d.mts +2 -0
  80. package/dist/sig/mitra-receive-interop.test.mjs +260 -0
  81. package/dist/sig/mitra-send-interop.test.d.mts +2 -0
  82. package/dist/sig/mitra-send-interop.test.mjs +461 -0
  83. package/dist/sig/mod.cjs +2 -2
  84. package/dist/sig/mod.d.cts +2 -2
  85. package/dist/sig/mod.d.ts +2 -2
  86. package/dist/sig/mod.js +2 -2
  87. package/dist/sig/owner.test.mjs +1 -1
  88. package/dist/sig/portable-collection.test.mjs +1 -1
  89. package/dist/sig/portable-interop.test.d.mts +2 -0
  90. package/dist/sig/portable-interop.test.mjs +156 -0
  91. package/dist/sig/portable-key.test.mjs +6 -6
  92. package/dist/sig/proof.test.mjs +161 -3
  93. package/dist/sig/tootik-request-interop.test.d.mts +2 -0
  94. package/dist/sig/tootik-request-interop.test.mjs +190 -0
  95. package/dist/sig/tootik-send-interop.test.d.mts +2 -0
  96. package/dist/sig/tootik-send-interop.test.mjs +331 -0
  97. package/dist/sig/verification.test.d.mts +2 -0
  98. package/dist/sig/verification.test.mjs +310 -0
  99. package/dist/{temporal-CBVv0xRB.mjs → temporal-BRFH_dte.mjs} +1 -1
  100. package/dist/testing/kv.test.mjs +1 -1
  101. package/dist/testing/mod.d.mts +315 -28
  102. package/dist/utils/docloader.test.mjs +2 -2
  103. package/dist/utils/kv-cache.test.mjs +1 -1
  104. package/dist/utils/mod.cjs +1 -1
  105. package/dist/utils/mod.d.cts +1 -1
  106. package/dist/utils/mod.d.ts +1 -1
  107. package/dist/utils/mod.js +1 -1
  108. package/dist/verification-C3954hQh.mjs +5 -0
  109. package/dist/verification-Dpfcw8ml.mjs +105 -0
  110. package/package.json +6 -6
@@ -0,0 +1,461 @@
1
+ import { Temporal } from "temporal-polyfill";
2
+ import "urlpattern-polyfill";
3
+ globalThis.addEventListener = () => {};
4
+ import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
5
+ import "../std__assert-DvMDRPes.mjs";
6
+ import { t as assert } from "../assert-D1Eafmd_.mjs";
7
+ import { c as verifyPortableObjectProof } from "../proof-BHRf_jMG.mjs";
8
+ import { p as verifyRequestDetailed } from "../http-BqSbUEiQ.mjs";
9
+ import { t as doesActorOwnKey } from "../owner-CEBn81LD.mjs";
10
+ import { Create } from "@fedify/vocab";
11
+ import { canonicalizePortableUri, decodeMultibase, fromCompatibleEf61Id, importDidKey } from "@fedify/vocab-runtime";
12
+ import { mockDocumentLoader, test } from "@fedify/fixture";
13
+ import { encodeHex } from "byte-encodings/hex";
14
+ import serialize from "json-canon";
15
+ //#region test-vectors/fep-ef61/mitra-v5.10.0/send/actor.json
16
+ var actor_default = {
17
+ "@context": [
18
+ "https://www.w3.org/ns/activitystreams",
19
+ "https://w3id.org/fep/ef61",
20
+ "https://w3id.org/security/v1",
21
+ "https://w3id.org/security/data-integrity/v1",
22
+ "https://www.w3.org/ns/did/v1",
23
+ "https://w3id.org/security/multikey/v1",
24
+ "https://gotosocial.org/ns",
25
+ "https://w3id.org/fep/7aa9",
26
+ {
27
+ "alsoKnownAs": {
28
+ "@id": "as:alsoKnownAs",
29
+ "@type": "@id"
30
+ },
31
+ "featuredCollections": {
32
+ "@id": "https://w3id.org/fep/7aa9#featuredCollections",
33
+ "@type": "@id"
34
+ },
35
+ "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
36
+ "movedTo": {
37
+ "@id": "as:movedTo",
38
+ "@type": "@id"
39
+ },
40
+ "toot": "http://joinmastodon.org/ns#",
41
+ "Emoji": "toot:Emoji",
42
+ "featured": {
43
+ "@id": "toot:featured",
44
+ "@type": "@id"
45
+ },
46
+ "featuredTags": {
47
+ "@id": "toot:featuredTags",
48
+ "@type": "@id"
49
+ },
50
+ "discoverable": "toot:discoverable",
51
+ "suspended": "toot:suspended",
52
+ "memorial": "toot:memorial",
53
+ "indexable": "toot:indexable",
54
+ "schema": "http://schema.org#",
55
+ "PropertyValue": "schema:PropertyValue",
56
+ "value": "schema:value",
57
+ "misskey": "https://misskey-hub.net/ns#",
58
+ "_misskey_followedMessage": "misskey:_misskey_followedMessage",
59
+ "isCat": "misskey:isCat"
60
+ }
61
+ ],
62
+ id: "https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor",
63
+ type: "Person",
64
+ inbox: "https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor/inbox",
65
+ gateways: ["https://fedify.example"],
66
+ assertionMethod: [{
67
+ "id": "https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor#ed25519-key",
68
+ "type": "Multikey",
69
+ "controller": "https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor",
70
+ "publicKeyMultibase": "z6Mkf1YFSzwyC6ZJL28STR5rei2XNJHCVKU2mV1gP768cixM"
71
+ }, {
72
+ "id": "https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor#main-key",
73
+ "type": "Multikey",
74
+ "controller": "https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor",
75
+ "publicKeyMultibase": "zgghBUVkqmWS8e1ittJsA5xRdPNj4WxsfUGuo2kK6NrkUwKxyRNaEQHLxYUezPkdjEkRRjg98U6LJyngicRLa1Q6fTMMtJy8DujadGoHcbY1aUP9vskG7coev8Mw68VFnuvP7zwf1pH62HYt7CxMnx1CMfS719LfQubVU2VQra8YhWScQanNiRnQqe1qKeVrJLiMCEe7UtfhonS6KgtPQWgapVFZjk2a78n8arg4DdHdwhq9KwG9iBzAkKz5w3hxzLq4p8aVR9Mkcyq7265UoqUkRRz4sFcuKvGjB47MpSi8yEJuLFy1VZUkDRka5YV4N2AwUabVLYJF64itr1DpqaZRvkzMC1KEZY6KQPpS1vydLgqYFbJEV4bhzqu7GJpiGq6aL2NSNSAQxFTv9ergd5aLQdXQUGYk8NzPj5YSjchUmHhu1SVBSuYApHkcXbn4EUo9PYhRnCAY4wymKma4JzqYtQPPGCKps6zar2GM5DFNFkKFxPWdxY5Ugdk5jj9ccEr963hnnb9nPeRYsFYDhEFGzwLUGooWVHggoLVRDMHvqnCdSiQaQhdyE9DVxZMWgBynbZN71kzc6ur726TAmNo4X4NQiWcwKNnWbaBAPUocJ8Hy9YSD9xVg41644iE6Q8JaYz5d9E9NNZ8dv2vTL4aFdWELGP8fBnNvgjMz47tctMde4aKcqkdE9DRAJ82ShuUPWmEUBrRPXBwiXa"
76
+ }],
77
+ proof: {
78
+ "type": "DataIntegrityProof",
79
+ "created": "2026-09-30T14:54:41.245020996Z",
80
+ "cryptosuite": "eddsa-jcs-2022",
81
+ "proofPurpose": "assertionMethod",
82
+ "proofValue": "zViP1tF9MaXjUAu9agaoL8RQuGKQyd6MLyyXi5P1RZPnC8kWR5TVFJWqNDFmvYpu5apF7cbq35msfCTNSbhNQsma",
83
+ "verificationMethod": "did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f#z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f",
84
+ "@context": [
85
+ "https://www.w3.org/ns/activitystreams",
86
+ "https://w3id.org/fep/ef61",
87
+ "https://w3id.org/security/v1",
88
+ "https://w3id.org/security/data-integrity/v1",
89
+ "https://www.w3.org/ns/did/v1",
90
+ "https://w3id.org/security/multikey/v1",
91
+ "https://gotosocial.org/ns",
92
+ "https://w3id.org/fep/7aa9",
93
+ {
94
+ "alsoKnownAs": {
95
+ "@id": "as:alsoKnownAs",
96
+ "@type": "@id"
97
+ },
98
+ "featuredCollections": {
99
+ "@id": "https://w3id.org/fep/7aa9#featuredCollections",
100
+ "@type": "@id"
101
+ },
102
+ "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
103
+ "movedTo": {
104
+ "@id": "as:movedTo",
105
+ "@type": "@id"
106
+ },
107
+ "toot": "http://joinmastodon.org/ns#",
108
+ "Emoji": "toot:Emoji",
109
+ "featured": {
110
+ "@id": "toot:featured",
111
+ "@type": "@id"
112
+ },
113
+ "featuredTags": {
114
+ "@id": "toot:featuredTags",
115
+ "@type": "@id"
116
+ },
117
+ "discoverable": "toot:discoverable",
118
+ "suspended": "toot:suspended",
119
+ "memorial": "toot:memorial",
120
+ "indexable": "toot:indexable",
121
+ "schema": "http://schema.org#",
122
+ "PropertyValue": "schema:PropertyValue",
123
+ "value": "schema:value",
124
+ "misskey": "https://misskey-hub.net/ns#",
125
+ "_misskey_followedMessage": "misskey:_misskey_followedMessage",
126
+ "isCat": "misskey:isCat"
127
+ }
128
+ ]
129
+ },
130
+ publicKey: {
131
+ "id": "https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor#main-key",
132
+ "type": "CryptographicKey",
133
+ "owner": "https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor",
134
+ "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvM94PB5yiw79af0NeKvL\nFICG2J3OjSvmQCI1+pRbXC07kmf9I4E6yTV+SO6yONpUYFrsmMw+SL13n6V7dyHR\nHx5FXD4Z09sUfhDiQgrrbmx5yu9FA5K88nvw0Fgi0npSdctTDuFVzfYron6jeZB9\ncEeXGoeGb+JTcHleozEPOOSKZ3gU4f/iZo2hg73igGswDtmQcIWKH3h7l0fxqoxk\na3iZt1gt+8TL1hwkAv7rnnPyWmZfPGNIG+CYD+bUwN5ee1ZonDJKZlMOgg0imNam\n3WEXtLpb0ZKla0MzIET452eUYgKNbBJkdvtbfI32x+Zf7OO0kkk1LxMeeRuUKEwv\n74gPJ6tKADz3cBGHkG77ZRrbazCncKoSeX4TdDWJC4gmvL2mPF8mtK2BuBQw26wB\nqaimlg+SJqmZEJgxbG3mGR6hu8d3ltpnjgxCeOUOuSB19Sird14OnNd9fL9SJW+R\ne4AIashoFt5l4SjGHF98Q+DbQu6wP2OICuFLslTfcoAqyXZqHe0SygUzg0/kWAhw\nGsa/25KBEYXnSMAn/+FrONDProw+qf9yX9qLS+gUn9yxhsm9bVAlT1wXIPrA9FRn\nR5SD8AWRnkAKB0mblohfoBCYqTSIDao0UvnwrdfaNAqOcrey5Gget5sZN3HU5kj8\nkciSCLPd/39lMbcFxLo25eECAwEAAQ==\n-----END PUBLIC KEY-----\n"
135
+ },
136
+ name: "Distinct native Fedify portable sender",
137
+ outbox: "https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor/outbox",
138
+ preferredUsername: "fedifydistinct"
139
+ };
140
+ //#endregion
141
+ //#region test-vectors/fep-ef61/mitra-v5.10.0/send/request.json
142
+ var url = "http://127.0.0.1:18497/.well-known/apgateway/did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor/inbox";
143
+ var method = "POST";
144
+ var headers$1 = [
145
+ ["content-digest", "sha-256=:NGEDJ4axbB7yS73hitYgyz9PM1NF6ouUEbniRUZNW1I=:"],
146
+ ["content-type", "application/activity+json"],
147
+ ["date", "Wed, 30 Sep 2026 14:54:41 GMT"],
148
+ ["host", "127.0.0.1:18497"],
149
+ ["signature", "sig1=:qay1Qd3ThdK3t0I8P68f91NAnwCZZsyIfxSIfI4MHU6Vm/3yBqzCeY5V2GHRPDS6tZd4SzUlfiHEhTATD+eNoPHuzZwLjazgkV0Rb7wx9sfem8/D1TUkX6DugXKnNOIxK/73q+RHHU459ZwH+YPpZ9ggtkIXl2FY+2hd0R4dHtR4qpQiWP8HdWZNNU2uTYdH7g3f/qT+LoBRzAIcVA1/3TomT3b7shS740ZFndvPlvOZFyWjkGS7twNUPL/525ywe6y3I7YmWKccaNMM+ZIDUwwhgT0RF4SVYmbyxI7Nc5VZguu5DP8RqB4BFzNeTOqPJcv9xQUP/JiqqeBTG1kCvGjVAUfxt5JYDUDw1EROSZ6pSdKiL8gcGcg3TsS6jAAfqAvhxDEMh8DDsz4eHQrgJWIp44RdYHCM+eWdldzbS9wrVIFtiOWcaEFvf51HbWjR4UnGIjXldwOURKS0S7Phya5qwz+3x96Hfg58+DgK9xbINStvy4XjmYsFN3lTkLMikoB/FJ5LLEBa0VX/QBcsBzQs8QxFYnwDoYw0hz4Cpe3Qe4kEVkQNSxlkl1sbxt9S3S9KLdMeHNarzjyZldUxaCSQ/dFKVRibutk+BMKoM9JOMnR7MKq6rVvE8/99Ot8WEYHItpU/S74t/LCWLDy5NY/PlhMGssVASlHs3vA553s=:"],
150
+ ["signature-input", "sig1=(\"@method\" \"@target-uri\" \"@authority\" \"host\" \"date\" \"content-digest\");alg=\"rsa-v1_5-sha256\";keyid=\"https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor#main-key\";created=1790780081"]
151
+ ];
152
+ //#endregion
153
+ //#region test-vectors/fep-ef61/mitra-v5.10.0/send/registration-response.json
154
+ var status$3 = 201;
155
+ //#endregion
156
+ //#region test-vectors/fep-ef61/mitra-v5.10.0/send/served-actor.json
157
+ var served_actor_default = {
158
+ "@context": [
159
+ "https://www.w3.org/ns/activitystreams",
160
+ "https://w3id.org/security/v1",
161
+ "https://www.w3.org/ns/did/v1",
162
+ "https://w3id.org/security/data-integrity/v1",
163
+ "https://w3id.org/security/multikey/v1",
164
+ "https://w3id.org/fep/ef61"
165
+ ],
166
+ assertionMethod: [
167
+ {
168
+ "controller": "ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor",
169
+ "id": "ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor#main-key",
170
+ "publicKeyMultibase": "z4MXj1wBzi9jUstyPQj1tJmBTCJQwSmgdEH3r3AcgJRwZBMkP3rY67NfsjsVyeRAH24e8frWsjLuhKJ3G9yRWp2R848U8Yeh8kNyR9GF2vmGEi6BHNEqhGnZMMQnAnLovqzQ7p9vfSsHUYU19yrzEwCSFumsDkk4np96HCjbkpejfNkDDAjPexavs9KSdovfFhJdb1uy4wcyG3ynZFSKsyPQyEUVFd72ufLKgG4h8j4fNHqwzvVQG1tRnqMqzFgS6uXJfftXGsAC6QVE5keYdicLvJ6n2t5UrCsVSeoMwgSuDpXVB8vXuhFkxNz4v2bKBHuHVUzA7cKWxoY5gaczcq4on1P23vsRbtxhkWUQgUA4KMenYWDLk",
171
+ "type": "Multikey"
172
+ },
173
+ {
174
+ "controller": "ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor",
175
+ "id": "ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor#ed25519-key",
176
+ "publicKeyMultibase": "z6MknVDBdr3PRNFK35WPFbHxy7m5g18iuoSTht4vRwzt9WKq",
177
+ "type": "Multikey"
178
+ },
179
+ {
180
+ "controller": "ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor",
181
+ "id": "http://localhost:18498/.well-known/apgateway/did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor#fedify-rsa",
182
+ "publicKeyMultibase": "zgghBUVkqmWS8e1imM79CWx4zopmbKaBcdbLUSHjyo3KNnBVZscUs1T8HXSrY7yeSQJZSrrEjtnXq1tWc9fKL31uDYYbr8iSbtiRiXDxUQLA1ZDRH2tsz8a8PufoKK3w9qwNaxkcFVa5YKZ99ahxvvEJ86oDpPexr1HoE5wux1XihNx7kPtpJseQVKjTPYM1YcWe3SqDvy374ZaGFZx5YpxcVCr5gfF9iDHP8KWnYwWF3ge6icMQiqkiCZxsjeV8DL7ww7DJiQniYbk4qZ7mvcpqts657MPR7NWeFKim9wKy6mzaKEdDnkkVeTPbQYFgCUsZyrZcbBFTZp3YAnpTA2k4vmjBvKUyUKzrtXrJAuNgU7Y2cvdxRSCKorAJ38brzReEHA8Vwk72t9Le2P7PVqbUNScKt3L1v1pvQr28rim9Ff7uqPmK4R9j5FR7Tse4qq8zGoxYVAoH5isp9udJjLCs7BsF9MekS1D4aardVzMmqCzjiWCfjeUtTGdkqREsUkGyD3seFUGKui2aqafzVATZQCze4X3KcXL8vLWfq1W7VEx5HVCy5aCAV9E2VCUwimuUNfuSVYGaSY6S3XGXpMYCftak9VA4r22pZCCePC6fXwGhVNwo2mznyZNGbWc1fRLVCr45pS1RaXd58RrXWc2d4HcXdpsQ3XK6tiA4GJUe276bvKmktYKzcfn7KXs9ZHddFNe1SyctHP2JNL",
183
+ "type": "Multikey"
184
+ }
185
+ ],
186
+ gateways: ["http://127.0.0.1:18497", "http://localhost:18498"],
187
+ id: "ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor",
188
+ inbox: "ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor/inbox",
189
+ name: "Fedify live portable client",
190
+ outbox: "ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor/outbox",
191
+ preferredUsername: "fepsgnpakpb",
192
+ proof: {
193
+ "@context": [
194
+ "https://www.w3.org/ns/activitystreams",
195
+ "https://w3id.org/security/v1",
196
+ "https://www.w3.org/ns/did/v1",
197
+ "https://w3id.org/security/data-integrity/v1",
198
+ "https://w3id.org/security/multikey/v1",
199
+ "https://w3id.org/fep/ef61"
200
+ ],
201
+ "created": "2026-09-30T14:46:57.846825928Z",
202
+ "cryptosuite": "eddsa-jcs-2022",
203
+ "proofPurpose": "assertionMethod",
204
+ "proofValue": "z32F5XC6bGuzR6ZE5jCiKTQXcFm2F6fp7WLFWM69bkv7RDXSxe67fXjJXgtdLoQBYqsWnqZqczVvivhACfAYaj1kG",
205
+ "type": "DataIntegrityProof",
206
+ "verificationMethod": "did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB#z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB"
207
+ },
208
+ publicKey: {
209
+ "id": "http://localhost:18498/.well-known/apgateway/did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor#fedify-rsa",
210
+ "owner": "ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor",
211
+ "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAoSFdSVINqqwdCPZrEo8H\nqwx1bmlm/sT7RXpb53oDt0kWOnjhGrNnRSXa4PbHKCPH6yrzV3xGpmN1zVAXcShg\nu44m1NXbtBtfuEVHSOebRQWu2wyQRYlDk76MEyT33GDtNJf/4OnjnBXO71ebEFVY\nSKWkZacdS0Ft42sqvFaAK4/RDUEiUWE2t4YsEthT90fo+rXz/Snnv74p70eHnjD8\n6P29f8JKITTaqXp1ltuoiS9oEIFV/6FQ7HPMfzdBIgMvg/3pDDr1stFT56Slsvrr\nnMF4J2jy1HNYEo1V7HvS7wStZmGRPNYoiSTHvbk5Vm3ZCmE3Qzng/Sus19KN/B57\njkeOA8ObS5OXCjshZ+GrBmSnAzZjl+Gm6gQDKBk8/ilaSXH2QtCR4TQmvbsCjRFA\njoXcKvMh4SfnWGXC5XdkbVjXJuFSHHFNbHBCLygk/IJdbvEHQpPH4Rsqbc3f4TvL\n3ge/Jd6rm7huVlax3UMq7qUWTtb1PRjjSlrV0Tj5REv1KNe5VGvhMpQmHfJe7zd0\nBVbgi4I91QRJg9XF/dYXgm330skdSkM0UapBNo9xbgK3ejyNWG5aHcazO+DSdWNu\n5AbkXLB7m5djxb5ONrOYzz7llW4kg2H0zWNLFbRvdfKowdG906J4h9+6ZYhwufMa\ndVHS/5EyQbbwVeqe+MG0Qo8CAwEAAQ==\n-----END PUBLIC KEY-----\n",
212
+ "type": "CryptographicKey"
213
+ },
214
+ type: "Person"
215
+ };
216
+ //#endregion
217
+ //#region test-vectors/fep-ef61/mitra-v5.10.0/send/baseline-gateway-response.json
218
+ var status$2 = 400;
219
+ var body = "invalid gateway URL";
220
+ //#endregion
221
+ //#region test-vectors/fep-ef61/mitra-v5.10.0/send/tampered-request.json
222
+ var headers = [
223
+ ["content-digest", "sha-256=:NGEDJ4axbB7yS73hitYgyz9PM1NF6ouUEbniRUZNW1I=:"],
224
+ ["content-type", "application/activity+json"],
225
+ ["date", "Wed, 30 Sep 2026 14:54:41 GMT"],
226
+ ["host", "127.0.0.1:18497"],
227
+ ["signature", "sig1=:AAAA:"],
228
+ ["signature-input", "sig1=(\"@method\" \"@target-uri\" \"@authority\" \"host\" \"date\" \"content-digest\");alg=\"rsa-v1_5-sha256\";keyid=\"https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor#main-key\";created=1790780081"]
229
+ ];
230
+ //#endregion
231
+ //#region test-vectors/fep-ef61/mitra-v5.10.0/send/metadata.json
232
+ var capturedAt = "2026-09-30T14:54:41.299Z";
233
+ var sha256 = {
234
+ "requestBody": "3461032786b16c1ef24bbde18ad620cb3f4f335345ea8b9411b9e245464d5b52",
235
+ "actorBody": "929d8261e6cad24c5fba8dea51d657ce2533659414f92bfa22274e3f327402e0",
236
+ "servedActorBody": "f24c677b3854353c272c29164342f94f420b7570aaf2999d1ea179c7c24ba4bc",
237
+ "baselineGatewayBody": "67d10fbd74702a45697a310830439360b3f355af370bccbeea2a09b3000016f0"
238
+ };
239
+ var senderDid = "did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f";
240
+ var recipientDid = "did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB";
241
+ //#endregion
242
+ //#region test-vectors/fep-ef61/mitra-v5.10.0/send/processed-collections.json
243
+ var rows$2 = [{
244
+ "collection_id": "ap://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor/inbox",
245
+ "object_id": "ap://did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/creates/distinct-native-inbox",
246
+ "type": "Create",
247
+ "actor": "https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor",
248
+ "created_at": "2026-09-30T14:54:42.256068+00:00"
249
+ }];
250
+ //#endregion
251
+ //#region test-vectors/fep-ef61/mitra-v5.10.0/send/processed-note.json
252
+ var rows$1 = [{
253
+ "object_id": "ap://did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/notes/distinct-native-inbox",
254
+ "object_data": {
255
+ "id": "https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/notes/distinct-native-inbox",
256
+ "to": ["https://www.w3.org/ns/activitystreams#Public", "ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor"],
257
+ "tag": {
258
+ "href": "http://127.0.0.1:18497/.well-known/apgateway/did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor",
259
+ "name": "@recipient",
260
+ "type": "Mention"
261
+ },
262
+ "type": "Note",
263
+ "proof": {
264
+ "type": "DataIntegrityProof",
265
+ "created": "2026-09-30T14:54:41.259099121Z",
266
+ "@context": [
267
+ "https://www.w3.org/ns/activitystreams",
268
+ "https://w3id.org/security/data-integrity/v1",
269
+ "https://gotosocial.org/ns",
270
+ {
271
+ "toot": "http://joinmastodon.org/ns#",
272
+ "Emoji": "toot:Emoji",
273
+ "quote": {
274
+ "@id": "https://w3id.org/fep/044f#quote",
275
+ "@type": "@id"
276
+ },
277
+ "Hashtag": "as:Hashtag",
278
+ "misskey": "https://misskey-hub.net/ns#",
279
+ "fedibird": "http://fedibird.com/ns#",
280
+ "quoteUri": "fedibird:quoteUri",
281
+ "quoteUrl": "as:quoteUrl",
282
+ "sensitive": "as:sensitive",
283
+ "_misskey_quote": "misskey:_misskey_quote",
284
+ "emojiReactions": {
285
+ "@id": "fedibird:emojiReactions",
286
+ "@type": "@id"
287
+ },
288
+ "QuoteAuthorization": "https://w3id.org/fep/044f#QuoteAuthorization",
289
+ "quoteAuthorization": {
290
+ "@id": "https://w3id.org/fep/044f#quoteAuthorization",
291
+ "@type": "@id"
292
+ }
293
+ }
294
+ ],
295
+ "proofValue": "z3R9SJKwgDrpPUeiiLNP9gkQStLfpLSoyFAPAi3NF17Pk6nqJGrs3ZrprA9gcd8eWQkmrYXc5Cry2tFqDgHtDL3Ru",
296
+ "cryptosuite": "eddsa-jcs-2022",
297
+ "proofPurpose": "assertionMethod",
298
+ "verificationMethod": "did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f#z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f"
299
+ },
300
+ "content": "<p>Distinct Fedify portable actor to live Mitra recipient.</p>",
301
+ "@context": [
302
+ "https://www.w3.org/ns/activitystreams",
303
+ "https://w3id.org/security/data-integrity/v1",
304
+ "https://gotosocial.org/ns",
305
+ {
306
+ "toot": "http://joinmastodon.org/ns#",
307
+ "Emoji": "toot:Emoji",
308
+ "quote": {
309
+ "@id": "https://w3id.org/fep/044f#quote",
310
+ "@type": "@id"
311
+ },
312
+ "Hashtag": "as:Hashtag",
313
+ "misskey": "https://misskey-hub.net/ns#",
314
+ "fedibird": "http://fedibird.com/ns#",
315
+ "quoteUri": "fedibird:quoteUri",
316
+ "quoteUrl": "as:quoteUrl",
317
+ "sensitive": "as:sensitive",
318
+ "_misskey_quote": "misskey:_misskey_quote",
319
+ "emojiReactions": {
320
+ "@id": "fedibird:emojiReactions",
321
+ "@type": "@id"
322
+ },
323
+ "QuoteAuthorization": "https://w3id.org/fep/044f#QuoteAuthorization",
324
+ "quoteAuthorization": {
325
+ "@id": "https://w3id.org/fep/044f#quoteAuthorization",
326
+ "@type": "@id"
327
+ }
328
+ }
329
+ ],
330
+ "attributedTo": "https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor"
331
+ },
332
+ "has_processed_post": true,
333
+ "created_at": "2026-09-30T14:54:42.251223+00:00"
334
+ }];
335
+ //#endregion
336
+ //#region test-vectors/fep-ef61/mitra-v5.10.0/send/profiles.json
337
+ var rows = [{
338
+ "actor_id": "ap://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor",
339
+ "identity_key": null,
340
+ "has_portable_account": true
341
+ }, {
342
+ "actor_id": "ap://did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor",
343
+ "identity_key": null,
344
+ "has_portable_account": false
345
+ }];
346
+ //#endregion
347
+ //#region test-vectors/fep-ef61/mitra-v5.10.0/send/raw-bodies.json
348
+ var raw_bodies_default = {
349
+ requestBody: "{\"@context\":[\"https://w3id.org/identity/v1\",\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/data-integrity/v1\",\"https://gotosocial.org/ns\",{\"toot\":\"http://joinmastodon.org/ns#\",\"misskey\":\"https://misskey-hub.net/ns#\",\"fedibird\":\"http://fedibird.com/ns#\",\"sensitive\":\"as:sensitive\",\"votersCount\":{\"@id\":\"toot:votersCount\",\"@type\":\"http://www.w3.org/2001/XMLSchema#nonNegativeInteger\"},\"Emoji\":\"toot:Emoji\",\"Hashtag\":\"as:Hashtag\",\"ChatMessage\":\"http://litepub.social/ns#ChatMessage\",\"quote\":{\"@id\":\"https://w3id.org/fep/044f#quote\",\"@type\":\"@id\"},\"quoteUrl\":\"as:quoteUrl\",\"_misskey_quote\":\"misskey:_misskey_quote\",\"quoteUri\":\"fedibird:quoteUri\",\"QuoteAuthorization\":\"https://w3id.org/fep/044f#QuoteAuthorization\",\"QuoteRequest\":\"https://w3id.org/fep/044f#QuoteRequest\",\"quoteAuthorization\":{\"@id\":\"https://w3id.org/fep/044f#quoteAuthorization\",\"@type\":\"@id\"},\"emojiReactions\":{\"@id\":\"fedibird:emojiReactions\",\"@type\":\"@id\"}}],\"id\":\"https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/creates/distinct-native-inbox\",\"type\":\"Create\",\"proof\":{\"type\":\"DataIntegrityProof\",\"created\":\"2026-09-30T14:54:41.271699951Z\",\"cryptosuite\":\"eddsa-jcs-2022\",\"proofPurpose\":\"assertionMethod\",\"proofValue\":\"zGf4yDymnbe7B8HqmcG7XBf5anp8WU653AzzVgRCxfZ4HB7BXwWV7qp22xrH3QxX8akwk4btngSomGStDjqshp7x\",\"verificationMethod\":\"did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f#z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f\",\"@context\":[\"https://w3id.org/identity/v1\",\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/data-integrity/v1\",\"https://gotosocial.org/ns\",{\"toot\":\"http://joinmastodon.org/ns#\",\"misskey\":\"https://misskey-hub.net/ns#\",\"fedibird\":\"http://fedibird.com/ns#\",\"sensitive\":\"as:sensitive\",\"votersCount\":{\"@id\":\"toot:votersCount\",\"@type\":\"http://www.w3.org/2001/XMLSchema#nonNegativeInteger\"},\"Emoji\":\"toot:Emoji\",\"Hashtag\":\"as:Hashtag\",\"ChatMessage\":\"http://litepub.social/ns#ChatMessage\",\"quote\":{\"@id\":\"https://w3id.org/fep/044f#quote\",\"@type\":\"@id\"},\"quoteUrl\":\"as:quoteUrl\",\"_misskey_quote\":\"misskey:_misskey_quote\",\"quoteUri\":\"fedibird:quoteUri\",\"QuoteAuthorization\":\"https://w3id.org/fep/044f#QuoteAuthorization\",\"QuoteRequest\":\"https://w3id.org/fep/044f#QuoteRequest\",\"quoteAuthorization\":{\"@id\":\"https://w3id.org/fep/044f#quoteAuthorization\",\"@type\":\"@id\"},\"emojiReactions\":{\"@id\":\"fedibird:emojiReactions\",\"@type\":\"@id\"}}]},\"actor\":\"https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor\",\"object\":{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/data-integrity/v1\",\"https://gotosocial.org/ns\",{\"toot\":\"http://joinmastodon.org/ns#\",\"misskey\":\"https://misskey-hub.net/ns#\",\"fedibird\":\"http://fedibird.com/ns#\",\"sensitive\":\"as:sensitive\",\"Emoji\":\"toot:Emoji\",\"Hashtag\":\"as:Hashtag\",\"quote\":{\"@id\":\"https://w3id.org/fep/044f#quote\",\"@type\":\"@id\"},\"quoteUrl\":\"as:quoteUrl\",\"_misskey_quote\":\"misskey:_misskey_quote\",\"quoteUri\":\"fedibird:quoteUri\",\"QuoteAuthorization\":\"https://w3id.org/fep/044f#QuoteAuthorization\",\"quoteAuthorization\":{\"@id\":\"https://w3id.org/fep/044f#quoteAuthorization\",\"@type\":\"@id\"},\"emojiReactions\":{\"@id\":\"fedibird:emojiReactions\",\"@type\":\"@id\"}}],\"id\":\"https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/notes/distinct-native-inbox\",\"type\":\"Note\",\"attributedTo\":\"https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor\",\"content\":\"<p>Distinct Fedify portable actor to live Mitra recipient.</p>\",\"tag\":{\"type\":\"Mention\",\"href\":\"http://127.0.0.1:18497/.well-known/apgateway/did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor\",\"name\":\"@recipient\"},\"to\":[\"https://www.w3.org/ns/activitystreams#Public\",\"ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor\"],\"proof\":{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/data-integrity/v1\",\"https://gotosocial.org/ns\",{\"toot\":\"http://joinmastodon.org/ns#\",\"misskey\":\"https://misskey-hub.net/ns#\",\"fedibird\":\"http://fedibird.com/ns#\",\"sensitive\":\"as:sensitive\",\"Emoji\":\"toot:Emoji\",\"Hashtag\":\"as:Hashtag\",\"quote\":{\"@id\":\"https://w3id.org/fep/044f#quote\",\"@type\":\"@id\"},\"quoteUrl\":\"as:quoteUrl\",\"_misskey_quote\":\"misskey:_misskey_quote\",\"quoteUri\":\"fedibird:quoteUri\",\"QuoteAuthorization\":\"https://w3id.org/fep/044f#QuoteAuthorization\",\"quoteAuthorization\":{\"@id\":\"https://w3id.org/fep/044f#quoteAuthorization\",\"@type\":\"@id\"},\"emojiReactions\":{\"@id\":\"fedibird:emojiReactions\",\"@type\":\"@id\"}}],\"type\":\"DataIntegrityProof\",\"created\":\"2026-09-30T14:54:41.259099121Z\",\"cryptosuite\":\"eddsa-jcs-2022\",\"proofPurpose\":\"assertionMethod\",\"proofValue\":\"z3R9SJKwgDrpPUeiiLNP9gkQStLfpLSoyFAPAi3NF17Pk6nqJGrs3ZrprA9gcd8eWQkmrYXc5Cry2tFqDgHtDL3Ru\",\"verificationMethod\":\"did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f#z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f\"}},\"to\":[\"https://www.w3.org/ns/activitystreams#Public\",\"ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor\"]}",
350
+ actorBody: "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/fep/ef61\",\"https://w3id.org/security/v1\",\"https://w3id.org/security/data-integrity/v1\",\"https://www.w3.org/ns/did/v1\",\"https://w3id.org/security/multikey/v1\",\"https://gotosocial.org/ns\",\"https://w3id.org/fep/7aa9\",{\"alsoKnownAs\":{\"@id\":\"as:alsoKnownAs\",\"@type\":\"@id\"},\"featuredCollections\":{\"@id\":\"https://w3id.org/fep/7aa9#featuredCollections\",\"@type\":\"@id\"},\"manuallyApprovesFollowers\":\"as:manuallyApprovesFollowers\",\"movedTo\":{\"@id\":\"as:movedTo\",\"@type\":\"@id\"},\"toot\":\"http://joinmastodon.org/ns#\",\"Emoji\":\"toot:Emoji\",\"featured\":{\"@id\":\"toot:featured\",\"@type\":\"@id\"},\"featuredTags\":{\"@id\":\"toot:featuredTags\",\"@type\":\"@id\"},\"discoverable\":\"toot:discoverable\",\"suspended\":\"toot:suspended\",\"memorial\":\"toot:memorial\",\"indexable\":\"toot:indexable\",\"schema\":\"http://schema.org#\",\"PropertyValue\":\"schema:PropertyValue\",\"value\":\"schema:value\",\"misskey\":\"https://misskey-hub.net/ns#\",\"_misskey_followedMessage\":\"misskey:_misskey_followedMessage\",\"isCat\":\"misskey:isCat\"}],\"id\":\"https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor\",\"type\":\"Person\",\"inbox\":\"https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor/inbox\",\"gateways\":[\"https://fedify.example\"],\"assertionMethod\":[{\"id\":\"https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor#ed25519-key\",\"type\":\"Multikey\",\"controller\":\"https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor\",\"publicKeyMultibase\":\"z6Mkf1YFSzwyC6ZJL28STR5rei2XNJHCVKU2mV1gP768cixM\"},{\"id\":\"https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor#main-key\",\"type\":\"Multikey\",\"controller\":\"https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor\",\"publicKeyMultibase\":\"zgghBUVkqmWS8e1ittJsA5xRdPNj4WxsfUGuo2kK6NrkUwKxyRNaEQHLxYUezPkdjEkRRjg98U6LJyngicRLa1Q6fTMMtJy8DujadGoHcbY1aUP9vskG7coev8Mw68VFnuvP7zwf1pH62HYt7CxMnx1CMfS719LfQubVU2VQra8YhWScQanNiRnQqe1qKeVrJLiMCEe7UtfhonS6KgtPQWgapVFZjk2a78n8arg4DdHdwhq9KwG9iBzAkKz5w3hxzLq4p8aVR9Mkcyq7265UoqUkRRz4sFcuKvGjB47MpSi8yEJuLFy1VZUkDRka5YV4N2AwUabVLYJF64itr1DpqaZRvkzMC1KEZY6KQPpS1vydLgqYFbJEV4bhzqu7GJpiGq6aL2NSNSAQxFTv9ergd5aLQdXQUGYk8NzPj5YSjchUmHhu1SVBSuYApHkcXbn4EUo9PYhRnCAY4wymKma4JzqYtQPPGCKps6zar2GM5DFNFkKFxPWdxY5Ugdk5jj9ccEr963hnnb9nPeRYsFYDhEFGzwLUGooWVHggoLVRDMHvqnCdSiQaQhdyE9DVxZMWgBynbZN71kzc6ur726TAmNo4X4NQiWcwKNnWbaBAPUocJ8Hy9YSD9xVg41644iE6Q8JaYz5d9E9NNZ8dv2vTL4aFdWELGP8fBnNvgjMz47tctMde4aKcqkdE9DRAJ82ShuUPWmEUBrRPXBwiXa\"}],\"proof\":{\"type\":\"DataIntegrityProof\",\"created\":\"2026-09-30T14:54:41.245020996Z\",\"cryptosuite\":\"eddsa-jcs-2022\",\"proofPurpose\":\"assertionMethod\",\"proofValue\":\"zViP1tF9MaXjUAu9agaoL8RQuGKQyd6MLyyXi5P1RZPnC8kWR5TVFJWqNDFmvYpu5apF7cbq35msfCTNSbhNQsma\",\"verificationMethod\":\"did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f#z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f\",\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/fep/ef61\",\"https://w3id.org/security/v1\",\"https://w3id.org/security/data-integrity/v1\",\"https://www.w3.org/ns/did/v1\",\"https://w3id.org/security/multikey/v1\",\"https://gotosocial.org/ns\",\"https://w3id.org/fep/7aa9\",{\"alsoKnownAs\":{\"@id\":\"as:alsoKnownAs\",\"@type\":\"@id\"},\"featuredCollections\":{\"@id\":\"https://w3id.org/fep/7aa9#featuredCollections\",\"@type\":\"@id\"},\"manuallyApprovesFollowers\":\"as:manuallyApprovesFollowers\",\"movedTo\":{\"@id\":\"as:movedTo\",\"@type\":\"@id\"},\"toot\":\"http://joinmastodon.org/ns#\",\"Emoji\":\"toot:Emoji\",\"featured\":{\"@id\":\"toot:featured\",\"@type\":\"@id\"},\"featuredTags\":{\"@id\":\"toot:featuredTags\",\"@type\":\"@id\"},\"discoverable\":\"toot:discoverable\",\"suspended\":\"toot:suspended\",\"memorial\":\"toot:memorial\",\"indexable\":\"toot:indexable\",\"schema\":\"http://schema.org#\",\"PropertyValue\":\"schema:PropertyValue\",\"value\":\"schema:value\",\"misskey\":\"https://misskey-hub.net/ns#\",\"_misskey_followedMessage\":\"misskey:_misskey_followedMessage\",\"isCat\":\"misskey:isCat\"}]},\"publicKey\":{\"id\":\"https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor#main-key\",\"type\":\"CryptographicKey\",\"owner\":\"https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor\",\"publicKeyPem\":\"-----BEGIN PUBLIC KEY-----\\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvM94PB5yiw79af0NeKvL\\nFICG2J3OjSvmQCI1+pRbXC07kmf9I4E6yTV+SO6yONpUYFrsmMw+SL13n6V7dyHR\\nHx5FXD4Z09sUfhDiQgrrbmx5yu9FA5K88nvw0Fgi0npSdctTDuFVzfYron6jeZB9\\ncEeXGoeGb+JTcHleozEPOOSKZ3gU4f/iZo2hg73igGswDtmQcIWKH3h7l0fxqoxk\\na3iZt1gt+8TL1hwkAv7rnnPyWmZfPGNIG+CYD+bUwN5ee1ZonDJKZlMOgg0imNam\\n3WEXtLpb0ZKla0MzIET452eUYgKNbBJkdvtbfI32x+Zf7OO0kkk1LxMeeRuUKEwv\\n74gPJ6tKADz3cBGHkG77ZRrbazCncKoSeX4TdDWJC4gmvL2mPF8mtK2BuBQw26wB\\nqaimlg+SJqmZEJgxbG3mGR6hu8d3ltpnjgxCeOUOuSB19Sird14OnNd9fL9SJW+R\\ne4AIashoFt5l4SjGHF98Q+DbQu6wP2OICuFLslTfcoAqyXZqHe0SygUzg0/kWAhw\\nGsa/25KBEYXnSMAn/+FrONDProw+qf9yX9qLS+gUn9yxhsm9bVAlT1wXIPrA9FRn\\nR5SD8AWRnkAKB0mblohfoBCYqTSIDao0UvnwrdfaNAqOcrey5Gget5sZN3HU5kj8\\nkciSCLPd/39lMbcFxLo25eECAwEAAQ==\\n-----END PUBLIC KEY-----\\n\"},\"name\":\"Distinct native Fedify portable sender\",\"outbox\":\"https://fedify.example/.well-known/apgateway/did:key:z6MkprFq1ktAGdazKPpRaCJg11dHcRtjf8ZPXMvP3uauVw2f/actor/outbox\",\"preferredUsername\":\"fedifydistinct\"}",
351
+ servedActorBody: "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/v1\",\"https://www.w3.org/ns/did/v1\",\"https://w3id.org/security/data-integrity/v1\",\"https://w3id.org/security/multikey/v1\",\"https://w3id.org/fep/ef61\"],\"assertionMethod\":[{\"controller\":\"ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor\",\"id\":\"ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor#main-key\",\"publicKeyMultibase\":\"z4MXj1wBzi9jUstyPQj1tJmBTCJQwSmgdEH3r3AcgJRwZBMkP3rY67NfsjsVyeRAH24e8frWsjLuhKJ3G9yRWp2R848U8Yeh8kNyR9GF2vmGEi6BHNEqhGnZMMQnAnLovqzQ7p9vfSsHUYU19yrzEwCSFumsDkk4np96HCjbkpejfNkDDAjPexavs9KSdovfFhJdb1uy4wcyG3ynZFSKsyPQyEUVFd72ufLKgG4h8j4fNHqwzvVQG1tRnqMqzFgS6uXJfftXGsAC6QVE5keYdicLvJ6n2t5UrCsVSeoMwgSuDpXVB8vXuhFkxNz4v2bKBHuHVUzA7cKWxoY5gaczcq4on1P23vsRbtxhkWUQgUA4KMenYWDLk\",\"type\":\"Multikey\"},{\"controller\":\"ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor\",\"id\":\"ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor#ed25519-key\",\"publicKeyMultibase\":\"z6MknVDBdr3PRNFK35WPFbHxy7m5g18iuoSTht4vRwzt9WKq\",\"type\":\"Multikey\"},{\"controller\":\"ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor\",\"id\":\"http://localhost:18498/.well-known/apgateway/did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor#fedify-rsa\",\"publicKeyMultibase\":\"zgghBUVkqmWS8e1imM79CWx4zopmbKaBcdbLUSHjyo3KNnBVZscUs1T8HXSrY7yeSQJZSrrEjtnXq1tWc9fKL31uDYYbr8iSbtiRiXDxUQLA1ZDRH2tsz8a8PufoKK3w9qwNaxkcFVa5YKZ99ahxvvEJ86oDpPexr1HoE5wux1XihNx7kPtpJseQVKjTPYM1YcWe3SqDvy374ZaGFZx5YpxcVCr5gfF9iDHP8KWnYwWF3ge6icMQiqkiCZxsjeV8DL7ww7DJiQniYbk4qZ7mvcpqts657MPR7NWeFKim9wKy6mzaKEdDnkkVeTPbQYFgCUsZyrZcbBFTZp3YAnpTA2k4vmjBvKUyUKzrtXrJAuNgU7Y2cvdxRSCKorAJ38brzReEHA8Vwk72t9Le2P7PVqbUNScKt3L1v1pvQr28rim9Ff7uqPmK4R9j5FR7Tse4qq8zGoxYVAoH5isp9udJjLCs7BsF9MekS1D4aardVzMmqCzjiWCfjeUtTGdkqREsUkGyD3seFUGKui2aqafzVATZQCze4X3KcXL8vLWfq1W7VEx5HVCy5aCAV9E2VCUwimuUNfuSVYGaSY6S3XGXpMYCftak9VA4r22pZCCePC6fXwGhVNwo2mznyZNGbWc1fRLVCr45pS1RaXd58RrXWc2d4HcXdpsQ3XK6tiA4GJUe276bvKmktYKzcfn7KXs9ZHddFNe1SyctHP2JNL\",\"type\":\"Multikey\"}],\"gateways\":[\"http://127.0.0.1:18497\",\"http://localhost:18498\"],\"id\":\"ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor\",\"inbox\":\"ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor/inbox\",\"name\":\"Fedify live portable client\",\"outbox\":\"ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor/outbox\",\"preferredUsername\":\"fepsgnpakpb\",\"proof\":{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/v1\",\"https://www.w3.org/ns/did/v1\",\"https://w3id.org/security/data-integrity/v1\",\"https://w3id.org/security/multikey/v1\",\"https://w3id.org/fep/ef61\"],\"created\":\"2026-09-30T14:46:57.846825928Z\",\"cryptosuite\":\"eddsa-jcs-2022\",\"proofPurpose\":\"assertionMethod\",\"proofValue\":\"z32F5XC6bGuzR6ZE5jCiKTQXcFm2F6fp7WLFWM69bkv7RDXSxe67fXjJXgtdLoQBYqsWnqZqczVvivhACfAYaj1kG\",\"type\":\"DataIntegrityProof\",\"verificationMethod\":\"did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB#z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB\"},\"publicKey\":{\"id\":\"http://localhost:18498/.well-known/apgateway/did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor#fedify-rsa\",\"owner\":\"ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor\",\"publicKeyPem\":\"-----BEGIN PUBLIC KEY-----\\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAoSFdSVINqqwdCPZrEo8H\\nqwx1bmlm/sT7RXpb53oDt0kWOnjhGrNnRSXa4PbHKCPH6yrzV3xGpmN1zVAXcShg\\nu44m1NXbtBtfuEVHSOebRQWu2wyQRYlDk76MEyT33GDtNJf/4OnjnBXO71ebEFVY\\nSKWkZacdS0Ft42sqvFaAK4/RDUEiUWE2t4YsEthT90fo+rXz/Snnv74p70eHnjD8\\n6P29f8JKITTaqXp1ltuoiS9oEIFV/6FQ7HPMfzdBIgMvg/3pDDr1stFT56Slsvrr\\nnMF4J2jy1HNYEo1V7HvS7wStZmGRPNYoiSTHvbk5Vm3ZCmE3Qzng/Sus19KN/B57\\njkeOA8ObS5OXCjshZ+GrBmSnAzZjl+Gm6gQDKBk8/ilaSXH2QtCR4TQmvbsCjRFA\\njoXcKvMh4SfnWGXC5XdkbVjXJuFSHHFNbHBCLygk/IJdbvEHQpPH4Rsqbc3f4TvL\\n3ge/Jd6rm7huVlax3UMq7qUWTtb1PRjjSlrV0Tj5REv1KNe5VGvhMpQmHfJe7zd0\\nBVbgi4I91QRJg9XF/dYXgm330skdSkM0UapBNo9xbgK3ejyNWG5aHcazO+DSdWNu\\n5AbkXLB7m5djxb5ONrOYzz7llW4kg2H0zWNLFbRvdfKowdG906J4h9+6ZYhwufMa\\ndVHS/5EyQbbwVeqe+MG0Qo8CAwEAAQ==\\n-----END PUBLIC KEY-----\\n\",\"type\":\"CryptographicKey\"},\"type\":\"Person\"}",
352
+ baselineGatewayBody: "{\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/v1\",\"https://w3id.org/security/data-integrity/v1\",\"https://w3id.org/security/multikey/v1\",\"https://w3id.org/fep/ef61\"],\"id\":\"ap+ef61://did:key:z6Mkwayt7WaDpNcgP6eRQsCTaTcP9TCZ4ALtFdfsXAiYJq31/actor\",\"type\":\"Person\",\"inbox\":\"ap+ef61://did:key:z6Mkwayt7WaDpNcgP6eRQsCTaTcP9TCZ4ALtFdfsXAiYJq31/actor/inbox\",\"gateways\":[\"http://127.0.0.1:18497/\",\"http://127.0.0.1:18498/\"],\"proof\":{\"type\":\"DataIntegrityProof\",\"created\":\"2026-09-30T13:36:30.213906006Z\",\"cryptosuite\":\"eddsa-jcs-2022\",\"proofPurpose\":\"assertionMethod\",\"proofValue\":\"z2L7QsFwP7V2YRnXTxV896cCLZ7xHcoYp96yZct3WibVuZQ8rZBNt9sH8k2mgQrkCE5WXAwesxeeUz73xky2qUKhT\",\"verificationMethod\":\"did:key:z6Mkwayt7WaDpNcgP6eRQsCTaTcP9TCZ4ALtFdfsXAiYJq31#z6Mkwayt7WaDpNcgP6eRQsCTaTcP9TCZ4ALtFdfsXAiYJq31\",\"@context\":[\"https://www.w3.org/ns/activitystreams\",\"https://w3id.org/security/v1\",\"https://w3id.org/security/data-integrity/v1\",\"https://w3id.org/security/multikey/v1\",\"https://w3id.org/fep/ef61\"]},\"name\":\"Fedify live portable client\",\"outbox\":\"ap+ef61://did:key:z6Mkwayt7WaDpNcgP6eRQsCTaTcP9TCZ4ALtFdfsXAiYJq31/actor/outbox\",\"preferredUsername\":\"fedifyclient\"}"
353
+ };
354
+ //#endregion
355
+ //#region test-vectors/fep-ef61/mitra-v5.10.0/send/response.json
356
+ var status$1 = 202;
357
+ //#endregion
358
+ //#region test-vectors/fep-ef61/mitra-v5.10.0/send/tampered-response.json
359
+ var status = 401;
360
+ //#endregion
361
+ //#region src/sig/mitra-send-interop.test.ts
362
+ const activity = JSON.parse(raw_bodies_default.requestBody);
363
+ const baseline = JSON.parse(raw_bodies_default.baselineGatewayBody);
364
+ async function digest(value) {
365
+ return new Uint8Array(await crypto.subtle.digest("SHA-256", new TextEncoder().encode(value)));
366
+ }
367
+ async function verifyRawJcs(document) {
368
+ const { proof, ...unsecured } = document;
369
+ assert(proof != null && typeof proof === "object" && !Array.isArray(proof));
370
+ const { proofValue, ...configuration } = proof;
371
+ assertEquals(configuration.cryptosuite, "eddsa-jcs-2022");
372
+ configuration["@context"] ??= document["@context"];
373
+ assert(typeof configuration.verificationMethod === "string");
374
+ assert(typeof proofValue === "string");
375
+ const key = await importDidKey(configuration.verificationMethod.split("#")[0]);
376
+ const combined = /* @__PURE__ */ new Uint8Array(64);
377
+ combined.set(await digest(serialize(configuration)), 0);
378
+ combined.set(await digest(serialize(unsecured)), 32);
379
+ return await crypto.subtle.verify("Ed25519", key, new Uint8Array(decodeMultibase(proofValue)), combined);
380
+ }
381
+ const options = {
382
+ contextLoader: mockDocumentLoader,
383
+ documentLoader(url) {
384
+ assertEquals(url.split("#")[0], actor_default.publicKey.id.split("#")[0]);
385
+ return Promise.resolve({
386
+ document: structuredClone(actor_default),
387
+ documentUrl: actor_default.publicKey.id.split("#")[0],
388
+ contextUrl: null
389
+ });
390
+ },
391
+ currentTime: Temporal.Instant.from(capturedAt)
392
+ };
393
+ function request(headers = headers$1) {
394
+ return new Request(url, {
395
+ method,
396
+ headers,
397
+ body: raw_bodies_default.requestBody
398
+ });
399
+ }
400
+ test("Fedify to Mitra v5.10.0 captured actor and compound proofs verify raw JCS", async () => {
401
+ for (const [name, value] of Object.entries(raw_bodies_default)) assertEquals(encodeHex(await digest(value)), sha256[name]);
402
+ assertEquals(JSON.parse(raw_bodies_default.actorBody), actor_default);
403
+ assertEquals(JSON.parse(raw_bodies_default.servedActorBody), served_actor_default);
404
+ assert(senderDid !== recipientDid);
405
+ for (const document of [
406
+ actor_default,
407
+ activity,
408
+ activity.object
409
+ ]) {
410
+ assertEquals(document.proof.verificationMethod.split("#")[0], senderDid);
411
+ assert((document.actor ?? document.attributedTo ?? document.id).includes(senderDid));
412
+ }
413
+ assert(url.includes(recipientDid));
414
+ assert(served_actor_default.id.includes(recipientDid));
415
+ assert(await verifyRawJcs(actor_default));
416
+ assert(await verifyRawJcs(activity));
417
+ assert(await verifyRawJcs(activity.object));
418
+ assert((await verifyPortableObjectProof(actor_default, options)).verified);
419
+ assert((await verifyPortableObjectProof(activity, options)).verified);
420
+ assert((await verifyPortableObjectProof(activity.object, options)).verified);
421
+ });
422
+ test("Fedify to Mitra v5.10.0 captured HTTP signature belongs to its portable actor", async () => {
423
+ assert(new Headers(headers$1).has("signature-input"));
424
+ const verified = await verifyRequestDetailed(request(), options);
425
+ assert(verified.verified);
426
+ assertEquals(verified.key.id?.href, actor_default.publicKey.id);
427
+ assert(await doesActorOwnKey(await Create.fromJsonLd(activity, options), verified.key, options));
428
+ });
429
+ test("Fedify to Mitra v5.10.0 records native registration and worker processing", () => {
430
+ assertEquals(status$3, 201);
431
+ assertEquals(status$1, 202);
432
+ const portableId = fromCompatibleEf61Id(activity.id);
433
+ assert(portableId != null);
434
+ const expectedId = canonicalizePortableUri(portableId.href);
435
+ const entries = rows$2.filter((row) => canonicalizePortableUri(row.object_id) === expectedId);
436
+ assert(entries.some((row) => row.collection_id.endsWith("/actor/inbox")));
437
+ assert(entries.every((row) => row.type === "Create"));
438
+ assert(entries.every((row) => row.actor === actor_default.id));
439
+ assert(entries.every((row) => row.collection_id.includes(recipientDid)));
440
+ const sender = rows.find((row) => row.actor_id.includes(senderDid));
441
+ const recipient = rows.find((row) => row.actor_id.includes(recipientDid));
442
+ assert(sender != null && recipient != null);
443
+ assertEquals(sender.has_portable_account, false);
444
+ assertEquals(recipient.has_portable_account, true);
445
+ assertEquals(rows$1.length, 1);
446
+ assertEquals(rows$1[0].has_processed_post, true);
447
+ assertEquals(rows$1[0].object_data, activity.object);
448
+ });
449
+ test("Fedify to Mitra v5.10.0 rejects a tampered RFC 9421 HTTP signature", async () => {
450
+ assertEquals(status, 401);
451
+ assertEquals((await verifyRequestDetailed(request(headers), options)).verified, false);
452
+ });
453
+ test("Fedify to Mitra v5.10.0 records signed trailing-slash gateway rejection", async () => {
454
+ assertEquals(status$2, 400);
455
+ assertEquals(body, "invalid gateway URL");
456
+ assert(await verifyRawJcs(baseline));
457
+ assert(baseline.gateways.some((gateway) => gateway.endsWith("/")));
458
+ assert(actor_default.gateways.every((gateway) => !gateway.endsWith("/")));
459
+ });
460
+ //#endregion
461
+ export {};
package/dist/sig/mod.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  const { URLPattern } = require("urlpattern-polyfill");
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const require_http = require("../http-Bp0MKAK3.cjs");
4
- const require_portable_collection = require("../portable-collection-DhEA_nWT.cjs");
3
+ const require_http = require("../http-Cki-npuA.cjs");
4
+ const require_portable_collection = require("../portable-collection-DqTUBKY7.cjs");
5
5
  exports.attachSignature = require_http.attachSignature;
6
6
  exports.createProof = require_http.createProof;
7
7
  exports.createSignature = require_http.createSignature;
@@ -1,5 +1,5 @@
1
1
  /// <reference lib="esnext.temporal" />
2
- import { C as exportJwk, D as importJwk, E as generateCryptoKeyPair, S as KeyCache, T as fetchKeyDetailed, _ as validateAcceptSignature, a as VerifyRequestDetailedResult, b as FetchKeyOptions, c as signRequest, d as AcceptSignatureMember, f as AcceptSignatureParameters, g as parseAcceptSignature, h as fulfillAcceptSignature, i as SignRequestOptions, l as verifyRequest, m as formatAcceptSignature, n as HttpMessageSignaturesSpecDeterminer, o as VerifyRequestFailureReason, p as FulfillAcceptSignatureResult, r as Rfc9421SignRequestOptions, s as VerifyRequestOptions, t as HttpMessageSignaturesSpec, u as verifyRequestDetailed, v as FetchKeyDetailedResult, w as fetchKey, x as FetchKeyResult, y as FetchKeyErrorResult } from "../http-BrwKINQn.cjs";
2
+ import { A as AcceptSignatureParameters, B as VerifyPortableObjectProofOptions, C as VerifyRequestDetailedResult, D as verifyRequest, E as signRequest, F as validateAcceptSignature, G as signObject, H as VerifyProofOptions, I as CreateProofOptions, J as verifyProof, K as verifyObject, L as SignObjectOptions, M as formatAcceptSignature, N as fulfillAcceptSignature, O as verifyRequestDetailed, P as parseAcceptSignature, R as VerifyObjectOptions, S as SignRequestOptions, T as VerifyRequestOptions, U as createProof, V as VerifyPortableObjectProofResult, W as hasProofLike, a as KeyCache, b as HttpMessageSignaturesSpecDeterminer, c as fetchKeyDetailed, i as FetchKeyResult, j as FulfillAcceptSignatureResult, k as AcceptSignatureMember, l as generateCryptoKeyPair, n as FetchKeyErrorResult, o as exportJwk, q as verifyPortableObjectProof, r as FetchKeyOptions, s as fetchKey, t as FetchKeyDetailedResult, u as importJwk, w as VerifyRequestFailureReason, x as Rfc9421SignRequestOptions, y as HttpMessageSignaturesSpec, z as VerifyPortableObjectProofFailureReason } from "../key-DYxuyd-s.cjs";
3
3
  import { i as getKeyOwner, n as GetKeyOwnerOptions, r as doesActorOwnKey, t as DoesActorOwnKeyOptions } from "../owner-BF0L9cMt.cjs";
4
- import { C as createSignature, D as verifyJsonLd, E as signJsonLd, O as verifySignature, S as attachSignature, T as hasSignatureLike, _ as verifyProof, a as CreateProofOptions, b as VerifyJsonLdOptions, c as VerifyPortableObjectProofFailureReason, d as VerifyProofOptions, f as createProof, g as verifyPortableObjectProof, h as verifyObject, i as verifyPortableObject, l as VerifyPortableObjectProofOptions, m as signObject, n as VerifyPortableObjectOptions, o as SignObjectOptions, p as hasProofLike, r as VerifyPortableObjectResult, s as VerifyObjectOptions, t as VerifyPortableObjectFailureReason, u as VerifyPortableObjectProofResult, v as CreateSignatureOptions, w as detachSignature, x as VerifySignatureOptions, y as SignJsonLdOptions } from "../mod-DoTWIc7F.cjs";
4
+ import { a as CreateSignatureOptions, c as VerifySignatureOptions, d as detachSignature, f as hasSignatureLike, h as verifySignature, i as verifyPortableObject, l as attachSignature, m as verifyJsonLd, n as VerifyPortableObjectOptions, o as SignJsonLdOptions, p as signJsonLd, r as VerifyPortableObjectResult, s as VerifyJsonLdOptions, t as VerifyPortableObjectFailureReason, u as createSignature } from "../mod-CavhAgLw.cjs";
5
5
  export { AcceptSignatureMember, AcceptSignatureParameters, CreateProofOptions, CreateSignatureOptions, DoesActorOwnKeyOptions, FetchKeyDetailedResult, FetchKeyErrorResult, FetchKeyOptions, FetchKeyResult, FulfillAcceptSignatureResult, GetKeyOwnerOptions, HttpMessageSignaturesSpec, HttpMessageSignaturesSpecDeterminer, KeyCache, Rfc9421SignRequestOptions, SignJsonLdOptions, SignObjectOptions, SignRequestOptions, VerifyJsonLdOptions, VerifyObjectOptions, VerifyPortableObjectFailureReason, VerifyPortableObjectOptions, VerifyPortableObjectProofFailureReason, VerifyPortableObjectProofOptions, VerifyPortableObjectProofResult, VerifyPortableObjectResult, VerifyProofOptions, VerifyRequestDetailedResult, VerifyRequestFailureReason, VerifyRequestOptions, VerifySignatureOptions, attachSignature, createProof, createSignature, detachSignature, doesActorOwnKey, exportJwk, fetchKey, fetchKeyDetailed, formatAcceptSignature, fulfillAcceptSignature, generateCryptoKeyPair, getKeyOwner, hasProofLike, hasSignatureLike, importJwk, parseAcceptSignature, signJsonLd, signObject, signRequest, validateAcceptSignature, verifyJsonLd, verifyObject, verifyPortableObject, verifyPortableObjectProof, verifyProof, verifyRequest, verifyRequestDetailed, verifySignature };
package/dist/sig/mod.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /// <reference lib="esnext.temporal" />
2
- import { C as exportJwk, D as importJwk, E as generateCryptoKeyPair, S as KeyCache, T as fetchKeyDetailed, _ as validateAcceptSignature, a as VerifyRequestDetailedResult, b as FetchKeyOptions, c as signRequest, d as AcceptSignatureMember, f as AcceptSignatureParameters, g as parseAcceptSignature, h as fulfillAcceptSignature, i as SignRequestOptions, l as verifyRequest, m as formatAcceptSignature, n as HttpMessageSignaturesSpecDeterminer, o as VerifyRequestFailureReason, p as FulfillAcceptSignatureResult, r as Rfc9421SignRequestOptions, s as VerifyRequestOptions, t as HttpMessageSignaturesSpec, u as verifyRequestDetailed, v as FetchKeyDetailedResult, w as fetchKey, x as FetchKeyResult, y as FetchKeyErrorResult } from "../http-DGx0KOws.js";
2
+ import { A as AcceptSignatureParameters, B as VerifyPortableObjectProofOptions, C as VerifyRequestDetailedResult, D as verifyRequest, E as signRequest, F as validateAcceptSignature, G as signObject, H as VerifyProofOptions, I as CreateProofOptions, J as verifyProof, K as verifyObject, L as SignObjectOptions, M as formatAcceptSignature, N as fulfillAcceptSignature, O as verifyRequestDetailed, P as parseAcceptSignature, R as VerifyObjectOptions, S as SignRequestOptions, T as VerifyRequestOptions, U as createProof, V as VerifyPortableObjectProofResult, W as hasProofLike, a as KeyCache, b as HttpMessageSignaturesSpecDeterminer, c as fetchKeyDetailed, i as FetchKeyResult, j as FulfillAcceptSignatureResult, k as AcceptSignatureMember, l as generateCryptoKeyPair, n as FetchKeyErrorResult, o as exportJwk, q as verifyPortableObjectProof, r as FetchKeyOptions, s as fetchKey, t as FetchKeyDetailedResult, u as importJwk, w as VerifyRequestFailureReason, x as Rfc9421SignRequestOptions, y as HttpMessageSignaturesSpec, z as VerifyPortableObjectProofFailureReason } from "../key-C1nv7_jD.js";
3
3
  import { i as getKeyOwner, n as GetKeyOwnerOptions, r as doesActorOwnKey, t as DoesActorOwnKeyOptions } from "../owner-BSzr5-I8.js";
4
- import { C as createSignature, D as verifyJsonLd, E as signJsonLd, O as verifySignature, S as attachSignature, T as hasSignatureLike, _ as verifyProof, a as CreateProofOptions, b as VerifyJsonLdOptions, c as VerifyPortableObjectProofFailureReason, d as VerifyProofOptions, f as createProof, g as verifyPortableObjectProof, h as verifyObject, i as verifyPortableObject, l as VerifyPortableObjectProofOptions, m as signObject, n as VerifyPortableObjectOptions, o as SignObjectOptions, p as hasProofLike, r as VerifyPortableObjectResult, s as VerifyObjectOptions, t as VerifyPortableObjectFailureReason, u as VerifyPortableObjectProofResult, v as CreateSignatureOptions, w as detachSignature, x as VerifySignatureOptions, y as SignJsonLdOptions } from "../mod-Cy9VNHVw.js";
4
+ import { a as CreateSignatureOptions, c as VerifySignatureOptions, d as detachSignature, f as hasSignatureLike, h as verifySignature, i as verifyPortableObject, l as attachSignature, m as verifyJsonLd, n as VerifyPortableObjectOptions, o as SignJsonLdOptions, p as signJsonLd, r as VerifyPortableObjectResult, s as VerifyJsonLdOptions, t as VerifyPortableObjectFailureReason, u as createSignature } from "../mod-CtpF2BU5.js";
5
5
  export { AcceptSignatureMember, AcceptSignatureParameters, CreateProofOptions, CreateSignatureOptions, DoesActorOwnKeyOptions, FetchKeyDetailedResult, FetchKeyErrorResult, FetchKeyOptions, FetchKeyResult, FulfillAcceptSignatureResult, GetKeyOwnerOptions, HttpMessageSignaturesSpec, HttpMessageSignaturesSpecDeterminer, KeyCache, Rfc9421SignRequestOptions, SignJsonLdOptions, SignObjectOptions, SignRequestOptions, VerifyJsonLdOptions, VerifyObjectOptions, VerifyPortableObjectFailureReason, VerifyPortableObjectOptions, VerifyPortableObjectProofFailureReason, VerifyPortableObjectProofOptions, VerifyPortableObjectProofResult, VerifyPortableObjectResult, VerifyProofOptions, VerifyRequestDetailedResult, VerifyRequestFailureReason, VerifyRequestOptions, VerifySignatureOptions, attachSignature, createProof, createSignature, detachSignature, doesActorOwnKey, exportJwk, fetchKey, fetchKeyDetailed, formatAcceptSignature, fulfillAcceptSignature, generateCryptoKeyPair, getKeyOwner, hasProofLike, hasSignatureLike, importJwk, parseAcceptSignature, signJsonLd, signObject, signRequest, validateAcceptSignature, verifyJsonLd, verifyObject, verifyPortableObject, verifyPortableObjectProof, verifyProof, verifyRequest, verifyRequestDetailed, verifySignature };
package/dist/sig/mod.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Temporal } from "temporal-polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import { D as createSignature, H as fetchKeyDetailed, I as verifyJsonLd, L as verifySignature, O as detachSignature, P as signJsonLd, T as attachSignature, U as generateCryptoKeyPair, V as fetchKey, W as importJwk, _ as verifyObject, _t as validateAcceptSignature, a as signRequest, c as verifyRequestDetailed, gt as parseAcceptSignature, h as signObject, ht as fulfillAcceptSignature, j as hasSignatureLike, m as hasProofLike, mt as formatAcceptSignature, p as createProof, s as verifyRequest, v as verifyPortableObjectProof, x as verifyProof, z as exportJwk } from "../http-BoGE-nk7.js";
4
- import { n as doesActorOwnKey, r as getKeyOwner, t as verifyPortableObject } from "../portable-collection-BnktjQ04.js";
3
+ import { D as createSignature, H as fetchKeyDetailed, I as verifyJsonLd, L as verifySignature, O as detachSignature, P as signJsonLd, T as attachSignature, U as generateCryptoKeyPair, V as fetchKey, W as importJwk, _ as verifyObject, _t as validateAcceptSignature, a as signRequest, c as verifyRequestDetailed, gt as parseAcceptSignature, h as signObject, ht as fulfillAcceptSignature, j as hasSignatureLike, m as hasProofLike, mt as formatAcceptSignature, p as createProof, s as verifyRequest, v as verifyPortableObjectProof, x as verifyProof, z as exportJwk } from "../http-OMtKlbx1.js";
4
+ import { n as doesActorOwnKey, r as getKeyOwner, t as verifyPortableObject } from "../portable-collection-ZkUNjtb7.js";
5
5
  export { attachSignature, createProof, createSignature, detachSignature, doesActorOwnKey, exportJwk, fetchKey, fetchKeyDetailed, formatAcceptSignature, fulfillAcceptSignature, generateCryptoKeyPair, getKeyOwner, hasProofLike, hasSignatureLike, importJwk, parseAcceptSignature, signJsonLd, signObject, signRequest, validateAcceptSignature, verifyJsonLd, verifyObject, verifyPortableObject, verifyPortableObjectProof, verifyProof, verifyRequest, verifyRequestDetailed, verifySignature };
@@ -6,7 +6,7 @@ import { t as assertFalse } from "../assert_false-CPdRnc3E.mjs";
6
6
  import "../std__assert-DvMDRPes.mjs";
7
7
  import { t as assert } from "../assert-D1Eafmd_.mjs";
8
8
  import { o as rsaPublicKey1, s as rsaPublicKey2 } from "../keys-DIJNHW-Y.mjs";
9
- import { n as getKeyOwner, t as doesActorOwnKey } from "../owner-B61jjp5K.mjs";
9
+ import { n as getKeyOwner, t as doesActorOwnKey } from "../owner-CEBn81LD.mjs";
10
10
  import { Create, CryptographicKey, lookupObject } from "@fedify/vocab";
11
11
  import { createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
12
12
  //#region src/sig/owner.test.ts
@@ -2,7 +2,7 @@ import "temporal-polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { n as ed25519PrivateKey, r as ed25519PublicKey } from "../keys-DIJNHW-Y.mjs";
5
- import { t as verifyPortableObject } from "../portable-collection-CyBJDEzs.mjs";
5
+ import { t as verifyPortableObject } from "../portable-collection-qFSYw4TG.mjs";
6
6
  import { Collection, CollectionPage, Note, OrderedCollection, Person, traverseCollection } from "@fedify/vocab";
7
7
  import { FetchError, encodeMultibase, exportDidKey, preloadedContexts } from "@fedify/vocab-runtime";
8
8
  import { test } from "@fedify/fixture";
@@ -0,0 +1,2 @@
1
+ import { Temporal } from "temporal-polyfill";
2
+ import { URLPattern } from "urlpattern-polyfill";