@fedify/fedify 1.11.0-dev.86 → 2.0.0-dev.100

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 (277) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +34 -20
  3. package/dist/{actor-CZmQGaot.js → actor-CX6a_fXc.js} +220 -705
  4. package/dist/{actor-eeONG_sv.d.ts → actor-DqFajh9s.d.ts} +2 -2
  5. package/dist/{actor-DVGsKpLh.js → actor-eJqgtXKv.js} +1 -1
  6. package/dist/{actor-D190nbTD.d.cts → actor-f2NtjyCg.d.cts} +2 -2
  7. package/dist/{actor-C2pMzxKc.cjs → actor-vyab-ea8.cjs} +952 -1479
  8. package/dist/{assert_rejects-DiIiJbZn.js → assert_rejects-Ce45JcFg.js} +1 -1
  9. package/dist/{assert_is_error-BPGph1Jx.js → assert_throws-BNXdRGWP.js} +31 -1
  10. package/dist/{builder-DAICKeyp.js → builder-CknaHxxc.js} +3 -4
  11. package/dist/{client-n6L4GtQL.d.cts → client-94iWEfQa.d.cts} +3 -75
  12. package/dist/{client-B3mQJNO7.d.ts → client-BsGzbnV-.d.ts} +3 -75
  13. package/dist/{client-g-GFdT0f.js → client-pY7-3icS.js} +3 -22
  14. package/dist/compat/mod.d.cts +10 -12
  15. package/dist/compat/mod.d.ts +10 -12
  16. package/dist/compat/transformers.test.js +20 -20
  17. package/dist/{context-WJoO0SQs.d.cts → context-DBQ7nMCw.d.cts} +152 -27
  18. package/dist/{context-Cr5DIxq_.d.ts → context-mM0Nu5yo.d.ts} +152 -27
  19. package/dist/{authdocloader-B4rcC1nj.js → docloader-BFOyc5--.js} +17 -8
  20. package/dist/{esm-C4_hX8wr.js → esm-HsBrJq8t.js} +32 -17
  21. package/dist/federation/builder.test.js +9 -12
  22. package/dist/federation/collection.test.js +7 -9
  23. package/dist/federation/handler.test.js +28 -149
  24. package/dist/federation/idempotency.test.js +26 -27
  25. package/dist/federation/inbox.test.js +4 -6
  26. package/dist/federation/keycache.test.js +3 -4
  27. package/dist/federation/kv.test.js +6 -8
  28. package/dist/federation/middleware.test.js +270 -93
  29. package/dist/federation/mod.cjs +9 -11
  30. package/dist/federation/mod.d.cts +10 -12
  31. package/dist/federation/mod.d.ts +10 -12
  32. package/dist/federation/mod.js +9 -11
  33. package/dist/federation/mq.test.js +10 -10
  34. package/dist/federation/negotiation.test.js +26 -0
  35. package/dist/federation/retry.test.js +4 -5
  36. package/dist/federation/router.test.js +6 -8
  37. package/dist/federation/send.test.js +14 -16
  38. package/dist/{http-TL013BuF.js → http-BE4MNK5A.js} +2 -2
  39. package/dist/{http-DS9z_HzB.d.ts → http-BbO0ejuk.d.ts} +2 -2
  40. package/dist/{http-DKgpqMr2.cjs → http-Cy32w9zC.cjs} +289 -9
  41. package/dist/{http-C_1RU1U_.d.cts → http-M8k5mKc0.d.cts} +2 -2
  42. package/dist/{http-CBbdsG8e.js → http-rzOkBH97.js} +256 -6
  43. package/dist/{inbox-DyU5bgup.js → inbox-CC7Xf1dl.js} +2 -7
  44. package/dist/{key-BiToVUhy.js → key-DP6qvTbJ.js} +3 -2
  45. package/dist/{keycache-CQD9eEfi.js → keycache-wXn_gxMw.js} +1 -1
  46. package/dist/{keys-C315EGnp.js → keys-DDn7koOQ.js} +2 -1
  47. package/dist/{kv-DipCBaw2.d.ts → kv-BpJND1Hr.d.ts} +2 -1
  48. package/dist/{kv-BqEOXcZv.d.cts → kv-cD_d4hg-.d.cts} +2 -1
  49. package/dist/kv-cache-BRTidUqb.cjs +134 -0
  50. package/dist/kv-cache-D7LFlByV.js +107 -0
  51. package/dist/kv-cache-DFZETuNv.js +122 -0
  52. package/dist/{ld-gIDVRNIa.js → ld-HxSfVcFy.js} +3 -2
  53. package/dist/{type-7EiBxfQp.js → lookup-B25HiNR_.js} +547 -5409
  54. package/dist/{lookup-CnvVwRpg.cjs → lookup-Dwdg60Zd.cjs} +134 -5
  55. package/dist/{lookup-D5EjvC5E.js → lookup-G1_0vHHK.js} +125 -2
  56. package/dist/{middleware-6Uog3fZm.cjs → middleware-CHIX0fet.cjs} +58 -104
  57. package/dist/middleware-CJxiy__Z.js +15 -0
  58. package/dist/{middleware-BwF-rP5k.js → middleware-D0ByqW8h.js} +43 -146
  59. package/dist/{middleware-yL_ubFCa.js → middleware-DYuVYS53.js} +38 -84
  60. package/dist/middleware-DZFLLqR4.js +26 -0
  61. package/dist/middleware-ItQuZXpg.cjs +15 -0
  62. package/dist/{mod-DS4kJskR.d.ts → mod-BlVovdcy.d.ts} +2 -2
  63. package/dist/{mod-D5rfgGFE.d.cts → mod-BxRCHTz-.d.cts} +2 -2
  64. package/dist/{mod-CxMBb_dd.d.cts → mod-C58MZ7Wx.d.cts} +1 -1
  65. package/dist/mod-CAdoBu0x.d.ts +109 -0
  66. package/dist/{mod-BZfdiPBo.d.ts → mod-D5Z2tISD.d.ts} +3 -3
  67. package/dist/{mod-Dz5Y15Uy.d.cts → mod-DgxG-byT.d.cts} +3 -3
  68. package/dist/{mod-ChbckRnC.d.ts → mod-Ds0mpFZU.d.ts} +1 -1
  69. package/dist/{mod-OQfb33eH.d.cts → mod-Dy2fJtmN.d.cts} +2 -2
  70. package/dist/{mod-CnULG6Aa.d.ts → mod-GetHzY6F.d.ts} +2 -2
  71. package/dist/mod-fxr25Gv7.d.cts +107 -0
  72. package/dist/mod.cjs +19 -34
  73. package/dist/mod.d.cts +15 -17
  74. package/dist/mod.d.ts +15 -17
  75. package/dist/mod.js +14 -16
  76. package/dist/negotiation-C4nFufNk.js +71 -0
  77. package/dist/nodeinfo/client.test.js +30 -111
  78. package/dist/nodeinfo/handler.test.js +25 -26
  79. package/dist/nodeinfo/mod.cjs +3 -6
  80. package/dist/nodeinfo/mod.d.cts +3 -5
  81. package/dist/nodeinfo/mod.d.ts +3 -5
  82. package/dist/nodeinfo/mod.js +3 -4
  83. package/dist/nodeinfo/types.test.js +8 -15
  84. package/dist/otel/exporter.test.js +44 -70
  85. package/dist/otel/mod.cjs +17 -34
  86. package/dist/otel/mod.d.cts +5 -6
  87. package/dist/otel/mod.d.ts +5 -6
  88. package/dist/otel/mod.js +17 -34
  89. package/dist/{otel-Chy5T2Xh.js → otel-Bfe_BgOV.js} +1 -2
  90. package/dist/{owner-AcrG3Xz1.d.cts → owner-B4HbyP8s.d.cts} +3 -3
  91. package/dist/{owner-DUHhAUG8.js → owner-BWOLrzit.js} +3 -2
  92. package/dist/{owner-8NMhXwJd.d.ts → owner-kQRGVXG1.d.ts} +3 -3
  93. package/dist/{proof-BPSYLgZP.js → proof-BYodbwm8.js} +2 -2
  94. package/dist/{proof-BAyAu2dN.cjs → proof-BqP89L5j.cjs} +18 -17
  95. package/dist/{proof-CFXbMCSF.js → proof-ZlfOiUS5.js} +5 -4
  96. package/dist/{send-oijgVip2.js → send-CC6itx2j.js} +2 -2
  97. package/dist/sig/http.test.js +12 -13
  98. package/dist/sig/key.test.js +9 -11
  99. package/dist/sig/ld.test.js +8 -10
  100. package/dist/sig/mod.cjs +9 -11
  101. package/dist/sig/mod.d.cts +5 -7
  102. package/dist/sig/mod.d.ts +5 -7
  103. package/dist/sig/mod.js +5 -7
  104. package/dist/sig/owner.test.js +11 -13
  105. package/dist/sig/proof.test.js +13 -14
  106. package/dist/src/vocab/accept.yaml +1 -1
  107. package/dist/src/vocab/activity.yaml +1 -1
  108. package/dist/src/vocab/add.yaml +1 -1
  109. package/dist/src/vocab/announce.yaml +1 -1
  110. package/dist/src/vocab/application.yaml +1 -1
  111. package/dist/src/vocab/arrive.yaml +1 -1
  112. package/dist/src/vocab/article.yaml +1 -1
  113. package/dist/src/vocab/audio.yaml +1 -1
  114. package/dist/src/vocab/block.yaml +1 -1
  115. package/dist/src/vocab/chatmessage.yaml +1 -1
  116. package/dist/src/vocab/collection.yaml +1 -1
  117. package/dist/src/vocab/collectionpage.yaml +1 -1
  118. package/dist/src/vocab/create.yaml +1 -1
  119. package/dist/src/vocab/dataintegrityproof.yaml +1 -1
  120. package/dist/src/vocab/delete.yaml +1 -1
  121. package/dist/src/vocab/didservice.yaml +1 -1
  122. package/dist/src/vocab/dislike.yaml +1 -1
  123. package/dist/src/vocab/document.yaml +1 -1
  124. package/dist/src/vocab/emoji.yaml +1 -1
  125. package/dist/src/vocab/emojireact.yaml +1 -1
  126. package/dist/src/vocab/endpoints.yaml +1 -1
  127. package/dist/src/vocab/event.yaml +1 -1
  128. package/dist/src/vocab/export.yaml +1 -1
  129. package/dist/src/vocab/flag.yaml +1 -1
  130. package/dist/src/vocab/follow.yaml +1 -1
  131. package/dist/src/vocab/group.yaml +1 -1
  132. package/dist/src/vocab/hashtag.yaml +1 -1
  133. package/dist/src/vocab/ignore.yaml +1 -1
  134. package/dist/src/vocab/image.yaml +1 -1
  135. package/dist/src/vocab/intransitiveactivity.yaml +1 -1
  136. package/dist/src/vocab/invite.yaml +1 -1
  137. package/dist/src/vocab/join.yaml +1 -1
  138. package/dist/src/vocab/key.yaml +1 -1
  139. package/dist/src/vocab/leave.yaml +1 -1
  140. package/dist/src/vocab/like.yaml +1 -1
  141. package/dist/src/vocab/link.yaml +1 -1
  142. package/dist/src/vocab/listen.yaml +1 -1
  143. package/dist/src/vocab/mention.yaml +1 -1
  144. package/dist/src/vocab/move.yaml +1 -1
  145. package/dist/src/vocab/multikey.yaml +1 -1
  146. package/dist/src/vocab/note.yaml +1 -1
  147. package/dist/src/vocab/object.yaml +1 -1
  148. package/dist/src/vocab/offer.yaml +1 -1
  149. package/dist/src/vocab/orderedcollection.yaml +1 -1
  150. package/dist/src/vocab/orderedcollectionpage.yaml +1 -1
  151. package/dist/src/vocab/organization.yaml +1 -1
  152. package/dist/src/vocab/page.yaml +1 -1
  153. package/dist/src/vocab/person.yaml +1 -1
  154. package/dist/src/vocab/place.yaml +1 -1
  155. package/dist/src/vocab/profile.yaml +1 -1
  156. package/dist/src/vocab/propertyvalue.yaml +1 -1
  157. package/dist/src/vocab/question.yaml +1 -1
  158. package/dist/src/vocab/read.yaml +1 -1
  159. package/dist/src/vocab/reject.yaml +1 -1
  160. package/dist/src/vocab/relationship.yaml +1 -1
  161. package/dist/src/vocab/remove.yaml +1 -1
  162. package/dist/src/vocab/service.yaml +1 -1
  163. package/dist/src/vocab/source.yaml +1 -1
  164. package/dist/src/vocab/tentativeaccept.yaml +1 -1
  165. package/dist/src/vocab/tentativereject.yaml +1 -1
  166. package/dist/src/vocab/tombstone.yaml +1 -1
  167. package/dist/src/vocab/travel.yaml +1 -1
  168. package/dist/src/vocab/undo.yaml +1 -1
  169. package/dist/src/vocab/update.yaml +1 -1
  170. package/dist/src/vocab/video.yaml +1 -1
  171. package/dist/src/vocab/view.yaml +1 -1
  172. package/dist/testing/docloader.test.js +6 -8
  173. package/dist/testing/mod.d.ts +10 -119
  174. package/dist/testing/mod.js +2 -3
  175. package/dist/{testing-BieeUmek.js → testing-BbJqK9NR.js} +1 -2
  176. package/dist/{types-Ik5tJNYH.js → types-BtUjyi5y.js} +5 -166
  177. package/dist/{types-BIgY6c-l.js → types-C2XVl6gj.js} +1 -3
  178. package/dist/{types-B4pQm9du.cjs → types-CWgzGaqk.cjs} +6 -179
  179. package/dist/{runtime/authdocloader.test.js → utils/docloader.test.js} +14 -15
  180. package/dist/utils/kv-cache.test.js +212 -0
  181. package/dist/utils/mod.cjs +12 -0
  182. package/dist/utils/mod.d.cts +5 -0
  183. package/dist/utils/mod.d.ts +7 -0
  184. package/dist/utils/mod.js +11 -0
  185. package/dist/vocab/actor.test.js +8 -10
  186. package/dist/vocab/lookup.test.js +8 -10
  187. package/dist/vocab/mod.cjs +3 -4
  188. package/dist/vocab/mod.d.cts +3 -5
  189. package/dist/vocab/mod.d.ts +3 -5
  190. package/dist/vocab/mod.js +3 -4
  191. package/dist/vocab/type.test.js +2 -3
  192. package/dist/vocab/vocab.test.js +7618 -1973
  193. package/dist/{vocab-BASuuzcJ.d.ts → vocab-BCWe1Ih5.d.ts} +9 -25
  194. package/dist/{vocab-DPMmFPJ1.d.cts → vocab-CeDBzu-f.d.cts} +9 -25
  195. package/dist/{vocab-D5Kz0_hN.js → vocab-DDf0si0L.js} +3 -3
  196. package/dist/{vocab-C8OvOtUr.cjs → vocab-wJpUyNt3.cjs} +5 -5
  197. package/dist/webfinger/handler.test.js +24 -25
  198. package/dist/webfinger/lookup.test.js +7 -9
  199. package/dist/webfinger/mod.cjs +2 -3
  200. package/dist/webfinger/mod.d.cts +1 -3
  201. package/dist/webfinger/mod.d.ts +1 -3
  202. package/dist/webfinger/mod.js +2 -3
  203. package/package.json +33 -66
  204. package/dist/assert_throws-BOO88avQ.js +0 -39
  205. package/dist/authdocloader-BSR7P4gq.cjs +0 -58
  206. package/dist/authdocloader-DGH9Sg3d.js +0 -52
  207. package/dist/denokv-D0nfNQ1x.js +0 -57
  208. package/dist/docloader-B5OKfh4Y.cjs +0 -4901
  209. package/dist/docloader-BucCRHZI.d.ts +0 -221
  210. package/dist/docloader-ChxNLZAA.d.cts +0 -219
  211. package/dist/docloader-NyzanCyX.js +0 -4835
  212. package/dist/key-C8HALBXn.cjs +0 -290
  213. package/dist/key-CeDRK0Oh.js +0 -10
  214. package/dist/key-DQogAQAf.js +0 -10
  215. package/dist/key-KD9ms0GG.js +0 -260
  216. package/dist/key-zBwSfcCF.cjs +0 -10
  217. package/dist/lookup-yRb5Qgz3.js +0 -336
  218. package/dist/middleware-BKLTHinX.js +0 -26
  219. package/dist/middleware-BOB4h8a2.js +0 -17
  220. package/dist/middleware-YraYNbIS.cjs +0 -17
  221. package/dist/mod-CD7gfdq3.d.ts +0 -104
  222. package/dist/mod-JUhOKMHj.d.cts +0 -102
  223. package/dist/mq-B7R1Q-M5.d.cts +0 -140
  224. package/dist/mq-CRGm1e_F.d.ts +0 -143
  225. package/dist/nodeinfo/semver.test.js +0 -143
  226. package/dist/runtime/docloader.test.js +0 -599
  227. package/dist/runtime/key.test.d.ts +0 -3
  228. package/dist/runtime/key.test.js +0 -103
  229. package/dist/runtime/langstr.test.d.ts +0 -3
  230. package/dist/runtime/langstr.test.js +0 -40
  231. package/dist/runtime/link.test.d.ts +0 -3
  232. package/dist/runtime/link.test.js +0 -61
  233. package/dist/runtime/mod.cjs +0 -25
  234. package/dist/runtime/mod.d.cts +0 -6
  235. package/dist/runtime/mod.d.ts +0 -8
  236. package/dist/runtime/mod.js +0 -13
  237. package/dist/runtime/multibase/multibase.test.d.ts +0 -3
  238. package/dist/runtime/multibase/multibase.test.js +0 -358
  239. package/dist/runtime/url.test.d.ts +0 -3
  240. package/dist/runtime/url.test.js +0 -45
  241. package/dist/semver-dArNLkR9.js +0 -149
  242. package/dist/vocab/schema.yaml +0 -247
  243. package/dist/x/cfworkers.cjs +0 -100
  244. package/dist/x/cfworkers.d.cts +0 -59
  245. package/dist/x/cfworkers.d.ts +0 -61
  246. package/dist/x/cfworkers.js +0 -98
  247. package/dist/x/cfworkers.test.d.ts +0 -3
  248. package/dist/x/cfworkers.test.js +0 -179
  249. package/dist/x/hono.cjs +0 -61
  250. package/dist/x/hono.d.cts +0 -54
  251. package/dist/x/hono.d.ts +0 -56
  252. package/dist/x/hono.js +0 -60
  253. package/dist/x/sveltekit.cjs +0 -69
  254. package/dist/x/sveltekit.d.cts +0 -46
  255. package/dist/x/sveltekit.d.ts +0 -48
  256. package/dist/x/sveltekit.js +0 -68
  257. /package/dist/{assert_not_equals-f3m3epl3.js → assert_not_equals-C80BG-_5.js} +0 -0
  258. /package/dist/{collection-CSzG2j1P.js → collection-BzWsN9pB.js} +0 -0
  259. /package/dist/{nodeinfo/semver.test.d.ts → federation/negotiation.test.d.ts} +0 -0
  260. /package/dist/{federation-C15gGOh1.cjs → federation-CoW-KDKv.cjs} +0 -0
  261. /package/dist/{federation-K-xsO03l.js → federation-D0hkM4T7.js} +0 -0
  262. /package/dist/{mod-C2tOeRkN.d.cts → mod-B-hUPT2N.d.cts} +0 -0
  263. /package/dist/{mod-1pDWKvUL.d.ts → mod-CVgZgliM.d.ts} +0 -0
  264. /package/dist/{mod-FZd39qVq.d.cts → mod-CcDPcLJW.d.cts} +0 -0
  265. /package/dist/{mod-g0xFzAP9.d.ts → mod-bjzj5QIb.d.ts} +0 -0
  266. /package/dist/{nodeinfo-DfycQ8Wf.js → nodeinfo-BnthBobC.js} +0 -0
  267. /package/dist/{nodeinfo-Co9lJrWl.cjs → nodeinfo-CdN0rEnZ.cjs} +0 -0
  268. /package/dist/{retry-D4GJ670a.js → retry-CfF8Gn4d.js} +0 -0
  269. /package/dist/{runtime-DPYEDf-o.js → sig-C34-oHBl.js} +0 -0
  270. /package/dist/{runtime-C58AJWSv.cjs → sig-YYj5tCnr.cjs} +0 -0
  271. /package/dist/{std__assert-X-_kMxKM.js → std__assert-DWivtrGR.js} +0 -0
  272. /package/dist/{runtime → utils}/docloader.test.d.ts +0 -0
  273. /package/dist/{runtime/authdocloader.test.d.ts → utils/kv-cache.test.d.ts} +0 -0
  274. /package/dist/{sig-Cj3tk-ig.js → utils-D-Va7aXC.js} +0 -0
  275. /package/dist/{sig-ByHXzqUi.cjs → utils-DyRU1gdZ.cjs} +0 -0
  276. /package/dist/{webfinger-De_bU0iE.js → webfinger-C72Y8lrh.js} +0 -0
  277. /package/dist/{webfinger-BjOEdFPs.cjs → webfinger-vAtLmxOF.cjs} +0 -0
