@fedify/fedify 2.0.0-dev.1641 → 2.0.0-dev.1690

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 (147) hide show
  1. package/dist/{actor-CP03csrm.cjs → actor-Be0ThtXy.cjs} +7263 -2440
  2. package/dist/{actor-DU511yTk.js → actor-ChbPLm6n.js} +7263 -2440
  3. package/dist/{actor-DMgu-ZjT.d.cts → actor-D6K058Tb.d.cts} +1 -1
  4. package/dist/{actor-DVpsNXhn.js → actor-DuCeRiNh.js} +1 -1
  5. package/dist/{actor-C22bXuuC.d.ts → actor-T6RyhRgk.d.ts} +1 -1
  6. package/dist/{assert_rejects-7UF4R_Qs.js → assert_rejects-DiIiJbZn.js} +1 -1
  7. package/dist/{assert_throws-53_pKeP3.js → assert_throws-BOO88avQ.js} +1 -1
  8. package/dist/{authdocloader-BkIZCKQv.js → authdocloader-Brax1A32.js} +3 -3
  9. package/dist/{authdocloader-DCgMyo82.js → authdocloader-CrxhFL8e.js} +3 -3
  10. package/dist/{authdocloader-BnsFSERg.cjs → authdocloader-OSn_teLV.cjs} +3 -3
  11. package/dist/{builder-E2Icrl_a.js → builder-CYOcDUkj.js} +10 -4
  12. package/dist/{client-BW4V0OJx.js → client-CnOdwLLN.js} +1 -1
  13. package/dist/compat/mod.d.cts +7 -7
  14. package/dist/compat/mod.d.ts +7 -7
  15. package/dist/compat/transformers.test.js +18 -17
  16. package/dist/{context-CDSZdQHD.d.ts → context-ByZprN0S.d.ts} +66 -6
  17. package/dist/{context-Dq8aCtMH.d.cts → context-C5BsZkDr.d.cts} +66 -6
  18. package/dist/{docloader-kae6M-GI.cjs → docloader-CCqXeagZ.cjs} +2 -2
  19. package/dist/{docloader-BtqIh1OE.js → docloader-XK3y2jn5.js} +2 -2
  20. package/dist/{esm-mtx3XJAD.js → esm-DnIzfEj0.js} +1 -1
  21. package/dist/federation/builder.test.js +10 -10
  22. package/dist/federation/collection.test.js +8 -8
  23. package/dist/federation/handler.test.js +26 -145
  24. package/dist/federation/idempotency.test.d.ts +3 -0
  25. package/dist/federation/idempotency.test.js +202 -0
  26. package/dist/federation/inbox.test.js +6 -6
  27. package/dist/federation/keycache.test.js +4 -4
  28. package/dist/federation/kv.test.js +8 -8
  29. package/dist/federation/middleware.test.js +232 -38
  30. package/dist/federation/mod.cjs +10 -10
  31. package/dist/federation/mod.d.cts +7 -7
  32. package/dist/federation/mod.d.ts +7 -7
  33. package/dist/federation/mod.js +10 -10
  34. package/dist/federation/mq.test.js +10 -10
  35. package/dist/federation/negotiation.test.d.ts +3 -0
  36. package/dist/federation/negotiation.test.js +28 -0
  37. package/dist/federation/retry.test.js +5 -5
  38. package/dist/federation/router.test.js +8 -8
  39. package/dist/federation/send.test.js +15 -15
  40. package/dist/fixtures/media.example.com/avatars/test-avatar.jpg.json +6 -0
  41. package/dist/{http-Cox5GsED.js → http-BNOYnVsU.js} +2 -2
  42. package/dist/{http-C7uYFcBo.js → http-BxbM8sEy.js} +3 -3
  43. package/dist/{http-ZhcoaYEa.cjs → http-C7vbQwbz.cjs} +3 -3
  44. package/dist/{http-BS6766zs.d.cts → http-D-e6AFwR.d.cts} +1 -1
  45. package/dist/{http-DqSNLFNY.d.ts → http-D6Uj2x2y.d.ts} +1 -1
  46. package/dist/{inbox-BDdRbWNI.js → inbox-BRru9pX3.js} +24 -7
  47. package/dist/{key-CfiBDu3o.js → key-1KXru8Ug.js} +2 -2
  48. package/dist/{key-B9Z5ZuX9.js → key-B3uag-rz.js} +4 -4
  49. package/dist/key-BiBmb1Yy.cjs +10 -0
  50. package/dist/{key-CgwCzDC4.js → key-DK_nfU4I.js} +3 -3
  51. package/dist/{key-HqzOCwDc.cjs → key-Z6ceKnZC.cjs} +2 -2
  52. package/dist/{key-Cc0JlcKe.js → key-jyNTxCvK.js} +2 -2
  53. package/dist/{keycache-CVBjz3xi.js → keycache-CN61iGVj.js} +1 -1
  54. package/dist/{keys-CBKbYaJA.js → keys-BPdFKgiy.js} +1 -1
  55. package/dist/{ld-CxgmnSO3.js → ld-Dv8DNNAT.js} +2 -2
  56. package/dist/{lookup-NuT9cCSl.js → lookup-BPviO8ij.js} +1 -1
  57. package/dist/{lookup-QHjmy4Og.cjs → lookup-hnMAAU5r.cjs} +1 -1
  58. package/dist/{lookup-CiU3QxQz.js → lookup-pV0JOsuV.js} +21 -12
  59. package/dist/{middleware-LyCG_YVM.cjs → middleware-BmoOlgc1.cjs} +69 -73
  60. package/dist/{middleware-DXidHY4N.js → middleware-Bz_A2jeJ.js} +69 -73
  61. package/dist/middleware-CI0-zw4U.js +26 -0
  62. package/dist/{middleware-ByPnvMMS.js → middleware-DY9B2lL8.js} +43 -134
  63. package/dist/middleware-QNK-W-jE.cjs +17 -0
  64. package/dist/middleware-_vjt6FWU.js +17 -0
  65. package/dist/{mod-BhMnAkFX.d.cts → mod-8DMWKtQE.d.cts} +2 -2
  66. package/dist/{mod-Drmz72EK.d.ts → mod-BhUKmBJD.d.ts} +2 -2
  67. package/dist/{mod-TFoH2Ql8.d.ts → mod-CerN_Sza.d.ts} +1 -1
  68. package/dist/{mod-Dc_-mf8s.d.cts → mod-Cj1tHXBR.d.cts} +1 -1
  69. package/dist/{mod-evzlRVZq.d.cts → mod-CxkWO3Mg.d.cts} +19 -1
  70. package/dist/{mod-RI3-KvUI.d.ts → mod-D6hQoxC5.d.ts} +2 -2
  71. package/dist/{mod-BClfg3ej.d.cts → mod-Djzcw2ry.d.cts} +2 -2
  72. package/dist/{mod-Cxt4Kpf6.d.ts → mod-DlU8ISoa.d.ts} +19 -1
  73. package/dist/mod.cjs +10 -10
  74. package/dist/mod.d.cts +10 -10
  75. package/dist/mod.d.ts +10 -10
  76. package/dist/mod.js +10 -10
  77. package/dist/negotiation-5NPJL6zp.js +71 -0
  78. package/dist/nodeinfo/client.test.js +10 -10
  79. package/dist/nodeinfo/handler.test.js +23 -22
  80. package/dist/nodeinfo/mod.cjs +2 -2
  81. package/dist/nodeinfo/mod.js +2 -2
  82. package/dist/nodeinfo/types.test.js +8 -8
  83. package/dist/{owner-B-7Ptt_m.d.cts → owner-BN_tO3cY.d.cts} +2 -2
  84. package/dist/{owner-Cxob5_PK.js → owner-e3FYDhsk.js} +2 -2
  85. package/dist/{owner-CQPnQVtf.d.ts → owner-hd9lvQcP.d.ts} +2 -2
  86. package/dist/{proof-BiSQNUmQ.js → proof-6gFMwMNJ.js} +2 -2
  87. package/dist/{proof-2Gcor0_N.cjs → proof-B-eqv0Ug.cjs} +3 -3
  88. package/dist/{proof-DkxwMaWE.js → proof-DfgvA3al.js} +3 -3
  89. package/dist/runtime/authdocloader.test.js +14 -14
  90. package/dist/runtime/docloader.test.js +9 -9
  91. package/dist/runtime/key.test.js +10 -10
  92. package/dist/runtime/langstr.test.js +8 -8
  93. package/dist/runtime/link.test.js +3 -3
  94. package/dist/runtime/mod.cjs +6 -6
  95. package/dist/runtime/mod.d.cts +3 -3
  96. package/dist/runtime/mod.d.ts +3 -3
  97. package/dist/runtime/mod.js +6 -6
  98. package/dist/runtime/multibase/multibase.test.js +8 -8
  99. package/dist/runtime/url.test.js +5 -5
  100. package/dist/{send-DSEhWIYD.js → send-Tl9NOnmO.js} +2 -2
  101. package/dist/sig/http.test.js +13 -13
  102. package/dist/sig/key.test.js +11 -11
  103. package/dist/sig/ld.test.js +10 -10
  104. package/dist/sig/mod.cjs +6 -6
  105. package/dist/sig/mod.d.cts +5 -5
  106. package/dist/sig/mod.d.ts +5 -5
  107. package/dist/sig/mod.js +6 -6
  108. package/dist/sig/owner.test.js +12 -12
  109. package/dist/sig/proof.test.js +12 -12
  110. package/dist/testing/docloader.test.js +8 -8
  111. package/dist/testing/mod.d.ts +272 -0
  112. package/dist/testing/mod.js +3 -3
  113. package/dist/{testing-ByQmUvf-.js → testing-BWNCAbL-.js} +2 -2
  114. package/dist/{type-B4NJkfVg.js → type-C69ZBu7f.js} +6944 -2121
  115. package/dist/{types-l2uh_ZhP.js → types-DqxyTxOf.js} +1 -1
  116. package/dist/{types-Bqt2EgP0.cjs → types-zqdWZh4O.cjs} +1 -1
  117. package/dist/vocab/actor.test.js +10 -10
  118. package/dist/vocab/lookup.test.js +259 -9
  119. package/dist/vocab/mod.cjs +4 -4
  120. package/dist/vocab/mod.d.cts +3 -3
  121. package/dist/vocab/mod.d.ts +3 -3
  122. package/dist/vocab/mod.js +4 -4
  123. package/dist/vocab/type.test.js +3 -3
  124. package/dist/vocab/vocab.test.js +402 -13
  125. package/dist/{vocab-B0-5a8pw.cjs → vocab-B39-pFl9.cjs} +23 -14
  126. package/dist/{vocab-SOE1ifCr.d.ts → vocab-BI0Ak5lL.d.ts} +290 -0
  127. package/dist/{vocab-lBFcVxVF.js → vocab-BWoeZsME.js} +23 -14
  128. package/dist/{vocab-DJTYMqyU.d.cts → vocab-Dw1-yVGg.d.cts} +290 -0
  129. package/dist/webfinger/handler.test.js +23 -22
  130. package/dist/webfinger/lookup.test.js +9 -9
  131. package/dist/webfinger/mod.cjs +2 -2
  132. package/dist/webfinger/mod.js +2 -2
  133. package/dist/x/cfworkers.test.js +8 -8
  134. package/dist/x/hono.d.cts +6 -6
  135. package/dist/x/hono.d.ts +6 -6
  136. package/dist/x/sveltekit.d.cts +6 -6
  137. package/dist/x/sveltekit.d.ts +6 -6
  138. package/package.json +1 -1
  139. package/dist/key-D-7DPHNl.cjs +0 -10
  140. package/dist/middleware-BHboQ4BE.js +0 -25
  141. package/dist/middleware-Bp3I9z8r.js +0 -17
  142. package/dist/middleware-oYqSU5ky.cjs +0 -17
  143. /package/dist/{assert_is_error-B035L3om.js → assert_is_error-BPGph1Jx.js} +0 -0
  144. /package/dist/{assert_not_equals-C80BG-_5.js → assert_not_equals-f3m3epl3.js} +0 -0
  145. /package/dist/{denokv-jZ0Z2h0M.js → denokv-Bv33Xxea.js} +0 -0
  146. /package/dist/{retry-CfF8Gn4d.js → retry-D4GJ670a.js} +0 -0
  147. /package/dist/{std__assert-DWivtrGR.js → std__assert-X-_kMxKM.js} +0 -0
