effect 4.0.7 → 4.1.1

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 (863) hide show
  1. package/README.md +31 -1
  2. package/THIRD_PARTY_NOTICES.md +62 -0
  3. package/dist/BigDecimal.d.ts +139 -7
  4. package/dist/BigDecimal.d.ts.map +1 -1
  5. package/dist/BigDecimal.js +86 -14
  6. package/dist/BigDecimal.js.map +1 -1
  7. package/dist/Channel.d.ts +12 -6
  8. package/dist/Channel.d.ts.map +1 -1
  9. package/dist/Channel.js +9 -3
  10. package/dist/Channel.js.map +1 -1
  11. package/dist/Config.d.ts +7 -1
  12. package/dist/Config.d.ts.map +1 -1
  13. package/dist/Config.js.map +1 -1
  14. package/dist/Context.d.ts +18 -1
  15. package/dist/Context.d.ts.map +1 -1
  16. package/dist/Context.js +27 -8
  17. package/dist/Context.js.map +1 -1
  18. package/dist/Cron.d.ts +81 -11
  19. package/dist/Cron.d.ts.map +1 -1
  20. package/dist/Cron.js +101 -26
  21. package/dist/Cron.js.map +1 -1
  22. package/dist/Duration.d.ts +78 -0
  23. package/dist/Duration.d.ts.map +1 -1
  24. package/dist/Duration.js +123 -0
  25. package/dist/Duration.js.map +1 -1
  26. package/dist/Effect.d.ts +164 -7
  27. package/dist/Effect.d.ts.map +1 -1
  28. package/dist/Effect.js +11 -1
  29. package/dist/Effect.js.map +1 -1
  30. package/dist/Equal.d.ts +2 -2
  31. package/dist/Equal.d.ts.map +1 -1
  32. package/dist/Equal.js +3 -3
  33. package/dist/Equal.js.map +1 -1
  34. package/dist/FileSystem.d.ts +59 -4
  35. package/dist/FileSystem.d.ts.map +1 -1
  36. package/dist/FileSystem.js +9 -2
  37. package/dist/FileSystem.js.map +1 -1
  38. package/dist/Glob.d.ts +165 -0
  39. package/dist/Glob.d.ts.map +1 -0
  40. package/dist/Glob.js +127 -0
  41. package/dist/Glob.js.map +1 -0
  42. package/dist/Hash.d.ts +3 -2
  43. package/dist/Hash.d.ts.map +1 -1
  44. package/dist/Hash.js +5 -4
  45. package/dist/Hash.js.map +1 -1
  46. package/dist/Iterable.d.ts.map +1 -1
  47. package/dist/Iterable.js +11 -8
  48. package/dist/Iterable.js.map +1 -1
  49. package/dist/Match.d.ts +86 -0
  50. package/dist/Match.d.ts.map +1 -1
  51. package/dist/Match.js +72 -0
  52. package/dist/Match.js.map +1 -1
  53. package/dist/Path.d.ts.map +1 -1
  54. package/dist/Path.js +5 -1
  55. package/dist/Path.js.map +1 -1
  56. package/dist/Pool.d.ts +51 -0
  57. package/dist/Pool.d.ts.map +1 -1
  58. package/dist/Pool.js +61 -10
  59. package/dist/Pool.js.map +1 -1
  60. package/dist/Random.d.ts.map +1 -1
  61. package/dist/Random.js +3 -3
  62. package/dist/Random.js.map +1 -1
  63. package/dist/RcMap.d.ts.map +1 -1
  64. package/dist/RcMap.js +8 -2
  65. package/dist/RcMap.js.map +1 -1
  66. package/dist/Schedule.d.ts +18 -1
  67. package/dist/Schedule.d.ts.map +1 -1
  68. package/dist/Schedule.js +7 -2
  69. package/dist/Schedule.js.map +1 -1
  70. package/dist/Schema.d.ts +668 -42
  71. package/dist/Schema.d.ts.map +1 -1
  72. package/dist/Schema.js +652 -1
  73. package/dist/Schema.js.map +1 -1
  74. package/dist/SchemaGetter.d.ts +6 -1
  75. package/dist/SchemaGetter.d.ts.map +1 -1
  76. package/dist/SchemaGetter.js +22 -11
  77. package/dist/SchemaGetter.js.map +1 -1
  78. package/dist/SchemaRepresentation.d.ts +18 -2
  79. package/dist/SchemaRepresentation.d.ts.map +1 -1
  80. package/dist/SchemaRepresentation.js +20 -2
  81. package/dist/SchemaRepresentation.js.map +1 -1
  82. package/dist/SchemaTransformation.d.ts +10 -5
  83. package/dist/SchemaTransformation.d.ts.map +1 -1
  84. package/dist/SchemaTransformation.js +8 -5
  85. package/dist/SchemaTransformation.js.map +1 -1
  86. package/dist/ScopedCache.d.ts.map +1 -1
  87. package/dist/ScopedCache.js +5 -7
  88. package/dist/ScopedCache.js.map +1 -1
  89. package/dist/Semaphore.d.ts +130 -0
  90. package/dist/Semaphore.d.ts.map +1 -1
  91. package/dist/Semaphore.js +40 -0
  92. package/dist/Semaphore.js.map +1 -1
  93. package/dist/Stream.d.ts +13 -4
  94. package/dist/Stream.d.ts.map +1 -1
  95. package/dist/Stream.js +9 -0
  96. package/dist/Stream.js.map +1 -1
  97. package/dist/Terminal.d.ts +18 -1
  98. package/dist/Terminal.d.ts.map +1 -1
  99. package/dist/Terminal.js +1 -1
  100. package/dist/Terminal.js.map +1 -1
  101. package/dist/ai/AiError.d.ts +43 -116
  102. package/dist/ai/AiError.d.ts.map +1 -1
  103. package/dist/ai/AiError.js +53 -72
  104. package/dist/ai/AiError.js.map +1 -1
  105. package/dist/ai/Decision.d.ts +196 -15
  106. package/dist/ai/Decision.d.ts.map +1 -1
  107. package/dist/ai/Decision.js +130 -0
  108. package/dist/ai/Decision.js.map +1 -1
  109. package/dist/ai/DecisionModel.d.ts +54 -13
  110. package/dist/ai/DecisionModel.d.ts.map +1 -1
  111. package/dist/ai/DecisionModel.js +123 -12
  112. package/dist/ai/DecisionModel.js.map +1 -1
  113. package/dist/ai/McpClient.d.ts +171 -19
  114. package/dist/ai/McpClient.d.ts.map +1 -1
  115. package/dist/ai/McpClient.js +277 -66
  116. package/dist/ai/McpClient.js.map +1 -1
  117. package/dist/ai/McpSchema.d.ts +108 -0
  118. package/dist/ai/McpSchema.d.ts.map +1 -1
  119. package/dist/ai/McpSchema.js +99 -0
  120. package/dist/ai/McpSchema.js.map +1 -1
  121. package/dist/ai/McpServer.d.ts +744 -29
  122. package/dist/ai/McpServer.d.ts.map +1 -1
  123. package/dist/ai/McpServer.js +763 -136
  124. package/dist/ai/McpServer.js.map +1 -1
  125. package/dist/ai/McpTest.d.ts +130 -0
  126. package/dist/ai/McpTest.d.ts.map +1 -0
  127. package/dist/ai/McpTest.js +237 -0
  128. package/dist/ai/McpTest.js.map +1 -0
  129. package/dist/ai/Prompt.d.ts.map +1 -1
  130. package/dist/ai/Prompt.js +20 -11
  131. package/dist/ai/Prompt.js.map +1 -1
  132. package/dist/ai/Response.d.ts +1 -25
  133. package/dist/ai/Response.d.ts.map +1 -1
  134. package/dist/ai/Response.js +1 -10
  135. package/dist/ai/Response.js.map +1 -1
  136. package/dist/ai/Tool.d.ts +19 -1
  137. package/dist/ai/Tool.d.ts.map +1 -1
  138. package/dist/ai/Tool.js +5 -7
  139. package/dist/ai/Tool.js.map +1 -1
  140. package/dist/ai/index.d.ts +5 -0
  141. package/dist/ai/index.d.ts.map +1 -1
  142. package/dist/ai/index.js +5 -0
  143. package/dist/ai/index.js.map +1 -1
  144. package/dist/ai/internal/mcpCore.js +89 -15
  145. package/dist/ai/internal/mcpCore.js.map +1 -1
  146. package/dist/ai/internal/mcpProtocol/v2024_11_05.js +7 -6
  147. package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
  148. package/dist/ai/internal/mcpProtocol/v2025_03_26.js +7 -6
  149. package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
  150. package/dist/ai/internal/mcpProtocol/v2025_06_18.js +7 -6
  151. package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
  152. package/dist/ai/internal/mcpProtocol/v2025_11_25.js +7 -6
  153. package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
  154. package/dist/ai/internal/mcpProtocol/v2026_07_28.js +60 -17
  155. package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
  156. package/dist/ai/internal/mcpProtocol.js +25 -0
  157. package/dist/ai/internal/mcpProtocol.js.map +1 -1
  158. package/dist/ai/internal/mcpRuntime.js +8 -6
  159. package/dist/ai/internal/mcpRuntime.js.map +1 -1
  160. package/dist/ai/internal/mcpSkills.d.ts +2 -0
  161. package/dist/ai/internal/mcpSkills.d.ts.map +1 -0
  162. package/dist/ai/internal/mcpSkills.js +428 -0
  163. package/dist/ai/internal/mcpSkills.js.map +1 -0
  164. package/dist/ai/internal/mcpStatefulRuntime.js +6 -1
  165. package/dist/ai/internal/mcpStatefulRuntime.js.map +1 -1
  166. package/dist/cli/Argument.d.ts +6 -0
  167. package/dist/cli/Argument.d.ts.map +1 -1
  168. package/dist/cli/Argument.js +2 -0
  169. package/dist/cli/Argument.js.map +1 -1
  170. package/dist/cli/CliOutput.d.ts +65 -1
  171. package/dist/cli/CliOutput.d.ts.map +1 -1
  172. package/dist/cli/CliOutput.js +94 -37
  173. package/dist/cli/CliOutput.js.map +1 -1
  174. package/dist/cli/Command.d.ts +23 -0
  175. package/dist/cli/Command.d.ts.map +1 -1
  176. package/dist/cli/Command.js +8 -0
  177. package/dist/cli/Command.js.map +1 -1
  178. package/dist/cli/Flag.d.ts +107 -0
  179. package/dist/cli/Flag.d.ts.map +1 -1
  180. package/dist/cli/Flag.js +37 -0
  181. package/dist/cli/Flag.js.map +1 -1
  182. package/dist/cli/HelpDoc.d.ts +15 -1
  183. package/dist/cli/HelpDoc.d.ts.map +1 -1
  184. package/dist/cli/Param.d.ts +6 -0
  185. package/dist/cli/Param.d.ts.map +1 -1
  186. package/dist/cli/Param.js +2 -0
  187. package/dist/cli/Param.js.map +1 -1
  188. package/dist/cli/Primitive.d.ts +14 -0
  189. package/dist/cli/Primitive.d.ts.map +1 -1
  190. package/dist/cli/Primitive.js +15 -1
  191. package/dist/cli/Primitive.js.map +1 -1
  192. package/dist/cli/Prompt.d.ts +1 -0
  193. package/dist/cli/Prompt.d.ts.map +1 -1
  194. package/dist/cli/Prompt.js +1 -0
  195. package/dist/cli/Prompt.js.map +1 -1
  196. package/dist/cli/internal/help.d.ts.map +1 -1
  197. package/dist/cli/internal/help.js +17 -10
  198. package/dist/cli/internal/help.js.map +1 -1
  199. package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  200. package/dist/cluster/ClusterWorkflowEngine.js +15 -5
  201. package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
  202. package/dist/cluster/Reply.d.ts +1 -1
  203. package/dist/cluster/Reply.d.ts.map +1 -1
  204. package/dist/cluster/Reply.js.map +1 -1
  205. package/dist/cluster/Sharding.d.ts.map +1 -1
  206. package/dist/cluster/Sharding.js +93 -28
  207. package/dist/cluster/Sharding.js.map +1 -1
  208. package/dist/cluster/ShardingConfig.d.ts +72 -6
  209. package/dist/cluster/ShardingConfig.d.ts.map +1 -1
  210. package/dist/cluster/ShardingConfig.js +4 -0
  211. package/dist/cluster/ShardingConfig.js.map +1 -1
  212. package/dist/cluster/SingleRunner.d.ts +3 -3
  213. package/dist/cluster/SingleRunner.d.ts.map +1 -1
  214. package/dist/cluster/SingleRunner.js +1 -1
  215. package/dist/cluster/SqlMessageStorage.d.ts +37 -6
  216. package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
  217. package/dist/cluster/SqlMessageStorage.js +34 -7
  218. package/dist/cluster/SqlMessageStorage.js.map +1 -1
  219. package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
  220. package/dist/cluster/SqlRunnerStorage.js +23 -8
  221. package/dist/cluster/SqlRunnerStorage.js.map +1 -1
  222. package/dist/cluster/internal/entityManager.js +15 -7
  223. package/dist/cluster/internal/entityManager.js.map +1 -1
  224. package/dist/crypto/Aead.d.ts +323 -0
  225. package/dist/crypto/Aead.d.ts.map +1 -0
  226. package/dist/crypto/Aead.js +331 -0
  227. package/dist/crypto/Aead.js.map +1 -0
  228. package/dist/crypto/Cipher.d.ts +236 -0
  229. package/dist/crypto/Cipher.d.ts.map +1 -0
  230. package/dist/crypto/Cipher.js +233 -0
  231. package/dist/crypto/Cipher.js.map +1 -0
  232. package/dist/crypto/CryptoError.d.ts +212 -0
  233. package/dist/crypto/CryptoError.d.ts.map +1 -0
  234. package/dist/crypto/CryptoError.js +202 -0
  235. package/dist/crypto/CryptoError.js.map +1 -0
  236. package/dist/crypto/Digest.d.ts +143 -0
  237. package/dist/crypto/Digest.d.ts.map +1 -0
  238. package/dist/crypto/Digest.js +146 -0
  239. package/dist/crypto/Digest.js.map +1 -0
  240. package/dist/crypto/Kdf.d.ts +220 -0
  241. package/dist/crypto/Kdf.d.ts.map +1 -0
  242. package/dist/crypto/Kdf.js +212 -0
  243. package/dist/crypto/Kdf.js.map +1 -0
  244. package/dist/crypto/KeyAgreement.d.ts +324 -0
  245. package/dist/crypto/KeyAgreement.d.ts.map +1 -0
  246. package/dist/crypto/KeyAgreement.js +303 -0
  247. package/dist/crypto/KeyAgreement.js.map +1 -0
  248. package/dist/crypto/KeyFormat.d.ts +341 -0
  249. package/dist/crypto/KeyFormat.d.ts.map +1 -0
  250. package/dist/crypto/KeyFormat.js +556 -0
  251. package/dist/crypto/KeyFormat.js.map +1 -0
  252. package/dist/crypto/KeyWrap.d.ts +390 -0
  253. package/dist/crypto/KeyWrap.d.ts.map +1 -0
  254. package/dist/crypto/KeyWrap.js +381 -0
  255. package/dist/crypto/KeyWrap.js.map +1 -0
  256. package/dist/crypto/Mac.d.ts +278 -0
  257. package/dist/crypto/Mac.d.ts.map +1 -0
  258. package/dist/crypto/Mac.js +288 -0
  259. package/dist/crypto/Mac.js.map +1 -0
  260. package/dist/crypto/SecureRandom.d.ts +340 -0
  261. package/dist/crypto/SecureRandom.d.ts.map +1 -0
  262. package/dist/crypto/SecureRandom.js +257 -0
  263. package/dist/crypto/SecureRandom.js.map +1 -0
  264. package/dist/crypto/Signature.d.ts +449 -0
  265. package/dist/crypto/Signature.d.ts.map +1 -0
  266. package/dist/crypto/Signature.js +484 -0
  267. package/dist/crypto/Signature.js.map +1 -0
  268. package/dist/crypto/WebCrypto.d.ts +80 -0
  269. package/dist/crypto/WebCrypto.d.ts.map +1 -0
  270. package/dist/crypto/WebCrypto.js +63 -0
  271. package/dist/crypto/WebCrypto.js.map +1 -0
  272. package/dist/crypto/index.d.ts +65 -0
  273. package/dist/crypto/index.d.ts.map +1 -0
  274. package/dist/crypto/index.js +66 -0
  275. package/dist/crypto/index.js.map +1 -0
  276. package/dist/crypto/internal/asymmetric.d.ts +2 -0
  277. package/dist/crypto/internal/asymmetric.d.ts.map +1 -0
  278. package/dist/crypto/internal/asymmetric.js +210 -0
  279. package/dist/crypto/internal/asymmetric.js.map +1 -0
  280. package/dist/crypto/internal/chacha.d.ts +46 -0
  281. package/dist/crypto/internal/chacha.d.ts.map +1 -0
  282. package/dist/crypto/internal/chacha.js +885 -0
  283. package/dist/crypto/internal/chacha.js.map +1 -0
  284. package/dist/crypto/internal/der.d.ts +6 -0
  285. package/dist/crypto/internal/der.d.ts.map +1 -0
  286. package/dist/crypto/internal/der.js +86 -0
  287. package/dist/crypto/internal/der.js.map +1 -0
  288. package/dist/crypto/internal/digest.d.ts +2 -0
  289. package/dist/crypto/internal/digest.d.ts.map +1 -0
  290. package/dist/crypto/internal/digest.js +15 -0
  291. package/dist/crypto/internal/digest.js.map +1 -0
  292. package/dist/crypto/internal/key.d.ts +2 -0
  293. package/dist/crypto/internal/key.d.ts.map +1 -0
  294. package/dist/crypto/internal/key.js +171 -0
  295. package/dist/crypto/internal/key.js.map +1 -0
  296. package/dist/crypto/internal/md5.d.ts +39 -0
  297. package/dist/crypto/internal/md5.d.ts.map +1 -0
  298. package/dist/crypto/internal/md5.js +179 -0
  299. package/dist/crypto/internal/md5.js.map +1 -0
  300. package/dist/crypto/internal/webCrypto.d.ts +2 -0
  301. package/dist/crypto/internal/webCrypto.d.ts.map +1 -0
  302. package/dist/crypto/internal/webCrypto.js +111 -0
  303. package/dist/crypto/internal/webCrypto.js.map +1 -0
  304. package/dist/encoding/Base64Url.d.ts.map +1 -1
  305. package/dist/encoding/Base64Url.js +29 -5
  306. package/dist/encoding/Base64Url.js.map +1 -1
  307. package/dist/encoding/Csv.d.ts +608 -0
  308. package/dist/encoding/Csv.d.ts.map +1 -0
  309. package/dist/encoding/Csv.js +718 -0
  310. package/dist/encoding/Csv.js.map +1 -0
  311. package/dist/encoding/Hex.d.ts +3 -2
  312. package/dist/encoding/Hex.d.ts.map +1 -1
  313. package/dist/encoding/Hex.js +3 -2
  314. package/dist/encoding/Hex.js.map +1 -1
  315. package/dist/encoding/Ndjson.d.ts +5 -4
  316. package/dist/encoding/Ndjson.d.ts.map +1 -1
  317. package/dist/encoding/Ndjson.js +6 -5
  318. package/dist/encoding/Ndjson.js.map +1 -1
  319. package/dist/encoding/SchemaBinary.d.ts.map +1 -1
  320. package/dist/encoding/SchemaBinary.js +42 -4
  321. package/dist/encoding/SchemaBinary.js.map +1 -1
  322. package/dist/encoding/Sse.d.ts +3 -1
  323. package/dist/encoding/Sse.d.ts.map +1 -1
  324. package/dist/encoding/Sse.js +5 -3
  325. package/dist/encoding/Sse.js.map +1 -1
  326. package/dist/encoding/Toml.d.ts +17 -3
  327. package/dist/encoding/Toml.d.ts.map +1 -1
  328. package/dist/encoding/Toml.js +104 -16
  329. package/dist/encoding/Toml.js.map +1 -1
  330. package/dist/encoding/Yaml.d.ts +8 -1
  331. package/dist/encoding/Yaml.d.ts.map +1 -1
  332. package/dist/encoding/Yaml.js +54 -18
  333. package/dist/encoding/Yaml.js.map +1 -1
  334. package/dist/encoding/index.d.ts +5 -0
  335. package/dist/encoding/index.d.ts.map +1 -1
  336. package/dist/encoding/index.js +5 -0
  337. package/dist/encoding/index.js.map +1 -1
  338. package/dist/eventlog/EventJournal.d.ts.map +1 -1
  339. package/dist/eventlog/EventJournal.js +6 -3
  340. package/dist/eventlog/EventJournal.js.map +1 -1
  341. package/dist/eventlog/EventLog.d.ts +126 -4
  342. package/dist/eventlog/EventLog.d.ts.map +1 -1
  343. package/dist/eventlog/EventLog.js +207 -12
  344. package/dist/eventlog/EventLog.js.map +1 -1
  345. package/dist/eventlog/EventLogEncryption.d.ts +41 -4
  346. package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
  347. package/dist/eventlog/EventLogEncryption.js +83 -64
  348. package/dist/eventlog/EventLogEncryption.js.map +1 -1
  349. package/dist/eventlog/EventLogMessage.d.ts +279 -0
  350. package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
  351. package/dist/eventlog/EventLogMessage.js +217 -1
  352. package/dist/eventlog/EventLogMessage.js.map +1 -1
  353. package/dist/eventlog/EventLogRemote.d.ts +200 -28
  354. package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
  355. package/dist/eventlog/EventLogRemote.js +186 -16
  356. package/dist/eventlog/EventLogRemote.js.map +1 -1
  357. package/dist/eventlog/EventLogServer.d.ts +10 -1
  358. package/dist/eventlog/EventLogServer.d.ts.map +1 -1
  359. package/dist/eventlog/EventLogServer.js +45 -22
  360. package/dist/eventlog/EventLogServer.js.map +1 -1
  361. package/dist/eventlog/EventLogServerEncrypted.d.ts +336 -5
  362. package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
  363. package/dist/eventlog/EventLogServerEncrypted.js +769 -14
  364. package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
  365. package/dist/eventlog/EventLogServerUnencrypted.d.ts +17 -0
  366. package/dist/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
  367. package/dist/eventlog/EventLogServerUnencrypted.js +14 -2
  368. package/dist/eventlog/EventLogServerUnencrypted.js.map +1 -1
  369. package/dist/eventlog/EventLogSessionAuth.d.ts +26 -3
  370. package/dist/eventlog/EventLogSessionAuth.d.ts.map +1 -1
  371. package/dist/eventlog/EventLogSessionAuth.js +63 -64
  372. package/dist/eventlog/EventLogSessionAuth.js.map +1 -1
  373. package/dist/eventlog/EventRow.d.ts +4 -0
  374. package/dist/eventlog/EventRow.d.ts.map +1 -1
  375. package/dist/eventlog/EventRow.js +12 -2
  376. package/dist/eventlog/EventRow.js.map +1 -1
  377. package/dist/eventlog/SqlEventJournal.js +2 -2
  378. package/dist/eventlog/SqlEventJournal.js.map +1 -1
  379. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +21 -5
  380. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
  381. package/dist/eventlog/SqlEventLogServerEncrypted.js +1048 -113
  382. package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
  383. package/dist/eventlog/SqlEventLogServerUnencrypted.js +2 -2
  384. package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
  385. package/dist/eventlog/internal/batches.d.ts +12 -0
  386. package/dist/eventlog/internal/batches.d.ts.map +1 -0
  387. package/dist/eventlog/internal/batches.js +26 -0
  388. package/dist/eventlog/internal/batches.js.map +1 -0
  389. package/dist/eventlog/internal/compaction.d.ts +38 -0
  390. package/dist/eventlog/internal/compaction.d.ts.map +1 -0
  391. package/dist/eventlog/internal/compaction.js +33 -0
  392. package/dist/eventlog/internal/compaction.js.map +1 -0
  393. package/dist/eventlog/internal/identityRootSecretDerivation.js +66 -67
  394. package/dist/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
  395. package/dist/eventlog/internal/remoteCompaction.d.ts +31 -0
  396. package/dist/eventlog/internal/remoteCompaction.d.ts.map +1 -0
  397. package/dist/eventlog/internal/remoteCompaction.js +76 -0
  398. package/dist/eventlog/internal/remoteCompaction.js.map +1 -0
  399. package/dist/graphql/GraphQLClient.d.ts +3 -1
  400. package/dist/graphql/GraphQLClient.d.ts.map +1 -1
  401. package/dist/graphql/GraphQLClient.js.map +1 -1
  402. package/dist/graphql/GraphQLClientError.d.ts +14 -9
  403. package/dist/graphql/GraphQLClientError.d.ts.map +1 -1
  404. package/dist/graphql/GraphQLClientError.js +14 -21
  405. package/dist/graphql/GraphQLClientError.js.map +1 -1
  406. package/dist/graphql/GraphQLProtocol.d.ts +12 -3
  407. package/dist/graphql/GraphQLProtocol.d.ts.map +1 -1
  408. package/dist/graphql/GraphQLProtocol.js +4 -1
  409. package/dist/graphql/GraphQLProtocol.js.map +1 -1
  410. package/dist/http/Cookies.d.ts +172 -0
  411. package/dist/http/Cookies.d.ts.map +1 -1
  412. package/dist/http/Cookies.js +143 -1
  413. package/dist/http/Cookies.js.map +1 -1
  414. package/dist/http/FetchHttpClient.d.ts +26 -2
  415. package/dist/http/FetchHttpClient.d.ts.map +1 -1
  416. package/dist/http/FetchHttpClient.js +78 -15
  417. package/dist/http/FetchHttpClient.js.map +1 -1
  418. package/dist/http/HttpClient.d.ts +268 -15
  419. package/dist/http/HttpClient.d.ts.map +1 -1
  420. package/dist/http/HttpClient.js +140 -7
  421. package/dist/http/HttpClient.js.map +1 -1
  422. package/dist/http/HttpClientRequest.d.ts +9 -5
  423. package/dist/http/HttpClientRequest.d.ts.map +1 -1
  424. package/dist/http/HttpClientRequest.js +2 -3
  425. package/dist/http/HttpClientRequest.js.map +1 -1
  426. package/dist/http/HttpClientResponse.d.ts.map +1 -1
  427. package/dist/http/HttpClientResponse.js +3 -2
  428. package/dist/http/HttpClientResponse.js.map +1 -1
  429. package/dist/http/HttpMethod.d.ts +7 -1
  430. package/dist/http/HttpMethod.d.ts.map +1 -1
  431. package/dist/http/HttpMethod.js +3 -8
  432. package/dist/http/HttpMethod.js.map +1 -1
  433. package/dist/http/HttpServerRequest.d.ts +5 -2
  434. package/dist/http/HttpServerRequest.d.ts.map +1 -1
  435. package/dist/http/HttpServerRequest.js +44 -39
  436. package/dist/http/HttpServerRequest.js.map +1 -1
  437. package/dist/http/HttpServerResponse.d.ts.map +1 -1
  438. package/dist/http/HttpServerResponse.js +3 -2
  439. package/dist/http/HttpServerResponse.js.map +1 -1
  440. package/dist/http/HttpTraceContext.d.ts +2 -1
  441. package/dist/http/HttpTraceContext.d.ts.map +1 -1
  442. package/dist/http/HttpTraceContext.js +7 -5
  443. package/dist/http/HttpTraceContext.js.map +1 -1
  444. package/dist/http/ProblemDetails.d.ts +96 -0
  445. package/dist/http/ProblemDetails.d.ts.map +1 -0
  446. package/dist/http/ProblemDetails.js +98 -0
  447. package/dist/http/ProblemDetails.js.map +1 -0
  448. package/dist/http/index.d.ts +5 -0
  449. package/dist/http/index.d.ts.map +1 -1
  450. package/dist/http/index.js +5 -0
  451. package/dist/http/index.js.map +1 -1
  452. package/dist/http/internal/decompression.js +3 -2
  453. package/dist/http/internal/decompression.js.map +1 -1
  454. package/dist/http/internal/mimeTypes.d.ts +4 -1
  455. package/dist/http/internal/mimeTypes.d.ts.map +1 -1
  456. package/dist/http/internal/mimeTypes.js +4 -1
  457. package/dist/http/internal/mimeTypes.js.map +1 -1
  458. package/dist/http/internal/urlParams.js +8 -0
  459. package/dist/http/internal/urlParams.js.map +1 -1
  460. package/dist/http-api/HttpApiBuilder.js +19 -5
  461. package/dist/http-api/HttpApiBuilder.js.map +1 -1
  462. package/dist/http-api/HttpApiClient.d.ts +63 -0
  463. package/dist/http-api/HttpApiClient.d.ts.map +1 -1
  464. package/dist/http-api/HttpApiClient.js +51 -0
  465. package/dist/http-api/HttpApiClient.js.map +1 -1
  466. package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
  467. package/dist/http-api/HttpApiEndpoint.js +14 -5
  468. package/dist/http-api/HttpApiEndpoint.js.map +1 -1
  469. package/dist/http-api/HttpApiError.d.ts +185 -13
  470. package/dist/http-api/HttpApiError.d.ts.map +1 -1
  471. package/dist/http-api/HttpApiError.js +128 -0
  472. package/dist/http-api/HttpApiError.js.map +1 -1
  473. package/dist/http-api/HttpApiMiddleware.d.ts +64 -17
  474. package/dist/http-api/HttpApiMiddleware.d.ts.map +1 -1
  475. package/dist/http-api/HttpApiMiddleware.js +85 -1
  476. package/dist/http-api/HttpApiMiddleware.js.map +1 -1
  477. package/dist/http-api/HttpApiSchema.d.ts +76 -14
  478. package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
  479. package/dist/http-api/HttpApiSchema.js +54 -1
  480. package/dist/http-api/HttpApiSchema.js.map +1 -1
  481. package/dist/index.d.ts +5 -5
  482. package/dist/index.d.ts.map +1 -1
  483. package/dist/index.js +5 -5
  484. package/dist/index.js.map +1 -1
  485. package/dist/internal/dateTime.js +49 -24
  486. package/dist/internal/dateTime.js.map +1 -1
  487. package/dist/internal/effect.js +35 -14
  488. package/dist/internal/effect.js.map +1 -1
  489. package/dist/internal/glob.d.ts +2 -0
  490. package/dist/internal/glob.d.ts.map +1 -0
  491. package/dist/internal/glob.js +808 -0
  492. package/dist/internal/glob.js.map +1 -0
  493. package/dist/internal/graphql.js +21 -7
  494. package/dist/internal/graphql.js.map +1 -1
  495. package/dist/internal/graphqlHeaders.d.ts +7 -0
  496. package/dist/internal/graphqlHeaders.d.ts.map +1 -1
  497. package/dist/internal/graphqlHeaders.js +11 -0
  498. package/dist/internal/graphqlHeaders.js.map +1 -1
  499. package/dist/internal/matcher.js +10 -0
  500. package/dist/internal/matcher.js.map +1 -1
  501. package/dist/internal/persistence.js +9 -0
  502. package/dist/internal/persistence.js.map +1 -1
  503. package/dist/internal/rcRef.js +4 -1
  504. package/dist/internal/rcRef.js.map +1 -1
  505. package/dist/internal/request.js +29 -42
  506. package/dist/internal/request.js.map +1 -1
  507. package/dist/internal/schema/fromJsonSchemaDocument.js +7 -8
  508. package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
  509. package/dist/internal/schema/toCodeDocument.js +6 -3
  510. package/dist/internal/schema/toCodeDocument.js.map +1 -1
  511. package/dist/internal/trie.js +42 -13
  512. package/dist/internal/trie.js.map +1 -1
  513. package/dist/internal/ulid.js +41 -0
  514. package/dist/internal/ulid.js.map +1 -1
  515. package/dist/internal/uuid.js +52 -8
  516. package/dist/internal/uuid.js.map +1 -1
  517. package/dist/internal/version.js +1 -1
  518. package/dist/jose/JoseError.d.ts +285 -0
  519. package/dist/jose/JoseError.d.ts.map +1 -0
  520. package/dist/jose/JoseError.js +269 -0
  521. package/dist/jose/JoseError.js.map +1 -0
  522. package/dist/jose/Jwe.d.ts +128 -0
  523. package/dist/jose/Jwe.d.ts.map +1 -0
  524. package/dist/jose/Jwe.js +134 -0
  525. package/dist/jose/Jwe.js.map +1 -0
  526. package/dist/jose/Jwk.d.ts +597 -0
  527. package/dist/jose/Jwk.d.ts.map +1 -0
  528. package/dist/jose/Jwk.js +503 -0
  529. package/dist/jose/Jwk.js.map +1 -0
  530. package/dist/jose/Jwks.d.ts +236 -0
  531. package/dist/jose/Jwks.d.ts.map +1 -0
  532. package/dist/jose/Jwks.js +306 -0
  533. package/dist/jose/Jwks.js.map +1 -0
  534. package/dist/jose/Jws.d.ts +177 -0
  535. package/dist/jose/Jws.d.ts.map +1 -0
  536. package/dist/jose/Jws.js +183 -0
  537. package/dist/jose/Jws.js.map +1 -0
  538. package/dist/jose/Jwt.d.ts +270 -0
  539. package/dist/jose/Jwt.d.ts.map +1 -0
  540. package/dist/jose/Jwt.js +293 -0
  541. package/dist/jose/Jwt.js.map +1 -0
  542. package/dist/jose/index.d.ts +51 -0
  543. package/dist/jose/index.d.ts.map +1 -0
  544. package/dist/jose/index.js +52 -0
  545. package/dist/jose/index.js.map +1 -0
  546. package/dist/jose/internal/compact.d.ts +2 -0
  547. package/dist/jose/internal/compact.d.ts.map +1 -0
  548. package/dist/jose/internal/compact.js +179 -0
  549. package/dist/jose/internal/compact.js.map +1 -0
  550. package/dist/net/Host.d.ts.map +1 -1
  551. package/dist/net/Host.js +5 -10
  552. package/dist/net/Host.js.map +1 -1
  553. package/dist/observability/Otlp.d.ts +15 -4
  554. package/dist/observability/Otlp.d.ts.map +1 -1
  555. package/dist/observability/Otlp.js +10 -0
  556. package/dist/observability/Otlp.js.map +1 -1
  557. package/dist/observability/OtlpResource.d.ts +7 -0
  558. package/dist/observability/OtlpResource.d.ts.map +1 -1
  559. package/dist/observability/OtlpResource.js +11 -1
  560. package/dist/observability/OtlpResource.js.map +1 -1
  561. package/dist/observability/OtlpSerialization.d.ts +1 -1
  562. package/dist/observability/OtlpSerialization.d.ts.map +1 -1
  563. package/dist/observability/OtlpSerialization.js +10 -4
  564. package/dist/observability/OtlpSerialization.js.map +1 -1
  565. package/dist/observability/internal/otlpProtobuf.js +3 -3
  566. package/dist/observability/internal/otlpProtobuf.js.map +1 -1
  567. package/dist/observability/internal/protobuf.js +6 -0
  568. package/dist/observability/internal/protobuf.js.map +1 -1
  569. package/dist/persistence/CircuitBreaker.d.ts +98 -38
  570. package/dist/persistence/CircuitBreaker.d.ts.map +1 -1
  571. package/dist/persistence/CircuitBreaker.js +67 -29
  572. package/dist/persistence/CircuitBreaker.js.map +1 -1
  573. package/dist/persistence/KeyValueStore.d.ts +47 -2
  574. package/dist/persistence/KeyValueStore.d.ts.map +1 -1
  575. package/dist/persistence/KeyValueStore.js +129 -18
  576. package/dist/persistence/KeyValueStore.js.map +1 -1
  577. package/dist/persistence/PersistedQueue.d.ts +9 -0
  578. package/dist/persistence/PersistedQueue.d.ts.map +1 -1
  579. package/dist/persistence/PersistedQueue.js +94 -52
  580. package/dist/persistence/PersistedQueue.js.map +1 -1
  581. package/dist/persistence/Persistence.d.ts +10 -4
  582. package/dist/persistence/Persistence.d.ts.map +1 -1
  583. package/dist/persistence/Persistence.js +18 -11
  584. package/dist/persistence/Persistence.js.map +1 -1
  585. package/dist/persistence/RateLimiter.d.ts +8 -0
  586. package/dist/persistence/RateLimiter.d.ts.map +1 -1
  587. package/dist/persistence/RateLimiter.js +63 -12
  588. package/dist/persistence/RateLimiter.js.map +1 -1
  589. package/dist/persistence/index.d.ts +1 -1
  590. package/dist/persistence/index.js +1 -1
  591. package/dist/process/ChildProcess.d.ts +207 -67
  592. package/dist/process/ChildProcess.d.ts.map +1 -1
  593. package/dist/process/ChildProcess.js +56 -158
  594. package/dist/process/ChildProcess.js.map +1 -1
  595. package/dist/process/ChildProcessSpawner.d.ts +5 -0
  596. package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
  597. package/dist/process/ChildProcessSpawner.js.map +1 -1
  598. package/dist/process/CommandLine.d.ts +294 -0
  599. package/dist/process/CommandLine.d.ts.map +1 -0
  600. package/dist/process/CommandLine.js +481 -0
  601. package/dist/process/CommandLine.js.map +1 -0
  602. package/dist/process/index.d.ts +5 -0
  603. package/dist/process/index.d.ts.map +1 -1
  604. package/dist/process/index.js +5 -0
  605. package/dist/process/index.js.map +1 -1
  606. package/dist/reactivity/Atom.d.ts +2 -1
  607. package/dist/reactivity/Atom.d.ts.map +1 -1
  608. package/dist/reactivity/Atom.js +3 -4
  609. package/dist/reactivity/Atom.js.map +1 -1
  610. package/dist/reactivity/AtomRegistry.js +17 -7
  611. package/dist/reactivity/AtomRegistry.js.map +1 -1
  612. package/dist/rpc/Rpc.d.ts +1 -1
  613. package/dist/rpc/Rpc.d.ts.map +1 -1
  614. package/dist/rpc/Rpc.js.map +1 -1
  615. package/dist/rpc/RpcClient.d.ts +28 -1
  616. package/dist/rpc/RpcClient.d.ts.map +1 -1
  617. package/dist/rpc/RpcClient.js +78 -27
  618. package/dist/rpc/RpcClient.js.map +1 -1
  619. package/dist/rpc/RpcMessage.d.ts +13 -3
  620. package/dist/rpc/RpcMessage.d.ts.map +1 -1
  621. package/dist/rpc/RpcMessage.js +1 -0
  622. package/dist/rpc/RpcMessage.js.map +1 -1
  623. package/dist/rpc/RpcSerialization.d.ts.map +1 -1
  624. package/dist/rpc/RpcSerialization.js +6 -0
  625. package/dist/rpc/RpcSerialization.js.map +1 -1
  626. package/dist/rpc/RpcServer.d.ts +31 -0
  627. package/dist/rpc/RpcServer.d.ts.map +1 -1
  628. package/dist/rpc/RpcServer.js +139 -66
  629. package/dist/rpc/RpcServer.js.map +1 -1
  630. package/dist/schema/Model.d.ts +14 -0
  631. package/dist/schema/Model.d.ts.map +1 -1
  632. package/dist/schema/Model.js +18 -3
  633. package/dist/schema/Model.js.map +1 -1
  634. package/dist/sql/Migrator.d.ts +9 -20
  635. package/dist/sql/Migrator.d.ts.map +1 -1
  636. package/dist/sql/Migrator.js +20 -53
  637. package/dist/sql/Migrator.js.map +1 -1
  638. package/dist/sql/MigratorFileSystem.d.ts +21 -0
  639. package/dist/sql/MigratorFileSystem.d.ts.map +1 -0
  640. package/dist/sql/MigratorFileSystem.js +57 -0
  641. package/dist/sql/MigratorFileSystem.js.map +1 -0
  642. package/dist/sql/SqlClient.d.ts +38 -3
  643. package/dist/sql/SqlClient.d.ts.map +1 -1
  644. package/dist/sql/SqlClient.js +9 -12
  645. package/dist/sql/SqlClient.js.map +1 -1
  646. package/dist/sql/Statement.d.ts +61 -9
  647. package/dist/sql/Statement.d.ts.map +1 -1
  648. package/dist/sql/Statement.js +24 -33
  649. package/dist/sql/Statement.js.map +1 -1
  650. package/dist/sql/index.js +1 -1
  651. package/dist/testing/index.d.ts +0 -5
  652. package/dist/testing/index.d.ts.map +1 -1
  653. package/dist/testing/index.js +0 -5
  654. package/dist/testing/index.js.map +1 -1
  655. package/dist/workflow/Workflow.d.ts +4 -0
  656. package/dist/workflow/Workflow.d.ts.map +1 -1
  657. package/dist/workflow/Workflow.js.map +1 -1
  658. package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
  659. package/dist/workflow/WorkflowEngine.js +5 -0
  660. package/dist/workflow/WorkflowEngine.js.map +1 -1
  661. package/dist/workflow/internal/crypto.js +9 -8
  662. package/dist/workflow/internal/crypto.js.map +1 -1
  663. package/package.json +7 -1
  664. package/src/BigDecimal.ts +173 -16
  665. package/src/Channel.ts +17 -11
  666. package/src/Config.ts +7 -1
  667. package/src/Context.ts +34 -10
  668. package/src/Cron.ts +178 -29
  669. package/src/Duration.ts +140 -0
  670. package/src/Effect.ts +914 -85
  671. package/src/Equal.ts +3 -3
  672. package/src/FileSystem.ts +65 -4
  673. package/src/Glob.ts +205 -0
  674. package/src/Hash.ts +5 -4
  675. package/src/Iterable.ts +8 -5
  676. package/src/Match.ts +127 -0
  677. package/src/Path.ts +6 -1
  678. package/src/Pool.ts +75 -16
  679. package/src/Random.ts +3 -3
  680. package/src/RcMap.ts +5 -1
  681. package/src/Schedule.ts +26 -3
  682. package/src/Schema.ts +1191 -63
  683. package/src/SchemaGetter.ts +27 -11
  684. package/src/SchemaRepresentation.ts +23 -2
  685. package/src/SchemaTransformation.ts +10 -5
  686. package/src/ScopedCache.ts +5 -9
  687. package/src/Semaphore.ts +141 -0
  688. package/src/Stream.ts +15 -6
  689. package/src/Terminal.ts +19 -1
  690. package/src/ai/AiError.ts +56 -80
  691. package/src/ai/Decision.ts +257 -6
  692. package/src/ai/DecisionModel.ts +171 -28
  693. package/src/ai/McpClient.ts +488 -91
  694. package/src/ai/McpSchema.ts +119 -0
  695. package/src/ai/McpServer.ts +1525 -319
  696. package/src/ai/McpTest.ts +380 -0
  697. package/src/ai/Prompt.ts +16 -11
  698. package/src/ai/Response.ts +2 -22
  699. package/src/ai/Tool.ts +32 -18
  700. package/src/ai/index.ts +6 -0
  701. package/src/ai/internal/mcpCore.ts +243 -56
  702. package/src/ai/internal/mcpProtocol/v2024_11_05.ts +7 -8
  703. package/src/ai/internal/mcpProtocol/v2025_03_26.ts +7 -8
  704. package/src/ai/internal/mcpProtocol/v2025_06_18.ts +7 -8
  705. package/src/ai/internal/mcpProtocol/v2025_11_25.ts +7 -8
  706. package/src/ai/internal/mcpProtocol/v2026_07_28.ts +56 -17
  707. package/src/ai/internal/mcpProtocol.ts +44 -0
  708. package/src/ai/internal/mcpRuntime.ts +15 -8
  709. package/src/ai/internal/mcpSkills.ts +480 -0
  710. package/src/ai/internal/mcpStatefulRuntime.ts +14 -2
  711. package/src/cli/Argument.ts +6 -0
  712. package/src/cli/CliOutput.ts +117 -49
  713. package/src/cli/Command.ts +23 -0
  714. package/src/cli/Flag.ts +107 -0
  715. package/src/cli/HelpDoc.ts +18 -1
  716. package/src/cli/Param.ts +6 -0
  717. package/src/cli/Primitive.ts +16 -1
  718. package/src/cli/Prompt.ts +1 -0
  719. package/src/cli/internal/help.ts +21 -9
  720. package/src/cluster/ClusterWorkflowEngine.ts +22 -8
  721. package/src/cluster/Reply.ts +1 -1
  722. package/src/cluster/Sharding.ts +96 -26
  723. package/src/cluster/ShardingConfig.ts +41 -3
  724. package/src/cluster/SingleRunner.ts +3 -3
  725. package/src/cluster/SqlMessageStorage.ts +49 -17
  726. package/src/cluster/SqlRunnerStorage.ts +37 -27
  727. package/src/cluster/internal/entityManager.ts +24 -10
  728. package/src/crypto/Aead.ts +517 -0
  729. package/src/crypto/Cipher.ts +326 -0
  730. package/src/crypto/CryptoError.ts +242 -0
  731. package/src/crypto/Digest.ts +167 -0
  732. package/src/crypto/Kdf.ts +315 -0
  733. package/src/crypto/KeyAgreement.ts +489 -0
  734. package/src/crypto/KeyFormat.ts +741 -0
  735. package/src/crypto/KeyWrap.ts +639 -0
  736. package/src/crypto/Mac.ts +386 -0
  737. package/src/crypto/SecureRandom.ts +459 -0
  738. package/src/crypto/Signature.ts +673 -0
  739. package/src/crypto/WebCrypto.ts +84 -0
  740. package/src/crypto/index.ts +78 -0
  741. package/src/crypto/internal/asymmetric.ts +330 -0
  742. package/src/crypto/internal/chacha.ts +1088 -0
  743. package/src/crypto/internal/der.ts +110 -0
  744. package/src/crypto/internal/digest.ts +16 -0
  745. package/src/crypto/internal/key.ts +242 -0
  746. package/src/crypto/internal/md5.ts +170 -0
  747. package/src/crypto/internal/webCrypto.ts +150 -0
  748. package/src/encoding/Base64Url.ts +32 -5
  749. package/src/encoding/Csv.ts +1298 -0
  750. package/src/encoding/Hex.ts +3 -2
  751. package/src/encoding/Ndjson.ts +6 -5
  752. package/src/encoding/SchemaBinary.ts +40 -4
  753. package/src/encoding/Sse.ts +5 -3
  754. package/src/encoding/Toml.ts +85 -20
  755. package/src/encoding/Yaml.ts +61 -18
  756. package/src/encoding/index.ts +6 -0
  757. package/src/eventlog/EventJournal.ts +4 -3
  758. package/src/eventlog/EventLog.ts +347 -15
  759. package/src/eventlog/EventLogEncryption.ts +118 -110
  760. package/src/eventlog/EventLogMessage.ts +273 -1
  761. package/src/eventlog/EventLogRemote.ts +367 -23
  762. package/src/eventlog/EventLogServer.ts +54 -20
  763. package/src/eventlog/EventLogServerEncrypted.ts +1135 -67
  764. package/src/eventlog/EventLogServerUnencrypted.ts +19 -2
  765. package/src/eventlog/EventLogSessionAuth.ts +82 -70
  766. package/src/eventlog/EventRow.ts +12 -3
  767. package/src/eventlog/SqlEventJournal.ts +2 -2
  768. package/src/eventlog/SqlEventLogServerEncrypted.ts +1244 -136
  769. package/src/eventlog/SqlEventLogServerUnencrypted.ts +2 -2
  770. package/src/eventlog/internal/batches.ts +30 -0
  771. package/src/eventlog/internal/compaction.ts +64 -0
  772. package/src/eventlog/internal/identityRootSecretDerivation.ts +93 -123
  773. package/src/eventlog/internal/remoteCompaction.ts +92 -0
  774. package/src/graphql/GraphQLClient.ts +3 -1
  775. package/src/graphql/GraphQLClientError.ts +15 -22
  776. package/src/graphql/GraphQLProtocol.ts +12 -3
  777. package/src/http/Cookies.ts +281 -1
  778. package/src/http/FetchHttpClient.ts +88 -16
  779. package/src/http/HttpClient.ts +299 -33
  780. package/src/http/HttpClientRequest.ts +12 -9
  781. package/src/http/HttpClientResponse.ts +3 -2
  782. package/src/http/HttpMethod.ts +10 -2
  783. package/src/http/HttpServerRequest.ts +76 -53
  784. package/src/http/HttpServerResponse.ts +3 -2
  785. package/src/http/HttpTraceContext.ts +7 -4
  786. package/src/http/ProblemDetails.ts +149 -0
  787. package/src/http/index.ts +6 -0
  788. package/src/http/internal/decompression.ts +4 -4
  789. package/src/http/internal/mimeTypes.ts +4 -1
  790. package/src/http/internal/urlParams.ts +8 -0
  791. package/src/http-api/HttpApiBuilder.ts +24 -12
  792. package/src/http-api/HttpApiClient.ts +67 -1
  793. package/src/http-api/HttpApiEndpoint.ts +14 -5
  794. package/src/http-api/HttpApiError.ts +250 -0
  795. package/src/http-api/HttpApiMiddleware.ts +95 -1
  796. package/src/http-api/HttpApiSchema.ts +106 -15
  797. package/src/index.ts +6 -6
  798. package/src/internal/dateTime.ts +54 -24
  799. package/src/internal/effect.ts +40 -18
  800. package/src/internal/glob.ts +952 -0
  801. package/src/internal/graphql.ts +27 -9
  802. package/src/internal/graphqlHeaders.ts +13 -0
  803. package/src/internal/matcher.ts +17 -0
  804. package/src/internal/persistence.ts +11 -0
  805. package/src/internal/rcRef.ts +4 -1
  806. package/src/internal/request.ts +51 -58
  807. package/src/internal/schema/fromJsonSchemaDocument.ts +11 -10
  808. package/src/internal/schema/toCodeDocument.ts +7 -3
  809. package/src/internal/trie.ts +43 -14
  810. package/src/internal/ulid.ts +44 -0
  811. package/src/internal/uuid.ts +57 -16
  812. package/src/internal/version.ts +1 -1
  813. package/src/jose/JoseError.ts +329 -0
  814. package/src/jose/Jwe.ts +196 -0
  815. package/src/jose/Jwk.ts +777 -0
  816. package/src/jose/Jwks.ts +418 -0
  817. package/src/jose/Jws.ts +312 -0
  818. package/src/jose/Jwt.ts +493 -0
  819. package/src/jose/index.ts +58 -0
  820. package/src/jose/internal/compact.ts +195 -0
  821. package/src/net/Host.ts +5 -10
  822. package/src/observability/Otlp.ts +21 -4
  823. package/src/observability/OtlpResource.ts +9 -1
  824. package/src/observability/OtlpSerialization.ts +13 -5
  825. package/src/observability/internal/otlpProtobuf.ts +6 -6
  826. package/src/observability/internal/protobuf.ts +10 -0
  827. package/src/persistence/CircuitBreaker.ts +113 -48
  828. package/src/persistence/KeyValueStore.ts +219 -22
  829. package/src/persistence/PersistedQueue.ts +128 -59
  830. package/src/persistence/Persistence.ts +20 -13
  831. package/src/persistence/RateLimiter.ts +84 -15
  832. package/src/persistence/index.ts +1 -1
  833. package/src/process/ChildProcess.ts +255 -260
  834. package/src/process/ChildProcessSpawner.ts +5 -0
  835. package/src/process/CommandLine.ts +630 -0
  836. package/src/process/index.ts +6 -0
  837. package/src/reactivity/Atom.ts +5 -5
  838. package/src/reactivity/AtomRegistry.ts +20 -9
  839. package/src/rpc/Rpc.ts +3 -1
  840. package/src/rpc/RpcClient.ts +94 -38
  841. package/src/rpc/RpcMessage.ts +13 -3
  842. package/src/rpc/RpcSerialization.ts +3 -0
  843. package/src/rpc/RpcServer.ts +176 -78
  844. package/src/schema/Model.ts +26 -3
  845. package/src/sql/Migrator.ts +38 -80
  846. package/src/sql/MigratorFileSystem.ts +71 -0
  847. package/src/sql/SqlClient.ts +45 -24
  848. package/src/sql/Statement.ts +60 -29
  849. package/src/sql/index.ts +1 -1
  850. package/src/testing/index.ts +0 -6
  851. package/src/workflow/Workflow.ts +4 -0
  852. package/src/workflow/WorkflowEngine.ts +5 -0
  853. package/src/workflow/internal/crypto.ts +15 -11
  854. package/dist/Crypto.d.ts +0 -244
  855. package/dist/Crypto.d.ts.map +0 -1
  856. package/dist/Crypto.js +0 -139
  857. package/dist/Crypto.js.map +0 -1
  858. package/dist/testing/TestCrypto.d.ts +0 -73
  859. package/dist/testing/TestCrypto.d.ts.map +0 -1
  860. package/dist/testing/TestCrypto.js +0 -87
  861. package/dist/testing/TestCrypto.js.map +0 -1
  862. package/src/Crypto.ts +0 -347
  863. package/src/testing/TestCrypto.ts +0 -94
