@fedify/fedify 1.9.2 → 1.10.0-dev.11

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 (104) hide show
  1. package/README.md +3 -0
  2. package/dist/{actor-BaXKN5Ej.js → actor-BrjBSlv8.js} +187 -187
  3. package/dist/{actor-Dsgf-C4Y.cjs → actor-CdCyXIiy.cjs} +187 -187
  4. package/dist/{actor-BAstyozC.js → actor-CzhWrNYT.js} +1 -1
  5. package/dist/{authdocloader-BktPIjBD.cjs → authdocloader-BJPbXGjs.cjs} +3 -3
  6. package/dist/{authdocloader-CUm83Hvn.js → authdocloader-DWc5tH1y.js} +3 -3
  7. package/dist/{authdocloader-1dCXK3q3.js → authdocloader-Y9lwp2q3.js} +3 -3
  8. package/dist/{builder-CSrVPCO8.js → builder-D9HmXe-c.js} +4 -4
  9. package/dist/{client-CKpgJtdZ.js → client-DPYh54yM.js} +1 -1
  10. package/dist/compat/transformers.test.js +16 -16
  11. package/dist/{docloader-MEUNyObm.cjs → docloader-Cgy1RCqb.cjs} +38 -9
  12. package/dist/{docloader-KPfUmgAy.js → docloader-Crf5jJS0.js} +38 -9
  13. package/dist/{esm-Bnt_HpYZ.js → esm-D6gwWBFZ.js} +1 -1
  14. package/dist/federation/builder.test.js +5 -5
  15. package/dist/federation/collection.test.js +3 -3
  16. package/dist/federation/handler.test.js +104 -17
  17. package/dist/federation/idempotency.test.js +17 -17
  18. package/dist/federation/inbox.test.js +4 -4
  19. package/dist/federation/keycache.test.js +4 -4
  20. package/dist/federation/kv.test.js +3 -3
  21. package/dist/federation/middleware.test.js +18 -18
  22. package/dist/federation/mod.cjs +10 -10
  23. package/dist/federation/mod.js +10 -10
  24. package/dist/federation/mq.test.js +5 -5
  25. package/dist/federation/retry.test.js +3 -3
  26. package/dist/federation/router.test.js +3 -3
  27. package/dist/federation/send.test.js +53 -10
  28. package/dist/{http-CPr3oiyB.js → http-BqvHtYhP.js} +2 -2
  29. package/dist/{http-CrJR424K.js → http-CSJ1EReB.js} +3 -3
  30. package/dist/{http-DvK0TBir.cjs → http-DBJHuWVd.cjs} +3 -3
  31. package/dist/{inbox-BiSbdaqa.js → inbox-BuzNfn3x.js} +1 -1
  32. package/dist/{key-C64H6CwX.js → key-1YPBM8c7.js} +2 -2
  33. package/dist/{key-Uq7CaTCd.js → key-B5Hkq3o6.js} +4 -4
  34. package/dist/key-BgW3veKX.cjs +10 -0
  35. package/dist/{key-Dcr6_gMa.cjs → key-CHl3R_Y6.cjs} +2 -2
  36. package/dist/{key-B8RAO96y.js → key-CJW3qlT7.js} +3 -3
  37. package/dist/{key-DfKrxpBu.js → key-DZXdhUze.js} +2 -2
  38. package/dist/{keycache-D2aDD7YW.js → keycache-CGSAu6vs.js} +1 -1
  39. package/dist/{keys-DGTaM7oU.js → keys-CfLhGOby.js} +1 -1
  40. package/dist/{ld-BOwiTi7h.js → ld-CmJQd-xc.js} +2 -2
  41. package/dist/{lookup-Dl4-FMDI.js → lookup--mgANXmv.js} +1 -1
  42. package/dist/{lookup-DNtgpqRL.cjs → lookup-BQeZoGI4.cjs} +1 -1
  43. package/dist/{lookup-d9ZMJ3NQ.js → lookup-pw97bxAu.js} +6 -1
  44. package/dist/{middleware-CtGEcAgj.cjs → middleware-Bh5EE6vq.cjs} +24 -12
  45. package/dist/middleware-DATy40bZ.cjs +17 -0
  46. package/dist/{middleware-CZazEQMb.js → middleware-DfeWQSw-.js} +24 -12
  47. package/dist/middleware-V-6KSCRG.js +17 -0
  48. package/dist/{middleware-BVThL1DS.js → middleware-_hA7WuDf.js} +20 -13
  49. package/dist/middleware-qKLKzVpT.js +26 -0
  50. package/dist/mod.cjs +10 -10
  51. package/dist/mod.js +10 -10
  52. package/dist/nodeinfo/client.test.js +5 -5
  53. package/dist/nodeinfo/handler.test.js +16 -16
  54. package/dist/nodeinfo/mod.cjs +2 -2
  55. package/dist/nodeinfo/mod.js +2 -2
  56. package/dist/nodeinfo/semver.test.js +3 -3
  57. package/dist/nodeinfo/types.test.js +3 -3
  58. package/dist/otel-Chy5T2Xh.js +64 -0
  59. package/dist/{owner-DEwshTIE.js → owner-B7WLWS8V.js} +44 -8
  60. package/dist/{proof-BWzYeDim.js → proof-BSHkn7FC.js} +45 -9
  61. package/dist/{proof-CZ7ubW2_.js → proof-BSpRVVLc.js} +2 -2
  62. package/dist/{proof-Dy06xOgR.cjs → proof-Dkb2_kGH.cjs} +44 -8
  63. package/dist/runtime/authdocloader.test.js +9 -9
  64. package/dist/runtime/docloader.test.js +70 -4
  65. package/dist/runtime/key.test.js +5 -5
  66. package/dist/runtime/langstr.test.js +3 -3
  67. package/dist/runtime/link.test.js +3 -3
  68. package/dist/runtime/mod.cjs +6 -6
  69. package/dist/runtime/mod.js +6 -6
  70. package/dist/runtime/multibase/multibase.test.js +3 -3
  71. package/dist/runtime/url.test.js +3 -3
  72. package/dist/{send-DI6p7SEX.js → send-CKzTk_tF.js} +9 -4
  73. package/dist/sig/http.test.js +8 -8
  74. package/dist/sig/key.test.js +6 -6
  75. package/dist/sig/ld.test.js +7 -7
  76. package/dist/sig/mod.cjs +6 -6
  77. package/dist/sig/mod.js +6 -6
  78. package/dist/sig/owner.test.js +31 -7
  79. package/dist/sig/proof.test.js +7 -7
  80. package/dist/testing/docloader.test.js +3 -3
  81. package/dist/testing/mod.js +3 -3
  82. package/dist/{testing-DEaTlPoD.js → testing-DiHxoGZd.js} +2 -2
  83. package/dist/{type-DoTVUIma.js → type-Bjc-_Rom.js} +222 -194
  84. package/dist/{types-D3Kk5T-1.js → types-B5V7vlb3.js} +1 -1
  85. package/dist/{types-cMyEbCut.cjs → types-DWiBkfCv.cjs} +1 -1
  86. package/dist/vocab/actor.test.js +5 -5
  87. package/dist/vocab/lookup.test.js +27 -5
  88. package/dist/vocab/mod.cjs +4 -4
  89. package/dist/vocab/mod.js +4 -4
  90. package/dist/vocab/type.test.js +3 -3
  91. package/dist/vocab/vocab.test.js +4 -4
  92. package/dist/{vocab-CHxzDLCH.cjs → vocab-BdU947qD.cjs} +8 -3
  93. package/dist/{vocab-CtmlT5Ro.js → vocab-ChCCqvR3.js} +8 -3
  94. package/dist/webfinger/handler.test.js +16 -16
  95. package/dist/webfinger/lookup.test.js +4 -4
  96. package/dist/webfinger/mod.cjs +2 -2
  97. package/dist/webfinger/mod.js +2 -2
  98. package/dist/x/cfworkers.test.js +3 -3
  99. package/package.json +5 -3
  100. package/dist/key-P1HTQxeO.cjs +0 -10
  101. package/dist/middleware-B4eH2aYG.cjs +0 -17
  102. package/dist/middleware-B5nymyYY.js +0 -26
  103. package/dist/middleware-BNPES31N.js +0 -17
  104. /package/dist/{denokv-Bv33Xxea.js → denokv-D0nfNQ1x.js} +0 -0
