@fedify/fedify 2.4.0-pr.936.41 → 2.5.0-dev.2271

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 (244) hide show
  1. package/README.md +50 -39
  2. package/dist/{assert-CJ1KXcvv.mjs → assert-D1Eafmd_.mjs} +1 -1
  3. package/dist/{assert_equals-BV7oLMxm.mjs → assert_equals-Z6IcEbWU.mjs} +2 -28
  4. package/dist/assert_exists-cffSpJ7X.mjs +28 -0
  5. package/dist/assert_false-CPdRnc3E.mjs +23 -0
  6. package/dist/assert_greater_or_equal-BlafOF4-.mjs +31 -0
  7. package/dist/{assert_instance_of-Q9KTBnrf.mjs → assert_instance_of-mrXWWNY-.mjs} +1 -1
  8. package/dist/{assert_not_equals-EPJPoxuf.mjs → assert_not_equals-CpPK2t89.mjs} +2 -1
  9. package/dist/assert_rejects-CTptdYck.mjs +39 -0
  10. package/dist/{assert_strict_equals-Ec20AUwa.mjs → assert_strict_equals-CYvBmkpC.mjs} +2 -1
  11. package/dist/{assert_throws-NiFfqbnH.mjs → assert_throws-BYITOvPO.mjs} +2 -1
  12. package/dist/assertion_error-B-cx0fFA.mjs +31 -0
  13. package/dist/audience-CHQ-FlLD.mjs +95 -0
  14. package/dist/{builder-DonuxRl_.mjs → builder-Bda6LK7A.mjs} +169 -14
  15. package/dist/{circuit-breaker-CBGyz5F7.mjs → circuit-breaker-XJ53md4S.mjs} +224 -17
  16. package/dist/circuit-breaker-test-utils-DW6YC_Pe.mjs +14 -0
  17. package/dist/{client-CjF5IYQS.mjs → client-CEnNz8O7.mjs} +144 -8
  18. package/dist/{codec-BBga-FWI.mjs → codec-C6rTrpIp.mjs} +26 -3
  19. package/dist/{collection-BIhlldqK.mjs → collection-CnnP1UAv.mjs} +1 -1
  20. package/dist/compat/mod.cjs +1 -1
  21. package/dist/compat/mod.d.cts +1 -1
  22. package/dist/compat/mod.d.ts +1 -1
  23. package/dist/compat/mod.js +1 -1
  24. package/dist/compat/outgoing-jsonld.test.mjs +71 -3
  25. package/dist/compat/public-audience.test.mjs +14 -5
  26. package/dist/compat/secured-document.test.d.mts +2 -0
  27. package/dist/compat/secured-document.test.mjs +58 -0
  28. package/dist/compat/transformers.test.mjs +5 -5
  29. package/dist/compound-proof-B-9mXxFW.mjs +989 -0
  30. package/dist/{context-Zii1f5xS.d.ts → context-7NyiqIcg.d.ts} +1600 -25
  31. package/dist/{context-BJXxPElm.mjs → context-8Tu9kea0.mjs} +21 -63
  32. package/dist/{context-lxX6I7as.d.cts → context-tsYPJ2Ew.d.cts} +1600 -25
  33. package/dist/{deno-BHzKn9Ig.mjs → deno-oR5aJKpU.mjs} +1 -1
  34. package/dist/dist-DJQM4u7i.mjs +189 -0
  35. package/dist/docloader-DBoYbvYW.mjs +87 -0
  36. package/dist/{esm-yYQfPhIY.mjs → esm-BHXXx4Wx.mjs} +13 -6
  37. package/dist/federation/audience.test.d.mts +2 -0
  38. package/dist/federation/audience.test.mjs +130 -0
  39. package/dist/federation/builder.test.mjs +54 -5
  40. package/dist/federation/circuit-breaker.test.mjs +838 -7
  41. package/dist/federation/collection.test.mjs +3 -3
  42. package/dist/federation/compound-fanout.test.d.mts +2 -0
  43. package/dist/federation/compound-fanout.test.mjs +228 -0
  44. package/dist/federation/handler-compound-proof.test.d.mts +2 -0
  45. package/dist/federation/handler-compound-proof.test.mjs +384 -0
  46. package/dist/federation/handler.test.mjs +385 -15
  47. package/dist/federation/hashlink-media.test.d.mts +2 -0
  48. package/dist/federation/hashlink-media.test.mjs +422 -0
  49. package/dist/federation/idempotency.test.mjs +6 -6
  50. package/dist/federation/inbox-report.test.d.mts +2 -0
  51. package/dist/federation/inbox-report.test.mjs +475 -0
  52. package/dist/federation/inbox.test.mjs +3 -3
  53. package/dist/federation/keycache.test.mjs +215 -14
  54. package/dist/federation/kv.test.mjs +3 -3
  55. package/dist/federation/metrics.test.mjs +5 -5
  56. package/dist/federation/middleware.test.mjs +967 -35
  57. package/dist/federation/mod.cjs +18 -261
  58. package/dist/federation/mod.d.cts +5 -5
  59. package/dist/federation/mod.d.ts +5 -5
  60. package/dist/federation/mod.js +279 -1
  61. package/dist/federation/mq.test.mjs +123 -47
  62. package/dist/federation/negotiation.test.mjs +4 -4
  63. package/dist/federation/outgoing-proof.test.d.mts +2 -0
  64. package/dist/federation/outgoing-proof.test.mjs +931 -0
  65. package/dist/federation/portable-actor.test.d.mts +2 -0
  66. package/dist/federation/portable-actor.test.mjs +496 -0
  67. package/dist/federation/portable-chain.test.d.mts +2 -0
  68. package/dist/federation/portable-chain.test.mjs +370 -0
  69. package/dist/federation/portable-collection.test.d.mts +2 -0
  70. package/dist/federation/portable-collection.test.mjs +832 -0
  71. package/dist/federation/portable-delivery.test.d.mts +2 -0
  72. package/dist/federation/portable-delivery.test.mjs +746 -0
  73. package/dist/federation/portable-gateway-keys.test.d.mts +2 -0
  74. package/dist/federation/portable-gateway-keys.test.mjs +686 -0
  75. package/dist/federation/portable-inbox.test.d.mts +2 -0
  76. package/dist/federation/portable-inbox.test.mjs +1535 -0
  77. package/dist/federation/portable-parse-uri.test.d.mts +2 -0
  78. package/dist/federation/portable-parse-uri.test.mjs +348 -0
  79. package/dist/federation/portable-route-activity.test.d.mts +2 -0
  80. package/dist/federation/portable-route-activity.test.mjs +259 -0
  81. package/dist/federation/portable.test.d.mts +2 -0
  82. package/dist/federation/portable.test.mjs +1072 -0
  83. package/dist/federation/retry.test.mjs +4 -3
  84. package/dist/federation/router.test.mjs +9 -159
  85. package/dist/federation/send.test.mjs +245 -27
  86. package/dist/federation/tasks/codec.test.mjs +4 -4
  87. package/dist/federation/tasks/enqueue.test.mjs +42 -4
  88. package/dist/federation/tasks/tasks.test.mjs +7 -6
  89. package/dist/federation/temporal.test.mjs +4 -4
  90. package/dist/federation/webfinger.test.mjs +275 -12
  91. package/dist/{middleware-FrSMAYEx.cjs → federation-CkZiAcWY.cjs} +8640 -3722
  92. package/dist/http-B5JT115n.cjs +10630 -0
  93. package/dist/http-DydWCB7R.js +6527 -0
  94. package/dist/{http-CPVMUgsW.mjs → http-siciWkmx.mjs} +397 -168
  95. package/dist/key-BspPiXqn.mjs +951 -0
  96. package/dist/key-C1nv7_jD.d.ts +1125 -0
  97. package/dist/key-DYxuyd-s.d.cts +1125 -0
  98. package/dist/key-owner-evidence-APB6NpSk.mjs +108 -0
  99. package/dist/keycache-Da8A8mZa.mjs +200 -0
  100. package/dist/{kv-D6hNiMTK.d.ts → kv-B2mzK5tl.d.cts} +3 -2
  101. package/dist/{kv-gJ8LYbxX.d.cts → kv-B2mzK5tl.d.ts} +3 -2
  102. package/dist/kv-DBRWVx3Q.mjs +104 -0
  103. package/dist/{kv-cache-KyGqJqSp.mjs → kv-cache-BF1hnW65.mjs} +1 -1
  104. package/dist/{kv-cache-5bnX3-Jq.js → kv-cache-CTQr1tbn.js} +54 -16
  105. package/dist/{kv-cache-DQ29C4XL.cjs → kv-cache-DCac1nEU.cjs} +55 -19
  106. package/dist/{ld-Cj9F_5AP.mjs → ld-CzaP-hJl.mjs} +44 -12
  107. package/dist/map-local-context-conflict-DOYEEJ3u.mjs +204 -0
  108. package/dist/map-local-create-note-B0SeXJms.mjs +214 -0
  109. package/dist/{metrics-DMk-nTxI.mjs → metrics-CYg9yxBL.mjs} +3 -2
  110. package/dist/metrics-DVKYY6K1.d.cts +36 -0
  111. package/dist/metrics-DoRtI0qU.d.ts +36 -0
  112. package/dist/{middleware-Y-kpsp6S.js → middleware-CsDDXKuL.js} +5493 -1103
  113. package/dist/{middleware-CvwTUgnP.mjs → middleware-D7_LO-Vs.mjs} +3157 -272
  114. package/dist/{middleware-CEctxBN6.mjs → middleware-DWjrfpcz.mjs} +1 -1
  115. package/dist/{mod-gOlPDuT8.d.cts → mod-BojP2Bw3.d.cts} +1 -1
  116. package/dist/mod-CavhAgLw.d.cts +320 -0
  117. package/dist/mod-CtpF2BU5.d.ts +320 -0
  118. package/dist/{mod-BtEaIEcD.d.cts → mod-DEZXwV6J.d.ts} +10 -4
  119. package/dist/{mod-UMmveiO0.d.ts → mod-Dw-nPxQh.d.cts} +10 -4
  120. package/dist/{mod-DLc2Ot6f.d.ts → mod-Xj5P4s4d.d.ts} +1 -1
  121. package/dist/mod.cjs +40 -39
  122. package/dist/mod.d.cts +10 -11
  123. package/dist/mod.d.ts +10 -11
  124. package/dist/mod.js +9 -9
  125. package/dist/{mq-llHKivST.mjs → mq-Dm1Wmtm-.mjs} +6 -0
  126. package/dist/nodeinfo/client.test.mjs +139 -4
  127. package/dist/nodeinfo/handler.test.mjs +5 -5
  128. package/dist/nodeinfo/mod.cjs +1 -1
  129. package/dist/nodeinfo/mod.d.cts +1 -1
  130. package/dist/nodeinfo/mod.d.ts +1 -1
  131. package/dist/nodeinfo/mod.js +1 -1
  132. package/dist/nodeinfo/types.test.mjs +4 -4
  133. package/dist/otel/exporter.test.mjs +3 -3
  134. package/dist/otel/mod.cjs +0 -1
  135. package/dist/otel/mod.d.cts +1 -1
  136. package/dist/otel/mod.d.ts +1 -1
  137. package/dist/{outgoing-jsonld-URuqsICz.mjs → outgoing-jsonld-4IJqPYos.mjs} +12 -10
  138. package/dist/{owner-DEvZuyOE.d.cts → owner-BF0L9cMt.d.cts} +11 -0
  139. package/dist/{owner-CnngXDNJ.d.ts → owner-BSzr5-I8.d.ts} +11 -0
  140. package/dist/owner-DYgfTFHy.mjs +267 -0
  141. package/dist/portable-collection-BpsVsRov.js +670 -0
  142. package/dist/portable-collection-C74P1vtC.mjs +418 -0
  143. package/dist/portable-collection-DZd2bm7M.cjs +686 -0
  144. package/dist/portable-key-BIMLrAP4.mjs +549 -0
  145. package/dist/portable-key-id-Ca30-hOa.mjs +248 -0
  146. package/dist/proof-Dxy6ByqI.mjs +1299 -0
  147. package/dist/{public-audience-Cr5MsnMq.mjs → public-audience--klBIOk1.mjs} +15 -10
  148. package/dist/router-u5O5KCQr.mjs +156 -0
  149. package/dist/runtime/mod.cjs +1 -1
  150. package/dist/runtime/mod.js +1 -1
  151. package/dist/secured-document-CxzZZ9nL.mjs +35 -0
  152. package/dist/send-C4dDpAxm.mjs +495 -0
  153. package/dist/sig/accept.test.mjs +1 -1
  154. package/dist/sig/compound-proof-discovery.test.d.mts +2 -0
  155. package/dist/sig/compound-proof-discovery.test.mjs +331 -0
  156. package/dist/sig/compound-proof-producer.test.d.mts +2 -0
  157. package/dist/sig/compound-proof-producer.test.mjs +107 -0
  158. package/dist/sig/compound-proof-verification.test.d.mts +2 -0
  159. package/dist/sig/compound-proof-verification.test.mjs +833 -0
  160. package/dist/sig/compound-proof.test.d.mts +2 -0
  161. package/dist/sig/compound-proof.test.mjs +411 -0
  162. package/dist/sig/http.test.mjs +702 -31
  163. package/dist/sig/key-owner-evidence.test.d.mts +2 -0
  164. package/dist/sig/key-owner-evidence.test.mjs +100 -0
  165. package/dist/sig/key.test.mjs +220 -8
  166. package/dist/sig/ld.test.mjs +65 -7
  167. package/dist/sig/mitra-receive-interop.test.d.mts +2 -0
  168. package/dist/sig/mitra-receive-interop.test.mjs +260 -0
  169. package/dist/sig/mitra-send-interop.test.d.mts +2 -0
  170. package/dist/sig/mitra-send-interop.test.mjs +461 -0
  171. package/dist/sig/mod.cjs +18 -16
  172. package/dist/sig/mod.d.cts +4 -4
  173. package/dist/sig/mod.d.ts +4 -4
  174. package/dist/sig/mod.js +3 -3
  175. package/dist/sig/owner.test.mjs +108 -9
  176. package/dist/sig/portable-collection.test.d.mts +2 -0
  177. package/dist/sig/portable-collection.test.mjs +697 -0
  178. package/dist/sig/portable-interop.test.d.mts +2 -0
  179. package/dist/sig/portable-interop.test.mjs +156 -0
  180. package/dist/sig/portable-key-id.test.d.mts +2 -0
  181. package/dist/sig/portable-key-id.test.mjs +67 -0
  182. package/dist/sig/portable-key.test.d.mts +2 -0
  183. package/dist/sig/portable-key.test.mjs +1439 -0
  184. package/dist/sig/proof.test.mjs +1753 -16
  185. package/dist/sig/tootik-request-interop.test.d.mts +2 -0
  186. package/dist/sig/tootik-request-interop.test.mjs +190 -0
  187. package/dist/sig/tootik-send-interop.test.d.mts +2 -0
  188. package/dist/sig/tootik-send-interop.test.mjs +331 -0
  189. package/dist/sig/verification.test.d.mts +2 -0
  190. package/dist/sig/verification.test.mjs +310 -0
  191. package/dist/std__assert-DvMDRPes.mjs +8 -0
  192. package/dist/{testing-CO7ftO8A.mjs → tasks-IG3pHfvZ.mjs} +2 -2
  193. package/dist/{temporal-fsXO5IvD.mjs → temporal-D0KJI4NF.mjs} +3 -3
  194. package/dist/testing/context.test.d.mts +2 -0
  195. package/dist/testing/context.test.mjs +19 -0
  196. package/dist/testing/kv.test.d.mts +2 -0
  197. package/dist/testing/kv.test.mjs +101 -0
  198. package/dist/testing/mod.d.mts +1617 -48
  199. package/dist/testing/mod.mjs +6 -3
  200. package/dist/testing-t8xDeJZ5.mjs +8 -0
  201. package/dist/{transformers-DGwl-hD1.cjs → transformers-BalCrSsr.cjs} +0 -1
  202. package/dist/{types-DC1pNgJA.js → types-_S2_MeLF.js} +144 -8
  203. package/dist/{types-CPym83zc.cjs → types-poIao40f.cjs} +160 -7
  204. package/dist/utils/docloader.test.mjs +530 -8
  205. package/dist/utils/kv-cache.test.mjs +2 -2
  206. package/dist/utils/mod.cjs +1 -1
  207. package/dist/utils/mod.d.cts +1 -1
  208. package/dist/utils/mod.d.ts +1 -1
  209. package/dist/utils/mod.js +1 -1
  210. package/dist/verification-C3954hQh.mjs +5 -0
  211. package/dist/verification-Dpfcw8ml.mjs +105 -0
  212. package/dist/vocab/cjs.test.mjs +1 -1
  213. package/package.json +8 -8
  214. package/dist/assert_rejects-EgstcQy5.mjs +0 -82
  215. package/dist/docloader-e1khNUKy.mjs +0 -49
  216. package/dist/http-CsmQ-BQ4.js +0 -2483
  217. package/dist/http-VyDTd4G3.d.cts +0 -553
  218. package/dist/http-hlIjmewS.cjs +0 -2694
  219. package/dist/http-lf8Hsd91.d.ts +0 -553
  220. package/dist/key-DfPsX8hv.mjs +0 -453
  221. package/dist/keycache-_DHqz5z_.mjs +0 -97
  222. package/dist/metrics-CoUJLQhZ.d.cts +0 -276
  223. package/dist/metrics-Dc4jR-IC.d.ts +0 -276
  224. package/dist/mod-B0hW12_O.d.cts +0 -307
  225. package/dist/mod-COIAjwRS.d.ts +0 -307
  226. package/dist/owner-Br9YYzn_.mjs +0 -120
  227. package/dist/proof-B4ngoaNQ.mjs +0 -316
  228. package/dist/proof-B6E0XUXJ.js +0 -1415
  229. package/dist/proof-NN4xCQGL.cjs +0 -1562
  230. package/dist/send-CxHKUNzv.mjs +0 -239
  231. package/dist/std__assert-B2NnY9bq.mjs +0 -79
  232. package/dist/temporal-polyfill-BCdTHexd.cjs +0 -3565
  233. /package/dist/{accept-8PiolDP7.mjs → accept-CPVqki78.mjs} +0 -0
  234. /package/dist/{activity-listener-BtTSxZWA.mjs → activity-listener-C-BSbKI7.mjs} +0 -0
  235. /package/dist/{client-CAM_bQXx.d.cts → client-D-XP_Ccb.d.cts} +0 -0
  236. /package/dist/{client-CSddvgWN.d.ts → client-D-XP_Ccb.d.ts} +0 -0
  237. /package/dist/{keys-Dbyd7bhl.mjs → keys-DIJNHW-Y.mjs} +0 -0
  238. /package/dist/{kv-CXBAok3k.mjs → kv-DCHkaJ9-.mjs} +0 -0
  239. /package/dist/{negotiation-RuwrPFqi.mjs → negotiation-CCocWT_N.mjs} +0 -0
  240. /package/dist/{retry-DgFqeS5k.mjs → retry-zX5xw5e0.mjs} +0 -0
  241. /package/dist/{chunk-D5IdezsZ.js → rolldown-runtime-BC-Eo5Mj.js} +0 -0
  242. /package/dist/{chunk-Czpeue4M.cjs → rolldown-runtime-Dmm3t92W.cjs} +0 -0
  243. /package/dist/{transformers-DXze6FUB.js → transformers-DAtXl_Kc.js} +0 -0
  244. /package/dist/{types-CrtdVuDP.mjs → types-DE_LV1JB.mjs} +0 -0