@@ -3,20 +3,17 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import "../type-7EiBxfQp.js";
6
+ import "../lookup-B25HiNR_.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 "../semver-dArNLkR9.js";
11
- import { getNodeInfo, parseInboundService, parseNodeInfo, parseOutboundService, parseProtocol, parseServices, parseSoftware, parseUsage } from "../client-g-GFdT0f.js";
12
- import "../lookup-yRb5Qgz3.js";
13
- import { test } from "../testing-BieeUmek.js";
14
- import "../std__assert-X-_kMxKM.js";
15
- import "../assert_rejects-DiIiJbZn.js";
16
- import "../assert_is_error-BPGph1Jx.js";
17
- import "../assert_not_equals-f3m3epl3.js";
18
- import "../assert_throws-BOO88avQ.js";
19
- import { esm_default } from "../esm-C4_hX8wr.js";
10
+ import { getNodeInfo, parseInboundService, parseNodeInfo, parseOutboundService, parseProtocol, parseServices, parseSoftware, parseUsage } from "../client-pY7-3icS.js";
11
+ import { test } from "../testing-BbJqK9NR.js";
12
+ import "../std__assert-DWivtrGR.js";
13
+ import "../assert_rejects-Ce45JcFg.js";
14
+ import "../assert_throws-BNXdRGWP.js";
15
+ import "../assert_not_equals-C80BG-_5.js";
16
+ import { esm_default } from "../esm-HsBrJq8t.js";
20
17
 
