@fedify/fedify 2.4.0-dev.1504 → 2.4.0-dev.1528

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 (109) hide show
  1. package/README.md +10 -7
  2. package/dist/{assert-DvVHoIZ0.mjs → assert-OguE97r2.mjs} +1 -1
  3. package/dist/{assert_instance_of-CxoC8bVq.mjs → assert_instance_of-DBC5X09g.mjs} +1 -1
  4. package/dist/{assert_not_equals-C8vcTTA3.mjs → assert_not_equals-DkVK8oqV.mjs} +1 -1
  5. package/dist/{assert_rejects-DAdaaIWM.mjs → assert_rejects-DN60FHPX.mjs} +2 -2
  6. package/dist/{assert_strict_equals-BzqyKuYL.mjs → assert_strict_equals-XEgZAlrj.mjs} +1 -1
  7. package/dist/{assert_throws-zN79lgIC.mjs → assert_throws-BOkhLGYc.mjs} +1 -1
  8. package/dist/{builder-Ck0Fl_a5.mjs → builder-B6myMguW.mjs} +3 -23
  9. package/dist/compat/mod.d.cts +1 -1
  10. package/dist/compat/mod.d.ts +1 -1
  11. package/dist/compat/outgoing-jsonld.test.mjs +3 -3
  12. package/dist/compat/public-audience.test.mjs +3 -3
  13. package/dist/compat/transformers.test.mjs +5 -5
  14. package/dist/{context-CYF8X0ft.d.cts → context-BBVLF7lx.d.cts} +272 -543
  15. package/dist/{context-BF5B4ZDk.d.ts → context-BU6jSQdo.d.ts} +272 -542
  16. package/dist/{context-BBRTgkrs.mjs → context-DVoTs_wM.mjs} +2 -8
  17. package/dist/{deno-D3gb4X9v.mjs → deno-CVNsRJe9.mjs} +1 -1
  18. package/dist/{docloader-DUKu0GzG.mjs → docloader-CB8AGpw3.mjs} +3 -3
  19. package/dist/federation/builder.test.mjs +5 -5
  20. package/dist/federation/circuit-breaker.test.mjs +5 -5
  21. package/dist/federation/collection.test.mjs +3 -3
  22. package/dist/federation/handler.test.mjs +13 -13
  23. package/dist/federation/idempotency.test.mjs +6 -6
  24. package/dist/federation/inbox.test.mjs +3 -3
  25. package/dist/federation/keycache.test.mjs +5 -5
  26. package/dist/federation/kv.test.mjs +3 -3
  27. package/dist/federation/metrics.test.mjs +4 -4
  28. package/dist/federation/middleware.test.mjs +19 -200
  29. package/dist/federation/mod.cjs +259 -3
  30. package/dist/federation/mod.d.cts +4 -4
  31. package/dist/federation/mod.d.ts +4 -4
  32. package/dist/federation/mod.js +257 -1
  33. package/dist/federation/mq.test.mjs +261 -103
  34. package/dist/federation/negotiation.test.mjs +4 -4
  35. package/dist/federation/retry.test.mjs +3 -3
  36. package/dist/federation/router.test.mjs +5 -5
  37. package/dist/federation/send.test.mjs +10 -10
  38. package/dist/federation/temporal.test.mjs +4 -4
  39. package/dist/federation/webfinger.test.mjs +6 -6
  40. package/dist/{http-CrZzUAtV.js → http-B0-9u_1F.js} +17 -7
  41. package/dist/{http-D9p2_d2X.cjs → http-EkV7OslM.cjs} +17 -7
  42. package/dist/{http-BNFQkiEZ.mjs → http-L7wqkbZR.mjs} +4 -4
  43. package/dist/{key-BM_SRwBV.mjs → key-Ct8zNgGk.mjs} +18 -8
  44. package/dist/{kv-cache-BE1QIPdL.mjs → kv-cache-CUT9OGpX.mjs} +1 -1
  45. package/dist/{kv-cache-Cna211RR.cjs → kv-cache-CbB50co6.cjs} +1 -1
  46. package/dist/{kv-cache-Ch_Zv5Yq.js → kv-cache-Dh8ZoQfC.js} +1 -1
  47. package/dist/{ld-ubkf03eb.mjs → ld-D6I7H18J.mjs} +3 -3
  48. package/dist/{metrics-BXR36qzu.mjs → metrics-DvClPYaE.mjs} +1 -1
  49. package/dist/{middleware-DUNeIkXN.cjs → middleware-B0ujKP-0.cjs} +51 -694
  50. package/dist/{middleware-pzCP79He.mjs → middleware-CGqUj4XY.mjs} +1 -1
  51. package/dist/{middleware-lB4vtShP.js → middleware-DX9Fd37u.js} +52 -683
  52. package/dist/{middleware-iP9VRMus.mjs → middleware-RxFBNV2C.mjs} +67 -310
  53. package/dist/{mod-BHEB3xhE.d.cts → mod-C0F6kvgS.d.cts} +1 -1
  54. package/dist/{mod-4WGAuR6X.d.ts → mod-vPYVoa5n.d.ts} +1 -1
  55. package/dist/mod.cjs +6 -6
  56. package/dist/mod.d.cts +5 -5
  57. package/dist/mod.d.ts +5 -5
  58. package/dist/mod.js +5 -5
  59. package/dist/{mq-DXMt_qCY.d.cts → mq-D-nlpY04.d.ts} +0 -34
  60. package/dist/{mq-B5_hohs7.d.ts → mq-D8uSFzxe.d.cts} +0 -34
  61. package/dist/nodeinfo/client.test.mjs +3 -3
  62. package/dist/nodeinfo/handler.test.mjs +5 -5
  63. package/dist/nodeinfo/types.test.mjs +4 -4
  64. package/dist/otel/exporter.test.mjs +3 -3
  65. package/dist/{outgoing-jsonld-BNL8AC14.mjs → outgoing-jsonld-L_DbOaFe.mjs} +1 -1
  66. package/dist/{owner-Bf1KkncT.mjs → owner-BqPUA8Z6.mjs} +2 -2
  67. package/dist/{proof-Q781Ks5q.mjs → proof-BJKoRFBc.mjs} +5 -5
  68. package/dist/{proof-BMcsi8q_.js → proof-DCCmmEuJ.js} +1 -1
  69. package/dist/{proof-yeAU1MyT.cjs → proof-eZme7HYR.cjs} +1 -1
  70. package/dist/{send-DFV0S_n9.mjs → send-DVtEjoJ6.mjs} +3 -3
  71. package/dist/sig/accept.test.mjs +1 -1
  72. package/dist/sig/http.test.mjs +8 -8
  73. package/dist/sig/key.test.mjs +56 -6
  74. package/dist/sig/ld.test.mjs +7 -7
  75. package/dist/sig/mod.cjs +2 -2
  76. package/dist/sig/mod.js +2 -2
  77. package/dist/sig/owner.test.mjs +6 -6
  78. package/dist/sig/proof.test.mjs +8 -8
  79. package/dist/{std__assert-Dh6uLf_q.mjs → std__assert-BBjXFNOb.mjs} +4 -4
  80. package/dist/{temporal-CyOjsqPj.mjs → temporal-B06FcmVK.mjs} +1 -1
  81. package/dist/testing/mod.d.mts +8 -1037
  82. package/dist/testing/mod.mjs +2 -3
  83. package/dist/utils/docloader.test.mjs +6 -6
  84. package/dist/utils/kv-cache.test.mjs +1 -1
  85. package/dist/utils/mod.cjs +1 -1
  86. package/dist/utils/mod.js +1 -1
  87. package/package.json +7 -12
  88. package/dist/codec-CmlPqjNX.mjs +0 -103
  89. package/dist/federation/tasks/codec.test.d.mts +0 -2
  90. package/dist/federation/tasks/codec.test.mjs +0 -292
  91. package/dist/federation/tasks/enqueue.test.d.mts +0 -2
  92. package/dist/federation/tasks/enqueue.test.mjs +0 -992
  93. package/dist/federation/tasks/tasks.test.d.mts +0 -2
  94. package/dist/federation/tasks/tasks.test.mjs +0 -555
  95. package/dist/mq-03vS-C9P.mjs +0 -276
  96. package/dist/testing-Dy-WhqpN.mjs +0 -77
  97. /package/dist/{accept-CgDcxvjV.mjs → accept-CPkZzmGN.mjs} +0 -0
  98. /package/dist/{activity-listener-BeTGV3wc.mjs → activity-listener-tztVvlNb.mjs} +0 -0
  99. /package/dist/{assert_equals-PBVKNMJd.mjs → assert_equals-C-ZRDbaf.mjs} +0 -0
  100. /package/dist/{circuit-breaker-hJBB6jwA.mjs → circuit-breaker-CSWsyoef.mjs} +0 -0
  101. /package/dist/{client-B_A6mfn3.mjs → client-ByXmQhYD.mjs} +0 -0
  102. /package/dist/{collection-Dp5ky45w.mjs → collection-Cc3DVAhE.mjs} +0 -0
  103. /package/dist/{keycache-CaOR6NYg.mjs → keycache-BeU0LCII.mjs} +0 -0
  104. /package/dist/{keys-CSYsOMFG.mjs → keys-DGu1NFwu.mjs} +0 -0
  105. /package/dist/{kv-CIvR3Non.mjs → kv-rV3vodCc.mjs} +0 -0
  106. /package/dist/{negotiation-m_L2nyS3.mjs → negotiation-DDstyBvc.mjs} +0 -0
  107. /package/dist/{public-audience-c9zmYKgA.mjs → public-audience-Cvbr2Gzt.mjs} +0 -0
  108. /package/dist/{retry-DI4O-zYl.mjs → retry-CXg_MBI-.mjs} +0 -0
  109. /package/dist/{types-BFowWFTT.mjs → types-J53Kw7so.mjs} +0 -0
