effect 4.0.2 → 4.0.3

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 (243) hide show
  1. package/dist/Context.js +3 -3
  2. package/dist/Context.js.map +1 -1
  3. package/dist/Crypto.d.ts +33 -5
  4. package/dist/Crypto.d.ts.map +1 -1
  5. package/dist/Crypto.js +8 -2
  6. package/dist/Crypto.js.map +1 -1
  7. package/dist/DateTime.d.ts +9 -6
  8. package/dist/DateTime.d.ts.map +1 -1
  9. package/dist/DateTime.js +9 -6
  10. package/dist/DateTime.js.map +1 -1
  11. package/dist/Duration.d.ts +6 -6
  12. package/dist/Duration.d.ts.map +1 -1
  13. package/dist/Duration.js +27 -8
  14. package/dist/Duration.js.map +1 -1
  15. package/dist/FileSystem.d.ts +44 -2
  16. package/dist/FileSystem.d.ts.map +1 -1
  17. package/dist/FileSystem.js.map +1 -1
  18. package/dist/Schema.d.ts +473 -1
  19. package/dist/Schema.d.ts.map +1 -1
  20. package/dist/Schema.js +355 -4
  21. package/dist/Schema.js.map +1 -1
  22. package/dist/Stdio.d.ts +7 -1
  23. package/dist/Stdio.d.ts.map +1 -1
  24. package/dist/Stdio.js +1 -0
  25. package/dist/Stdio.js.map +1 -1
  26. package/dist/Stream.d.ts +11 -11
  27. package/dist/Stream.js +5 -5
  28. package/dist/ai/McpServer.d.ts +6 -0
  29. package/dist/ai/McpServer.d.ts.map +1 -1
  30. package/dist/ai/McpServer.js +65 -23
  31. package/dist/ai/McpServer.js.map +1 -1
  32. package/dist/ai/internal/mcpProtocol/v2026_07_28.js +5 -0
  33. package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
  34. package/dist/ai/internal/mcpProtocol.js.map +1 -1
  35. package/dist/ai/internal/mcpRuntime.js +1 -0
  36. package/dist/ai/internal/mcpRuntime.js.map +1 -1
  37. package/dist/cli/CliOutput.d.ts +27 -0
  38. package/dist/cli/CliOutput.d.ts.map +1 -1
  39. package/dist/cli/CliOutput.js +33 -10
  40. package/dist/cli/CliOutput.js.map +1 -1
  41. package/dist/cli/Command.d.ts.map +1 -1
  42. package/dist/cli/Command.js +6 -3
  43. package/dist/cli/Command.js.map +1 -1
  44. package/dist/cli/Completions.d.ts +3 -3
  45. package/dist/cli/Completions.d.ts.map +1 -1
  46. package/dist/cli/Completions.js +8 -5
  47. package/dist/cli/Completions.js.map +1 -1
  48. package/dist/cli/GlobalFlag.d.ts +5 -4
  49. package/dist/cli/GlobalFlag.d.ts.map +1 -1
  50. package/dist/cli/GlobalFlag.js +3 -3
  51. package/dist/cli/GlobalFlag.js.map +1 -1
  52. package/dist/cli/Prompt.d.ts +17 -1
  53. package/dist/cli/Prompt.d.ts.map +1 -1
  54. package/dist/cli/Prompt.js +119 -114
  55. package/dist/cli/Prompt.js.map +1 -1
  56. package/dist/cli/internal/ansi.d.ts +0 -1
  57. package/dist/cli/internal/ansi.d.ts.map +1 -1
  58. package/dist/cli/internal/ansi.js +20 -3
  59. package/dist/cli/internal/ansi.js.map +1 -1
  60. package/dist/cli/internal/completions/powershell.d.ts +2 -0
  61. package/dist/cli/internal/completions/powershell.d.ts.map +1 -0
  62. package/dist/cli/internal/completions/powershell.js +273 -0
  63. package/dist/cli/internal/completions/powershell.js.map +1 -0
  64. package/dist/cli/internal/completions/zsh.js +3 -2
  65. package/dist/cli/internal/completions/zsh.js.map +1 -1
  66. package/dist/cli/internal/wizard.d.ts +3 -3
  67. package/dist/cli/internal/wizard.d.ts.map +1 -1
  68. package/dist/cli/internal/wizard.js +21 -18
  69. package/dist/cli/internal/wizard.js.map +1 -1
  70. package/dist/cluster/ClusterSchema.d.ts +28 -0
  71. package/dist/cluster/ClusterSchema.d.ts.map +1 -1
  72. package/dist/cluster/ClusterSchema.js +30 -0
  73. package/dist/cluster/ClusterSchema.js.map +1 -1
  74. package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  75. package/dist/cluster/ClusterWorkflowEngine.js +10 -18
  76. package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
  77. package/dist/cluster/MessageStorage.d.ts +18 -3
  78. package/dist/cluster/MessageStorage.d.ts.map +1 -1
  79. package/dist/cluster/MessageStorage.js +31 -11
  80. package/dist/cluster/MessageStorage.js.map +1 -1
  81. package/dist/cluster/Runners.d.ts.map +1 -1
  82. package/dist/cluster/Runners.js +8 -2
  83. package/dist/cluster/Runners.js.map +1 -1
  84. package/dist/cluster/Sharding.d.ts.map +1 -1
  85. package/dist/cluster/Sharding.js +181 -62
  86. package/dist/cluster/Sharding.js.map +1 -1
  87. package/dist/cluster/SqlMessageStorage.d.ts +59 -19
  88. package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
  89. package/dist/cluster/SqlMessageStorage.js +84 -55
  90. package/dist/cluster/SqlMessageStorage.js.map +1 -1
  91. package/dist/cluster/SqlRunnerStorage.d.ts +68 -19
  92. package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
  93. package/dist/cluster/SqlRunnerStorage.js +191 -113
  94. package/dist/cluster/SqlRunnerStorage.js.map +1 -1
  95. package/dist/cluster/internal/entityManager.js +104 -37
  96. package/dist/cluster/internal/entityManager.js.map +1 -1
  97. package/dist/http/FindMyWay/internal/router.js +3 -6
  98. package/dist/http/FindMyWay/internal/router.js.map +1 -1
  99. package/dist/http/HttpClient.d.ts +6 -0
  100. package/dist/http/HttpClient.d.ts.map +1 -1
  101. package/dist/http/HttpClient.js +39 -2
  102. package/dist/http/HttpClient.js.map +1 -1
  103. package/dist/http/HttpTraceContext.d.ts.map +1 -1
  104. package/dist/http/HttpTraceContext.js +4 -2
  105. package/dist/http/HttpTraceContext.js.map +1 -1
  106. package/dist/internal/effect.js +12 -7
  107. package/dist/internal/effect.js.map +1 -1
  108. package/dist/internal/version.js +1 -1
  109. package/dist/net/AddressResolver.d.ts +145 -0
  110. package/dist/net/AddressResolver.d.ts.map +1 -0
  111. package/dist/net/AddressResolver.js +114 -0
  112. package/dist/net/AddressResolver.js.map +1 -0
  113. package/dist/net/Dns.d.ts +596 -0
  114. package/dist/net/Dns.d.ts.map +1 -0
  115. package/dist/net/Dns.js +549 -0
  116. package/dist/net/Dns.js.map +1 -0
  117. package/dist/net/Host.d.ts +320 -0
  118. package/dist/net/Host.d.ts.map +1 -0
  119. package/dist/net/Host.js +342 -0
  120. package/dist/net/Host.js.map +1 -0
  121. package/dist/net/IpInterface.d.ts +76 -3
  122. package/dist/net/IpInterface.d.ts.map +1 -1
  123. package/dist/net/IpInterface.js +53 -4
  124. package/dist/net/IpInterface.js.map +1 -1
  125. package/dist/net/IpNetwork.d.ts +82 -8
  126. package/dist/net/IpNetwork.d.ts.map +1 -1
  127. package/dist/net/IpNetwork.js +60 -4
  128. package/dist/net/IpNetwork.js.map +1 -1
  129. package/dist/net/NetAddress.d.ts +388 -35
  130. package/dist/net/NetAddress.d.ts.map +1 -1
  131. package/dist/net/NetAddress.js +350 -34
  132. package/dist/net/NetAddress.js.map +1 -1
  133. package/dist/net/index.d.ts +15 -0
  134. package/dist/net/index.d.ts.map +1 -1
  135. package/dist/net/index.js +15 -0
  136. package/dist/net/index.js.map +1 -1
  137. package/dist/observability/OtlpMetrics.d.ts.map +1 -1
  138. package/dist/observability/OtlpMetrics.js +15 -21
  139. package/dist/observability/OtlpMetrics.js.map +1 -1
  140. package/dist/observability/PrometheusMetrics.js +1 -0
  141. package/dist/observability/PrometheusMetrics.js.map +1 -1
  142. package/dist/persistence/PersistedQueue.d.ts +32 -3
  143. package/dist/persistence/PersistedQueue.d.ts.map +1 -1
  144. package/dist/persistence/PersistedQueue.js +75 -16
  145. package/dist/persistence/PersistedQueue.js.map +1 -1
  146. package/dist/rpc/RpcClient.d.ts +22 -6
  147. package/dist/rpc/RpcClient.d.ts.map +1 -1
  148. package/dist/rpc/RpcClient.js +12 -5
  149. package/dist/rpc/RpcClient.js.map +1 -1
  150. package/dist/rpc/RpcServer.d.ts +6 -0
  151. package/dist/rpc/RpcServer.d.ts.map +1 -1
  152. package/dist/rpc/RpcServer.js +42 -20
  153. package/dist/rpc/RpcServer.js.map +1 -1
  154. package/dist/socket/DatagramSocket.d.ts +456 -0
  155. package/dist/socket/DatagramSocket.d.ts.map +1 -0
  156. package/dist/socket/DatagramSocket.js +535 -0
  157. package/dist/socket/DatagramSocket.js.map +1 -0
  158. package/dist/socket/Socket.d.ts +14 -1
  159. package/dist/socket/Socket.d.ts.map +1 -1
  160. package/dist/socket/Socket.js +9 -1
  161. package/dist/socket/Socket.js.map +1 -1
  162. package/dist/socket/index.d.ts +5 -0
  163. package/dist/socket/index.d.ts.map +1 -1
  164. package/dist/socket/index.js +5 -0
  165. package/dist/socket/index.js.map +1 -1
  166. package/dist/sql/Migrator.d.ts.map +1 -1
  167. package/dist/sql/Migrator.js +7 -2
  168. package/dist/sql/Migrator.js.map +1 -1
  169. package/dist/sql/SqlClient.d.ts +7 -1
  170. package/dist/sql/SqlClient.d.ts.map +1 -1
  171. package/dist/sql/SqlClient.js +31 -6
  172. package/dist/sql/SqlClient.js.map +1 -1
  173. package/dist/testing/TestCrypto.d.ts +73 -0
  174. package/dist/testing/TestCrypto.d.ts.map +1 -0
  175. package/dist/testing/TestCrypto.js +87 -0
  176. package/dist/testing/TestCrypto.js.map +1 -0
  177. package/dist/testing/index.d.ts +5 -0
  178. package/dist/testing/index.d.ts.map +1 -1
  179. package/dist/testing/index.js +5 -0
  180. package/dist/testing/index.js.map +1 -1
  181. package/dist/workflow/DurableDeferred.d.ts +54 -0
  182. package/dist/workflow/DurableDeferred.d.ts.map +1 -1
  183. package/dist/workflow/DurableDeferred.js +78 -49
  184. package/dist/workflow/DurableDeferred.js.map +1 -1
  185. package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
  186. package/dist/workflow/WorkflowEngine.js +2 -1
  187. package/dist/workflow/WorkflowEngine.js.map +1 -1
  188. package/package.json +1 -1
  189. package/src/Context.ts +3 -3
  190. package/src/Crypto.ts +43 -9
  191. package/src/DateTime.ts +9 -6
  192. package/src/Duration.ts +36 -16
  193. package/src/FileSystem.ts +48 -2
  194. package/src/Schema.ts +669 -5
  195. package/src/Stdio.ts +9 -2
  196. package/src/Stream.ts +11 -11
  197. package/src/ai/McpServer.ts +63 -23
  198. package/src/ai/internal/mcpProtocol/v2026_07_28.ts +5 -0
  199. package/src/ai/internal/mcpProtocol.ts +3 -0
  200. package/src/ai/internal/mcpRuntime.ts +2 -0
  201. package/src/cli/CliOutput.ts +33 -16
  202. package/src/cli/Command.ts +4 -3
  203. package/src/cli/Completions.ts +9 -6
  204. package/src/cli/GlobalFlag.ts +19 -11
  205. package/src/cli/Prompt.ts +159 -149
  206. package/src/cli/internal/ansi.ts +26 -3
  207. package/src/cli/internal/completions/powershell.ts +322 -0
  208. package/src/cli/internal/completions/zsh.ts +4 -2
  209. package/src/cli/internal/wizard.ts +34 -26
  210. package/src/cluster/ClusterSchema.ts +32 -0
  211. package/src/cluster/ClusterWorkflowEngine.ts +13 -24
  212. package/src/cluster/MessageStorage.ts +45 -14
  213. package/src/cluster/Runners.ts +8 -2
  214. package/src/cluster/Sharding.ts +207 -49
  215. package/src/cluster/SqlMessageStorage.ts +118 -84
  216. package/src/cluster/SqlRunnerStorage.ts +224 -128
  217. package/src/cluster/internal/entityManager.ts +151 -55
  218. package/src/http/FindMyWay/internal/router.ts +4 -7
  219. package/src/http/HttpClient.ts +56 -2
  220. package/src/http/HttpTraceContext.ts +8 -2
  221. package/src/internal/effect.ts +15 -13
  222. package/src/internal/version.ts +1 -1
  223. package/src/net/AddressResolver.ts +222 -0
  224. package/src/net/Dns.ts +1035 -0
  225. package/src/net/Host.ts +472 -0
  226. package/src/net/IpInterface.ts +117 -7
  227. package/src/net/IpNetwork.ts +116 -17
  228. package/src/net/NetAddress.ts +611 -76
  229. package/src/net/index.ts +18 -0
  230. package/src/observability/OtlpMetrics.ts +12 -23
  231. package/src/observability/PrometheusMetrics.ts +1 -0
  232. package/src/persistence/PersistedQueue.ts +146 -53
  233. package/src/rpc/RpcClient.ts +41 -19
  234. package/src/rpc/RpcServer.ts +60 -25
  235. package/src/socket/DatagramSocket.ts +919 -0
  236. package/src/socket/Socket.ts +22 -2
  237. package/src/socket/index.ts +6 -0
  238. package/src/sql/Migrator.ts +21 -5
  239. package/src/sql/SqlClient.ts +39 -15
  240. package/src/testing/TestCrypto.ts +94 -0
  241. package/src/testing/index.ts +6 -0
  242. package/src/workflow/DurableDeferred.ts +123 -48
  243. package/src/workflow/WorkflowEngine.ts +2 -1
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Resolves host and port endpoints to socket addresses.
3
+ *
4
+ * The `AddressResolver` service turns a `Host.HostPort` or `host:port` string
5
+ * into socket addresses. Numeric hosts are converted without a lookup. IPv6
6
+ * literals with a named zone such as `fe80::1%eth0` get their scope ID from the host's
7
+ * network interfaces, and domain names are looked up with the `Dns` service.
8
+ * Runtime layers look up network interfaces; this module's layer requires
9
+ * only `Dns` and supports numeric zones only.
10
+ *
11
+ * @stability experimental
12
+ * @since 4.0.0
13
+ */
14
+ import * as Arr from "../Array.ts";
15
+ import * as Context from "../Context.ts";
16
+ import * as Effect from "../Effect.ts";
17
+ import * as Layer from "../Layer.ts";
18
+ import * as Option from "../Option.ts";
19
+ import * as Dns from "./Dns.ts";
20
+ import * as Host from "./Host.ts";
21
+ import * as NetAddress from "./NetAddress.ts";
22
+ declare const AddressResolver_base: Context.ServiceClass<AddressResolver, "effect/net/AddressResolver", {
23
+ /**
24
+ * Resolves an endpoint to every matching socket address.
25
+ *
26
+ * **Details**
27
+ *
28
+ * - Socket addresses are returned as-is.
29
+ * - `host:port` strings and `{ host, port }` objects are converted like
30
+ * `Host.hostPortFromInput`, failing with `NetAddressError` when invalid.
31
+ * - A `Host.HostPort` with a numeric host is converted without a lookup.
32
+ * - A `Host.HostPort` with a domain name is looked up with `Dns.lookup`, and
33
+ * the port is attached to every address.
34
+ *
35
+ * Results keep the resolver's order and are filtered by the requested
36
+ * family, which does not apply to Unix-domain addresses.
37
+ *
38
+ * **Gotchas**
39
+ *
40
+ * Looked-up IPv6 link-local addresses (`fe80::/10`) are skipped, because
41
+ * lookups do not report the interface they belong to and they cannot be
42
+ * connected to without it. Names that resolve only to such addresses, such
43
+ * as some `.local` names, fail with a `NetAddress.NetAddressError`; use an
44
+ * address with a zone such as `fe80::1%en0` instead.
45
+ */
46
+ resolve<F extends NetAddress.IpFamily>(target: NetAddress.InetAddress | Host.HostPortInput, options: ResolveOptions & {
47
+ readonly family: F;
48
+ }): Effect.Effect<Arr.NonEmptyReadonlyArray<NetAddress.Inet<NetAddress.FamilyAddress<F>>>, Dns.DnsError | NetAddress.NetAddressError>;
49
+ resolve(target: NetAddress.InetAddress | Host.HostPortInput, options?: ResolveOptions): Effect.Effect<Arr.NonEmptyReadonlyArray<NetAddress.InetAddress>, Dns.DnsError | NetAddress.NetAddressError>;
50
+ resolve(target: NetAddress.SocketAddress | Host.HostPortInput, options?: ResolveOptions): Effect.Effect<Arr.NonEmptyReadonlyArray<NetAddress.SocketAddress>, Dns.DnsError | NetAddress.NetAddressError>;
51
+ }>;
52
+ /**
53
+ * Service that resolves endpoints to internet and socket addresses.
54
+ *
55
+ * **Details**
56
+ *
57
+ * Every operation either returns at least one address or fails. Lookups fail
58
+ * with a `Dns.DnsError`, and hosts that cannot be converted, such as IPv6
59
+ * literals with an unknown zone or numeric addresses outside the requested
60
+ * family, fail with a `NetAddress.NetAddressError`.
61
+ *
62
+ * @stability experimental
63
+ * @category services
64
+ * @since 4.0.0
65
+ */
66
+ export declare class AddressResolver extends AddressResolver_base {
67
+ }
68
+ /**
69
+ * Options for resolving an endpoint. Without a `family`, addresses of both
70
+ * families are returned.
71
+ *
72
+ * @stability experimental
73
+ * @category models
74
+ * @since 4.0.0
75
+ */
76
+ export interface ResolveOptions {
77
+ readonly family?: NetAddress.IpFamily | undefined;
78
+ }
79
+ /**
80
+ * Looks up the IPv6 scope ID of a network interface by name.
81
+ *
82
+ * **Details**
83
+ *
84
+ * Returns `None` for interfaces that do not exist or have no IPv6 scope ID, and
85
+ * fails when the interfaces cannot be listed.
86
+ *
87
+ * @stability experimental
88
+ * @category models
89
+ * @since 4.0.0
90
+ */
91
+ export type ScopeIdLookup = (name: string) => Effect.Effect<Option.Option<number>, NetAddress.NetAddressError>;
92
+ /**
93
+ * Options for creating an `AddressResolver`.
94
+ *
95
+ * **Details**
96
+ *
97
+ * `scopeId` is called whenever an IPv6 literal with a named zone such as
98
+ * `fe80::1%eth0` is resolved, so interfaces added or recreated while the
99
+ * program runs are found. Without it, only numeric zones such as `fe80::1%2`
100
+ * are supported.
101
+ *
102
+ * @stability experimental
103
+ * @category models
104
+ * @since 4.0.0
105
+ */
106
+ export interface MakeOptions {
107
+ readonly scopeId?: ScopeIdLookup | undefined;
108
+ }
109
+ /**
110
+ * Creates an `AddressResolver` that looks up domain names with a `Dns`
111
+ * service.
112
+ *
113
+ * **Example** (Resolving an endpoint with a static resolver)
114
+ *
115
+ * ```ts import.meta.vitest
116
+ * import { Effect, Result } from "effect"
117
+ * import { AddressResolver, Dns, NetAddress } from "effect/net"
118
+ *
119
+ * const dns = Result.getOrThrow(Dns.makeStatic({
120
+ * hosts: { "db.internal": ["10.0.0.5"] }
121
+ * }))
122
+ * const resolver = AddressResolver.make(dns)
123
+ *
124
+ * const program = resolver.resolve("db.internal:5432").pipe(
125
+ * Effect.map((addresses) => addresses.map(NetAddress.formatInet))
126
+ * )
127
+ *
128
+ * await Effect.runPromise(program) // => ["10.0.0.5:5432"]
129
+ * ```
130
+ *
131
+ * @stability experimental
132
+ * @category constructors
133
+ * @since 4.0.0
134
+ */
135
+ export declare const make: (dns: Dns.Dns["Service"], options?: MakeOptions) => AddressResolver["Service"];
136
+ /**
137
+ * Creates a layer that provides an `AddressResolver` using the `Dns` service.
138
+ *
139
+ * @stability experimental
140
+ * @category layers
141
+ * @since 4.0.0
142
+ */
143
+ export declare const layer: (options?: MakeOptions) => Layer.Layer<AddressResolver, never, Dns.Dns>;
144
+ export {};
145
+ //# sourceMappingURL=AddressResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddressResolver.d.ts","sourceRoot":"","sources":["../../src/net/AddressResolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,GAAG,MAAM,aAAa,CAAA;AAClC,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,KAAK,MAAM,aAAa,CAAA;AACpC,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;;IAiB3C;;;;;;;;;;;;;;;;;;;;;;OAsBG;YACK,CAAC,SAAS,UAAU,CAAC,QAAQ,UAC3B,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,WAC1C,cAAc,GAAG;QAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;KAAE,GAC/C,MAAM,CAAC,MAAM,CACd,GAAG,CAAC,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EACvE,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,eAAe,CAC1C;oBAES,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,YACzC,cAAc,GACvB,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,eAAe,CAAC;oBAEpG,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,YAC3C,cAAc,GACvB,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,eAAe,CAAC;;AApDlH;;;;;;;;;;;;;GAaG;AACH,qBAAa,eAAgB,SAAQ,oBAuCH;CAAG;AAErC;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,GAAG,SAAS,CAAA;CAClD;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,eAAe,CAAC,CAAA;AAE9G;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,CAAA;CAC7C;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,IAAI,QAAS,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,WAAW,KAAG,eAAe,CAAC,SAAS,CAwD9F,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,aAAc,WAAW,KAAG,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CACQ,CAAA"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Resolves host and port endpoints to socket addresses.
3
+ *
4
+ * The `AddressResolver` service turns a `Host.HostPort` or `host:port` string
5
+ * into socket addresses. Numeric hosts are converted without a lookup. IPv6
6
+ * literals with a named zone such as `fe80::1%eth0` get their scope ID from the host's
7
+ * network interfaces, and domain names are looked up with the `Dns` service.
8
+ * Runtime layers look up network interfaces; this module's layer requires
9
+ * only `Dns` and supports numeric zones only.
10
+ *
11
+ * @stability experimental
12
+ * @since 4.0.0
13
+ */
14
+ import * as Arr from "../Array.js";
15
+ import * as Context from "../Context.js";
16
+ import * as Effect from "../Effect.js";
17
+ import * as Layer from "../Layer.js";
18
+ import * as Option from "../Option.js";
19
+ import * as Dns from "./Dns.js";
20
+ import * as Host from "./Host.js";
21
+ import * as NetAddress from "./NetAddress.js";
22
+ /**
23
+ * Service that resolves endpoints to internet and socket addresses.
24
+ *
25
+ * **Details**
26
+ *
27
+ * Every operation either returns at least one address or fails. Lookups fail
28
+ * with a `Dns.DnsError`, and hosts that cannot be converted, such as IPv6
29
+ * literals with an unknown zone or numeric addresses outside the requested
30
+ * family, fail with a `NetAddress.NetAddressError`.
31
+ *
32
+ * @stability experimental
33
+ * @category services
34
+ * @since 4.0.0
35
+ */
36
+ export class AddressResolver extends /*#__PURE__*/Context.Service()("effect/net/AddressResolver") {}
37
+ const inFamily = (address, family) => family === undefined || NetAddress.isFamily(address, family) ? Effect.succeed(Arr.of(address)) : Effect.fail(new NetAddress.NetAddressError({
38
+ input: address,
39
+ message: `expected an ${family} address`
40
+ }));
41
+ /**
42
+ * Creates an `AddressResolver` that looks up domain names with a `Dns`
43
+ * service.
44
+ *
45
+ * **Example** (Resolving an endpoint with a static resolver)
46
+ *
47
+ * ```ts import.meta.vitest
48
+ * import { Effect, Result } from "effect"
49
+ * import { AddressResolver, Dns, NetAddress } from "effect/net"
50
+ *
51
+ * const dns = Result.getOrThrow(Dns.makeStatic({
52
+ * hosts: { "db.internal": ["10.0.0.5"] }
53
+ * }))
54
+ * const resolver = AddressResolver.make(dns)
55
+ *
56
+ * const program = resolver.resolve("db.internal:5432").pipe(
57
+ * Effect.map((addresses) => addresses.map(NetAddress.formatInet))
58
+ * )
59
+ *
60
+ * await Effect.runPromise(program) // => ["10.0.0.5:5432"]
61
+ * ```
62
+ *
63
+ * @stability experimental
64
+ * @category constructors
65
+ * @since 4.0.0
66
+ */
67
+ export const make = (dns, options) => {
68
+ const scopeId = options?.scopeId;
69
+ const fromLiteral = (host, port) => {
70
+ if (NetAddress.isIpAddress(host)) return Effect.fromResult(NetAddress.inetAddress(host, port));
71
+ const zone = host.slice(host.indexOf("%") + 1);
72
+ if (scopeId === undefined || /^\d+$/.test(zone)) {
73
+ return Effect.fromResult(NetAddress.inetAddressFromHostString(host, port));
74
+ }
75
+ return Effect.flatMap(scopeId(zone), id => Effect.fromResult(NetAddress.inetAddressFromHostString(host, port, Option.isSome(id) ? new Map([[zone, id.value]]) : undefined)));
76
+ };
77
+ const resolve = (target, options) => {
78
+ const family = options?.family;
79
+ if (NetAddress.isUnixPathAddress(target)) return Effect.succeed(Arr.of(target));
80
+ if (NetAddress.isInetAddress(target)) return inFamily(target, family);
81
+ if (!Host.isHostPort(target)) {
82
+ return Effect.flatMap(Effect.fromResult(Host.hostPortFromInput(target)), endpoint => resolve(endpoint, options));
83
+ }
84
+ const {
85
+ host,
86
+ port
87
+ } = target;
88
+ if (NetAddress.isIpAddress(host) || NetAddress.isScopedIpv6Literal(host)) {
89
+ return Effect.flatMap(fromLiteral(host, port), address => inFamily(address, family));
90
+ }
91
+ return Effect.flatMap(dns.lookup(host, {
92
+ family
93
+ }), addresses => {
94
+ // Lookups do not report the scope that a link-local IPv6 address needs.
95
+ const usable = addresses.filter(address => !(NetAddress.isIpv6Address(address) && NetAddress.isLinkLocal(address)));
96
+ return Arr.isReadonlyArrayNonEmpty(usable) ? Effect.succeed(Arr.map(usable, address => NetAddress.inetAddressUnsafe(address, port))) : Effect.fail(new NetAddress.NetAddressError({
97
+ input: host,
98
+ message: "only link-local IPv6 addresses were found, and lookups do not report their scope"
99
+ }));
100
+ });
101
+ };
102
+ return AddressResolver.of({
103
+ resolve: resolve
104
+ });
105
+ };
106
+ /**
107
+ * Creates a layer that provides an `AddressResolver` using the `Dns` service.
108
+ *
109
+ * @stability experimental
110
+ * @category layers
111
+ * @since 4.0.0
112
+ */
113
+ export const layer = options => Layer.effect(AddressResolver, Effect.map(Effect.service(Dns.Dns), dns => make(dns, options)));
114
+ //# sourceMappingURL=AddressResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddressResolver.js","names":[],"sources":["../../src/net/AddressResolver.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}