effect 4.0.7 → 4.1.0

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 (679) hide show
  1. package/README.md +1 -1
  2. package/dist/BigDecimal.d.ts.map +1 -1
  3. package/dist/BigDecimal.js +3 -0
  4. package/dist/BigDecimal.js.map +1 -1
  5. package/dist/Channel.d.ts +12 -6
  6. package/dist/Channel.d.ts.map +1 -1
  7. package/dist/Channel.js +9 -3
  8. package/dist/Channel.js.map +1 -1
  9. package/dist/Config.d.ts +7 -1
  10. package/dist/Config.d.ts.map +1 -1
  11. package/dist/Config.js.map +1 -1
  12. package/dist/Context.d.ts +18 -1
  13. package/dist/Context.d.ts.map +1 -1
  14. package/dist/Context.js +27 -8
  15. package/dist/Context.js.map +1 -1
  16. package/dist/Cron.d.ts +81 -11
  17. package/dist/Cron.d.ts.map +1 -1
  18. package/dist/Cron.js +101 -26
  19. package/dist/Cron.js.map +1 -1
  20. package/dist/Duration.d.ts +78 -0
  21. package/dist/Duration.d.ts.map +1 -1
  22. package/dist/Duration.js +123 -0
  23. package/dist/Duration.js.map +1 -1
  24. package/dist/Effect.d.ts +164 -7
  25. package/dist/Effect.d.ts.map +1 -1
  26. package/dist/Effect.js +11 -1
  27. package/dist/Effect.js.map +1 -1
  28. package/dist/FileSystem.d.ts +59 -4
  29. package/dist/FileSystem.d.ts.map +1 -1
  30. package/dist/FileSystem.js +9 -2
  31. package/dist/FileSystem.js.map +1 -1
  32. package/dist/Glob.d.ts +165 -0
  33. package/dist/Glob.d.ts.map +1 -0
  34. package/dist/Glob.js +127 -0
  35. package/dist/Glob.js.map +1 -0
  36. package/dist/Match.d.ts +86 -0
  37. package/dist/Match.d.ts.map +1 -1
  38. package/dist/Match.js +72 -0
  39. package/dist/Match.js.map +1 -1
  40. package/dist/Pool.d.ts +51 -0
  41. package/dist/Pool.d.ts.map +1 -1
  42. package/dist/Pool.js +59 -9
  43. package/dist/Pool.js.map +1 -1
  44. package/dist/Random.d.ts.map +1 -1
  45. package/dist/Random.js +3 -3
  46. package/dist/Random.js.map +1 -1
  47. package/dist/RcMap.d.ts.map +1 -1
  48. package/dist/RcMap.js +8 -2
  49. package/dist/RcMap.js.map +1 -1
  50. package/dist/Schedule.d.ts +18 -1
  51. package/dist/Schedule.d.ts.map +1 -1
  52. package/dist/Schedule.js +7 -2
  53. package/dist/Schedule.js.map +1 -1
  54. package/dist/Schema.d.ts +666 -41
  55. package/dist/Schema.d.ts.map +1 -1
  56. package/dist/Schema.js +650 -0
  57. package/dist/Schema.js.map +1 -1
  58. package/dist/SchemaGetter.d.ts +6 -1
  59. package/dist/SchemaGetter.d.ts.map +1 -1
  60. package/dist/SchemaGetter.js +22 -11
  61. package/dist/SchemaGetter.js.map +1 -1
  62. package/dist/SchemaRepresentation.d.ts +14 -0
  63. package/dist/SchemaRepresentation.d.ts.map +1 -1
  64. package/dist/SchemaRepresentation.js +16 -0
  65. package/dist/SchemaRepresentation.js.map +1 -1
  66. package/dist/SchemaTransformation.d.ts +8 -3
  67. package/dist/SchemaTransformation.d.ts.map +1 -1
  68. package/dist/SchemaTransformation.js +6 -3
  69. package/dist/SchemaTransformation.js.map +1 -1
  70. package/dist/ScopedCache.d.ts.map +1 -1
  71. package/dist/ScopedCache.js +5 -7
  72. package/dist/ScopedCache.js.map +1 -1
  73. package/dist/Semaphore.d.ts +130 -0
  74. package/dist/Semaphore.d.ts.map +1 -1
  75. package/dist/Semaphore.js +40 -0
  76. package/dist/Semaphore.js.map +1 -1
  77. package/dist/Stream.d.ts +13 -4
  78. package/dist/Stream.d.ts.map +1 -1
  79. package/dist/Stream.js +9 -0
  80. package/dist/Stream.js.map +1 -1
  81. package/dist/Terminal.d.ts +18 -1
  82. package/dist/Terminal.d.ts.map +1 -1
  83. package/dist/Terminal.js +1 -1
  84. package/dist/Terminal.js.map +1 -1
  85. package/dist/ai/AiError.d.ts +43 -116
  86. package/dist/ai/AiError.d.ts.map +1 -1
  87. package/dist/ai/AiError.js +53 -72
  88. package/dist/ai/AiError.js.map +1 -1
  89. package/dist/ai/Decision.d.ts +196 -15
  90. package/dist/ai/Decision.d.ts.map +1 -1
  91. package/dist/ai/Decision.js +130 -0
  92. package/dist/ai/Decision.js.map +1 -1
  93. package/dist/ai/DecisionModel.d.ts +54 -13
  94. package/dist/ai/DecisionModel.d.ts.map +1 -1
  95. package/dist/ai/DecisionModel.js +123 -12
  96. package/dist/ai/DecisionModel.js.map +1 -1
  97. package/dist/ai/McpServer.d.ts +630 -29
  98. package/dist/ai/McpServer.d.ts.map +1 -1
  99. package/dist/ai/McpServer.js +562 -116
  100. package/dist/ai/McpServer.js.map +1 -1
  101. package/dist/ai/McpTest.d.ts +130 -0
  102. package/dist/ai/McpTest.d.ts.map +1 -0
  103. package/dist/ai/McpTest.js +237 -0
  104. package/dist/ai/McpTest.js.map +1 -0
  105. package/dist/ai/Response.d.ts +1 -25
  106. package/dist/ai/Response.d.ts.map +1 -1
  107. package/dist/ai/Response.js +1 -10
  108. package/dist/ai/Response.js.map +1 -1
  109. package/dist/ai/Tool.d.ts +19 -1
  110. package/dist/ai/Tool.d.ts.map +1 -1
  111. package/dist/ai/Tool.js.map +1 -1
  112. package/dist/ai/index.d.ts +5 -0
  113. package/dist/ai/index.d.ts.map +1 -1
  114. package/dist/ai/index.js +5 -0
  115. package/dist/ai/index.js.map +1 -1
  116. package/dist/ai/internal/mcpCore.js +17 -12
  117. package/dist/ai/internal/mcpCore.js.map +1 -1
  118. package/dist/ai/internal/mcpProtocol/v2024_11_05.js +4 -5
  119. package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
  120. package/dist/ai/internal/mcpProtocol/v2025_03_26.js +4 -5
  121. package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
  122. package/dist/ai/internal/mcpProtocol/v2025_06_18.js +4 -5
  123. package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
  124. package/dist/ai/internal/mcpProtocol/v2025_11_25.js +4 -5
  125. package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
  126. package/dist/ai/internal/mcpProtocol/v2026_07_28.js +18 -10
  127. package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
  128. package/dist/ai/internal/mcpProtocol.js +13 -0
  129. package/dist/ai/internal/mcpProtocol.js.map +1 -1
  130. package/dist/ai/internal/mcpRuntime.js +5 -3
  131. package/dist/ai/internal/mcpRuntime.js.map +1 -1
  132. package/dist/ai/internal/mcpStatefulRuntime.js +6 -1
  133. package/dist/ai/internal/mcpStatefulRuntime.js.map +1 -1
  134. package/dist/cli/Argument.d.ts +6 -0
  135. package/dist/cli/Argument.d.ts.map +1 -1
  136. package/dist/cli/Argument.js +2 -0
  137. package/dist/cli/Argument.js.map +1 -1
  138. package/dist/cli/CliOutput.d.ts +65 -1
  139. package/dist/cli/CliOutput.d.ts.map +1 -1
  140. package/dist/cli/CliOutput.js +94 -37
  141. package/dist/cli/CliOutput.js.map +1 -1
  142. package/dist/cli/Command.d.ts +23 -0
  143. package/dist/cli/Command.d.ts.map +1 -1
  144. package/dist/cli/Command.js +8 -0
  145. package/dist/cli/Command.js.map +1 -1
  146. package/dist/cli/Flag.d.ts +107 -0
  147. package/dist/cli/Flag.d.ts.map +1 -1
  148. package/dist/cli/Flag.js +37 -0
  149. package/dist/cli/Flag.js.map +1 -1
  150. package/dist/cli/HelpDoc.d.ts +15 -1
  151. package/dist/cli/HelpDoc.d.ts.map +1 -1
  152. package/dist/cli/Param.d.ts +6 -0
  153. package/dist/cli/Param.d.ts.map +1 -1
  154. package/dist/cli/Param.js +2 -0
  155. package/dist/cli/Param.js.map +1 -1
  156. package/dist/cli/Primitive.d.ts +14 -0
  157. package/dist/cli/Primitive.d.ts.map +1 -1
  158. package/dist/cli/Primitive.js +15 -1
  159. package/dist/cli/Primitive.js.map +1 -1
  160. package/dist/cli/Prompt.d.ts +1 -0
  161. package/dist/cli/Prompt.d.ts.map +1 -1
  162. package/dist/cli/Prompt.js +1 -0
  163. package/dist/cli/Prompt.js.map +1 -1
  164. package/dist/cli/internal/help.d.ts.map +1 -1
  165. package/dist/cli/internal/help.js +17 -10
  166. package/dist/cli/internal/help.js.map +1 -1
  167. package/dist/cluster/Sharding.d.ts.map +1 -1
  168. package/dist/cluster/Sharding.js +90 -28
  169. package/dist/cluster/Sharding.js.map +1 -1
  170. package/dist/cluster/ShardingConfig.d.ts +72 -6
  171. package/dist/cluster/ShardingConfig.d.ts.map +1 -1
  172. package/dist/cluster/ShardingConfig.js +4 -0
  173. package/dist/cluster/ShardingConfig.js.map +1 -1
  174. package/dist/cluster/SingleRunner.d.ts +3 -3
  175. package/dist/cluster/SingleRunner.d.ts.map +1 -1
  176. package/dist/cluster/SingleRunner.js +1 -1
  177. package/dist/cluster/SqlMessageStorage.d.ts +37 -6
  178. package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
  179. package/dist/cluster/SqlMessageStorage.js +34 -7
  180. package/dist/cluster/SqlMessageStorage.js.map +1 -1
  181. package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
  182. package/dist/cluster/SqlRunnerStorage.js +23 -8
  183. package/dist/cluster/SqlRunnerStorage.js.map +1 -1
  184. package/dist/crypto/Aead.d.ts +322 -0
  185. package/dist/crypto/Aead.d.ts.map +1 -0
  186. package/dist/crypto/Aead.js +331 -0
  187. package/dist/crypto/Aead.js.map +1 -0
  188. package/dist/crypto/Cipher.d.ts +235 -0
  189. package/dist/crypto/Cipher.d.ts.map +1 -0
  190. package/dist/crypto/Cipher.js +233 -0
  191. package/dist/crypto/Cipher.js.map +1 -0
  192. package/dist/crypto/CryptoError.d.ts +212 -0
  193. package/dist/crypto/CryptoError.d.ts.map +1 -0
  194. package/dist/crypto/CryptoError.js +202 -0
  195. package/dist/crypto/CryptoError.js.map +1 -0
  196. package/dist/crypto/Digest.d.ts +143 -0
  197. package/dist/crypto/Digest.d.ts.map +1 -0
  198. package/dist/crypto/Digest.js +146 -0
  199. package/dist/crypto/Digest.js.map +1 -0
  200. package/dist/crypto/Kdf.d.ts +220 -0
  201. package/dist/crypto/Kdf.d.ts.map +1 -0
  202. package/dist/crypto/Kdf.js +212 -0
  203. package/dist/crypto/Kdf.js.map +1 -0
  204. package/dist/crypto/KeyAgreement.d.ts +323 -0
  205. package/dist/crypto/KeyAgreement.d.ts.map +1 -0
  206. package/dist/crypto/KeyAgreement.js +303 -0
  207. package/dist/crypto/KeyAgreement.js.map +1 -0
  208. package/dist/crypto/KeyFormat.d.ts +309 -0
  209. package/dist/crypto/KeyFormat.d.ts.map +1 -0
  210. package/dist/crypto/KeyFormat.js +556 -0
  211. package/dist/crypto/KeyFormat.js.map +1 -0
  212. package/dist/crypto/KeyWrap.d.ts +389 -0
  213. package/dist/crypto/KeyWrap.d.ts.map +1 -0
  214. package/dist/crypto/KeyWrap.js +381 -0
  215. package/dist/crypto/KeyWrap.js.map +1 -0
  216. package/dist/crypto/Mac.d.ts +277 -0
  217. package/dist/crypto/Mac.d.ts.map +1 -0
  218. package/dist/crypto/Mac.js +288 -0
  219. package/dist/crypto/Mac.js.map +1 -0
  220. package/dist/crypto/SecureRandom.d.ts +340 -0
  221. package/dist/crypto/SecureRandom.d.ts.map +1 -0
  222. package/dist/crypto/SecureRandom.js +257 -0
  223. package/dist/crypto/SecureRandom.js.map +1 -0
  224. package/dist/crypto/Signature.d.ts +448 -0
  225. package/dist/crypto/Signature.d.ts.map +1 -0
  226. package/dist/crypto/Signature.js +484 -0
  227. package/dist/crypto/Signature.js.map +1 -0
  228. package/dist/crypto/WebCrypto.d.ts +61 -0
  229. package/dist/crypto/WebCrypto.d.ts.map +1 -0
  230. package/dist/crypto/WebCrypto.js +63 -0
  231. package/dist/crypto/WebCrypto.js.map +1 -0
  232. package/dist/crypto/index.d.ts +65 -0
  233. package/dist/crypto/index.d.ts.map +1 -0
  234. package/dist/crypto/index.js +66 -0
  235. package/dist/crypto/index.js.map +1 -0
  236. package/dist/crypto/internal/asymmetric.d.ts +2 -0
  237. package/dist/crypto/internal/asymmetric.d.ts.map +1 -0
  238. package/dist/crypto/internal/asymmetric.js +210 -0
  239. package/dist/crypto/internal/asymmetric.js.map +1 -0
  240. package/dist/crypto/internal/chacha.d.ts +46 -0
  241. package/dist/crypto/internal/chacha.d.ts.map +1 -0
  242. package/dist/crypto/internal/chacha.js +885 -0
  243. package/dist/crypto/internal/chacha.js.map +1 -0
  244. package/dist/crypto/internal/der.d.ts +6 -0
  245. package/dist/crypto/internal/der.d.ts.map +1 -0
  246. package/dist/crypto/internal/der.js +86 -0
  247. package/dist/crypto/internal/der.js.map +1 -0
  248. package/dist/crypto/internal/digest.d.ts +2 -0
  249. package/dist/crypto/internal/digest.d.ts.map +1 -0
  250. package/dist/crypto/internal/digest.js +15 -0
  251. package/dist/crypto/internal/digest.js.map +1 -0
  252. package/dist/crypto/internal/key.d.ts +2 -0
  253. package/dist/crypto/internal/key.d.ts.map +1 -0
  254. package/dist/crypto/internal/key.js +170 -0
  255. package/dist/crypto/internal/key.js.map +1 -0
  256. package/dist/crypto/internal/md5.d.ts +39 -0
  257. package/dist/crypto/internal/md5.d.ts.map +1 -0
  258. package/dist/crypto/internal/md5.js +179 -0
  259. package/dist/crypto/internal/md5.js.map +1 -0
  260. package/dist/crypto/internal/webCrypto.d.ts +2 -0
  261. package/dist/crypto/internal/webCrypto.d.ts.map +1 -0
  262. package/dist/crypto/internal/webCrypto.js +111 -0
  263. package/dist/crypto/internal/webCrypto.js.map +1 -0
  264. package/dist/encoding/Base64Url.d.ts.map +1 -1
  265. package/dist/encoding/Base64Url.js +3 -2
  266. package/dist/encoding/Base64Url.js.map +1 -1
  267. package/dist/encoding/Csv.d.ts +608 -0
  268. package/dist/encoding/Csv.d.ts.map +1 -0
  269. package/dist/encoding/Csv.js +718 -0
  270. package/dist/encoding/Csv.js.map +1 -0
  271. package/dist/encoding/Hex.d.ts +3 -2
  272. package/dist/encoding/Hex.d.ts.map +1 -1
  273. package/dist/encoding/Hex.js +3 -2
  274. package/dist/encoding/Hex.js.map +1 -1
  275. package/dist/encoding/SchemaBinary.d.ts.map +1 -1
  276. package/dist/encoding/SchemaBinary.js +42 -4
  277. package/dist/encoding/SchemaBinary.js.map +1 -1
  278. package/dist/encoding/Toml.d.ts +17 -3
  279. package/dist/encoding/Toml.d.ts.map +1 -1
  280. package/dist/encoding/Toml.js +104 -16
  281. package/dist/encoding/Toml.js.map +1 -1
  282. package/dist/encoding/Yaml.d.ts +8 -1
  283. package/dist/encoding/Yaml.d.ts.map +1 -1
  284. package/dist/encoding/Yaml.js +54 -18
  285. package/dist/encoding/Yaml.js.map +1 -1
  286. package/dist/encoding/index.d.ts +5 -0
  287. package/dist/encoding/index.d.ts.map +1 -1
  288. package/dist/encoding/index.js +5 -0
  289. package/dist/encoding/index.js.map +1 -1
  290. package/dist/eventlog/EventJournal.d.ts.map +1 -1
  291. package/dist/eventlog/EventJournal.js +6 -3
  292. package/dist/eventlog/EventJournal.js.map +1 -1
  293. package/dist/eventlog/EventLog.d.ts +119 -4
  294. package/dist/eventlog/EventLog.d.ts.map +1 -1
  295. package/dist/eventlog/EventLog.js +200 -12
  296. package/dist/eventlog/EventLog.js.map +1 -1
  297. package/dist/eventlog/EventLogEncryption.d.ts +41 -4
  298. package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
  299. package/dist/eventlog/EventLogEncryption.js +83 -64
  300. package/dist/eventlog/EventLogEncryption.js.map +1 -1
  301. package/dist/eventlog/EventLogMessage.d.ts +279 -0
  302. package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
  303. package/dist/eventlog/EventLogMessage.js +217 -1
  304. package/dist/eventlog/EventLogMessage.js.map +1 -1
  305. package/dist/eventlog/EventLogRemote.d.ts +200 -28
  306. package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
  307. package/dist/eventlog/EventLogRemote.js +186 -16
  308. package/dist/eventlog/EventLogRemote.js.map +1 -1
  309. package/dist/eventlog/EventLogServer.d.ts +3 -0
  310. package/dist/eventlog/EventLogServer.d.ts.map +1 -1
  311. package/dist/eventlog/EventLogServer.js +18 -10
  312. package/dist/eventlog/EventLogServer.js.map +1 -1
  313. package/dist/eventlog/EventLogServerEncrypted.d.ts +326 -5
  314. package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
  315. package/dist/eventlog/EventLogServerEncrypted.js +769 -14
  316. package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
  317. package/dist/eventlog/EventLogSessionAuth.d.ts +5 -3
  318. package/dist/eventlog/EventLogSessionAuth.d.ts.map +1 -1
  319. package/dist/eventlog/EventLogSessionAuth.js +41 -64
  320. package/dist/eventlog/EventLogSessionAuth.js.map +1 -1
  321. package/dist/eventlog/EventRow.d.ts +4 -0
  322. package/dist/eventlog/EventRow.d.ts.map +1 -1
  323. package/dist/eventlog/EventRow.js +12 -2
  324. package/dist/eventlog/EventRow.js.map +1 -1
  325. package/dist/eventlog/SqlEventJournal.js +2 -2
  326. package/dist/eventlog/SqlEventJournal.js.map +1 -1
  327. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +21 -5
  328. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
  329. package/dist/eventlog/SqlEventLogServerEncrypted.js +1048 -113
  330. package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
  331. package/dist/eventlog/SqlEventLogServerUnencrypted.js +2 -2
  332. package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
  333. package/dist/eventlog/internal/batches.d.ts +12 -0
  334. package/dist/eventlog/internal/batches.d.ts.map +1 -0
  335. package/dist/eventlog/internal/batches.js +26 -0
  336. package/dist/eventlog/internal/batches.js.map +1 -0
  337. package/dist/eventlog/internal/compaction.d.ts +38 -0
  338. package/dist/eventlog/internal/compaction.d.ts.map +1 -0
  339. package/dist/eventlog/internal/compaction.js +33 -0
  340. package/dist/eventlog/internal/compaction.js.map +1 -0
  341. package/dist/eventlog/internal/identityRootSecretDerivation.js +66 -67
  342. package/dist/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
  343. package/dist/eventlog/internal/remoteCompaction.d.ts +31 -0
  344. package/dist/eventlog/internal/remoteCompaction.d.ts.map +1 -0
  345. package/dist/eventlog/internal/remoteCompaction.js +76 -0
  346. package/dist/eventlog/internal/remoteCompaction.js.map +1 -0
  347. package/dist/http/Cookies.d.ts +172 -0
  348. package/dist/http/Cookies.d.ts.map +1 -1
  349. package/dist/http/Cookies.js +143 -1
  350. package/dist/http/Cookies.js.map +1 -1
  351. package/dist/http/FetchHttpClient.d.ts +26 -2
  352. package/dist/http/FetchHttpClient.d.ts.map +1 -1
  353. package/dist/http/FetchHttpClient.js +78 -15
  354. package/dist/http/FetchHttpClient.js.map +1 -1
  355. package/dist/http/HttpClient.d.ts +79 -8
  356. package/dist/http/HttpClient.d.ts.map +1 -1
  357. package/dist/http/HttpClient.js +65 -5
  358. package/dist/http/HttpClient.js.map +1 -1
  359. package/dist/http/HttpClientRequest.d.ts +9 -5
  360. package/dist/http/HttpClientRequest.d.ts.map +1 -1
  361. package/dist/http/HttpClientRequest.js +2 -3
  362. package/dist/http/HttpClientRequest.js.map +1 -1
  363. package/dist/http/HttpClientResponse.d.ts.map +1 -1
  364. package/dist/http/HttpClientResponse.js +3 -2
  365. package/dist/http/HttpClientResponse.js.map +1 -1
  366. package/dist/http/HttpMethod.d.ts +7 -1
  367. package/dist/http/HttpMethod.d.ts.map +1 -1
  368. package/dist/http/HttpMethod.js +3 -8
  369. package/dist/http/HttpMethod.js.map +1 -1
  370. package/dist/http/HttpServerRequest.d.ts +5 -2
  371. package/dist/http/HttpServerRequest.d.ts.map +1 -1
  372. package/dist/http/HttpServerRequest.js +6 -17
  373. package/dist/http/HttpServerRequest.js.map +1 -1
  374. package/dist/http/HttpServerResponse.d.ts.map +1 -1
  375. package/dist/http/HttpServerResponse.js +3 -2
  376. package/dist/http/HttpServerResponse.js.map +1 -1
  377. package/dist/http/HttpTraceContext.d.ts +2 -1
  378. package/dist/http/HttpTraceContext.d.ts.map +1 -1
  379. package/dist/http/HttpTraceContext.js +7 -5
  380. package/dist/http/HttpTraceContext.js.map +1 -1
  381. package/dist/http/ProblemDetails.d.ts +96 -0
  382. package/dist/http/ProblemDetails.d.ts.map +1 -0
  383. package/dist/http/ProblemDetails.js +98 -0
  384. package/dist/http/ProblemDetails.js.map +1 -0
  385. package/dist/http/index.d.ts +5 -0
  386. package/dist/http/index.d.ts.map +1 -1
  387. package/dist/http/index.js +5 -0
  388. package/dist/http/index.js.map +1 -1
  389. package/dist/http/internal/decompression.js +3 -2
  390. package/dist/http/internal/decompression.js.map +1 -1
  391. package/dist/http/internal/urlParams.js +8 -0
  392. package/dist/http/internal/urlParams.js.map +1 -1
  393. package/dist/http-api/HttpApiBuilder.js +19 -5
  394. package/dist/http-api/HttpApiBuilder.js.map +1 -1
  395. package/dist/http-api/HttpApiClient.d.ts +63 -0
  396. package/dist/http-api/HttpApiClient.d.ts.map +1 -1
  397. package/dist/http-api/HttpApiClient.js +51 -0
  398. package/dist/http-api/HttpApiClient.js.map +1 -1
  399. package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
  400. package/dist/http-api/HttpApiEndpoint.js +14 -5
  401. package/dist/http-api/HttpApiEndpoint.js.map +1 -1
  402. package/dist/http-api/HttpApiError.d.ts +185 -13
  403. package/dist/http-api/HttpApiError.d.ts.map +1 -1
  404. package/dist/http-api/HttpApiError.js +128 -0
  405. package/dist/http-api/HttpApiError.js.map +1 -1
  406. package/dist/http-api/HttpApiMiddleware.d.ts +64 -17
  407. package/dist/http-api/HttpApiMiddleware.d.ts.map +1 -1
  408. package/dist/http-api/HttpApiMiddleware.js +85 -1
  409. package/dist/http-api/HttpApiMiddleware.js.map +1 -1
  410. package/dist/http-api/HttpApiSchema.d.ts +76 -14
  411. package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
  412. package/dist/http-api/HttpApiSchema.js +53 -0
  413. package/dist/http-api/HttpApiSchema.js.map +1 -1
  414. package/dist/index.d.ts +5 -5
  415. package/dist/index.d.ts.map +1 -1
  416. package/dist/index.js +5 -5
  417. package/dist/index.js.map +1 -1
  418. package/dist/internal/effect.js +25 -14
  419. package/dist/internal/effect.js.map +1 -1
  420. package/dist/internal/glob.d.ts +2 -0
  421. package/dist/internal/glob.d.ts.map +1 -0
  422. package/dist/internal/glob.js +630 -0
  423. package/dist/internal/glob.js.map +1 -0
  424. package/dist/internal/matcher.js +10 -0
  425. package/dist/internal/matcher.js.map +1 -1
  426. package/dist/internal/persistence.js +9 -0
  427. package/dist/internal/persistence.js.map +1 -1
  428. package/dist/internal/rcRef.js +4 -1
  429. package/dist/internal/rcRef.js.map +1 -1
  430. package/dist/internal/schema/toCodeDocument.js +6 -3
  431. package/dist/internal/schema/toCodeDocument.js.map +1 -1
  432. package/dist/internal/trie.js +42 -13
  433. package/dist/internal/trie.js.map +1 -1
  434. package/dist/internal/ulid.js +41 -0
  435. package/dist/internal/ulid.js.map +1 -1
  436. package/dist/internal/uuid.js +52 -8
  437. package/dist/internal/uuid.js.map +1 -1
  438. package/dist/internal/version.js +1 -1
  439. package/dist/observability/Otlp.d.ts +15 -4
  440. package/dist/observability/Otlp.d.ts.map +1 -1
  441. package/dist/observability/Otlp.js +10 -0
  442. package/dist/observability/Otlp.js.map +1 -1
  443. package/dist/observability/OtlpResource.d.ts +7 -0
  444. package/dist/observability/OtlpResource.d.ts.map +1 -1
  445. package/dist/observability/OtlpResource.js +11 -1
  446. package/dist/observability/OtlpResource.js.map +1 -1
  447. package/dist/persistence/KeyValueStore.d.ts +47 -2
  448. package/dist/persistence/KeyValueStore.d.ts.map +1 -1
  449. package/dist/persistence/KeyValueStore.js +129 -18
  450. package/dist/persistence/KeyValueStore.js.map +1 -1
  451. package/dist/persistence/PersistedQueue.d.ts +9 -0
  452. package/dist/persistence/PersistedQueue.d.ts.map +1 -1
  453. package/dist/persistence/PersistedQueue.js +94 -52
  454. package/dist/persistence/PersistedQueue.js.map +1 -1
  455. package/dist/persistence/Persistence.d.ts +10 -4
  456. package/dist/persistence/Persistence.d.ts.map +1 -1
  457. package/dist/persistence/Persistence.js +18 -11
  458. package/dist/persistence/Persistence.js.map +1 -1
  459. package/dist/process/ChildProcess.d.ts +207 -67
  460. package/dist/process/ChildProcess.d.ts.map +1 -1
  461. package/dist/process/ChildProcess.js +56 -158
  462. package/dist/process/ChildProcess.js.map +1 -1
  463. package/dist/process/ChildProcessSpawner.d.ts +5 -0
  464. package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
  465. package/dist/process/ChildProcessSpawner.js.map +1 -1
  466. package/dist/process/CommandLine.d.ts +294 -0
  467. package/dist/process/CommandLine.d.ts.map +1 -0
  468. package/dist/process/CommandLine.js +481 -0
  469. package/dist/process/CommandLine.js.map +1 -0
  470. package/dist/process/index.d.ts +5 -0
  471. package/dist/process/index.d.ts.map +1 -1
  472. package/dist/process/index.js +5 -0
  473. package/dist/process/index.js.map +1 -1
  474. package/dist/reactivity/Atom.d.ts +2 -1
  475. package/dist/reactivity/Atom.d.ts.map +1 -1
  476. package/dist/reactivity/Atom.js +3 -4
  477. package/dist/reactivity/Atom.js.map +1 -1
  478. package/dist/reactivity/AtomRegistry.js.map +1 -1
  479. package/dist/rpc/RpcClient.d.ts +16 -1
  480. package/dist/rpc/RpcClient.d.ts.map +1 -1
  481. package/dist/rpc/RpcClient.js +50 -16
  482. package/dist/rpc/RpcClient.js.map +1 -1
  483. package/dist/rpc/RpcMessage.d.ts +10 -1
  484. package/dist/rpc/RpcMessage.d.ts.map +1 -1
  485. package/dist/rpc/RpcMessage.js +1 -0
  486. package/dist/rpc/RpcMessage.js.map +1 -1
  487. package/dist/rpc/RpcSerialization.d.ts.map +1 -1
  488. package/dist/rpc/RpcSerialization.js +6 -0
  489. package/dist/rpc/RpcSerialization.js.map +1 -1
  490. package/dist/rpc/RpcServer.d.ts +31 -0
  491. package/dist/rpc/RpcServer.d.ts.map +1 -1
  492. package/dist/rpc/RpcServer.js +139 -66
  493. package/dist/rpc/RpcServer.js.map +1 -1
  494. package/dist/schema/Model.d.ts +14 -0
  495. package/dist/schema/Model.d.ts.map +1 -1
  496. package/dist/schema/Model.js +18 -3
  497. package/dist/schema/Model.js.map +1 -1
  498. package/dist/sql/Migrator.d.ts +0 -19
  499. package/dist/sql/Migrator.d.ts.map +1 -1
  500. package/dist/sql/Migrator.js +3 -48
  501. package/dist/sql/Migrator.js.map +1 -1
  502. package/dist/sql/MigratorFileSystem.d.ts +21 -0
  503. package/dist/sql/MigratorFileSystem.d.ts.map +1 -0
  504. package/dist/sql/MigratorFileSystem.js +57 -0
  505. package/dist/sql/MigratorFileSystem.js.map +1 -0
  506. package/dist/sql/SqlClient.d.ts.map +1 -1
  507. package/dist/sql/SqlClient.js +5 -9
  508. package/dist/sql/SqlClient.js.map +1 -1
  509. package/dist/sql/Statement.d.ts +20 -6
  510. package/dist/sql/Statement.d.ts.map +1 -1
  511. package/dist/sql/Statement.js +0 -13
  512. package/dist/sql/Statement.js.map +1 -1
  513. package/dist/sql/index.js +1 -1
  514. package/dist/testing/index.d.ts +0 -5
  515. package/dist/testing/index.d.ts.map +1 -1
  516. package/dist/testing/index.js +0 -5
  517. package/dist/testing/index.js.map +1 -1
  518. package/dist/workflow/internal/crypto.js +9 -8
  519. package/dist/workflow/internal/crypto.js.map +1 -1
  520. package/package.json +3 -1
  521. package/src/BigDecimal.ts +3 -0
  522. package/src/Channel.ts +17 -11
  523. package/src/Config.ts +7 -1
  524. package/src/Context.ts +34 -10
  525. package/src/Cron.ts +178 -29
  526. package/src/Duration.ts +140 -0
  527. package/src/Effect.ts +914 -85
  528. package/src/FileSystem.ts +65 -4
  529. package/src/Glob.ts +205 -0
  530. package/src/Match.ts +127 -0
  531. package/src/Pool.ts +73 -15
  532. package/src/Random.ts +3 -3
  533. package/src/RcMap.ts +5 -1
  534. package/src/Schedule.ts +26 -3
  535. package/src/Schema.ts +1189 -62
  536. package/src/SchemaGetter.ts +27 -11
  537. package/src/SchemaRepresentation.ts +19 -0
  538. package/src/SchemaTransformation.ts +8 -3
  539. package/src/ScopedCache.ts +5 -9
  540. package/src/Semaphore.ts +141 -0
  541. package/src/Stream.ts +15 -6
  542. package/src/Terminal.ts +19 -1
  543. package/src/ai/AiError.ts +56 -80
  544. package/src/ai/Decision.ts +257 -6
  545. package/src/ai/DecisionModel.ts +171 -28
  546. package/src/ai/McpServer.ts +1269 -286
  547. package/src/ai/McpTest.ts +380 -0
  548. package/src/ai/Response.ts +2 -22
  549. package/src/ai/Tool.ts +27 -8
  550. package/src/ai/index.ts +6 -0
  551. package/src/ai/internal/mcpCore.ts +78 -44
  552. package/src/ai/internal/mcpProtocol/v2024_11_05.ts +4 -7
  553. package/src/ai/internal/mcpProtocol/v2025_03_26.ts +4 -7
  554. package/src/ai/internal/mcpProtocol/v2025_06_18.ts +4 -7
  555. package/src/ai/internal/mcpProtocol/v2025_11_25.ts +4 -7
  556. package/src/ai/internal/mcpProtocol/v2026_07_28.ts +15 -10
  557. package/src/ai/internal/mcpProtocol.ts +29 -0
  558. package/src/ai/internal/mcpRuntime.ts +9 -5
  559. package/src/ai/internal/mcpStatefulRuntime.ts +14 -2
  560. package/src/cli/Argument.ts +6 -0
  561. package/src/cli/CliOutput.ts +117 -49
  562. package/src/cli/Command.ts +23 -0
  563. package/src/cli/Flag.ts +107 -0
  564. package/src/cli/HelpDoc.ts +18 -1
  565. package/src/cli/Param.ts +6 -0
  566. package/src/cli/Primitive.ts +16 -1
  567. package/src/cli/Prompt.ts +1 -0
  568. package/src/cli/internal/help.ts +21 -9
  569. package/src/cluster/Sharding.ts +93 -26
  570. package/src/cluster/ShardingConfig.ts +41 -3
  571. package/src/cluster/SingleRunner.ts +3 -3
  572. package/src/cluster/SqlMessageStorage.ts +49 -17
  573. package/src/cluster/SqlRunnerStorage.ts +37 -27
  574. package/src/crypto/Aead.ts +517 -0
  575. package/src/crypto/Cipher.ts +326 -0
  576. package/src/crypto/CryptoError.ts +242 -0
  577. package/src/crypto/Digest.ts +167 -0
  578. package/src/crypto/Kdf.ts +315 -0
  579. package/src/crypto/KeyAgreement.ts +489 -0
  580. package/src/crypto/KeyFormat.ts +712 -0
  581. package/src/crypto/KeyWrap.ts +639 -0
  582. package/src/crypto/Mac.ts +386 -0
  583. package/src/crypto/SecureRandom.ts +459 -0
  584. package/src/crypto/Signature.ts +673 -0
  585. package/src/crypto/WebCrypto.ts +64 -0
  586. package/src/crypto/index.ts +78 -0
  587. package/src/crypto/internal/asymmetric.ts +329 -0
  588. package/src/crypto/internal/chacha.ts +1088 -0
  589. package/src/crypto/internal/der.ts +110 -0
  590. package/src/crypto/internal/digest.ts +16 -0
  591. package/src/crypto/internal/key.ts +235 -0
  592. package/src/crypto/internal/md5.ts +170 -0
  593. package/src/crypto/internal/webCrypto.ts +150 -0
  594. package/src/encoding/Base64Url.ts +5 -2
  595. package/src/encoding/Csv.ts +1298 -0
  596. package/src/encoding/Hex.ts +3 -2
  597. package/src/encoding/SchemaBinary.ts +40 -4
  598. package/src/encoding/Toml.ts +85 -20
  599. package/src/encoding/Yaml.ts +61 -18
  600. package/src/encoding/index.ts +6 -0
  601. package/src/eventlog/EventJournal.ts +4 -3
  602. package/src/eventlog/EventLog.ts +340 -15
  603. package/src/eventlog/EventLogEncryption.ts +118 -110
  604. package/src/eventlog/EventLogMessage.ts +273 -1
  605. package/src/eventlog/EventLogRemote.ts +367 -23
  606. package/src/eventlog/EventLogServer.ts +23 -8
  607. package/src/eventlog/EventLogServerEncrypted.ts +1130 -67
  608. package/src/eventlog/EventLogSessionAuth.ts +56 -70
  609. package/src/eventlog/EventRow.ts +12 -3
  610. package/src/eventlog/SqlEventJournal.ts +2 -2
  611. package/src/eventlog/SqlEventLogServerEncrypted.ts +1244 -136
  612. package/src/eventlog/SqlEventLogServerUnencrypted.ts +2 -2
  613. package/src/eventlog/internal/batches.ts +30 -0
  614. package/src/eventlog/internal/compaction.ts +64 -0
  615. package/src/eventlog/internal/identityRootSecretDerivation.ts +93 -123
  616. package/src/eventlog/internal/remoteCompaction.ts +92 -0
  617. package/src/http/Cookies.ts +281 -1
  618. package/src/http/FetchHttpClient.ts +88 -16
  619. package/src/http/HttpClient.ts +89 -22
  620. package/src/http/HttpClientRequest.ts +12 -9
  621. package/src/http/HttpClientResponse.ts +3 -2
  622. package/src/http/HttpMethod.ts +10 -2
  623. package/src/http/HttpServerRequest.ts +15 -30
  624. package/src/http/HttpServerResponse.ts +3 -2
  625. package/src/http/HttpTraceContext.ts +7 -4
  626. package/src/http/ProblemDetails.ts +149 -0
  627. package/src/http/index.ts +6 -0
  628. package/src/http/internal/decompression.ts +4 -4
  629. package/src/http/internal/urlParams.ts +8 -0
  630. package/src/http-api/HttpApiBuilder.ts +24 -12
  631. package/src/http-api/HttpApiClient.ts +67 -1
  632. package/src/http-api/HttpApiEndpoint.ts +14 -5
  633. package/src/http-api/HttpApiError.ts +250 -0
  634. package/src/http-api/HttpApiMiddleware.ts +95 -1
  635. package/src/http-api/HttpApiSchema.ts +105 -14
  636. package/src/index.ts +6 -6
  637. package/src/internal/effect.ts +34 -18
  638. package/src/internal/glob.ts +736 -0
  639. package/src/internal/matcher.ts +17 -0
  640. package/src/internal/persistence.ts +11 -0
  641. package/src/internal/rcRef.ts +4 -1
  642. package/src/internal/schema/toCodeDocument.ts +7 -3
  643. package/src/internal/trie.ts +43 -14
  644. package/src/internal/ulid.ts +44 -0
  645. package/src/internal/uuid.ts +57 -16
  646. package/src/internal/version.ts +1 -1
  647. package/src/observability/Otlp.ts +21 -4
  648. package/src/observability/OtlpResource.ts +9 -1
  649. package/src/persistence/KeyValueStore.ts +219 -22
  650. package/src/persistence/PersistedQueue.ts +128 -59
  651. package/src/persistence/Persistence.ts +20 -13
  652. package/src/process/ChildProcess.ts +255 -260
  653. package/src/process/ChildProcessSpawner.ts +5 -0
  654. package/src/process/CommandLine.ts +630 -0
  655. package/src/process/index.ts +6 -0
  656. package/src/reactivity/Atom.ts +5 -5
  657. package/src/reactivity/AtomRegistry.ts +1 -1
  658. package/src/rpc/RpcClient.ts +62 -26
  659. package/src/rpc/RpcMessage.ts +10 -1
  660. package/src/rpc/RpcSerialization.ts +3 -0
  661. package/src/rpc/RpcServer.ts +176 -78
  662. package/src/schema/Model.ts +26 -3
  663. package/src/sql/Migrator.ts +4 -63
  664. package/src/sql/MigratorFileSystem.ts +71 -0
  665. package/src/sql/SqlClient.ts +2 -16
  666. package/src/sql/Statement.ts +8 -7
  667. package/src/sql/index.ts +1 -1
  668. package/src/testing/index.ts +0 -6
  669. package/src/workflow/internal/crypto.ts +15 -11
  670. package/dist/Crypto.d.ts +0 -244
  671. package/dist/Crypto.d.ts.map +0 -1
  672. package/dist/Crypto.js +0 -139
  673. package/dist/Crypto.js.map +0 -1
  674. package/dist/testing/TestCrypto.d.ts +0 -73
  675. package/dist/testing/TestCrypto.d.ts.map +0 -1
  676. package/dist/testing/TestCrypto.js +0 -87
  677. package/dist/testing/TestCrypto.js.map +0 -1
  678. package/src/Crypto.ts +0 -347
  679. package/src/testing/TestCrypto.ts +0 -94
