@fedify/fedify 2.0.7 → 2.0.9

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 (203) hide show
  1. package/dist/{assert-MZs1qjMx.js → assert-ddO5KLpe.mjs} +5 -9
  2. package/dist/{assert_equals-DSbWqCm3.js → assert_equals-Ew3jOFa3.mjs} +55 -69
  3. package/dist/{assert_instance_of-DHz7EHNU.js → assert_instance_of-C4Ri6VuN.mjs} +5 -9
  4. package/dist/{assert_not_equals-C80BG-_5.js → assert_not_equals--wG9hV7u.mjs} +6 -13
  5. package/dist/{assert_rejects-Ce45JcFg.js → assert_rejects-B-qJtC9Z.mjs} +6 -11
  6. package/dist/{assert_throws-BNXdRGWP.js → assert_throws-4NwKEy2q.mjs} +5 -10
  7. package/dist/{builder-DA7Qgx_F.js → builder-DDoQaGOu.mjs} +32 -41
  8. package/dist/{chunk-CGaQZ11T.cjs → chunk-DDcVe30Y.cjs} +23 -24
  9. package/dist/{chunk-DJNbSFdH.js → chunk-nlSIicah.js} +8 -8
  10. package/dist/{client-CoCIaTNO.js → client-A1UrnX6I.mjs} +9 -13
  11. package/dist/{client-BxMZiQaD.d.ts → client-AtlibPOU.d.ts} +1 -1
  12. package/dist/{client-C97KOq3x.d.cts → client-z-8dc-e1.d.cts} +1 -1
  13. package/dist/{collection-CcnIw1qY.js → collection-ChgDTHLz.mjs} +7 -12
  14. package/dist/compat/mod.cjs +5 -8
  15. package/dist/compat/mod.d.cts +78 -6
  16. package/dist/compat/mod.d.ts +78 -6
  17. package/dist/compat/mod.js +4 -8
  18. package/dist/compat/transformers.test.mjs +62 -0
  19. package/dist/{context-D3QkEtZd.d.cts → context-CNIt-Qn7.d.cts} +9 -18
  20. package/dist/{context-DZJhUmzF.d.ts → context-Dyg7P1qW.d.ts} +9 -18
  21. package/dist/{context-pa9aIrwp.js → context-Juj6bdHC.mjs} +7 -11
  22. package/dist/deno-CuVDEdyj.mjs +8 -0
  23. package/dist/{docloader-CJeSPcS_.js → docloader-BPq9yzC_.mjs} +8 -14
  24. package/dist/{esm-nLm00z9V.js → esm-DVILvP5e.mjs} +50 -89
  25. package/dist/federation/builder.test.d.mts +2 -0
  26. package/dist/federation/{builder.test.js → builder.test.mjs} +19 -38
  27. package/dist/federation/collection.test.d.mts +2 -0
  28. package/dist/federation/collection.test.mjs +21 -0
  29. package/dist/federation/handler.test.d.mts +2 -0
  30. package/dist/federation/{handler.test.js → handler.test.mjs} +26 -56
  31. package/dist/federation/idempotency.test.d.mts +2 -0
  32. package/dist/federation/{idempotency.test.js → idempotency.test.mjs} +31 -62
  33. package/dist/federation/inbox.test.d.mts +2 -0
  34. package/dist/federation/{inbox.test.js → inbox.test.mjs} +8 -12
  35. package/dist/federation/keycache.test.d.mts +2 -0
  36. package/dist/federation/{keycache.test.js → keycache.test.mjs} +13 -13
  37. package/dist/federation/kv.test.d.mts +2 -0
  38. package/dist/federation/{kv.test.js → kv.test.mjs} +11 -22
  39. package/dist/federation/middleware.test.d.mts +2 -0
  40. package/dist/federation/{middleware.test.js → middleware.test.mjs} +146 -225
  41. package/dist/federation/mod.cjs +327 -16
  42. package/dist/federation/mod.d.cts +3 -6
  43. package/dist/federation/mod.d.ts +3 -6
  44. package/dist/federation/mod.js +322 -13
  45. package/dist/federation/mq.test.d.mts +2 -0
  46. package/dist/federation/{mq.test.js → mq.test.mjs} +21 -35
  47. package/dist/federation/negotiation.test.d.mts +2 -0
  48. package/dist/federation/{negotiation.test.js → negotiation.test.mjs} +9 -16
  49. package/dist/federation/retry.test.d.mts +2 -0
  50. package/dist/federation/{retry.test.js → retry.test.mjs} +8 -11
  51. package/dist/federation/router.test.d.mts +2 -0
  52. package/dist/federation/{router.test.js → router.test.mjs} +11 -16
  53. package/dist/federation/send.test.d.mts +2 -0
  54. package/dist/federation/{send.test.js → send.test.mjs} +22 -29
  55. package/dist/federation/webfinger.test.d.mts +2 -0
  56. package/dist/federation/{webfinger.test.js → webfinger.test.mjs} +22 -55
  57. package/dist/{http-DkHdFfrc.d.ts → http-B2wiNmSo.d.ts} +1 -6
  58. package/dist/{http-B3vAjAtl.js → http-Bz7avX57.js} +39 -159
  59. package/dist/{http-Cz3MlXAZ.d.cts → http-C_tEAiZj.d.cts} +1 -6
  60. package/dist/{http-CjaLjnRN.js → http-DI213UHg.mjs} +31 -35
  61. package/dist/{http-CQ7TiYUI.cjs → http-DKBDoudA.cjs} +119 -233
  62. package/dist/{inbox-B33isX44.js → inbox-Bdn-CSRd.mjs} +18 -26
  63. package/dist/{key-Cga1p73u.js → key-DzJf84o7.mjs} +12 -19
  64. package/dist/{keycache-DRxpZ5r9.js → keycache-DaQ3ndaJ.mjs} +15 -10
  65. package/dist/{keys-ZbcByPg9.js → keys-CtZLJq76.mjs} +5 -9
  66. package/dist/{kv-QzKcOQgP.js → kv-BrZHNugx.mjs} +6 -10
  67. package/dist/{kv-BL4nlICN.d.cts → kv-CbLNp3zQ.d.cts} +1 -1
  68. package/dist/{kv-DXEUEP6z.d.ts → kv-GFYnFoOl.d.ts} +1 -1
  69. package/dist/{kv-cache-CFdy0BpZ.js → kv-cache-DBd7BezJ.js} +6 -13
  70. package/dist/{kv-cache--qyREO7e.cjs → kv-cache-Dj1Q7TiW.cjs} +27 -34
  71. package/dist/{kv-cache-El7We5sy.js → kv-cache-OWmRLHir.mjs} +4 -8
  72. package/dist/{ld-BWSOukKj.js → ld-DczS1fLK.mjs} +17 -31
  73. package/dist/middleware-B5CiOImA.mjs +5 -0
  74. package/dist/{middleware-CP7JdsGq.js → middleware-BKNu57ZI.js} +331 -365
  75. package/dist/middleware-C36TOX-2.cjs +4 -0
  76. package/dist/{middleware-Scz2k9eL.cjs → middleware-CyjmpK70.cjs} +523 -565
  77. package/dist/{middleware-BI1VCuPT.js → middleware-DoHz9oIo.mjs} +260 -292
  78. package/dist/{mod-DPkRU3EK.d.cts → mod-1xhgsHef.d.cts} +2 -2
  79. package/dist/{mod-DUWcVv49.d.ts → mod-BGtYJZKu.d.ts} +2 -2
  80. package/dist/{mod-DXsQakeS.d.cts → mod-Bld7oeqf.d.cts} +3 -3
  81. package/dist/{mod-DnSsduJF.d.ts → mod-BnAKGh2w.d.ts} +2 -2
  82. package/dist/{mod-CwZXZJ9d.d.ts → mod-DTOUyCce.d.ts} +3 -3
  83. package/dist/{mod-Di3W5OdP.d.cts → mod-DWoQffTD.d.cts} +2 -2
  84. package/dist/mod.cjs +29 -68
  85. package/dist/mod.d.cts +11 -14
  86. package/dist/mod.d.ts +11 -15
  87. package/dist/mod.js +17 -65
  88. package/dist/{negotiation-5NPJL6zp.js → negotiation-BehA2uul.mjs} +7 -11
  89. package/dist/nodeinfo/client.test.d.mts +2 -0
  90. package/dist/nodeinfo/{client.test.js → client.test.mjs} +22 -40
  91. package/dist/nodeinfo/handler.test.d.mts +2 -0
  92. package/dist/nodeinfo/{handler.test.js → handler.test.mjs} +13 -42
  93. package/dist/nodeinfo/mod.cjs +5 -8
  94. package/dist/nodeinfo/mod.d.cts +2 -3
  95. package/dist/nodeinfo/mod.d.ts +2 -3
  96. package/dist/nodeinfo/mod.js +4 -8
  97. package/dist/nodeinfo/types.test.d.mts +2 -0
  98. package/dist/nodeinfo/{types.test.js → types.test.mjs} +9 -16
  99. package/dist/otel/exporter.test.d.mts +2 -0
  100. package/dist/otel/{exporter.test.js → exporter.test.mjs} +117 -169
  101. package/dist/otel/mod.cjs +15 -20
  102. package/dist/otel/mod.d.cts +2 -2
  103. package/dist/otel/mod.d.ts +2 -2
  104. package/dist/otel/mod.js +8 -14
  105. package/dist/{owner-gd0Q9FuU.d.ts → owner-74ARJ5TL.d.ts} +1 -1
  106. package/dist/{owner-1AbPBOOZ.d.cts → owner-CptqhsOy.d.cts} +1 -1
  107. package/dist/{owner-HASxJJP1.js → owner-DXMGUEOr.mjs} +11 -16
  108. package/dist/{proof-BwfRl5J4.js → proof-C-7NljBU.js} +33 -59
  109. package/dist/{proof-BXt2Oi8t.js → proof-CEOujj0L.mjs} +21 -33
  110. package/dist/{proof-BYZ4hcgN.cjs → proof-DMu-6A_w.cjs} +133 -157
  111. package/dist/{retry-D4GJ670a.js → retry-Ddbq3AcK.mjs} +4 -7
  112. package/dist/{router-D9eI0s4b.js → router-CrMLXoOr.mjs} +4 -8
  113. package/dist/runtime/mod.cjs +11 -13
  114. package/dist/runtime/mod.d.cts +6 -2
  115. package/dist/runtime/mod.d.ts +0 -1
  116. package/dist/runtime/mod.js +4 -7
  117. package/dist/{send-BF3omx5-.js → send-DIfrLTB_.mjs} +8 -13
  118. package/dist/sig/http.test.d.mts +2 -0
  119. package/dist/sig/{http.test.js → http.test.mjs} +160 -199
  120. package/dist/sig/key.test.d.mts +2 -0
  121. package/dist/sig/{key.test.js → key.test.mjs} +11 -18
  122. package/dist/sig/ld.test.d.mts +2 -0
  123. package/dist/sig/{ld.test.js → ld.test.mjs} +22 -35
  124. package/dist/sig/mod.cjs +6 -9
  125. package/dist/sig/mod.d.cts +3 -3
  126. package/dist/sig/mod.d.ts +3 -3
  127. package/dist/sig/mod.js +5 -9
  128. package/dist/sig/owner.test.d.mts +2 -0
  129. package/dist/sig/{owner.test.js → owner.test.mjs} +19 -34
  130. package/dist/sig/proof.test.d.mts +2 -0
  131. package/dist/sig/{proof.test.js → proof.test.mjs} +16 -27
  132. package/dist/{std__assert-DWivtrGR.js → std__assert-Duiq_YC9.mjs} +12 -24
  133. package/dist/testing/{mod.d.ts → mod.d.mts} +26 -78
  134. package/dist/testing/mod.mjs +6 -0
  135. package/dist/{transformers-3g8GZwkZ.cjs → transformers-NeAONrAq.cjs} +20 -25
  136. package/dist/{transformers-C3FLHUd6.js → transformers-ve6e2xcg.js} +3 -7
  137. package/dist/{types-CPz01LGH.js → types-C37hquWI.mjs} +4 -7
  138. package/dist/{types-Cd_hszr_.cjs → types-KC4QAoxe.cjs} +29 -34
  139. package/dist/{types-C93Ob9cU.js → types-hvL8ElAs.js} +8 -13
  140. package/dist/utils/docloader.test.d.mts +2 -0
  141. package/dist/utils/{docloader.test.js → docloader.test.mjs} +14 -24
  142. package/dist/utils/kv-cache.test.d.mts +2 -0
  143. package/dist/utils/{kv-cache.test.js → kv-cache.test.mjs} +25 -40
  144. package/dist/utils/mod.cjs +5 -9
  145. package/dist/utils/mod.d.cts +1 -3
  146. package/dist/utils/mod.d.ts +1 -3
  147. package/dist/utils/mod.js +4 -9
  148. package/dist/vocab/cjs.test.d.mts +2 -0
  149. package/dist/vocab/cjs.test.mjs +14 -0
  150. package/dist/vocab/mod.cjs +10 -12
  151. package/dist/vocab/mod.js +3 -5
  152. package/package.json +7 -7
  153. package/dist/compat/transformers.test.d.ts +0 -3
  154. package/dist/compat/transformers.test.js +0 -87
  155. package/dist/compat-Bb4NuTUO.js +0 -4
  156. package/dist/compat-DmDDELst.cjs +0 -4
  157. package/dist/deno-CbQK8e-e.js +0 -121
  158. package/dist/federation/builder.test.d.ts +0 -3
  159. package/dist/federation/collection.test.d.ts +0 -3
  160. package/dist/federation/collection.test.js +0 -32
  161. package/dist/federation/handler.test.d.ts +0 -3
  162. package/dist/federation/idempotency.test.d.ts +0 -3
  163. package/dist/federation/inbox.test.d.ts +0 -3
  164. package/dist/federation/keycache.test.d.ts +0 -3
  165. package/dist/federation/kv.test.d.ts +0 -3
  166. package/dist/federation/middleware.test.d.ts +0 -3
  167. package/dist/federation/mq.test.d.ts +0 -3
  168. package/dist/federation/negotiation.test.d.ts +0 -3
  169. package/dist/federation/retry.test.d.ts +0 -3
  170. package/dist/federation/router.test.d.ts +0 -3
  171. package/dist/federation/send.test.d.ts +0 -3
  172. package/dist/federation/webfinger.test.d.ts +0 -3
  173. package/dist/federation-Bp3HI26G.cjs +0 -350
  174. package/dist/federation-DaMfqRm4.js +0 -332
  175. package/dist/middleware-CcXQzfn8.cjs +0 -12
  176. package/dist/middleware-CoeaBowW.js +0 -12
  177. package/dist/middleware-vH2jFwC6.js +0 -26
  178. package/dist/mod-Bh8mqlYw.d.cts +0 -9
  179. package/dist/mod-D6HodEq7.d.ts +0 -7
  180. package/dist/mod-DVwHUI_x.d.cts +0 -80
  181. package/dist/mod-DosD6NsG.d.ts +0 -82
  182. package/dist/mod-gq_Xfdz8.d.cts +0 -1
  183. package/dist/nodeinfo/client.test.d.ts +0 -3
  184. package/dist/nodeinfo/handler.test.d.ts +0 -3
  185. package/dist/nodeinfo/types.test.d.ts +0 -3
  186. package/dist/nodeinfo-DoESQxq5.js +0 -4
  187. package/dist/nodeinfo-DuMYTpbZ.cjs +0 -4
  188. package/dist/otel/exporter.test.d.ts +0 -3
  189. package/dist/runtime-c2Njxsry.cjs +0 -17
  190. package/dist/runtime-poamPCMb.js +0 -13
  191. package/dist/sig/http.test.d.ts +0 -3
  192. package/dist/sig/key.test.d.ts +0 -3
  193. package/dist/sig/ld.test.d.ts +0 -3
  194. package/dist/sig/owner.test.d.ts +0 -3
  195. package/dist/sig/proof.test.d.ts +0 -3
  196. package/dist/sig-BNhspNOf.js +0 -4
  197. package/dist/sig-vX39WyWI.cjs +0 -4
  198. package/dist/testing/mod.js +0 -10
  199. package/dist/utils/docloader.test.d.ts +0 -3
  200. package/dist/utils/kv-cache.test.d.ts +0 -3
  201. package/dist/utils-BQ9KqEK9.cjs +0 -4
  202. package/dist/utils-Dn5OPdSW.js +0 -4
  203. /package/dist/{mod-AGjRfPjT.d.ts → compat/transformers.test.d.mts} +0 -0
