@fedify/fedify 2.4.0-dev.1564 → 2.4.0-dev.1570

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 (113) hide show
  1. package/README.md +4 -0
  2. package/dist/{assert-OguE97r2.mjs → assert-DvVHoIZ0.mjs} +1 -1
  3. package/dist/{assert_instance_of-DBC5X09g.mjs → assert_instance_of-CxoC8bVq.mjs} +1 -1
  4. package/dist/{assert_not_equals-DkVK8oqV.mjs → assert_not_equals-C8vcTTA3.mjs} +1 -1
  5. package/dist/{assert_rejects-DN60FHPX.mjs → assert_rejects-DAdaaIWM.mjs} +2 -2
  6. package/dist/{assert_strict_equals-XEgZAlrj.mjs → assert_strict_equals-BzqyKuYL.mjs} +1 -1
  7. package/dist/{assert_throws-BOkhLGYc.mjs → assert_throws-zN79lgIC.mjs} +1 -1
  8. package/dist/{builder-DQrTY2uR.mjs → builder-CJnWbgbj.mjs} +23 -3
  9. package/dist/codec-nfBU4Up4.mjs +124 -0
  10. package/dist/compat/mod.d.cts +1 -1
  11. package/dist/compat/mod.d.ts +1 -1
  12. package/dist/compat/outgoing-jsonld.test.mjs +3 -3
  13. package/dist/compat/public-audience.test.mjs +3 -3
  14. package/dist/compat/transformers.test.mjs +5 -5
  15. package/dist/{context-DVoTs_wM.mjs → context-BBRTgkrs.mjs} +8 -2
  16. package/dist/{context-BBVLF7lx.d.cts → context-BLe0NPtZ.d.cts} +530 -259
  17. package/dist/{context-BU6jSQdo.d.ts → context-GfQA-CqB.d.ts} +529 -259
  18. package/dist/{deno-0Q35TVjL.mjs → deno-klNxGW7W.mjs} +1 -1
  19. package/dist/{docloader-DnNi7FT5.mjs → docloader-CuFH35j1.mjs} +3 -3
  20. package/dist/federation/builder.test.mjs +5 -5
  21. package/dist/federation/circuit-breaker.test.mjs +5 -5
  22. package/dist/federation/collection.test.mjs +3 -3
  23. package/dist/federation/handler.test.mjs +13 -23
  24. package/dist/federation/idempotency.test.mjs +6 -6
  25. package/dist/federation/inbox.test.mjs +3 -3
  26. package/dist/federation/keycache.test.mjs +5 -5
  27. package/dist/federation/kv.test.mjs +3 -3
  28. package/dist/federation/metrics.test.mjs +4 -4
  29. package/dist/federation/middleware.test.mjs +204 -19
  30. package/dist/federation/mod.cjs +3 -259
  31. package/dist/federation/mod.d.cts +4 -4
  32. package/dist/federation/mod.d.ts +4 -4
  33. package/dist/federation/mod.js +1 -257
  34. package/dist/federation/mq.test.mjs +103 -261
  35. package/dist/federation/negotiation.test.mjs +4 -4
  36. package/dist/federation/retry.test.mjs +3 -3
  37. package/dist/federation/router.test.mjs +5 -5
  38. package/dist/federation/send.test.mjs +10 -10
  39. package/dist/federation/tasks/codec.test.d.mts +2 -0
  40. package/dist/federation/tasks/codec.test.mjs +302 -0
  41. package/dist/federation/tasks/enqueue.test.d.mts +2 -0
  42. package/dist/federation/tasks/enqueue.test.mjs +1057 -0
  43. package/dist/federation/tasks/tasks.test.d.mts +2 -0
  44. package/dist/federation/tasks/tasks.test.mjs +1228 -0
  45. package/dist/federation/temporal.test.mjs +4 -4
  46. package/dist/federation/webfinger.test.mjs +6 -6
  47. package/dist/{http-BjTMQwgu.js → http-D0jH0kco.js} +6 -4
  48. package/dist/{http-Blx3a-we.cjs → http-DeuPW1Oh.cjs} +6 -4
  49. package/dist/{http-ZYObKFyR.mjs → http-JdRPUYku.mjs} +4 -4
  50. package/dist/{key-By86iSF1.mjs → key-o0_ipvUR.mjs} +2 -2
  51. package/dist/{kv-cache-BB6kQbPO.cjs → kv-cache-C3rqzQvu.cjs} +1 -1
  52. package/dist/{kv-cache-W72QYEvy.mjs → kv-cache-CM7w20U5.mjs} +1 -1
  53. package/dist/{kv-cache-3GvEiOJJ.js → kv-cache-DSWq2JHU.js} +1 -1
  54. package/dist/{ld-uNPJsHf9.mjs → ld-C__CEgQH.mjs} +3 -3
  55. package/dist/{metrics-D7atQvAx.mjs → metrics-CLSPm4dZ.mjs} +6 -4
  56. package/dist/{mq-D-nlpY04.d.ts → metrics-CoUJLQhZ.d.cts} +69 -1
  57. package/dist/{mq-D8uSFzxe.d.cts → metrics-Dc4jR-IC.d.ts} +69 -1
  58. package/dist/{middleware-DM5XOWG5.cjs → middleware-B502nwxx.cjs} +874 -134
  59. package/dist/{middleware-DYaez_JC.mjs → middleware-CdMiavoh.mjs} +1 -1
  60. package/dist/{middleware-B3XvOhoB.mjs → middleware-CjHqy-1i.mjs} +469 -150
  61. package/dist/{middleware-ICGLZUHG.js → middleware-zuLSkPIk.js} +863 -135
  62. package/dist/{mod-C0F6kvgS.d.cts → mod-B8Efb9qp.d.cts} +1 -1
  63. package/dist/{mod-yvIXFAEi.d.cts → mod-BtEaIEcD.d.cts} +1 -31
  64. package/dist/{mod-vPYVoa5n.d.ts → mod-Cmr39iWq.d.ts} +1 -1
  65. package/dist/{mod-DFvNJcNb.d.ts → mod-UMmveiO0.d.ts} +1 -31
  66. package/dist/mod.cjs +6 -6
  67. package/dist/mod.d.cts +6 -6
  68. package/dist/mod.d.ts +6 -6
  69. package/dist/mod.js +5 -5
  70. package/dist/mq-03vS-C9P.mjs +276 -0
  71. package/dist/nodeinfo/client.test.mjs +3 -3
  72. package/dist/nodeinfo/handler.test.mjs +5 -5
  73. package/dist/nodeinfo/types.test.mjs +4 -4
  74. package/dist/otel/exporter.test.mjs +3 -3
  75. package/dist/{outgoing-jsonld-L_DbOaFe.mjs → outgoing-jsonld-BNL8AC14.mjs} +1 -1
  76. package/dist/{owner-C1IdnJbE.mjs → owner-gz4TUfKG.mjs} +2 -2
  77. package/dist/{proof-B0wYpR4P.cjs → proof-CiDzRtr0.cjs} +1 -1
  78. package/dist/{proof-3th48TRO.mjs → proof-CuQpZ_AT.mjs} +5 -5
  79. package/dist/{proof-hzw73GGW.js → proof-DQWTf6oB.js} +1 -1
  80. package/dist/{send-BqPEr21p.mjs → send-B60teucv.mjs} +3 -3
  81. package/dist/sig/accept.test.mjs +1 -1
  82. package/dist/sig/http.test.mjs +8 -8
  83. package/dist/sig/key.test.mjs +6 -6
  84. package/dist/sig/ld.test.mjs +7 -7
  85. package/dist/sig/mod.cjs +2 -2
  86. package/dist/sig/mod.js +2 -2
  87. package/dist/sig/owner.test.mjs +6 -6
  88. package/dist/sig/proof.test.mjs +8 -8
  89. package/dist/{std__assert-BBjXFNOb.mjs → std__assert-Dh6uLf_q.mjs} +4 -4
  90. package/dist/{temporal-C7NUQ3nU.mjs → temporal-CvVMrvJJ.mjs} +1 -1
  91. package/dist/testing/mod.d.mts +1037 -8
  92. package/dist/testing/mod.mjs +3 -2
  93. package/dist/testing-Dy-WhqpN.mjs +77 -0
  94. package/dist/utils/docloader.test.mjs +6 -6
  95. package/dist/utils/kv-cache.test.mjs +1 -1
  96. package/dist/utils/mod.cjs +1 -1
  97. package/dist/utils/mod.d.cts +1 -1
  98. package/dist/utils/mod.d.ts +1 -1
  99. package/dist/utils/mod.js +1 -1
  100. package/package.json +8 -6
  101. /package/dist/{accept-CPkZzmGN.mjs → accept-CgDcxvjV.mjs} +0 -0
  102. /package/dist/{activity-listener-tztVvlNb.mjs → activity-listener-BeTGV3wc.mjs} +0 -0
  103. /package/dist/{assert_equals-C-ZRDbaf.mjs → assert_equals-PBVKNMJd.mjs} +0 -0
  104. /package/dist/{circuit-breaker-CSWsyoef.mjs → circuit-breaker-hJBB6jwA.mjs} +0 -0
  105. /package/dist/{client-ByXmQhYD.mjs → client-B_A6mfn3.mjs} +0 -0
  106. /package/dist/{collection-Cc3DVAhE.mjs → collection-Dp5ky45w.mjs} +0 -0
  107. /package/dist/{keycache-BeU0LCII.mjs → keycache-CaOR6NYg.mjs} +0 -0
  108. /package/dist/{keys-DGu1NFwu.mjs → keys-CSYsOMFG.mjs} +0 -0
  109. /package/dist/{kv-rV3vodCc.mjs → kv-CIvR3Non.mjs} +0 -0
  110. /package/dist/{negotiation-DDstyBvc.mjs → negotiation-m_L2nyS3.mjs} +0 -0
  111. /package/dist/{public-audience-Cvbr2Gzt.mjs → public-audience-c9zmYKgA.mjs} +0 -0
  112. /package/dist/{retry-CXg_MBI-.mjs → retry-DI4O-zYl.mjs} +0 -0
  113. /package/dist/{types-J53Kw7so.mjs → types-BFowWFTT.mjs} +0 -0
