the-moby-effect 1.51.0 → 1.51.1

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 (120) hide show
  1. package/dist/Callbacks.d.ts +3 -3
  2. package/dist/DindEngine.d.ts +3 -3
  3. package/dist/DockerComposeEngine.d.ts +4 -4
  4. package/dist/DockerEngine.d.ts +12 -5
  5. package/dist/DockerEngine.d.ts.map +1 -1
  6. package/dist/DockerEngine.js +7 -0
  7. package/dist/DockerEngine.js.map +1 -1
  8. package/dist/MobyConvey.d.ts +1 -1
  9. package/dist/MobyDemux.d.ts +21 -1
  10. package/dist/MobyDemux.d.ts.map +1 -1
  11. package/dist/MobyDemux.js +20 -0
  12. package/dist/MobyDemux.js.map +1 -1
  13. package/dist/MobyEndpoints.d.ts +15 -15
  14. package/dist/MobyPlatforms.d.ts +1 -1
  15. package/dist/MobySchemas.d.ts +1 -1
  16. package/dist/PodmanEngine.d.ts +2 -2
  17. package/dist/Promises.d.ts +3 -3
  18. package/dist/internal/demux/multiplexed.js +4 -0
  19. package/dist/internal/demux/multiplexed.js.map +1 -1
  20. package/dist/internal/demux/raw.js +4 -0
  21. package/dist/internal/demux/raw.js.map +1 -1
  22. package/dist/internal/endpoints/auth.d.ts +56 -0
  23. package/dist/internal/endpoints/auth.d.ts.map +1 -0
  24. package/dist/internal/endpoints/auth.js +82 -0
  25. package/dist/internal/endpoints/auth.js.map +1 -0
  26. package/dist/internal/endpoints/containers.d.ts.map +1 -1
  27. package/dist/internal/endpoints/containers.js +3 -3
  28. package/dist/internal/endpoints/containers.js.map +1 -1
  29. package/dist/internal/endpoints/execs.d.ts.map +1 -1
  30. package/dist/internal/endpoints/execs.js +1 -1
  31. package/dist/internal/endpoints/execs.js.map +1 -1
  32. package/dist/internal/endpoints/images.d.ts +8 -8
  33. package/dist/internal/endpoints/images.d.ts.map +1 -1
  34. package/dist/internal/endpoints/images.js +21 -17
  35. package/dist/internal/endpoints/images.js.map +1 -1
  36. package/dist/internal/endpoints/networks.d.ts +26 -4
  37. package/dist/internal/endpoints/networks.d.ts.map +1 -1
  38. package/dist/internal/endpoints/networks.js +5 -5
  39. package/dist/internal/endpoints/networks.js.map +1 -1
  40. package/dist/internal/endpoints/plugins.d.ts +3 -3
  41. package/dist/internal/endpoints/plugins.d.ts.map +1 -1
  42. package/dist/internal/endpoints/plugins.js +12 -11
  43. package/dist/internal/endpoints/plugins.js.map +1 -1
  44. package/dist/internal/endpoints/services.d.ts +25 -3
  45. package/dist/internal/endpoints/services.d.ts.map +1 -1
  46. package/dist/internal/endpoints/services.js +8 -11
  47. package/dist/internal/endpoints/services.js.map +1 -1
  48. package/dist/internal/endpoints/system.d.ts +1 -1
  49. package/dist/internal/endpoints/system.d.ts.map +1 -1
  50. package/dist/internal/endpoints/system.js.map +1 -1
  51. package/dist/internal/engines/dind.js +9 -2
  52. package/dist/internal/engines/dind.js.map +1 -1
  53. package/dist/internal/generated/ContainerConfig.generated.d.ts +3 -3
  54. package/dist/internal/generated/ContainerConfig.generated.js +1 -1
  55. package/dist/internal/generated/ContainerConfig.generated.js.map +1 -1
  56. package/dist/internal/generated/ContainerContainerJSONBase.generated.d.ts +3 -3
  57. package/dist/internal/generated/ContainerContainerJSONBase.generated.js +2 -1
  58. package/dist/internal/generated/ContainerContainerJSONBase.generated.js.map +1 -1
  59. package/dist/internal/generated/ContainerCreateRequest.generated.d.ts +3 -3
  60. package/dist/internal/generated/ContainerDefaultNetworkSettings.generated.d.ts +24 -24
  61. package/dist/internal/generated/ContainerDefaultNetworkSettings.generated.js +15 -8
  62. package/dist/internal/generated/ContainerDefaultNetworkSettings.generated.js.map +1 -1
  63. package/dist/internal/generated/ContainerInspectResponse.generated.d.ts +3 -3
  64. package/dist/internal/generated/ContainerNetworkSettings.generated.d.ts +45 -45
  65. package/dist/internal/generated/ContainerNetworkSettingsBase.generated.d.ts +21 -21
  66. package/dist/internal/generated/ContainerNetworkSettingsBase.generated.js +11 -6
  67. package/dist/internal/generated/ContainerNetworkSettingsBase.generated.js.map +1 -1
  68. package/dist/internal/generated/ImageInspectResponse.generated.d.ts +14 -14
  69. package/dist/internal/generated/ImageInspectResponse.generated.js +8 -4
  70. package/dist/internal/generated/ImageInspectResponse.generated.js.map +1 -1
  71. package/dist/internal/generated/NetworkCreateOptions.generated.d.ts +66 -34
  72. package/dist/internal/generated/NetworkCreateOptions.generated.d.ts.map +1 -1
  73. package/dist/internal/generated/NetworkCreateOptions.generated.js +28 -12
  74. package/dist/internal/generated/NetworkCreateOptions.generated.js.map +1 -1
  75. package/dist/internal/generated/NetworkCreateRequest.generated.d.ts +66 -34
  76. package/dist/internal/generated/NetworkCreateRequest.generated.d.ts.map +1 -1
  77. package/dist/internal/generated/NetworkInspect.generated.d.ts +11 -11
  78. package/dist/internal/generated/NetworkInspect.generated.js +5 -3
  79. package/dist/internal/generated/NetworkInspect.generated.js.map +1 -1
  80. package/dist/internal/generated/TypesDiskUsage.generated.d.ts +3 -3
  81. package/dist/internal/generated/TypesDiskUsage.generated.js +2 -1
  82. package/dist/internal/generated/TypesDiskUsage.generated.js.map +1 -1
  83. package/dist/internal/platforms/undici.js +88 -59
  84. package/dist/internal/platforms/undici.js.map +1 -1
  85. package/dist/internal/schemas/id.js +1 -1
  86. package/dist/internal/schemas/id.js.map +1 -1
  87. package/package.json +1 -1
  88. package/src/Callbacks.ts +3 -3
  89. package/src/DindEngine.ts +4 -4
  90. package/src/DockerComposeEngine.ts +4 -4
  91. package/src/DockerEngine.ts +16 -7
  92. package/src/MobyConnection.ts +1 -1
  93. package/src/MobyConvey.ts +2 -2
  94. package/src/MobyDemux.ts +31 -7
  95. package/src/MobyEndpoints.ts +15 -15
  96. package/src/MobyPlatforms.ts +8 -8
  97. package/src/MobySchemas.ts +1 -1
  98. package/src/PodmanEngine.ts +3 -3
  99. package/src/Promises.ts +3 -3
  100. package/src/internal/demux/multiplexed.ts +9 -0
  101. package/src/internal/demux/raw.ts +6 -0
  102. package/src/internal/endpoints/auth.ts +120 -0
  103. package/src/internal/endpoints/containers.ts +7 -4
  104. package/src/internal/endpoints/execs.ts +7 -2
  105. package/src/internal/endpoints/images.ts +59 -24
  106. package/src/internal/endpoints/networks.ts +11 -5
  107. package/src/internal/endpoints/plugins.ts +17 -7
  108. package/src/internal/endpoints/services.ts +21 -6
  109. package/src/internal/endpoints/system.ts +1 -1
  110. package/src/internal/engines/dind.ts +8 -2
  111. package/src/internal/generated/ContainerConfig.generated.ts +1 -1
  112. package/src/internal/generated/ContainerContainerJSONBase.generated.ts +1 -1
  113. package/src/internal/generated/ContainerDefaultNetworkSettings.generated.ts +8 -8
  114. package/src/internal/generated/ContainerNetworkSettingsBase.generated.ts +6 -6
  115. package/src/internal/generated/ImageInspectResponse.generated.ts +4 -4
  116. package/src/internal/generated/NetworkCreateOptions.generated.ts +10 -10
  117. package/src/internal/generated/NetworkInspect.generated.ts +3 -3
  118. package/src/internal/generated/TypesDiskUsage.generated.ts +1 -1
  119. package/src/internal/platforms/undici.ts +121 -90
  120. package/src/internal/schemas/id.ts +1 -1
