effect 4.0.6 → 4.0.7

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 (480) hide show
  1. package/dist/Arbitrary.d.ts +10 -2
  2. package/dist/Arbitrary.d.ts.map +1 -1
  3. package/dist/Arbitrary.js +2 -1
  4. package/dist/Arbitrary.js.map +1 -1
  5. package/dist/Channel.d.ts.map +1 -1
  6. package/dist/Channel.js +21 -6
  7. package/dist/Channel.js.map +1 -1
  8. package/dist/Data.d.ts +54 -235
  9. package/dist/Data.d.ts.map +1 -1
  10. package/dist/Data.js.map +1 -1
  11. package/dist/Effect.d.ts +1 -1
  12. package/dist/Effect.js +1 -1
  13. package/dist/Equal.d.ts.map +1 -1
  14. package/dist/Equal.js +8 -1
  15. package/dist/Equal.js.map +1 -1
  16. package/dist/Exit.d.ts +3 -3
  17. package/dist/Exit.d.ts.map +1 -1
  18. package/dist/Exit.js.map +1 -1
  19. package/dist/Formatter.d.ts.map +1 -1
  20. package/dist/Formatter.js +27 -13
  21. package/dist/Formatter.js.map +1 -1
  22. package/dist/Hash.d.ts.map +1 -1
  23. package/dist/Hash.js +4 -1
  24. package/dist/Hash.js.map +1 -1
  25. package/dist/JsonPatch.js +4 -0
  26. package/dist/JsonPatch.js.map +1 -1
  27. package/dist/JsonSchema.d.ts.map +1 -1
  28. package/dist/JsonSchema.js +13 -40
  29. package/dist/JsonSchema.js.map +1 -1
  30. package/dist/Metric.d.ts +3 -3
  31. package/dist/MutableList.d.ts +5 -2
  32. package/dist/MutableList.d.ts.map +1 -1
  33. package/dist/MutableList.js +7 -5
  34. package/dist/MutableList.js.map +1 -1
  35. package/dist/MutableRef.d.ts.map +1 -1
  36. package/dist/MutableRef.js +7 -0
  37. package/dist/MutableRef.js.map +1 -1
  38. package/dist/PartitionedSemaphore.d.ts +2 -1
  39. package/dist/PartitionedSemaphore.d.ts.map +1 -1
  40. package/dist/PartitionedSemaphore.js +22 -12
  41. package/dist/PartitionedSemaphore.js.map +1 -1
  42. package/dist/Pool.d.ts.map +1 -1
  43. package/dist/Pool.js +77 -27
  44. package/dist/Pool.js.map +1 -1
  45. package/dist/PubSub.d.ts.map +1 -1
  46. package/dist/PubSub.js +5 -6
  47. package/dist/PubSub.js.map +1 -1
  48. package/dist/Ref.d.ts.map +1 -1
  49. package/dist/Ref.js +8 -0
  50. package/dist/Ref.js.map +1 -1
  51. package/dist/Schedule.js +1 -1
  52. package/dist/Schedule.js.map +1 -1
  53. package/dist/Schema.d.ts +24 -8
  54. package/dist/Schema.d.ts.map +1 -1
  55. package/dist/Schema.js +37 -28
  56. package/dist/Schema.js.map +1 -1
  57. package/dist/SchemaAST.d.ts +4 -2
  58. package/dist/SchemaAST.d.ts.map +1 -1
  59. package/dist/SchemaAST.js +14 -17
  60. package/dist/SchemaAST.js.map +1 -1
  61. package/dist/SchemaParser.d.ts.map +1 -1
  62. package/dist/SchemaParser.js +48 -22
  63. package/dist/SchemaParser.js.map +1 -1
  64. package/dist/SchemaRepresentation.d.ts +19 -10
  65. package/dist/SchemaRepresentation.d.ts.map +1 -1
  66. package/dist/SchemaRepresentation.js +23 -13
  67. package/dist/SchemaRepresentation.js.map +1 -1
  68. package/dist/SchemaTransformation.d.ts +4 -1
  69. package/dist/SchemaTransformation.d.ts.map +1 -1
  70. package/dist/SchemaTransformation.js +9 -2
  71. package/dist/SchemaTransformation.js.map +1 -1
  72. package/dist/Semaphore.d.ts.map +1 -1
  73. package/dist/Semaphore.js +54 -35
  74. package/dist/Semaphore.js.map +1 -1
  75. package/dist/Sink.d.ts.map +1 -1
  76. package/dist/Sink.js +7 -2
  77. package/dist/Sink.js.map +1 -1
  78. package/dist/Stream.d.ts.map +1 -1
  79. package/dist/Stream.js +22 -10
  80. package/dist/Stream.js.map +1 -1
  81. package/dist/String.d.ts +3 -0
  82. package/dist/String.d.ts.map +1 -1
  83. package/dist/String.js +3 -0
  84. package/dist/String.js.map +1 -1
  85. package/dist/Tracer.d.ts +11 -1
  86. package/dist/Tracer.d.ts.map +1 -1
  87. package/dist/Tracer.js +6 -1
  88. package/dist/Tracer.js.map +1 -1
  89. package/dist/ai/LanguageModel.d.ts.map +1 -1
  90. package/dist/ai/LanguageModel.js +9 -0
  91. package/dist/ai/LanguageModel.js.map +1 -1
  92. package/dist/ai/McpSchema.d.ts +110 -110
  93. package/dist/ai/McpSchema.d.ts.map +1 -1
  94. package/dist/ai/McpServer.d.ts.map +1 -1
  95. package/dist/ai/McpServer.js +21 -15
  96. package/dist/ai/McpServer.js.map +1 -1
  97. package/dist/ai/Prompt.d.ts +52 -0
  98. package/dist/ai/Prompt.d.ts.map +1 -1
  99. package/dist/ai/Prompt.js +38 -0
  100. package/dist/ai/Prompt.js.map +1 -1
  101. package/dist/ai/Response.d.ts +16 -3
  102. package/dist/ai/Response.d.ts.map +1 -1
  103. package/dist/ai/Response.js +4 -0
  104. package/dist/ai/Response.js.map +1 -1
  105. package/dist/ai/Tool.d.ts +24 -0
  106. package/dist/ai/Tool.d.ts.map +1 -1
  107. package/dist/ai/Tool.js +5 -2
  108. package/dist/ai/Tool.js.map +1 -1
  109. package/dist/ai/Toolkit.d.ts.map +1 -1
  110. package/dist/ai/Toolkit.js +8 -1
  111. package/dist/ai/Toolkit.js.map +1 -1
  112. package/dist/cli/Argument.d.ts +15 -0
  113. package/dist/cli/Argument.d.ts.map +1 -1
  114. package/dist/cli/Argument.js +5 -0
  115. package/dist/cli/Argument.js.map +1 -1
  116. package/dist/cli/CliError.d.ts +78 -0
  117. package/dist/cli/CliError.d.ts.map +1 -1
  118. package/dist/cli/CliError.js +65 -3
  119. package/dist/cli/CliError.js.map +1 -1
  120. package/dist/cli/CliOutput.d.ts +155 -6
  121. package/dist/cli/CliOutput.d.ts.map +1 -1
  122. package/dist/cli/CliOutput.js +62 -6
  123. package/dist/cli/CliOutput.js.map +1 -1
  124. package/dist/cli/Command.d.ts +24 -16
  125. package/dist/cli/Command.d.ts.map +1 -1
  126. package/dist/cli/Command.js +59 -29
  127. package/dist/cli/Command.js.map +1 -1
  128. package/dist/cli/Completions.d.ts +58 -0
  129. package/dist/cli/Completions.d.ts.map +1 -1
  130. package/dist/cli/Completions.js +49 -9
  131. package/dist/cli/Completions.js.map +1 -1
  132. package/dist/cli/Flag.d.ts +15 -0
  133. package/dist/cli/Flag.d.ts.map +1 -1
  134. package/dist/cli/Flag.js +5 -0
  135. package/dist/cli/Flag.js.map +1 -1
  136. package/dist/cli/GlobalFlag.d.ts.map +1 -1
  137. package/dist/cli/GlobalFlag.js +15 -7
  138. package/dist/cli/GlobalFlag.js.map +1 -1
  139. package/dist/cli/Param.d.ts +9 -0
  140. package/dist/cli/Param.d.ts.map +1 -1
  141. package/dist/cli/Param.js +21 -2
  142. package/dist/cli/Param.js.map +1 -1
  143. package/dist/cli/TerminalCapabilities.d.ts +3 -2
  144. package/dist/cli/TerminalCapabilities.d.ts.map +1 -1
  145. package/dist/cli/TerminalCapabilities.js +3 -1
  146. package/dist/cli/TerminalCapabilities.js.map +1 -1
  147. package/dist/cli/internal/completions/bash.js +73 -27
  148. package/dist/cli/internal/completions/bash.js.map +1 -1
  149. package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  150. package/dist/cluster/ClusterWorkflowEngine.js +45 -10
  151. package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
  152. package/dist/cluster/MessageStorage.d.ts +23 -45
  153. package/dist/cluster/MessageStorage.d.ts.map +1 -1
  154. package/dist/cluster/MessageStorage.js +6 -7
  155. package/dist/cluster/MessageStorage.js.map +1 -1
  156. package/dist/cluster/Sharding.d.ts.map +1 -1
  157. package/dist/cluster/Sharding.js +61 -21
  158. package/dist/cluster/Sharding.js.map +1 -1
  159. package/dist/cluster/ShardingConfig.d.ts +10 -0
  160. package/dist/cluster/ShardingConfig.d.ts.map +1 -1
  161. package/dist/cluster/ShardingConfig.js.map +1 -1
  162. package/dist/cluster/Snowflake.d.ts.map +1 -1
  163. package/dist/cluster/Snowflake.js +3 -7
  164. package/dist/cluster/Snowflake.js.map +1 -1
  165. package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
  166. package/dist/cluster/SqlRunnerStorage.js +87 -39
  167. package/dist/cluster/SqlRunnerStorage.js.map +1 -1
  168. package/dist/cluster/internal/entityManager.js +54 -20
  169. package/dist/cluster/internal/entityManager.js.map +1 -1
  170. package/dist/devtools/DevToolsClient.d.ts.map +1 -1
  171. package/dist/devtools/DevToolsClient.js +2 -0
  172. package/dist/devtools/DevToolsClient.js.map +1 -1
  173. package/dist/encoding/Base64.js +36 -0
  174. package/dist/encoding/Base64.js.map +1 -1
  175. package/dist/encoding/Sse.d.ts.map +1 -1
  176. package/dist/encoding/Sse.js +3 -3
  177. package/dist/encoding/Sse.js.map +1 -1
  178. package/dist/encoding/Toml.d.ts.map +1 -1
  179. package/dist/encoding/Toml.js +21 -16
  180. package/dist/encoding/Toml.js.map +1 -1
  181. package/dist/eventlog/SqlEventJournal.d.ts.map +1 -1
  182. package/dist/eventlog/SqlEventJournal.js +47 -27
  183. package/dist/eventlog/SqlEventJournal.js.map +1 -1
  184. package/dist/eventlog/internal/conflicts.d.ts +0 -1
  185. package/dist/eventlog/internal/conflicts.d.ts.map +1 -1
  186. package/dist/eventlog/internal/conflicts.js +0 -3
  187. package/dist/eventlog/internal/conflicts.js.map +1 -1
  188. package/dist/http/Cookies.d.ts.map +1 -1
  189. package/dist/http/Cookies.js +10 -9
  190. package/dist/http/Cookies.js.map +1 -1
  191. package/dist/http/HttpClient.d.ts +423 -0
  192. package/dist/http/HttpClient.d.ts.map +1 -1
  193. package/dist/http/HttpClient.js +231 -7
  194. package/dist/http/HttpClient.js.map +1 -1
  195. package/dist/http/HttpClientError.d.ts +8 -1
  196. package/dist/http/HttpClientError.d.ts.map +1 -1
  197. package/dist/http/HttpClientError.js +37 -1
  198. package/dist/http/HttpClientError.js.map +1 -1
  199. package/dist/http/HttpClientRequest.d.ts.map +1 -1
  200. package/dist/http/HttpClientRequest.js +1 -1
  201. package/dist/http/HttpClientRequest.js.map +1 -1
  202. package/dist/http/HttpMiddleware.d.ts +1 -1
  203. package/dist/http/HttpMiddleware.d.ts.map +1 -1
  204. package/dist/http/HttpMiddleware.js +14 -16
  205. package/dist/http/HttpMiddleware.js.map +1 -1
  206. package/dist/http/HttpRouter.d.ts.map +1 -1
  207. package/dist/http/HttpRouter.js +2 -1
  208. package/dist/http/HttpRouter.js.map +1 -1
  209. package/dist/http/HttpServerError.js +2 -2
  210. package/dist/http/HttpServerError.js.map +1 -1
  211. package/dist/http/HttpServerRequest.d.ts +6 -1
  212. package/dist/http/HttpServerRequest.d.ts.map +1 -1
  213. package/dist/http/HttpServerRequest.js +73 -10
  214. package/dist/http/HttpServerRequest.js.map +1 -1
  215. package/dist/http/HttpStaticServer.d.ts.map +1 -1
  216. package/dist/http/HttpStaticServer.js +48 -21
  217. package/dist/http/HttpStaticServer.js.map +1 -1
  218. package/dist/http/MultipartParser/internal/contentType.js +3 -3
  219. package/dist/http/UrlParams.d.ts +3 -1
  220. package/dist/http/UrlParams.d.ts.map +1 -1
  221. package/dist/http/UrlParams.js +4 -2
  222. package/dist/http/UrlParams.js.map +1 -1
  223. package/dist/http/internal/compression.js +4 -5
  224. package/dist/http/internal/compression.js.map +1 -1
  225. package/dist/http/internal/decompression.js +3 -0
  226. package/dist/http/internal/decompression.js.map +1 -1
  227. package/dist/http/internal/httpBody.js +8 -1
  228. package/dist/http/internal/httpBody.js.map +1 -1
  229. package/dist/http/internal/urlParams.js +25 -0
  230. package/dist/http/internal/urlParams.js.map +1 -1
  231. package/dist/http-api/HttpApi.d.ts +3 -6
  232. package/dist/http-api/HttpApi.d.ts.map +1 -1
  233. package/dist/http-api/HttpApi.js +3 -6
  234. package/dist/http-api/HttpApi.js.map +1 -1
  235. package/dist/http-api/HttpApiBuilder.d.ts.map +1 -1
  236. package/dist/http-api/HttpApiBuilder.js +27 -11
  237. package/dist/http-api/HttpApiBuilder.js.map +1 -1
  238. package/dist/http-api/HttpApiClient.d.ts +77 -7
  239. package/dist/http-api/HttpApiClient.d.ts.map +1 -1
  240. package/dist/http-api/HttpApiClient.js +142 -44
  241. package/dist/http-api/HttpApiClient.js.map +1 -1
  242. package/dist/http-api/HttpApiEndpoint.d.ts +24 -7
  243. package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
  244. package/dist/http-api/HttpApiEndpoint.js +109 -27
  245. package/dist/http-api/HttpApiEndpoint.js.map +1 -1
  246. package/dist/http-api/HttpApiSchema.d.ts +76 -29
  247. package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
  248. package/dist/http-api/HttpApiSchema.js +70 -59
  249. package/dist/http-api/HttpApiSchema.js.map +1 -1
  250. package/dist/http-api/HttpApiTest.d.ts.map +1 -1
  251. package/dist/http-api/HttpApiTest.js +3 -2
  252. package/dist/http-api/HttpApiTest.js.map +1 -1
  253. package/dist/http-api/OpenApi.d.ts.map +1 -1
  254. package/dist/http-api/OpenApi.js +25 -16
  255. package/dist/http-api/OpenApi.js.map +1 -1
  256. package/dist/http-api/internal/toCodecHttpProperties.d.ts +2 -0
  257. package/dist/http-api/internal/toCodecHttpProperties.d.ts.map +1 -0
  258. package/dist/http-api/internal/toCodecHttpProperties.js +38 -0
  259. package/dist/http-api/internal/toCodecHttpProperties.js.map +1 -0
  260. package/dist/internal/arbitrary/runner.d.ts.map +1 -1
  261. package/dist/internal/arbitrary/runner.js +120 -44
  262. package/dist/internal/arbitrary/runner.js.map +1 -1
  263. package/dist/internal/core.js +2 -0
  264. package/dist/internal/core.js.map +1 -1
  265. package/dist/internal/effect.js +21 -13
  266. package/dist/internal/effect.js.map +1 -1
  267. package/dist/internal/equal.js +14 -0
  268. package/dist/internal/equal.js.map +1 -1
  269. package/dist/internal/jsonSchema.d.ts +2 -0
  270. package/dist/internal/jsonSchema.d.ts.map +1 -0
  271. package/dist/internal/jsonSchema.js +28 -0
  272. package/dist/internal/jsonSchema.js.map +1 -0
  273. package/dist/internal/matcher.js +1 -1
  274. package/dist/internal/matcher.js.map +1 -1
  275. package/dist/internal/schema/compilerRegistry.js +4 -1
  276. package/dist/internal/schema/compilerRegistry.js.map +1 -1
  277. package/dist/internal/schema/content.d.ts +2 -0
  278. package/dist/internal/schema/content.d.ts.map +1 -0
  279. package/dist/internal/schema/content.js +13 -0
  280. package/dist/internal/schema/content.js.map +1 -0
  281. package/dist/internal/schema/fromJsonSchemaDocument.js +173 -185
  282. package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
  283. package/dist/internal/schema/fromRepresentation.js +2 -1
  284. package/dist/internal/schema/fromRepresentation.js.map +1 -1
  285. package/dist/internal/schema/standardSchema.js +8 -2
  286. package/dist/internal/schema/standardSchema.js.map +1 -1
  287. package/dist/internal/schema/toCodeDocument.js +3 -3
  288. package/dist/internal/schema/toCodeDocument.js.map +1 -1
  289. package/dist/internal/schema/toCodec.js +21 -24
  290. package/dist/internal/schema/toCodec.js.map +1 -1
  291. package/dist/internal/schema/toJsonSchemaDocument.js +205 -140
  292. package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
  293. package/dist/internal/schema/toRepresentation.js +107 -129
  294. package/dist/internal/schema/toRepresentation.js.map +1 -1
  295. package/dist/internal/sql.d.ts +2 -0
  296. package/dist/internal/sql.d.ts.map +1 -0
  297. package/dist/internal/sql.js +13 -0
  298. package/dist/internal/sql.js.map +1 -0
  299. package/dist/internal/version.js +1 -1
  300. package/dist/observability/OtlpProxy.d.ts +154 -0
  301. package/dist/observability/OtlpProxy.d.ts.map +1 -0
  302. package/dist/observability/OtlpProxy.js +235 -0
  303. package/dist/observability/OtlpProxy.js.map +1 -0
  304. package/dist/observability/OtlpTracer.d.ts.map +1 -1
  305. package/dist/observability/OtlpTracer.js +4 -0
  306. package/dist/observability/OtlpTracer.js.map +1 -1
  307. package/dist/observability/index.d.ts +5 -0
  308. package/dist/observability/index.d.ts.map +1 -1
  309. package/dist/observability/index.js +5 -0
  310. package/dist/observability/index.js.map +1 -1
  311. package/dist/persistence/CircuitBreaker.d.ts +897 -0
  312. package/dist/persistence/CircuitBreaker.d.ts.map +1 -0
  313. package/dist/persistence/CircuitBreaker.js +1165 -0
  314. package/dist/persistence/CircuitBreaker.js.map +1 -0
  315. package/dist/persistence/Redis.d.ts +78 -2
  316. package/dist/persistence/Redis.d.ts.map +1 -1
  317. package/dist/persistence/Redis.js +62 -7
  318. package/dist/persistence/Redis.js.map +1 -1
  319. package/dist/persistence/index.d.ts +5 -0
  320. package/dist/persistence/index.d.ts.map +1 -1
  321. package/dist/persistence/index.js +5 -0
  322. package/dist/persistence/index.js.map +1 -1
  323. package/dist/process/ChildProcess.d.ts +30 -4
  324. package/dist/process/ChildProcess.d.ts.map +1 -1
  325. package/dist/process/ChildProcess.js.map +1 -1
  326. package/dist/process/ChildProcessSpawner.d.ts +30 -0
  327. package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
  328. package/dist/process/ChildProcessSpawner.js +5 -2
  329. package/dist/process/ChildProcessSpawner.js.map +1 -1
  330. package/dist/reactivity/AsyncResult.d.ts +1 -1
  331. package/dist/reactivity/AsyncResult.d.ts.map +1 -1
  332. package/dist/rpc/RpcClient.d.ts.map +1 -1
  333. package/dist/rpc/RpcClient.js +9 -8
  334. package/dist/rpc/RpcClient.js.map +1 -1
  335. package/dist/rpc/RpcSerialization.d.ts +14 -0
  336. package/dist/rpc/RpcSerialization.d.ts.map +1 -1
  337. package/dist/rpc/RpcSerialization.js +20 -8
  338. package/dist/rpc/RpcSerialization.js.map +1 -1
  339. package/dist/rpc/RpcServer.d.ts.map +1 -1
  340. package/dist/rpc/RpcServer.js +11 -1
  341. package/dist/rpc/RpcServer.js.map +1 -1
  342. package/dist/rpc/RpcTest.d.ts +1 -0
  343. package/dist/rpc/RpcTest.d.ts.map +1 -1
  344. package/dist/rpc/RpcTest.js +1 -0
  345. package/dist/rpc/RpcTest.js.map +1 -1
  346. package/dist/sql/Migrator.d.ts +2 -1
  347. package/dist/sql/Migrator.d.ts.map +1 -1
  348. package/dist/sql/Migrator.js +11 -8
  349. package/dist/sql/Migrator.js.map +1 -1
  350. package/dist/sql/SqlClient.d.ts +9 -4
  351. package/dist/sql/SqlClient.d.ts.map +1 -1
  352. package/dist/sql/SqlClient.js +8 -1
  353. package/dist/sql/SqlClient.js.map +1 -1
  354. package/dist/sql/SqlResolver.d.ts +4 -0
  355. package/dist/sql/SqlResolver.d.ts.map +1 -1
  356. package/dist/sql/SqlResolver.js +18 -4
  357. package/dist/sql/SqlResolver.js.map +1 -1
  358. package/dist/sql/Statement.d.ts +7 -0
  359. package/dist/sql/Statement.d.ts.map +1 -1
  360. package/dist/sql/Statement.js +21 -2
  361. package/dist/sql/Statement.js.map +1 -1
  362. package/dist/workflow/DurableDeferred.d.ts.map +1 -1
  363. package/dist/workflow/DurableDeferred.js +21 -2
  364. package/dist/workflow/DurableDeferred.js.map +1 -1
  365. package/package.json +1 -1
  366. package/src/Arbitrary.ts +10 -2
  367. package/src/Channel.ts +47 -18
  368. package/src/Data.ts +60 -265
  369. package/src/Effect.ts +1 -1
  370. package/src/Equal.ts +8 -1
  371. package/src/Exit.ts +3 -3
  372. package/src/Formatter.ts +28 -13
  373. package/src/Hash.ts +4 -1
  374. package/src/JsonPatch.ts +4 -0
  375. package/src/JsonSchema.ts +12 -40
  376. package/src/Metric.ts +3 -3
  377. package/src/MutableList.ts +7 -5
  378. package/src/MutableRef.ts +8 -1
  379. package/src/PartitionedSemaphore.ts +24 -13
  380. package/src/Pool.ts +109 -37
  381. package/src/PubSub.ts +5 -6
  382. package/src/Ref.ts +8 -0
  383. package/src/Schedule.ts +1 -1
  384. package/src/Schema.ts +48 -25
  385. package/src/SchemaAST.ts +20 -20
  386. package/src/SchemaParser.ts +51 -18
  387. package/src/SchemaRepresentation.ts +31 -34
  388. package/src/SchemaTransformation.ts +9 -2
  389. package/src/Semaphore.ts +67 -40
  390. package/src/Sink.ts +15 -2
  391. package/src/Stream.ts +33 -16
  392. package/src/String.ts +3 -0
  393. package/src/Tracer.ts +15 -1
  394. package/src/ai/LanguageModel.ts +9 -0
  395. package/src/ai/McpServer.ts +14 -13
  396. package/src/ai/Prompt.ts +65 -0
  397. package/src/ai/Response.ts +34 -9
  398. package/src/ai/Tool.ts +38 -2
  399. package/src/ai/Toolkit.ts +4 -1
  400. package/src/cli/Argument.ts +15 -0
  401. package/src/cli/CliError.ts +90 -3
  402. package/src/cli/CliOutput.ts +183 -6
  403. package/src/cli/Command.ts +53 -41
  404. package/src/cli/Completions.ts +51 -0
  405. package/src/cli/Flag.ts +15 -0
  406. package/src/cli/GlobalFlag.ts +6 -7
  407. package/src/cli/Param.ts +29 -6
  408. package/src/cli/TerminalCapabilities.ts +6 -3
  409. package/src/cli/internal/completions/bash.ts +79 -29
  410. package/src/cluster/ClusterWorkflowEngine.ts +46 -16
  411. package/src/cluster/MessageStorage.ts +19 -14
  412. package/src/cluster/Sharding.ts +83 -21
  413. package/src/cluster/ShardingConfig.ts +5 -0
  414. package/src/cluster/Snowflake.ts +3 -7
  415. package/src/cluster/SqlRunnerStorage.ts +110 -47
  416. package/src/cluster/internal/entityManager.ts +75 -22
  417. package/src/devtools/DevToolsClient.ts +2 -0
  418. package/src/encoding/Base64.ts +38 -0
  419. package/src/encoding/Sse.ts +4 -3
  420. package/src/encoding/Toml.ts +33 -16
  421. package/src/eventlog/SqlEventJournal.ts +68 -45
  422. package/src/eventlog/internal/conflicts.ts +0 -4
  423. package/src/http/Cookies.ts +10 -11
  424. package/src/http/HttpClient.ts +547 -7
  425. package/src/http/HttpClientError.ts +35 -1
  426. package/src/http/HttpClientRequest.ts +9 -1
  427. package/src/http/HttpMiddleware.ts +15 -18
  428. package/src/http/HttpRouter.ts +2 -1
  429. package/src/http/HttpServerError.ts +2 -2
  430. package/src/http/HttpServerRequest.ts +102 -16
  431. package/src/http/HttpStaticServer.ts +51 -22
  432. package/src/http/MultipartParser/internal/contentType.ts +3 -3
  433. package/src/http/UrlParams.ts +6 -1
  434. package/src/http/internal/compression.ts +4 -5
  435. package/src/http/internal/decompression.ts +6 -0
  436. package/src/http/internal/httpBody.ts +10 -2
  437. package/src/http/internal/urlParams.ts +29 -0
  438. package/src/http-api/HttpApi.ts +3 -6
  439. package/src/http-api/HttpApiBuilder.ts +45 -15
  440. package/src/http-api/HttpApiClient.ts +218 -72
  441. package/src/http-api/HttpApiEndpoint.ts +121 -30
  442. package/src/http-api/HttpApiSchema.ts +141 -48
  443. package/src/http-api/HttpApiTest.ts +3 -2
  444. package/src/http-api/OpenApi.ts +20 -17
  445. package/src/http-api/internal/toCodecHttpProperties.ts +56 -0
  446. package/src/internal/arbitrary/runner.ts +133 -36
  447. package/src/internal/core.ts +2 -0
  448. package/src/internal/effect.ts +24 -16
  449. package/src/internal/equal.ts +17 -0
  450. package/src/internal/jsonSchema.ts +27 -0
  451. package/src/internal/matcher.ts +1 -1
  452. package/src/internal/schema/compilerRegistry.ts +6 -1
  453. package/src/internal/schema/content.ts +18 -0
  454. package/src/internal/schema/fromJsonSchemaDocument.ts +228 -190
  455. package/src/internal/schema/fromRepresentation.ts +2 -1
  456. package/src/internal/schema/standardSchema.ts +2 -2
  457. package/src/internal/schema/toCodeDocument.ts +4 -4
  458. package/src/internal/schema/toCodec.ts +26 -22
  459. package/src/internal/schema/toJsonSchemaDocument.ts +189 -167
  460. package/src/internal/schema/toRepresentation.ts +122 -140
  461. package/src/internal/sql.ts +14 -0
  462. package/src/internal/version.ts +1 -1
  463. package/src/observability/OtlpProxy.ts +314 -0
  464. package/src/observability/OtlpTracer.ts +4 -0
  465. package/src/observability/index.ts +6 -0
  466. package/src/persistence/CircuitBreaker.ts +1678 -0
  467. package/src/persistence/Redis.ts +129 -8
  468. package/src/persistence/index.ts +6 -0
  469. package/src/process/ChildProcess.ts +30 -4
  470. package/src/process/ChildProcessSpawner.ts +41 -2
  471. package/src/reactivity/AsyncResult.ts +1 -1
  472. package/src/rpc/RpcClient.ts +13 -10
  473. package/src/rpc/RpcSerialization.ts +32 -9
  474. package/src/rpc/RpcServer.ts +16 -1
  475. package/src/rpc/RpcTest.ts +3 -0
  476. package/src/sql/Migrator.ts +12 -7
  477. package/src/sql/SqlClient.ts +11 -4
  478. package/src/sql/SqlResolver.ts +23 -9
  479. package/src/sql/Statement.ts +30 -2
  480. package/src/workflow/DurableDeferred.ts +23 -6
