effect 4.0.2 → 4.0.4

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 (389) hide show
  1. package/AGENTS.md +24 -0
  2. package/CLAUDE.md +24 -0
  3. package/ai-docs/package.json +2 -2
  4. package/ai-docs/src/52_graphql/10_basics.ts +111 -0
  5. package/ai-docs/src/52_graphql/20_testing.ts +45 -0
  6. package/ai-docs/src/52_graphql/30_batching.ts +116 -0
  7. package/ai-docs/src/52_graphql/40_aliased-batching.ts +122 -0
  8. package/ai-docs/src/52_graphql/50_errors-and-retries.ts +74 -0
  9. package/ai-docs/src/52_graphql/index.md +6 -0
  10. package/dist/Context.d.ts.map +1 -1
  11. package/dist/Context.js +12 -3
  12. package/dist/Context.js.map +1 -1
  13. package/dist/Crypto.d.ts +33 -5
  14. package/dist/Crypto.d.ts.map +1 -1
  15. package/dist/Crypto.js +8 -2
  16. package/dist/Crypto.js.map +1 -1
  17. package/dist/DateTime.d.ts +9 -6
  18. package/dist/DateTime.d.ts.map +1 -1
  19. package/dist/DateTime.js +9 -6
  20. package/dist/DateTime.js.map +1 -1
  21. package/dist/Duration.d.ts +6 -6
  22. package/dist/Duration.d.ts.map +1 -1
  23. package/dist/Duration.js +27 -8
  24. package/dist/Duration.js.map +1 -1
  25. package/dist/FileSystem.d.ts +44 -2
  26. package/dist/FileSystem.d.ts.map +1 -1
  27. package/dist/FileSystem.js.map +1 -1
  28. package/dist/RequestResolver.d.ts.map +1 -1
  29. package/dist/RequestResolver.js +4 -10
  30. package/dist/RequestResolver.js.map +1 -1
  31. package/dist/Scheduler.d.ts +9 -0
  32. package/dist/Scheduler.d.ts.map +1 -1
  33. package/dist/Scheduler.js +9 -0
  34. package/dist/Scheduler.js.map +1 -1
  35. package/dist/Schema.d.ts +481 -1
  36. package/dist/Schema.d.ts.map +1 -1
  37. package/dist/Schema.js +362 -4
  38. package/dist/Schema.js.map +1 -1
  39. package/dist/SchemaGetter.d.ts +4 -0
  40. package/dist/SchemaGetter.d.ts.map +1 -1
  41. package/dist/SchemaGetter.js +52 -33
  42. package/dist/SchemaGetter.js.map +1 -1
  43. package/dist/Sink.d.ts.map +1 -1
  44. package/dist/Sink.js +38 -17
  45. package/dist/Sink.js.map +1 -1
  46. package/dist/Stdio.d.ts +7 -1
  47. package/dist/Stdio.d.ts.map +1 -1
  48. package/dist/Stdio.js +1 -0
  49. package/dist/Stdio.js.map +1 -1
  50. package/dist/Stream.d.ts +22 -11
  51. package/dist/Stream.d.ts.map +1 -1
  52. package/dist/Stream.js +21 -6
  53. package/dist/Stream.js.map +1 -1
  54. package/dist/Utils.js +8 -3
  55. package/dist/Utils.js.map +1 -1
  56. package/dist/ai/AnthropicStructuredOutput.js +0 -2
  57. package/dist/ai/AnthropicStructuredOutput.js.map +1 -1
  58. package/dist/ai/Chat.d.ts +2 -2
  59. package/dist/ai/Chat.d.ts.map +1 -1
  60. package/dist/ai/LanguageModel.d.ts +38 -7
  61. package/dist/ai/LanguageModel.d.ts.map +1 -1
  62. package/dist/ai/LanguageModel.js +25 -7
  63. package/dist/ai/LanguageModel.js.map +1 -1
  64. package/dist/ai/McpServer.d.ts +61 -0
  65. package/dist/ai/McpServer.d.ts.map +1 -1
  66. package/dist/ai/McpServer.js +196 -44
  67. package/dist/ai/McpServer.js.map +1 -1
  68. package/dist/ai/Prompt.d.ts.map +1 -1
  69. package/dist/ai/Prompt.js +28 -5
  70. package/dist/ai/Prompt.js.map +1 -1
  71. package/dist/ai/Response.d.ts +4 -3
  72. package/dist/ai/Response.d.ts.map +1 -1
  73. package/dist/ai/Response.js.map +1 -1
  74. package/dist/ai/internal/mcpProtocol/v2026_07_28.js +5 -0
  75. package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
  76. package/dist/ai/internal/mcpProtocol.js.map +1 -1
  77. package/dist/ai/internal/mcpRuntime.js +1 -0
  78. package/dist/ai/internal/mcpRuntime.js.map +1 -1
  79. package/dist/cli/CliOutput.d.ts +27 -0
  80. package/dist/cli/CliOutput.d.ts.map +1 -1
  81. package/dist/cli/CliOutput.js +33 -10
  82. package/dist/cli/CliOutput.js.map +1 -1
  83. package/dist/cli/Command.d.ts.map +1 -1
  84. package/dist/cli/Command.js +6 -3
  85. package/dist/cli/Command.js.map +1 -1
  86. package/dist/cli/Completions.d.ts +3 -3
  87. package/dist/cli/Completions.d.ts.map +1 -1
  88. package/dist/cli/Completions.js +8 -5
  89. package/dist/cli/Completions.js.map +1 -1
  90. package/dist/cli/GlobalFlag.d.ts +5 -4
  91. package/dist/cli/GlobalFlag.d.ts.map +1 -1
  92. package/dist/cli/GlobalFlag.js +3 -3
  93. package/dist/cli/GlobalFlag.js.map +1 -1
  94. package/dist/cli/Prompt.d.ts +17 -1
  95. package/dist/cli/Prompt.d.ts.map +1 -1
  96. package/dist/cli/Prompt.js +119 -114
  97. package/dist/cli/Prompt.js.map +1 -1
  98. package/dist/cli/internal/ansi.d.ts +0 -1
  99. package/dist/cli/internal/ansi.d.ts.map +1 -1
  100. package/dist/cli/internal/ansi.js +20 -3
  101. package/dist/cli/internal/ansi.js.map +1 -1
  102. package/dist/cli/internal/completions/powershell.d.ts +2 -0
  103. package/dist/cli/internal/completions/powershell.d.ts.map +1 -0
  104. package/dist/cli/internal/completions/powershell.js +273 -0
  105. package/dist/cli/internal/completions/powershell.js.map +1 -0
  106. package/dist/cli/internal/completions/zsh.js +3 -2
  107. package/dist/cli/internal/completions/zsh.js.map +1 -1
  108. package/dist/cli/internal/wizard.d.ts +3 -3
  109. package/dist/cli/internal/wizard.d.ts.map +1 -1
  110. package/dist/cli/internal/wizard.js +21 -18
  111. package/dist/cli/internal/wizard.js.map +1 -1
  112. package/dist/cluster/ClusterSchema.d.ts +28 -0
  113. package/dist/cluster/ClusterSchema.d.ts.map +1 -1
  114. package/dist/cluster/ClusterSchema.js +30 -0
  115. package/dist/cluster/ClusterSchema.js.map +1 -1
  116. package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  117. package/dist/cluster/ClusterWorkflowEngine.js +56 -26
  118. package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
  119. package/dist/cluster/MessageStorage.d.ts +18 -3
  120. package/dist/cluster/MessageStorage.d.ts.map +1 -1
  121. package/dist/cluster/MessageStorage.js +31 -11
  122. package/dist/cluster/MessageStorage.js.map +1 -1
  123. package/dist/cluster/Runners.d.ts.map +1 -1
  124. package/dist/cluster/Runners.js +8 -2
  125. package/dist/cluster/Runners.js.map +1 -1
  126. package/dist/cluster/Sharding.d.ts.map +1 -1
  127. package/dist/cluster/Sharding.js +187 -66
  128. package/dist/cluster/Sharding.js.map +1 -1
  129. package/dist/cluster/SqlMessageStorage.d.ts +59 -19
  130. package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
  131. package/dist/cluster/SqlMessageStorage.js +84 -55
  132. package/dist/cluster/SqlMessageStorage.js.map +1 -1
  133. package/dist/cluster/SqlRunnerStorage.d.ts +68 -19
  134. package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
  135. package/dist/cluster/SqlRunnerStorage.js +191 -113
  136. package/dist/cluster/SqlRunnerStorage.js.map +1 -1
  137. package/dist/cluster/internal/entityManager.js +104 -37
  138. package/dist/cluster/internal/entityManager.js.map +1 -1
  139. package/dist/encoding/Sse.d.ts +6 -0
  140. package/dist/encoding/Sse.d.ts.map +1 -1
  141. package/dist/encoding/Sse.js +62 -70
  142. package/dist/encoding/Sse.js.map +1 -1
  143. package/dist/graphql/GraphQL.d.ts +349 -0
  144. package/dist/graphql/GraphQL.d.ts.map +1 -0
  145. package/dist/graphql/GraphQL.js +207 -0
  146. package/dist/graphql/GraphQL.js.map +1 -0
  147. package/dist/graphql/GraphQLClient.d.ts +562 -0
  148. package/dist/graphql/GraphQLClient.d.ts.map +1 -0
  149. package/dist/graphql/GraphQLClient.js +498 -0
  150. package/dist/graphql/GraphQLClient.js.map +1 -0
  151. package/dist/graphql/GraphQLClientError.d.ts +445 -0
  152. package/dist/graphql/GraphQLClientError.d.ts.map +1 -0
  153. package/dist/graphql/GraphQLClientError.js +479 -0
  154. package/dist/graphql/GraphQLClientError.js.map +1 -0
  155. package/dist/graphql/GraphQLGroup.d.ts +118 -0
  156. package/dist/graphql/GraphQLGroup.d.ts.map +1 -0
  157. package/dist/graphql/GraphQLGroup.js +109 -0
  158. package/dist/graphql/GraphQLGroup.js.map +1 -0
  159. package/dist/graphql/GraphQLMiddleware.d.ts +249 -0
  160. package/dist/graphql/GraphQLMiddleware.d.ts.map +1 -0
  161. package/dist/graphql/GraphQLMiddleware.js +130 -0
  162. package/dist/graphql/GraphQLMiddleware.js.map +1 -0
  163. package/dist/graphql/GraphQLProtocol.d.ts +731 -0
  164. package/dist/graphql/GraphQLProtocol.d.ts.map +1 -0
  165. package/dist/graphql/GraphQLProtocol.js +719 -0
  166. package/dist/graphql/GraphQLProtocol.js.map +1 -0
  167. package/dist/graphql/GraphQLResolver.d.ts +453 -0
  168. package/dist/graphql/GraphQLResolver.d.ts.map +1 -0
  169. package/dist/graphql/GraphQLResolver.js +552 -0
  170. package/dist/graphql/GraphQLResolver.js.map +1 -0
  171. package/dist/graphql/index.d.ts +40 -0
  172. package/dist/graphql/index.d.ts.map +1 -0
  173. package/dist/graphql/index.js +41 -0
  174. package/dist/graphql/index.js.map +1 -0
  175. package/dist/http/FindMyWay/internal/router.js +3 -6
  176. package/dist/http/FindMyWay/internal/router.js.map +1 -1
  177. package/dist/http/HttpClient.d.ts +21 -0
  178. package/dist/http/HttpClient.d.ts.map +1 -1
  179. package/dist/http/HttpClient.js +63 -12
  180. package/dist/http/HttpClient.js.map +1 -1
  181. package/dist/http/HttpEffect.d.ts.map +1 -1
  182. package/dist/http/HttpEffect.js +14 -7
  183. package/dist/http/HttpEffect.js.map +1 -1
  184. package/dist/http/HttpMiddleware.d.ts.map +1 -1
  185. package/dist/http/HttpMiddleware.js +31 -32
  186. package/dist/http/HttpMiddleware.js.map +1 -1
  187. package/dist/http/HttpRouter.d.ts +35 -0
  188. package/dist/http/HttpRouter.d.ts.map +1 -1
  189. package/dist/http/HttpRouter.js +35 -0
  190. package/dist/http/HttpRouter.js.map +1 -1
  191. package/dist/http/HttpServerResponse.d.ts +8 -6
  192. package/dist/http/HttpServerResponse.d.ts.map +1 -1
  193. package/dist/http/HttpServerResponse.js +27 -16
  194. package/dist/http/HttpServerResponse.js.map +1 -1
  195. package/dist/http/HttpTraceContext.d.ts.map +1 -1
  196. package/dist/http/HttpTraceContext.js +4 -2
  197. package/dist/http/HttpTraceContext.js.map +1 -1
  198. package/dist/http/Multipart.d.ts.map +1 -1
  199. package/dist/http/Multipart.js +15 -1
  200. package/dist/http/Multipart.js.map +1 -1
  201. package/dist/http-api/HttpApiScalar.d.ts +5 -0
  202. package/dist/http-api/HttpApiScalar.d.ts.map +1 -1
  203. package/dist/http-api/HttpApiScalar.js.map +1 -1
  204. package/dist/internal/dateTime.js +40 -35
  205. package/dist/internal/dateTime.js.map +1 -1
  206. package/dist/internal/effect.js +19 -9
  207. package/dist/internal/effect.js.map +1 -1
  208. package/dist/internal/graphql.d.ts +2 -0
  209. package/dist/internal/graphql.d.ts.map +1 -0
  210. package/dist/internal/graphql.js +195 -0
  211. package/dist/internal/graphql.js.map +1 -0
  212. package/dist/internal/graphqlHeaders.d.ts +4 -0
  213. package/dist/internal/graphqlHeaders.d.ts.map +1 -0
  214. package/dist/internal/graphqlHeaders.js +11 -0
  215. package/dist/internal/graphqlHeaders.js.map +1 -0
  216. package/dist/internal/request.js +20 -1
  217. package/dist/internal/request.js.map +1 -1
  218. package/dist/internal/schema/toCodeDocument.js +4 -1
  219. package/dist/internal/schema/toCodeDocument.js.map +1 -1
  220. package/dist/internal/schema/toJsonSchemaDocument.js +29 -5
  221. package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
  222. package/dist/internal/version.js +1 -1
  223. package/dist/net/AddressResolver.d.ts +145 -0
  224. package/dist/net/AddressResolver.d.ts.map +1 -0
  225. package/dist/net/AddressResolver.js +114 -0
  226. package/dist/net/AddressResolver.js.map +1 -0
  227. package/dist/net/Dns.d.ts +596 -0
  228. package/dist/net/Dns.d.ts.map +1 -0
  229. package/dist/net/Dns.js +549 -0
  230. package/dist/net/Dns.js.map +1 -0
  231. package/dist/net/Host.d.ts +369 -0
  232. package/dist/net/Host.d.ts.map +1 -0
  233. package/dist/net/Host.js +397 -0
  234. package/dist/net/Host.js.map +1 -0
  235. package/dist/net/IpInterface.d.ts +76 -3
  236. package/dist/net/IpInterface.d.ts.map +1 -1
  237. package/dist/net/IpInterface.js +53 -4
  238. package/dist/net/IpInterface.js.map +1 -1
  239. package/dist/net/IpNetwork.d.ts +82 -8
  240. package/dist/net/IpNetwork.d.ts.map +1 -1
  241. package/dist/net/IpNetwork.js +60 -4
  242. package/dist/net/IpNetwork.js.map +1 -1
  243. package/dist/net/NetAddress.d.ts +396 -35
  244. package/dist/net/NetAddress.d.ts.map +1 -1
  245. package/dist/net/NetAddress.js +358 -34
  246. package/dist/net/NetAddress.js.map +1 -1
  247. package/dist/net/index.d.ts +15 -0
  248. package/dist/net/index.d.ts.map +1 -1
  249. package/dist/net/index.js +15 -0
  250. package/dist/net/index.js.map +1 -1
  251. package/dist/observability/OtlpMetrics.d.ts.map +1 -1
  252. package/dist/observability/OtlpMetrics.js +15 -21
  253. package/dist/observability/OtlpMetrics.js.map +1 -1
  254. package/dist/observability/PrometheusMetrics.js +1 -0
  255. package/dist/observability/PrometheusMetrics.js.map +1 -1
  256. package/dist/persistence/PersistedQueue.d.ts +32 -3
  257. package/dist/persistence/PersistedQueue.d.ts.map +1 -1
  258. package/dist/persistence/PersistedQueue.js +75 -16
  259. package/dist/persistence/PersistedQueue.js.map +1 -1
  260. package/dist/rpc/RpcClient.d.ts +22 -6
  261. package/dist/rpc/RpcClient.d.ts.map +1 -1
  262. package/dist/rpc/RpcClient.js +12 -5
  263. package/dist/rpc/RpcClient.js.map +1 -1
  264. package/dist/rpc/RpcServer.d.ts +6 -0
  265. package/dist/rpc/RpcServer.d.ts.map +1 -1
  266. package/dist/rpc/RpcServer.js +78 -29
  267. package/dist/rpc/RpcServer.js.map +1 -1
  268. package/dist/socket/DatagramSocket.d.ts +456 -0
  269. package/dist/socket/DatagramSocket.d.ts.map +1 -0
  270. package/dist/socket/DatagramSocket.js +535 -0
  271. package/dist/socket/DatagramSocket.js.map +1 -0
  272. package/dist/socket/Socket.d.ts +20 -1
  273. package/dist/socket/Socket.d.ts.map +1 -1
  274. package/dist/socket/Socket.js +9 -1
  275. package/dist/socket/Socket.js.map +1 -1
  276. package/dist/socket/index.d.ts +5 -0
  277. package/dist/socket/index.d.ts.map +1 -1
  278. package/dist/socket/index.js +5 -0
  279. package/dist/socket/index.js.map +1 -1
  280. package/dist/sql/Migrator.d.ts.map +1 -1
  281. package/dist/sql/Migrator.js +7 -2
  282. package/dist/sql/Migrator.js.map +1 -1
  283. package/dist/sql/SqlClient.d.ts +7 -1
  284. package/dist/sql/SqlClient.d.ts.map +1 -1
  285. package/dist/sql/SqlClient.js +31 -6
  286. package/dist/sql/SqlClient.js.map +1 -1
  287. package/dist/testing/TestCrypto.d.ts +73 -0
  288. package/dist/testing/TestCrypto.d.ts.map +1 -0
  289. package/dist/testing/TestCrypto.js +87 -0
  290. package/dist/testing/TestCrypto.js.map +1 -0
  291. package/dist/testing/index.d.ts +5 -0
  292. package/dist/testing/index.d.ts.map +1 -1
  293. package/dist/testing/index.js +5 -0
  294. package/dist/testing/index.js.map +1 -1
  295. package/dist/workflow/DurableDeferred.d.ts +54 -0
  296. package/dist/workflow/DurableDeferred.d.ts.map +1 -1
  297. package/dist/workflow/DurableDeferred.js +108 -50
  298. package/dist/workflow/DurableDeferred.js.map +1 -1
  299. package/dist/workflow/WorkflowEngine.d.ts +24 -2
  300. package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
  301. package/dist/workflow/WorkflowEngine.js +13 -3
  302. package/dist/workflow/WorkflowEngine.js.map +1 -1
  303. package/package.json +6 -3
  304. package/src/Context.ts +12 -3
  305. package/src/Crypto.ts +43 -9
  306. package/src/DateTime.ts +9 -6
  307. package/src/Duration.ts +36 -16
  308. package/src/FileSystem.ts +48 -2
  309. package/src/RequestResolver.ts +4 -10
  310. package/src/Scheduler.ts +9 -0
  311. package/src/Schema.ts +677 -5
  312. package/src/SchemaGetter.ts +47 -35
  313. package/src/Sink.ts +45 -18
  314. package/src/Stdio.ts +9 -2
  315. package/src/Stream.ts +44 -15
  316. package/src/Utils.ts +8 -5
  317. package/src/ai/AnthropicStructuredOutput.ts +2 -2
  318. package/src/ai/Chat.ts +2 -2
  319. package/src/ai/LanguageModel.ts +96 -24
  320. package/src/ai/McpServer.ts +288 -94
  321. package/src/ai/Prompt.ts +24 -10
  322. package/src/ai/Response.ts +6 -3
  323. package/src/ai/internal/mcpProtocol/v2026_07_28.ts +5 -0
  324. package/src/ai/internal/mcpProtocol.ts +3 -0
  325. package/src/ai/internal/mcpRuntime.ts +2 -0
  326. package/src/cli/CliOutput.ts +33 -16
  327. package/src/cli/Command.ts +4 -3
  328. package/src/cli/Completions.ts +9 -6
  329. package/src/cli/GlobalFlag.ts +19 -11
  330. package/src/cli/Prompt.ts +159 -149
  331. package/src/cli/internal/ansi.ts +26 -3
  332. package/src/cli/internal/completions/powershell.ts +322 -0
  333. package/src/cli/internal/completions/zsh.ts +4 -2
  334. package/src/cli/internal/wizard.ts +34 -26
  335. package/src/cluster/ClusterSchema.ts +32 -0
  336. package/src/cluster/ClusterWorkflowEngine.ts +64 -36
  337. package/src/cluster/MessageStorage.ts +45 -14
  338. package/src/cluster/Runners.ts +8 -2
  339. package/src/cluster/Sharding.ts +219 -58
  340. package/src/cluster/SqlMessageStorage.ts +118 -84
  341. package/src/cluster/SqlRunnerStorage.ts +224 -128
  342. package/src/cluster/internal/entityManager.ts +151 -55
  343. package/src/encoding/Sse.ts +69 -79
  344. package/src/graphql/GraphQL.ts +494 -0
  345. package/src/graphql/GraphQLClient.ts +912 -0
  346. package/src/graphql/GraphQLClientError.ts +542 -0
  347. package/src/graphql/GraphQLGroup.ts +167 -0
  348. package/src/graphql/GraphQLMiddleware.ts +253 -0
  349. package/src/graphql/GraphQLProtocol.ts +1286 -0
  350. package/src/graphql/GraphQLResolver.ts +1010 -0
  351. package/src/graphql/index.ts +48 -0
  352. package/src/http/FindMyWay/internal/router.ts +4 -7
  353. package/src/http/HttpClient.ts +110 -12
  354. package/src/http/HttpEffect.ts +11 -5
  355. package/src/http/HttpMiddleware.ts +33 -34
  356. package/src/http/HttpRouter.ts +35 -0
  357. package/src/http/HttpServerResponse.ts +28 -16
  358. package/src/http/HttpTraceContext.ts +8 -2
  359. package/src/http/Multipart.ts +17 -1
  360. package/src/http-api/HttpApiScalar.ts +5 -0
  361. package/src/internal/dateTime.ts +13 -10
  362. package/src/internal/effect.ts +22 -15
  363. package/src/internal/graphql.ts +263 -0
  364. package/src/internal/graphqlHeaders.ts +11 -0
  365. package/src/internal/request.ts +31 -3
  366. package/src/internal/schema/toCodeDocument.ts +7 -1
  367. package/src/internal/schema/toJsonSchemaDocument.ts +34 -2
  368. package/src/internal/version.ts +1 -1
  369. package/src/net/AddressResolver.ts +222 -0
  370. package/src/net/Dns.ts +1035 -0
  371. package/src/net/Host.ts +544 -0
  372. package/src/net/IpInterface.ts +117 -7
  373. package/src/net/IpNetwork.ts +116 -17
  374. package/src/net/NetAddress.ts +620 -76
  375. package/src/net/index.ts +18 -0
  376. package/src/observability/OtlpMetrics.ts +12 -23
  377. package/src/observability/PrometheusMetrics.ts +1 -0
  378. package/src/persistence/PersistedQueue.ts +146 -53
  379. package/src/rpc/RpcClient.ts +41 -19
  380. package/src/rpc/RpcServer.ts +115 -40
  381. package/src/socket/DatagramSocket.ts +919 -0
  382. package/src/socket/Socket.ts +28 -2
  383. package/src/socket/index.ts +6 -0
  384. package/src/sql/Migrator.ts +21 -5
  385. package/src/sql/SqlClient.ts +39 -15
  386. package/src/testing/TestCrypto.ts +94 -0
  387. package/src/testing/index.ts +6 -0
  388. package/src/workflow/DurableDeferred.ts +160 -47
  389. package/src/workflow/WorkflowEngine.ts +50 -5
