effect 4.0.6 → 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 (978) hide show
  1. package/README.md +1 -1
  2. package/dist/Arbitrary.d.ts +10 -2
  3. package/dist/Arbitrary.d.ts.map +1 -1
  4. package/dist/Arbitrary.js +2 -1
  5. package/dist/Arbitrary.js.map +1 -1
  6. package/dist/BigDecimal.d.ts.map +1 -1
  7. package/dist/BigDecimal.js +3 -0
  8. package/dist/BigDecimal.js.map +1 -1
  9. package/dist/Channel.d.ts +12 -6
  10. package/dist/Channel.d.ts.map +1 -1
  11. package/dist/Channel.js +30 -9
  12. package/dist/Channel.js.map +1 -1
  13. package/dist/Config.d.ts +7 -1
  14. package/dist/Config.d.ts.map +1 -1
  15. package/dist/Config.js.map +1 -1
  16. package/dist/Context.d.ts +18 -1
  17. package/dist/Context.d.ts.map +1 -1
  18. package/dist/Context.js +27 -8
  19. package/dist/Context.js.map +1 -1
  20. package/dist/Cron.d.ts +81 -11
  21. package/dist/Cron.d.ts.map +1 -1
  22. package/dist/Cron.js +101 -26
  23. package/dist/Cron.js.map +1 -1
  24. package/dist/Data.d.ts +54 -235
  25. package/dist/Data.d.ts.map +1 -1
  26. package/dist/Data.js.map +1 -1
  27. package/dist/Duration.d.ts +78 -0
  28. package/dist/Duration.d.ts.map +1 -1
  29. package/dist/Duration.js +123 -0
  30. package/dist/Duration.js.map +1 -1
  31. package/dist/Effect.d.ts +165 -8
  32. package/dist/Effect.d.ts.map +1 -1
  33. package/dist/Effect.js +12 -2
  34. package/dist/Effect.js.map +1 -1
  35. package/dist/Equal.d.ts.map +1 -1
  36. package/dist/Equal.js +8 -1
  37. package/dist/Equal.js.map +1 -1
  38. package/dist/Exit.d.ts +3 -3
  39. package/dist/Exit.d.ts.map +1 -1
  40. package/dist/Exit.js.map +1 -1
  41. package/dist/FileSystem.d.ts +59 -4
  42. package/dist/FileSystem.d.ts.map +1 -1
  43. package/dist/FileSystem.js +9 -2
  44. package/dist/FileSystem.js.map +1 -1
  45. package/dist/Formatter.d.ts.map +1 -1
  46. package/dist/Formatter.js +27 -13
  47. package/dist/Formatter.js.map +1 -1
  48. package/dist/Glob.d.ts +165 -0
  49. package/dist/Glob.d.ts.map +1 -0
  50. package/dist/Glob.js +127 -0
  51. package/dist/Glob.js.map +1 -0
  52. package/dist/Hash.d.ts.map +1 -1
  53. package/dist/Hash.js +4 -1
  54. package/dist/Hash.js.map +1 -1
  55. package/dist/JsonPatch.js +4 -0
  56. package/dist/JsonPatch.js.map +1 -1
  57. package/dist/JsonSchema.d.ts.map +1 -1
  58. package/dist/JsonSchema.js +13 -40
  59. package/dist/JsonSchema.js.map +1 -1
  60. package/dist/Match.d.ts +86 -0
  61. package/dist/Match.d.ts.map +1 -1
  62. package/dist/Match.js +72 -0
  63. package/dist/Match.js.map +1 -1
  64. package/dist/Metric.d.ts +3 -3
  65. package/dist/MutableList.d.ts +5 -2
  66. package/dist/MutableList.d.ts.map +1 -1
  67. package/dist/MutableList.js +7 -5
  68. package/dist/MutableList.js.map +1 -1
  69. package/dist/MutableRef.d.ts.map +1 -1
  70. package/dist/MutableRef.js +7 -0
  71. package/dist/MutableRef.js.map +1 -1
  72. package/dist/PartitionedSemaphore.d.ts +2 -1
  73. package/dist/PartitionedSemaphore.d.ts.map +1 -1
  74. package/dist/PartitionedSemaphore.js +22 -12
  75. package/dist/PartitionedSemaphore.js.map +1 -1
  76. package/dist/Pool.d.ts +51 -0
  77. package/dist/Pool.d.ts.map +1 -1
  78. package/dist/Pool.js +136 -36
  79. package/dist/Pool.js.map +1 -1
  80. package/dist/PubSub.d.ts.map +1 -1
  81. package/dist/PubSub.js +5 -6
  82. package/dist/PubSub.js.map +1 -1
  83. package/dist/Random.d.ts.map +1 -1
  84. package/dist/Random.js +3 -3
  85. package/dist/Random.js.map +1 -1
  86. package/dist/RcMap.d.ts.map +1 -1
  87. package/dist/RcMap.js +8 -2
  88. package/dist/RcMap.js.map +1 -1
  89. package/dist/Ref.d.ts.map +1 -1
  90. package/dist/Ref.js +8 -0
  91. package/dist/Ref.js.map +1 -1
  92. package/dist/Schedule.d.ts +18 -1
  93. package/dist/Schedule.d.ts.map +1 -1
  94. package/dist/Schedule.js +8 -3
  95. package/dist/Schedule.js.map +1 -1
  96. package/dist/Schema.d.ts +690 -49
  97. package/dist/Schema.d.ts.map +1 -1
  98. package/dist/Schema.js +687 -28
  99. package/dist/Schema.js.map +1 -1
  100. package/dist/SchemaAST.d.ts +4 -2
  101. package/dist/SchemaAST.d.ts.map +1 -1
  102. package/dist/SchemaAST.js +14 -17
  103. package/dist/SchemaAST.js.map +1 -1
  104. package/dist/SchemaGetter.d.ts +6 -1
  105. package/dist/SchemaGetter.d.ts.map +1 -1
  106. package/dist/SchemaGetter.js +22 -11
  107. package/dist/SchemaGetter.js.map +1 -1
  108. package/dist/SchemaParser.d.ts.map +1 -1
  109. package/dist/SchemaParser.js +48 -22
  110. package/dist/SchemaParser.js.map +1 -1
  111. package/dist/SchemaRepresentation.d.ts +33 -10
  112. package/dist/SchemaRepresentation.d.ts.map +1 -1
  113. package/dist/SchemaRepresentation.js +39 -13
  114. package/dist/SchemaRepresentation.js.map +1 -1
  115. package/dist/SchemaTransformation.d.ts +12 -4
  116. package/dist/SchemaTransformation.d.ts.map +1 -1
  117. package/dist/SchemaTransformation.js +15 -5
  118. package/dist/SchemaTransformation.js.map +1 -1
  119. package/dist/ScopedCache.d.ts.map +1 -1
  120. package/dist/ScopedCache.js +5 -7
  121. package/dist/ScopedCache.js.map +1 -1
  122. package/dist/Semaphore.d.ts +130 -0
  123. package/dist/Semaphore.d.ts.map +1 -1
  124. package/dist/Semaphore.js +94 -35
  125. package/dist/Semaphore.js.map +1 -1
  126. package/dist/Sink.d.ts.map +1 -1
  127. package/dist/Sink.js +7 -2
  128. package/dist/Sink.js.map +1 -1
  129. package/dist/Stream.d.ts +13 -4
  130. package/dist/Stream.d.ts.map +1 -1
  131. package/dist/Stream.js +31 -10
  132. package/dist/Stream.js.map +1 -1
  133. package/dist/String.d.ts +3 -0
  134. package/dist/String.d.ts.map +1 -1
  135. package/dist/String.js +3 -0
  136. package/dist/String.js.map +1 -1
  137. package/dist/Terminal.d.ts +18 -1
  138. package/dist/Terminal.d.ts.map +1 -1
  139. package/dist/Terminal.js +1 -1
  140. package/dist/Terminal.js.map +1 -1
  141. package/dist/Tracer.d.ts +11 -1
  142. package/dist/Tracer.d.ts.map +1 -1
  143. package/dist/Tracer.js +6 -1
  144. package/dist/Tracer.js.map +1 -1
  145. package/dist/ai/AiError.d.ts +43 -116
  146. package/dist/ai/AiError.d.ts.map +1 -1
  147. package/dist/ai/AiError.js +53 -72
  148. package/dist/ai/AiError.js.map +1 -1
  149. package/dist/ai/Decision.d.ts +196 -15
  150. package/dist/ai/Decision.d.ts.map +1 -1
  151. package/dist/ai/Decision.js +130 -0
  152. package/dist/ai/Decision.js.map +1 -1
  153. package/dist/ai/DecisionModel.d.ts +54 -13
  154. package/dist/ai/DecisionModel.d.ts.map +1 -1
  155. package/dist/ai/DecisionModel.js +123 -12
  156. package/dist/ai/DecisionModel.js.map +1 -1
  157. package/dist/ai/LanguageModel.d.ts.map +1 -1
  158. package/dist/ai/LanguageModel.js +9 -0
  159. package/dist/ai/LanguageModel.js.map +1 -1
  160. package/dist/ai/McpSchema.d.ts +110 -110
  161. package/dist/ai/McpSchema.d.ts.map +1 -1
  162. package/dist/ai/McpServer.d.ts +630 -29
  163. package/dist/ai/McpServer.d.ts.map +1 -1
  164. package/dist/ai/McpServer.js +583 -131
  165. package/dist/ai/McpServer.js.map +1 -1
  166. package/dist/ai/McpTest.d.ts +130 -0
  167. package/dist/ai/McpTest.d.ts.map +1 -0
  168. package/dist/ai/McpTest.js +237 -0
  169. package/dist/ai/McpTest.js.map +1 -0
  170. package/dist/ai/Prompt.d.ts +52 -0
  171. package/dist/ai/Prompt.d.ts.map +1 -1
  172. package/dist/ai/Prompt.js +38 -0
  173. package/dist/ai/Prompt.js.map +1 -1
  174. package/dist/ai/Response.d.ts +17 -28
  175. package/dist/ai/Response.d.ts.map +1 -1
  176. package/dist/ai/Response.js +5 -10
  177. package/dist/ai/Response.js.map +1 -1
  178. package/dist/ai/Tool.d.ts +43 -1
  179. package/dist/ai/Tool.d.ts.map +1 -1
  180. package/dist/ai/Tool.js +5 -2
  181. package/dist/ai/Tool.js.map +1 -1
  182. package/dist/ai/Toolkit.d.ts.map +1 -1
  183. package/dist/ai/Toolkit.js +8 -1
  184. package/dist/ai/Toolkit.js.map +1 -1
  185. package/dist/ai/index.d.ts +5 -0
  186. package/dist/ai/index.d.ts.map +1 -1
  187. package/dist/ai/index.js +5 -0
  188. package/dist/ai/index.js.map +1 -1
  189. package/dist/ai/internal/mcpCore.js +17 -12
  190. package/dist/ai/internal/mcpCore.js.map +1 -1
  191. package/dist/ai/internal/mcpProtocol/v2024_11_05.js +4 -5
  192. package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
  193. package/dist/ai/internal/mcpProtocol/v2025_03_26.js +4 -5
  194. package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
  195. package/dist/ai/internal/mcpProtocol/v2025_06_18.js +4 -5
  196. package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
  197. package/dist/ai/internal/mcpProtocol/v2025_11_25.js +4 -5
  198. package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
  199. package/dist/ai/internal/mcpProtocol/v2026_07_28.js +18 -10
  200. package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
  201. package/dist/ai/internal/mcpProtocol.js +13 -0
  202. package/dist/ai/internal/mcpProtocol.js.map +1 -1
  203. package/dist/ai/internal/mcpRuntime.js +5 -3
  204. package/dist/ai/internal/mcpRuntime.js.map +1 -1
  205. package/dist/ai/internal/mcpStatefulRuntime.js +6 -1
  206. package/dist/ai/internal/mcpStatefulRuntime.js.map +1 -1
  207. package/dist/cli/Argument.d.ts +21 -0
  208. package/dist/cli/Argument.d.ts.map +1 -1
  209. package/dist/cli/Argument.js +7 -0
  210. package/dist/cli/Argument.js.map +1 -1
  211. package/dist/cli/CliError.d.ts +78 -0
  212. package/dist/cli/CliError.d.ts.map +1 -1
  213. package/dist/cli/CliError.js +65 -3
  214. package/dist/cli/CliError.js.map +1 -1
  215. package/dist/cli/CliOutput.d.ts +220 -7
  216. package/dist/cli/CliOutput.d.ts.map +1 -1
  217. package/dist/cli/CliOutput.js +156 -43
  218. package/dist/cli/CliOutput.js.map +1 -1
  219. package/dist/cli/Command.d.ts +47 -16
  220. package/dist/cli/Command.d.ts.map +1 -1
  221. package/dist/cli/Command.js +67 -29
  222. package/dist/cli/Command.js.map +1 -1
  223. package/dist/cli/Completions.d.ts +58 -0
  224. package/dist/cli/Completions.d.ts.map +1 -1
  225. package/dist/cli/Completions.js +49 -9
  226. package/dist/cli/Completions.js.map +1 -1
  227. package/dist/cli/Flag.d.ts +122 -0
  228. package/dist/cli/Flag.d.ts.map +1 -1
  229. package/dist/cli/Flag.js +42 -0
  230. package/dist/cli/Flag.js.map +1 -1
  231. package/dist/cli/GlobalFlag.d.ts.map +1 -1
  232. package/dist/cli/GlobalFlag.js +15 -7
  233. package/dist/cli/GlobalFlag.js.map +1 -1
  234. package/dist/cli/HelpDoc.d.ts +15 -1
  235. package/dist/cli/HelpDoc.d.ts.map +1 -1
  236. package/dist/cli/Param.d.ts +15 -0
  237. package/dist/cli/Param.d.ts.map +1 -1
  238. package/dist/cli/Param.js +23 -2
  239. package/dist/cli/Param.js.map +1 -1
  240. package/dist/cli/Primitive.d.ts +14 -0
  241. package/dist/cli/Primitive.d.ts.map +1 -1
  242. package/dist/cli/Primitive.js +15 -1
  243. package/dist/cli/Primitive.js.map +1 -1
  244. package/dist/cli/Prompt.d.ts +1 -0
  245. package/dist/cli/Prompt.d.ts.map +1 -1
  246. package/dist/cli/Prompt.js +1 -0
  247. package/dist/cli/Prompt.js.map +1 -1
  248. package/dist/cli/TerminalCapabilities.d.ts +3 -2
  249. package/dist/cli/TerminalCapabilities.d.ts.map +1 -1
  250. package/dist/cli/TerminalCapabilities.js +3 -1
  251. package/dist/cli/TerminalCapabilities.js.map +1 -1
  252. package/dist/cli/internal/completions/bash.js +73 -27
  253. package/dist/cli/internal/completions/bash.js.map +1 -1
  254. package/dist/cli/internal/help.d.ts.map +1 -1
  255. package/dist/cli/internal/help.js +17 -10
  256. package/dist/cli/internal/help.js.map +1 -1
  257. package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  258. package/dist/cluster/ClusterWorkflowEngine.js +45 -10
  259. package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
  260. package/dist/cluster/MessageStorage.d.ts +23 -45
  261. package/dist/cluster/MessageStorage.d.ts.map +1 -1
  262. package/dist/cluster/MessageStorage.js +6 -7
  263. package/dist/cluster/MessageStorage.js.map +1 -1
  264. package/dist/cluster/Sharding.d.ts.map +1 -1
  265. package/dist/cluster/Sharding.js +151 -49
  266. package/dist/cluster/Sharding.js.map +1 -1
  267. package/dist/cluster/ShardingConfig.d.ts +76 -0
  268. package/dist/cluster/ShardingConfig.d.ts.map +1 -1
  269. package/dist/cluster/ShardingConfig.js +4 -0
  270. package/dist/cluster/ShardingConfig.js.map +1 -1
  271. package/dist/cluster/SingleRunner.d.ts +3 -3
  272. package/dist/cluster/SingleRunner.d.ts.map +1 -1
  273. package/dist/cluster/SingleRunner.js +1 -1
  274. package/dist/cluster/Snowflake.d.ts.map +1 -1
  275. package/dist/cluster/Snowflake.js +3 -7
  276. package/dist/cluster/Snowflake.js.map +1 -1
  277. package/dist/cluster/SqlMessageStorage.d.ts +37 -6
  278. package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
  279. package/dist/cluster/SqlMessageStorage.js +34 -7
  280. package/dist/cluster/SqlMessageStorage.js.map +1 -1
  281. package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
  282. package/dist/cluster/SqlRunnerStorage.js +109 -46
  283. package/dist/cluster/SqlRunnerStorage.js.map +1 -1
  284. package/dist/cluster/internal/entityManager.js +54 -20
  285. package/dist/cluster/internal/entityManager.js.map +1 -1
  286. package/dist/crypto/Aead.d.ts +322 -0
  287. package/dist/crypto/Aead.d.ts.map +1 -0
  288. package/dist/crypto/Aead.js +331 -0
  289. package/dist/crypto/Aead.js.map +1 -0
  290. package/dist/crypto/Cipher.d.ts +235 -0
  291. package/dist/crypto/Cipher.d.ts.map +1 -0
  292. package/dist/crypto/Cipher.js +233 -0
  293. package/dist/crypto/Cipher.js.map +1 -0
  294. package/dist/crypto/CryptoError.d.ts +212 -0
  295. package/dist/crypto/CryptoError.d.ts.map +1 -0
  296. package/dist/crypto/CryptoError.js +202 -0
  297. package/dist/crypto/CryptoError.js.map +1 -0
  298. package/dist/crypto/Digest.d.ts +143 -0
  299. package/dist/crypto/Digest.d.ts.map +1 -0
  300. package/dist/crypto/Digest.js +146 -0
  301. package/dist/crypto/Digest.js.map +1 -0
  302. package/dist/crypto/Kdf.d.ts +220 -0
  303. package/dist/crypto/Kdf.d.ts.map +1 -0
  304. package/dist/crypto/Kdf.js +212 -0
  305. package/dist/crypto/Kdf.js.map +1 -0
  306. package/dist/crypto/KeyAgreement.d.ts +323 -0
  307. package/dist/crypto/KeyAgreement.d.ts.map +1 -0
  308. package/dist/crypto/KeyAgreement.js +303 -0
  309. package/dist/crypto/KeyAgreement.js.map +1 -0
  310. package/dist/crypto/KeyFormat.d.ts +309 -0
  311. package/dist/crypto/KeyFormat.d.ts.map +1 -0
  312. package/dist/crypto/KeyFormat.js +556 -0
  313. package/dist/crypto/KeyFormat.js.map +1 -0
  314. package/dist/crypto/KeyWrap.d.ts +389 -0
  315. package/dist/crypto/KeyWrap.d.ts.map +1 -0
  316. package/dist/crypto/KeyWrap.js +381 -0
  317. package/dist/crypto/KeyWrap.js.map +1 -0
  318. package/dist/crypto/Mac.d.ts +277 -0
  319. package/dist/crypto/Mac.d.ts.map +1 -0
  320. package/dist/crypto/Mac.js +288 -0
  321. package/dist/crypto/Mac.js.map +1 -0
  322. package/dist/crypto/SecureRandom.d.ts +340 -0
  323. package/dist/crypto/SecureRandom.d.ts.map +1 -0
  324. package/dist/crypto/SecureRandom.js +257 -0
  325. package/dist/crypto/SecureRandom.js.map +1 -0
  326. package/dist/crypto/Signature.d.ts +448 -0
  327. package/dist/crypto/Signature.d.ts.map +1 -0
  328. package/dist/crypto/Signature.js +484 -0
  329. package/dist/crypto/Signature.js.map +1 -0
  330. package/dist/crypto/WebCrypto.d.ts +61 -0
  331. package/dist/crypto/WebCrypto.d.ts.map +1 -0
  332. package/dist/crypto/WebCrypto.js +63 -0
  333. package/dist/crypto/WebCrypto.js.map +1 -0
  334. package/dist/crypto/index.d.ts +65 -0
  335. package/dist/crypto/index.d.ts.map +1 -0
  336. package/dist/crypto/index.js +66 -0
  337. package/dist/crypto/index.js.map +1 -0
  338. package/dist/crypto/internal/asymmetric.d.ts +2 -0
  339. package/dist/crypto/internal/asymmetric.d.ts.map +1 -0
  340. package/dist/crypto/internal/asymmetric.js +210 -0
  341. package/dist/crypto/internal/asymmetric.js.map +1 -0
  342. package/dist/crypto/internal/chacha.d.ts +46 -0
  343. package/dist/crypto/internal/chacha.d.ts.map +1 -0
  344. package/dist/crypto/internal/chacha.js +885 -0
  345. package/dist/crypto/internal/chacha.js.map +1 -0
  346. package/dist/crypto/internal/der.d.ts +6 -0
  347. package/dist/crypto/internal/der.d.ts.map +1 -0
  348. package/dist/crypto/internal/der.js +86 -0
  349. package/dist/crypto/internal/der.js.map +1 -0
  350. package/dist/crypto/internal/digest.d.ts +2 -0
  351. package/dist/crypto/internal/digest.d.ts.map +1 -0
  352. package/dist/crypto/internal/digest.js +15 -0
  353. package/dist/crypto/internal/digest.js.map +1 -0
  354. package/dist/crypto/internal/key.d.ts +2 -0
  355. package/dist/crypto/internal/key.d.ts.map +1 -0
  356. package/dist/crypto/internal/key.js +170 -0
  357. package/dist/crypto/internal/key.js.map +1 -0
  358. package/dist/crypto/internal/md5.d.ts +39 -0
  359. package/dist/crypto/internal/md5.d.ts.map +1 -0
  360. package/dist/crypto/internal/md5.js +179 -0
  361. package/dist/crypto/internal/md5.js.map +1 -0
  362. package/dist/crypto/internal/webCrypto.d.ts +2 -0
  363. package/dist/crypto/internal/webCrypto.d.ts.map +1 -0
  364. package/dist/crypto/internal/webCrypto.js +111 -0
  365. package/dist/crypto/internal/webCrypto.js.map +1 -0
  366. package/dist/devtools/DevToolsClient.d.ts.map +1 -1
  367. package/dist/devtools/DevToolsClient.js +2 -0
  368. package/dist/devtools/DevToolsClient.js.map +1 -1
  369. package/dist/encoding/Base64.js +36 -0
  370. package/dist/encoding/Base64.js.map +1 -1
  371. package/dist/encoding/Base64Url.d.ts.map +1 -1
  372. package/dist/encoding/Base64Url.js +3 -2
  373. package/dist/encoding/Base64Url.js.map +1 -1
  374. package/dist/encoding/Csv.d.ts +608 -0
  375. package/dist/encoding/Csv.d.ts.map +1 -0
  376. package/dist/encoding/Csv.js +718 -0
  377. package/dist/encoding/Csv.js.map +1 -0
  378. package/dist/encoding/Hex.d.ts +3 -2
  379. package/dist/encoding/Hex.d.ts.map +1 -1
  380. package/dist/encoding/Hex.js +3 -2
  381. package/dist/encoding/Hex.js.map +1 -1
  382. package/dist/encoding/SchemaBinary.d.ts.map +1 -1
  383. package/dist/encoding/SchemaBinary.js +42 -4
  384. package/dist/encoding/SchemaBinary.js.map +1 -1
  385. package/dist/encoding/Sse.d.ts.map +1 -1
  386. package/dist/encoding/Sse.js +3 -3
  387. package/dist/encoding/Sse.js.map +1 -1
  388. package/dist/encoding/Toml.d.ts +17 -3
  389. package/dist/encoding/Toml.d.ts.map +1 -1
  390. package/dist/encoding/Toml.js +124 -31
  391. package/dist/encoding/Toml.js.map +1 -1
  392. package/dist/encoding/Yaml.d.ts +8 -1
  393. package/dist/encoding/Yaml.d.ts.map +1 -1
  394. package/dist/encoding/Yaml.js +54 -18
  395. package/dist/encoding/Yaml.js.map +1 -1
  396. package/dist/encoding/index.d.ts +5 -0
  397. package/dist/encoding/index.d.ts.map +1 -1
  398. package/dist/encoding/index.js +5 -0
  399. package/dist/encoding/index.js.map +1 -1
  400. package/dist/eventlog/EventJournal.d.ts.map +1 -1
  401. package/dist/eventlog/EventJournal.js +6 -3
  402. package/dist/eventlog/EventJournal.js.map +1 -1
  403. package/dist/eventlog/EventLog.d.ts +119 -4
  404. package/dist/eventlog/EventLog.d.ts.map +1 -1
  405. package/dist/eventlog/EventLog.js +200 -12
  406. package/dist/eventlog/EventLog.js.map +1 -1
  407. package/dist/eventlog/EventLogEncryption.d.ts +41 -4
  408. package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
  409. package/dist/eventlog/EventLogEncryption.js +83 -64
  410. package/dist/eventlog/EventLogEncryption.js.map +1 -1
  411. package/dist/eventlog/EventLogMessage.d.ts +279 -0
  412. package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
  413. package/dist/eventlog/EventLogMessage.js +217 -1
  414. package/dist/eventlog/EventLogMessage.js.map +1 -1
  415. package/dist/eventlog/EventLogRemote.d.ts +200 -28
  416. package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
  417. package/dist/eventlog/EventLogRemote.js +186 -16
  418. package/dist/eventlog/EventLogRemote.js.map +1 -1
  419. package/dist/eventlog/EventLogServer.d.ts +3 -0
  420. package/dist/eventlog/EventLogServer.d.ts.map +1 -1
  421. package/dist/eventlog/EventLogServer.js +18 -10
  422. package/dist/eventlog/EventLogServer.js.map +1 -1
  423. package/dist/eventlog/EventLogServerEncrypted.d.ts +326 -5
  424. package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
  425. package/dist/eventlog/EventLogServerEncrypted.js +769 -14
  426. package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
  427. package/dist/eventlog/EventLogSessionAuth.d.ts +5 -3
  428. package/dist/eventlog/EventLogSessionAuth.d.ts.map +1 -1
  429. package/dist/eventlog/EventLogSessionAuth.js +41 -64
  430. package/dist/eventlog/EventLogSessionAuth.js.map +1 -1
  431. package/dist/eventlog/EventRow.d.ts +4 -0
  432. package/dist/eventlog/EventRow.d.ts.map +1 -1
  433. package/dist/eventlog/EventRow.js +12 -2
  434. package/dist/eventlog/EventRow.js.map +1 -1
  435. package/dist/eventlog/SqlEventJournal.d.ts.map +1 -1
  436. package/dist/eventlog/SqlEventJournal.js +47 -27
  437. package/dist/eventlog/SqlEventJournal.js.map +1 -1
  438. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +21 -5
  439. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
  440. package/dist/eventlog/SqlEventLogServerEncrypted.js +1048 -113
  441. package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
  442. package/dist/eventlog/SqlEventLogServerUnencrypted.js +2 -2
  443. package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
  444. package/dist/eventlog/internal/batches.d.ts +12 -0
  445. package/dist/eventlog/internal/batches.d.ts.map +1 -0
  446. package/dist/eventlog/internal/batches.js +26 -0
  447. package/dist/eventlog/internal/batches.js.map +1 -0
  448. package/dist/eventlog/internal/compaction.d.ts +38 -0
  449. package/dist/eventlog/internal/compaction.d.ts.map +1 -0
  450. package/dist/eventlog/internal/compaction.js +33 -0
  451. package/dist/eventlog/internal/compaction.js.map +1 -0
  452. package/dist/eventlog/internal/conflicts.d.ts +0 -1
  453. package/dist/eventlog/internal/conflicts.d.ts.map +1 -1
  454. package/dist/eventlog/internal/conflicts.js +0 -3
  455. package/dist/eventlog/internal/conflicts.js.map +1 -1
  456. package/dist/eventlog/internal/identityRootSecretDerivation.js +66 -67
  457. package/dist/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
  458. package/dist/eventlog/internal/remoteCompaction.d.ts +31 -0
  459. package/dist/eventlog/internal/remoteCompaction.d.ts.map +1 -0
  460. package/dist/eventlog/internal/remoteCompaction.js +76 -0
  461. package/dist/eventlog/internal/remoteCompaction.js.map +1 -0
  462. package/dist/http/Cookies.d.ts +172 -0
  463. package/dist/http/Cookies.d.ts.map +1 -1
  464. package/dist/http/Cookies.js +153 -10
  465. package/dist/http/Cookies.js.map +1 -1
  466. package/dist/http/FetchHttpClient.d.ts +26 -2
  467. package/dist/http/FetchHttpClient.d.ts.map +1 -1
  468. package/dist/http/FetchHttpClient.js +78 -15
  469. package/dist/http/FetchHttpClient.js.map +1 -1
  470. package/dist/http/HttpClient.d.ts +502 -8
  471. package/dist/http/HttpClient.d.ts.map +1 -1
  472. package/dist/http/HttpClient.js +296 -12
  473. package/dist/http/HttpClient.js.map +1 -1
  474. package/dist/http/HttpClientError.d.ts +8 -1
  475. package/dist/http/HttpClientError.d.ts.map +1 -1
  476. package/dist/http/HttpClientError.js +37 -1
  477. package/dist/http/HttpClientError.js.map +1 -1
  478. package/dist/http/HttpClientRequest.d.ts +9 -5
  479. package/dist/http/HttpClientRequest.d.ts.map +1 -1
  480. package/dist/http/HttpClientRequest.js +3 -4
  481. package/dist/http/HttpClientRequest.js.map +1 -1
  482. package/dist/http/HttpClientResponse.d.ts.map +1 -1
  483. package/dist/http/HttpClientResponse.js +3 -2
  484. package/dist/http/HttpClientResponse.js.map +1 -1
  485. package/dist/http/HttpMethod.d.ts +7 -1
  486. package/dist/http/HttpMethod.d.ts.map +1 -1
  487. package/dist/http/HttpMethod.js +3 -8
  488. package/dist/http/HttpMethod.js.map +1 -1
  489. package/dist/http/HttpMiddleware.d.ts +1 -1
  490. package/dist/http/HttpMiddleware.d.ts.map +1 -1
  491. package/dist/http/HttpMiddleware.js +14 -16
  492. package/dist/http/HttpMiddleware.js.map +1 -1
  493. package/dist/http/HttpRouter.d.ts.map +1 -1
  494. package/dist/http/HttpRouter.js +2 -1
  495. package/dist/http/HttpRouter.js.map +1 -1
  496. package/dist/http/HttpServerError.js +2 -2
  497. package/dist/http/HttpServerError.js.map +1 -1
  498. package/dist/http/HttpServerRequest.d.ts +11 -3
  499. package/dist/http/HttpServerRequest.d.ts.map +1 -1
  500. package/dist/http/HttpServerRequest.js +77 -25
  501. package/dist/http/HttpServerRequest.js.map +1 -1
  502. package/dist/http/HttpServerResponse.d.ts.map +1 -1
  503. package/dist/http/HttpServerResponse.js +3 -2
  504. package/dist/http/HttpServerResponse.js.map +1 -1
  505. package/dist/http/HttpStaticServer.d.ts.map +1 -1
  506. package/dist/http/HttpStaticServer.js +48 -21
  507. package/dist/http/HttpStaticServer.js.map +1 -1
  508. package/dist/http/HttpTraceContext.d.ts +2 -1
  509. package/dist/http/HttpTraceContext.d.ts.map +1 -1
  510. package/dist/http/HttpTraceContext.js +7 -5
  511. package/dist/http/HttpTraceContext.js.map +1 -1
  512. package/dist/http/MultipartParser/internal/contentType.js +3 -3
  513. package/dist/http/ProblemDetails.d.ts +96 -0
  514. package/dist/http/ProblemDetails.d.ts.map +1 -0
  515. package/dist/http/ProblemDetails.js +98 -0
  516. package/dist/http/ProblemDetails.js.map +1 -0
  517. package/dist/http/UrlParams.d.ts +3 -1
  518. package/dist/http/UrlParams.d.ts.map +1 -1
  519. package/dist/http/UrlParams.js +4 -2
  520. package/dist/http/UrlParams.js.map +1 -1
  521. package/dist/http/index.d.ts +5 -0
  522. package/dist/http/index.d.ts.map +1 -1
  523. package/dist/http/index.js +5 -0
  524. package/dist/http/index.js.map +1 -1
  525. package/dist/http/internal/compression.js +4 -5
  526. package/dist/http/internal/compression.js.map +1 -1
  527. package/dist/http/internal/decompression.js +6 -2
  528. package/dist/http/internal/decompression.js.map +1 -1
  529. package/dist/http/internal/httpBody.js +8 -1
  530. package/dist/http/internal/httpBody.js.map +1 -1
  531. package/dist/http/internal/urlParams.js +33 -0
  532. package/dist/http/internal/urlParams.js.map +1 -1
  533. package/dist/http-api/HttpApi.d.ts +3 -6
  534. package/dist/http-api/HttpApi.d.ts.map +1 -1
  535. package/dist/http-api/HttpApi.js +3 -6
  536. package/dist/http-api/HttpApi.js.map +1 -1
  537. package/dist/http-api/HttpApiBuilder.d.ts.map +1 -1
  538. package/dist/http-api/HttpApiBuilder.js +43 -13
  539. package/dist/http-api/HttpApiBuilder.js.map +1 -1
  540. package/dist/http-api/HttpApiClient.d.ts +140 -7
  541. package/dist/http-api/HttpApiClient.d.ts.map +1 -1
  542. package/dist/http-api/HttpApiClient.js +193 -44
  543. package/dist/http-api/HttpApiClient.js.map +1 -1
  544. package/dist/http-api/HttpApiEndpoint.d.ts +24 -7
  545. package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
  546. package/dist/http-api/HttpApiEndpoint.js +123 -32
  547. package/dist/http-api/HttpApiEndpoint.js.map +1 -1
  548. package/dist/http-api/HttpApiError.d.ts +185 -13
  549. package/dist/http-api/HttpApiError.d.ts.map +1 -1
  550. package/dist/http-api/HttpApiError.js +128 -0
  551. package/dist/http-api/HttpApiError.js.map +1 -1
  552. package/dist/http-api/HttpApiMiddleware.d.ts +64 -17
  553. package/dist/http-api/HttpApiMiddleware.d.ts.map +1 -1
  554. package/dist/http-api/HttpApiMiddleware.js +85 -1
  555. package/dist/http-api/HttpApiMiddleware.js.map +1 -1
  556. package/dist/http-api/HttpApiSchema.d.ts +142 -33
  557. package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
  558. package/dist/http-api/HttpApiSchema.js +123 -59
  559. package/dist/http-api/HttpApiSchema.js.map +1 -1
  560. package/dist/http-api/HttpApiTest.d.ts.map +1 -1
  561. package/dist/http-api/HttpApiTest.js +3 -2
  562. package/dist/http-api/HttpApiTest.js.map +1 -1
  563. package/dist/http-api/OpenApi.d.ts.map +1 -1
  564. package/dist/http-api/OpenApi.js +25 -16
  565. package/dist/http-api/OpenApi.js.map +1 -1
  566. package/dist/http-api/internal/toCodecHttpProperties.d.ts +2 -0
  567. package/dist/http-api/internal/toCodecHttpProperties.d.ts.map +1 -0
  568. package/dist/http-api/internal/toCodecHttpProperties.js +38 -0
  569. package/dist/http-api/internal/toCodecHttpProperties.js.map +1 -0
  570. package/dist/index.d.ts +5 -5
  571. package/dist/index.d.ts.map +1 -1
  572. package/dist/index.js +5 -5
  573. package/dist/index.js.map +1 -1
  574. package/dist/internal/arbitrary/runner.d.ts.map +1 -1
  575. package/dist/internal/arbitrary/runner.js +120 -44
  576. package/dist/internal/arbitrary/runner.js.map +1 -1
  577. package/dist/internal/core.js +2 -0
  578. package/dist/internal/core.js.map +1 -1
  579. package/dist/internal/effect.js +46 -27
  580. package/dist/internal/effect.js.map +1 -1
  581. package/dist/internal/equal.js +14 -0
  582. package/dist/internal/equal.js.map +1 -1
  583. package/dist/internal/glob.d.ts +2 -0
  584. package/dist/internal/glob.d.ts.map +1 -0
  585. package/dist/internal/glob.js +630 -0
  586. package/dist/internal/glob.js.map +1 -0
  587. package/dist/internal/jsonSchema.d.ts +2 -0
  588. package/dist/internal/jsonSchema.d.ts.map +1 -0
  589. package/dist/internal/jsonSchema.js +28 -0
  590. package/dist/internal/jsonSchema.js.map +1 -0
  591. package/dist/internal/matcher.js +11 -1
  592. package/dist/internal/matcher.js.map +1 -1
  593. package/dist/internal/persistence.js +9 -0
  594. package/dist/internal/persistence.js.map +1 -1
  595. package/dist/internal/rcRef.js +4 -1
  596. package/dist/internal/rcRef.js.map +1 -1
  597. package/dist/internal/schema/compilerRegistry.js +4 -1
  598. package/dist/internal/schema/compilerRegistry.js.map +1 -1
  599. package/dist/internal/schema/content.d.ts +2 -0
  600. package/dist/internal/schema/content.d.ts.map +1 -0
  601. package/dist/internal/schema/content.js +13 -0
  602. package/dist/internal/schema/content.js.map +1 -0
  603. package/dist/internal/schema/fromJsonSchemaDocument.js +173 -185
  604. package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
  605. package/dist/internal/schema/fromRepresentation.js +2 -1
  606. package/dist/internal/schema/fromRepresentation.js.map +1 -1
  607. package/dist/internal/schema/standardSchema.js +8 -2
  608. package/dist/internal/schema/standardSchema.js.map +1 -1
  609. package/dist/internal/schema/toCodeDocument.js +9 -6
  610. package/dist/internal/schema/toCodeDocument.js.map +1 -1
  611. package/dist/internal/schema/toCodec.js +21 -24
  612. package/dist/internal/schema/toCodec.js.map +1 -1
  613. package/dist/internal/schema/toJsonSchemaDocument.js +205 -140
  614. package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
  615. package/dist/internal/schema/toRepresentation.js +107 -129
  616. package/dist/internal/schema/toRepresentation.js.map +1 -1
  617. package/dist/internal/sql.d.ts +2 -0
  618. package/dist/internal/sql.d.ts.map +1 -0
  619. package/dist/internal/sql.js +13 -0
  620. package/dist/internal/sql.js.map +1 -0
  621. package/dist/internal/trie.js +42 -13
  622. package/dist/internal/trie.js.map +1 -1
  623. package/dist/internal/ulid.js +41 -0
  624. package/dist/internal/ulid.js.map +1 -1
  625. package/dist/internal/uuid.js +52 -8
  626. package/dist/internal/uuid.js.map +1 -1
  627. package/dist/internal/version.js +1 -1
  628. package/dist/observability/Otlp.d.ts +15 -4
  629. package/dist/observability/Otlp.d.ts.map +1 -1
  630. package/dist/observability/Otlp.js +10 -0
  631. package/dist/observability/Otlp.js.map +1 -1
  632. package/dist/observability/OtlpProxy.d.ts +154 -0
  633. package/dist/observability/OtlpProxy.d.ts.map +1 -0
  634. package/dist/observability/OtlpProxy.js +235 -0
  635. package/dist/observability/OtlpProxy.js.map +1 -0
  636. package/dist/observability/OtlpResource.d.ts +7 -0
  637. package/dist/observability/OtlpResource.d.ts.map +1 -1
  638. package/dist/observability/OtlpResource.js +11 -1
  639. package/dist/observability/OtlpResource.js.map +1 -1
  640. package/dist/observability/OtlpTracer.d.ts.map +1 -1
  641. package/dist/observability/OtlpTracer.js +4 -0
  642. package/dist/observability/OtlpTracer.js.map +1 -1
  643. package/dist/observability/index.d.ts +5 -0
  644. package/dist/observability/index.d.ts.map +1 -1
  645. package/dist/observability/index.js +5 -0
  646. package/dist/observability/index.js.map +1 -1
  647. package/dist/persistence/CircuitBreaker.d.ts +897 -0
  648. package/dist/persistence/CircuitBreaker.d.ts.map +1 -0
  649. package/dist/persistence/CircuitBreaker.js +1165 -0
  650. package/dist/persistence/CircuitBreaker.js.map +1 -0
  651. package/dist/persistence/KeyValueStore.d.ts +47 -2
  652. package/dist/persistence/KeyValueStore.d.ts.map +1 -1
  653. package/dist/persistence/KeyValueStore.js +129 -18
  654. package/dist/persistence/KeyValueStore.js.map +1 -1
  655. package/dist/persistence/PersistedQueue.d.ts +9 -0
  656. package/dist/persistence/PersistedQueue.d.ts.map +1 -1
  657. package/dist/persistence/PersistedQueue.js +94 -52
  658. package/dist/persistence/PersistedQueue.js.map +1 -1
  659. package/dist/persistence/Persistence.d.ts +10 -4
  660. package/dist/persistence/Persistence.d.ts.map +1 -1
  661. package/dist/persistence/Persistence.js +18 -11
  662. package/dist/persistence/Persistence.js.map +1 -1
  663. package/dist/persistence/Redis.d.ts +78 -2
  664. package/dist/persistence/Redis.d.ts.map +1 -1
  665. package/dist/persistence/Redis.js +62 -7
  666. package/dist/persistence/Redis.js.map +1 -1
  667. package/dist/persistence/index.d.ts +5 -0
  668. package/dist/persistence/index.d.ts.map +1 -1
  669. package/dist/persistence/index.js +5 -0
  670. package/dist/persistence/index.js.map +1 -1
  671. package/dist/process/ChildProcess.d.ts +237 -71
  672. package/dist/process/ChildProcess.d.ts.map +1 -1
  673. package/dist/process/ChildProcess.js +56 -158
  674. package/dist/process/ChildProcess.js.map +1 -1
  675. package/dist/process/ChildProcessSpawner.d.ts +35 -0
  676. package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
  677. package/dist/process/ChildProcessSpawner.js +5 -2
  678. package/dist/process/ChildProcessSpawner.js.map +1 -1
  679. package/dist/process/CommandLine.d.ts +294 -0
  680. package/dist/process/CommandLine.d.ts.map +1 -0
  681. package/dist/process/CommandLine.js +481 -0
  682. package/dist/process/CommandLine.js.map +1 -0
  683. package/dist/process/index.d.ts +5 -0
  684. package/dist/process/index.d.ts.map +1 -1
  685. package/dist/process/index.js +5 -0
  686. package/dist/process/index.js.map +1 -1
  687. package/dist/reactivity/AsyncResult.d.ts +1 -1
  688. package/dist/reactivity/AsyncResult.d.ts.map +1 -1
  689. package/dist/reactivity/Atom.d.ts +2 -1
  690. package/dist/reactivity/Atom.d.ts.map +1 -1
  691. package/dist/reactivity/Atom.js +3 -4
  692. package/dist/reactivity/Atom.js.map +1 -1
  693. package/dist/reactivity/AtomRegistry.js.map +1 -1
  694. package/dist/rpc/RpcClient.d.ts +16 -1
  695. package/dist/rpc/RpcClient.d.ts.map +1 -1
  696. package/dist/rpc/RpcClient.js +59 -24
  697. package/dist/rpc/RpcClient.js.map +1 -1
  698. package/dist/rpc/RpcMessage.d.ts +10 -1
  699. package/dist/rpc/RpcMessage.d.ts.map +1 -1
  700. package/dist/rpc/RpcMessage.js +1 -0
  701. package/dist/rpc/RpcMessage.js.map +1 -1
  702. package/dist/rpc/RpcSerialization.d.ts +14 -0
  703. package/dist/rpc/RpcSerialization.d.ts.map +1 -1
  704. package/dist/rpc/RpcSerialization.js +26 -8
  705. package/dist/rpc/RpcSerialization.js.map +1 -1
  706. package/dist/rpc/RpcServer.d.ts +31 -0
  707. package/dist/rpc/RpcServer.d.ts.map +1 -1
  708. package/dist/rpc/RpcServer.js +139 -56
  709. package/dist/rpc/RpcServer.js.map +1 -1
  710. package/dist/rpc/RpcTest.d.ts +1 -0
  711. package/dist/rpc/RpcTest.d.ts.map +1 -1
  712. package/dist/rpc/RpcTest.js +1 -0
  713. package/dist/rpc/RpcTest.js.map +1 -1
  714. package/dist/schema/Model.d.ts +14 -0
  715. package/dist/schema/Model.d.ts.map +1 -1
  716. package/dist/schema/Model.js +18 -3
  717. package/dist/schema/Model.js.map +1 -1
  718. package/dist/sql/Migrator.d.ts +2 -20
  719. package/dist/sql/Migrator.d.ts.map +1 -1
  720. package/dist/sql/Migrator.js +13 -55
  721. package/dist/sql/Migrator.js.map +1 -1
  722. package/dist/sql/MigratorFileSystem.d.ts +21 -0
  723. package/dist/sql/MigratorFileSystem.d.ts.map +1 -0
  724. package/dist/sql/MigratorFileSystem.js +57 -0
  725. package/dist/sql/MigratorFileSystem.js.map +1 -0
  726. package/dist/sql/SqlClient.d.ts +9 -4
  727. package/dist/sql/SqlClient.d.ts.map +1 -1
  728. package/dist/sql/SqlClient.js +13 -10
  729. package/dist/sql/SqlClient.js.map +1 -1
  730. package/dist/sql/SqlResolver.d.ts +4 -0
  731. package/dist/sql/SqlResolver.d.ts.map +1 -1
  732. package/dist/sql/SqlResolver.js +18 -4
  733. package/dist/sql/SqlResolver.js.map +1 -1
  734. package/dist/sql/Statement.d.ts +27 -6
  735. package/dist/sql/Statement.d.ts.map +1 -1
  736. package/dist/sql/Statement.js +21 -15
  737. package/dist/sql/Statement.js.map +1 -1
  738. package/dist/sql/index.js +1 -1
  739. package/dist/testing/index.d.ts +0 -5
  740. package/dist/testing/index.d.ts.map +1 -1
  741. package/dist/testing/index.js +0 -5
  742. package/dist/testing/index.js.map +1 -1
  743. package/dist/workflow/DurableDeferred.d.ts.map +1 -1
  744. package/dist/workflow/DurableDeferred.js +21 -2
  745. package/dist/workflow/DurableDeferred.js.map +1 -1
  746. package/dist/workflow/internal/crypto.js +9 -8
  747. package/dist/workflow/internal/crypto.js.map +1 -1
  748. package/package.json +3 -1
  749. package/src/Arbitrary.ts +10 -2
  750. package/src/BigDecimal.ts +3 -0
  751. package/src/Channel.ts +64 -29
  752. package/src/Config.ts +7 -1
  753. package/src/Context.ts +34 -10
  754. package/src/Cron.ts +178 -29
  755. package/src/Data.ts +60 -265
  756. package/src/Duration.ts +140 -0
  757. package/src/Effect.ts +915 -86
  758. package/src/Equal.ts +8 -1
  759. package/src/Exit.ts +3 -3
  760. package/src/FileSystem.ts +65 -4
  761. package/src/Formatter.ts +28 -13
  762. package/src/Glob.ts +205 -0
  763. package/src/Hash.ts +4 -1
  764. package/src/JsonPatch.ts +4 -0
  765. package/src/JsonSchema.ts +12 -40
  766. package/src/Match.ts +127 -0
  767. package/src/Metric.ts +3 -3
  768. package/src/MutableList.ts +7 -5
  769. package/src/MutableRef.ts +8 -1
  770. package/src/PartitionedSemaphore.ts +24 -13
  771. package/src/Pool.ts +182 -52
  772. package/src/PubSub.ts +5 -6
  773. package/src/Random.ts +3 -3
  774. package/src/RcMap.ts +5 -1
  775. package/src/Ref.ts +8 -0
  776. package/src/Schedule.ts +27 -4
  777. package/src/Schema.ts +1237 -87
  778. package/src/SchemaAST.ts +20 -20
  779. package/src/SchemaGetter.ts +27 -11
  780. package/src/SchemaParser.ts +51 -18
  781. package/src/SchemaRepresentation.ts +50 -34
  782. package/src/SchemaTransformation.ts +17 -5
  783. package/src/ScopedCache.ts +5 -9
  784. package/src/Semaphore.ts +208 -40
  785. package/src/Sink.ts +15 -2
  786. package/src/Stream.ts +48 -22
  787. package/src/String.ts +3 -0
  788. package/src/Terminal.ts +19 -1
  789. package/src/Tracer.ts +15 -1
  790. package/src/ai/AiError.ts +56 -80
  791. package/src/ai/Decision.ts +257 -6
  792. package/src/ai/DecisionModel.ts +171 -28
  793. package/src/ai/LanguageModel.ts +9 -0
  794. package/src/ai/McpServer.ts +1283 -299
  795. package/src/ai/McpTest.ts +380 -0
  796. package/src/ai/Prompt.ts +65 -0
  797. package/src/ai/Response.ts +36 -31
  798. package/src/ai/Tool.ts +65 -10
  799. package/src/ai/Toolkit.ts +4 -1
  800. package/src/ai/index.ts +6 -0
  801. package/src/ai/internal/mcpCore.ts +78 -44
  802. package/src/ai/internal/mcpProtocol/v2024_11_05.ts +4 -7
  803. package/src/ai/internal/mcpProtocol/v2025_03_26.ts +4 -7
  804. package/src/ai/internal/mcpProtocol/v2025_06_18.ts +4 -7
  805. package/src/ai/internal/mcpProtocol/v2025_11_25.ts +4 -7
  806. package/src/ai/internal/mcpProtocol/v2026_07_28.ts +15 -10
  807. package/src/ai/internal/mcpProtocol.ts +29 -0
  808. package/src/ai/internal/mcpRuntime.ts +9 -5
  809. package/src/ai/internal/mcpStatefulRuntime.ts +14 -2
  810. package/src/cli/Argument.ts +21 -0
  811. package/src/cli/CliError.ts +90 -3
  812. package/src/cli/CliOutput.ts +300 -55
  813. package/src/cli/Command.ts +76 -41
  814. package/src/cli/Completions.ts +51 -0
  815. package/src/cli/Flag.ts +122 -0
  816. package/src/cli/GlobalFlag.ts +6 -7
  817. package/src/cli/HelpDoc.ts +18 -1
  818. package/src/cli/Param.ts +35 -6
  819. package/src/cli/Primitive.ts +16 -1
  820. package/src/cli/Prompt.ts +1 -0
  821. package/src/cli/TerminalCapabilities.ts +6 -3
  822. package/src/cli/internal/completions/bash.ts +79 -29
  823. package/src/cli/internal/help.ts +21 -9
  824. package/src/cluster/ClusterWorkflowEngine.ts +46 -16
  825. package/src/cluster/MessageStorage.ts +19 -14
  826. package/src/cluster/Sharding.ts +176 -47
  827. package/src/cluster/ShardingConfig.ts +43 -0
  828. package/src/cluster/SingleRunner.ts +3 -3
  829. package/src/cluster/Snowflake.ts +3 -7
  830. package/src/cluster/SqlMessageStorage.ts +49 -17
  831. package/src/cluster/SqlRunnerStorage.ts +143 -70
  832. package/src/cluster/internal/entityManager.ts +75 -22
  833. package/src/crypto/Aead.ts +517 -0
  834. package/src/crypto/Cipher.ts +326 -0
  835. package/src/crypto/CryptoError.ts +242 -0
  836. package/src/crypto/Digest.ts +167 -0
  837. package/src/crypto/Kdf.ts +315 -0
  838. package/src/crypto/KeyAgreement.ts +489 -0
  839. package/src/crypto/KeyFormat.ts +712 -0
  840. package/src/crypto/KeyWrap.ts +639 -0
  841. package/src/crypto/Mac.ts +386 -0
  842. package/src/crypto/SecureRandom.ts +459 -0
  843. package/src/crypto/Signature.ts +673 -0
  844. package/src/crypto/WebCrypto.ts +64 -0
  845. package/src/crypto/index.ts +78 -0
  846. package/src/crypto/internal/asymmetric.ts +329 -0
  847. package/src/crypto/internal/chacha.ts +1088 -0
  848. package/src/crypto/internal/der.ts +110 -0
  849. package/src/crypto/internal/digest.ts +16 -0
  850. package/src/crypto/internal/key.ts +235 -0
  851. package/src/crypto/internal/md5.ts +170 -0
  852. package/src/crypto/internal/webCrypto.ts +150 -0
  853. package/src/devtools/DevToolsClient.ts +2 -0
  854. package/src/encoding/Base64.ts +38 -0
  855. package/src/encoding/Base64Url.ts +5 -2
  856. package/src/encoding/Csv.ts +1298 -0
  857. package/src/encoding/Hex.ts +3 -2
  858. package/src/encoding/SchemaBinary.ts +40 -4
  859. package/src/encoding/Sse.ts +4 -3
  860. package/src/encoding/Toml.ts +117 -35
  861. package/src/encoding/Yaml.ts +61 -18
  862. package/src/encoding/index.ts +6 -0
  863. package/src/eventlog/EventJournal.ts +4 -3
  864. package/src/eventlog/EventLog.ts +340 -15
  865. package/src/eventlog/EventLogEncryption.ts +118 -110
  866. package/src/eventlog/EventLogMessage.ts +273 -1
  867. package/src/eventlog/EventLogRemote.ts +367 -23
  868. package/src/eventlog/EventLogServer.ts +23 -8
  869. package/src/eventlog/EventLogServerEncrypted.ts +1130 -67
  870. package/src/eventlog/EventLogSessionAuth.ts +56 -70
  871. package/src/eventlog/EventRow.ts +12 -3
  872. package/src/eventlog/SqlEventJournal.ts +68 -45
  873. package/src/eventlog/SqlEventLogServerEncrypted.ts +1244 -136
  874. package/src/eventlog/SqlEventLogServerUnencrypted.ts +2 -2
  875. package/src/eventlog/internal/batches.ts +30 -0
  876. package/src/eventlog/internal/compaction.ts +64 -0
  877. package/src/eventlog/internal/conflicts.ts +0 -4
  878. package/src/eventlog/internal/identityRootSecretDerivation.ts +93 -123
  879. package/src/eventlog/internal/remoteCompaction.ts +92 -0
  880. package/src/http/Cookies.ts +291 -12
  881. package/src/http/FetchHttpClient.ts +88 -16
  882. package/src/http/HttpClient.ts +636 -29
  883. package/src/http/HttpClientError.ts +35 -1
  884. package/src/http/HttpClientRequest.ts +21 -10
  885. package/src/http/HttpClientResponse.ts +3 -2
  886. package/src/http/HttpMethod.ts +10 -2
  887. package/src/http/HttpMiddleware.ts +15 -18
  888. package/src/http/HttpRouter.ts +2 -1
  889. package/src/http/HttpServerError.ts +2 -2
  890. package/src/http/HttpServerRequest.ts +101 -30
  891. package/src/http/HttpServerResponse.ts +3 -2
  892. package/src/http/HttpStaticServer.ts +51 -22
  893. package/src/http/HttpTraceContext.ts +7 -4
  894. package/src/http/MultipartParser/internal/contentType.ts +3 -3
  895. package/src/http/ProblemDetails.ts +149 -0
  896. package/src/http/UrlParams.ts +6 -1
  897. package/src/http/index.ts +6 -0
  898. package/src/http/internal/compression.ts +4 -5
  899. package/src/http/internal/decompression.ts +10 -4
  900. package/src/http/internal/httpBody.ts +10 -2
  901. package/src/http/internal/urlParams.ts +37 -0
  902. package/src/http-api/HttpApi.ts +3 -6
  903. package/src/http-api/HttpApiBuilder.ts +61 -19
  904. package/src/http-api/HttpApiClient.ts +284 -72
  905. package/src/http-api/HttpApiEndpoint.ts +135 -35
  906. package/src/http-api/HttpApiError.ts +250 -0
  907. package/src/http-api/HttpApiMiddleware.ts +95 -1
  908. package/src/http-api/HttpApiSchema.ts +236 -52
  909. package/src/http-api/HttpApiTest.ts +3 -2
  910. package/src/http-api/OpenApi.ts +20 -17
  911. package/src/http-api/internal/toCodecHttpProperties.ts +56 -0
  912. package/src/index.ts +6 -6
  913. package/src/internal/arbitrary/runner.ts +133 -36
  914. package/src/internal/core.ts +2 -0
  915. package/src/internal/effect.ts +58 -34
  916. package/src/internal/equal.ts +17 -0
  917. package/src/internal/glob.ts +736 -0
  918. package/src/internal/jsonSchema.ts +27 -0
  919. package/src/internal/matcher.ts +18 -1
  920. package/src/internal/persistence.ts +11 -0
  921. package/src/internal/rcRef.ts +4 -1
  922. package/src/internal/schema/compilerRegistry.ts +6 -1
  923. package/src/internal/schema/content.ts +18 -0
  924. package/src/internal/schema/fromJsonSchemaDocument.ts +228 -190
  925. package/src/internal/schema/fromRepresentation.ts +2 -1
  926. package/src/internal/schema/standardSchema.ts +2 -2
  927. package/src/internal/schema/toCodeDocument.ts +11 -7
  928. package/src/internal/schema/toCodec.ts +26 -22
  929. package/src/internal/schema/toJsonSchemaDocument.ts +189 -167
  930. package/src/internal/schema/toRepresentation.ts +122 -140
  931. package/src/internal/sql.ts +14 -0
  932. package/src/internal/trie.ts +43 -14
  933. package/src/internal/ulid.ts +44 -0
  934. package/src/internal/uuid.ts +57 -16
  935. package/src/internal/version.ts +1 -1
  936. package/src/observability/Otlp.ts +21 -4
  937. package/src/observability/OtlpProxy.ts +314 -0
  938. package/src/observability/OtlpResource.ts +9 -1
  939. package/src/observability/OtlpTracer.ts +4 -0
  940. package/src/observability/index.ts +6 -0
  941. package/src/persistence/CircuitBreaker.ts +1678 -0
  942. package/src/persistence/KeyValueStore.ts +219 -22
  943. package/src/persistence/PersistedQueue.ts +128 -59
  944. package/src/persistence/Persistence.ts +20 -13
  945. package/src/persistence/Redis.ts +129 -8
  946. package/src/persistence/index.ts +6 -0
  947. package/src/process/ChildProcess.ts +285 -264
  948. package/src/process/ChildProcessSpawner.ts +46 -2
  949. package/src/process/CommandLine.ts +630 -0
  950. package/src/process/index.ts +6 -0
  951. package/src/reactivity/AsyncResult.ts +1 -1
  952. package/src/reactivity/Atom.ts +5 -5
  953. package/src/reactivity/AtomRegistry.ts +1 -1
  954. package/src/rpc/RpcClient.ts +75 -36
  955. package/src/rpc/RpcMessage.ts +10 -1
  956. package/src/rpc/RpcSerialization.ts +35 -9
  957. package/src/rpc/RpcServer.ts +176 -63
  958. package/src/rpc/RpcTest.ts +3 -0
  959. package/src/schema/Model.ts +26 -3
  960. package/src/sql/Migrator.ts +15 -69
  961. package/src/sql/MigratorFileSystem.ts +71 -0
  962. package/src/sql/SqlClient.ts +13 -20
  963. package/src/sql/SqlResolver.ts +23 -9
  964. package/src/sql/Statement.ts +38 -9
  965. package/src/sql/index.ts +1 -1
  966. package/src/testing/index.ts +0 -6
  967. package/src/workflow/DurableDeferred.ts +23 -6
  968. package/src/workflow/internal/crypto.ts +15 -11
  969. package/dist/Crypto.d.ts +0 -244
  970. package/dist/Crypto.d.ts.map +0 -1
  971. package/dist/Crypto.js +0 -139
  972. package/dist/Crypto.js.map +0 -1
  973. package/dist/testing/TestCrypto.d.ts +0 -73
  974. package/dist/testing/TestCrypto.d.ts.map +0 -1
  975. package/dist/testing/TestCrypto.js +0 -87
  976. package/dist/testing/TestCrypto.js.map +0 -1
  977. package/src/Crypto.ts +0 -347
  978. package/src/testing/TestCrypto.ts +0 -94