@@ -1,41 +1,39 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as version, t as name } from "./deno-D3gb4X9v.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-BXR36qzu.mjs";
6
- import { t as formatAcceptSignature } from "./accept-CgDcxvjV.mjs";
7
- import { a as importJwk, o as validateCryptoKey, t as exportJwk } from "./key-BM_SRwBV.mjs";
8
- import { l as verifyRequest, o as parseRfc9421SignatureInput, u as verifyRequestDetailed } from "./http-BNFQkiEZ.mjs";
9
- import { t as getAuthenticatedDocumentLoader } from "./docloader-DUKu0GzG.mjs";
10
- import { n as kvCache } from "./kv-cache-BE1QIPdL.mjs";
11
- 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-ubkf03eb.mjs";
12
- import { n as getKeyOwner, t as doesActorOwnKey } from "./owner-Bf1KkncT.mjs";
13
- import { r as normalizeOutgoingActivityJsonLd } from "./outgoing-jsonld-BNL8AC14.mjs";
14
- import { i as verifyObject, n as hasProofLike, r as signObject } from "./proof-Q781Ks5q.mjs";
15
- import { t as getNodeInfo } from "./client-B_A6mfn3.mjs";
16
- import { t as nodeInfoToJson } from "./types-BFowWFTT.mjs";
17
- import { n as extractInboxes, r as sendActivity, t as SendActivityError } from "./send-DFV0S_n9.mjs";
18
- import { n as FederationBuilderImpl, t as ACTOR_ALIAS_PREFIX } from "./builder-Ck0Fl_a5.mjs";
19
- import { t as CircuitBreaker } from "./circuit-breaker-hJBB6jwA.mjs";
20
- import { t as buildCollectionSynchronizationHeader } from "./collection-Dp5ky45w.mjs";
21
- import { t as KvKeyCache } from "./keycache-CaOR6NYg.mjs";
22
- import { t as acceptsJsonLd } from "./negotiation-m_L2nyS3.mjs";
23
- import { t as hasMalformedKnownTemporalLiteral } from "./temporal-CyOjsqPj.mjs";
24
- import { t as createExponentialBackoffPolicy } from "./retry-DI4O-zYl.mjs";
25
- import { t as TaskCodec } from "./codec-CmlPqjNX.mjs";
26
- import { n as ParallelMessageQueue } from "./mq-03vS-C9P.mjs";
4
+ import { n as version, t as name } from "./deno-CVNsRJe9.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-DvClPYaE.mjs";
6
+ import { t as formatAcceptSignature } from "./accept-CPkZzmGN.mjs";
7
+ import { a as importJwk, o as validateCryptoKey, t as exportJwk } from "./key-Ct8zNgGk.mjs";
8
+ import { l as verifyRequest, o as parseRfc9421SignatureInput, u as verifyRequestDetailed } from "./http-L7wqkbZR.mjs";
9
+ import { t as getAuthenticatedDocumentLoader } from "./docloader-CB8AGpw3.mjs";
10
+ import { n as kvCache } from "./kv-cache-CUT9OGpX.mjs";
11
+ 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-D6I7H18J.mjs";
12
+ import { n as getKeyOwner, t as doesActorOwnKey } from "./owner-BqPUA8Z6.mjs";
13
+ import { r as normalizeOutgoingActivityJsonLd } from "./outgoing-jsonld-L_DbOaFe.mjs";
14
+ import { i as verifyObject, n as hasProofLike, r as signObject } from "./proof-BJKoRFBc.mjs";
15
+ import { t as getNodeInfo } from "./client-ByXmQhYD.mjs";
16
+ import { t as nodeInfoToJson } from "./types-J53Kw7so.mjs";
17
+ import { n as extractInboxes, r as sendActivity, t as SendActivityError } from "./send-DVtEjoJ6.mjs";
18
+ import { n as FederationBuilderImpl, t as ACTOR_ALIAS_PREFIX } from "./builder-B6myMguW.mjs";
19
+ import { t as CircuitBreaker } from "./circuit-breaker-CSWsyoef.mjs";
20
+ import { t as buildCollectionSynchronizationHeader } from "./collection-Cc3DVAhE.mjs";
21
+ import { t as KvKeyCache } from "./keycache-BeU0LCII.mjs";
22
+ import { t as acceptsJsonLd } from "./negotiation-DDstyBvc.mjs";
23
+ import { t as hasMalformedKnownTemporalLiteral } from "./temporal-B06FcmVK.mjs";
24
+ import { t as createExponentialBackoffPolicy } from "./retry-CXg_MBI-.mjs";
27
25
  import { getLogger, withContext } from "@logtape/logtape";
28
26
  import { RouterError } from "@fedify/uri-template";
29
27
  import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage, Tombstone, getTypeId, lookupObject, traverseCollection } from "@fedify/vocab";
30
28
  import { lookupWebFinger } from "@fedify/webfinger";
31
29
  import { SpanKind, SpanStatusCode, context, metrics, propagation, trace } from "@opentelemetry/api";
32
- import { uniq } from "es-toolkit";
33
30
  import { FetchError, getDocumentLoader } from "@fedify/vocab-runtime";
34
31
  import { ATTR_HTTP_REQUEST_HEADER, ATTR_HTTP_REQUEST_METHOD, ATTR_HTTP_RESPONSE_HEADER, ATTR_HTTP_RESPONSE_STATUS_CODE, ATTR_URL_FULL } from "@opentelemetry/semantic-conventions";
32
+ import { uniq } from "es-toolkit";
35
33
  import { DataPointType, MeterProvider as MeterProvider$1, MetricReader } from "@opentelemetry/sdk-metrics";
36
34
  import { domainToASCII } from "node:url";
37
35
  //#region src/compat/transformers.ts
