toolcraft 0.0.749 → 0.0.751

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 (374) hide show
  1. package/composition.json +23 -3
  2. package/dist/composition.json +23 -3
  3. package/dist/human-in-loop/approvals-commands.d.ts +1 -1
  4. package/dist/index.d.ts +1 -262
  5. package/dist/index.js +1 -573
  6. package/dist/runtime-platform.d.ts +2 -0
  7. package/dist/runtime-platform.js +2 -0
  8. package/dist/runtime-platform.workerd.d.ts +3 -0
  9. package/dist/runtime-platform.workerd.js +10 -0
  10. package/dist/runtime.d.ts +262 -0
  11. package/dist/runtime.js +576 -0
  12. package/node_modules/@noble/hashes/LICENSE +21 -0
  13. package/node_modules/@noble/hashes/README.md +478 -0
  14. package/node_modules/@noble/hashes/_blake.d.ts +20 -0
  15. package/node_modules/@noble/hashes/_blake.js +59 -0
  16. package/node_modules/@noble/hashes/_md.d.ts +95 -0
  17. package/node_modules/@noble/hashes/_md.js +209 -0
  18. package/node_modules/@noble/hashes/_u64.d.ts +36 -0
  19. package/node_modules/@noble/hashes/_u64.js +77 -0
  20. package/node_modules/@noble/hashes/argon2.d.ts +148 -0
  21. package/node_modules/@noble/hashes/argon2.js +577 -0
  22. package/node_modules/@noble/hashes/blake1.d.ts +162 -0
  23. package/node_modules/@noble/hashes/blake1.js +630 -0
  24. package/node_modules/@noble/hashes/blake2.d.ts +203 -0
  25. package/node_modules/@noble/hashes/blake2.js +573 -0
  26. package/node_modules/@noble/hashes/blake3.d.ts +68 -0
  27. package/node_modules/@noble/hashes/blake3.js +310 -0
  28. package/node_modules/@noble/hashes/eskdf.d.ts +91 -0
  29. package/node_modules/@noble/hashes/eskdf.js +225 -0
  30. package/node_modules/@noble/hashes/hkdf.d.ts +70 -0
  31. package/node_modules/@noble/hashes/hkdf.js +152 -0
  32. package/node_modules/@noble/hashes/hmac.d.ts +50 -0
  33. package/node_modules/@noble/hashes/hmac.js +93 -0
  34. package/node_modules/@noble/hashes/index.d.ts +1 -0
  35. package/node_modules/@noble/hashes/index.js +34 -0
  36. package/node_modules/@noble/hashes/legacy.d.ts +107 -0
  37. package/node_modules/@noble/hashes/legacy.js +348 -0
  38. package/node_modules/@noble/hashes/package.json +91 -0
  39. package/node_modules/@noble/hashes/pbkdf2.d.ts +66 -0
  40. package/node_modules/@noble/hashes/pbkdf2.js +176 -0
  41. package/node_modules/@noble/hashes/scrypt.d.ts +98 -0
  42. package/node_modules/@noble/hashes/scrypt.js +304 -0
  43. package/node_modules/@noble/hashes/sha2.d.ts +176 -0
  44. package/node_modules/@noble/hashes/sha2.js +446 -0
  45. package/node_modules/@noble/hashes/sha3-addons.d.ts +533 -0
  46. package/node_modules/@noble/hashes/sha3-addons.js +973 -0
  47. package/node_modules/@noble/hashes/sha3.d.ts +208 -0
  48. package/node_modules/@noble/hashes/sha3.js +475 -0
  49. package/node_modules/@noble/hashes/src/_blake.ts +67 -0
  50. package/node_modules/@noble/hashes/src/_md.ts +227 -0
  51. package/node_modules/@noble/hashes/src/_u64.ts +111 -0
  52. package/node_modules/@noble/hashes/src/argon2.ts +693 -0
  53. package/node_modules/@noble/hashes/src/blake1.ts +677 -0
  54. package/node_modules/@noble/hashes/src/blake2.ts +648 -0
  55. package/node_modules/@noble/hashes/src/blake3.ts +344 -0
  56. package/node_modules/@noble/hashes/src/eskdf.ts +265 -0
  57. package/node_modules/@noble/hashes/src/hkdf.ts +161 -0
  58. package/node_modules/@noble/hashes/src/hmac.ts +130 -0
  59. package/node_modules/@noble/hashes/src/index.ts +33 -0
  60. package/node_modules/@noble/hashes/src/legacy.ts +361 -0
  61. package/node_modules/@noble/hashes/src/pbkdf2.ts +219 -0
  62. package/node_modules/@noble/hashes/src/scrypt.ts +375 -0
  63. package/node_modules/@noble/hashes/src/sha2.ts +486 -0
  64. package/node_modules/@noble/hashes/src/sha3-addons.ts +1157 -0
  65. package/node_modules/@noble/hashes/src/sha3.ts +525 -0
  66. package/node_modules/@noble/hashes/src/utils.ts +978 -0
  67. package/node_modules/@noble/hashes/src/webcrypto.ts +283 -0
  68. package/node_modules/@noble/hashes/utils.d.ts +560 -0
  69. package/node_modules/@noble/hashes/utils.js +687 -0
  70. package/node_modules/@noble/hashes/webcrypto.d.ts +121 -0
  71. package/node_modules/@noble/hashes/webcrypto.js +228 -0
  72. package/node_modules/@poe-code/agent-mcp-config/dist/apply.js +23 -9
  73. package/node_modules/@poe-code/config-mutations/README.md +2 -0
  74. package/node_modules/@poe-code/config-mutations/dist/execution/apply-mutation.js +4 -5
  75. package/node_modules/@poe-code/config-mutations/dist/execution/path-utils.d.ts +3 -4
  76. package/node_modules/@poe-code/config-mutations/dist/execution/path-utils.js +3 -3
  77. package/node_modules/@poe-code/config-mutations/dist/template/render.js +1 -1
  78. package/node_modules/@poe-code/config-mutations/dist/testing/mock-fs.d.ts +2 -2
  79. package/node_modules/@poe-code/config-mutations/dist/testing/mock-fs.js +3 -6
  80. package/node_modules/@poe-code/config-mutations/dist/types.d.ts +4 -2
  81. package/node_modules/@poe-code/process-runner/README.md +2 -1
  82. package/node_modules/@poe-code/process-runner/dist/transfer-filesystem.d.ts +1 -0
  83. package/node_modules/@poe-code/process-runner/dist/transfer-filesystem.js +1 -0
  84. package/node_modules/@poe-code/process-runner/dist/transfer-filesystem.workerd.d.ts +2 -0
  85. package/node_modules/@poe-code/process-runner/dist/transfer-filesystem.workerd.js +1 -0
  86. package/node_modules/@poe-code/process-runner/dist/types.d.ts +1 -1
  87. package/node_modules/@poe-code/process-runner/dist/workspace-transfer.d.ts +6 -5
  88. package/node_modules/@poe-code/process-runner/dist/workspace-transfer.js +67 -29
  89. package/node_modules/@poe-code/process-runner/package.json +13 -0
  90. package/node_modules/@poe-code/safe-fs/LICENSE +21 -0
  91. package/node_modules/@poe-code/safe-fs/PROVENANCE.json +428 -0
  92. package/node_modules/@poe-code/safe-fs/README.md +411 -0
  93. package/node_modules/@poe-code/safe-fs/dist/bridge/confinement.d.ts +3 -0
  94. package/node_modules/@poe-code/safe-fs/dist/bridge/confinement.js +171 -0
  95. package/node_modules/@poe-code/safe-fs/dist/bridge/filesystem.d.ts +93 -0
  96. package/node_modules/@poe-code/safe-fs/dist/bridge/filesystem.js +453 -0
  97. package/node_modules/@poe-code/safe-fs/dist/bridge/index.d.ts +7 -0
  98. package/node_modules/@poe-code/safe-fs/dist/bridge/index.js +19 -0
  99. package/node_modules/@poe-code/safe-fs/dist/bridge/stats.d.ts +4 -0
  100. package/node_modules/@poe-code/safe-fs/dist/bridge/stats.js +37 -0
  101. package/node_modules/@poe-code/safe-fs/dist/bridge/types.d.ts +81 -0
  102. package/node_modules/@poe-code/safe-fs/dist/bridge/types.js +1 -0
  103. package/node_modules/@poe-code/safe-fs/dist/bridge/values.d.ts +6 -0
  104. package/node_modules/@poe-code/safe-fs/dist/bridge/values.js +65 -0
  105. package/node_modules/@poe-code/safe-fs/dist/config/memory.d.ts +3 -0
  106. package/node_modules/@poe-code/safe-fs/dist/config/memory.js +7 -0
  107. package/node_modules/@poe-code/safe-fs/dist/config/real.d.ts +5 -0
  108. package/node_modules/@poe-code/safe-fs/dist/config/real.js +16 -0
  109. package/node_modules/@poe-code/safe-fs/dist/config/registry.d.ts +2 -0
  110. package/node_modules/@poe-code/safe-fs/dist/config/registry.js +15 -0
  111. package/node_modules/@poe-code/safe-fs/dist/config.d.ts +15 -0
  112. package/node_modules/@poe-code/safe-fs/dist/config.js +46 -0
  113. package/node_modules/@poe-code/safe-fs/dist/config.node.d.ts +2 -0
  114. package/node_modules/@poe-code/safe-fs/dist/config.node.js +11 -0
  115. package/node_modules/@poe-code/safe-fs/dist/config.portable.d.ts +3 -0
  116. package/node_modules/@poe-code/safe-fs/dist/config.portable.js +9 -0
  117. package/node_modules/@poe-code/safe-fs/dist/contracts/abort.d.ts +5 -0
  118. package/node_modules/@poe-code/safe-fs/dist/contracts/abort.js +34 -0
  119. package/node_modules/@poe-code/safe-fs/dist/contracts/cleanup.d.ts +1 -0
  120. package/node_modules/@poe-code/safe-fs/dist/contracts/cleanup.js +9 -0
  121. package/node_modules/@poe-code/safe-fs/dist/contracts/descriptor.d.ts +38 -0
  122. package/node_modules/@poe-code/safe-fs/dist/contracts/descriptor.js +1 -0
  123. package/node_modules/@poe-code/safe-fs/dist/contracts/errors.d.ts +53 -0
  124. package/node_modules/@poe-code/safe-fs/dist/contracts/errors.js +99 -0
  125. package/node_modules/@poe-code/safe-fs/dist/contracts/filesystem.d.ts +379 -0
  126. package/node_modules/@poe-code/safe-fs/dist/contracts/filesystem.js +1 -0
  127. package/node_modules/@poe-code/safe-fs/dist/contracts/index.d.ts +6 -0
  128. package/node_modules/@poe-code/safe-fs/dist/contracts/index.js +6 -0
  129. package/node_modules/@poe-code/safe-fs/dist/contracts/io.d.ts +12 -0
  130. package/node_modules/@poe-code/safe-fs/dist/contracts/io.js +321 -0
  131. package/node_modules/@poe-code/safe-fs/dist/contracts/object.d.ts +134 -0
  132. package/node_modules/@poe-code/safe-fs/dist/contracts/object.js +97 -0
  133. package/node_modules/@poe-code/safe-fs/dist/contracts/path.d.ts +3 -0
  134. package/node_modules/@poe-code/safe-fs/dist/contracts/path.js +2 -0
  135. package/node_modules/@poe-code/safe-fs/dist/contracts/portable-path.d.ts +21 -0
  136. package/node_modules/@poe-code/safe-fs/dist/contracts/portable-path.js +78 -0
  137. package/node_modules/@poe-code/safe-fs/dist/contracts/virtual-path.d.ts +15 -0
  138. package/node_modules/@poe-code/safe-fs/dist/contracts/virtual-path.js +162 -0
  139. package/node_modules/@poe-code/safe-fs/dist/core.d.ts +19 -0
  140. package/node_modules/@poe-code/safe-fs/dist/core.js +17 -0
  141. package/node_modules/@poe-code/safe-fs/dist/fs/capabilities.d.ts +10 -0
  142. package/node_modules/@poe-code/safe-fs/dist/fs/capabilities.js +216 -0
  143. package/node_modules/@poe-code/safe-fs/dist/fs/conditional-chmod.d.ts +7 -0
  144. package/node_modules/@poe-code/safe-fs/dist/fs/conditional-chmod.js +19 -0
  145. package/node_modules/@poe-code/safe-fs/dist/fs/descriptor.d.ts +21 -0
  146. package/node_modules/@poe-code/safe-fs/dist/fs/descriptor.js +279 -0
  147. package/node_modules/@poe-code/safe-fs/dist/fs/devices/index.d.ts +59 -0
  148. package/node_modules/@poe-code/safe-fs/dist/fs/devices/index.js +875 -0
  149. package/node_modules/@poe-code/safe-fs/dist/fs/devices/path.d.ts +7 -0
  150. package/node_modules/@poe-code/safe-fs/dist/fs/devices/path.js +250 -0
  151. package/node_modules/@poe-code/safe-fs/dist/fs/devices/stream.d.ts +6 -0
  152. package/node_modules/@poe-code/safe-fs/dist/fs/devices/stream.js +136 -0
  153. package/node_modules/@poe-code/safe-fs/dist/fs/directory-admission.d.ts +3 -0
  154. package/node_modules/@poe-code/safe-fs/dist/fs/directory-admission.js +14 -0
  155. package/node_modules/@poe-code/safe-fs/dist/fs/memory/atomic-view.d.ts +11 -0
  156. package/node_modules/@poe-code/safe-fs/dist/fs/memory/atomic-view.js +13 -0
  157. package/node_modules/@poe-code/safe-fs/dist/fs/memory/index.d.ts +186 -0
  158. package/node_modules/@poe-code/safe-fs/dist/fs/memory/index.js +3771 -0
  159. package/node_modules/@poe-code/safe-fs/dist/fs/memory/ledger.d.ts +26 -0
  160. package/node_modules/@poe-code/safe-fs/dist/fs/memory/ledger.js +96 -0
  161. package/node_modules/@poe-code/safe-fs/dist/fs/memory/limits.d.ts +13 -0
  162. package/node_modules/@poe-code/safe-fs/dist/fs/memory/limits.js +26 -0
  163. package/node_modules/@poe-code/safe-fs/dist/fs/memory/missing-target.d.ts +15 -0
  164. package/node_modules/@poe-code/safe-fs/dist/fs/memory/missing-target.js +144 -0
  165. package/node_modules/@poe-code/safe-fs/dist/fs/mount/comparison.d.ts +19 -0
  166. package/node_modules/@poe-code/safe-fs/dist/fs/mount/comparison.js +118 -0
  167. package/node_modules/@poe-code/safe-fs/dist/fs/mount/identity.d.ts +6 -0
  168. package/node_modules/@poe-code/safe-fs/dist/fs/mount/identity.js +29 -0
  169. package/node_modules/@poe-code/safe-fs/dist/fs/mount/index.d.ts +74 -0
  170. package/node_modules/@poe-code/safe-fs/dist/fs/mount/index.js +1291 -0
  171. package/node_modules/@poe-code/safe-fs/dist/fs/object-authority.d.ts +27 -0
  172. package/node_modules/@poe-code/safe-fs/dist/fs/object-authority.js +287 -0
  173. package/node_modules/@poe-code/safe-fs/dist/fs/object-publication/index.d.ts +45 -0
  174. package/node_modules/@poe-code/safe-fs/dist/fs/object-publication/index.js +531 -0
  175. package/node_modules/@poe-code/safe-fs/dist/fs/overlay/index.d.ts +87 -0
  176. package/node_modules/@poe-code/safe-fs/dist/fs/overlay/index.js +1185 -0
  177. package/node_modules/@poe-code/safe-fs/dist/fs/overlay/memory-publication.d.ts +42 -0
  178. package/node_modules/@poe-code/safe-fs/dist/fs/overlay/memory-publication.js +558 -0
  179. package/node_modules/@poe-code/safe-fs/dist/fs/path-namespace.d.ts +4 -0
  180. package/node_modules/@poe-code/safe-fs/dist/fs/path-namespace.js +63 -0
  181. package/node_modules/@poe-code/safe-fs/dist/fs/quota/index.d.ts +12 -0
  182. package/node_modules/@poe-code/safe-fs/dist/fs/quota/index.js +520 -0
  183. package/node_modules/@poe-code/safe-fs/dist/fs/readonly/index.d.ts +37 -0
  184. package/node_modules/@poe-code/safe-fs/dist/fs/readonly/index.js +208 -0
  185. package/node_modules/@poe-code/safe-fs/dist/fs/real/allocation.d.ts +1 -0
  186. package/node_modules/@poe-code/safe-fs/dist/fs/real/allocation.js +8 -0
  187. package/node_modules/@poe-code/safe-fs/dist/fs/real/index.d.ts +105 -0
  188. package/node_modules/@poe-code/safe-fs/dist/fs/real/index.js +1259 -0
  189. package/node_modules/@poe-code/safe-fs/dist/fs/s3/authority.d.ts +7 -0
  190. package/node_modules/@poe-code/safe-fs/dist/fs/s3/authority.js +38 -0
  191. package/node_modules/@poe-code/safe-fs/dist/fs/s3/filesystem.d.ts +130 -0
  192. package/node_modules/@poe-code/safe-fs/dist/fs/s3/filesystem.js +1137 -0
  193. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/bytes.d.ts +1 -0
  194. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/bytes.js +9 -0
  195. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/index.d.ts +2 -0
  196. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/index.js +1 -0
  197. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/request-fetch.d.ts +15 -0
  198. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/request-fetch.js +74 -0
  199. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/request-node.d.ts +4 -0
  200. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/request-node.js +111 -0
  201. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/request.d.ts +17 -0
  202. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/request.js +89 -0
  203. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/signature.d.ts +20 -0
  204. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/signature.js +76 -0
  205. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/transport.d.ts +3 -0
  206. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/transport.js +478 -0
  207. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/types.d.ts +30 -0
  208. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/types.js +1 -0
  209. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/xml.d.ts +14 -0
  210. package/node_modules/@poe-code/safe-fs/dist/fs/s3/http/xml.js +192 -0
  211. package/node_modules/@poe-code/safe-fs/dist/fs/s3/index.d.ts +8 -0
  212. package/node_modules/@poe-code/safe-fs/dist/fs/s3/index.js +4 -0
  213. package/node_modules/@poe-code/safe-fs/dist/fs/s3/key-order.d.ts +2 -0
  214. package/node_modules/@poe-code/safe-fs/dist/fs/s3/key-order.js +11 -0
  215. package/node_modules/@poe-code/safe-fs/dist/fs/s3/manifest-admission.d.ts +8 -0
  216. package/node_modules/@poe-code/safe-fs/dist/fs/s3/manifest-admission.js +167 -0
  217. package/node_modules/@poe-code/safe-fs/dist/fs/s3/mock.d.ts +48 -0
  218. package/node_modules/@poe-code/safe-fs/dist/fs/s3/mock.js +249 -0
  219. package/node_modules/@poe-code/safe-fs/dist/fs/s3/namespace.d.ts +13 -0
  220. package/node_modules/@poe-code/safe-fs/dist/fs/s3/namespace.js +400 -0
  221. package/node_modules/@poe-code/safe-fs/dist/fs/s3/registry.d.ts +10 -0
  222. package/node_modules/@poe-code/safe-fs/dist/fs/s3/registry.js +73 -0
  223. package/node_modules/@poe-code/safe-fs/dist/fs/s3/transport.d.ts +103 -0
  224. package/node_modules/@poe-code/safe-fs/dist/fs/s3/transport.js +28 -0
  225. package/node_modules/@poe-code/safe-fs/dist/fs/scoped.d.ts +19 -0
  226. package/node_modules/@poe-code/safe-fs/dist/fs/scoped.js +663 -0
  227. package/node_modules/@poe-code/safe-fs/dist/fs/staging-ancestry.d.ts +8 -0
  228. package/node_modules/@poe-code/safe-fs/dist/fs/staging-ancestry.js +115 -0
  229. package/node_modules/@poe-code/safe-fs/dist/fs/staging-cleanup.d.ts +5 -0
  230. package/node_modules/@poe-code/safe-fs/dist/fs/staging-cleanup.js +63 -0
  231. package/node_modules/@poe-code/safe-fs/dist/fs/webdav/index.d.ts +2 -0
  232. package/node_modules/@poe-code/safe-fs/dist/fs/webdav/index.js +1 -0
  233. package/node_modules/@poe-code/safe-fs/dist/fs/webdav/resource-id.d.ts +18 -0
  234. package/node_modules/@poe-code/safe-fs/dist/fs/webdav/resource-id.js +109 -0
  235. package/node_modules/@poe-code/safe-fs/dist/fs/webdav/webdav.d.ts +141 -0
  236. package/node_modules/@poe-code/safe-fs/dist/fs/webdav/webdav.js +1377 -0
  237. package/node_modules/@poe-code/safe-fs/dist/fs/webdav/xml.d.ts +15 -0
  238. package/node_modules/@poe-code/safe-fs/dist/fs/webdav/xml.js +59 -0
  239. package/node_modules/@poe-code/safe-fs/dist/index.d.ts +25 -0
  240. package/node_modules/@poe-code/safe-fs/dist/index.js +21 -0
  241. package/node_modules/@poe-code/safe-fs/dist/native/fs-seek/linux-x64-glibc.node +0 -0
  242. package/node_modules/@poe-code/safe-fs/dist/native/fs-seek/loader.d.ts +5 -0
  243. package/node_modules/@poe-code/safe-fs/dist/native/fs-seek/loader.mjs +120 -0
  244. package/node_modules/@poe-code/safe-fs/dist/native/fs-seek/manifest.json +46 -0
  245. package/node_modules/@poe-code/safe-fs/dist/node/filesystem.d.ts +19 -0
  246. package/node_modules/@poe-code/safe-fs/dist/node/filesystem.js +30 -0
  247. package/node_modules/@poe-code/safe-fs/dist/node/host.d.ts +3 -0
  248. package/node_modules/@poe-code/safe-fs/dist/node/host.js +78 -0
  249. package/node_modules/@poe-code/safe-fs/dist/node/index.d.ts +3 -0
  250. package/node_modules/@poe-code/safe-fs/dist/node/index.js +2 -0
  251. package/node_modules/@poe-code/safe-fs/dist/node/native-seek-unavailable.d.ts +1 -0
  252. package/node_modules/@poe-code/safe-fs/dist/node/native-seek-unavailable.js +5 -0
  253. package/node_modules/@poe-code/safe-fs/dist/node/native-seek.d.ts +3 -0
  254. package/node_modules/@poe-code/safe-fs/dist/node/native-seek.js +54 -0
  255. package/node_modules/@poe-code/safe-fs/dist/node/stats.d.ts +1 -0
  256. package/node_modules/@poe-code/safe-fs/dist/node/stats.js +1 -0
  257. package/node_modules/@poe-code/safe-fs/dist/node/values.d.ts +1 -0
  258. package/node_modules/@poe-code/safe-fs/dist/node/values.js +1 -0
  259. package/node_modules/@poe-code/safe-fs/dist/node-host.d.ts +1 -0
  260. package/node_modules/@poe-code/safe-fs/dist/node-host.js +1 -0
  261. package/node_modules/@poe-code/safe-fs/dist/node-unavailable.d.ts +1 -0
  262. package/node_modules/@poe-code/safe-fs/dist/node-unavailable.js +1 -0
  263. package/node_modules/@poe-code/safe-fs/dist/package.json +29 -0
  264. package/node_modules/@poe-code/safe-fs/dist/platform/browser-path.d.ts +1 -0
  265. package/node_modules/@poe-code/safe-fs/dist/platform/browser-path.js +1 -0
  266. package/node_modules/@poe-code/safe-fs/dist/platform/browser.d.ts +26 -0
  267. package/node_modules/@poe-code/safe-fs/dist/platform/browser.js +58 -0
  268. package/node_modules/@poe-code/safe-fs/dist/platform/node-path.d.ts +1 -0
  269. package/node_modules/@poe-code/safe-fs/dist/platform/node-path.js +1 -0
  270. package/node_modules/@poe-code/safe-fs/dist/platform/node.d.ts +26 -0
  271. package/node_modules/@poe-code/safe-fs/dist/platform/node.js +64 -0
  272. package/node_modules/@poe-code/safe-fs/dist/platform/transport-budget.d.ts +9 -0
  273. package/node_modules/@poe-code/safe-fs/dist/platform/transport-budget.js +17 -0
  274. package/node_modules/@poe-code/safe-fs/dist/python/emscripten.d.ts +15 -0
  275. package/node_modules/@poe-code/safe-fs/dist/python/emscripten.js +357 -0
  276. package/node_modules/@poe-code/safe-fs/dist/python/filesystem.d.ts +51 -0
  277. package/node_modules/@poe-code/safe-fs/dist/python/filesystem.js +243 -0
  278. package/node_modules/@poe-code/safe-fs/dist/python/flags.d.ts +3 -0
  279. package/node_modules/@poe-code/safe-fs/dist/python/flags.js +14 -0
  280. package/node_modules/@poe-code/safe-fs/dist/python/index.d.ts +9 -0
  281. package/node_modules/@poe-code/safe-fs/dist/python/index.js +5 -0
  282. package/node_modules/@poe-code/safe-fs/dist/python/native.d.ts +18 -0
  283. package/node_modules/@poe-code/safe-fs/dist/python/native.js +446 -0
  284. package/node_modules/@poe-code/safe-fs/dist/python/request.d.ts +2 -0
  285. package/node_modules/@poe-code/safe-fs/dist/python/request.js +61 -0
  286. package/node_modules/@poe-code/safe-fs/dist/python/stat.d.ts +8 -0
  287. package/node_modules/@poe-code/safe-fs/dist/python/stat.js +34 -0
  288. package/node_modules/@poe-code/safe-fs/dist/runtime-core.d.ts +27 -0
  289. package/node_modules/@poe-code/safe-fs/dist/runtime-core.js +57 -0
  290. package/node_modules/@poe-code/safe-fs/dist/testing/atomic-filesystem.d.ts +16 -0
  291. package/node_modules/@poe-code/safe-fs/dist/testing/atomic-filesystem.js +496 -0
  292. package/node_modules/@poe-code/safe-fs/dist/testing/object-io-control.d.ts +23 -0
  293. package/node_modules/@poe-code/safe-fs/dist/testing/object-io-control.js +39 -0
  294. package/node_modules/@poe-code/safe-fs/dist/testing/object-io-metrics.d.ts +31 -0
  295. package/node_modules/@poe-code/safe-fs/dist/testing/object-io-metrics.js +143 -0
  296. package/node_modules/@poe-code/safe-fs/dist/testing/object-publication.d.ts +19 -0
  297. package/node_modules/@poe-code/safe-fs/dist/testing/object-publication.js +209 -0
  298. package/node_modules/@poe-code/safe-fs/dist/xml.d.ts +1 -0
  299. package/node_modules/@poe-code/safe-fs/dist/xml.js +1 -0
  300. package/node_modules/@poe-code/safe-fs/package.json +189 -0
  301. package/node_modules/@poe-code/task-list/README.md +2 -0
  302. package/node_modules/@poe-code/task-list/dist/backends/gh-issues-client.d.ts +1 -1
  303. package/node_modules/@poe-code/task-list/dist/backends/gh-issues-client.js +11 -4
  304. package/node_modules/@poe-code/task-list/dist/backends/markdown-dir.js +2 -2
  305. package/node_modules/@poe-code/task-list/dist/backends/utils.js +5 -7
  306. package/node_modules/@poe-code/task-list/dist/backends/yaml-file.js +1 -1
  307. package/node_modules/@poe-code/task-list/dist/default-host.d.ts +2 -0
  308. package/node_modules/@poe-code/task-list/dist/default-host.js +2 -0
  309. package/node_modules/@poe-code/task-list/dist/default-host.workerd.d.ts +4 -0
  310. package/node_modules/@poe-code/task-list/dist/default-host.workerd.js +6 -0
  311. package/node_modules/@poe-code/task-list/dist/filesystem.d.ts +3 -0
  312. package/node_modules/@poe-code/task-list/dist/filesystem.js +32 -0
  313. package/node_modules/@poe-code/task-list/dist/move.js +3 -3
  314. package/node_modules/@poe-code/task-list/dist/open.js +2 -5
  315. package/node_modules/@poe-code/task-list/dist/paths.d.ts +12 -0
  316. package/node_modules/@poe-code/task-list/dist/paths.js +7 -0
  317. package/node_modules/@poe-code/task-list/dist/types.d.ts +6 -5
  318. package/node_modules/@poe-code/task-list/package.json +9 -0
  319. package/node_modules/@poe-code/terminal-text/LICENSE +21 -0
  320. package/node_modules/@poe-code/terminal-text/README.md +12 -0
  321. package/node_modules/@poe-code/terminal-text/dist/index.d.ts +2 -0
  322. package/node_modules/@poe-code/terminal-text/dist/index.js +20 -0
  323. package/node_modules/@poe-code/terminal-text/package.json +22 -0
  324. package/node_modules/@poe-code/xml-ast/LICENSE +21 -0
  325. package/node_modules/@poe-code/xml-ast/README.md +28 -0
  326. package/node_modules/@poe-code/xml-ast/dist/index.d.ts +47 -0
  327. package/node_modules/@poe-code/xml-ast/dist/index.js +635 -0
  328. package/node_modules/@poe-code/xml-ast/package.json +25 -0
  329. package/node_modules/auth-store/README.md +35 -0
  330. package/node_modules/auth-store/dist/index.browser.d.ts +4 -0
  331. package/node_modules/auth-store/dist/index.browser.js +2 -0
  332. package/node_modules/auth-store/dist/provider-store.d.ts +1 -1
  333. package/node_modules/auth-store/dist/safe-fs-secret-store.d.ts +21 -0
  334. package/node_modules/auth-store/dist/safe-fs-secret-store.js +119 -0
  335. package/node_modules/auth-store/dist/secret-store.d.ts +12 -0
  336. package/node_modules/auth-store/dist/secret-store.js +1 -0
  337. package/node_modules/auth-store/dist/transaction-lock.d.ts +2 -4
  338. package/node_modules/auth-store/dist/types.d.ts +2 -9
  339. package/node_modules/auth-store/package.json +16 -2
  340. package/node_modules/tiny-http-mcp-server/dist/composition.json +16 -1
  341. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/README.md +25 -0
  342. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/authorization-state.js +4 -4
  343. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/default-oauth-client-provider.js +6 -40
  344. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/oauth-form.d.ts +10 -0
  345. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/oauth-form.js +20 -0
  346. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/pkce.js +4 -3
  347. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/register-client.d.ts +14 -0
  348. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/register-client.js +53 -0
  349. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/resumable.d.ts +16 -2
  350. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/resumable.js +29 -9
  351. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/revoke-token.d.ts +12 -0
  352. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/revoke-token.js +23 -0
  353. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/token-endpoint.js +6 -19
  354. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/http-fetch.js +1 -1
  355. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/index.browser.d.ts +6 -2
  356. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/index.browser.js +5 -1
  357. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/index.d.ts +5 -2
  358. package/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/index.js +4 -1
  359. package/node_modules/tiny-http-mcp-server/package.json +4 -4
  360. package/node_modules/tiny-mcp-client/README.md +2 -0
  361. package/node_modules/tiny-mcp-client/dist/index.browser.d.ts +25 -23
  362. package/node_modules/tiny-mcp-client/dist/index.browser.js +116 -1
  363. package/node_modules/tiny-mcp-client/dist/index.d.ts +25 -23
  364. package/node_modules/tiny-mcp-client/dist/index.js +1034 -561
  365. package/node_modules/tiny-mcp-client/package.json +15 -0
  366. package/node_modules/tiny-stdio-mcp-server/dist/composition.json +1 -1
  367. package/node_modules/toolcraft-design/dist/components/table.js +6 -0
  368. package/node_modules/toolcraft-design/dist/escape-terminal-text.d.ts +1 -2
  369. package/node_modules/toolcraft-design/dist/escape-terminal-text.js +1 -20
  370. package/node_modules/toolcraft-design/dist/terminal-markdown/parser/frontmatter.js +2 -1
  371. package/node_modules/toolcraft-design/dist/terminal-markdown/parser.js +2 -1
  372. package/node_modules/toolcraft-schema/dist/json-schema/utils.js +3 -0
  373. package/node_modules/toolcraft-schema/package.json +1 -1
  374. package/package.json +32 -7