@@ -0,0 +1,712 @@
1
+ /**
2
+ * Key formats: SPKI, PKCS#8, JWK, and PEM, with import-only PKCS#1 and SEC1.
3
+ *
4
+ * {@link decodePublic}, {@link decodePrivate}, and {@link decodeSecret} build
5
+ * typed keys from encoded data, and {@link encode} writes a key in a named
6
+ * format. They are plain functions, not a service: each returns an Effect that
7
+ * requires nothing and runs on the `WebCrypto` reference.
8
+ *
9
+ * The algorithm decides the family of the result. Decoding with
10
+ * `Signature.ecdsaP256` gives a `Signature` key, and with
11
+ * `KeyAgreement.ecdhP256` a `KeyAgreement` key. Raw bytes are not a format
12
+ * here: each family's own constructors read them.
13
+ *
14
+ * Format values carry their role, direction, and data type in the types:
15
+ *
16
+ * - {@link spki} (public) and {@link pkcs8} (private) read and write DER
17
+ * bytes;
18
+ * - {@link jwk} reads and writes JWK objects for every role;
19
+ * - {@link pkcs1} (RSA) and {@link sec1} (EC) read private DER keys and
20
+ * cannot be written;
21
+ * - {@link pem} turns any DER format into PEM text.
22
+ *
23
+ * Decoded keys always hold bytes, in the forms each family stores, so they
24
+ * work with every layer.
25
+ *
26
+ * **Gotchas**
27
+ *
28
+ * - EC private keys must include their public point. Safari and Firefox
29
+ * before 132 cannot import one without it, so every runtime fails with an
30
+ * `Unsupported` reason.
31
+ * - SPKI accepts compressed EC points. Safari and Firefox before 146 reject
32
+ * them in raw import, so the families' raw constructors take only
33
+ * uncompressed points.
34
+ * - Ed25519 and X25519 private JWKs need a correct `x`. Bun and Deno accept
35
+ * `d` alone, and other runtimes reject it.
36
+ * - JWK members other than `kty`, `crv`, `alg`, and the key material are
37
+ * ignored on import, and written JWKs contain only `kty`, `crv`, and the key
38
+ * material.
39
+ * - Callers parse and serialize JSON themselves.
40
+ *
41
+ * @stability unstable
42
+ * @since 4.0.0
43
+ */
44
+ import * as Effect from "../Effect.ts"
45
+ import * as Base64 from "../encoding/Base64.ts"
46
+ import * as Base64Url from "../encoding/Base64Url.ts"
47
+ import * as Predicate from "../Predicate.ts"
48
+ import * as Result from "../Result.ts"
49
+ import type * as Aead from "./Aead.ts"
50
+ import type * as Cipher from "./Cipher.ts"
51
+ import * as CryptoError from "./CryptoError.ts"
52
+ import * as Asymmetric from "./internal/asymmetric.ts"
53
+ import * as Der from "./internal/der.ts"
54
+ import * as KeyModel from "./internal/key.ts"
55
+ import * as internal from "./internal/webCrypto.ts"
56
+ import * as KeyAgreement from "./KeyAgreement.ts"
57
+ import * as KeyWrap from "./KeyWrap.ts"
58
+ import type * as Mac from "./Mac.ts"
59
+ import * as Signature from "./Signature.ts"
60
+
61
+ /**
62
+ * The role of a key: public, private, or secret (symmetric).
63
+ *
64
+ * @stability unstable
65
+ * @category models
66
+ * @since 4.0.0
67
+ */
68
+ export type Role = "public" | "private" | "secret"
69
+
70
+ /**
71
+ * Whether a format can be read, written, or both.
72
+ *
73
+ * @stability unstable
74
+ * @category models
75
+ * @since 4.0.0
76
+ */
77
+ export type Direction = "decode" | "encode"
78
+
79
+ /**
80
+ * A key format, such as {@link spki} or `pem(pkcs8)`.
81
+ *
82
+ * **Details**
83
+ *
84
+ * `~tags` exists only in the types. It records the roles the format holds,
85
+ * whether it can be read and written, and the type of its data: `Uint8Array`
86
+ * for DER, `string` for PEM, and `JsonWebKey` for JWK.
87
+ *
88
+ * @stability unstable
89
+ * @category models
90
+ * @since 4.0.0
91
+ */
92
+ export interface Format<R extends Role, D extends Direction, Data> {
93
+ readonly _tag: "spki" | "pkcs8" | "jwk" | "pkcs1" | "sec1"
94
+ readonly pem: boolean
95
+ readonly "~tags"?:
96
+ | {
97
+ readonly role: (_: R) => void
98
+ readonly direction: (_: D) => void
99
+ readonly data: Data
100
+ }
101
+ | undefined
102
+ }
103
+
104
+ /**
105
+ * SubjectPublicKeyInfo DER (RFC 5280), for public keys.
106
+ *
107
+ * @stability unstable
108
+ * @category formats
109
+ * @since 4.0.0
110
+ */
111
+ export const spki: Format<"public", Direction, Uint8Array> = { _tag: "spki", pem: false }
112
+
113
+ /**
114
+ * PKCS#8 PrivateKeyInfo DER (RFC 5208), for private keys.
115
+ *
116
+ * @stability unstable
117
+ * @category formats
118
+ * @since 4.0.0
119
+ */
120
+ export const pkcs8: Format<"private", Direction, Uint8Array> = { _tag: "pkcs8", pem: false }
121
+
122
+ /**
123
+ * JSON Web Key (RFC 7517), for every role.
124
+ *
125
+ * **Details**
126
+ *
127
+ * `decodePublic` rejects a JWK with `d`, and `decodePrivate` requires it.
128
+ * `kty`, `crv`, and `alg` must match the algorithm when present. Written JWKs
129
+ * contain only `kty`, `crv`, and the key material.
130
+ *
131
+ * Ed25519 and X25519 private JWKs need a correct `x`: Bun and Deno accept `d`
132
+ * alone, but other runtimes reject it.
133
+ *
134
+ * @stability unstable
135
+ * @category formats
136
+ * @since 4.0.0
137
+ */
138
+ export const jwk: Format<Role, Direction, JsonWebKey> = { _tag: "jwk", pem: false }
139
+
140
+ /**
141
+ * PKCS#1 RSAPrivateKey DER (RFC 8017), read only.
142
+ *
143
+ * @stability unstable
144
+ * @category formats
145
+ * @since 4.0.0
146
+ */
147
+ export const pkcs1: Format<"private", "decode", Uint8Array> = { _tag: "pkcs1", pem: false }
148
+
149
+ /**
150
+ * SEC1 ECPrivateKey DER (RFC 5915), read only.
151
+ *
152
+ * **Details**
153
+ *
154
+ * The curve parameters, when present, must match the algorithm's curve. The
155
+ * public point must be present.
156
+ *
157
+ * @stability unstable
158
+ * @category formats
159
+ * @since 4.0.0
160
+ */
161
+ export const sec1: Format<"private", "decode", Uint8Array> = { _tag: "sec1", pem: false }
162
+
163
+ /**
164
+ * PEM (RFC 7468) over a DER format.
165
+ *
166
+ * **Details**
167
+ *
168
+ * Reading accepts exactly one block whose label matches the format:
169
+ * `PUBLIC KEY`, `PRIVATE KEY`, `RSA PRIVATE KEY`, or `EC PRIVATE KEY`.
170
+ * Writing uses 64-column lines.
171
+ *
172
+ * @stability unstable
173
+ * @category formats
174
+ * @since 4.0.0
175
+ */
176
+ export const pem = <R extends Role, D extends Direction>(
177
+ format: Format<R, D, Uint8Array>
178
+ ): Format<R, D, string> => ({ _tag: format._tag, pem: true })
179
+
180
+ /**
181
+ * The algorithms whose public and private keys `KeyFormat` reads and writes.
182
+ *
183
+ * @stability unstable
184
+ * @category models
185
+ * @since 4.0.0
186
+ */
187
+ export type AsymmetricAlgorithm = Signature.Algorithm | KeyAgreement.Algorithm | KeyWrap.RsaOaep
188
+
189
+ /**
190
+ * The algorithms whose secret keys `KeyFormat` reads and writes, and that
191
+ * `KeyWrap` wraps.
192
+ *
193
+ * @stability unstable
194
+ * @category models
195
+ * @since 4.0.0
196
+ */
197
+ export type SecretAlgorithm = Aead.Algorithm | Cipher.Algorithm | Mac.Algorithm | KeyWrap.AesKw
198
+
199
+ /**
200
+ * The public key type of an algorithm.
201
+ *
202
+ * @stability unstable
203
+ * @category models
204
+ * @since 4.0.0
205
+ */
206
+ export type PublicKey<A extends AsymmetricAlgorithm = AsymmetricAlgorithm> = A extends Signature.Algorithm
207
+ ? Signature.PublicKey<A>
208
+ : A extends KeyAgreement.Algorithm ? KeyAgreement.PublicKey<A>
209
+ : A extends KeyWrap.RsaOaep ? KeyWrap.PublicKey<A>
210
+ : never
211
+
212
+ /**
213
+ * The private key type of an algorithm.
214
+ *
215
+ * @stability unstable
216
+ * @category models
217
+ * @since 4.0.0
218
+ */
219
+ export type PrivateKey<A extends AsymmetricAlgorithm = AsymmetricAlgorithm> = A extends Signature.Algorithm
220
+ ? Signature.PrivateKey<A>
221
+ : A extends KeyAgreement.Algorithm ? KeyAgreement.PrivateKey<A>
222
+ : A extends KeyWrap.RsaOaep ? KeyWrap.PrivateKey<A>
223
+ : never
224
+
225
+ /**
226
+ * The secret key type of an algorithm.
227
+ *
228
+ * @stability unstable
229
+ * @category models
230
+ * @since 4.0.0
231
+ */
232
+ export type SecretKey<A extends SecretAlgorithm = SecretAlgorithm> = A extends Aead.Algorithm ? Aead.Key<A>
233
+ : A extends Cipher.Algorithm ? Cipher.Key<A>
234
+ : A extends Mac.Algorithm ? Mac.Key<A>
235
+ : A extends KeyWrap.AesKw ? KeyWrap.Key<A>
236
+ : never
237
+
238
+ /**
239
+ * Any key `KeyFormat` can write.
240
+ *
241
+ * @stability unstable
242
+ * @category models
243
+ * @since 4.0.0
244
+ */
245
+ export type Key = PublicKey | PrivateKey | SecretKey
246
+
247
+ /**
248
+ * The role of a key type.
249
+ *
250
+ * @stability unstable
251
+ * @category models
252
+ * @since 4.0.0
253
+ */
254
+ export type RoleOf<K extends Key> = K extends PublicKey ? "public" : K extends PrivateKey ? "private" : "secret"
255
+
256
+ const invalidKey = (method: string, description: string) => internal.invalidKey("KeyFormat", method, description)
257
+
258
+ const unsupported = (method: string, description: string) =>
259
+ internal.fail("KeyFormat", method, new CryptoError.Unsupported({ description }))
260
+
261
+ const familyOf = (algorithm: AsymmetricAlgorithm | SecretAlgorithm): Asymmetric.Family | undefined => {
262
+ switch ("_tag" in algorithm ? algorithm._tag : undefined) {
263
+ case "Ed25519":
264
+ case "Ecdsa":
265
+ case "RsaPss":
266
+ case "RsaPkcs1v15":
267
+ return Signature.family
268
+ case "X25519":
269
+ case "Ecdh":
270
+ return KeyAgreement.family
271
+ case "RsaOaep":
272
+ return KeyWrap.family
273
+ default:
274
+ return undefined
275
+ }
276
+ }
277
+
278
+ const labels: Record<Format<Role, Direction, unknown>["_tag"], string> = {
279
+ spki: "PUBLIC KEY",
280
+ pkcs8: "PRIVATE KEY",
281
+ pkcs1: "RSA PRIVATE KEY",
282
+ sec1: "EC PRIVATE KEY",
283
+ jwk: ""
284
+ }
285
+
286
+ const pemPattern = /^-----BEGIN ([A-Z0-9 ]+)-----\r?\n([A-Za-z0-9+/=\r\n]+)-----END ([A-Z0-9 ]+)-----$/
287
+
288
+ const fromPem = (label: string, text: string): Uint8Array | string => {
289
+ const match = pemPattern.exec(text.trim())
290
+ if (match === null || match[1] !== label || match[3] !== label) {
291
+ return `Expected exactly one PEM block labelled ${label}`
292
+ }
293
+ const der = Base64.decode(match[2].replace(/\r?\n/g, ""))
294
+ return Result.isSuccess(der) ? der.success : `The ${label} PEM block is not valid base64`
295
+ }
296
+
297
+ const toPem = (label: string, der: Uint8Array): string => {
298
+ const base64 = Base64.encode(der)
299
+ const lines: Array<string> = []
300
+ for (let i = 0; i < base64.length; i += 64) lines.push(base64.slice(i, i + 64))
301
+ return `-----BEGIN ${label}-----\n${lines.join("\n")}\n-----END ${label}-----\n`
302
+ }
303
+
304
+ // AlgorithmIdentifier for rsaEncryption (1.2.840.113549.1.1.1) with NULL
305
+ // parameters, the OIDs of id-ecPublicKey and the NIST curves, and the EC
306
+ // AlgorithmIdentifier of each curve.
307
+ const rsaEncryption = Uint8Array.of(48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0)
308
+ const ecPublicKey = Uint8Array.of(6, 7, 42, 134, 72, 206, 61, 2, 1)
309
+ const curveOids: Record<Asymmetric.Curve, Uint8Array> = {
310
+ "P-256": Uint8Array.of(6, 8, 42, 134, 72, 206, 61, 3, 1, 7),
311
+ "P-384": Uint8Array.of(6, 5, 43, 129, 4, 0, 34),
312
+ "P-521": Uint8Array.of(6, 5, 43, 129, 4, 0, 35)
313
+ }
314
+ const ecAlgorithm = (curve: Asymmetric.Curve): Uint8Array => Der.encode(Der.sequence, ecPublicKey, curveOids[curve])
315
+ const version0 = Uint8Array.of(2, 1, 0)
316
+
317
+ interface Problem {
318
+ readonly reason: "InvalidKey" | "Unsupported"
319
+ readonly description: string
320
+ }
321
+
322
+ const missingPoint: Problem = {
323
+ reason: "Unsupported",
324
+ description: "EC private keys must include the public point, which Safari cannot import without"
325
+ }
326
+
327
+ // RFC 8017 appendix A.1.2 inside an RFC 5208 PrivateKeyInfo.
328
+ const pkcs1ToPkcs8 = (pkcs1: Uint8Array): Uint8Array | Problem =>
329
+ Der.readOnly(pkcs1, Der.sequence) === undefined
330
+ ? { reason: "InvalidKey", description: "Malformed PKCS#1 RSAPrivateKey" }
331
+ : Der.encode(Der.sequence, version0, rsaEncryption, Der.encode(Der.octetString, pkcs1))
332
+
333
+ // RFC 5915: ECPrivateKey ::= SEQUENCE { version 1, privateKey OCTET STRING,
334
+ // [0] parameters OPTIONAL, [1] publicKey OPTIONAL }. PKCS#8 carries the curve
335
+ // in its AlgorithmIdentifier, so the `[0]` parameters are dropped.
336
+ const sec1ToPkcs8 = (sec1: Uint8Array, curve: Asymmetric.Curve): Uint8Array | Problem => {
337
+ const malformed: Problem = { reason: "InvalidKey", description: "Malformed SEC1 ECPrivateKey" }
338
+ const outer = Der.readOnly(sec1, Der.sequence)
339
+ const fields = outer === undefined ? undefined : Der.children(sec1, outer)
340
+ if (fields === undefined || fields.length < 2) return malformed
341
+ const [version, privateKey, ...rest] = fields
342
+ if (version.tag !== Der.integer || privateKey.tag !== Der.octetString) return malformed
343
+ const params = rest.find((field) => field.tag === 0xa0)
344
+ const point = rest.find((field) => field.tag === 0xa1)
345
+ if (params !== undefined) {
346
+ const oid = Der.read(sec1, params.start, params.end)
347
+ if (oid === undefined || oid.tag !== Der.objectIdentifier || oid.end !== params.end) return malformed
348
+ if (!Der.equals(Der.slice(sec1, oid), curveOids[curve])) {
349
+ return { reason: "InvalidKey", description: `Expected a ${curve} key` }
350
+ }
351
+ }
352
+ if (point === undefined) return missingPoint
353
+ const ecPrivateKey = Der.encode(
354
+ Der.sequence,
355
+ Der.slice(sec1, version),
356
+ Der.slice(sec1, privateKey),
357
+ Der.slice(sec1, point)
358
+ )
359
+ return Der.encode(
360
+ Der.sequence,
361
+ version0,
362
+ ecAlgorithm(curve),
363
+ Der.encode(Der.octetString, ecPrivateKey)
364
+ )
365
+ }
366
+
367
+ // Check the algorithm before classifying a missing EC public point.
368
+ // Leave other malformed DER to the runtime's import validation.
369
+ const checkEcPkcs8 = (pkcs8: Uint8Array, curve: Asymmetric.Curve): Problem | undefined => {
370
+ const outer = Der.readOnly(pkcs8, Der.sequence)
371
+ const fields = outer === undefined ? undefined : Der.children(pkcs8, outer)
372
+ if (fields === undefined || fields.length < 3) return undefined
373
+ if (!Der.equals(Der.slice(pkcs8, fields[1]), ecAlgorithm(curve))) {
374
+ return { reason: "InvalidKey", description: `Expected a ${curve} EC private key` }
375
+ }
376
+ const octets = fields[2]
377
+ if (octets.tag !== Der.octetString) return undefined
378
+ const inner = Der.read(pkcs8, octets.start, octets.end)
379
+ if (inner === undefined || inner.tag !== Der.sequence) return undefined
380
+ const ecFields = Der.children(pkcs8, inner)
381
+ if (ecFields === undefined) return undefined
382
+ return ecFields.some((field) => field.tag === 0xa1) ? undefined : missingPoint
383
+ }
384
+
385
+ interface Jose {
386
+ readonly kty: string
387
+ readonly crv: string | undefined
388
+ readonly algs: ReadonlyArray<string>
389
+ }
390
+
391
+ const ecdhAlgs = ["ECDH-ES", "ECDH-ES+A128KW", "ECDH-ES+A192KW", "ECDH-ES+A256KW"]
392
+
393
+ const hashBits = (hash: { readonly name: string }): string => hash.name.slice(4)
394
+
395
+ const secretAlgs: Record<SecretAlgorithm["name"], string> = {
396
+ aes128Gcm: "A128GCM",
397
+ aes256Gcm: "A256GCM",
398
+ chacha20Poly1305: "C20P",
399
+ xchacha20Poly1305: "XC20P",
400
+ aes128Ctr: "A128CTR",
401
+ aes256Ctr: "A256CTR",
402
+ aes128Cbc: "A128CBC",
403
+ aes256Cbc: "A256CBC",
404
+ hmacSha1: "HS1",
405
+ hmacSha256: "HS256",
406
+ hmacSha384: "HS384",
407
+ hmacSha512: "HS512",
408
+ aes128Kw: "A128KW",
409
+ aes256Kw: "A256KW"
410
+ }
411
+
412
+ const joseOf = (algorithm: AsymmetricAlgorithm | SecretAlgorithm): Jose => {
413
+ if (!("_tag" in algorithm) || algorithm._tag === "AesKw") {
414
+ return { kty: "oct", crv: undefined, algs: [secretAlgs[algorithm.name]] }
415
+ }
416
+ switch (algorithm._tag) {
417
+ case "Ed25519":
418
+ return { kty: "OKP", crv: "Ed25519", algs: ["EdDSA", "Ed25519"] }
419
+ case "X25519":
420
+ return { kty: "OKP", crv: "X25519", algs: ecdhAlgs }
421
+ case "Ecdsa":
422
+ return { kty: "EC", crv: algorithm.namedCurve, algs: [`ES${hashBits(algorithm.hash)}`] }
423
+ case "Ecdh":
424
+ return { kty: "EC", crv: algorithm.namedCurve, algs: ecdhAlgs }
425
+ case "RsaPss":
426
+ return { kty: "RSA", crv: undefined, algs: [`PS${hashBits(algorithm.hash)}`] }
427
+ case "RsaPkcs1v15":
428
+ return { kty: "RSA", crv: undefined, algs: [`RS${hashBits(algorithm.hash)}`] }
429
+ case "RsaOaep":
430
+ return {
431
+ kty: "RSA",
432
+ crv: undefined,
433
+ algs: [algorithm.hash.name === "SHA-1" ? "RSA-OAEP" : `RSA-OAEP-${hashBits(algorithm.hash)}`]
434
+ }
435
+ }
436
+ }
437
+
438
+ const publicMembers = ["kty", "crv", "x", "y", "n", "e"] as const
439
+ const privateMembers = [...publicMembers, "d", "p", "q", "dp", "dq", "qi"] as const
440
+
441
+ const pick = (jwk: JsonWebKey, members: ReadonlyArray<string>): JsonWebKey => {
442
+ const out: Record<string, unknown> = {}
443
+ for (const member of members) {
444
+ const value = (jwk as Record<string, unknown>)[member]
445
+ if (value !== undefined) out[member] = value
446
+ }
447
+ return out as JsonWebKey
448
+ }
449
+
450
+ // Validate the algorithm and role, then drop JOSE metadata that could reject
451
+ // an otherwise valid import (`use`, `key_ops`, `ext`).
452
+ const checkJwk = (data: unknown, algorithm: AsymmetricAlgorithm | SecretAlgorithm, role: Role): JsonWebKey | string => {
453
+ if (!Predicate.isObject(data)) return "Expected a JWK object"
454
+ const expected = joseOf(algorithm)
455
+ if (data.kty !== undefined && data.kty !== expected.kty) {
456
+ return `Expected a JWK with kty ${expected.kty}, not ${String(data.kty)}`
457
+ }
458
+ if (data.crv !== undefined && data.crv !== expected.crv) {
459
+ return expected.crv === undefined
460
+ ? `Expected a JWK without crv, not ${String(data.crv)}`
461
+ : `Expected a JWK with crv ${expected.crv}, not ${String(data.crv)}`
462
+ }
463
+ if (data.alg !== undefined && !expected.algs.includes(data.alg as string)) {
464
+ return `Expected a JWK with alg ${expected.algs.join(" or ")}, not ${String(data.alg)}`
465
+ }
466
+ switch (role) {
467
+ case "public":
468
+ if (data.d !== undefined) return "A public JWK cannot contain d"
469
+ return pick({ ...data, kty: expected.kty }, publicMembers)
470
+ case "private":
471
+ if (typeof data.d !== "string") return "A private JWK must contain d"
472
+ return pick({ ...data, kty: expected.kty }, privateMembers)
473
+ case "secret":
474
+ if (typeof data.k !== "string") return "A secret JWK must contain k"
475
+ return { kty: "oct", k: data.k }
476
+ }
477
+ }
478
+
479
+ const decodeAsymmetric = <K>(
480
+ method: string,
481
+ role: "public" | "private",
482
+ format: Format<Role, Direction, unknown>,
483
+ algorithm: AsymmetricAlgorithm,
484
+ data: unknown
485
+ ): Effect.Effect<K, CryptoError.CryptoError> =>
486
+ Effect.suspend(() => {
487
+ const family = familyOf(algorithm)
488
+ if (family === undefined) return invalidKey(method, "Expected an asymmetric algorithm")
489
+ const spec = family.specOf(algorithm)
490
+
491
+ let input: { readonly format: "spki" | "pkcs8" | "jwk"; readonly data: BufferSource | JsonWebKey }
492
+ if (format._tag === "jwk") {
493
+ const checked = checkJwk(data, algorithm, role)
494
+ if (typeof checked === "string") return invalidKey(method, checked)
495
+ input = { format: "jwk", data: checked }
496
+ } else {
497
+ let der: Uint8Array
498
+ if (format.pem) {
499
+ if (typeof data !== "string") return invalidKey(method, "Expected PEM text")
500
+ const decoded = fromPem(labels[format._tag], data)
501
+ if (typeof decoded === "string") return invalidKey(method, decoded)
502
+ der = decoded
503
+ } else {
504
+ if (!(data instanceof Uint8Array)) return invalidKey(method, "Expected DER bytes as a Uint8Array")
505
+ der = KeyModel.copyBytes(data)
506
+ }
507
+ let converted: Uint8Array | Problem = der
508
+ if (format._tag === "pkcs1") {
509
+ converted = spec.publicFormat === "spki"
510
+ ? pkcs1ToPkcs8(der)
511
+ : { reason: "InvalidKey", description: "PKCS#1 holds RSA private keys only" }
512
+ } else if (format._tag === "sec1") {
513
+ converted = algorithm._tag === "Ecdsa" || algorithm._tag === "Ecdh"
514
+ ? sec1ToPkcs8(der, algorithm.namedCurve)
515
+ : { reason: "InvalidKey", description: "SEC1 holds EC private keys only" }
516
+ } else if (format._tag === "pkcs8" && (algorithm._tag === "Ecdsa" || algorithm._tag === "Ecdh")) {
517
+ converted = checkEcPkcs8(der, algorithm.namedCurve) ?? der
518
+ }
519
+ if (!(converted instanceof Uint8Array)) {
520
+ return converted.reason === "Unsupported"
521
+ ? unsupported(method, converted.description)
522
+ : invalidKey(method, converted.description)
523
+ }
524
+ input = { format: format._tag === "spki" ? "spki" : "pkcs8", data: converted as BufferSource }
525
+ }
526
+
527
+ return internal.runWithReference("KeyFormat", method, algorithm.name, async (subtle) => {
528
+ const usages = role === "private" ? spec.privateUsages : spec.publicUsages
529
+ const cryptoKey = input.format === "jwk"
530
+ ? await subtle.importKey("jwk", input.data as JsonWebKey, spec.importParams, true, [...usages])
531
+ : await subtle.importKey(input.format, input.data as BufferSource, spec.importParams, true, [...usages])
532
+ return KeyModel.makeBytes<K>(
533
+ role === "private" ? family.privateKeyProto : family.publicKeyProto,
534
+ KeyModel.importedAlgorithm(algorithm, cryptoKey),
535
+ await Asymmetric.exportKey(subtle, cryptoKey, spec, role)
536
+ )
537
+ })
538
+ })
539
+
540
+ /**
541
+ * Decodes a public key.
542
+ *
543
+ * **Details**
544
+ *
545
+ * The format must hold public keys: {@link spki}, {@link jwk}, or
546
+ * `pem(spki)`. The key is imported on the `WebCrypto` reference and stored as
547
+ * bytes. Malformed data, a key of another algorithm or curve, or a JWK with
548
+ * `d` fails with an `InvalidKey` reason.
549
+ *
550
+ * **Example** (Reading a PEM public key)
551
+ *
552
+ * ```ts
553
+ * import { Effect } from "effect"
554
+ * import { KeyFormat, Signature } from "effect/crypto"
555
+ *
556
+ * declare const text: string
557
+ *
558
+ * const publicKey = KeyFormat.decodePublic(KeyFormat.pem(KeyFormat.spki), Signature.ecdsaP256, text)
559
+ * ```
560
+ *
561
+ * @stability unstable
562
+ * @category decoding
563
+ * @since 4.0.0
564
+ */
565
+ export const decodePublic = <A extends AsymmetricAlgorithm, Data>(
566
+ format: Format<"public", "decode", Data>,
567
+ algorithm: A,
568
+ data: NoInfer<Data>
569
+ ): Effect.Effect<PublicKey<A>, CryptoError.CryptoError> =>
570
+ decodeAsymmetric("decodePublic", "public", format as Format<Role, Direction, unknown>, algorithm, data)
571
+
572
+ /**
573
+ * Decodes a private key.
574
+ *
575
+ * **Details**
576
+ *
577
+ * The format must hold private keys: {@link pkcs8}, {@link jwk},
578
+ * {@link pkcs1}, {@link sec1}, or their PEM forms. PKCS#1 and SEC1 are
579
+ * converted to PKCS#8 before the import. Malformed data, a key of another
580
+ * algorithm or curve, or a JWK without `d` fails with an `InvalidKey` reason.
581
+ * An EC private key without its public point fails with an `Unsupported`
582
+ * reason on every runtime, because Safari and Firefox before 132 cannot import
583
+ * it.
584
+ *
585
+ * @stability unstable
586
+ * @category decoding
587
+ * @since 4.0.0
588
+ */
589
+ export const decodePrivate = <A extends AsymmetricAlgorithm, Data>(
590
+ format: Format<"private", "decode", Data>,
591
+ algorithm: A,
592
+ data: NoInfer<Data>
593
+ ): Effect.Effect<PrivateKey<A>, CryptoError.CryptoError> =>
594
+ decodeAsymmetric("decodePrivate", "private", format as Format<Role, Direction, unknown>, algorithm, data)
595
+
596
+ /**
597
+ * Decodes a secret key from a JWK.
598
+ *
599
+ * **Details**
600
+ *
601
+ * The JWK must have `kty` `oct` when `kty` is present, and an `alg` matching
602
+ * the algorithm when `alg` is present. The key bytes go through the family's
603
+ * raw constructor, so a wrong length fails with an `InvalidKey` reason.
604
+ * Secret keys never touch `crypto.subtle` here.
605
+ *
606
+ * @stability unstable
607
+ * @category decoding
608
+ * @since 4.0.0
609
+ */
610
+ export const decodeSecret = <A extends SecretAlgorithm, Data>(
611
+ format: Format<"secret", "decode", Data>,
612
+ algorithm: A,
613
+ data: NoInfer<Data>
614
+ ): Effect.Effect<SecretKey<A>, CryptoError.CryptoError> =>
615
+ Effect.suspend(() => {
616
+ if (format._tag !== "jwk") return invalidKey("decodeSecret", "Secret keys are only read from JWK")
617
+ const checked = checkJwk(data, algorithm, "secret")
618
+ if (typeof checked === "string") return invalidKey("decodeSecret", checked)
619
+ const bytes = Base64Url.decode(checked.k!)
620
+ if (Result.isFailure(bytes)) return invalidKey("decodeSecret", "The JWK k member is not valid base64url")
621
+ return KeyWrap.secretFamily(algorithm).key(algorithm, bytes.success).pipe(
622
+ Effect.catch(internal.rehome("KeyFormat", "decodeSecret"))
623
+ ) as Effect.Effect<SecretKey<A>, CryptoError.CryptoError>
624
+ })
625
+
626
+ const encodeAsymmetric = (
627
+ format: Format<Role, Direction, unknown>,
628
+ key: PublicKey | PrivateKey,
629
+ family: Asymmetric.Family
630
+ ): Effect.Effect<Uint8Array | JsonWebKey, CryptoError.CryptoError> =>
631
+ Effect.suspend((): Effect.Effect<Uint8Array | JsonWebKey, CryptoError.CryptoError> => {
632
+ const spec = family.specOf(key.algorithm)
633
+ const role = family.isPrivateKey(key) ? "private" : "public"
634
+ const stored = KeyModel.material(key)
635
+ if (stored._tag === "CryptoKey" && !stored.cryptoKey.extractable) {
636
+ return internal.notExtractable("KeyFormat", "encode")
637
+ }
638
+ const target = format._tag === "jwk" ? "jwk" : format._tag === "spki" ? "spki" : "pkcs8"
639
+ if (stored._tag === "Bytes") {
640
+ // RSA keys and EC private keys are stored in the format asked for.
641
+ if (target === "pkcs8" && role === "private" && spec.seedPrefix === undefined) {
642
+ return Effect.succeed(KeyModel.copyBytes(stored.bytes))
643
+ }
644
+ if (target === "spki" && role === "public" && spec.publicFormat === "spki") {
645
+ return Effect.succeed(KeyModel.copyBytes(stored.bytes))
646
+ }
647
+ }
648
+ return internal.runWithReference("KeyFormat", "encode", key.algorithm.name, async (subtle) => {
649
+ const cryptoKey = stored._tag === "CryptoKey"
650
+ ? stored.cryptoKey
651
+ : role === "private"
652
+ ? await Asymmetric.importPrivate(subtle, stored.bytes, spec, true)
653
+ : await Asymmetric.importPublic(subtle, stored.bytes, spec)
654
+ if (target === "jwk") {
655
+ return pick(await subtle.exportKey("jwk", cryptoKey), role === "private" ? privateMembers : publicMembers)
656
+ }
657
+ return new Uint8Array(await subtle.exportKey(target, cryptoKey))
658
+ })
659
+ })
660
+
661
+ /**
662
+ * Encodes a key in a format.
663
+ *
664
+ * **Details**
665
+ *
666
+ * The format must hold the key's role and be writable: {@link spki} for
667
+ * public keys, {@link pkcs8} for private keys, {@link jwk} for every role,
668
+ * and the PEM forms of SPKI and PKCS#8. PKCS#1 and SEC1 cannot be written.
669
+ *
670
+ * PEM output uses 64-column lines. JWK output contains only `kty`, `crv`, and
671
+ * the key material. A non-extractable `CryptoKey`-backed key fails with a
672
+ * `NotExtractable` reason.
673
+ *
674
+ * **Example** (Writing a public key as JWK)
675
+ *
676
+ * ```ts import.meta.vitest
677
+ * import { Effect, Layer } from "effect"
678
+ * import { KeyFormat, SecureRandom, Signature } from "effect/crypto"
679
+ *
680
+ * const program = Effect.gen(function*() {
681
+ * const signature = yield* Signature.Signature
682
+ * const { publicKey } = yield* signature.generateKeyPair(Signature.ed25519)
683
+ * const jwk = yield* KeyFormat.encode(KeyFormat.jwk, publicKey)
684
+ * return [jwk.kty, jwk.crv]
685
+ * })
686
+ *
687
+ * const layer = Signature.layerWebCrypto.pipe(Layer.provide(SecureRandom.layerWebCrypto))
688
+ * await Effect.runPromise(program.pipe(Effect.provide(layer))) // => ["OKP", "Ed25519"]
689
+ * ```
690
+ *
691
+ * @stability unstable
692
+ * @category encoding
693
+ * @since 4.0.0
694
+ */
695
+ export const encode = <K extends Key, Data>(
696
+ format: Format<RoleOf<K>, "encode", Data>,
697
+ key: K
698
+ ): Effect.Effect<Data, CryptoError.CryptoError> => {
699
+ const generic = format as Format<Role, Direction, unknown>
700
+ const family = familyOf(key.algorithm)
701
+ const encoded: Effect.Effect<Uint8Array | JsonWebKey, CryptoError.CryptoError> = family !== undefined
702
+ ? encodeAsymmetric(generic, key as PublicKey | PrivateKey, family)
703
+ : generic._tag !== "jwk"
704
+ ? invalidKey("encode", "Secret keys are only written as JWK")
705
+ : KeyWrap.secretFamily(key.algorithm as SecretAlgorithm).toBytes(key).pipe(
706
+ Effect.catch(internal.rehome("KeyFormat", "encode")),
707
+ Effect.map((bytes): JsonWebKey => ({ kty: "oct", k: Base64Url.encode(bytes) }))
708
+ )
709
+ return (generic.pem
710
+ ? Effect.map(encoded, (der) => toPem(labels[generic._tag], der as Uint8Array))
711
+ : encoded) as Effect.Effect<Data, CryptoError.CryptoError>
712
+ }