@@ -1,5 +1,5 @@
1
1
  import { GetUserAgentOptions } from "./docloader-D-MrRyHl.cjs";
2
- import { Application, Group, Organization, Person, Service } from "./vocab-DJTYMqyU.cjs";
2
+ import { Application, Group, Organization, Person, Service } from "./vocab-Dw1-yVGg.cjs";
3
3
  import { TracerProvider } from "@opentelemetry/api";
4
4
 
5
5
  //#region src/vocab/actor.d.ts
@@ -3,7 +3,7 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { Application, Group, Organization, Person, Service, deno_default, getTypeId, lookupWebFinger } from "./type-B4NJkfVg.js";
6
+ import { Application, Group, Organization, Person, Service, deno_default, getTypeId, lookupWebFinger } from "./type-C69ZBu7f.js";
7
7
  import { SpanStatusCode, trace } from "@opentelemetry/api";
8
8
  import { domainToASCII, domainToUnicode } from "node:url";
9
9
 
@@ -1,7 +1,7 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
3
  import { GetUserAgentOptions } from "./docloader-CxWcuWqQ.js";
4
- import { Application, Group, Organization, Person, Service } from "./vocab-SOE1ifCr.js";
4
+ import { Application, Group, Organization, Person, Service } from "./vocab-BI0Ak5lL.js";
5
5
  import { TracerProvider } from "@opentelemetry/api";