@@ -0,0 +1 @@
1
+ export declare function concatBytes(chunks: readonly Uint8Array[], length: number): Uint8Array;
@@ -0,0 +1,9 @@
1
+ export function concatBytes(chunks, length) {
2
+ const result = new Uint8Array(length);
3
+ let offset = 0;
4
+ for (const chunk of chunks) {
5
+ result.set(chunk, offset);
6
+ offset += chunk.length;
7
+ }
8
+ return result;
9
+ }
@@ -0,0 +1,2 @@
1
+ export { createS3HttpTransport } from "./transport.js";
2
+ export type { S3HttpCredentials, S3HttpCredentialProvider, S3HttpRequestFactory, S3HttpTransportOptions } from "./types.js";
@@ -0,0 +1 @@
1
+ export { createS3HttpTransport } from "./transport.js";
@@ -0,0 +1,15 @@
1
+ import type { RequestScope, WireResponse } from "./request.js";
2
+ export type S3HttpRequestFactory = never;
3
+ interface FetchRequestOptions {
4
+ readonly protocol?: string | undefined;
5
+ readonly hostname?: string | undefined;
6
+ readonly port?: string | number | undefined;
7
+ readonly path?: string | undefined;
8
+ readonly method?: string | undefined;
9
+ readonly headers?: Record<string, string> | undefined;
10
+ readonly agent?: false;
11
+ readonly maxHeaderSize?: number;
12
+ readonly rejectUnauthorized?: true;
13
+ }
14
+ export declare function sendRequest(options: FetchRequestOptions, body: Uint8Array, scope: RequestScope, factory?: S3HttpRequestFactory): Promise<WireResponse>;
15
+ export {};
@@ -0,0 +1,74 @@
1
+ import { S3ServiceError } from "../transport.js";
2
+ import { abortable } from "./request.js";
3
+ export async function sendRequest(options, body, scope, factory) {
4
+ const { signal } = scope;
5
+ signal.throwIfAborted();
6
+ if (factory)
7
+ throw new S3ServiceError("InvalidArgument", 400, "Node request factories are unavailable in fetch runtimes");
8
+ const hostname = String(options.hostname);
9
+ const authority = `${hostname.includes(":") ? `[${hostname}]` : hostname}${options.port ? `:${options.port}` : ""}`;
10
+ const target = `${options.protocol}//${authority}${options.path}`;
11
+ const url = new URL(target);
12
+ // Fetch normalizes dot segments. Never sign one key and send another.
13
+ if (`${url.pathname}${url.search}` !== options.path)
14
+ throw new S3ServiceError("InvalidArgument", 400, "object key cannot be represented by fetch without normalization");
15
+ const response = await abortable(fetch(target, {
16
+ method: options.method, headers: options.headers,
17
+ ...(options.method === "PUT" ? { body: new Uint8Array(body) } : {}),
18
+ signal, redirect: "manual",
19
+ }), signal);
20
+ const reader = response.body?.getReader();
21
+ let closed = false;
22
+ const close = () => {
23
+ if (closed)
24
+ return;
25
+ closed = true;
26
+ signal.removeEventListener("abort", close);
27
+ scope.finish();
28
+ void reader?.cancel().catch(() => { });
29
+ };
30
+ signal.addEventListener("abort", close, { once: true });
31
+ if (signal.aborted) {
32
+ close();
33
+ signal.throwIfAborted();
34
+ }
35
+ const headersDistinct = Object.create(null);
36
+ response.headers.forEach((value, name) => { headersDistinct[name] = [value]; });
37
+ let claimed = false;
38
+ return {
39
+ message: { statusCode: response.status, headersDistinct }, close,
40
+ body: {
41
+ [Symbol.asyncIterator]() {
42
+ if (claimed)
43
+ throw new S3ServiceError("InvalidResponse", 502, "response body is single-use");
44
+ claimed = true;
45
+ return {
46
+ async next() {
47
+ try {
48
+ signal.throwIfAborted();
49
+ if (closed || !reader) {
50
+ close();
51
+ return { done: true, value: undefined };
52
+ }
53
+ const result = await abortable(reader.read(), signal);
54
+ signal.throwIfAborted();
55
+ if (result.done) {
56
+ close();
57
+ return { done: true, value: undefined };
58
+ }
59
+ return { done: false, value: result.value };
60
+ }
61
+ catch (error) {
62
+ close();
63
+ throw error;
64
+ }
65
+ },
66
+ async return() {
67
+ close();
68
+ return { done: true, value: undefined };
69
+ },
70
+ };
71
+ },
72
+ },
73
+ };
74
+ }
@@ -0,0 +1,4 @@
1
+ import type { ClientRequest, IncomingMessage, RequestOptions } from "node:http";
2
+ import type { RequestScope, WireResponse } from "./request.js";
3
+ export type S3HttpRequestFactory = (options: RequestOptions, onResponse: (response: IncomingMessage) => void) => ClientRequest;
4
+ export declare function sendRequest(options: RequestOptions, body: Uint8Array, scope: RequestScope, factory?: S3HttpRequestFactory): Promise<WireResponse>;
@@ -0,0 +1,111 @@
1
+ import { once } from "node:events";
2
+ import { request as httpRequest } from "node:http";
3
+ import { request as httpsRequest } from "node:https";
4
+ import { S3ServiceError } from "../transport.js";
5
+ import { abortable } from "./request.js";
6
+ export async function sendRequest(options, body, scope, factory) {
7
+ const signal = scope.signal;
8
+ signal.throwIfAborted();
9
+ return new Promise((resolve, reject) => {
10
+ let request;
11
+ let response;
12
+ let headersReceived = false;
13
+ let finished = false;
14
+ const cleanup = () => {
15
+ signal.removeEventListener("abort", abort);
16
+ scope.finish();
17
+ };
18
+ const close = () => {
19
+ if (finished)
20
+ return;
21
+ finished = true;
22
+ cleanup();
23
+ response?.destroy();
24
+ request?.destroy();
25
+ };
26
+ const fail = (error) => {
27
+ reject(signal.aborted ? signal.reason : error);
28
+ close();
29
+ };
30
+ const abort = () => fail(signal.reason);
31
+ signal.addEventListener("abort", abort, { once: true });
32
+ try {
33
+ const create = factory ?? (options.protocol === "https:" ? httpsRequest : httpRequest);
34
+ request = create(options, message => {
35
+ response = message;
36
+ message.on("error", () => { });
37
+ if (finished || signal.aborted) {
38
+ close();
39
+ message.destroy();
40
+ return;
41
+ }
42
+ headersReceived = true;
43
+ message.once("close", cleanup);
44
+ let claimed = false;
45
+ const source = {
46
+ [Symbol.asyncIterator]() {
47
+ if (claimed)
48
+ throw new S3ServiceError("InvalidResponse", 502, "response body is single-use");
49
+ claimed = true;
50
+ const iterator = message[Symbol.asyncIterator]();
51
+ let ended = false;
52
+ return {
53
+ async next() {
54
+ try {
55
+ signal.throwIfAborted();
56
+ if (ended)
57
+ return { done: true, value: undefined };
58
+ const result = await abortable(iterator.next(), signal);
59
+ signal.throwIfAborted();
60
+ if (result.done) {
61
+ ended = true;
62
+ if (!message.complete)
63
+ throw new S3ServiceError("InvalidResponse", 502, "incomplete HTTP response");
64
+ close();
65
+ return { done: true, value: undefined };
66
+ }
67
+ if (!(result.value instanceof Uint8Array))
68
+ throw new S3ServiceError("InvalidResponse", 502, "nonbinary HTTP body");
69
+ return { done: false, value: new Uint8Array(result.value) };
70
+ }
71
+ catch (error) {
72
+ ended = true;
73
+ close();
74
+ throw signal.aborted ? signal.reason : error;
75
+ }
76
+ },
77
+ async return() {
78
+ ended = true;
79
+ close();
80
+ return { done: true, value: undefined };
81
+ },
82
+ };
83
+ },
84
+ };
85
+ resolve({ message, body: source, close });
86
+ });
87
+ request.on("error", fail);
88
+ request.once("close", () => {
89
+ if (!headersReceived)
90
+ fail(new S3ServiceError("InvalidResponse", 502, "connection closed before response headers"));
91
+ });
92
+ if (signal.aborted || finished) {
93
+ abort();
94
+ request.destroy();
95
+ return;
96
+ }
97
+ void (async () => {
98
+ for (let offset = 0; offset < body.length; offset += 64 * 1024) {
99
+ signal.throwIfAborted();
100
+ if (!request.write(body.subarray(offset, offset + 64 * 1024)))
101
+ await once(request, "drain", { signal });
102
+ }
103
+ signal.throwIfAborted();
104
+ request.end();
105
+ })().catch(fail);
106
+ }
107
+ catch (error) {
108
+ fail(error);
109
+ }
110
+ });
111
+ }
@@ -0,0 +1,17 @@
1
+ export { sendRequest } from "#safe-fs-s3-request";
2
+ export interface RequestScope {
3
+ readonly signal: AbortSignal;
4
+ readonly finish: () => void;
5
+ }
6
+ export declare function scopeFor(signal: AbortSignal | undefined, timeout: number | undefined): RequestScope;
7
+ export declare function abortable<Value>(pending: Promise<Value>, signal: AbortSignal): Promise<Value>;
8
+ export interface WireResponse {
9
+ readonly message: {
10
+ readonly statusCode?: number | undefined;
11
+ readonly headersDistinct: Record<string, string[] | undefined>;
12
+ };
13
+ readonly body: AsyncIterable<Uint8Array>;
14
+ readonly close: () => void;
15
+ }
16
+ export declare function limitedBody(response: WireResponse, maximum: number, expected?: number): AsyncIterable<Uint8Array>;
17
+ export declare function collect(response: WireResponse, maximum: number, expected?: number): Promise<Uint8Array>;
@@ -0,0 +1,89 @@
1
+ import { concatBytes } from "./bytes.js";
2
+ import { S3ServiceError } from "../transport.js";
3
+ export { sendRequest } from "#safe-fs-s3-request";
4
+ export function scopeFor(signal, timeout) {
5
+ const controller = new AbortController();
6
+ const abort = () => controller.abort(signal?.reason);
7
+ signal?.addEventListener("abort", abort, { once: true });
8
+ if (signal?.aborted)
9
+ abort();
10
+ const timer = timeout === undefined ? undefined : setTimeout(() => controller.abort(new S3ServiceError("RequestTimeout", 408)), timeout);
11
+ return {
12
+ signal: controller.signal,
13
+ finish: () => { clearTimeout(timer); signal?.removeEventListener("abort", abort); },
14
+ };
15
+ }
16
+ export async function abortable(pending, signal) {
17
+ let abort;
18
+ try {
19
+ return await new Promise((resolve, reject) => {
20
+ abort = () => reject(signal.reason);
21
+ signal.addEventListener("abort", abort, { once: true });
22
+ pending.then(resolve, reject);
23
+ if (signal.aborted)
24
+ abort();
25
+ });
26
+ }
27
+ finally {
28
+ if (abort)
29
+ signal.removeEventListener("abort", abort);
30
+ }
31
+ }
32
+ export function limitedBody(response, maximum, expected) {
33
+ if (expected !== undefined && expected > maximum) {
34
+ response.close();
35
+ throw new S3ServiceError("EntityTooLarge", 413, "response exceeds byte limit");
36
+ }
37
+ let claimed = false;
38
+ return {
39
+ [Symbol.asyncIterator]() {
40
+ if (claimed)
41
+ throw new S3ServiceError("InvalidResponse", 502, "response body is single-use");
42
+ claimed = true;
43
+ const iterator = response.body[Symbol.asyncIterator]();
44
+ let count = 0;
45
+ return {
46
+ async next() {
47
+ try {
48
+ const result = await iterator.next();
49
+ if (result.done) {
50
+ if (expected !== undefined && count !== expected)
51
+ throw new S3ServiceError("InvalidResponse", 502, "response content length mismatch");
52
+ }
53
+ else {
54
+ count += result.value.length;
55
+ if (count > maximum)
56
+ throw new S3ServiceError("EntityTooLarge", 413, "response exceeds byte limit");
57
+ if (expected !== undefined && count > expected)
58
+ throw new S3ServiceError("InvalidResponse", 502, "response content length mismatch");
59
+ }
60
+ return result;
61
+ }
62
+ catch (error) {
63
+ response.close();
64
+ throw error;
65
+ }
66
+ },
67
+ async return() {
68
+ response.close();
69
+ await iterator.return?.();
70
+ return { done: true, value: undefined };
71
+ },
72
+ };
73
+ },
74
+ };
75
+ }
76
+ export async function collect(response, maximum, expected) {
77
+ const chunks = [];
78
+ let count = 0;
79
+ try {
80
+ for await (const chunk of limitedBody(response, maximum, expected)) {
81
+ chunks.push(chunk);
82
+ count += chunk.length;
83
+ }
84
+ return concatBytes(chunks, count);
85
+ }
86
+ finally {
87
+ response.close();
88
+ }
89
+ }
@@ -0,0 +1,20 @@
1
+ import type { S3HttpCredentials } from "./types.js";
2
+ export declare function invalid(message: string): never;
3
+ export declare function uriEncode(value: string, preserveSlash?: boolean): string;
4
+ export declare function canonicalQuery(entries: readonly (readonly [string, string])[]): string;
5
+ export declare function sha256(bytes: Uint8Array | string): string;
6
+ export declare function headerValue(value: string): string;
7
+ export declare function signRequest(input: {
8
+ readonly method: string;
9
+ readonly path: string;
10
+ readonly query: string;
11
+ readonly headers: Readonly<Record<string, string>>;
12
+ readonly body: Uint8Array;
13
+ readonly region: string;
14
+ readonly credentials: S3HttpCredentials;
15
+ readonly date: Date;
16
+ }): {
17
+ readonly headers: Record<string, string>;
18
+ readonly canonicalRequest: string;
19
+ readonly signature: string;
20
+ };
@@ -0,0 +1,76 @@
1
+ import { sha256 as hash } from "@noble/hashes/sha2.js";
2
+ import { hmac } from "@noble/hashes/hmac.js";
3
+ import { bytesToHex, utf8ToBytes } from "@noble/hashes/utils.js";
4
+ import { S3ServiceError } from "../transport.js";
5
+ export function invalid(message) {
6
+ throw new S3ServiceError("InvalidArgument", 400, message);
7
+ }
8
+ export function uriEncode(value, preserveSlash = false) {
9
+ if (typeof value !== "string")
10
+ invalid("expected a UTF-8 string");
11
+ try {
12
+ const encoded = encodeURIComponent(value).replace(/[!'()*]/g, character => `%${character.charCodeAt(0).toString(16).toUpperCase()}`);
13
+ return preserveSlash ? encoded.replace(/%2F/g, "/") : encoded;
14
+ }
15
+ catch {
16
+ return invalid("invalid Unicode string");
17
+ }
18
+ }
19
+ export function canonicalQuery(entries) {
20
+ return entries.map(([name, value]) => [uriEncode(name), uriEncode(value)])
21
+ .sort(([leftName, leftValue], [rightName, rightValue]) => leftName < rightName ? -1 : leftName > rightName ? 1 : leftValue < rightValue ? -1 : leftValue > rightValue ? 1 : 0)
22
+ .map(([name, value]) => `${name}=${value}`).join("&");
23
+ }
24
+ export function sha256(bytes) {
25
+ return bytesToHex(hash(typeof bytes === "string" ? utf8ToBytes(bytes) : bytes));
26
+ }
27
+ export function headerValue(value) {
28
+ if (typeof value !== "string" || /[^\x20-\x7e\t]/.test(value))
29
+ invalid("header values must be printable ASCII without line breaks");
30
+ return value.trim().replace(/[ \t]+/g, " ");
31
+ }
32
+ export function signRequest(input) {
33
+ const credentials = input.credentials;
34
+ if (!credentials || typeof credentials.accessKeyId !== "string" || !/^[A-Za-z0-9_-]+$/.test(credentials.accessKeyId)
35
+ || typeof credentials.secretAccessKey !== "string" || credentials.secretAccessKey.length === 0
36
+ || credentials.secretAccessKey.length > 4096)
37
+ invalid("explicit signing credentials are required");
38
+ if (!/^[a-z0-9-]{1,64}$/.test(input.region))
39
+ invalid("invalid signing region");
40
+ if (!(input.date instanceof Date) || !Number.isFinite(input.date.getTime())
41
+ || input.date.getUTCFullYear() < 1970 || input.date.getUTCFullYear() > 9999)
42
+ invalid("invalid signing clock");
43
+ const timestamp = input.date.toISOString().replace(/[:-]|\.\d{3}/g, "");
44
+ const date = timestamp.slice(0, 8);
45
+ const headers = Object.create(null);
46
+ for (const [name, value] of Object.entries(input.headers)) {
47
+ const lower = name.toLowerCase();
48
+ if (!/^[a-z0-9-]+$/.test(lower) || lower in headers)
49
+ invalid("invalid or duplicate signing header");
50
+ headers[lower] = headerValue(value);
51
+ }
52
+ if (!headers.host)
53
+ invalid("host is required for signing");
54
+ const payloadHash = sha256(input.body);
55
+ headers["x-amz-date"] = timestamp;
56
+ headers["x-amz-content-sha256"] = payloadHash;
57
+ if (credentials.sessionToken !== undefined) {
58
+ headers["x-amz-security-token"] = headerValue(credentials.sessionToken);
59
+ if (!headers["x-amz-security-token"])
60
+ invalid("session token must not be empty");
61
+ }
62
+ const names = Object.keys(headers).sort();
63
+ const signedHeaders = names.join(";");
64
+ const canonicalRequest = [input.method, input.path, input.query,
65
+ names.map(name => `${name}:${headers[name]}\n`).join(""), signedHeaders, payloadHash].join("\n");
66
+ const scope = `${date}/${input.region}/s3/aws4_request`;
67
+ const stringToSign = ["AWS4-HMAC-SHA256", timestamp, scope, sha256(canonicalRequest)].join("\n");
68
+ let key = hmac(hash, utf8ToBytes(`AWS4${credentials.secretAccessKey}`), utf8ToBytes(date));
69
+ for (const part of [input.region, "s3", "aws4_request"])
70
+ key = hmac(hash, key, utf8ToBytes(part));
71
+ const signature = bytesToHex(hmac(hash, key, utf8ToBytes(stringToSign)));
72
+ headers.authorization = `AWS4-HMAC-SHA256 Credential=${credentials.accessKeyId}/${scope}, SignedHeaders=${signedHeaders}, Signature=${signature}`;
73
+ if (Object.entries(headers).reduce((size, [name, value]) => size + name.length + value.length + 4, 0) > 16 * 1024)
74
+ invalid("request headers exceed 16 KiB");
75
+ return { headers, canonicalRequest, signature };
76
+ }
@@ -0,0 +1,3 @@
1
+ import type { S3Transport } from "../transport.js";
2
+ import type { S3HttpTransportOptions } from "./types.js";
3
+ export declare function createS3HttpTransport(options: S3HttpTransportOptions): S3Transport;