@@ -0,0 +1,314 @@
1
+ /**
2
+ * Proxies OTLP HTTP exports from browsers through an application's own HTTP
3
+ * server to an OpenTelemetry Collector or vendor endpoint.
4
+ *
5
+ * A browser exporting OTLP directly would need the vendor credentials in its
6
+ * bundle and a cross-origin collector. `OtlpProxy` mounts `POST /v1/traces`,
7
+ * `/v1/logs`, and `/v1/metrics` on an `HttpRouter`, adds the configured
8
+ * headers on the server, and forwards the payload unchanged. The browser can
9
+ * then use `Otlp.layer({ baseUrl: "/otlp" })` against its own origin.
10
+ *
11
+ * **Details**
12
+ *
13
+ * - The upstream URL comes only from configuration. The request path and query
14
+ * string never reach it.
15
+ * - Only `application/json` and `application/x-protobuf` bodies are accepted;
16
+ * other content types get `415`. Payloads are not decoded or validated.
17
+ * - Only `content-type` and `content-encoding` are forwarded from the client.
18
+ * Configured `headers` are applied last, so a client cannot override them.
19
+ * - Bodies are buffered up to `maxBodySize` and rejected with `413` beyond it.
20
+ * - Upstream requests send `accept-encoding: identity`, and the client's
21
+ * `accept-encoding` is never forwarded.
22
+ * - The upstream status and body are returned with only the `content-type` and
23
+ * `retry-after` headers, so client SDK back-off keeps working and upstream
24
+ * cookies are dropped. Transport failures return `502` and timeouts `504`.
25
+ * The proxy does not retry or batch.
26
+ *
27
+ * **Gotchas**
28
+ *
29
+ * - Anyone who can reach the routes can send telemetry with the configured
30
+ * credentials. Compose authentication, CORS, and rate limiting around the
31
+ * layer as the application requires.
32
+ * - The response body is returned as the `HttpClient` provides it, without a
33
+ * `content-encoding` header. Setting `accept-encoding` in `headers` can
34
+ * invalidate this, as can an upstream that compresses despite
35
+ * `accept-encoding: identity`: clients that do not decode responses, such as
36
+ * `NodeHttpClient.makeUndici`, then return compressed bytes.
37
+ * - Requests to the proxy routes are traced by the HTTP server like any other
38
+ * route. To suppress those spans, provide `HttpMiddleware.TracerDisabledWhen`
39
+ * with a predicate matching the routes, or use
40
+ * `HttpMiddleware.layerTracerDisabledForUrls`, which matches exact URLs, so
41
+ * list each route.
42
+ *
43
+ * @stability unstable
44
+ * @since 4.0.7
45
+ */
46
+ import * as ByteSize from "../ByteSize.ts"
47
+ import * as Duration from "../Duration.ts"
48
+ import * as Effect from "../Effect.ts"
49
+ import { constTrue } from "../Function.ts"
50
+ import * as Headers from "../http/Headers.ts"
51
+ import * as HttpClient from "../http/HttpClient.ts"
52
+ import * as HttpClientRequest from "../http/HttpClientRequest.ts"
53
+ import type * as HttpClientResponse from "../http/HttpClientResponse.ts"
54
+ import * as HttpIncomingMessage from "../http/HttpIncomingMessage.ts"
55
+ import * as HttpRouter from "../http/HttpRouter.ts"
56
+ import * as HttpServerRequest from "../http/HttpServerRequest.ts"
57
+ import * as HttpServerRespondable from "../http/HttpServerRespondable.ts"
58
+ import * as HttpServerResponse from "../http/HttpServerResponse.ts"
59
+ import * as Layer from "../Layer.ts"
60
+ import * as OtlpEnv from "./internal/otlpEnv.ts"
61
+
62
+ /**
63
+ * OTLP signal type served by the proxy.
64
+ *
65
+ * @stability unstable
66
+ * @category models
67
+ * @since 4.0.7
68
+ */
69
+ export type Signal = "traces" | "logs" | "metrics"
70
+
71
+ /**
72
+ * Creates a record of request handlers, one for each OTLP signal, that forward
73
+ * to the configured upstream.
74
+ *
75
+ * **When to use**
76
+ *
77
+ * Use to mount the proxy on routes or a router other than the ones `layer`
78
+ * registers, such as an `HttpApi` endpoint.
79
+ *
80
+ * **Details**
81
+ *
82
+ * Each signal is sent to `urls[signal]` when set, otherwise to
83
+ * `/v1/<signal>` below `baseUrl`. `maxBodySize` defaults to the
84
+ * `HttpIncomingMessage.MaxBodySize` reference, then 10 MiB. `timeout` defaults
85
+ * to 10 seconds.
86
+ *
87
+ * @see {@link layer} for mounting the handlers on an `HttpRouter`.
88
+ * @stability unstable
89
+ * @category constructors
90
+ * @since 4.0.7
91
+ */
92
+ export const make = (options: {
93
+ readonly baseUrl: string
94
+ readonly urls?: Partial<Record<Signal, string>> | undefined
95
+ readonly headers?: Headers.Input | undefined
96
+ readonly maxBodySize?: ByteSize.Input | undefined
97
+ readonly timeout?: Duration.Input | undefined
98
+ }): Effect.Effect<
99
+ Record<Signal, Effect.Effect<HttpServerResponse.HttpServerResponse, never, HttpServerRequest.HttpServerRequest>>,
100
+ never,
101
+ HttpClient.HttpClient
102
+ > =>
103
+ Effect.gen(function*() {
104
+ const client = yield* HttpClient.HttpClient
105
+ const base = HttpClientRequest.post(options.baseUrl)
106
+ const handlers = {} as Record<Signal, Handler>
107
+ for (const signal of allSignals) {
108
+ handlers[signal] = makeHandler(client, {
109
+ ...options,
110
+ url: options.urls?.[signal] ?? HttpClientRequest.appendUrl(base, `/v1/${signal}`).url
111
+ })
112
+ }
113
+ return handlers
114
+ })
115
+
116
+ /**
117
+ * Creates a layer that mounts the OTLP proxy routes on an `HttpRouter`.
118
+ *
119
+ * **Details**
120
+ *
121
+ * Registers `POST <prefix>/v1/<signal>` for each of `signals`, which defaults
122
+ * to traces, logs, and metrics. Without a `prefix` the routes are mounted at
123
+ * the router root.
124
+ *
125
+ * **Example** (Proxying browser telemetry to a vendor)
126
+ *
127
+ * ```ts import.meta.vitest
128
+ * import { Layer } from "effect"
129
+ * import { FetchHttpClient } from "effect/http"
130
+ * import { OtlpProxy } from "effect/observability"
131
+ *
132
+ * const OtlpProxyLayer = OtlpProxy.layer({
133
+ * baseUrl: "https://otlp.vendor.example",
134
+ * headers: { authorization: "Bearer server-side-key" },
135
+ * prefix: "/otlp"
136
+ * }).pipe(Layer.provide(FetchHttpClient.layer))
137
+ *
138
+ * Layer.isLayer(OtlpProxyLayer) // => true
139
+ * ```
140
+ *
141
+ * @see {@link layerFromConfig} for reading the upstream from OpenTelemetry environment variables.
142
+ * @stability unstable
143
+ * @category layers
144
+ * @since 4.0.7
145
+ */
146
+ export const layer = (options: {
147
+ readonly baseUrl: string
148
+ readonly urls?: Partial<Record<Signal, string>> | undefined
149
+ readonly headers?: Headers.Input | undefined
150
+ readonly maxBodySize?: ByteSize.Input | undefined
151
+ readonly timeout?: Duration.Input | undefined
152
+ readonly prefix?: string | undefined
153
+ readonly signals?: ReadonlyArray<Signal> | undefined
154
+ }): Layer.Layer<never, never, HttpRouter.HttpRouter | HttpClient.HttpClient> =>
155
+ Layer.effectDiscard(Effect.gen(function*() {
156
+ const handlers = yield* make(options)
157
+ yield* addRoutes(
158
+ options.prefix,
159
+ (options.signals ?? allSignals).map((signal) => [signal, handlers[signal]] as const)
160
+ )
161
+ }))
162
+
163
+ /**
164
+ * Creates a layer that mounts the OTLP proxy routes using the upstream from
165
+ * OpenTelemetry environment configuration.
166
+ *
167
+ * **Details**
168
+ *
169
+ * Each signal is sent to `OTEL_EXPORTER_OTLP_<SIGNAL>_ENDPOINT`, falling back
170
+ * to `/v1/<signal>` below `OTEL_EXPORTER_OTLP_ENDPOINT`, with headers from
171
+ * `OTEL_EXPORTER_OTLP_<SIGNAL>_HEADERS` or `OTEL_EXPORTER_OTLP_HEADERS`. The
172
+ * `headers` option replaces the configured headers. Signals without an
173
+ * endpoint get no route.
174
+ *
175
+ * @see {@link layer} for configuring the upstream directly.
176
+ * @stability unstable
177
+ * @category layers
178
+ * @since 4.0.7
179
+ */
180
+ export const layerFromConfig = (options?: {
181
+ readonly headers?: Headers.Input | undefined
182
+ readonly maxBodySize?: ByteSize.Input | undefined
183
+ readonly timeout?: Duration.Input | undefined
184
+ readonly prefix?: string | undefined
185
+ readonly signals?: ReadonlyArray<Signal> | undefined
186
+ }): Layer.Layer<never, never, HttpRouter.HttpRouter | HttpClient.HttpClient> =>
187
+ Layer.effectDiscard(
188
+ Effect.gen(function*() {
189
+ const client = yield* HttpClient.HttpClient
190
+ const routes: Array<readonly [Signal, Handler]> = []
191
+ for (const signal of options?.signals ?? allSignals) {
192
+ const envSignal = signal.toUpperCase() as OtlpEnv.Signal
193
+ const url = yield* OtlpEnv.endpoint(envSignal)
194
+ if (url === undefined) continue
195
+ routes.push([
196
+ signal,
197
+ makeHandler(client, {
198
+ ...options,
199
+ url: url.toString(),
200
+ headers: options?.headers ?? (yield* OtlpEnv.headers(envSignal))
201
+ })
202
+ ])
203
+ }
204
+ yield* addRoutes(options?.prefix, routes)
205
+ }).pipe(Effect.orDie)
206
+ )
207
+
208
+ // internal
209
+
210
+ const allSignals: ReadonlyArray<Signal> = ["traces", "logs", "metrics"]
211
+
212
+ const contentTypes = new Set(["application/json", "application/x-protobuf"])
213
+
214
+ const defaultMaxBodySize = ByteSize.mebibytes(10)
215
+
216
+ type Handler = Effect.Effect<HttpServerResponse.HttpServerResponse, never, HttpServerRequest.HttpServerRequest>
217
+
218
+ const addRoutes = Effect.fnUntraced(function*(
219
+ prefix: string | undefined,
220
+ routes: Iterable<readonly [signal: Signal, handler: Handler]>
221
+ ) {
222
+ const router = yield* HttpRouter.HttpRouter
223
+ const target = prefix === undefined ? router : router.prefixed(prefix)
224
+ for (const [signal, handler] of routes) {
225
+ yield* target.add("POST", `/v1/${signal}`, handler)
226
+ }
227
+ })
228
+
229
+ const makeHandler = (client: HttpClient.HttpClient, options: {
230
+ readonly url: string
231
+ readonly headers?: Headers.Input | undefined
232
+ readonly maxBodySize?: ByteSize.Input | undefined
233
+ readonly timeout?: Duration.Input | undefined
234
+ }): Handler => {
235
+ // Skips the outbound span and trace headers in one step.
236
+ const upstream = client.pipe(
237
+ HttpClient.transformResponse(Effect.provideService(HttpClient.TracerDisabledWhen, constTrue))
238
+ )
239
+ const headers = Headers.fromInput(options.headers)
240
+ const maxBodySize = options.maxBodySize === undefined ? undefined : ByteSize.fromInputUnsafe(options.maxBodySize)
241
+ const timeout = options.timeout ?? Duration.seconds(10)
242
+
243
+ return Effect.gen(function*() {
244
+ const request = yield* HttpServerRequest.HttpServerRequest
245
+ const contentType = request.headers["content-type"]
246
+ if (!isSupportedContentType(contentType)) {
247
+ return unsupportedMediaType
248
+ }
249
+ const limit = maxBodySize ?? (yield* HttpIncomingMessage.MaxBodySize) ?? defaultMaxBodySize
250
+ // Node's reader only counts bytes as they arrive, and would send
251
+ // 100 Continue first, so reject an over-limit declared length up front.
252
+ const contentLength = parseContentLength(request.headers["content-length"])
253
+ if (contentLength !== undefined && contentLength > Number(limit)) {
254
+ return contentTooLarge
255
+ }
256
+ const body = yield* request.arrayBuffer.pipe(
257
+ Effect.provideService(HttpIncomingMessage.MaxBodySize, limit),
258
+ Effect.catch(HttpServerRespondable.toResponse)
259
+ )
260
+ if (HttpServerResponse.isHttpServerResponse(body)) {
261
+ return body
262
+ }
263
+
264
+ let outbound = HttpClientRequest.bodyUint8Array(
265
+ HttpClientRequest.post(options.url),
266
+ new Uint8Array(body),
267
+ contentType
268
+ )
269
+ const contentEncoding = request.headers["content-encoding"]
270
+ if (contentEncoding !== undefined) {
271
+ outbound = HttpClientRequest.setHeader(outbound, "content-encoding", contentEncoding)
272
+ }
273
+ // The response is returned without content-encoding, so request it
274
+ // uncompressed. Configured headers can still override this.
275
+ outbound = HttpClientRequest.setHeader(outbound, "accept-encoding", "identity")
276
+ return yield* upstream.execute(HttpClientRequest.setHeaders(outbound, headers)).pipe(
277
+ Effect.flatMap((response) => Effect.map(response.arrayBuffer, (body) => toServerResponse(response, body))),
278
+ Effect.timeout(timeout),
279
+ Effect.catchTags({
280
+ TimeoutError: () => Effect.succeed(gatewayTimeout),
281
+ HttpClientError: () => Effect.succeed(badGateway)
282
+ })
283
+ )
284
+ })
285
+ }
286
+
287
+ const unsupportedMediaType = HttpServerResponse.empty({ status: 415 })
288
+ const contentTooLarge = HttpServerResponse.empty({ status: 413 })
289
+ const badGateway = HttpServerResponse.empty({ status: 502 })
290
+ const gatewayTimeout = HttpServerResponse.empty({ status: 504 })
291
+
292
+ const isSupportedContentType = (contentType: string | undefined): contentType is string =>
293
+ contentType !== undefined &&
294
+ (contentTypes.has(contentType) || contentTypes.has(contentType.split(";")[0].trim().toLowerCase()))
295
+
296
+ const parseContentLength = (contentLength: string | undefined): number | undefined =>
297
+ contentLength !== undefined && /^\d+$/.test(contentLength) ? Number(contentLength) : undefined
298
+
299
+ const toServerResponse = (
300
+ response: HttpClientResponse.HttpClientResponse,
301
+ body: ArrayBuffer
302
+ ): HttpServerResponse.HttpServerResponse => {
303
+ const headers: Record<string, string> = {}
304
+ if (response.headers["retry-after"] !== undefined) {
305
+ headers["retry-after"] = response.headers["retry-after"]
306
+ }
307
+ return body.byteLength === 0
308
+ ? HttpServerResponse.empty({ status: response.status, headers })
309
+ : HttpServerResponse.uint8Array(new Uint8Array(body), {
310
+ status: response.status,
311
+ headers,
312
+ contentType: response.headers["content-type"]
313
+ })
314
+ }
@@ -281,6 +281,7 @@ class SpanImpl implements Tracer.Span {
281
281
  }
