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

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 (69) hide show
  1. package/dist/{builder-CZcBWrBd.mjs → builder-BCXywsZF.mjs} +3 -3
  2. package/dist/compat/transformers.test.mjs +1 -1
  3. package/dist/{compound-proof-CDuP9MIX.mjs → compound-proof-Fxd45Oy5.mjs} +2 -2
  4. package/dist/{deno-CCABdw7r.mjs → deno-BZrnW0Qz.mjs} +1 -1
  5. package/dist/{docloader-Bby5g2iu.mjs → docloader-3BHaS20Z.mjs} +2 -2
  6. package/dist/federation/builder.test.mjs +1 -1
  7. package/dist/federation/compound-fanout.test.mjs +3 -3
  8. package/dist/federation/handler-compound-proof.test.mjs +3 -3
  9. package/dist/federation/handler.test.mjs +5 -5
  10. package/dist/federation/hashlink-media.test.mjs +2 -2
  11. package/dist/federation/idempotency.test.mjs +2 -2
  12. package/dist/federation/metrics.test.mjs +1 -1
  13. package/dist/federation/middleware.test.mjs +7 -7
  14. package/dist/federation/mod.cjs +1 -1
  15. package/dist/federation/mod.js +1 -1
  16. package/dist/federation/outgoing-proof.test.mjs +5 -5
  17. package/dist/federation/portable-actor.test.mjs +52 -5
  18. package/dist/federation/portable-gateway-keys.test.mjs +3 -3
  19. package/dist/federation/portable-inbox.test.mjs +4 -4
  20. package/dist/federation/portable.test.mjs +127 -30
  21. package/dist/federation/send.test.mjs +3 -3
  22. package/dist/federation/tasks/enqueue.test.mjs +1 -1
  23. package/dist/federation/tasks/tasks.test.mjs +2 -2
  24. package/dist/federation/temporal.test.mjs +1 -1
  25. package/dist/federation/webfinger.test.mjs +1 -1
  26. package/dist/{federation-DYr384xz.cjs → federation-Ml6NrgRV.cjs} +30 -18
  27. package/dist/{http-B4mQvNcv.cjs → http-4bmgw-mA.cjs} +1 -1
  28. package/dist/{http-BcLnr2do.mjs → http-B9BQDNIy.mjs} +4 -4
  29. package/dist/{http-Ce6_Lf7k.js → http-BETASGl0.js} +1 -1
  30. package/dist/{key-CkNxztNV.mjs → key-PyYvun0F.mjs} +2 -2
  31. package/dist/{kv-cache-DwzXzchj.js → kv-cache-C4mv2ZFQ.js} +1 -1
  32. package/dist/{kv-cache-iFaRIcIL.mjs → kv-cache-CPqUxRL3.mjs} +1 -1
  33. package/dist/{kv-cache-Dqp_E-1g.cjs → kv-cache-D2Bz6t_c.cjs} +1 -1
  34. package/dist/{ld-CnT0f1nU.mjs → ld-u4JOD4iO.mjs} +3 -3
  35. package/dist/{metrics-em_7lwhG.mjs → metrics-DCLoLvLz.mjs} +1 -1
  36. package/dist/{middleware-U9IuzvDO.mjs → middleware-B7bmtONC.mjs} +1 -1
  37. package/dist/{middleware-BpwKvOpU.mjs → middleware-CgOqRkK-.mjs} +47 -35
  38. package/dist/{middleware-DhIBngkj.js → middleware-DWlAGlyP.js} +38 -26
  39. package/dist/mod.cjs +5 -5
  40. package/dist/mod.js +5 -5
  41. package/dist/nodeinfo/handler.test.mjs +1 -1
  42. package/dist/{owner-9LiHmOv1.mjs → owner-CPFM-sqo.mjs} +3 -3
  43. package/dist/{owner-BtoMCv6Z.cjs → owner-DkA0Lz7v.cjs} +1 -1
  44. package/dist/{owner-Cb3ytrlq.js → owner-wNinn7RK.js} +1 -1
  45. package/dist/{portable-key-9ck61lI0.mjs → portable-key-DyylakVV.mjs} +1 -1
  46. package/dist/{proof-xdPYGPaA.mjs → proof-BCOg7Njv.mjs} +4 -4
  47. package/dist/{send-Bf8rSWch.mjs → send-C8eOPat3.mjs} +3 -3
  48. package/dist/sig/compound-proof-discovery.test.mjs +1 -1
  49. package/dist/sig/compound-proof-producer.test.mjs +1 -1
  50. package/dist/sig/compound-proof-verification.test.mjs +2 -2
  51. package/dist/sig/compound-proof.test.mjs +2 -2
  52. package/dist/sig/http.test.mjs +2 -2
  53. package/dist/sig/key.test.mjs +1 -1
  54. package/dist/sig/ld.test.mjs +2 -2
  55. package/dist/sig/mod.cjs +3 -3
  56. package/dist/sig/mod.js +3 -3
  57. package/dist/sig/owner.test.mjs +1 -1
  58. package/dist/sig/portable-collection.test.mjs +2 -2
  59. package/dist/sig/portable-key.test.mjs +5 -5
  60. package/dist/sig/proof.test.mjs +3 -3
  61. package/dist/{sig-DN9pOglI.js → sig-C1xOA4ml.js} +2 -2
  62. package/dist/{sig-Bj3fHnv0.cjs → sig-Cb9VSeiF.cjs} +2 -2
  63. package/dist/{temporal-tAtwv6vX.mjs → temporal-vjHOhBpy.mjs} +1 -1
  64. package/dist/testing/kv.test.mjs +1 -1
  65. package/dist/utils/docloader.test.mjs +2 -2
  66. package/dist/utils/kv-cache.test.mjs +1 -1
  67. package/dist/utils/mod.cjs +1 -1
  68. package/dist/utils/mod.js +1 -1
  69. package/package.json +7 -7
