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

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 (89) hide show
  1. package/dist/{builder-DdUWFCwL.mjs → builder-DvSQqk2l.mjs} +2 -2
  2. package/dist/compat/transformers.test.mjs +1 -1
  3. package/dist/{compound-proof-CcWDD5VB.mjs → compound-proof-5bg_j_ye.mjs} +2 -2
  4. package/dist/{deno-D9uhdIuD.mjs → deno-AmcRMq5z.mjs} +1 -1
  5. package/dist/{docloader-fbmPhCdS.mjs → docloader-CIP_SG39.mjs} +2 -2
  6. package/dist/federation/builder.test.mjs +1 -1
  7. package/dist/federation/compound-fanout.test.mjs +3 -3
  8. package/dist/federation/handler-compound-proof.test.mjs +3 -3
  9. package/dist/federation/handler.test.mjs +5 -5
  10. package/dist/federation/hashlink-media.test.mjs +2 -2
  11. package/dist/federation/idempotency.test.mjs +2 -2
  12. package/dist/federation/metrics.test.mjs +1 -1
  13. package/dist/federation/middleware.test.mjs +7 -7
  14. package/dist/federation/mod.cjs +1 -1
  15. package/dist/federation/mod.js +1 -1
  16. package/dist/federation/outgoing-proof.test.mjs +5 -5
  17. package/dist/federation/portable-actor.test.mjs +3 -3
  18. package/dist/federation/portable-chain.test.mjs +3 -3
  19. package/dist/federation/portable-collection.test.mjs +4 -4
  20. package/dist/federation/portable-delivery.test.mjs +2 -2
  21. package/dist/federation/portable-gateway-keys.test.mjs +4 -4
  22. package/dist/federation/portable-inbox.test.mjs +4 -4
  23. package/dist/federation/portable-parse-uri.test.mjs +1 -1
  24. package/dist/federation/portable-route-activity.test.mjs +2 -2
  25. package/dist/federation/portable.test.mjs +3 -3
  26. package/dist/federation/send.test.mjs +3 -3
  27. package/dist/federation/tasks/enqueue.test.mjs +1 -1
  28. package/dist/federation/tasks/tasks.test.mjs +2 -2
  29. package/dist/federation/temporal.test.mjs +1 -1
  30. package/dist/federation/webfinger.test.mjs +1 -1
  31. package/dist/{federation-B858-Ylk.cjs → federation-BDzIgqOd.cjs} +3 -3
  32. package/dist/{http-Bp0MKAK3.cjs → http-1fZ83jj7.cjs} +10 -7
  33. package/dist/{http-BoGE-nk7.js → http-BGb3QioZ.js} +10 -7
  34. package/dist/{http-CUyBaVsQ.mjs → http-DkqWu-sm.mjs} +4 -4
  35. package/dist/{key-BlTaKABr.mjs → key-CEsu7oaD.mjs} +2 -2
  36. package/dist/{kv-cache-BnWemxH2.cjs → kv-cache-BEWuZSB4.cjs} +1 -1
  37. package/dist/{kv-cache-DhMzUXEE.js → kv-cache-CGhEgt98.js} +1 -1
  38. package/dist/{kv-cache-Dmqd7s2a.mjs → kv-cache-CJS4mImS.mjs} +1 -1
  39. package/dist/{ld-Dx8r_qJU.mjs → ld-Cf4CPWN_.mjs} +3 -3
  40. package/dist/{metrics-DFkZkLrO.mjs → metrics-CocsZP0E.mjs} +1 -1
  41. package/dist/{middleware-DC018B4u.js → middleware-BfYke3YQ.js} +3 -3
  42. package/dist/{middleware-BNhF-Ayx.mjs → middleware-Cne_jMZo.mjs} +1 -1
  43. package/dist/{middleware-B0RRI88k.mjs → middleware-Dxn0E9ES.mjs} +14 -14
  44. package/dist/{mod-Cy9VNHVw.d.ts → mod-BlLwewYe.d.ts} +2 -0
  45. package/dist/{mod-DoTWIc7F.d.cts → mod-VHYh1lTK.d.cts} +2 -0
  46. package/dist/mod.cjs +4 -4
  47. package/dist/mod.d.cts +1 -1
  48. package/dist/mod.d.ts +1 -1
  49. package/dist/mod.js +4 -4
  50. package/dist/nodeinfo/handler.test.mjs +1 -1
  51. package/dist/{owner-B61jjp5K.mjs → owner-DSJ7nFgy.mjs} +3 -3
  52. package/dist/{portable-collection-BnktjQ04.js → portable-collection-BuBV6xTo.js} +1 -1
  53. package/dist/{portable-collection-CyBJDEzs.mjs → portable-collection-qskqXJrH.mjs} +2 -2
  54. package/dist/{portable-collection-DhEA_nWT.cjs → portable-collection-r-mHg1PV.cjs} +1 -1
  55. package/dist/{portable-key-CPN0QZSA.mjs → portable-key-woGH_1nn.mjs} +1 -1
  56. package/dist/{proof-CZrjvoJ3.mjs → proof-8WiH_-Gq.mjs} +13 -10
  57. package/dist/{send-enxOnmZo.mjs → send-JKzZBgPU.mjs} +3 -3
  58. package/dist/sig/compound-proof-discovery.test.mjs +1 -1
  59. package/dist/sig/compound-proof-producer.test.mjs +1 -1
  60. package/dist/sig/compound-proof-verification.test.mjs +2 -2
  61. package/dist/sig/compound-proof.test.mjs +2 -2
  62. package/dist/sig/http.test.mjs +2 -2
  63. package/dist/sig/key.test.mjs +1 -1
  64. package/dist/sig/ld.test.mjs +2 -2
  65. package/dist/sig/mitra-receive-interop.test.d.mts +2 -0
  66. package/dist/sig/mitra-receive-interop.test.mjs +260 -0
  67. package/dist/sig/mitra-send-interop.test.d.mts +2 -0
  68. package/dist/sig/mitra-send-interop.test.mjs +461 -0
  69. package/dist/sig/mod.cjs +2 -2
  70. package/dist/sig/mod.d.cts +1 -1
  71. package/dist/sig/mod.d.ts +1 -1
  72. package/dist/sig/mod.js +2 -2
  73. package/dist/sig/owner.test.mjs +1 -1
  74. package/dist/sig/portable-collection.test.mjs +1 -1
  75. package/dist/sig/portable-interop.test.d.mts +2 -0
  76. package/dist/sig/portable-interop.test.mjs +156 -0
  77. package/dist/sig/portable-key.test.mjs +6 -6
  78. package/dist/sig/proof.test.mjs +88 -3
  79. package/dist/sig/tootik-request-interop.test.d.mts +2 -0
  80. package/dist/sig/tootik-request-interop.test.mjs +190 -0
  81. package/dist/sig/tootik-send-interop.test.d.mts +2 -0
  82. package/dist/sig/tootik-send-interop.test.mjs +331 -0
  83. package/dist/{temporal-CBVv0xRB.mjs → temporal-CT3fRaMH.mjs} +1 -1
  84. package/dist/testing/kv.test.mjs +1 -1
  85. package/dist/utils/docloader.test.mjs +2 -2
  86. package/dist/utils/kv-cache.test.mjs +1 -1
  87. package/dist/utils/mod.cjs +1 -1
  88. package/dist/utils/mod.js +1 -1
  89. package/package.json +7 -7
@@ -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-8WiH_-Gq.mjs";
9
+ import { p as verifyRequestDetailed } from "../http-DkqWu-sm.mjs";
10
+ import { o as createFederation } from "../middleware-Dxn0E9ES.mjs";
11
+ import { t as doesActorOwnKey } from "../owner-DSJ7nFgy.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";