@@ -1,21 +1,13 @@
1
-
2
- import { Temporal } from "@js-temporal/polyfill";
3
- import { URLPattern } from "urlpattern-polyfill";
4
- globalThis.addEventListener = () => {};
5
-
6
- import { assertEquals } from "../assert_equals-DSbWqCm3.js";
7
- import "../assert-MZs1qjMx.js";
8
- import "../assert_instance_of-DHz7EHNU.js";
9
- import { MemoryKvStore } from "../kv-QzKcOQgP.js";
10
- import "../std__assert-DWivtrGR.js";
11
- import "../assert_rejects-Ce45JcFg.js";
12
- import "../assert_throws-BNXdRGWP.js";
13
- import "../assert_not_equals-C80BG-_5.js";
1
+ import { Temporal } from "@js-temporal/polyfill";
2
+ import "urlpattern-polyfill";
3
+ globalThis.addEventListener = () => {};
4
+ import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
5
+ import "../std__assert-Duiq_YC9.mjs";
6
+ import { t as MemoryKvStore } from "../kv-BrZHNugx.mjs";
14
7
  import { test } from "@fedify/fixture";
15
- import { getLogger } from "@logtape/logtape";
16
8
  import { SpanKind, SpanStatusCode, TraceFlags } from "@opentelemetry/api";
