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,161 @@
1
+ /**
2
+ * HKDF (RFC 5869): extract + expand in one step.
3
+ * See {@link https://soatok.blog/2021/11/17/understanding-hkdf/}.
4
+ * @module
5
+ */
6
+ import { hmac, type _HMAC } from './hmac.ts';
7
+ import { abytes, ahash, anumber, type CHash, clean, type TArg, type TRet } from './utils.ts';
8
+
9
+ /**
10
+ * HKDF-extract from spec. Less important part. `HKDF-Extract(IKM, salt) -> PRK`
11
+ * Arguments position differs from spec (IKM is first one, since it is not optional)
12
+ * Local validation only checks `hash`; `ikm` / `salt` byte validation is delegated to `hmac()`.
13
+ * @param hash - hash function that would be used (e.g. sha256)
14
+ * @param ikm - input keying material, the initial key
15
+ * @param salt - optional salt value (a non-secret random value)
16
+ * @returns Pseudorandom key derived from input keying material.
17
+ * @example
18
+ * Run the HKDF extract step.
19
+ * ```ts
20
+ * import { extract } from '@noble/hashes/hkdf.js';
21
+ * import { sha256 } from '@noble/hashes/sha2.js';
22
+ * extract(sha256, new Uint8Array([1, 2, 3]), new Uint8Array([4, 5, 6]));
23
+ * ```
24
+ */
25
+ export function extract(
26
+ hash: TArg<CHash>,
27
+ ikm: TArg<Uint8Array>,
28
+ salt?: TArg<Uint8Array>
29
+ ): TRet<Uint8Array> {
30
+ ahash(hash);
31
+ // NOTE: some libraries treat zero-length array as 'not provided';
32
+ // we don't, since we have undefined as 'not provided'
33
+ // https://github.com/RustCrypto/KDFs/issues/15
34
+ if (salt === undefined) salt = new Uint8Array(hash.outputLen);
35
+ return hmac(hash, salt, ikm);
36
+ }
37
+
38
+ // Shared mutable scratch byte for the RFC 5869 block counter `N`.
39
+ // Safe to reuse because `expand()` is synchronous and resets it with `clean(...)` before returning.
40
+ const HKDF_COUNTER = /* @__PURE__ */ Uint8Array.of(0);
41
+ // Shared RFC 5869 empty string for both `info === undefined` and the first-block `T(0)` input.
42
+ const EMPTY_BUFFER = /* @__PURE__ */ Uint8Array.of();
43
+
44
+ /**
45
+ * HKDF-expand from the spec. The most important part. `HKDF-Expand(PRK, info, L) -> OKM`
46
+ * @param hash - hash function that would be used (e.g. sha256)
47
+ * @param prk - a pseudorandom key of at least HashLen octets
48
+ * (usually, the output from the extract step)
49
+ * @param info - optional context and application specific information (can be a zero-length string)
50
+ * @param length - length of output keying material in bytes.
51
+ * RFC 5869 §2.3 allows `0..255*HashLen`, so `0` returns an empty OKM.
52
+ * @param _recycled - Internal destroyed extract hashes owned by the combined `hkdf()` call.
53
+ * @returns Output keying material with the requested length.
54
+ * @throws If the requested output length exceeds the HKDF limit
55
+ * for the selected hash. {@link Error}
56
+ * @example
57
+ * Run the HKDF expand step.
58
+ * ```ts
59
+ * import { expand } from '@noble/hashes/hkdf.js';
60
+ * import { sha256 } from '@noble/hashes/sha2.js';
61
+ * expand(sha256, new Uint8Array(32), new Uint8Array([1, 2, 3]), 16);
62
+ * ```
63
+ */
64
+ export function expand(
65
+ hash: TArg<CHash>,
66
+ prk: TArg<Uint8Array>,
67
+ info?: TArg<Uint8Array>,
68
+ length: number = 32,
69
+ _recycled?: _HMAC<any>
70
+ ): TRet<Uint8Array> {
71
+ ahash(hash);
72
+ anumber(length, 'length');
73
+ abytes(prk, undefined, 'prk');
74
+ const olen = hash.outputLen;
75
+ // RFC 5869 §2.3: PRK is "a pseudorandom key of at least HashLen octets".
76
+ if (prk.length < olen) throw new Error('"prk" must be at least HashLen octets');
77
+ // RFC 5869 §2.3 only bounds `L` by `<= 255*HashLen`; `L=0` is valid and yields empty OKM.
78
+ if (length > 255 * olen) throw new Error('Length must be <= 255*HashLen');
79
+ const blocks = Math.ceil(length / olen);
80
+ if (info === undefined) info = EMPTY_BUFFER;
81
+ else abytes(info, undefined, 'info');
82
+ if (!blocks) {
83
+ if (_recycled) clean(prk); // Full hkdf() owns this intermediate PRK.
84
+ return new Uint8Array() as TRet<Uint8Array>;
85
+ }
86
+ // first L(ength) octets of T
87
+ // The private PRK can become both T and a one-block result after HMAC consumes the key.
88
+ const okm = _recycled && blocks === 1 ? prk : new Uint8Array(blocks * olen);
89
+ const { iHash, oHash } = hmac.create(hash, prk);
90
+ // Driving them directly also skips `_HMAC.digestInto`'s per-digest destroy.
91
+ const T = _recycled ? prk : new Uint8Array(olen);
92
+ // Full hkdf() donates one destroyed extract hash; standalone creates one alternating worker.
93
+ const worker = blocks > 1 ? _recycled?.iHash || hash.create() : undefined;
94
+ for (let counter = 0; counter < blocks - 1; counter++) {
95
+ HKDF_COUNTER[0] = counter + 1;
96
+ const iWork = iHash._cloneInto(worker);
97
+ // T(0) = empty string (zero length)
98
+ // T(N) = HMAC-Hash(PRK, T(N-1) | info | N)
99
+ if (counter) iWork.update(T);
100
+ iWork.update(info).update(HKDF_COUNTER).digestInto(T);
101
+ oHash._cloneInto(worker).update(T).digestInto(T);
102
+ okm.set(T, olen * counter);
103
+ }
104
+ // Midstates are key-equivalent: they allow computing HMAC(prk, ...) for any message.
105
+ HKDF_COUNTER[0] = blocks; // Final block consumes them; retain worker for cleanup.
106
+ if (blocks > 1) iHash.update(T);
107
+ iHash.update(info).update(HKDF_COUNTER).digestInto(T);
108
+ oHash.update(T).digestInto(T);
109
+ okm.set(T, olen * (blocks - 1));
110
+ iHash.destroy(); // Raw digests may leave key-derived base/worker state; wipe all explicitly.
111
+ oHash.destroy();
112
+ worker?.destroy();
113
+ if (T !== okm) clean(T); // Wipe private T/PRK; standalone preserves caller-owned PRK.
114
+ clean(HKDF_COUNTER);
115
+ // Exact fit: return without the extra copy.
116
+ if (length === okm.length) return okm as TRet<Uint8Array>;
117
+ // Copy the requested prefix, then wipe the full buffer: its tail holds
118
+ // up to HashLen-1 bytes of derived key material past `length`.
119
+ const res = okm.slice(0, length);
120
+ clean(okm);
121
+ return res as TRet<Uint8Array>;
122
+ }
123
+
124
+ /**
125
+ * HKDF (RFC 5869): derive keys from an initial input.
126
+ * Combines hkdf_extract + hkdf_expand in one step
127
+ * @param hash - hash function that would be used (e.g. sha256)
128
+ * @param ikm - input keying material, the initial key
129
+ * @param salt - optional salt value (a non-secret random value)
130
+ * @param info - optional context and application specific information bytes
131
+ * @param length - length of output keying material in bytes.
132
+ * RFC 5869 §2.3 allows `0..255*HashLen`, so `0` returns an empty OKM.
133
+ * @returns Output keying material derived from the input key.
134
+ * @throws If the requested output length exceeds the HKDF limit
135
+ * for the selected hash. {@link Error}
136
+ * @example
137
+ * HKDF (RFC 5869): derive keys from an initial input.
138
+ * ```ts
139
+ * import { hkdf } from '@noble/hashes/hkdf.js';
140
+ * import { sha256 } from '@noble/hashes/sha2.js';
141
+ * import { randomBytes, utf8ToBytes } from '@noble/hashes/utils.js';
142
+ * const inputKey = randomBytes(32);
143
+ * const salt = randomBytes(32);
144
+ * const info = utf8ToBytes('application-key');
145
+ * const okm = hkdf(sha256, inputKey, salt, info, 32);
146
+ * ```
147
+ */
148
+ export const hkdf = (
149
+ hash: TArg<CHash>,
150
+ ikm: TArg<Uint8Array>,
151
+ salt: TArg<Uint8Array | undefined>,
152
+ info: TArg<Uint8Array | undefined>,
153
+ length: number
154
+ ): TRet<Uint8Array> => {
155
+ ahash(hash);
156
+ if (salt === undefined) salt = new Uint8Array(hash.outputLen);
157
+ const HMAC = hmac.create(hash, salt).update(ikm);
158
+ // The intermediate PRK is secret key material; wipe it instead of
159
+ // leaving it for GC.
160
+ return expand(hash, HMAC.digest(), info, length, HMAC); // expand() owns and consumes it.
161
+ };
@@ -0,0 +1,130 @@
1
+ /**
2
+ * HMAC: RFC2104 message authentication code.
3
+ * @module
4
+ */
5
+ import {
6
+ abytes,
7
+ aexists,
8
+ ahash,
9
+ aoutput,
10
+ clean,
11
+ type CHash,
12
+ type Hash,
13
+ type TArg,
14
+ type TRet,
15
+ } from './utils.ts';
16
+
17
+ /**
18
+ * Internal class for HMAC.
19
+ * Accepts any byte key, although RFC 2104 §3 recommends keys at least
20
+ * `HashLen` bytes long.
21
+ */
22
+ export class _HMAC<T extends Hash<T>> implements Hash<_HMAC<T>> {
23
+ oHash: T;
24
+ iHash: T;
25
+ blockLen: number;
26
+ outputLen: number;
27
+ canXOF = false;
28
+ private finished = false;
29
+ private destroyed = false;
30
+
31
+ constructor(hash: TArg<CHash>, key: TArg<Uint8Array>) {
32
+ ahash(hash);
33
+ abytes(key, undefined, 'key');
34
+ this.iHash = hash.create() as T;
35
+ if (typeof this.iHash.update !== 'function') throw new Error('expected Hash instance');
36
+ this.blockLen = this.iHash.blockLen;
37
+ this.outputLen = this.iHash.outputLen;
38
+ const blockLen = this.blockLen;
39
+ const pad = new Uint8Array(blockLen);
40
+ // blockLen can be bigger than outputLen
41
+ pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);
42
+ for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;
43
+ this.iHash.update(pad);
44
+ // By doing update (processing of the first block) of the outer hash here,
45
+ // we can re-use it between multiple calls via clone.
46
+ this.oHash = hash.create() as T;
47
+ // Undo internal XOR && apply outer XOR
48
+ for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;
49
+ this.oHash.update(pad);
50
+ clean(pad);
51
+ }
52
+ update(buf: TArg<Uint8Array>): this {
53
+ aexists(this);
54
+ this.iHash.update(buf);
55
+ return this;
56
+ }
57
+ digestInto(out: TArg<Uint8Array>): void {
58
+ aexists(this);
59
+ aoutput(out, this);
60
+ this.finished = true;
61
+ const buf = out.subarray(0, this.outputLen);
62
+ // Reuse the first outputLen bytes for the inner digest; the outer hash consumes them before
63
+ // overwriting that same prefix with the final tag, leaving any oversized tail untouched.
64
+ this.iHash.digestInto(buf);
65
+ this.oHash.update(buf);
66
+ this.oHash.digestInto(buf);
67
+ this.destroy();
68
+ }
69
+ digest(): TRet<Uint8Array> {
70
+ const out = new Uint8Array(this.oHash.outputLen);
71
+ this.digestInto(out);
72
+ return out as TRet<Uint8Array>;
73
+ }
74
+ _cloneInto(to?: _HMAC<T>): _HMAC<T> {
75
+ // Create new instance without calling constructor since the key
76
+ // is already in state and we don't know it.
77
+ to ||= Object.create(Object.getPrototypeOf(this), {});
78
+ const { oHash, iHash, finished, destroyed, blockLen, outputLen, canXOF } = this;
79
+ to = to as this;
80
+ to.finished = finished;
81
+ to.destroyed = destroyed;
82
+ to.blockLen = blockLen;
83
+ to.outputLen = outputLen;
84
+ to.canXOF = canXOF;
85
+ to.oHash = oHash._cloneInto(to.oHash);
86
+ to.iHash = iHash._cloneInto(to.iHash);
87
+ return to;
88
+ }
89
+ clone(): _HMAC<T> {
90
+ return this._cloneInto();
91
+ }
92
+ destroy(): void {
93
+ this.destroyed = true;
94
+ this.oHash.destroy();
95
+ this.iHash.destroy();
96
+ }
97
+ }
98
+
99
+ /**
100
+ * HMAC: RFC2104 message authentication code.
101
+ * @param hash - function that would be used e.g. sha256
102
+ * @param key - authentication key bytes
103
+ * @param message - message bytes to authenticate
104
+ * @returns Authentication tag bytes.
105
+ * @example
106
+ * Compute an RFC 2104 HMAC directly and with an incremental state.
107
+ * ```ts
108
+ * import { hmac } from '@noble/hashes/hmac.js';
109
+ * import { sha256 } from '@noble/hashes/sha2.js';
110
+ * const key = new Uint8Array([1, 2, 3]);
111
+ * const message = new Uint8Array([4, 5, 6]);
112
+ * const mac = hmac(sha256, key, message);
113
+ * const out = new Uint8Array(sha256.outputLen);
114
+ * hmac.create(sha256, key).update(message).digestInto(out);
115
+ * ```
116
+ */
117
+ type HmacFn = {
118
+ (hash: TArg<CHash>, key: TArg<Uint8Array>, message: TArg<Uint8Array>): TRet<Uint8Array>;
119
+ create(hash: TArg<CHash>, key: TArg<Uint8Array>): TRet<_HMAC<any>>;
120
+ };
121
+ export const hmac: TRet<HmacFn> = /* @__PURE__ */ (() => {
122
+ const hmac_ = ((
123
+ hash: TArg<CHash>,
124
+ key: TArg<Uint8Array>,
125
+ message: TArg<Uint8Array>
126
+ ): TRet<Uint8Array> => new _HMAC<any>(hash, key).update(message).digest()) as TRet<HmacFn>;
127
+ hmac_.create = (hash: TArg<CHash>, key: TArg<Uint8Array>): TRet<_HMAC<any>> =>
128
+ new _HMAC<any>(hash, key) as TRet<_HMAC<any>>;
129
+ return hmac_;
130
+ })();
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Audited & minimal JS implementation of hash functions, MACs, and KDFs.
3
+ * Check out individual modules.
4
+ * @module
5
+ * @example
6
+ ```js
7
+ import {
8
+ sha256, sha384, sha512, sha224, sha512_224, sha512_256
9
+ } from '@noble/hashes/sha2.js';
10
+ import {
11
+ sha3_224, sha3_256, sha3_384, sha3_512,
12
+ keccak_224, keccak_256, keccak_384, keccak_512,
13
+ shake128, shake256
14
+ } from '@noble/hashes/sha3.js';
15
+ import {
16
+ cshake128, cshake256,
17
+ turboshake128, turboshake256,
18
+ kt128, kt256,
19
+ kmac128, kmac256,
20
+ tuplehash256, parallelhash256,
21
+ keccakprg
22
+ } from '@noble/hashes/sha3-addons.js';
23
+ import { blake3 } from '@noble/hashes/blake3.js';
24
+ import { blake2b, blake2s } from '@noble/hashes/blake2.js';
25
+ import { hmac } from '@noble/hashes/hmac.js';
26
+ import { hkdf } from '@noble/hashes/hkdf.js';
27
+ import { pbkdf2, pbkdf2Async } from '@noble/hashes/pbkdf2.js';
28
+ import { scrypt, scryptAsync } from '@noble/hashes/scrypt.js';
29
+ import { md5, ripemd160, sha1 } from '@noble/hashes/legacy.js';
30
+ import * as utils from '@noble/hashes/utils.js';
31
+ ```
32
+ */
33
+ throw new Error('root module cannot be imported: import submodules instead. Check out README');
@@ -0,0 +1,361 @@
1
+ /**
2
+
3
+ SHA1 (RFC 3174), MD5 (RFC 1321), and RIPEMD160 legacy, weak hash functions.
4
+ RFC 2286 only covers HMAC-RIPEMD160 wrapper material and test vectors,
5
+ not the base RIPEMD-160 compression spec.
6
+ Don't use them in a new protocol. What "weak" means:
7
+
8
+ - Collisions can be made with 2^18 effort in MD5, 2^60 in SHA1, 2^80 in RIPEMD160.
9
+ - No practical pre-image attacks (only theoretical, 2^123.4)
10
+ - HMAC seems kinda ok: https://www.rfc-editor.org/rfc/rfc6151
11
+ * @module
12
+ */
13
+ import { Chi, HashMD, Maj } from './_md.ts';
14
+ import { type CHash, clean, createHasher, rotl, type TRet } from './utils.ts';
15
+
16
+ /** Initial SHA-1 state from RFC 3174 §6.1. */
17
+ const SHA1_IV = /* @__PURE__ */ Uint32Array.from([
18
+ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0,
19
+ ]);
20
+
21
+ // Reusable 80-word SHA-1 message schedule buffer.
22
+ const SHA1_W = /* @__PURE__ */ new Uint32Array(80);
23
+
24
+ /** Internal SHA1 legacy hash class. */
25
+ export class _SHA1 extends HashMD<_SHA1> {
26
+ private A = SHA1_IV[0] | 0;
27
+ private B = SHA1_IV[1] | 0;
28
+ private C = SHA1_IV[2] | 0;
29
+ private D = SHA1_IV[3] | 0;
30
+ private E = SHA1_IV[4] | 0;
31
+
32
+ constructor() {
33
+ super(64, 20, 8, false);
34
+ }
35
+ protected get(): [number, number, number, number, number] {
36
+ const { A, B, C, D, E } = this;
37
+ return [A, B, C, D, E];
38
+ }
39
+ protected set(A: number, B: number, C: number, D: number, E: number): void {
40
+ this.A = A | 0;
41
+ this.B = B | 0;
42
+ this.C = C | 0;
43
+ this.D = D | 0;
44
+ this.E = E | 0;
45
+ }
46
+ _cloneInto(to?: _SHA1): _SHA1 {
47
+ (to ||= new (this.constructor as any)() as _SHA1).set(...this.get());
48
+ return this._cloneIntoMeta(to);
49
+ }
50
+ protected process(view: DataView, offset: number): void {
51
+ for (let i = 0; i < 16; i++, offset += 4) SHA1_W[i] = view.getUint32(offset, false);
52
+ for (let i = 16; i < 80; i++)
53
+ SHA1_W[i] = rotl(SHA1_W[i - 3] ^ SHA1_W[i - 8] ^ SHA1_W[i - 14] ^ SHA1_W[i - 16], 1);
54
+ // Compression function main loop, 80 rounds
55
+ let { A, B, C, D, E } = this;
56
+ for (let i = 0; i < 80; i++) {
57
+ let F, K;
58
+ if (i < 20) {
59
+ F = Chi(B, C, D);
60
+ K = 0x5a827999;
61
+ } else if (i < 40) {
62
+ F = B ^ C ^ D;
63
+ K = 0x6ed9eba1;
64
+ } else if (i < 60) {
65
+ F = Maj(B, C, D);
66
+ K = 0x8f1bbcdc;
67
+ } else {
68
+ F = B ^ C ^ D;
69
+ K = 0xca62c1d6;
70
+ }
71
+ const T = (rotl(A, 5) + F + E + K + SHA1_W[i]) | 0;
72
+ E = D;
73
+ D = C;
74
+ C = rotl(B, 30);
75
+ B = A;
76
+ A = T;
77
+ }
78
+ // Add the compressed chunk to the current hash value
79
+ A = (A + this.A) | 0;
80
+ B = (B + this.B) | 0;
81
+ C = (C + this.C) | 0;
82
+ D = (D + this.D) | 0;
83
+ E = (E + this.E) | 0;
84
+ this.set(A, B, C, D, E);
85
+ }
86
+ protected roundClean(): void {
87
+ clean(SHA1_W);
88
+ }
89
+ destroy(): void {
90
+ // HashMD callers route post-destroy usability through `destroyed`; zeroizing alone still leaves
91
+ // update()/digest() callable on reused instances.
92
+ this.destroyed = true;
93
+ this.set(0, 0, 0, 0, 0);
94
+ clean(this.buffer);
95
+ }
96
+ }
97
+
98
+ /**
99
+ * SHA1 (RFC 3174) legacy hash function. It was cryptographically broken.
100
+ * @param msg - message bytes to hash
101
+ * @param opts - Reserved hash options.
102
+ * @returns Digest bytes.
103
+ * @example
104
+ * Hash a message with SHA1.
105
+ * ```ts
106
+ * sha1(new Uint8Array([97, 98, 99]));
107
+ * ```
108
+ */
109
+ export const sha1: TRet<CHash> = /* @__PURE__ */ createHasher(() => new _SHA1());
110
+
111
+ /** RFC 1321 `T[i]` uses `floor(2^32 * abs(sin(i)))`; this is the shared `2^32` scale factor. */
112
+ const p32 = /* @__PURE__ */ Math.pow(2, 32);
113
+ /** RFC 1321 `T[1..64]` table. */
114
+ const K = /* @__PURE__ */ Array.from({ length: 64 }, (_, i) =>
115
+ Math.floor(p32 * Math.abs(Math.sin(i + 1)))
116
+ );
117
+
118
+ /** MD5 initial state from RFC 1321, stored as 4 u32 words. */
119
+ const MD5_IV = /* @__PURE__ */ SHA1_IV.slice(0, 4);
120
+
121
+ // Reusable 16-word MD5 message block buffer.
122
+ const MD5_W = /* @__PURE__ */ new Uint32Array(16);
123
+ // RFC 1321 §3.4 per-round rotate amounts, flattened to 64 entries so the round loop
124
+ // avoids allocating a 4-element array literal every round (measured ~5% of md5).
125
+ const MD5_SHIFTS = /* @__PURE__ */ (() => {
126
+ const S = [
127
+ [7, 12, 17, 22],
128
+ [5, 9, 14, 20],
129
+ [4, 11, 16, 23],
130
+ [6, 10, 15, 21],
131
+ ];
132
+ return Uint8Array.from({ length: 64 }, (_, i) => S[Math.floor(i / 16)][i % 4]);
133
+ })();
134
+ /** Internal MD5 legacy hash class. */
135
+ export class _MD5 extends HashMD<_MD5> {
136
+ private A = MD5_IV[0] | 0;
137
+ private B = MD5_IV[1] | 0;
138
+ private C = MD5_IV[2] | 0;
139
+ private D = MD5_IV[3] | 0;
140
+
141
+ constructor() {
142
+ super(64, 16, 8, true);
143
+ }
144
+ protected get(): [number, number, number, number] {
145
+ const { A, B, C, D } = this;
146
+ return [A, B, C, D];
147
+ }
148
+ protected set(A: number, B: number, C: number, D: number): void {
149
+ this.A = A | 0;
150
+ this.B = B | 0;
151
+ this.C = C | 0;
152
+ this.D = D | 0;
153
+ }
154
+ _cloneInto(to?: _MD5): _MD5 {
155
+ (to ||= new (this.constructor as any)() as _MD5).set(...this.get());
156
+ return this._cloneIntoMeta(to);
157
+ }
158
+ protected process(view: DataView, offset: number): void {
159
+ for (let i = 0; i < 16; i++, offset += 4) MD5_W[i] = view.getUint32(offset, true);
160
+ // Compression function main loop, 64 rounds
161
+ let { A, B, C, D } = this;
162
+ for (let i = 0; i < 64; i++) {
163
+ let F, g;
164
+ if (i < 16) {
165
+ F = Chi(B, C, D);
166
+ g = i;
167
+ } else if (i < 32) {
168
+ // RFC 1321 round 2 uses G(B,C,D) = (B & D) | (C & ~D), which is `Chi(D, B, C)`.
169
+ F = Chi(D, B, C);
170
+ g = (5 * i + 1) % 16;
171
+ } else if (i < 48) {
172
+ F = B ^ C ^ D;
173
+ g = (3 * i + 5) % 16;
174
+ } else {
175
+ F = C ^ (B | ~D);
176
+ g = (7 * i) % 16;
177
+ }
178
+ F = F + A + K[i] + MD5_W[g];
179
+ A = D;
180
+ D = C;
181
+ C = B;
182
+ B = B + rotl(F, MD5_SHIFTS[i]);
183
+ }
184
+ // Add the compressed chunk to the current hash value
185
+ A = (A + this.A) | 0;
186
+ B = (B + this.B) | 0;
187
+ C = (C + this.C) | 0;
188
+ D = (D + this.D) | 0;
189
+ this.set(A, B, C, D);
190
+ }
191
+ protected roundClean(): void {
192
+ clean(MD5_W);
193
+ }
194
+ destroy(): void {
195
+ // HashMD callers route post-destroy usability through `destroyed`; zeroizing alone still leaves
196
+ // update()/digest() callable on reused instances.
197
+ this.destroyed = true;
198
+ this.set(0, 0, 0, 0);
199
+ clean(this.buffer);
200
+ }
201
+ }
202
+
203
+ /**
204
+ * MD5 (RFC 1321) legacy hash function. It was cryptographically broken.
205
+ * MD5 architecture is similar to SHA1, with some differences:
206
+ * - Reduced output length: 16 bytes (128 bit) instead of 20
207
+ * - 64 rounds, instead of 80
208
+ * - Little-endian: could be faster, but will require more code
209
+ * - Non-linear index selection: huge speed-up for unroll
210
+ * - Per round constants: more memory accesses, additional speed-up for unroll
211
+ * @param msg - message bytes to hash
212
+ * @param opts - Reserved hash options.
213
+ * @returns Digest bytes.
214
+ * @example
215
+ * Hash a message with MD5.
216
+ * ```ts
217
+ * md5(new Uint8Array([97, 98, 99]));
218
+ * ```
219
+ */
220
+ export const md5: TRet<CHash> = /* @__PURE__ */ createHasher(() => new _MD5());
221
+
222
+ // RIPEMD-160
223
+
224
+ // Permutation repeatedly applied to derive the later RIPEMD-160 message-order tables.
225
+ const Rho160 = /* @__PURE__ */ Uint8Array.from([
226
+ 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
227
+ ]);
228
+ const Id160 = /* @__PURE__ */ (() => Uint8Array.from(new Array(16).fill(0).map((_, i) => i)))();
229
+ const Pi160 = /* @__PURE__ */ (() => Id160.map((i) => (9 * i + 5) % 16))();
230
+ // Five left/right message-word orderings for the RIPEMD-160 dual-lane rounds.
231
+ const idxLR = /* @__PURE__ */ (() => {
232
+ const L = [Id160];
233
+ const R = [Pi160];
234
+ const res = [L, R];
235
+ for (let i = 0; i < 4; i++) for (let j of res) j.push(j[i].map((k) => Rho160[k]));
236
+ return res;
237
+ })();
238
+ const idxL = /* @__PURE__ */ (() => idxLR[0])();
239
+ const idxR = /* @__PURE__ */ (() => idxLR[1])();
240
+ // const [idxL, idxR] = idxLR;
241
+
242
+ // Base per-group shift table before the left/right message-order permutations are applied.
243
+ const shifts160 = /* @__PURE__ */ [
244
+ [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8],
245
+ [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7],
246
+ [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9],
247
+ [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6],
248
+ [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5],
249
+ ].map((i) => Uint8Array.from(i));
250
+ const shiftsL160 = /* @__PURE__ */ idxL.map((idx, i) => idx.map((j) => shifts160[i][j]));
251
+ const shiftsR160 = /* @__PURE__ */ idxR.map((idx, i) => idx.map((j) => shifts160[i][j]));
252
+ // Five left-lane additive constants for RIPEMD-160.
253
+ const Kl160 = /* @__PURE__ */ Uint32Array.from([
254
+ 0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e,
255
+ ]);
256
+ // Five right-lane additive constants for RIPEMD-160.
257
+ const Kr160 = /* @__PURE__ */ Uint32Array.from([
258
+ 0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000,
259
+ ]);
260
+ // Called `f()` in the spec; valid `group` values are 0..4, and out-of-range
261
+ // inputs currently fall through to the group-4 branch.
262
+ function ripemd_f(group: number, x: number, y: number, z: number): number {
263
+ if (group === 0) return x ^ y ^ z;
264
+ if (group === 1) return (x & y) | (~x & z);
265
+ if (group === 2) return (x | ~y) ^ z;
266
+ if (group === 3) return (x & z) | (y & ~z);
267
+ return x ^ (y | ~z);
268
+ }
269
+ // Reusable 16-word RIPEMD-160 message block buffer.
270
+ const BUF_160 = /* @__PURE__ */ new Uint32Array(16);
271
+ /**
272
+ * Internal RIPEMD-160 legacy hash class.
273
+ * RFC 2286 only adds HMAC-RIPEMD160 material, not the core hash specification.
274
+ */
275
+ export class _RIPEMD160 extends HashMD<_RIPEMD160> {
276
+ private h0 = 0x67452301 | 0;
277
+ private h1 = 0xefcdab89 | 0;
278
+ private h2 = 0x98badcfe | 0;
279
+ private h3 = 0x10325476 | 0;
280
+ private h4 = 0xc3d2e1f0 | 0;
281
+
282
+ constructor() {
283
+ super(64, 20, 8, true);
284
+ }
285
+ protected get(): [number, number, number, number, number] {
286
+ const { h0, h1, h2, h3, h4 } = this;
287
+ return [h0, h1, h2, h3, h4];
288
+ }
289
+ protected set(h0: number, h1: number, h2: number, h3: number, h4: number): void {
290
+ this.h0 = h0 | 0;
291
+ this.h1 = h1 | 0;
292
+ this.h2 = h2 | 0;
293
+ this.h3 = h3 | 0;
294
+ this.h4 = h4 | 0;
295
+ }
296
+ _cloneInto(to?: _RIPEMD160): _RIPEMD160 {
297
+ (to ||= new (this.constructor as any)() as _RIPEMD160).set(...this.get());
298
+ return this._cloneIntoMeta(to);
299
+ }
300
+ protected process(view: DataView, offset: number): void {
301
+ for (let i = 0; i < 16; i++, offset += 4) BUF_160[i] = view.getUint32(offset, true);
302
+ // prettier-ignore
303
+ let al = this.h0 | 0, ar = al,
304
+ bl = this.h1 | 0, br = bl,
305
+ cl = this.h2 | 0, cr = cl,
306
+ dl = this.h3 | 0, dr = dl,
307
+ el = this.h4 | 0, er = el;
308
+
309
+ // Instead of iterating 0 to 80, we split it into 5 groups
310
+ // And use the groups in constants, functions, etc. Much simpler
311
+ for (let group = 0; group < 5; group++) {
312
+ const rGroup = 4 - group;
313
+ const hbl = Kl160[group], hbr = Kr160[group]; // prettier-ignore
314
+ const rl = idxL[group], rr = idxR[group]; // prettier-ignore
315
+ const sl = shiftsL160[group], sr = shiftsR160[group]; // prettier-ignore
316
+ for (let i = 0; i < 16; i++) {
317
+ const tl = (rotl(al + ripemd_f(group, bl, cl, dl) + BUF_160[rl[i]] + hbl, sl[i]) + el) | 0;
318
+ al = el, el = dl, dl = rotl(cl, 10) | 0, cl = bl, bl = tl; // prettier-ignore
319
+ }
320
+ // 2 loops are 10% faster
321
+ for (let i = 0; i < 16; i++) {
322
+ const tr = (rotl(ar + ripemd_f(rGroup, br, cr, dr) + BUF_160[rr[i]] + hbr, sr[i]) + er) | 0;
323
+ ar = er, er = dr, dr = rotl(cr, 10) | 0, cr = br, br = tr; // prettier-ignore
324
+ }
325
+ }
326
+ // Add the compressed chunk to the current hash value
327
+ // Final recombination cross-adds the left/right lane accumulators into the next h0..h4 order.
328
+ this.set(
329
+ (this.h1 + cl + dr) | 0,
330
+ (this.h2 + dl + er) | 0,
331
+ (this.h3 + el + ar) | 0,
332
+ (this.h4 + al + br) | 0,
333
+ (this.h0 + bl + cr) | 0
334
+ );
335
+ }
336
+ protected roundClean(): void {
337
+ clean(BUF_160);
338
+ }
339
+ destroy(): void {
340
+ this.destroyed = true;
341
+ clean(this.buffer);
342
+ this.set(0, 0, 0, 0, 0);
343
+ }
344
+ }
345
+
346
+ /**
347
+ * RIPEMD-160 - a legacy hash function from 1990s.
348
+ * RFC 2286 only covers HMAC-RIPEMD160 test material; the links below point
349
+ * at the base RIPEMD-160 references.
350
+ * * {@link https://homes.esat.kuleuven.be/~bosselae/ripemd160.html}
351
+ * * {@link https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf}
352
+ * @param msg - message bytes to hash
353
+ * @param opts - Reserved hash options.
354
+ * @returns Digest bytes.
355
+ * @example
356
+ * Hash a message with RIPEMD-160.
357
+ * ```ts
358
+ * ripemd160(new Uint8Array([97, 98, 99]));
359
+ * ```
360
+ */
361
+ export const ripemd160: TRet<CHash> = /* @__PURE__ */ createHasher(() => new _RIPEMD160());