@@ -1,11 +1,13 @@
1
1
  import { Temporal } from "temporal-polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { t as assertEquals } from "../assert_equals-BV7oLMxm.mjs";
5
- import { n as assertGreater } from "../std__assert-B2NnY9bq.mjs";
6
- import { n as assertGreaterOrEqual, r as assertFalse, t as assertRejects } from "../assert_rejects-EgstcQy5.mjs";
7
- import { t as assert } from "../assert-CJ1KXcvv.mjs";
8
- import { n as ParallelMessageQueue, t as InProcessMessageQueue } from "../mq-llHKivST.mjs";
4
+ import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
5
+ import { t as assertFalse } from "../assert_false-CPdRnc3E.mjs";
6
+ import { t as assertGreaterOrEqual } from "../assert_greater_or_equal-BlafOF4-.mjs";
7
+ import "../std__assert-DvMDRPes.mjs";
8
+ import { t as assertRejects } from "../assert_rejects-CTptdYck.mjs";
9
+ import { t as assert } from "../assert-D1Eafmd_.mjs";
10
+ import { n as ParallelMessageQueue, t as InProcessMessageQueue } from "../mq-Dm1Wmtm-.mjs";
9
11
  import { delay } from "es-toolkit";
10
12
  import { test } from "@fedify/fixture";