@@ -6,7 +6,7 @@ import { t as MemoryKvStore } from "../kv-DCHkaJ9-.mjs";
6
6
  import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
7
7
  import { t as assertNotEquals } from "../assert_not_equals-CpPK2t89.mjs";
8
8
  import "../std__assert-DvMDRPes.mjs";
9
- import { o as createFederation, s as handleWebFinger } from "../middleware-BpwKvOpU.mjs";
9
+ import { o as createFederation, s as handleWebFinger } from "../middleware-CgOqRkK-.mjs";
10
10
  import { Image, Link, Person, Tombstone } from "@fedify/vocab";
11
11
  import { createTestMeterProvider, test } from "@fedify/fixture";
12
12
  import { parseIri } from "@fedify/vocab-runtime";
@@ -1,10 +1,10 @@
1
1
  const { URLPattern } = require("urlpattern-polyfill");
2
2
  const require_rolldown_runtime = require("./rolldown-runtime-Dmm3t92W.cjs");
3
3
  const require_transformers = require("./transformers-BalCrSsr.cjs");
4
- const require_http = require("./http-B4mQvNcv.cjs");
4
+ const require_http = require("./http-4bmgw-mA.cjs");
5
5
  const require_types = require("./types-Be2zbyeG.cjs");
6
- const require_owner = require("./owner-BtoMCv6Z.cjs");
7
- const require_kv_cache = require("./kv-cache-Dqp_E-1g.cjs");
6
+ const require_owner = require("./owner-DkA0Lz7v.cjs");
7
+ const require_kv_cache = require("./kv-cache-D2Bz6t_c.cjs");
8
8
  let _logtape_logtape = require("@logtape/logtape");
9
9
  let _fedify_uri_template = require("@fedify/uri-template");
10
10
  let _fedify_vocab = require("@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 (require_http.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,
@@ -3536,6 +3536,11 @@ async function handleObject(request, { values, context, objectDispatcher, author
3536
3536
  * dispatcher, or the actor dispatcher adapted to one. The object is served
3537
3537
  * only if its ID canonically matches the requested portable ID and it
3538
3538
  * satisfies the FEP-ef61 proof policy.
3539
+ *
3540
+ * A {@link Tombstone} is served with `410 Gone` if it has an Object Integrity
3541
+ * Proof made with a key of the DID in its ID. An unsigned tombstone cannot
3542
+ * be served as a portable object, so the response is the same as for
3543
+ * an object that this server does not store, i.e., `404 Not Found`.
3539
3544
  * @template TContextData The context data to pass to the context.
3540
3545
  * @param request The HTTP request.
3541
3546
  * @param parameters The parameters for handling the portable object.
@@ -3583,17 +3588,27 @@ async function handlePortableObject(request, { values, context, objectDispatcher
3583
3588
  logger.debug("The serialized object does not match the requested portable object {portableId}.", { portableId: canonicalId });
3584
3589
  return await onNotFound(request);
3585
3590
  }
3586
- if (!result.verified && result.reason.type !== "unsecuredCollection" && result.reason.type !== "unsupportedObjectType") {
3587
- 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.", {
3588
- portableId: canonicalId,
3589
- reason: result.reason.type
3590
- });
3591
- return portableObjectInternalServerError(request);
3591
+ const tombstone = object instanceof _fedify_vocab.Tombstone;
3592
+ if (!result.verified) {
3593
+ if (tombstone && result.reason.type === "missingProof") {
3594
+ 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 });
3595
+ return await onNotFound(request);
3596
+ }
3597
+ if (tombstone || result.reason.type !== "unsecuredCollection" && result.reason.type !== "unsupportedObjectType") {
3598
+ 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.", {
3599
+ portableId: canonicalId,
3600
+ reason: result.reason.type
3601
+ });
3602
+ return portableObjectInternalServerError(request);
3603
+ }
3592
3604
  }