@@ -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.1564+5a2c6c2c";
6
+ var version = "2.4.0-dev.1570+f1b6aaa3";
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-By86iSF1.mjs";
5
- import { n as doubleKnock } from "./http-ZYObKFyR.mjs";
4
+ import { o as validateCryptoKey } from "./key-o0_ipvUR.mjs";
5
+ import { n as doubleKnock } from "./http-JdRPUYku.mjs";
6
6
  import { getLogger } from "@logtape/logtape";
7
- import { UrlError, createActivityPubRequest, getRemoteDocument, logRequest, validatePublicUrl } from "@fedify/vocab-runtime";
8
7
  import { curry } from "es-toolkit";
8
+ import { UrlError, createActivityPubRequest, getRemoteDocument, logRequest, validatePublicUrl } from "@fedify/vocab-runtime";
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 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-DQrTY2uR.mjs";
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-CJnWbgbj.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 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";
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";
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-C-ZRDbaf.mjs";
5
- import "../std__assert-BBjXFNOb.mjs";
6
- import { n as digest, t as buildCollectionSynchronizationHeader } from "../collection-Cc3DVAhE.mjs";
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";
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-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-ZYObKFyR.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-uNPJsHf9.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-B3XvOhoB.mjs";
16
- import { t as ActivityListenerSet } from "../activity-listener-tztVvlNb.mjs";
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-JdRPUYku.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-C__CEgQH.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-CjHqy-1i.mjs";
16
+ import { t as ActivityListenerSet } from "../activity-listener-BeTGV3wc.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";
@@ -111,16 +111,11 @@ test("handleActor()", async () => {
111
111
  "https://www.w3.org/ns/did/v1",
112
112
  "https://w3id.org/security/multikey/v1",
113
113
  "https://gotosocial.org/ns",
114
- "https://w3id.org/fep/7aa9",
115
114
  {
116
115
  alsoKnownAs: {
117
116
  "@id": "as:alsoKnownAs",
118
117
  "@type": "@id"
119
118
  },
120
- featuredCollections: {
121
- "@id": "https://w3id.org/fep/7aa9#featuredCollections",
122
- "@type": "@id"
123
- },
124
119
  manuallyApprovesFollowers: "as:manuallyApprovesFollowers",
125
120
  movedTo: {
126
121
  "@id": "as:movedTo",
@@ -200,16 +195,11 @@ test("handleActor()", async () => {
200
195
  "https://www.w3.org/ns/did/v1",
201
196
  "https://w3id.org/security/multikey/v1",
202
197
  "https://gotosocial.org/ns",
203
- "https://w3id.org/fep/7aa9",
204
198
  {
205
199
  alsoKnownAs: {
206
200
  "@id": "as:alsoKnownAs",
207
201
  "@type": "@id"
208
202
  },
209
- featuredCollections: {
210
- "@id": "https://w3id.org/fep/7aa9#featuredCollections",
211
- "@type": "@id"
212
- },
213
203
  manuallyApprovesFollowers: "as:manuallyApprovesFollowers",
214
204
  movedTo: {
215
205
  "@id": "as:movedTo",
@@ -1,12 +1,12 @@
1
1
  import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
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-3th48TRO.mjs";
8
- import { t as MemoryKvStore } from "../kv-rV3vodCc.mjs";
9
- import { o as createFederation } from "../middleware-B3XvOhoB.mjs";
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-CuQpZ_AT.mjs";
9
+ import { o as createFederation } from "../middleware-CjHqy-1i.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-C-ZRDbaf.mjs";
5
- import { t as assertThrows } from "../assert_throws-BOkhLGYc.mjs";
6
- import { t as ActivityListenerSet } from "../activity-listener-tztVvlNb.mjs";
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";
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 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";
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";
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 assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
5
- import "../std__assert-BBjXFNOb.mjs";
6
- import { t as MemoryKvStore } from "../kv-rV3vodCc.mjs";
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
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-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-D7atQvAx.mjs";
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-CLSPm4dZ.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,31 +2,34 @@ 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 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-D7atQvAx.mjs";
14
- import { l as verifyRequest, s as signRequest } from "../http-ZYObKFyR.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-DnNi7FT5.mjs";
17
- import { a as compactJsonLd, h as verifyJsonLd, p as signJsonLd, s as detachSignature } from "../ld-uNPJsHf9.mjs";
18
- import { t as doesActorOwnKey } from "../owner-C1IdnJbE.mjs";
19
- import { i as verifyObject, r as signObject } from "../proof-3th48TRO.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-B3XvOhoB.mjs";
22
- import { t as CircuitBreaker } from "../circuit-breaker-CSWsyoef.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-CLSPm4dZ.mjs";
16
+ import { l as verifyRequest, s as signRequest } from "../http-JdRPUYku.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-CuFH35j1.mjs";
19
+ import { a as compactJsonLd, h as verifyJsonLd, p as signJsonLd, s as detachSignature } from "../ld-C__CEgQH.mjs";
20
+ import { t as doesActorOwnKey } from "../owner-gz4TUfKG.mjs";
21
+ import { i as verifyObject, r as signObject } from "../proof-CuQpZ_AT.mjs";
22
+ import { g as handleBenchmarkTrigger, i as KvSpecDeterminer, n as FederationImpl, o as createFederation, r as InboxContextImpl, t as ContextImpl } from "../middleware-CjHqy-1i.mjs";
23
+ import { t as CircuitBreaker } from "../circuit-breaker-hJBB6jwA.mjs";
24
+ import { t as TaskCodec } from "../codec-nfBU4Up4.mjs";
23
25
  import { configure, reset } from "@logtape/logtape";
24
26
  import { RouterError } from "@fedify/uri-template";
25
27
  import * as vocab from "@fedify/vocab";
26
- import { Create, Offer, Person, getTypeId, lookupObject } from "@fedify/vocab";
28
+ import { Create, Note, Offer, Person, getTypeId, lookupObject } from "@fedify/vocab";
27
29
  import { SpanStatusCode, metrics } from "@opentelemetry/api";
28
30
  import { createTestMeterProvider, createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
29
31
  import { FetchError, getDocumentLoader } from "@fedify/vocab-runtime";
32
+ import { deepStrictEqual, ok, rejects, strictEqual } from "node:assert/strict";
30
33
  import serialize from "json-canon";
31
34
  import { DataPointType, MeterProvider as MeterProvider$1, MetricReader } from "@opentelemetry/sdk-metrics";
32
35
  //#region ../fixture/src/fixtures/example.com/create.json
@@ -6956,5 +6959,187 @@ test("createFederation() omits instrumentation when no meterProvider is set", ()
6956
6959
  assertStrictEquals(ctx.documentLoader, mockDocumentLoader);
6957
6960
  assertStrictEquals(ctx.contextLoader, mockDocumentLoader);
6958
6961
  });
6962
+ const taskCodec = new TaskCodec({ contextLoader: mockDocumentLoader });
6963
+ const decodeEnvelope = async (message) => {
6964
+ const decoded = await taskCodec.decode(envelopeSchema, message.data);
6965
+ if (!decoded.ok) throw decoded.error;
6966
+ return decoded.value;
6967
+ };
6968
+ const envelope = (title) => ({
6969
+ note: new Note({ content: title }),
6970
+ title
6971
+ });
6972
+ var RendezvousQueue = class {
6973
+ expected;
6974
+ enqueued = [];
6975
+ #count = 0;
6976
+ #markDispatched;
6977
+ #openGate;
6978
+ dispatched;
6979
+ #gate;
6980
+ constructor(expected) {
6981
+ this.expected = expected;
6982
+ this.dispatched = new Promise((resolve) => {
6983
+ this.#markDispatched = resolve;
6984
+ });
6985
+ this.#gate = new Promise((resolve) => {
6986
+ this.#openGate = resolve;
6987
+ });
6988
+ }
6989
+ release() {
6990
+ this.#openGate();
6991
+ }
6992
+ enqueue(message, options) {
6993
+ this.enqueued.push({
6994
+ message,
6995
+ options
6996
+ });
6997
+ if (++this.#count >= this.expected) this.#markDispatched();
6998
+ return this.#gate;
6999
+ }
7000
+ listen(_handler, _options) {
7001
+ return new Promise(() => {});
7002
+ }
7003
+ };
7004
+ const withTimeout = (promise, ms, message) => {
7005
+ let timer;
7006
+ const timeout = new Promise((_, reject) => {
7007
+ timer = setTimeout(() => reject(new Error(message)), ms);
7008
+ });
7009
+ return Promise.race([promise, timeout]).finally(() => clearTimeout(timer));
7010
+ };
7011
+ const mockOptions = () => ({
7012
+ kv: new MemoryKvStore(),
7013
+ documentLoaderFactory: () => mockDocumentLoader,
7014
+ contextLoaderFactory: () => mockDocumentLoader,
7015
+ manuallyStartQueue: true
7016
+ });
7017
+ test("ContextImpl.enqueueTask()", async (t) => {
7018
+ await t.step("builds the task message envelope and round-trips a vocab payload", async () => {
7019
+ const queue = new MockQueue({ supportsEnqueueMany: true });
7020
+ const federation = createFederation({
7021
+ ...mockOptions(),
7022
+ queue: { task: queue }
7023
+ });
7024
+ const task = federation.defineTask("greet", {
7025
+ schema: envelopeSchema,
7026
+ handler: () => {}
7027
+ });
7028
+ const ctx = federation.createContext(new URL("https://example.com/"), void 0);
7029
+ ok(ctx instanceof ContextImpl);
7030
+ await ctx.enqueueTask(task, envelope("greeting"));
7031
+ strictEqual(queue.enqueuedMany.length, 0);
7032
+ strictEqual(queue.enqueued.length, 1);
7033
+ const { message } = queue.enqueued[0];
7034
+ strictEqual(message.type, "task");
7035
+ strictEqual(message.taskName, "greet");
7036
+ strictEqual(message.baseUrl, "https://example.com");
7037
+ strictEqual(message.attempt, 0);
7038
+ ok(/^[0-9a-f-]{36}$/i.test(message.id));
7039
+ ok(Temporal.Instant.from(message.started) instanceof Temporal.Instant);
7040
+ strictEqual(typeof message.traceContext, "object");
7041
+ ok(message.traceContext != null);
7042
+ const decoded = await decodeEnvelope(message);
7043
+ ok(decoded.note instanceof Note);
7044
+ strictEqual(decoded.note.content?.toString(), "greeting");
7045
+ strictEqual(decoded.title, "greeting");
7046
+ });
7047
+ });
7048
+ test("ContextImpl.enqueueTaskMany()", async (t) => {
7049
+ await t.step("round-trips every payload through enqueueMany in order, forwarding options", async () => {
7050
+ const queue = new MockQueue({ supportsEnqueueMany: true });
7051
+ const federation = createFederation({
7052
+ ...mockOptions(),
7053
+ queue: { task: queue }
7054
+ });
7055
+ const task = federation.defineTask("bulk", {
7056
+ schema: envelopeSchema,
7057
+ handler: () => {}
7058
+ });
7059
+ const ctx = federation.createContext(new URL("https://example.com/"), void 0);
7060
+ const payloads = [
7061
+ envelope("a"),
7062
+ envelope("b"),
7063
+ envelope("c")
7064
+ ];
7065
+ await ctx.enqueueTaskMany(task, payloads, {
7066
+ delay: { seconds: 30 },
7067
+ orderingKey: "batch"
7068
+ });
7069
+ strictEqual(queue.enqueued.length, 0);
7070
+ strictEqual(queue.enqueuedMany.length, 1);
7071
+ const { messages, options } = queue.enqueuedMany[0];
7072
+ ok(options?.delay instanceof Temporal.Duration);
7073
+ strictEqual(options.delay.total("second"), 30);
7074
+ strictEqual(options.orderingKey, "batch");
7075
+ deepStrictEqual((await Promise.all(messages.map(decodeEnvelope))).map((d) => d.title), [
7076
+ "a",
7077
+ "b",
7078
+ "c"
7079
+ ]);
7080
+ for (const message of messages) strictEqual(message.orderingKey, "batch");
7081
+ });
7082
+ await t.step("with a single payload uses enqueue() instead of enqueueMany", async () => {
7083
+ const queue = new MockQueue({ supportsEnqueueMany: true });
7084
+ const federation = createFederation({
7085
+ ...mockOptions(),
7086
+ queue: { task: queue }
7087
+ });
7088
+ const task = federation.defineTask("bulk-single", {
7089
+ schema: envelopeSchema,
7090
+ handler: () => {}
7091
+ });
7092
+ await federation.createContext(new URL("https://example.com/"), void 0).enqueueTaskMany(task, [envelope("solo")]);
7093
+ strictEqual(queue.enqueuedMany.length, 0);
7094
+ strictEqual(queue.enqueued.length, 1);
7095
+ });
7096
+ await t.step("falls back to concurrent single enqueues, preserving order and options", async () => {
7097
+ const queue = new RendezvousQueue(2);
7098
+ const federation = createFederation({
7099
+ ...mockOptions(),
7100
+ queue: { task: queue }
7101
+ });
7102
+ const task = federation.defineTask("bulk-fallback", {
7103
+ schema: envelopeSchema,
7104
+ handler: () => {}
7105
+ });
7106
+ const ctx = federation.createContext(new URL("https://example.com/"), void 0);
7107
+ const payloads = [envelope("x"), envelope("y")];
7108
+ const pending = ctx.enqueueTaskMany(task, payloads, { orderingKey: "batch" });
7109
+ try {
7110
+ await withTimeout(queue.dispatched, 2e3, "fallback did not dispatch enqueues concurrently");
7111
+ strictEqual(queue.enqueued.length, 2);
7112
+ } finally {
7113
+ queue.release();
7114
+ await pending;
7115
+ }
7116
+ deepStrictEqual((await Promise.all(queue.enqueued.map(({ message }) => decodeEnvelope(message)))).map((d) => d.title), ["x", "y"]);
7117
+ for (const { message, options } of queue.enqueued) {
7118
+ strictEqual(message.orderingKey, "batch");
7119
+ strictEqual(options?.orderingKey, "batch");
7120
+ }
7121
+ });
7122
+ await t.step("fallback path aborts the whole batch when one payload is invalid", async () => {
7123
+ const queue = new MockQueue();
7124
+ const federation = createFederation({
7125
+ ...mockOptions(),
7126
+ queue: { task: queue }
7127
+ });
7128
+ const task = federation.defineTask("bulk-typed", {
7129
+ schema: numberSchema,
7130
+ handler: () => {}
7131
+ });
7132
+ const ctx = federation.createContext(new URL("https://example.com/"), void 0);
7133
+ await rejects(() => ctx.enqueueTaskMany(task, [
7134
+ 1,
7135
+ "two",
7136
+ 3
7137
+ ]), {
7138
+ name: "TypeError",
7139
+ message: /Task data failed schema validation/
7140
+ });
7141
+ strictEqual(queue.enqueued.length, 0);
7142
+ });
7143
+ });
6959
7144
  //#endregion
6960
7145
  export {};