@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
@@ -3,7 +3,7 @@ import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
5
5
  import "../std__assert-DvMDRPes.mjs";
6
- import { i as inspectCompoundPortableObjectApplicability, r as findUnsupportedCompoundProofShape, t as containsCompoundPortableObject } from "../compound-proof-CcWDD5VB.mjs";
6
+ import { i as inspectCompoundPortableObjectApplicability, r as findUnsupportedCompoundProofShape, t as containsCompoundPortableObject } from "../compound-proof-CMPv4UK0.mjs";
7
7
  import { test } from "@fedify/fixture";
8
8
  //#region src/sig/compound-proof-producer.test.ts
9
9
  const portableId = "ap+ef61://did:key:z6MkAlice/objects/1";
@@ -4,9 +4,9 @@ globalThis.addEventListener = () => {};
4
4
  import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
5
5
  import "../std__assert-DvMDRPes.mjs";
6
6
  import { t as assert } from "../assert-D1Eafmd_.mjs";
7
- import { l as verifyPortableObjectProofPolicy, o as verifyMapLocalProof } from "../proof-CZrjvoJ3.mjs";
7
+ import { l as verifyPortableObjectProofPolicy, o as verifyMapLocalProof } from "../proof-BHRf_jMG.mjs";
8
8
  import { n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2 } from "../keys-DIJNHW-Y.mjs";
9
- import { a as verifyCompoundPortableObjectProofs, i as inspectCompoundPortableObjectApplicability, o as verifyCompoundProofDocuments, t as containsCompoundPortableObject } from "../compound-proof-CcWDD5VB.mjs";
9
+ import { a as verifyCompoundPortableObjectProofs, i as inspectCompoundPortableObjectApplicability, o as verifyCompoundProofDocuments, t as containsCompoundPortableObject } from "../compound-proof-CMPv4UK0.mjs";
10
10
  import { t as map_local_create_note_default } from "../map-local-create-note-B0SeXJms.mjs";
11
11
  import { t as map_local_context_conflict_default } from "../map-local-context-conflict-DOYEEJ3u.mjs";
12
12
  import { CryptographicKey, Multikey, Person } from "@fedify/vocab";
@@ -812,5 +812,22 @@ test("verifyCompoundPortableObjectProofs() leaves keys at DID URLs alone", async
812
812
  assert(result.verified);
813
813
  assertEquals(result.portableObjects.map((o) => o.path), [""]);
814
814
  });
815
+ test("compound proof observation does not throw for malformed subject IDs", async () => {
816
+ const { verificationObservation } = await import("../verification-C3954hQh.mjs");
817
+ const evidence = { attempts: [] };
818
+ const result = await verifyCompoundPortableObjectProofs({
819
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/data-integrity/v1"],
820
+ id: "ap://did%ZZkey/objects/1",
821
+ type: "Note",
822
+ proof: {}
823
+ }, limits, {
824
+ ...options,
825
+ [verificationObservation]: evidence
826
+ });
827
+ assertEquals(result.status, "ok");
828
+ assert(result.status === "ok" && !result.verified);
829
+ assertEquals(evidence.attempts[0].subject.id, null);
830
+ assertEquals(evidence.attempts[0].subject.pointer, "");
831
+ });
815
832
  //#endregion
816
833
  export {};
@@ -6,9 +6,9 @@ import "../std__assert-DvMDRPes.mjs";
6
6
  import { t as assert } from "../assert-D1Eafmd_.mjs";
7
7
  import { n as preloadedOnlyDocumentLoader } from "../public-audience--klBIOk1.mjs";
8
8
  import { r as normalizeOutgoingActivityJsonLd } from "../outgoing-jsonld-4IJqPYos.mjs";
9
- import { a as signObject, d as verifyProof } from "../proof-CZrjvoJ3.mjs";
9
+ import { a as signObject, d as verifyProof } from "../proof-BHRf_jMG.mjs";
10
10
  import { n as ed25519PrivateKey, r as ed25519PublicKey } from "../keys-DIJNHW-Y.mjs";
11
- import { o as verifyCompoundProofDocuments } from "../compound-proof-CcWDD5VB.mjs";
11
+ import { o as verifyCompoundProofDocuments } from "../compound-proof-CMPv4UK0.mjs";
12
12
  import { t as map_local_create_note_default } from "../map-local-create-note-B0SeXJms.mjs";