6
6
 
7
7
  //#region src/vocab/actor.d.ts
@@ -4,7 +4,7 @@
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
6
  import { AssertionError } from "./assert_equals-DSbWqCm3.js";
7
- import { assertIsError } from "./assert_is_error-B035L3om.js";
7
+ import { assertIsError } from "./assert_is_error-BPGph1Jx.js";
8
8
 
9
9
  //#region ../../node_modules/.pnpm/@jsr+std__assert@0.226.0/node_modules/@jsr/std__assert/assert_false.js
10
10
  /**
@@ -4,7 +4,7 @@
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
6
  import { AssertionError } from "./assert_equals-DSbWqCm3.js";
7
- import { assertIsError } from "./assert_is_error-B035L3om.js";
7
+ import { assertIsError } from "./assert_is_error-BPGph1Jx.js";
8
8
 
9
9
  //#region ../../node_modules/.pnpm/@jsr+std__assert@0.226.0/node_modules/@jsr/std__assert/assert_throws.js
10
10
  function assertThrows(fn, errorClassOrMsg, msgIncludesOrMsg, msg) {
@@ -3,9 +3,9 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { UrlError, createRequest, getRemoteDocument, logRequest, validatePublicUrl } from "./type-B4NJkfVg.js";
7
- import { validateCryptoKey } from "./key-CfiBDu3o.js";
8
- import { doubleKnock } from "./http-Cox5GsED.js";
6
+ import { UrlError, createRequest, getRemoteDocument, logRequest, validatePublicUrl } from "./type-C69ZBu7f.js";
7
+ import { validateCryptoKey } from "./key-1KXru8Ug.js";
8
+ import { doubleKnock } from "./http-BNOYnVsU.js";
9
9
  import { getLogger } from "@logtape/logtape";
10
10
 
11
11
  //#region src/runtime/authdocloader.ts
@@ -2,9 +2,9 @@
2
2
  import { Temporal } from "@js-temporal/polyfill";
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
 
5
- import { UrlError, createRequest, getRemoteDocument, logRequest, validatePublicUrl } from "./docloader-BtqIh1OE.js";
6
- import { validateCryptoKey } from "./key-Cc0JlcKe.js";
7
- import { doubleKnock } from "./http-C7uYFcBo.js";
5
+ import { UrlError, createRequest, getRemoteDocument, logRequest, validatePublicUrl } from "./docloader-XK3y2jn5.js";
6
+ import { validateCryptoKey } from "./key-jyNTxCvK.js";
7
+ import { doubleKnock } from "./http-BxbM8sEy.js";
8
8
  import { getLogger } from "@logtape/logtape";
9
9
 
10
10
  //#region src/runtime/authdocloader.ts
@@ -3,9 +3,9 @@
3
3
  const { URLPattern } = require("urlpattern-polyfill");
4
4
 
5
5
  const require_chunk = require('./chunk-DqRYRqnO.cjs');
6
- const require_docloader = require('./docloader-kae6M-GI.cjs');
7
- const require_key = require('./key-HqzOCwDc.cjs');
8
- const require_http = require('./http-ZhcoaYEa.cjs');
6
+ const require_docloader = require('./docloader-CCqXeagZ.cjs');
7
+ const require_key = require('./key-Z6ceKnZC.cjs');
8
+ const require_http = require('./http-C7vbQwbz.cjs');
9
9
  const __logtape_logtape = require_chunk.__toESM(require("@logtape/logtape"));
10
10
 
11
11
  //#region src/runtime/authdocloader.ts
@@ -3,9 +3,9 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { deno_default, getTypeId } from "./type-B4NJkfVg.js";
7
- import { Router, RouterError } from "./lookup-CiU3QxQz.js";
8
- import { InboxListenerSet } from "./inbox-BDdRbWNI.js";
6
+ import { deno_default, getTypeId } from "./type-C69ZBu7f.js";
7
+ import { Router, RouterError } from "./lookup-pV0JOsuV.js";
8
+ import { InboxListenerSet } from "./inbox-BRru9pX3.js";
9
9
  import { getLogger } from "@logtape/logtape";
10
10
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
11
11
 
@@ -28,6 +28,7 @@ var FederationBuilderImpl = class {
28
28
  inboxListeners;
29
29
  inboxErrorHandler;
30
30
  sharedInboxKeyDispatcher;
31
+ idempotencyStrategy;
31
32
  collectionTypeIds;
32
33
  collectionCallbacks;
33
34
  /**
@@ -42,7 +43,7 @@ var FederationBuilderImpl = class {
42
43
  this.collectionTypeIds = {};
43
44
  }
44
45
  async build(options) {
45
- const { FederationImpl } = await import("./middleware-BHboQ4BE.js");
46
+ const { FederationImpl } = await import("./middleware-CI0-zw4U.js");
46
47
  const f = new FederationImpl(options);
47
48
  const trailingSlashInsensitiveValue = f.router.trailingSlashInsensitive;
48
49
  f.router = this.router.clone();
@@ -64,6 +65,7 @@ var FederationBuilderImpl = class {
64
65
  f.inboxListeners = this.inboxListeners?.clone();
65
66
  f.inboxErrorHandler = this.inboxErrorHandler;
66
67
  f.sharedInboxKeyDispatcher = this.sharedInboxKeyDispatcher;
68
+ f.idempotencyStrategy = this.idempotencyStrategy;
67
69
  return f;
68
70
  }
69
71
  _getTracer() {
@@ -486,6 +488,10 @@ var FederationBuilderImpl = class {
486
488
  setSharedKeyDispatcher: (dispatcher) => {
487
489
  this.sharedInboxKeyDispatcher = dispatcher;
488
490
  return setters;
491
+ },
492
+ withIdempotency: (strategy) => {
493
+ this.idempotencyStrategy = strategy;
494
+ return setters;
489
495
  }
490
496
  };
491
497
  return setters;
@@ -3,7 +3,7 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { getUserAgent } from "./type-B4NJkfVg.js";
6
+ import { getUserAgent } from "./type-C69ZBu7f.js";
7
7
  import { getLogger } from "@logtape/logtape";
8
8
 
9
9
  //#region src/nodeinfo/client.ts
@@ -1,13 +1,13 @@
1
1
  import "../kv-63Cil1MD.cjs";
2
2
  import "../docloader-D-MrRyHl.cjs";
3
3
  import "../client-CegPX0Rn.cjs";
4
- import "../vocab-DJTYMqyU.cjs";
5
- import "../actor-DMgu-ZjT.cjs";
6
- import "../http-BS6766zs.cjs";
7
- import "../owner-B-7Ptt_m.cjs";
8
- import "../mod-evzlRVZq.cjs";
4
+ import "../vocab-Dw1-yVGg.cjs";
5
+ import "../actor-D6K058Tb.cjs";
6
+ import "../http-D-e6AFwR.cjs";
7
+ import "../owner-BN_tO3cY.cjs";
8
+ import "../mod-CxkWO3Mg.cjs";
9
9
  import "../mod-jQ4OODsl.cjs";
10
- import { ActivityTransformer } from "../context-Dq8aCtMH.cjs";
10
+ import { ActivityTransformer } from "../context-C5BsZkDr.cjs";
11
11
  import "../mq-B7R1Q-M5.cjs";
12
- import { actorDehydrator, autoIdAssigner, getDefaultActivityTransformers } from "../mod-BhMnAkFX.cjs";
12
+ import { actorDehydrator, autoIdAssigner, getDefaultActivityTransformers } from "../mod-8DMWKtQE.cjs";
13
13
  export { ActivityTransformer, actorDehydrator, autoIdAssigner, getDefaultActivityTransformers };
@@ -3,13 +3,13 @@ import { URLPattern } from "urlpattern-polyfill";
3
3
  import "../kv-C7sopW2E.js";
4
4
  import "../docloader-CxWcuWqQ.js";
5
5
  import "../client-bgSdkFa2.js";
6
- import "../vocab-SOE1ifCr.js";
7
- import "../actor-C22bXuuC.js";
8
- import "../http-DqSNLFNY.js";
9
- import "../owner-CQPnQVtf.js";
10
- import "../mod-Cxt4Kpf6.js";
6
+ import "../vocab-BI0Ak5lL.js";
7
+ import "../actor-T6RyhRgk.js";
8
+ import "../http-D6Uj2x2y.js";
9
+ import "../owner-hd9lvQcP.js";
10
+ import "../mod-DlU8ISoa.js";
11
11
  import "../mod-DBzN0aCM.js";
12
- import { ActivityTransformer } from "../context-CDSZdQHD.js";
12
+ import { ActivityTransformer } from "../context-ByZprN0S.js";
13
13
  import "../mq-CRGm1e_F.js";
14
- import { actorDehydrator, autoIdAssigner, getDefaultActivityTransformers } from "../mod-RI3-KvUI.js";
14
+ import { actorDehydrator, autoIdAssigner, getDefaultActivityTransformers } from "../mod-D6hQoxC5.js";
15
15
  export { ActivityTransformer, actorDehydrator, autoIdAssigner, getDefaultActivityTransformers };
@@ -3,29 +3,30 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { Follow, Person } from "../type-B4NJkfVg.js";
6
+ import { Follow, Person } from "../type-C69ZBu7f.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import { assert } from "../assert-MZs1qjMx.js";
9
9
  import { assertInstanceOf } from "../assert_instance_of-DHz7EHNU.js";
10
10
  import { MemoryKvStore } from "../kv-CRZrzyXm.js";
11
- import { FederationImpl, actorDehydrator, autoIdAssigner } from "../middleware-ByPnvMMS.js";
12
- import "../client-BW4V0OJx.js";
13
- import "../lookup-CiU3QxQz.js";
11
+ import { FederationImpl, actorDehydrator, autoIdAssigner } from "../middleware-DY9B2lL8.js";
12
+ import "../client-CnOdwLLN.js";
13
+ import "../lookup-pV0JOsuV.js";
14
14
  import "../types-BSuWJsOm.js";
15
- import "../actor-DVpsNXhn.js";
16
- import "../key-CfiBDu3o.js";
17
- import "../http-Cox5GsED.js";
18
- import "../authdocloader-BkIZCKQv.js";
19
- import "../ld-CxgmnSO3.js";
20
- import "../owner-Cxob5_PK.js";
21
- import "../proof-BiSQNUmQ.js";
22
- import "../inbox-BDdRbWNI.js";
23
- import "../builder-E2Icrl_a.js";
15
+ import "../actor-DuCeRiNh.js";
16
+ import "../key-1KXru8Ug.js";
17
+ import "../http-BNOYnVsU.js";
18
+ import "../authdocloader-Brax1A32.js";
19
+ import "../ld-Dv8DNNAT.js";
20
+ import "../owner-e3FYDhsk.js";
21
+ import "../proof-6gFMwMNJ.js";
22
+ import "../inbox-BRru9pX3.js";
23
+ import "../builder-CYOcDUkj.js";
24
24
  import "../collection-CcnIw1qY.js";
25
- import "../keycache-CVBjz3xi.js";
26
- import "../retry-CfF8Gn4d.js";
27
- import "../send-DSEhWIYD.js";
28
- import { test } from "../testing-ByQmUvf-.js";
25
+ import "../keycache-CN61iGVj.js";
26
+ import "../negotiation-5NPJL6zp.js";
27
+ import "../retry-D4GJ670a.js";
28
+ import "../send-Tl9NOnmO.js";
29
+ import { test } from "../testing-BWNCAbL-.js";
29
30
 
30
31
  //#region src/compat/transformers.test.ts
31
32
  const federation = new FederationImpl({ kv: new MemoryKvStore() });
@@ -3,11 +3,11 @@ import { URLPattern } from "urlpattern-polyfill";
3
3
  import { KvKey, KvStore } from "./kv-C7sopW2E.js";
4
4
  import { AuthenticatedDocumentLoaderFactory, DocumentLoader, DocumentLoaderFactory, GetUserAgentOptions } from "./docloader-CxWcuWqQ.js";
5
5
  import { GetNodeInfoOptions, JsonValue, NodeInfo } from "./client-bgSdkFa2.js";
6
- import { Activity, Collection, CryptographicKey, Hashtag, Link, Multikey, Object as Object$1 } from "./vocab-SOE1ifCr.js";
7
- import { Actor, Recipient } from "./actor-C22bXuuC.js";
8
- import { HttpMessageSignaturesSpec } from "./http-DqSNLFNY.js";
9
- import { GetKeyOwnerOptions } from "./owner-CQPnQVtf.js";
10
- import { LookupObjectOptions, TraverseCollectionOptions } from "./mod-Cxt4Kpf6.js";
6
+ import { Activity, Collection, CryptographicKey, Hashtag, Link, Multikey, Object as Object$1 } from "./vocab-BI0Ak5lL.js";
7
+ import { Actor, Recipient } from "./actor-T6RyhRgk.js";
8
+ import { HttpMessageSignaturesSpec } from "./http-D6Uj2x2y.js";
9
+ import { GetKeyOwnerOptions } from "./owner-hd9lvQcP.js";
10
+ import { LookupObjectOptions, TraverseCollectionOptions } from "./mod-DlU8ISoa.js";
11
11
  import { Link as Link$1, LookupWebFingerOptions, ResourceDescriptor } from "./mod-DBzN0aCM.js";
12
12
  import { MessageQueue } from "./mq-CRGm1e_F.js";
13
13
  import { Span, TracerProvider } from "@opentelemetry/api";
@@ -1306,6 +1306,36 @@ interface CollectionCallbackSetters<TContext extends Context<TContextData>, TCon
1306
1306
  */