3593
- return new Response(request.method === "HEAD" ? null : JSON.stringify(jsonLd), { headers: {
3594
- "Content-Type": PORTABLE_OBJECT_CONTENT_TYPE,
3595
- Vary: "Accept"
3596
- } });
3605
+ return new Response(request.method === "HEAD" ? null : JSON.stringify(jsonLd), {
3606
+ status: tombstone ? 410 : 200,
3607
+ headers: {
3608
+ "Content-Type": PORTABLE_OBJECT_CONTENT_TYPE,
3609
+ Vary: "Accept"
3610
+ }
3611
+ });
3597
3612
  }
3598
3613
  function isRequestedPortableObject(object, canonicalId) {
3599
3614
  return object.id != null && require_http.getCanonicalPortableId(object.id) === canonicalId;
@@ -8388,10 +8403,7 @@ var FederationImpl = class extends FederationBuilderImpl {
8388
8403
  return await handlePortableObject(request, {
8389
8404
  values: { identifier },
8390
8405
  context,
8391
- objectDispatcher: actorDispatcher == null ? void 0 : async (ctx) => {
8392
- const actor = await actorDispatcher(ctx, identifier);
8393
- return actor instanceof _fedify_vocab.Tombstone ? null : actor;
8394
- },
8406
+ objectDispatcher: actorDispatcher == null ? void 0 : (ctx) => actorDispatcher(ctx, identifier),
8395
8407
  authorizePredicate: authorizePredicate == null ? void 0 : (ctx) => authorizePredicate(ctx, identifier),
8396
8408
  canonicalId: portable.canonicalId,
8397
8409
  onUnauthorized,
@@ -16,7 +16,7 @@ json_canon = require_rolldown_runtime.__toESM(json_canon, 1);
16
16
  let _opentelemetry_semantic_conventions = require("@opentelemetry/semantic-conventions");
17
17
  //#region deno.json
18
18
  var name = "@fedify/fedify";
19
- var version = "2.4.0-dev.2115+e2feaf2b";
19
+ var version = "2.4.0-dev.2122+bdc0ce8d";
20
20
  //#endregion
21
21
  //#region src/sig/portable-key-id.ts
22
22
  const COMPATIBLE_KEY_ID_PATH_PATTERN = /^\/\.well-known\/apgateway\/did(?::|%3A)/i;
@@ -1,11 +1,11 @@
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 { n as getDurationMs, r as getFederationMetrics, s as measureSignatureKeyFetch } from "./metrics-em_7lwhG.mjs";
4
+ import { n as version, t as name } from "./deno-BZrnW0Qz.mjs";
5
+ import { n as getDurationMs, r as getFederationMetrics, s as measureSignatureKeyFetch } from "./metrics-DCLoLvLz.mjs";
6
6
  import { i as validateAcceptSignature, n as fulfillAcceptSignature, r as parseAcceptSignature } from "./accept-CPVqki78.mjs";
7
- import { a as fetchKeyDetailed, c as validateCryptoKey, t as bypassKeyCacheReads } from "./key-CkNxztNV.mjs";
8
- import { n as verifyPortableGatewayKeyDocument } from "./portable-key-9ck61lI0.mjs";
7
+ import { a as fetchKeyDetailed, c as validateCryptoKey, t as bypassKeyCacheReads } from "./key-PyYvun0F.mjs";
8
+ import { n as verifyPortableGatewayKeyDocument } from "./portable-key-DyylakVV.mjs";
9
9
  import { getLogger } from "@logtape/logtape";
10
10
  import { CryptographicKey } from "@fedify/vocab";
11
11
  import { SpanStatusCode, trace } from "@opentelemetry/api";
@@ -14,7 +14,7 @@ import serialize from "json-canon";
14
14
  import { ATTR_HTTP_REQUEST_HEADER, ATTR_HTTP_REQUEST_METHOD, ATTR_URL_FULL } from "@opentelemetry/semantic-conventions";
15
15
  //#region deno.json
16
16
  var name = "@fedify/fedify";
17
- var version = "2.4.0-dev.2115+e2feaf2b";
17
+ var version = "2.4.0-dev.2122+bdc0ce8d";
18
18
  //#endregion
19
19
  //#region src/sig/portable-key-id.ts
20
20
  const COMPATIBLE_KEY_ID_PATH_PATTERN = /^\/\.well-known\/apgateway\/did(?::|%3A)/i;
@@ -1,8 +1,8 @@
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";
5
- import { _ as recordKeyLookup, n as getDurationMs, t as classifyFetchError } from "./metrics-em_7lwhG.mjs";
4
+ import { n as version, t as name } from "./deno-BZrnW0Qz.mjs";
5
+ import { _ as recordKeyLookup, n as getDurationMs, t as classifyFetchError } from "./metrics-DCLoLvLz.mjs";
6
6
  import { a as isCompatibleKeyId, o as isPortableActorDocument, s as isPortableId } from "./portable-key-id-T7lecIbt.mjs";
7
7
  import { getLogger } from "@logtape/logtape";
8
8
  import { CryptographicKey, Multikey, Object as Object$1, isActor } from "@fedify/vocab";
@@ -1,6 +1,6 @@
1
1
  import { Temporal } from "temporal-polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import { H as validateCryptoKey, et as recordDocumentCache, t as doubleKnock } from "./http-Ce6_Lf7k.js";
3
+ import { H as validateCryptoKey, et as recordDocumentCache, t as doubleKnock } from "./http-BETASGl0.js";
4
4
  import { getLogger } from "@logtape/logtape";
5
5
  import { UrlError, createActivityPubRequest, getRemoteDocument, logRequest, preloadedContexts, validatePublicUrl } from "@fedify/vocab-runtime";
6
6
  import { curry } from "es-toolkit";
@@ -1,7 +1,7 @@
1
1
  import { Temporal } from "temporal-polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { p as recordDocumentCache } from "./metrics-em_7lwhG.mjs";
4
+ import { p as recordDocumentCache } from "./metrics-DCLoLvLz.mjs";
5
5
  import { getLogger } from "@logtape/logtape";
6
6
  import { preloadedContexts } from "@fedify/vocab-runtime";
7
7
  //#region src/utils/kv-cache.ts
@@ -1,5 +1,5 @@
1
1
  const { URLPattern } = require("urlpattern-polyfill");
2
- const require_http = require("./http-B4mQvNcv.cjs");
2
+ const require_http = require("./http-4bmgw-mA.cjs");
3
3
  let _logtape_logtape = require("@logtape/logtape");
4
4
  let _fedify_vocab_runtime = require("@fedify/vocab-runtime");
5
5
  let es_toolkit = require("es-toolkit");
@@ -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-CCABdw7r.mjs";
5
- import { n as getDurationMs, r as getFederationMetrics, s as measureSignatureKeyFetch } from "./metrics-em_7lwhG.mjs";
6
- import { c as validateCryptoKey, i as fetchKey, t as bypassKeyCacheReads } from "./key-CkNxztNV.mjs";
4
+ import { n as version, t as name } from "./deno-BZrnW0Qz.mjs";
5
+ import { n as getDurationMs, r as getFederationMetrics, s as measureSignatureKeyFetch } from "./metrics-DCLoLvLz.mjs";
6
+ import { c as validateCryptoKey, i as fetchKey, t as bypassKeyCacheReads } from "./key-PyYvun0F.mjs";
7
7
  import { getLogger } from "@logtape/logtape";
8
8
  import { Activity, CryptographicKey, Object as Object$1, getTypeId } from "@fedify/vocab";
9
9
  import { SpanStatusCode, trace } from "@opentelemetry/api";
@@ -1,7 +1,7 @@
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-BZrnW0Qz.mjs";
5
5
  import { metrics } from "@opentelemetry/api";
6
6
  import { FetchError } from "@fedify/vocab-runtime";
7
7
  //#region src/federation/metrics.ts
@@ -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-CgOqRkK-.mjs";
5
5
  export { FederationImpl };
@@ -1,28 +1,28 @@
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-BZrnW0Qz.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-DCLoLvLz.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-PyYvun0F.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-u4JOD4iO.mjs";
11
+ import { i as signObject, l as verifyPortableObjectProofWithRoot, o as verifyObject, r as hasProofLike, s as verifyPortableObjectProof, t as InvalidPortableObjectIdError } from "./proof-BCOg7Njv.mjs";
12
+ import { a as listRequestSignatures, c as selectRequestSignature, d as verifyRequest, f as verifyRequestDetailed, s as parseRfc9421SignatureInput } from "./http-B9BQDNIy.mjs";
13
+ import { t as getAuthenticatedDocumentLoader } from "./docloader-3BHaS20Z.mjs";
14
+ import { n as kvCache } from "./kv-cache-CPqUxRL3.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-CPFM-sqo.mjs";
18
+ import { n as extractInboxes, r as sendActivity, t as SendActivityError } from "./send-C8eOPat3.mjs";
19
+ import { n as FederationBuilderImpl, t as ACTOR_ALIAS_PREFIX } from "./builder-BCXywsZF.mjs";
20
20
  import { t as CircuitBreaker } from "./circuit-breaker-C5NqoLBJ.mjs";
21
21
  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";
22
+ import { a as verifyCompoundPortableObjectProofs, i as inspectCompoundPortableObjectApplicability, r as findUnsupportedCompoundProofShape, t as containsCompoundPortableObject } from "./compound-proof-Fxd45Oy5.mjs";
23
23
  import { t as KvKeyCache } from "./keycache-BInaECGj.mjs";
24
24
  import { t as acceptsJsonLd } from "./negotiation-CCocWT_N.mjs";
25
- import { t as hasMalformedKnownTemporalLiteral } from "./temporal-tAtwv6vX.mjs";
25
+ import { t as hasMalformedKnownTemporalLiteral } from "./temporal-vjHOhBpy.mjs";
26
26
  import { t as createExponentialBackoffPolicy } from "./retry-zX5xw5e0.mjs";
27
27
  import { t as TaskCodec } from "./codec-C6rTrpIp.mjs";
28
28
  import { getLogger, withContext } from "@logtape/logtape";
@@ -1173,6 +1173,11 @@ async function handleObject(request, { values, context, objectDispatcher, author
1173
1173
  * dispatcher, or the actor dispatcher adapted to one. The object is served
1174
1174
  * only if its ID canonically matches the requested portable ID and it
1175
1175
  * satisfies the FEP-ef61 proof policy.
1176
+ *
1177
+ * A {@link Tombstone} is served with `410 Gone` if it has an Object Integrity
1178
+ * Proof made with a key of the DID in its ID. An unsigned tombstone cannot
1179
+ * be served as a portable object, so the response is the same as for
1180
+ * an object that this server does not store, i.e., `404 Not Found`.
1176
1181
  * @template TContextData The context data to pass to the context.
1177
1182
  * @param request The HTTP request.
1178
1183
  * @param parameters The parameters for handling the portable object.
@@ -1220,17 +1225,27 @@ async function handlePortableObject(request, { values, context, objectDispatcher
1220
1225
  logger.debug("The serialized object does not match the requested portable object {portableId}.", { portableId: canonicalId });
1221
1226
  return await onNotFound(request);
1222
1227
  }
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);
1228
+ const tombstone = object instanceof Tombstone;
1229
+ if (!result.verified) {
1230
+ if (tombstone && result.reason.type === "missingProof") {
1231
+ 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 });
1232
+ return await onNotFound(request);
1233
+ }
1234
+ if (tombstone || result.reason.type !== "unsecuredCollection" && result.reason.type !== "unsupportedObjectType") {
1235
+ 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.", {
1236
+ portableId: canonicalId,
1237
+ reason: result.reason.type
1238
+ });
1239
+ return portableObjectInternalServerError(request);
1240
+ }
1229
1241
  }
1230
- return new Response(request.method === "HEAD" ? null : JSON.stringify(jsonLd), { headers: {
1231
- "Content-Type": PORTABLE_OBJECT_CONTENT_TYPE,
1232
- Vary: "Accept"
1233
- } });
1242
+ return new Response(request.method === "HEAD" ? null : JSON.stringify(jsonLd), {
1243
+ status: tombstone ? 410 : 200,
1244
+ headers: {
1245
+ "Content-Type": PORTABLE_OBJECT_CONTENT_TYPE,
1246
+ Vary: "Accept"
1247
+ }
1248
+ });
1234
1249
  }
1235
1250
  function isRequestedPortableObject(object, canonicalId) {
1236
1251
  return object.id != null && getCanonicalPortableId(object.id) === canonicalId;
@@ -1296,13 +1311,13 @@ function recordCollectionMetrics(meterProvider, base, result, options = {}) {
1296
1311
  * @param parameters The parameters for handling the collection.
1297
1312
  * @returns A promise that resolves to an HTTP response.
1298
1313
  */
1299
- async function handleCollection(request, { name: name$2, identifier, uriGetter, filter, filterPredicate, context, collectionCallbacks, tracerProvider, meterProvider, onUnauthorized, onNotFound }) {
1300
- const spanName = name$2.trim().replace(/\s+/g, "_");
1314
+ async function handleCollection(request, { name: name$1, identifier, uriGetter, filter, filterPredicate, context, collectionCallbacks, tracerProvider, meterProvider, onUnauthorized, onNotFound }) {
1315
+ const spanName = name$1.trim().replace(/\s+/g, "_");
1301
1316
  tracerProvider = tracerProvider ?? trace.getTracerProvider();
1302
1317
  const tracer = tracerProvider.getTracer(name, version);
1303
1318
  const cursor = new URL(request.url).searchParams.get("cursor");
1304
1319
  const metricBase = {
1305
- kind: getCollectionMetricKind(name$2),
1320
+ kind: getCollectionMetricKind(name$1),
1306
1321
  page: cursor != null,
1307
1322
  dispatcher: "built_in"
1308
1323
  };
@@ -1343,7 +1358,7 @@ async function handleCollection(request, { name: name$2, identifier, uriGetter,
1343
1358
  span.setStatus({ code: SpanStatusCode.ERROR });
1344
1359
  return await onNotFound(request);
1345
1360
  }
1346
- const items = filterCollectionItems(page.items, name$2, filterPredicate);
1361
+ const items = filterCollectionItems(page.items, name$1, filterPredicate);
1347
1362
  itemCount = items.length;
1348
1363
  span.setAttribute("fedify.collection.items", itemCount);
1349
1364
  return items;
@@ -1383,7 +1398,7 @@ async function handleCollection(request, { name: name$2, identifier, uriGetter,
1383
1398
  } else {
1384
1399
  const uri = new URL(baseUri);
1385
1400
  uri.searchParams.set("cursor", cursor);
1386
- const pageOrResponse = await tracer.startActiveSpan(`activitypub.dispatch_collection_page ${name$2}`, {
1401
+ const pageOrResponse = await tracer.startActiveSpan(`activitypub.dispatch_collection_page ${name$1}`, {
1387
1402
  kind: SpanKind.SERVER,
1388
1403
  attributes: {
1389
1404
  "activitypub.collection.id": uri.href,
@@ -1399,7 +1414,7 @@ async function handleCollection(request, { name: name$2, identifier, uriGetter,
1399
1414
  span.setStatus({ code: SpanStatusCode.ERROR });
1400
1415
  return await onNotFound(request);
1401
1416
  }
1402
- const items = filterCollectionItems(page.items, name$2, filterPredicate);
1417
+ const items = filterCollectionItems(page.items, name$1, filterPredicate);
1403
1418
  itemCount = items.length;
1404
1419
  span.setAttribute("fedify.collection.items", itemCount);
1405
1420
  return {
@@ -2587,8 +2602,8 @@ var CustomCollectionHandler = class {
2587
2602
  * @param CollectionPage The CollectionPage constructor.
2588
2603
  * @param filterPredicate Optional filter predicate for items.
2589
2604
  */
2590
- constructor(name$1, values, context, callbacks, tracerProvider = trace.getTracerProvider(), meterProvider, Collection, CollectionPage, filterPredicate) {
2591
- this.name = name$1;
2605
+ constructor(name$2, values, context, callbacks, tracerProvider = trace.getTracerProvider(), meterProvider, Collection, CollectionPage, filterPredicate) {
2606
+ this.name = name$2;
2592
2607
  this.values = values;
2593
2608
  this.context = context;
2594
2609
  this.callbacks = callbacks;
@@ -5525,10 +5540,7 @@ var FederationImpl = class extends FederationBuilderImpl {
5525
5540
  return await handlePortableObject(request, {
5526
5541
  values: { identifier },
5527
5542
  context,
5528
- objectDispatcher: actorDispatcher == null ? void 0 : async (ctx) => {
5529
- const actor = await actorDispatcher(ctx, identifier);
5530
- return actor instanceof Tombstone ? null : actor;
5531
- },
5543
+ objectDispatcher: actorDispatcher == null ? void 0 : (ctx) => actorDispatcher(ctx, identifier),
5532
5544
  authorizePredicate: authorizePredicate == null ? void 0 : (ctx) => authorizePredicate(ctx, identifier),
5533
5545
  canonicalId: portable.canonicalId,
5534
5546
  onUnauthorized,
@@ -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-BETASGl0.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 getKeyOwner, t as doesActorOwnKey } from "./owner-wNinn7RK.js";
8
+ import { n as getAuthenticatedDocumentLoader, t as kvCache } from "./kv-cache-C4mv2ZFQ.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;
@@ -3653,13 +3668,13 @@ function recordCollectionMetrics(meterProvider, base, result, options = {}) {
3653
3668
  * @param parameters The parameters for handling the collection.
3654
3669
  * @returns A promise that resolves to an HTTP response.
3655
3670
  */
3656
- async function handleCollection(request, { name: name$2, identifier, uriGetter, filter, filterPredicate, context, collectionCallbacks, tracerProvider, meterProvider, onUnauthorized, onNotFound }) {
3657
- const spanName = name$2.trim().replace(/\s+/g, "_");
3671
+ async function handleCollection(request, { name: name$1, identifier, uriGetter, filter, filterPredicate, context, collectionCallbacks, tracerProvider, meterProvider, onUnauthorized, onNotFound }) {
3672
+ const spanName = name$1.trim().replace(/\s+/g, "_");
3658
3673
  tracerProvider = tracerProvider ?? trace.getTracerProvider();
3659
3674
  const tracer = tracerProvider.getTracer(name, version);
3660
3675
  const cursor = new URL(request.url).searchParams.get("cursor");
3661
3676
  const metricBase = {
3662
- kind: getCollectionMetricKind(name$2),
3677
+ kind: getCollectionMetricKind(name$1),
3663
3678
  page: cursor != null,
3664
3679
  dispatcher: "built_in"
3665
3680
  };
@@ -3700,7 +3715,7 @@ async function handleCollection(request, { name: name$2, identifier, uriGetter,
3700
3715
  span.setStatus({ code: SpanStatusCode.ERROR });
3701
3716
  return await onNotFound(request);
3702
3717
  }
3703
- const items = filterCollectionItems(page.items, name$2, filterPredicate);
3718
+ const items = filterCollectionItems(page.items, name$1, filterPredicate);
3704
3719
  itemCount = items.length;
3705
3720
  span.setAttribute("fedify.collection.items", itemCount);
3706
3721
  return items;
@@ -3740,7 +3755,7 @@ async function handleCollection(request, { name: name$2, identifier, uriGetter,
3740
3755
  } else {
3741
3756
  const uri = new URL(baseUri);
3742
3757
  uri.searchParams.set("cursor", cursor);
3743
- const pageOrResponse = await tracer.startActiveSpan(`activitypub.dispatch_collection_page ${name$2}`, {
3758
+ const pageOrResponse = await tracer.startActiveSpan(`activitypub.dispatch_collection_page ${name$1}`, {
3744
3759
  kind: SpanKind.SERVER,
3745
3760
  attributes: {
3746
3761
  "activitypub.collection.id": uri.href,
@@ -3756,7 +3771,7 @@ async function handleCollection(request, { name: name$2, identifier, uriGetter,
3756
3771
  span.setStatus({ code: SpanStatusCode.ERROR });
3757
3772
  return await onNotFound(request);
3758
3773
  }
3759
- const items = filterCollectionItems(page.items, name$2, filterPredicate);
3774
+ const items = filterCollectionItems(page.items, name$1, filterPredicate);
3760
3775
  itemCount = items.length;
3761
3776
  span.setAttribute("fedify.collection.items", itemCount);
3762
3777
  return {
@@ -4944,8 +4959,8 @@ var CustomCollectionHandler = class {
4944
4959
  * @param CollectionPage The CollectionPage constructor.
4945
4960
  * @param filterPredicate Optional filter predicate for items.
4946
4961
  */
4947
- constructor(name$1, values, context, callbacks, tracerProvider = trace.getTracerProvider(), meterProvider, Collection, CollectionPage, filterPredicate) {
4948
- this.name = name$1;
4962
+ constructor(name$2, values, context, callbacks, tracerProvider = trace.getTracerProvider(), meterProvider, Collection, CollectionPage, filterPredicate) {
4963
+ this.name = name$2;
4949
4964
  this.values = values;
4950
4965
  this.context = context;
4951
4966
  this.callbacks = callbacks;
@@ -8291,10 +8306,7 @@ var FederationImpl = class extends FederationBuilderImpl {
8291
8306
  return await handlePortableObject(request, {
8292
8307
  values: { identifier },
8293
8308
  context,
8294
- objectDispatcher: actorDispatcher == null ? void 0 : async (ctx) => {
8295
- const actor = await actorDispatcher(ctx, identifier);
8296
- return actor instanceof Tombstone ? null : actor;
8297
- },
8309
+ objectDispatcher: actorDispatcher == null ? void 0 : (ctx) => actorDispatcher(ctx, identifier),
8298
8310
  authorizePredicate: authorizePredicate == null ? void 0 : (ctx) => authorizePredicate(ctx, identifier),
8299
8311
  canonicalId: portable.canonicalId,
8300
8312
  onUnauthorized,
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-4bmgw-mA.cjs");
7
+ const require_federation = require("./federation-Ml6NrgRV.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_owner = require("./owner-DkA0Lz7v.cjs");
10
+ const require_kv_cache = require("./kv-cache-D2Bz6t_c.cjs");
11
11
  require("./nodeinfo/mod.cjs");
12
12
  require("./runtime/mod.cjs");
13
- const require_sig = require("./sig-Bj3fHnv0.cjs");
13
+ const require_sig = require("./sig-Cb9VSeiF.cjs");
14
14
  require("./utils/mod.cjs");
15
15
  //#endregion
16
16
  exports.CircuitBreaker = require_federation.CircuitBreaker;
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-BETASGl0.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-DWlAGlyP.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 getKeyOwner, t as doesActorOwnKey } from "./owner-wNinn7RK.js";
10
+ import { n as getAuthenticatedDocumentLoader, t as kvCache } from "./kv-cache-C4mv2ZFQ.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 { t as verifyPortableObject } from "./sig-C1xOA4ml.js";
15
15
  import "./utils/mod.js";
16
16
  export * from "@fedify/vocab-runtime";
17
17
  //#endregion
@@ -5,7 +5,7 @@ import { r as createRequestContext } from "../context-CoNRxGYp.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-CgOqRkK-.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-BZrnW0Qz.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-PyYvun0F.mjs";
7
+ import { t as fetchPortableGatewayKey } from "./portable-key-DyylakVV.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";
@@ -1,5 +1,5 @@
1
1
  const { URLPattern } = require("urlpattern-polyfill");
2
- const require_http = require("./http-B4mQvNcv.cjs");
2
+ const require_http = require("./http-4bmgw-mA.cjs");
3
3
  let _logtape_logtape = require("@logtape/logtape");
4
4
  let _fedify_vocab = require("@fedify/vocab");
5
5
  let _opentelemetry_api = require("@opentelemetry/api");
@@ -1,6 +1,6 @@
1
1
  import { Temporal } from "temporal-polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import { I as exportJwk, L as fetchActorDocument, U as verifyKeyOwnership, _t as isPortableId, bt as name, c as fetchPortableGatewayKey, ft as getCanonicalPortableId, gt as isCompatibleKeyId, xt as version, yt as isSamePublicKey$1 } from "./http-Ce6_Lf7k.js";
3
+ import { I as exportJwk, L as fetchActorDocument, U as verifyKeyOwnership, _t as isPortableId, bt as name, c as fetchPortableGatewayKey, ft as getCanonicalPortableId, gt as isCompatibleKeyId, xt as version, yt as isSamePublicKey$1 } from "./http-BETASGl0.js";
4
4
  import { getLogger } from "@logtape/logtape";
5
5
  import { CryptographicKey, Object as Object$1, isActor } from "@fedify/vocab";
6
6
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
@@ -2,7 +2,7 @@ import "temporal-polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { l as isSamePublicKey, o as isPortableActorDocument, t as getCanonicalPortableId } from "./portable-key-id-T7lecIbt.mjs";
5
- import { l as verifyPortableObjectProofWithRoot } from "./proof-xdPYGPaA.mjs";
5
+ import { l as verifyPortableObjectProofWithRoot } from "./proof-BCOg7Njv.mjs";
6
6
  import { getLogger } from "@logtape/logtape";
7
7
  import { CryptographicKey, Multikey, Object as Object$1 } from "@fedify/vocab";
8
8
  import { getDocumentLoader, isGatewayUrl } from "@fedify/vocab-runtime";