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

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 (90) hide show
  1. package/dist/{builder-CZcBWrBd.mjs → builder-B2bgGYbP.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-CDuP9MIX.mjs → compound-proof-SVlHSzV7.mjs} +2 -2
  6. package/dist/{context-SMNOiiY6.d.cts → context-Bm6ldGvx.d.cts} +30 -4
  7. package/dist/{context-tOiJfBoD.d.ts → context-Ci5vuUr_.d.ts} +30 -4
  8. package/dist/{context-CoNRxGYp.mjs → context-DfSVPcJ8.mjs} +6 -3
  9. package/dist/{deno-CCABdw7r.mjs → deno-Be9xoxps.mjs} +1 -1
  10. package/dist/{docloader-Bby5g2iu.mjs → docloader-Dtuyb0ps.mjs} +7 -7
  11. package/dist/federation/builder.test.mjs +1 -1
  12. package/dist/federation/compound-fanout.test.mjs +3 -3
  13. package/dist/federation/handler-compound-proof.test.mjs +4 -4
  14. package/dist/federation/handler.test.mjs +6 -6
  15. package/dist/federation/hashlink-media.test.mjs +2 -2
  16. package/dist/federation/idempotency.test.mjs +2 -2
  17. package/dist/federation/metrics.test.mjs +1 -1
  18. package/dist/federation/middleware.test.mjs +8 -8
  19. package/dist/federation/mod.cjs +1 -1
  20. package/dist/federation/mod.d.cts +2 -2
  21. package/dist/federation/mod.d.ts +2 -2
  22. package/dist/federation/mod.js +1 -1
  23. package/dist/federation/outgoing-proof.test.mjs +5 -5
  24. package/dist/federation/portable-actor.test.mjs +52 -5
  25. package/dist/federation/portable-chain.test.d.mts +2 -0
  26. package/dist/federation/portable-chain.test.mjs +358 -0
  27. package/dist/federation/portable-gateway-keys.test.mjs +4 -4
  28. package/dist/federation/portable-inbox.test.mjs +4 -4
  29. package/dist/federation/portable.test.mjs +127 -30
  30. package/dist/federation/send.test.mjs +3 -3
  31. package/dist/federation/tasks/enqueue.test.mjs +2 -2
  32. package/dist/federation/tasks/tasks.test.mjs +3 -3
  33. package/dist/federation/temporal.test.mjs +1 -1
  34. package/dist/federation/webfinger.test.mjs +2 -2
  35. package/dist/{federation-DYr384xz.cjs → federation-B6IHuS6n.cjs} +64 -28
  36. package/dist/{http-BcLnr2do.mjs → http-BFeK9sBg.mjs} +4 -4
  37. package/dist/{http-Ce6_Lf7k.js → http-Rmbiu-5S.js} +1 -1
  38. package/dist/{http-B4mQvNcv.cjs → http-o8l4QeUY.cjs} +1 -1
  39. package/dist/{key-CkNxztNV.mjs → key-Cc1b6pW9.mjs} +2 -2
  40. package/dist/{kv-cache-Dqp_E-1g.cjs → kv-cache-BUkgZAcX.cjs} +6 -6
  41. package/dist/{kv-cache-DwzXzchj.js → kv-cache-BweDce2I.js} +6 -6
  42. package/dist/{kv-cache-iFaRIcIL.mjs → kv-cache-tLKBfxHc.mjs} +1 -1
  43. package/dist/{ld-CnT0f1nU.mjs → ld-DQNTIrAe.mjs} +3 -3
  44. package/dist/{metrics-em_7lwhG.mjs → metrics-DDE9S63Q.mjs} +1 -1
  45. package/dist/{middleware-BpwKvOpU.mjs → middleware-BdhvduR9.mjs} +72 -35
  46. package/dist/{middleware-U9IuzvDO.mjs → middleware-CsQorLC_.mjs} +1 -1
  47. package/dist/{middleware-DhIBngkj.js → middleware-K9aLnf57.js} +62 -26
  48. package/dist/{mod-DnElMslb.d.cts → mod-AVir5nVI.d.cts} +1 -1
  49. package/dist/{mod-DMdGFMEl.d.cts → mod-Byt5tvAS.d.cts} +13 -2
  50. package/dist/{mod-CTh7ijx5.d.ts → mod-Co53r-VP.d.ts} +13 -2
  51. package/dist/{mod-COWgSo2v.d.ts → mod-eVOUPbQE.d.ts} +1 -1
  52. package/dist/mod.cjs +8 -8
  53. package/dist/mod.d.cts +3 -3
  54. package/dist/mod.d.ts +3 -3
  55. package/dist/mod.js +5 -5
  56. package/dist/nodeinfo/handler.test.mjs +2 -2
  57. package/dist/{owner-9LiHmOv1.mjs → owner-CCfdL83M.mjs} +3 -3
  58. package/dist/{sig-Bj3fHnv0.cjs → portable-collection-DXogVs__.cjs} +220 -2
  59. package/dist/portable-collection-DdXsKBg4.js +623 -0
  60. package/dist/{sig-DN9pOglI.js → portable-collection-WXaHkNqC.mjs} +5 -4
  61. package/dist/{portable-key-9ck61lI0.mjs → portable-key-C-fPq_Yf.mjs} +1 -1
  62. package/dist/{proof-xdPYGPaA.mjs → proof-CW8k0R1G.mjs} +4 -4
  63. package/dist/{send-Bf8rSWch.mjs → send--FORaIc4.mjs} +3 -3
  64. package/dist/sig/compound-proof-discovery.test.mjs +1 -1
  65. package/dist/sig/compound-proof-producer.test.mjs +1 -1
  66. package/dist/sig/compound-proof-verification.test.mjs +2 -2
  67. package/dist/sig/compound-proof.test.mjs +2 -2
  68. package/dist/sig/http.test.mjs +2 -2
  69. package/dist/sig/key.test.mjs +1 -1
  70. package/dist/sig/ld.test.mjs +2 -2
  71. package/dist/sig/mod.cjs +5 -6
  72. package/dist/sig/mod.d.cts +1 -1
  73. package/dist/sig/mod.d.ts +1 -1
  74. package/dist/sig/mod.js +2 -3
  75. package/dist/sig/owner.test.mjs +1 -1
  76. package/dist/sig/portable-collection.test.mjs +20 -431
  77. package/dist/sig/portable-key.test.mjs +5 -5
  78. package/dist/sig/proof.test.mjs +3 -3
  79. package/dist/{temporal-tAtwv6vX.mjs → temporal-CffY_XOJ.mjs} +1 -1
  80. package/dist/testing/kv.test.mjs +1 -1
  81. package/dist/testing/mod.d.mts +30 -4
  82. package/dist/testing/mod.mjs +2 -2
  83. package/dist/{testing-BWq1dCzx.mjs → testing-otQhu4aD.mjs} +1 -1
  84. package/dist/utils/docloader.test.mjs +81 -2
  85. package/dist/utils/kv-cache.test.mjs +1 -1
  86. package/dist/utils/mod.cjs +1 -1
  87. package/dist/utils/mod.js +1 -1
  88. package/package.json +6 -6
  89. package/dist/owner-BtoMCv6Z.cjs +0 -225
  90. package/dist/owner-Cb3ytrlq.js +0 -215
@@ -1,28 +1,29 @@
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-CCABdw7r.mjs";
5
- import { a as instrumentDocumentLoader, b as recordWebFingerHandle, c as recordCircuitBreakerStateChange, d as recordCollectionRequest, f as recordCollectionTotalItems, g as recordInboxActivity, h as recordFanoutRecipients, i as getRemoteHost, l as recordCollectionDispatchDuration, n as getDurationMs, o as isAbortError, r as getFederationMetrics, u as recordCollectionPageItems, v as recordOutboxActivity, x as registerQueueDepthGauge, y as recordOutboxEnqueue } from "./metrics-em_7lwhG.mjs";
4
+ import { n as version, t as name } from "./deno-Be9xoxps.mjs";
5
+ import { a as instrumentDocumentLoader, b as recordWebFingerHandle, c as recordCircuitBreakerStateChange, d as recordCollectionRequest, f as recordCollectionTotalItems, g as recordInboxActivity, h as recordFanoutRecipients, i as getRemoteHost, l as recordCollectionDispatchDuration, n as getDurationMs, o as isAbortError, r as getFederationMetrics, u as recordCollectionPageItems, v as recordOutboxActivity, x as registerQueueDepthGauge, y as recordOutboxEnqueue } from "./metrics-DDE9S63Q.mjs";
6
6
  import { t as formatAcceptSignature } from "./accept-CPVqki78.mjs";