@@ -3,7 +3,7 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { Application, Group, Organization, Person, Service, deno_default, getTypeId, lookupWebFinger } from "./type-DoTVUIma.js";
6
+ import { Application, Group, Organization, Person, Service, deno_default, getTypeId, lookupWebFinger } from "./type-Bjc-_Rom.js";
7
7
  import { SpanStatusCode, trace } from "@opentelemetry/api";
8
8
  import { domainToASCII, domainToUnicode } from "node:url";
9
9
 
@@ -3,9 +3,9 @@
3
3
  const { URLPattern } = require("urlpattern-polyfill");
4
4
 
5
5
  const require_chunk = require('./chunk-DqRYRqnO.cjs');
6
- const require_docloader = require('./docloader-MEUNyObm.cjs');
7
- const require_key = require('./key-Dcr6_gMa.cjs');
8
- const require_http = require('./http-DvK0TBir.cjs');
6
+ const require_docloader = require('./docloader-Cgy1RCqb.cjs');
7
+ const require_key = require('./key-CHl3R_Y6.cjs');
8
+ const require_http = require('./http-DBJHuWVd.cjs');
9
9
  const __logtape_logtape = require_chunk.__toESM(require("@logtape/logtape"));
10
10
 
11
11
  //#region src/runtime/authdocloader.ts
@@ -3,9 +3,9 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { UrlError, createRequest, getRemoteDocument, logRequest, validatePublicUrl } from "./type-DoTVUIma.js";
7
- import { validateCryptoKey } from "./key-DfKrxpBu.js";
8
- import { doubleKnock } from "./http-CPr3oiyB.js";
6
+ import { UrlError, createRequest, getRemoteDocument, logRequest, validatePublicUrl } from "./type-Bjc-_Rom.js";
7
+ import { validateCryptoKey } from "./key-DZXdhUze.js";
8
+ import { doubleKnock } from "./http-BqvHtYhP.js";
9
9
  import { getLogger } from "@logtape/logtape";