11
13
  //#region src/federation/mq.test.ts
@@ -42,50 +44,105 @@ test("InProcessMessageQueue", async (t) => {
42
44
  const listening = mq.listen((message) => {
43
45
  messages.push(message);
44
46
  }, controller);
45
- await t.step("enqueue()", async () => {
46
- await mq.enqueue("Hello, world!");
47
- });
48
- await waitFor(() => messages.length > 0, 15e3);
49
- await t.step("listen()", () => {
50
- assertEquals(messages, ["Hello, world!"]);
51
- });
52
- let started = 0;
53
- await t.step("enqueue() with delay", async () => {
54
- started = Date.now();
55
- await mq.enqueue("Delayed message", { delay: Temporal.Duration.from({ seconds: 3 }) });
56
- assertEquals(messages, ["Hello, world!"]);
57
- });
58
- await waitFor(() => messages.length > 1, 15e3);
59
- await t.step("listen() with delay", () => {
60
- assertEquals(messages, ["Hello, world!", "Delayed message"]);
61
- assertGreater(Date.now() - started, 3e3);
62
- });
63
- while (messages.length > 0) messages.pop();
64
- await t.step("enqueueMany()", async () => {
65
- const testMessages = Array.from({ length: 5 }, (_, i) => `Batch message ${i}!`);
66
- await mq.enqueueMany(testMessages);
67
- });
68
- await waitFor(() => messages.length >= 5, 15e3);
69
- await t.step("listen() [multiple]", () => {
70
- assertEquals(messages.length, 5);
71
- for (let i = 0; i < 5; i++) assertEquals(messages[i], `Batch message ${i}!`);
72
- });
73
- while (messages.length > 0) messages.pop();
74
- started = 0;
75
- await t.step("enqueueMany() with delay", async () => {
76
- started = Date.now();
77
- const testMessages = Array.from({ length: 3 }, (_, i) => `Delayed batch ${i}!`);
78
- await mq.enqueueMany(testMessages, { delay: Temporal.Duration.from({ seconds: 2 }) });
79
- assertEquals(messages.length, 0);
47
+ try {
48
+ await t.step("enqueue()", async () => {
49
+ await mq.enqueue("Hello, world!");
50
+ });
51
+ await waitFor(() => messages.length > 0, 15e3);
52
+ await t.step("listen()", () => {
53
+ assertEquals(messages, ["Hello, world!"]);
54
+ });
55
+ await t.step("enqueue() with delay", async () => {
56
+ const { timers, enqueued } = captureTimers(() => mq.enqueue("Delayed message", { delay: Temporal.Duration.from({ seconds: 3 }) }));
57
+ await enqueued;
58
+ assertEquals(timers.length, 1);
59
+ assertEquals(timers[0].delay, 3e3);
60
+ await mq.enqueue("Single delay marker");
61
+ await waitFor(() => messages.includes("Single delay marker"), 15e3);
62
+ assertEquals(messages, ["Hello, world!", "Single delay marker"]);
63
+ timers[0].callback();
64
+ });
65
+ await waitFor(() => messages.length >= 3, 15e3);
66
+ await t.step("listen() with delay", () => {
67
+ assertEquals(messages, [
68
+ "Hello, world!",
69
+ "Single delay marker",
70
+ "Delayed message"
71
+ ]);
72
+ });
73
+ while (messages.length > 0) messages.pop();
74
+ await t.step("enqueueMany()", async () => {
75
+ const testMessages = Array.from({ length: 5 }, (_, i) => `Batch message ${i}!`);
76
+ await mq.enqueueMany(testMessages);
77
+ });
78
+ await waitFor(() => messages.length >= 5, 15e3);
79
+ await t.step("listen() [multiple]", () => {
80
+ assertEquals(messages.length, 5);
81
+ for (let i = 0; i < 5; i++) assertEquals(messages[i], `Batch message ${i}!`);
82
+ });
83
+ while (messages.length > 0) messages.pop();
84
+ await t.step("enqueueMany() with delay", async () => {
85
+ const testMessages = Array.from({ length: 3 }, (_, i) => `Delayed batch ${i}!`);
86
+ const { timers, enqueued } = captureTimers(() => mq.enqueueMany(testMessages, { delay: Temporal.Duration.from({ seconds: 2 }) }));
87
+ await enqueued;
88
+ assertEquals(timers.length, 1);
89
+ assertEquals(timers[0].delay, 2e3);
90
+ await mq.enqueue("Batch delay marker");
91
+ await waitFor(() => messages.includes("Batch delay marker"), 15e3);
92
+ assertEquals(messages, ["Batch delay marker"]);
93
+ timers[0].callback();
94
+ });
95
+ await waitFor(() => messages.length >= 4, 15e3);
96
+ await t.step("listen() [delayed multiple]", () => {
97
+ assertEquals(messages.length, 4);
98
+ assertEquals(messages[0], "Batch delay marker");
99
+ for (let i = 0; i < 3; i++) assertEquals(messages[i + 1], `Delayed batch ${i}!`);
100
+ });
101
+ } finally {
102
+ controller.abort();
103
+ await listening;
104
+ }
105
+ });
106
+ function captureTimers(enqueue) {
107
+ const timers = [];
108
+ const original = globalThis.setTimeout;
109
+ globalThis.setTimeout = ((callback, delay) => {
110
+ timers.push({
111
+ callback,
112
+ delay
113
+ });
114
+ return 0;
80
115
  });
81
- await waitFor(() => messages.length >= 3, 15e3);
82
- await t.step("listen() [delayed multiple]", () => {
83
- assertEquals(messages.length, 3);
84
- assertGreater(Date.now() - started, 2e3);
85
- for (let i = 0; i < 3; i++) assertEquals(messages[i], `Delayed batch ${i}!`);
116
+ try {
117
+ return {
118
+ timers,
119
+ enqueued: enqueue()
120
+ };
121
+ } finally {
122
+ globalThis.setTimeout = original;
123
+ }
124
+ }
125
+ test("InProcessMessageQueue real delay", async (t) => {
126
+ for (const batch of [false, true]) await t.step(batch ? "enqueueMany()" : "enqueue()", async () => {
127
+ const mq = new InProcessMessageQueue();
128
+ const messages = [];
129
+ const controller = new AbortController();
130
+ const listening = mq.listen((message) => {
131
+ messages.push(message);
132
+ }, controller);
133
+ try {
134
+ const delayed = batch ? ["Delayed 1", "Delayed 2"] : ["Delayed"];
135
+ const options = { delay: Temporal.Duration.from({ milliseconds: 100 }) };
136
+ if (batch) await mq.enqueueMany(delayed, options);
137
+ else await mq.enqueue(delayed[0], options);
138
+ await mq.enqueue("Immediate");
139
+ await waitFor(() => messages.length >= delayed.length + 1, 15e3);
140
+ assertEquals(messages, ["Immediate", ...delayed]);
141
+ } finally {
142
+ controller.abort();
143
+ await listening;
144
+ }
86
145
  });
87
- controller.abort();
88
- await listening;
89
146
  });
90
147
  test("InProcessMessageQueue.getDepth()", async () => {
91
148
  const mq = new InProcessMessageQueue();
@@ -327,6 +384,21 @@ test("ParallelMessageQueue inherits nativeDeduplication", () => {
327
384
  }
328
385
  assert(new ParallelMessageQueue(new NativeDeduplicationQueue(), 5).nativeDeduplication);
329
386
  });
387
+ test("ParallelMessageQueue inherits atomicEnqueueMany", () => {
388
+ class NonAtomicBatchQueue {
389
+ atomicEnqueueMany = false;
390
+ enqueue() {
391
+ return Promise.resolve();
392
+ }
393
+ enqueueMany() {
394
+ return Promise.resolve();
395
+ }
396
+ listen() {
397
+ return Promise.resolve();
398
+ }
399
+ }
400
+ assertFalse(new ParallelMessageQueue(new NonAtomicBatchQueue(), 5).atomicEnqueueMany);
401
+ });
330
402
  test("ParallelMessageQueue forwards deduplicationKey to the wrapped queue", async () => {
331
403
  class RecordingQueue {
332
404
  nativeDeduplication = true;
@@ -365,6 +437,7 @@ test("ParallelMessageQueue rejects a deduplicated batch when the wrapped queue l
365
437
  }
366
438
  const inner = new NoBulkQueue();
367
439
  const workers = new ParallelMessageQueue(inner, 5);
440
+ assertFalse(workers.atomicEnqueueMany);
368
441
  await assertRejects(() => workers.enqueueMany([{ x: 1 }, { x: 2 }], { deduplicationKey: "k" }), TypeError, "enqueueMany");
369
442
  assertEquals(inner.enqueued.length, 0);
370
443
  });
@@ -424,6 +497,9 @@ for (const mqName in queues) test({
424
497
  await t.step("nativeDeduplication property inheritance", () => {
425
498
  assertEquals(workers.nativeDeduplication, mq.nativeDeduplication);
426
499
  });
500
+ await t.step("atomicEnqueueMany capability propagation", () => {
501
+ assertEquals(workers.atomicEnqueueMany, mq.enqueueMany == null ? false : mq.atomicEnqueueMany);
502
+ });
427
503
  await t.step("getDepth() delegation", async () => {
428
504
  if (mq.getDepth == null) assertEquals(workers.getDepth, void 0);
429
505
  else assertEquals(await workers.getDepth?.(), await mq.getDepth());
@@ -1,10 +1,10 @@
1
1
  import "temporal-polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import "../std__assert-B2NnY9bq.mjs";
5
- import { r as assertFalse } from "../assert_rejects-EgstcQy5.mjs";
6
- import { t as assert } from "../assert-CJ1KXcvv.mjs";
7
- import { t as acceptsJsonLd } from "../negotiation-RuwrPFqi.mjs";
4
+ import { t as assertFalse } from "../assert_false-CPdRnc3E.mjs";
5
+ import "../std__assert-DvMDRPes.mjs";
6
+ import { t as assert } from "../assert-D1Eafmd_.mjs";
7
+ import { t as acceptsJsonLd } from "../negotiation-CCocWT_N.mjs";
8
8
  import { test } from "@fedify/fixture";
9
9
  //#region src/federation/negotiation.test.ts
10
10
  test("acceptsJsonLd()", () => {
@@ -0,0 +1,2 @@
1
+ import { Temporal } from "temporal-polyfill";
2
+ import { URLPattern } from "urlpattern-polyfill";