@@ -0,0 +1,535 @@
1
+ import * as Context from "../Context.js";
2
+ import * as Effect from "../Effect.js";
3
+ import * as Fiber from "../Fiber.js";
4
+ import { constVoid } from "../Function.js";
5
+ import { args, contA, contAll, exitSucceed, makePrimitive, withFiber } from "../internal/core.js";
6
+ import * as Latch from "../Latch.js";
7
+ import * as NetAddress from "../net/NetAddress.js";
8
+ import * as Predicate from "../Predicate.js";
9
+ import * as Schema from "../Schema.js";
10
+ import * as Scope from "../Scope.js";
11
+ /**
12
+ * Runtime type identifier attached to `DatagramSocket` services.
13
+ *
14
+ * @stability experimental
15
+ * @category type IDs
16
+ * @since 4.0.0
17
+ */
18
+ export const TypeId = "~effect/socket/DatagramSocket";
19
+ /**
20
+ * Service tag for UDP socket transports.
21
+ *
22
+ * @stability experimental
23
+ * @category services
24
+ * @since 4.0.0
25
+ */
26
+ export const DatagramSocket = /*#__PURE__*/Context.Service("effect/socket/DatagramSocket");
27
+ /**
28
+ * Creates a `DatagramSocket` from its `reader` and `writer` effects.
29
+ *
30
+ * @stability experimental
31
+ * @category constructors
32
+ * @since 4.0.0
33
+ */
34
+ export const make = options => DatagramSocket.of({
35
+ [TypeId]: TypeId,
36
+ reader: options.reader,
37
+ writer: options.writer
38
+ });
39
+ /**
40
+ * Opening or binding the native socket, applying its options, or resolving
41
+ * a name failed.
42
+ *
43
+ * @stability experimental
44
+ * @category errors
45
+ * @since 4.0.0
46
+ */
47
+ export class DatagramSocketOpenError extends /*#__PURE__*/Schema.Error("effect/socket/DatagramSocket/OpenError")({
48
+ _tag: /*#__PURE__*/Schema.tag("DatagramSocketOpenError"),
49
+ kind: /*#__PURE__*/Schema.Literals(["AddressInUse", "AddressNotAvailable", "PermissionDenied", "Unknown"]),
50
+ cause: /*#__PURE__*/Schema.Defect()
51
+ }) {}
52
+ /**
53
+ * A receive failed, or an ICMP report arrived with no write left to fail.
54
+ *
55
+ * @stability experimental
56
+ * @category errors
57
+ * @since 4.0.0
58
+ */
59
+ export class DatagramSocketReadError extends /*#__PURE__*/Schema.Error("effect/socket/DatagramSocket/ReadError")({
60
+ _tag: /*#__PURE__*/Schema.tag("DatagramSocketReadError"),
61
+ kind: /*#__PURE__*/Schema.Literals(["MessageTooLarge", "Unreachable", "ConnectionRefused", "PermissionDenied", "Unknown"]),
62
+ cause: /*#__PURE__*/Schema.Defect()
63
+ }) {}
64
+ /**
65
+ * A send failed. `address` is the destination when it is known.
66
+ *
67
+ * @stability experimental
68
+ * @category errors
69
+ * @since 4.0.0
70
+ */
71
+ export class DatagramSocketWriteError extends /*#__PURE__*/Schema.Error("effect/socket/DatagramSocket/WriteError")({
72
+ _tag: /*#__PURE__*/Schema.tag("DatagramSocketWriteError"),
73
+ kind: /*#__PURE__*/Schema.Literals(["MessageTooLarge", "Unreachable", "ConnectionRefused", "PermissionDenied", "Unknown"]),
74
+ address: /*#__PURE__*/Schema.optional(Schema.InetAddress),
75
+ cause: /*#__PURE__*/Schema.Defect()
76
+ }) {}
77
+ /**
78
+ * The native socket closed underneath the reader, or the reader's scope
79
+ * closed.
80
+ *
81
+ * @stability experimental
82
+ * @category errors
83
+ * @since 4.0.0
84
+ */
85
+ export class DatagramSocketClosedError extends /*#__PURE__*/Schema.Error("effect/socket/DatagramSocket/ClosedError")({
86
+ _tag: /*#__PURE__*/Schema.tag("DatagramSocketClosedError")
87
+ }) {}
88
+ /**
89
+ * The runtime lacks a capability, such as source-specific multicast on Deno.
90
+ *
91
+ * @stability experimental
92
+ * @category errors
93
+ * @since 4.0.0
94
+ */
95
+ export class DatagramSocketUnsupportedError extends /*#__PURE__*/Schema.Error("effect/socket/DatagramSocket/UnsupportedError")({
96
+ _tag: /*#__PURE__*/Schema.tag("DatagramSocketUnsupportedError"),
97
+ capability: Schema.String,
98
+ runtime: Schema.String
99
+ }) {
100
+ /**
101
+ * Names the runtime and the capability it lacks.
102
+ *
103
+ * @stability experimental
104
+ * @since 4.0.0
105
+ */
106
+ get message() {
107
+ return `${this.runtime} does not support ${this.capability}`;
108
+ }
109
+ }
110
+ /**
111
+ * Schema for the union of `DatagramSocketError` reasons.
112
+ *
113
+ * @stability experimental
114
+ * @category errors
115
+ * @since 4.0.0
116
+ */
117
+ export const DatagramSocketErrorReason = /*#__PURE__*/Schema.Union([DatagramSocketOpenError, DatagramSocketReadError, DatagramSocketWriteError, DatagramSocketClosedError, DatagramSocketUnsupportedError]);
118
+ /**
119
+ * Runtime type identifier attached to `DatagramSocketError` values.
120
+ *
121
+ * @stability experimental
122
+ * @category errors
123
+ * @since 4.0.0
124
+ */
125
+ export const DatagramSocketErrorTypeId = "~effect/socket/DatagramSocket/DatagramSocketError";
126
+ /**
127
+ * Returns `true` when a value is a `DatagramSocketError`.
128
+ *
129
+ * @stability experimental
130
+ * @category guards
131
+ * @since 4.0.0
132
+ */
133
+ export const isDatagramSocketError = u => Predicate.hasProperty(u, DatagramSocketErrorTypeId);
134
+ /**
135
+ * The error raised by `DatagramSocket` operations, wrapping a specific
136
+ * reason. Its `cause` and `message` come from the reason.
137
+ *
138
+ * @stability experimental
139
+ * @category errors
140
+ * @since 4.0.0
141
+ */
142
+ export class DatagramSocketError extends /*#__PURE__*/Schema.TaggedError(DatagramSocketErrorTypeId)("DatagramSocketError", {
143
+ _tag: /*#__PURE__*/Schema.tag("DatagramSocketError"),
144
+ reason: DatagramSocketErrorReason
145
+ }) {
146
+ // @effect-diagnostics-next-line overriddenSchemaConstructor:off
147
+ constructor(props) {
148
+ if ("cause" in props.reason) {
149
+ super({
150
+ ...props,
151
+ cause: props.reason.cause
152
+ });
153
+ } else {
154
+ super(props);
155
+ }
156
+ }
157
+ [DatagramSocketErrorTypeId] = DatagramSocketErrorTypeId;
158
+ get message() {
159
+ return this.reason.message;
160
+ }
161
+ }
162
+ /**
163
+ * Builds a `DatagramSocket` over a backing socket, opening a new socket for
164
+ * each reader acquisition.
165
+ *
166
+ * **Details**
167
+ *
168
+ * `open` receives the event callbacks before the handle exists, so packets can
169
+ * be queued while it opens. Core owns the receive queue and its overflow
170
+ * strategy, reader exclusivity, sticky errors, lazy address parsing, the
171
+ * writer latch and destination formatting. The handle is closed when the
172
+ * reader's scope closes. If acquisition is interrupted while `open` is still
173
+ * running, the interruption returns at once, `open` is left to finish, and
174
+ * the handle it produces is closed. The next reader waits until that open has
175
+ * settled, so two native sockets never exist at once. An adopted `acquire`
176
+ * must therefore finish in bounded time.
177
+ *
178
+ * `open` runs in the reader's scope, with the services of the fiber that
179
+ * built the socket, so an adopted `acquire` can use them and register
180
+ * finalizers that run when the reader closes. Where the fiber acquiring the
181
+ * reader has a service with the same tag, its own takes precedence.
182
+ *
183
+ * Concurrent pulls are served in the order they started waiting.
184
+ *
185
+ * `onError` receives errors with no write left to fail. It runs
186
+ * synchronously, and anything it throws is ignored.
187
+ *
188
+ * Invalid `receiveBuffer.capacity` values cause a defect; use a positive
189
+ * safe integer.
190
+ *
191
+ * @stability experimental
192
+ * @category constructors
193
+ * @since 4.0.0
194
+ */
195
+ export const makeFromBackingSocket = (open, options) => withFiber(fiber => {
196
+ const capacity = options?.receiveBuffer?.capacity ?? 1024;
197
+ if (!Number.isSafeInteger(capacity) || capacity < 1) {
198
+ throw new RangeError(`DatagramSocket receive buffer capacity must be a positive integer, received ${capacity}`);
199
+ }
200
+ return Effect.succeed(makeFromBackingSocketWithContext(open, fiber.context, capacity, options?.receiveBuffer?.strategy === "sliding", options?.onError));
201
+ });
202
+ const makeFromBackingSocketWithContext = (open, services, capacity, sliding, onError) => {
203
+ const free = Latch.makeUnsafe(true);
204
+ const latch = Latch.makeUnsafe(false);
205
+ let current;
206
+ const abandon = (state, opening) => {
207
+ state.close();
208
+ // Release reader ownership only after the interrupted open settles.
209
+ opening.addObserver(exit => {
210
+ if (exit._tag === "Success") exit.value.close();
211
+ free.openUnsafe();
212
+ });
213
+ };
214
+ const release = state => {
215
+ state.close();
216
+ current = undefined;
217
+ latch.closeUnsafe();
218
+ free.openUnsafe();
219
+ };
220
+ const reader = Effect.uninterruptibleMask(Effect.fnUntraced(function* (restore) {
221
+ while (!free.closeUnsafe()) yield* restore(free.await);
222
+ const scope = yield* Effect.scope;
223
+ const state = new ReaderState(capacity, sliding, onError);
224
+ // Native opens may be uncancellable. Interrupt only the wait; `abandon`
225
+ // closes any socket returned later.
226
+ const opened = open(state.events).pipe(Effect.updateContext(input => Context.add(Context.merge(services, input), Scope.Scope, scope)));
227
+ const opening = yield* Effect.forkDetach(opened, {
228
+ startImmediately: true
229
+ });
230
+ state.handle = yield* restore(Fiber.join(opening)).pipe(Effect.onError(() => Effect.sync(() => abandon(state, opening))));
231
+ current = state;
232
+ latch.openUnsafe();
233
+ yield* Effect.addFinalizer(() => Effect.sync(() => release(state)));
234
+ return makeReader(state);
235
+ }));
236
+ const write = datagram => withFiber(fiber => {
237
+ const state = current;
238
+ return state === undefined ? latch.whenOpen(write(datagram)) : state.write(datagram, fiber);
239
+ });
240
+ const writeAll = datagrams => withFiber(fiber => {
241
+ const state = current;
242
+ return state === undefined ? latch.whenOpen(writeAll(datagrams)) : state.writeAll(datagrams, fiber);
243
+ });
244
+ const writer = Effect.succeed({
245
+ write,
246
+ writeAll
247
+ });
248
+ return make({
249
+ reader,
250
+ writer
251
+ });
252
+ };
253
+ const encoder = /*#__PURE__*/new TextEncoder();
254
+ const encode = payload => typeof payload === "string" ? encoder.encode(payload) : payload;
255
+ const emptyScopeIds = /*#__PURE__*/new Map();
256
+ const closedError = () => new DatagramSocketError({
257
+ reason: new DatagramSocketClosedError()
258
+ });
259
+ // Rejected writes return this sentinel, avoiding per-packet error type checks.
260
+ const rejected = {
261
+ host: "",
262
+ port: 0
263
+ };
264
+ class DatagramImpl {
265
+ payload;
266
+ host;
267
+ port;
268
+ owner;
269
+ #address;
270
+ constructor(payload, host, port, owner) {
271
+ this.payload = payload;
272
+ this.host = host;
273
+ this.port = port;
274
+ this.owner = owner;
275
+ }
276
+ get address() {
277
+ return this.#address ??= NetAddress.inetAddressFromNativeUnsafe(this.host, this.port, this.owner.scopeIds);
278
+ }
279
+ // only for a queued record, which no pull has returned yet
280
+ reuse(payload, host, port) {
281
+ this.payload = payload;
282
+ this.host = host;
283
+ this.port = port;
284
+ this.#address = undefined;
285
+ }
286
+ }
287
+ const targetOf = datagram => "host" in datagram ? datagram : datagram.address;
288
+ class ReaderState {
289
+ capacity;
290
+ sliding;
291
+ listener;
292
+ events = {
293
+ onPacket: (payload, host, port) => this.push(payload, host, port),
294
+ onReadError: error => this.fail(error),
295
+ onError: error => this.report(error),
296
+ onClose: () => this.fail(closedError())
297
+ };
298
+ // set when `open` completes; packets can arrive before that
299
+ handle = undefined;
300
+ failure = undefined;
301
+ // separate from `failure`: after a sticky read error the socket is still
302
+ // open, so ICMP reports still reach `onError`
303
+ closed = false;
304
+ // Sliding overflow turns the full buffer into a ring, oldest at `head`.
305
+ buffer = [];
306
+ head = 0;
307
+ dropped = 0;
308
+ // A single consumer uses the first waiter slot without touching the array.
309
+ waiter = undefined;
310
+ waiters = [];
311
+ unpark = /*#__PURE__*/unpark(this);
312
+ bound = undefined;
313
+ // one-entry cache for `write` to the same explicit address
314
+ lastTarget = undefined;
315
+ lastDestination = undefined;
316
+ rejection = undefined;
317
+ constructor(capacity, sliding, listener) {
318
+ this.capacity = capacity;
319
+ this.sliding = sliding;
320
+ this.listener = listener;
321
+ }
322
+ push(payload, host, port) {
323
+ if (this.failure !== undefined) return;
324
+ if (this.buffer.length >= this.capacity) return this.overflow(payload, host, port);
325
+ const datagram = new DatagramImpl(payload, host, port, this);
326
+ if (this.waiter !== undefined) return this.wake(datagram);
327
+ const buffer = this.buffer;
328
+ buffer[buffer.length] = datagram;
329
+ }
330
+ wake(datagram) {
331
+ const fiber = this.waiter;
332
+ this.promoteWaiter();
333
+ fiber.evaluate(exitSucceed([datagram]));
334
+ }
335
+ overflow(payload, host, port) {
336
+ this.dropped++;
337
+ if (!this.sliding) return;
338
+ const buffer = this.buffer;
339
+ const head = this.head;
340
+ buffer[head].reuse(payload, host, port);
341
+ this.head = head + 1 === buffer.length ? 0 : head + 1;
342
+ }
343
+ take() {
344
+ const buffer = this.buffer;
345
+ const head = this.head;
346
+ this.buffer = [];
347
+ if (head === 0) return buffer;
348
+ this.head = 0;
349
+ const length = buffer.length;
350
+ const batch = new Array(length);
351
+ let j = 0;
352
+ for (let i = head; i < length; i++) batch[j++] = buffer[i];
353
+ for (let i = 0; i < head; i++) batch[j++] = buffer[i];
354
+ return batch;
355
+ }
356
+ park(fiber) {
357
+ if (this.waiter === undefined) this.waiter = fiber;else this.waiters.push(fiber);
358
+ }
359
+ promoteWaiter() {
360
+ this.waiter = this.waiters.length === 0 ? undefined : this.waiters.shift();
361
+ }
362
+ removeWaiter(fiber) {
363
+ if (this.waiter === fiber) return this.promoteWaiter();
364
+ if (this.waiters.length === 0) return;
365
+ const index = this.waiters.indexOf(fiber);
366
+ if (index !== -1) this.waiters.splice(index, 1);
367
+ }
368
+ failWaiters() {
369
+ const waiter = this.waiter;
370
+ if (waiter === undefined) return;
371
+ const failure = this.failure;
372
+ const waiters = this.waiters;
373
+ this.waiter = undefined;
374
+ this.waiters = [];
375
+ waiter.evaluate(failure);
376
+ for (let i = 0; i < waiters.length; i++) waiters[i].evaluate(failure);
377
+ }
378
+ fail(error) {
379
+ if (this.failure !== undefined) return;
380
+ this.failure = Effect.fail(error);
381
+ this.failWaiters();
382
+ }
383
+ close() {
384
+ this.closed = true;
385
+ this.buffer = [];
386
+ this.head = 0;
387
+ this.failure = Effect.fail(closedError());
388
+ this.failWaiters();
389
+ this.handle?.close();
390
+ }
391
+ report(error) {
392
+ const listener = this.listener;
393
+ if (listener === undefined || this.closed) return;
394
+ try {
395
+ listener(error);
396
+ } catch {
397
+ // Listener errors cannot fail native callbacks.
398
+ }
399
+ }
400
+ // packets can arrive before the handle does, so they read this lazily
401
+ get scopeIds() {
402
+ return this.handle?.scopeIds ?? emptyScopeIds;
403
+ }
404
+ get address() {
405
+ return this.bound ??= NetAddress.inetAddressFromNativeUnsafe(this.handle.address.host, this.handle.address.port, this.scopeIds);
406
+ }
407
+ // Synchronous sends avoid parking; async completions resume inline.
408
+ // Ignore completions after interruption.
409
+ write(datagram, fiber) {
410
+ if (this.failure !== undefined) return this.failure;
411
+ const target = targetOf(datagram);
412
+ const destination = this.destination(target);
413
+ if (destination === rejected) return Effect.fail(this.rejection);
414
+ const handle = this.handle;
415
+ const payload = encode(datagram.payload);
416
+ let result;
417
+ let parked = false;
418
+ handle.send(payload, destination, error => {
419
+ if (result !== undefined) return;
420
+ result = error === undefined ? Effect.void : Effect.fail(this.withAddress(error, target));
421
+ if (parked) fiber.evaluate(result);
422
+ });
423
+ if (result !== undefined) return result;
424
+ parked = true;
425
+ return fiber.yieldWith(() => {
426
+ parked = false;
427
+ });
428
+ }
429
+ writeAll(datagrams, fiber) {
430
+ if (this.failure !== undefined) return this.failure;
431
+ const payloads = new Array(datagrams.length);
432
+ const destinations = new Array(datagrams.length);
433
+ for (let i = 0; i < datagrams.length; i++) {
434
+ const datagram = datagrams[i];
435
+ const destination = this.destination(targetOf(datagram));
436
+ if (destination === rejected) return Effect.fail(this.rejection);
437
+ payloads[i] = encode(datagram.payload);
438
+ destinations[i] = destination;
439
+ }
440
+ let result;
441
+ let parked = false;
442
+ this.handle.sendMany(payloads, destinations, (error, index) => {
443
+ if (result !== undefined) return;
444
+ result = error === undefined ? Effect.void : Effect.fail(index === undefined ? error : this.withAddress(error, targetOf(datagrams[index])));
445
+ if (parked) fiber.evaluate(result);
446
+ });
447
+ if (result !== undefined) return result;
448
+ parked = true;
449
+ return fiber.yieldWith(() => {
450
+ parked = false;
451
+ });
452
+ }
453
+ // Returns `rejected` on failure, with the error stored in `rejection`.
454
+ destination(target) {
455
+ const handle = this.handle;
456
+ if (target === undefined) {
457
+ if (handle.connected) return undefined;
458
+ return handle.peer ?? this.reject("DatagramSocket write has no destination and the socket has no peer");
459
+ }
460
+ if (!("_tag" in target)) return handle.connected ? undefined : target;
461
+ if (handle.connected) return this.reject("an explicit address cannot be used on a connected DatagramSocket", target);
462
+ if (target === this.lastTarget) return this.lastDestination;
463
+ const destination = {
464
+ host: NetAddress.formatNativeHost(target, this.scopeIds),
465
+ port: target.port
466
+ };
467
+ this.lastTarget = target;
468
+ this.lastDestination = destination;
469
+ return destination;
470
+ }
471
+ reject(message, address) {
472
+ this.rejection = new DatagramSocketError({
473
+ reason: new DatagramSocketWriteError({
474
+ kind: "Unknown",
475
+ address,
476
+ cause: new Error(message)
477
+ })
478
+ });
479
+ return rejected;
480
+ }
481
+ withAddress(error, target) {
482
+ const reason = error.reason;
483
+ if (reason._tag !== "DatagramSocketWriteError" || reason.address !== undefined) return error;
484
+ const address = this.addressOf(target);
485
+ if (address === undefined) return error;
486
+ return new DatagramSocketError({
487
+ reason: new DatagramSocketWriteError({
488
+ kind: reason.kind,
489
+ address,
490
+ cause: reason.cause
491
+ })
492
+ });
493
+ }
494
+ addressOf(target) {
495
+ try {
496
+ if (target !== undefined) return "_tag" in target ? target : target.address;
497
+ const peer = this.handle.peer;
498
+ return peer === undefined ? undefined : NetAddress.inetAddressFromNativeUnsafe(peer.host, peer.port, this.scopeIds);
499
+ } catch {
500
+ // an unknown IPv6 zone leaves the address out
501
+ return undefined;
502
+ }
503
+ }
504
+ }
505
+ // Park the fiber itself and resume it inline, avoiding `Effect.callback` allocations.
506
+ const makePull = state => withFiber(fiber => {
507
+ if (state.buffer.length !== 0) {
508
+ const batch = state.take();
509
+ const cont = fiber.getCont(contA);
510
+ return cont ? cont[contA](batch, fiber) : fiber.yieldWith(exitSucceed(batch));
511
+ }
512
+ if (state.failure !== undefined) return state.failure;
513
+ state.park(fiber);
514
+ fiber._stack.push(state.unpark);
515
+ return fiber.yieldWith(constVoid);
516
+ });
517
+ // `contAll` removes interrupted waiters too; after a wake, removal is a no-op.
518
+ const unpark = /*#__PURE__*/makePrimitive({
519
+ op: "DatagramSocketUnpark",
520
+ [contAll](fiber) {
521
+ this[args].removeWaiter(fiber);
522
+ }
523
+ });
524
+ const makeReader = state => ({
525
+ pull: makePull(state),
526
+ get address() {
527
+ return state.address;
528
+ },
529
+ dropped: () => state.dropped,
530
+ joinMulticast: options => Effect.suspend(() => {
531
+ if (state.failure !== undefined) return state.failure;
532
+ return Effect.acquireRelease(state.handle.joinMulticast(options), leave => state.closed ? Effect.void : Effect.ignoreCause(leave()));
533
+ })
534
+ });
535
+ //# sourceMappingURL=DatagramSocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatagramSocket.js","names":[],"sources":["../../src/socket/DatagramSocket.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -149,6 +149,12 @@ export interface Writer {
149
149
  * @since 4.0.0
