@fedify/fedify 2.1.0 → 2.1.2

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 (207) hide show
  1. package/dist/{accept-D7sAxyNa.js → accept-Dd__NiUL.mjs} +10 -8
  2. package/dist/{assert-MZs1qjMx.js → assert-ddO5KLpe.mjs} +5 -9
  3. package/dist/{assert_equals-DSbWqCm3.js → assert_equals-Ew3jOFa3.mjs} +55 -69
  4. package/dist/{assert_instance_of-DHz7EHNU.js → assert_instance_of-C4Ri6VuN.mjs} +5 -9
  5. package/dist/{assert_not_equals-f3m3epl3.js → assert_not_equals--wG9hV7u.mjs} +6 -13
  6. package/dist/{assert_rejects-0h7I2Esa.js → assert_rejects-B-qJtC9Z.mjs} +6 -11
  7. package/dist/{assert_throws-rjdMBf31.js → assert_throws-4NwKEy2q.mjs} +5 -10
  8. package/dist/{builder-WiHhZvjW.js → builder-DkJDAzes.mjs} +32 -41
  9. package/dist/{chunk-CGaQZ11T.cjs → chunk-DDcVe30Y.cjs} +23 -24
  10. package/dist/{chunk-DJNbSFdH.js → chunk-nlSIicah.js} +8 -8
  11. package/dist/{client-BxMZiQaD.d.ts → client-AtlibPOU.d.ts} +1 -1
  12. package/dist/{client-CoCIaTNO.js → client-DEpOVgY1.mjs} +9 -13
  13. package/dist/{client-C97KOq3x.d.cts → client-z-8dc-e1.d.cts} +1 -1
  14. package/dist/{collection-CSzG2j1P.js → collection-BD6-SZ6O.mjs} +7 -12
  15. package/dist/compat/mod.cjs +5 -8
  16. package/dist/compat/mod.d.cts +78 -6
  17. package/dist/compat/mod.d.ts +78 -6
  18. package/dist/compat/mod.js +4 -8
  19. package/dist/compat/transformers.test.mjs +62 -0
  20. package/dist/{context-DyJjQQ_H.d.ts → context-BOiMZBu5.d.ts} +9 -18
  21. package/dist/{context-BcqA-0BL.d.cts → context-BhZVy7RB.d.cts} +9 -18
  22. package/dist/{context-Aqenou7c.js → context-Juj6bdHC.mjs} +7 -11
  23. package/dist/deno-C5VMwnFV.mjs +8 -0
  24. package/dist/{docloader-bVO2EvL9.js → docloader-X9mcJ9Tz.mjs} +8 -14
  25. package/dist/{esm-nLm00z9V.js → esm-DVILvP5e.mjs} +50 -89
  26. package/dist/federation/builder.test.d.mts +2 -0
  27. package/dist/federation/{builder.test.js → builder.test.mjs} +21 -44
  28. package/dist/federation/collection.test.d.mts +2 -0
  29. package/dist/federation/collection.test.mjs +21 -0
  30. package/dist/federation/handler.test.d.mts +2 -0
  31. package/dist/federation/{handler.test.js → handler.test.mjs} +69 -131
  32. package/dist/federation/idempotency.test.d.mts +2 -0
  33. package/dist/federation/{idempotency.test.js → idempotency.test.mjs} +31 -63
  34. package/dist/federation/inbox.test.d.mts +2 -0
  35. package/dist/federation/{inbox.test.js → inbox.test.mjs} +8 -12
  36. package/dist/federation/keycache.test.d.mts +2 -0
  37. package/dist/federation/{keycache.test.js → keycache.test.mjs} +13 -19
  38. package/dist/federation/kv.test.d.mts +2 -0
  39. package/dist/federation/{kv.test.js → kv.test.mjs} +11 -22
  40. package/dist/federation/middleware.test.d.mts +2 -0
  41. package/dist/federation/{middleware.test.js → middleware.test.mjs} +173 -262
  42. package/dist/federation/mod.cjs +327 -16
  43. package/dist/federation/mod.d.cts +3 -6
  44. package/dist/federation/mod.d.ts +3 -6
  45. package/dist/federation/mod.js +322 -13
  46. package/dist/federation/mq.test.d.mts +2 -0
  47. package/dist/federation/{mq.test.js → mq.test.mjs} +21 -35
  48. package/dist/federation/negotiation.test.d.mts +2 -0
  49. package/dist/federation/{negotiation.test.js → negotiation.test.mjs} +9 -16
  50. package/dist/federation/retry.test.d.mts +2 -0
  51. package/dist/federation/{retry.test.js → retry.test.mjs} +8 -11
  52. package/dist/federation/router.test.d.mts +2 -0
  53. package/dist/federation/{router.test.js → router.test.mjs} +11 -16
  54. package/dist/federation/send.test.d.mts +2 -0
  55. package/dist/federation/{send.test.js → send.test.mjs} +22 -30
  56. package/dist/federation/webfinger.test.d.mts +2 -0
  57. package/dist/federation/{webfinger.test.js → webfinger.test.mjs} +22 -56
  58. package/dist/{http-DhH623ma.js → http-BLZWcpzg.js} +67 -187
  59. package/dist/{http-CKDim8Tw.js → http-BTLPIzFa.mjs} +37 -45
  60. package/dist/{http-BudnHZE2.d.cts → http-CrGuipxe.d.cts} +1 -6
  61. package/dist/{http-gvnJbMS1.cjs → http-CxodXLwi.cjs} +186 -300
  62. package/dist/{http-Dax_FIBo.d.ts → http-aQzN9Ayi.d.ts} +1 -6
  63. package/dist/{inbox-CA9AUEGa.js → inbox-mcbmhjTW.mjs} +18 -26
  64. package/dist/{key-BsSCz8Z_.js → key-1MaItIGc.mjs} +29 -37
  65. package/dist/{keycache-CpGWAUbj.js → keycache-CCSwkQcY.mjs} +5 -10
  66. package/dist/{keys-BFve7QQv.js → keys-BAK-tUlf.mjs} +5 -9
  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-Bw2F2ABq.js → kv-cache-B01V7s3h.mjs} +4 -8
  70. package/dist/{kv-cache-DK4GFVWx.cjs → kv-cache-DjC82_4n.cjs} +27 -34
  71. package/dist/{kv-cache-CxoHCR44.js → kv-cache-GIDK1oLs.js} +6 -13
  72. package/dist/{kv-QzKcOQgP.js → kv-tL2TOE9X.mjs} +6 -10
  73. package/dist/{ld-Bo_Rx0Fc.js → ld-94uHZ1eO.mjs} +17 -31
  74. package/dist/{middleware-BkrUA3da.js → middleware-B5Er10wE.js} +336 -383
  75. package/dist/middleware-CDuHbSVE.mjs +5 -0
  76. package/dist/middleware-CTyq5KB0.cjs +4 -0
  77. package/dist/{middleware-CpAnWzjC.cjs → middleware-CqDJSLoG.cjs} +532 -587
  78. package/dist/{middleware-CZ8jOOa3.js → middleware-DMZGXHm3.mjs} +282 -317
  79. package/dist/{mod-Bx9jcLB8.d.cts → mod-B505FZBC.d.cts} +3 -3
  80. package/dist/{mod-em2Il1eD.d.cts → mod-Bp_CzKd4.d.cts} +2 -2
  81. package/dist/{mod-Cs2dYEwI.d.ts → mod-D7PAuO6k.d.ts} +3 -3
  82. package/dist/{mod-D6MdymW7.d.ts → mod-DKOAow7a.d.ts} +2 -2
  83. package/dist/{mod-Coe7KEgX.d.cts → mod-DoJBjjnO.d.cts} +2 -2
  84. package/dist/{mod-D6dOd--H.d.ts → mod-DvxszxXC.d.ts} +2 -2
  85. package/dist/mod.cjs +29 -74
  86. package/dist/mod.d.cts +11 -14
  87. package/dist/mod.d.ts +11 -15
  88. package/dist/mod.js +17 -71
  89. package/dist/{negotiation-BlAuS_nr.js → negotiation-DnsfFF8I.mjs} +7 -11
  90. package/dist/nodeinfo/client.test.d.mts +2 -0
  91. package/dist/nodeinfo/{client.test.js → client.test.mjs} +22 -40
  92. package/dist/nodeinfo/handler.test.d.mts +2 -0
  93. package/dist/nodeinfo/{handler.test.js → handler.test.mjs} +13 -43
  94. package/dist/nodeinfo/mod.cjs +5 -8
  95. package/dist/nodeinfo/mod.d.cts +2 -3
  96. package/dist/nodeinfo/mod.d.ts +2 -3
  97. package/dist/nodeinfo/mod.js +4 -8
  98. package/dist/nodeinfo/types.test.d.mts +2 -0
  99. package/dist/nodeinfo/{types.test.js → types.test.mjs} +9 -16
  100. package/dist/otel/exporter.test.d.mts +2 -0
  101. package/dist/otel/{exporter.test.js → exporter.test.mjs} +124 -178
  102. package/dist/otel/mod.cjs +15 -20
  103. package/dist/otel/mod.d.cts +2 -2
  104. package/dist/otel/mod.d.ts +2 -2
  105. package/dist/otel/mod.js +8 -14
  106. package/dist/{owner-gd0Q9FuU.d.ts → owner-74ARJ5TL.d.ts} +1 -1
  107. package/dist/{owner-Bj_IbwIT.js → owner-B4aIDhg_.mjs} +11 -16
  108. package/dist/{owner-1AbPBOOZ.d.cts → owner-CptqhsOy.d.cts} +1 -1
  109. package/dist/{proof-u6Y358J-.js → proof-DYZWMWOC.mjs} +21 -33
  110. package/dist/{proof-BhFF_JVj.cjs → proof-DqCjiFwb.cjs} +133 -157
  111. package/dist/{proof-D5BQTIcU.js → proof-j-of9m5W.js} +33 -59
  112. package/dist/{retry-mqLf4b-R.js → retry-B_E3V_Dx.mjs} +4 -7
  113. package/dist/{router-D9eI0s4b.js → router-CrMLXoOr.mjs} +4 -8
  114. package/dist/runtime/mod.cjs +11 -13
  115. package/dist/runtime/mod.d.cts +6 -2
  116. package/dist/runtime/mod.d.ts +0 -1
  117. package/dist/runtime/mod.js +4 -7
  118. package/dist/{send-CE8h59oe.js → send-uLjD0uAe.mjs} +8 -13
  119. package/dist/sig/accept.test.d.mts +2 -0
  120. package/dist/sig/{accept.test.js → accept.test.mjs} +35 -70
  121. package/dist/sig/http.test.d.mts +2 -0
  122. package/dist/sig/{http.test.js → http.test.mjs} +209 -280
  123. package/dist/sig/key.test.d.mts +2 -0
  124. package/dist/sig/{key.test.js → key.test.mjs} +11 -18
  125. package/dist/sig/ld.test.d.mts +2 -0
  126. package/dist/sig/{ld.test.js → ld.test.mjs} +22 -35
  127. package/dist/sig/mod.cjs +6 -9
  128. package/dist/sig/mod.d.cts +3 -3
  129. package/dist/sig/mod.d.ts +3 -3
  130. package/dist/sig/mod.js +5 -9
  131. package/dist/sig/owner.test.d.mts +2 -0
  132. package/dist/sig/{owner.test.js → owner.test.mjs} +19 -34
  133. package/dist/sig/proof.test.d.mts +2 -0
  134. package/dist/sig/{proof.test.js → proof.test.mjs} +16 -27
  135. package/dist/{std__assert-X-_kMxKM.js → std__assert-Duiq_YC9.mjs} +12 -24
  136. package/dist/testing/{mod.d.ts → mod.d.mts} +26 -90
  137. package/dist/testing/mod.mjs +6 -0
  138. package/dist/{transformers-3g8GZwkZ.cjs → transformers-NeAONrAq.cjs} +20 -25
  139. package/dist/{transformers-C3FLHUd6.js → transformers-ve6e2xcg.js} +3 -7
  140. package/dist/{types-CPz01LGH.js → types-DCP0WLdt.mjs} +4 -7
  141. package/dist/{types-Cd_hszr_.cjs → types-KC4QAoxe.cjs} +29 -34
  142. package/dist/{types-C93Ob9cU.js → types-hvL8ElAs.js} +8 -13
  143. package/dist/utils/docloader.test.d.mts +2 -0
  144. package/dist/utils/{docloader.test.js → docloader.test.mjs} +14 -25
  145. package/dist/utils/kv-cache.test.d.mts +2 -0
  146. package/dist/utils/{kv-cache.test.js → kv-cache.test.mjs} +25 -40
  147. package/dist/utils/mod.cjs +5 -9
  148. package/dist/utils/mod.d.cts +1 -3
  149. package/dist/utils/mod.d.ts +1 -3
  150. package/dist/utils/mod.js +4 -9
  151. package/dist/vocab/cjs.test.d.mts +2 -0
  152. package/dist/vocab/cjs.test.mjs +14 -0
  153. package/dist/vocab/mod.cjs +10 -12
  154. package/dist/vocab/mod.js +3 -5
  155. package/package.json +7 -7
  156. package/dist/compat/transformers.test.d.ts +0 -3
  157. package/dist/compat/transformers.test.js +0 -88
  158. package/dist/compat-Bb4NuTUO.js +0 -4
  159. package/dist/compat-DmDDELst.cjs +0 -4
  160. package/dist/deno-BRMCYThi.js +0 -121
  161. package/dist/federation/builder.test.d.ts +0 -3
  162. package/dist/federation/collection.test.d.ts +0 -3
  163. package/dist/federation/collection.test.js +0 -32
  164. package/dist/federation/handler.test.d.ts +0 -3
  165. package/dist/federation/idempotency.test.d.ts +0 -3
  166. package/dist/federation/inbox.test.d.ts +0 -3
  167. package/dist/federation/keycache.test.d.ts +0 -3
  168. package/dist/federation/kv.test.d.ts +0 -3
  169. package/dist/federation/middleware.test.d.ts +0 -3
  170. package/dist/federation/mq.test.d.ts +0 -3
  171. package/dist/federation/negotiation.test.d.ts +0 -3
  172. package/dist/federation/retry.test.d.ts +0 -3
  173. package/dist/federation/router.test.d.ts +0 -3
  174. package/dist/federation/send.test.d.ts +0 -3
  175. package/dist/federation/webfinger.test.d.ts +0 -3
  176. package/dist/federation-Bp3HI26G.cjs +0 -350
  177. package/dist/federation-DaMfqRm4.js +0 -332
  178. package/dist/middleware-BtT_mKsB.cjs +0 -12
  179. package/dist/middleware-CUMoHNCA.js +0 -12
  180. package/dist/middleware-CzeVJTA1.js +0 -27
  181. package/dist/mod-B7QkWzrL.d.cts +0 -80
  182. package/dist/mod-Bh8mqlYw.d.cts +0 -9
  183. package/dist/mod-D6HodEq7.d.ts +0 -7
  184. package/dist/mod-SMHOMNpZ.d.ts +0 -82
  185. package/dist/mod-gq_Xfdz8.d.cts +0 -1
  186. package/dist/nodeinfo/client.test.d.ts +0 -3
  187. package/dist/nodeinfo/handler.test.d.ts +0 -3
  188. package/dist/nodeinfo/types.test.d.ts +0 -3
  189. package/dist/nodeinfo-DoESQxq5.js +0 -4
  190. package/dist/nodeinfo-DuMYTpbZ.cjs +0 -4
  191. package/dist/otel/exporter.test.d.ts +0 -3
  192. package/dist/runtime-c2Njxsry.cjs +0 -17
  193. package/dist/runtime-poamPCMb.js +0 -13
  194. package/dist/sig/accept.test.d.ts +0 -3
  195. package/dist/sig/http.test.d.ts +0 -3
  196. package/dist/sig/key.test.d.ts +0 -3
  197. package/dist/sig/ld.test.d.ts +0 -3
  198. package/dist/sig/owner.test.d.ts +0 -3
  199. package/dist/sig/proof.test.d.ts +0 -3
  200. package/dist/sig-BNhspNOf.js +0 -4
  201. package/dist/sig-vX39WyWI.cjs +0 -4
  202. package/dist/testing/mod.js +0 -10
  203. package/dist/utils/docloader.test.d.ts +0 -3
  204. package/dist/utils/kv-cache.test.d.ts +0 -3
  205. package/dist/utils-BQ9KqEK9.cjs +0 -4
  206. package/dist/utils-Dn5OPdSW.js +0 -4
  207. /package/dist/{mod-AGjRfPjT.d.ts → compat/transformers.test.d.mts} +0 -0