7
7
  import { a as isCompatibleKeyId, c as isPortableUri, i as hasPortableActor, n as getGatewayKeyBase, r as getPortableDid, s as isPortableId, t as getCanonicalPortableId } from "./portable-key-id-T7lecIbt.mjs";
8
- import { c as validateCryptoKey, n as exportJwk, s as importJwk } from "./key-CkNxztNV.mjs";
8
+ import { c as validateCryptoKey, n as exportJwk, s as importJwk } from "./key-Cc1b6pW9.mjs";
9
9
  import { r as normalizeOutgoingActivityJsonLd } from "./outgoing-jsonld-4IJqPYos.mjs";
10
- import { _ as wrapContextLoaderForJsonLd, a as compactJsonLd, c as getNormalizationContextLoader, d as isClearlyMalformedContextReference, f as isInvalidUrlTypeError, l as hasSignature, m as verifyCompactJsonLd, p as signJsonLd, r as assertSafeJsonLd, s as detachSignature, t as InvalidContextReferenceError, u as hasSignatureLike } from "./ld-CnT0f1nU.mjs";
11
- import { i as signObject, l as verifyPortableObjectProofWithRoot, o as verifyObject, r as hasProofLike, s as verifyPortableObjectProof, t as InvalidPortableObjectIdError } from "./proof-xdPYGPaA.mjs";
12
- import { a as listRequestSignatures, c as selectRequestSignature, d as verifyRequest, f as verifyRequestDetailed, s as parseRfc9421SignatureInput } from "./http-BcLnr2do.mjs";
13
- import { t as getAuthenticatedDocumentLoader } from "./docloader-Bby5g2iu.mjs";
14
- import { n as kvCache } from "./kv-cache-iFaRIcIL.mjs";
10
+ import { _ as wrapContextLoaderForJsonLd, a as compactJsonLd, c as getNormalizationContextLoader, d as isClearlyMalformedContextReference, f as isInvalidUrlTypeError, l as hasSignature, m as verifyCompactJsonLd, p as signJsonLd, r as assertSafeJsonLd, s as detachSignature, t as InvalidContextReferenceError, u as hasSignatureLike } from "./ld-DQNTIrAe.mjs";
11
+ import { i as signObject, l as verifyPortableObjectProofWithRoot, o as verifyObject, r as hasProofLike, s as verifyPortableObjectProof, t as InvalidPortableObjectIdError } from "./proof-CW8k0R1G.mjs";
12
+ import { a as listRequestSignatures, c as selectRequestSignature, d as verifyRequest, f as verifyRequestDetailed, s as parseRfc9421SignatureInput } from "./http-BFeK9sBg.mjs";
13
+ import { t as getAuthenticatedDocumentLoader } from "./docloader-Dtuyb0ps.mjs";
14
+ import { n as kvCache } from "./kv-cache-tLKBfxHc.mjs";
15
15
  import { d as readBoundedText, l as BodyTooLargeError, t as getNodeInfo, u as MAX_BODY_SIZE } from "./client-DpnpgjyX.mjs";
16
16
  import { t as nodeInfoToJson } from "./types-DE_LV1JB.mjs";
17
- import { n as getKeyOwner, t as doesActorOwnKey } from "./owner-9LiHmOv1.mjs";
18
- import { n as extractInboxes, r as sendActivity, t as SendActivityError } from "./send-Bf8rSWch.mjs";
19
- import { n as FederationBuilderImpl, t as ACTOR_ALIAS_PREFIX } from "./builder-CZcBWrBd.mjs";
17
+ import { n as getKeyOwner, t as doesActorOwnKey } from "./owner-CCfdL83M.mjs";
18
+ import { t as verifyPortableObject } from "./portable-collection-WXaHkNqC.mjs";
19
+ import { n as extractInboxes, r as sendActivity, t as SendActivityError } from "./send--FORaIc4.mjs";
20
+ import { n as FederationBuilderImpl, t as ACTOR_ALIAS_PREFIX } from "./builder-B2bgGYbP.mjs";
20
21
  import { t as CircuitBreaker } from "./circuit-breaker-C5NqoLBJ.mjs";
21
22
  import { t as buildCollectionSynchronizationHeader } from "./collection-CnnP1UAv.mjs";
22
- import { a as verifyCompoundPortableObjectProofs, i as inspectCompoundPortableObjectApplicability, r as findUnsupportedCompoundProofShape, t as containsCompoundPortableObject } from "./compound-proof-CDuP9MIX.mjs";
23
+ import { a as verifyCompoundPortableObjectProofs, i as inspectCompoundPortableObjectApplicability, r as findUnsupportedCompoundProofShape, t as containsCompoundPortableObject } from "./compound-proof-SVlHSzV7.mjs";
23
24
  import { t as KvKeyCache } from "./keycache-BInaECGj.mjs";
24
25
  import { t as acceptsJsonLd } from "./negotiation-CCocWT_N.mjs";
25
- import { t as hasMalformedKnownTemporalLiteral } from "./temporal-tAtwv6vX.mjs";
26
+ import { t as hasMalformedKnownTemporalLiteral } from "./temporal-CffY_XOJ.mjs";
26
27
  import { t as createExponentialBackoffPolicy } from "./retry-zX5xw5e0.mjs";
27
28
  import { t as TaskCodec } from "./codec-C6rTrpIp.mjs";
28
29
  import { getLogger, withContext } from "@logtape/logtape";