282
282
 
283
283
  end(endTime: bigint, exit: Exit.Exit<unknown, unknown>): void {
284
+ if (this.status._tag === "Ended") return
284
285
  this.status = {
285
286
  _tag: "Ended",
286
287
  startTime: this.status.startTime,
@@ -291,14 +292,17 @@ class SpanImpl implements Tracer.Span {
291
292
  }
292
293
 
293
294
  attribute(key: string, value: unknown): void {
295
+ if (this.status._tag === "Ended") return
294
296
  this.attributes.set(key, value)
295
297
  }
296
298
 
297
299
  event(name: string, startTime: bigint, attributes?: Record<string, unknown>): void {
300
+ if (this.status._tag === "Ended") return
298
301
  this.events.push([name, startTime, attributes])
299
302
  }
300
303
 
301
304
  addLinks(links: ReadonlyArray<Tracer.SpanLink>): void {
305
+ if (this.status._tag === "Ended") return
302
306
  // oxlint-disable-next-line no-restricted-syntax
303
307
  this.links.push(...links)
304
308
  }
@@ -29,6 +29,12 @@ export * as OtlpLogger from "./OtlpLogger.ts"
29
29
  */
30
30
  export * as OtlpMetrics from "./OtlpMetrics.ts"
31
31
 
32
+ /**
33
+ * @stability unstable
34
+ * @since 4.0.7
35
+ */
36
+ export * as OtlpProxy from "./OtlpProxy.ts"
37
+
32
38
  /**
33
39
  * @stability unstable
34
40
  * @since 4.0.0