@@ -1,134 +1,26 @@
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 __fedify_vocab = require_chunk.__toESM(require("@fedify/vocab"));
8
- const __opentelemetry_api = require_chunk.__toESM(require("@opentelemetry/api"));
9
- const byte_encodings_hex = require_chunk.__toESM(require("byte-encodings/hex"));
10
- const structured_field_values = require_chunk.__toESM(require("structured-field-values"));
11
- const __opentelemetry_semantic_conventions = require_chunk.__toESM(require("@opentelemetry/semantic-conventions"));
12
- const byte_encodings_base64 = require_chunk.__toESM(require("byte-encodings/base64"));
13
- const __fedify_vocab_runtime = require_chunk.__toESM(require("@fedify/vocab-runtime"));
14
-
1
+ const { Temporal } = require("@js-temporal/polyfill");
2
+ const { URLPattern } = require("urlpattern-polyfill");
3
+ require("./chunk-DDcVe30Y.cjs");
4
+ let _logtape_logtape = require("@logtape/logtape");
5
+ let _fedify_vocab = require("@fedify/vocab");
6
+ let _opentelemetry_api = require("@opentelemetry/api");
7
+ let byte_encodings_hex = require("byte-encodings/hex");
8
+ let structured_field_values = require("structured-field-values");
9
+ let _fedify_vocab_runtime = require("@fedify/vocab-runtime");
10
+ let _opentelemetry_semantic_conventions = require("@opentelemetry/semantic-conventions");
11
+ let byte_encodings_base64 = require("byte-encodings/base64");
15
12
  //#region deno.json