10
10
 
11
11
  //#region src/runtime/authdocloader.ts
@@ -2,9 +2,9 @@
2
2
  import { Temporal } from "@js-temporal/polyfill";
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
 
5
- import { UrlError, createRequest, getRemoteDocument, logRequest, validatePublicUrl } from "./docloader-KPfUmgAy.js";
6
- import { validateCryptoKey } from "./key-C64H6CwX.js";
7
- import { doubleKnock } from "./http-CrJR424K.js";
5
+ import { UrlError, createRequest, getRemoteDocument, logRequest, validatePublicUrl } from "./docloader-Crf5jJS0.js";
6
+ import { validateCryptoKey } from "./key-1YPBM8c7.js";
7
+ import { doubleKnock } from "./http-CSJ1EReB.js";
8
8
  import { getLogger } from "@logtape/logtape";
9
9
 
10
10
  //#region src/runtime/authdocloader.ts
@@ -3,9 +3,9 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { deno_default, getTypeId } from "./type-DoTVUIma.js";
7
- import { Router, RouterError } from "./lookup-d9ZMJ3NQ.js";
8
- import { InboxListenerSet } from "./inbox-BiSbdaqa.js";
6
+ import { deno_default, getTypeId } from "./type-Bjc-_Rom.js";
7
+ import { Router, RouterError } from "./lookup-pw97bxAu.js";
8
+ import { InboxListenerSet } from "./inbox-BuzNfn3x.js";
9
9
  import { getLogger } from "@logtape/logtape";
10
10
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
11
11
 
@@ -43,7 +43,7 @@ var FederationBuilderImpl = class {
43
43
  this.collectionTypeIds = {};
44
44
  }