@@ -1173,6 +1174,11 @@ async function handleObject(request, { values, context, objectDispatcher, author
1173
1174
  * dispatcher, or the actor dispatcher adapted to one. The object is served
1174
1175
  * only if its ID canonically matches the requested portable ID and it
1175
1176
  * satisfies the FEP-ef61 proof policy.
1177
+ *
1178
+ * A {@link Tombstone} is served with `410 Gone` if it has an Object Integrity
1179
+ * Proof made with a key of the DID in its ID. An unsigned tombstone cannot
1180
+ * be served as a portable object, so the response is the same as for
1181
+ * an object that this server does not store, i.e., `404 Not Found`.
1176
1182
  * @template TContextData The context data to pass to the context.
1177
1183
  * @param request The HTTP request.
1178
1184
  * @param parameters The parameters for handling the portable object.
@@ -1220,17 +1226,27 @@ async function handlePortableObject(request, { values, context, objectDispatcher
1220
1226
  logger.debug("The serialized object does not match the requested portable object {portableId}.", { portableId: canonicalId });
1221
1227
  return await onNotFound(request);
1222
1228
  }
1223
- if (!result.verified && result.reason.type !== "unsecuredCollection" && result.reason.type !== "unsupportedObjectType") {
1224
- logger.error("Refusing to serve the portable object {portableId}, as it does not satisfy the FEP-ef61 proof policy: {reason}. Portable actors, activities, and objects need an Object Integrity Proof made with a key of the DID in their ID.", {
1225
- portableId: canonicalId,
1226
- reason: result.reason.type
1227
- });
1228
- return portableObjectInternalServerError(request);
1229
+ const tombstone = object instanceof Tombstone;
1230
+ if (!result.verified) {
1231
+ if (tombstone && result.reason.type === "missingProof") {
1232
+ logger.debug("Not serving the tombstone of the portable object {portableId}, as it has no Object Integrity Proof; responding as if this server did not store the object.", { portableId: canonicalId });
1233
+ return await onNotFound(request);
1234
+ }
1235
+ if (tombstone || result.reason.type !== "unsecuredCollection" && result.reason.type !== "unsupportedObjectType") {
1236
+ logger.error("Refusing to serve the portable object {portableId}, as it does not satisfy the FEP-ef61 proof policy: {reason}. Portable actors, activities, objects, and tombstones need an Object Integrity Proof made with a key of the DID in their ID.", {
1237
+ portableId: canonicalId,
1238
+ reason: result.reason.type
1239
+ });
1240
+ return portableObjectInternalServerError(request);
1241
+ }
1229
1242
  }
1230
- return new Response(request.method === "HEAD" ? null : JSON.stringify(jsonLd), { headers: {
1231
- "Content-Type": PORTABLE_OBJECT_CONTENT_TYPE,
1232
- Vary: "Accept"
1233
- } });
1243
+ return new Response(request.method === "HEAD" ? null : JSON.stringify(jsonLd), {
1244
+ status: tombstone ? 410 : 200,
1245
+ headers: {
1246
+ "Content-Type": PORTABLE_OBJECT_CONTENT_TYPE,
1247
+ Vary: "Accept"
1248
+ }
1249
+ });
1234
1250
  }
1235
1251
  function isRequestedPortableObject(object, canonicalId) {
1236
1252
  return object.id != null && getCanonicalPortableId(object.id) === canonicalId;
@@ -2134,7 +2150,8 @@ async function handleInboxInternal(request, parameters, span) {
2134
2150
  documentLoader: ctx.documentLoader,
2135
2151
  keyCache,
2136
2152
  meterProvider,
2137
- tracerProvider
2153
+ tracerProvider,
2154
+ verifyPortableObject: ctx.verifyPortableObject
2138
2155
  });
2139
2156
  } catch (error) {
2140
2157
  if (error instanceof RangeError && await hasMalformedKnownTemporalLiteral(jsonWithoutSig, ctx.contextLoader)) return await respondInvalidActivity(error);
@@ -4333,11 +4350,16 @@ var FederationImpl = class extends FederationBuilderImpl {
4333
4350
  });
4334
4351
  return parsedActorIds;
4335
4352
  };
4336
- const parseActivity = () => Activity.fromJsonLd(message.activity, {
4337
- contextLoader: this.contextLoaderFactory(loaderOptions),
4338
- documentLoader: rsaKeyPair == null ? this.documentLoaderFactory(loaderOptions) : this.authenticatedDocumentLoaderFactory(rsaKeyPair, loaderOptions),
4339
- tracerProvider: this.tracerProvider
4340
- });
4353
+ const parseActivity = () => {
4354
+ const contextLoader = this.contextLoaderFactory(loaderOptions);
4355
+ const documentLoader = rsaKeyPair == null ? this.documentLoaderFactory(loaderOptions) : this.authenticatedDocumentLoaderFactory(rsaKeyPair, loaderOptions);
4356
+ return Activity.fromJsonLd(message.activity, {
4357
+ contextLoader,
4358
+ documentLoader,
4359
+ tracerProvider: this.tracerProvider,
4360
+ verifyPortableObject: createPortableObjectVerifier(documentLoader, contextLoader, this)
4361
+ });
4362
+ };
4341
4363
  const enqueueHeldOutboxMessage = async (delay, heldSince) => {
4342
4364
  const { outboxQueue } = this;
4343
4365
  if (outboxQueue == null) return;
@@ -5525,10 +5547,7 @@ var FederationImpl = class extends FederationBuilderImpl {
5525
5547
  return await handlePortableObject(request, {
5526
5548
  values: { identifier },
5527
5549
  context,
5528
- objectDispatcher: actorDispatcher == null ? void 0 : async (ctx) => {
5529
- const actor = await actorDispatcher(ctx, identifier);
5530
- return actor instanceof Tombstone ? null : actor;
5531
- },
5550
+ objectDispatcher: actorDispatcher == null ? void 0 : (ctx) => actorDispatcher(ctx, identifier),
5532
5551
  authorizePredicate: authorizePredicate == null ? void 0 : (ctx) => authorizePredicate(ctx, identifier),
5533
5552
  canonicalId: portable.canonicalId,
5534
5553
  onUnauthorized,
@@ -5816,12 +5835,28 @@ function getCollectionMetricRoute(routeName) {
5816
5835
  }
5817
5836
  }
5818
5837
  const FANOUT_THRESHOLD = 5;
5838
+ /**
5839
+ * Creates the FEP-ef61 portable object verifier that a context applies to
5840
+ * portable objects it dereferences: `verifyPortableObject()` with the given
5841
+ * loaders and the federation's tracer provider as defaults. Other options,
5842
+ * such as the document URL, gateways, and referrer, are passed through as
5843
+ * they are.
5844
+ */
5845
+ function createPortableObjectVerifier(documentLoader, contextLoader, federation) {
5846
+ return (document, options = {}) => verifyPortableObject(document, {
5847
+ ...options,
5848
+ documentLoader: options.documentLoader ?? documentLoader,
5849
+ contextLoader: options.contextLoader ?? contextLoader,
5850
+ tracerProvider: options.tracerProvider ?? federation.tracerProvider
5851
+ });
5852
+ }
5819
5853
  var ContextImpl = class ContextImpl {
5820
5854
  url;
5821
5855
  federation;
5822
5856
  data;
5823
5857
  documentLoader;
5824
5858
  contextLoader;
5859
+ verifyPortableObject;
5825
5860
  invokedFromActorKeyPairsDispatcher;
5826
5861
  #codec;
5827
5862
  constructor({ url, federation, data, documentLoader, contextLoader, invokedFromActorKeyPairsDispatcher }) {
@@ -5830,6 +5865,7 @@ var ContextImpl = class ContextImpl {
5830
5865
  this.data = data;
5831
5866
  this.documentLoader = documentLoader;
5832
5867
  this.contextLoader = contextLoader;
5868
+ this.verifyPortableObject = createPortableObjectVerifier(documentLoader, contextLoader, federation);
5833
5869
  this.invokedFromActorKeyPairsDispatcher = invokedFromActorKeyPairsDispatcher;
5834
5870
  }
5835
5871
  /**
@@ -6181,7 +6217,7 @@ var ContextImpl = class ContextImpl {
6181
6217
  userAgent: options.userAgent ?? this.federation.userAgent,
6182
6218
  tracerProvider: options.tracerProvider ?? this.tracerProvider,
6183
6219
  meterProvider: options.meterProvider ?? this.meterProvider,
6184
- verifyPortableObject: options.verifyPortableObject ?? verifyPortableObjectProof,
6220
+ verifyPortableObject: options.verifyPortableObject ?? this.verifyPortableObject,
6185
6221
  allowPrivateAddress: this.federation.allowPrivateAddress
6186
6222
  });
6187
6223
  }
@@ -6189,7 +6225,8 @@ var ContextImpl = class ContextImpl {
6189
6225
  return traverseCollection(collection, {
6190
6226
  ...options,
6191
6227
  documentLoader: options.documentLoader ?? this.documentLoader,
6192
- contextLoader: options.contextLoader ?? this.contextLoader
6228
+ contextLoader: options.contextLoader ?? this.contextLoader,
6229
+ verifyPortableObject: options.verifyPortableObject ?? this.verifyPortableObject
6193
6230
  });
6194
6231
  }
6195
6232
  lookupNodeInfo(url, options = {}) {
@@ -1,5 +1,5 @@
1
1
  import "temporal-polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as FederationImpl } from "./middleware-BpwKvOpU.mjs";
4
+ import { n as FederationImpl } from "./middleware-BdhvduR9.mjs";
5
5
  export { FederationImpl };
@@ -2,10 +2,10 @@ import { Temporal } from "temporal-polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
3
  import { t as __exportAll } from "./rolldown-runtime-BC-Eo5Mj.js";
4
4
  import { r as getDefaultActivityTransformers } from "./transformers-DAtXl_Kc.js";
5
- import { $ as recordCollectionTotalItems, A as isInvalidUrlTypeError, C as compactJsonLd, D as hasSignature, E as getNormalizationContextLoader, F as wrapContextLoaderForJsonLd, G as getFederationMetrics, H as validateCryptoKey, I as exportJwk, J as isAbortError, K as getRemoteHost, M as verifyCompactJsonLd, O as hasSignatureLike, Q as recordCollectionRequest, T as detachSignature, V as importJwk, W as getDurationMs, X as recordCollectionDispatchDuration, Y as recordCircuitBreakerStateChange, Z as recordCollectionPageItems, _ as verifyPortableObjectProofWithRoot, _t as isPortableId, at as recordWebFingerHandle, b as InvalidContextReferenceError, bt as name, ct as formatAcceptSignature, d as hasProofLike, f as signObject, ft as getCanonicalPortableId, g as verifyPortableObjectProofPolicy, gt as isCompatibleKeyId, h as verifyPortableObjectProof, ht as hasPortableActor, i as selectRequestSignature, it as recordOutboxEnqueue, j as signJsonLd, k as isClearlyMalformedContextReference, l as InvalidPortableObjectIdError, m as verifyObject, mt as getPortableDid, n as listRequestSignatures, nt as recordInboxActivity, o as verifyRequest, ot as registerQueueDepthGauge, p as verifyMapLocalProof, pt as getGatewayKeyBase, q as instrumentDocumentLoader, r as parseRfc9421SignatureInput, rt as recordOutboxActivity, s as verifyRequestDetailed, st as preloadedOnlyDocumentLoader, t as doubleKnock, tt as recordFanoutRecipients, vt as isPortableUri, x as assertSafeJsonLd, xt as version, y as normalizeOutgoingActivityJsonLd } from "./http-Ce6_Lf7k.js";
5
+ import { $ as recordCollectionTotalItems, A as isInvalidUrlTypeError, C as compactJsonLd, D as hasSignature, E as getNormalizationContextLoader, F as wrapContextLoaderForJsonLd, G as getFederationMetrics, H as validateCryptoKey, I as exportJwk, J as isAbortError, K as getRemoteHost, M as verifyCompactJsonLd, O as hasSignatureLike, Q as recordCollectionRequest, T as detachSignature, V as importJwk, W as getDurationMs, X as recordCollectionDispatchDuration, Y as recordCircuitBreakerStateChange, Z as recordCollectionPageItems, _ as verifyPortableObjectProofWithRoot, _t as isPortableId, at as recordWebFingerHandle, b as InvalidContextReferenceError, bt as name, ct as formatAcceptSignature, d as hasProofLike, f as signObject, ft as getCanonicalPortableId, g as verifyPortableObjectProofPolicy, gt as isCompatibleKeyId, h as verifyPortableObjectProof, ht as hasPortableActor, i as selectRequestSignature, it as recordOutboxEnqueue, j as signJsonLd, k as isClearlyMalformedContextReference, l as InvalidPortableObjectIdError, m as verifyObject, mt as getPortableDid, n as listRequestSignatures, nt as recordInboxActivity, o as verifyRequest, ot as registerQueueDepthGauge, p as verifyMapLocalProof, pt as getGatewayKeyBase, q as instrumentDocumentLoader, r as parseRfc9421SignatureInput, rt as recordOutboxActivity, s as verifyRequestDetailed, st as preloadedOnlyDocumentLoader, t as doubleKnock, tt as recordFanoutRecipients, vt as isPortableUri, x as assertSafeJsonLd, xt as version, y as normalizeOutgoingActivityJsonLd } from "./http-Rmbiu-5S.js";
6
6
  import { a as MAX_BODY_SIZE, i as BodyTooLargeError, n as getNodeInfo, o as readBoundedText, t as nodeInfoToJson } from "./types-C_cNlNVK.js";
7
- import { n as getKeyOwner, t as doesActorOwnKey } from "./owner-Cb3ytrlq.js";
8
- import { n as getAuthenticatedDocumentLoader, t as kvCache } from "./kv-cache-DwzXzchj.js";
7
+ import { n as doesActorOwnKey, r as getKeyOwner, t as verifyPortableObject } from "./portable-collection-DdXsKBg4.js";
8
+ import { n as getAuthenticatedDocumentLoader, t as kvCache } from "./kv-cache-BweDce2I.js";
9
9
  import { getLogger, withContext } from "@logtape/logtape";
10
10
  import { Router, RouterError, assertPath } from "@fedify/uri-template";
11
11
  import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage, Tombstone, getTypeId, lookupObject, traverseCollection } from "@fedify/vocab";
@@ -750,7 +750,7 @@ function warnMismatchedTombstoneId(context, cls, values, tombstone) {
750
750
  });
751
751
  return;
752
752
  }
753
- if (tombstone.id.protocol === "ap:" || tombstone.id.protocol === "ap+ef61:") return;
753
+ if (isPortableId(tombstone.id)) return;
754
754
  const expected = context.getObjectUri(cls, values);
755
755
  if (tombstone.id.href !== expected.href) logger.warn("Object dispatcher for {class} returned a tombstone with an id property {tombstoneId} that does not match the object URI {objectUri}. Set the property with Context.getObjectUri().", {
756
756
  class: cls.name,
@@ -3530,6 +3530,11 @@ async function handleObject(request, { values, context, objectDispatcher, author
3530
3530
  * dispatcher, or the actor dispatcher adapted to one. The object is served
3531
3531
  * only if its ID canonically matches the requested portable ID and it
3532
3532
  * satisfies the FEP-ef61 proof policy.
3533
+ *
3534
+ * A {@link Tombstone} is served with `410 Gone` if it has an Object Integrity
3535
+ * Proof made with a key of the DID in its ID. An unsigned tombstone cannot
3536
+ * be served as a portable object, so the response is the same as for
3537
+ * an object that this server does not store, i.e., `404 Not Found`.
3533
3538
  * @template TContextData The context data to pass to the context.
3534
3539
  * @param request The HTTP request.
3535
3540
  * @param parameters The parameters for handling the portable object.
@@ -3577,17 +3582,27 @@ async function handlePortableObject(request, { values, context, objectDispatcher
3577
3582
  logger.debug("The serialized object does not match the requested portable object {portableId}.", { portableId: canonicalId });
3578
3583
  return await onNotFound(request);
3579
3584
  }
3580
- if (!result.verified && result.reason.type !== "unsecuredCollection" && result.reason.type !== "unsupportedObjectType") {
3581
- logger.error("Refusing to serve the portable object {portableId}, as it does not satisfy the FEP-ef61 proof policy: {reason}. Portable actors, activities, and objects need an Object Integrity Proof made with a key of the DID in their ID.", {
3582
- portableId: canonicalId,
3583
- reason: result.reason.type
3584
- });
3585
- return portableObjectInternalServerError(request);
3585
+ const tombstone = object instanceof Tombstone;
3586
+ if (!result.verified) {
3587
+ if (tombstone && result.reason.type === "missingProof") {
3588
+ logger.debug("Not serving the tombstone of the portable object {portableId}, as it has no Object Integrity Proof; responding as if this server did not store the object.", { portableId: canonicalId });
3589
+ return await onNotFound(request);
3590
+ }
3591
+ if (tombstone || result.reason.type !== "unsecuredCollection" && result.reason.type !== "unsupportedObjectType") {
3592
+ logger.error("Refusing to serve the portable object {portableId}, as it does not satisfy the FEP-ef61 proof policy: {reason}. Portable actors, activities, objects, and tombstones need an Object Integrity Proof made with a key of the DID in their ID.", {
3593
+ portableId: canonicalId,
3594
+ reason: result.reason.type
3595
+ });
3596
+ return portableObjectInternalServerError(request);
3597
+ }
3586
3598
  }
3587
- return new Response(request.method === "HEAD" ? null : JSON.stringify(jsonLd), { headers: {
3588
- "Content-Type": PORTABLE_OBJECT_CONTENT_TYPE,
3589
- Vary: "Accept"
3590
- } });
3599
+ return new Response(request.method === "HEAD" ? null : JSON.stringify(jsonLd), {
3600
+ status: tombstone ? 410 : 200,
3601
+ headers: {
3602
+ "Content-Type": PORTABLE_OBJECT_CONTENT_TYPE,
3603
+ Vary: "Accept"
3604
+ }
3605
+ });
3591
3606
  }
3592
3607
  function isRequestedPortableObject(object, canonicalId) {
3593
3608
  return object.id != null && getCanonicalPortableId(object.id) === canonicalId;
@@ -4491,7 +4506,8 @@ async function handleInboxInternal(request, parameters, span) {
4491
4506
  documentLoader: ctx.documentLoader,
4492
4507
  keyCache,
4493
4508
  meterProvider,
4494
- tracerProvider
4509
+ tracerProvider,
4510
+ verifyPortableObject: ctx.verifyPortableObject
4495
4511
  });
4496
4512
  } catch (error) {
4497
4513
  if (error instanceof RangeError && await hasMalformedKnownTemporalLiteral(jsonWithoutSig, ctx.contextLoader)) return await respondInvalidActivity(error);
@@ -7099,11 +7115,16 @@ var FederationImpl = class extends FederationBuilderImpl {
7099
7115
  });
7100
7116
  return parsedActorIds;
7101
7117
  };
7102
- const parseActivity = () => Activity.fromJsonLd(message.activity, {
7103
- contextLoader: this.contextLoaderFactory(loaderOptions),
7104
- documentLoader: rsaKeyPair == null ? this.documentLoaderFactory(loaderOptions) : this.authenticatedDocumentLoaderFactory(rsaKeyPair, loaderOptions),
7105
- tracerProvider: this.tracerProvider
7106
- });
7118
+ const parseActivity = () => {
7119
+ const contextLoader = this.contextLoaderFactory(loaderOptions);
7120
+ const documentLoader = rsaKeyPair == null ? this.documentLoaderFactory(loaderOptions) : this.authenticatedDocumentLoaderFactory(rsaKeyPair, loaderOptions);
7121
+ return Activity.fromJsonLd(message.activity, {
7122
+ contextLoader,
7123
+ documentLoader,
7124
+ tracerProvider: this.tracerProvider,
7125
+ verifyPortableObject: createPortableObjectVerifier(documentLoader, contextLoader, this)
7126
+ });
7127
+ };
7107
7128
  const enqueueHeldOutboxMessage = async (delay, heldSince) => {
7108
7129
  const { outboxQueue } = this;
7109
7130
  if (outboxQueue == null) return;
@@ -8291,10 +8312,7 @@ var FederationImpl = class extends FederationBuilderImpl {
8291
8312
  return await handlePortableObject(request, {
8292
8313
  values: { identifier },
8293
8314
  context,
8294
- objectDispatcher: actorDispatcher == null ? void 0 : async (ctx) => {
8295
- const actor = await actorDispatcher(ctx, identifier);
8296
- return actor instanceof Tombstone ? null : actor;
8297
- },
8315
+ objectDispatcher: actorDispatcher == null ? void 0 : (ctx) => actorDispatcher(ctx, identifier),
8298
8316
  authorizePredicate: authorizePredicate == null ? void 0 : (ctx) => authorizePredicate(ctx, identifier),
8299
8317
  canonicalId: portable.canonicalId,
8300
8318
  onUnauthorized,
@@ -8582,12 +8600,28 @@ function getCollectionMetricRoute(routeName) {
8582
8600
  }
8583
8601
  }
8584
8602
  const FANOUT_THRESHOLD = 5;
8603
+ /**
8604
+ * Creates the FEP-ef61 portable object verifier that a context applies to
8605
+ * portable objects it dereferences: `verifyPortableObject()` with the given
8606
+ * loaders and the federation's tracer provider as defaults. Other options,
8607
+ * such as the document URL, gateways, and referrer, are passed through as
8608
+ * they are.
8609
+ */
8610
+ function createPortableObjectVerifier(documentLoader, contextLoader, federation) {
8611
+ return (document, options = {}) => verifyPortableObject(document, {
8612
+ ...options,
8613
+ documentLoader: options.documentLoader ?? documentLoader,
8614
+ contextLoader: options.contextLoader ?? contextLoader,
8615
+ tracerProvider: options.tracerProvider ?? federation.tracerProvider
8616
+ });
8617
+ }
8585
8618
  var ContextImpl = class ContextImpl {
8586
8619
  url;
8587
8620
  federation;
8588
8621
  data;
8589
8622
  documentLoader;
8590
8623
  contextLoader;
8624
+ verifyPortableObject;
8591
8625
  invokedFromActorKeyPairsDispatcher;
8592
8626
  #codec;
8593
8627
  constructor({ url, federation, data, documentLoader, contextLoader, invokedFromActorKeyPairsDispatcher }) {
@@ -8596,6 +8630,7 @@ var ContextImpl = class ContextImpl {
8596
8630
  this.data = data;
8597
8631
  this.documentLoader = documentLoader;
8598
8632
  this.contextLoader = contextLoader;
8633
+ this.verifyPortableObject = createPortableObjectVerifier(documentLoader, contextLoader, federation);
8599
8634
  this.invokedFromActorKeyPairsDispatcher = invokedFromActorKeyPairsDispatcher;
8600
8635
  }
8601
8636
  /**
@@ -8947,7 +8982,7 @@ var ContextImpl = class ContextImpl {
8947
8982
  userAgent: options.userAgent ?? this.federation.userAgent,
8948
8983
  tracerProvider: options.tracerProvider ?? this.tracerProvider,
8949
8984
  meterProvider: options.meterProvider ?? this.meterProvider,
8950
- verifyPortableObject: options.verifyPortableObject ?? verifyPortableObjectProof,
8985
+ verifyPortableObject: options.verifyPortableObject ?? this.verifyPortableObject,
8951
8986
  allowPrivateAddress: this.federation.allowPrivateAddress
8952
8987
  });
8953
8988
  }
@@ -8955,7 +8990,8 @@ var ContextImpl = class ContextImpl {
8955
8990
  return traverseCollection(collection, {
8956
8991
  ...options,
8957
8992
  documentLoader: options.documentLoader ?? this.documentLoader,
8958
- contextLoader: options.contextLoader ?? this.contextLoader
8993
+ contextLoader: options.contextLoader ?? this.contextLoader,
8994
+ verifyPortableObject: options.verifyPortableObject ?? this.verifyPortableObject
8959
8995
  });
8960
8996
  }
8961
8997
  lookupNodeInfo(url, options = {}) {
@@ -1,5 +1,5 @@
1
1
  /// <reference lib="esnext.temporal" />
2
- import { Gt as WebFingerLinksDispatcher, bt as ActorHandleMapper, d as RequestContext, vt as ActorAliasMapper, yt as ActorDispatcher } from "./context-SMNOiiY6.cjs";
2
+ import { Gt as WebFingerLinksDispatcher, bt as ActorHandleMapper, d as RequestContext, vt as ActorAliasMapper, yt as ActorDispatcher } from "./context-Bm6ldGvx.cjs";
3
3
  import { MeterProvider, Span, Tracer } from "@opentelemetry/api";
4
4
  import { RouterError, RouterOptions, RouterRouteResult } from "@fedify/uri-template";
5
5
 
@@ -1,7 +1,7 @@
1
1
  /// <reference lib="esnext.temporal" />
2
2
  import { S as KeyCache } from "./http-D76Py0M4.cjs";
3
3
  import { CryptographicKey, DataIntegrityProof, Multikey, Object as Object$1 } from "@fedify/vocab";
4
- import { DocumentLoader, PortableObjectVerifierOptions } from "@fedify/vocab-runtime";
4
+ import { DocumentLoader, PortableObjectVerifier, PortableObjectVerifierOptions } from "@fedify/vocab-runtime";
5
5
  import { MeterProvider, TracerProvider } from "@opentelemetry/api";
6
6
 
7
7
  //#region src/sig/ld.d.ts
@@ -376,7 +376,18 @@ declare function verifyPortableObjectProof(jsonLd: unknown, options?: VerifyPort
376
376
  * Options for {@link verifyObject}.
377
377
  * @since 0.10.0
378
378
  */
379
- interface VerifyObjectOptions extends VerifyProofOptions {}
379
+ interface VerifyObjectOptions extends VerifyProofOptions {
380
+ /**
381
+ * The default [FEP-ef61] portable object verifier for the property
382
+ * accessors of the returned object and the objects obtained from it, e.g.,
383
+ * `Context.verifyPortableObject`. It is not used to verify the given
384
+ * object itself.
385
+ *
386
+ * [FEP-ef61]: https://w3id.org/fep/ef61
387
+ * @since 2.4.0
388
+ */
389
+ verifyPortableObject?: PortableObjectVerifier;
390
+ }
380
391
  /**
381
392
  * Verifies the given object. It will verify all the proofs in the object,
382
393
  * and succeed only if all the proofs are valid and all attributions and
@@ -2,7 +2,7 @@
2
2
  import { S as KeyCache } from "./http-BrQgkJay.js";
3
3
  import { CryptographicKey, DataIntegrityProof, Multikey, Object as Object$1 } from "@fedify/vocab";
4
4
  import { MeterProvider, TracerProvider } from "@opentelemetry/api";
5
- import { DocumentLoader, PortableObjectVerifierOptions } from "@fedify/vocab-runtime";
5
+ import { DocumentLoader, PortableObjectVerifier, PortableObjectVerifierOptions } from "@fedify/vocab-runtime";
6
6
 
7
7
  //#region src/sig/ld.d.ts
8
8
  /**
@@ -376,7 +376,18 @@ declare function verifyPortableObjectProof(jsonLd: unknown, options?: VerifyPort
376
376
  * Options for {@link verifyObject}.
377
377
  * @since 0.10.0
378
378
  */
379
- interface VerifyObjectOptions extends VerifyProofOptions {}
379
+ interface VerifyObjectOptions extends VerifyProofOptions {
380
+ /**
381
+ * The default [FEP-ef61] portable object verifier for the property
382
+ * accessors of the returned object and the objects obtained from it, e.g.,
383
+ * `Context.verifyPortableObject`. It is not used to verify the given
384
+ * object itself.
385
+ *
386
+ * [FEP-ef61]: https://w3id.org/fep/ef61
387
+ * @since 2.4.0
388
+ */
389
+ verifyPortableObject?: PortableObjectVerifier;
390
+ }
380
391
  /**
381
392
  * Verifies the given object. It will verify all the proofs in the object,
382
393
  * and succeed only if all the proofs are valid and all attributions and
@@ -1,5 +1,5 @@
1
1
  /// <reference lib="esnext.temporal" />
2
- import { Gt as WebFingerLinksDispatcher, bt as ActorHandleMapper, d as RequestContext, vt as ActorAliasMapper, yt as ActorDispatcher } from "./context-tOiJfBoD.js";
2
+ import { Gt as WebFingerLinksDispatcher, bt as ActorHandleMapper, d as RequestContext, vt as ActorAliasMapper, yt as ActorDispatcher } from "./context-Ci5vuUr_.js";
3
3
  import { RouterError, RouterOptions, RouterRouteResult } from "@fedify/uri-template";
4
4
  import { MeterProvider, Span, Tracer } from "@opentelemetry/api";
5
5
 
package/dist/mod.cjs CHANGED
@@ -3,14 +3,14 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  require("./rolldown-runtime-Dmm3t92W.cjs");
4
4
  const require_transformers = require("./transformers-BalCrSsr.cjs");
5
5
  require("./compat/mod.cjs");
6
- const require_http = require("./http-B4mQvNcv.cjs");
7
- const require_federation = require("./federation-DYr384xz.cjs");
6
+ const require_http = require("./http-o8l4QeUY.cjs");
7
+ const require_federation = require("./federation-B6IHuS6n.cjs");
8
8
  const require_types = require("./types-Be2zbyeG.cjs");
9
- const require_owner = require("./owner-BtoMCv6Z.cjs");
10
- const require_kv_cache = require("./kv-cache-Dqp_E-1g.cjs");
9
+ const require_portable_collection = require("./portable-collection-DXogVs__.cjs");
10
+ const require_kv_cache = require("./kv-cache-BUkgZAcX.cjs");
11
11
  require("./nodeinfo/mod.cjs");
12
12
  require("./runtime/mod.cjs");
13
- const require_sig = require("./sig-Bj3fHnv0.cjs");
13
+ require("./sig/mod.cjs");
14
14
  require("./utils/mod.cjs");
15
15
  //#endregion
16
16
  exports.CircuitBreaker = require_federation.CircuitBreaker;
@@ -31,7 +31,7 @@ exports.createProof = require_http.createProof;
31
31
  exports.createSignature = require_http.createSignature;
32
32
  exports.detachSignature = require_http.detachSignature;
33
33
  exports.digest = require_federation.digest;
34
- exports.doesActorOwnKey = require_owner.doesActorOwnKey;
34
+ exports.doesActorOwnKey = require_portable_collection.doesActorOwnKey;
35
35
  exports.exportJwk = require_http.exportJwk;
36
36
  exports.fetchKey = require_http.fetchKey;
37
37
  exports.fetchKeyDetailed = require_http.fetchKeyDetailed;
@@ -40,7 +40,7 @@ exports.fulfillAcceptSignature = require_http.fulfillAcceptSignature;
40
40
  exports.generateCryptoKeyPair = require_http.generateCryptoKeyPair;
41
41
  exports.getAuthenticatedDocumentLoader = require_kv_cache.getAuthenticatedDocumentLoader;
42
42
  exports.getDefaultActivityTransformers = require_transformers.getDefaultActivityTransformers;
43
- exports.getKeyOwner = require_owner.getKeyOwner;
43
+ exports.getKeyOwner = require_portable_collection.getKeyOwner;
44
44
  exports.getNodeInfo = require_types.getNodeInfo;
45
45
  exports.handleWebFinger = require_federation.handleWebFinger;
46
46
  exports.hasProofLike = require_http.hasProofLike;
@@ -60,7 +60,7 @@ exports.signRequest = require_http.signRequest;
60
60
  exports.validateAcceptSignature = require_http.validateAcceptSignature;
61
61
  exports.verifyJsonLd = require_http.verifyJsonLd;
62
62
  exports.verifyObject = require_http.verifyObject;
63
- exports.verifyPortableObject = require_sig.verifyPortableObject;
63
+ exports.verifyPortableObject = require_portable_collection.verifyPortableObject;
64
64
  exports.verifyPortableObjectProof = require_http.verifyPortableObjectProof;
65
65
  exports.verifyProof = require_http.verifyProof;
66
66
  exports.verifyRequest = require_http.verifyRequest;
package/dist/mod.d.cts CHANGED
@@ -2,11 +2,11 @@
2
2
  import { a as InboundService, c as OutboundService, d as Software, f as Usage, i as parseNodeInfo, l as Protocol, n as ParseNodeInfoOptions, o as JsonValue, p as nodeInfoToJson, r as getNodeInfo, s as NodeInfo, t as GetNodeInfoOptions, u as Services } from "./client-D-XP_Ccb.cjs";
3
3
  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";
4
4
  import { i as getKeyOwner, n as GetKeyOwnerOptions, r as doesActorOwnKey, t as DoesActorOwnKeyOptions } from "./owner-BF0L9cMt.cjs";
5
- import { $ as InProcessMessageQueue, A as MediaUploaderSetters, At as HashlinkMediaRequest, B as createFederationBuilder, Bt as OutboxPermanentFailureHandler, C as FederationFetchOptions, Ct as CollectionCounter, D as IdempotencyStrategy, Dt as CustomCollectionCursor, E as IdempotencyKeyCallback, Et as CustomCollectionCounter, F as FederationKvPrefixes, Ft as ObjectAuthorizePredicate, G as TaskRegistry, Gt as WebFingerLinksDispatcher, H as TaskDefinitionOptions, Ht as SharedInboxKeyDispatcher, I as FederationOrigin, It as ObjectDispatcher, J as RetryPolicy, Jt as PageItems, K as CreateExponentialBackoffPolicyOptions, Kt as SendActivityError, L as FederationQueueOptions, Lt as OutboxErrorHandler, M as OutboxListenerSetters, Mt as InboxListener, N as PortableInboxForwardingOptions, Nt as MediaUploaderCallback, O as InboxChallengePolicy, Ot as CustomCollectionDispatcher, P as Rfc6570Expression, Pt as NodeInfoDispatcher, Q as respondWithObjectIfAcceptable, R as createFederation, Rt as OutboxListener, S as FederationBuilder, St as AuthorizePredicate, T as FederationStartQueueOptions, Tt as CollectionDispatcher, U as TaskEnqueueOptions, Ut as UnverifiedActivityHandler, V as TaskDefinition, Vt as PortableActorIdMapper, W as TaskHandler, Wt as UnverifiedActivityReason, X as RespondWithObjectOptions, Xt as digest, Y as createExponentialBackoffPolicy, Yt as buildCollectionSynchronizationHeader, Z as respondWithObject, Zt as ActivityTransformer, _ as ConstructorWithTypeId, _t as parseCircuitBreakerKvState, a as GetObjectOptions, at as ParallelMessageQueue, b as Federation, bt as ActorHandleMapper, c as OutboxContext, ct as CircuitBreakerBeforeSendDecision, d as RequestContext, dt as CircuitBreakerKvState, et as InProcessMessageQueueOptions, f as RouteActivityOptions, ft as CircuitBreakerOptions, g as CollectionCallbackSetters, gt as normalizeCircuitBreakerOptions, h as ActorCallbackSetters, ht as NormalizedCircuitBreakerOptions, i as GetActorOptions, it as MessageQueueListenOptions, j as ObjectCallbackSetters, jt as InboxErrorHandler, k as InboxListenerSetters, kt as HashlinkMediaDispatcher, l as ParseUriResult, lt as CircuitBreakerCreateOptions, m as SendActivityOptionsForCollection, mt as CircuitBreakerStateChange, n as Context, nt as MessageQueueDepth, o as GetSignedKeyOptions, ot as CircuitBreaker, p as SendActivityOptions, pt as CircuitBreakerState, q as RetryContext, qt as SenderKeyPair, r as ForwardActivityOptions, rt as MessageQueueEnqueueOptions, s as InboxContext, st as CircuitBreakerActivityDrop, t as ActorKeyPair, tt as MessageQueue, u as PortableRequest, ut as CircuitBreakerFailurePolicy, v as CustomCollectionCallbackSetters, vt as ActorAliasMapper, w as FederationOptions, wt as CollectionCursor, x as FederationBenchmarkOptions, xt as ActorKeyPairsDispatcher, y as Federatable, yt as ActorDispatcher, z as Message, zt as OutboxListenerErrorHandler } from "./context-SMNOiiY6.cjs";
5
+ import { $ as InProcessMessageQueue, A as MediaUploaderSetters, At as HashlinkMediaRequest, B as createFederationBuilder, Bt as OutboxPermanentFailureHandler, C as FederationFetchOptions, Ct as CollectionCounter, D as IdempotencyStrategy, Dt as CustomCollectionCursor, E as IdempotencyKeyCallback, Et as CustomCollectionCounter, F as FederationKvPrefixes, Ft as ObjectAuthorizePredicate, G as TaskRegistry, Gt as WebFingerLinksDispatcher, H as TaskDefinitionOptions, Ht as SharedInboxKeyDispatcher, I as FederationOrigin, It as ObjectDispatcher, J as RetryPolicy, Jt as PageItems, K as CreateExponentialBackoffPolicyOptions, Kt as SendActivityError, L as FederationQueueOptions, Lt as OutboxErrorHandler, M as OutboxListenerSetters, Mt as InboxListener, N as PortableInboxForwardingOptions, Nt as MediaUploaderCallback, O as InboxChallengePolicy, Ot as CustomCollectionDispatcher, P as Rfc6570Expression, Pt as NodeInfoDispatcher, Q as respondWithObjectIfAcceptable, R as createFederation, Rt as OutboxListener, S as FederationBuilder, St as AuthorizePredicate, T as FederationStartQueueOptions, Tt as CollectionDispatcher, U as TaskEnqueueOptions, Ut as UnverifiedActivityHandler, V as TaskDefinition, Vt as PortableActorIdMapper, W as TaskHandler, Wt as UnverifiedActivityReason, X as RespondWithObjectOptions, Xt as digest, Y as createExponentialBackoffPolicy, Yt as buildCollectionSynchronizationHeader, Z as respondWithObject, Zt as ActivityTransformer, _ as ConstructorWithTypeId, _t as parseCircuitBreakerKvState, a as GetObjectOptions, at as ParallelMessageQueue, b as Federation, bt as ActorHandleMapper, c as OutboxContext, ct as CircuitBreakerBeforeSendDecision, d as RequestContext, dt as CircuitBreakerKvState, et as InProcessMessageQueueOptions, f as RouteActivityOptions, ft as CircuitBreakerOptions, g as CollectionCallbackSetters, gt as normalizeCircuitBreakerOptions, h as ActorCallbackSetters, ht as NormalizedCircuitBreakerOptions, i as GetActorOptions, it as MessageQueueListenOptions, j as ObjectCallbackSetters, jt as InboxErrorHandler, k as InboxListenerSetters, kt as HashlinkMediaDispatcher, l as ParseUriResult, lt as CircuitBreakerCreateOptions, m as SendActivityOptionsForCollection, mt as CircuitBreakerStateChange, n as Context, nt as MessageQueueDepth, o as GetSignedKeyOptions, ot as CircuitBreaker, p as SendActivityOptions, pt as CircuitBreakerState, q as RetryContext, qt as SenderKeyPair, r as ForwardActivityOptions, rt as MessageQueueEnqueueOptions, s as InboxContext, st as CircuitBreakerActivityDrop, t as ActorKeyPair, tt as MessageQueue, u as PortableRequest, ut as CircuitBreakerFailurePolicy, v as CustomCollectionCallbackSetters, vt as ActorAliasMapper, w as FederationOptions, wt as CollectionCursor, x as FederationBenchmarkOptions, xt as ActorKeyPairsDispatcher, y as Federatable, yt as ActorDispatcher, z as Message, zt as OutboxListenerErrorHandler } from "./context-Bm6ldGvx.cjs";
6
6
  import { a as MemoryKvStore, i as KvStoreSetOptions, n as KvStore, r as KvStoreListEntry, t as KvKey } from "./kv-BhNbN8Ed.cjs";
7
7
  import { actorDehydrator, autoIdAssigner, getDefaultActivityTransformers } from "./compat/mod.cjs";
8
- import { a as RouterOptions, i as RouterError, n as handleWebFinger, o as RouterRouteResult, r as Router, t as WebFingerHandlerParameters } from "./mod-DnElMslb.cjs";
9
- 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-DMdGFMEl.cjs";
8
+ import { a as RouterOptions, i as RouterError, n as handleWebFinger, o as RouterRouteResult, r as Router, t as WebFingerHandlerParameters } from "./mod-AVir5nVI.cjs";
9
+ 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";
10
10
  import { n as getAuthenticatedDocumentLoader, t as kvCache } from "./mod-Cr79cQlc.cjs";
11
11
  export * from "@fedify/vocab-runtime";
12
12
 
package/dist/mod.d.ts CHANGED
@@ -2,11 +2,11 @@
2
2
  import { a as InboundService, c as OutboundService, d as Software, f as Usage, i as parseNodeInfo, l as Protocol, n as ParseNodeInfoOptions, o as JsonValue, p as nodeInfoToJson, r as getNodeInfo, s as NodeInfo, t as GetNodeInfoOptions, u as Services } from "./client-D-XP_Ccb.js";
3
3
  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";
4
4
  import { i as getKeyOwner, n as GetKeyOwnerOptions, r as doesActorOwnKey, t as DoesActorOwnKeyOptions } from "./owner-BSzr5-I8.js";
5
- import { $ as InProcessMessageQueue, A as MediaUploaderSetters, At as HashlinkMediaRequest, B as createFederationBuilder, Bt as OutboxPermanentFailureHandler, C as FederationFetchOptions, Ct as CollectionCounter, D as IdempotencyStrategy, Dt as CustomCollectionCursor, E as IdempotencyKeyCallback, Et as CustomCollectionCounter, F as FederationKvPrefixes, Ft as ObjectAuthorizePredicate, G as TaskRegistry, Gt as WebFingerLinksDispatcher, H as TaskDefinitionOptions, Ht as SharedInboxKeyDispatcher, I as FederationOrigin, It as ObjectDispatcher, J as RetryPolicy, Jt as PageItems, K as CreateExponentialBackoffPolicyOptions, Kt as SendActivityError, L as FederationQueueOptions, Lt as OutboxErrorHandler, M as OutboxListenerSetters, Mt as InboxListener, N as PortableInboxForwardingOptions, Nt as MediaUploaderCallback, O as InboxChallengePolicy, Ot as CustomCollectionDispatcher, P as Rfc6570Expression, Pt as NodeInfoDispatcher, Q as respondWithObjectIfAcceptable, R as createFederation, Rt as OutboxListener, S as FederationBuilder, St as AuthorizePredicate, T as FederationStartQueueOptions, Tt as CollectionDispatcher, U as TaskEnqueueOptions, Ut as UnverifiedActivityHandler, V as TaskDefinition, Vt as PortableActorIdMapper, W as TaskHandler, Wt as UnverifiedActivityReason, X as RespondWithObjectOptions, Xt as digest, Y as createExponentialBackoffPolicy, Yt as buildCollectionSynchronizationHeader, Z as respondWithObject, Zt as ActivityTransformer, _ as ConstructorWithTypeId, _t as parseCircuitBreakerKvState, a as GetObjectOptions, at as ParallelMessageQueue, b as Federation, bt as ActorHandleMapper, c as OutboxContext, ct as CircuitBreakerBeforeSendDecision, d as RequestContext, dt as CircuitBreakerKvState, et as InProcessMessageQueueOptions, f as RouteActivityOptions, ft as CircuitBreakerOptions, g as CollectionCallbackSetters, gt as normalizeCircuitBreakerOptions, h as ActorCallbackSetters, ht as NormalizedCircuitBreakerOptions, i as GetActorOptions, it as MessageQueueListenOptions, j as ObjectCallbackSetters, jt as InboxErrorHandler, k as InboxListenerSetters, kt as HashlinkMediaDispatcher, l as ParseUriResult, lt as CircuitBreakerCreateOptions, m as SendActivityOptionsForCollection, mt as CircuitBreakerStateChange, n as Context, nt as MessageQueueDepth, o as GetSignedKeyOptions, ot as CircuitBreaker, p as SendActivityOptions, pt as CircuitBreakerState, q as RetryContext, qt as SenderKeyPair, r as ForwardActivityOptions, rt as MessageQueueEnqueueOptions, s as InboxContext, st as CircuitBreakerActivityDrop, t as ActorKeyPair, tt as MessageQueue, u as PortableRequest, ut as CircuitBreakerFailurePolicy, v as CustomCollectionCallbackSetters, vt as ActorAliasMapper, w as FederationOptions, wt as CollectionCursor, x as FederationBenchmarkOptions, xt as ActorKeyPairsDispatcher, y as Federatable, yt as ActorDispatcher, z as Message, zt as OutboxListenerErrorHandler } from "./context-tOiJfBoD.js";
5
+ import { $ as InProcessMessageQueue, A as MediaUploaderSetters, At as HashlinkMediaRequest, B as createFederationBuilder, Bt as OutboxPermanentFailureHandler, C as FederationFetchOptions, Ct as CollectionCounter, D as IdempotencyStrategy, Dt as CustomCollectionCursor, E as IdempotencyKeyCallback, Et as CustomCollectionCounter, F as FederationKvPrefixes, Ft as ObjectAuthorizePredicate, G as TaskRegistry, Gt as WebFingerLinksDispatcher, H as TaskDefinitionOptions, Ht as SharedInboxKeyDispatcher, I as FederationOrigin, It as ObjectDispatcher, J as RetryPolicy, Jt as PageItems, K as CreateExponentialBackoffPolicyOptions, Kt as SendActivityError, L as FederationQueueOptions, Lt as OutboxErrorHandler, M as OutboxListenerSetters, Mt as InboxListener, N as PortableInboxForwardingOptions, Nt as MediaUploaderCallback, O as InboxChallengePolicy, Ot as CustomCollectionDispatcher, P as Rfc6570Expression, Pt as NodeInfoDispatcher, Q as respondWithObjectIfAcceptable, R as createFederation, Rt as OutboxListener, S as FederationBuilder, St as AuthorizePredicate, T as FederationStartQueueOptions, Tt as CollectionDispatcher, U as TaskEnqueueOptions, Ut as UnverifiedActivityHandler, V as TaskDefinition, Vt as PortableActorIdMapper, W as TaskHandler, Wt as UnverifiedActivityReason, X as RespondWithObjectOptions, Xt as digest, Y as createExponentialBackoffPolicy, Yt as buildCollectionSynchronizationHeader, Z as respondWithObject, Zt as ActivityTransformer, _ as ConstructorWithTypeId, _t as parseCircuitBreakerKvState, a as GetObjectOptions, at as ParallelMessageQueue, b as Federation, bt as ActorHandleMapper, c as OutboxContext, ct as CircuitBreakerBeforeSendDecision, d as RequestContext, dt as CircuitBreakerKvState, et as InProcessMessageQueueOptions, f as RouteActivityOptions, ft as CircuitBreakerOptions, g as CollectionCallbackSetters, gt as normalizeCircuitBreakerOptions, h as ActorCallbackSetters, ht as NormalizedCircuitBreakerOptions, i as GetActorOptions, it as MessageQueueListenOptions, j as ObjectCallbackSetters, jt as InboxErrorHandler, k as InboxListenerSetters, kt as HashlinkMediaDispatcher, l as ParseUriResult, lt as CircuitBreakerCreateOptions, m as SendActivityOptionsForCollection, mt as CircuitBreakerStateChange, n as Context, nt as MessageQueueDepth, o as GetSignedKeyOptions, ot as CircuitBreaker, p as SendActivityOptions, pt as CircuitBreakerState, q as RetryContext, qt as SenderKeyPair, r as ForwardActivityOptions, rt as MessageQueueEnqueueOptions, s as InboxContext, st as CircuitBreakerActivityDrop, t as ActorKeyPair, tt as MessageQueue, u as PortableRequest, ut as CircuitBreakerFailurePolicy, v as CustomCollectionCallbackSetters, vt as ActorAliasMapper, w as FederationOptions, wt as CollectionCursor, x as FederationBenchmarkOptions, xt as ActorKeyPairsDispatcher, y as Federatable, yt as ActorDispatcher, z as Message, zt as OutboxListenerErrorHandler } from "./context-Ci5vuUr_.js";
6
6
  import { a as MemoryKvStore, i as KvStoreSetOptions, n as KvStore, r as KvStoreListEntry, t as KvKey } from "./kv-BhNbN8Ed.js";
7
7
  import { actorDehydrator, autoIdAssigner, getDefaultActivityTransformers } from "./compat/mod.js";
8
- import { a as RouterOptions, i as RouterError, n as handleWebFinger, o as RouterRouteResult, r as Router, t as WebFingerHandlerParameters } from "./mod-COWgSo2v.js";
9
- 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-CTh7ijx5.js";
8
+ import { a as RouterOptions, i as RouterError, n as handleWebFinger, o as RouterRouteResult, r as Router, t as WebFingerHandlerParameters } from "./mod-eVOUPbQE.js";
9
+ 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";
10
10
  import { n as getAuthenticatedDocumentLoader, t as kvCache } from "./mod-Cwdt_CWU.js";
11
11
  export * from "@fedify/vocab-runtime";
12
12
 
package/dist/mod.js CHANGED
@@ -3,15 +3,15 @@ import { URLPattern } from "urlpattern-polyfill";
3
3
  import "./rolldown-runtime-BC-Eo5Mj.js";
4
4
  import { n as autoIdAssigner, r as getDefaultActivityTransformers, t as actorDehydrator } from "./transformers-DAtXl_Kc.js";
5
5
  import "./compat/mod.js";
6
- 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-Ce6_Lf7k.js";
7
- import { a as respondWithObjectIfAcceptable, c as digest, d as parseCircuitBreakerKvState, f as createFederationBuilder, i as respondWithObject, l as CircuitBreaker, n as handleWebFinger, o as SendActivityError, r as createExponentialBackoffPolicy, s as buildCollectionSynchronizationHeader, t as createFederation, u as normalizeCircuitBreakerOptions } from "./middleware-DhIBngkj.js";
6
+ 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";
7
+ import { a as respondWithObjectIfAcceptable, c as digest, d as parseCircuitBreakerKvState, f as createFederationBuilder, i as respondWithObject, l as CircuitBreaker, n as handleWebFinger, o as SendActivityError, r as createExponentialBackoffPolicy, s as buildCollectionSynchronizationHeader, t as createFederation, u as normalizeCircuitBreakerOptions } from "./middleware-K9aLnf57.js";
8
8
  import { n as getNodeInfo, r as parseNodeInfo, t as nodeInfoToJson } from "./types-C_cNlNVK.js";
9
- import { n as getKeyOwner, t as doesActorOwnKey } from "./owner-Cb3ytrlq.js";
10
- import { n as getAuthenticatedDocumentLoader, t as kvCache } from "./kv-cache-DwzXzchj.js";
9
+ import { n as doesActorOwnKey, r as getKeyOwner, t as verifyPortableObject } from "./portable-collection-DdXsKBg4.js";
10
+ import { n as getAuthenticatedDocumentLoader, t as kvCache } from "./kv-cache-BweDce2I.js";
11
11
  import { InProcessMessageQueue, MemoryKvStore, ParallelMessageQueue, Router, RouterError } from "./federation/mod.js";
12
12
  import "./nodeinfo/mod.js";
13
13
  import "./runtime/mod.js";
14
- import { t as verifyPortableObject } from "./sig-DN9pOglI.js";
14
+ import "./sig/mod.js";
15
15
  import "./utils/mod.js";
16
16
  export * from "@fedify/vocab-runtime";
17
17
  //#endregion
@@ -1,11 +1,11 @@
1
1
  import "temporal-polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { r as createRequestContext } from "../context-CoNRxGYp.mjs";
4
+ import { r as createRequestContext } from "../context-DfSVPcJ8.mjs";
5
5
  import { t as MemoryKvStore } from "../kv-DCHkaJ9-.mjs";
6
6
  import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
7
7
  import "../std__assert-DvMDRPes.mjs";
8
- import { C as handleNodeInfo, o as createFederation, w as handleNodeInfoJrd } from "../middleware-BpwKvOpU.mjs";
8
+ import { C as handleNodeInfo, o as createFederation, w as handleNodeInfoJrd } from "../middleware-BdhvduR9.mjs";
9
9
  import { test } from "@fedify/fixture";
10
10
  //#region src/nodeinfo/handler.test.ts
11
11
  test("handleNodeInfo()", async () => {
@@ -1,10 +1,10 @@
1
1
  import "temporal-polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as version, t as name } from "./deno-CCABdw7r.mjs";
4
+ import { n as version, t as name } from "./deno-Be9xoxps.mjs";
5
5
  import { a as isCompatibleKeyId, l as isSamePublicKey$1, s as isPortableId, t as getCanonicalPortableId } from "./portable-key-id-T7lecIbt.mjs";
6
- import { l as verifyKeyOwnership, n as exportJwk, r as fetchActorDocument } from "./key-CkNxztNV.mjs";
7
- import { t as fetchPortableGatewayKey } from "./portable-key-9ck61lI0.mjs";
6
+ import { l as verifyKeyOwnership, n as exportJwk, r as fetchActorDocument } from "./key-Cc1b6pW9.mjs";
7
+ import { t as fetchPortableGatewayKey } from "./portable-key-C-fPq_Yf.mjs";
8
8
  import { getLogger } from "@logtape/logtape";
9
9
  import { CryptographicKey, Object as Object$1, isActor } from "@fedify/vocab";
10
10
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";