16
13
  var name = "@fedify/fedify";
17
- var version = "2.1.0";
18
- var license = "MIT";
19
- var exports$1 = {
20
- ".": "./src/mod.ts",
21
- "./compat": "./src/compat/mod.ts",
22
- "./federation": "./src/federation/mod.ts",
23
- "./nodeinfo": "./src/nodeinfo/mod.ts",
24
- "./otel": "./src/otel/mod.ts",
25
- "./runtime": "./src/runtime/mod.ts",
26
- "./sig": "./src/sig/mod.ts",
27
- "./utils": "./src/utils/mod.ts",
28
- "./vocab": "./src/vocab/mod.ts"
29
- };
30
- var imports = {
31
- "@multiformats/base-x": "npm:@multiformats/base-x@^4.0.1",
32
- "@std/assert": "jsr:@std/assert@^0.226.0",
33
- "@std/url": "jsr:@std/url@^0.225.1",
34
- "asn1js": "npm:asn1js@^3.0.7",
35
- "fast-check": "npm:fast-check@^3.22.0",
36
- "fetch-mock": "npm:fetch-mock@^12.5.2",
37
- "json-canon": "npm:json-canon@^1.0.1",
38
- "jsonld": "npm:jsonld@^9.0.0",
39
- "pkijs": "npm:pkijs@^3.3.3",
40
- "structured-field-values": "npm:structured-field-values@^2.0.4",
41
- "uri-template-router": "npm:uri-template-router@^1.0.0",
42
- "url-template": "npm:url-template@^3.1.1"
43
- };
44
- var exclude = [
45
- ".test-report.xml",
46
- "apidoc/",
47
- "dist/",
48
- "node_modules/",
49
- "npm/",
50
- "pnpm-lock.yaml",
51
- "src/cfworkers/dist/",
52
- "src/cfworkers/fixtures/",
53
- "src/cfworkers/imports.ts",
54
- "src/cfworkers/README.md",
55
- "src/cfworkers/server.ts",
56
- "src/cfworkers/server.js",
57
- "src/cfworkers/server.js.map"
58
- ];
59
- var publish = { "exclude": [
60
- "**/*.test.ts",
61
- "src/testing/",
62
- "tsdown.config.ts",
63
- "scripts/",
64
- "wrangler.toml"
65
- ] };
66
- var tasks = {
67
- "codegen": "deno task -f @fedify/vocab compile",
68
- "cache": {
69
- "command": "deno cache src/mod.ts",
70
- "dependencies": ["codegen"]
71
- },
72
- "check": {
73
- "command": "deno fmt --check && deno lint && deno check src/**/*.ts",
74
- "dependencies": ["codegen"]
75
- },
76
- "test": {
77
- "command": "deno test --check --doc --allow-read --allow-write --allow-env --unstable-kv --trace-leaks --parallel",
78
- "dependencies": ["codegen"]
79
- },
80
- "coverage": "deno task test --clean --coverage && deno coverage --html coverage",
81
- "bench": {
82
- "command": "deno bench --allow-read --allow-write --allow-net --allow-env --allow-run --unstable-kv",
83
- "dependencies": ["codegen"]
84
- },
85
- "apidoc": {
86
- "command": "deno doc --html --name=Fedify --output=apidoc/ src/mod.ts",
87
- "dependencies": ["codegen"]
88
- },
89
- "publish": {
90
- "command": "deno publish",
91
- "dependencies": ["codegen"]
92
- },
93
- "pnpm:install": "pnpm install --silent",
94
- "pnpm:build": {
95
- "command": "pnpm exec tsdown",
96
- "dependencies": ["pnpm:build-vocab"]
97
- },
98
- "test:node": {
99
- "command": "cd dist/ && node --test",
100
- "dependencies": ["pnpm:build"]
101
- },
102
- "test:bun": {
103
- "command": "cd dist/ && bun test --timeout 60000",
104
- "dependencies": ["pnpm:build"]
105
- },
106
- "test:cfworkers": {
107
- "command": "pnpm exec wrangler deploy --dry-run --outdir src/cfworkers && node --import=tsx src/cfworkers/client.ts",
108
- "dependencies": ["pnpm:build"]
109
- },
110
- "test-all": { "dependencies": [
111
- "check",
112
- "test",
113
- "test:node",
114
- "test:bun",
115
- "test:cfworkers"
116
- ] }
117
- };
118
- var deno_default = {
119
- name,
120
- version,
121
- license,
122
- exports: exports$1,
123
- imports,
124
- exclude,
125
- publish,
126
- tasks
127
- };
128
-
14
+ var version = "2.1.2";
129
15
  //#endregion