38
- const logger$2 = getLogger([
36
+ const logger$1 = getLogger([
39
37
  "fedify",
40
38
  "compat",
41
39
  "transformers"
@@ -61,7 +59,7 @@ const logger$2 = getLogger([
61
59
  function autoIdAssigner(activity, context) {
62
60
  if (activity.id != null) return activity;
63
61
  const id = new URL(`/#${activity.constructor.name}/${crypto.randomUUID()}`, context.origin);
64
- logger$2.warn("As the activity to send does not have an id, a new id {id} has been generated for it. However, it is recommended to explicitly set the id for the activity.", { id: id.href });
62
+ logger$1.warn("As the activity to send does not have an id, a new id {id} has been generated for it. However, it is recommended to explicitly set the id for the activity.", { id: id.href });
65
63
  return activity.clone({ id });
66
64
  }
67
65
  /**
@@ -2095,160 +2093,6 @@ const MIN_COMPONENTS = [
2095
2093
  "@authority"
2096
2094
  ];
2097
2095
  //#endregion
2098
- //#region src/federation/tasks/enqueue.ts
2099
- /**
2100
- * The enqueue pipeline for custom background tasks. `ContextImpl.enqueueTask`
2101
- * and `ContextImpl.enqueueTaskMany` delegate to {@link enqueueTasks} so the
2102
- * handle validation, deduplication planning, payload encoding, and queue
2103
- * dispatch live in one cohesive place instead of one oversized method.
2104
- *
2105
- * @module
2106
- */
2107
- /**
2108
- * Validates the task handle, plans deduplication, encodes every payload, then
2109
- * dispatches the resulting messages to the queue. A single item flows through
2110
- * the same pipeline as a batch, so {@link Context.enqueueTask} and
2111
- * {@link Context.enqueueTaskMany} share one implementation.
2112
- * @template TContextData The context data to pass to the {@link Context}.
2113
- * @template TData The type of the task payload, inferred from the task's schema.
2114
- * @param ctx The enqueueing dependencies assembled by `ContextImpl`.
2115
- * @param task The handle returned by `defineTask()`.
2116
- * @param items The payloads to enqueue, in order.
2117
- * @param options The enqueue options governing delay, ordering, and dedup.
2118
- * @internal
2119
- */
2120
- const enqueueTasks = (ctx) => async function(task, items, options) {
2121
- const def = ctx.federation.taskDefinitions.get(task.name);
2122
- if (def == null || def.handle !== task) throw new TypeError(`Task ${JSON.stringify(task.name)} is not defined on this federation; pass a handle returned by its defineTask().`);
2123
- const queue = ctx.federation.resolveTaskQueue(task.name);
2124
- if (queue == null) throw new TypeError("No message queue is configured for tasks; pass `queue` to createFederation() or to defineTask().");
2125
- if (items.length < 1) return;
2126
- const plan = planDeduplication(ctx, queue, task.name, options, items.length);
2127
- const messages = await Promise.all(items.map(encodeTaskMessage(ctx.codec, ctx.origin, task, options)));
2128
- const claim = await claimDeduplication(ctx, plan, task.name);
2129
- if (!claim.proceed) return;
2130
- if (!ctx.federation.manuallyStartQueue) ctx.federation._startQueueInternal(ctx.data);
2131
- try {
2132
- await dispatch(queue, messages, {
2133
- delay: getDurationIfDefined(options.delay),
2134
- orderingKey: options.orderingKey,
2135
- deduplicationKey: claim.forwardedDeduplicationKey
2136
- });
2137
- } catch (error) {
2138
- if (claim.rollback != null) try {
2139
- await claim.rollback();
2140
- } catch (rollbackError) {
2141
- logger$1.warn("Failed to roll back the deduplication marker for task {taskName} after a failed enqueue; it will expire by TTL. {rollbackError}", {
2142
- taskName: task.name,
2143
- rollbackError
2144
- });
2145
- }
2146
- throw error;
2147
- }
2148
- };
2149
- const getDurationIfDefined = (item) => item == null ? void 0 : Temporal.Duration.from(item);
2150
- /**
2151
- * Decides how a `deduplicationKey` (if any) is honored: forwarded to a native
2152
- * queue, claimed via `cas`, or—when neither is available—dropped or rejected
2153
- * per the federation's `taskDeduplicationFallback`. Throws the fail-fast
2154
- * `TypeError`s so they precede the encode.
2155
- */
2156
- function planDeduplication(ctx, queue, taskName, options, itemCount) {
2157
- if (options.deduplicationKey == null) return { kind: "none" };
2158
- const key = options.deduplicationKey;
2159
- const native = queue.nativeDeduplication === true;
2160
- const canCas = ctx.federation.kv.cas != null;
2161
- const canBatchAtomically = queue.enqueueMany != null && !(queue instanceof ParallelMessageQueue && queue.queue.enqueueMany == null);
2162
- if (itemCount > 1 && !canBatchAtomically && (native || canCas)) throw new TypeError(`Task ${JSON.stringify(taskName)} was enqueued as a batch with a deduplicationKey, but its message queue does not implement enqueueMany; a multi-item batch cannot be deduplicated atomically without it. Implement enqueueMany on the queue, or enqueue the tasks individually with enqueueTask().`);
2163
- if (native) return {
2164
- kind: "native",
2165
- key
2166
- };
2167
- if (canCas) return {
2168
- kind: "cas",
2169
- key
2170
- };
2171
- if (ctx.federation.taskDeduplicationFallback === "closed") throw new TypeError("deduplicationKey was set but the message queue does not declare nativeDeduplication and the key-value store exposes no conditional write (cas); set taskDeduplicationFallback to \"open\" to proceed without deduplication, or use a backend that supports it.");
2172
- return {
2173
- kind: "open",
2174
- key
2175
- };
2176
- }
2177
- /**
2178
- * Executes the planned deduplication once the payloads are encoded. A native
2179
- * plan forwards its key to the queue; a `cas` plan claims the marker and stops
2180
- * the enqueue when it loses the race; an `open` plan logs and proceeds.
2181
- * @returns Whether to proceed, and the key (if any) to forward to the queue.
2182
- */
2183
- async function claimDeduplication(ctx, plan, taskName) {
2184
- switch (plan.kind) {
2185
- case "native": return {
2186
- proceed: true,
2187
- forwardedDeduplicationKey: plan.key
2188
- };
2189
- case "cas": {
2190
- const cacheKey = [...ctx.federation.kvPrefixes.taskDeduplication, plan.key];
2191
- const token = crypto.randomUUID();
2192
- if (!await ctx.federation.kv.cas(cacheKey, void 0, token, { ttl: ctx.federation.taskDeduplicationTtl })) return { proceed: false };
2193
- return {
2194
- proceed: true,
2195
- rollback: async () => {
2196
- await ctx.federation.kv.cas(cacheKey, token, void 0);
2197
- }
2198
- };
2199
- }
2200
- case "open": logger$1.debug("deduplicationKey {deduplicationKey} for task {taskName} ignored: the message queue declares no nativeDeduplication and the key-value store has no cas; proceeding (taskDeduplicationFallback is \"open\").", {
2201
- deduplicationKey: plan.key,
2202
- taskName
2203
- });
2204
- case "none": return { proceed: true };
2205
- default: throw new TypeError(`Unknown deduplication plan: ${JSON.stringify(plan)}`);
2206
- }
2207
- }
2208
- /**
2209
- * Sends the encoded messages to the queue, picking the bulk path when the
2210
- * queue implements `enqueueMany` and otherwise fanning out parallel single
2211
- * enqueues. The fan-out drops `deduplicationKey`, which is only ever set for a
2212
- * native plan that the bulk paths already cover.
2213
- */
2214
- async function dispatch(queue, messages, options) {
2215
- if (messages.length === 1) await queue.enqueue(messages[0], options);
2216
- else if (queue.enqueueMany != null) await queue.enqueueMany(messages, options);
2217
- else {
2218
- const fanoutOptions = {
2219
- delay: options.delay,
2220
- orderingKey: options.orderingKey
2221
- };
2222
- await Promise.all(messages.map((m) => queue.enqueue(m, fanoutOptions)));
2223
- }
2224
- }
2225
- /**
2226
- * Builds the per-payload encoder: validates and serializes the payload, then
2227
- * stamps the message envelope with a fresh id, the context's origin, and the
2228
- * active trace context. Curried so the batch encode reuses one bound encoder.
2229
- */
2230
- const encodeTaskMessage = (codec, origin, task, options) => async (data) => {
2231
- const encoded = await codec.encode(task.schema, data);
2232
- const carrier = {};
2233
- propagation.inject(context.active(), carrier);
2234
- return {
2235
- type: "task",
2236
- id: crypto.randomUUID(),
2237
- baseUrl: origin,
2238
- taskName: task.name,
2239
- data: encoded,
2240
- started: Temporal.Now.instant().toString(),
2241
- attempt: 0,
2242
- orderingKey: options.orderingKey,
2243
- traceContext: carrier
2244
- };
2245
- };
2246
- const logger$1 = getLogger([
2247
- "fedify",
2248
- "federation",
2249
- "task"
2250
- ]);
2251
- //#endregion
2252
2096
  //#region src/federation/webfinger.ts
2253
2097
  const logger = getLogger([
2254
2098
  "fedify",
@@ -2548,6 +2392,15 @@ function isPermanentRemoteContextError(error) {
2548
2392
  function isPermanentInboxParseError(error) {
2549
2393
  return error instanceof Error && (error.name === "UnsafeJsonLdError" || error instanceof InvalidContextReferenceError || isPermanentRemoteContextError(error) || error.name === "jsonld.SyntaxError" && !isRemoteContextLoadingFailure(error)) || error instanceof TypeError && (/^(Invalid JSON-LD:|Invalid type:|Unexpected type:|Invalid @id:)/.test(error.message) || isInvalidUrlTypeError(error));
2550
2394
  }
2395
+ function hasLinkedDataSignatureJsonLdProcessingError(error) {
2396
+ if (error.message.startsWith("Maximum deep iterations exceeded")) return true;
2397
+ const cause = error.cause instanceof Error ? error.cause : error.details?.cause;
2398
+ if (error.name === "jsonld.InvalidUrl" && error.details?.code === "loading remote context failed" && cause instanceof Error) return cause.message.startsWith("Maximum deep iterations exceeded") || cause.name.startsWith("jsonld.");
2399
+ return error.name !== "jsonld.InvalidUrl" && error.name.startsWith("jsonld.");
2400
+ }
2401
+ function isLinkedDataSignatureJsonLdProcessingError(error) {
2402
+ return error instanceof Error && hasLinkedDataSignatureJsonLdProcessingError(error);
2403
+ }
2551
2404
  /**
2552
2405
  * Create a new {@link Federation} instance.
2553
2406
  * @param options Parameters for initializing the instance.
@@ -2565,8 +2418,9 @@ var FederationImpl = class extends FederationBuilderImpl {
2565
2418
  inboxQueue;
2566
2419
  outboxQueue;
2567
2420
  fanoutQueue;
2568
- taskQueue;
2569
- startedQueues;
2421
+ inboxQueueStarted;
2422
+ outboxQueueStarted;
2423
+ fanoutQueueStarted;
2570
2424
  manuallyStartQueue;
2571
2425
  origin;
2572
2426
  documentLoaderFactory;
@@ -2580,10 +2434,6 @@ var FederationImpl = class extends FederationBuilderImpl {
2580
2434
  skipSignatureVerification;
2581
2435
  outboxRetryPolicy;
2582
2436
  inboxRetryPolicy;
2583
- taskRetryPolicy;
2584
- taskQueueResolution;
2585
- taskDeduplicationTtl;
2586
- taskDeduplicationFallback;
2587
2437
  circuitBreaker;
2588
2438
  activityTransformers;
2589
2439
  _tracerProvider;
@@ -2623,24 +2473,20 @@ var FederationImpl = class extends FederationBuilderImpl {
2623
2473
  httpMessageSignaturesSpec: ["_fedify", "httpMessageSignaturesSpec"],
2624
2474
  acceptSignatureNonce: ["_fedify", "acceptSignatureNonce"],
2625
2475
  circuitBreaker: ["_fedify", "circuit"],
2626
- taskDeduplication: ["_fedify", "taskDeduplication"],
2627
2476
  ...options.kvPrefixes ?? {}
2628
2477
  };
2629
2478
  if (options.queue == null) {
2630
2479
  this.inboxQueue = void 0;
2631
2480
  this.outboxQueue = void 0;
2632
2481
  this.fanoutQueue = void 0;
2633
- this.taskQueue = void 0;
2634
2482
  } else if ("enqueue" in options.queue && "listen" in options.queue) {
2635
2483
  this.inboxQueue = options.queue;
2636
2484
  this.outboxQueue = options.queue;
2637
2485
  this.fanoutQueue = options.queue;
2638
- this.taskQueue = void 0;
2639
2486
  } else {
2640
2487
  this.inboxQueue = options.queue.inbox;
2641
2488
  this.outboxQueue = options.queue.outbox;
2642
2489
  this.fanoutQueue = options.queue.fanout;
2643
- this.taskQueue = options.queue.task;
2644
2490
  }
2645
2491
  if (options.circuitBreaker !== false && this.outboxQueue != null) {
2646
2492
  this.circuitBreaker = new CircuitBreaker({
@@ -2661,7 +2507,9 @@ var FederationImpl = class extends FederationBuilderImpl {
2661
2507
  ]).warn("The configured key-value store does not support CAS; outbound delivery circuit breaker updates may race under concurrent workers.");
2662
2508
  }
2663
2509
  }
2664
- this.startedQueues = /* @__PURE__ */ new Set();
2510
+ this.inboxQueueStarted = false;
2511
+ this.outboxQueueStarted = false;
2512
+ this.fanoutQueueStarted = false;
2665
2513
  this.manuallyStartQueue = options.manuallyStartQueue ?? false;
2666
2514
  if (options.origin != null) if (typeof options.origin === "string") {
2667
2515
  if (!URL.canParse(options.origin) || !options.origin.match(/^https?:\/\//)) throw new TypeError(`Invalid origin: ${JSON.stringify(options.origin)}`);
@@ -2743,10 +2591,6 @@ var FederationImpl = class extends FederationBuilderImpl {
2743
2591
  this.inboxChallengePolicy = options.inboxChallengePolicy;
2744
2592
  this.outboxRetryPolicy = options.outboxRetryPolicy ?? createExponentialBackoffPolicy();
2745
2593
  this.inboxRetryPolicy = options.inboxRetryPolicy ?? createExponentialBackoffPolicy();
2746
- this.taskRetryPolicy = options.taskRetryPolicy ?? createExponentialBackoffPolicy();
2747
- this.taskQueueResolution = options.taskQueueResolution ?? "fallback";
2748
- this.taskDeduplicationTtl = Temporal.Duration.from(options.taskDeduplicationTtl ?? { hours: 1 });
2749
- this.taskDeduplicationFallback = options.taskDeduplicationFallback ?? "open";
2750
2594
  this.activityTransformers = options.activityTransformers ?? getDefaultActivityTransformers();
2751
2595
  this._tracerProvider = options.tracerProvider;
2752
2596
  if (benchmarkMode) {
@@ -2795,33 +2639,28 @@ var FederationImpl = class extends FederationBuilderImpl {
2795
2639
  _getTracer() {
2796
2640
  return this.tracerProvider.getTracer(name, version);
2797
2641
  }
2798
- resolveTaskQueue(taskName) {
2799
- const resolved = this.taskDefinitions.get(taskName)?.queue ?? this.taskQueue;
2800
- if (resolved != null) return resolved;
2801
- return this.taskQueueResolution === "strict" ? void 0 : this.outboxQueue;
2802
- }
2803
2642
  async _startQueueInternal(ctxData, signal, queue) {
2804
- const taskQueue = this.taskQueue ?? (this.taskQueueResolution === "fallback" ? this.outboxQueue : void 0);
2805
- const customQueues = this.taskDefinitions.values().map((def) => ["task", def.queue]);
2806
- const targets = [
2807
- ["inbox", this.inboxQueue],
2808
- ["outbox", this.outboxQueue],
2809
- ["fanout", this.fanoutQueue],
2810
- ["task", taskQueue],
2811
- ...customQueues
2812
- ];
2643
+ if (this.inboxQueue == null && this.outboxQueue == null) return;
2813
2644
  const logger = getLogger([
2814
2645
  "fedify",
2815
2646
  "federation",
2816
2647
  "queue"
2817
2648
  ]);
2818
2649
  const promises = [];
2819
- for (const [role, target] of targets) {
2820
- if (target == null || !(queue == null || queue === role)) continue;
2821
- if (this.startedQueues.has(target)) continue;
2822
- this.startedQueues.add(target);
2823
- logger.debug("Starting a {role} queue worker.", { role });
2824
- promises.push(target.listen((msg) => this.processQueuedTask(ctxData, msg), { signal }));
2650
+ if (this.inboxQueue != null && (queue == null || queue === "inbox") && !this.inboxQueueStarted) {
2651
+ logger.debug("Starting an inbox task worker.");
2652
+ this.inboxQueueStarted = true;
2653
+ promises.push(this.inboxQueue.listen((msg) => this.processQueuedTask(ctxData, msg), { signal }));
2654
+ }
2655
+ if (this.outboxQueue != null && this.outboxQueue !== this.inboxQueue && (queue == null || queue === "outbox") && !this.outboxQueueStarted) {
2656
+ logger.debug("Starting an outbox task worker.");
2657
+ this.outboxQueueStarted = true;
2658
+ promises.push(this.outboxQueue.listen((msg) => this.processQueuedTask(ctxData, msg), { signal }));
2659
+ }
2660
+ if (this.fanoutQueue != null && this.fanoutQueue !== this.inboxQueue && this.fanoutQueue !== this.outboxQueue && (queue == null || queue === "fanout") && !this.fanoutQueueStarted) {
2661
+ logger.debug("Starting a fanout task worker.");
2662
+ this.fanoutQueueStarted = true;
2663
+ promises.push(this.fanoutQueue.listen((msg) => this.processQueuedTask(ctxData, msg), { signal }));
2825
2664
  }
2826
2665
  await Promise.all(promises);
2827
2666
  }
@@ -2944,7 +2783,7 @@ var FederationImpl = class extends FederationBuilderImpl {
2944
2783
  }
2945
2784
  });
2946
2785
  });
2947
- } else if (message.type === "task") await this.#listenTaskMessage(contextData, message);
2786
+ }
2948
2787
  });
2949
2788
  }
2950
2789
  async #listenFanoutMessage(data, message) {
@@ -3508,77 +3347,6 @@ var FederationImpl = class extends FederationBuilderImpl {
3508
3347
  listenerSpan.end();
3509
3348
  });
3510
3349
  }
3511
- async #listenTaskMessage(contextData, message) {
3512
- const logger = getLogger([
3513
- "fedify",
3514
- "federation",
3515
- "task"
3516
- ]);
3517
- const def = this.taskDefinitions.get(message.taskName);
3518
- if (def == null) {
3519
- logger.warn("Received a custom task {taskName} with no registered handler; dropping.", { taskName: message.taskName });
3520
- return;
3521
- }
3522
- const context = this.#createContext(new URL(message.baseUrl), contextData);
3523
- let data;
3524
- try {
3525
- data = await context.codec.decode(def.schema, message.data);
3526
- } catch (error) {
3527
- logger.error("Custom task {taskName} payload could not be decoded or validated; dropping:\n{error}", {
3528
- taskName: message.taskName,
3529
- error
3530
- });
3531
- return;
3532
- }
3533
- try {
3534
- await def.handler(context, data);
3535
- } catch (error) {
3536
- if (def.onError != null) try {
3537
- await def.onError(context, error, data);
3538
- } catch (onErrorError) {
3539
- logger.error("onError for custom task {taskName} threw:\n{error}", {
3540
- taskName: message.taskName,
3541
- error: onErrorError
3542
- });
3543
- }
3544
- const queue = this.resolveTaskQueue(def.name);
3545
- if (queue?.nativeRetrial) throw error;
3546
- const retryPolicy = def.retryPolicy ?? this.taskRetryPolicy;
3547
- let elapsedTime = Temporal.Duration.from({ seconds: 0 });
3548
- try {
3549
- elapsedTime = Temporal.Instant.from(message.started).until(Temporal.Now.instant());
3550
- } catch (parseError) {
3551
- logger.error("Custom task {taskName} has an unparsable started time {started}; treating elapsedTime as zero:\n{error}", {
3552
- taskName: message.taskName,
3553
- started: message.started,
3554
- error: parseError
3555
- });
3556
- }
3557
- const delay = retryPolicy({
3558
- elapsedTime,
3559
- attempts: message.attempt
3560
- });
3561
- if (delay != null && queue != null) {
3562
- logger.error("Custom task {taskName} failed (attempt #{attempt}); retry...:\n{error}", {
3563
- taskName: message.taskName,
3564
- attempt: message.attempt,
3565
- error
3566
- });
3567
- const retryMessage = {
3568
- ...message,
3569
- attempt: message.attempt + 1
3570
- };
3571
- await queue.enqueue(retryMessage, {
3572
- delay: clampNegativeDelay(delay),
3573
- orderingKey: message.orderingKey
3574
- });
3575
- } else logger.error("Custom task {taskName} failed after {attempt} attempts; giving up:\n{error}", {
3576
- taskName: message.taskName,
3577
- attempt: message.attempt,
3578
- error
3579
- });
3580
- }
3581
- }
3582
3350
  startQueue(contextData, options = {}) {
3583
3351
  return this._startQueueInternal(contextData, options.signal, options.queue);
3584
3352
  }
@@ -3667,10 +3435,18 @@ var FederationImpl = class extends FederationBuilderImpl {
3667
3435
  privateKey: pair.privateKey
3668
3436
  }))
3669
3437
  });
