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

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 (193) hide show
  1. package/dist/{actor-DuCeRiNh.js → actor-BLq4KEGR.js} +1 -1
  2. package/dist/{actor-Be0ThtXy.cjs → actor-C3oFUgfc.cjs} +921 -1451
  3. package/dist/{actor-T6RyhRgk.d.ts → actor-DqFajh9s.d.ts} +2 -2
  4. package/dist/{actor-ChbPLm6n.js → actor-btAA7QSA.js} +189 -677
  5. package/dist/{actor-D6K058Tb.d.cts → actor-f2NtjyCg.d.cts} +2 -2
  6. package/dist/{assert_rejects-DiIiJbZn.js → assert_rejects-Ce45JcFg.js} +1 -1
  7. package/dist/{assert_is_error-BPGph1Jx.js → assert_throws-BNXdRGWP.js} +31 -1
  8. package/dist/{builder-CYOcDUkj.js → builder-C4gbKvM5.js} +7 -8
  9. package/dist/{client-CegPX0Rn.d.cts → client-94iWEfQa.d.cts} +1 -1
  10. package/dist/{client-bgSdkFa2.d.ts → client-BsGzbnV-.d.ts} +1 -1
  11. package/dist/{client-CnOdwLLN.js → client-pY7-3icS.js} +1 -1
  12. package/dist/compat/mod.d.cts +11 -12
  13. package/dist/compat/mod.d.ts +11 -12
  14. package/dist/compat/transformers.test.js +20 -20
  15. package/dist/{context-C5BsZkDr.d.cts → context-BvYz3eOb.d.cts} +130 -103
  16. package/dist/{context-ByZprN0S.d.ts → context-myrGWbL_.d.ts} +130 -103
  17. package/dist/{authdocloader-Brax1A32.js → docloader-DtYIz2Pb.js} +17 -8
  18. package/dist/{esm-DnIzfEj0.js → esm-CQ9nlHuI.js} +11 -11
  19. package/dist/federation/builder.test.js +8 -10
  20. package/dist/federation/collection.test.js +7 -9
  21. package/dist/federation/handler.test.js +25 -26
  22. package/dist/federation/idempotency.test.js +25 -26
  23. package/dist/federation/inbox.test.js +4 -6
  24. package/dist/federation/keycache.test.js +3 -4
  25. package/dist/federation/kv.test.js +6 -8
  26. package/dist/federation/middleware.test.js +32 -33
  27. package/dist/federation/mod.cjs +9 -11
  28. package/dist/federation/mod.d.cts +12 -13
  29. package/dist/federation/mod.d.ts +12 -13
  30. package/dist/federation/mod.js +9 -11
  31. package/dist/federation/mq.test.js +8 -10
  32. package/dist/federation/negotiation.test.js +7 -9
  33. package/dist/federation/retry.test.js +4 -5
  34. package/dist/federation/router.test.js +6 -8
  35. package/dist/federation/send.test.js +13 -15
  36. package/dist/{http-BNOYnVsU.js → http-B9npZ3Md.js} +2 -2
  37. package/dist/{http-D6Uj2x2y.d.ts → http-BbO0ejuk.d.ts} +2 -2
  38. package/dist/{http-BxbM8sEy.js → http-D7qwMpca.js} +256 -6
  39. package/dist/{http-D-e6AFwR.d.cts → http-M8k5mKc0.d.cts} +2 -2
  40. package/dist/{http-C7vbQwbz.cjs → http-ngJvMHez.cjs} +289 -9
  41. package/dist/{inbox-BRru9pX3.js → inbox-CY8fblhz.js} +1 -1
  42. package/dist/{key-1KXru8Ug.js → key-CgKiloJr.js} +3 -2
  43. package/dist/{keycache-CN61iGVj.js → keycache-B6O-bhMs.js} +1 -1
  44. package/dist/{keys-BPdFKgiy.js → keys-B3O7b5eB.js} +2 -1
  45. package/dist/kv-cache-BrjWZnGU.cjs +133 -0
  46. package/dist/kv-cache-DkW_lqUw.js +121 -0
  47. package/dist/kv-cache-z0lgwFi_.js +93 -0
  48. package/dist/{ld-Dv8DNNAT.js → ld-B7TO6JH2.js} +3 -2
  49. package/dist/lookup-Cc3ZAAis.cjs +273 -0
  50. package/dist/{type-C69ZBu7f.js → lookup-NXjB7xUj.js} +503 -5327
  51. package/dist/lookup-fEH6e7ZX.js +261 -0
  52. package/dist/{middleware-DY9B2lL8.js → middleware-BMPvaTpX.js} +44 -48
  53. package/dist/{middleware-BmoOlgc1.cjs → middleware-C8w5YYxK.cjs} +60 -66
  54. package/dist/middleware-D8ENcqxG.js +26 -0
  55. package/dist/{middleware-Bz_A2jeJ.js → middleware-D_VyRsDx.js} +40 -46
  56. package/dist/middleware-Yk-MuxWc.js +15 -0
  57. package/dist/middleware-glwCut0b.cjs +15 -0
  58. package/dist/{mod-BhUKmBJD.d.ts → mod-B2iOw50L.d.ts} +3 -3
  59. package/dist/mod-BYynOiJG.d.ts +109 -0
  60. package/dist/{mod-DlU8ISoa.d.ts → mod-BlVovdcy.d.ts} +2 -2
  61. package/dist/{mod-CxkWO3Mg.d.cts → mod-BxRCHTz-.d.cts} +2 -2
  62. package/dist/{mod-jQ4OODsl.d.cts → mod-C58MZ7Wx.d.cts} +1 -1
  63. package/dist/{mod-8DMWKtQE.d.cts → mod-DbFNTF7m.d.cts} +2 -2
  64. package/dist/{mod-Djzcw2ry.d.cts → mod-DgdBYYa0.d.cts} +3 -3
  65. package/dist/{mod-DBzN0aCM.d.ts → mod-Ds0mpFZU.d.ts} +1 -1
  66. package/dist/mod-VastcQsk.d.cts +107 -0
  67. package/dist/{mod-D6hQoxC5.d.ts → mod-k0Dk3fGk.d.ts} +2 -2
  68. package/dist/mod.cjs +19 -32
  69. package/dist/mod.d.cts +15 -16
  70. package/dist/mod.d.ts +16 -17
  71. package/dist/mod.js +14 -16
  72. package/dist/nodeinfo/client.test.js +8 -10
  73. package/dist/nodeinfo/handler.test.js +24 -25
  74. package/dist/nodeinfo/mod.cjs +2 -3
  75. package/dist/nodeinfo/mod.d.cts +2 -4
  76. package/dist/nodeinfo/mod.d.ts +2 -4
  77. package/dist/nodeinfo/mod.js +2 -3
  78. package/dist/nodeinfo/types.test.js +7 -9
  79. package/dist/{owner-BN_tO3cY.d.cts → owner-B4HbyP8s.d.cts} +3 -3
  80. package/dist/{owner-e3FYDhsk.js → owner-CSktF-2s.js} +3 -2
  81. package/dist/{owner-hd9lvQcP.d.ts → owner-kQRGVXG1.d.ts} +3 -3
  82. package/dist/{proof-DfgvA3al.js → proof-BT65yR1Q.js} +5 -4
  83. package/dist/{proof-6gFMwMNJ.js → proof-Cs5Mcy_U.js} +2 -2
  84. package/dist/{proof-B-eqv0Ug.cjs → proof-feEDocLH.cjs} +17 -16
  85. package/dist/{send-Tl9NOnmO.js → send-vPZ03xUr.js} +2 -2
  86. package/dist/sig/http.test.js +12 -13
  87. package/dist/sig/key.test.js +9 -11
  88. package/dist/sig/ld.test.js +8 -10
  89. package/dist/sig/mod.cjs +9 -11
  90. package/dist/sig/mod.d.cts +5 -7
  91. package/dist/sig/mod.d.ts +5 -7
  92. package/dist/sig/mod.js +5 -7
  93. package/dist/sig/owner.test.js +10 -12
  94. package/dist/sig/proof.test.js +13 -14
  95. package/dist/testing/docloader.test.js +6 -8
  96. package/dist/testing/mod.d.ts +120 -172
  97. package/dist/testing/mod.js +2 -3
  98. package/dist/{testing-BWNCAbL-.js → testing-u2cUPQLp.js} +1 -2
  99. package/dist/{types-DqxyTxOf.js → types-BtUjyi5y.js} +1 -1
  100. package/dist/{types-zqdWZh4O.cjs → types-CWgzGaqk.cjs} +3 -3
  101. package/dist/{runtime/authdocloader.test.js → utils/docloader.test.js} +14 -15
  102. package/dist/utils/kv-cache.test.js +209 -0
  103. package/dist/utils/mod.cjs +12 -0
  104. package/dist/utils/mod.d.cts +5 -0
  105. package/dist/utils/mod.d.ts +7 -0
  106. package/dist/utils/mod.js +11 -0
  107. package/dist/vocab/actor.test.js +8 -10
  108. package/dist/vocab/lookup.test.js +7 -9
  109. package/dist/vocab/mod.cjs +3 -4
  110. package/dist/vocab/mod.d.cts +3 -5
  111. package/dist/vocab/mod.d.ts +3 -5
  112. package/dist/vocab/mod.js +3 -4
  113. package/dist/vocab/type.test.js +2 -3
  114. package/dist/vocab/vocab.test.js +9 -10
  115. package/dist/{vocab-BI0Ak5lL.d.ts → vocab-BCWe1Ih5.d.ts} +2 -21
  116. package/dist/{vocab-Dw1-yVGg.d.cts → vocab-CeDBzu-f.d.cts} +2 -21
  117. package/dist/{vocab-B39-pFl9.cjs → vocab-NvDV-exu.cjs} +5 -5
  118. package/dist/{vocab-BWoeZsME.js → vocab-wADjlIH4.js} +3 -3
  119. package/dist/webfinger/handler.test.js +24 -25
  120. package/dist/webfinger/lookup.test.js +7 -9
  121. package/dist/webfinger/mod.cjs +2 -3
  122. package/dist/webfinger/mod.d.cts +1 -3
  123. package/dist/webfinger/mod.d.ts +1 -3
  124. package/dist/webfinger/mod.js +2 -3
  125. package/dist/x/cfworkers.d.cts +2 -2
  126. package/dist/x/cfworkers.d.ts +2 -2
  127. package/dist/x/cfworkers.test.js +6 -8
  128. package/dist/x/hono.d.cts +10 -11
  129. package/dist/x/hono.d.ts +10 -11
  130. package/dist/x/sveltekit.d.cts +10 -11
  131. package/dist/x/sveltekit.d.ts +10 -11
  132. package/package.json +15 -14
  133. package/dist/assert_throws-BOO88avQ.js +0 -39
  134. package/dist/authdocloader-CrxhFL8e.js +0 -52
  135. package/dist/authdocloader-OSn_teLV.cjs +0 -58
  136. package/dist/docloader-CCqXeagZ.cjs +0 -4861
  137. package/dist/docloader-CxWcuWqQ.d.ts +0 -221
  138. package/dist/docloader-D-MrRyHl.d.cts +0 -219
  139. package/dist/docloader-XK3y2jn5.js +0 -4795
  140. package/dist/key-B3uag-rz.js +0 -10
  141. package/dist/key-BiBmb1Yy.cjs +0 -10
  142. package/dist/key-DK_nfU4I.js +0 -10
  143. package/dist/key-Z6ceKnZC.cjs +0 -290
  144. package/dist/key-jyNTxCvK.js +0 -260
  145. package/dist/lookup-BPviO8ij.js +0 -131
  146. package/dist/lookup-hnMAAU5r.cjs +0 -137
  147. package/dist/lookup-pV0JOsuV.js +0 -331
  148. package/dist/middleware-CI0-zw4U.js +0 -26
  149. package/dist/middleware-QNK-W-jE.cjs +0 -17
  150. package/dist/middleware-_vjt6FWU.js +0 -17
  151. package/dist/mod-CerN_Sza.d.ts +0 -104
  152. package/dist/mod-Cj1tHXBR.d.cts +0 -102
  153. package/dist/runtime/docloader.test.js +0 -522
  154. package/dist/runtime/key.test.d.ts +0 -3
  155. package/dist/runtime/key.test.js +0 -103
  156. package/dist/runtime/langstr.test.d.ts +0 -3
  157. package/dist/runtime/langstr.test.js +0 -39
  158. package/dist/runtime/link.test.d.ts +0 -3
  159. package/dist/runtime/link.test.js +0 -61
  160. package/dist/runtime/mod.cjs +0 -25
  161. package/dist/runtime/mod.d.cts +0 -6
  162. package/dist/runtime/mod.d.ts +0 -8
  163. package/dist/runtime/mod.js +0 -13
  164. package/dist/runtime/multibase/multibase.test.d.ts +0 -3
  165. package/dist/runtime/multibase/multibase.test.js +0 -358
  166. package/dist/runtime/url.test.d.ts +0 -3
  167. package/dist/runtime/url.test.js +0 -45
  168. /package/dist/{assert_not_equals-f3m3epl3.js → assert_not_equals-C80BG-_5.js} +0 -0
  169. /package/dist/{collection-CcnIw1qY.js → collection-BzWsN9pB.js} +0 -0
  170. /package/dist/{denokv-Bv33Xxea.js → denokv-CCssOzMJ.js} +0 -0
  171. /package/dist/{federation-H2_En3j5.cjs → federation-CRpdnOMS.cjs} +0 -0
  172. /package/dist/{federation-D1U8YY9t.js → federation-jcR8-ZxP.js} +0 -0
  173. /package/dist/{kv-C7sopW2E.d.ts → kv-BKNZ-Tb-.d.ts} +0 -0
  174. /package/dist/{kv-63Cil1MD.d.cts → kv-Bxr0Q87_.d.cts} +0 -0
  175. /package/dist/{mod-FZd39qVq.d.cts → mod-B-hUPT2N.d.cts} +0 -0
  176. /package/dist/{mod-1pDWKvUL.d.ts → mod-CVgZgliM.d.ts} +0 -0
  177. /package/dist/{mod-g0xFzAP9.d.ts → mod-xIj-IT58.d.ts} +0 -0
  178. /package/dist/{mq-CRGm1e_F.d.ts → mq-CUKlBw08.d.ts} +0 -0
  179. /package/dist/{mq-B7R1Q-M5.d.cts → mq-DcJPkXD5.d.cts} +0 -0
  180. /package/dist/{negotiation-5NPJL6zp.js → negotiation-C4nFufNk.js} +0 -0
  181. /package/dist/{nodeinfo-DfycQ8Wf.js → nodeinfo-BnthBobC.js} +0 -0
  182. /package/dist/{nodeinfo-Co9lJrWl.cjs → nodeinfo-CdN0rEnZ.cjs} +0 -0
  183. /package/dist/{retry-D4GJ670a.js → retry-CfF8Gn4d.js} +0 -0
  184. /package/dist/{runtime-DPYEDf-o.js → sig-C34-oHBl.js} +0 -0
  185. /package/dist/{runtime-C58AJWSv.cjs → sig-YYj5tCnr.cjs} +0 -0
  186. /package/dist/{std__assert-X-_kMxKM.js → std__assert-DWivtrGR.js} +0 -0
  187. /package/dist/{types-BSuWJsOm.js → types-C2XVl6gj.js} +0 -0
  188. /package/dist/{runtime → utils}/docloader.test.d.ts +0 -0
  189. /package/dist/{runtime/authdocloader.test.d.ts → utils/kv-cache.test.d.ts} +0 -0
  190. /package/dist/{sig-Cj3tk-ig.js → utils-D-Va7aXC.js} +0 -0
  191. /package/dist/{sig-ByHXzqUi.cjs → utils-DyRU1gdZ.cjs} +0 -0
  192. /package/dist/{webfinger-De_bU0iE.js → webfinger-C72Y8lrh.js} +0 -0
  193. /package/dist/{webfinger-BjOEdFPs.cjs → webfinger-vAtLmxOF.cjs} +0 -0