130
16
  //#region src/sig/accept.ts
131
17
  /**
18
+ * `Accept-Signature` header parsing, serialization, and validation utilities
19
+ * for RFC 9421 §5 challenge-response negotiation.
20
+ *
21
+ * @module
22
+ */
23
+ /**
132
24
  * Parses an `Accept-Signature` header value (RFC 9421 §5.1) into an
133
25
  * array of {@link AcceptSignatureMember} objects.
134
26
  *
@@ -147,7 +39,7 @@ function parseAcceptSignature(header) {
147
39
  try {
148
40
  return parseEachSignature((0, structured_field_values.decodeDict)(header));
149
41
  } catch {
150
- (0, __logtape_logtape.getLogger)([
42
+ (0, _logtape_logtape.getLogger)([
151
43
  "fedify",
152
44
  "sig",
153
45
  "http"
@@ -216,7 +108,7 @@ const compactParameters = (member) => {
216
108
  * @since 2.1.0
217
109
  */
218
110
  function validateAcceptSignature(members) {
219
- const logger = (0, __logtape_logtape.getLogger)([
111
+ const logger = (0, _logtape_logtape.getLogger)([
220
112
  "fedify",
221
113
  "sig",
222
114
  "http"
@@ -259,7 +151,6 @@ function fulfillAcceptSignature(entry, localKeyId, localAlg) {
259
151
  expires: entry.parameters.expires
260
152
  };
261
153
  }
262
-
263
154
  //#endregion
264
155
  //#region src/sig/key.ts
265
156
  /**
@@ -275,8 +166,7 @@ function validateCryptoKey(key, type) {
275
166
  if (!key.extractable) throw new TypeError("The key is not extractable.");
276
167
  if (key.algorithm.name !== "RSASSA-PKCS1-v1_5" && key.algorithm.name !== "Ed25519") throw new TypeError("Currently only RSASSA-PKCS1-v1_5 and Ed25519 keys are supported. More algorithms will be added in the future!");
277
168
  if (key.algorithm.name === "RSASSA-PKCS1-v1_5") {
278
- const algorithm = key.algorithm;
279
- if (algorithm.hash.name !== "SHA-256") throw new TypeError("For compatibility with the existing Fediverse software (e.g., Mastodon), hash algorithm for RSASSA-PKCS1-v1_5 keys must be SHA-256.");
169
+ if (key.algorithm.hash.name !== "SHA-256") throw new TypeError("For compatibility with the existing Fediverse software (e.g., Mastodon), hash algorithm for RSASSA-PKCS1-v1_5 keys must be SHA-256.");
280
170
  }
281
171
  }
282
172
  /**
@@ -287,7 +177,7 @@ function validateCryptoKey(key, type) {
287
177
  * @throws {TypeError} If the algorithm is unsupported.
288
178
  */
289
179
  function generateCryptoKeyPair(algorithm) {
290
- if (algorithm == null) (0, __logtape_logtape.getLogger)([
180
+ if (algorithm == null) (0, _logtape_logtape.getLogger)([
291
181
  "fedify",
292
182
  "sig",
293
183
  "key"
@@ -342,10 +232,9 @@ async function importJwk(jwk, type) {
342
232
  return key;
343
233
  }
344
234
  async function withFetchKeySpan(keyId, tracerProvider, fetcher) {
345
- tracerProvider ??= __opentelemetry_api.trace.getTracerProvider();
346
- const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
347
- return await tracer.startActiveSpan("activitypub.fetch_key", {
348
- kind: __opentelemetry_api.SpanKind.CLIENT,
235
+ tracerProvider ??= _opentelemetry_api.trace.getTracerProvider();
236
+ return await tracerProvider.getTracer(name, version).startActiveSpan("activitypub.fetch_key", {
237
+ kind: _opentelemetry_api.SpanKind.CLIENT,
349
238
  attributes: {
350
239
  "http.method": "GET",
351
240
  "url.full": keyId.href,
@@ -362,7 +251,7 @@ async function withFetchKeySpan(keyId, tracerProvider, fetcher) {
362
251
  return result;
363
252
  } catch (e) {
364
253
  span.setStatus({
365
- code: __opentelemetry_api.SpanStatusCode.ERROR,
254
+ code: _opentelemetry_api.SpanStatusCode.ERROR,
366
255
  message: String(e)
367
256
  });
368
257
  throw e;
@@ -405,41 +294,41 @@ function fetchKey(keyId, cls, options = {}) {
405
294
  async function fetchKeyDetailed(keyId, cls, options = {}) {
406
295
  const cacheKey = typeof keyId === "string" ? new URL(keyId) : keyId;
407
296
  return await withFetchKeySpan(cacheKey, options.tracerProvider, async () => {
408
- return await fetchKeyWithResult(cacheKey, cls, options, async (cacheKey$1, keyId$1, keyCache, logger) => {
409
- const fetchError = await keyCache?.getFetchError?.(cacheKey$1);
297
+ return await fetchKeyWithResult(cacheKey, cls, options, async (cacheKey, keyId, keyCache, logger) => {
298
+ const fetchError = await keyCache?.getFetchError?.(cacheKey);
410
299
  if (fetchError != null) {
411
- logger.debug("Entry {keyId} found in cache with preserved fetch failure details.", { keyId: keyId$1 });
300
+ logger.debug("Entry {keyId} found in cache with preserved fetch failure details.", { keyId });
412
301
  return {
413
302
  key: null,
414
303
  cached: true,
415
304
  fetchError
416
305
  };
417
306
  }
418
- logger.debug("Entry {keyId} found in cache, but no fetch failure details are available.", { keyId: keyId$1 });
307
+ logger.debug("Entry {keyId} found in cache, but no fetch failure details are available.", { keyId });
419
308
  return {
420
309
  key: null,
421
310
  cached: true
422
311
  };
423
- }, async (error, cacheKey$1, keyId$1, keyCache, logger) => {
312
+ }, async (error, cacheKey, keyId, keyCache, logger) => {
424
313
  logger.debug("Failed to fetch key {keyId}.", {
425
- keyId: keyId$1,
314
+ keyId,
426
315
  error
427
316
  });
428
- await keyCache?.set(cacheKey$1, null);
429
- if (error instanceof __fedify_vocab_runtime.FetchError && error.response != null) {
430
- const fetchError$1 = {
317
+ await keyCache?.set(cacheKey, null);
318
+ if (error instanceof _fedify_vocab_runtime.FetchError && error.response != null) {
319
+ const fetchError = {
431
320
  status: error.response.status,
432
321
  response: error.response.clone()
433
322
  };
434
- await keyCache?.setFetchError?.(cacheKey$1, fetchError$1);
323
+ await keyCache?.setFetchError?.(cacheKey, fetchError);
435
324
  return {
436
325
  key: null,
437
326
  cached: false,
438
- fetchError: fetchError$1
327
+ fetchError
439
328
  };
440
329
  }
441
330
  const fetchError = { error: error instanceof Error ? error : new Error(String(error)) };
442
- await keyCache?.setFetchError?.(cacheKey$1, fetchError);
331
+ await keyCache?.setFetchError?.(cacheKey, fetchError);
443
332
  return {
444
333
  key: null,
445
334
  cached: false,
@@ -472,7 +361,7 @@ async function clearFetchErrorMetadata(keyId, keyCache) {
472
361
  async function resolveFetchedKey(document, cacheKey, keyId, cls, { documentLoader, contextLoader, keyCache, tracerProvider }, logger) {
473
362
  let object;
474
363
  try {
475
- object = await __fedify_vocab.Object.fromJsonLd(document, {
364
+ object = await _fedify_vocab.Object.fromJsonLd(document, {
476
365
  documentLoader,
477
366
  contextLoader,
478
367
  tracerProvider
@@ -485,8 +374,8 @@ async function resolveFetchedKey(document, cacheKey, keyId, cls, { documentLoade
485
374
  contextLoader,
486
375
  tracerProvider
487
376
  });
488
- } catch (e$1) {
489
- if (e$1 instanceof TypeError) {
377
+ } catch (e) {
378
+ if (e instanceof TypeError) {
490
379
  logger.debug("Failed to verify; key {keyId} returned an invalid object.", { keyId });
491
380
  await keyCache?.set(cacheKey, null);
492
381
  await clearFetchErrorMetadata(cacheKey, keyCache);
@@ -495,13 +384,13 @@ async function resolveFetchedKey(document, cacheKey, keyId, cls, { documentLoade
495
384
  cached: false
496
385
  };
497
386
  }
498
- throw e$1;
387
+ throw e;
499
388
  }
500
389
  }
501
390
  let key = null;
502
391
  if (object instanceof cls) key = object;
503
- else if ((0, __fedify_vocab.isActor)(object)) {
504
- const keys = cls === __fedify_vocab.CryptographicKey ? object.getPublicKeys({
392
+ else if ((0, _fedify_vocab.isActor)(object)) {
393
+ const keys = cls === _fedify_vocab.CryptographicKey ? object.getPublicKeys({
505
394
  documentLoader,
506
395
  contextLoader,
507
396
  tracerProvider
@@ -563,7 +452,7 @@ async function resolveFetchedKey(document, cacheKey, keyId, cls, { documentLoade
563
452
  };
564
453
  }
565
454
  async function fetchKeyWithResult(cacheKey, cls, options, onCachedUnavailable, onFetchError) {
566
- const logger = (0, __logtape_logtape.getLogger)([
455
+ const logger = (0, _logtape_logtape.getLogger)([
567
456
  "fedify",
568
457
  "sig",
569
458
  "key"
@@ -576,40 +465,38 @@ async function fetchKeyWithResult(cacheKey, cls, options, onCachedUnavailable, o
576
465
  logger.debug("Fetching key {keyId} to verify signature...", { keyId });
577
466
  let document;
578
467
  try {
579
- const remoteDocument = await (options.documentLoader ?? (0, __fedify_vocab_runtime.getDocumentLoader)())(keyId);
580
- document = remoteDocument.document;
468
+ document = (await (options.documentLoader ?? (0, _fedify_vocab_runtime.getDocumentLoader)())(keyId)).document;
581
469
  } catch (error) {
582
470
  return await onFetchError(error, cacheKey, keyId, keyCache, logger);
583
471
  }
584
472
  return await resolveFetchedKey(document, cacheKey, keyId, cls, options, logger);
585
473
  }
586
474
  async function fetchKeyInternal(keyId, cls, options = {}) {
587
- const cacheKey = typeof keyId === "string" ? new URL(keyId) : keyId;
588
- return await fetchKeyWithResult(cacheKey, cls, options, (_cacheKey, _keyId, _keyCache, _logger) => {
475
+ return await fetchKeyWithResult(typeof keyId === "string" ? new URL(keyId) : keyId, cls, options, (_cacheKey, _keyId, _keyCache, _logger) => {
589
476
  return {
590
477
  key: null,
591
478
  cached: true
592
479
  };
593
- }, async (error, cacheKey$1, keyId$1, keyCache, logger) => {
480
+ }, async (error, cacheKey, keyId, keyCache, logger) => {
594
481
  logger.debug("Failed to fetch key {keyId}.", {
595
- keyId: keyId$1,
482
+ keyId,
596
483
  error
597
484
  });
598
- await keyCache?.set(cacheKey$1, null);
599
- if (error instanceof __fedify_vocab_runtime.FetchError && error.response != null) await keyCache?.setFetchError?.(cacheKey$1, {
485
+ await keyCache?.set(cacheKey, null);
486
+ if (error instanceof _fedify_vocab_runtime.FetchError && error.response != null) await keyCache?.setFetchError?.(cacheKey, {
600
487
  status: error.response.status,
601
488
  response: error.response.clone()
602
489
  });
603
- else await keyCache?.setFetchError?.(cacheKey$1, { error: error instanceof Error ? error : new Error(String(error)) });
490
+ else await keyCache?.setFetchError?.(cacheKey, { error: error instanceof Error ? error : new Error(String(error)) });
604
491
  return {
605
492
  key: null,
606
493
  cached: false
607
494
  };
608
495
  });
609
496
  }
610
-
611
497
  //#endregion
612
498
  //#region src/sig/http.ts
499
+ const DEFAULT_MAX_REDIRECTION = 20;
613
500
  /**
614
501
  * Signs a request using the given private key.
615
502
  * @param request The request to sign.
@@ -621,24 +508,22 @@ async function fetchKeyInternal(keyId, cls, options = {}) {
621
508
  */
622
509
  async function signRequest(request, privateKey, keyId, options = {}) {
623
510
  validateCryptoKey(privateKey, "private");
624
- const tracerProvider = options.tracerProvider ?? __opentelemetry_api.trace.getTracerProvider();
625
- const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
626
- return await tracer.startActiveSpan("http_signatures.sign", async (span) => {
511
+ return await (options.tracerProvider ?? _opentelemetry_api.trace.getTracerProvider()).getTracer(name, version).startActiveSpan("http_signatures.sign", async (span) => {
627
512
  try {
628
513
  const spec = options.spec ?? "draft-cavage-http-signatures-12";
629
514
  let signed;
630
515
  if (spec === "rfc9421") signed = await signRequestRfc9421(request, privateKey, keyId, span, options.currentTime, options.body, options.rfc9421);
631
516
  else signed = await signRequestDraft(request, privateKey, keyId, span, options.currentTime, options.body);
632
517
  if (span.isRecording()) {
633
- span.setAttribute(__opentelemetry_semantic_conventions.ATTR_HTTP_REQUEST_METHOD, signed.method);
634
- span.setAttribute(__opentelemetry_semantic_conventions.ATTR_URL_FULL, signed.url);
635
- for (const [name$1, value] of signed.headers) span.setAttribute((0, __opentelemetry_semantic_conventions.ATTR_HTTP_REQUEST_HEADER)(name$1), value);
518
+ span.setAttribute(_opentelemetry_semantic_conventions.ATTR_HTTP_REQUEST_METHOD, signed.method);
519
+ span.setAttribute(_opentelemetry_semantic_conventions.ATTR_URL_FULL, signed.url);
520
+ for (const [name, value] of signed.headers) span.setAttribute((0, _opentelemetry_semantic_conventions.ATTR_HTTP_REQUEST_HEADER)(name), value);
636
521
  span.setAttribute("http_signatures.key_id", keyId.href);
637
522
  }
638
523
  return signed;
639
524
  } catch (error) {
640
525
  span.setStatus({
641
- code: __opentelemetry_api.SpanStatusCode.ERROR,
526
+ code: _opentelemetry_api.SpanStatusCode.ERROR,
642
527
  message: String(error)
643
528
  });
644
529
  throw error;
@@ -660,8 +545,8 @@ async function signRequestDraft(request, privateKey, keyId, span, currentTime, b
660
545
  }
661
546
  if (!headers.has("Date")) headers.set("Date", currentTime == null ? (/* @__PURE__ */ new Date()).toUTCString() : new Date(currentTime.toString()).toUTCString());
662
547
  const serialized = [["(request-target)", `${request.method.toLowerCase()} ${url.pathname}`], ...headers];
663
- const headerNames = serialized.map(([name$1]) => name$1);
664
- const message = serialized.map(([name$1, value]) => `${name$1}: ${value.trim()}`).join("\n");
548
+ const headerNames = serialized.map(([name]) => name);
549
+ const message = serialized.map(([name, value]) => `${name}: ${value.trim()}`).join("\n");
665
550
  const signature = await crypto.subtle.sign("RSASSA-PKCS1-v1_5", privateKey, new TextEncoder().encode(message));
666
551
  const sigHeader = `keyId="${keyId.href}",algorithm="rsa-sha256",headers="${headerNames.join(" ")}",signature="${(0, byte_encodings_base64.encodeBase64)(signature)}"`;
667
552
  headers.set("Signature", sigHeader);
@@ -731,9 +616,7 @@ const derivedComponents = {
731
616
  * @returns The formatted signature string.
732
617
  */
733
618
  function formatRfc9421Signature(signature, components, parameters, label = "sig1") {
734
- const signatureInputValue = `${label}=(${components.map((c) => formatComponentId(c)).join(" ")});${parameters}`;
735
- const signatureValue = `${label}=:${(0, byte_encodings_base64.encodeBase64)(signature)}:`;
736
- return [signatureInputValue, signatureValue];
619
+ return [`${label}=(${components.map((c) => formatComponentId(c)).join(" ")});${parameters}`, `${label}=:${(0, byte_encodings_base64.encodeBase64)(signature)}:`];
737
620
  }
738
621
  /**
739
622
  * Parse RFC 9421 Signature-Input header.
@@ -745,7 +628,7 @@ function parseRfc9421SignatureInput(signatureInput) {
745
628
  try {
746
629
  dict = (0, structured_field_values.decodeDict)(signatureInput);
747
630
  } catch (error) {
748
- (0, __logtape_logtape.getLogger)([
631
+ (0, _logtape_logtape.getLogger)([
749
632
  "fedify",
750
633
  "sig",
751
634
  "http"
@@ -785,7 +668,7 @@ function parseRfc9421Signature(signature) {
785
668
  try {
786
669
  dict = (0, structured_field_values.decodeDict)(signature);
787
670
  } catch (error) {
788
- (0, __logtape_logtape.getLogger)([
671
+ (0, _logtape_logtape.getLogger)([
789
672
  "fedify",
790
673
  "sig",
791
674
  "http"
@@ -839,12 +722,11 @@ async function signRequestRfc9421(request, privateKey, keyId, span, currentTime,
839
722
  value: "content-digest",
840
723
  params: {}
841
724
  }] : []];
842
- const expires = rfc9421Options?.expires === true ? (currentTime.epochMilliseconds / 1e3 | 0) + 3600 : void 0;
843
725
  const signatureParams = formatRfc9421SignatureParameters({
844
726
  algorithm: "rsa-v1_5-sha256",
845
727
  keyId,
846
728
  created,
847
- expires,
729
+ expires: rfc9421Options?.expires === true ? (currentTime.epochMilliseconds / 1e3 | 0) + 3600 : void 0,
848
730
  nonce: rfc9421Options?.nonce,
849
731
  tag: rfc9421Options?.tag
850
732
  });
@@ -954,13 +836,11 @@ async function verifyRequest(request, options = {}) {
954
836
  * @since 2.1.0
955
837
  */
956
838
  async function verifyRequestDetailed(request, options = {}) {
957
- const tracerProvider = options.tracerProvider ?? __opentelemetry_api.trace.getTracerProvider();
958
- const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
959
- return await tracer.startActiveSpan("http_signatures.verify", async (span) => {
839
+ return await (options.tracerProvider ?? _opentelemetry_api.trace.getTracerProvider()).getTracer(name, version).startActiveSpan("http_signatures.verify", async (span) => {
960
840
  if (span.isRecording()) {
961
- span.setAttribute(__opentelemetry_semantic_conventions.ATTR_HTTP_REQUEST_METHOD, request.method);
962
- span.setAttribute(__opentelemetry_semantic_conventions.ATTR_URL_FULL, request.url);
963
- for (const [name$1, value] of request.headers) span.setAttribute((0, __opentelemetry_semantic_conventions.ATTR_HTTP_REQUEST_HEADER)(name$1), value);
841
+ span.setAttribute(_opentelemetry_semantic_conventions.ATTR_HTTP_REQUEST_METHOD, request.method);
842
+ span.setAttribute(_opentelemetry_semantic_conventions.ATTR_URL_FULL, request.url);
843
+ for (const [name, value] of request.headers) span.setAttribute((0, _opentelemetry_semantic_conventions.ATTR_HTTP_REQUEST_HEADER)(name), value);
964
844
  }
965
845
  try {
966
846
  let spec = options.spec;
@@ -969,11 +849,11 @@ async function verifyRequestDetailed(request, options = {}) {
969
849
  if (spec === "rfc9421") result = await verifyRequestRfc9421(request, span, options);
970
850
  else result = await verifyRequestDraft(request, span, options);
971
851
  recordVerificationResult(span, result);
972
- if (!result.verified) span.setStatus({ code: __opentelemetry_api.SpanStatusCode.ERROR });
852
+ if (!result.verified) span.setStatus({ code: _opentelemetry_api.SpanStatusCode.ERROR });
973
853
  return result;
974
854
  } catch (error) {
975
855
  span.setStatus({
976
- code: __opentelemetry_api.SpanStatusCode.ERROR,
856
+ code: _opentelemetry_api.SpanStatusCode.ERROR,
977
857
  message: String(error)
978
858
  });
979
859
  throw error;
@@ -983,7 +863,7 @@ async function verifyRequestDetailed(request, options = {}) {
983
863
  });
984
864
  }
985
865
  async function verifyRequestDraft(request, span, { documentLoader, contextLoader, timeWindow, currentTime, keyCache, tracerProvider } = {}) {
986
- const logger = (0, __logtape_logtape.getLogger)([
866
+ const logger = (0, _logtape_logtape.getLogger)([
987
867
  "fedify",
988
868
  "sig",
989
869
  "http"
@@ -1131,7 +1011,7 @@ async function verifyRequestDraft(request, span, { documentLoader, contextLoader
1131
1011
  if (keyIdUrl == null) return invalidSignatureResult(null);
1132
1012
  span?.setAttribute("http_signatures.key_id", keyId);
1133
1013
  if ("algorithm" in sigValues) span?.setAttribute("http_signatures.algorithm", sigValues.algorithm);
1134
- const { key, cached, fetchError } = await fetchKeyDetailed(keyIdUrl, __fedify_vocab.CryptographicKey, {
1014
+ const { key, cached, fetchError } = await fetchKeyDetailed(keyIdUrl, _fedify_vocab.CryptographicKey, {
1135
1015
  documentLoader,
1136
1016
  contextLoader,
1137
1017
  keyCache,
@@ -1148,11 +1028,10 @@ async function verifyRequestDraft(request, span, { documentLoader, contextLoader
1148
1028
  logger.debug("Failed to verify; required headers missing in the Signature header: {headers}.", { headers });
1149
1029
  return invalidSignatureResult(keyIdUrl);
1150
1030
  }
1151
- const message = headerNames.map((name$1) => `${name$1}: ` + (name$1 === "(request-target)" ? `${request.method.toLowerCase()} ${new URL(request.url).pathname}` : name$1 === "(created)" ? sigValues.created ?? "" : name$1 === "(expires)" ? sigValues.expires ?? "" : name$1 === "host" ? request.headers.get("host") ?? new URL(request.url).host : request.headers.get(name$1))).join("\n");
1031
+ const message = headerNames.map((name) => `${name}: ` + (name === "(request-target)" ? `${request.method.toLowerCase()} ${new URL(request.url).pathname}` : name === "(created)" ? sigValues.created ?? "" : name === "(expires)" ? sigValues.expires ?? "" : name === "host" ? request.headers.get("host") ?? new URL(request.url).host : request.headers.get(name))).join("\n");
1152
1032
  const sig = (0, byte_encodings_base64.decodeBase64)(signature);
1153
1033
  span?.setAttribute("http_signatures.signature", (0, byte_encodings_hex.encodeHex)(sig));
1154
- const verified = await crypto.subtle.verify("RSASSA-PKCS1-v1_5", key.publicKey, sig, new TextEncoder().encode(message));
1155
- if (!verified) {
1034
+ if (!await crypto.subtle.verify("RSASSA-PKCS1-v1_5", key.publicKey, sig, new TextEncoder().encode(message))) {
1156
1035
  if (cached) {
1157
1036
  logger.debug("Failed to verify with the cached key {keyId}; signature {signature} is invalid. Retrying with the freshly fetched key...", {
1158
1037
  keyId,
@@ -1166,7 +1045,7 @@ async function verifyRequestDraft(request, span, { documentLoader, contextLoader
1166
1045
  currentTime,
1167
1046
  keyCache: {
1168
1047
  get: () => Promise.resolve(void 0),
1169
- set: async (keyId$1, key$1) => await keyCache?.set(keyId$1, key$1)
1048
+ set: async (keyId, key) => await keyCache?.set(keyId, key)
1170
1049
  }
1171
1050
  });
1172
1051
  }
@@ -1244,7 +1123,7 @@ async function verifyRfc9421ContentDigest(digestHeader, body) {
1244
1123
  return false;
1245
1124
  }
1246
1125
  async function verifyRequestRfc9421(request, span, { documentLoader, contextLoader, timeWindow, currentTime, keyCache, tracerProvider } = {}) {
1247
- const logger = (0, __logtape_logtape.getLogger)([
1126
+ const logger = (0, _logtape_logtape.getLogger)([
1248
1127
  "fedify",
1249
1128
  "sig",
1250
1129
  "http"
@@ -1328,9 +1207,7 @@ async function verifyRequestRfc9421(request, span, { documentLoader, contextLoad
1328
1207
  failure = invalidSignatureResult(keyId);
1329
1208
  continue;
1330
1209
  }
1331
- const body = await request.arrayBuffer();
1332
- const digestValid = await verifyRfc9421ContentDigest(contentDigestHeader, body);
1333
- if (!digestValid) {
1210
+ if (!await verifyRfc9421ContentDigest(contentDigestHeader, await request.arrayBuffer())) {
1334
1211
  logger.debug("Failed to verify; Content-Digest verification failed.", { contentDigest: contentDigestHeader });
1335
1212
  failure = invalidSignatureResult(keyId);
1336
1213
  continue;
@@ -1342,7 +1219,7 @@ async function verifyRequestRfc9421(request, span, { documentLoader, contextLoad
1342
1219
  failure = invalidSignatureResult(null);
1343
1220
  continue;
1344
1221
  }
1345
- const { key, cached, fetchError } = await fetchKeyDetailed(keyId, __fedify_vocab.CryptographicKey, {
1222
+ const { key, cached, fetchError } = await fetchKeyDetailed(keyId, _fedify_vocab.CryptographicKey, {
1346
1223
  documentLoader,
1347
1224
  contextLoader,
1348
1225
  keyCache,
@@ -1388,8 +1265,7 @@ async function verifyRequestRfc9421(request, span, { documentLoader, contextLoad
1388
1265
  const signatureBaseBytes = new TextEncoder().encode(signatureBase);
1389
1266
  span?.setAttribute("http_signatures.signature", (0, byte_encodings_hex.encodeHex)(sigBytes));
1390
1267
  try {
1391
- const verified = await crypto.subtle.verify(algorithm, key.publicKey, sigBytes.slice(), signatureBaseBytes);
1392
- if (verified) return {
1268
+ if (await crypto.subtle.verify(algorithm, key.publicKey, sigBytes.slice(), signatureBaseBytes)) return {
1393
1269
  verified: true,
1394
1270
  key,
1395
1271
  signatureLabel: sigName
@@ -1403,7 +1279,7 @@ async function verifyRequestRfc9421(request, span, { documentLoader, contextLoad
1403
1279
  currentTime,
1404
1280
  keyCache: {
1405
1281
  get: () => Promise.resolve(void 0),
1406
- set: async (keyId$1, key$1) => await keyCache?.set(keyId$1, key$1)
1282
+ set: async (keyId, key) => await keyCache?.set(keyId, key)
1407
1283
  },
1408
1284
  spec: "rfc9421"
1409
1285
  });
@@ -1460,7 +1336,11 @@ function createRedirectRequest(request, location, body) {
1460
1336
  * @since 1.6.0
1461
1337
  */
1462
1338
  async function doubleKnock(request, identity, options = {}) {
1339
+ return await doubleKnockInternal(request, identity, options);
1340
+ }
1341
+ async function doubleKnockInternal(request, identity, options, redirected = 0, visited = /* @__PURE__ */ new Set()) {
1463
1342
  const { specDeterminer, log, tracerProvider, signal } = options;
1343
+ visited.add(request.url);
1464
1344
  const origin = new URL(request.url).origin;
1465
1345
  const firstTrySpec = specDeterminer == null ? "rfc9421" : await specDeterminer.determineSpec(origin);
1466
1346
  const body = options.body !== void 0 ? options.body : request.method !== "GET" && request.method !== "HEAD" ? await request.clone().arrayBuffer() : null;
@@ -1475,13 +1355,15 @@ async function doubleKnock(request, identity, options = {}) {
1475
1355
  signal
1476
1356
  });
1477
1357
  if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
1478
- const location = response.headers.get("Location");
1479
- return doubleKnock(createRedirectRequest(request, location, body), identity, {
1358
+ if (redirected >= DEFAULT_MAX_REDIRECTION) throw new _fedify_vocab_runtime.FetchError(request.url, `Too many redirections (${redirected + 1})`);
1359
+ const redirectRequest = createRedirectRequest(request, response.headers.get("Location"), body);
1360
+ if (visited.has(redirectRequest.url)) throw new _fedify_vocab_runtime.FetchError(request.url, `Redirect loop detected: ${redirectRequest.url}`);
1361
+ return doubleKnockInternal(redirectRequest, identity, {
1480
1362
  ...options,
1481
1363
  body
1482
- });
1364
+ }, redirected + 1, visited);
1483
1365
  } else if (response.status === 400 || response.status === 401 || response.status > 401) {
1484
- const logger = (0, __logtape_logtape.getLogger)([
1366
+ const logger = (0, _logtape_logtape.getLogger)([
1485
1367
  "fedify",
1486
1368
  "sig",
1487
1369
  "http"
@@ -1522,13 +1404,10 @@ async function doubleKnock(request, identity, options = {}) {
1522
1404
  redirect: "manual",
1523
1405
  signal
1524
1406
  });
1525
- if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
1526
- const location = response.headers.get("Location");
1527
- return doubleKnock(createRedirectRequest(request, location, body), identity, {
1528
- ...options,
1529
- body
1530
- });
1531
- }
1407
+ if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) return doubleKnock(createRedirectRequest(request, response.headers.get("Location"), body), identity, {
1408
+ ...options,
1409
+ body
1410
+ });
1532
1411
  }
1533
1412
  if (fulfilled && response.status < 300) {
1534
1413
  await specDeterminer?.rememberSpec(origin, "rfc9421");
@@ -1554,11 +1433,13 @@ async function doubleKnock(request, identity, options = {}) {
1554
1433
  signal
1555
1434
  });
1556
1435
  if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
1557
- const location = response.headers.get("Location");
1558
- return doubleKnock(createRedirectRequest(request, location, body), identity, {
1436
+ if (redirected >= DEFAULT_MAX_REDIRECTION) throw new _fedify_vocab_runtime.FetchError(request.url, `Too many redirections (${redirected + 1})`);
1437
+ const redirectRequest = createRedirectRequest(request, response.headers.get("Location"), body);
1438
+ if (visited.has(redirectRequest.url)) throw new _fedify_vocab_runtime.FetchError(request.url, `Redirect loop detected: ${redirectRequest.url}`);
1439
+ return doubleKnockInternal(redirectRequest, identity, {
1559
1440
  ...options,
1560
1441
  body
1561
- });
1442
+ }, redirected + 1, visited);
1562
1443
  } else if (response.status !== 400 && response.status !== 401) await specDeterminer?.rememberSpec(origin, spec);
1563
1444
  } else await specDeterminer?.rememberSpec(origin, firstTrySpec);
1564
1445
  return response;
@@ -1590,101 +1471,106 @@ function timingSafeEqual(a, b) {
1590
1471
  result |= lenA ^ lenB;
1591
1472
  return result === 0;
1592
1473
  }
1593
-
1594
1474
  //#endregion
1595
- Object.defineProperty(exports, 'deno_default', {
1596
- enumerable: true,
1597
- get: function () {
1598
- return deno_default;
1599
- }
1475
+ Object.defineProperty(exports, "doubleKnock", {
1476
+ enumerable: true,
1477
+ get: function() {
1478
+ return doubleKnock;
1479
+ }
1600
1480
  });
1601
- Object.defineProperty(exports, 'doubleKnock', {
1602
- enumerable: true,
1603
- get: function () {
1604
- return doubleKnock;
1605
- }
1481
+ Object.defineProperty(exports, "exportJwk", {
1482
+ enumerable: true,
1483
+ get: function() {
1484
+ return exportJwk;
1485
+ }
1606
1486
  });
1607
- Object.defineProperty(exports, 'exportJwk', {
1608
- enumerable: true,
1609
- get: function () {
1610
- return exportJwk;
1611
- }
1487
+ Object.defineProperty(exports, "fetchKey", {
1488
+ enumerable: true,
1489
+ get: function() {
1490
+ return fetchKey;
1491
+ }
1612
1492
  });
1613
- Object.defineProperty(exports, 'fetchKey', {
1614
- enumerable: true,
1615
- get: function () {
1616
- return fetchKey;
1617
- }
1493
+ Object.defineProperty(exports, "fetchKeyDetailed", {
1494
+ enumerable: true,
1495
+ get: function() {
1496
+ return fetchKeyDetailed;
1497
+ }
1618
1498
  });
1619
- Object.defineProperty(exports, 'fetchKeyDetailed', {
1620
- enumerable: true,
1621
- get: function () {
1622
- return fetchKeyDetailed;
1623
- }
1499
+ Object.defineProperty(exports, "formatAcceptSignature", {
1500
+ enumerable: true,
1501
+ get: function() {
1502
+ return formatAcceptSignature;
1503
+ }
1624
1504
  });
1625
- Object.defineProperty(exports, 'formatAcceptSignature', {
1626
- enumerable: true,
1627
- get: function () {
1628
- return formatAcceptSignature;
1629
- }
1505
+ Object.defineProperty(exports, "fulfillAcceptSignature", {
1506
+ enumerable: true,
1507
+ get: function() {
1508
+ return fulfillAcceptSignature;
1509
+ }
1630
1510
  });
1631
- Object.defineProperty(exports, 'fulfillAcceptSignature', {
1632
- enumerable: true,
1633
- get: function () {
1634
- return fulfillAcceptSignature;
1635
- }
1511
+ Object.defineProperty(exports, "generateCryptoKeyPair", {
1512
+ enumerable: true,
1513
+ get: function() {
1514
+ return generateCryptoKeyPair;
1515
+ }
1636
1516
  });
1637
- Object.defineProperty(exports, 'generateCryptoKeyPair', {
1638
- enumerable: true,
1639
- get: function () {
1640
- return generateCryptoKeyPair;
1641
- }
1517
+ Object.defineProperty(exports, "importJwk", {
1518
+ enumerable: true,
1519
+ get: function() {
1520
+ return importJwk;
1521
+ }
1522
+ });
1523
+ Object.defineProperty(exports, "name", {
1524
+ enumerable: true,
1525
+ get: function() {
1526
+ return name;
1527
+ }
1642
1528
  });
1643
- Object.defineProperty(exports, 'importJwk', {
1644
- enumerable: true,
1645
- get: function () {
1646
- return importJwk;
1647
- }
1529
+ Object.defineProperty(exports, "parseAcceptSignature", {
1530
+ enumerable: true,
1531
+ get: function() {
1532
+ return parseAcceptSignature;
1533
+ }
1534
+ });
1535
+ Object.defineProperty(exports, "parseRfc9421SignatureInput", {
1536
+ enumerable: true,
1537
+ get: function() {
1538
+ return parseRfc9421SignatureInput;
1539
+ }
1648
1540
  });
1649
- Object.defineProperty(exports, 'parseAcceptSignature', {
1650
- enumerable: true,
1651
- get: function () {
1652
- return parseAcceptSignature;
1653
- }
1541
+ Object.defineProperty(exports, "signRequest", {
1542
+ enumerable: true,
1543
+ get: function() {
1544
+ return signRequest;
1545
+ }
1654
1546
  });
1655
- Object.defineProperty(exports, 'parseRfc9421SignatureInput', {
1656
- enumerable: true,
1657
- get: function () {
1658
- return parseRfc9421SignatureInput;
1659
- }
1547
+ Object.defineProperty(exports, "validateAcceptSignature", {
1548
+ enumerable: true,
1549
+ get: function() {
1550
+ return validateAcceptSignature;
1551
+ }
1660
1552
  });
1661
- Object.defineProperty(exports, 'signRequest', {
1662
- enumerable: true,
1663
- get: function () {
1664
- return signRequest;
1665
- }
1553
+ Object.defineProperty(exports, "validateCryptoKey", {
1554
+ enumerable: true,
1555
+ get: function() {
1556
+ return validateCryptoKey;
1557
+ }
1666
1558
  });
1667
- Object.defineProperty(exports, 'validateAcceptSignature', {
1668
- enumerable: true,
1669
- get: function () {
1670
- return validateAcceptSignature;
1671
- }
1559
+ Object.defineProperty(exports, "verifyRequest", {
1560
+ enumerable: true,
1561
+ get: function() {
1562
+ return verifyRequest;
1563
+ }
1672
1564
  });
1673
- Object.defineProperty(exports, 'validateCryptoKey', {
1674
- enumerable: true,
1675
- get: function () {
1676
- return validateCryptoKey;
1677
- }
1565
+ Object.defineProperty(exports, "verifyRequestDetailed", {
1566
+ enumerable: true,
1567
+ get: function() {
1568
+ return verifyRequestDetailed;
1569
+ }
1678
1570
  });
1679
- Object.defineProperty(exports, 'verifyRequest', {
1680
- enumerable: true,
1681
- get: function () {
1682
- return verifyRequest;
1683
- }
1571
+ Object.defineProperty(exports, "version", {
1572
+ enumerable: true,
1573
+ get: function() {
1574
+ return version;
1575
+ }
1684
1576
  });
1685
- Object.defineProperty(exports, 'verifyRequestDetailed', {
1686
- enumerable: true,
1687
- get: function () {
1688
- return verifyRequestDetailed;
1689
- }
1690
- });