@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
@@ -66,7 +66,7 @@ const testDefinitions = [];
66
66
  //#endregion
67
67
  //#region src/testing/context.ts
68
68
  function createContext(values) {
69
- const { federation, url = new URL("http://example.com/"), canonicalOrigin, data, documentLoader, contextLoader, meterProvider, tracerProvider, clone, getNodeInfoUri, getActorUri, getObjectUri, getCollectionUri, getOutboxUri, getInboxUri, getFollowingUri, getFollowersUri, getLikedUri, getFeaturedUri, getFeaturedTagsUri, parseUri, getActorKeyPairs, getDocumentLoader, lookupObject: lookupObject$1, traverseCollection: traverseCollection$1, lookupNodeInfo, lookupWebFinger: lookupWebFinger$1, sendActivity, routeActivity, enqueueTask, enqueueTaskMany } = values;
69
+ const { federation, url = new URL("http://example.com/"), canonicalOrigin, data, documentLoader, contextLoader, meterProvider, tracerProvider, clone, getNodeInfoUri, getActorUri, getObjectUri, getCollectionUri, getOutboxUri, getInboxUri, getFollowingUri, getFollowersUri, getLikedUri, getFeaturedUri, getFeaturedTagsUri, parseUri, getActorKeyPairs, getDocumentLoader, lookupObject: lookupObject$1, traverseCollection: traverseCollection$1, lookupNodeInfo, lookupWebFinger: lookupWebFinger$1, sendActivity, routeActivity } = values;
70
70
  function throwRouterError() {
71
71
  throw new RouterError("Not implemented");
72
72
  }
@@ -126,12 +126,6 @@ function createContext(values) {
126
126
  }),
127
127
  routeActivity: routeActivity ?? ((_params) => {
128
128
  throw new Error("Not implemented");
129
- }),
130
- enqueueTask: enqueueTask ?? ((_task, _data, _options) => {
131
- throw new Error("Not implemented");
132
- }),
133
- enqueueTaskMany: enqueueTaskMany ?? ((_task, _payloads, _options) => {
134
- throw new Error("Not implemented");
135
129
  })
136
130
  };
137
131
  }
@@ -182,4 +176,4 @@ function createOutboxContext(args) {
182
176
  };
183
177
  }
184
178
  //#endregion
185
- export { testDefinitions as a, mockDocumentLoader as i, createOutboxContext as n, createRequestContext as r, createInboxContext as t };
179
+ export { testDefinitions as i, createOutboxContext as n, createRequestContext as r, createInboxContext as t };
@@ -3,6 +3,6 @@ import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  //#region deno.json
5
5
  var name = "@fedify/fedify";
6
- var version = "2.4.0-dev.1504+756217cc";
6
+ var version = "2.4.0-dev.1528+fea670ad";
7
7
  //#endregion
8
8
  export { version as n, name as t };
@@ -1,11 +1,11 @@
1
1
  import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { o as validateCryptoKey } from "./key-BM_SRwBV.mjs";
5
- import { n as doubleKnock } from "./http-BNFQkiEZ.mjs";
4
+ import { o as validateCryptoKey } from "./key-Ct8zNgGk.mjs";
5
+ import { n as doubleKnock } from "./http-L7wqkbZR.mjs";
6
6
  import { getLogger } from "@logtape/logtape";
7
- import { curry } from "es-toolkit";
8
7
  import { UrlError, createActivityPubRequest, getRemoteDocument, logRequest, validatePublicUrl } from "@fedify/vocab-runtime";
8
+ import { curry } from "es-toolkit";
9
9
  //#region src/utils/docloader.ts
