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.
- package/AGENTS.md +24 -0
- package/CLAUDE.md +24 -0
- package/ai-docs/package.json +2 -2
- package/ai-docs/src/52_graphql/10_basics.ts +111 -0
- package/ai-docs/src/52_graphql/20_testing.ts +45 -0
- package/ai-docs/src/52_graphql/30_batching.ts +116 -0
- package/ai-docs/src/52_graphql/40_aliased-batching.ts +122 -0
- package/ai-docs/src/52_graphql/50_errors-and-retries.ts +74 -0
- package/ai-docs/src/52_graphql/index.md +6 -0
- package/dist/Context.d.ts.map +1 -1
- package/dist/Context.js +12 -3
- package/dist/Context.js.map +1 -1
- package/dist/Crypto.d.ts +33 -5
- package/dist/Crypto.d.ts.map +1 -1
- package/dist/Crypto.js +8 -2
- package/dist/Crypto.js.map +1 -1
- package/dist/DateTime.d.ts +9 -6
- package/dist/DateTime.d.ts.map +1 -1
- package/dist/DateTime.js +9 -6
- package/dist/DateTime.js.map +1 -1
- package/dist/Duration.d.ts +6 -6
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +27 -8
- package/dist/Duration.js.map +1 -1
- package/dist/FileSystem.d.ts +44 -2
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js.map +1 -1
- package/dist/RequestResolver.d.ts.map +1 -1
- package/dist/RequestResolver.js +4 -10
- package/dist/RequestResolver.js.map +1 -1
- package/dist/Scheduler.d.ts +9 -0
- package/dist/Scheduler.d.ts.map +1 -1
- package/dist/Scheduler.js +9 -0
- package/dist/Scheduler.js.map +1 -1
- package/dist/Schema.d.ts +481 -1
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +362 -4
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaGetter.d.ts +4 -0
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +52 -33
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/Sink.d.ts.map +1 -1
- package/dist/Sink.js +38 -17
- package/dist/Sink.js.map +1 -1
- package/dist/Stdio.d.ts +7 -1
- package/dist/Stdio.d.ts.map +1 -1
- package/dist/Stdio.js +1 -0
- package/dist/Stdio.js.map +1 -1
- package/dist/Stream.d.ts +22 -11
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +21 -6
- package/dist/Stream.js.map +1 -1
- package/dist/Utils.js +8 -3
- package/dist/Utils.js.map +1 -1
- package/dist/ai/AnthropicStructuredOutput.js +0 -2
- package/dist/ai/AnthropicStructuredOutput.js.map +1 -1
- package/dist/ai/Chat.d.ts +2 -2
- package/dist/ai/Chat.d.ts.map +1 -1
- package/dist/ai/LanguageModel.d.ts +38 -7
- package/dist/ai/LanguageModel.d.ts.map +1 -1
- package/dist/ai/LanguageModel.js +25 -7
- package/dist/ai/LanguageModel.js.map +1 -1
- package/dist/ai/McpServer.d.ts +61 -0
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +196 -44
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/Prompt.d.ts.map +1 -1
- package/dist/ai/Prompt.js +28 -5
- package/dist/ai/Prompt.js.map +1 -1
- package/dist/ai/Response.d.ts +4 -3
- package/dist/ai/Response.d.ts.map +1 -1
- package/dist/ai/Response.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js +5 -0
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
- package/dist/ai/internal/mcpProtocol.js.map +1 -1
- package/dist/ai/internal/mcpRuntime.js +1 -0
- package/dist/ai/internal/mcpRuntime.js.map +1 -1
- package/dist/cli/CliOutput.d.ts +27 -0
- package/dist/cli/CliOutput.d.ts.map +1 -1
- package/dist/cli/CliOutput.js +33 -10
- package/dist/cli/CliOutput.js.map +1 -1
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +6 -3
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Completions.d.ts +3 -3
- package/dist/cli/Completions.d.ts.map +1 -1
- package/dist/cli/Completions.js +8 -5
- package/dist/cli/Completions.js.map +1 -1
- package/dist/cli/GlobalFlag.d.ts +5 -4
- package/dist/cli/GlobalFlag.d.ts.map +1 -1
- package/dist/cli/GlobalFlag.js +3 -3
- package/dist/cli/GlobalFlag.js.map +1 -1
- package/dist/cli/Prompt.d.ts +17 -1
- package/dist/cli/Prompt.d.ts.map +1 -1
- package/dist/cli/Prompt.js +119 -114
- package/dist/cli/Prompt.js.map +1 -1
- package/dist/cli/internal/ansi.d.ts +0 -1
- package/dist/cli/internal/ansi.d.ts.map +1 -1
- package/dist/cli/internal/ansi.js +20 -3
- package/dist/cli/internal/ansi.js.map +1 -1
- package/dist/cli/internal/completions/powershell.d.ts +2 -0
- package/dist/cli/internal/completions/powershell.d.ts.map +1 -0
- package/dist/cli/internal/completions/powershell.js +273 -0
- package/dist/cli/internal/completions/powershell.js.map +1 -0
- package/dist/cli/internal/completions/zsh.js +3 -2
- package/dist/cli/internal/completions/zsh.js.map +1 -1
- package/dist/cli/internal/wizard.d.ts +3 -3
- package/dist/cli/internal/wizard.d.ts.map +1 -1
- package/dist/cli/internal/wizard.js +21 -18
- package/dist/cli/internal/wizard.js.map +1 -1
- package/dist/cluster/ClusterSchema.d.ts +28 -0
- package/dist/cluster/ClusterSchema.d.ts.map +1 -1
- package/dist/cluster/ClusterSchema.js +30 -0
- package/dist/cluster/ClusterSchema.js.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.js +56 -26
- package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/cluster/MessageStorage.d.ts +18 -3
- package/dist/cluster/MessageStorage.d.ts.map +1 -1
- package/dist/cluster/MessageStorage.js +31 -11
- package/dist/cluster/MessageStorage.js.map +1 -1
- package/dist/cluster/Runners.d.ts.map +1 -1
- package/dist/cluster/Runners.js +8 -2
- package/dist/cluster/Runners.js.map +1 -1
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +187 -66
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/SqlMessageStorage.d.ts +59 -19
- package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
- package/dist/cluster/SqlMessageStorage.js +84 -55
- package/dist/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/cluster/SqlRunnerStorage.d.ts +68 -19
- package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/cluster/SqlRunnerStorage.js +191 -113
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/cluster/internal/entityManager.js +104 -37
- package/dist/cluster/internal/entityManager.js.map +1 -1
- package/dist/encoding/Sse.d.ts +6 -0
- package/dist/encoding/Sse.d.ts.map +1 -1
- package/dist/encoding/Sse.js +62 -70
- package/dist/encoding/Sse.js.map +1 -1
- package/dist/graphql/GraphQL.d.ts +349 -0
- package/dist/graphql/GraphQL.d.ts.map +1 -0
- package/dist/graphql/GraphQL.js +207 -0
- package/dist/graphql/GraphQL.js.map +1 -0
- package/dist/graphql/GraphQLClient.d.ts +562 -0
- package/dist/graphql/GraphQLClient.d.ts.map +1 -0
- package/dist/graphql/GraphQLClient.js +498 -0
- package/dist/graphql/GraphQLClient.js.map +1 -0
- package/dist/graphql/GraphQLClientError.d.ts +445 -0
- package/dist/graphql/GraphQLClientError.d.ts.map +1 -0
- package/dist/graphql/GraphQLClientError.js +479 -0
- package/dist/graphql/GraphQLClientError.js.map +1 -0
- package/dist/graphql/GraphQLGroup.d.ts +118 -0
- package/dist/graphql/GraphQLGroup.d.ts.map +1 -0
- package/dist/graphql/GraphQLGroup.js +109 -0
- package/dist/graphql/GraphQLGroup.js.map +1 -0
- package/dist/graphql/GraphQLMiddleware.d.ts +249 -0
- package/dist/graphql/GraphQLMiddleware.d.ts.map +1 -0
- package/dist/graphql/GraphQLMiddleware.js +130 -0
- package/dist/graphql/GraphQLMiddleware.js.map +1 -0
- package/dist/graphql/GraphQLProtocol.d.ts +731 -0
- package/dist/graphql/GraphQLProtocol.d.ts.map +1 -0
- package/dist/graphql/GraphQLProtocol.js +719 -0
- package/dist/graphql/GraphQLProtocol.js.map +1 -0
- package/dist/graphql/GraphQLResolver.d.ts +453 -0
- package/dist/graphql/GraphQLResolver.d.ts.map +1 -0
- package/dist/graphql/GraphQLResolver.js +552 -0
- package/dist/graphql/GraphQLResolver.js.map +1 -0
- package/dist/graphql/index.d.ts +40 -0
- package/dist/graphql/index.d.ts.map +1 -0
- package/dist/graphql/index.js +41 -0
- package/dist/graphql/index.js.map +1 -0
- package/dist/http/FindMyWay/internal/router.js +3 -6
- package/dist/http/FindMyWay/internal/router.js.map +1 -1
- package/dist/http/HttpClient.d.ts +21 -0
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +63 -12
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/HttpEffect.d.ts.map +1 -1
- package/dist/http/HttpEffect.js +14 -7
- package/dist/http/HttpEffect.js.map +1 -1
- package/dist/http/HttpMiddleware.d.ts.map +1 -1
- package/dist/http/HttpMiddleware.js +31 -32
- package/dist/http/HttpMiddleware.js.map +1 -1
- package/dist/http/HttpRouter.d.ts +35 -0
- package/dist/http/HttpRouter.d.ts.map +1 -1
- package/dist/http/HttpRouter.js +35 -0
- package/dist/http/HttpRouter.js.map +1 -1
- package/dist/http/HttpServerResponse.d.ts +8 -6
- package/dist/http/HttpServerResponse.d.ts.map +1 -1
- package/dist/http/HttpServerResponse.js +27 -16
- package/dist/http/HttpServerResponse.js.map +1 -1
- package/dist/http/HttpTraceContext.d.ts.map +1 -1
- package/dist/http/HttpTraceContext.js +4 -2
- package/dist/http/HttpTraceContext.js.map +1 -1
- package/dist/http/Multipart.d.ts.map +1 -1
- package/dist/http/Multipart.js +15 -1
- package/dist/http/Multipart.js.map +1 -1
- package/dist/http-api/HttpApiScalar.d.ts +5 -0
- package/dist/http-api/HttpApiScalar.d.ts.map +1 -1
- package/dist/http-api/HttpApiScalar.js.map +1 -1
- package/dist/internal/dateTime.js +40 -35
- package/dist/internal/dateTime.js.map +1 -1
- package/dist/internal/effect.js +19 -9
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/graphql.d.ts +2 -0
- package/dist/internal/graphql.d.ts.map +1 -0
- package/dist/internal/graphql.js +195 -0
- package/dist/internal/graphql.js.map +1 -0
- package/dist/internal/graphqlHeaders.d.ts +4 -0
- package/dist/internal/graphqlHeaders.d.ts.map +1 -0
- package/dist/internal/graphqlHeaders.js +11 -0
- package/dist/internal/graphqlHeaders.js.map +1 -0
- package/dist/internal/request.js +20 -1
- package/dist/internal/request.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js +4 -1
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/schema/toJsonSchemaDocument.js +29 -5
- package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
- package/dist/internal/version.js +1 -1
- package/dist/net/AddressResolver.d.ts +145 -0
- package/dist/net/AddressResolver.d.ts.map +1 -0
- package/dist/net/AddressResolver.js +114 -0
- package/dist/net/AddressResolver.js.map +1 -0
- package/dist/net/Dns.d.ts +596 -0
- package/dist/net/Dns.d.ts.map +1 -0
- package/dist/net/Dns.js +549 -0
- package/dist/net/Dns.js.map +1 -0
- package/dist/net/Host.d.ts +369 -0
- package/dist/net/Host.d.ts.map +1 -0
- package/dist/net/Host.js +397 -0
- package/dist/net/Host.js.map +1 -0
- package/dist/net/IpInterface.d.ts +76 -3
- package/dist/net/IpInterface.d.ts.map +1 -1
- package/dist/net/IpInterface.js +53 -4
- package/dist/net/IpInterface.js.map +1 -1
- package/dist/net/IpNetwork.d.ts +82 -8
- package/dist/net/IpNetwork.d.ts.map +1 -1
- package/dist/net/IpNetwork.js +60 -4
- package/dist/net/IpNetwork.js.map +1 -1
- package/dist/net/NetAddress.d.ts +396 -35
- package/dist/net/NetAddress.d.ts.map +1 -1
- package/dist/net/NetAddress.js +358 -34
- package/dist/net/NetAddress.js.map +1 -1
- package/dist/net/index.d.ts +15 -0
- package/dist/net/index.d.ts.map +1 -1
- package/dist/net/index.js +15 -0
- package/dist/net/index.js.map +1 -1
- package/dist/observability/OtlpMetrics.d.ts.map +1 -1
- package/dist/observability/OtlpMetrics.js +15 -21
- package/dist/observability/OtlpMetrics.js.map +1 -1
- package/dist/observability/PrometheusMetrics.js +1 -0
- package/dist/observability/PrometheusMetrics.js.map +1 -1
- package/dist/persistence/PersistedQueue.d.ts +32 -3
- package/dist/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/persistence/PersistedQueue.js +75 -16
- package/dist/persistence/PersistedQueue.js.map +1 -1
- package/dist/rpc/RpcClient.d.ts +22 -6
- package/dist/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +12 -5
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcServer.d.ts +6 -0
- package/dist/rpc/RpcServer.d.ts.map +1 -1
- package/dist/rpc/RpcServer.js +78 -29
- package/dist/rpc/RpcServer.js.map +1 -1
- package/dist/socket/DatagramSocket.d.ts +456 -0
- package/dist/socket/DatagramSocket.d.ts.map +1 -0
- package/dist/socket/DatagramSocket.js +535 -0
- package/dist/socket/DatagramSocket.js.map +1 -0
- package/dist/socket/Socket.d.ts +20 -1
- package/dist/socket/Socket.d.ts.map +1 -1
- package/dist/socket/Socket.js +9 -1
- package/dist/socket/Socket.js.map +1 -1
- package/dist/socket/index.d.ts +5 -0
- package/dist/socket/index.d.ts.map +1 -1
- package/dist/socket/index.js +5 -0
- package/dist/socket/index.js.map +1 -1
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +7 -2
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/SqlClient.d.ts +7 -1
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +31 -6
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/testing/TestCrypto.d.ts +73 -0
- package/dist/testing/TestCrypto.d.ts.map +1 -0
- package/dist/testing/TestCrypto.js +87 -0
- package/dist/testing/TestCrypto.js.map +1 -0
- package/dist/testing/index.d.ts +5 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +5 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/workflow/DurableDeferred.d.ts +54 -0
- package/dist/workflow/DurableDeferred.d.ts.map +1 -1
- package/dist/workflow/DurableDeferred.js +108 -50
- package/dist/workflow/DurableDeferred.js.map +1 -1
- package/dist/workflow/WorkflowEngine.d.ts +24 -2
- package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/workflow/WorkflowEngine.js +13 -3
- package/dist/workflow/WorkflowEngine.js.map +1 -1
- package/package.json +6 -3
- package/src/Context.ts +12 -3
- package/src/Crypto.ts +43 -9
- package/src/DateTime.ts +9 -6
- package/src/Duration.ts +36 -16
- package/src/FileSystem.ts +48 -2
- package/src/RequestResolver.ts +4 -10
- package/src/Scheduler.ts +9 -0
- package/src/Schema.ts +677 -5
- package/src/SchemaGetter.ts +47 -35
- package/src/Sink.ts +45 -18
- package/src/Stdio.ts +9 -2
- package/src/Stream.ts +44 -15
- package/src/Utils.ts +8 -5
- package/src/ai/AnthropicStructuredOutput.ts +2 -2
- package/src/ai/Chat.ts +2 -2
- package/src/ai/LanguageModel.ts +96 -24
- package/src/ai/McpServer.ts +288 -94
- package/src/ai/Prompt.ts +24 -10
- package/src/ai/Response.ts +6 -3
- package/src/ai/internal/mcpProtocol/v2026_07_28.ts +5 -0
- package/src/ai/internal/mcpProtocol.ts +3 -0
- package/src/ai/internal/mcpRuntime.ts +2 -0
- package/src/cli/CliOutput.ts +33 -16
- package/src/cli/Command.ts +4 -3
- package/src/cli/Completions.ts +9 -6
- package/src/cli/GlobalFlag.ts +19 -11
- package/src/cli/Prompt.ts +159 -149
- package/src/cli/internal/ansi.ts +26 -3
- package/src/cli/internal/completions/powershell.ts +322 -0
- package/src/cli/internal/completions/zsh.ts +4 -2
- package/src/cli/internal/wizard.ts +34 -26
- package/src/cluster/ClusterSchema.ts +32 -0
- package/src/cluster/ClusterWorkflowEngine.ts +64 -36
- package/src/cluster/MessageStorage.ts +45 -14
- package/src/cluster/Runners.ts +8 -2
- package/src/cluster/Sharding.ts +219 -58
- package/src/cluster/SqlMessageStorage.ts +118 -84
- package/src/cluster/SqlRunnerStorage.ts +224 -128
- package/src/cluster/internal/entityManager.ts +151 -55
- package/src/encoding/Sse.ts +69 -79
- package/src/graphql/GraphQL.ts +494 -0
- package/src/graphql/GraphQLClient.ts +912 -0
- package/src/graphql/GraphQLClientError.ts +542 -0
- package/src/graphql/GraphQLGroup.ts +167 -0
- package/src/graphql/GraphQLMiddleware.ts +253 -0
- package/src/graphql/GraphQLProtocol.ts +1286 -0
- package/src/graphql/GraphQLResolver.ts +1010 -0
- package/src/graphql/index.ts +48 -0
- package/src/http/FindMyWay/internal/router.ts +4 -7
- package/src/http/HttpClient.ts +110 -12
- package/src/http/HttpEffect.ts +11 -5
- package/src/http/HttpMiddleware.ts +33 -34
- package/src/http/HttpRouter.ts +35 -0
- package/src/http/HttpServerResponse.ts +28 -16
- package/src/http/HttpTraceContext.ts +8 -2
- package/src/http/Multipart.ts +17 -1
- package/src/http-api/HttpApiScalar.ts +5 -0
- package/src/internal/dateTime.ts +13 -10
- package/src/internal/effect.ts +22 -15
- package/src/internal/graphql.ts +263 -0
- package/src/internal/graphqlHeaders.ts +11 -0
- package/src/internal/request.ts +31 -3
- package/src/internal/schema/toCodeDocument.ts +7 -1
- package/src/internal/schema/toJsonSchemaDocument.ts +34 -2
- package/src/internal/version.ts +1 -1
- package/src/net/AddressResolver.ts +222 -0
- package/src/net/Dns.ts +1035 -0
- package/src/net/Host.ts +544 -0
- package/src/net/IpInterface.ts +117 -7
- package/src/net/IpNetwork.ts +116 -17
- package/src/net/NetAddress.ts +620 -76
- package/src/net/index.ts +18 -0
- package/src/observability/OtlpMetrics.ts +12 -23
- package/src/observability/PrometheusMetrics.ts +1 -0
- package/src/persistence/PersistedQueue.ts +146 -53
- package/src/rpc/RpcClient.ts +41 -19
- package/src/rpc/RpcServer.ts +115 -40
- package/src/socket/DatagramSocket.ts +919 -0
- package/src/socket/Socket.ts +28 -2
- package/src/socket/index.ts +6 -0
- package/src/sql/Migrator.ts +21 -5
- package/src/sql/SqlClient.ts +39 -15
- package/src/testing/TestCrypto.ts +94 -0
- package/src/testing/index.ts +6 -0
- package/src/workflow/DurableDeferred.ts +160 -47
- 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":[]}
|
package/dist/socket/Socket.d.ts
CHANGED
|
@@ -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
|
-
*
|
|
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
|
/**
|