@fedify/fedify 2.4.0-dev.2127 → 2.4.0-dev.2141

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 (92) hide show
  1. package/dist/{builder-B2bgGYbP.mjs → builder-BI7H61zO.mjs} +3 -3
  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-SVlHSzV7.mjs → compound-proof-D0H4LLvQ.mjs} +15 -20
  6. package/dist/{context-Ci5vuUr_.d.ts → context-B2C8nuN3.d.ts} +4 -3
  7. package/dist/{context-Bm6ldGvx.d.cts → context-CrDDVrbF.d.cts} +4 -3
  8. package/dist/{deno-Be9xoxps.mjs → deno-BXI_BLNy.mjs} +1 -1
  9. package/dist/{docloader-Dtuyb0ps.mjs → docloader-B5BIo7e9.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 +64 -8
  13. package/dist/federation/handler.test.mjs +5 -5
  14. package/dist/federation/hashlink-media.test.mjs +2 -2
  15. package/dist/federation/idempotency.test.mjs +2 -2
  16. package/dist/federation/metrics.test.mjs +1 -1
  17. package/dist/federation/middleware.test.mjs +7 -7
  18. package/dist/federation/mod.cjs +1 -1
  19. package/dist/federation/mod.d.cts +2 -2
  20. package/dist/federation/mod.d.ts +2 -2
  21. package/dist/federation/mod.js +1 -1
  22. package/dist/federation/outgoing-proof.test.mjs +6 -6
  23. package/dist/federation/portable-actor.test.mjs +3 -3
  24. package/dist/federation/portable-chain.test.mjs +17 -5
  25. package/dist/federation/portable-gateway-keys.test.mjs +76 -5
  26. package/dist/federation/portable-inbox.test.mjs +9 -4
  27. package/dist/federation/portable.test.mjs +3 -3
  28. package/dist/federation/send.test.mjs +3 -3
  29. package/dist/federation/tasks/enqueue.test.mjs +1 -1
  30. package/dist/federation/tasks/tasks.test.mjs +2 -2
  31. package/dist/federation/temporal.test.mjs +1 -1
  32. package/dist/federation/webfinger.test.mjs +1 -1
  33. package/dist/{federation-B6IHuS6n.cjs → federation-DqDOPjWo.cjs} +23 -28
  34. package/dist/{http-D76Py0M4.d.cts → http-C-x_OLSp.d.ts} +57 -14
  35. package/dist/{http-BFeK9sBg.mjs → http-CEx2SZjf.mjs} +18 -12
  36. package/dist/{http-BrQgkJay.d.ts → http-CjezPjFX.d.cts} +57 -14
  37. package/dist/{http-Rmbiu-5S.js → http-D4KW2GTi.js} +376 -36
  38. package/dist/{http-o8l4QeUY.cjs → http-DSYQQn23.cjs} +392 -34
  39. package/dist/{key-Cc1b6pW9.mjs → key-C0giKuki.mjs} +103 -16
  40. package/dist/{kv-cache-tLKBfxHc.mjs → kv-cache-AWTrxTq3.mjs} +1 -1
  41. package/dist/{kv-cache-BUkgZAcX.cjs → kv-cache-BcsvaCCL.cjs} +1 -1
  42. package/dist/{kv-cache-BweDce2I.js → kv-cache-D_E-2K3i.js} +1 -1
  43. package/dist/{ld-DQNTIrAe.mjs → ld-CWDReGMZ.mjs} +3 -3
  44. package/dist/{metrics-DDE9S63Q.mjs → metrics-DxlVXwn5.mjs} +1 -1
  45. package/dist/{middleware-K9aLnf57.js → middleware-1mv9QR16.js} +23 -28
  46. package/dist/{middleware-CsQorLC_.mjs → middleware-B7stx5gy.mjs} +1 -1
  47. package/dist/{middleware-BdhvduR9.mjs → middleware-CAWRGSwH.mjs} +24 -24
  48. package/dist/{mod-AVir5nVI.d.cts → mod-B7SfEqIP.d.cts} +1 -1
  49. package/dist/{mod-Co53r-VP.d.ts → mod-Bz9tFXI2.d.ts} +1 -1
  50. package/dist/{mod-eVOUPbQE.d.ts → mod-C06GoL5Z.d.ts} +1 -1
  51. package/dist/{mod-Cwdt_CWU.d.ts → mod-CZetqT5h.d.ts} +1 -1
  52. package/dist/{mod-Cr79cQlc.d.cts → mod-D4g9ffEn.d.cts} +1 -1
  53. package/dist/{mod-Byt5tvAS.d.cts → mod-S--JxYjo.d.cts} +1 -1
  54. package/dist/mod.cjs +4 -4
  55. package/dist/mod.d.cts +5 -5
  56. package/dist/mod.d.ts +5 -5
  57. package/dist/mod.js +4 -4
  58. package/dist/nodeinfo/handler.test.mjs +1 -1
  59. package/dist/{owner-CCfdL83M.mjs → owner-CgoCOTUQ.mjs} +37 -4
  60. package/dist/{portable-collection-WXaHkNqC.mjs → portable-collection-0_5DyXMt.mjs} +2 -2
  61. package/dist/{portable-collection-DXogVs__.cjs → portable-collection-BD8fE3j3.cjs} +34 -1
  62. package/dist/{portable-collection-DdXsKBg4.js → portable-collection-CG9P_i0E.js} +34 -1
  63. package/dist/portable-key-BXkgMpw1.mjs +395 -0
  64. package/dist/{portable-key-id-T7lecIbt.mjs → portable-key-id-Bg259c4Z.mjs} +69 -2
  65. package/dist/{proof-CW8k0R1G.mjs → proof-B5s-W6Sm.mjs} +7 -6
  66. package/dist/{send--FORaIc4.mjs → send-BAJvkdNL.mjs} +3 -3
  67. package/dist/sig/compound-proof-discovery.test.mjs +1 -1
  68. package/dist/sig/compound-proof-producer.test.mjs +1 -1
  69. package/dist/sig/compound-proof-verification.test.mjs +196 -2
  70. package/dist/sig/compound-proof.test.mjs +2 -2
  71. package/dist/sig/http.test.mjs +2 -2
  72. package/dist/sig/key.test.mjs +1 -1
  73. package/dist/sig/ld.test.mjs +2 -2
  74. package/dist/sig/mod.cjs +2 -2
  75. package/dist/sig/mod.d.cts +2 -2
  76. package/dist/sig/mod.d.ts +2 -2
  77. package/dist/sig/mod.js +2 -2
  78. package/dist/sig/owner.test.mjs +1 -1
  79. package/dist/sig/portable-collection.test.mjs +1 -1
  80. package/dist/sig/portable-key.test.mjs +479 -5
  81. package/dist/sig/proof.test.mjs +45 -3
  82. package/dist/{temporal-CffY_XOJ.mjs → temporal-BkCPJ_uC.mjs} +1 -1
  83. package/dist/testing/kv.test.mjs +1 -1
  84. package/dist/testing/mod.d.mts +3 -2
  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.d.cts +1 -1
  89. package/dist/utils/mod.d.ts +1 -1
  90. package/dist/utils/mod.js +1 -1
  91. package/package.json +6 -6
  92. package/dist/portable-key-C-fPq_Yf.mjs +0 -214
@@ -2,10 +2,12 @@ import "temporal-polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { isActor } from "@fedify/vocab";
5
- import { canonicalizePortableUri, formatIri, fromCompatibleEf61Id, getFe34Origin, toCompatibleEf61Id } from "@fedify/vocab-runtime";
5
+ import { canonicalizePortableUri, formatIri, fromCompatibleEf61Id, getFe34Origin, parseIri, toCompatibleEf61Id } from "@fedify/vocab-runtime";
6
6
  import { isCompatibleEf61Iri } from "@fedify/vocab-runtime/internal/portable-dereference";
7
7
  //#region src/sig/portable-key-id.ts
8
8
  const COMPATIBLE_KEY_ID_PATH_PATTERN = /^\/\.well-known\/apgateway\/did(?::|%3A)/i;
9
+ const RAW_PORTABLE_URI_PATTERN = /^ap(?:\+ef61)?:\/\//i;
10
+ const RAW_COMPATIBLE_ID_PREFIX_PATTERN = /^https?:\/\/[^/?#]*\/\.well-known\/apgateway\/(?=did(?::|%3A))/i;
9
11
  /**
10
12
  * Checks whether the URL is an `ap:` or `ap+ef61:` URI.
11
13
  * @internal
@@ -69,6 +71,20 @@ function isCompatibleKeyId(keyId) {
69
71
  return (keyId.protocol === "http:" || keyId.protocol === "https:") && COMPATIBLE_KEY_ID_PATH_PATTERN.test(keyId.pathname);
70
72
  }
71
73
  /**
74
+ * Checks whether a key ID may name a key that is valid only for HTTP
75
+ * Signatures: a gateway key at an [FEP-ef61] compatible identifier, or a key
76
+ * of a portable actor at an `ap:` or `ap+ef61:` URI. Neither ever makes or
77
+ * verifies an Object Integrity Proof or a Linked Data Signature: a portable
78
+ * object's proof is made by its DID, and a proof made with a gateway key
79
+ * would claim that the gateway authored the object.
80
+ *
81
+ * [FEP-ef61]: https://w3id.org/fep/ef61
82
+ * @internal
83
+ */
84
+ function isPortableKeyId(keyId) {
85
+ return isPortableUri(keyId) || isCompatibleKeyId(keyId);
86
+ }
87
+ /**
72
88
  * Gets the canonical portable ID of an actor ID that is either an `ap:` or
73
89
  * `ap+ef61:` URI or a compatible identifier.
74
90
  * @returns The canonical portable ID, or `null` if the ID is neither, or is
@@ -87,6 +103,57 @@ function getCanonicalPortableId(id) {
87
103
  }
88
104
  }
89
105
  /**
106
+ * Gets the canonical portable ID of an `ap:` or `ap+ef61:` URI or
107
+ * a compatible identifier as it is written, before any URL parsing.
108
+ * Parsing an ID into a `URL` resolves dot segments in its path, which would
109
+ * make it identify another portable object, e.g.,
110
+ * `ap://did:key:z6Mk…/x/../actor` would become `ap://did:key:z6Mk…/actor`.
111
+ * Such an ID has no canonical portable ID here.
112
+ * @param raw The ID as it is written.
113
+ * @returns The canonical portable ID, fragment included, or `null` if the ID
114
+ * is neither an `ap:` or `ap+ef61:` URI nor a compatible identifier,
115
+ * is malformed, or would identify another object once parsed.
116
+ * @internal
117
+ */
118
+ function getRawCanonicalPortableId(raw) {
119
+ let canonical;
120
+ let parsed;
121
+ try {
122
+ if (RAW_PORTABLE_URI_PATTERN.test(raw)) {
123
+ canonical = canonicalizePortableUri(raw);
124
+ parsed = canonicalizePortableUri(formatIri(parseIri(raw)));
125
+ } else {
126
+ const prefix = raw.match(RAW_COMPATIBLE_ID_PREFIX_PATTERN);
127
+ if (prefix == null || !URL.canParse(raw)) return null;
128
+ canonical = canonicalizePortableUri("ap://" + raw.slice(prefix[0].length));
129
+ parsed = getCanonicalPortableId(new URL(raw));
130
+ }
131
+ } catch (error) {
132
+ if (error instanceof TypeError) return null;
133
+ throw error;
134
+ }
135
+ return canonical === parsed ? canonical : null;
136
+ }
137
+ /**
138
+ * Parses a key ID, e.g., the `keyId` of an HTTP Signature, into a `URL`.
139
+ * An `ap:` or `ap+ef61:` key ID is parsed into the internal `URL` form of
140
+ * portable URIs. A portable or compatible key ID that is malformed, or
141
+ * whose identity URL parsing would change, e.g., by resolving dot segments in
142
+ * its path, is refused, so that it can never be taken for, or looked up in
143
+ * the key cache as, the key of another object.
144
+ * @param raw The key ID as it is written.
145
+ * @returns The parsed key ID, or `null` if it is invalid.
146
+ * @internal
147
+ */
148
+ function parseKeyIdString(raw) {
149
+ if (RAW_PORTABLE_URI_PATTERN.test(raw)) return getRawCanonicalPortableId(raw) == null ? null : parseIri(raw);
150
+ if (!URL.canParse(raw)) return null;
151
+ const url = new URL(raw);
152
+ if (isPortableUri(url)) return null;
153
+ if (!RAW_COMPATIBLE_ID_PREFIX_PATTERN.test(raw)) return isCompatibleKeyId(url) ? null : url;
154
+ return getRawCanonicalPortableId(raw) == null ? null : url;
155
+ }
156
+ /**
90
157
  * Builds the base of the key IDs of a gateway's keys for a portable actor:
91
158
  * the actor's compatible identifier on the gateway.
92
159
  * @param actorId The portable actor's ID, either an `ap:` or `ap+ef61:` URI
@@ -134,4 +201,4 @@ async function isSamePublicKey(a, b) {
134
201
  return x.kty === y.kty && x.crv === y.crv && x.n === y.n && x.e === y.e && x.x === y.x && x.y === y.y;
135
202
  }
136
203
  //#endregion
137
- export { isCompatibleKeyId as a, isPortableUri as c, hasPortableActor as i, isSamePublicKey as l, getGatewayKeyBase as n, isPortableActorDocument as o, getPortableDid as r, isPortableId as s, getCanonicalPortableId as t };
204
+ export { hasPortableActor as a, isPortableId as c, isSamePublicKey as d, parseKeyIdString as f, getRawCanonicalPortableId as i, isPortableKeyId as l, getGatewayKeyBase as n, isCompatibleKeyId as o, getPortableDid as r, isPortableActorDocument as s, getCanonicalPortableId as t, isPortableUri as u };
@@ -1,13 +1,13 @@
1
1
  import { Temporal } from "temporal-polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as version, t as name } from "./deno-Be9xoxps.mjs";
5
- import { n as getDurationMs, r as getFederationMetrics, s as measureSignatureKeyFetch } from "./metrics-DDE9S63Q.mjs";
6
- import { r as getPortableDid, s as isPortableId } from "./portable-key-id-T7lecIbt.mjs";
7
- import { c as validateCryptoKey, i as fetchKey, t as bypassKeyCacheReads } from "./key-Cc1b6pW9.mjs";
4
+ import { n as version, t as name } from "./deno-BXI_BLNy.mjs";
5
+ import { n as getDurationMs, r as getFederationMetrics, s as measureSignatureKeyFetch } from "./metrics-DxlVXwn5.mjs";
6
+ import { c as isPortableId, r as getPortableDid } from "./portable-key-id-Bg259c4Z.mjs";
7
+ import { c as validateCryptoKey, i as fetchKey, t as bypassKeyCacheReads } from "./key-C0giKuki.mjs";
8
8
  import { n as preloadedOnlyDocumentLoader } from "./public-audience--klBIOk1.mjs";
9
9
  import { r as normalizeOutgoingActivityJsonLd } from "./outgoing-jsonld-4IJqPYos.mjs";
10
- import { c as getNormalizationContextLoader } from "./ld-DQNTIrAe.mjs";
10
+ import { c as getNormalizationContextLoader } from "./ld-CWDReGMZ.mjs";
11
11
  import { getLogger } from "@logtape/logtape";
12
12
  import { Activity, DataIntegrityProof, Multikey, getTypeId } from "@fedify/vocab";
13
13
  import { SpanStatusCode, trace } from "@opentelemetry/api";
@@ -1092,7 +1092,8 @@ async function verifyObject(cls, jsonLd, options = {}) {
1092
1092
  ...options,
1093
1093
  documentLoader: proofDocumentLoader,
1094
1094
  gateways: [],
1095
- verifyPortableObject: acceptPortableProofDocument
1095
+ verifyPortableObject: acceptPortableProofDocument,
1096
+ inheritPortableObjectVerifier: false
1096
1097
  })) {
1097
1098
  const rawProofCandidate = takeRawProofCandidate(rawProofCandidatePool, proof);
1098
1099
  if (rawProofCandidate == null) return null;
@@ -1,9 +1,9 @@
1
1
  import "temporal-polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as version, t as name } from "./deno-Be9xoxps.mjs";
5
- import { n as getDurationMs, r as getFederationMetrics } from "./metrics-DDE9S63Q.mjs";
6
- import { n as doubleKnock } from "./http-BFeK9sBg.mjs";
4
+ import { n as version, t as name } from "./deno-BXI_BLNy.mjs";
5
+ import { n as getDurationMs, r as getFederationMetrics } from "./metrics-DxlVXwn5.mjs";
6
+ import { n as doubleKnock } from "./http-CEx2SZjf.mjs";
7
7
  import { getLogger } from "@logtape/logtape";
8
8
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
9
9
  import { FetchError, UrlError, validatePublicUrl } from "@fedify/vocab-runtime";
@@ -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, n as discoverCompoundProofDocuments } from "../compound-proof-SVlHSzV7.mjs";
6
+ import { i as inspectCompoundPortableObjectApplicability, n as discoverCompoundProofDocuments } from "../compound-proof-D0H4LLvQ.mjs";
7
7
  import { t as map_local_create_note_default } from "../map-local-create-note-B0SeXJms.mjs";
8
8
  import { test } from "@fedify/fixture";
9
9
  //#region src/sig/compound-proof-discovery.test.ts
@@ -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-SVlHSzV7.mjs";
6
+ import { i as inspectCompoundPortableObjectApplicability, r as findUnsupportedCompoundProofShape, t as containsCompoundPortableObject } from "../compound-proof-D0H4LLvQ.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 { a as verifyMapLocalProof, c as verifyPortableObjectProofPolicy } from "../proof-CW8k0R1G.mjs";
7
+ import { a as verifyMapLocalProof, c as verifyPortableObjectProofPolicy } from "../proof-B5s-W6Sm.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-SVlHSzV7.mjs";
9
+ import { a as verifyCompoundPortableObjectProofs, i as inspectCompoundPortableObjectApplicability, o as verifyCompoundProofDocuments, t as containsCompoundPortableObject } from "../compound-proof-D0H4LLvQ.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";
@@ -618,5 +618,199 @@ test("verifyCompoundPortableObjectProofs() exempts only keys of the parent itsel
618
618
  assert(result.portableObjects.some((o) => o.path !== "" && !o.verified), name);
619
619
  }
620
620
  });
621
+ /**
622
+ * Rewrites the IDs of a {@link compatibleActor}'s keys as they are written,
623
+ * e.g., as `ap:` URIs, which the serializer would canonicalize otherwise.
624
+ */
625
+ function withKeyIds(actor, keyBase, { id = actor.id, owner = id } = {}) {
626
+ const [multikey] = actor.assertionMethod;
627
+ return {
628
+ ...actor,
629
+ id,
630
+ publicKey: {
631
+ ...asRecord(actor.publicKey),
632
+ id: `${keyBase}#main-key`,
633
+ owner
634
+ },
635
+ assertionMethod: [{
636
+ ...multikey,
637
+ id: `${keyBase}#ed25519-key`,
638
+ controller: owner
639
+ }]
640
+ };
641
+ }
642
+ const apActorId = `ap://${compatibleDid}/actor`;
643
+ test("verifyCompoundPortableObjectProofs() exempts keys at ap: URIs embedded in portable actors", async () => {
644
+ const actor = await compatibleActor();
645
+ const encodedDid = encodeURIComponent(compatibleDid);
646
+ const cases = {
647
+ "ap: keys of an ap: actor": [apActorId, apActorId],
648
+ "ap: keys of a compatible-ID actor": [compatibleActorId, apActorId],
649
+ "ap+ef61: keys": [apActorId, `ap+ef61://${compatibleDid}/actor`],
650
+ "keys with percent-encoded DIDs": [apActorId, `ap://${encodedDid}/actor`],
651
+ "ap+ef61: keys of a percent-encoded actor": [`ap+ef61://${encodedDid}/actor`, `ap+ef61://${encodedDid}/actor`],
652
+ "keys with an uppercase scheme": [apActorId, `AP://${compatibleDid}/actor`],
653
+ "keys with location hints": [apActorId, `${apActorId}?@gateway=https%3A%2F%2Fgw.example`]
654
+ };
655
+ for (const [name, [id, keyBase]] of Object.entries(cases)) {
656
+ const result = await verifyCompoundPortableObjectProofs(await signCompatible(withKeyIds(actor, keyBase, { id })), limits, options);
657
+ assert(result.status === "ok", name);
658
+ assert(result.verified, name);
659
+ assertEquals(result.portableObjects.map((o) => o.path), [""], name);
660
+ }
661
+ const apActor = withKeyIds(actor, apActorId, { id: apActorId });
662
+ const atIdKeys = (key) => {
663
+ const { id, ...rest } = asRecord(key);
664
+ return {
665
+ ...rest,
666
+ "@id": id
667
+ };
668
+ };
669
+ const withAtIds = await verifyCompoundPortableObjectProofs(await signCompatible({
670
+ ...apActor,
671
+ publicKey: atIdKeys(apActor.publicKey),
672
+ assertionMethod: apActor.assertionMethod.map(atIdKeys)
673
+ }), limits, options);
674
+ assert(withAtIds.status === "ok");
675
+ assert(withAtIds.verified);
676
+ assertEquals(withAtIds.portableObjects.map((o) => o.path), [""]);
677
+ const withApTerm = await verifyCompoundPortableObjectProofs(await signCompatible({
678
+ ...withKeyIds(actor, apActorId, { id: apActorId }),
679
+ "@context": [...actor["@context"], { ap: "https://ap.example/" }]
680
+ }), limits, options);
681
+ assert(withApTerm.status === "ok");
682
+ assert(withApTerm.verified);
683
+ assertEquals(withApTerm.portableObjects.map((o) => o.path), [""]);
684
+ const result = await verifyCompoundPortableObjectProofs(await signCompatible({
685
+ "@context": [...compatibleContext],
686
+ id: `ap://${compatibleDid}/activities/1`,
687
+ type: "Update",
688
+ actor: apActorId,
689
+ object: await signCompatible(withKeyIds(actor, apActorId, { id: apActorId }))
690
+ }), limits, options);
691
+ assert(result.status === "ok");
692
+ assert(result.verified);
693
+ assertEquals(result.portableObjects.map((o) => o.path), ["/object", ""]);
694
+ });
695
+ test("verifyCompoundPortableObjectProofs() exempts only ap: keys of the parent itself", async () => {
696
+ const actor = withKeyIds(await compatibleActor(), apActorId, { id: apActorId });
697
+ const publicKey = asRecord(actor.publicKey);
698
+ const otherDid = "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK";
699
+ const keyIds = {
700
+ "a key of another actor": `ap://${compatibleDid}/other#main-key`,
701
+ "a key of another DID": `ap://${otherDid}/actor#main-key`,
702
+ "a key without a fragment": apActorId,
703
+ "a key with an empty fragment": `${apActorId}#`,
704
+ "a key with dot segments": `ap://${compatibleDid}/x/../actor#main-key`,
705
+ "a key with encoded dot segments": `ap://${compatibleDid}/x/%2E%2E/actor#main-key`,
706
+ "a key with an encoded slash": `${apActorId}%2F#main-key`,
707
+ "a key with an encoded fragment delimiter": `${apActorId}%23main-key`,
708
+ "a compatible key with dot segments": `https://gw.example/.well-known/apgateway/${compatibleDid}/x/../actor#main-key`
709
+ };
710
+ const cases = {};
711
+ for (const [name, id] of Object.entries(keyIds)) cases[name] = {
712
+ ...actor,
713
+ publicKey: {
714
+ ...publicKey,
715
+ id
716
+ }
717
+ };
718
+ Object.assign(cases, {
719
+ "a key owned by another actor": {
720
+ ...actor,
721
+ publicKey: {
722
+ ...publicKey,
723
+ owner: `ap://${otherDid}/actor`
724
+ }
725
+ },
726
+ "a key controlled by another actor": {
727
+ ...actor,
728
+ assertionMethod: actor.assertionMethod.map((key) => ({
729
+ ...key,
730
+ controller: `ap://${otherDid}/actor`
731
+ }))
732
+ },
733
+ "a key with extra content": {
734
+ ...actor,
735
+ publicKey: {
736
+ ...publicKey,
737
+ name: "Extra"
738
+ }
739
+ },
740
+ "a key with a scoped context": {
741
+ ...actor,
742
+ publicKey: {
743
+ ...publicKey,
744
+ "@context": { CryptographicKey: {
745
+ "@id": "https://w3id.org/security#Key",
746
+ "@context": {}
747
+ } }
748
+ }
749
+ }
750
+ });
751
+ for (const [name, document] of Object.entries(cases)) {
752
+ const result = await verifyCompoundPortableObjectProofs(await signCompatible(document), limits, options);
753
+ assert(result.status === "ok", name);
754
+ assertEquals(result.verified, false, name);
755
+ assert(result.portableObjects.find((o) => o.path === "")?.verified, name);
756
+ assert(result.portableObjects.some((o) => o.path !== "" && !o.verified), name);
757
+ }
758
+ const conflicting = await verifyCompoundPortableObjectProofs(await signCompatible({
759
+ ...actor,
760
+ publicKey: {
761
+ ...publicKey,
762
+ "@id": `ap://${compatibleDid}/other#main-key`
763
+ }
764
+ }), limits, options);
765
+ assert(conflicting.status === "ok");
766
+ assertEquals(conflicting.verified, false);
767
+ });
768
+ test("verifyCompoundPortableObjectProofs() exempts ap: keys only of verified actors", async () => {
769
+ const actor = withKeyIds(await compatibleActor(), apActorId, { id: apActorId });
770
+ const signed = await signCompatible(actor);
771
+ const unverified = {
772
+ "": true,
773
+ "/object": false,
774
+ "/object/publicKey": false,
775
+ "/object/assertionMethod/0": false
776
+ };
777
+ const cases = {
778
+ "an unsigned actor": [actor, unverified],
779
+ "a tampered actor": [{
780
+ ...signed,
781
+ name: "Tampered"
782
+ }, unverified],
783
+ "an actor with a key with an invalid proof": [await signCompatible({
784
+ ...actor,
785
+ publicKey: {
786
+ ...asRecord(actor.publicKey),
787
+ "@context": [...compatibleContext],
788
+ proof: asRecord(signed.proof)
789
+ }
790
+ }), {
791
+ "": true,
792
+ "/object": true,
793
+ "/object/publicKey": false
794
+ }]
795
+ };
796
+ for (const [name, [object, expected]] of Object.entries(cases)) {
797
+ const result = await verifyCompoundPortableObjectProofs(await signCompatible({
798
+ "@context": [...compatibleContext],
799
+ id: `ap://${compatibleDid}/activities/1`,
800
+ type: "Update",
801
+ actor: apActorId,
802
+ object
803
+ }), limits, options);
804
+ assert(result.status === "ok", name);
805
+ assertEquals(result.verified, false, name);
806
+ assertEquals(Object.fromEntries(result.portableObjects.map((o) => [o.path, o.verified])), expected, name);
807
+ }
808
+ });
809
+ test("verifyCompoundPortableObjectProofs() leaves keys at DID URLs alone", async () => {
810
+ const result = await verifyCompoundPortableObjectProofs(await signCompatible(withKeyIds(await compatibleActor(), compatibleDid, { id: apActorId })), limits, options);
811
+ assert(result.status === "ok");
812
+ assert(result.verified);
813
+ assertEquals(result.portableObjects.map((o) => o.path), [""]);
814
+ });
621
815
  //#endregion
622
816
  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 { i as signObject, u as verifyProof } from "../proof-CW8k0R1G.mjs";
9
+ import { i as signObject, u as verifyProof } from "../proof-B5s-W6Sm.mjs";
10
10
  import { n as ed25519PrivateKey, r as ed25519PublicKey } from "../keys-DIJNHW-Y.mjs";
11
- import { o as verifyCompoundProofDocuments } from "../compound-proof-SVlHSzV7.mjs";
11
+ import { o as verifyCompoundProofDocuments } from "../compound-proof-D0H4LLvQ.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";
@@ -11,8 +11,8 @@ import { t as assertThrows } from "../assert_throws-BYITOvPO.mjs";
11
11
  import "../std__assert-DvMDRPes.mjs";
12
12
  import { t as assertRejects } from "../assert_rejects-CTptdYck.mjs";
13
13
  import { t as assert } from "../assert-D1Eafmd_.mjs";
14
- import { n as exportJwk } from "../key-Cc1b6pW9.mjs";
15
- import { a as listRequestSignatures, c as selectRequestSignature, d as verifyRequest, f as verifyRequestDetailed, i as formatRfc9421SignatureParameters, l as signRequest, n as doubleKnock, o as parseRfc9421Signature, r as formatRfc9421Signature, s as parseRfc9421SignatureInput, t as createRfc9421SignatureBase, u as timingSafeEqual } from "../http-BFeK9sBg.mjs";
14
+ import { n as exportJwk } from "../key-C0giKuki.mjs";
15
+ import { a as listRequestSignatures, c as selectRequestSignature, d as verifyRequest, f as verifyRequestDetailed, i as formatRfc9421SignatureParameters, l as signRequest, n as doubleKnock, o as parseRfc9421Signature, r as formatRfc9421Signature, s as parseRfc9421SignatureInput, t as createRfc9421SignatureBase, u as timingSafeEqual } from "../http-CEx2SZjf.mjs";
16
16
  import { i as rsaPrivateKey2, l as rsaPublicKey5, o as rsaPublicKey1, s as rsaPublicKey2 } from "../keys-DIJNHW-Y.mjs";
17
17
  import { createTestMeterProvider, createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
18
18
  import { FetchError, exportSpki } 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-Cc1b6pW9.mjs";
9
+ import { a as fetchKeyDetailed, c as validateCryptoKey, i as fetchKey, n as exportJwk, o as generateCryptoKeyPair, s as importJwk } from "../key-C0giKuki.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 { createTestMeterProvider, createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
@@ -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-Cc1b6pW9.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-DQNTIrAe.mjs";
11
+ import { o as generateCryptoKeyPair } from "../key-C0giKuki.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-CWDReGMZ.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";
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-o8l4QeUY.cjs");
4
- const require_portable_collection = require("../portable-collection-DXogVs__.cjs");
3
+ const require_http = require("../http-DSYQQn23.cjs");
4
+ const require_portable_collection = require("../portable-collection-BD8fE3j3.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-D76Py0M4.cjs";
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-CjezPjFX.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-Byt5tvAS.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-S--JxYjo.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-BrQgkJay.js";
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-C-x_OLSp.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-Co53r-VP.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-Bz9tFXI2.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 { B as generateCryptoKeyPair, I as exportJwk, N as verifyJsonLd, O as hasSignatureLike, P as verifySignature, R as fetchKey, S as attachSignature, T as detachSignature, V as importJwk, a as signRequest, ct as formatAcceptSignature, d as hasProofLike, dt as validateAcceptSignature, f as signObject, h as verifyPortableObjectProof, j as signJsonLd, lt as fulfillAcceptSignature, m as verifyObject, o as verifyRequest, s as verifyRequestDetailed, u as createProof, ut as parseAcceptSignature, v as verifyProof, w as createSignature, z as fetchKeyDetailed } from "../http-Rmbiu-5S.js";
4
- import { n as doesActorOwnKey, r as getKeyOwner, t as verifyPortableObject } from "../portable-collection-DdXsKBg4.js";
3
+ import { B as fetchKeyDetailed, C as attachSignature, E as detachSignature, F as verifySignature, H as importJwk, L as exportJwk, M as signJsonLd, P as verifyJsonLd, T as createSignature, V as generateCryptoKeyPair, a as signRequest, d as createProof, dt as parseAcceptSignature, f as hasProofLike, ft as validateAcceptSignature, g as verifyPortableObjectProof, h as verifyObject, k as hasSignatureLike, lt as formatAcceptSignature, o as verifyRequest, p as signObject, s as verifyRequestDetailed, ut as fulfillAcceptSignature, y as verifyProof, z as fetchKey } from "../http-D4KW2GTi.js";
4
+ import { n as doesActorOwnKey, r as getKeyOwner, t as verifyPortableObject } from "../portable-collection-CG9P_i0E.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-CCfdL83M.mjs";
9
+ import { n as getKeyOwner, t as doesActorOwnKey } from "../owner-CgoCOTUQ.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-WXaHkNqC.mjs";
5
+ import { t as verifyPortableObject } from "../portable-collection-0_5DyXMt.mjs";
6
6
  import { Collection, CollectionPage, Note, OrderedCollection, Person, traverseCollection } from "@fedify/vocab";
7
7
  import { test } from "@fedify/fixture";
8
8
  import { FetchError, encodeMultibase, exportDidKey, preloadedContexts } from "@fedify/vocab-runtime";