@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.
Files changed (147) hide show
  1. package/dist/Auth.d.ts +2 -2
  2. package/dist/Auth.d.ts.map +1 -1
  3. package/dist/Auth.js.map +1 -1
  4. package/dist/{Bootstrap-Dr6sX7el.js → Bootstrap-H9gDsgsC.js} +2 -2
  5. package/dist/{Contract-DL2mHvaT.js → Contract-DsJtisvL.js} +2 -2
  6. package/dist/Contract.js +1 -1
  7. package/dist/{Errors-BMKmu5Y7.js → Errors-DYhsGZcZ.js} +3 -1
  8. package/dist/Errors.d.ts +7 -0
  9. package/dist/Errors.d.ts.map +1 -1
  10. package/dist/Errors.js +3 -1
  11. package/dist/Errors.js.map +1 -1
  12. package/dist/{FailureGroup-BcH0XOBi.js → FailureGroup-BgT73AaR.js} +14 -4
  13. package/dist/{Framing-zaYdOJnT.js → Framing-G9eSaeLb.js} +1 -1
  14. package/dist/{Graft-CVyueNOf.js → Graft-B71CPA2Y.js} +20 -16
  15. package/dist/{Packages-JNL34JpS.js → Packages-AgoCGotL.js} +23 -26
  16. package/dist/{Peer-BT7eAGmh.js → Peer-DXeVrGBh.js} +5 -5
  17. package/dist/{ProcessObservation-DEGrEMfP.js → ProcessObservation-gLgGirYv.js} +1 -1
  18. package/dist/{ServeLifecycle-CJM0gG5B.js → ServeLifecycle-Bd1FPJ6e.js} +1 -1
  19. package/dist/Transport.d.ts +2 -2
  20. package/dist/Transport.d.ts.map +1 -1
  21. package/dist/Transport.js.map +1 -1
  22. package/dist/bin.js +48 -47
  23. package/dist/bin.js.map +1 -1
  24. package/dist/{childRuntime-An0HsIzl.js → childRuntime-Bm3iSg_N.js} +29 -26
  25. package/dist/{connectionEnded-DCpFCjMX.js → connectionEnded-BwcxQ7W8.js} +4 -4
  26. package/dist/{entry-B89sepMU.js → entry-psOpX3Bj.js} +72 -35
  27. package/dist/host/auth/bearer.js +1 -1
  28. package/dist/host/auth/jwt.js +1 -1
  29. package/dist/host/auth/mtls.js +2 -2
  30. package/dist/host/auth/none.js +1 -1
  31. package/dist/host/command.js +4 -4
  32. package/dist/host/local.js +3 -3
  33. package/dist/host/unix.js +3 -3
  34. package/dist/host/websocket.js +3 -3
  35. package/dist/host/worker.js +4 -5
  36. package/dist/{importer-Bk6U_sn4.js → importer-Cvf88eAY.js} +5 -8
  37. package/dist/index.js +9 -9
  38. package/dist/index.js.map +1 -1
  39. package/dist/internal/Certificates.js +4 -4
  40. package/dist/internal/Certificates.js.map +1 -1
  41. package/dist/internal/FailureGroup.js +3 -2
  42. package/dist/internal/FailureGroup.js.map +1 -1
  43. package/dist/internal/assembly.js +9 -2
  44. package/dist/internal/assembly.js.map +1 -1
  45. package/dist/internal/auth/mtls.js +1 -1
  46. package/dist/internal/auth/mtls.js.map +1 -1
  47. package/dist/internal/child.js +20 -17
  48. package/dist/internal/child.js.map +1 -1
  49. package/dist/internal/childRuntime.js +4 -4
  50. package/dist/internal/childRuntime.js.map +1 -1
  51. package/dist/internal/directTransport.d.ts +1 -1
  52. package/dist/internal/entry.d.ts.map +1 -1
  53. package/dist/internal/entry.js +1 -1
  54. package/dist/internal/entry.js.map +1 -1
  55. package/dist/internal/execution.js +40 -5
  56. package/dist/internal/execution.js.map +1 -1
  57. package/dist/internal/host/runner.js +7 -6
  58. package/dist/internal/host/runner.js.map +1 -1
  59. package/dist/internal/host.js +5 -5
  60. package/dist/internal/host.js.map +1 -1
  61. package/dist/internal/port.js +5 -5
  62. package/dist/internal/port.js.map +1 -1
  63. package/dist/internal/release.js +1 -1
  64. package/dist/internal/release.js.map +1 -1
  65. package/dist/internal/runner/Connection.d.ts +1 -1
  66. package/dist/internal/runner/Connection.js +4 -4
  67. package/dist/internal/runner/Connection.js.map +1 -1
  68. package/dist/internal/runner/Execution.js +3 -3
  69. package/dist/internal/runner/Execution.js.map +1 -1
  70. package/dist/internal/runner/Framing.js +1 -1
  71. package/dist/internal/runner/Framing.js.map +1 -1
  72. package/dist/internal/runner/Local.js +1 -1
  73. package/dist/internal/runner/Local.js.map +1 -1
  74. package/dist/internal/runner/Lock.js +1 -1
  75. package/dist/internal/runner/Lock.js.map +1 -1
  76. package/dist/internal/runner/Packages.d.ts +1 -1
  77. package/dist/internal/runner/Packages.js +22 -25
  78. package/dist/internal/runner/Packages.js.map +1 -1
  79. package/dist/internal/runner/Processes.js +7 -9
  80. package/dist/internal/runner/Processes.js.map +1 -1
  81. package/dist/internal/runner/Store.js +3 -3
  82. package/dist/internal/runner/Store.js.map +1 -1
  83. package/dist/internal/runner/Supervisor.js +46 -47
  84. package/dist/internal/runner/Supervisor.js.map +1 -1
  85. package/dist/internal/runner/accept.js +3 -3
  86. package/dist/internal/runner/accept.js.map +1 -1
  87. package/dist/internal/runner/model.js +1 -1
  88. package/dist/internal/runner/model.js.map +1 -1
  89. package/dist/internal/serve.js +1 -1
  90. package/dist/internal/serve.js.map +1 -1
  91. package/dist/internal/supervisorPlugin.js +1 -1
  92. package/dist/internal/watchdogMain.js +5 -5
  93. package/dist/internal/watchdogMain.js.map +1 -1
  94. package/dist/internal/websocketServer.js +3 -1
  95. package/dist/internal/websocketServer.js.map +1 -1
  96. package/dist/internal/workerMain.js +3 -3
  97. package/dist/{port-DSVUY8Bq.js → port--3x2zJ4D.js} +8 -8
  98. package/dist/{release-BY4Mlluy.js → release-DfZPuIcK.js} +1 -1
  99. package/dist/runner/auth/bearer.js +2 -2
  100. package/dist/runner/auth/jwt.js +4 -4
  101. package/dist/runner/auth/jwt.js.map +1 -1
  102. package/dist/runner/auth/mtls.js +3 -3
  103. package/dist/runner/auth/none.js +1 -1
  104. package/dist/runner/index.js +5 -5
  105. package/dist/runner/stdio.js +3 -3
  106. package/dist/runner/unix.js +3 -3
  107. package/dist/runner/websocket.js +4 -4
  108. package/dist/{socketChannel-C_ppdSzz.js → socketChannel-CJvL2DiB.js} +2 -2
  109. package/dist/{supervisorPlugin-CivhM7x5.js → supervisorPlugin-t6Z6PrhD.js} +72 -76
  110. package/dist/{token-Cc_1CTbE.js → token-CYBNNlhS.js} +1 -1
  111. package/dist/{tokenCredentials-CI6mMRRd.js → tokenCredentials-CbCuk-Rt.js} +3 -3
  112. package/dist/{websocketServer-D2Hk7wsA.js → websocketServer-NQhODlEt.js} +5 -3
  113. package/dist/{workerChannel-cmLc13vm.js → workerChannel-C8hhBJzA.js} +1 -1
  114. package/package.json +3 -3
  115. package/src/Auth.ts +9 -2
  116. package/src/Errors.ts +8 -0
  117. package/src/Transport.ts +6 -2
  118. package/src/bin.ts +28 -30
  119. package/src/index.ts +5 -3
  120. package/src/internal/Certificates.ts +10 -13
  121. package/src/internal/FailureGroup.ts +128 -121
  122. package/src/internal/assembly.ts +19 -10
  123. package/src/internal/auth/mtls.ts +19 -20
  124. package/src/internal/child.ts +248 -239
  125. package/src/internal/childRuntime.ts +81 -80
  126. package/src/internal/entry.ts +10 -11
  127. package/src/internal/execution.ts +69 -12
  128. package/src/internal/host/runner.ts +153 -153
  129. package/src/internal/host.ts +116 -120
  130. package/src/internal/port.ts +100 -103
  131. package/src/internal/release.ts +3 -2
  132. package/src/internal/runner/Connection.ts +52 -60
  133. package/src/internal/runner/Execution.ts +163 -164
  134. package/src/internal/runner/Framing.ts +9 -10
  135. package/src/internal/runner/Local.ts +26 -27
  136. package/src/internal/runner/Lock.ts +23 -25
  137. package/src/internal/runner/Packages.ts +67 -70
  138. package/src/internal/runner/Processes.ts +89 -92
  139. package/src/internal/runner/Store.ts +110 -114
  140. package/src/internal/runner/Supervisor.ts +392 -405
  141. package/src/internal/runner/accept.ts +76 -84
  142. package/src/internal/runner/model.ts +20 -21
  143. package/src/internal/serve.ts +15 -13
  144. package/src/internal/watchdogMain.ts +16 -11
  145. package/src/internal/websocketServer.ts +18 -3
  146. package/src/runner/auth/jwt.ts +10 -6
  147. 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;