1307
1307
  authorize(predicate: AuthorizePredicate<TContextData>): CollectionCallbackSetters<TContext, TContextData, TFilter>;
1308
1308
  }
1309
+ /**
1310
+ * The strategy for handling activity idempotency in inbox processing.
1311
+ *
1312
+ * - `"global"`: Activities are deduplicated globally across all inboxes and
1313
+ * origins. The same activity ID will be processed only once, regardless
1314
+ * of which inbox receives it or which server sent it.
1315
+ *
1316
+ * - `"per-origin"`: Activities are deduplicated per receiving server's origin.
1317
+ * The same activity ID will be processed only once on each receiving server,
1318
+ * but can be processed separately on different receiving servers. This had
1319
+ * been the default behavior in Fedify 1.x versions.
1320
+ *
1321
+ * - `"per-inbox"`: Activities are deduplicated per inbox. The same activity
1322
+ * ID can be processed once per inbox, allowing the same activity to be
1323
+ * delivered to multiple inboxes independently. This follows standard
1324
+ * ActivityPub behavior and is the default strategy since Fedify 2.0.0.
1325
+ *
1326
+ * @since 1.9.0
1327
+ */
1328
+ type IdempotencyStrategy = "global" | "per-origin" | "per-inbox";
1329
+ /**
1330
+ * A callback to generate a custom idempotency key for an activity.
1331
+ * Returns the cache key to use, or null to skip idempotency checking.
1332
+ * @template TContextData The context data to pass to the {@link InboxContext}.
1333
+ * @param ctx The inbox context.
1334
+ * @param activity The activity being processed.
1335
+ * @returns The idempotency key to use for caching, or null to skip caching.
1336
+ * @since 1.9.0
1337
+ */
1338
+ type IdempotencyKeyCallback<TContextData> = (ctx: InboxContext<TContextData>, activity: Activity) => string | null | Promise<string | null>;
1309
1339
  /**
1310
1340
  * Registry for inbox listeners for different activity types.
1311
1341
  */