9
+ import { getLogger } from "@logtape/logtape";
17
10
  import { ExportResultCode } from "@opentelemetry/core";
18
-
19
11
  //#region src/otel/exporter.ts
20
12
  /**
21
13
  * A SpanExporter that persists ActivityPub activity traces to a
@@ -100,8 +92,7 @@ var FedifySpanExporter = class {
100
92
  const records = this.#extractRecords(span);
101
93
  for (const record of records) storeOperations.push(this.#storeRecord(record));
102
94
  }
103
- const results = await Promise.allSettled(storeOperations);
104
- const rejected = results.filter((r) => r.status === "rejected");
95
+ const rejected = (await Promise.allSettled(storeOperations)).filter((r) => r.status === "rejected");
105
96
  if (rejected.length > 0) throw new AggregateError(rejected.map((r) => r.reason), "Failed to store one or more trace activity records.");
106
97
  }
107
98
  #extractRecords(span) {
@@ -200,12 +191,11 @@ var FedifySpanExporter = class {
200
191
  }
201
192
  async #setWithCasRetry(key, transform, options) {
202
193
  if (this.#kv.cas != null) for (let attempt = 0; attempt < 3; attempt++) {
203
- const existing$1 = await this.#kv.get(key);
204
- const newValue$1 = transform(existing$1);
205
- if (await this.#kv.cas(key, existing$1, newValue$1, options)) return;
194
+ const existing = await this.#kv.get(key);
195
+ const newValue = transform(existing);
196
+ if (await this.#kv.cas(key, existing, newValue, options)) return;
206
197
  }
207
- const existing = await this.#kv.get(key);
208
- const newValue = transform(existing);
198
+ const newValue = transform(await this.#kv.get(key));
209
199
  await this.#kv.set(key, newValue, options);
210
200
  }
211
201
  async #updateTraceSummary(record, options) {
@@ -261,15 +251,13 @@ var FedifySpanExporter = class {
261
251
  */