@@ -32,10 +32,11 @@ import * as Headers from "./Headers.ts"
32
32
  import * as HttpBody from "./HttpBody.ts"
33
33
  import * as HttpClientRequest from "./HttpClientRequest.ts"
34
34
  import * as HttpIncomingMessage from "./HttpIncomingMessage.ts"
35
- import { hasBody, type HttpMethod } from "./HttpMethod.ts"
35
+ import { hasBody } from "./HttpMethod.ts"
36
36
  import { HttpServerError, type RequestError, RequestParseError } from "./HttpServerError.ts"
37
37
  import * as bodyInternal from "./internal/httpBody.ts"
38
38
  import * as lazyStream from "./internal/lazyStream.ts"
39
+ import * as internalUrlParams from "./internal/urlParams.ts"
39
40
  import * as Multipart from "./Multipart.ts"
40
41
  import * as UrlParams from "./UrlParams.ts"
41
42
 
@@ -90,7 +91,11 @@ export interface HttpServerRequest extends HttpIncomingMessage.HttpIncomingMessa
90
91
  readonly source: object
91
92
  readonly url: string
92
93
  readonly originalUrl: string
93
- readonly method: HttpMethod
94
+ /**
95
+ * The uppercase request method as received, which may be a method outside
96
+ * the known `HttpMethod` literals (for example `"PROPFIND"`).
97
+ */
98
+ readonly method: string
94
99
  readonly cookies: ReadonlyRecord<string, string>