@@ -0,0 +1,261 @@
1
+
2
+ import { Temporal } from "@js-temporal/polyfill";
3
+ import { URLPattern } from "urlpattern-polyfill";
4
+
5
+ import { getLogger } from "@logtape/logtape";
6
+ import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
7
+ import { UrlError, getUserAgent, validatePublicUrl } from "@fedify/vocab-runtime";
8
+
9
+ //#region deno.json
10
+ var name = "@fedify/fedify";
11
+ var version = "2.0.0-dev.1736+ea8e853e";
12
+ var license = "MIT";
13
+ var exports = {
14
+ ".": "./src/mod.ts",
15
+ "./compat": "./src/compat/mod.ts",
16
+ "./federation": "./src/federation/mod.ts",
17
+ "./nodeinfo": "./src/nodeinfo/mod.ts",
18
+ "./sig": "./src/sig/mod.ts",
19
+ "./testing": "./src/testing/mod.ts",
20
+ "./vocab": "./src/vocab/mod.ts",
21
+ "./utils": "./src/utils/mod.ts",
22
+ "./webfinger": "./src/webfinger/mod.ts",
23
+ "./x/cfworkers": "./src/x/cfworkers.ts",
24
+ "./x/denokv": "./src/x/denokv.ts",
25
+ "./x/fresh": "./src/x/fresh.ts",
26
+ "./x/hono": "./src/x/hono.ts",
27
+ "./x/sveltekit": "./src/x/sveltekit.ts"
28
+ };
29
+ var imports = {
30
+ "@cfworker/json-schema": "npm:@cfworker/json-schema@^4.1.1",
31
+ "@multiformats/base-x": "npm:@multiformats/base-x@^4.0.1",
32
+ "@opentelemetry/api": "npm:@opentelemetry/api@^1.9.0",
33
+ "@opentelemetry/semantic-conventions": "npm:@opentelemetry/semantic-conventions@^1.27.0",
34
+ "@std/assert": "jsr:@std/assert@^0.226.0",
35
+ "@std/testing": "jsr:@std/testing@^0.224.0",
36
+ "@std/url": "jsr:@std/url@^0.225.1",
37
+ "asn1js": "npm:asn1js@^3.0.5",
38
+ "byte-encodings": "npm:byte-encodings@^1.0.11",
39
+ "es-toolkit": "jsr:@es-toolkit/es-toolkit@^1.39.5",
40
+ "fast-check": "npm:fast-check@^3.22.0",
41
+ "fetch-mock": "npm:fetch-mock@^12.5.2",
42
+ "json-canon": "npm:json-canon@^1.0.1",
43
+ "jsonld": "npm:jsonld@^8.3.2",
44
+ "multicodec": "npm:multicodec@^3.2.1",
45
+ "pkijs": "npm:pkijs@^3.2.4",
46
+ "structured-field-values": "npm:structured-field-values@^2.0.4",
47
+ "uri-template-router": "npm:uri-template-router@^0.0.17",
48
+ "url-template": "npm:url-template@^3.1.1"
49
+ };
50
+ var include = ["src/vocab/vocab.ts"];
51
+ var exclude = [
52
+ ".test-report.xml",
53
+ "apidoc/",
54
+ "dist/",
55
+ "node_modules/",
56
+ "npm/",
57
+ "pnpm-lock.yaml",
58
+ "src/cfworkers/dist/",
59
+ "src/cfworkers/fixtures/",
60
+ "src/cfworkers/imports.ts",
61
+ "src/cfworkers/README.md",
62
+ "src/cfworkers/server.ts",
63
+ "src/cfworkers/server.js",
64
+ "src/cfworkers/server.js.map",
65
+ "src/codegen/schema.yaml",
66
+ "src/vocab/*.yaml",
67
+ "!src/vocab/vocab.ts"
68
+ ];
69
+ var tasks = {
70
+ "codegen": "GENPATH=vocab-$(deno eval \"console.log(crypto.randomUUID());\").ts && deno run --allow-read --allow-write --check src/codegen/main.ts src/vocab/ src/vocab/$GENPATH && deno fmt src/vocab/$GENPATH && mv src/vocab/$GENPATH src/vocab/vocab.ts && deno cache src/vocab/vocab.ts && deno check src/vocab/vocab.ts",
71
+ "cache": {
72
+ "command": "deno cache src/mod.ts",
73
+ "dependencies": ["codegen"]
74
+ },
75
+ "check": {
76
+ "command": "deno fmt --check && deno lint && deno check src/**/*.ts",
77
+ "dependencies": ["codegen"]
78
+ },
79
+ "test": {
80
+ "command": "deno test --check --doc --allow-read --allow-write --allow-env --unstable-kv --trace-leaks --parallel",
81
+ "dependencies": ["codegen"]
82
+ },
83
+ "coverage": "deno task test --clean --coverage && deno coverage --html coverage",
84
+ "bench": {
85
+ "command": "deno bench --allow-read --allow-write --allow-net --allow-env --allow-run --unstable-kv",
86
+ "dependencies": ["codegen"]
87
+ },
88
+ "apidoc": {
89
+ "command": "deno doc --html --name=Fedify --output=apidoc/ src/mod.ts",
90
+ "dependencies": ["codegen"]
91
+ },
92
+ "publish": {
93
+ "command": "deno publish",
94
+ "dependencies": ["codegen"]
95
+ },
96
+ "pnpm:install": "pnpm install --silent",
97
+ "pnpm:build": {
98
+ "command": "pnpm exec tsdown",
99
+ "dependencies": [
100
+ "codegen",
101
+ "pnpm:install",
102
+ "pnpm:build-vocab"
103
+ ]
104
+ },
105
+ "pnpm:build-vocab-runtime": { "command": "cd ../vocab-runtime && pnpm build" },
106
+ "pnpm:build-vocab": { "dependencies": ["pnpm:build-vocab-runtime"] },
107
+ "test:node": {
108
+ "command": "cd dist/ && node --test",
109
+ "dependencies": ["pnpm:build"]
110
+ },
111
+ "test:bun": {
112
+ "command": "cd dist/ && bun test --timeout 60000",
113
+ "dependencies": ["pnpm:build-vocab", "pnpm:build"]
114
+ },
115
+ "test:cfworkers": {
116
+ "command": "pnpm exec wrangler deploy --dry-run --outdir src/cfworkers && node --import=tsx src/cfworkers/client.ts",
117
+ "dependencies": ["pnpm:build-vocab", "pnpm:build"]
118
+ },
119
+ "test-all": { "dependencies": [
120
+ "check",
121
+ "test",
122
+ "test:node",
123
+ "test:bun",
124
+ "test:cfworkers"
125
+ ] }
126
+ };
127
+ var deno_default = {
128
+ name,
129
+ version,
130
+ license,
131
+ exports,
132
+ imports,
133
+ include,
134
+ exclude,
135
+ tasks
136
+ };
137
+
138
+ //#endregion
139
+ //#region src/webfinger/lookup.ts
140
+ const logger = getLogger([
141
+ "fedify",
142
+ "webfinger",
143
+ "lookup"
144
+ ]);
145
+ const DEFAULT_MAX_REDIRECTION = 5;
146
+ /**
147
+ * Looks up a WebFinger resource.
148
+ * @param resource The resource URL to look up.
149
+ * @param options Extra options for looking up the resource.
150
+ * @returns The resource descriptor, or `null` if not found.
151
+ * @since 0.2.0
152
+ */
153
+ async function lookupWebFinger(resource, options = {}) {
154
+ const tracerProvider = options.tracerProvider ?? trace.getTracerProvider();
155
+ const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
156
+ return await tracer.startActiveSpan("webfinger.lookup", {
157
+ kind: SpanKind.CLIENT,
158
+ attributes: {
159
+ "webfinger.resource": resource.toString(),
160
+ "webfinger.resource.scheme": typeof resource === "string" ? resource.replace(/:.*$/, "") : resource.protocol.replace(/:$/, "")
161
+ }
162
+ }, async (span) => {
163
+ try {
164
+ const result = await lookupWebFingerInternal(resource, options);
165
+ span.setStatus({ code: result === null ? SpanStatusCode.ERROR : SpanStatusCode.OK });
166
+ return result;
167
+ } catch (error) {
168
+ span.setStatus({
169
+ code: SpanStatusCode.ERROR,
170
+ message: String(error)
171
+ });
172
+ throw error;
173
+ } finally {
174
+ span.end();
175
+ }
176
+ });
177
+ }
178
+ async function lookupWebFingerInternal(resource, options = {}) {
179
+ if (typeof resource === "string") resource = new URL(resource);
180
+ let protocol = "https:";
181
+ let server;
182
+ if (resource.protocol === "acct:") {
183
+ const atPos = resource.pathname.lastIndexOf("@");
184
+ if (atPos < 0) return null;
185
+ server = resource.pathname.substring(atPos + 1);
186
+ if (server === "") return null;
187
+ } else {
188
+ protocol = resource.protocol;
189
+ server = resource.host;
190
+ }
191
+ let url = new URL(`${protocol}//${server}/.well-known/webfinger`);
192
+ url.searchParams.set("resource", resource.href);
193
+ let redirected = 0;
194
+ while (true) {
195
+ logger.debug("Fetching WebFinger resource descriptor from {url}...", { url: url.href });
196
+ let response;
197
+ if (options.allowPrivateAddress !== true) try {
198
+ await validatePublicUrl(url.href);
199
+ } catch (e) {
200
+ if (e instanceof UrlError) {
201
+ logger.error("Invalid URL for WebFinger resource descriptor: {error}", { error: e });
202
+ return null;
203
+ }
204
+ throw e;
205
+ }
206
+ try {
207
+ response = await fetch(url, {
208
+ headers: {
209
+ Accept: "application/jrd+json",
210
+ "User-Agent": typeof options.userAgent === "string" ? options.userAgent : getUserAgent(options.userAgent)
211
+ },
212
+ redirect: "manual",
213
+ signal: options.signal
214
+ });
215
+ } catch (error) {
216
+ logger.debug("Failed to fetch WebFinger resource descriptor: {error}", {
217
+ url: url.href,
218
+ error
219
+ });
220
+ return null;
221
+ }
222
+ if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
223
+ redirected++;
224
+ const maxRedirection = options.maxRedirection ?? DEFAULT_MAX_REDIRECTION;
225
+ if (redirected >= maxRedirection) {
226
+ logger.error("Too many redirections ({redirections}) while fetching WebFinger resource descriptor.", { redirections: redirected });
227
+ return null;
228
+ }
229
+ const redirectedUrl = new URL(response.headers.get("Location"), response.url == null || response.url === "" ? url : response.url);
230
+ if (redirectedUrl.protocol !== url.protocol) {
231
+ logger.error("Redirected to a different protocol ({protocol} to {redirectedProtocol}) while fetching WebFinger resource descriptor.", {
232
+ protocol: url.protocol,
233
+ redirectedProtocol: redirectedUrl.protocol
234
+ });
235
+ return null;
236
+ }
237
+ url = redirectedUrl;
238
+ continue;
239
+ }
240
+ if (!response.ok) {
241
+ logger.debug("Failed to fetch WebFinger resource descriptor: {status} {statusText}.", {
242
+ url: url.href,
243
+ status: response.status,
244
+ statusText: response.statusText
245
+ });
246
+ return null;
247
+ }
248
+ try {
249
+ return await response.json();
250
+ } catch (e) {
251
+ if (e instanceof SyntaxError) {
252
+ logger.debug("Failed to parse WebFinger resource descriptor as JSON: {error}", { error: e });
253
+ return null;
254
+ }
255
+ throw e;
256
+ }
257
+ }
258
+ }
259
+
260
+ //#endregion
261
+ export { deno_default, lookupWebFinger };
@@ -3,23 +3,24 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage, deno_default, getDocumentLoader, getTypeId, kvCache, lookupWebFinger } from "./type-C69ZBu7f.js";
7
- import { getNodeInfo } from "./client-CnOdwLLN.js";
8
- import { RouterError, lookupObject, traverseCollection } from "./lookup-pV0JOsuV.js";
9
- import { nodeInfoToJson } from "./types-BSuWJsOm.js";
10
- import { exportJwk, importJwk, validateCryptoKey } from "./key-1KXru8Ug.js";
11
- import { verifyRequest } from "./http-BNOYnVsU.js";
12
- import { getAuthenticatedDocumentLoader } from "./authdocloader-Brax1A32.js";
13
- import { detachSignature, hasSignature, signJsonLd, verifyJsonLd } from "./ld-Dv8DNNAT.js";
14
- import { doesActorOwnKey, getKeyOwner } from "./owner-e3FYDhsk.js";
15
- import { signObject, verifyObject } from "./proof-6gFMwMNJ.js";
16
- import { routeActivity } from "./inbox-BRru9pX3.js";
17
- import { FederationBuilderImpl } from "./builder-CYOcDUkj.js";
18
- import { buildCollectionSynchronizationHeader } from "./collection-CcnIw1qY.js";
19
- import { KvKeyCache } from "./keycache-CN61iGVj.js";
20
- import { acceptsJsonLd } from "./negotiation-5NPJL6zp.js";
21
- import { createExponentialBackoffPolicy } from "./retry-D4GJ670a.js";
22
- import { extractInboxes, sendActivity } from "./send-Tl9NOnmO.js";
6
+ import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage, RouterError, deno_default, getTypeId, lookupObject, lookupWebFinger, traverseCollection } from "./lookup-NXjB7xUj.js";
7
+ import { getNodeInfo } from "./client-pY7-3icS.js";
8
+ import { nodeInfoToJson } from "./types-C2XVl6gj.js";
9
+ import { exportJwk, importJwk, validateCryptoKey } from "./key-CgKiloJr.js";
10
+ import { verifyRequest } from "./http-B9npZ3Md.js";
11
+ import { detachSignature, hasSignature, signJsonLd, verifyJsonLd } from "./ld-B7TO6JH2.js";
12
+ import { doesActorOwnKey, getKeyOwner } from "./owner-CSktF-2s.js";
13
+ import { signObject, verifyObject } from "./proof-Cs5Mcy_U.js";
14
+ import { getAuthenticatedDocumentLoader } from "./docloader-DtYIz2Pb.js";
15
+ import { kvCache } from "./kv-cache-z0lgwFi_.js";
16
+ import { routeActivity } from "./inbox-CY8fblhz.js";
17
+ import { FederationBuilderImpl } from "./builder-C4gbKvM5.js";
18
+ import { buildCollectionSynchronizationHeader } from "./collection-BzWsN9pB.js";
19
+ import { KvKeyCache } from "./keycache-B6O-bhMs.js";
20
+ import { acceptsJsonLd } from "./negotiation-C4nFufNk.js";
21
+ import { createExponentialBackoffPolicy } from "./retry-CfF8Gn4d.js";
22
+ import { extractInboxes, sendActivity } from "./send-vPZ03xUr.js";
23
+ import { getDocumentLoader } from "@fedify/vocab-runtime";
23
24
  import { getLogger, withContext } from "@logtape/logtape";