45
45
  async build(options) {
46
- const { FederationImpl } = await import("./middleware-B5nymyYY.js");
46
+ const { FederationImpl } = await import("./middleware-qKLKzVpT.js");
47
47
  const f = new FederationImpl(options);
48
48
  const trailingSlashInsensitiveValue = f.router.trailingSlashInsensitive;
49
49
  f.router = this.router.clone();
@@ -3,7 +3,7 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { getUserAgent } from "./type-DoTVUIma.js";
6
+ import { getUserAgent } from "./type-Bjc-_Rom.js";
7
7
  import { parseSemVer } from "./semver-dArNLkR9.js";
8
8
  import { getLogger } from "@logtape/logtape";
9
9
 
@@ -3,30 +3,30 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { Follow, Person } from "../type-DoTVUIma.js";
6
+ import { Follow, Person } from "../type-Bjc-_Rom.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import { assert } from "../assert-MZs1qjMx.js";
9
9
  import { assertInstanceOf } from "../assert_instance_of-DHz7EHNU.js";
10
10
  import { MemoryKvStore } from "../kv-CRZrzyXm.js";
11
- import { FederationImpl, actorDehydrator, autoIdAssigner } from "../middleware-BVThL1DS.js";
11
+ import { FederationImpl, actorDehydrator, autoIdAssigner } from "../middleware-_hA7WuDf.js";
12
12
  import "../semver-dArNLkR9.js";
13
- import "../client-CKpgJtdZ.js";
14
- import "../lookup-d9ZMJ3NQ.js";
13
+ import "../client-DPYh54yM.js";
14
+ import "../lookup-pw97bxAu.js";
15
15
  import "../types-BIgY6c-l.js";
16
- import "../actor-BAstyozC.js";
17
- import "../key-DfKrxpBu.js";
18
- import "../http-CPr3oiyB.js";
19
- import "../authdocloader-CUm83Hvn.js";
20
- import "../ld-BOwiTi7h.js";
21
- import "../owner-DEwshTIE.js";
22
- import "../proof-CZ7ubW2_.js";
23
- import "../inbox-BiSbdaqa.js";
24
- import "../builder-CSrVPCO8.js";
16
+ import "../actor-CzhWrNYT.js";
17
+ import "../key-DZXdhUze.js";
18
+ import "../http-BqvHtYhP.js";
19
+ import "../authdocloader-DWc5tH1y.js";
20
+ import "../ld-CmJQd-xc.js";
21
+ import "../owner-B7WLWS8V.js";
22
+ import "../proof-BSpRVVLc.js";
23
+ import "../inbox-BuzNfn3x.js";
24
+ import "../builder-D9HmXe-c.js";
25
25
  import "../collection-CSzG2j1P.js";
26
- import "../keycache-D2aDD7YW.js";
26
+ import "../keycache-CGSAu6vs.js";
27
27
  import "../retry-D4GJ670a.js";
28
- import "../send-DI6p7SEX.js";
29
- import { test } from "../testing-DEaTlPoD.js";
28
+ import "../send-CKzTk_tF.js";
29
+ import { test } from "../testing-DiHxoGZd.js";
30
30
 
31
31
  //#region src/compat/transformers.test.ts
32
32
  const federation = new FederationImpl({ kv: new MemoryKvStore() });
@@ -4,13 +4,14 @@
4
4
 
5
5
  const require_chunk = require('./chunk-DqRYRqnO.cjs');
6
6
  const __logtape_logtape = require_chunk.__toESM(require("@logtape/logtape"));
7
+ const __opentelemetry_api = require_chunk.__toESM(require("@opentelemetry/api"));
7
8
  const node_process = require_chunk.__toESM(require("node:process"));
8
9
  const node_dns_promises = require_chunk.__toESM(require("node:dns/promises"));
9
10
  const node_net = require_chunk.__toESM(require("node:net"));
10
11
 
11
12
  //#region deno.json
12
13
  var name = "@fedify/fedify";
13
- var version = "1.9.2";
14
+ var version = "1.10.0-dev.11+d74bbbd7";
14
15
  var license = "MIT";
15
16
  var exports$1 = {
16
17
  ".": "./src/mod.ts",
@@ -32,6 +33,8 @@ var imports = {
32
33
  "@cfworker/json-schema": "npm:@cfworker/json-schema@^4.1.1",
33
34
  "@multiformats/base-x": "npm:@multiformats/base-x@^4.0.1",
34
35
  "@opentelemetry/api": "npm:@opentelemetry/api@^1.9.0",
36
+ "@opentelemetry/core": "npm:@opentelemetry/core@^1.30.1",
37
+ "@opentelemetry/sdk-trace-base": "npm:@opentelemetry/sdk-trace-base@^1.30.1",
35
38
  "@opentelemetry/semantic-conventions": "npm:@opentelemetry/semantic-conventions@^1.27.0",
36
39
  "@phensley/language-tag": "npm:@phensley/language-tag@^1.9.0",
37
40
  "@std/assert": "jsr:@std/assert@^0.226.0",
@@ -43,7 +46,7 @@ var imports = {
43
46
  "fast-check": "npm:fast-check@^3.22.0",
44
47
  "fetch-mock": "npm:fetch-mock@^12.5.2",
45
48
  "json-canon": "npm:json-canon@^1.0.1",
46
- "jsonld": "npm:jsonld@^8.3.2",
49
+ "jsonld": "npm:jsonld@^9.0.0",
47
50
  "multicodec": "npm:multicodec@^3.2.1",
48
51
  "pkijs": "npm:pkijs@^3.2.4",
49
52
  "structured-field-values": "npm:structured-field-values@^2.0.4",
@@ -4689,6 +4692,8 @@ async function getRemoteDocument(url, response, fetch$1) {
4689
4692
  * @since 1.3.0
4690
4693
  */
4691
4694
  function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAgent } = {}) {
4695
+ const tracerProvider = __opentelemetry_api.trace.getTracerProvider();
4696
+ const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
4692
4697
  async function load(url, options) {
4693
4698
  options?.signal?.throwIfAborted();
4694
4699
  if (!skipPreloadedContexts && url in contexts_default) {
@@ -4708,14 +4713,38 @@ function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAge
4708
4713
  });
4709
4714
  throw error;
4710
4715
  }
4711
- const request = createRequest(url, { userAgent });
4712
- logRequest(request);
4713
- const response = await fetch(request, {
4714
- redirect: "manual",
4715
- signal: options?.signal
4716
+ return await tracer.startActiveSpan("activitypub.fetch_document", {
4717
+ kind: __opentelemetry_api.SpanKind.CLIENT,
4718
+ attributes: { "url.full": url }
4719
+ }, async (span) => {
4720
+ try {
4721
+ const request = createRequest(url, { userAgent });
4722
+ logRequest(request);
4723
+ const response = await fetch(request, {
4724
+ redirect: "manual",
4725
+ signal: options?.signal
4726
+ });
4727
+ span.setAttribute("http.response.status_code", response.status);
4728
+ if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
4729
+ const redirectUrl = response.headers.get("Location");
4730
+ span.setAttribute("http.redirect.url", redirectUrl);
4731
+ return await load(redirectUrl, options);
4732
+ }
4733
+ const result = await getRemoteDocument(url, response, load);
4734
+ span.setAttribute("docloader.document_url", result.documentUrl);
4735
+ if (result.contextUrl != null) span.setAttribute("docloader.context_url", result.contextUrl);
4736
+ return result;
4737
+ } catch (error) {
4738
+ span.recordException(error);
4739
+ span.setStatus({
4740
+ code: __opentelemetry_api.SpanStatusCode.ERROR,
4741
+ message: String(error)
4742
+ });
4743
+ throw error;
4744
+ } finally {
4745
+ span.end();
4746
+ }
4716
4747
  });
4717
- if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) return load(response.headers.get("Location"), options);
4718
- return getRemoteDocument(url, response, load);
4719
4748
  }
4720
4749
  return load;
4721
4750
  }
@@ -3,13 +3,14 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
 
5
5
  import { getLogger } from "@logtape/logtape";
6
+ import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
6
7
  import process from "node:process";
7
8
  import { lookup } from "node:dns/promises";
8
9
  import { isIP } from "node:net";
9
10
 
10
11
  //#region deno.json
11
12
  var name = "@fedify/fedify";
12
- var version = "1.9.2";
13
+ var version = "1.10.0-dev.11+d74bbbd7";
13
14
  var license = "MIT";
14
15
  var exports = {
15
16
  ".": "./src/mod.ts",
@@ -31,6 +32,8 @@ var imports = {
31
32
  "@cfworker/json-schema": "npm:@cfworker/json-schema@^4.1.1",
32
33
  "@multiformats/base-x": "npm:@multiformats/base-x@^4.0.1",
33
34
  "@opentelemetry/api": "npm:@opentelemetry/api@^1.9.0",
35
+ "@opentelemetry/core": "npm:@opentelemetry/core@^1.30.1",
36
+ "@opentelemetry/sdk-trace-base": "npm:@opentelemetry/sdk-trace-base@^1.30.1",
34
37
  "@opentelemetry/semantic-conventions": "npm:@opentelemetry/semantic-conventions@^1.27.0",
35
38
  "@phensley/language-tag": "npm:@phensley/language-tag@^1.9.0",
36
39
  "@std/assert": "jsr:@std/assert@^0.226.0",
@@ -42,7 +45,7 @@ var imports = {
42
45
  "fast-check": "npm:fast-check@^3.22.0",
43
46
  "fetch-mock": "npm:fetch-mock@^12.5.2",
44
47
  "json-canon": "npm:json-canon@^1.0.1",
45
- "jsonld": "npm:jsonld@^8.3.2",
48
+ "jsonld": "npm:jsonld@^9.0.0",
46
49
  "multicodec": "npm:multicodec@^3.2.1",
47
50
  "pkijs": "npm:pkijs@^3.2.4",
48
51
  "structured-field-values": "npm:structured-field-values@^2.0.4",
@@ -4688,6 +4691,8 @@ async function getRemoteDocument(url, response, fetch$1) {
4688
4691
  * @since 1.3.0
4689
4692
  */
4690
4693
  function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAgent } = {}) {
4694
+ const tracerProvider = trace.getTracerProvider();
4695
+ const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
4691
4696
  async function load(url, options) {
4692
4697
  options?.signal?.throwIfAborted();
4693
4698
  if (!skipPreloadedContexts && url in contexts_default) {
@@ -4707,14 +4712,38 @@ function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAge
4707
4712
  });
4708
4713
  throw error;
4709
4714
  }
4710
- const request = createRequest(url, { userAgent });
4711
- logRequest(request);
4712
- const response = await fetch(request, {
4713
- redirect: "manual",
4714
- signal: options?.signal
4715
+ return await tracer.startActiveSpan("activitypub.fetch_document", {
4716
+ kind: SpanKind.CLIENT,
4717
+ attributes: { "url.full": url }
4718
+ }, async (span) => {
4719
+ try {
4720
+ const request = createRequest(url, { userAgent });
4721
+ logRequest(request);
4722
+ const response = await fetch(request, {
4723
+ redirect: "manual",
4724
+ signal: options?.signal
4725
+ });
4726
+ span.setAttribute("http.response.status_code", response.status);
4727
+ if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
4728
+ const redirectUrl = response.headers.get("Location");
4729
+ span.setAttribute("http.redirect.url", redirectUrl);
4730
+ return await load(redirectUrl, options);
4731
+ }
4732
+ const result = await getRemoteDocument(url, response, load);
4733
+ span.setAttribute("docloader.document_url", result.documentUrl);
4734
+ if (result.contextUrl != null) span.setAttribute("docloader.context_url", result.contextUrl);
4735
+ return result;
4736
+ } catch (error) {
4737
+ span.recordException(error);
4738
+ span.setStatus({
4739
+ code: SpanStatusCode.ERROR,
4740
+ message: String(error)
4741
+ });
4742
+ throw error;
4743
+ } finally {
4744
+ span.end();
4745
+ }
4715
4746
  });
4716
- if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) return load(response.headers.get("Location"), options);
4717
- return getRemoteDocument(url, response, load);
4718
4747
  }
4719
4748
  return load;
4720
4749
  }
@@ -3,7 +3,7 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { __commonJS, __toESM } from "./type-DoTVUIma.js";
6
+ import { __commonJS, __toESM } from "./type-Bjc-_Rom.js";
7
7
 
8
8
  //#region ../../node_modules/.pnpm/glob-to-regexp@0.4.1/node_modules/glob-to-regexp/index.js
9
9
  var require_glob_to_regexp = __commonJS({ "../../node_modules/.pnpm/glob-to-regexp@0.4.1/node_modules/glob-to-regexp/index.js"(exports, module) {
@@ -3,16 +3,16 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { Activity, Note, Person } from "../type-DoTVUIma.js";
6
+ import { Activity, Note, Person } from "../type-Bjc-_Rom.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import "../assert-MZs1qjMx.js";
9
9
  import "../assert_instance_of-DHz7EHNU.js";
10
10
  import { MemoryKvStore } from "../kv-CRZrzyXm.js";
11
11
  import { parseSemVer } from "../semver-dArNLkR9.js";
12
- import "../lookup-d9ZMJ3NQ.js";
13
- import "../inbox-BiSbdaqa.js";
14
- import { createFederationBuilder } from "../builder-CSrVPCO8.js";
15
- import { test } from "../testing-DEaTlPoD.js";
12
+ import "../lookup-pw97bxAu.js";
13
+ import "../inbox-BuzNfn3x.js";
14
+ import { createFederationBuilder } from "../builder-D9HmXe-c.js";
15
+ import { test } from "../testing-DiHxoGZd.js";
16
16
  import { assertExists } from "../std__assert-X-_kMxKM.js";
17
17
  import "../assert_rejects-DiIiJbZn.js";
18
18
  import "../assert_is_error-BPGph1Jx.js";
@@ -3,13 +3,13 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import "../type-DoTVUIma.js";
6
+ import "../type-Bjc-_Rom.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import "../assert-MZs1qjMx.js";
9
9
  import "../assert_instance_of-DHz7EHNU.js";
10
- import "../lookup-d9ZMJ3NQ.js";
10
+ import "../lookup-pw97bxAu.js";
11
11
  import { buildCollectionSynchronizationHeader, digest } from "../collection-CSzG2j1P.js";
12
- import { test } from "../testing-DEaTlPoD.js";
12
+ import { test } from "../testing-DiHxoGZd.js";
13
13
  import "../std__assert-X-_kMxKM.js";
14
14
  import "../assert_rejects-DiIiJbZn.js";
15
15
  import "../assert_is_error-BPGph1Jx.js";
@@ -3,36 +3,37 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { Create, Note, Person } from "../type-DoTVUIma.js";
6
+ import { Create, Note, Person } from "../type-Bjc-_Rom.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import { assert } from "../assert-MZs1qjMx.js";
9
9
  import "../assert_instance_of-DHz7EHNU.js";
10
10
  import { MemoryKvStore } from "../kv-CRZrzyXm.js";
11
- import { acceptsJsonLd, createFederation, handleActor, handleCollection, handleCustomCollection, handleInbox, handleObject, respondWithObject, respondWithObjectIfAcceptable } from "../middleware-BVThL1DS.js";
11
+ import { acceptsJsonLd, createFederation, handleActor, handleCollection, handleCustomCollection, handleInbox, handleObject, respondWithObject, respondWithObjectIfAcceptable } from "../middleware-_hA7WuDf.js";
12
12
  import "../semver-dArNLkR9.js";
13
- import "../client-CKpgJtdZ.js";
14
- import "../lookup-d9ZMJ3NQ.js";
13
+ import "../client-DPYh54yM.js";
14
+ import "../lookup-pw97bxAu.js";
15
15
  import "../types-BIgY6c-l.js";
16
- import "../actor-BAstyozC.js";
17
- import "../key-DfKrxpBu.js";
18
- import { signRequest } from "../http-CPr3oiyB.js";
19
- import "../authdocloader-CUm83Hvn.js";
20
- import "../ld-BOwiTi7h.js";
21
- import "../owner-DEwshTIE.js";
22
- import "../proof-CZ7ubW2_.js";
23
- import { InboxListenerSet } from "../inbox-BiSbdaqa.js";
24
- import "../builder-CSrVPCO8.js";
16
+ import "../actor-CzhWrNYT.js";
17
+ import "../key-DZXdhUze.js";
18
+ import { signRequest } from "../http-BqvHtYhP.js";
19
+ import "../authdocloader-DWc5tH1y.js";
20
+ import "../ld-CmJQd-xc.js";
21
+ import "../owner-B7WLWS8V.js";
22
+ import "../proof-BSpRVVLc.js";
23
+ import { InboxListenerSet } from "../inbox-BuzNfn3x.js";
24
+ import "../builder-D9HmXe-c.js";
25
25
  import "../collection-CSzG2j1P.js";
26
- import "../keycache-D2aDD7YW.js";
26
+ import "../keycache-CGSAu6vs.js";
27
27
  import "../retry-D4GJ670a.js";
28
- import "../send-DI6p7SEX.js";
29
- import { createInboxContext, createRequestContext, mockDocumentLoader, test } from "../testing-DEaTlPoD.js";
28
+ import "../send-CKzTk_tF.js";
29
+ import { createInboxContext, createRequestContext, mockDocumentLoader, test } from "../testing-DiHxoGZd.js";
30
30
  import "../std__assert-X-_kMxKM.js";
31
31
  import { assertFalse } from "../assert_rejects-DiIiJbZn.js";
32
32
  import "../assert_is_error-BPGph1Jx.js";
33
33
  import "../assert_not_equals-f3m3epl3.js";
34
34
  import "../assert_throws-BOO88avQ.js";
35
- import { rsaPrivateKey3, rsaPublicKey2, rsaPublicKey3 } from "../keys-DGTaM7oU.js";
35
+ import { rsaPrivateKey3, rsaPublicKey2, rsaPublicKey3 } from "../keys-CfLhGOby.js";
36
+ import { createTestTracerProvider } from "../otel-Chy5T2Xh.js";
36
37
 
37
38
  //#region src/federation/handler.test.ts
38
39
  test("acceptsJsonLd()", () => {
@@ -1602,5 +1603,91 @@ test("handleCustomCollection()", async () => {
1602
1603
  assertEquals(onNotAcceptableCalled, null);
1603
1604
  assertEquals(onUnauthorizedCalled, null);
1604
1605
  });
1606
+ test("handleInbox() records OpenTelemetry span events", async () => {
1607
+ const [tracerProvider, exporter] = createTestTracerProvider();
1608
+ const kv = new MemoryKvStore();
1609
+ const federation = createFederation({
1610
+ kv,
1611
+ tracerProvider
1612
+ });
1613
+ const activity = new Create({
1614
+ id: new URL("https://example.com/activity"),
1615
+ actor: new URL("https://example.com/users/someone"),
1616
+ object: new Note({
1617
+ id: new URL("https://example.com/note"),
1618
+ content: "Hello, world!"
1619
+ })
1620
+ });
1621
+ const request = new Request("https://example.com/users/someone/inbox", {
1622
+ method: "POST",
1623
+ headers: { "Content-Type": "application/activity+json" },
1624
+ body: JSON.stringify(await activity.toJsonLd())
1625
+ });
1626
+ const signed = await signRequest(request, rsaPrivateKey3, new URL("https://example.com/users/someone#main-key"));
1627
+ const context = createRequestContext({
1628
+ federation,
1629
+ request: signed,
1630
+ url: new URL(signed.url),
1631
+ data: void 0,
1632
+ documentLoader: mockDocumentLoader,
1633
+ contextLoader: mockDocumentLoader,
1634
+ getActorUri(identifier) {
1635
+ return new URL(`https://example.com/users/${identifier}`);
1636
+ }
1637
+ });
1638
+ const actorDispatcher = (ctx, handle) => {
1639
+ if (handle !== "someone") return null;
1640
+ return new Person({
1641
+ id: ctx.getActorUri(handle),
1642
+ name: "Someone",
1643
+ inbox: new URL("https://example.com/users/someone/inbox"),
1644
+ publicKey: rsaPublicKey2
1645
+ });
1646
+ };
1647
+ const listeners = new InboxListenerSet();
1648
+ let receivedActivity = null;
1649
+ listeners.add(Create, (_ctx, activity$1) => {
1650
+ receivedActivity = activity$1;
1651
+ });
1652
+ const response = await handleInbox(signed, {
1653
+ recipient: "someone",
1654
+ context,
1655
+ inboxContextFactory(_activity) {
1656
+ return createInboxContext({
1657
+ ...context,
1658
+ clone: void 0
1659
+ });
1660
+ },
1661
+ kv,
1662
+ kvPrefixes: {
1663
+ activityIdempotence: ["activityIdempotence"],
1664
+ publicKey: ["publicKey"]
1665
+ },
1666
+ actorDispatcher,
1667
+ inboxListeners: listeners,
1668
+ inboxErrorHandler: void 0,
1669
+ onNotFound: (_request) => new Response("Not found", { status: 404 }),
1670
+ signatureTimeWindow: false,
1671
+ skipSignatureVerification: true,
1672
+ tracerProvider
1673
+ });
1674
+ assertEquals(response.status, 202);
1675
+ assert(receivedActivity != null);
1676
+ const spans = exporter.getSpans("activitypub.inbox");
1677
+ assertEquals(spans.length, 1);
1678
+ const span = spans[0];
1679
+ assertEquals(span.attributes["fedify.inbox.recipient"], "someone");
1680
+ assertEquals(span.attributes["activitypub.activity.id"], "https://example.com/activity");
1681
+ const events = exporter.getEvents("activitypub.inbox", "activitypub.activity.received");
1682
+ assertEquals(events.length, 1);
1683
+ const event = events[0];
1684
+ assert(event.attributes != null);
1685
+ assertEquals(event.attributes["activitypub.activity.verified"], true);
1686
+ assertEquals(event.attributes["http_signatures.verified"], false);
1687
+ assert(typeof event.attributes["activitypub.activity.json"] === "string");
1688
+ const recordedActivity = JSON.parse(event.attributes["activitypub.activity.json"]);
1689
+ assertEquals(recordedActivity.id, "https://example.com/activity");
1690
+ assertEquals(recordedActivity.type, "Create");
1691
+ });
1605
1692
 
1606
1693
  //#endregion
@@ -3,36 +3,36 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { Create, Follow, Person } from "../type-DoTVUIma.js";
6
+ import { Create, Follow, Person } from "../type-Bjc-_Rom.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import "../assert-MZs1qjMx.js";
9
9
  import "../assert_instance_of-DHz7EHNU.js";
10
10
  import { MemoryKvStore } from "../kv-CRZrzyXm.js";
11
- import { createFederation } from "../middleware-BVThL1DS.js";
11
+ import { createFederation } from "../middleware-_hA7WuDf.js";
12
12
  import "../semver-dArNLkR9.js";
13
- import "../client-CKpgJtdZ.js";
14
- import "../lookup-d9ZMJ3NQ.js";
13
+ import "../client-DPYh54yM.js";
14
+ import "../lookup-pw97bxAu.js";
15
15
  import "../types-BIgY6c-l.js";
16
- import "../actor-BAstyozC.js";
17
- import "../key-DfKrxpBu.js";
18
- import "../http-CPr3oiyB.js";
19
- import "../authdocloader-CUm83Hvn.js";
20
- import "../ld-BOwiTi7h.js";
21
- import "../owner-DEwshTIE.js";
22
- import { signObject } from "../proof-CZ7ubW2_.js";
23
- import "../inbox-BiSbdaqa.js";
24
- import "../builder-CSrVPCO8.js";
16
+ import "../actor-CzhWrNYT.js";
17
+ import "../key-DZXdhUze.js";
18
+ import "../http-BqvHtYhP.js";
19
+ import "../authdocloader-DWc5tH1y.js";
20
+ import "../ld-CmJQd-xc.js";
21
+ import "../owner-B7WLWS8V.js";
22
+ import { signObject } from "../proof-BSpRVVLc.js";
23
+ import "../inbox-BuzNfn3x.js";
24
+ import "../builder-D9HmXe-c.js";
25
25
  import "../collection-CSzG2j1P.js";
26
- import "../keycache-D2aDD7YW.js";
26
+ import "../keycache-CGSAu6vs.js";
27
27
  import "../retry-D4GJ670a.js";
28
- import "../send-DI6p7SEX.js";
29
- import { mockDocumentLoader, test } from "../testing-DEaTlPoD.js";
28
+ import "../send-CKzTk_tF.js";
29
+ import { mockDocumentLoader, test } from "../testing-DiHxoGZd.js";
30
30
  import "../std__assert-X-_kMxKM.js";
31
31
  import "../assert_rejects-DiIiJbZn.js";
32
32
  import "../assert_is_error-BPGph1Jx.js";
33
33
  import "../assert_not_equals-f3m3epl3.js";
34
34
  import "../assert_throws-BOO88avQ.js";
35
- import { ed25519Multikey, ed25519PrivateKey, ed25519PublicKey } from "../keys-DGTaM7oU.js";
35
+ import { ed25519Multikey, ed25519PrivateKey, ed25519PublicKey } from "../keys-CfLhGOby.js";
36
36
 
37
37
  //#region src/federation/idempotency.test.ts
38
38
  const kv = new MemoryKvStore();
@@ -3,11 +3,11 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { Activity, Create, Invite, Offer, Update } from "../type-DoTVUIma.js";
6
+ import { Activity, Create, Invite, Offer, Update } from "../type-Bjc-_Rom.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
- import "../lookup-d9ZMJ3NQ.js";
9
- import { InboxListenerSet } from "../inbox-BiSbdaqa.js";
10
- import { test } from "../testing-DEaTlPoD.js";
8
+ import "../lookup-pw97bxAu.js";
9
+ import { InboxListenerSet } from "../inbox-BuzNfn3x.js";
10
+ import { test } from "../testing-DiHxoGZd.js";
11
11
  import "../assert_is_error-BPGph1Jx.js";
12
12
  import { assertThrows } from "../assert_throws-BOO88avQ.js";
13
13
 
@@ -3,14 +3,14 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { CryptographicKey, Multikey } from "../type-DoTVUIma.js";
6
+ import { CryptographicKey, Multikey } from "../type-Bjc-_Rom.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import { assert } from "../assert-MZs1qjMx.js";
9
9
  import { assertInstanceOf } from "../assert_instance_of-DHz7EHNU.js";
10
10
  import { MemoryKvStore } from "../kv-CRZrzyXm.js";
11
- import "../lookup-d9ZMJ3NQ.js";
12
- import { KvKeyCache } from "../keycache-D2aDD7YW.js";
13
- import { test } from "../testing-DEaTlPoD.js";
11
+ import "../lookup-pw97bxAu.js";
12
+ import { KvKeyCache } from "../keycache-CGSAu6vs.js";
13
+ import { test } from "../testing-DiHxoGZd.js";
14
14
 
15
15
  //#region src/federation/keycache.test.ts
16
16
  test("KvKeyCache.set()", async () => {
@@ -3,13 +3,13 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import "../type-DoTVUIma.js";
6
+ import "../type-Bjc-_Rom.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import "../assert-MZs1qjMx.js";
9
9
  import "../assert_instance_of-DHz7EHNU.js";
10
10
  import { MemoryKvStore } from "../kv-CRZrzyXm.js";
11
- import "../lookup-d9ZMJ3NQ.js";
12
- import { test } from "../testing-DEaTlPoD.js";
11
+ import "../lookup-pw97bxAu.js";
12
+ import { test } from "../testing-DiHxoGZd.js";
13
13
  import "../std__assert-X-_kMxKM.js";
14
14
  import "../assert_rejects-DiIiJbZn.js";
15
15
  import "../assert_is_error-BPGph1Jx.js";