13
13
  import { t as map_local_context_conflict_default } from "../map-local-context-conflict-DOYEEJ3u.mjs";
14
14
  import { Create, DataIntegrityProof, Note, Question } from "@fedify/vocab";
@@ -12,8 +12,8 @@ import { t as assertThrows } from "../assert_throws-BYITOvPO.mjs";
12
12
  import "../std__assert-DvMDRPes.mjs";
13
13
  import { t as assertRejects } from "../assert_rejects-CTptdYck.mjs";
14
14
  import { t as assert } from "../assert-D1Eafmd_.mjs";
15
- import { n as exportJwk } from "../key-BlTaKABr.mjs";
16
- import { a as listRequestSignatures, c as selectRequestSignature, f as verifyRequest, i as formatRfc9421SignatureParameters, l as signRequest, n as doubleKnock, o as parseRfc9421Signature, p as verifyRequestDetailed, r as formatRfc9421Signature, s as parseRfc9421SignatureInput, t as createRfc9421SignatureBase, u as timingSafeEqual } from "../http-CUyBaVsQ.mjs";
15
+ import { n as exportJwk } from "../key-DecAtABm.mjs";
16
+ import { a as listRequestSignatures, c as selectRequestSignature, f as verifyRequest, i as formatRfc9421SignatureParameters, l as signRequest, n as doubleKnock, o as parseRfc9421Signature, p as verifyRequestDetailed, r as formatRfc9421Signature, s as parseRfc9421SignatureInput, t as createRfc9421SignatureBase, u as timingSafeEqual } from "../http-BqSbUEiQ.mjs";
17
17
  import { a as rsaPrivateKey3, i as rsaPrivateKey2, l as rsaPublicKey5, n as ed25519PrivateKey, o as rsaPublicKey1, r as ed25519PublicKey, s as rsaPublicKey2 } from "../keys-DIJNHW-Y.mjs";
18
18
  import { t as KvKeyCache } from "../keycache-Da8A8mZa.mjs";
19
19
  import { FetchError, exportSpki, getDocumentLoader } from "@fedify/vocab-runtime";
@@ -6,7 +6,7 @@ import { t as assertThrows } from "../assert_throws-BYITOvPO.mjs";
6
6
  import "../std__assert-DvMDRPes.mjs";
7
7
  import { t as assertRejects } from "../assert_rejects-CTptdYck.mjs";
8
8
  import { t as assert } from "../assert-D1Eafmd_.mjs";