95
100
 
96
101
  readonly multipart: Effect.Effect<
@@ -563,8 +568,8 @@ class ServerRequestImpl extends Inspectable.Class implements HttpServerRequest {
563
568
  options.protocol ?? this.protocol
564
569
  )
565
570
  }
566
- get method(): HttpMethod {
567
- return this.source.method.toUpperCase() as HttpMethod
571
+ get method(): string {
572
+ return this.source.method.toUpperCase()
568
573
  }
569
574
  get originalUrl() {
570
575
  return this.source.url
@@ -612,27 +617,7 @@ class ServerRequestImpl extends Inspectable.Class implements HttpServerRequest {
612
617
 
613
618
  private textEffect: Effect.Effect<string, HttpServerError> | undefined
614
619
  get text(): Effect.Effect<string, HttpServerError> {
615
- if (this.textEffect) {
616
- return this.textEffect
617
- }
618
- this.textEffect = Effect.withFiber((fiber) =>
619
- fiber.getRef(HttpIncomingMessage.MaxBodySize) === undefined
620
- ? Effect.tryPromise({
621
- try: () => this.source.text(),
622
- catch: (cause) =>
623
- new HttpServerError({
624
- reason: new RequestParseError({
625
- request: this,
626
- cause
627
- })
628
- })
629
- })
630
- : Effect.map(this.arrayBuffer, (buffer) => textDecoder.decode(buffer))
631
- ).pipe(
632
- Effect.cached,
633
- Effect.runSync
634
- )
635
- return this.textEffect
620
+ return this.textEffect ??= Effect.map(this.arrayBuffer, (buffer) => textDecoder.decode(buffer))
636
621
  }
637
622
 
638
623
  get json(): Effect.Effect<Schema.Json, HttpServerError> {
@@ -650,9 +635,9 @@ class ServerRequestImpl extends Inspectable.Class implements HttpServerRequest {
650
635
  }
651
636
 
652
637
  get urlParamsBody(): Effect.Effect<UrlParams.UrlParams, HttpServerError> {
653
- return Effect.flatMap(this.text, (_) =>
638
+ return Effect.flatMap(this.arrayBuffer, (bytes) =>
654
639
  Effect.try({
655
- try: () => UrlParams.fromInput(new URLSearchParams(_)),
640
+ try: () => UrlParams.fromInput(internalUrlParams.fromBody(bytes)),
656
641
  catch: (cause) =>
657
642
  new HttpServerError({
658
643
  reason: new RequestParseError({
@@ -797,7 +782,7 @@ class ClientRequestImpl extends Inspectable.Class implements HttpServerRequest {
797
782
  )
798
783
  }
799
784
 
800
- get method(): HttpMethod {
785
+ get method(): string {
801
786
  return this.source.method
802
787
  }
803
788
 
@@ -851,32 +836,37 @@ class ClientRequestImpl extends Inspectable.Class implements HttpServerRequest {
851
836
  if (this.bytesEffect) {
852
837
  return this.bytesEffect
853
838
  }
839
+ this.bytesEffect = Effect.withFiber((fiber) => {
840
+ const maxBodySize = fiber.getRef(HttpIncomingMessage.MaxBodySize)
841
+ return this.readBytes(maxBodySize === undefined ? undefined : Number(maxBodySize))
842
+ }).pipe(
843
+ Effect.cached,
844
+ Effect.runSync
845
+ )
846
+ return this.bytesEffect
847
+ }
848
+
849
+ private readBytes(maxBytes: number | undefined): Effect.Effect<Uint8Array, HttpServerError> {
854
850
  const body = this.source.body
855
- let effect: Effect.Effect<Uint8Array, HttpServerError>
856
851
  switch (body._tag) {
857
852
  case "Empty": {
858
- effect = Effect.succeed(new Uint8Array(0))
859
- break
853
+ return Effect.succeed(new Uint8Array(0))
860
854
  }
861
855
  case "Uint8Array": {
862
- effect = Effect.succeed(body.body)
863
- break
856
+ return maxBytes !== undefined && body.body.byteLength > maxBytes
857
+ ? Effect.fail(bodyTooLargeError(this, new BodyTooLargeError(maxBytes)))
858
+ : Effect.succeed(body.body)
864
859
  }
865
860
  case "FormData": {
866
- effect = bytesFromBodyInit(this, body.formData)
867
- break
861
+ return bytesFromWeb(this, () => new Response(body.formData), maxBytes)
868
862
  }
869
863
  case "Stream": {
870
- effect = Stream.mkUint8Array(this.stream)
871
- break
864
+ return Stream.mkUint8Array(maxBytes === undefined ? this.stream : limitStream(this, this.stream, maxBytes))
872
865
  }
873
866
  case "Raw": {
874
- effect = rawBodyBytes(this, body.body)
875
- break
867
+ return rawBodyBytes(this, body.body, maxBytes)
876
868
  }
877
869
  }
878
- this.bytesEffect = Effect.runSync(Effect.cached(effect))
879
- return this.bytesEffect
880
870
  }
881
871
 
882
872
  get text(): Effect.Effect<string, HttpServerError> {
@@ -892,9 +882,9 @@ class ClientRequestImpl extends Inspectable.Class implements HttpServerRequest {
892
882
  }
893
883
 
894
884
  get urlParamsBody(): Effect.Effect<UrlParams.UrlParams, HttpServerError> {
895
- return Effect.flatMap(this.text, (_) =>
885
+ return Effect.flatMap(this.bytes, (bytes) =>
896
886
  Effect.try({
897
- try: () => UrlParams.fromInput(new URLSearchParams(_)),
887
+ try: () => UrlParams.fromInput(internalUrlParams.fromBody(bytes)),
898
888
  catch: (cause) => requestParseError(this, undefined, cause)
899
889
  }))
900
890
  }
@@ -977,23 +967,38 @@ const rawBodyStream = (request: HttpServerRequest, body: unknown): Stream.Stream
977
967
  return Stream.fail(requestParseError(request, "Unsupported body type"))
978
968
  }
979
969
 
980
- const rawBodyBytes = (request: HttpServerRequest, body: unknown): Effect.Effect<Uint8Array, HttpServerError> => {
970
+ const rawBodyBytes = (
971
+ request: HttpServerRequest,
972
+ body: unknown,
973
+ maxBytes: number | undefined
974
+ ): Effect.Effect<Uint8Array, HttpServerError> => {
981
975
  if (body instanceof Request) {
982
- return Effect.tryPromise({
983
- try: () => body.arrayBuffer().then((buffer) => new Uint8Array(buffer)),
984
- catch: (cause) => requestParseError(request, undefined, cause)
985
- })
976
+ return bytesFromWeb(request, () => body, maxBytes)
986
977
  }
987
978
  if (isBodyInit(body)) {
988
- return bytesFromBodyInit(request, body)
979
+ return bytesFromWeb(request, () => new Response(body), maxBytes)
989
980
  }
990
981
  return Effect.fail(requestParseError(request, "Unsupported body type"))
991
982
  }
992
983
 
993
- const bytesFromBodyInit = (request: HttpServerRequest, body: BodyInit): Effect.Effect<Uint8Array, HttpServerError> =>
984
+ const bytesFromWeb = (
985
+ request: HttpServerRequest,
986
+ // Evaluated inside `try`, as wrapping an unreadable body in a `Response` throws.
987
+ evaluate: () => Request | Response,
988
+ maxBytes: number | undefined
989
+ ): Effect.Effect<Uint8Array, HttpServerError> =>
994
990
  Effect.tryPromise({
995
- try: () => new Response(body).arrayBuffer().then((buffer) => new Uint8Array(buffer)),
996
- catch: (cause) => requestParseError(request, undefined, cause)
991
+ try: async (signal) => {
992
+ const source = evaluate()
993
+ const buffer = maxBytes === undefined
994
+ ? await source.arrayBuffer()
995
+ : await readArrayBufferLimited(source, maxBytes, signal)
996
+ return new Uint8Array(buffer)
997
+ },
998
+ catch: (cause) =>
999
+ cause instanceof BodyTooLargeError
1000
+ ? bodyTooLargeError(request, cause)
1001
+ : requestParseError(request, undefined, cause)
997
1002
  })
998
1003
 
999
1004
  const streamFromReadable = (
@@ -1020,6 +1025,24 @@ const requestParseError = (
1020
1025
  })
1021
1026
  })
1022
1027
 
1028
+ const limitStream = (
1029
+ request: HttpServerRequest,
1030
+ stream: Stream.Stream<Uint8Array, HttpServerError>,
1031
+ maxBytes: number
1032
+ ): Stream.Stream<Uint8Array, HttpServerError> =>
1033
+ Stream.suspend(() => {
1034
+ let bytes = 0
1035
+ return Stream.mapEffect(stream, (chunk) => {
1036
+ bytes += chunk.byteLength
1037
+ return bytes > maxBytes
1038
+ ? Effect.fail(bodyTooLargeError(request, new BodyTooLargeError(maxBytes)))
1039
+ : Effect.succeed(chunk)
1040
+ })
1041
+ })
1042
+
1043
+ const bodyTooLargeError = (request: HttpServerRequest, cause: BodyTooLargeError) =>
1044
+ new HttpServerError({ reason: new RequestParseError({ request, reason: "BodyTooLarge", cause }) })
1045
+
1023
1046
  const formDataToParts = (formData: FormData): Array<Multipart.Part> => {
1024
1047
  const parts: Array<Multipart.Part> = []
1025
1048
  for (const [key, value] of formData.entries()) {
@@ -1117,7 +1140,7 @@ class BodyTooLargeError extends Error {
1117
1140
  }
1118
1141
 
1119
1142
  const readArrayBufferLimited = async (
1120
- source: Request,
1143
+ source: Request | Response,
1121
1144
  maxBytes: number,
1122
1145
  signal: AbortSignal
1123
1146
  ): Promise<ArrayBuffer> => {
@@ -38,6 +38,7 @@ import * as HttpIncomingMessage from "./HttpIncomingMessage.ts"
38
38
  import type { HttpPlatform } from "./HttpPlatform.ts"
39
39
  import * as headersInternal from "./internal/headers.ts"
40
40
  import * as bodyInternal from "./internal/httpBody.ts"
41
+ import * as internalUrlParams from "./internal/urlParams.ts"
41
42
  import * as Template from "./Template.ts"
42
43
  import * as UrlParams from "./UrlParams.ts"
43
44
 
@@ -1653,9 +1654,9 @@ class ServerHttpClientResponse extends Inspectable.Class implements HttpClientRe
1653
1654
  }
1654
1655
 
1655
1656
  get urlParamsBody(): Effect.Effect<UrlParams.UrlParams, HttpClientError.HttpClientError> {
1656
- return Effect.flatMap(this.text, (_) =>
1657
+ return Effect.flatMap(this.bytes, (bytes) =>
1657
1658
  Effect.try({
1658
- try: () => UrlParams.fromInput(new URLSearchParams(_)),
1659
+ try: () => UrlParams.fromInput(internalUrlParams.fromBody(bytes)),
1659
1660
  catch: (cause) =>
1660
1661
  new HttpClientError.HttpClientError({
1661
1662
  reason: new HttpClientError.DecodeError({
@@ -130,10 +130,11 @@ export const xb3: FromHeaders = (headers) => {
130
130
  }))
131
131
  }
132
132
 
133
- const w3cTraceId = /^[0-9a-f]{32}$/i
134
- const w3cSpanId = /^[0-9a-f]{16}$/i
133
+ const w3cTraceId = /^[0-9a-f]{32}$/
134
+ const w3cSpanId = /^[0-9a-f]{16}$/
135
+ const w3cTraceFlags = /^[0-9a-f]{2}$/
135
136
 
136
- const b3TraceId = /^(?:[0-9a-f]{16}|[0-9a-f]{32})$/i
137
+ const b3TraceId = /^(?:[0-9a-f]{16}|[0-9a-f]{32})$/
137
138
  const isB3Ids = (traceId: string, spanId: string): boolean => b3TraceId.test(traceId) && w3cSpanId.test(spanId)
138
139
 
139
140
  /**
@@ -141,7 +142,8 @@ const isB3Ids = (traceId: string, spanId: string): boolean => b3TraceId.test(tra
141
142
  *
142
143
  * **Details**
143
144
  *
144
- * Only version `00` headers with valid trace and span identifiers are accepted.
145
+ * Only version `00` headers with valid trace and span identifiers and trace
146
+ * flags are accepted.
145
147
  *
146
148
  * @stability unstable
147
149
  * @category decoding
@@ -160,6 +162,7 @@ export const w3c: FromHeaders = (headers) => {
160
162
  case "00": {
161
163
  if (
162
164
  w3cTraceId.test(traceId) === false || w3cSpanId.test(spanId) === false ||
165
+ w3cTraceFlags.test(flags) === false ||
163
166
  traceId === "00000000000000000000000000000000" || spanId === "0000000000000000"
164
167
  ) {
165
168
  return Option.none()
@@ -0,0 +1,149 @@
1
+ /**
2
+ * RFC 9457 Problem Details values for HTTP responses.
3
+ *
4
+ * A problem details object is the `application/problem+json` body a server
5
+ * sends to describe an error. This module provides the reusable value shape,
6
+ * a lenient codec that follows the parsing rules of RFC 9457, and a response
7
+ * constructor. The `effect/http-api` modules build typed problem declarations,
8
+ * built-in error rendering and OpenAPI output on top of it.
9
+ *
10
+ * @stability unstable
11
+ * @since 4.0.6
12
+ */
13
+ import * as Effect from "../Effect.ts"
14
+ import * as Schema_ from "../Schema.ts"
15
+ import * as HttpServerResponse from "./HttpServerResponse.ts"
16
+
17
+ /**
18
+ * The media type of a problem details response body.
19
+ *
20
+ * @stability unstable
21
+ * @category constants
22
+ * @since 4.0.6
23
+ */
24
+ export const contentType = "application/problem+json"
25
+
26
+ /**
27
+ * The problem type URI RFC 9457 assigns to problems that only carry an HTTP
28
+ * status.
29
+ *
30
+ * @stability unstable
31
+ * @category constants
32
+ * @since 4.0.6
33
+ */
34
+ export const blankType = "about:blank"
35
+
36
+ /**
37
+ * A decoded RFC 9457 problem details object.
38
+ *
39
+ * **Details**
40
+ *
41
+ * The standard members are `type`, `status`, `title`, `detail` and
42
+ * `instance`. Any other member is an extension and is kept as-is.
43
+ *
44
+ * @stability unstable
45
+ * @category models
46
+ * @since 4.0.6
47
+ */
48
+ export interface ProblemDetails {
49
+ readonly type: string
50
+ readonly status?: number
51
+ readonly title?: string
52
+ readonly detail?: string
53
+ readonly instance?: string
54
+ readonly [extension: string]: unknown
55
+ }
56
+
57
+ /**
58
+ * The encoded form of a problem details object, where `type` may be omitted.
59
+ *
60
+ * @stability unstable
61
+ * @category models
62
+ * @since 4.0.6
63
+ */
64
+ export interface ProblemDetailsEncoded {
65
+ readonly type?: string
66
+ readonly status?: number
67
+ readonly title?: string
68
+ readonly detail?: string
69
+ readonly instance?: string
70
+ readonly [extension: string]: unknown
71
+ }
72
+
73
+ /**
74
+ * A standard member that is dropped when it is missing or has the wrong JSON
75
+ * type, as RFC 9457 section 3.1 requires.
76
+ *
77
+ * @internal
78
+ */
79
+ export const optionalMember = <S extends Schema_.Constraint>(schema: S) =>
80
+ Schema_.optionalKey(schema).pipe(Schema_.catchDecoding(() => Effect.succeedNone))
81
+
82
+ const withFallback = <S extends Schema_.Constraint>(
83
+ schema: S,
84
+ value: S["Encoded"] & S["Type"]
85
+ ): Schema_.middlewareDecoding<Schema_.withDecodingDefaultKey<S>, S["DecodingServices"]> =>
86
+ Schema_.withDecodingDefaultKey<S>(Effect.succeed(value))(schema).pipe(
87
+ Schema_.catchDecoding(() => Effect.succeedSome(value))
88
+ )
89
+
90
+ /**
91
+ * A required member that decodes to a fixed value when it is missing or has
92
+ * the wrong JSON type. The value is also the constructor default.
93
+ *
94
+ * @internal
95
+ */
96
+ export const fixedMember = <const L extends string | number>(value: L) => withFallback(Schema_.tag(value), value)
97
+
98
+ /**
99
+ * The lenient codec for problem details objects.
100
+ *
101
+ * **Details**
102
+ *
103
+ * Decoding follows RFC 9457: a missing `type` defaults to `about:blank`,
104
+ * standard members with the wrong JSON type are ignored, and unknown members
105
+ * are kept as extensions. Encoding always emits `type`.
106
+ *
107
+ * **Example** (Decoding a problem with an extension)
108
+ *
109
+ * ```ts import.meta.vitest
110
+ * import { Schema } from "effect"
111
+ * import { ProblemDetails } from "effect/http"
112
+ *
113
+ * const problem = Schema.decodeUnknownSync(ProblemDetails.Schema)({
114
+ * status: 404,
115
+ * detail: "No such user",
116
+ * traceId: "abc-123"
117
+ * })
118
+ * problem // => { type: "about:blank", status: 404, detail: "No such user", traceId: "abc-123" }
119
+ * ```
120
+ *
121
+ * @stability unstable
122
+ * @category schemas
123
+ * @since 4.0.6
124
+ */
125
+ export const Schema: Schema_.Codec<ProblemDetails, ProblemDetailsEncoded> = Schema_.StructWithRest(
126
+ Schema_.Struct({
127
+ type: withFallback(Schema_.String, blankType),
128
+ status: optionalMember(Schema_.Number),
129
+ title: optionalMember(Schema_.String),
130
+ detail: optionalMember(Schema_.String),
131
+ instance: optionalMember(Schema_.String)
132
+ }),
133
+ [Schema_.Record(Schema_.String, Schema_.Unknown)]
134
+ )
135
+
136
+ /**
137
+ * Renders a problem details object as an `application/problem+json` response.
138
+ *
139
+ * **Details**
140
+ *
141
+ * The response status is the problem's `status` member, or `500` when it is
142
+ * absent.
143
+ *
144
+ * @stability unstable
145
+ * @category constructors
146
+ * @since 4.0.6
147
+ */
148
+ export const toResponse = (problem: ProblemDetails): HttpServerResponse.HttpServerResponse =>
149
+ HttpServerResponse.jsonUnsafe(problem, { status: problem.status ?? 500, contentType })
package/src/http/index.ts CHANGED
@@ -167,6 +167,12 @@ export * as Multipart from "./Multipart.ts"
167
167
  */
168
168
  export * as MultipartParser from "./MultipartParser.ts"
169
169
 
170
+ /**
171
+ * @stability unstable
172
+ * @since 4.0.6
173
+ */
174
+ export * as ProblemDetails from "./ProblemDetails.ts"
175
+
170
176
  /**
171
177
  * @stability unstable
172
178
  * @since 4.0.0
@@ -8,12 +8,12 @@ import type * as Socket from "../../socket/Socket.ts"
8
8
  import * as Stream from "../../Stream.ts"
9
9
  import * as Headers from "../Headers.ts"
10
10
  import * as HttpIncomingMessage from "../HttpIncomingMessage.ts"
11
- import type { HttpMethod } from "../HttpMethod.ts"
12
11
  import { HttpServerError, RequestParseError } from "../HttpServerError.ts"
13
12
  import * as HttpServerRequest from "../HttpServerRequest.ts"
14
13
  import * as Multipart from "../Multipart.ts"
15
14
  import * as UrlParams from "../UrlParams.ts"
16
15
  import * as lazyStream from "./lazyStream.ts"
16
+ import * as internalUrlParams from "./urlParams.ts"
17
17
 
18
18
  /**
19
19
  * @internal
@@ -100,7 +100,7 @@ export class DecompressedRequest extends Inspectable.Class implements HttpServer
100
100
  return this.inner.originalUrl
101
101
  }
102
102
 
103
- get method(): HttpMethod {
103
+ get method(): string {
104
104
  return this.inner.method
105
105
  }
106
106
 
@@ -188,9 +188,9 @@ export class DecompressedRequest extends Inspectable.Class implements HttpServer
188
188
  }
189
189
 
190
190
  get urlParamsBody(): Effect.Effect<UrlParams.UrlParams, HttpServerError> {
191
- return Effect.flatMap(this.text, (text) =>
191
+ return Effect.flatMap(this.bytes, (bytes) =>
192
192
  Effect.try({
193
- try: () => UrlParams.fromInput(new URLSearchParams(text)),
193
+ try: () => UrlParams.fromInput(internalUrlParams.fromBody(bytes)),
194
194
  catch: (cause) => this.parseError(cause)
195
195
  }))
196
196
  }
@@ -1,5 +1,6 @@
1
1
  /**
2
- * Standard MIME type data copied from mime 4.1.0.
2
+ * Standard MIME type data copied from mime 4.1.0, plus `text/x-python` and
3
+ * `text/x-shellscript` for `py` and `sh` scripts.
3
4
  *
4
5
  * MIT License
5
6
  *
@@ -370,6 +371,8 @@ const types = {
370
371
  "text/vcard": ["vcard"],
371
372
  "text/vtt": ["vtt"],
372
373
  "text/wgsl": ["wgsl"],
374
+ "text/x-python": ["py"],
375
+ "text/x-shellscript": ["sh"],
373
376
  "text/xml": ["*xml"],
374
377
  "text/yaml": ["yaml", "yml"],
375
378
  "video/3gpp": ["3gp", "3gpp"],
@@ -18,6 +18,14 @@ export const stripSearchAndHash = (url: string): string => {
18
18
  return url.slice(0, Math.min(queryIndex, hashIndex))
19
19
  }
20
20
 
21
+ // URL-encoded bodies keep a leading U+FEFF as form data
22
+ const bodyDecoder = new TextDecoder("utf-8", { ignoreBOM: true })
23
+
24
+ /** @internal */
25
+ export const fromBody = (bytes: ArrayBuffer | Uint8Array): URLSearchParams =>
26
+ // A leading "?" is form data; URLSearchParams would drop it as a query prefix.
27
+ new URLSearchParams(bodyDecoder.decode(bytes).replace(/^\?/, "%3F"))
28
+
21
29
  const originForm = /^\/(?![/\\])/
22
30
 
23
31
  /** @internal */
@@ -957,6 +957,8 @@ function handlerToHttpEffect(
957
957
  const encodeStream = makeStreamEncoder(endpoint, options.success)
958
958
  const encodeWithHeaders = makeWithHeadersEncoder(endpoint, options.success, options.headers)
959
959
  const upgrade = getUpgradeSuccessSchema(endpoint)
960
+ // The handler of a mixed endpoint may decline the upgrade and return one of the other successes.
961
+ const upgradeOnly = upgrade !== undefined && endpoint.success.size === 1
960
962
  const encodeUpgradeHeaders = UndefinedOr.map(
961
963
  upgrade?.headers,
962
964
  (schema) => Schema.encodeUnknownEffect(schema, options.headers)
@@ -989,19 +991,23 @@ function handlerToHttpEffect(
989
991
  if (decodeQuery) {
990
992
  request.query = yield* HttpApiSchemaError.wrap("Query", decodeQuery(query))
991
993
  }
994
+ let upgraded = false
992
995
  if (upgrade !== undefined) {
993
996
  if (!isUpgradeRequest(httpRequest, upgrade.protocol)) {
994
997
  return upgradeRequired(upgrade.protocol)
995
998
  }
996
999
  request.upgrade = (options?: { readonly headers?: unknown }) =>
997
- Effect.orDie(
998
- encodeUpgradeHeaders === undefined
999
- ? httpRequest.upgrade
1000
- : Effect.flatMap(
1001
- HttpApiSchemaError.wrap("ResponseHeaders", encodeUpgradeHeaders(options?.headers)),
1002
- (headers) => httpRequest.upgradeWith({ headers: headers as Record<string, string> })
1003
- )
1004
- )
1000
+ Effect.suspend(() => {
1001
+ upgraded = true
1002
+ return Effect.orDie(
1003
+ encodeUpgradeHeaders === undefined
1004
+ ? httpRequest.upgrade
1005
+ : Effect.flatMap(
1006
+ HttpApiSchemaError.wrap("ResponseHeaders", encodeUpgradeHeaders(options?.headers)),
1007
+ (headers) => httpRequest.upgradeWith({ headers: headers as Record<string, string> })
1008
+ )
1009
+ )
1010
+ })
1005
1011
  }
1006
1012
  if (payloadBy) {
1007
1013
  const result = decodePayload(payloadBy, httpRequest, query)
@@ -1016,7 +1022,10 @@ function handlerToHttpEffect(
1016
1022
  if (Response.isHttpServerResponse(response)) {
1017
1023
  return response
1018
1024
  }
1019
- if (upgrade !== undefined) {
1025
+ if (upgradeOnly || upgraded) {
1026
+ if (response !== undefined && !upgradeOnly) {
1027
+ return yield* Effect.die(new Error("Cannot return a success value after calling upgrade()"))
1028
+ }
1020
1029
  // The server replaces this with the 101 once the connection is upgraded.
1021
1030
  return Response.empty()
1022
1031
  }
@@ -1367,9 +1376,12 @@ function makeSuccessSchema(
1367
1376
  endpoint: HttpApiEndpoint.Top,
1368
1377
  headersOptions: SchemaAST.ParseOptions | undefined
1369
1378
  ): Schema.ConstraintEncoder<HttpServerResponse, unknown> {
1370
- const schemas = HttpApiEndpoint.getSuccessSchemas(endpoint).map((schema) =>
1371
- toResponseSuccessSchema(schema, headersOptions)
1372
- )
1379
+ const schemas: Array<Schema.ConstraintEncoder<HttpServerResponse, unknown>> = []
1380
+ for (const schema of HttpApiEndpoint.getSuccessSchemas(endpoint)) {
1381
+ // The 101 is written by the transport, so the upgrade has no response encoder.
1382
+ if (HttpApiSchema.isUpgrade(schema)) continue
1383
+ schemas.push(toResponseSuccessSchema(schema, headersOptions))
1384
+ }
1373
1385
  return schemas.length === 1 ? schemas[0] : Schema.Union(schemas)
1374
1386
  }
1375
1387
 
@@ -106,6 +106,24 @@ export type SuccessType<S> = S extends HttpApiSchema.WithHeaders<
106
106
  : S extends Schema.Constraint ? S["Type"]
107
107
  : never
108
108
 
109
+ /**
110
+ * Runtime brand key used to mark `Upgraded` values.
111
+ *
112
+ * @stability unstable
113
+ * @category type IDs
114
+ * @since 4.1.0
115
+ */
116
+ export const UpgradedTypeId = "~effect/http-api/HttpApiClient/Upgraded"
117
+
118
+ /**
119
+ * Type-level brand identifier used by `Upgraded` values.
120
+ *
121
+ * @stability unstable
122
+ * @category type IDs
123
+ * @since 4.1.0
124
+ */
125
+ export type UpgradedTypeId = typeof UpgradedTypeId
126
+
109
127
  /**
110
128
  * The value a client method returns for an endpoint declared with
111
129
  * `HttpApiSchema.Upgrade`: the headers of the `101 Switching Protocols`
@@ -117,15 +135,63 @@ export type SuccessType<S> = S extends HttpApiSchema.WithHeaders<
117
135
  * one. See `HttpClientResponse.upgrade` for how the connection behaves and
118
136
  * when it closes.
119
137
  *
138
+ * When the endpoint also declares ordinary success responses, the method
139
+ * returns either an `Upgraded` value or the decoded ordinary success. Use
140
+ * {@link isUpgraded} to tell them apart.
141
+ *
120
142
  * @stability unstable
121
143
  * @category models
122
144
  * @since 4.0.6
123
145
  */
124
146
  export interface Upgraded<Headers = Headers.Headers> {
147
+ readonly [UpgradedTypeId]: UpgradedTypeId
125
148
  readonly headers: Headers
126
149
  readonly socket: Socket.Socket
127
150
  }
128
151
 
152
+ /**
153
+ * Returns `true` when a client method result is an upgraded connection.
154
+ *
155
+ * **Details**
156
+ *
157
+ * An endpoint may declare `HttpApiSchema.Upgrade` alongside ordinary success
158
+ * responses, because a server can decline an upgrade (RFC 9110 §7.8). The
159
+ * client method then returns either an `Upgraded` value or the decoded
160
+ * ordinary success, depending on the response status. This predicate narrows
161
+ * that union.
162
+ *
163
+ * **Example** (Handling a declined upgrade)
164
+ *
165
+ * ```ts
166
+ * import { Effect, Schema } from "effect"
167
+ * import { HttpApi, HttpApiClient, HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from "effect/http-api"
168
+ *
169
+ * const Api = HttpApi.make("docker").add(
170
+ * HttpApiGroup.make("exec").add(
171
+ * HttpApiEndpoint.post("start", "/exec/:id/start", {
172
+ * params: { id: Schema.String },
173
+ * payload: Schema.Struct({ Detach: Schema.Boolean }),
174
+ * success: [HttpApiSchema.Upgrade({ protocol: "tcp" }), HttpApiSchema.Empty(200)]
175
+ * })
176
+ * )
177
+ * )
178
+ *
179
+ * const program = Effect.gen(function*() {
180
+ * const client = yield* HttpApiClient.make(Api)
181
+ * const result = yield* client.exec.start({ params: { id: "abc" }, payload: { Detach: false } })
182
+ * if (HttpApiClient.isUpgraded(result)) {
183
+ * const writer = yield* result.socket.writer
184
+ * yield* writer.write("ls\n")
185
+ * }
186
+ * })
187
+ * ```
188
+ *
189
+ * @stability unstable
190
+ * @category guards
191
+ * @since 4.1.0
192
+ */
193
+ export const isUpgraded = (u: unknown): u is Upgraded<unknown> => Predicate.hasProperty(u, UpgradedTypeId)
194
+
129
195
  type SuccessDecodingServices<S> = S extends HttpApiSchema.StreamSse<
130
196
  infer _Events,
131
197
  infer _Error,
@@ -1041,7 +1107,7 @@ const makeEndpointDecoder = (options: {
1041
1107
  Effect.uninterruptibleMask((restore) =>
1042
1108
  Effect.flatMap(response.upgrade, (socket) =>
1043
1109
  restore(decodeHeaders(response.headers)).pipe(
1044
- Effect.map((headers): Upgraded<unknown> => ({ headers, socket })),
1110
+ Effect.map((headers): Upgraded<unknown> => ({ [UpgradedTypeId]: UpgradedTypeId, headers, socket })),
1045
1111
  // nothing takes the connection on failure, so close it: releasing
1046
1112
  // the reader's scope closes the connection
1047
1113
  Effect.onError(() => Effect.ignore(Effect.scoped(socket.reader)))