@@ -0,0 +1,323 @@
1
+ /**
2
+ * Key agreement: X25519, and ECDH on P-256, P-384 and P-521.
3
+ *
4
+ * The {@link KeyAgreement} service generates key pairs, derives a shared
5
+ * secret from a private key and a peer's public key, and computes a private
6
+ * key's public key. The top-level {@link privateKey}, {@link publicKey},
7
+ * {@link privateKeyFromCryptoKey}, {@link publicKeyFromCryptoKey}, and
8
+ * {@link toBytes} functions build and export keys without a service.
9
+ *
10
+ * Keys carry their algorithm in their type, so deriving a secret from keys on
11
+ * different curves is a type error. The shared secret is plain bytes: pass it
12
+ * through `Kdf` before using it as a key.
13
+ *
14
+ * Keys are opaque. They hold either bytes or a `CryptoKey`, display only their
15
+ * algorithm, and compare by reference. The bytes are:
16
+ *
17
+ * - X25519: the 32-byte private key and the 32-byte public key;
18
+ * - ECDH: PKCS#8 for private keys, and the uncompressed SEC1 point for public
19
+ * keys.
20
+ *
21
+ * Only X25519 private keys and X25519 and ECDH public keys have a raw
22
+ * constructor. ECDH private keys come from
23
+ * `KeyAgreement.generateKeyPair`, `CryptoKey`s, or key formats.
24
+ *
25
+ * **Gotchas**
26
+ *
27
+ * - X25519 needs Chrome 133, Firefox 130, or Safari 17. There is no fallback
28
+ * for older browsers.
29
+ * - X25519 private keys are generated from `SecureRandom` bytes, so a seeded
30
+ * `SecureRandom` reproduces them. ECDH key generation uses WebCrypto's own
31
+ * randomness and cannot be seeded.
32
+ *
33
+ * @stability unstable
34
+ * @since 4.0.0
35
+ */
36
+ import * as Context from "../Context.ts";
37
+ import * as Effect from "../Effect.ts";
38
+ import type { Inspectable } from "../Inspectable.ts";
39
+ import * as Layer from "../Layer.ts";
40
+ import * as CryptoError from "./CryptoError.ts";
41
+ import * as SecureRandom from "./SecureRandom.ts";
42
+ declare const PrivateKeyTypeId: "~effect/crypto/KeyAgreement/PrivateKey";
43
+ declare const PublicKeyTypeId: "~effect/crypto/KeyAgreement/PublicKey";
44
+ /**
45
+ * An elliptic curve for ECDH.
46
+ *
47
+ * @stability unstable
48
+ * @category models
49
+ * @since 4.0.0
50
+ */
51
+ export type Curve = "P-256" | "P-384" | "P-521";
52
+ /**
53
+ * X25519 (RFC 7748), with 32-byte shared secrets.
54
+ *
55
+ * @stability unstable
56
+ * @category models
57
+ * @since 4.0.0
58
+ */
59
+ export interface X25519 {
60
+ readonly _tag: "X25519";
61
+ readonly name: "x25519";
62
+ }
63
+ /**
64
+ * ECDH on a NIST curve, with shared secrets of the curve's coordinate size.
65
+ *
66
+ * @stability unstable
67
+ * @category models
68
+ * @since 4.0.0
69
+ */
70
+ export interface Ecdh<C extends Curve = Curve> {
71
+ readonly _tag: "Ecdh";
72
+ readonly name: {
73
+ readonly "P-256": "ecdhP256";
74
+ readonly "P-384": "ecdhP384";
75
+ readonly "P-521": "ecdhP521";
76
+ }[C];
77
+ readonly namedCurve: C;
78
+ }
79
+ /**
80
+ * A key agreement algorithm, such as {@link x25519} or {@link ecdhP256}.
81
+ *
82
+ * @stability unstable
83
+ * @category models
84
+ * @since 4.0.0
85
+ */
86
+ export type Algorithm = X25519 | Ecdh;
87
+ /**
88
+ * X25519 (RFC 7748).
89
+ *
90
+ * @stability unstable
91
+ * @category algorithms
92
+ * @since 4.0.0
93
+ */
94
+ export declare const x25519: X25519;
95
+ /**
96
+ * ECDH on P-256, with 32-byte shared secrets.
97
+ *
98
+ * @stability unstable
99
+ * @category algorithms
100
+ * @since 4.0.0
101
+ */
102
+ export declare const ecdhP256: Ecdh<"P-256">;
103
+ /**
104
+ * ECDH on P-384, with 48-byte shared secrets.
105
+ *
106
+ * @stability unstable
107
+ * @category algorithms
108
+ * @since 4.0.0
109
+ */
110
+ export declare const ecdhP384: Ecdh<"P-384">;
111
+ /**
112
+ * ECDH on P-521, with 66-byte shared secrets.
113
+ *
114
+ * @stability unstable
115
+ * @category algorithms
116
+ * @since 4.0.0
117
+ */
118
+ export declare const ecdhP521: Ecdh<"P-521">;
119
+ /**
120
+ * An opaque key agreement private key for the algorithm `A`.
121
+ *
122
+ * **Details**
123
+ *
124
+ * The key holds either bytes or a `CryptoKey` from
125
+ * {@link privateKeyFromCryptoKey}. `toString`, `toJSON`, and `inspect` show
126
+ * only the algorithm. Keys compare by reference and do not implement `Equal`.
127
+ *
128
+ * @stability unstable
129
+ * @category models
130
+ * @since 4.0.0
131
+ */
132
+ export interface PrivateKey<out A extends Algorithm = Algorithm> extends Inspectable {
133
+ readonly [PrivateKeyTypeId]: typeof PrivateKeyTypeId;
134
+ readonly algorithm: A;
135
+ }
136
+ /**
137
+ * An opaque key agreement public key for the algorithm `A`.
138
+ *
139
+ * **Details**
140
+ *
141
+ * The key holds either bytes or a `CryptoKey` from
142
+ * {@link publicKeyFromCryptoKey}. Keys compare by reference and do not
143
+ * implement `Equal`.
144
+ *
145
+ * @stability unstable
146
+ * @category models
147
+ * @since 4.0.0
148
+ */
149
+ export interface PublicKey<out A extends Algorithm = Algorithm> extends Inspectable {
150
+ readonly [PublicKeyTypeId]: typeof PublicKeyTypeId;
151
+ readonly algorithm: A;
152
+ }
153
+ /**
154
+ * A private key and its public key.
155
+ *
156
+ * @stability unstable
157
+ * @category models
158
+ * @since 4.0.0
159
+ */
160
+ export interface KeyPair<out A extends Algorithm = Algorithm> {
161
+ readonly privateKey: PrivateKey<A>;
162
+ readonly publicKey: PublicKey<A>;
163
+ }
164
+ /**
165
+ * Checks whether a value is a {@link PrivateKey}.
166
+ *
167
+ * @stability unstable
168
+ * @category guards
169
+ * @since 4.0.0
170
+ */
171
+ export declare const isPrivateKey: (u: unknown) => u is PrivateKey;
172
+ /**
173
+ * Checks whether a value is a {@link PublicKey}.
174
+ *
175
+ * @stability unstable
176
+ * @category guards
177
+ * @since 4.0.0
178
+ */
179
+ export declare const isPublicKey: (u: unknown) => u is PublicKey;
180
+ declare const KeyAgreement_base: Context.ServiceClass<KeyAgreement, "effect/crypto/KeyAgreement", {
181
+ /**
182
+ * Generates a key pair. X25519 private keys are 32 bytes from
183
+ * `SecureRandom`. ECDH keys are generated by WebCrypto and exported to
184
+ * PKCS#8 and an uncompressed point.
185
+ */
186
+ readonly generateKeyPair: <A extends Algorithm>(algorithm: A) => Effect.Effect<KeyPair<A>, CryptoError.CryptoError>;
187
+ /**
188
+ * Computes the secret shared by a private key and a peer's public key on
189
+ * the same curve. A peer key that is not on the curve, or a low-order
190
+ * X25519 key that gives an all-zero secret, fails with an `InvalidKey`
191
+ * reason.
192
+ */
193
+ readonly deriveSharedSecret: <A extends Algorithm>(privateKey: PrivateKey<A>, publicKey: PublicKey<A>) => Effect.Effect<Uint8Array, CryptoError.CryptoError>;
194
+ /**
195
+ * Computes the public key of a private key. A non-extractable `CryptoKey`
196
+ * fails with a `NotExtractable` reason, since its public members cannot be
197
+ * read.
198
+ */
199
+ readonly publicKeyOf: <A extends Algorithm>(privateKey: PrivateKey<A>) => Effect.Effect<PublicKey<A>, CryptoError.CryptoError>;
200
+ }>;
201
+ /**
202
+ * Service that generates key pairs, derives shared secrets, and computes
203
+ * public keys.
204
+ *
205
+ * **Example** (Agreeing on a secret with X25519)
206
+ *
207
+ * ```ts import.meta.vitest
208
+ * import { Effect, Layer } from "effect"
209
+ * import { KeyAgreement, SecureRandom } from "effect/crypto"
210
+ *
211
+ * const program = Effect.gen(function*() {
212
+ * const keyAgreement = yield* KeyAgreement.KeyAgreement
213
+ * const alice = yield* keyAgreement.generateKeyPair(KeyAgreement.x25519)
214
+ * const bob = yield* keyAgreement.generateKeyPair(KeyAgreement.x25519)
215
+ * const aliceSecret = yield* keyAgreement.deriveSharedSecret(alice.privateKey, bob.publicKey)
216
+ * const bobSecret = yield* keyAgreement.deriveSharedSecret(bob.privateKey, alice.publicKey)
217
+ * return aliceSecret.every((byte, i) => byte === bobSecret[i])
218
+ * })
219
+ *
220
+ * const layer = KeyAgreement.layerWebCrypto.pipe(Layer.provide(SecureRandom.layerWebCrypto))
221
+ * await Effect.runPromise(program.pipe(Effect.provide(layer))) // => true
222
+ * ```
223
+ *
224
+ * @stability unstable
225
+ * @category services
226
+ * @since 4.0.0
227
+ */
228
+ export declare class KeyAgreement extends KeyAgreement_base {
229
+ }
230
+ /**
231
+ * Layer that provides `KeyAgreement` on the `WebCrypto` reference.
232
+ *
233
+ * **Details**
234
+ *
235
+ * Every algorithm runs on `crypto.subtle`. The layer imports a byte-backed
236
+ * key on first use and caches the `CryptoKey`. X25519 private keys come from
237
+ * `SecureRandom`, so a seeded `SecureRandom` reproduces them.
238
+ *
239
+ * @stability unstable
240
+ * @category layers
241
+ * @since 4.0.0
242
+ */
243
+ export declare const layerWebCrypto: Layer.Layer<KeyAgreement, never, SecureRandom.SecureRandom>;
244
+ /**
245
+ * Builds an X25519 private key from its 32 bytes.
246
+ *
247
+ * **Details**
248
+ *
249
+ * The bytes are copied. Another length fails with an `InvalidKey` reason,
250
+ * including the 64-byte `private key‖public key` form libsodium uses: pass
251
+ * its first 32 bytes. ECDH private keys have no raw form, so passing them is
252
+ * a type error.
253
+ *
254
+ * @stability unstable
255
+ * @category constructors
256
+ * @since 4.0.0
257
+ */
258
+ export declare const privateKey: <A extends X25519>(algorithm: A, bytes: Uint8Array) => Effect.Effect<PrivateKey<A>, CryptoError.CryptoError>;
259
+ /**
260
+ * Builds a public key from its raw form: 32 bytes for X25519, or an
261
+ * uncompressed SEC1 point for ECDH.
262
+ *
263
+ * **Details**
264
+ *
265
+ * The bytes are copied. A wrong length, or a compressed point, fails with an
266
+ * `InvalidKey` reason. Only uncompressed points are taken because Safari and
267
+ * Firefox before 146 reject compressed ones in raw import, though they accept
268
+ * them inside SPKI: decode a compressed point with `KeyFormat.spki`. Whether a
269
+ * point is on the curve is checked when the key is first used.
270
+ *
271
+ * @stability unstable
272
+ * @category constructors
273
+ * @since 4.0.0
274
+ */
275
+ export declare const publicKey: <A extends Algorithm>(algorithm: A, bytes: Uint8Array) => Effect.Effect<PublicKey<A>, CryptoError.CryptoError>;
276
+ /**
277
+ * Builds a private key from an existing `CryptoKey`, such as a
278
+ * non-extractable one.
279
+ *
280
+ * **Details**
281
+ *
282
+ * The `CryptoKey` must be a private key of the algorithm's WebCrypto name and
283
+ * curve, with the `deriveBits` usage. Otherwise the constructor fails with an
284
+ * `InvalidKey` reason. The key must come from the `Crypto` object of the
285
+ * `WebCrypto` reference.
286
+ *
287
+ * @stability unstable
288
+ * @category constructors
289
+ * @since 4.0.0
290
+ */
291
+ export declare const privateKeyFromCryptoKey: <A extends Algorithm>(algorithm: A, cryptoKey: CryptoKey) => Effect.Effect<PrivateKey<A>, CryptoError.CryptoError>;
292
+ /**
293
+ * Builds a public key from an existing `CryptoKey`.
294
+ *
295
+ * **Details**
296
+ *
297
+ * The `CryptoKey` must be a public key of the algorithm's WebCrypto name and
298
+ * curve. Public keys need no usages. Otherwise the constructor fails with an
299
+ * `InvalidKey` reason. The key must come from the `Crypto` object of the
300
+ * `WebCrypto` reference.
301
+ *
302
+ * @stability unstable
303
+ * @category constructors
304
+ * @since 4.0.0
305
+ */
306
+ export declare const publicKeyFromCryptoKey: <A extends Algorithm>(algorithm: A, cryptoKey: CryptoKey) => Effect.Effect<PublicKey<A>, CryptoError.CryptoError>;
307
+ /**
308
+ * Exports a key's stored bytes.
309
+ *
310
+ * **Details**
311
+ *
312
+ * Returns a fresh `Uint8Array`: the raw key for X25519, and PKCS#8 or the
313
+ * uncompressed point for ECDH. A `CryptoKey`-backed key is exported on the
314
+ * `WebCrypto` reference, and fails with a `NotExtractable` reason when the
315
+ * `CryptoKey` is not extractable.
316
+ *
317
+ * @stability unstable
318
+ * @category converting
319
+ * @since 4.0.0
320
+ */
321
+ export declare const toBytes: (key: PrivateKey | PublicKey) => Effect.Effect<Uint8Array, CryptoError.CryptoError>;
322
+ export {};
323
+ //# sourceMappingURL=KeyAgreement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyAgreement.d.ts","sourceRoot":"","sources":["../../src/crypto/KeyAgreement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,303 @@
1
+ /**
2
+ * Key agreement: X25519, and ECDH on P-256, P-384 and P-521.
3
+ *
4
+ * The {@link KeyAgreement} service generates key pairs, derives a shared
5
+ * secret from a private key and a peer's public key, and computes a private
6
+ * key's public key. The top-level {@link privateKey}, {@link publicKey},
7
+ * {@link privateKeyFromCryptoKey}, {@link publicKeyFromCryptoKey}, and
8
+ * {@link toBytes} functions build and export keys without a service.
9
+ *
10
+ * Keys carry their algorithm in their type, so deriving a secret from keys on
11
+ * different curves is a type error. The shared secret is plain bytes: pass it
12
+ * through `Kdf` before using it as a key.
13
+ *
14
+ * Keys are opaque. They hold either bytes or a `CryptoKey`, display only their
15
+ * algorithm, and compare by reference. The bytes are:
16
+ *
17
+ * - X25519: the 32-byte private key and the 32-byte public key;
18
+ * - ECDH: PKCS#8 for private keys, and the uncompressed SEC1 point for public
19
+ * keys.
20
+ *
21
+ * Only X25519 private keys and X25519 and ECDH public keys have a raw
22
+ * constructor. ECDH private keys come from
23
+ * `KeyAgreement.generateKeyPair`, `CryptoKey`s, or key formats.
24
+ *
25
+ * **Gotchas**
26
+ *
27
+ * - X25519 needs Chrome 133, Firefox 130, or Safari 17. There is no fallback
28
+ * for older browsers.
29
+ * - X25519 private keys are generated from `SecureRandom` bytes, so a seeded
30
+ * `SecureRandom` reproduces them. ECDH key generation uses WebCrypto's own
31
+ * randomness and cannot be seeded.
32
+ *
33
+ * @stability unstable
34
+ * @since 4.0.0
35
+ */
36
+ import * as Context from "../Context.js";
37
+ import * as Effect from "../Effect.js";
38
+ import * as Layer from "../Layer.js";
39
+ import * as Predicate from "../Predicate.js";
40
+ import * as CryptoError from "./CryptoError.js";
41
+ import * as Asymmetric from "./internal/asymmetric.js";
42
+ import * as KeyModel from "./internal/key.js";
43
+ import * as internal from "./internal/webCrypto.js";
44
+ import * as SecureRandom from "./SecureRandom.js";
45
+ import { WebCrypto } from "./WebCrypto.js";
46
+ const PrivateKeyTypeId = "~effect/crypto/KeyAgreement/PrivateKey";
47
+ const PublicKeyTypeId = "~effect/crypto/KeyAgreement/PublicKey";
48
+ /**
49
+ * X25519 (RFC 7748).
50
+ *
51
+ * @stability unstable
52
+ * @category algorithms
53
+ * @since 4.0.0
54
+ */
55
+ export const x25519 = {
56
+ _tag: "X25519",
57
+ name: "x25519"
58
+ };
59
+ /**
60
+ * ECDH on P-256, with 32-byte shared secrets.
61
+ *
62
+ * @stability unstable
63
+ * @category algorithms
64
+ * @since 4.0.0
65
+ */
66
+ export const ecdhP256 = {
67
+ _tag: "Ecdh",
68
+ name: "ecdhP256",
69
+ namedCurve: "P-256"
70
+ };
71
+ /**
72
+ * ECDH on P-384, with 48-byte shared secrets.
73
+ *
74
+ * @stability unstable
75
+ * @category algorithms
76
+ * @since 4.0.0
77
+ */
78
+ export const ecdhP384 = {
79
+ _tag: "Ecdh",
80
+ name: "ecdhP384",
81
+ namedCurve: "P-384"
82
+ };
83
+ /**
84
+ * ECDH on P-521, with 66-byte shared secrets.
85
+ *
86
+ * @stability unstable
87
+ * @category algorithms
88
+ * @since 4.0.0
89
+ */
90
+ export const ecdhP521 = {
91
+ _tag: "Ecdh",
92
+ name: "ecdhP521",
93
+ namedCurve: "P-521"
94
+ };
95
+ const PrivateKeyProto = /*#__PURE__*/KeyModel.redactedProto(PrivateKeyTypeId, "KeyAgreement.PrivateKey");
96
+ const PublicKeyProto = /*#__PURE__*/KeyModel.redactedProto(PublicKeyTypeId, "KeyAgreement.PublicKey");
97
+ /**
98
+ * Checks whether a value is a {@link PrivateKey}.
99
+ *
100
+ * @stability unstable
101
+ * @category guards
102
+ * @since 4.0.0
103
+ */
104
+ export const isPrivateKey = u => Predicate.hasProperty(u, PrivateKeyTypeId);
105
+ /**
106
+ * Checks whether a value is a {@link PublicKey}.
107
+ *
108
+ * @stability unstable
109
+ * @category guards
110
+ * @since 4.0.0
111
+ */
112
+ export const isPublicKey = u => Predicate.hasProperty(u, PublicKeyTypeId);
113
+ const specOf = algorithm => algorithm._tag === "X25519" ? {
114
+ name: "X25519",
115
+ importParams: {
116
+ name: "X25519"
117
+ },
118
+ privateUsages: ["deriveBits"],
119
+ publicUsages: [],
120
+ seedPrefix: Asymmetric.x25519Prefix,
121
+ publicFormat: "raw"
122
+ } : {
123
+ name: "ECDH",
124
+ importParams: {
125
+ name: "ECDH",
126
+ namedCurve: algorithm.namedCurve
127
+ },
128
+ privateUsages: ["deriveBits"],
129
+ publicUsages: [],
130
+ seedPrefix: undefined,
131
+ publicFormat: "raw",
132
+ check: Asymmetric.checkNamedCurve(algorithm.namedCurve)
133
+ };
134
+ /** @internal */
135
+ export const family = {
136
+ module: "KeyAgreement",
137
+ specOf,
138
+ privateKeyProto: PrivateKeyProto,
139
+ publicKeyProto: PublicKeyProto,
140
+ isPrivateKey
141
+ };
142
+ // P-521 coordinates are 521 bits, padded to 66 bytes.
143
+ const sharedSecretBits = algorithm => algorithm._tag === "X25519" ? 256 : 8 * Asymmetric.coordinateSizes[algorithm.namedCurve];
144
+ const invalidPeer = (description, cause) => new CryptoError.CryptoError({
145
+ module: "KeyAgreement",
146
+ method: "deriveSharedSecret",
147
+ reason: new CryptoError.InvalidKey(cause === undefined ? {
148
+ description
149
+ } : {
150
+ description,
151
+ cause
152
+ })
153
+ });
154
+ /**
155
+ * Service that generates key pairs, derives shared secrets, and computes
156
+ * public keys.
157
+ *
158
+ * **Example** (Agreeing on a secret with X25519)
159
+ *
160
+ * ```ts import.meta.vitest
161
+ * import { Effect, Layer } from "effect"
162
+ * import { KeyAgreement, SecureRandom } from "effect/crypto"
163
+ *
164
+ * const program = Effect.gen(function*() {
165
+ * const keyAgreement = yield* KeyAgreement.KeyAgreement
166
+ * const alice = yield* keyAgreement.generateKeyPair(KeyAgreement.x25519)
167
+ * const bob = yield* keyAgreement.generateKeyPair(KeyAgreement.x25519)
168
+ * const aliceSecret = yield* keyAgreement.deriveSharedSecret(alice.privateKey, bob.publicKey)
169
+ * const bobSecret = yield* keyAgreement.deriveSharedSecret(bob.privateKey, alice.publicKey)
170
+ * return aliceSecret.every((byte, i) => byte === bobSecret[i])
171
+ * })
172
+ *
173
+ * const layer = KeyAgreement.layerWebCrypto.pipe(Layer.provide(SecureRandom.layerWebCrypto))
174
+ * await Effect.runPromise(program.pipe(Effect.provide(layer))) // => true
175
+ * ```
176
+ *
177
+ * @stability unstable
178
+ * @category services
179
+ * @since 4.0.0
180
+ */
181
+ export class KeyAgreement extends /*#__PURE__*/Context.Service()("effect/crypto/KeyAgreement") {}
182
+ /**
183
+ * Layer that provides `KeyAgreement` on the `WebCrypto` reference.
184
+ *
185
+ * **Details**
186
+ *
187
+ * Every algorithm runs on `crypto.subtle`. The layer imports a byte-backed
188
+ * key on first use and caches the `CryptoKey`. X25519 private keys come from
189
+ * `SecureRandom`, so a seeded `SecureRandom` reproduces them.
190
+ *
191
+ * @stability unstable
192
+ * @category layers
193
+ * @since 4.0.0
194
+ */
195
+ export const layerWebCrypto = /*#__PURE__*/Layer.effect(KeyAgreement, /*#__PURE__*/Effect.gen(function* () {
196
+ const random = yield* SecureRandom.SecureRandom;
197
+ const crypto = yield* WebCrypto;
198
+ const caches = Asymmetric.makeCaches(family);
199
+ return KeyAgreement.of({
200
+ generateKeyPair: algorithm => Asymmetric.generateKeyPair(family, crypto, random, algorithm, specOf(algorithm).importParams),
201
+ deriveSharedSecret: (privateKey, publicKey) => Effect.suspend(() => {
202
+ const algorithm = privateKey.algorithm;
203
+ // The types keep curves apart, but keys typed with the default
204
+ // `Algorithm` can still differ at run time.
205
+ if (algorithm.name !== publicKey.algorithm.name) {
206
+ return Effect.fail(invalidPeer(`Expected a ${algorithm.name} public key, not ${publicKey.algorithm.name}`));
207
+ }
208
+ const onError = cause => Asymmetric.publicKeyError("KeyAgreement", "deriveSharedSecret", publicKey, cause);
209
+ // The keys are imported before deriving, so an `OperationError` from
210
+ // `deriveBits` can only come from the peer key.
211
+ return internal.run("KeyAgreement", "deriveSharedSecret", algorithm.name, crypto, async subtle => ({
212
+ privateKey: await caches.privateKey(subtle, privateKey),
213
+ publicKey: await caches.publicKey(subtle, publicKey)
214
+ }), onError).pipe(Effect.flatMap(keys => internal.run("KeyAgreement", "deriveSharedSecret", algorithm.name, crypto, async subtle => new Uint8Array(await subtle.deriveBits({
215
+ name: specOf(algorithm).name,
216
+ public: keys.publicKey
217
+ }, keys.privateKey, sharedSecretBits(algorithm))), cause => internal.isOperationError(cause) ? invalidPeer("Invalid peer public key", cause) : onError(cause))), Effect.flatMap(secret =>
218
+ // RFC 7748, section 6.1: an all-zero X25519 output means the peer
219
+ // sent a low-order point, and protocols such as SSH must abort.
220
+ algorithm._tag === "X25519" && secret.every(byte => byte === 0) ? Effect.fail(invalidPeer("X25519 shared secret must not be all zeros")) : Effect.succeed(secret)));
221
+ }),
222
+ publicKeyOf: privateKey => Asymmetric.publicKeyOf(family, crypto, privateKey)
223
+ });
224
+ }));
225
+ /**
226
+ * Builds an X25519 private key from its 32 bytes.
227
+ *
228
+ * **Details**
229
+ *
230
+ * The bytes are copied. Another length fails with an `InvalidKey` reason,
231
+ * including the 64-byte `private key‖public key` form libsodium uses: pass
232
+ * its first 32 bytes. ECDH private keys have no raw form, so passing them is
233
+ * a type error.
234
+ *
235
+ * @stability unstable
236
+ * @category constructors
237
+ * @since 4.0.0
238
+ */
239
+ export const privateKey = (algorithm, bytes) => KeyModel.fromBytes("KeyAgreement", "privateKey", PrivateKeyProto, algorithm, bytes, Asymmetric.checkSeedLength("X25519", "private"));
240
+ /**
241
+ * Builds a public key from its raw form: 32 bytes for X25519, or an
242
+ * uncompressed SEC1 point for ECDH.
243
+ *
244
+ * **Details**
245
+ *
246
+ * The bytes are copied. A wrong length, or a compressed point, fails with an
247
+ * `InvalidKey` reason. Only uncompressed points are taken because Safari and
248
+ * Firefox before 146 reject compressed ones in raw import, though they accept
249
+ * them inside SPKI: decode a compressed point with `KeyFormat.spki`. Whether a
250
+ * point is on the curve is checked when the key is first used.
251
+ *
252
+ * @stability unstable
253
+ * @category constructors
254
+ * @since 4.0.0
255
+ */
256
+ export const publicKey = (algorithm, bytes) => KeyModel.fromBytes("KeyAgreement", "publicKey", PublicKeyProto, algorithm, bytes, algorithm._tag === "Ecdh" ? Asymmetric.checkPoint(algorithm.namedCurve) : Asymmetric.checkSeedLength("X25519", "public"));
257
+ /**
258
+ * Builds a private key from an existing `CryptoKey`, such as a
259
+ * non-extractable one.
260
+ *
261
+ * **Details**
262
+ *
263
+ * The `CryptoKey` must be a private key of the algorithm's WebCrypto name and
264
+ * curve, with the `deriveBits` usage. Otherwise the constructor fails with an
265
+ * `InvalidKey` reason. The key must come from the `Crypto` object of the
266
+ * `WebCrypto` reference.
267
+ *
268
+ * @stability unstable
269
+ * @category constructors
270
+ * @since 4.0.0
271
+ */
272
+ export const privateKeyFromCryptoKey = (algorithm, cryptoKey) => Asymmetric.fromCryptoKey(family, "privateKeyFromCryptoKey", algorithm, "private", cryptoKey);
273
+ /**
274
+ * Builds a public key from an existing `CryptoKey`.
275
+ *
276
+ * **Details**
277
+ *
278
+ * The `CryptoKey` must be a public key of the algorithm's WebCrypto name and
279
+ * curve. Public keys need no usages. Otherwise the constructor fails with an
280
+ * `InvalidKey` reason. The key must come from the `Crypto` object of the
281
+ * `WebCrypto` reference.
282
+ *
283
+ * @stability unstable
284
+ * @category constructors
285
+ * @since 4.0.0
286
+ */
287
+ export const publicKeyFromCryptoKey = (algorithm, cryptoKey) => Asymmetric.fromCryptoKey(family, "publicKeyFromCryptoKey", algorithm, "public", cryptoKey);
288
+ /**
289
+ * Exports a key's stored bytes.
290
+ *
291
+ * **Details**
292
+ *
293
+ * Returns a fresh `Uint8Array`: the raw key for X25519, and PKCS#8 or the
294
+ * uncompressed point for ECDH. A `CryptoKey`-backed key is exported on the
295
+ * `WebCrypto` reference, and fails with a `NotExtractable` reason when the
296
+ * `CryptoKey` is not extractable.
297
+ *
298
+ * @stability unstable
299
+ * @category converting
300
+ * @since 4.0.0
301
+ */
302
+ export const toBytes = key => Asymmetric.toBytes(family, key);
303
+ //# sourceMappingURL=KeyAgreement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyAgreement.js","names":[],"sources":["../../src/crypto/KeyAgreement.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}