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,549 @@
1
+ /**
2
+ * Host name resolution, DNS queries, and DNS record values.
3
+ *
4
+ * `lookup` resolves a host name to the addresses used to connect to it,
5
+ * `resolve` queries DNS records of one type, and `reverse` looks up the names
6
+ * of an address. Runtime packages provide the `Dns` service from the host
7
+ * platform's resolver, whose `lookup` uses the operating system resolver
8
+ * (`getaddrinfo`) and therefore also reads the hosts file and other system
9
+ * sources, not only DNS. `AddressResolver` builds on `lookup` to resolve
10
+ * `host:port` endpoints.
11
+ *
12
+ * @stability experimental
13
+ * @since 4.0.0
14
+ */
15
+ import * as Arr from "../Array.js";
16
+ import * as Context from "../Context.js";
17
+ import * as Data from "../Data.js";
18
+ import * as Duration from "../Duration.js";
19
+ import * as Effect from "../Effect.js";
20
+ import * as Hex from "../encoding/Hex.js";
21
+ import * as Equal from "../Equal.js";
22
+ import * as Hash from "../Hash.js";
23
+ import * as Inspectable from "../Inspectable.js";
24
+ import * as Layer from "../Layer.js";
25
+ import { hasProperty } from "../Predicate.js";
26
+ import * as Result from "../Result.js";
27
+ import * as Host from "./Host.js";
28
+ import * as NetAddress from "./NetAddress.js";
29
+ const RecordTypeId = "~effect/net/Dns/DnsRecord";
30
+ const isUint8 = u => Number.isInteger(u) && u >= 0 && u <= 0xff;
31
+ const isUint16 = u => Number.isInteger(u) && u >= 0 && u <= 0xffff;
32
+ const isUint32 = u => Number.isInteger(u) && u >= 0 && u <= 0xffffffff;
33
+ const isString = u => typeof u === "string";
34
+ // SOA timers are 32-bit unsigned counts of seconds on the wire.
35
+ const isTimer = u => Duration.isDuration(u) && Duration.isFinite(u) && isUint32(Duration.toSeconds(u));
36
+ const recordFields = {
37
+ A: {
38
+ address: NetAddress.isIpv4Address
39
+ },
40
+ AAAA: {
41
+ address: NetAddress.isIpv6Address
42
+ },
43
+ CAA: {
44
+ critical: u => typeof u === "boolean",
45
+ tag: u => isString(u) && /^[a-z0-9]+$/i.test(u),
46
+ value: isString
47
+ },
48
+ CNAME: {
49
+ target: Host.isDomainName
50
+ },
51
+ MX: {
52
+ exchange: Host.isDomainName,
53
+ priority: isUint16
54
+ },
55
+ NAPTR: {
56
+ order: isUint16,
57
+ preference: isUint16,
58
+ flags: isString,
59
+ service: isString,
60
+ regexp: isString,
61
+ replacement: Host.isDomainName
62
+ },
63
+ NS: {
64
+ host: Host.isDomainName
65
+ },
66
+ PTR: {
67
+ host: u => isString(u) && u.length > 0
68
+ },
69
+ SOA: {
70
+ primary: Host.isDomainName,
71
+ admin: u => isString(u) && u.length > 0,
72
+ serial: isUint32,
73
+ refresh: isTimer,
74
+ retry: isTimer,
75
+ expire: isTimer,
76
+ minimum: isTimer
77
+ },
78
+ SRV: {
79
+ target: Host.isDomainName,
80
+ port: isUint16,
81
+ priority: isUint16,
82
+ weight: isUint16
83
+ },
84
+ TLSA: {
85
+ certUsage: isUint8,
86
+ selector: isUint8,
87
+ matchingType: isUint8,
88
+ data: u => u instanceof Uint8Array && u.length > 0
89
+ },
90
+ TXT: {
91
+ chunks: u => Array.isArray(u) && u.length > 0 && u.every(isString)
92
+ }
93
+ };
94
+ /**
95
+ * Every supported record type.
96
+ *
97
+ * @stability experimental
98
+ * @category constants
99
+ * @since 4.0.0
100
+ */
101
+ export const recordTypes = /*#__PURE__*/Object.keys(recordFields);
102
+ /**
103
+ * Returns `true` when a value is a supported record type.
104
+ *
105
+ * @stability experimental
106
+ * @category guards
107
+ * @since 4.0.0
108
+ */
109
+ export const isRecordType = u => recordTypes.includes(u);
110
+ /**
111
+ * Returns `true` when a value is a DNS record.
112
+ *
113
+ * @stability experimental
114
+ * @category guards
115
+ * @since 4.0.0
116
+ */
117
+ export const isDnsRecord = u => hasProperty(u, RecordTypeId);
118
+ const RecordPrototype = {
119
+ ...Inspectable.BaseProto,
120
+ [RecordTypeId]: RecordTypeId,
121
+ [Equal.symbol](that) {
122
+ return isDnsRecord(that) && that._tag === this._tag && Object.keys(this).every(key => Equal.equals(this[key], that[key]));
123
+ },
124
+ [Hash.symbol]() {
125
+ return Hash.structureKeys(this, Object.keys(this));
126
+ },
127
+ toString() {
128
+ return formatRecord(this);
129
+ },
130
+ toJSON() {
131
+ return {
132
+ ...this
133
+ };
134
+ }
135
+ };
136
+ /**
137
+ * Creates a checked DNS record of a record type from its fields.
138
+ *
139
+ * **Details**
140
+ *
141
+ * Every field is checked at runtime: addresses must belong to the record's
142
+ * address family, names must be normalized domain names, priorities, weights,
143
+ * and ports must be 16-bit unsigned integers, the SOA serial and timers must be
144
+ * 32-bit unsigned integers (the timers in whole seconds), the TLSA fields must
145
+ * be 8-bit unsigned integers with non-empty `data`, which is copied, TXT
146
+ * records need at least one chunk, and CAA property tags must be alphanumeric.
147
+ * Fields that do not belong to the record type are ignored.
148
+ *
149
+ * **Example** (Creating a service record)
150
+ *
151
+ * ```ts import.meta.vitest
152
+ * import { Result } from "effect"
153
+ * import { Dns, Host } from "effect/net"
154
+ *
155
+ * const record = Result.getOrThrow(Dns.makeRecord("SRV", {
156
+ * target: Host.domainNameFromStringUnsafe("db.internal"),
157
+ * port: 5432,
158
+ * priority: 10,
159
+ * weight: 5
160
+ * }))
161
+ * Dns.formatRecord(record) // => "SRV 10 5 5432 db.internal"
162
+ * ```
163
+ *
164
+ * @stability experimental
165
+ * @category constructors
166
+ * @since 4.0.0
167
+ */
168
+ export const makeRecord = (type, fields) => {
169
+ if (!isRecordType(type)) {
170
+ return Result.fail(new NetAddress.NetAddressError({
171
+ input: type,
172
+ message: "unknown DNS record type"
173
+ }));
174
+ }
175
+ const input = typeof fields === "object" && fields !== null ? fields : {};
176
+ const self = Object.create(RecordPrototype);
177
+ self._tag = type;
178
+ for (const [key, check] of Object.entries(recordFields[type])) {
179
+ const value = input[key];
180
+ if (!check(value)) {
181
+ return Result.fail(new NetAddress.NetAddressError({
182
+ input: fields,
183
+ message: `invalid ${type} record ${key}`
184
+ }));
185
+ }
186
+ self[key] = Array.isArray(value) ? Object.freeze([...value]) : value instanceof Uint8Array ? new Uint8Array(value) : value;
187
+ }
188
+ return Result.succeed(Object.freeze(self));
189
+ };
190
+ /**
191
+ * Creates a trusted DNS record of a record type from its fields, throwing on
192
+ * failure.
193
+ *
194
+ * @stability experimental
195
+ * @category unsafe
196
+ * @since 4.0.0
197
+ */
198
+ export const makeRecordUnsafe = (type, fields) => Result.getOrThrow(makeRecord(type, fields));
199
+ const encoder = /*#__PURE__*/new TextEncoder();
200
+ const decimalEscape = byte => `\\${byte.toString().padStart(3, "0")}`;
201
+ // Quotes a character string in DNS presentation format (RFC 1035, section 5.1):
202
+ // `"` and `\` are escaped, and bytes outside printable ASCII are written as `\DDD`.
203
+ const quote = value => {
204
+ let out = "\"";
205
+ for (const byte of encoder.encode(value)) {
206
+ out += byte === 0x22 || byte === 0x5c ? `\\${String.fromCharCode(byte)}` : byte < 0x20 || byte > 0x7e ? decimalEscape(byte) : String.fromCharCode(byte);
207
+ }
208
+ return out + "\"";
209
+ };
210
+ const nameSpecials = [0x22, 0x24, 0x28, 0x29, 0x3b, 0x40];
211
+ // Writes a name held as text, such as `Ptr.host`, in DNS presentation format:
212
+ // its `\.` and `\\` escapes are kept, other special characters are escaped, and
213
+ // spaces and bytes outside printable ASCII are written as `\DDD`.
214
+ const formatName = text => {
215
+ const bytes = encoder.encode(text);
216
+ let out = "";
217
+ for (let i = 0; i < bytes.length; i++) {
218
+ const byte = bytes[i];
219
+ if (byte === 0x5c) {
220
+ const next = bytes[i + 1];
221
+ if (next === 0x2e || next === 0x5c) {
222
+ out += `\\${String.fromCharCode(next)}`;
223
+ i++;
224
+ } else {
225
+ out += "\\\\";
226
+ }
227
+ } else if (byte <= 0x20 || byte > 0x7e) {
228
+ out += decimalEscape(byte);
229
+ } else {
230
+ out += nameSpecials.includes(byte) ? `\\${String.fromCharCode(byte)}` : String.fromCharCode(byte);
231
+ }
232
+ }
233
+ return out;
234
+ };
235
+ /**
236
+ * Formats a record in DNS presentation format, prefixed by its type.
237
+ *
238
+ * @stability experimental
239
+ * @category encoding
240
+ * @since 4.0.0
241
+ */
242
+ export const formatRecord = self => {
243
+ switch (self._tag) {
244
+ case "A":
245
+ case "AAAA":
246
+ return `${self._tag} ${NetAddress.formatIp(self.address)}`;
247
+ case "CAA":
248
+ return `CAA ${self.critical ? 128 : 0} ${self.tag} ${quote(self.value)}`;
249
+ case "CNAME":
250
+ return `CNAME ${self.target}`;
251
+ case "MX":
252
+ return `MX ${self.priority} ${self.exchange}`;
253
+ case "NAPTR":
254
+ return `NAPTR ${self.order} ${self.preference} ${quote(self.flags)} ${quote(self.service)} ${quote(self.regexp)} ${self.replacement}`;
255
+ case "NS":
256
+ return `NS ${self.host}`;
257
+ case "PTR":
258
+ return `PTR ${formatName(self.host)}`;
259
+ case "SOA":
260
+ return `SOA ${self.primary} ${formatName(self.admin)} ${self.serial} ${Duration.toSeconds(self.refresh)} ${Duration.toSeconds(self.retry)} ${Duration.toSeconds(self.expire)} ${Duration.toSeconds(self.minimum)}`;
261
+ case "SRV":
262
+ return `SRV ${self.priority} ${self.weight} ${self.port} ${self.target}`;
263
+ case "TLSA":
264
+ return `TLSA ${self.certUsage} ${self.selector} ${self.matchingType} ${Hex.encode(self.data).toUpperCase()}`;
265
+ case "TXT":
266
+ return `TXT ${self.chunks.map(quote).join(" ")}`;
267
+ }
268
+ };
269
+ /**
270
+ * Returns the reverse-lookup domain name for an IP address, in `in-addr.arpa`
271
+ * for IPv4 or `ip6.arpa` for IPv6.
272
+ *
273
+ * **Example** (Building reverse-lookup names)
274
+ *
275
+ * ```ts import.meta.vitest
276
+ * import { Dns, NetAddress } from "effect/net"
277
+ *
278
+ * Dns.reverseName(NetAddress.ipFromStringUnsafe("192.0.2.1")) // => "1.2.0.192.in-addr.arpa"
279
+ * ```
280
+ *
281
+ * @stability experimental
282
+ * @category converting
283
+ * @since 4.0.0
284
+ */
285
+ export const reverseName = address => {
286
+ if (NetAddress.isIpv4Address(address)) {
287
+ return `${[...NetAddress.ipv4ToOctets(address)].reverse().join(".")}.in-addr.arpa`;
288
+ }
289
+ const nibbles = [];
290
+ for (const octet of NetAddress.ipv6ToOctets(address)) {
291
+ nibbles.push((octet >> 4).toString(16), (octet & 0xf).toString(16));
292
+ }
293
+ return `${nibbles.reverse().join(".")}.ip6.arpa`;
294
+ };
295
+ // =============================================================================
296
+ // Name servers
297
+ // =============================================================================
298
+ /**
299
+ * Parses the address of a name server: an IP address, which uses port 53, or
300
+ * an IP address and port.
301
+ *
302
+ * **Details**
303
+ *
304
+ * IPv6 addresses with a port are written in brackets, and IPv6 addresses
305
+ * without one are not.
306
+ *
307
+ * **Example** (Parsing name server addresses)
308
+ *
309
+ * ```ts import.meta.vitest
310
+ * import { Result } from "effect"
311
+ * import { Dns, NetAddress } from "effect/net"
312
+ *
313
+ * const format = (input: string) => Result.map(Dns.nameServerFromString(input), NetAddress.formatInet)
314
+ *
315
+ * format("192.0.2.53") // => Result.succeed("192.0.2.53:53")
316
+ * format("2001:db8::53") // => Result.succeed("[2001:db8::53]:53")
317
+ * format("[2001:db8::53]:5353") // => Result.succeed("[2001:db8::53]:5353")
318
+ * Result.isFailure(format("ns.example")) // => true
319
+ * ```
320
+ *
321
+ * @stability experimental
322
+ * @category decoding
323
+ * @since 4.0.0
324
+ */
325
+ export const nameServerFromString = input => NetAddress.inetAddressFromString(input.startsWith("[") || /^[^:]*:\d+$/.test(input) ? input : input.includes(":") ? `[${input}]:53` : `${input}:53`);
326
+ /**
327
+ * Converts a name server to the internet address to query. Strings are parsed
328
+ * like `nameServerFromString`, internet addresses and address parts with a
329
+ * port are converted like `NetAddress.inetAddressFromInput`, and other IP
330
+ * address inputs are converted like `NetAddress.ipFromInput` and use port 53.
331
+ *
332
+ * @stability experimental
333
+ * @category constructors
334
+ * @since 4.0.0
335
+ */
336
+ export const nameServerFromInput = input => typeof input === "string" ? nameServerFromString(input) : "port" in input ? NetAddress.inetAddressFromInput(input) : Result.map(NetAddress.ipFromInput(input), address => NetAddress.inetAddressUnsafe(address, 53));
337
+ /**
338
+ * A failed lookup, query, or reverse lookup.
339
+ *
340
+ * @stability experimental
341
+ * @category errors
342
+ * @since 4.0.0
343
+ */
344
+ export class DnsError extends /*#__PURE__*/Data.TaggedError("DnsError") {
345
+ /**
346
+ * Formats the reason, operation, and name of the failed resolution.
347
+ *
348
+ * @since 4.0.0
349
+ */
350
+ get message() {
351
+ return `${this.reason}: Dns.${this.method} (${this.hostname}${this.recordType === undefined ? "" : ` ${this.recordType}`})`;
352
+ }
353
+ /**
354
+ * Whether the failure is transient and the operation may succeed if retried.
355
+ *
356
+ * @since 4.0.0
357
+ */
358
+ get isTemporary() {
359
+ return this.reason === "Timeout" || this.reason === "Temporary" || this.reason === "ServerFailure";
360
+ }
361
+ }
362
+ /**
363
+ * Service that resolves names to addresses, queries DNS records, and looks up
364
+ * the names of addresses.
365
+ *
366
+ * **Details**
367
+ *
368
+ * Every operation either returns at least one result or fails with a
369
+ * {@link DnsError}.
370
+ *
371
+ * @stability experimental
372
+ * @category services
373
+ * @since 4.0.0
374
+ */
375
+ export class Dns extends /*#__PURE__*/Context.Service()("effect/net/Dns") {}
376
+ const notFound = (method, hostname, recordType) => Effect.fail(new DnsError({
377
+ reason: "NotFound",
378
+ method,
379
+ hostname,
380
+ recordType
381
+ }));
382
+ const badName = (method, hostname, cause, recordType) => Effect.fail(new DnsError({
383
+ reason: "BadName",
384
+ method,
385
+ hostname,
386
+ recordType,
387
+ cause
388
+ }));
389
+ const asciiName = /^[\w.-]+$/;
390
+ /**
391
+ * Creates a `Dns` service from platform resolver operations.
392
+ *
393
+ * **Details**
394
+ *
395
+ * Lookup and query names are parsed and normalized, and reverse lookup
396
+ * addresses are parsed, before platform callbacks receive them. Invalid names
397
+ * and addresses fail with `BadName`.
398
+ *
399
+ * The constructor filters lookups by the requested address family, keeps only
400
+ * records of the requested type, removes duplicates, and turns empty results
401
+ * into `NotFound` failures. `reverse` receives the names of an address and
402
+ * keeps those that are valid host names, failing with `InvalidResponse` when
403
+ * there are names but none is valid. Without a `reverse` operation, the names
404
+ * are those of the PTR records at the address's `reverseName`, and failures of
405
+ * that query are reported as failures of `reverse`.
406
+ *
407
+ * Only `lookup` is required. Platforms that can resolve addresses but cannot
408
+ * query records, such as browsers, omit `resolve`; record queries, and reverse
409
+ * lookups without a `reverse` operation, then fail with `Unsupported`.
410
+ *
411
+ * @stability experimental
412
+ * @category constructors
413
+ * @since 4.0.0
414
+ */
415
+ export const make = impl => {
416
+ const inFamily = family => address => family === undefined || NetAddress.isFamily(address, family);
417
+ const resolveRecords = impl.resolve ?? ((name, type) => Effect.fail(new DnsError({
418
+ reason: "Unsupported",
419
+ method: "resolve",
420
+ hostname: name,
421
+ recordType: type
422
+ })));
423
+ const reverseNames = impl.reverse ?? (address => resolveRecords(reverseName(address), "PTR").pipe(Effect.map(Arr.flatMap(record => record._tag === "PTR" ? [record.host] : [])), Effect.mapError(error => new DnsError({
424
+ reason: error.reason,
425
+ method: "reverse",
426
+ hostname: NetAddress.formatIp(address),
427
+ cause: error.cause
428
+ }))));
429
+ const lookup = (input, options) => Result.match(Host.domainNameFromInput(input), {
430
+ onFailure: cause => badName("lookup", input, cause),
431
+ onSuccess: host => impl.lookup(host, options?.family).pipe(Effect.flatMap(addresses => Arr.match(Arr.dedupe(addresses.filter(inFamily(options?.family))), {
432
+ onEmpty: () => notFound("lookup", host),
433
+ onNonEmpty: Effect.succeed
434
+ })))
435
+ });
436
+ return Dns.of({
437
+ lookup,
438
+ resolve: (input, type) => Result.match(Host.domainNameFromInput(input), {
439
+ onFailure: cause => badName("resolve", input, cause, type),
440
+ onSuccess: name => resolveRecords(name, type).pipe(Effect.flatMap(records => Arr.match(Arr.dedupe(records.filter(record => record._tag === type)), {
441
+ onEmpty: () => notFound("resolve", name, type),
442
+ onNonEmpty: Effect.succeed
443
+ })))
444
+ }),
445
+ reverse: input => Result.match(NetAddress.ipFromInput(input), {
446
+ onFailure: cause => badName("reverse", String(input), cause),
447
+ onSuccess: address => reverseNames(address).pipe(Effect.flatMap(names => {
448
+ const hostname = NetAddress.formatIp(address);
449
+ // Only ASCII names: `domainNameFromString` would convert UTF-8 labels
450
+ // to a different, `xn--` name.
451
+ const hosts = Arr.dedupe(Arr.filterMap(names.filter(name => asciiName.test(name)), Host.domainNameFromString));
452
+ return Arr.isReadonlyArrayNonEmpty(hosts) ? Effect.succeed(hosts) : names.length > 0 ? Effect.fail(new DnsError({
453
+ reason: "InvalidResponse",
454
+ method: "reverse",
455
+ hostname
456
+ })) : notFound("reverse", hostname);
457
+ }))
458
+ })
459
+ });
460
+ };
461
+ const zoneKey = name => name.length > 1 && name.endsWith(".") ? name.slice(0, -1) : name;
462
+ /**
463
+ * Creates a `Dns` service that answers from fixed data.
464
+ *
465
+ * **When to use**
466
+ *
467
+ * Use to test code that depends on `Dns`, or to provide fixed names on
468
+ * platforms without a resolver.
469
+ *
470
+ * **Details**
471
+ *
472
+ * Names without matching addresses or records fail with `NotFound`. CNAME
473
+ * records are returned by `CNAME` queries but are not followed.
474
+ *
475
+ * **Example** (Looking up a name with a static resolver)
476
+ *
477
+ * ```ts import.meta.vitest
478
+ * import { Effect, Result } from "effect"
479
+ * import { Dns, NetAddress } from "effect/net"
480
+ *
481
+ * const dns = Result.getOrThrow(Dns.makeStatic({
482
+ * hosts: { "db.internal": ["10.0.0.5"] }
483
+ * }))
484
+ *
485
+ * const program = dns.lookup("db.internal").pipe(
486
+ * Effect.map((addresses) => addresses.map(NetAddress.formatIp))
487
+ * )
488
+ *
489
+ * await Effect.runPromise(program) // => ["10.0.0.5"]
490
+ * ```
491
+ *
492
+ * @see {@link layerStatic}
493
+ * @stability experimental
494
+ * @category constructors
495
+ * @since 4.0.0
496
+ */
497
+ export const makeStatic = zone => {
498
+ const entries = new Map();
499
+ const entry = name => Result.map(Host.domainNameFromString(name), domain => {
500
+ const key = zoneKey(domain);
501
+ let current = entries.get(key);
502
+ if (current === undefined) {
503
+ current = {
504
+ addresses: [],
505
+ records: []
506
+ };
507
+ entries.set(key, current);
508
+ }
509
+ return current;
510
+ });
511
+ for (const [name, addresses] of Object.entries(zone.hosts ?? {})) {
512
+ const result = entry(name);
513
+ if (Result.isFailure(result)) return Result.fail(result.failure);
514
+ for (const input of addresses) {
515
+ const address = NetAddress.ipFromInput(input);
516
+ if (Result.isFailure(address)) return Result.fail(address.failure);
517
+ result.success.addresses.push(address.success);
518
+ }
519
+ }
520
+ for (const [name, records] of Object.entries(zone.records ?? {})) {
521
+ const result = entry(name);
522
+ if (Result.isFailure(result)) return Result.fail(result.failure);
523
+ for (const record of records) {
524
+ if (!isDnsRecord(record)) {
525
+ return Result.fail(new NetAddress.NetAddressError({
526
+ input: record,
527
+ message: "expected a DNS record"
528
+ }));
529
+ }
530
+ result.success.records.push(record);
531
+ }
532
+ }
533
+ const recordsAt = name => entries.get(zoneKey(name))?.records ?? [];
534
+ return Result.succeed(make({
535
+ lookup: host => Effect.sync(() => [...(entries.get(zoneKey(host))?.addresses ?? []), ...recordsAt(host).flatMap(record => record._tag === "A" || record._tag === "AAAA" ? [record.address] : [])]),
536
+ resolve: name => Effect.sync(() => recordsAt(name)),
537
+ reverse: address => Effect.sync(() => [...[...entries].flatMap(([name, current]) => current.addresses.some(candidate => Equal.equals(candidate, address)) ? [name] : []), ...recordsAt(reverseName(address)).flatMap(record => record._tag === "PTR" ? [record.host] : [])])
538
+ }));
539
+ };
540
+ /**
541
+ * Creates a layer that provides a `Dns` service answering from fixed data.
542
+ *
543
+ * @see {@link makeStatic} for the resolution rules
544
+ * @stability experimental
545
+ * @category layers
546
+ * @since 4.0.0
547
+ */
548
+ export const layerStatic = zone => Layer.effect(Dns, Effect.fromResult(makeStatic(zone)));
549
+ //# sourceMappingURL=Dns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dns.js","names":[],"sources":["../../src/net/Dns.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}