10
10
  const logger = getLogger([
11
11
  "fedify",
@@ -1,11 +1,11 @@
1
1
  import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { t as MemoryKvStore } from "../kv-CIvR3Non.mjs";
5
- import { t as assertEquals } from "../assert_equals-PBVKNMJd.mjs";
6
- import { r as assertExists } from "../std__assert-Dh6uLf_q.mjs";
7
- import { t as assertThrows } from "../assert_throws-zN79lgIC.mjs";
8
- import { r as createFederationBuilder } from "../builder-Ck0Fl_a5.mjs";
4
+ import { t as assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
5
+ import { r as assertExists } from "../std__assert-BBjXFNOb.mjs";
6
+ import { t as assertThrows } from "../assert_throws-BOkhLGYc.mjs";
7
+ import { t as MemoryKvStore } from "../kv-rV3vodCc.mjs";
8
+ import { r as createFederationBuilder } from "../builder-B6myMguW.mjs";
9
9
  import { DisallowedOperatorError, DisallowedVarSpecModifierError, DuplicateRouteVariableError, RouteTemplateOptionsNotMatchedError, RouterError } from "@fedify/uri-template";
10
10
  import { Activity, Note, Person } from "@fedify/vocab";
11
11
  import { test } from "@fedify/fixture";
@@ -1,11 +1,11 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { t as MemoryKvStore } from "../kv-CIvR3Non.mjs";
5
- import { t as assertEquals } from "../assert_equals-PBVKNMJd.mjs";
6
- import "../std__assert-Dh6uLf_q.mjs";
7
- import { t as assertThrows } from "../assert_throws-zN79lgIC.mjs";
8
- import { n as normalizeCircuitBreakerOptions, r as parseCircuitBreakerKvState, t as CircuitBreaker } from "../circuit-breaker-hJBB6jwA.mjs";
4
+ import { t as assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
5
+ import "../std__assert-BBjXFNOb.mjs";
6
+ import { t as assertThrows } from "../assert_throws-BOkhLGYc.mjs";
7
+ import { t as MemoryKvStore } from "../kv-rV3vodCc.mjs";
8
+ import { n as normalizeCircuitBreakerOptions, r as parseCircuitBreakerKvState, t as CircuitBreaker } from "../circuit-breaker-CSWsyoef.mjs";
9
9
  import { test } from "@fedify/fixture";
10
10
  //#region src/federation/circuit-breaker.test.ts
11
11
  var AlwaysConflictingKvStore = class extends MemoryKvStore {
@@ -1,9 +1,9 @@
1
1
  import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { t as assertEquals } from "../assert_equals-PBVKNMJd.mjs";
5
- import "../std__assert-Dh6uLf_q.mjs";
6
- import { n as digest, t as buildCollectionSynchronizationHeader } from "../collection-Dp5ky45w.mjs";
4
+ import { t as assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
5
+ import "../std__assert-BBjXFNOb.mjs";
6
+ import { n as digest, t as buildCollectionSynchronizationHeader } from "../collection-Cc3DVAhE.mjs";
7
7
  import { test } from "@fedify/fixture";
8
8
  import { decodeHex } from "byte-encodings/hex";
9
9
  //#region src/federation/collection.test.ts
@@ -1,19 +1,19 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as createOutboxContext, r as createRequestContext, t as createInboxContext } from "../context-BBRTgkrs.mjs";
5
- import { t as MemoryKvStore } from "../kv-CIvR3Non.mjs";
6
- import { t as assertEquals } from "../assert_equals-PBVKNMJd.mjs";
7
- import "../std__assert-Dh6uLf_q.mjs";
8
- import { n as assertGreaterOrEqual, t as assertRejects } from "../assert_rejects-DAdaaIWM.mjs";
9
- import { t as assertInstanceOf } from "../assert_instance_of-CxoC8bVq.mjs";
10
- import { t as assert } from "../assert-DvVHoIZ0.mjs";
11
- import { r as parseAcceptSignature } from "../accept-CgDcxvjV.mjs";
12
- import { s as signRequest } from "../http-BNFQkiEZ.mjs";
13
- import { a as rsaPrivateKey3, c as rsaPublicKey3, s as rsaPublicKey2 } from "../keys-CSYsOMFG.mjs";
14
- import { a as compactJsonLd, p as signJsonLd } from "../ld-ubkf03eb.mjs";
15
- import { c as handleActor, d as handleInbox, f as handleObject, h as respondWithObjectIfAcceptable, l as handleCollection, m as respondWithObject, o as createFederation, p as handleOutbox, u as handleCustomCollection } from "../middleware-iP9VRMus.mjs";
16
- import { t as ActivityListenerSet } from "../activity-listener-BeTGV3wc.mjs";
4
+ import { n as createOutboxContext, r as createRequestContext, t as createInboxContext } from "../context-DVoTs_wM.mjs";
5
+ import { t as assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
6
+ import "../std__assert-BBjXFNOb.mjs";
7
+ import { n as assertGreaterOrEqual, t as assertRejects } from "../assert_rejects-DN60FHPX.mjs";
8
+ import { t as assertInstanceOf } from "../assert_instance_of-DBC5X09g.mjs";
9
+ import { t as assert } from "../assert-OguE97r2.mjs";
10
+ import { r as parseAcceptSignature } from "../accept-CPkZzmGN.mjs";
11
+ import { s as signRequest } from "../http-L7wqkbZR.mjs";
12
+ import { a as rsaPrivateKey3, c as rsaPublicKey3, s as rsaPublicKey2 } from "../keys-DGu1NFwu.mjs";
13
+ import { a as compactJsonLd, p as signJsonLd } from "../ld-D6I7H18J.mjs";
14
+ import { t as MemoryKvStore } from "../kv-rV3vodCc.mjs";
15
+ import { c as handleActor, d as handleInbox, f as handleObject, h as respondWithObjectIfAcceptable, l as handleCollection, m as respondWithObject, o as createFederation, p as handleOutbox, u as handleCustomCollection } from "../middleware-RxFBNV2C.mjs";
16
+ import { t as ActivityListenerSet } from "../activity-listener-tztVvlNb.mjs";
17
17
  import { Activity, Create, Note, Person, Tombstone } from "@fedify/vocab";
18
18
  import { createTestMeterProvider, createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
19
19
  import { FetchError } from "@fedify/vocab-runtime";
@@ -1,12 +1,12 @@
1
1
  import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { t as MemoryKvStore } from "../kv-CIvR3Non.mjs";
5
- import { t as assertEquals } from "../assert_equals-PBVKNMJd.mjs";
6
- import "../std__assert-Dh6uLf_q.mjs";
7
- import { n as ed25519PrivateKey, r as ed25519PublicKey, t as ed25519Multikey } from "../keys-CSYsOMFG.mjs";
8
- import { r as signObject } from "../proof-Q781Ks5q.mjs";
9
- import { o as createFederation } from "../middleware-iP9VRMus.mjs";
4
+ import { t as assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
5
+ import "../std__assert-BBjXFNOb.mjs";
6
+ import { n as ed25519PrivateKey, r as ed25519PublicKey, t as ed25519Multikey } from "../keys-DGu1NFwu.mjs";
7
+ import { r as signObject } from "../proof-BJKoRFBc.mjs";
8
+ import { t as MemoryKvStore } from "../kv-rV3vodCc.mjs";
9
+ import { o as createFederation } from "../middleware-RxFBNV2C.mjs";
10
10
  import { Create, Follow, Person } from "@fedify/vocab";
11
11
  import { mockDocumentLoader, test } from "@fedify/fixture";
12
12
  //#region src/federation/idempotency.test.ts
@@ -1,9 +1,9 @@
1
1
  import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { t as assertEquals } from "../assert_equals-PBVKNMJd.mjs";
5
- import { t as assertThrows } from "../assert_throws-zN79lgIC.mjs";
6
- import { t as ActivityListenerSet } from "../activity-listener-BeTGV3wc.mjs";
4
+ import { t as assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
5
+ import { t as assertThrows } from "../assert_throws-BOkhLGYc.mjs";
6
+ import { t as ActivityListenerSet } from "../activity-listener-tztVvlNb.mjs";
7
7
  import { Activity, Create, Invite, Offer, Update } from "@fedify/vocab";
8
8
  import { test } from "@fedify/fixture";
9
9
  //#region src/federation/inbox.test.ts
@@ -1,11 +1,11 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { t as MemoryKvStore } from "../kv-CIvR3Non.mjs";
5
- import { t as assertEquals } from "../assert_equals-PBVKNMJd.mjs";
6
- import { t as assertInstanceOf } from "../assert_instance_of-CxoC8bVq.mjs";
7
- import { t as assert } from "../assert-DvVHoIZ0.mjs";
8
- import { t as KvKeyCache } from "../keycache-CaOR6NYg.mjs";
4
+ import { t as assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
5
+ import { t as assertInstanceOf } from "../assert_instance_of-DBC5X09g.mjs";
6
+ import { t as assert } from "../assert-OguE97r2.mjs";
7
+ import { t as MemoryKvStore } from "../kv-rV3vodCc.mjs";
8
+ import { t as KvKeyCache } from "../keycache-BeU0LCII.mjs";
9
9
  import { CryptographicKey, Multikey } from "@fedify/vocab";
10
10
  import { test } from "@fedify/fixture";
11
11
  //#region src/federation/keycache.test.ts
@@ -1,9 +1,9 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { t as MemoryKvStore } from "../kv-CIvR3Non.mjs";
5
- import { t as assertEquals } from "../assert_equals-PBVKNMJd.mjs";
6
- import "../std__assert-Dh6uLf_q.mjs";
4
+ import { t as assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
5
+ import "../std__assert-BBjXFNOb.mjs";
6
+ import { t as MemoryKvStore } from "../kv-rV3vodCc.mjs";
7
7
  import { test } from "@fedify/fixture";
8
8
  //#region src/federation/kv.test.ts
9
9
  test("MemoryKvStore", async (t) => {
@@ -1,10 +1,10 @@
1
1
  import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { t as assertEquals } from "../assert_equals-PBVKNMJd.mjs";
5
- import "../std__assert-Dh6uLf_q.mjs";
6
- import { t as assertRejects } from "../assert_rejects-DAdaaIWM.mjs";
7
- import { _ as recordKeyLookup, 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, m as recordDocumentFetch, p as recordDocumentCache, r as getFederationMetrics, t as classifyFetchError, u as recordCollectionPageItems, v as recordOutboxActivity, x as registerQueueDepthGauge, y as recordOutboxEnqueue } from "../metrics-BXR36qzu.mjs";
4
+ import { t as assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
5
+ import "../std__assert-BBjXFNOb.mjs";
6
+ import { t as assertRejects } from "../assert_rejects-DN60FHPX.mjs";
7
+ import { _ as recordKeyLookup, 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, m as recordDocumentFetch, p as recordDocumentCache, r as getFederationMetrics, t as classifyFetchError, u as recordCollectionPageItems, v as recordOutboxActivity, x as registerQueueDepthGauge, y as recordOutboxEnqueue } from "../metrics-DvClPYaE.mjs";
8
8
  import { createTestMeterProvider, test } from "@fedify/fixture";
9
9
  import { FetchError } from "@fedify/vocab-runtime";
10
10
  import { DataPointType, MeterProvider, MetricReader } from "@opentelemetry/sdk-metrics";
@@ -2,34 +2,31 @@ import { Temporal } from "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { t as esm_default } from "../esm-vrlUxr60.mjs";
5
- import { t as MemoryKvStore } from "../kv-CIvR3Non.mjs";
6
- import { a as numberSchema, r as envelopeSchema, t as MockQueue } from "../testing-Dy-WhqpN.mjs";
7
- import { t as assertEquals } from "../assert_equals-PBVKNMJd.mjs";
8
- import { r as assertExists } from "../std__assert-Dh6uLf_q.mjs";
9
- import { r as assertFalse, t as assertRejects } from "../assert_rejects-DAdaaIWM.mjs";
10
- import { t as assertInstanceOf } from "../assert_instance_of-CxoC8bVq.mjs";
11
- import { t as assertThrows } from "../assert_throws-zN79lgIC.mjs";
12
- import { t as assertNotEquals } from "../assert_not_equals-C8vcTTA3.mjs";
13
- import { t as assertStrictEquals } from "../assert_strict_equals-BzqyKuYL.mjs";
14
- import { t as assert } from "../assert-DvVHoIZ0.mjs";
15
- import { g as recordInboxActivity } from "../metrics-BXR36qzu.mjs";
16
- import { l as verifyRequest, s as signRequest } from "../http-BNFQkiEZ.mjs";
17
- import { a as rsaPrivateKey3, c as rsaPublicKey3, i as rsaPrivateKey2, n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-CSYsOMFG.mjs";
18
- import { t as getAuthenticatedDocumentLoader } from "../docloader-DUKu0GzG.mjs";
19
- import { a as compactJsonLd, h as verifyJsonLd, p as signJsonLd, s as detachSignature } from "../ld-ubkf03eb.mjs";
20
- import { t as doesActorOwnKey } from "../owner-Bf1KkncT.mjs";
21
- import { i as verifyObject, r as signObject } from "../proof-Q781Ks5q.mjs";
22
- import { g as handleBenchmarkTrigger, i as KvSpecDeterminer, n as FederationImpl, o as createFederation, r as InboxContextImpl, t as ContextImpl } from "../middleware-iP9VRMus.mjs";
23
- import { t as CircuitBreaker } from "../circuit-breaker-hJBB6jwA.mjs";
24
- import { t as TaskCodec } from "../codec-CmlPqjNX.mjs";
5
+ import { t as assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
6
+ import { r as assertExists } from "../std__assert-BBjXFNOb.mjs";
7
+ import { r as assertFalse, t as assertRejects } from "../assert_rejects-DN60FHPX.mjs";
8
+ import { t as assertInstanceOf } from "../assert_instance_of-DBC5X09g.mjs";
9
+ import { t as assertThrows } from "../assert_throws-BOkhLGYc.mjs";
10
+ import { t as assertNotEquals } from "../assert_not_equals-DkVK8oqV.mjs";
11
+ import { t as assertStrictEquals } from "../assert_strict_equals-XEgZAlrj.mjs";
12
+ import { t as assert } from "../assert-OguE97r2.mjs";
13
+ import { g as recordInboxActivity } from "../metrics-DvClPYaE.mjs";
14
+ import { l as verifyRequest, s as signRequest } from "../http-L7wqkbZR.mjs";
15
+ import { a as rsaPrivateKey3, c as rsaPublicKey3, i as rsaPrivateKey2, n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-DGu1NFwu.mjs";
16
+ import { t as getAuthenticatedDocumentLoader } from "../docloader-CB8AGpw3.mjs";
17
+ import { a as compactJsonLd, h as verifyJsonLd, p as signJsonLd, s as detachSignature } from "../ld-D6I7H18J.mjs";
18
+ import { t as doesActorOwnKey } from "../owner-BqPUA8Z6.mjs";
19
+ import { i as verifyObject, r as signObject } from "../proof-BJKoRFBc.mjs";
20
+ import { t as MemoryKvStore } from "../kv-rV3vodCc.mjs";
21
+ import { g as handleBenchmarkTrigger, i as KvSpecDeterminer, n as FederationImpl, o as createFederation, r as InboxContextImpl, t as ContextImpl } from "../middleware-RxFBNV2C.mjs";
22
+ import { t as CircuitBreaker } from "../circuit-breaker-CSWsyoef.mjs";
25
23
  import { configure, reset } from "@logtape/logtape";
26
24
  import { RouterError } from "@fedify/uri-template";
27
25
  import * as vocab from "@fedify/vocab";
28
- import { Create, Note, Offer, Person, getTypeId, lookupObject } from "@fedify/vocab";
26
+ import { Create, Offer, Person, getTypeId, lookupObject } from "@fedify/vocab";
29
27
  import { SpanStatusCode, metrics } from "@opentelemetry/api";
30
28
  import { createTestMeterProvider, createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
31
29
  import { FetchError, getDocumentLoader } from "@fedify/vocab-runtime";
32
- import { deepStrictEqual, ok, rejects, strictEqual } from "node:assert/strict";
33
30
  import serialize from "json-canon";
34
31
  import { DataPointType, MeterProvider as MeterProvider$1, MetricReader } from "@opentelemetry/sdk-metrics";
35
32
  //#region ../fixture/src/fixtures/example.com/create.json
@@ -6959,183 +6956,5 @@ test("createFederation() omits instrumentation when no meterProvider is set", ()
6959
6956
  assertStrictEquals(ctx.documentLoader, mockDocumentLoader);
6960
6957
  assertStrictEquals(ctx.contextLoader, mockDocumentLoader);
6961
6958
  });
6962
- const taskCodec = new TaskCodec({ contextLoader: mockDocumentLoader });
6963
- const decodeEnvelope = (message) => taskCodec.decode(envelopeSchema, message.data);
6964
- const envelope = (title) => ({
6965
- note: new Note({ content: title }),
6966
- title
6967
- });
6968
- var RendezvousQueue = class {
6969
- expected;
6970
- enqueued = [];
6971
- #count = 0;
6972
- #markDispatched;
6973
- #openGate;
6974
- dispatched;
6975
- #gate;
6976
- constructor(expected) {
6977
- this.expected = expected;
6978
- this.dispatched = new Promise((resolve) => {
6979
- this.#markDispatched = resolve;
6980
- });
6981
- this.#gate = new Promise((resolve) => {
6982
- this.#openGate = resolve;
6983
- });
6984
- }
6985
- release() {
6986
- this.#openGate();
6987
- }
6988
- enqueue(message, options) {
6989
- this.enqueued.push({
6990
- message,
6991
- options
6992
- });
6993
- if (++this.#count >= this.expected) this.#markDispatched();
6994
- return this.#gate;
6995
- }
6996
- listen(_handler, _options) {
6997
- return new Promise(() => {});
6998
- }
6999
- };
7000
- const withTimeout = (promise, ms, message) => {
7001
- let timer;
7002
- const timeout = new Promise((_, reject) => {
7003
- timer = setTimeout(() => reject(new Error(message)), ms);
7004
- });
7005
- return Promise.race([promise, timeout]).finally(() => clearTimeout(timer));
7006
- };
7007
- const mockOptions = () => ({
7008
- kv: new MemoryKvStore(),
7009
- documentLoaderFactory: () => mockDocumentLoader,
7010
- contextLoaderFactory: () => mockDocumentLoader,
7011
- manuallyStartQueue: true
7012
- });
7013
- test("ContextImpl.enqueueTask()", async (t) => {
7014
- await t.step("builds the task message envelope and round-trips a vocab payload", async () => {
7015
- const queue = new MockQueue({ supportsEnqueueMany: true });
7016
- const federation = createFederation({
7017
- ...mockOptions(),
7018
- queue: { task: queue }
7019
- });
7020
- const task = federation.defineTask("greet", {
7021
- schema: envelopeSchema,
7022
- handler: () => {}
7023
- });
7024
- const ctx = federation.createContext(new URL("https://example.com/"), void 0);
7025
- ok(ctx instanceof ContextImpl);
7026
- await ctx.enqueueTask(task, envelope("greeting"));
7027
- strictEqual(queue.enqueuedMany.length, 0);
7028
- strictEqual(queue.enqueued.length, 1);
7029
- const { message } = queue.enqueued[0];
7030
- strictEqual(message.type, "task");
7031
- strictEqual(message.taskName, "greet");
7032
- strictEqual(message.baseUrl, "https://example.com");
7033
- strictEqual(message.attempt, 0);
7034
- ok(/^[0-9a-f-]{36}$/i.test(message.id));
7035
- ok(Temporal.Instant.from(message.started) instanceof Temporal.Instant);
7036
- strictEqual(typeof message.traceContext, "object");
7037
- ok(message.traceContext != null);
7038
- const decoded = await decodeEnvelope(message);
7039
- ok(decoded.note instanceof Note);
7040
- strictEqual(decoded.note.content?.toString(), "greeting");
7041
- strictEqual(decoded.title, "greeting");
7042
- });
7043
- });
7044
- test("ContextImpl.enqueueTaskMany()", async (t) => {
7045
- await t.step("round-trips every payload through enqueueMany in order, forwarding options", async () => {
7046
- const queue = new MockQueue({ supportsEnqueueMany: true });
7047
- const federation = createFederation({
7048
- ...mockOptions(),
7049
- queue: { task: queue }
7050
- });
7051
- const task = federation.defineTask("bulk", {
7052
- schema: envelopeSchema,
7053
- handler: () => {}
7054
- });
7055
- const ctx = federation.createContext(new URL("https://example.com/"), void 0);
7056
- const payloads = [
7057
- envelope("a"),
7058
- envelope("b"),
7059
- envelope("c")
7060
- ];
7061
- await ctx.enqueueTaskMany(task, payloads, {
7062
- delay: { seconds: 30 },
7063
- orderingKey: "batch"
7064
- });
7065
- strictEqual(queue.enqueued.length, 0);
7066
- strictEqual(queue.enqueuedMany.length, 1);
7067
- const { messages, options } = queue.enqueuedMany[0];
7068
- ok(options?.delay instanceof Temporal.Duration);
7069
- strictEqual(options.delay.total("second"), 30);
7070
- strictEqual(options.orderingKey, "batch");
7071
- deepStrictEqual((await Promise.all(messages.map(decodeEnvelope))).map((d) => d.title), [
7072
- "a",
7073
- "b",
7074
- "c"
7075
- ]);
7076
- for (const message of messages) strictEqual(message.orderingKey, "batch");
7077
- });
7078
- await t.step("with a single payload uses enqueue() instead of enqueueMany", async () => {
7079
- const queue = new MockQueue({ supportsEnqueueMany: true });
7080
- const federation = createFederation({
7081
- ...mockOptions(),
7082
- queue: { task: queue }
7083
- });
7084
- const task = federation.defineTask("bulk-single", {
7085
- schema: envelopeSchema,
7086
- handler: () => {}
7087
- });
7088
- await federation.createContext(new URL("https://example.com/"), void 0).enqueueTaskMany(task, [envelope("solo")]);
7089
- strictEqual(queue.enqueuedMany.length, 0);
7090
- strictEqual(queue.enqueued.length, 1);
7091
- });
7092
- await t.step("falls back to concurrent single enqueues, preserving order and options", async () => {
7093
- const queue = new RendezvousQueue(2);
7094
- const federation = createFederation({
7095
- ...mockOptions(),
7096
- queue: { task: queue }
7097
- });
7098
- const task = federation.defineTask("bulk-fallback", {
7099
- schema: envelopeSchema,
7100
- handler: () => {}
7101
- });
7102
- const ctx = federation.createContext(new URL("https://example.com/"), void 0);
7103
- const payloads = [envelope("x"), envelope("y")];
7104
- const pending = ctx.enqueueTaskMany(task, payloads, { orderingKey: "batch" });
7105
- try {
7106
- await withTimeout(queue.dispatched, 2e3, "fallback did not dispatch enqueues concurrently");
7107
- strictEqual(queue.enqueued.length, 2);
7108
- } finally {
7109
- queue.release();
7110
- await pending;
7111
- }
7112
- deepStrictEqual((await Promise.all(queue.enqueued.map(({ message }) => decodeEnvelope(message)))).map((d) => d.title), ["x", "y"]);
7113
- for (const { message, options } of queue.enqueued) {
7114
- strictEqual(message.orderingKey, "batch");
7115
- strictEqual(options?.orderingKey, "batch");
7116
- }
7117
- });
7118
- await t.step("fallback path aborts the whole batch when one payload is invalid", async () => {
7119
- const queue = new MockQueue();
7120
- const federation = createFederation({
7121
- ...mockOptions(),
7122
- queue: { task: queue }
7123
- });
7124
- const task = federation.defineTask("bulk-typed", {
7125
- schema: numberSchema,
7126
- handler: () => {}
7127
- });
7128
- const ctx = federation.createContext(new URL("https://example.com/"), void 0);
7129
- await rejects(() => ctx.enqueueTaskMany(task, [
7130
- 1,
7131
- "two",
7132
- 3
7133
- ]), {
7134
- name: "TypeError",
7135
- message: /Task data failed schema validation/
7136
- });
7137
- strictEqual(queue.enqueued.length, 0);
7138
- });
7139
- });
7140
6959
  //#endregion
7141
6960
  export {};