@@ -1 +1 @@
1
- {"version":3,"file":"Auth.d.ts","names":[],"sources":["../src/Auth.ts"],"mappings":";;iBAKiB;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,eAAe;;WAGlB;WACA,KAAK;WACL,eACR,MAAM,wBACF,OAAO,eAAe;;WAEhB;WAAuB;;;qBAExB,oBAAoB;;qBAGpB,sBAAsB"}
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 { AuthenticationFailed, CredentialsError } 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<string, AuthenticationFailed>\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":";;;AAuDA,IAAa,cAAb,cAAiC,QAAQ,QAAqC,CAAC,CAC9E,2CACD,CAAC,CAAC,CAAC;AACH,IAAa,gBAAb,cAAmC,QAAQ,QAGzC,CAAC,CAAC,6CAA6C,CAAC,CAAC,CAAC"}
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-BT7eAGmh.js";
2
- import { r as Limits } from "./port-DSVUY8Bq.js";
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-DSVUY8Bq.js";
3
- import { a as provide } from "./Graft-CVyueNOf.js";
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-DL2mHvaT.js";
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 { ProcessExited as a, RemoteWithdrawn as c, MissingInstance as i, TransportError as l, CredentialsError as n, RemoteEntryError as o, LocalTerminationTimeout as r, RemoteError as s, AuthenticationFailed as t };
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>;
@@ -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;;;;;;;WAYvB;;;qBAFN,yBAAyB;MASxB"}
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
@@ -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-BY4Mlluy.js";
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 = () => Effect.gen(function* () {
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.orDie));
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 = (frame) => Effect.gen(function* () {
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 start = (exit) => Effect.gen(function* () {
193
- if (!(yield* Deferred.succeed(started, void 0))) return;
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.andThen(restore(Deferred.await(completed)))));
210
- yield* Scope.addFinalizerExit(link, (exit) => start(exit).pipe(Effect.andThen(Deferred.await(ready)), Effect.orDie, Effect.ensuring(close(workers, exit))));
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) => Effect.tx(Effect.gen(function* () {
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 = (status) => Effect.tx(Effect.gen(function* () {
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 = (effect) => Effect.gen(function* () {
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 = (published) => Effect.tx(Effect.gen(function* () {
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 = (resolution) => Effect.tx(Effect.gen(function* () {
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 = (running, exit) => Effect.gen(function* () {
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
- }).pipe(Effect.annotateLogs({
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) => Effect.gen(function* () {
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-BT7eAGmh.js";
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 = (relative) => Effect.gen(function* () {
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 = (installation, specifier) => Effect.gen(function* () {
87
- const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
88
- return yield* Effect.scoped(Effect.gen(function* () {
89
- const child = yield* spawner.spawn(ChildProcess.make(process.execPath, [
90
- "--input-type=module",
91
- "--eval",
92
- "process.stdout.write(import.meta.resolve(process.argv[1]))",
93
- "--",
94
- specifier
95
- ], {
96
- cwd: installation,
97
- env: {},
98
- stdin: "ignore",
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 { l as TransportError } from "./Errors-BMKmu5Y7.js";
2
- import { i as encode, r as decoder, t as EndOfStream } from "./Framing-zaYdOJnT.js";
3
- import { t as make$1 } from "./FailureGroup-BcH0XOBi.js";
4
- import { a as PositiveInt, i as PositiveFinite, r as Limits, t as Priority } from "./port-DSVUY8Bq.js";
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) => Effect.gen(function* () {
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-BcH0XOBi.js";
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-BY4Mlluy.js";
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", {
@@ -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>;
@@ -1 +1 @@
1
- {"version":3,"file":"Transport.d.ts","names":[],"sources":["../src/Transport.ts"],"mappings":";;;;iBAMiB;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;iBACX;;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"}
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"}
@@ -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 { AuthenticationFailed, TransportError } 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>\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":";;;AA8CA,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"}
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"}