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
@@ -89,6 +89,15 @@ export interface RpcServer<A extends Rpc.Any> {
89
89
  * the request fails with that cause. `onFromServer` is assumed to have already
90
90
  * answered the client and reported it, so nothing else is sent or reported.
91
91
  *
92
+ * A request with `isNotification` set runs like any other, but no `Exit`,
93
+ * `Chunk` or `Defect` is sent for it. Its failures are still reported.
94
+ *
95
+ * A request with `discard` set is acknowledged with a successful `Exit` once
96
+ * its handler starts, after the concurrency permit is taken and the
97
+ * middleware has run. Nothing else is sent for it after that, and its
98
+ * failures are only reported. A failure before the acknowledgement is sent as
99
+ * a failed `Exit` for that request.
100
+ *
92
101
  * @stability unstable
93
102
  * @category constructors
94
103
  * @since 4.0.0
@@ -255,16 +264,23 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any>(
255
264
  if (client.fibers.has(request.id)) {
256
265
  return Effect.interrupt
257
266
  }
267
+ const isNotification = request.isNotification === true
268
+ const isDiscard = !isNotification && request.discard === true
269
+ let acknowledged = false
270
+ // a notification, or a discarded call once it has been acknowledged, gets
271
+ // no reply of any kind
272
+ const respond = (exit: Exit.Exit<any, any>): Effect.Effect<void> =>
273
+ isNotification || acknowledged ? Effect.void : options.onFromServer({
274
+ _tag: "Exit",
275
+ clientId: client.id,
276
+ requestId: request.id,
277
+ exit
278
+ })
258
279
  const rpc = group.requests.get(request.tag) as any as Rpc.AnyWithProps
259
280
  const entry = Context.getOrUndefinedUnsafe(services, rpc?.key) as Rpc.Handler<Rpcs["_tag"]>
260
281
  if (!rpc || !entry) {
261
282
  const write = Effect.catchDefect(
262
- options.onFromServer({
263
- _tag: "Exit",
264
- clientId: client.id,
265
- requestId: request.id,
266
- exit: Exit.die(`Unknown request tag: ${request.tag}`)
267
- }),
283
+ respond(Exit.die(`Unknown request tag: ${request.tag}`)),
268
284
  (defect) => sendDefect(client, defect)
269
285
  )
270
286
  if (!client.ended || client.fibers.size > 0) return write
@@ -278,7 +294,18 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any>(
278
294
  headers: request.headers,
279
295
  payload: request.payload
280
296
  }
281
- const result = entry.handler(request.payload, metadata)
297
+ let handlerResult: ReturnType<typeof entry.handler>
298
+ // a handler that throws while being constructed never starts, so it is
299
+ // neither streamed nor acknowledged
300
+ let constructionFailed = false
301
+ try {
302
+ handlerResult = entry.handler(request.payload, metadata)
303
+ } catch (defect) {
304
+ handlerResult = Effect.die(defect)
305
+ constructionFailed = true
306
+ }
307
+ // a const, so that the narrowing below can be aliased
308
+ const result = handlerResult
282
309
 
283
310
  // if the handler requested forking, then we skip the concurrency control
284
311
  const isWrapper = Rpc.isWrapper(result)
@@ -288,11 +315,23 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any>(
288
315
  const streamOrEffect = isWrapper ? result.value : result
289
316
  // set when a chunk could not be written; the writer has already responded
290
317
  let writeFailure: Cause.Cause<never> | undefined
291
- const handler = isStream
318
+ let handler = isStream && !constructionFailed
292
319
  ? (streamEffect(client, request, streamOrEffect, (cause) => {
293
320
  writeFailure = cause
294
321
  }) as Effect.Effect<{} | Deferred.Deferred<any, any>>)
295
322
  : (streamOrEffect as Effect.Effect<{} | Deferred.Deferred<any, any>>)
323
+ if (isDiscard && !constructionFailed) {
324
+ // the acknowledgement runs inside the middleware, so it is only sent
325
+ // once the permit is held and the middleware has started the handler
326
+ handler = Effect.andThen(
327
+ Effect.suspend(() => {
328
+ const ack = respond(Exit.void)
329
+ acknowledged = true
330
+ return ack
331
+ }),
332
+ handler
333
+ )
334
+ }
296
335
 
297
336
  const withMiddleware = rpc.middlewares.size === 0
298
337
  ? handler
@@ -314,29 +353,22 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any>(
314
353
  deferred = exit.value
315
354
  write = Effect.void
316
355
  } else {
317
- write = options.onFromServer({
318
- _tag: "Exit",
319
- clientId: client.id,
320
- requestId: request.id,
321
- exit: exit as any
322
- })
356
+ write = respond(exit)
323
357
  }
324
358
  } else if (writeFailure) {
325
359
  // onFromServer has already answered the client and reported the failure
326
360
  return Scope.closeUnsafe(scope, exit) ?? Effect.void
327
361
  } else if (
328
362
  !disableFatalDefects &&
363
+ // a notification or a discarded call only ever fails itself
364
+ !isNotification &&
365
+ !isDiscard &&
329
366
  Cause.hasDies(exit.cause) &&
330
367
  !Cause.hasInterrupts(exit.cause)
331
368
  ) {
332
369
  write = sendDefect(client, Cause.squash(exit.cause))
333
370
  } else {
334
- write = options.onFromServer({
335
- _tag: "Exit",
336
- clientId: client.id,
337
- requestId: request.id,
338
- exit: exit as any
339
- })
371
+ write = respond(exit)
340
372
  }
341
373
  const close = Scope.closeUnsafe(scope, exit)
342
374
  if (exit._tag === "Failure") {
@@ -391,29 +423,24 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any>(
391
423
  )
392
424
  fiber.addObserver(function onExit(exit: Exit.Exit<any, any>): void {
393
425
  if (deferred) {
394
- const fiber = trackFiber(runFork(Effect.onExit(Deferred.await(deferred), (exit) =>
395
- options.onFromServer({
396
- _tag: "Exit",
397
- clientId: client.id,
398
- requestId: request.id,
399
- exit: exit as any
400
- }))))
426
+ const fiber = trackFiber(
427
+ runFork(
428
+ Effect.onExit(Deferred.await(deferred), (exit) => {
429
+ // a failure with no reply to carry it is only reported
430
+ if (exit._tag === "Failure" && (isNotification || acknowledged)) {
431
+ reportCauseUnsafe(Fiber.getCurrent()!, exit.cause)
432
+ }
433
+ return respond(exit)
434
+ })
435
+ )
436
+ )
401
437
  client.fibers.set(request.id, fiber)
402
438
  deferred = undefined
403
439
  fiber.addObserver(onExit)
404
440
  return
405
441
  }
406
- if (!responded && exit._tag === "Failure") {
407
- trackFiber(
408
- runFork(
409
- options.onFromServer({
410
- _tag: "Exit",
411
- clientId: client.id,
412
- requestId: request.id,
413
- exit: Exit.interrupt()
414
- })
415
- )
416
- )
442
+ if (!responded && !isNotification && !acknowledged && exit._tag === "Failure") {
443
+ trackFiber(runFork(respond(Exit.interrupt())))
417
444
  }
418
445
  client.fibers.delete(request.id)
419
446
  client.latches?.delete(request.id)
@@ -432,8 +459,11 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any>(
432
459
  | Effect.Effect<Queue.Dequeue<any, any>, any, Scope.Scope>,
433
460
  onWriteFailure: (cause: Cause.Cause<never>) => void
434
461
  ) => {
462
+ // the chunks of a notification or a discarded call have no reader, so they
463
+ // are neither sent nor acknowledged
464
+ const silent = request.isNotification === true || request.discard === true
435
465
  const writeChunk = (values: NonEmptyReadonlyArray<any>) =>
436
- Effect.onError(
466
+ silent ? Effect.void : Effect.onError(
437
467
  options.onFromServer({ _tag: "Chunk", clientId: client.id, requestId: request.id, values }),
438
468
  (cause) => {
439
469
  if (!Cause.hasInterruptsOnly(cause)) onWriteFailure(cause)
@@ -441,7 +471,7 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any>(
441
471
  }
442
472
  )
443
473
  let latch: Latch.Latch | undefined
444
- if (supportsAck) {
474
+ if (supportsAck && !silent) {
445
475
  client.latches ??= new Map()
446
476
  latch = client.latches.get(request.id)
447
477
  if (!latch) {
@@ -598,6 +628,23 @@ const applyMiddleware = <A, E, R>(
598
628
  * requests, invoking handlers, encoding responses, and managing in-flight
599
629
  * request lifetime.
600
630
  *
631
+ * **Details**
632
+ *
633
+ * The server consumes `Protocol.disconnects` to interrupt a disconnected
634
+ * client's requests, so use the `onDisconnect` option to observe disconnects
635
+ * instead of taking from that queue.
636
+ *
637
+ * `onDisconnect` is called for each disconnect reported by the `Protocol`,
638
+ * after the server has requested interruption of that client's in-flight
639
+ * requests. It does not wait for those requests to finish. It is not called
640
+ * when a client ends its input normally, or for clients still connected when
641
+ * the server stops.
642
+ *
643
+ * Each callback runs in its own fiber, so a slow callback does not delay
644
+ * cleanup for other clients, and callbacks may run concurrently. Pending
645
+ * callbacks are interrupted when the server stops. Failures are ignored and
646
+ * logged at `References.UnhandledLogLevel`.
647
+ *
601
648
  * @stability unstable
602
649
  * @category running
603
650
  * @since 4.0.0
@@ -611,6 +658,7 @@ export const make: <Rpcs extends Rpc.Any>(
611
658
  readonly spanAttributes?: Record<string, unknown> | undefined
612
659
  readonly concurrency?: number | "unbounded" | undefined
613
660
  readonly disableFatalDefects?: boolean | undefined
661
+ readonly onDisconnect?: ((clientId: number) => Effect.Effect<void>) | undefined
614
662
  }
615
663
  | undefined
616
664
  ) => Effect.Effect<
@@ -628,6 +676,7 @@ export const make: <Rpcs extends Rpc.Any>(
628
676
  readonly spanAttributes?: Record<string, unknown> | undefined
629
677
  readonly concurrency?: number | "unbounded" | undefined
630
678
  readonly disableFatalDefects?: boolean | undefined
679
+ readonly onDisconnect?: ((clientId: number) => Effect.Effect<void>) | undefined
631
680
  }
632
681
  ) {
633
682
  const {
@@ -687,13 +736,24 @@ export const make: <Rpcs extends Rpc.Any>(
687
736
  }).pipe(Scope.provide(scope))
688
737
 
689
738
  // handle disconnects
739
+ const onDisconnect = options?.onDisconnect
740
+ const handleDisconnect = onDisconnect
741
+ ? (clientId: number) =>
742
+ Effect.andThen(
743
+ server.disconnect(clientId),
744
+ Effect.ignoreCause(Effect.suspend(() => onDisconnect(clientId)), {
745
+ log: "Unhandled",
746
+ message: "RpcServer onDisconnect hook failed"
747
+ }).pipe(Effect.forkIn(scope))
748
+ )
749
+ : server.disconnect
690
750
  yield* Effect.forkChild(
691
751
  Effect.whileLoop({
692
752
  while: constTrue,
693
753
  body: constant(
694
754
  Effect.flatMap(Queue.take(disconnects), (clientId) => {
695
755
  clients.delete(clientId)
696
- return server.disconnect(clientId)
756
+ return handleDisconnect(clientId)
697
757
  })
698
758
  ),
699
759
  step: constVoid
@@ -726,6 +786,25 @@ export const make: <Rpcs extends Rpc.Any>(
726
786
  return schemas
727
787
  }
728
788
 
789
+ // The only successful Exit sent for a discarded call is its acknowledgement,
790
+ // which carries no value, so its Exits are encoded with a void success.
791
+ const discardSchemasCache = new WeakMap<any, Schemas>()
792
+ const getDiscardSchemas = (rpc: Rpc.AnyWithProps, schemas: Schemas) => {
793
+ let discardSchemas = discardSchemasCache.get(rpc)
794
+ if (!discardSchemas) {
795
+ const exitSchema = Rpc.exitSchema(rpc as any)
796
+ discardSchemas = {
797
+ ...schemas,
798
+ encodeExit: Schema.encodeUnknownEffect(
799
+ codecFor(Schema.Exit(Schema.Void, exitSchema.error, exitSchema.defect)),
800
+ Context.get(rpc.annotations, Rpc.ParseOptions)
801
+ ) as any
802
+ }
803
+ discardSchemasCache.set(rpc, discardSchemas)
804
+ }
805
+ return discardSchemas
806
+ }
807
+
729
808
  type Client = {
730
809
  readonly id: number
731
810
  readonly schemas: Map<RequestId, Schemas>
@@ -809,6 +888,13 @@ export const make: <Rpcs extends Rpc.Any>(
809
888
  })
810
889
  )
811
890
 
891
+ // a notification has no reply to carry the error, so it is only logged
892
+ const dropNotification = (reason: string) =>
893
+ Effect.annotateLogs(Effect.logDebug(`Dropped RPC notification: ${reason}`), {
894
+ module: "RpcServer",
895
+ method: "dropNotification"
896
+ })
897
+
812
898
  const writeDecodedRequest = (
813
899
  client: Client,
814
900
  requestId: RequestId,
@@ -816,15 +902,18 @@ export const make: <Rpcs extends Rpc.Any>(
816
902
  request: RequestEncoded,
817
903
  payload: unknown
818
904
  ) => {
819
- client.schemas.set(
820
- requestId,
821
- supportsTransferables
822
- ? {
823
- ...schemas,
824
- collector: Transferable.makeCollectorUnsafe()
825
- }
826
- : schemas
827
- )
905
+ // nothing is encoded for a notification, and only a reply would remove its schemas
906
+ if (request.isNotification !== true) {
907
+ client.schemas.set(
908
+ requestId,
909
+ supportsTransferables
910
+ ? {
911
+ ...schemas,
912
+ collector: Transferable.makeCollectorUnsafe()
913
+ }
914
+ : schemas
915
+ )
916
+ }
828
917
  // the envelope is owned by this protocol loop, so it is decoded in place
829
918
  // instead of copied for every request
830
919
  const decoded = request as Types.Mutable<RequestEncoded>
@@ -834,6 +923,8 @@ export const make: <Rpcs extends Rpc.Any>(
834
923
  return server.write(client.id, decoded as any)
835
924
  }
836
925
 
926
+ let notificationCount = 0
927
+
837
928
  // main server loop
838
929
  return yield* run((clientId, request) => {
839
930
  let client = clients.get(clientId)
@@ -848,35 +939,51 @@ export const make: <Rpcs extends Rpc.Any>(
848
939
  switch (request._tag) {
849
940
  case "Request": {
850
941
  const tag = Object.hasOwn(request, "tag") ? (request.tag as string) : ""
942
+ const isNotification = request.isNotification === true
851
943
  let requestId: RequestId
852
- switch (typeof request.id) {
853
- case "number":
854
- case "string": {
855
- requestId = RequestId(request.id)
856
- break
857
- }
858
- default: {
859
- return sendDefect(client, `Invalid request id: ${request.id}`)
944
+ if (isNotification) {
945
+ // JSON-RPC notifications share an empty id, and no reply ever names one
946
+ requestId = RequestId(`@effect/rpc/notification/${notificationCount++}`)
947
+ } else {
948
+ switch (typeof request.id) {
949
+ case "number":
950
+ case "string": {
951
+ requestId = RequestId(request.id)
952
+ break
953
+ }
954
+ default: {
955
+ return sendDefect(client, `Invalid request id: ${request.id}`)
956
+ }
860
957
  }
861
958
  }
862
959
  const rpc = group.requests.get(tag)
863
960
  if (!rpc) {
864
- return sendRequestDefect(client, requestId, encodeUnknownRequestExit, `Unknown request tag: ${tag}`)
961
+ const reason = `Unknown request tag: ${tag}`
962
+ return isNotification
963
+ ? dropNotification(reason)
964
+ : sendRequestDefect(client, requestId, encodeUnknownRequestExit, reason)
865
965
  }
866
966
  const schemas = getSchemas(rpc as any)
967
+ const replySchemas = !isNotification && request.discard === true
968
+ ? getDiscardSchemas(rpc as any, schemas)
969
+ : schemas
867
970
  const decoded = schemas.decode(request.payload)
868
971
  // The schema decoders evaluate eagerly, so a decode that needs no
869
972
  // services is already a resolved success and can skip the effect
870
973
  // wrappers.
871
974
  if (Exit.isExit(decoded) && Exit.isSuccess(decoded)) {
872
- return writeDecodedRequest(client, requestId, schemas, request, decoded.value)
975
+ return writeDecodedRequest(client, requestId, replySchemas, request, decoded.value)
873
976
  }
874
977
  return Effect.matchEffect(
875
978
  Effect.provideContext(decoded, schemas.context),
876
979
  {
877
- onFailure: (error) =>
878
- sendRequestDefect(client, requestId, schemas.encodeExit, SchemaIssue.defaultFormatter(error.issue)),
879
- onSuccess: (payload) => writeDecodedRequest(client, requestId, schemas, request, payload)
980
+ onFailure: (error) => {
981
+ const reason = SchemaIssue.defaultFormatter(error.issue)
982
+ return isNotification
983
+ ? dropNotification(reason)
984
+ : sendRequestDefect(client, requestId, replySchemas.encodeExit, reason)
985
+ },
986
+ onSuccess: (payload) => writeDecodedRequest(client, requestId, replySchemas, request, payload)
880
987
  }
881
988
  )
882
989
  }
@@ -924,6 +1031,7 @@ export const layer = <Rpcs extends Rpc.Any>(
924
1031
  readonly spanAttributes?: Record<string, unknown> | undefined
925
1032
  readonly concurrency?: number | "unbounded" | undefined
926
1033
  readonly disableFatalDefects?: boolean | undefined
1034
+ readonly onDisconnect?: ((clientId: number) => Effect.Effect<void>) | undefined
927
1035
  }
928
1036
  ): Layer.Layer<
929
1037
  never,
@@ -955,6 +1063,7 @@ export const layerHttp = <Rpcs extends Rpc.Any>(options: {
955
1063
  readonly spanAttributes?: Record<string, unknown> | undefined
956
1064
  readonly concurrency?: number | "unbounded" | undefined
957
1065
  readonly disableFatalDefects?: boolean | undefined
1066
+ readonly onDisconnect?: ((clientId: number) => Effect.Effect<void>) | undefined
958
1067
  readonly streamBufferSize?: number | "unbounded" | undefined
959
1068
  }): Layer.Layer<
960
1069
  never,
@@ -1358,6 +1467,7 @@ export const toHttpEffect: <Rpcs extends Rpc.Any>(
1358
1467
  readonly spanPrefix?: string | undefined
1359
1468
  readonly spanAttributes?: Record<string, unknown> | undefined
1360
1469
  readonly disableFatalDefects?: boolean | undefined
1470
+ readonly onDisconnect?: ((clientId: number) => Effect.Effect<void>) | undefined
1361
1471
  readonly streamBufferSize?: number | "unbounded" | undefined
1362
1472
  } | undefined
1363
1473
  ) => Effect.Effect<
@@ -1375,6 +1485,7 @@ export const toHttpEffect: <Rpcs extends Rpc.Any>(
1375
1485
  readonly spanPrefix?: string | undefined
1376
1486
  readonly spanAttributes?: Record<string, unknown> | undefined
1377
1487
  readonly disableFatalDefects?: boolean | undefined
1488
+ readonly onDisconnect?: ((clientId: number) => Effect.Effect<void>) | undefined
1378
1489
  readonly streamBufferSize?: number | "unbounded" | undefined
1379
1490
  }
1380
1491
  ) {
@@ -1402,6 +1513,7 @@ export const toHttpEffectWebsocket: <Rpcs extends Rpc.Any>(
1402
1513
  readonly spanPrefix?: string | undefined
1403
1514
  readonly spanAttributes?: Record<string, unknown> | undefined
1404
1515
  readonly disableFatalDefects?: boolean | undefined
1516
+ readonly onDisconnect?: ((clientId: number) => Effect.Effect<void>) | undefined
1405
1517
  } | undefined
1406
1518
  ) => Effect.Effect<
1407
1519
  Effect.Effect<HttpServerResponse.HttpServerResponse, never, Scope.Scope | HttpServerRequest.HttpServerRequest>,
@@ -1418,6 +1530,7 @@ export const toHttpEffectWebsocket: <Rpcs extends Rpc.Any>(
1418
1530
  readonly spanPrefix?: string | undefined
1419
1531
  readonly spanAttributes?: Record<string, unknown> | undefined
1420
1532
  readonly disableFatalDefects?: boolean | undefined
1533
+ readonly onDisconnect?: ((clientId: number) => Effect.Effect<void>) | undefined
1421
1534
  }
1422
1535
  ) {
1423
1536
  const { httpEffect, protocol } = yield* makeProtocolWithHttpEffectWebsocket
@@ -29,6 +29,7 @@ export const makeClient: <Rpcs extends Rpc.Any, const Flatten extends boolean =
29
29
  group: RpcGroup.RpcGroup<Rpcs>,
30
30
  options?: {
31
31
  readonly flatten?: Flatten | undefined
32
+ readonly disableFatalDefects?: boolean | undefined
32
33
  }
33
34
  ) => Effect.Effect<
34
35
  Flatten extends true ? RpcClient.RpcClient.Flat<Rpcs> : RpcClient.RpcClient<Rpcs>,
@@ -38,11 +39,13 @@ export const makeClient: <Rpcs extends Rpc.Any, const Flatten extends boolean =
38
39
  group: RpcGroup.RpcGroup<Rpcs>,
39
40
  options?: {
40
41
  readonly flatten?: Flatten | undefined
42
+ readonly disableFatalDefects?: boolean | undefined
41
43
  }
42
44
  ) {
43
45
  // oxlint-disable-next-line prefer-const
44
46
  let client!: Effect.Success<ReturnType<typeof RpcClient.makeNoSerialization<Rpcs, never, Flatten>>>
45
47
  const server = yield* RpcServer.makeNoSerialization(group, {
48
+ disableFatalDefects: options?.disableFatalDefects,
46
49
  onFromServer(response) {
47
50
  return client.write(response)
48
51
  }
@@ -13,6 +13,7 @@
13
13
  * @since 4.0.0
14
14
  */
15
15
  import type { Brand } from "../Brand.ts"
16
+ import * as SecureRandom from "../crypto/SecureRandom.ts"
16
17
  import * as DateTime from "../DateTime.ts"
17
18
  import * as Effect from "../Effect.ts"
18
19
  import * as Uuid from "../internal/uuid.ts"
@@ -808,7 +809,11 @@ export const Uint8Array: Schema.instanceOf<Uint8Array<ArrayBuffer>> = Schema.Uin
808
809
  export const UuidV4BytesWithGenerate = <B extends string>(
809
810
  schema: Schema.brand<Schema.instanceOf<Uint8Array<ArrayBuffer>>, B>
810
811
  ): Schema.withConstructorDefault<Schema.brand<Schema.instanceOf<Uint8Array<ArrayBuffer>>, B>> =>
811
- schema.pipe(Schema.withConstructorDefault(Effect.sync(() => Uuid.v4Bytes())))
812
+ schema.pipe(
813
+ Schema.withConstructorDefault(
814
+ Effect.sync(() => Uuid.v4Bytes(SecureRandom.randomBytesUnsafe(16) as Uint8Array<ArrayBuffer>))
815
+ )
816
+ )
812
817
 
813
818
  /**
814
819
  * A field that represents a binary UUID v4 that is generated on inserts.
@@ -854,7 +859,7 @@ export interface UuidV4Insert<B extends string> extends
854
859
  export const UuidV4WithGenerate = <B extends string>(
855
860
  schema: Schema.brand<Schema.String, B>
856
861
  ): Schema.withConstructorDefault<Schema.brand<Schema.String, B>> =>
857
- schema.pipe(Schema.withConstructorDefault(Effect.sync(Uuid.v4String)))
862
+ schema.pipe(Schema.withConstructorDefault(Effect.sync(() => Uuid.v4String(SecureRandom.randomBytesUnsafe(16)))))
858
863
 
859
864
  /**
860
865
  * A field that represents a string UUID v4 that is generated on inserts.
@@ -893,6 +898,20 @@ export interface UuidV7Insert<B extends string> extends
893
898
  /**
894
899
  * Adds a constructor default that generates a string UUID v7.
895
900
  *
901
+ * **Details**
902
+ *
903
+ * The UUID takes its timestamp from the `Clock`, and shares its ordering with
904
+ * `SecureRandom.uuidV7Unsafe` and every other `Model.UuidV7WithGenerate` in the
905
+ * JS realm, so below the maximum timestamp each UUID sorts after the previous
906
+ * one.
907
+ *
908
+ * **Gotchas**
909
+ *
910
+ * The shared ordering never moves the timestamp back, so a `Clock` behind the
911
+ * realm's latest timestamp, such as a `TestClock` after `Date.now()`-based
912
+ * UUIDs were generated, produces UUIDs with that latest timestamp rather than
913
+ * the `Clock` time.
914
+ *
896
915
  * @stability unstable
897
916
  * @category schemas
898
917
  * @since 4.0.0
@@ -902,7 +921,11 @@ export const UuidV7WithGenerate = <B extends string>(
902
921
  ): Schema.withConstructorDefault<Schema.brand<Schema.String, B>> =>
903
922
  schema.pipe(
904
923
  Schema.withConstructorDefault(
905
- Effect.clockWith((clock) => Effect.succeed(Uuid.v7String(clock.currentTimeMillisUnsafe())))
924
+ Effect.clockWith((clock) =>
925
+ Effect.succeed(
926
+ Uuid.stringify(Uuid.v7Monotonic(clock.currentTimeMillisUnsafe(), SecureRandom.randomBytesUnsafe(16)))
927
+ )
928
+ )
906
929
  )
907
930
  )
908
931
 
@@ -12,11 +12,9 @@
12
12
  import * as Arr from "../Array.ts"
13
13
  import * as Data from "../Data.ts"
14
14
  import * as Effect from "../Effect.ts"
15
- import { FileSystem } from "../FileSystem.ts"
16
15
  import { pipe } from "../Function.ts"
17
16
  import * as Option from "../Option.ts"
18
17
  import * as Order from "../Order.ts"
19
- import { Path } from "../Path.ts"
20
18
  import * as Client from "./SqlClient.ts"
21
19
  import type { SqlError } from "./SqlError.ts"
22
20
 
@@ -98,7 +96,8 @@ export class MigrationError extends Data.TaggedError("MigrationError")<{
98
96
  /**
99
97
  * Creates a migrator that ensures the migrations table exists, runs pending
100
98
  * migrations in a transaction, and optionally dumps the schema after successful
101
- * migrations.
99
+ * migrations. ClickHouse runs without a transaction and records each migration
100
+ * only after it succeeds.
102
101
  *
103
102
  * @stability unstable
104
103
  * @category constructors
@@ -173,11 +172,11 @@ ORDER BY migration_id`,
173
172
  })
174
173
 
175
174
  const insertMigrations = (
176
- rows: ReadonlyArray<[id: number, name: string]>
175
+ rows: Arr.NonEmptyReadonlyArray<[id: number, name: string]>
177
176
  ) =>
178
177
  sql`INSERT INTO ${sql(table)} ${
179
178
  sql.insert(
180
- rows.map(([migration_id, name]) => ({ migration_id, name }))
179
+ Arr.map(rows, ([migration_id, name]) => ({ migration_id, name }))
181
180
  )
182
181
  }`.withoutTransform
183
182
 
@@ -240,6 +239,12 @@ ORDER BY migration_id`,
240
239
 
241
240
  // === run
242
241
 
242
+ // BEGIN is still experimental on clickhouse
243
+ const transactional = sql.onDialectOrElse({
244
+ clickhouse: () => false,
245
+ orElse: () => true
246
+ })
247
+
243
248
  const run = Effect.gen(function*() {
244
249
  yield* sql.onDialectOrElse({
245
250
  pg: () => sql`LOCK TABLE ${sql(table)} IN ACCESS EXCLUSIVE MODE`,
@@ -279,9 +284,10 @@ ORDER BY migration_id`,
279
284
  ])
280
285
  }
281
286
 
282
- if (required.length > 0) {
287
+ // rows recorded up front are only rolled back inside a transaction
288
+ if (transactional && Arr.isArrayNonEmpty(required)) {
283
289
  yield* pipe(
284
- insertMigrations(required.map(([id, name]) => [id, name])),
290
+ insertMigrations(Arr.map(required, ([id, name]) => [id, name])),
285
291
  Effect.mapError((error): MigrationError | SqlError =>
286
292
  isConstraintConflict(error)
287
293
  ? new MigrationError({
@@ -298,6 +304,7 @@ ORDER BY migration_id`,
298
304
  ([id, name, effect]) =>
299
305
  Effect.logDebug(`Running migration`).pipe(
300
306
  Effect.flatMap(() => runMigration(id, name, effect)),
307
+ Effect.andThen(transactional ? Effect.void : insertMigrations([[id, name]])),
301
308
  Effect.annotateLogs("migration_id", String(id)),
302
309
  Effect.annotateLogs("migration_name", name),
303
310
  Effect.withSpan(`Migrator ${id}_${name}`)
@@ -325,11 +332,7 @@ ORDER BY migration_id`,
325
332
  yield* ensureMigrationsTable
326
333
 
327
334
  const completed = yield* pipe(
328
- sql.onDialectOrElse({
329
- // BEGIN is still experimental on clickhouse
330
- clickhouse: () => run,
331
- orElse: () => sql.withTransaction(run)
332
- }),
335
+ transactional ? sql.withTransaction(run) : run,
333
336
  Effect.catchTag("MigrationError", (_) =>
334
337
  _.kind === "Locked"
335
338
  ? Effect.as(Effect.logDebug(_.message), [])
@@ -431,60 +434,3 @@ export const fromRecord = (migrations: Record<string, Effect.Effect<void, unknow
431
434
  Arr.sort(migrationOrder),
432
435
  Effect.succeed
433
436
  )
434
-
435
- /**
436
- * Creates a migration loader that reads a directory with `FileSystem`, imports
437
- * files named `<id>_<name>.js`, `<id>_<name>.ts`,
438
- * `<id>_<name>.mjs`, or `<id>_<name>.mts`, and sorts migrations by id.
439
- *
440
- * **Details**
441
- *
442
- * Requires a `Path` service appropriate for the migration directory's path
443
- * syntax. On Windows, prefer a platform-aware implementation such as
444
- * `NodePath.layer`; the core `Path.layer` uses POSIX semantics and does not
445
- * preserve Windows drive-letter paths.
446
- *
447
- * @stability unstable
448
- * @category loaders
449
- * @since 4.0.0
450
- */
451
- export const fromFileSystem: (directory: string) => Loader<FileSystem | Path> = Effect.fnUntraced(function*(directory) {
452
- const Fs = yield* FileSystem
453
- const path = yield* Path
454
- const files = yield* Effect.mapError(
455
- Fs.readDirectory(directory),
456
- (cause) =>
457
- new MigrationError({
458
- kind: "Failed",
459
- cause,
460
- message: "Failed to read migrations directory"
461
- })
462
- )
463
- return files
464
- .map((file) => Option.fromNullishOr(file.match(/^(?:.*\/)?(\d+)_([^.]+)\.(js|ts|mjs|mts)$/)))
465
- .flatMap(
466
- Option.match({
467
- onNone: () => [],
468
- onSome: ([basename, id, name]): ReadonlyArray<ResolvedMigration> =>
469
- [
470
- [
471
- Number(id),
472
- name,
473
- // `import` needs a file URL: on Windows an absolute path such as
474
- // `D:\migrations\1_init.ts` is rejected by the ESM loader. `orDie` keeps the
475
- // failure a defect so `loadMigration` reports it as an import error.
476
- Effect.flatMap(Effect.orDie(path.toFileUrl(path.join(directory, basename))), (url) =>
477
- Effect.promise(
478
- () =>
479
- import(
480
- /* @vite-ignore */
481
- /* webpackIgnore: true */
482
- url.href
483
- )
484
- ))
485
- ]
486
- ] as const
487
- })
488
- )
489
- .sort(([a], [b]) => a - b);
490
- })