3670
- else jsonLd = await signJsonLd(jsonLd, rsaKey.privateKey, rsaKey.keyId, {
3671
- contextLoader,
3672
- tracerProvider: this.tracerProvider
3673
- });
3438
+ else try {
3439
+ jsonLd = await signJsonLd(jsonLd, rsaKey.privateKey, rsaKey.keyId, {
3440
+ contextLoader,
3441
+ tracerProvider: this.tracerProvider
3442
+ });
3443
+ } catch (error) {
3444
+ if (!isLinkedDataSignatureJsonLdProcessingError(error)) throw error;
3445
+ logger.warn("Failed to create a Linked Data signature for the activity {activityId}. The activity will be sent without a Linked Data signature.", {
3446
+ activityId,
3447
+ error
3448
+ });
3449
+ }
3674
3450
  if (!hasProof) logger.warn("No supported key found to create a proof for the activity {activityId}. The activity will be sent without a proof. In order to create a proof, at least one Ed25519 key must be provided.", {
3675
3451
  activityId,
3676
3452
  keys: keys.map((pair) => ({
@@ -4155,7 +3931,6 @@ var ContextImpl = class ContextImpl {
4155
3931
  documentLoader;
4156
3932
  contextLoader;
4157
3933
  invokedFromActorKeyPairsDispatcher;
4158
- #codec;
4159
3934
  constructor({ url, federation, data, documentLoader, contextLoader, invokedFromActorKeyPairsDispatcher }) {
4160
3935
  this.url = url;
4161
3936
  this.federation = federation;
@@ -4164,18 +3939,6 @@ var ContextImpl = class ContextImpl {
4164
3939
  this.contextLoader = contextLoader;
4165
3940
  this.invokedFromActorKeyPairsDispatcher = invokedFromActorKeyPairsDispatcher;
4166
3941
  }
4167
- /**
4168
- * A {@link TaskCodec} bound to this context's loaders, used to encode
4169
- * and decode custom task payloads. Lazily created and cached so a context
4170
- * that never enqueues or dispatches a task pays nothing.
4171
- * @internal
4172
- */
4173
- get codec() {
4174
- return this.#codec ??= new TaskCodec(this);
4175
- }
4176
- get #enqueueTasks() {
4177
- return enqueueTasks(this);
4178
- }
4179
3942
  clone(data) {
4180
3943
  return new ContextImpl({
4181
3944
  url: this.url,
@@ -4494,12 +4257,6 @@ var ContextImpl = class ContextImpl {
4494
4257
  allowPrivateAddress: this.federation.allowPrivateAddress
4495
4258
  });
4496
4259
  }
4497
- async enqueueTask(task, data, options = {}) {
4498
- await this.#enqueueTasks(task, [data], options);
4499
- }
4500
- async enqueueTaskMany(task, payloads, options = {}) {
4501
- await this.#enqueueTasks(task, payloads, options);
4502
- }
4503
4260
  sendActivity(sender, recipients, activity, options = {}) {
4504
4261
  return this.tracerProvider.getTracer(name, version).startActiveSpan(this.federation.outboxQueue == null || options.immediate ? "activitypub.outbox" : "activitypub.fanout", {
4505
4262
  kind: this.federation.outboxQueue == null || options.immediate ? SpanKind.CLIENT : SpanKind.PRODUCER,
@@ -1,5 +1,5 @@
1
1
  /// <reference lib="esnext.temporal" />
2
- import { At as WebFingerLinksDispatcher, ct as ActorDispatcher, l as RequestContext, lt as ActorHandleMapper, st as ActorAliasMapper } from "./context-CYF8X0ft.cjs";
2
+ import { G as ActorDispatcher, K as ActorHandleMapper, W as ActorAliasMapper, l as RequestContext, pt as WebFingerLinksDispatcher } from "./context-BBVLF7lx.cjs";
3
3
  import { MeterProvider, Span, Tracer } from "@opentelemetry/api";
4
4
  import { RouterError, RouterOptions, RouterRouteResult } from "@fedify/uri-template";
5
5
 
@@ -1,5 +1,5 @@
1
1
  /// <reference lib="esnext.temporal" />
2
- import { At as WebFingerLinksDispatcher, ct as ActorDispatcher, l as RequestContext, lt as ActorHandleMapper, st as ActorAliasMapper } from "./context-BF5B4ZDk.js";
2
+ import { G as ActorDispatcher, K as ActorHandleMapper, W as ActorAliasMapper, l as RequestContext, pt as WebFingerLinksDispatcher } from "./context-BU6jSQdo.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
@@ -4,11 +4,11 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
4
  require("./chunk-DDcVe30Y.cjs");
5
5
  const require_transformers = require("./transformers-NeAONrAq.cjs");
6
6
  require("./compat/mod.cjs");
7
- const require_http = require("./http-D9p2_d2X.cjs");
8
- const require_middleware = require("./middleware-DUNeIkXN.cjs");
9
- const require_proof = require("./proof-yeAU1MyT.cjs");
7
+ const require_http = require("./http-EkV7OslM.cjs");
8
+ const require_middleware = require("./middleware-B0ujKP-0.cjs");
9
+ const require_proof = require("./proof-eZme7HYR.cjs");
10
10
  const require_types = require("./types-KC4QAoxe.cjs");
11
- const require_kv_cache = require("./kv-cache-Cna211RR.cjs");
11
+ const require_kv_cache = require("./kv-cache-CbB50co6.cjs");
12
12
  const require_federation_mod = require("./federation/mod.cjs");
13
13
  require("./nodeinfo/mod.cjs");
14
14
  require("./runtime/mod.cjs");
@@ -16,9 +16,9 @@ require("./sig/mod.cjs");
16
16
  require("./utils/mod.cjs");
17
17
  //#endregion
18
18
  exports.CircuitBreaker = require_middleware.CircuitBreaker;
19
- exports.InProcessMessageQueue = require_middleware.InProcessMessageQueue;
19
+ exports.InProcessMessageQueue = require_federation_mod.InProcessMessageQueue;
20
20
  exports.MemoryKvStore = require_federation_mod.MemoryKvStore;
21
- exports.ParallelMessageQueue = require_middleware.ParallelMessageQueue;
21
+ exports.ParallelMessageQueue = require_federation_mod.ParallelMessageQueue;
22
22
  exports.Router = require_federation_mod.Router;
23
23
  exports.RouterError = require_federation_mod.RouterError;
24
24
  exports.SendActivityError = require_middleware.SendActivityError;
package/dist/mod.d.cts CHANGED
@@ -2,18 +2,18 @@
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-CAM_bQXx.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-VyDTd4G3.cjs";
4
4
  import { i as getKeyOwner, n as GetKeyOwnerOptions, r as doesActorOwnKey, t as DoesActorOwnKeyOptions } from "./owner-DEvZuyOE.cjs";
5
- import { $ as CircuitBreakerFailurePolicy, A as Rfc6570Expression, At as WebFingerLinksDispatcher, B as TaskHandler, C as FederationStartQueueOptions, Ct as OutboxErrorHandler, D as InboxListenerSetters, Dt as SharedInboxKeyDispatcher, E as InboxChallengePolicy, Et as OutboxPermanentFailureHandler, F as Message, Ft as digest, G as createExponentialBackoffPolicy, H as CreateExponentialBackoffPolicyOptions, I as createFederationBuilder, It as ActivityTransformer, J as respondWithObjectIfAcceptable, K as RespondWithObjectOptions, L as TaskDefinition, M as FederationOrigin, Mt as SenderKeyPair, N as FederationQueueOptions, Nt as PageItems, O as ObjectCallbackSetters, Ot as UnverifiedActivityHandler, P as createFederation, Pt as buildCollectionSynchronizationHeader, Q as CircuitBreakerCreateOptions, R as TaskDefinitionOptions, S as FederationOptions, St as ObjectDispatcher, T as IdempotencyStrategy, Tt as OutboxListenerErrorHandler, U as RetryContext, V as TaskRegistry, W as RetryPolicy, X as CircuitBreakerActivityDrop, Y as CircuitBreaker, Z as CircuitBreakerBeforeSendDecision, _ as Federatable, _t as CustomCollectionDispatcher, a as GetSignedKeyOptions, at as normalizeCircuitBreakerOptions, b as FederationBuilder, bt as NodeInfoDispatcher, c as ParseUriResult, ct as ActorDispatcher, d as SendActivityOptions, dt as AuthorizePredicate, et as CircuitBreakerKvState, f as SendActivityOptionsForCollection, ft as CollectionCounter, g as CustomCollectionCallbackSetters, gt as CustomCollectionCursor, h as ConstructorWithTypeId, ht as CustomCollectionCounter, i as GetActorOptions, it as NormalizedCircuitBreakerOptions, j as FederationKvPrefixes, jt as SendActivityError, k as OutboxListenerSetters, kt as UnverifiedActivityReason, l as RequestContext, lt as ActorHandleMapper, m as CollectionCallbackSetters, mt as CollectionDispatcher, n as Context, nt as CircuitBreakerState, o as InboxContext, ot as parseCircuitBreakerKvState, p as ActorCallbackSetters, pt as CollectionCursor, q as respondWithObject, r as ForwardActivityOptions, rt as CircuitBreakerStateChange, s as OutboxContext, st as ActorAliasMapper, t as ActorKeyPair, tt as CircuitBreakerOptions, u as RouteActivityOptions, ut as ActorKeyPairsDispatcher, v as Federation, vt as InboxErrorHandler, w as IdempotencyKeyCallback, wt as OutboxListener, x as FederationFetchOptions, xt as ObjectAuthorizePredicate, y as FederationBenchmarkOptions, yt as InboxListener, z as TaskEnqueueOptions } from "./context-CYF8X0ft.cjs";
5
+ import { $ as CustomCollectionCursor, A as Rfc6570Expression, At as parseCircuitBreakerKvState, B as createFederationBuilder, C as FederationStartQueueOptions, Ct as CircuitBreakerFailurePolicy, D as InboxListenerSetters, Dt as CircuitBreakerStateChange, E as InboxChallengePolicy, Et as CircuitBreakerState, F as CreateExponentialBackoffPolicyOptions, G as ActorDispatcher, H as respondWithObject, I as RetryContext, J as AuthorizePredicate, K as ActorHandleMapper, L as RetryPolicy, M as FederationOrigin, N as FederationQueueOptions, O as ObjectCallbackSetters, Ot as NormalizedCircuitBreakerOptions, P as createFederation, Q as CustomCollectionCounter, R as createExponentialBackoffPolicy, S as FederationOptions, St as CircuitBreakerCreateOptions, T as IdempotencyStrategy, Tt as CircuitBreakerOptions, U as respondWithObjectIfAcceptable, V as RespondWithObjectOptions, W as ActorAliasMapper, X as CollectionCursor, Y as CollectionCounter, Z as CollectionDispatcher, _ as Federatable, _t as buildCollectionSynchronizationHeader, a as GetSignedKeyOptions, at as ObjectDispatcher, b as FederationBuilder, bt as CircuitBreakerActivityDrop, c as ParseUriResult, ct as OutboxListenerErrorHandler, d as SendActivityOptions, dt as UnverifiedActivityHandler, et as CustomCollectionDispatcher, f as SendActivityOptionsForCollection, ft as UnverifiedActivityReason, g as CustomCollectionCallbackSetters, gt as PageItems, h as ConstructorWithTypeId, ht as SenderKeyPair, i as GetActorOptions, it as ObjectAuthorizePredicate, j as FederationKvPrefixes, jt as ActivityTransformer, k as OutboxListenerSetters, kt as normalizeCircuitBreakerOptions, l as RequestContext, lt as OutboxPermanentFailureHandler, m as CollectionCallbackSetters, mt as SendActivityError, n as Context, nt as InboxListener, o as InboxContext, ot as OutboxErrorHandler, p as ActorCallbackSetters, pt as WebFingerLinksDispatcher, q as ActorKeyPairsDispatcher, r as ForwardActivityOptions, rt as NodeInfoDispatcher, s as OutboxContext, st as OutboxListener, t as ActorKeyPair, tt as InboxErrorHandler, u as RouteActivityOptions, ut as SharedInboxKeyDispatcher, v as Federation, vt as digest, w as IdempotencyKeyCallback, wt as CircuitBreakerKvState, x as FederationFetchOptions, xt as CircuitBreakerBeforeSendDecision, y as FederationBenchmarkOptions, yt as CircuitBreaker, z as Message } from "./context-BBVLF7lx.cjs";
6
6
  import { a as MemoryKvStore, i as KvStoreSetOptions, n as KvStore, r as KvStoreListEntry, t as KvKey } from "./kv-gJ8LYbxX.cjs";
7
- import { a as MessageQueueEnqueueOptions, i as MessageQueueDepth, n as InProcessMessageQueueOptions, o as MessageQueueListenOptions, r as MessageQueue, s as ParallelMessageQueue, t as InProcessMessageQueue } from "./mq-DXMt_qCY.cjs";
7
+ import { a as MessageQueueEnqueueOptions, i as MessageQueueDepth, n as InProcessMessageQueueOptions, o as MessageQueueListenOptions, r as MessageQueue, s as ParallelMessageQueue, t as InProcessMessageQueue } from "./mq-D8uSFzxe.cjs";
8
8
  import { actorDehydrator, autoIdAssigner, getDefaultActivityTransformers } from "./compat/mod.cjs";
9
- import { a as RouterOptions, i as RouterError, n as handleWebFinger, o as RouterRouteResult, r as Router, t as WebFingerHandlerParameters } from "./mod-BHEB3xhE.cjs";
9
+ import { a as RouterOptions, i as RouterError, n as handleWebFinger, o as RouterRouteResult, r as Router, t as WebFingerHandlerParameters } from "./mod-C0F6kvgS.cjs";
10
10
  import { _ as hasSignatureLike, a as createProof, b as verifySignature, c as verifyObject, d as SignJsonLdOptions, f as VerifyJsonLdOptions, g as detachSignature, h as createSignature, i as VerifyProofOptions, l as verifyProof, m as attachSignature, n as SignObjectOptions, o as hasProofLike, p as VerifySignatureOptions, r as VerifyObjectOptions, s as signObject, t as CreateProofOptions, u as CreateSignatureOptions, v as signJsonLd, y as verifyJsonLd } from "./mod-B0hW12_O.cjs";
11
11
  import { n as getAuthenticatedDocumentLoader, t as kvCache } from "./mod-yvIXFAEi.cjs";
12
12
  export * from "@fedify/vocab-runtime";
13
13
 
14
14
  //#region src/mod.d.ts
15
15
  declare namespace mod_d_exports {
16
- export { AcceptSignatureMember, AcceptSignatureParameters, ActivityTransformer, ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CircuitBreaker, CircuitBreakerActivityDrop, CircuitBreakerBeforeSendDecision, CircuitBreakerCreateOptions, CircuitBreakerFailurePolicy, CircuitBreakerKvState, CircuitBreakerOptions, CircuitBreakerState, CircuitBreakerStateChange, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CreateProofOptions, CreateSignatureOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, DoesActorOwnKeyOptions, Federatable, Federation, FederationBenchmarkOptions, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, FetchKeyDetailedResult, FetchKeyErrorResult, FetchKeyOptions, FetchKeyResult, ForwardActivityOptions, FulfillAcceptSignatureResult, GetActorOptions, GetKeyOwnerOptions, GetNodeInfoOptions, GetSignedKeyOptions, HttpMessageSignaturesSpec, HttpMessageSignaturesSpecDeterminer, IdempotencyKeyCallback, IdempotencyStrategy, InProcessMessageQueue, InProcessMessageQueueOptions, InboundService, InboxChallengePolicy, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, JsonValue, KeyCache, KvKey, KvStore, KvStoreListEntry, KvStoreSetOptions, MemoryKvStore, Message, MessageQueue, MessageQueueDepth, MessageQueueEnqueueOptions, MessageQueueListenOptions, NodeInfo, NodeInfoDispatcher, NormalizedCircuitBreakerOptions, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboundService, OutboxContext, OutboxErrorHandler, OutboxListener, OutboxListenerErrorHandler, OutboxListenerSetters, OutboxPermanentFailureHandler, PageItems, ParallelMessageQueue, ParseNodeInfoOptions, ParseUriResult, Protocol, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, Rfc6570Expression, Rfc9421SignRequestOptions, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityError, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, Services, SharedInboxKeyDispatcher, SignJsonLdOptions, SignObjectOptions, SignRequestOptions, Software, TaskDefinition, TaskDefinitionOptions, TaskEnqueueOptions, TaskHandler, TaskRegistry, UnverifiedActivityHandler, UnverifiedActivityReason, Usage, VerifyJsonLdOptions, VerifyObjectOptions, VerifyProofOptions, VerifyRequestDetailedResult, VerifyRequestFailureReason, VerifyRequestOptions, VerifySignatureOptions, WebFingerHandlerParameters, WebFingerLinksDispatcher, actorDehydrator, attachSignature, autoIdAssigner, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, createProof, createSignature, detachSignature, digest, doesActorOwnKey, exportJwk, fetchKey, fetchKeyDetailed, formatAcceptSignature, fulfillAcceptSignature, generateCryptoKeyPair, getAuthenticatedDocumentLoader, getDefaultActivityTransformers, getKeyOwner, getNodeInfo, handleWebFinger, hasProofLike, hasSignatureLike, importJwk, kvCache, nodeInfoToJson, normalizeCircuitBreakerOptions, parseAcceptSignature, parseCircuitBreakerKvState, parseNodeInfo, respondWithObject, respondWithObjectIfAcceptable, signJsonLd, signObject, signRequest, validateAcceptSignature, verifyJsonLd, verifyObject, verifyProof, verifyRequest, verifyRequestDetailed, verifySignature };
16
+ export { AcceptSignatureMember, AcceptSignatureParameters, ActivityTransformer, ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CircuitBreaker, CircuitBreakerActivityDrop, CircuitBreakerBeforeSendDecision, CircuitBreakerCreateOptions, CircuitBreakerFailurePolicy, CircuitBreakerKvState, CircuitBreakerOptions, CircuitBreakerState, CircuitBreakerStateChange, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CreateProofOptions, CreateSignatureOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, DoesActorOwnKeyOptions, Federatable, Federation, FederationBenchmarkOptions, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, FetchKeyDetailedResult, FetchKeyErrorResult, FetchKeyOptions, FetchKeyResult, ForwardActivityOptions, FulfillAcceptSignatureResult, GetActorOptions, GetKeyOwnerOptions, GetNodeInfoOptions, GetSignedKeyOptions, HttpMessageSignaturesSpec, HttpMessageSignaturesSpecDeterminer, IdempotencyKeyCallback, IdempotencyStrategy, InProcessMessageQueue, InProcessMessageQueueOptions, InboundService, InboxChallengePolicy, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, JsonValue, KeyCache, KvKey, KvStore, KvStoreListEntry, KvStoreSetOptions, MemoryKvStore, Message, MessageQueue, MessageQueueDepth, MessageQueueEnqueueOptions, MessageQueueListenOptions, NodeInfo, NodeInfoDispatcher, NormalizedCircuitBreakerOptions, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboundService, OutboxContext, OutboxErrorHandler, OutboxListener, OutboxListenerErrorHandler, OutboxListenerSetters, OutboxPermanentFailureHandler, PageItems, ParallelMessageQueue, ParseNodeInfoOptions, ParseUriResult, Protocol, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, Rfc6570Expression, Rfc9421SignRequestOptions, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityError, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, Services, SharedInboxKeyDispatcher, SignJsonLdOptions, SignObjectOptions, SignRequestOptions, Software, UnverifiedActivityHandler, UnverifiedActivityReason, Usage, VerifyJsonLdOptions, VerifyObjectOptions, VerifyProofOptions, VerifyRequestDetailedResult, VerifyRequestFailureReason, VerifyRequestOptions, VerifySignatureOptions, WebFingerHandlerParameters, WebFingerLinksDispatcher, actorDehydrator, attachSignature, autoIdAssigner, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, createProof, createSignature, detachSignature, digest, doesActorOwnKey, exportJwk, fetchKey, fetchKeyDetailed, formatAcceptSignature, fulfillAcceptSignature, generateCryptoKeyPair, getAuthenticatedDocumentLoader, getDefaultActivityTransformers, getKeyOwner, getNodeInfo, handleWebFinger, hasProofLike, hasSignatureLike, importJwk, kvCache, nodeInfoToJson, normalizeCircuitBreakerOptions, parseAcceptSignature, parseCircuitBreakerKvState, parseNodeInfo, respondWithObject, respondWithObjectIfAcceptable, signJsonLd, signObject, signRequest, validateAcceptSignature, verifyJsonLd, verifyObject, verifyProof, verifyRequest, verifyRequestDetailed, verifySignature };
17
17
  }
18
18
  //#endregion
19
- export { AcceptSignatureMember, AcceptSignatureParameters, ActivityTransformer, ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CircuitBreaker, CircuitBreakerActivityDrop, CircuitBreakerBeforeSendDecision, CircuitBreakerCreateOptions, CircuitBreakerFailurePolicy, CircuitBreakerKvState, CircuitBreakerOptions, CircuitBreakerState, CircuitBreakerStateChange, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CreateProofOptions, CreateSignatureOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, DoesActorOwnKeyOptions, Federatable, Federation, FederationBenchmarkOptions, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, FetchKeyDetailedResult, FetchKeyErrorResult, FetchKeyOptions, FetchKeyResult, ForwardActivityOptions, FulfillAcceptSignatureResult, GetActorOptions, GetKeyOwnerOptions, GetNodeInfoOptions, GetSignedKeyOptions, HttpMessageSignaturesSpec, HttpMessageSignaturesSpecDeterminer, IdempotencyKeyCallback, IdempotencyStrategy, InProcessMessageQueue, InProcessMessageQueueOptions, InboundService, InboxChallengePolicy, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, JsonValue, KeyCache, KvKey, KvStore, KvStoreListEntry, KvStoreSetOptions, MemoryKvStore, Message, MessageQueue, MessageQueueDepth, MessageQueueEnqueueOptions, MessageQueueListenOptions, NodeInfo, NodeInfoDispatcher, NormalizedCircuitBreakerOptions, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboundService, OutboxContext, OutboxErrorHandler, OutboxListener, OutboxListenerErrorHandler, OutboxListenerSetters, OutboxPermanentFailureHandler, PageItems, ParallelMessageQueue, ParseNodeInfoOptions, ParseUriResult, Protocol, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, Rfc6570Expression, Rfc9421SignRequestOptions, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityError, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, Services, SharedInboxKeyDispatcher, SignJsonLdOptions, SignObjectOptions, SignRequestOptions, Software, TaskDefinition, TaskDefinitionOptions, TaskEnqueueOptions, TaskHandler, TaskRegistry, UnverifiedActivityHandler, UnverifiedActivityReason, Usage, VerifyJsonLdOptions, VerifyObjectOptions, VerifyProofOptions, VerifyRequestDetailedResult, VerifyRequestFailureReason, VerifyRequestOptions, VerifySignatureOptions, WebFingerHandlerParameters, WebFingerLinksDispatcher, actorDehydrator, attachSignature, autoIdAssigner, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, createProof, createSignature, detachSignature, digest, doesActorOwnKey, exportJwk, fetchKey, fetchKeyDetailed, formatAcceptSignature, fulfillAcceptSignature, generateCryptoKeyPair, getAuthenticatedDocumentLoader, getDefaultActivityTransformers, getKeyOwner, getNodeInfo, handleWebFinger, hasProofLike, hasSignatureLike, importJwk, kvCache, nodeInfoToJson, normalizeCircuitBreakerOptions, parseAcceptSignature, parseCircuitBreakerKvState, parseNodeInfo, respondWithObject, respondWithObjectIfAcceptable, signJsonLd, signObject, signRequest, validateAcceptSignature, verifyJsonLd, verifyObject, verifyProof, verifyRequest, verifyRequestDetailed, verifySignature };
19
+ export { AcceptSignatureMember, AcceptSignatureParameters, ActivityTransformer, ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CircuitBreaker, CircuitBreakerActivityDrop, CircuitBreakerBeforeSendDecision, CircuitBreakerCreateOptions, CircuitBreakerFailurePolicy, CircuitBreakerKvState, CircuitBreakerOptions, CircuitBreakerState, CircuitBreakerStateChange, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CreateProofOptions, CreateSignatureOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, DoesActorOwnKeyOptions, Federatable, Federation, FederationBenchmarkOptions, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, FetchKeyDetailedResult, FetchKeyErrorResult, FetchKeyOptions, FetchKeyResult, ForwardActivityOptions, FulfillAcceptSignatureResult, GetActorOptions, GetKeyOwnerOptions, GetNodeInfoOptions, GetSignedKeyOptions, HttpMessageSignaturesSpec, HttpMessageSignaturesSpecDeterminer, IdempotencyKeyCallback, IdempotencyStrategy, InProcessMessageQueue, InProcessMessageQueueOptions, InboundService, InboxChallengePolicy, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, JsonValue, KeyCache, KvKey, KvStore, KvStoreListEntry, KvStoreSetOptions, MemoryKvStore, Message, MessageQueue, MessageQueueDepth, MessageQueueEnqueueOptions, MessageQueueListenOptions, NodeInfo, NodeInfoDispatcher, NormalizedCircuitBreakerOptions, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboundService, OutboxContext, OutboxErrorHandler, OutboxListener, OutboxListenerErrorHandler, OutboxListenerSetters, OutboxPermanentFailureHandler, PageItems, ParallelMessageQueue, ParseNodeInfoOptions, ParseUriResult, Protocol, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, Rfc6570Expression, Rfc9421SignRequestOptions, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityError, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, Services, SharedInboxKeyDispatcher, SignJsonLdOptions, SignObjectOptions, SignRequestOptions, Software, UnverifiedActivityHandler, UnverifiedActivityReason, Usage, VerifyJsonLdOptions, VerifyObjectOptions, VerifyProofOptions, VerifyRequestDetailedResult, VerifyRequestFailureReason, VerifyRequestOptions, VerifySignatureOptions, WebFingerHandlerParameters, WebFingerLinksDispatcher, actorDehydrator, attachSignature, autoIdAssigner, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, createProof, createSignature, detachSignature, digest, doesActorOwnKey, exportJwk, fetchKey, fetchKeyDetailed, formatAcceptSignature, fulfillAcceptSignature, generateCryptoKeyPair, getAuthenticatedDocumentLoader, getDefaultActivityTransformers, getKeyOwner, getNodeInfo, handleWebFinger, hasProofLike, hasSignatureLike, importJwk, kvCache, nodeInfoToJson, normalizeCircuitBreakerOptions, parseAcceptSignature, parseCircuitBreakerKvState, parseNodeInfo, respondWithObject, respondWithObjectIfAcceptable, signJsonLd, signObject, signRequest, validateAcceptSignature, verifyJsonLd, verifyObject, verifyProof, verifyRequest, verifyRequestDetailed, verifySignature };