@fedify/fedify 2.4.0-dev.2073 → 2.4.0-dev.2084

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 (68) hide show
  1. package/dist/{builder-CVHpPAjK.mjs → builder-BGlpUocK.mjs} +2 -2
  2. package/dist/compat/transformers.test.mjs +1 -1
  3. package/dist/{compound-proof-B5Skp-vE.mjs → compound-proof-B6Aj2kGY.mjs} +1 -1
  4. package/dist/{deno-LYTbBhYV.mjs → deno-Dn-py9Zy.mjs} +1 -1
  5. package/dist/{docloader-C0SWQylk.mjs → docloader-BUq5bYJr.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 +137 -10
  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-gateway-keys.test.mjs +3 -3
  18. package/dist/federation/portable-inbox.test.mjs +401 -6
  19. package/dist/federation/portable.test.mjs +3 -3
  20. package/dist/federation/send.test.mjs +3 -3
  21. package/dist/federation/tasks/enqueue.test.mjs +1 -1
  22. package/dist/federation/tasks/tasks.test.mjs +2 -2
  23. package/dist/federation/temporal.test.mjs +1 -1
  24. package/dist/federation/webfinger.test.mjs +1 -1
  25. package/dist/{federation-B1aeTKKN.cjs → federation-BLGx8JUH.cjs} +126 -22
  26. package/dist/{http-vfTpzGEq.js → http-4PCCvhsU.js} +1 -1
  27. package/dist/{http-C7qHlv-b.mjs → http-B0VRNipE.mjs} +4 -4
  28. package/dist/{http-DGk8XI38.cjs → http-B5q1CHtL.cjs} +1 -1
  29. package/dist/{key-BYXnTGro.mjs → key-BJrp524f.mjs} +2 -2
  30. package/dist/{kv-cache-DCJuwdnB.js → kv-cache-1KUmAPH7.js} +1 -1
  31. package/dist/{kv-cache-DEH5jyND.mjs → kv-cache-C4C3LyYW.mjs} +1 -1
  32. package/dist/{kv-cache-DvqkKNIj.cjs → kv-cache-Dhhhrryv.cjs} +1 -1
  33. package/dist/{ld-DT3e2hOv.mjs → ld-BmFz5NLA.mjs} +3 -3
  34. package/dist/{metrics-DvlvYpq_.mjs → metrics-Beod6tzO.mjs} +1 -1
  35. package/dist/{middleware-BJcez_E3.mjs → middleware-B7CNsyqt.mjs} +1 -1
  36. package/dist/{middleware-CpyCNOW_.mjs → middleware-BKeQYPm0.mjs} +136 -32
  37. package/dist/{middleware-CCbyUF4c.js → middleware-D_9pNYe9.js} +126 -22
  38. package/dist/mod.cjs +5 -5
  39. package/dist/mod.js +5 -5
  40. package/dist/nodeinfo/handler.test.mjs +1 -1
  41. package/dist/{owner-DCIH7Iq0.cjs → owner-BQFZtFV4.cjs} +1 -1
  42. package/dist/{owner-CDsVeZI7.mjs → owner-CsKVgMzk.mjs} +3 -3
  43. package/dist/{owner-DfGz0cXm.js → owner-_pbbgLJK.js} +1 -1
  44. package/dist/{portable-key-DCyKGCQd.mjs → portable-key-B4R-CiIV.mjs} +2 -2
  45. package/dist/{proof-CxsVG6vM.mjs → proof-ozG4HfcQ.mjs} +4 -4
  46. package/dist/{send-BZJ7NsVV.mjs → send-ClPt8nYu.mjs} +3 -3
  47. package/dist/sig/compound-proof-discovery.test.mjs +1 -1
  48. package/dist/sig/compound-proof-producer.test.mjs +1 -1
  49. package/dist/sig/compound-proof-verification.test.mjs +2 -2
  50. package/dist/sig/compound-proof.test.mjs +2 -2
  51. package/dist/sig/http.test.mjs +2 -2
  52. package/dist/sig/key.test.mjs +1 -1
  53. package/dist/sig/ld.test.mjs +2 -2
  54. package/dist/sig/mod.cjs +3 -3
  55. package/dist/sig/mod.js +3 -3
  56. package/dist/sig/owner.test.mjs +1 -1
  57. package/dist/sig/portable-collection.test.mjs +2 -2
  58. package/dist/sig/portable-key.test.mjs +3 -3
  59. package/dist/sig/proof.test.mjs +3 -3
  60. package/dist/{sig-Cs9_ecdh.js → sig-DhdomAN0.js} +2 -2
  61. package/dist/{sig-C6TnADze.cjs → sig-k3C8sF7g.cjs} +2 -2
  62. package/dist/{temporal-CLzSfIOV.mjs → temporal-Ba0EAZAI.mjs} +1 -1
  63. package/dist/testing/kv.test.mjs +1 -1
  64. package/dist/utils/docloader.test.mjs +2 -2
  65. package/dist/utils/kv-cache.test.mjs +1 -1
  66. package/dist/utils/mod.cjs +1 -1
  67. package/dist/utils/mod.js +1 -1
  68. package/package.json +7 -7
@@ -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-DGk8XI38.cjs");
4
+ const require_http = require("./http-B5q1CHtL.cjs");
5
5
  const require_types = require("./types-Be2zbyeG.cjs");
6
- const require_owner = require("./owner-DCIH7Iq0.cjs");
7
- const require_kv_cache = require("./kv-cache-DvqkKNIj.cjs");
6
+ const require_owner = require("./owner-BQFZtFV4.cjs");
7
+ const require_kv_cache = require("./kv-cache-Dhhhrryv.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");
@@ -2638,13 +2638,13 @@ function recordCollectionMetrics(meterProvider, base, result, options = {}) {
2638
2638
  * @param parameters The parameters for handling the collection.
2639
2639
  * @returns A promise that resolves to an HTTP response.
2640
2640
  */
2641
- async function handleCollection(request, { name: name$2, identifier, uriGetter, filter, filterPredicate, context, collectionCallbacks, tracerProvider, meterProvider, onUnauthorized, onNotFound }) {
2642
- const spanName = name$2.trim().replace(/\s+/g, "_");
2641
+ async function handleCollection(request, { name: name$1, identifier, uriGetter, filter, filterPredicate, context, collectionCallbacks, tracerProvider, meterProvider, onUnauthorized, onNotFound }) {
2642
+ const spanName = name$1.trim().replace(/\s+/g, "_");
2643
2643
  tracerProvider = tracerProvider ?? _opentelemetry_api.trace.getTracerProvider();
2644
2644
  const tracer = tracerProvider.getTracer(require_http.name, require_http.version);
2645
2645
  const cursor = new URL(request.url).searchParams.get("cursor");
2646
2646
  const metricBase = {
2647
- kind: getCollectionMetricKind(name$2),
2647
+ kind: getCollectionMetricKind(name$1),
2648
2648
  page: cursor != null,
2649
2649
  dispatcher: "built_in"
2650
2650
  };
@@ -2685,7 +2685,7 @@ async function handleCollection(request, { name: name$2, identifier, uriGetter,
2685
2685
  span.setStatus({ code: _opentelemetry_api.SpanStatusCode.ERROR });
2686
2686
  return await onNotFound(request);
2687
2687
  }
2688
- const items = filterCollectionItems(page.items, name$2, filterPredicate);
2688
+ const items = filterCollectionItems(page.items, name$1, filterPredicate);
2689
2689
  itemCount = items.length;
2690
2690
  span.setAttribute("fedify.collection.items", itemCount);
2691
2691
  return items;
@@ -2725,7 +2725,7 @@ async function handleCollection(request, { name: name$2, identifier, uriGetter,
2725
2725
  } else {
2726
2726
  const uri = new URL(baseUri);
2727
2727
  uri.searchParams.set("cursor", cursor);
2728
- const pageOrResponse = await tracer.startActiveSpan(`activitypub.dispatch_collection_page ${name$2}`, {
2728
+ const pageOrResponse = await tracer.startActiveSpan(`activitypub.dispatch_collection_page ${name$1}`, {
2729
2729
  kind: _opentelemetry_api.SpanKind.SERVER,
2730
2730
  attributes: {
2731
2731
  "activitypub.collection.id": uri.href,
@@ -2741,7 +2741,7 @@ async function handleCollection(request, { name: name$2, identifier, uriGetter,
2741
2741
  span.setStatus({ code: _opentelemetry_api.SpanStatusCode.ERROR });
2742
2742
  return await onNotFound(request);
2743
2743
  }
2744
- const items = filterCollectionItems(page.items, name$2, filterPredicate);
2744
+ const items = filterCollectionItems(page.items, name$1, filterPredicate);
2745
2745
  itemCount = items.length;
2746
2746
  span.setAttribute("fedify.collection.items", itemCount);
2747
2747
  return {
@@ -3671,8 +3671,9 @@ async function handleInboxInternal(request, parameters, span) {
3671
3671
  });
3672
3672
  }
3673
3673
  if (!skipSignatureVerification) {
3674
- if (inspectCompoundPortableObjectApplicability(json, INBOX_COMPOUND_PROOF_LIMITS) !== "absent") {
3675
- const compoundProof = await verifyCompoundPortableObjectProofs(json, INBOX_COMPOUND_PROOF_LIMITS, {
3674
+ const compoundJson = Array.isArray(json) ? json : jsonWithoutSig;
3675
+ if (inspectCompoundPortableObjectApplicability(compoundJson, INBOX_COMPOUND_PROOF_LIMITS) !== "absent") {
3676
+ const compoundProof = await verifyCompoundPortableObjectProofs(compoundJson, INBOX_COMPOUND_PROOF_LIMITS, {
3676
3677
  documentLoader: ctx.documentLoader,
3677
3678
  keyCache,
3678
3679
  meterProvider,
@@ -3888,8 +3889,8 @@ var CustomCollectionHandler = class {
3888
3889
  * @param CollectionPage The CollectionPage constructor.
3889
3890
  * @param filterPredicate Optional filter predicate for items.
3890
3891
  */
3891
- constructor(name$1, values, context, callbacks, tracerProvider = _opentelemetry_api.trace.getTracerProvider(), meterProvider, Collection, CollectionPage, filterPredicate) {
3892
- this.name = name$1;
3892
+ constructor(name$2, values, context, callbacks, tracerProvider = _opentelemetry_api.trace.getTracerProvider(), meterProvider, Collection, CollectionPage, filterPredicate) {
3893
+ this.name = name$2;
3893
3894
  this.values = values;
3894
3895
  this.context = context;
3895
3896
  this.callbacks = callbacks;
@@ -5058,6 +5059,7 @@ function resolvePortableInboxRecipient(actor, { authority, canonicalInboxId, loc
5058
5059
  return {
5059
5060
  status: "accepted",
5060
5061
  recipient: {
5062
+ actorId: id,
5061
5063
  inboxId,
5062
5064
  canonicalInboxId,
5063
5065
  gateways
@@ -5091,8 +5093,11 @@ function canonicalize(iri) {
5091
5093
  * Forwarding is therefore best effort. Without {@link KvStore.cas}, nothing is
5092
5094
  * forwarded.
5093
5095
  *
5094
- * Forwarded requests are not signed with HTTP Signatures; the receiving
5095
- * gateways authenticate the activity by its own proof.
5096
+ * Forwarded requests are signed with HTTP Signatures by the RSA key among
5097
+ * {@link ForwardPortableInboxActivityParameters.getKeys}, if any, so that
5098
+ * servers requiring HTTP Signatures accept them, and are sent unsigned
5099
+ * otherwise. Either way, the receiving gateways authenticate the activity by
5100
+ * its own proof.
5096
5101
  * @param parameters The parameters.
5097
5102
  * @returns The target inbox URLs that the activity was handed off to.
5098
5103
  */
@@ -5164,20 +5169,59 @@ function getForwardingTargets(recipient, excludedOrigins) {
5164
5169
  }
5165
5170
  return targets;
5166
5171
  }
5167
- async function forwardImmediately({ activity, activityId, activityType, allowPrivateAddress, options, meterProvider, tracerProvider }, inboxes) {
5172
+ /**
5173
+ * Resolves the key that signs forwarded requests: the first RSASSA-PKCS1-v1_5
5174
+ * key, as {@link sendActivity} signs requests only with such a key. Since
5175
+ * the targets have already been claimed, the activity is forwarded unsigned
5176
+ * rather than not at all if the key cannot be resolved or used.
5177
+ */
5178
+ async function resolveForwardingKey({ getKeys, activityId }) {
5179
+ if (getKeys == null) return null;
5180
+ const logger = (0, _logtape_logtape.getLogger)([
5181
+ "fedify",
5182
+ "federation",
5183
+ "inbox"
5184
+ ]);
5185
+ let key;
5186
+ try {
5187
+ key = (await getKeys()).find((k) => k.privateKey.algorithm.name === "RSASSA-PKCS1-v1_5");
5188
+ } catch (error) {
5189
+ logger.error("Failed to get the gateway keys to sign forwarded requests with; forwarding activity {activityId} without HTTP Signatures:\n{error}", {
5190
+ activityId: activityId.href,
5191
+ error
5192
+ });
5193
+ return null;
5194
+ }
5195
+ if (key == null) return null;
5196
+ try {
5197
+ require_http.validateCryptoKey(key.privateKey, "private");
5198
+ } catch (error) {
5199
+ if (!(error instanceof TypeError)) throw error;
5200
+ logger.warn("The gateway key {keyId} cannot sign forwarded requests; forwarding activity {activityId} without HTTP Signatures:\n{error}", {
5201
+ keyId: key.keyId.href,
5202
+ activityId: activityId.href,
5203
+ error
5204
+ });
5205
+ return null;
5206
+ }
5207
+ return key;
5208
+ }
5209
+ async function forwardImmediately(parameters, inboxes) {
5210
+ const { activity, activityId, activityType, allowPrivateAddress, specDeterminer, options, meterProvider, tracerProvider } = parameters;
5168
5211
  const logger = (0, _logtape_logtape.getLogger)([
5169
5212
  "fedify",
5170
5213
  "federation",
5171
5214
  "inbox"
5172
5215
  ]);
5173
5216
  const deadline = (options ?? resolvePortableInboxForwardingOptions()).deadline.total("millisecond");
5174
- const sends = inboxes.map((inbox) => sendActivity({
5217
+ const forwarding = resolveForwardingKey(parameters).then((key) => Promise.all(inboxes.map((inbox) => sendActivity({
5175
5218
  activity,
5176
5219
  activityId: activityId.href,
5177
5220
  activityType,
5178
- keys: [],
5221
+ keys: key == null ? [] : [key],
5179
5222
  inbox,
5180
5223
  allowPrivateAddress,
5224
+ specDeterminer,
5181
5225
  meterProvider,
5182
5226
  tracerProvider
5183
5227
  }).catch((error) => {
@@ -5186,9 +5230,9 @@ async function forwardImmediately({ activity, activityId, activityType, allowPri
5186
5230
  inbox: inbox.href,
5187
5231
  error
5188
5232
  });
5189
- }));
5233
+ }))));
5190
5234
  let timer;
5191
- const timedOut = await Promise.race([Promise.all(sends).then(() => false), new Promise((resolve) => {
5235
+ const timedOut = await Promise.race([forwarding.then(() => false), new Promise((resolve) => {
5192
5236
  timer = setTimeout(() => resolve(true), deadline);
5193
5237
  })]);
5194
5238
  clearTimeout(timer);
@@ -5197,12 +5241,27 @@ async function forwardImmediately({ activity, activityId, activityType, allowPri
5197
5241
  deadline
5198
5242
  });
5199
5243
  }
5200
- async function enqueueForwarding({ activity, activityId, activityType, baseUrl, startQueue, meterProvider }, outboxQueue, inboxes) {
5244
+ async function enqueueForwarding(parameters, outboxQueue, inboxes) {
5245
+ const { activity, activityId, activityType, baseUrl, startQueue, meterProvider } = parameters;
5201
5246
  const logger = (0, _logtape_logtape.getLogger)([
5202
5247
  "fedify",
5203
5248
  "federation",
5204
5249
  "inbox"
5205
5250
  ]);
5251
+ const key = await resolveForwardingKey(parameters);
5252
+ const keys = [];
5253
+ if (key != null) try {
5254
+ keys.push({
5255
+ keyId: key.keyId.href,
5256
+ privateKey: await require_http.exportJwk(key.privateKey)
5257
+ });
5258
+ } catch (error) {
5259
+ logger.error("Failed to export the gateway key {keyId}; forwarding activity {activityId} without HTTP Signatures:\n{error}", {
5260
+ keyId: key.keyId.href,
5261
+ activityId: activityId.href,
5262
+ error
5263
+ });
5264
+ }
5206
5265
  startQueue?.();
5207
5266
  const started = (/* @__PURE__ */ new Date()).toISOString();
5208
5267
  const traceContext = {};
@@ -5212,7 +5271,7 @@ async function enqueueForwarding({ activity, activityId, activityType, baseUrl,
5212
5271
  type: "outbox",
5213
5272
  id: crypto.randomUUID(),
5214
5273
  baseUrl,
5215
- keys: [],
5274
+ keys,
5216
5275
  activity,
5217
5276
  activityId: activityId.href,
5218
5277
  activityType,
@@ -7895,6 +7954,8 @@ var FederationImpl = class extends FederationBuilderImpl {
7895
7954
  outboxQueue: this.outboxQueue,
7896
7955
  startQueue: this.manuallyStartQueue ? void 0 : () => this._startQueueInternal(contextData),
7897
7956
  allowPrivateAddress: this.allowPrivateAddress,
7957
+ getKeys: () => this.#getPortableGatewayKeyPairs(context, identifier, recipient),
7958
+ specDeterminer: new KvSpecDeterminer(this.kv, this.kvPrefixes.httpMessageSignaturesSpec, this.firstKnock, { specTtl: this.httpMessageSignaturesSpecTtl }),
7898
7959
  options: this.portableInboxForwarding,
7899
7960
  meterProvider: this.meterProvider,
7900
7961
  tracerProvider: this.tracerProvider
@@ -7903,6 +7964,49 @@ var FederationImpl = class extends FederationBuilderImpl {
7903
7964
  }
7904
7965
  });
7905
7966
  }
7967
+ /**
7968
+ * Gets this server's gateway key pairs for the portable actor that owns
7969
+ * a portable inbox, which sign the activities forwarded from the inbox.
7970
+ * @param context The context.
7971
+ * @param identifier The identifier of the portable actor.
7972
+ * @param recipient The portable inbox.
7973
+ * @returns The key pairs, or an empty array if the actor has no gateway
7974
+ * keys on this server.
7975
+ */
7976
+ async #getPortableGatewayKeyPairs(context, identifier, recipient) {
7977
+ const logger = (0, _logtape_logtape.getLogger)([
7978
+ "fedify",
7979
+ "federation",
7980
+ "inbox"
7981
+ ]);
7982
+ if (this.actorCallbacks?.keyPairsDispatcher == null || this.actorCallbacks.portableActorIdMapper == null) {
7983
+ logger.debug("Forwarding activities from the portable inbox {inbox} without HTTP Signatures, as gateway keys need both a key pairs dispatcher and a portable actor ID mapper.", { inbox: recipient.canonicalInboxId });
7984
+ return [];
7985
+ }
7986
+ const actorId = require_http.getCanonicalPortableId(recipient.actorId);
7987
+ if (actorId == null) return [];
7988
+ const keyPairs = await context.getActorKeyPairs(identifier);
7989
+ for (const { cryptographicKey } of keyPairs) {
7990
+ const owner = cryptographicKey.ownerId;
7991
+ const canonicalOwner = owner == null ? null : require_http.getCanonicalPortableId(owner);
7992
+ if (canonicalOwner === actorId) continue;
7993
+ if (canonicalOwner == null) logger.debug("Forwarding activities from the portable inbox {inbox} without HTTP Signatures, as the key pairs of the actor {identifier} are not the gateway keys of a portable actor.", {
7994
+ inbox: recipient.canonicalInboxId,
7995
+ identifier
7996
+ });
7997
+ else logger.warn("Forwarding activities from the portable inbox {inbox} without HTTP Signatures, as the key pairs of the actor {identifier} are the gateway keys of {owner}, not of the recipient {actorId}.", {
7998
+ inbox: recipient.canonicalInboxId,
7999
+ identifier,
8000
+ owner: canonicalOwner,
8001
+ actorId
8002
+ });
8003
+ return [];
8004
+ }
8005
+ return keyPairs.map(({ keyId, privateKey }) => ({
8006
+ keyId,
8007
+ privateKey
8008
+ }));
8009
+ }
7906
8010
  async #fetchHashlinkMedia(request, media, { onNotFound, contextData, span, metricState }) {
7907
8011
  metricState.endpoint = "hashlink_media";
7908
8012
  metricState.routeTemplate = HASHLINK_MEDIA_ROUTE_TEMPLATE;
@@ -13,7 +13,7 @@ import { decodeBase64, encodeBase64 } from "byte-encodings/base64";
13
13
  import { ATTR_HTTP_REQUEST_HEADER, ATTR_HTTP_REQUEST_METHOD, ATTR_URL_FULL } from "@opentelemetry/semantic-conventions";
14
14
  //#region deno.json
15
15
  var name = "@fedify/fedify";
16
- var version = "2.4.0-dev.2073+2152dfc6";
16
+ var version = "2.4.0-dev.2084+4b8bd325";
17
17
  //#endregion
18
18
  //#region src/sig/accept.ts
19
19
  /**
@@ -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-LYTbBhYV.mjs";
5
- import { n as getDurationMs, r as getFederationMetrics, s as measureSignatureKeyFetch } from "./metrics-DvlvYpq_.mjs";
4
+ import { n as version, t as name } from "./deno-Dn-py9Zy.mjs";
5
+ import { n as getDurationMs, r as getFederationMetrics, s as measureSignatureKeyFetch } from "./metrics-Beod6tzO.mjs";
6
6
  import { i as validateAcceptSignature, n as fulfillAcceptSignature, r as parseAcceptSignature } from "./accept-CPVqki78.mjs";
7
- import { i as fetchKeyDetailed, s as validateCryptoKey } from "./key-BYXnTGro.mjs";
8
- import { n as verifyPortableGatewayKeyDocument } from "./portable-key-DCyKGCQd.mjs";
7
+ import { i as fetchKeyDetailed, s as validateCryptoKey } from "./key-BJrp524f.mjs";
8
+ import { n as verifyPortableGatewayKeyDocument } from "./portable-key-B4R-CiIV.mjs";
9
9
  import { getLogger } from "@logtape/logtape";
10
10
  import { CryptographicKey } from "@fedify/vocab";
11
11
  import { SpanStatusCode, trace } from "@opentelemetry/api";
@@ -15,7 +15,7 @@ let byte_encodings_base64 = require("byte-encodings/base64");
15
15
  let _opentelemetry_semantic_conventions = require("@opentelemetry/semantic-conventions");
16
16
  //#region deno.json
17
17
  var name = "@fedify/fedify";
18
- var version = "2.4.0-dev.2073+2152dfc6";
18
+ var version = "2.4.0-dev.2084+4b8bd325";
19
19
  //#endregion
20
20
  //#region ../../node_modules/.pnpm/temporal-polyfill@1.0.1/node_modules/temporal-polyfill/chunks/root.js
21
21
  const NativeTemporal = globalThis.Temporal;
@@ -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-LYTbBhYV.mjs";
5
- import { _ as recordKeyLookup, n as getDurationMs, t as classifyFetchError } from "./metrics-DvlvYpq_.mjs";
4
+ import { n as version, t as name } from "./deno-Dn-py9Zy.mjs";
5
+ import { _ as recordKeyLookup, n as getDurationMs, t as classifyFetchError } from "./metrics-Beod6tzO.mjs";
6
6
  import { getLogger } from "@logtape/logtape";
7
7
  import { CryptographicKey, Multikey, Object as Object$1, isActor } from "@fedify/vocab";
8
8
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
@@ -1,6 +1,6 @@
1
1
  import { Temporal } from "temporal-polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import { R as validateCryptoKey, nt as recordDocumentCache, t as doubleKnock } from "./http-vfTpzGEq.js";
3
+ import { R as validateCryptoKey, nt as recordDocumentCache, t as doubleKnock } from "./http-4PCCvhsU.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-DvlvYpq_.mjs";
4
+ import { p as recordDocumentCache } from "./metrics-Beod6tzO.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-DGk8XI38.cjs");
2
+ const require_http = require("./http-B5q1CHtL.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-LYTbBhYV.mjs";
5
- import { n as getDurationMs, r as getFederationMetrics, s as measureSignatureKeyFetch } from "./metrics-DvlvYpq_.mjs";
6
- import { r as fetchKey, s as validateCryptoKey } from "./key-BYXnTGro.mjs";
4
+ import { n as version, t as name } from "./deno-Dn-py9Zy.mjs";
5
+ import { n as getDurationMs, r as getFederationMetrics, s as measureSignatureKeyFetch } from "./metrics-Beod6tzO.mjs";
6
+ import { r as fetchKey, s as validateCryptoKey } from "./key-BJrp524f.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-LYTbBhYV.mjs";
4
+ import { n as version, t as name } from "./deno-Dn-py9Zy.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-CpyCNOW_.mjs";
4
+ import { n as FederationImpl } from "./middleware-BKeQYPm0.mjs";
5
5
  export { FederationImpl };