@graftland/plugin-remote 0.3.1 → 0.3.2
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/Auth.d.ts +2 -2
- package/dist/Auth.d.ts.map +1 -1
- package/dist/Auth.js.map +1 -1
- package/dist/{Bootstrap-Dr6sX7el.js → Bootstrap-H9gDsgsC.js} +2 -2
- package/dist/{Contract-DL2mHvaT.js → Contract-DsJtisvL.js} +2 -2
- package/dist/Contract.js +1 -1
- package/dist/{Errors-BMKmu5Y7.js → Errors-DYhsGZcZ.js} +3 -1
- package/dist/Errors.d.ts +7 -0
- package/dist/Errors.d.ts.map +1 -1
- package/dist/Errors.js +3 -1
- package/dist/Errors.js.map +1 -1
- package/dist/{FailureGroup-BcH0XOBi.js → FailureGroup-BgT73AaR.js} +14 -4
- package/dist/{Framing-zaYdOJnT.js → Framing-G9eSaeLb.js} +1 -1
- package/dist/{Graft-CVyueNOf.js → Graft-B71CPA2Y.js} +20 -16
- package/dist/{Packages-JNL34JpS.js → Packages-AgoCGotL.js} +23 -26
- package/dist/{Peer-BT7eAGmh.js → Peer-DXeVrGBh.js} +5 -5
- package/dist/{ProcessObservation-DEGrEMfP.js → ProcessObservation-gLgGirYv.js} +1 -1
- package/dist/{ServeLifecycle-CJM0gG5B.js → ServeLifecycle-Bd1FPJ6e.js} +1 -1
- package/dist/Transport.d.ts +2 -2
- package/dist/Transport.d.ts.map +1 -1
- package/dist/Transport.js.map +1 -1
- package/dist/bin.js +48 -47
- package/dist/bin.js.map +1 -1
- package/dist/{childRuntime-An0HsIzl.js → childRuntime-Bm3iSg_N.js} +29 -26
- package/dist/{connectionEnded-DCpFCjMX.js → connectionEnded-BwcxQ7W8.js} +4 -4
- package/dist/{entry-B89sepMU.js → entry-psOpX3Bj.js} +72 -35
- package/dist/host/auth/bearer.js +1 -1
- package/dist/host/auth/jwt.js +1 -1
- package/dist/host/auth/mtls.js +2 -2
- package/dist/host/auth/none.js +1 -1
- package/dist/host/command.js +4 -4
- package/dist/host/local.js +3 -3
- package/dist/host/unix.js +3 -3
- package/dist/host/websocket.js +3 -3
- package/dist/host/worker.js +4 -5
- package/dist/{importer-Bk6U_sn4.js → importer-Cvf88eAY.js} +5 -8
- package/dist/index.js +9 -9
- package/dist/index.js.map +1 -1
- package/dist/internal/Certificates.js +4 -4
- package/dist/internal/Certificates.js.map +1 -1
- package/dist/internal/FailureGroup.js +3 -2
- package/dist/internal/FailureGroup.js.map +1 -1
- package/dist/internal/assembly.js +9 -2
- package/dist/internal/assembly.js.map +1 -1
- package/dist/internal/auth/mtls.js +1 -1
- package/dist/internal/auth/mtls.js.map +1 -1
- package/dist/internal/child.js +20 -17
- package/dist/internal/child.js.map +1 -1
- package/dist/internal/childRuntime.js +4 -4
- package/dist/internal/childRuntime.js.map +1 -1
- package/dist/internal/directTransport.d.ts +1 -1
- package/dist/internal/entry.d.ts.map +1 -1
- package/dist/internal/entry.js +1 -1
- package/dist/internal/entry.js.map +1 -1
- package/dist/internal/execution.js +40 -5
- package/dist/internal/execution.js.map +1 -1
- package/dist/internal/host/runner.js +7 -6
- package/dist/internal/host/runner.js.map +1 -1
- package/dist/internal/host.js +5 -5
- package/dist/internal/host.js.map +1 -1
- package/dist/internal/port.js +5 -5
- package/dist/internal/port.js.map +1 -1
- package/dist/internal/release.js +1 -1
- package/dist/internal/release.js.map +1 -1
- package/dist/internal/runner/Connection.d.ts +1 -1
- package/dist/internal/runner/Connection.js +4 -4
- package/dist/internal/runner/Connection.js.map +1 -1
- package/dist/internal/runner/Execution.js +3 -3
- package/dist/internal/runner/Execution.js.map +1 -1
- package/dist/internal/runner/Framing.js +1 -1
- package/dist/internal/runner/Framing.js.map +1 -1
- package/dist/internal/runner/Local.js +1 -1
- package/dist/internal/runner/Local.js.map +1 -1
- package/dist/internal/runner/Lock.js +1 -1
- package/dist/internal/runner/Lock.js.map +1 -1
- package/dist/internal/runner/Packages.d.ts +1 -1
- package/dist/internal/runner/Packages.js +22 -25
- package/dist/internal/runner/Packages.js.map +1 -1
- package/dist/internal/runner/Processes.js +7 -9
- package/dist/internal/runner/Processes.js.map +1 -1
- package/dist/internal/runner/Store.js +3 -3
- package/dist/internal/runner/Store.js.map +1 -1
- package/dist/internal/runner/Supervisor.js +46 -47
- package/dist/internal/runner/Supervisor.js.map +1 -1
- package/dist/internal/runner/accept.js +3 -3
- package/dist/internal/runner/accept.js.map +1 -1
- package/dist/internal/runner/model.js +1 -1
- package/dist/internal/runner/model.js.map +1 -1
- package/dist/internal/serve.js +1 -1
- package/dist/internal/serve.js.map +1 -1
- package/dist/internal/supervisorPlugin.js +1 -1
- package/dist/internal/watchdogMain.js +5 -5
- package/dist/internal/watchdogMain.js.map +1 -1
- package/dist/internal/websocketServer.js +3 -1
- package/dist/internal/websocketServer.js.map +1 -1
- package/dist/internal/workerMain.js +3 -3
- package/dist/{port-DSVUY8Bq.js → port--3x2zJ4D.js} +8 -8
- package/dist/{release-BY4Mlluy.js → release-DfZPuIcK.js} +1 -1
- package/dist/runner/auth/bearer.js +2 -2
- package/dist/runner/auth/jwt.js +4 -4
- package/dist/runner/auth/jwt.js.map +1 -1
- package/dist/runner/auth/mtls.js +3 -3
- package/dist/runner/auth/none.js +1 -1
- package/dist/runner/index.js +5 -5
- package/dist/runner/stdio.js +3 -3
- package/dist/runner/unix.js +3 -3
- package/dist/runner/websocket.js +4 -4
- package/dist/{socketChannel-C_ppdSzz.js → socketChannel-CJvL2DiB.js} +2 -2
- package/dist/{supervisorPlugin-CivhM7x5.js → supervisorPlugin-t6Z6PrhD.js} +72 -76
- package/dist/{token-Cc_1CTbE.js → token-CYBNNlhS.js} +1 -1
- package/dist/{tokenCredentials-CI6mMRRd.js → tokenCredentials-CbCuk-Rt.js} +3 -3
- package/dist/{websocketServer-D2Hk7wsA.js → websocketServer-NQhODlEt.js} +5 -3
- package/dist/{workerChannel-cmLc13vm.js → workerChannel-C8hhBJzA.js} +1 -1
- package/package.json +3 -3
- package/src/Auth.ts +9 -2
- package/src/Errors.ts +8 -0
- package/src/Transport.ts +6 -2
- package/src/bin.ts +28 -30
- package/src/index.ts +5 -3
- package/src/internal/Certificates.ts +10 -13
- package/src/internal/FailureGroup.ts +128 -121
- package/src/internal/assembly.ts +19 -10
- package/src/internal/auth/mtls.ts +19 -20
- package/src/internal/child.ts +248 -239
- package/src/internal/childRuntime.ts +81 -80
- package/src/internal/entry.ts +10 -11
- package/src/internal/execution.ts +69 -12
- package/src/internal/host/runner.ts +153 -153
- package/src/internal/host.ts +116 -120
- package/src/internal/port.ts +100 -103
- package/src/internal/release.ts +3 -2
- package/src/internal/runner/Connection.ts +52 -60
- package/src/internal/runner/Execution.ts +163 -164
- package/src/internal/runner/Framing.ts +9 -10
- package/src/internal/runner/Local.ts +26 -27
- package/src/internal/runner/Lock.ts +23 -25
- package/src/internal/runner/Packages.ts +67 -70
- package/src/internal/runner/Processes.ts +89 -92
- package/src/internal/runner/Store.ts +110 -114
- package/src/internal/runner/Supervisor.ts +392 -405
- package/src/internal/runner/accept.ts +76 -84
- package/src/internal/runner/model.ts +20 -21
- package/src/internal/serve.ts +15 -13
- package/src/internal/watchdogMain.ts +16 -11
- package/src/internal/websocketServer.ts +18 -3
- package/src/runner/auth/jwt.ts +10 -6
- package/dist/cleanup-CXLa1Wd9.js +0 -13
package/dist/Auth.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AuthenticationFailed, CredentialsError } from "./Errors.js";
|
|
1
|
+
import { AuthenticationFailed, AuthenticatorUnavailable, CredentialsError } from "./Errors.js";
|
|
2
2
|
import { Context, Effect, Option, Redacted, Scope } from "effect";
|
|
3
3
|
export interface ClientCertificate {
|
|
4
4
|
readonly cert: string;
|
|
@@ -32,7 +32,7 @@ export type CredentialsApi = { [K in Prepared["_tag"]]: {
|
|
|
32
32
|
export type AuthenticatorApi = {
|
|
33
33
|
readonly _tag: "Header";
|
|
34
34
|
readonly issuer?: string;
|
|
35
|
-
readonly authenticate: (header: Option.Option<Redacted.Redacted<string>>) => Effect.Effect<string, AuthenticationFailed>;
|
|
35
|
+
readonly authenticate: (header: Option.Option<Redacted.Redacted<string>>) => Effect.Effect<string, AuthenticationFailed | AuthenticatorUnavailable>;
|
|
36
36
|
} | {
|
|
37
37
|
readonly _tag: "Mtls";
|
|
38
38
|
readonly tls: TlsPolicy;
|
package/dist/Auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Auth.d.ts","names":[],"sources":["../src/Auth.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"Auth.d.ts","names":[],"sources":["../src/Auth.ts"],"mappings":";;iBASiB;WACP;WACA,KAAK,SAAS;;iBAEP;WACP,KAAK;WACL,gBAAgB,OAAO;;iBAEhB;WACP,IAAI;WACJ;WACA;WACA;;YAEE;WAEA;WACA,OAAO,SAAS;;WAEd;WAA8B,OAAO;;WACrC;;YAEF,oBACV,KAAK;WACI,MAAM;WACN,MAAM,OAAO,OACrB,QAAQ;aAAqB,MAAM;MACnC,kBACA,MAAM;KAGP;YAEU;WAEA;WACA;WACA,eACR,QAAQ,OAAO,OAAO,SAAS,sBAC3B,OAAO,eAEX,uBAAuB;;WAIf;WACA,KAAK;WACL,eACR,MAAM,wBACF,OAAO,eAAe;;WAEhB;WAAuB;;;qBAExB,oBAAoB;;qBAGpB,sBAAsB"}
|
package/dist/Auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Auth.js","names":[],"sources":["../src/Auth.ts"],"sourcesContent":["/** Credentials and authenticated identities shared by transport plugins. */\nimport { Context } from \"effect\"\nimport type { Effect, Redacted, Option, Scope } from \"effect\"\nimport type {
|
|
1
|
+
{"version":3,"file":"Auth.js","names":[],"sources":["../src/Auth.ts"],"sourcesContent":["/** Credentials and authenticated identities shared by transport plugins. */\nimport { Context } from \"effect\"\nimport type { Effect, Redacted, Option, Scope } from \"effect\"\nimport type {\n\tAuthenticationFailed,\n\tAuthenticatorUnavailable,\n\tCredentialsError,\n} from \"./Errors\"\n\nexport interface ClientCertificate {\n\treadonly cert: string\n\treadonly key: Redacted.Redacted<string>\n}\nexport interface VerifiedCertificate {\n\treadonly der: Uint8Array\n\treadonly subjectAltName: Option.Option<string>\n}\nexport interface TlsPolicy {\n\treadonly ca: ReadonlyArray<string>\n\treadonly minVersion: \"TLSv1.3\"\n\treadonly requestCert: true\n\treadonly rejectUnauthorized: true\n}\nexport type Prepared =\n\t| {\n\t\t\treadonly _tag: \"Authorization\"\n\t\t\treadonly value: Redacted.Redacted<string>\n\t }\n\t| { readonly _tag: \"Certificate\"; readonly value: ClientCertificate }\n\t| { readonly _tag: \"None\" }\n\nexport type CredentialsApi = {\n\t[K in Prepared[\"_tag\"]]: {\n\t\treadonly kind: K\n\t\treadonly read: Effect.Effect<\n\t\t\tExtract<Prepared, { readonly _tag: K }>,\n\t\t\tCredentialsError,\n\t\t\tScope.Scope\n\t\t>\n\t}\n}[Prepared[\"_tag\"]]\n\nexport type AuthenticatorApi =\n\t| {\n\t\t\treadonly _tag: \"Header\"\n\t\t\treadonly issuer?: string\n\t\t\treadonly authenticate: (\n\t\t\t\theader: Option.Option<Redacted.Redacted<string>>,\n\t\t\t) => Effect.Effect<\n\t\t\t\tstring,\n\t\t\t\tAuthenticationFailed | AuthenticatorUnavailable\n\t\t\t>\n\t }\n\t| {\n\t\t\treadonly _tag: \"Mtls\"\n\t\t\treadonly tls: TlsPolicy\n\t\t\treadonly authenticate: (\n\t\t\t\tpeer: VerifiedCertificate,\n\t\t\t) => Effect.Effect<string, AuthenticationFailed>\n\t }\n\t| { readonly _tag: \"None\"; readonly identity: string }\n\nexport class Credentials extends Context.Service<Credentials, CredentialsApi>()(\n\t\"@graftland/plugin-remote/Auth/Credentials\",\n) {}\nexport class Authenticator extends Context.Service<\n\tAuthenticator,\n\tAuthenticatorApi\n>()(\"@graftland/plugin-remote/Auth/Authenticator\") {}\n"],"mappings":";;;AA8DA,IAAa,cAAb,cAAiC,QAAQ,QAAqC,CAAC,CAC9E,2CACD,CAAC,CAAC,CAAC;AACH,IAAa,gBAAb,cAAmC,QAAQ,QAGzC,CAAC,CAAC,6CAA6C,CAAC,CAAC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { D as Identity } from "./Peer-
|
|
2
|
-
import { r as Limits } from "./port
|
|
1
|
+
import { D as Identity } from "./Peer-DXeVrGBh.js";
|
|
2
|
+
import { r as Limits } from "./port--3x2zJ4D.js";
|
|
3
3
|
import { Schema } from "effect";
|
|
4
4
|
// packages/remote/src/internal/runner/Bootstrap.ts
|
|
5
5
|
const Bootstrap = Schema.Struct({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as __exportAll } from "./rolldown-runtime-DYf_mQCB.js";
|
|
2
|
-
import { t as Priority } from "./port
|
|
3
|
-
import { a as provide } from "./Graft-
|
|
2
|
+
import { t as Priority } from "./port--3x2zJ4D.js";
|
|
3
|
+
import { a as provide } from "./Graft-B71CPA2Y.js";
|
|
4
4
|
import { Array, Context, Effect, Predicate, Record, Schema } from "effect";
|
|
5
5
|
import { Rpc, RpcClient, RpcGroup, RpcServer } from "effect/rpc";
|
|
6
6
|
// packages/remote/src/internal/control.ts
|
package/dist/Contract.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { n as UndeclaredFailure, r as fromModule, i as isContract, a as make, s as service } from "./Contract-
|
|
1
|
+
export { n as UndeclaredFailure, r as fromModule, i as isContract, a as make, s as service } from "./Contract-DsJtisvL.js";
|
|
@@ -42,6 +42,8 @@ var AuthenticationFailed = class extends Schema.TaggedError()("AuthenticationFai
|
|
|
42
42
|
challenge: Schema.optionalKey(Schema.String),
|
|
43
43
|
cause: Schema.optionalKey(Schema.Cause(Schema.Unknown, Schema.Unknown))
|
|
44
44
|
}) {};
|
|
45
|
+
/** The authenticator could not reach what it needs to decide, such as its key set; the credential may still be valid. */
|
|
46
|
+
var AuthenticatorUnavailable = class extends Schema.TaggedError()("AuthenticatorUnavailable", { cause: Schema.Cause(Schema.Unknown, Schema.Unknown) }) {};
|
|
45
47
|
/** A remote entry could not be resolved or configured at the indicated field. */
|
|
46
48
|
var RemoteEntryError = class extends Schema.TaggedError()("RemoteEntryError", {
|
|
47
49
|
entry: Schema.Option(Schema.String),
|
|
@@ -53,4 +55,4 @@ var RemoteEntryError = class extends Schema.TaggedError()("RemoteEntryError", {
|
|
|
53
55
|
return `Remote entry ${Option.getOrElse(this.entry, () => "<programmatic>")} failed at ${this.field}`;
|
|
54
56
|
}
|
|
55
57
|
};
|
|
56
|
-
export {
|
|
58
|
+
export { MissingInstance as a, RemoteError as c, LocalTerminationTimeout as i, RemoteWithdrawn as l, AuthenticatorUnavailable as n, ProcessExited as o, CredentialsError as r, RemoteEntryError as s, AuthenticationFailed as t, TransportError as u };
|
package/dist/Errors.d.ts
CHANGED
|
@@ -63,6 +63,13 @@ declare const AuthenticationFailed_base: Schema.Class<AuthenticationFailed, Sche
|
|
|
63
63
|
readonly brand: unique symbol;
|
|
64
64
|
}>;
|
|
65
65
|
export declare class AuthenticationFailed extends AuthenticationFailed_base {}
|
|
66
|
+
declare const AuthenticatorUnavailable_base: Schema.Class<AuthenticatorUnavailable, Schema.TaggedStruct<"AuthenticatorUnavailable", {
|
|
67
|
+
readonly cause: Schema.Cause<Schema.Unknown, Schema.Unknown>;
|
|
68
|
+
}>, import("effect/Cause").YieldableError & {
|
|
69
|
+
readonly brand: unique symbol;
|
|
70
|
+
}>;
|
|
71
|
+
/** The authenticator could not reach what it needs to decide, such as its key set; the credential may still be valid. */
|
|
72
|
+
export declare class AuthenticatorUnavailable extends AuthenticatorUnavailable_base {}
|
|
66
73
|
declare const RemoteEntryError_base: Schema.Class<RemoteEntryError, Schema.TaggedStruct<"RemoteEntryError", {
|
|
67
74
|
readonly entry: Schema.Option<Schema.String>;
|
|
68
75
|
readonly directory: Schema.Option<Schema.String>;
|
package/dist/Errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Errors.d.ts","names":[],"sources":["../src/Errors.ts"],"mappings":";;;;;;;;WAImB;;qBAFN,sBAAsB;MAUrB;;;;;WAQK;;qBAFN,uBAAuB;;WAUjB;;;qBAFN,wBAAwB;MAIvB;;;;;WAQK;;;qBAFN,oBAAoB;;WAQd;;;qBAFN,wBAAwB;MAIvB;;;;;;WAQK;;;qBAFN,gCAAgC;MAO/B;;;;;WAUK;;;qBAFN,yBAAyB;;;;;;WASnB;;qBAFN,6BAA6B
|
|
1
|
+
{"version":3,"file":"Errors.d.ts","names":[],"sources":["../src/Errors.ts"],"mappings":";;;;;;;;WAImB;;qBAFN,sBAAsB;MAUrB;;;;;WAQK;;qBAFN,uBAAuB;;WAUjB;;;qBAFN,wBAAwB;MAIvB;;;;;WAQK;;;qBAFN,oBAAoB;;WAQd;;;qBAFN,wBAAwB;MAIvB;;;;;;WAQK;;;qBAFN,gCAAgC;MAO/B;;;;;WAUK;;;qBAFN,yBAAyB;;;;;;WASnB;;qBAFN,6BAA6B;;;;WAYvB;;;qBAFN,iCAAiC;;;;;;;WAU3B;;;qBAFN,yBAAyB;MASxB"}
|
package/dist/Errors.js
CHANGED
|
@@ -42,6 +42,8 @@ var AuthenticationFailed = class extends Schema.TaggedError()("AuthenticationFai
|
|
|
42
42
|
challenge: Schema.optionalKey(Schema.String),
|
|
43
43
|
cause: Schema.optionalKey(Schema.Cause(Schema.Unknown, Schema.Unknown))
|
|
44
44
|
}) {};
|
|
45
|
+
/** The authenticator could not reach what it needs to decide, such as its key set; the credential may still be valid. */
|
|
46
|
+
var AuthenticatorUnavailable = class extends Schema.TaggedError()("AuthenticatorUnavailable", { cause: Schema.Cause(Schema.Unknown, Schema.Unknown) }) {};
|
|
45
47
|
/** A remote entry could not be resolved or configured at the indicated field. */
|
|
46
48
|
var RemoteEntryError = class extends Schema.TaggedError()("RemoteEntryError", {
|
|
47
49
|
entry: Schema.Option(Schema.String),
|
|
@@ -53,6 +55,6 @@ var RemoteEntryError = class extends Schema.TaggedError()("RemoteEntryError", {
|
|
|
53
55
|
return `Remote entry ${Option.getOrElse(this.entry, () => "<programmatic>")} failed at ${this.field}`;
|
|
54
56
|
}
|
|
55
57
|
};
|
|
56
|
-
export { AuthenticationFailed, CredentialsError, LocalTerminationTimeout, MissingInstance, ProcessExited, RemoteEntryError, RemoteError, RemoteWithdrawn, TransportError };
|
|
58
|
+
export { AuthenticationFailed, AuthenticatorUnavailable, CredentialsError, LocalTerminationTimeout, MissingInstance, ProcessExited, RemoteEntryError, RemoteError, RemoteWithdrawn, TransportError };
|
|
57
59
|
|
|
58
60
|
//# sourceMappingURL=Errors.js.map
|
package/dist/Errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Errors.js","names":[],"sources":["../src/Errors.ts"],"sourcesContent":["import { Option, Schema } from \"effect\"\n\nexport class ProcessExited extends Schema.TaggedError<\n\tProcessExited,\n\t{ readonly brand: unique symbol }\n>()(\"ProcessExited\", {\n\tpid: Schema.Option(Schema.Int),\n\tthreadId: Schema.optionalKey(Schema.Int),\n\texitCode: Schema.NullOr(Schema.Int),\n\tstderr: Schema.String,\n\tstatusCause: Schema.Cause(Schema.Unknown, Schema.Unknown),\n}) {\n\toverride get message() {\n\t\treturn this.threadId !== undefined\n\t\t\t? `Remote worker ${this.threadId} exited unexpectedly (${this.exitCode})`\n\t\t\t: `Remote process${Option.isSome(this.pid) ? ` ${this.pid.value}` : \"\"} exited unexpectedly (${this.exitCode ?? \"signal\"})`\n\t}\n}\nexport class TransportError extends Schema.TaggedError<\n\tTransportError,\n\t{ readonly brand: unique symbol }\n>()(\"TransportError\", {\n\tcause: Schema.Cause(Schema.Unknown, Schema.Unknown),\n}) {}\n\n/** The remote export lease was withdrawn; host consumers must drain before Dispose. */\nexport class RemoteWithdrawn extends Schema.TaggedError<\n\tRemoteWithdrawn,\n\t{ readonly brand: unique symbol }\n>()(\"RemoteWithdrawn\", {}) {\n\toverride get message() {\n\t\treturn \"Remote services were withdrawn\"\n\t}\n}\n\n/** Infrastructure failure at the plugin boundary; the complete underlying cause remains inspectable. */\nexport class RemoteError extends Schema.TaggedError<\n\tRemoteError,\n\t{ readonly brand: unique symbol }\n>()(\"RemoteError\", { cause: Schema.Cause(Schema.Unknown, Schema.Unknown) }) {}\n\n/** A network execution needs a stable logical identity across host restarts. */\nexport class MissingInstance extends Schema.TaggedError<\n\tMissingInstance,\n\t{ readonly brand: unique symbol }\n>()(\"MissingInstance\", {}) {\n\toverride get message() {\n\t\treturn \"A runner connection requires an instance or a loader entry id; set connect.instance when loading without Loader.\"\n\t}\n}\n\n/** Dispose completed, but Node still owns live handles; process-scope cleanup must terminate it. */\nexport class LocalTerminationTimeout extends Schema.TaggedError<\n\tLocalTerminationTimeout,\n\t{ readonly brand: unique symbol }\n>()(\"LocalTerminationTimeout\", {\n\tpid: Schema.optionalKey(Schema.Int),\n\tthreadId: Schema.optionalKey(Schema.Int),\n}) {\n\toverride get message() {\n\t\treturn this.threadId !== undefined\n\t\t\t? `Remote worker ${this.threadId} did not exit within one second after Dispose; terminating it`\n\t\t\t: `Remote process ${this.pid} did not exit within one second after Dispose; terminating it`\n\t}\n}\n\n/** A credential source failed; the original failure remains available. */\nexport class CredentialsError extends Schema.TaggedError<\n\tCredentialsError,\n\t{ readonly brand: unique symbol }\n>()(\"CredentialsError\", {\n\tcause: Schema.Cause(Schema.Unknown, Schema.Unknown),\n}) {}\n\nexport class AuthenticationFailed extends Schema.TaggedError<\n\tAuthenticationFailed,\n\t{ readonly brand: unique symbol }\n>()(\"AuthenticationFailed\", {\n\treason: Schema.Literals([\"missing\", \"invalid\"]),\n\tchallenge: Schema.optionalKey(Schema.String),\n\tcause: Schema.optionalKey(Schema.Cause(Schema.Unknown, Schema.Unknown)),\n}) {}\n\n/** A remote entry could not be resolved or configured at the indicated field. */\nexport class RemoteEntryError extends Schema.TaggedError<\n\tRemoteEntryError,\n\t{ readonly brand: unique symbol }\n>()(\"RemoteEntryError\", {\n\tentry: Schema.Option(Schema.String),\n\tdirectory: Schema.Option(Schema.String),\n\tfield: Schema.String,\n\tcause: Schema.Cause(Schema.Unknown, Schema.Unknown),\n}) {\n\toverride get message() {\n\t\treturn `Remote entry ${Option.getOrElse(this.entry, () => \"<programmatic>\")} failed at ${this.field}`\n\t}\n}\n"],"mappings":";;AAEA,IAAa,gBAAb,cAAmC,OAAO,YAGxC,CAAC,CAAC,iBAAiB;CACpB,KAAK,OAAO,OAAO,OAAO,GAAG;CAC7B,UAAU,OAAO,YAAY,OAAO,GAAG;CACvC,UAAU,OAAO,OAAO,OAAO,GAAG;CAClC,QAAQ,OAAO;CACf,aAAa,OAAO,MAAM,OAAO,SAAS,OAAO,OAAO;AACzD,CAAC,CAAC,CAAC;CACF,IAAa,UAAU;EACtB,OAAO,KAAK,aAAa,KAAA,IACtB,iBAAiB,KAAK,SAAS,wBAAwB,KAAK,SAAS,KACrE,iBAAiB,OAAO,OAAO,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,UAAU,GAAG,wBAAwB,KAAK,YAAY,SAAS;CAC3H;AACD;AACA,IAAa,iBAAb,cAAoC,OAAO,YAGzC,CAAC,CAAC,kBAAkB,EACrB,OAAO,OAAO,MAAM,OAAO,SAAS,OAAO,OAAO,EACnD,CAAC,CAAC,CAAC,CAAC;;AAGJ,IAAa,kBAAb,cAAqC,OAAO,YAG1C,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;CAC1B,IAAa,UAAU;EACtB,OAAO;CACR;AACD;;AAGA,IAAa,cAAb,cAAiC,OAAO,YAGtC,CAAC,CAAC,eAAe,EAAE,OAAO,OAAO,MAAM,OAAO,SAAS,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;;AAG7E,IAAa,kBAAb,cAAqC,OAAO,YAG1C,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;CAC1B,IAAa,UAAU;EACtB,OAAO;CACR;AACD;;AAGA,IAAa,0BAAb,cAA6C,OAAO,YAGlD,CAAC,CAAC,2BAA2B;CAC9B,KAAK,OAAO,YAAY,OAAO,GAAG;CAClC,UAAU,OAAO,YAAY,OAAO,GAAG;AACxC,CAAC,CAAC,CAAC;CACF,IAAa,UAAU;EACtB,OAAO,KAAK,aAAa,KAAA,IACtB,iBAAiB,KAAK,SAAS,iEAC/B,kBAAkB,KAAK,IAAI;CAC/B;AACD;;AAGA,IAAa,mBAAb,cAAsC,OAAO,YAG3C,CAAC,CAAC,oBAAoB,EACvB,OAAO,OAAO,MAAM,OAAO,SAAS,OAAO,OAAO,EACnD,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,uBAAb,cAA0C,OAAO,YAG/C,CAAC,CAAC,wBAAwB;CAC3B,QAAQ,OAAO,SAAS,CAAC,WAAW,SAAS,CAAC;CAC9C,WAAW,OAAO,YAAY,OAAO,MAAM;CAC3C,OAAO,OAAO,YAAY,OAAO,MAAM,OAAO,SAAS,OAAO,OAAO,CAAC;AACvE,CAAC,CAAC,CAAC,CAAC;;AAGJ,IAAa,mBAAb,cAAsC,OAAO,YAG3C,CAAC,CAAC,oBAAoB;CACvB,OAAO,OAAO,OAAO,OAAO,MAAM;CAClC,WAAW,OAAO,OAAO,OAAO,MAAM;CACtC,OAAO,OAAO;CACd,OAAO,OAAO,MAAM,OAAO,SAAS,OAAO,OAAO;AACnD,CAAC,CAAC,CAAC;CACF,IAAa,UAAU;EACtB,OAAO,gBAAgB,OAAO,UAAU,KAAK,aAAa,gBAAgB,EAAE,aAAa,KAAK;CAC/F;AACD"}
|
|
1
|
+
{"version":3,"file":"Errors.js","names":[],"sources":["../src/Errors.ts"],"sourcesContent":["import { Option, Schema } from \"effect\"\n\nexport class ProcessExited extends Schema.TaggedError<\n\tProcessExited,\n\t{ readonly brand: unique symbol }\n>()(\"ProcessExited\", {\n\tpid: Schema.Option(Schema.Int),\n\tthreadId: Schema.optionalKey(Schema.Int),\n\texitCode: Schema.NullOr(Schema.Int),\n\tstderr: Schema.String,\n\tstatusCause: Schema.Cause(Schema.Unknown, Schema.Unknown),\n}) {\n\toverride get message() {\n\t\treturn this.threadId !== undefined\n\t\t\t? `Remote worker ${this.threadId} exited unexpectedly (${this.exitCode})`\n\t\t\t: `Remote process${Option.isSome(this.pid) ? ` ${this.pid.value}` : \"\"} exited unexpectedly (${this.exitCode ?? \"signal\"})`\n\t}\n}\nexport class TransportError extends Schema.TaggedError<\n\tTransportError,\n\t{ readonly brand: unique symbol }\n>()(\"TransportError\", {\n\tcause: Schema.Cause(Schema.Unknown, Schema.Unknown),\n}) {}\n\n/** The remote export lease was withdrawn; host consumers must drain before Dispose. */\nexport class RemoteWithdrawn extends Schema.TaggedError<\n\tRemoteWithdrawn,\n\t{ readonly brand: unique symbol }\n>()(\"RemoteWithdrawn\", {}) {\n\toverride get message() {\n\t\treturn \"Remote services were withdrawn\"\n\t}\n}\n\n/** Infrastructure failure at the plugin boundary; the complete underlying cause remains inspectable. */\nexport class RemoteError extends Schema.TaggedError<\n\tRemoteError,\n\t{ readonly brand: unique symbol }\n>()(\"RemoteError\", { cause: Schema.Cause(Schema.Unknown, Schema.Unknown) }) {}\n\n/** A network execution needs a stable logical identity across host restarts. */\nexport class MissingInstance extends Schema.TaggedError<\n\tMissingInstance,\n\t{ readonly brand: unique symbol }\n>()(\"MissingInstance\", {}) {\n\toverride get message() {\n\t\treturn \"A runner connection requires an instance or a loader entry id; set connect.instance when loading without Loader.\"\n\t}\n}\n\n/** Dispose completed, but Node still owns live handles; process-scope cleanup must terminate it. */\nexport class LocalTerminationTimeout extends Schema.TaggedError<\n\tLocalTerminationTimeout,\n\t{ readonly brand: unique symbol }\n>()(\"LocalTerminationTimeout\", {\n\tpid: Schema.optionalKey(Schema.Int),\n\tthreadId: Schema.optionalKey(Schema.Int),\n}) {\n\toverride get message() {\n\t\treturn this.threadId !== undefined\n\t\t\t? `Remote worker ${this.threadId} did not exit within one second after Dispose; terminating it`\n\t\t\t: `Remote process ${this.pid} did not exit within one second after Dispose; terminating it`\n\t}\n}\n\n/** A credential source failed; the original failure remains available. */\nexport class CredentialsError extends Schema.TaggedError<\n\tCredentialsError,\n\t{ readonly brand: unique symbol }\n>()(\"CredentialsError\", {\n\tcause: Schema.Cause(Schema.Unknown, Schema.Unknown),\n}) {}\n\nexport class AuthenticationFailed extends Schema.TaggedError<\n\tAuthenticationFailed,\n\t{ readonly brand: unique symbol }\n>()(\"AuthenticationFailed\", {\n\treason: Schema.Literals([\"missing\", \"invalid\"]),\n\tchallenge: Schema.optionalKey(Schema.String),\n\tcause: Schema.optionalKey(Schema.Cause(Schema.Unknown, Schema.Unknown)),\n}) {}\n\n/** The authenticator could not reach what it needs to decide, such as its key set; the credential may still be valid. */\nexport class AuthenticatorUnavailable extends Schema.TaggedError<\n\tAuthenticatorUnavailable,\n\t{ readonly brand: unique symbol }\n>()(\"AuthenticatorUnavailable\", {\n\tcause: Schema.Cause(Schema.Unknown, Schema.Unknown),\n}) {}\n\n/** A remote entry could not be resolved or configured at the indicated field. */\nexport class RemoteEntryError extends Schema.TaggedError<\n\tRemoteEntryError,\n\t{ readonly brand: unique symbol }\n>()(\"RemoteEntryError\", {\n\tentry: Schema.Option(Schema.String),\n\tdirectory: Schema.Option(Schema.String),\n\tfield: Schema.String,\n\tcause: Schema.Cause(Schema.Unknown, Schema.Unknown),\n}) {\n\toverride get message() {\n\t\treturn `Remote entry ${Option.getOrElse(this.entry, () => \"<programmatic>\")} failed at ${this.field}`\n\t}\n}\n"],"mappings":";;AAEA,IAAa,gBAAb,cAAmC,OAAO,YAGxC,CAAC,CAAC,iBAAiB;CACpB,KAAK,OAAO,OAAO,OAAO,GAAG;CAC7B,UAAU,OAAO,YAAY,OAAO,GAAG;CACvC,UAAU,OAAO,OAAO,OAAO,GAAG;CAClC,QAAQ,OAAO;CACf,aAAa,OAAO,MAAM,OAAO,SAAS,OAAO,OAAO;AACzD,CAAC,CAAC,CAAC;CACF,IAAa,UAAU;EACtB,OAAO,KAAK,aAAa,KAAA,IACtB,iBAAiB,KAAK,SAAS,wBAAwB,KAAK,SAAS,KACrE,iBAAiB,OAAO,OAAO,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,UAAU,GAAG,wBAAwB,KAAK,YAAY,SAAS;CAC3H;AACD;AACA,IAAa,iBAAb,cAAoC,OAAO,YAGzC,CAAC,CAAC,kBAAkB,EACrB,OAAO,OAAO,MAAM,OAAO,SAAS,OAAO,OAAO,EACnD,CAAC,CAAC,CAAC,CAAC;;AAGJ,IAAa,kBAAb,cAAqC,OAAO,YAG1C,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;CAC1B,IAAa,UAAU;EACtB,OAAO;CACR;AACD;;AAGA,IAAa,cAAb,cAAiC,OAAO,YAGtC,CAAC,CAAC,eAAe,EAAE,OAAO,OAAO,MAAM,OAAO,SAAS,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;;AAG7E,IAAa,kBAAb,cAAqC,OAAO,YAG1C,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;CAC1B,IAAa,UAAU;EACtB,OAAO;CACR;AACD;;AAGA,IAAa,0BAAb,cAA6C,OAAO,YAGlD,CAAC,CAAC,2BAA2B;CAC9B,KAAK,OAAO,YAAY,OAAO,GAAG;CAClC,UAAU,OAAO,YAAY,OAAO,GAAG;AACxC,CAAC,CAAC,CAAC;CACF,IAAa,UAAU;EACtB,OAAO,KAAK,aAAa,KAAA,IACtB,iBAAiB,KAAK,SAAS,iEAC/B,kBAAkB,KAAK,IAAI;CAC/B;AACD;;AAGA,IAAa,mBAAb,cAAsC,OAAO,YAG3C,CAAC,CAAC,oBAAoB,EACvB,OAAO,OAAO,MAAM,OAAO,SAAS,OAAO,OAAO,EACnD,CAAC,CAAC,CAAC,CAAC;AAEJ,IAAa,uBAAb,cAA0C,OAAO,YAG/C,CAAC,CAAC,wBAAwB;CAC3B,QAAQ,OAAO,SAAS,CAAC,WAAW,SAAS,CAAC;CAC9C,WAAW,OAAO,YAAY,OAAO,MAAM;CAC3C,OAAO,OAAO,YAAY,OAAO,MAAM,OAAO,SAAS,OAAO,OAAO,CAAC;AACvE,CAAC,CAAC,CAAC,CAAC;;AAGJ,IAAa,2BAAb,cAA8C,OAAO,YAGnD,CAAC,CAAC,4BAA4B,EAC/B,OAAO,OAAO,MAAM,OAAO,SAAS,OAAO,OAAO,EACnD,CAAC,CAAC,CAAC,CAAC;;AAGJ,IAAa,mBAAb,cAAsC,OAAO,YAG3C,CAAC,CAAC,oBAAoB;CACvB,OAAO,OAAO,OAAO,OAAO,MAAM;CAClC,WAAW,OAAO,OAAO,OAAO,MAAM;CACtC,OAAO,OAAO;CACd,OAAO,OAAO,MAAM,OAAO,SAAS,OAAO,OAAO;AACnD,CAAC,CAAC,CAAC;CACF,IAAa,UAAU;EACtB,OAAO,gBAAgB,OAAO,UAAU,KAAK,aAAa,gBAAgB,EAAE,aAAa,KAAK;CAC/F;AACD"}
|
|
@@ -1,9 +1,19 @@
|
|
|
1
|
-
import { n as close, t as ReleaseInterrupted } from "./release-
|
|
1
|
+
import { n as close, t as ReleaseInterrupted } from "./release-DfZPuIcK.js";
|
|
2
|
+
import { f as CleanupError } from "./Graft-B71CPA2Y.js";
|
|
2
3
|
import { Array, Cause, Data, Deferred, Effect, Exit, Fiber, FiberSet, Ref, Schema, Scope, TxRef } from "effect";
|
|
4
|
+
// packages/remote/src/internal/cleanup.ts
|
|
5
|
+
/** Finalizers have no typed failure channel. Keep reasons and their annotations flat. */
|
|
6
|
+
const cleanupCause = (cause) => Cause.fromReasons(Array.flatMap(cause.reasons, (reason) => {
|
|
7
|
+
const error = reason._tag === "Fail" ? reason.error : reason._tag === "Die" ? reason.defect : void 0;
|
|
8
|
+
if (Schema.is(CleanupError)(error)) return Array.map(cleanupCause(error.cause).reasons, (inner) => inner.annotate(Cause.reasonAnnotations(reason)));
|
|
9
|
+
return [reason._tag === "Fail" ? Cause.makeDieReason(reason.error).annotate(Cause.reasonAnnotations(reason)) : reason];
|
|
10
|
+
}));
|
|
11
|
+
/** Assembly children close before the entry reports their cleanup as its own result. */
|
|
12
|
+
const children = Effect.acquireRelease(Scope.make(), (scope, exit) => close(scope, exit).pipe(Effect.catchCause((cause) => Effect.failCause(cleanupCause(cause)))));
|
|
3
13
|
// packages/remote/src/internal/FailureGroup.ts
|
|
4
14
|
const State = Data.taggedEnum();
|
|
5
15
|
/** One owner for first failure, transaction wakeups, and interruption of sibling work. */
|
|
6
|
-
const make =
|
|
16
|
+
const make = Effect.fnUntraced(function* () {
|
|
7
17
|
const fibers = yield* FiberSet.make();
|
|
8
18
|
const state = yield* TxRef.make(State.Open());
|
|
9
19
|
const failures = yield* Ref.make(Cause.empty);
|
|
@@ -37,7 +47,7 @@ const make = () => Effect.gen(function* () {
|
|
|
37
47
|
const failure = Effect.tx(check.pipe(Effect.andThen(Effect.txRetry)));
|
|
38
48
|
const failCause = (cause) => FiberSet.run(fibers, observe(Effect.failCause(cause))).pipe(Effect.asVoid);
|
|
39
49
|
const close$1 = TxRef.update(state, (s) => s._tag === "Open" ? State.Closed() : s).pipe(Effect.andThen(FiberSet.clear(fibers)), Effect.andThen(Ref.get(cleanup)), Effect.flatMap((cause) => cause.reasons.length > 0 ? Effect.failCause(cause) : Effect.void), Effect.uninterruptible);
|
|
40
|
-
yield* Effect.addFinalizer(() => close$1.pipe(Effect.
|
|
50
|
+
yield* Effect.addFinalizer(() => close$1.pipe(Effect.catchCause((cause) => Effect.failCause(cleanupCause(cause)))));
|
|
41
51
|
return {
|
|
42
52
|
await: failure,
|
|
43
53
|
check,
|
|
@@ -50,4 +60,4 @@ const make = () => Effect.gen(function* () {
|
|
|
50
60
|
close: close$1
|
|
51
61
|
};
|
|
52
62
|
});
|
|
53
|
-
export { make as t };
|
|
63
|
+
export { children as n, cleanupCause as r, make as t };
|
|
@@ -14,7 +14,7 @@ var EndOfStream = class extends Schema.TaggedError()("RunnerEndOfStream", {}) {
|
|
|
14
14
|
const maxPayload = 1048576;
|
|
15
15
|
const invalid = (detail) => FrameError.make({ detail });
|
|
16
16
|
/** Version 2 carries only channel and length; request admission belongs to port. */
|
|
17
|
-
const encode =
|
|
17
|
+
const encode = Effect.fnUntraced(function* (frame) {
|
|
18
18
|
if (frame.payload.byteLength > 1048576) return yield* invalid("Runner frame exceeds the payload limit");
|
|
19
19
|
const bytes = new Uint8Array(8 + frame.payload.byteLength);
|
|
20
20
|
bytes.set([
|
|
@@ -189,8 +189,10 @@ const ownedScope = Effect.fnUntraced(function* (parent, afterClose = Effect.void
|
|
|
189
189
|
const started = yield* Deferred.make();
|
|
190
190
|
const ready = yield* Deferred.make();
|
|
191
191
|
const completed = yield* Deferred.make();
|
|
192
|
-
const
|
|
193
|
-
|
|
192
|
+
const observer = yield* Ref.make("waiting");
|
|
193
|
+
const reportUnobserved = (result) => Exit.isFailure(result) ? Effect.logError("Fork cleanup failed after its dispose caller was interrupted", result.cause) : Effect.void;
|
|
194
|
+
const start = Effect.fnUntraced(function* (exit) {
|
|
195
|
+
if (!(yield* Deferred.succeed(started, void 0))) return false;
|
|
194
196
|
yield* Effect.gen(function* () {
|
|
195
197
|
const result = yield* Effect.exit(Effect.gen(function* () {
|
|
196
198
|
const closed = yield* Effect.exit(close(scope, exit));
|
|
@@ -201,13 +203,15 @@ const ownedScope = Effect.fnUntraced(function* (parent, afterClose = Effect.void
|
|
|
201
203
|
yield* Deferred.done(ready, result);
|
|
202
204
|
yield* close(link, exit).pipe(Effect.catchCause((cause) => Effect.logError("Closing fork ownership failed", cause)));
|
|
203
205
|
yield* Deferred.done(completed, result);
|
|
206
|
+
if (yield* Ref.modify(observer, (state) => [state === "abandoned", "settled"])) yield* reportUnobserved(result);
|
|
204
207
|
}).pipe(Effect.forkIn(workers, {
|
|
205
208
|
uninterruptible: true,
|
|
206
209
|
startImmediately: false
|
|
207
210
|
}));
|
|
211
|
+
return true;
|
|
208
212
|
});
|
|
209
|
-
const close$1 = (exit) => Effect.uninterruptibleMask((restore) => start(exit).pipe(Effect.
|
|
210
|
-
yield* Scope.addFinalizerExit(link, (exit) => start(exit).pipe(Effect.
|
|
213
|
+
const close$1 = (exit) => Effect.uninterruptibleMask((restore) => start(exit).pipe(Effect.flatMap((owner) => owner ? restore(Deferred.await(completed)).pipe(Effect.onInterrupt(() => Ref.modify(observer, (state) => state === "waiting" ? [false, "abandoned"] : [true, state]).pipe(Effect.flatMap((settled) => settled ? Effect.flatMap(Effect.exit(Deferred.await(completed)), reportUnobserved) : Effect.void)))) : restore(Deferred.await(completed)))));
|
|
214
|
+
yield* Scope.addFinalizerExit(link, (exit) => start(exit).pipe(Effect.flatMap((owner) => owner ? Effect.orDie(Deferred.await(ready)) : Effect.asVoid(Effect.exit(Deferred.await(ready)))), Effect.ensuring(close(workers, exit))));
|
|
211
215
|
return {
|
|
212
216
|
scope,
|
|
213
217
|
close: close$1
|
|
@@ -238,7 +242,7 @@ const make$2 = Effect.fnUntraced(function* (parent, spec) {
|
|
|
238
242
|
yield* adjustLoading(status, 1);
|
|
239
243
|
return status;
|
|
240
244
|
});
|
|
241
|
-
const setState = (runtime, id, status, state, spec)
|
|
245
|
+
const setState = Effect.fnUntraced(function* (runtime, id, status, state, spec) {
|
|
242
246
|
const current = yield* TxSubscriptionRef.get(status.snapshot);
|
|
243
247
|
if (current.disposed) return;
|
|
244
248
|
const next = {
|
|
@@ -254,7 +258,7 @@ const setState = (runtime, id, status, state, spec) => Effect.tx(Effect.gen(func
|
|
|
254
258
|
...entry,
|
|
255
259
|
...next
|
|
256
260
|
})));
|
|
257
|
-
})
|
|
261
|
+
}, Effect.tx);
|
|
258
262
|
/** Called inside the removal transaction, after supervisor cleanup. */
|
|
259
263
|
const dispose = Effect.fnUntraced(function* (runtime, id, status) {
|
|
260
264
|
const current = yield* TxSubscriptionRef.get(status.snapshot);
|
|
@@ -270,9 +274,9 @@ const dispose = Effect.fnUntraced(function* (runtime, id, status) {
|
|
|
270
274
|
yield* TxSubscriptionRef.update(runtime.forks, HashMap.remove(id));
|
|
271
275
|
});
|
|
272
276
|
/** Only the subtree's own counter belongs to this waiting transaction's read set. */
|
|
273
|
-
const stable =
|
|
277
|
+
const stable = Effect.fnUntraced(function* (status) {
|
|
274
278
|
if ((yield* TxRef.get(status.loading)) > 0) return yield* Effect.txRetry;
|
|
275
|
-
})
|
|
279
|
+
}, Effect.tx);
|
|
276
280
|
// packages/core/src/internal/context.ts
|
|
277
281
|
/** Strip provision-sourced values before child intercepts read or transform the fallback. */
|
|
278
282
|
const inheritContext = (parent, inherited) => Context.makeUnsafe(new Map([...Array.filter(parent.fallback.mapUnsafe, ([key]) => HashSet.has(parent.provisionKeys, key)), ...Array.filter(inherited.mapUnsafe, ([key]) => !HashSet.has(parent.provisionKeys, key))]));
|
|
@@ -325,7 +329,7 @@ const Contract = "~@graftland/graft/Plugin/Contract";
|
|
|
325
329
|
*/
|
|
326
330
|
var Optional = class extends Data.TaggedClass("Optional") {};
|
|
327
331
|
/** Starts an activation-owned worker. Its unhandled errors belong to the plugin, not the launch operation. */
|
|
328
|
-
const fork =
|
|
332
|
+
const fork = Effect.fnUntraced(function* (effect) {
|
|
329
333
|
const { activation } = yield* RuntimeContext;
|
|
330
334
|
if (Option.isNone(activation.tasks)) return yield* Effect.die(/* @__PURE__ */ new Error("Plugin.fork requires a plugin activation"));
|
|
331
335
|
return yield* run(activation.tasks.value, effect);
|
|
@@ -415,12 +419,12 @@ const resolve = Effect.fnUntraced(function* (spec, prepared) {
|
|
|
415
419
|
unprovided: Array.map(unresolved, (lookup) => lookup.qualified)
|
|
416
420
|
};
|
|
417
421
|
});
|
|
418
|
-
const waitDrained =
|
|
422
|
+
const waitDrained = Effect.fnUntraced(function* (published) {
|
|
419
423
|
for (const provision of published) {
|
|
420
424
|
const consumers = yield* TxRef.get(provision.consumers);
|
|
421
425
|
if (HashSet.size(consumers) > 0) return yield* Effect.txRetry;
|
|
422
426
|
}
|
|
423
|
-
})
|
|
427
|
+
}, Effect.tx);
|
|
424
428
|
/**
|
|
425
429
|
* Withdraws what an activation published, closes it to further publishing,
|
|
426
430
|
* and waits until no consumer holds a lease on any of it.
|
|
@@ -489,12 +493,12 @@ const supervise = Effect.fnUntraced(function* (runtime, id, specRef, processing,
|
|
|
489
493
|
});
|
|
490
494
|
const resolveCurrent = (prepared) => Effect.flatMap(TxRef.get(specRef), (spec) => resolve(spec, prepared));
|
|
491
495
|
/** Resolves to the new spec if the spec changed, or `None` if a dependency changed. */
|
|
492
|
-
const waitChange =
|
|
496
|
+
const waitChange = Effect.fnUntraced(function* (resolution) {
|
|
493
497
|
const current = yield* TxRef.get(specRef);
|
|
494
498
|
if (current !== resolution.spec) return Option.some(current);
|
|
495
499
|
if (resolution.provisions.length === 0 && resolution.unprovided.length === 0) return yield* Effect.txRetry;
|
|
496
500
|
return (yield* resolutionChanged(resolution)) ? Option.none() : yield* Effect.txRetry;
|
|
497
|
-
})
|
|
501
|
+
}, Effect.tx);
|
|
498
502
|
const acquire = Effect.gen(function* () {
|
|
499
503
|
const resolution = yield* Effect.tx(Effect.gen(function* () {
|
|
500
504
|
const prepared = yield* prepare;
|
|
@@ -605,7 +609,7 @@ const supervise = Effect.fnUntraced(function* (runtime, id, specRef, processing,
|
|
|
605
609
|
}
|
|
606
610
|
});
|
|
607
611
|
/** Every phase finishes before the immutable result is handed to state or disposal. */
|
|
608
|
-
const teardown =
|
|
612
|
+
const teardown = Effect.fnUntraced(function* (running, exit) {
|
|
609
613
|
const closer = yield* Effect.withFiber((self) => Effect.succeed(self.id));
|
|
610
614
|
yield* Fiber.interrupt(running.fiber);
|
|
611
615
|
const stopped = yield* Fiber.await(running.fiber);
|
|
@@ -631,7 +635,7 @@ const supervise = Effect.fnUntraced(function* (runtime, id, specRef, processing,
|
|
|
631
635
|
if (Exit.isFailure(closed)) yield* Effect.logError("Releasing the plugin's resources failed", closed.cause);
|
|
632
636
|
yield* reportFailure(`Plugin "${running.resolution.spec.plugin.name}" failed`, stopped);
|
|
633
637
|
return cause.reasons.length === 0 ? Exit.void : Exit.failCause(cause);
|
|
634
|
-
})
|
|
638
|
+
}, (effect, running) => Effect.annotateLogs(effect, {
|
|
635
639
|
"graft.fork": id,
|
|
636
640
|
"graft.plugin": running.resolution.spec.plugin.name
|
|
637
641
|
}));
|
|
@@ -842,7 +846,7 @@ const isolation = (id) => (entry) => "key" in entry ? [entry.key, `#${id}`] : [e
|
|
|
842
846
|
* Changes a fork's spec and waits until its supervisor has acted on it:
|
|
843
847
|
* updated in place, or begun restarting. A later change also counts.
|
|
844
848
|
*/
|
|
845
|
-
const accept = (status, spec, f)
|
|
849
|
+
const accept = Effect.fnUntraced(function* (status, spec, f) {
|
|
846
850
|
const next = yield* TxRef.modify(spec, (current) => {
|
|
847
851
|
const next = f(current);
|
|
848
852
|
return [next, next];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as PackageError } from "./Peer-
|
|
1
|
+
import { c as PackageError } from "./Peer-DXeVrGBh.js";
|
|
2
2
|
import { Array, Cause, Context, Duration, Effect, FileSystem, Order, Path, Schema, Stream, String } from "effect";
|
|
3
3
|
import process from "node:process";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
@@ -20,7 +20,7 @@ const digest = Effect.fnUntraced(function* (directory) {
|
|
|
20
20
|
const fs = yield* FileSystem.FileSystem;
|
|
21
21
|
const path = yield* Path.Path;
|
|
22
22
|
const hash = yield* Effect.sync(() => createHash("sha256").update("graft-package-sha256-v1\0"));
|
|
23
|
-
const visit =
|
|
23
|
+
const visit = Effect.fnUntraced(function* (relative) {
|
|
24
24
|
const filename = path.join(directory, relative);
|
|
25
25
|
const info = yield* fs.stat(filename);
|
|
26
26
|
if (info.type !== "File" && info.type !== "Directory") return yield* PackageError.make({ detail: `Unsupported package entry: ${relative}` });
|
|
@@ -83,29 +83,26 @@ const resolve = Effect.fnUntraced(function* (root, specifier, includeDigest = fa
|
|
|
83
83
|
cause: Cause.fail(error)
|
|
84
84
|
}))
|
|
85
85
|
}));
|
|
86
|
-
const resolveEntry =
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
stdout: "pipe",
|
|
100
|
-
stderr: "pipe"
|
|
101
|
-
}));
|
|
102
|
-
const [code, stdout, stderr] = yield* Effect.all([
|
|
103
|
-
child.exitCode,
|
|
104
|
-
child.stdout.pipe(Stream.decodeText(), Stream.mkString),
|
|
105
|
-
child.stderr.pipe(Stream.decodeText(), Stream.mkString)
|
|
106
|
-
], { concurrency: "unbounded" });
|
|
107
|
-
if (code !== 0) return yield* PackageError.make({ detail: `Package resolution failed: ${stderr}` });
|
|
108
|
-
return stdout;
|
|
86
|
+
const resolveEntry = Effect.fnUntraced(function* (installation, specifier) {
|
|
87
|
+
const child = yield* (yield* ChildProcessSpawner.ChildProcessSpawner).spawn(ChildProcess.make(process.execPath, [
|
|
88
|
+
"--input-type=module",
|
|
89
|
+
"--eval",
|
|
90
|
+
"process.stdout.write(import.meta.resolve(process.argv[1]))",
|
|
91
|
+
"--",
|
|
92
|
+
specifier
|
|
93
|
+
], {
|
|
94
|
+
cwd: installation,
|
|
95
|
+
env: {},
|
|
96
|
+
stdin: "ignore",
|
|
97
|
+
stdout: "pipe",
|
|
98
|
+
stderr: "pipe"
|
|
109
99
|
}));
|
|
110
|
-
|
|
100
|
+
const [code, stdout, stderr] = yield* Effect.all([
|
|
101
|
+
child.exitCode,
|
|
102
|
+
child.stdout.pipe(Stream.decodeText(), Stream.mkString),
|
|
103
|
+
child.stderr.pipe(Stream.decodeText(), Stream.mkString)
|
|
104
|
+
], { concurrency: "unbounded" });
|
|
105
|
+
if (code !== 0) return yield* PackageError.make({ detail: `Package resolution failed: ${stderr}` });
|
|
106
|
+
return stdout;
|
|
107
|
+
}, Effect.scoped);
|
|
111
108
|
export { PositiveDuration as a, Supervisor as i, resolveEntry as n, verify as r, resolve as t };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { i as encode, r as decoder, t as EndOfStream } from "./Framing-
|
|
3
|
-
import { t as make$1 } from "./FailureGroup-
|
|
4
|
-
import { a as PositiveInt, i as PositiveFinite, r as Limits, t as Priority } from "./port
|
|
1
|
+
import { u as TransportError } from "./Errors-DYhsGZcZ.js";
|
|
2
|
+
import { i as encode, r as decoder, t as EndOfStream } from "./Framing-G9eSaeLb.js";
|
|
3
|
+
import { t as make$1 } from "./FailureGroup-BgT73AaR.js";
|
|
4
|
+
import { a as PositiveInt, i as PositiveFinite, r as Limits, t as Priority } from "./port--3x2zJ4D.js";
|
|
5
5
|
import { Array, Cause, Context, Data, Duration, Effect, Fiber, Option, Queue, Schema, Sink, Stream, TxQueue } from "effect";
|
|
6
6
|
import { Rpc, RpcGroup } from "effect/rpc";
|
|
7
7
|
// packages/remote/src/Instance.ts
|
|
@@ -273,7 +273,7 @@ var Store = class extends Context.Service()("@graftland/plugin-remote/internal/r
|
|
|
273
273
|
var Execution = class extends Context.Service()("@graftland/plugin-remote/internal/runner/model/Execution") {};
|
|
274
274
|
var RemoteTerminationUnconfirmed = class extends Schema.TaggedError()("RemoteTerminationUnconfirmed", { handle: Handle }) {};
|
|
275
275
|
/** Losing contact never becomes a successful stop merely because a lease duration passed. */
|
|
276
|
-
const awaitTermination = (handle, confirmation, leaseMillis, marginMillis)
|
|
276
|
+
const awaitTermination = Effect.fnUntraced(function* (handle, confirmation, leaseMillis, marginMillis) {
|
|
277
277
|
const [elapsed, result] = yield* Effect.exit(Effect.timeoutOption(confirmation, leaseMillis + marginMillis)).pipe(Effect.timed);
|
|
278
278
|
if (result._tag === "Success") {
|
|
279
279
|
if (Option.isSome(result.value)) return result.value.value;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as make } from "./FailureGroup-
|
|
1
|
+
import { t as make } from "./FailureGroup-BgT73AaR.js";
|
|
2
2
|
import { Array, Cause, Effect, Exit, Fiber, Ref, Schedule, Stream, String } from "effect";
|
|
3
3
|
// packages/remote/src/internal/runner/ProcessObservation.ts
|
|
4
4
|
/** Time allowed for a direct execution unit or launcher to exit after input EOF. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as close } from "./release-
|
|
1
|
+
import { n as close } from "./release-DfZPuIcK.js";
|
|
2
2
|
import { Context, Deferred, Effect, Exit, Option, Schema, Scope } from "effect";
|
|
3
3
|
// packages/remote/src/internal/ServeLifecycle.ts
|
|
4
4
|
var StartupError = class extends Schema.TaggedError()("RunnerStartupError", {
|
package/dist/Transport.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AuthenticationFailed, TransportError } from "./Errors.js";
|
|
1
|
+
import { AuthenticationFailed, AuthenticatorUnavailable, TransportError } from "./Errors.js";
|
|
2
2
|
import { Prepared, TlsPolicy, VerifiedCertificate } from "./Auth.js";
|
|
3
3
|
import { Context, Effect, Option, Redacted, Scope, Sink, Stream } from "effect";
|
|
4
4
|
/** Ordered reliable bytes. Chunk boundaries have no meaning; EOF is not exit confirmation. */
|
|
@@ -17,7 +17,7 @@ export interface Handshake {
|
|
|
17
17
|
readonly certificate: Option.Option<VerifiedCertificate>;
|
|
18
18
|
}
|
|
19
19
|
export type Session = (channel: Channel) => Effect.Effect<void, TransportError, Scope.Scope>;
|
|
20
|
-
export type Accept = (handshake: Handshake) => Effect.Effect<Session, AuthenticationFailed>;
|
|
20
|
+
export type Accept = (handshake: Handshake) => Effect.Effect<Session, AuthenticationFailed | AuthenticatorUnavailable>;
|
|
21
21
|
export interface Serving {
|
|
22
22
|
/** Completes after serve has registered its accept loop, not merely after bind. */
|
|
23
23
|
readonly ready: Effect.Effect<void>;
|
package/dist/Transport.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Transport.d.ts","names":[],"sources":["../src/Transport.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"Transport.d.ts","names":[],"sources":["../src/Transport.ts"],"mappings":";;;;iBAUiB;WACP,OAAO,OAAO,OAAO,YAAY;WACjC,QAAQ,KAAK,cAAc,qBAAqB;;iBAGzC;WACP;WACA;WACA;WACA,SAAS;;iBAEF;WACP,eAAe,OAAO,OAAO,SAAS;WACtC,aAAa,OAAO,OAAO;;YAEzB,WACX,SAAS,YACL,OAAO,aAAa,gBAAgB,MAAM;YACnC,UACX,WAAW,cACP,OAAO,OAAO,SAAS,uBAAuB;iBAClC;;WAEP,OAAO,OAAO;WACd,QACR,QAAQ,WACJ,OAAO,aAAa,gBAAgB,MAAM;;iBAE/B;WACP,YAAY;WACZ,UACR,aAAa,aACT,OAAO,OAAO,SAAS,gBAAgB,MAAM;;iBAElC;WACP,YAAY;WACZ,OACR,KAAK,OAAO,OAAO,eACf,OAAO,OAAO,SAAS,gBAAgB,MAAM;;;qBAEtC,kBAAkB;;qBAGlB,iBAAiB"}
|
package/dist/Transport.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Transport.js","names":[],"sources":["../src/Transport.ts"],"sourcesContent":["/** Execution and byte-channel capabilities; implementations live in host plugins. */\nimport { Context } from \"effect\"\nimport type { Effect, Option, Scope, Stream, Sink, Redacted } from \"effect\"\nimport type {
|
|
1
|
+
{"version":3,"file":"Transport.js","names":[],"sources":["../src/Transport.ts"],"sourcesContent":["/** Execution and byte-channel capabilities; implementations live in host plugins. */\nimport { Context } from \"effect\"\nimport type { Effect, Option, Scope, Stream, Sink, Redacted } from \"effect\"\nimport type {\n\tAuthenticationFailed,\n\tAuthenticatorUnavailable,\n\tTransportError,\n} from \"./Errors\"\nimport type { Prepared, VerifiedCertificate, TlsPolicy } from \"./Auth\"\n/** Ordered reliable bytes. Chunk boundaries have no meaning; EOF is not exit confirmation. */\nexport interface Channel {\n\treadonly input: Stream.Stream<Uint8Array, TransportError>\n\treadonly output: Sink.Sink<unknown, Uint8Array, unknown, TransportError>\n}\n\nexport interface Properties {\n\treadonly protocol: string\n\treadonly encrypted: boolean\n\treadonly network: boolean\n\treadonly carries: ReadonlyArray<\"header\" | \"certificate\">\n}\nexport interface Handshake {\n\treadonly authorization: Option.Option<Redacted.Redacted<string>>\n\treadonly certificate: Option.Option<VerifiedCertificate>\n}\nexport type Session = (\n\tchannel: Channel,\n) => Effect.Effect<void, TransportError, Scope.Scope>\nexport type Accept = (\n\thandshake: Handshake,\n) => Effect.Effect<Session, AuthenticationFailed | AuthenticatorUnavailable>\nexport interface Serving {\n\t/** Completes after serve has registered its accept loop, not merely after bind. */\n\treadonly ready: Effect.Effect<void>\n\treadonly serve: (\n\t\taccept: Accept,\n\t) => Effect.Effect<void, TransportError, Scope.Scope>\n}\nexport interface ConnectorApi {\n\treadonly properties: Properties\n\treadonly connect: (\n\t\tcredentials: Prepared,\n\t) => Effect.Effect<Channel, TransportError, Scope.Scope>\n}\nexport interface ListenerApi {\n\treadonly properties: Properties\n\treadonly bind: (\n\t\ttls: Option.Option<TlsPolicy>,\n\t) => Effect.Effect<Serving, TransportError, Scope.Scope>\n}\nexport class Connector extends Context.Service<Connector, ConnectorApi>()(\n\t\"@graftland/plugin-remote/Transport/Connector\",\n) {}\nexport class Listener extends Context.Service<Listener, ListenerApi>()(\n\t\"@graftland/plugin-remote/Transport/Listener\",\n) {}\n"],"mappings":";;;AAkDA,IAAa,YAAb,cAA+B,QAAQ,QAAiC,CAAC,CACxE,8CACD,CAAC,CAAC,CAAC;AACH,IAAa,WAAb,cAA8B,QAAQ,QAA+B,CAAC,CACrE,6CACD,CAAC,CAAC,CAAC"}
|