9
- import { a as fetchKeyDetailed, c as validateCryptoKey, i as fetchKey, n as exportJwk, o as generateCryptoKeyPair, s as importJwk } from "../key-BlTaKABr.mjs";
9
+ import { a as fetchKeyDetailed, c as validateCryptoKey, i as fetchKey, n as exportJwk, o as generateCryptoKeyPair, s as importJwk } from "../key-DecAtABm.mjs";
10
10
  import { c as rsaPublicKey3, i as rsaPrivateKey2, o as rsaPublicKey1, r as ed25519PublicKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-DIJNHW-Y.mjs";
11
11
  import { CryptographicKey, Multikey } from "@fedify/vocab";
12
12
  import { FetchError, exportDidKey } from "@fedify/vocab-runtime";
@@ -8,8 +8,8 @@ import { t as assertInstanceOf } from "../assert_instance_of-mrXWWNY-.mjs";
8
8
  import { t as assertThrows } from "../assert_throws-BYITOvPO.mjs";
9
9
  import { t as assertRejects } from "../assert_rejects-CTptdYck.mjs";
10
10
  import { t as assert } from "../assert-D1Eafmd_.mjs";
11
- import { o as generateCryptoKeyPair } from "../key-BlTaKABr.mjs";
12
- import { a as compactJsonLd, f as isInvalidUrlTypeError, g as verifySignature, h as verifyJsonLd, i as attachSignature, n as UnsafeJsonLdError, o as createSignature, p as signJsonLd, s as detachSignature, u as hasSignatureLike } from "../ld-Dx8r_qJU.mjs";
11
+ import { o as generateCryptoKeyPair } from "../key-DecAtABm.mjs";
12
+ import { a as compactJsonLd, f as isInvalidUrlTypeError, g as verifySignature, h as verifyJsonLd, i as attachSignature, n as UnsafeJsonLdError, o as createSignature, p as signJsonLd, s as detachSignature, u as hasSignatureLike } from "../ld-UsN-TIPh.mjs";
13
13
  import { a as rsaPrivateKey3, c as rsaPublicKey3, i as rsaPrivateKey2, n as ed25519PrivateKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-DIJNHW-Y.mjs";
14
14
  import { CryptographicKey } from "@fedify/vocab";
15
15
  import { createTestMeterProvider, mockDocumentLoader, test } from "@fedify/fixture";
@@ -0,0 +1,2 @@
1
+ import { Temporal } from "temporal-polyfill";
2
+ import { URLPattern } from "urlpattern-polyfill";
@@ -0,0 +1,260 @@
1
+ import { Temporal } from "temporal-polyfill";
2
+ import "urlpattern-polyfill";
3
+ globalThis.addEventListener = () => {};
4
+ import { t as MemoryKvStore } from "../kv-DCHkaJ9-.mjs";
5
+ import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
6
+ import "../std__assert-DvMDRPes.mjs";
7
+ import { t as assert } from "../assert-D1Eafmd_.mjs";
8
+ import { c as verifyPortableObjectProof } from "../proof-BHRf_jMG.mjs";
9
+ import { p as verifyRequestDetailed } from "../http-BqSbUEiQ.mjs";
10
+ import { o as createFederation } from "../middleware-CkjwiEBd.mjs";
11
+ import { t as doesActorOwnKey } from "../owner-CEBn81LD.mjs";
12
+ import { Create, Person } from "@fedify/vocab";
13
+ import { canonicalizePortableUri, decodeMultibase, importDidKey } from "@fedify/vocab-runtime";
14
+ import { mockDocumentLoader, test } from "@fedify/fixture";
15
+ import { encodeHex } from "byte-encodings/hex";
16
+ import serialize from "json-canon";
17
+ //#region test-vectors/fep-ef61/mitra-v5.10.0/receive/actor.json
18
+ var actor_default = {
19
+ "@context": [
20
+ "https://www.w3.org/ns/activitystreams",
21
+ "https://w3id.org/security/v1",
22
+ "https://www.w3.org/ns/did/v1",
23
+ "https://w3id.org/security/data-integrity/v1",
24
+ "https://w3id.org/security/multikey/v1",
25
+ "https://w3id.org/fep/ef61"
26
+ ],
27
+ assertionMethod: [
28
+ {
29
+ "controller": "ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor",
30
+ "id": "ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor#main-key",
31
+ "publicKeyMultibase": "z4MXj1wBzi9jUstyPQj1tJmBTCJQwSmgdEH3r3AcgJRwZBMkP3rY67NfsjsVyeRAH24e8frWsjLuhKJ3G9yRWp2R848U8Yeh8kNyR9GF2vmGEi6BHNEqhGnZMMQnAnLovqzQ7p9vfSsHUYU19yrzEwCSFumsDkk4np96HCjbkpejfNkDDAjPexavs9KSdovfFhJdb1uy4wcyG3ynZFSKsyPQyEUVFd72ufLKgG4h8j4fNHqwzvVQG1tRnqMqzFgS6uXJfftXGsAC6QVE5keYdicLvJ6n2t5UrCsVSeoMwgSuDpXVB8vXuhFkxNz4v2bKBHuHVUzA7cKWxoY5gaczcq4on1P23vsRbtxhkWUQgUA4KMenYWDLk",
32
+ "type": "Multikey"
33
+ },
34
+ {
35
+ "controller": "ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor",
36
+ "id": "ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor#ed25519-key",
37
+ "publicKeyMultibase": "z6MknVDBdr3PRNFK35WPFbHxy7m5g18iuoSTht4vRwzt9WKq",
38
+ "type": "Multikey"
39
+ },
40
+ {
41
+ "controller": "ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor",
42
+ "id": "http://localhost:18498/.well-known/apgateway/did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor#fedify-rsa",
43
+ "publicKeyMultibase": "zgghBUVkqmWS8e1imM79CWx4zopmbKaBcdbLUSHjyo3KNnBVZscUs1T8HXSrY7yeSQJZSrrEjtnXq1tWc9fKL31uDYYbr8iSbtiRiXDxUQLA1ZDRH2tsz8a8PufoKK3w9qwNaxkcFVa5YKZ99ahxvvEJ86oDpPexr1HoE5wux1XihNx7kPtpJseQVKjTPYM1YcWe3SqDvy374ZaGFZx5YpxcVCr5gfF9iDHP8KWnYwWF3ge6icMQiqkiCZxsjeV8DL7ww7DJiQniYbk4qZ7mvcpqts657MPR7NWeFKim9wKy6mzaKEdDnkkVeTPbQYFgCUsZyrZcbBFTZp3YAnpTA2k4vmjBvKUyUKzrtXrJAuNgU7Y2cvdxRSCKorAJ38brzReEHA8Vwk72t9Le2P7PVqbUNScKt3L1v1pvQr28rim9Ff7uqPmK4R9j5FR7Tse4qq8zGoxYVAoH5isp9udJjLCs7BsF9MekS1D4aardVzMmqCzjiWCfjeUtTGdkqREsUkGyD3seFUGKui2aqafzVATZQCze4X3KcXL8vLWfq1W7VEx5HVCy5aCAV9E2VCUwimuUNfuSVYGaSY6S3XGXpMYCftak9VA4r22pZCCePC6fXwGhVNwo2mznyZNGbWc1fRLVCr45pS1RaXd58RrXWc2d4HcXdpsQ3XK6tiA4GJUe276bvKmktYKzcfn7KXs9ZHddFNe1SyctHP2JNL",
44
+ "type": "Multikey"
45
+ }
46
+ ],
47
+ gateways: ["http://127.0.0.1:18497", "http://localhost:18498"],
48
+ id: "ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor",
49
+ inbox: "ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor/inbox",
50
+ name: "Fedify live portable client",
51
+ outbox: "ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor/outbox",
52
+ preferredUsername: "fepsgnpakpb",
53
+ proof: {
54
+ "@context": [
55
+ "https://www.w3.org/ns/activitystreams",
56
+ "https://w3id.org/security/v1",
57
+ "https://www.w3.org/ns/did/v1",
58
+ "https://w3id.org/security/data-integrity/v1",
59
+ "https://w3id.org/security/multikey/v1",
60
+ "https://w3id.org/fep/ef61"
61
+ ],
62
+ "created": "2026-09-30T14:46:57.846825928Z",
63
+ "cryptosuite": "eddsa-jcs-2022",
64
+ "proofPurpose": "assertionMethod",
65
+ "proofValue": "z32F5XC6bGuzR6ZE5jCiKTQXcFm2F6fp7WLFWM69bkv7RDXSxe67fXjJXgtdLoQBYqsWnqZqczVvivhACfAYaj1kG",
66
+ "type": "DataIntegrityProof",
67
+ "verificationMethod": "did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB#z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB"
68
+ },
69
+ publicKey: {
70
+ "id": "http://localhost:18498/.well-known/apgateway/did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor#fedify-rsa",
71
+ "owner": "ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor",
72
+ "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",
73
+ "type": "CryptographicKey"
74
+ },
75
+ type: "Person"
76
+ };
77
+ //#endregion
78
+ //#region test-vectors/fep-ef61/mitra-v5.10.0/receive/request.json
79
+ var url$1 = "https://fedify.example:18444/users/alice/inbox";
80
+ var method = "POST";
81
+ var headers = [
82
+ ["accept", "*/*"],
83
+ ["content-length", "2409"],
84
+ ["content-type", "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\""],
85
+ ["date", "Wed, 30 Sep 2026 14:47:04 GMT"],
86
+ ["digest", "SHA-256=d1ozC9i0ryDU//wSsMAzw9wD/r5HN0ti5wovjUSqN8k="],
87
+ ["host", "fedify.example:18444"],
88
+ ["signature", "keyId=\"http://127.0.0.1:18497/.well-known/apgateway/did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor#main-key\",algorithm=\"rsa-sha256\",headers=\"(request-target) host date digest\",signature=\"PQHhIZUyBNsH779V+IB0Q08Pw8fsgq9RflyLExtYqNWwd/DXRyddBG1Y0RRCKrzigwFnW74rvuZpjU35gZzPaQA+TFxQvl8wBcPKLrYuc+NkIwGrCIpnFkUCglG6JagZ3cJfSqIB7DU7RIEvYfPjK9IchHug8ZghLnWhwLTE9UpKmtH/nJrU2Pd3n2Dn+EkfcYFe+n2KZxS7cjgPiRDRgei31WaCIIDRK4x7PvKq0VmrLwsNSKJzFsUp+KxiwoOHT1Ad9d6BPAJI8p+HqvWu0b2rMu4EK/nqHNwDYB7uYcundCYeQNI8wHmt2qxHxC2JuCuuV99WJxvXMSTbfUfgWg==\""],
89
+ ["user-agent", "Mitra 5.10.0; http://127.0.0.1:18497"]
90
+ ];
91
+ var capturedAt$1 = "2026-09-30T14:47:04.185Z";
92
+ //#endregion
93
+ //#region test-vectors/fep-ef61/mitra-v5.10.0/receive/metadata.json
94
+ var capturedAt = "2026-09-30T14:47:04.185Z";
95
+ var httpKeyId = "http://127.0.0.1:18497/.well-known/apgateway/did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor#main-key";
96
+ var sha256$1 = {
97
+ "requestBody": "775a330bd8b4af20d4fffc12b0c033c3dc03febe47374b62e70a2f8d44aa37c9",
98
+ "actorBody": "f24c677b3854353c272c29164342f94f420b7570aaf2999d1ea179c7c24ba4bc"
99
+ };
100
+ //#endregion
101
+ //#region test-vectors/fep-ef61/mitra-v5.10.0/receive/raw-bodies.json
102
+ var requestBody = "{\"@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\"],\"actor\":\"ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor\",\"id\":\"ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/creates/1\",\"object\":{\"@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\"],\"attributedTo\":\"ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor\",\"content\":\"<p>@alice Fedify to Mitra portable C2S live interop.</p>\",\"id\":\"ap+ef61://did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/notes/1\",\"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:47:01.910135986Z\",\"cryptosuite\":\"eddsa-jcs-2022\",\"proofPurpose\":\"assertionMethod\",\"proofValue\":\"z33dM5LxM7KnmoDjVMnYb44y8skPARP8qur6TiRDLr5P51SQZu3goY2JCVAFVLNjmnxE6dHPRRrcGW6qHr8vusyjt\",\"type\":\"DataIntegrityProof\",\"verificationMethod\":\"did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB#z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB\"},\"tag\":{\"href\":\"https://fedify.example:18444/users/alice\",\"name\":\"@alice\",\"type\":\"Mention\"},\"to\":[\"https://www.w3.org/ns/activitystreams#Public\",\"https://fedify.example:18444/users/alice\"],\"type\":\"Note\"},\"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:47:01.923062012Z\",\"cryptosuite\":\"eddsa-jcs-2022\",\"proofPurpose\":\"assertionMethod\",\"proofValue\":\"z4AqgJsruzRmAz7JZdmTY5zRNXZknLomUgGNmN4jwwBZorMg19MurHvhsHaSfW6Uooc5zXSTRZZK4T6uaLc4hJoL1\",\"type\":\"DataIntegrityProof\",\"verificationMethod\":\"did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB#z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB\"},\"to\":[\"https://www.w3.org/ns/activitystreams#Public\",\"https://fedify.example:18444/users/alice\"],\"type\":\"Create\"}";
103
+ var actorBody = "{\"@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\"}";
104
+ //#endregion
105
+ //#region test-vectors/fep-ef61/mitra-v5.10.0/receive/response.json
106
+ var status$1 = 202;
107
+ //#endregion
108
+ //#region test-vectors/fep-ef61/mitra-v5.10.0/receive/listener.json
109
+ var type = "Create";
110
+ var id = "ap+ef61://did%3Akey%3Az6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/creates/1";
111
+ var actor = "ap+ef61://did%3Akey%3Az6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor";
112
+ //#endregion
113
+ //#region test-vectors/fep-ef61/mitra-v5.10.0/receive/verification.json
114
+ var verified = true;
115
+ var key = "http://127.0.0.1:18497/.well-known/apgateway/did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor#main-key";
116
+ //#endregion
117
+ //#region test-vectors/fep-ef61/mitra-v5.10.0/receive/actor-response.json
118
+ var url = "http://127.0.0.1:18497/.well-known/apgateway/did:key:z6MkuLKdSc7GHbgu9zDC8sZEjSbhAn7GzoHKXxsgsGNPakpB/actor#main-key";
119
+ var status = 200;
120
+ //#endregion
121
+ //#region src/sig/mitra-receive-interop.test.ts
122
+ const body = requestBody;
123
+ const activity = JSON.parse(body);
124
+ async function sha256(value) {
125
+ return encodeHex(new Uint8Array(await crypto.subtle.digest("SHA-256", new TextEncoder().encode(value))));
126
+ }
127
+ async function digest(value) {
128
+ return new Uint8Array(await crypto.subtle.digest("SHA-256", new TextEncoder().encode(value)));
129
+ }
130
+ async function verifyRawJcs(document) {
131
+ const { proof, ...unsecured } = document;
132
+ assert(proof != null && typeof proof === "object" && !Array.isArray(proof));
133
+ const { proofValue, ...configuration } = proof;
134
+ assertEquals(configuration.cryptosuite, "eddsa-jcs-2022");
135
+ configuration["@context"] ??= document["@context"];
136
+ assert(typeof configuration.verificationMethod === "string");
137
+ assert(typeof proofValue === "string");
138
+ const key = await importDidKey(configuration.verificationMethod.split("#")[0]);
139
+ const combined = /* @__PURE__ */ new Uint8Array(64);
140
+ combined.set(await digest(serialize(configuration)), 0);
141
+ combined.set(await digest(serialize(unsecured)), 32);
142
+ return await crypto.subtle.verify("Ed25519", key, new Uint8Array(decodeMultibase(proofValue)), combined);
143
+ }
144
+ function loader(document = actor_default) {
145
+ return (url) => {
146
+ assertEquals(url.split("#")[0], httpKeyId.split("#")[0]);
147
+ return Promise.resolve({
148
+ document: structuredClone(document),
149
+ documentUrl: httpKeyId.split("#")[0],
150
+ contextUrl: null
151
+ });
152
+ };
153
+ }
154
+ const options = {
155
+ documentLoader: loader(),
156
+ contextLoader: mockDocumentLoader,
157
+ currentTime: Temporal.Instant.from(capturedAt$1)
158
+ };
159
+ function request(requestBody = body, url = url$1, headers$1 = new Headers(headers)) {
160
+ return new Request(url, {
161
+ method,
162
+ headers: headers$1,
163
+ body: requestBody
164
+ });
165
+ }
166
+ async function deliver(requestBody) {
167
+ const federation = createFederation({
168
+ kv: new MemoryKvStore(),
169
+ documentLoaderFactory: () => loader(),
170
+ contextLoaderFactory: () => mockDocumentLoader,
171
+ signatureTimeWindow: false
172
+ });
173
+ federation.setActorDispatcher("/users/{identifier}", (ctx, identifier) => identifier === "alice" ? new Person({
174
+ id: ctx.getActorUri(identifier),
175
+ inbox: ctx.getInboxUri(identifier)
176
+ }) : null).setKeyPairsDispatcher(() => []);
177
+ const received = [];
178
+ federation.setInboxListeners("/users/{identifier}/inbox", "/inbox").on(Create, (_ctx, create) => {
179
+ received.push(create);
180
+ });
181
+ return {
182
+ response: await federation.fetch(request(requestBody), { contextData: void 0 }),
183
+ received
184
+ };
185
+ }
186
+ test("Mitra v5.10.0 forwarded client-proved Create verifies its proof and HTTP signature", async () => {
187
+ const actorBody$1 = actorBody;
188
+ assertEquals(await sha256(body), sha256$1.requestBody);
189
+ assertEquals(await sha256(actorBody$1), sha256$1.actorBody);
190
+ assertEquals(JSON.parse(actorBody$1), actor_default);
191
+ assertEquals(status, 200);
192
+ assertEquals(url, httpKeyId);
193
+ assertEquals(verified, true);
194
+ assertEquals(key, httpKeyId);
195
+ assertEquals(activity.type, "Create");
196
+ assertEquals(actor_default.type, "Person");
197
+ assert((await verifyPortableObjectProof(activity.object, options)).verified);
198
+ assertEquals(activity.actor, actor_default.id);
199
+ assert(await verifyRawJcs(actor_default));
200
+ assert(await verifyRawJcs(activity));
201
+ assert(await verifyRawJcs(activity.object));
202
+ assert((await verifyPortableObjectProof(actor_default, options)).verified);
203
+ assert((await verifyPortableObjectProof(activity, options)).verified);
204
+ const verified$1 = await verifyRequestDetailed(request(), options);
205
+ assert(verified$1.verified);
206
+ assertEquals(verified$1.key.id?.href, httpKeyId);
207
+ assert(verified$1.key.id?.href !== actor_default.publicKey.id);
208
+ assert(await doesActorOwnKey(await Create.fromJsonLd(activity, options), verified$1.key, options));
209
+ assertEquals(capturedAt$1, capturedAt);
210
+ });
211
+ test("Mitra v5.10.0 forwarded client-proved Create reaches the Fedify inbox listener", async () => {
212
+ assertEquals(status$1, 202);
213
+ assertEquals(type, "Create");
214
+ assertEquals(canonicalizePortableUri(id), canonicalizePortableUri(activity.id));
215
+ assertEquals(canonicalizePortableUri(actor), canonicalizePortableUri(activity.actor));
216
+ const { response, received } = await deliver(body);
217
+ assertEquals(response.status, 202);
218
+ assertEquals(received.length, 1);
219
+ assert(received[0].id != null);
220
+ assertEquals(canonicalizePortableUri(received[0].id.href), canonicalizePortableUri(activity.id));
221
+ assert(received[0].actorId != null);
222
+ assertEquals(canonicalizePortableUri(received[0].actorId.href), canonicalizePortableUri(actor_default.id));
223
+ });
224
+ test("Mitra v5.10.0 forwarded client-proved Create rejects body tampering", async () => {
225
+ const tampered = {
226
+ ...activity,
227
+ object: {
228
+ ...activity.object,
229
+ content: "Tampered received Note"
230
+ }
231
+ };
232
+ assertEquals((await verifyPortableObjectProof(tampered, options)).verified, false);
233
+ assertEquals(await verifyRawJcs(tampered), false);
234
+ assertEquals(await verifyRawJcs(tampered.object), false);
235
+ const changedBody = JSON.stringify(tampered);
236
+ assertEquals((await verifyRequestDetailed(request(changedBody), options)).verified, false);
237
+ const { response, received } = await deliver(changedBody);
238
+ assertEquals(response.status, 401);
239
+ assertEquals(received.length, 0);
240
+ });
241
+ test("Mitra v5.10.0 forwarded client-proved Create rejects signed header and path tampering", async () => {
242
+ const headers$2 = new Headers(headers);
243
+ headers$2.set("Date", new Date(Date.parse(new Headers(headers).get("Date")) + 1e3).toUTCString());
244
+ assertEquals((await verifyRequestDetailed(request(body, url$1, headers$2), options)).verified, false);
245
+ assertEquals((await verifyRequestDetailed(request(body, `${url$1}/tampered`), options)).verified, false);
246
+ });
247
+ test("Mitra v5.10.0 forwarded client-proved Create rejects a tampered actor proof", async () => {
248
+ const tampered = {
249
+ ...actor_default,
250
+ preferredUsername: "mallory"
251
+ };
252
+ assertEquals(await verifyRawJcs(tampered), false);
253
+ assertEquals((await verifyPortableObjectProof(tampered, options)).verified, false);
254
+ assertEquals((await verifyRequestDetailed(request(), {
255
+ ...options,
256
+ documentLoader: loader(tampered)
257
+ })).verified, false);
258
+ });
259
+ //#endregion
260
+ export {};
@@ -0,0 +1,2 @@
1
+ import { Temporal } from "temporal-polyfill";
2
+ import { URLPattern } from "urlpattern-polyfill";