@@ -1336,6 +1366,36 @@ interface InboxListenerSetters<TContextData> {
1336
1366
  * @since 0.11.0
1337
1367
  */
1338
1368
  setSharedKeyDispatcher(dispatcher: SharedInboxKeyDispatcher<TContextData>): InboxListenerSetters<TContextData>;
1369
+ /**
1370
+ * Configures the strategy for handling activity idempotency in inbox processing.
1371
+ *
1372
+ * @example
1373
+ * Use per-inbox strategy (standard ActivityPub behavior):
1374
+ * ```
1375
+ * federation
1376
+ * .setInboxListeners("/users/{identifier}/inbox", "/inbox")
1377
+ * .withIdempotency("per-inbox");
1378
+ * ```
1379
+ *
1380
+ * Use custom strategy:
1381
+ * ```
1382
+ * federation
1383
+ * .setInboxListeners("/users/{identifier}/inbox", "/inbox")
1384
+ * .withIdempotency((ctx, activity) => {
1385
+ * // Return null to skip idempotency
1386
+ * return `${ctx.origin}:${activity.id?.href}:${ctx.recipient}`;
1387
+ * });
1388
+ * ```
1389
+ *
1390
+ * @param strategy The idempotency strategy to use. Can be:
1391
+ * - `"global"`: Activities are deduplicated across all inboxes and origins
1392
+ * - `"per-origin"`: Activities are deduplicated per inbox origin
1393
+ * - `"per-inbox"`: Activities are deduplicated per inbox
1394
+ * - A custom callback function that returns the cache key to use
1395
+ * @returns The setters object so that settings can be chained.
1396
+ * @since 1.9.0
1397
+ */
1398
+ withIdempotency(strategy: IdempotencyStrategy | IdempotencyKeyCallback<TContextData>): InboxListenerSetters<TContextData>;
1339
1399
  }