21
18
  //#region src/nodeinfo/client.test.ts
22
19
  test("getNodeInfo()", async (t) => {
@@ -42,13 +39,7 @@ test("getNodeInfo()", async (t) => {
42
39
  const expected = {
43
40
  software: {
44
41
  name: "foo",
45
- version: {
46
- major: 1,
47
- minor: 2,
48
- patch: 3,
49
- build: [],
50
- prerelease: []
51
- }
42
+ version: "1.2.3"
52
43
  },
53
44
  protocols: ["activitypub", "diaspora"],
54
45
  usage: {
@@ -126,13 +117,7 @@ test("parseNodeInfo()", () => {
126
117
  const output = {
127
118
  software: {
128
119
  name: "foo",
129
- version: {
130
- major: 1,
131
- minor: 2,
132
- patch: 3,
133
- build: [],
134
- prerelease: []
135
- },
120
+ version: "1.2.3",
136
121
  repository: new URL("https://codeberg.org/foo/foo"),
137
122
  homepage: new URL("https://foo.example")
138
123
  },
@@ -294,13 +279,7 @@ test("parseSoftware()", () => {
294
279
  homepage: "https://foo.example"
295
280
  }), {
296
281
  name: "foo",
297
- version: {
298
- major: 1,
299
- minor: 2,
300
- patch: 3,
301
- build: [],
302
- prerelease: []
303
- },
282
+ version: "1.2.3",
304
283
  repository: new URL("https://codeberg.org/foo/foo"),
305
284
  homepage: new URL("https://foo.example")
306
285
  });
@@ -309,13 +288,7 @@ test("parseSoftware()", () => {
309
288
  version: "4.5.6-beta.7+build.8"
310
289
  }), {
311
290
  name: "foo",
312
- version: {
313
- major: 4,
314
- minor: 5,
315
- patch: 6,
316
- build: ["build", "8"],
317
- prerelease: ["beta", 7]
318
- }
291
+ version: "4.5.6-beta.7+build.8"
319
292
  });
320
293
  assertEquals(parseSoftware(123), null);
321
294
  assertEquals(parseSoftware(123, { tryBestEffort: true }), null);
@@ -326,73 +299,49 @@ test("parseSoftware()", () => {
326
299
  assertEquals(parseSoftware({ name: " FOO " }), null);
327
300
  assertEquals(parseSoftware({ name: " FOO " }, { tryBestEffort: true }), {
328
301
  name: "foo",
329
- version: {
330
- major: 0,
331
- minor: 0,
332
- patch: 0,
333
- build: [],
334
- prerelease: []
335
- }
302
+ version: "0.0.0"
336
303
  });
337
304
  assertEquals(parseSoftware({
338
305
  name: "foo",
339
306
  version: 123
340
- }), null);
307
+ }), {
308
+ name: "foo",
309
+ version: "123"
310
+ });
341
311
  assertEquals(parseSoftware({
342
312
  name: "foo",
343
313
  version: 123
344
314
  }, { tryBestEffort: true }), {
345
315
  name: "foo",
346
- version: {
347
- major: 0,
348
- minor: 0,
349
- patch: 0,
350
- build: [],
351
- prerelease: []
352
- }
316
+ version: "123"
353
317
  });
354
318
  assertEquals(parseSoftware({
355
319
  name: "foo",
356
320
  version: "abc"
357
- }), null);
321
+ }), {
322
+ name: "foo",
323
+ version: "abc"
324
+ });
358
325
  assertEquals(parseSoftware({
359
326
  name: "foo",
360
327
  version: "abc"
361
328
  }, { tryBestEffort: true }), {
362
329
  name: "foo",
363
- version: {
364
- major: 0,
365
- minor: 0,
366
- patch: 0,
367
- build: [],
368
- prerelease: []
369
- }
330
+ version: "abc"
370
331
  });
371
332
  assertEquals(parseSoftware({
372
333
  name: "foo",
373
334
  version: " 1.2.3 "
374
335
  }), {
375
336
  name: "foo",
376
- version: {
377
- major: 1,
378
- minor: 2,
379
- patch: 3,
380
- build: [],
381
- prerelease: []
382
- }
337
+ version: " 1.2.3 "
383
338
  });
384
339
  assertEquals(parseSoftware({
385
340
  name: "foo",
386
341
  version: " 1.2.3 "
387
342
  }, { tryBestEffort: true }), {
388
343
  name: "foo",
389
- version: {
390
- major: 1,
391
- minor: 2,
392
- patch: 3,
393
- build: [],
394
- prerelease: []
395
- }
344
+ version: " 1.2.3 "
396
345
  });
397
346
  assertEquals(parseSoftware({
398
347
  name: "foo",
@@ -411,13 +360,7 @@ test("parseSoftware()", () => {
411
360
  homepage: 456
412
361
  }, { tryBestEffort: true }), {
413
362
  name: "foo",
414
- version: {
415
- major: 1,
416
- minor: 2,
417
- patch: 3,
418
- build: [],
419
- prerelease: []
420
- }
363
+ version: "1.2.3"
421
364
  });
422
365
  assertEquals(parseSoftware({
423
366
  name: "foo",
@@ -436,13 +379,7 @@ test("parseSoftware()", () => {
436
379
  homepage: ""
437
380
  }, { tryBestEffort: true }), {
438
381
  name: "foo",
439
- version: {
440
- major: 1,
441
- minor: 2,
442
- patch: 3,
443
- build: [],
444
- prerelease: []
445
- }
382
+ version: "1.2.3"
446
383
  });
447
384
  assertEquals(parseSoftware({
448
385
  name: "foo",
@@ -451,13 +388,7 @@ test("parseSoftware()", () => {
451
388
  homepage: ""
452
389
  }, { tryBestEffort: true }), {
453
390
  name: "foo",
454
- version: {
455
- major: 2,
456
- minor: 81,
457
- patch: 0,
458
- build: [],
459
- prerelease: []
460
- }
391
+ version: "2.81"
461
392
  });
462
393
  assertEquals(parseSoftware({
463
394
  name: "foo",
@@ -466,13 +397,7 @@ test("parseSoftware()", () => {
466
397
  homepage: ""
467
398
  }, { tryBestEffort: true }), {
468
399
  name: "foo",
469
- version: {
470
- major: 3,
471
- minor: 0,
472
- patch: 0,
473
- build: [],
474
- prerelease: []
475
- }
400
+ version: "3"
476
401
  });
477
402
  assertEquals(parseSoftware({
478
403
  name: "foo",
@@ -481,13 +406,7 @@ test("parseSoftware()", () => {
481
406
  homepage: ""
482
407
  }, { tryBestEffort: true }), {
483
408
  name: "foo",
484
- version: {
485
- major: 2,
486
- minor: 1,
487
- patch: 3,
488
- build: [],
489
- prerelease: []
490
- }
409
+ version: "2.1.3.4"
491
410
  });
492
411
  });
493
412
  test("parseProtocol()", () => {
@@ -3,35 +3,34 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import "../type-7EiBxfQp.js";
6
+ import "../lookup-B25HiNR_.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-QzKcOQgP.js";
11
- import { createFederation, handleNodeInfo, handleNodeInfoJrd } from "../middleware-BwF-rP5k.js";
12
- import { parseSemVer } from "../semver-dArNLkR9.js";
13
- import "../client-g-GFdT0f.js";
14
- import "../lookup-yRb5Qgz3.js";
15
- import "../types-BIgY6c-l.js";
16
- import "../actor-DVGsKpLh.js";
17
- import "../key-BiToVUhy.js";
18
- import "../http-TL013BuF.js";
19
- import "../authdocloader-B4rcC1nj.js";
20
- import "../ld-gIDVRNIa.js";
21
- import "../owner-DUHhAUG8.js";
22
- import "../proof-BPSYLgZP.js";
23
- import "../inbox-DyU5bgup.js";
24
- import "../builder-DAICKeyp.js";
25
- import "../collection-CSzG2j1P.js";
26
- import "../keycache-CQD9eEfi.js";
27
- import "../retry-D4GJ670a.js";
28
- import "../send-oijgVip2.js";
29
- import { createRequestContext, test } from "../testing-BieeUmek.js";
30
- import "../std__assert-X-_kMxKM.js";
31
- import "../assert_rejects-DiIiJbZn.js";
32
- import "../assert_is_error-BPGph1Jx.js";
33
- import "../assert_not_equals-f3m3epl3.js";
34
- import "../assert_throws-BOO88avQ.js";
11
+ import { createFederation, handleNodeInfo, handleNodeInfoJrd } from "../middleware-D0ByqW8h.js";
12
+ import "../client-pY7-3icS.js";
13
+ import "../types-C2XVl6gj.js";
14
+ import "../actor-eJqgtXKv.js";
15
+ import "../key-DP6qvTbJ.js";
16
+ import "../http-BE4MNK5A.js";
17
+ import "../ld-HxSfVcFy.js";
18
+ import "../owner-BWOLrzit.js";
19
+ import "../proof-BYodbwm8.js";
20
+ import "../docloader-BFOyc5--.js";
21
+ import "../kv-cache-D7LFlByV.js";
22
+ import "../inbox-CC7Xf1dl.js";
23
+ import "../builder-CknaHxxc.js";
24
+ import "../collection-BzWsN9pB.js";
25
+ import "../keycache-wXn_gxMw.js";
26
+ import "../negotiation-C4nFufNk.js";
27
+ import "../retry-CfF8Gn4d.js";
28
+ import "../send-CC6itx2j.js";
29
+ import { createRequestContext, test } from "../testing-BbJqK9NR.js";
30
+ import "../std__assert-DWivtrGR.js";
31
+ import "../assert_rejects-Ce45JcFg.js";
32
+ import "../assert_throws-BNXdRGWP.js";
33
+ import "../assert_not_equals-C80BG-_5.js";
35
34
 
36
35
  //#region src/nodeinfo/handler.test.ts
37
36
  test("handleNodeInfo()", async () => {
@@ -46,7 +45,7 @@ test("handleNodeInfo()", async () => {
46
45
  const nodeInfoDispatcher = (_ctx) => ({
47
46
  software: {
48
47
  name: "test",
49
- version: parseSemVer("1.2.3")
48
+ version: "1.2.3"
50
49
  },
51
50
  protocols: ["activitypub"],
52
51
  usage: {
@@ -2,12 +2,9 @@
2
2
  const { Temporal } = require("@js-temporal/polyfill");
3
3
  const { URLPattern } = require("urlpattern-polyfill");
4
4
 
5
- require('../docloader-B5OKfh4Y.cjs');
6
- const require_types = require('../types-B4pQm9du.cjs');
7
- require('../nodeinfo-Co9lJrWl.cjs');
5
+ const require_types = require('../types-CWgzGaqk.cjs');
6
+ require('../nodeinfo-CdN0rEnZ.cjs');
8
7
 
9
- exports.formatSemVer = require_types.formatSemVer;
10
8
  exports.getNodeInfo = require_types.getNodeInfo;
11
9
  exports.nodeInfoToJson = require_types.nodeInfoToJson;
12
- exports.parseNodeInfo = require_types.parseNodeInfo;
13
- exports.parseSemVer = require_types.parseSemVer;
10
+ exports.parseNodeInfo = require_types.parseNodeInfo;
@@ -1,5 +1,3 @@
1
- import "../kv-BqEOXcZv.cjs";
2
- import "../docloader-ChxNLZAA.cjs";
3
- import { GetNodeInfoOptions, InboundService, JsonValue, NodeInfo, OutboundService, ParseNodeInfoOptions, Protocol, SemVer, Services, Software, Usage, formatSemVer, getNodeInfo, nodeInfoToJson, parseNodeInfo, parseSemVer } from "../client-n6L4GtQL.cjs";
4
- import "../mod-FZd39qVq.cjs";
5
- export { GetNodeInfoOptions, InboundService, JsonValue, NodeInfo, OutboundService, ParseNodeInfoOptions, Protocol, SemVer, Services, Software, Usage, formatSemVer, getNodeInfo, nodeInfoToJson, parseNodeInfo, parseSemVer };
1
+ import { GetNodeInfoOptions, InboundService, JsonValue, NodeInfo, OutboundService, ParseNodeInfoOptions, Protocol, Services, Software, Usage, getNodeInfo, nodeInfoToJson, parseNodeInfo } from "../client-94iWEfQa.cjs";
2
+ import "../mod-B-hUPT2N.cjs";
3
+ export { GetNodeInfoOptions, InboundService, JsonValue, NodeInfo, OutboundService, ParseNodeInfoOptions, Protocol, Services, Software, Usage, getNodeInfo, nodeInfoToJson, parseNodeInfo };
@@ -1,7 +1,5 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import "../kv-DipCBaw2.js";
4
- import "../docloader-BucCRHZI.js";
5
- import { GetNodeInfoOptions, InboundService, JsonValue, NodeInfo, OutboundService, ParseNodeInfoOptions, Protocol, SemVer, Services, Software, Usage, formatSemVer, getNodeInfo, nodeInfoToJson, parseNodeInfo, parseSemVer } from "../client-B3mQJNO7.js";
6
- import "../mod-1pDWKvUL.js";
7
- export { GetNodeInfoOptions, InboundService, JsonValue, NodeInfo, OutboundService, ParseNodeInfoOptions, Protocol, SemVer, Services, Software, Usage, formatSemVer, getNodeInfo, nodeInfoToJson, parseNodeInfo, parseSemVer };
3
+ import { GetNodeInfoOptions, InboundService, JsonValue, NodeInfo, OutboundService, ParseNodeInfoOptions, Protocol, Services, Software, Usage, getNodeInfo, nodeInfoToJson, parseNodeInfo } from "../client-BsGzbnV-.js";
4
+ import "../mod-CVgZgliM.js";
5
+ export { GetNodeInfoOptions, InboundService, JsonValue, NodeInfo, OutboundService, ParseNodeInfoOptions, Protocol, Services, Software, Usage, getNodeInfo, nodeInfoToJson, parseNodeInfo };
@@ -2,8 +2,7 @@
2
2
  import { Temporal } from "@js-temporal/polyfill";
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
 
5
- import "../docloader-NyzanCyX.js";
6
- import { formatSemVer, getNodeInfo, nodeInfoToJson, parseNodeInfo, parseSemVer } from "../types-Ik5tJNYH.js";
7
- import "../nodeinfo-DfycQ8Wf.js";
5
+ import { getNodeInfo, nodeInfoToJson, parseNodeInfo } from "../types-BtUjyi5y.js";
6
+ import "../nodeinfo-BnthBobC.js";
8
7
 
9
- export { formatSemVer, getNodeInfo, nodeInfoToJson, parseNodeInfo, parseSemVer };
8
+ export { getNodeInfo, nodeInfoToJson, parseNodeInfo };
@@ -3,30 +3,23 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import "../type-7EiBxfQp.js";
6
+ import "../lookup-B25HiNR_.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 "../semver-dArNLkR9.js";
11
- import "../lookup-yRb5Qgz3.js";
12
- import { nodeInfoToJson } from "../types-BIgY6c-l.js";
13
- import { test } from "../testing-BieeUmek.js";
14
- import "../std__assert-X-_kMxKM.js";
15
- import "../assert_rejects-DiIiJbZn.js";
16
- import "../assert_is_error-BPGph1Jx.js";
17
- import "../assert_not_equals-f3m3epl3.js";
18
- import { assertThrows } from "../assert_throws-BOO88avQ.js";
10
+ import { nodeInfoToJson } from "../types-C2XVl6gj.js";
11
+ import { test } from "../testing-BbJqK9NR.js";
12
+ import "../std__assert-DWivtrGR.js";
13
+ import "../assert_rejects-Ce45JcFg.js";
14
+ import { assertThrows } from "../assert_throws-BNXdRGWP.js";
15
+ import "../assert_not_equals-C80BG-_5.js";
19
16
 
20
17
  //#region src/nodeinfo/types.test.ts
21
18
  test("nodeInfoToJson()", () => {
22
19
  const validInfo = {
23
20
  software: {
24
21
  name: "software-name",
25
- version: {
26
- major: 1,
27
- minor: 2,
28
- patch: 3
29
- }
22
+ version: "1.2.3"
30
23
  },
31
24
  protocols: ["activitypub"],
32
25
  usage: {
@@ -3,18 +3,16 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import "../type-7EiBxfQp.js";
6
+ import "../lookup-B25HiNR_.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-QzKcOQgP.js";
11
- import "../lookup-yRb5Qgz3.js";
12
- import { test } from "../testing-BieeUmek.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 { assertThrows } from "../assert_throws-BOO88avQ.js";
11
+ import { test } from "../testing-BbJqK9NR.js";
12
+ import "../std__assert-DWivtrGR.js";
13
+ import "../assert_rejects-Ce45JcFg.js";
14
+ import "../assert_throws-BNXdRGWP.js";
15
+ import "../assert_not_equals-C80BG-_5.js";
18
16
  import { getLogger } from "@logtape/logtape";
19
17
  import { SpanKind, SpanStatusCode, TraceFlags } from "@opentelemetry/api";
20
18
  import { ExportResultCode } from "@opentelemetry/core";
@@ -43,8 +41,9 @@ import { ExportResultCode } from "@opentelemetry/core";
43
41
  * ttl: Temporal.Duration.from({ hours: 1 }),
44
42
  * });
45
43
  *
46
- * const provider = new BasicTracerProvider();
47
- * provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
44
+ * const provider = new BasicTracerProvider({
45
+ * spanProcessors: [new SimpleSpanProcessor(exporter)],
46
+ * });
48
47
  * ```
49
48
  *
50
49
  * @example Querying stored traces
@@ -69,21 +68,16 @@ var FedifySpanExporter = class {
69
68
  #kv;
70
69
  #ttl;
71
70
  #keyPrefix;
72
- #useList;
73
71
  /**
74
72
  * Creates a new FedifySpanExporter.
75
73
  *
76
- * @param kv The KvStore to persist trace data to. Must support either
77
- * `list()` or `cas()` method.
74
+ * @param kv The KvStore to persist trace data to.
78
75
  * @param options Configuration options.
79
- * @throws {Error} If the KvStore supports neither `list()` nor `cas()`.
80
76
  */
81
77
  constructor(kv, options) {
82
- if (kv.list == null && kv.cas == null) throw new Error("KvStore must support either list() or cas() method to use FedifySpanExporter. Consider using a KvStore implementation that supports these operations, such as MemoryKvStore, RedisKvStore, PostgresKvStore, or SqliteKvStore.");
83
78
  this.#kv = kv;
84
79
  this.#ttl = options?.ttl;
85
80
  this.#keyPrefix = options?.keyPrefix ?? ["fedify", "traces"];
86
- this.#useList = kv.list != null;
87
81
  }
88
82
  /**
89
83
  * Exports spans to the KvStore.
@@ -116,7 +110,7 @@ var FedifySpanExporter = class {
116
110
  const spanContext = span.spanContext();
117
111
  const traceId = spanContext.traceId;
118
112
  const spanId = spanContext.spanId;
119
- const parentSpanId = span.parentSpanId;
113
+ const parentSpanId = span.parentSpanContext?.spanId;
120
114
  for (const event of span.events) if (event.name === "activitypub.activity.received") {
121
115
  const record = this.#extractInboundRecord(event, traceId, spanId, parentSpanId);
122
116
  if (record != null) records.push(record);
@@ -197,15 +191,13 @@ var FedifySpanExporter = class {
197
191
  }
198
192
  async #storeRecord(record) {
199
193
  const options = this.#ttl != null ? { ttl: this.#ttl } : void 0;
200
- if (this.#useList) {
201
- const key = [
202
- ...this.#keyPrefix,
203
- record.traceId,
204
- record.spanId
205
- ];
206
- await this.#kv.set(key, record, options);
207
- await this.#updateTraceSummary(record, options);
208
- } else await this.#storeWithCas(record, options);
194
+ const key = [
195
+ ...this.#keyPrefix,
196
+ record.traceId,
197
+ record.spanId
198
+ ];
199
+ await this.#kv.set(key, record, options);
200
+ await this.#updateTraceSummary(record, options);
209
201
  }
210
202
  async #setWithCasRetry(key, transform, options) {
211
203
  if (this.#kv.cas != null) for (let attempt = 0; attempt < 3; attempt++) {
@@ -240,11 +232,6 @@ var FedifySpanExporter = class {
240
232
  return summary;
241
233
  }, options);
242
234
  }
243
- async #storeWithCas(record, options) {
244
- const key = [...this.#keyPrefix, record.traceId];
245
- await this.#setWithCasRetry(key, (existing) => existing ? [...existing, record] : [record], options);
246
- await this.#updateTraceSummary(record, options);
247
- }
248
235
  /**
249
236
  * Gets all activity records for a specific trace ID.
250
237
  *
@@ -252,16 +239,10 @@ var FedifySpanExporter = class {
252
239
  * @returns An array of activity records belonging to the trace.
253
240
  */
254
241
  async getActivitiesByTraceId(traceId) {
255
- if (this.#useList) {
256
- const prefix = [...this.#keyPrefix, traceId];
257
- const records = [];
258
- for await (const entry of this.#kv.list(prefix)) records.push(entry.value);
259
- return records;
260
- } else {
261
- const key = [...this.#keyPrefix, traceId];
262
- const records = await this.#kv.get(key);
263
- return records ?? [];
264
- }
242
+ const prefix = [...this.#keyPrefix, traceId];
243
+ const records = [];
244
+ for await (const entry of this.#kv.list(prefix)) records.push(entry.value);
245
+ return records;
265
246
  }
266
247
  /**
267
248
  * Gets recent traces with summary information.
@@ -272,7 +253,7 @@ var FedifySpanExporter = class {
272
253
  async getRecentTraces(options) {
273
254
  const summaryPrefix = [...this.#keyPrefix, "_summaries"];
274
255
  const summaries = [];
275
- if (this.#kv.list != null) for await (const entry of this.#kv.list(summaryPrefix)) summaries.push(entry.value);
256
+ for await (const entry of this.#kv.list(summaryPrefix)) summaries.push(entry.value);
276
257
  summaries.sort((a, b) => b.timestamp.localeCompare(a.timestamp));
277
258
  if (options?.limit != null) return summaries.slice(0, options.limit);
278
259
  return summaries;
@@ -298,11 +279,16 @@ function createMockSpan(options) {
298
279
  spanId,
299
280
  traceFlags: TraceFlags.SAMPLED
300
281
  };
282
+ const parentSpanContext = options.parentSpanId ? {
283
+ traceId,
284
+ spanId: options.parentSpanId,
285
+ traceFlags: TraceFlags.SAMPLED
286
+ } : void 0;
301
287
  return {
302
288
  name: options.name ?? "test-span",
303
289
  kind: SpanKind.INTERNAL,
304
290
  spanContext: () => spanContext,
305
- parentSpanId: options.parentSpanId,
291
+ parentSpanContext,
306
292
  startTime: [17e8, 0],
307
293
  endTime: [1700000001, 0],
308
294
  status: { code: SpanStatusCode.OK },
@@ -313,12 +299,14 @@ function createMockSpan(options) {
313
299
  ended: true,
314
300
  resource: {
315
301
  attributes: {},
302
+ getRawAttributes: () => [],
316
303
  merge: () => ({
317
304
  attributes: {},
305
+ getRawAttributes: () => [],
318
306
  merge: () => null
319
307
  })
320
308
  },
321
- instrumentationLibrary: { name: "test" },
309
+ instrumentationScope: { name: "test" },
322
310
  droppedAttributesCount: 0,
323
311
  droppedEventsCount: 0,
324
312
  droppedLinksCount: 0
@@ -349,29 +337,11 @@ function createActivitySentEvent(options) {
349
337
  };
350
338
  }
351
339
  test("FedifySpanExporter", async (t) => {
352
- await t.step("constructor throws if KvStore has neither list() nor cas()", () => {
353
- const kv = {
354
- get: () => Promise.resolve(void 0),
355
- set: () => Promise.resolve(),
356
- delete: () => Promise.resolve()
357
- };
358
- assertThrows(() => new FedifySpanExporter(kv), Error, "KvStore must support either list() or cas()");
359
- });
360
340
  await t.step("constructor accepts KvStore with list()", () => {
361
341
  const kv = new MemoryKvStore();
362
342
  const exporter = new FedifySpanExporter(kv);
363
343
  assertEquals(exporter instanceof FedifySpanExporter, true);
364
344
  });
365
- await t.step("constructor accepts KvStore with cas() only", () => {
366
- const kv = {
367
- get: () => Promise.resolve(void 0),
368
- set: () => Promise.resolve(),
369
- delete: () => Promise.resolve(),
370
- cas: () => Promise.resolve(true)
371
- };
372
- const exporter = new FedifySpanExporter(kv);
373
- assertEquals(exporter instanceof FedifySpanExporter, true);
374
- });
375
345
  await t.step("export() stores inbound activity from span event", async () => {
376
346
  const kv = new MemoryKvStore();
377
347
  const exporter = new FedifySpanExporter(kv);
@@ -568,7 +538,7 @@ test("FedifySpanExporter", async (t) => {
568
538
  const exporter = new FedifySpanExporter(kv);
569
539
  await exporter.shutdown();
570
540
  });
571
- await t.step("works with cas()-only KvStore", async () => {
541
+ await t.step("works with custom KvStore implementation", async () => {
572
542
  const storedData = {};
573
543
  const kv = {
574
544
  get: (key) => {
@@ -585,14 +555,18 @@ test("FedifySpanExporter", async (t) => {
585
555
  delete storedData[k];
586
556
  return Promise.resolve();
587
557
  },
588
- cas: (key, expected, newValue) => {
589
- const k = JSON.stringify(key);
590
- const current = storedData[k];
591
- if (JSON.stringify(current) === JSON.stringify(expected)) {
592
- storedData[k] = newValue;
593
- return Promise.resolve(true);
558
+ async *list(prefix) {
559
+ for (const [encodedKey, value] of Object.entries(storedData)) {
560
+ const key = JSON.parse(encodedKey);
561
+ if (prefix != null) {
562
+ if (key.length < prefix.length) continue;
563
+ if (!prefix.every((p, i) => key[i] === p)) continue;
564
+ }
565
+ yield {
566
+ key,
567
+ value
568
+ };
594
569
  }
595
- return Promise.resolve(false);
596
570
  }
597
571
  };
598
572
  const exporter = new FedifySpanExporter(kv);