24
25
  import { SpanKind, SpanStatusCode, context, propagation, trace } from "@opentelemetry/api";
25
26
  import { ATTR_HTTP_REQUEST_HEADER, ATTR_HTTP_REQUEST_METHOD, ATTR_HTTP_RESPONSE_HEADER, ATTR_HTTP_RESPONSE_STATUS_CODE, ATTR_URL_FULL } from "@opentelemetry/semantic-conventions";
@@ -838,7 +839,7 @@ async function handleInboxInternal(request, parameters, span) {
838
839
  /**
839
840
  * Handles a custom collection request.
840
841
  * @template TItem The type of items in the collection.
841
- * @template TParams The parameter names of the requested URL.
842
+ * @template TParam The parameter names of the requested URL.
842
843
  * @template TContext The type of the context, extending {@link RequestContext}.
843
844
  * @template TContextData The context data to pass to the `TContext`.
844
845
  * @param request The HTTP request.
@@ -856,7 +857,7 @@ async function _handleCustomCollection(request, { name, values, context: context
856
857
  /**
857
858
  * Handles an ordered collection request.
858
859
  * @template TItem The type of items in the collection.
859
- * @template TParams The parameter names of the requested URL.
860
+ * @template TParam The parameter names of the requested URL.
860
861
  * @template TContext The type of the context, extending {@link RequestContext}.
861
862
  * @template TContextData The context data to pass to the `TContext`.
862
863
  * @param request The HTTP request.
@@ -876,7 +877,7 @@ async function _handleOrderedCollection(request, { name, values, context: contex
876
877
  * The main flow is on `getCollection`, `dispatch`.
877
878
  *
878
879
  * @template TItem The type of items in the collection.
879
- * @template TParams The parameter names of the requested URL.
880
+ * @template TParam The parameter names of the requested URL.
880
881
  * @template TContext The type of the context. {@link Context} or {@link RequestContext}.
881
882
  * @template TContextData The context data to pass to the `TContext`.
882
883
  * @template TCollection The type of the collection, extending {@link Collection}.
@@ -910,14 +911,14 @@ var CustomCollectionHandler = class {
910
911
  #collection = null;
911
912
  /**
912
913
  * Creates a new CustomCollection instance.
913
- * @param {string} name The name of the collection.
914
- * @param {TParams} values The parameter values for the collection.
915
- * @param {TContext} context The request context.
916
- * @param {CustomCollectionCallbacks} callbacks The collection callbacks.
917
- * @param {TracerProvider} tracerProvider The tracer provider for telemetry.
918
- * @param {ConstructorWithTypeId<TCollection>} Collection The Collection constructor.
919
- * @param {ConstructorWithTypeId<TCollectionPage>} CollectionPage The CollectionPage constructor.
920
- * @param {(item: TItem) => boolean} filterPredicate Optional filter predicate for items.
914
+ * @param name The name of the collection.
915
+ * @param values The parameter values for the collection.
916
+ * @param context The request context.
917
+ * @param callbacks The collection callbacks.
918
+ * @param tracerProvider The tracer provider for telemetry.
919
+ * @param Collection The Collection constructor.
920
+ * @param CollectionPage The CollectionPage constructor.
921
+ * @param filterPredicate Optional filter predicate for items.
921
922
  */
922
923
  constructor(name, values, context$1, callbacks, tracerProvider = trace.getTracerProvider(), Collection$1, CollectionPage$1, filterPredicate) {
923
924
  this.name = name;
@@ -1042,7 +1043,7 @@ var CustomCollectionHandler = class {
1042
1043
  /**
1043
1044
  * Creates a function to wrap the dispatcher so tracing can be applied.
1044
1045
  * @param params Parameters including cursor and total items.
1045
- * @returns {(span: Span) => Promise<PageItems<TItem>>} A function that handles the span operation.
1046
+ * @returns A function that handles the span operation.
1046
1047
  */
1047
1048
  spanPages = ({ totalItems = null, cursor = null }) => async (span) => {
1048
1049
  try {
@@ -1063,23 +1064,23 @@ var CustomCollectionHandler = class {
1063
1064
  };
1064
1065
  /**
1065
1066
  * Dispatches the collection request to get items.
1066
- * @param {string | null} cursor The cursor for pagination, or null for the first page.
1067
- * @returns {Promise<PageItems<TItem>>} A promise that resolves to the page items.
1067
+ * @param cursor The cursor for pagination, or null for the first page.
1068
+ * @returns A promise that resolves to the page items.
1068
1069
  */
1069
1070
  async dispatch(cursor = null) {
1070
1071
  return await this.#dispatcher(this.context, this.values, cursor) ?? new ItemsNotFoundError().throw();
1071
1072
  }
1072
1073
  /**
1073
1074
  * Filters the items in the collection.
1074
- * @param {TItem[]} items The items to filter.
1075
- * @returns {(Object | Link | URL)[]} The filtered items.
1075
+ * @param items The items to filter.
1076
+ * @returns The filtered items.
1076
1077
  */
1077
1078
  filterItems(items) {
1078
1079
  return filterCollectionItems(items, this.name, this.filterPredicate);
1079
1080
  }
1080
1081
  /**
1081
1082
  * Appends a cursor to the URL if it exists.
1082
- * @param {string | null | undefined} cursor The cursor to append, or null/undefined.
1083
+ * @param cursor The cursor to append, or null/undefined.
1083
1084
  * @returns The URL with cursor appended, or null if cursor is null/undefined.
1084
1085
  */
1085
1086
  appendToUrl(cursor) {
@@ -1087,8 +1088,7 @@ var CustomCollectionHandler = class {
1087
1088
  }
1088
1089
  /**
1089
1090
  * Gets the stored collection or collection page.
1090
- * @returns {Promise<TCollection | TCollectionPage>} A promise that resolves to
1091
- the collection or collection page.
1091
+ * @returns A promise that resolves to the collection or collection page.
1092
1092
  */
1093
1093
  get collection() {
1094
1094
  if (this.#collection === null) this.#collection = this.getCollection();
@@ -1096,8 +1096,8 @@ var CustomCollectionHandler = class {
1096
1096
  }
1097
1097
  /**
1098
1098
  * Gets the total number of items in the collection.
1099
- * @returns {Promise<number | null>} A promise that
1100
- resolves to the total items count, or null if not available.
1099
+ * @returns A promise that resolves to the total items count,
1100
+ * or null if not available.
1101
1101
  */
1102
1102
  get totalItems() {
1103
1103
  if (this.#totalItems === void 0) this.totalItems = this.callbacks.counter?.(this.context, this.values);
@@ -1113,8 +1113,8 @@ var CustomCollectionHandler = class {
1113
1113
  }
1114
1114
  /**
1115
1115
  * Gets the first cursor for pagination.
1116
- * @returns {Promise<string | null>} A promise that resolves to the first cursor,
1117
- or null if not available.
1116
+ * @returns A promise that resolves to the first cursor,
1117
+ * or null if not available.
1118
1118
  */
1119
1119
  get firstCursor() {
1120
1120
  const cursor = this.callbacks.firstCursor?.(this.context, this.values);
@@ -1319,7 +1319,6 @@ var FederationImpl = class extends FederationBuilderImpl {
1319
1319
  firstKnock;
1320
1320
  constructor(options) {
1321
1321
  super();
1322
- const logger$2 = getLogger(["fedify", "federation"]);
1323
1322
  this.kv = options.kv;
1324
1323
  this.kvPrefixes = {
1325
1324
  activityIdempotence: ["_fedify", "activityIdempotence"],
@@ -1367,8 +1366,9 @@ var FederationImpl = class extends FederationBuilderImpl {
1367
1366
  this.router.trailingSlashInsensitive = options.trailingSlashInsensitive ?? false;
1368
1367
  this._initializeRouter();
1369
1368
  if (options.allowPrivateAddress || options.userAgent != null) {
1370
- if (options.contextLoader != null) throw new TypeError("Cannot set contextLoader with allowPrivateAddress or userAgent options.");
1371
- else if (options.authenticatedDocumentLoaderFactory != null) throw new TypeError("Cannot set authenticatedDocumentLoaderFactory with allowPrivateAddress or userAgent options.");
1369
+ if (options.documentLoaderFactory != null) throw new TypeError("Cannot set documentLoaderFactory with allowPrivateAddress or userAgent options.");
1370
+ if (options.contextLoaderFactory != null) throw new TypeError("Cannot set contextLoaderFactory with allowPrivateAddress or userAgent options.");
1371
+ if (options.authenticatedDocumentLoaderFactory != null) throw new TypeError("Cannot set authenticatedDocumentLoaderFactory with allowPrivateAddress or userAgent options.");
1372
1372
  }
1373
1373
  const { allowPrivateAddress, userAgent } = options;
1374
1374
  this.allowPrivateAddress = allowPrivateAddress ?? false;
@@ -1382,11 +1382,7 @@ var FederationImpl = class extends FederationBuilderImpl {
1382
1382
  prefix: this.kvPrefixes.remoteDocument
1383
1383
  });
1384
1384
  });
1385
- if (options.contextLoader != null) {
1386
- if (options.contextLoaderFactory != null) throw new TypeError("Cannot set both contextLoader and contextLoaderFactory options at a time; use contextLoaderFactory only.");
1387
- this.contextLoaderFactory = () => options.contextLoader;
1388
- logger$2.warn("The contextLoader option is deprecated; use contextLoaderFactory option instead.");
1389
- } else this.contextLoaderFactory = options.contextLoaderFactory ?? this.documentLoaderFactory;
1385
+ this.contextLoaderFactory = options.contextLoaderFactory ?? this.documentLoaderFactory;
1390
1386
  this.authenticatedDocumentLoaderFactory = options.authenticatedDocumentLoaderFactory ?? ((identity) => getAuthenticatedDocumentLoader(identity, {
1391
1387
  allowPrivateAddress,
1392
1388
  userAgent,