1340
1400
  /**
1341
1401
  * Parameters of {@link Federation.fetch} method.
@@ -2254,4 +2314,4 @@ interface ActorKeyPair extends CryptoKeyPair {
2254
2314
  multikey: Multikey;
2255
2315
  }
2256
2316
  //#endregion
2257
- export { ActivityTransformer, ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CreateFederationOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, Federatable, Federation, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, ForwardActivityOptions, GetSignedKeyOptions, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, Message, NodeInfoDispatcher, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboxErrorHandler, PageItems, ParamsKeyPath, ParseUriResult, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, SharedInboxKeyDispatcher, WebFingerLinksDispatcher, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, respondWithObject, respondWithObjectIfAcceptable };
2317
+ export { ActivityTransformer, ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CreateFederationOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, Federatable, Federation, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, ForwardActivityOptions, GetSignedKeyOptions, IdempotencyKeyCallback, IdempotencyStrategy, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, Message, NodeInfoDispatcher, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboxErrorHandler, PageItems, ParamsKeyPath, ParseUriResult, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, SharedInboxKeyDispatcher, WebFingerLinksDispatcher, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, respondWithObject, respondWithObjectIfAcceptable };
@@ -1,11 +1,11 @@
1
1
  import { KvKey, KvStore } from "./kv-63Cil1MD.cjs";
2
2
  import { AuthenticatedDocumentLoaderFactory, DocumentLoader, DocumentLoaderFactory, GetUserAgentOptions } from "./docloader-D-MrRyHl.cjs";
3
3
  import { GetNodeInfoOptions, JsonValue, NodeInfo } from "./client-CegPX0Rn.cjs";
4
- import { Activity, Collection, CryptographicKey, Hashtag, Link, Multikey, Object as Object$1 } from "./vocab-DJTYMqyU.cjs";
5
- import { Actor, Recipient } from "./actor-DMgu-ZjT.cjs";
6
- import { HttpMessageSignaturesSpec } from "./http-BS6766zs.cjs";
7
- import { GetKeyOwnerOptions } from "./owner-B-7Ptt_m.cjs";
8
- import { LookupObjectOptions, TraverseCollectionOptions } from "./mod-evzlRVZq.cjs";
4
+ import { Activity, Collection, CryptographicKey, Hashtag, Link, Multikey, Object as Object$1 } from "./vocab-Dw1-yVGg.cjs";
5
+ import { Actor, Recipient } from "./actor-D6K058Tb.cjs";
6
+ import { HttpMessageSignaturesSpec } from "./http-D-e6AFwR.cjs";
7
+ import { GetKeyOwnerOptions } from "./owner-BN_tO3cY.cjs";
8
+ import { LookupObjectOptions, TraverseCollectionOptions } from "./mod-CxkWO3Mg.cjs";
9
9
  import { Link as Link$1, LookupWebFingerOptions, ResourceDescriptor } from "./mod-jQ4OODsl.cjs";
10
10
  import { MessageQueue } from "./mq-B7R1Q-M5.cjs";
11
11
  import { Span, TracerProvider } from "@opentelemetry/api";
@@ -1304,6 +1304,36 @@ interface CollectionCallbackSetters<TContext extends Context<TContextData>, TCon
1304
1304
  */
