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.
- package/dist/Context.js +3 -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/Schema.d.ts +473 -1
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +355 -4
- package/dist/Schema.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 +11 -11
- package/dist/Stream.js +5 -5
- package/dist/ai/McpServer.d.ts +6 -0
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +65 -23
- package/dist/ai/McpServer.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 +10 -18
- 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 +181 -62
- 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/http/FindMyWay/internal/router.js +3 -6
- package/dist/http/FindMyWay/internal/router.js.map +1 -1
- package/dist/http/HttpClient.d.ts +6 -0
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +39 -2
- package/dist/http/HttpClient.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/internal/effect.js +12 -7
- package/dist/internal/effect.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 +320 -0
- package/dist/net/Host.d.ts.map +1 -0
- package/dist/net/Host.js +342 -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 +388 -35
- package/dist/net/NetAddress.d.ts.map +1 -1
- package/dist/net/NetAddress.js +350 -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 +42 -20
- 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 +14 -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 +78 -49
- package/dist/workflow/DurableDeferred.js.map +1 -1
- package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/workflow/WorkflowEngine.js +2 -1
- package/dist/workflow/WorkflowEngine.js.map +1 -1
- package/package.json +1 -1
- package/src/Context.ts +3 -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/Schema.ts +669 -5
- package/src/Stdio.ts +9 -2
- package/src/Stream.ts +11 -11
- package/src/ai/McpServer.ts +63 -23
- 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 +13 -24
- package/src/cluster/MessageStorage.ts +45 -14
- package/src/cluster/Runners.ts +8 -2
- package/src/cluster/Sharding.ts +207 -49
- package/src/cluster/SqlMessageStorage.ts +118 -84
- package/src/cluster/SqlRunnerStorage.ts +224 -128
- package/src/cluster/internal/entityManager.ts +151 -55
- package/src/http/FindMyWay/internal/router.ts +4 -7
- package/src/http/HttpClient.ts +56 -2
- package/src/http/HttpTraceContext.ts +8 -2
- package/src/internal/effect.ts +15 -13
- 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 +472 -0
- package/src/net/IpInterface.ts +117 -7
- package/src/net/IpNetwork.ts +116 -17
- package/src/net/NetAddress.ts +611 -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 +60 -25
- package/src/socket/DatagramSocket.ts +919 -0
- package/src/socket/Socket.ts +22 -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 +123 -48
- package/src/workflow/WorkflowEngine.ts +2 -1
package/src/rpc/RpcServer.ts
CHANGED
|
@@ -82,6 +82,12 @@ export interface RpcServer<A extends Rpc.Any> {
|
|
|
82
82
|
* handlers for a group and sending decoded server responses through
|
|
83
83
|
* `onFromServer`.
|
|
84
84
|
*
|
|
85
|
+
* **Details**
|
|
86
|
+
*
|
|
87
|
+
* If writing a stream `Chunk` fails with anything other than an interruption,
|
|
88
|
+
* the request fails with that cause. `onFromServer` is assumed to have already
|
|
89
|
+
* answered the client and reported it, so nothing else is sent or reported.
|
|
90
|
+
*
|
|
85
91
|
* @stability unstable
|
|
86
92
|
* @category constructors
|
|
87
93
|
* @since 4.0.0
|
|
@@ -188,7 +194,7 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any>(
|
|
|
188
194
|
clients.set(clientId, client)
|
|
189
195
|
} else if (
|
|
190
196
|
client.ended &&
|
|
191
|
-
(message._tag !== "Interrupt" || !client.fibers.has(message.requestId))
|
|
197
|
+
((message._tag !== "Interrupt" && message._tag !== "Ack") || !client.fibers.has(message.requestId))
|
|
192
198
|
) {
|
|
193
199
|
return Effect.interrupt
|
|
194
200
|
}
|
|
@@ -199,7 +205,7 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any>(
|
|
|
199
205
|
}
|
|
200
206
|
case "Ack": {
|
|
201
207
|
const latch = client.latches?.get(message.requestId)
|
|
202
|
-
return latch ? latch.open : Effect.void
|
|
208
|
+
return latch ? Effect.asVoid(latch.open) : Effect.void
|
|
203
209
|
}
|
|
204
210
|
case "Interrupt": {
|
|
205
211
|
const fiber = client.fibers.get(message.requestId)
|
|
@@ -279,13 +285,23 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any>(
|
|
|
279
285
|
const isUninterruptible = isWrapper && result.uninterruptible
|
|
280
286
|
// unwrap the fork data type
|
|
281
287
|
const streamOrEffect = isWrapper ? result.value : result
|
|
288
|
+
// set when a chunk could not be written; the writer has already responded
|
|
289
|
+
let writeFailure: Cause.Cause<never> | undefined
|
|
282
290
|
const handler = isStream
|
|
283
|
-
? (streamEffect(client, request, streamOrEffect)
|
|
291
|
+
? (streamEffect(client, request, streamOrEffect, (cause) => {
|
|
292
|
+
writeFailure = cause
|
|
293
|
+
}) as Effect.Effect<{} | Deferred.Deferred<any, any>>)
|
|
284
294
|
: (streamOrEffect as Effect.Effect<{} | Deferred.Deferred<any, any>>)
|
|
285
295
|
|
|
286
|
-
const withMiddleware = rpc.middlewares.size
|
|
287
|
-
?
|
|
288
|
-
:
|
|
296
|
+
const withMiddleware = rpc.middlewares.size === 0
|
|
297
|
+
? handler
|
|
298
|
+
: isStream
|
|
299
|
+
// middleware may rewrite or swallow a chunk write failure, so restore it
|
|
300
|
+
? Effect.flatMap(
|
|
301
|
+
Effect.exit(applyMiddleware(services, handler, metadata)),
|
|
302
|
+
(exit) => writeFailure ? Effect.failCause(writeFailure) : exit
|
|
303
|
+
)
|
|
304
|
+
: applyMiddleware(services, handler, metadata)
|
|
289
305
|
let responded = false
|
|
290
306
|
const scope = Scope.makeUnsafe()
|
|
291
307
|
let deferred: Deferred.Deferred<unknown, unknown> | undefined = undefined
|
|
@@ -304,6 +320,9 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any>(
|
|
|
304
320
|
exit: exit as any
|
|
305
321
|
})
|
|
306
322
|
}
|
|
323
|
+
} else if (writeFailure) {
|
|
324
|
+
// onFromServer has already answered the client and reported the failure
|
|
325
|
+
return Scope.closeUnsafe(scope, exit) ?? Effect.void
|
|
307
326
|
} else if (
|
|
308
327
|
!disableFatalDefects &&
|
|
309
328
|
Cause.hasDies(exit.cause) &&
|
|
@@ -409,8 +428,17 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any>(
|
|
|
409
428
|
request: Request<Rpcs>,
|
|
410
429
|
stream:
|
|
411
430
|
| Stream.Stream<any, any>
|
|
412
|
-
| Effect.Effect<Queue.Dequeue<any, any>, any, Scope.Scope
|
|
431
|
+
| Effect.Effect<Queue.Dequeue<any, any>, any, Scope.Scope>,
|
|
432
|
+
onWriteFailure: (cause: Cause.Cause<never>) => void
|
|
413
433
|
) => {
|
|
434
|
+
const writeChunk = (values: NonEmptyReadonlyArray<any>) =>
|
|
435
|
+
Effect.onError(
|
|
436
|
+
options.onFromServer({ _tag: "Chunk", clientId: client.id, requestId: request.id, values }),
|
|
437
|
+
(cause) => {
|
|
438
|
+
if (!Cause.hasInterruptsOnly(cause)) onWriteFailure(cause)
|
|
439
|
+
return Effect.void
|
|
440
|
+
}
|
|
441
|
+
)
|
|
414
442
|
let latch: Latch.Latch | undefined
|
|
415
443
|
if (supportsAck) {
|
|
416
444
|
client.latches ??= new Map()
|
|
@@ -427,12 +455,7 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any>(
|
|
|
427
455
|
while: constTrue,
|
|
428
456
|
body: constant(
|
|
429
457
|
Effect.flatMap(Queue.takeAll(queue), (values) => {
|
|
430
|
-
const write =
|
|
431
|
-
_tag: "Chunk",
|
|
432
|
-
clientId: client.id,
|
|
433
|
-
requestId: request.id,
|
|
434
|
-
values
|
|
435
|
-
})
|
|
458
|
+
const write = writeChunk(values)
|
|
436
459
|
if (!latch) return write
|
|
437
460
|
latch.closeUnsafe()
|
|
438
461
|
return Effect.flatMap(write, () => latch.await)
|
|
@@ -446,12 +469,7 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any>(
|
|
|
446
469
|
)
|
|
447
470
|
}
|
|
448
471
|
return Stream.runForEachArray(stream, (values) => {
|
|
449
|
-
const write =
|
|
450
|
-
_tag: "Chunk",
|
|
451
|
-
clientId: client.id,
|
|
452
|
-
requestId: request.id,
|
|
453
|
-
values
|
|
454
|
-
})
|
|
472
|
+
const write = writeChunk(values)
|
|
455
473
|
if (!latch) return write
|
|
456
474
|
latch.closeUnsafe()
|
|
457
475
|
return Effect.andThen(write, latch.await)
|
|
@@ -633,6 +651,7 @@ export const make: <Rpcs extends Rpc.Any>(
|
|
|
633
651
|
)
|
|
634
652
|
|
|
635
653
|
type Schemas = {
|
|
654
|
+
readonly tag: string
|
|
636
655
|
readonly decode: (u: unknown) => Effect.Effect<Rpc.Payload<Rpcs>, Schema.SchemaError>
|
|
637
656
|
readonly encodeChunk: (
|
|
638
657
|
u: NonEmptyReadonlyArray<unknown>
|
|
@@ -649,6 +668,7 @@ export const make: <Rpcs extends Rpc.Any>(
|
|
|
649
668
|
const entry = Context.getOrUndefinedUnsafe(services, rpc.key) as Rpc.Handler<Rpcs["_tag"]>
|
|
650
669
|
const streamSchemas = RpcSchema.getStreamSchemas(rpc.successSchema)
|
|
651
670
|
schemas = {
|
|
671
|
+
tag: rpc._tag,
|
|
652
672
|
decode: Schema.decodeUnknownEffect(codecFor(rpc.payloadSchema)) as any,
|
|
653
673
|
encodeChunk: Schema.encodeUnknownEffect(
|
|
654
674
|
codecFor(
|
|
@@ -686,23 +706,38 @@ export const make: <Rpcs extends Rpc.Any>(
|
|
|
686
706
|
tag: "Chunk" | "Exit"
|
|
687
707
|
) => {
|
|
688
708
|
const collector = schemas.collector
|
|
709
|
+
let encodeFailed = false
|
|
689
710
|
// The schema encoders evaluate eagerly, so an encode that needs no
|
|
690
711
|
// services is already a resolved success and can skip the effect wrappers.
|
|
691
712
|
const write = Exit.isExit(effect) && Exit.isSuccess(effect)
|
|
692
713
|
? send(client.id, responseEnvelope(requestId, tag, effect.value), collector && collector.clearUnsafe())
|
|
693
714
|
: Effect.flatMap(
|
|
694
|
-
Effect.
|
|
695
|
-
|
|
696
|
-
|
|
715
|
+
Effect.catch(
|
|
716
|
+
Effect.provideContext(
|
|
717
|
+
collector ? Effect.provideService(effect, Transferable.Collector, collector) : effect,
|
|
718
|
+
schemas.context
|
|
719
|
+
),
|
|
720
|
+
(error) =>
|
|
721
|
+
Effect.withFiber((fiber) => {
|
|
722
|
+
const defect = Cause.die(
|
|
723
|
+
`Failed to encode response for RPC "${schemas.tag}": ${SchemaIssue.defaultFormatter(error.issue)}`
|
|
724
|
+
)
|
|
725
|
+
reportCauseUnsafe(fiber, defect)
|
|
726
|
+
encodeFailed = true
|
|
727
|
+
return Effect.failCause(defect)
|
|
728
|
+
})
|
|
697
729
|
),
|
|
698
730
|
(value) => send(client.id, responseEnvelope(requestId, tag, value), collector && collector.clearUnsafe())
|
|
699
731
|
)
|
|
700
732
|
return Effect.catchCause(write, (cause) => {
|
|
701
733
|
client.schemas.delete(requestId)
|
|
702
|
-
|
|
734
|
+
// An encode failure ends the request with the defect, so the request
|
|
735
|
+
// span records it. Other failures stop the request as a cancellation.
|
|
703
736
|
return Effect.andThen(
|
|
704
|
-
sendRequestDefect(client, requestId, schemas.encodeExit,
|
|
705
|
-
|
|
737
|
+
sendRequestDefect(client, requestId, schemas.encodeExit, Cause.squash(cause)),
|
|
738
|
+
encodeFailed
|
|
739
|
+
? Effect.failCause(cause)
|
|
740
|
+
: server.write(client.id, { _tag: "Interrupt", requestId, interruptors: [] })
|
|
706
741
|
)
|
|
707
742
|
})
|
|
708
743
|
}
|