262
252
  async shutdown() {}
263
253
  };
264
-
265
254
  //#endregion
266
255
  //#region src/otel/exporter.test.ts
267
256
  function createMockSpan(options) {
268
257
  const traceId = options.traceId ?? "0123456789abcdef0123456789abcdef";
269
- const spanId = options.spanId ?? "0123456789abcdef";
270
258
  const spanContext = {
271
259
  traceId,
272
- spanId,
260
+ spanId: options.spanId ?? "0123456789abcdef",
273
261
  traceFlags: TraceFlags.SAMPLED
274
262
  };
275
263
  const parentSpanContext = options.parentSpanId ? {
@@ -331,13 +319,10 @@ function createActivitySentEvent(options) {
331
319
  }
332
320
  test("FedifySpanExporter", async (t) => {
333
321
  await t.step("constructor accepts KvStore with list()", () => {
334
- const kv = new MemoryKvStore();
335
- const exporter = new FedifySpanExporter(kv);
336
- assertEquals(exporter instanceof FedifySpanExporter, true);
322
+ assertEquals(new FedifySpanExporter(new MemoryKvStore()) instanceof FedifySpanExporter, true);
337
323
  });
338
324
  await t.step("export() stores inbound activity from span event", async () => {
339
- const kv = new MemoryKvStore();
340
- const exporter = new FedifySpanExporter(kv);
325
+ const exporter = new FedifySpanExporter(new MemoryKvStore());
341
326
  const traceId = "trace123";
342
327
  const spanId = "span456";
343
328
  const activity = {
@@ -378,8 +363,7 @@ test("FedifySpanExporter", async (t) => {
378
363
  assertEquals(activities[0].verified, true);
379
364
  });
380
365
  await t.step("export() stores outbound activity from span event", async () => {
381
- const kv = new MemoryKvStore();
382
- const exporter = new FedifySpanExporter(kv);
366
+ const exporter = new FedifySpanExporter(new MemoryKvStore());
383
367
  const traceId = "trace789";
384
368
  const spanId = "span012";
385
369
  const inboxUrl = "https://example.com/users/alice/inbox";
@@ -390,13 +374,12 @@ test("FedifySpanExporter", async (t) => {
390
374
  actor: "https://myserver.com/users/bob",
391
375
  object: "https://example.com/users/alice"
392
376
  };
393
- const activityJson = JSON.stringify(activity);
394
377
  const span = createMockSpan({
395
378
  traceId,
396
379
  spanId,
397
380
  name: "activitypub.send_activity",
398
381
  events: [createActivitySentEvent({
399
- activityJson,
382
+ activityJson: JSON.stringify(activity),
400
383
  inboxUrl,
401
384
  activityId: activity.id
402
385
  })]
@@ -417,8 +400,7 @@ test("FedifySpanExporter", async (t) => {
417
400
  assertEquals(activities[0].inboxUrl, inboxUrl);
418
401
  });
419
402
  await t.step("export() ignores spans without activity events", async () => {
420
- const kv = new MemoryKvStore();
421
- const exporter = new FedifySpanExporter(kv);
403
+ const exporter = new FedifySpanExporter(new MemoryKvStore());
422
404
  const span = createMockSpan({
423
405
  traceId: "trace999",
424
406
  spanId: "span999",
@@ -431,12 +413,10 @@ test("FedifySpanExporter", async (t) => {
431
413
  resolve();
432
414
  });
433
415
  });
434
- const activities = await exporter.getActivitiesByTraceId("trace999");
435
- assertEquals(activities.length, 0);
416
+ assertEquals((await exporter.getActivitiesByTraceId("trace999")).length, 0);
436
417
  });
437
418
  await t.step("export() stores multiple activities from same trace", async () => {
438
- const kv = new MemoryKvStore();
439
- const exporter = new FedifySpanExporter(kv);
419
+ const exporter = new FedifySpanExporter(new MemoryKvStore());
440
420
  const inboundActivity = JSON.stringify({
441
421
  "@context": "https://www.w3.org/ns/activitystreams",
442
422
  type: "Create",
@@ -478,8 +458,7 @@ test("FedifySpanExporter", async (t) => {
478
458
  assertEquals(outbound?.parentSpanId, "span1");
479
459
  });
480
460
  await t.step("getRecentTraces() returns recent traces", async () => {
481
- const kv = new MemoryKvStore();
482
- const exporter = new FedifySpanExporter(kv);
461
+ const exporter = new FedifySpanExporter(new MemoryKvStore());
483
462
  for (let i = 0; i < 5; i++) {
484
463
  const activityJson = JSON.stringify({
485
464
  "@context": "https://www.w3.org/ns/activitystreams",
@@ -496,12 +475,10 @@ test("FedifySpanExporter", async (t) => {
496
475
  exporter.export([span], () => resolve());
497
476
  });
498
477
  }
499
- const traces = await exporter.getRecentTraces({ limit: 3 });
500
- assertEquals(traces.length, 3);
478
+ assertEquals((await exporter.getRecentTraces({ limit: 3 })).length, 3);
501
479
  });
502
480
  await t.step("getRecentTraces() returns all traces when limit not specified", async () => {
503
- const kv = new MemoryKvStore();
504
- const exporter = new FedifySpanExporter(kv);
481
+ const exporter = new FedifySpanExporter(new MemoryKvStore());
505
482
  for (let i = 0; i < 3; i++) {
506
483
  const activityJson = JSON.stringify({
507
484
  "@context": "https://www.w3.org/ns/activitystreams",
@@ -518,22 +495,17 @@ test("FedifySpanExporter", async (t) => {
518
495
  exporter.export([span], () => resolve());
519
496
  });
520
497
  }
521
- const traces = await exporter.getRecentTraces();
522
- assertEquals(traces.length >= 3, true);
498
+ assertEquals((await exporter.getRecentTraces()).length >= 3, true);
523
499
  });
524
500
  await t.step("forceFlush() returns resolved promise", async () => {
525
- const kv = new MemoryKvStore();
526
- const exporter = new FedifySpanExporter(kv);
527
- await exporter.forceFlush();
501
+ await new FedifySpanExporter(new MemoryKvStore()).forceFlush();
528
502
  });
529
503
  await t.step("shutdown() completes successfully", async () => {
530
- const kv = new MemoryKvStore();
531
- const exporter = new FedifySpanExporter(kv);
532
- await exporter.shutdown();
504
+ await new FedifySpanExporter(new MemoryKvStore()).shutdown();
533
505
  });
534
506
  await t.step("works with custom KvStore implementation", async () => {
535
507
  const storedData = {};
536
- const kv = {
508
+ const exporter = new FedifySpanExporter({
537
509
  get: (key) => {
538
510
  const k = JSON.stringify(key);
539
511
  return Promise.resolve(storedData[k]);
@@ -561,18 +533,16 @@ test("FedifySpanExporter", async (t) => {
561
533
  };
562
534
  }
563
535
  }
564
- };
565
- const exporter = new FedifySpanExporter(kv);
566
- const activityJson = JSON.stringify({
567
- "@context": "https://www.w3.org/ns/activitystreams",
568
- type: "Like",
569
- id: "https://example.com/activities/like"
570
536
  });
571
537
  const span = createMockSpan({
572
538
  traceId: "cas-trace",
573
539
  spanId: "cas-span",
574
540
  name: "activitypub.inbox",
575
- events: [createActivityReceivedEvent({ activityJson })]
541
+ events: [createActivityReceivedEvent({ activityJson: JSON.stringify({
542
+ "@context": "https://www.w3.org/ns/activitystreams",
543
+ type: "Like",
544
+ id: "https://example.com/activities/like"
545
+ }) })]
576
546
  });
577
547
  await new Promise((resolve) => {
578
548
  exporter.export([span], (result) => {
@@ -585,36 +555,31 @@ test("FedifySpanExporter", async (t) => {
585
555
  assertEquals(activities[0].activityType, "Like");
586
556
  });
587
557
  await t.step("TTL option is respected", async () => {
588
- const kv = new MemoryKvStore();
589
- const exporter = new FedifySpanExporter(kv, { ttl: Temporal.Duration.from({ hours: 1 }) });
590
- const activityJson = JSON.stringify({
591
- "@context": "https://www.w3.org/ns/activitystreams",
592
- type: "Create"
593
- });
558
+ const exporter = new FedifySpanExporter(new MemoryKvStore(), { ttl: Temporal.Duration.from({ hours: 1 }) });
594
559
  const span = createMockSpan({
595
560
  traceId: "ttl-trace",
596
561
  spanId: "ttl-span",
597
562
  name: "activitypub.inbox",
598
- events: [createActivityReceivedEvent({ activityJson })]
563
+ events: [createActivityReceivedEvent({ activityJson: JSON.stringify({
564
+ "@context": "https://www.w3.org/ns/activitystreams",
565
+ type: "Create"
566
+ }) })]
599
567
  });
600
568
  await new Promise((resolve) => {
601
569
  exporter.export([span], () => resolve());
602
570
  });
603
- const activities = await exporter.getActivitiesByTraceId("ttl-trace");
604
- assertEquals(activities.length, 1);
571
+ assertEquals((await exporter.getActivitiesByTraceId("ttl-trace")).length, 1);
605
572
  });
606
573
  await t.step("keyPrefix option customizes storage keys", async () => {
607
- const kv = new MemoryKvStore();
608
- const exporter = new FedifySpanExporter(kv, { keyPrefix: ["custom", "prefix"] });
609
- const activityJson = JSON.stringify({
610
- "@context": "https://www.w3.org/ns/activitystreams",
611
- type: "Announce"
612
- });
574
+ const exporter = new FedifySpanExporter(new MemoryKvStore(), { keyPrefix: ["custom", "prefix"] });
613
575
  const span = createMockSpan({
614
576
  traceId: "prefix-trace",
615
577
  spanId: "prefix-span",
616
578
  name: "activitypub.inbox",
617
- events: [createActivityReceivedEvent({ activityJson })]
579
+ events: [createActivityReceivedEvent({ activityJson: JSON.stringify({
580
+ "@context": "https://www.w3.org/ns/activitystreams",
581
+ type: "Announce"
582
+ }) })]
618
583
  });
619
584
  await new Promise((resolve) => {
620
585
  exporter.export([span], () => resolve());
@@ -628,39 +593,37 @@ test("FedifySpanExporter", async (t) => {
628
593
  const webServerExporter = new FedifySpanExporter(sharedKv);
629
594
  const workerExporter = new FedifySpanExporter(sharedKv);
630
595
  const dashboardExporter = new FedifySpanExporter(sharedKv);
631
- const inboundActivity = JSON.stringify({
632
- "@context": "https://www.w3.org/ns/activitystreams",
633
- type: "Follow",
634
- id: "https://remote.example/activities/follow-1",
635
- actor: "https://remote.example/users/alice",
636
- object: "https://local.example/users/bob"
637
- });
638
596
  const inboxSpan = createMockSpan({
639
597
  traceId: "distributed-trace-001",
640
598
  spanId: "inbox-span",
641
599
  name: "activitypub.inbox",
642
600
  events: [createActivityReceivedEvent({
643
- activityJson: inboundActivity,
601
+ activityJson: JSON.stringify({
602
+ "@context": "https://www.w3.org/ns/activitystreams",
603
+ type: "Follow",
604
+ id: "https://remote.example/activities/follow-1",
605
+ actor: "https://remote.example/users/alice",
606
+ object: "https://local.example/users/bob"
607
+ }),
644
608
  verified: true
645
609
  })]
646
610
  });
647
611
  await new Promise((resolve) => {
648
612
  webServerExporter.export([inboxSpan], () => resolve());
649
613
  });
650
- const outboundActivity = JSON.stringify({
651
- "@context": "https://www.w3.org/ns/activitystreams",
652
- type: "Accept",
653
- id: "https://local.example/activities/accept-1",
654
- actor: "https://local.example/users/bob",
655
- object: "https://remote.example/activities/follow-1"
656
- });
657
614
  const sendSpan = createMockSpan({
658
615
  traceId: "distributed-trace-001",
659
616
  spanId: "send-span",
660
617
  parentSpanId: "inbox-span",
661
618
  name: "activitypub.send_activity",
662
619
  events: [createActivitySentEvent({
663
- activityJson: outboundActivity,
620
+ activityJson: JSON.stringify({
621
+ "@context": "https://www.w3.org/ns/activitystreams",
622
+ type: "Accept",
623
+ id: "https://local.example/activities/accept-1",
624
+ actor: "https://local.example/users/bob",
625
+ object: "https://remote.example/activities/follow-1"
626
+ }),
664
627
  inboxUrl: "https://remote.example/users/alice/inbox",
665
628
  activityId: "https://local.example/activities/accept-1"
666
629
  })]
@@ -679,8 +642,7 @@ test("FedifySpanExporter", async (t) => {
679
642
  assertEquals(accept?.direction, "outbound");
680
643
  assertEquals(accept?.inboxUrl, "https://remote.example/users/alice/inbox");
681
644
  assertEquals(accept?.parentSpanId, "inbox-span");
682
- const recentTraces = await dashboardExporter.getRecentTraces();
683
- const ourTrace = recentTraces.find((t$1) => t$1.traceId === "distributed-trace-001");
645
+ const ourTrace = (await dashboardExporter.getRecentTraces()).find((t) => t.traceId === "distributed-trace-001");
684
646
  assertEquals(ourTrace != null, true);
685
647
  assertEquals(ourTrace?.activityCount, 2);
686
648
  assertEquals(ourTrace?.activityTypes.includes("Follow"), true);
@@ -714,34 +676,30 @@ test("FedifySpanExporter", async (t) => {
714
676
  });
715
677
  });
716
678
  await Promise.all(exportPromises);
717
- const dashboard = new FedifySpanExporter(sharedKv);
718
- const activities = await dashboard.getActivitiesByTraceId(traceId);
679
+ const activities = await new FedifySpanExporter(sharedKv).getActivitiesByTraceId(traceId);
719
680
  assertEquals(activities.length, 3);
720
- const inboxUrls = activities.map((a) => a.inboxUrl).sort();
721
- assertEquals(inboxUrls, [
681
+ assertEquals(activities.map((a) => a.inboxUrl).sort(), [
722
682
  "https://follower-0.example/inbox",
723
683
  "https://follower-1.example/inbox",
724
684
  "https://follower-2.example/inbox"
725
685
  ]);
726
686
  });
727
687
  await t.step("extracts actorId from activity with string actor", async () => {
728
- const kv = new MemoryKvStore();
729
- const exporter = new FedifySpanExporter(kv);
730
- const activityJson = JSON.stringify({
731
- "@context": "https://www.w3.org/ns/activitystreams",
732
- type: "Create",
733
- id: "https://example.com/activities/123",
734
- actor: "https://example.com/users/alice",
735
- object: {
736
- type: "Note",
737
- content: "Hello!"
738
- }
739
- });
688
+ const exporter = new FedifySpanExporter(new MemoryKvStore());
740
689
  const span = createMockSpan({
741
690
  traceId: "actor-string-trace",
742
691
  spanId: "span1",
743
692
  name: "activitypub.inbox",
744
- events: [createActivityReceivedEvent({ activityJson })]
693
+ events: [createActivityReceivedEvent({ activityJson: JSON.stringify({
694
+ "@context": "https://www.w3.org/ns/activitystreams",
695
+ type: "Create",
696
+ id: "https://example.com/activities/123",
697
+ actor: "https://example.com/users/alice",
698
+ object: {
699
+ type: "Note",
700
+ content: "Hello!"
701
+ }
702
+ }) })]
745
703
  });
746
704
  await new Promise((resolve) => {
747
705
  exporter.export([span], () => resolve());
@@ -751,27 +709,25 @@ test("FedifySpanExporter", async (t) => {
751
709
  assertEquals(activities[0].actorId, "https://example.com/users/alice");
752
710
  });
753
711
  await t.step("extracts actorId from activity with object actor", async () => {
754
- const kv = new MemoryKvStore();
755
- const exporter = new FedifySpanExporter(kv);
756
- const activityJson = JSON.stringify({
757
- "@context": "https://www.w3.org/ns/activitystreams",
758
- type: "Create",
759
- id: "https://example.com/activities/456",
760
- actor: {
761
- type: "Person",
762
- id: "https://example.com/users/bob",
763
- name: "Bob"
764
- },
765
- object: {
766
- type: "Note",
767
- content: "Hello!"
768
- }
769
- });
712
+ const exporter = new FedifySpanExporter(new MemoryKvStore());
770
713
  const span = createMockSpan({
771
714
  traceId: "actor-object-trace",
772
715
  spanId: "span1",
773
716
  name: "activitypub.inbox",
774
- events: [createActivityReceivedEvent({ activityJson })]
717
+ events: [createActivityReceivedEvent({ activityJson: JSON.stringify({
718
+ "@context": "https://www.w3.org/ns/activitystreams",
719
+ type: "Create",
720
+ id: "https://example.com/activities/456",
721
+ actor: {
722
+ type: "Person",
723
+ id: "https://example.com/users/bob",
724
+ name: "Bob"
725
+ },
726
+ object: {
727
+ type: "Note",
728
+ content: "Hello!"
729
+ }
730
+ }) })]
775
731
  });
776
732
  await new Promise((resolve) => {
777
733
  exporter.export([span], () => resolve());
@@ -781,21 +737,19 @@ test("FedifySpanExporter", async (t) => {
781
737
  assertEquals(activities[0].actorId, "https://example.com/users/bob");
782
738
  });
783
739
  await t.step("extracts actorId from outbound activity", async () => {
784
- const kv = new MemoryKvStore();
785
- const exporter = new FedifySpanExporter(kv);
786
- const activityJson = JSON.stringify({
787
- "@context": "https://www.w3.org/ns/activitystreams",
788
- type: "Follow",
789
- id: "https://myserver.com/activities/789",
790
- actor: "https://myserver.com/users/charlie",
791
- object: "https://example.com/users/alice"
792
- });
740
+ const exporter = new FedifySpanExporter(new MemoryKvStore());
793
741
  const span = createMockSpan({
794
742
  traceId: "outbound-actor-trace",
795
743
  spanId: "span1",
796
744
  name: "activitypub.send_activity",
797
745
  events: [createActivitySentEvent({
798
- activityJson,
746
+ activityJson: JSON.stringify({
747
+ "@context": "https://www.w3.org/ns/activitystreams",
748
+ type: "Follow",
749
+ id: "https://myserver.com/activities/789",
750
+ actor: "https://myserver.com/users/charlie",
751
+ object: "https://example.com/users/alice"
752
+ }),
799
753
  inboxUrl: "https://example.com/users/alice/inbox"
800
754
  })]
801
755
  });
@@ -807,20 +761,18 @@ test("FedifySpanExporter", async (t) => {
807
761
  assertEquals(activities[0].actorId, "https://myserver.com/users/charlie");
808
762
  });
809
763
  await t.step("extracts signature verification details for inbound activity", async () => {
810
- const kv = new MemoryKvStore();
811
- const exporter = new FedifySpanExporter(kv);
812
- const activityJson = JSON.stringify({
813
- "@context": "https://www.w3.org/ns/activitystreams",
814
- type: "Create",
815
- id: "https://example.com/activities/sig-test",
816
- actor: "https://example.com/users/alice"
817
- });
764
+ const exporter = new FedifySpanExporter(new MemoryKvStore());
818
765
  const span = createMockSpan({
819
766
  traceId: "sig-details-trace",
820
767
  spanId: "span1",
821
768
  name: "activitypub.inbox",
822
769
  events: [createActivityReceivedEvent({
823
- activityJson,
770
+ activityJson: JSON.stringify({
771
+ "@context": "https://www.w3.org/ns/activitystreams",
772
+ type: "Create",
773
+ id: "https://example.com/activities/sig-test",
774
+ actor: "https://example.com/users/alice"
775
+ }),
824
776
  verified: true,
825
777
  httpSigVerified: true,
826
778
  httpSigKeyId: "https://example.com/users/alice#main-key",
@@ -839,20 +791,18 @@ test("FedifySpanExporter", async (t) => {
839
791
  assertEquals(activities[0].signatureDetails?.ldSignaturesVerified, false);
840
792
  });
841
793
  await t.step("signature details with LD signatures verified", async () => {
842
- const kv = new MemoryKvStore();
843
- const exporter = new FedifySpanExporter(kv);
844
- const activityJson = JSON.stringify({
845
- "@context": "https://www.w3.org/ns/activitystreams",
846
- type: "Delete",
847
- id: "https://example.com/activities/ld-sig-test",
848
- actor: "https://example.com/users/alice"
849
- });
794
+ const exporter = new FedifySpanExporter(new MemoryKvStore());
850
795
  const span = createMockSpan({
851
796
  traceId: "ld-sig-trace",
852
797
  spanId: "span1",
853
798
  name: "activitypub.inbox",
854
799
  events: [createActivityReceivedEvent({
855
- activityJson,
800
+ activityJson: JSON.stringify({
801
+ "@context": "https://www.w3.org/ns/activitystreams",
802
+ type: "Delete",
803
+ id: "https://example.com/activities/ld-sig-test",
804
+ actor: "https://example.com/users/alice"
805
+ }),
856
806
  verified: true,
857
807
  httpSigVerified: false,
858
808
  ldSigVerified: true
@@ -867,19 +817,17 @@ test("FedifySpanExporter", async (t) => {
867
817
  assertEquals(activities[0].signatureDetails?.ldSignaturesVerified, true);
868
818
  });
869
819
  await t.step("handles activity without actor field", async () => {
870
- const kv = new MemoryKvStore();
871
- const exporter = new FedifySpanExporter(kv);
872
- const activityJson = JSON.stringify({
873
- "@context": "https://www.w3.org/ns/activitystreams",
874
- type: "Delete",
875
- id: "https://example.com/activities/no-actor",
876
- object: "https://example.com/posts/123"
877
- });
820
+ const exporter = new FedifySpanExporter(new MemoryKvStore());
878
821
  const span = createMockSpan({
879
822
  traceId: "no-actor-trace",
880
823
  spanId: "span1",
881
824
  name: "activitypub.inbox",
882
- events: [createActivityReceivedEvent({ activityJson })]
825
+ events: [createActivityReceivedEvent({ activityJson: JSON.stringify({
826
+ "@context": "https://www.w3.org/ns/activitystreams",
827
+ type: "Delete",
828
+ id: "https://example.com/activities/no-actor",
829
+ object: "https://example.com/posts/123"
830
+ }) })]
883
831
  });
884
832
  await new Promise((resolve) => {
885
833
  exporter.export([span], () => resolve());
@@ -889,5 +837,5 @@ test("FedifySpanExporter", async (t) => {
889
837
  assertEquals(activities[0].actorId, void 0);
890
838
  });
891
839
  });
892
-
893
- //#endregion
840
+ //#endregion
841
+ export {};
package/dist/otel/mod.cjs CHANGED
@@ -1,11 +1,9 @@
1
-
2
- const { Temporal } = require("@js-temporal/polyfill");
3
- const { URLPattern } = require("urlpattern-polyfill");
4
-
5
- const require_chunk = require('../chunk-CGaQZ11T.cjs');
6
- const __logtape_logtape = require_chunk.__toESM(require("@logtape/logtape"));
7
- const __opentelemetry_core = require_chunk.__toESM(require("@opentelemetry/core"));
8
-
1
+ const { Temporal } = require("@js-temporal/polyfill");
2
+ const { URLPattern } = require("urlpattern-polyfill");
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
+ require("../chunk-DDcVe30Y.cjs");
5
+ let _logtape_logtape = require("@logtape/logtape");
6
+ let _opentelemetry_core = require("@opentelemetry/core");
9
7
  //#region src/otel/exporter.ts
10
8
  /**
11
9
  * A SpanExporter that persists ActivityPub activity traces to a
@@ -75,13 +73,13 @@ var FedifySpanExporter = class {
75
73
  * @param resultCallback Callback to invoke with the export result.
76
74
  */
77
75
  export(spans, resultCallback) {
78
- this.#exportAsync(spans).then(() => resultCallback({ code: __opentelemetry_core.ExportResultCode.SUCCESS })).catch((error) => {
79
- (0, __logtape_logtape.getLogger)([
76
+ this.#exportAsync(spans).then(() => resultCallback({ code: _opentelemetry_core.ExportResultCode.SUCCESS })).catch((error) => {
77
+ (0, _logtape_logtape.getLogger)([
80
78
  "fedify",
81
79
  "otel",
82
80
  "exporter"
83
81
  ]).error("Failed to export spans to KvStore: {error}", { error });
84
- resultCallback({ code: __opentelemetry_core.ExportResultCode.FAILED });
82
+ resultCallback({ code: _opentelemetry_core.ExportResultCode.FAILED });
85
83
  });
86
84
  }
87
85
  async #exportAsync(spans) {
@@ -90,8 +88,7 @@ var FedifySpanExporter = class {
90
88
  const records = this.#extractRecords(span);
91
89
  for (const record of records) storeOperations.push(this.#storeRecord(record));
92
90
  }
93
- const results = await Promise.allSettled(storeOperations);
94
- const rejected = results.filter((r) => r.status === "rejected");
91
+ const rejected = (await Promise.allSettled(storeOperations)).filter((r) => r.status === "rejected");
95
92
  if (rejected.length > 0) throw new AggregateError(rejected.map((r) => r.reason), "Failed to store one or more trace activity records.");
96
93
  }
97
94
  #extractRecords(span) {
@@ -190,12 +187,11 @@ var FedifySpanExporter = class {
190
187
  }
191
188
  async #setWithCasRetry(key, transform, options) {
192
189
  if (this.#kv.cas != null) for (let attempt = 0; attempt < 3; attempt++) {
193
- const existing$1 = await this.#kv.get(key);
194
- const newValue$1 = transform(existing$1);
195
- if (await this.#kv.cas(key, existing$1, newValue$1, options)) return;
190
+ const existing = await this.#kv.get(key);
191
+ const newValue = transform(existing);
192
+ if (await this.#kv.cas(key, existing, newValue, options)) return;
196
193
  }
197
- const existing = await this.#kv.get(key);
198
- const newValue = transform(existing);
194
+ const newValue = transform(await this.#kv.get(key));
199
195
  await this.#kv.set(key, newValue, options);
200
196
  }
201
197
  async #updateTraceSummary(record, options) {
@@ -251,6 +247,5 @@ var FedifySpanExporter = class {
251
247
  */
252
248
  async shutdown() {}
253
249
  };
254
-
255
250
  //#endregion
256
- exports.FedifySpanExporter = FedifySpanExporter;
251
+ exports.FedifySpanExporter = FedifySpanExporter;
@@ -1,4 +1,4 @@
1
- import { KvKey, KvStore } from "../kv-BL4nlICN.cjs";
1
+ import { n as KvStore, t as KvKey } from "../kv-CbLNp3zQ.cjs";
2
2
  import { ReadableSpan, SpanExporter } from "@opentelemetry/sdk-trace-base";
3
3
  import { ExportResultCode } from "@opentelemetry/core";
4
4
 
@@ -227,4 +227,4 @@ declare class FedifySpanExporter implements SpanExporter {
227
227
  shutdown(): Promise<void>;
228
228
  }
229
229
  //#endregion
230
- export { ActivityDirection, FedifySpanExporter, FedifySpanExporterOptions, GetRecentTracesOptions, SignatureVerificationDetails, TraceActivityRecord, TraceSummary };
230
+ export { type ActivityDirection, FedifySpanExporter, type FedifySpanExporterOptions, type GetRecentTracesOptions, type SignatureVerificationDetails, type TraceActivityRecord, type TraceSummary };
@@ -1,6 +1,6 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import { KvKey, KvStore } from "../kv-DXEUEP6z.js";
3
+ import { n as KvStore, t as KvKey } from "../kv-GFYnFoOl.js";
4
4
  import { ExportResultCode } from "@opentelemetry/core";
5
5
  import { ReadableSpan, SpanExporter } from "@opentelemetry/sdk-trace-base";
6
6
 
@@ -229,4 +229,4 @@ declare class FedifySpanExporter implements SpanExporter {
229
229
  shutdown(): Promise<void>;
230
230
  }
231
231
  //#endregion
232
- export { ActivityDirection, FedifySpanExporter, FedifySpanExporterOptions, GetRecentTracesOptions, SignatureVerificationDetails, TraceActivityRecord, TraceSummary };
232
+ export { type ActivityDirection, FedifySpanExporter, type FedifySpanExporterOptions, type GetRecentTracesOptions, type SignatureVerificationDetails, type TraceActivityRecord, type TraceSummary };