@@ -5,14 +5,14 @@ export class ContainerDefaultNetworkSettings extends Schema.Class<ContainerDefau
5
5
  "ContainerDefaultNetworkSettings"
6
6
  )(
7
7
  {
8
- EndpointID: Schema.String,
9
- Gateway: Schema.String,
10
- GlobalIPv6Address: Schema.String,
11
- GlobalIPv6PrefixLen: EffectSchemas.Number.I64,
12
- IPAddress: Schema.String,
13
- IPPrefixLen: EffectSchemas.Number.I64,
14
- IPv6Gateway: Schema.String,
15
- MacAddress: Schema.String,
8
+ EndpointID: Schema.optional(Schema.String), // optional for docker.io/library/docker:26-dind-rootless
9
+ Gateway: Schema.optional(Schema.String), // optional for docker.io/library/docker:26-dind-rootless
10
+ GlobalIPv6Address: Schema.optional(Schema.String), // optional for docker.io/library/docker:26-dind-rootless
11
+ GlobalIPv6PrefixLen: Schema.optional(EffectSchemas.Number.I64), // optional for docker.io/library/docker:26-dind-rootless
12
+ IPAddress: Schema.optional(Schema.String), // optional for docker.io/library/docker:26-dind-rootless
13
+ IPPrefixLen: Schema.optional(EffectSchemas.Number.I64), // optional for docker.io/library/docker:26-dind-rootless
14
+ IPv6Gateway: Schema.optional(Schema.String), // optional for docker.io/library/docker:26-dind-rootless
15
+ MacAddress: Schema.optional(Schema.String), // optional for docker.io/library/docker:26-dind-rootless
16
16
  },
17
17
  {
18
18
  identifier: "ContainerDefaultNetworkSettings",
@@ -7,15 +7,15 @@ export class ContainerNetworkSettingsBase extends Schema.Class<ContainerNetworkS
7
7
  "ContainerNetworkSettingsBase"
8
8
  )(
9
9
  {
10
- Bridge: Schema.String,
10
+ Bridge: Schema.optional(Schema.String), // optional for docker.io/library/docker:26-dind-rootless
11
11
  SandboxID: Schema.String,
12
12
  SandboxKey: Schema.String,
13
13
  Ports: Schema.NullOr(PortSchemas.PortMap),
14
- HairpinMode: Schema.Boolean,
15
- LinkLocalIPv6Address: Schema.String,
16
- LinkLocalIPv6PrefixLen: EffectSchemas.Number.I64,
17
- SecondaryIPAddresses: Schema.NullOr(Schema.Array(Schema.NullOr(NetworkAddress.NetworkAddress))),
18
- SecondaryIPv6Addresses: Schema.NullOr(Schema.Array(Schema.NullOr(NetworkAddress.NetworkAddress))),
14
+ HairpinMode: Schema.optional(Schema.Boolean), // optional for docker.io/library/docker:26-dind-rootless
15
+ LinkLocalIPv6Address: Schema.optional(Schema.String), // optional for docker.io/library/docker:26-dind-rootless
16
+ LinkLocalIPv6PrefixLen: Schema.optional(EffectSchemas.Number.I64), // optional for docker.io/library/docker:26-dind-rootless
17
+ SecondaryIPAddresses: Schema.NullishOr(Schema.Array(Schema.NullOr(NetworkAddress.NetworkAddress))), // optional for docker.io/library/docker:26-dind-rootless
18
+ SecondaryIPv6Addresses: Schema.NullishOr(Schema.Array(Schema.NullOr(NetworkAddress.NetworkAddress))), // optional for docker.io/library/docker:26-dind-rootless
19
19
  },
20
20
  {
21
21
  identifier: "ContainerNetworkSettingsBase",
@@ -14,13 +14,13 @@ export class ImageInspectResponse extends Schema.Class<ImageInspectResponse>("Im
14
14
  Id: Schema.String,
15
15
  RepoTags: Schema.NullOr(Schema.Array(Schema.String)),
16
16
  RepoDigests: Schema.NullOr(Schema.Array(MobyIdentifiers.Digest)),
17
- Parent: Schema.String,
17
+ Parent: Schema.optional(Schema.String), // optional for docker.io/library/docker:26-dind-rootless
18
18
  Comment: Schema.String,
19
19
  Created: Schema.optional(Schema.String),
20
20
  Container: Schema.optional(Schema.String),
21
21
  ContainerConfig: Schema.optionalWith(ContainerConfig.ContainerConfig, { nullable: true }),
22
- DockerVersion: Schema.String,
23
- Author: Schema.String,
22
+ DockerVersion: Schema.optional(Schema.String), // optional for docker.io/library/docker:26-dind-rootless
23
+ Author: Schema.optional(Schema.String), // optional for docker.io/library/docker:26-dind-rootless
24
24
  Config: Schema.NullOr(V1DockerOCIImageConfig.V1DockerOCIImageConfig),
25
25
  Architecture: Schema.String,
26
26
  Variant: Schema.optional(Schema.String),
@@ -28,7 +28,7 @@ export class ImageInspectResponse extends Schema.Class<ImageInspectResponse>("Im
28
28
  OsVersion: Schema.optional(Schema.String),
29
29
  Size: EffectSchemas.Number.I64,
30
30
  VirtualSize: Schema.optional(EffectSchemas.Number.I64),
31
- GraphDriver: Schema.NullOr(StorageDriverData.StorageDriverData),
31
+ GraphDriver: Schema.NullishOr(StorageDriverData.StorageDriverData), // optional for docker.io/library/docker:26-dind-rootless
32
32
  RootFS: Schema.NullOr(ImageRootFS.ImageRootFS),
33
33
  Metadata: Schema.NullOr(ImageMetadata.ImageMetadata),
34
34
  Descriptor: Schema.optionalWith(V1Descriptor.V1Descriptor, { nullable: true }),
@@ -4,18 +4,18 @@ import * as NetworkIPAM from "./NetworkIPAM.generated.js";
4
4
 
5
5
  export class NetworkCreateOptions extends Schema.Class<NetworkCreateOptions>("NetworkCreateOptions")(
6
6
  {
7
- Driver: Schema.String,
8
- Scope: Schema.String,
7
+ Driver: Schema.String.pipe(Schema.propertySignature).pipe(Schema.withConstructorDefault(() => "bridge")),
8
+ Scope: Schema.optionalWith(Schema.String, { nullable: true }),
9
9
  EnableIPv4: Schema.optionalWith(Schema.Boolean, { nullable: true }),
10
10
  EnableIPv6: Schema.optionalWith(Schema.Boolean, { nullable: true }),
11
- IPAM: Schema.NullOr(NetworkIPAM.NetworkIPAM),
12
- Internal: Schema.Boolean,
13
- Attachable: Schema.Boolean,
14
- Ingress: Schema.Boolean,
15
- ConfigOnly: Schema.Boolean,
16
- ConfigFrom: Schema.NullOr(NetworkConfigReference.NetworkConfigReference),
17
- Options: Schema.NullOr(Schema.Record({ key: Schema.String, value: Schema.String })),
18
- Labels: Schema.NullOr(Schema.Record({ key: Schema.String, value: Schema.String })),
11
+ IPAM: Schema.optionalWith(NetworkIPAM.NetworkIPAM, { nullable: true }),
12
+ Internal: Schema.optionalWith(Schema.Boolean, { nullable: true }),
13
+ Attachable: Schema.optionalWith(Schema.Boolean, { nullable: true }),
14
+ Ingress: Schema.optionalWith(Schema.Boolean, { nullable: true }),
15
+ ConfigOnly: Schema.Boolean.pipe(Schema.propertySignature).pipe(Schema.withConstructorDefault(() => false)),
16
+ ConfigFrom: Schema.optionalWith(NetworkConfigReference.NetworkConfigReference, { nullable: true }),
17
+ Options: Schema.optionalWith(Schema.Record({ key: Schema.String, value: Schema.String }), { nullable: true }),
18
+ Labels: Schema.optionalWith(Schema.Record({ key: Schema.String, value: Schema.String }), { nullable: true }),
19
19
  },
20
20
  {
21
21
  identifier: "NetworkCreateOptions",
@@ -12,7 +12,7 @@ export class NetworkInspect extends Schema.Class<NetworkInspect>("NetworkInspect
12
12
  Created: Schema.NullOr(Schema.DateFromString),
13
13
  Scope: Schema.String,
14
14
  Driver: Schema.String,
15
- EnableIPv4: Schema.Boolean,
15
+ EnableIPv4: Schema.optional(Schema.Boolean), // optional for docker.io/library/docker:27-dind-rootless
16
16
  EnableIPv6: Schema.Boolean,
17
17
  IPAM: Schema.NullOr(NetworkIPAM.NetworkIPAM),
18
18
  Internal: Schema.Boolean,
@@ -20,8 +20,8 @@ export class NetworkInspect extends Schema.Class<NetworkInspect>("NetworkInspect
20
20
  Ingress: Schema.Boolean,
21
21
  ConfigFrom: Schema.NullOr(NetworkConfigReference.NetworkConfigReference),
22
22
  ConfigOnly: Schema.Boolean,
23
- Containers: Schema.NullOr(
24
- Schema.Record({ key: Schema.String, value: Schema.NullOr(NetworkEndpointResource.NetworkEndpointResource) })
23
+ Containers: Schema.NullishOr(
24
+ Schema.Record({ key: Schema.String, value: Schema.NullOr(NetworkEndpointResource.NetworkEndpointResource) }) // optional for docker.io/library/docker:26-dind-rootless
25
25
  ),
26
26
  Options: Schema.NullOr(Schema.Record({ key: Schema.String, value: Schema.String })),
27
27
  Labels: Schema.NullOr(Schema.Record({ key: Schema.String, value: Schema.String })),
@@ -7,7 +7,7 @@ import * as VolumeVolume from "./VolumeVolume.generated.js";
7
7
 
8
8
  export class TypesDiskUsage extends Schema.Class<TypesDiskUsage>("TypesDiskUsage")(
9
9
  {
10
- LayersSize: EffectSchemas.Number.I64,
10
+ LayersSize: Schema.optional(EffectSchemas.Number.I64), // optional for docker.io/library/docker:26-dind-rootless
11
11
  Images: Schema.NullOr(Schema.Array(Schema.NullOr(ImageSummary.ImageSummary))),
12
12
  Containers: Schema.NullOr(Schema.Array(Schema.NullOr(ContainerSummary.ContainerSummary))),
13
13
  Volumes: Schema.NullOr(Schema.Array(Schema.NullOr(VolumeVolume.VolumeVolume))),
@@ -13,104 +13,135 @@ import * as internalAgnostic from "./agnostic.js";
13
13
  import * as internalConnection from "./connection.js";
14
14
 
15
15
  /** @internal */
16
- export const makeUndiciSshConnector = (
16
+ export const makeDispatcher: (
17
+ agentOptions?: undici.Agent.Options | undefined
18
+ ) => Effect.Effect<undici.Agent, never, Scope.Scope> = Effect.fnUntraced(function* (
19
+ agentOptions?: undici.Agent.Options | undefined
20
+ ) {
21
+ const undiciLazy = yield* Effect.promise(() => import("undici"));
22
+ const acquire = Effect.sync(() => new undiciLazy.Agent(agentOptions));
23
+ const release = (agent: undici.Dispatcher) => Effect.promise(() => agent.destroy());
24
+ const resource = Effect.acquireRelease(acquire, release);
25
+ return yield* resource;
26
+ });
27
+
28
+ /** @internal */
29
+ export const makeSshDispatcher: (
17
30
  connectionOptions: MobyConnection.SshConnectionOptions
18
- ): Effect.Effect<undici.buildConnector.connector, never, Scope.Scope> =>
19
- Effect.Do.pipe(
20
- Effect.bind("ssh2Lazy", () => Effect.promise(() => import("ssh2"))),
21
- Effect.let("acquire", ({ ssh2Lazy }) => Effect.sync(() => new ssh2Lazy.Client())),
22
- Effect.let(
23
- "release",
24
- () => (client: ssh2.Client) =>
25
- Effect.sync(() => {
26
- client.end();
27
- client.destroy();
31
+ ) => Effect.Effect<undici.Agent, never, Scope.Scope> = Effect.fnUntraced(function* (
32
+ connectionOptions: MobyConnection.SshConnectionOptions
33
+ ) {
34
+ const ssh2Lazy = yield* Effect.promise(() => import("ssh2"));
35
+ const undiciLazy = yield* Effect.promise(() => import("undici"));
36
+ const sshClient = new ssh2Lazy.Client();
37
+
38
+ let sshConnection: "unopened" | "connecting" | "open-failed" | "ready" = "unopened";
39
+ let openFailedError: Error | null = null;
40
+
41
+ const connector: undici.buildConnector.connector = (
42
+ _options: undici.buildConnector.Options,
43
+ callback: undici.buildConnector.Callback
44
+ ) => {
45
+ const onError = (error: Error): void => callback(error, null);
46
+
47
+ // No connection yet, start connecting
48
+ if (sshConnection === "unopened") {
49
+ sshConnection = "connecting";
50
+ const unableToOpen = (error: Error & ssh2.ClientErrorExtensions) => {
51
+ sshConnection = "open-failed";
52
+ openFailedError = error;
53
+ onError(error);
54
+ };
55
+ sshClient
56
+ .once("ready", () => {
57
+ sshConnection = "ready";
58
+ sshClient.off("error", unableToOpen);
59
+ connector(_options, callback);
28
60
  })
29
- ),
30
- Effect.flatMap(({ acquire, release }) => Effect.acquireRelease(acquire, release)),
31
- Effect.flatMap((sshClient) =>
32
- Effect.async<ssh2.Client, Error>((resume) => {
33
- sshClient
34
- .once("ready", () => {
35
- sshClient.removeAllListeners("error");
36
- sshClient.removeAllListeners("ready");
37
- resume(Effect.succeed(sshClient));
38
- })
39
- .once("error", (error) => {
40
- sshClient.removeAllListeners("error");
41
- sshClient.removeAllListeners("ready");
42
- resume(Effect.fail(error));
43
- })
44
- .connect(connectionOptions);
45
- })
46
- ),
47
- Effect.map((sshClient) => (_opts: undici.buildConnector.Options, callback: undici.buildConnector.Callback) => {
48
- sshClient.openssh_forwardOutStreamLocal(
49
- connectionOptions.remoteSocketPath,
50
- (error: Error | undefined, socket: ssh2.ClientChannel) => {
51
- if (error) {
52
- return callback(error, null);
61
+ .once("error", unableToOpen)
62
+ .connect(connectionOptions);
63
+ }
64
+
65
+ // Already tried to connect but failed
66
+ else if (sshConnection === "open-failed") {
67
+ callback(openFailedError!, null);
68
+ }
69
+
70
+ // Another connection attempt is already in progress, wait for it
71
+ else if (sshConnection === "connecting") {
72
+ sshClient
73
+ .once("ready", () => {
74
+ sshClient.off("error", onError);
75
+ connector(_options, callback);
76
+ })
77
+ .once("error", onError);
78
+ }
79
+
80
+ // We are connected to the ssh server, now forward our stream local
81
+ else if (sshConnection === "ready") {
82
+ sshClient
83
+ .openssh_forwardOutStreamLocal(
84
+ connectionOptions.remoteSocketPath,
85
+ (error: Error | undefined, stream: ssh2.ClientChannel) => {
86
+ sshClient.off("error", onError);
87
+ if (error) return callback(error, null);
88
+ else return callback(null, stream as unknown as net.Socket);
53
89
  }
90
+ )
91
+ .once("error", onError);
92
+ }
54
93
 
55
- socket.once("close", () => {
56
- socket.end();
57
- socket.destroy();
58
- });
94
+ // Should never happen
95
+ else {
96
+ return Function.absurd<undefined>(sshConnection);
97
+ }
98
+ };
59
99
 
60
- return callback(null, socket as unknown as net.Socket);
61
- }
62
- );
63
- }),
64
- Effect.orDie
65
- );
100
+ const acquire = Effect.sync(() => new undiciLazy.Agent({ connect: connector }));
101
+ const release = (_agent: undici.Dispatcher) =>
102
+ Effect.promise(async () => {
103
+ sshClient.end();
104
+ sshClient.destroy();
105
+ // await agent.close();
106
+ // await agent.destroy();
107
+ });
108
+
109
+ const resource = Effect.acquireRelease(acquire, release);
110
+ return yield* resource;
111
+ });
66
112
 
67
113
  /** @internal */
68
- export const getUndiciDispatcher = (
114
+ export const getUndiciDispatcher: (
69
115
  connectionOptions: MobyConnection.MobyConnectionOptions
70
- ): Effect.Effect<undici.Dispatcher, never, Scope.Scope> =>
71
- Effect.flatMap(
72
- Effect.promise(() => import("undici")),
73
- (undiciLazy) => {
74
- const AcquireUndiciDispatcher = internalConnection.MobyConnectionOptions.$match({
75
- socket: (options) =>
76
- Effect.succeed(
77
- new undiciLazy.Agent({
78
- connect: { socketPath: options.socketPath },
79
- })
80
- ),
81
- http: (options) =>
82
- Effect.succeed(
83
- new undiciLazy.Agent({
84
- connect: { host: options.host, port: options.port, path: options.path },
85
- })
86
- ),
87
- https: (options) =>
88
- Effect.succeed(
89
- new undiciLazy.Agent({
90
- connect: {
91
- ca: options.ca,
92
- key: options.key,
93
- cert: options.cert,
94
- passphrase: options.passphrase,
95
- host: options.host,
96
- port: options.port,
97
- path: options.path,
98
- },
99
- })
100
- ),
101
- ssh: (options) =>
102
- Effect.map(
103
- makeUndiciSshConnector(options),
104
- (connector) => new undiciLazy.Agent({ connect: connector })
105
- ),
106
- });
107
-
108
- const releaseUndiciDispatcher = (dispatcher: undici.Dispatcher) =>
109
- Effect.promise(() => dispatcher.destroy());
110
-
111
- return Effect.acquireRelease(AcquireUndiciDispatcher(connectionOptions), releaseUndiciDispatcher);
112
- }
113
- );
116
+ ) => Effect.Effect<undici.Dispatcher, never, Scope.Scope> = internalConnection.MobyConnectionOptions.$match({
117
+ ssh: (options) => makeSshDispatcher(options),
118
+ socket: (options) =>
119
+ makeDispatcher({
120
+ connect: {
121
+ socketPath: options.socketPath,
122
+ },
123
+ }),
124
+ http: (options) =>
125
+ makeDispatcher({
126
+ connect: {
127
+ host: options.host,
128
+ port: options.port,
129
+ path: options.path,
130
+ },
131
+ }),
132
+ https: (options) =>
133
+ makeDispatcher({
134
+ connect: {
135
+ ca: options.ca,
136
+ key: options.key,
137
+ cert: options.cert,
138
+ passphrase: options.passphrase,
139
+ host: options.host,
140
+ port: options.port,
141
+ path: options.path,
142
+ },
143
+ }),
144
+ });
114
145
 
115
146
  /** @internal */
116
147
  export const getUndiciWebsocketConstructor = (
@@ -145,7 +145,7 @@ export type VolumeIdentifier = Schema.Schema.Type<typeof VolumeIdentifier>;
145
145
  */
146
146
  export const Digest = Function.pipe(
147
147
  Schema.String,
148
- Schema.pattern(/^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$/),
148
+ Schema.pattern(/^[a-z0-9]+(?:[@.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$/),
149
149
  Schema.brand("Digest")
150
150
  );
151
151