150
150
  */
151
151
  export interface TlsUpgradeOptions {
152
+ /**
153
+ * DNS hostname used for Server Name Indication (SNI) and certificate identity
154
+ * verification during client upgrades. Server upgrades ignore this option.
155
+ * When omitted, the adapter retains its existing hostname behavior.
156
+ */
157
+ readonly servername?: string | undefined;
152
158
  readonly key?: Redacted.Redacted<string | Uint8Array> | ReadonlyArray<Redacted.Redacted<string | Uint8Array>> | undefined;
153
159
  readonly cert?: string | Uint8Array | ReadonlyArray<string | Uint8Array> | undefined;
154
160
  readonly ca?: string | Uint8Array | ReadonlyArray<string | Uint8Array> | undefined;
@@ -527,13 +533,18 @@ export interface WebSocketLike {
527
533
  send(data: string | Uint8Array<ArrayBuffer>): void;
528
534
  }
529
535
  /**
530
- * Common options understood by a WebSocket client implementation.
536
+ * Client options for Node and Bun WebSocket implementations, allowing
537
+ * handshake headers and subprotocols to be supplied together.
531
538
  *
532
539
  * @stability unstable
533
540
  * @category models
534
541
  * @since 4.0.0
535
542
  */
536
543
  export interface WebSocketClientOptions {
544
+ /**
545
+ * Subprotocols to offer in the opening handshake.
546
+ */
547
+ readonly protocols?: string | Array<string> | undefined;
537
548
  /**
538
549
  * Headers to include in the opening handshake.
539
550
  *
@@ -580,6 +591,7 @@ export declare class WebSocketConstructor extends WebSocketConstructor_base {
580
591
  }
581
592
  /**
582
593
  * Layer that provides `WebSocketConstructor` using `globalThis.WebSocket`.
594
+ * Rejects client options objects, including those with handshake headers.
583
595
  *
584
596
  * @stability unstable
585
597
  * @category layers
@@ -589,6 +601,8 @@ export declare const layerWebSocketConstructorGlobal: Layer.Layer<WebSocketConst
589
601
  /**
590
602
  * Creates a `Socket` backed by a `WebSocketConstructor`, dialing the
591
603
  * WebSocket for each reader acquisition.
604
+ * Optional handshake headers require a Node or Bun constructor; without
605
+ * headers, protocols are passed directly for browser compatibility.
592
606
  *
593
607
  * @stability unstable
594
608
  * @category constructors
@@ -597,6 +611,7 @@ export declare const layerWebSocketConstructorGlobal: Layer.Layer<WebSocketConst
597
611
  export declare const makeWebSocket: (url: string | Effect.Effect<string>, options?: {
598
612
  readonly openTimeout?: Duration.Input | undefined;
599
613
  readonly protocols?: string | Array<string> | undefined;
614
+ readonly headers?: Readonly<Record<string, string>> | undefined;
600
615
  readonly highWaterMark?: number | undefined;
601
616
  }) => Effect.Effect<Socket, never, WebSocketConstructor>;
602
617
  /**
@@ -625,6 +640,7 @@ export declare const fromWebSocket: <RO, WS extends WebSocketLike>(acquire: Effe
625
640
  /**
626
641
  * Creates a binary `Channel` backed by a WebSocket URL, requiring a
627
642
  * `WebSocketConstructor` service.
643
+ * Supports subprotocols and, with a Node or Bun constructor, handshake headers.
628
644
  *
629
645
  * @stability unstable
630
646
  * @category constructors
@@ -633,11 +649,13 @@ export declare const fromWebSocket: <RO, WS extends WebSocketLike>(acquire: Effe
633
649
  export declare const makeWebSocketChannel: <IE = never>(url: string, options?: {
634
650
  readonly openTimeout?: Duration.Input | undefined;
635
651
  readonly protocols?: string | Array<string> | undefined;
652
+ readonly headers?: Readonly<Record<string, string>> | undefined;
636
653
  readonly highWaterMark?: number | undefined;
637
654
  }) => Channel.Channel<NonEmptyReadonlyArray<Uint8Array>, SocketError | IE, void, NonEmptyReadonlyArray<Uint8Array | string | CloseEvent>, IE, unknown, WebSocketConstructor>;
638
655
  /**
639
656
  * Layer that provides a `Socket` service backed by a WebSocket URL or URL
640
657
  * effect.
658
+ * Supports subprotocols and, with a Node or Bun constructor, handshake headers.
641
659
  *
642
660
  * @stability unstable
643
661
  * @category layers
@@ -646,6 +664,7 @@ export declare const makeWebSocketChannel: <IE = never>(url: string, options?: {
646
664
  export declare const layerWebSocket: (url: string | Effect.Effect<string>, options?: {
647
665
  readonly openTimeout?: Duration.Input | undefined;
648
666
  readonly protocols?: string | Array<string> | undefined;
667
+ readonly headers?: Readonly<Record<string, string>> | undefined;
649
668
  readonly highWaterMark?: number | undefined;
650
669
  } | undefined) => Layer.Layer<Socket, never, WebSocketConstructor>;
651
670
  /**