1305
1305
  authorize(predicate: AuthorizePredicate<TContextData>): CollectionCallbackSetters<TContext, TContextData, TFilter>;
1306
1306
  }
1307
+ /**
1308
+ * The strategy for handling activity idempotency in inbox processing.
1309
+ *
1310
+ * - `"global"`: Activities are deduplicated globally across all inboxes and
1311
+ * origins. The same activity ID will be processed only once, regardless
1312
+ * of which inbox receives it or which server sent it.
1313
+ *
1314
+ * - `"per-origin"`: Activities are deduplicated per receiving server's origin.
1315
+ * The same activity ID will be processed only once on each receiving server,
1316
+ * but can be processed separately on different receiving servers. This had
1317
+ * been the default behavior in Fedify 1.x versions.
1318
+ *
1319
+ * - `"per-inbox"`: Activities are deduplicated per inbox. The same activity
1320
+ * ID can be processed once per inbox, allowing the same activity to be
1321
+ * delivered to multiple inboxes independently. This follows standard
1322
+ * ActivityPub behavior and is the default strategy since Fedify 2.0.0.
1323
+ *
1324
+ * @since 1.9.0
1325
+ */
1326
+ type IdempotencyStrategy = "global" | "per-origin" | "per-inbox";
1327
+ /**
1328
+ * A callback to generate a custom idempotency key for an activity.
1329
+ * Returns the cache key to use, or null to skip idempotency checking.
1330
+ * @template TContextData The context data to pass to the {@link InboxContext}.
1331
+ * @param ctx The inbox context.
1332
+ * @param activity The activity being processed.
1333
+ * @returns The idempotency key to use for caching, or null to skip caching.
1334
+ * @since 1.9.0
1335
+ */
1336
+ type IdempotencyKeyCallback<TContextData> = (ctx: InboxContext<TContextData>, activity: Activity) => string | null | Promise<string | null>;
1307
1337
  /**
1308
1338
  * Registry for inbox listeners for different activity types.
1309
1339
  */
@@ -1334,6 +1364,36 @@ interface InboxListenerSetters<TContextData> {
1334
1364
  * @since 0.11.0
1335
1365
  */
1336
1366
  setSharedKeyDispatcher(dispatcher: SharedInboxKeyDispatcher<TContextData>): InboxListenerSetters<TContextData>;
1367
+ /**
1368
+ * Configures the strategy for handling activity idempotency in inbox processing.
1369
+ *
1370
+ * @example
1371
+ * Use per-inbox strategy (standard ActivityPub behavior):
1372
+ * ```
1373
+ * federation
1374
+ * .setInboxListeners("/users/{identifier}/inbox", "/inbox")
1375
+ * .withIdempotency("per-inbox");
1376
+ * ```
1377
+ *
1378
+ * Use custom strategy:
1379
+ * ```
1380
+ * federation
1381
+ * .setInboxListeners("/users/{identifier}/inbox", "/inbox")
1382
+ * .withIdempotency((ctx, activity) => {
1383
+ * // Return null to skip idempotency
1384
+ * return `${ctx.origin}:${activity.id?.href}:${ctx.recipient}`;
1385
+ * });
1386
+ * ```
1387
+ *
1388
+ * @param strategy The idempotency strategy to use. Can be:
1389
+ * - `"global"`: Activities are deduplicated across all inboxes and origins
1390
+ * - `"per-origin"`: Activities are deduplicated per inbox origin
1391
+ * - `"per-inbox"`: Activities are deduplicated per inbox
1392
+ * - A custom callback function that returns the cache key to use
1393
+ * @returns The setters object so that settings can be chained.
1394
+ * @since 1.9.0
1395
+ */
1396
+ withIdempotency(strategy: IdempotencyStrategy | IdempotencyKeyCallback<TContextData>): InboxListenerSetters<TContextData>;
1337
1397
  }
1338
1398
  /**
1339
1399
  * Parameters of {@link Federation.fetch} method.
@@ -2252,4 +2312,4 @@ interface ActorKeyPair extends CryptoKeyPair {
2252
2312
  multikey: Multikey;
2253
2313
  }
2254
2314
  //#endregion
2255
- export { ActivityTransformer, ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CreateFederationOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, Federatable, Federation, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, ForwardActivityOptions, GetSignedKeyOptions, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, Message, NodeInfoDispatcher, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboxErrorHandler, PageItems, ParamsKeyPath, ParseUriResult, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, SharedInboxKeyDispatcher, WebFingerLinksDispatcher, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, respondWithObject, respondWithObjectIfAcceptable };
2315
+ export { ActivityTransformer, ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CreateFederationOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, Federatable, Federation, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, ForwardActivityOptions, GetSignedKeyOptions, IdempotencyKeyCallback, IdempotencyStrategy, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, Message, NodeInfoDispatcher, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboxErrorHandler, PageItems, ParamsKeyPath, ParseUriResult, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, SharedInboxKeyDispatcher, WebFingerLinksDispatcher, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, respondWithObject, respondWithObjectIfAcceptable };
@@ -10,7 +10,7 @@ const node_net = require_chunk.__toESM(require("node:net"));
10
10
 
11
11
  //#region deno.json
12
12
  var name = "@fedify/fedify";
13
- var version = "2.0.0-dev.1641+6b0c942c";
13
+ var version = "2.0.0-dev.1690+304896b8";
14
14
  var license = "MIT";
15
15
  var exports$1 = {
16
16
  ".": "./src/mod.ts",
@@ -95,7 +95,7 @@ var tasks = {
95
95
  "command": "deno publish",
96
96
  "dependencies": ["codegen"]
97
97
  },
98
- "pnpm:install": "pnpm install",
98
+ "pnpm:install": "pnpm install --silent",
99
99
  "pnpm:build": {
100
100
  "command": "pnpm exec tsdown",
101
101
  "dependencies": ["codegen", "pnpm:install"]
@@ -9,7 +9,7 @@ import { isIP } from "node:net";
9
9
 
10
10
  //#region deno.json
11
11
  var name = "@fedify/fedify";
12
- var version = "2.0.0-dev.1641+6b0c942c";
12
+ var version = "2.0.0-dev.1690+304896b8";
13
13
  var license = "MIT";
14
14
  var exports = {
15
15
  ".": "./src/mod.ts",
@@ -94,7 +94,7 @@ var tasks = {
94
94
  "command": "deno publish",
95
95
  "dependencies": ["codegen"]
96
96
  },
97
- "pnpm:install": "pnpm install",
97
+ "pnpm:install": "pnpm install --silent",
98
98
  "pnpm:build": {
99
99
  "command": "pnpm exec tsdown",
100
100
  "dependencies": ["codegen", "pnpm:install"]
@@ -3,7 +3,7 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { __commonJS, __toESM } from "./type-B4NJkfVg.js";
6
+ import { __commonJS, __toESM } from "./type-C69ZBu7f.js";
7
7
 
8
8
  //#region ../../node_modules/.pnpm/glob-to-regexp@0.4.1/node_modules/glob-to-regexp/index.js
9
9
  var require_glob_to_regexp = __commonJS({ "../../node_modules/.pnpm/glob-to-regexp@0.4.1/node_modules/glob-to-regexp/index.js"(exports, module) {
@@ -3,20 +3,20 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { Activity, Note, Person } from "../type-B4NJkfVg.js";
6
+ import { Activity, Note, Person } from "../type-C69ZBu7f.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import "../assert-MZs1qjMx.js";
9
9
  import "../assert_instance_of-DHz7EHNU.js";
10
10
  import { MemoryKvStore } from "../kv-CRZrzyXm.js";
11
- import "../lookup-CiU3QxQz.js";
12
- import "../inbox-BDdRbWNI.js";
13
- import { createFederationBuilder } from "../builder-E2Icrl_a.js";
14
- import { test } from "../testing-ByQmUvf-.js";
15
- import { assertExists } from "../std__assert-DWivtrGR.js";
16
- import "../assert_rejects-7UF4R_Qs.js";
17
- import "../assert_is_error-B035L3om.js";
18
- import "../assert_not_equals-C80BG-_5.js";
19
- import { assertThrows } from "../assert_throws-53_pKeP3.js";
11
+ import "../lookup-pV0JOsuV.js";
12
+ import "../inbox-BRru9pX3.js";
13
+ import { createFederationBuilder } from "../builder-CYOcDUkj.js";
14
+ import { test } from "../testing-BWNCAbL-.js";
15
+ import { assertExists } from "../std__assert-X-_kMxKM.js";
16
+ import "../assert_rejects-DiIiJbZn.js";
17
+ import "../assert_is_error-BPGph1Jx.js";
18
+ import "../assert_not_equals-f3m3epl3.js";
19
+ import { assertThrows } from "../assert_throws-BOO88avQ.js";
20
20
 
21
21
  //#region src/federation/builder.test.ts
22
22
  test("FederationBuilder", async (t) => {
@@ -3,18 +3,18 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import "../type-B4NJkfVg.js";
6
+ import "../type-C69ZBu7f.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import "../assert-MZs1qjMx.js";
9
9
  import "../assert_instance_of-DHz7EHNU.js";
10
- import "../lookup-CiU3QxQz.js";
10
+ import "../lookup-pV0JOsuV.js";
11
11
  import { buildCollectionSynchronizationHeader, digest } from "../collection-CcnIw1qY.js";
12
- import { test } from "../testing-ByQmUvf-.js";
13
- import "../std__assert-DWivtrGR.js";
14
- import "../assert_rejects-7UF4R_Qs.js";
15
- import "../assert_is_error-B035L3om.js";
16
- import "../assert_not_equals-C80BG-_5.js";
17
- import "../assert_throws-53_pKeP3.js";
12
+ import { test } from "../testing-BWNCAbL-.js";
13
+ import "../std__assert-X-_kMxKM.js";
14
+ import "../assert_rejects-DiIiJbZn.js";
15
+ import "../assert_is_error-BPGph1Jx.js";
16
+ import "../assert_not_equals-f3m3epl3.js";
17
+ import "../assert_throws-BOO88avQ.js";
18
18
  import { decodeHex } from "byte-encodings/hex";
19
19
 
20
20
  //#region src/federation/collection.test.ts