typekro 0.27.1 → 0.28.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 (188) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/core/containers/build.d.ts +2 -46
  3. package/dist/core/containers/build.d.ts.map +1 -1
  4. package/dist/core/containers/build.js +219 -134
  5. package/dist/core/containers/build.js.map +1 -1
  6. package/dist/core/containers/errors.d.ts +4 -0
  7. package/dist/core/containers/errors.d.ts.map +1 -1
  8. package/dist/core/containers/errors.js +14 -1
  9. package/dist/core/containers/errors.js.map +1 -1
  10. package/dist/core/containers/exec.d.ts +6 -23
  11. package/dist/core/containers/exec.d.ts.map +1 -1
  12. package/dist/core/containers/exec.js +94 -78
  13. package/dist/core/containers/exec.js.map +1 -1
  14. package/dist/core/containers/image.d.ts +11 -7
  15. package/dist/core/containers/image.d.ts.map +1 -1
  16. package/dist/core/containers/image.js +102 -13
  17. package/dist/core/containers/image.js.map +1 -1
  18. package/dist/core/containers/index.d.ts +5 -1
  19. package/dist/core/containers/index.d.ts.map +1 -1
  20. package/dist/core/containers/index.js +3 -0
  21. package/dist/core/containers/index.js.map +1 -1
  22. package/dist/core/containers/registries/credentials.d.ts +30 -0
  23. package/dist/core/containers/registries/credentials.d.ts.map +1 -0
  24. package/dist/core/containers/registries/credentials.js +87 -0
  25. package/dist/core/containers/registries/credentials.js.map +1 -0
  26. package/dist/core/containers/registries/docker-session.d.ts +14 -0
  27. package/dist/core/containers/registries/docker-session.d.ts.map +1 -0
  28. package/dist/core/containers/registries/docker-session.js +164 -0
  29. package/dist/core/containers/registries/docker-session.js.map +1 -0
  30. package/dist/core/containers/registries/ecr.d.ts +2 -3
  31. package/dist/core/containers/registries/ecr.d.ts.map +1 -1
  32. package/dist/core/containers/registries/ecr.js +13 -22
  33. package/dist/core/containers/registries/ecr.js.map +1 -1
  34. package/dist/core/containers/registries/harbor.d.ts +7 -0
  35. package/dist/core/containers/registries/harbor.d.ts.map +1 -0
  36. package/dist/core/containers/registries/harbor.js +9 -0
  37. package/dist/core/containers/registries/harbor.js.map +1 -0
  38. package/dist/core/containers/registries/index.d.ts.map +1 -1
  39. package/dist/core/containers/registries/index.js +5 -0
  40. package/dist/core/containers/registries/index.js.map +1 -1
  41. package/dist/core/containers/registries/oci.d.ts +13 -0
  42. package/dist/core/containers/registries/oci.d.ts.map +1 -0
  43. package/dist/core/containers/registries/oci.js +68 -0
  44. package/dist/core/containers/registries/oci.js.map +1 -0
  45. package/dist/core/containers/registries/orbstack.d.ts +2 -3
  46. package/dist/core/containers/registries/orbstack.d.ts.map +1 -1
  47. package/dist/core/containers/registries/orbstack.js +8 -8
  48. package/dist/core/containers/registries/orbstack.js.map +1 -1
  49. package/dist/core/containers/registries/types.d.ts +75 -49
  50. package/dist/core/containers/registries/types.d.ts.map +1 -1
  51. package/dist/core/containers/registries/types.js +1 -9
  52. package/dist/core/containers/registries/types.js.map +1 -1
  53. package/dist/core/deployment/direct-factory.d.ts.map +1 -1
  54. package/dist/core/deployment/direct-factory.js +15 -8
  55. package/dist/core/deployment/direct-factory.js.map +1 -1
  56. package/dist/core/deployment/engine.d.ts.map +1 -1
  57. package/dist/core/deployment/engine.js +46 -5
  58. package/dist/core/deployment/engine.js.map +1 -1
  59. package/dist/core/deployment/kro-factory.d.ts +7 -7
  60. package/dist/core/deployment/kro-factory.d.ts.map +1 -1
  61. package/dist/core/deployment/kro-factory.js +148 -60
  62. package/dist/core/deployment/kro-factory.js.map +1 -1
  63. package/dist/core/deployment/kro-instance-safety.d.ts +7 -0
  64. package/dist/core/deployment/kro-instance-safety.d.ts.map +1 -1
  65. package/dist/core/deployment/kro-instance-safety.js +15 -0
  66. package/dist/core/deployment/kro-instance-safety.js.map +1 -1
  67. package/dist/core/deployment/kro-namespace-teardown.d.ts +7 -5
  68. package/dist/core/deployment/kro-namespace-teardown.d.ts.map +1 -1
  69. package/dist/core/deployment/kro-namespace-teardown.js +29 -10
  70. package/dist/core/deployment/kro-namespace-teardown.js.map +1 -1
  71. package/dist/core/deployment/kro-readiness.d.ts +1 -0
  72. package/dist/core/deployment/kro-readiness.d.ts.map +1 -1
  73. package/dist/core/deployment/kro-readiness.js +52 -6
  74. package/dist/core/deployment/kro-readiness.js.map +1 -1
  75. package/dist/core/deployment/poll-timeout.d.ts +45 -0
  76. package/dist/core/deployment/poll-timeout.d.ts.map +1 -0
  77. package/dist/core/deployment/poll-timeout.js +67 -0
  78. package/dist/core/deployment/poll-timeout.js.map +1 -0
  79. package/dist/core/deployment/readiness.d.ts.map +1 -1
  80. package/dist/core/deployment/readiness.js +30 -21
  81. package/dist/core/deployment/readiness.js.map +1 -1
  82. package/dist/core/deployment/rollback-manager.d.ts +13 -0
  83. package/dist/core/deployment/rollback-manager.d.ts.map +1 -1
  84. package/dist/core/deployment/rollback-manager.js +8 -0
  85. package/dist/core/deployment/rollback-manager.js.map +1 -1
  86. package/dist/core/serialization/core.js +3 -1
  87. package/dist/core/serialization/core.js.map +1 -1
  88. package/dist/core/serialization/schema.d.ts +2 -2
  89. package/dist/core/serialization/schema.d.ts.map +1 -1
  90. package/dist/core/serialization/schema.js +57 -4
  91. package/dist/core/serialization/schema.js.map +1 -1
  92. package/dist/core/types/serialization.d.ts +9 -0
  93. package/dist/core/types/serialization.d.ts.map +1 -1
  94. package/dist/factories/harbor/compositions/harbor-installation.d.ts +610 -0
  95. package/dist/factories/harbor/compositions/harbor-installation.d.ts.map +1 -0
  96. package/dist/factories/harbor/compositions/harbor-installation.js +348 -0
  97. package/dist/factories/harbor/compositions/harbor-installation.js.map +1 -0
  98. package/dist/factories/harbor/compositions/index.d.ts +2 -0
  99. package/dist/factories/harbor/compositions/index.d.ts.map +1 -0
  100. package/dist/factories/harbor/compositions/index.js +2 -0
  101. package/dist/factories/harbor/compositions/index.js.map +1 -0
  102. package/dist/factories/harbor/index.d.ts +7 -0
  103. package/dist/factories/harbor/index.d.ts.map +1 -0
  104. package/dist/factories/harbor/index.js +7 -0
  105. package/dist/factories/harbor/index.js.map +1 -0
  106. package/dist/factories/harbor/provider/harbor-api.d.ts +123 -0
  107. package/dist/factories/harbor/provider/harbor-api.d.ts.map +1 -0
  108. package/dist/factories/harbor/provider/harbor-api.js +595 -0
  109. package/dist/factories/harbor/provider/harbor-api.js.map +1 -0
  110. package/dist/factories/harbor/provider/index.d.ts +4 -0
  111. package/dist/factories/harbor/provider/index.d.ts.map +1 -0
  112. package/dist/factories/harbor/provider/index.js +4 -0
  113. package/dist/factories/harbor/provider/index.js.map +1 -0
  114. package/dist/factories/harbor/provider/kubernetes-secret-store.d.ts +12 -0
  115. package/dist/factories/harbor/provider/kubernetes-secret-store.d.ts.map +1 -0
  116. package/dist/factories/harbor/provider/kubernetes-secret-store.js +81 -0
  117. package/dist/factories/harbor/provider/kubernetes-secret-store.js.map +1 -0
  118. package/dist/factories/harbor/provider/rook-s3-binding.d.ts +30 -0
  119. package/dist/factories/harbor/provider/rook-s3-binding.d.ts.map +1 -0
  120. package/dist/factories/harbor/provider/rook-s3-binding.js +74 -0
  121. package/dist/factories/harbor/provider/rook-s3-binding.js.map +1 -0
  122. package/dist/factories/harbor/resources/helm.d.ts +12 -0
  123. package/dist/factories/harbor/resources/helm.d.ts.map +1 -0
  124. package/dist/factories/harbor/resources/helm.js +46 -0
  125. package/dist/factories/harbor/resources/helm.js.map +1 -0
  126. package/dist/factories/harbor/resources/index.d.ts +2 -0
  127. package/dist/factories/harbor/resources/index.d.ts.map +1 -0
  128. package/dist/factories/harbor/resources/index.js +2 -0
  129. package/dist/factories/harbor/resources/index.js.map +1 -0
  130. package/dist/factories/harbor/types.d.ts +319 -0
  131. package/dist/factories/harbor/types.d.ts.map +1 -0
  132. package/dist/factories/harbor/types.js +252 -0
  133. package/dist/factories/harbor/types.js.map +1 -0
  134. package/dist/factories/harbor/utils/helm-values-mapper.d.ts +8 -0
  135. package/dist/factories/harbor/utils/helm-values-mapper.d.ts.map +1 -0
  136. package/dist/factories/harbor/utils/helm-values-mapper.js +322 -0
  137. package/dist/factories/harbor/utils/helm-values-mapper.js.map +1 -0
  138. package/dist/factories/harbor/utils/index.d.ts +2 -0
  139. package/dist/factories/harbor/utils/index.d.ts.map +1 -0
  140. package/dist/factories/harbor/utils/index.js +2 -0
  141. package/dist/factories/harbor/utils/index.js.map +1 -0
  142. package/dist/factories/helm/helm-release.d.ts +10 -0
  143. package/dist/factories/helm/helm-release.d.ts.map +1 -1
  144. package/dist/factories/helm/helm-release.js +30 -2
  145. package/dist/factories/helm/helm-release.js.map +1 -1
  146. package/dist/factories/helm/readiness-evaluators.d.ts.map +1 -1
  147. package/dist/factories/helm/readiness-evaluators.js +26 -1
  148. package/dist/factories/helm/readiness-evaluators.js.map +1 -1
  149. package/dist/factories/helm/types.d.ts +5 -0
  150. package/dist/factories/helm/types.d.ts.map +1 -1
  151. package/dist/factories/index.d.ts +1 -0
  152. package/dist/factories/index.d.ts.map +1 -1
  153. package/dist/factories/index.js +4 -0
  154. package/dist/factories/index.js.map +1 -1
  155. package/dist/factories/kubernetes/networking/network-policy.d.ts.map +1 -1
  156. package/dist/factories/kubernetes/networking/network-policy.js +34 -1
  157. package/dist/factories/kubernetes/networking/network-policy.js.map +1 -1
  158. package/dist/factories/rook/compositions/index.d.ts +1 -0
  159. package/dist/factories/rook/compositions/index.d.ts.map +1 -1
  160. package/dist/factories/rook/compositions/index.js +1 -0
  161. package/dist/factories/rook/compositions/index.js.map +1 -1
  162. package/dist/factories/rook/compositions/rook-ceph-operator-installation.d.ts +2 -0
  163. package/dist/factories/rook/compositions/rook-ceph-operator-installation.d.ts.map +1 -1
  164. package/dist/factories/rook/compositions/rook-ceph-operator-installation.js +17 -0
  165. package/dist/factories/rook/compositions/rook-ceph-operator-installation.js.map +1 -1
  166. package/dist/factories/rook/compositions/rook-ceph-platform.d.ts +181 -0
  167. package/dist/factories/rook/compositions/rook-ceph-platform.d.ts.map +1 -0
  168. package/dist/factories/rook/compositions/rook-ceph-platform.js +388 -0
  169. package/dist/factories/rook/compositions/rook-ceph-platform.js.map +1 -0
  170. package/dist/factories/rook/resources/bucket-storage-class.d.ts.map +1 -1
  171. package/dist/factories/rook/resources/bucket-storage-class.js +4 -1
  172. package/dist/factories/rook/resources/bucket-storage-class.js.map +1 -1
  173. package/dist/factories/rook/resources/ceph-object-store.d.ts.map +1 -1
  174. package/dist/factories/rook/resources/ceph-object-store.js +2 -0
  175. package/dist/factories/rook/resources/ceph-object-store.js.map +1 -1
  176. package/dist/factories/rook/resources/helm.d.ts +4 -0
  177. package/dist/factories/rook/resources/helm.d.ts.map +1 -1
  178. package/dist/factories/rook/resources/helm.js +22 -0
  179. package/dist/factories/rook/resources/helm.js.map +1 -1
  180. package/dist/factories/rook/types.d.ts +180 -1
  181. package/dist/factories/rook/types.d.ts.map +1 -1
  182. package/dist/factories/rook/types.js +93 -2
  183. package/dist/factories/rook/types.js.map +1 -1
  184. package/dist/factories/rook/utils/helm-values-mapper.d.ts +34 -1
  185. package/dist/factories/rook/utils/helm-values-mapper.d.ts.map +1 -1
  186. package/dist/factories/rook/utils/helm-values-mapper.js +207 -0
  187. package/dist/factories/rook/utils/helm-values-mapper.js.map +1 -1
  188. package/package.json +6 -1
@@ -0,0 +1,14 @@
1
+ import type { OciRegistryCredentialProvider, OciRegistryTlsConfig, RegistrySession } from './types.js';
2
+ export interface DockerRegistrySessionOptions {
3
+ readonly registryHost: string;
4
+ readonly credentialProvider?: OciRegistryCredentialProvider;
5
+ readonly dockerConfigPath?: string;
6
+ readonly tls?: OciRegistryTlsConfig;
7
+ readonly timeout: number;
8
+ readonly signal?: AbortSignal;
9
+ }
10
+ /** Open an isolated Docker authentication and BuildKit trust session. */
11
+ export declare function createDockerRegistrySession(options: DockerRegistrySessionOptions): Promise<RegistrySession>;
12
+ /** Read an isolated Docker config for tests without exposing it through public build results. */
13
+ export declare function readDockerSessionConfig(session: RegistrySession): Promise<string | undefined>;
14
+ //# sourceMappingURL=docker-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-session.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/docker-session.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,6BAA6B,EAC7B,oBAAoB,EACpB,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,6BAA6B,CAAC;IAC5D,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,GAAG,CAAC,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAuHD,yEAAyE;AACzE,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,eAAe,CAAC,CAwE1B;AAED,iGAAiG;AACjG,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAI7B"}
@@ -0,0 +1,164 @@
1
+ import { Buffer } from 'node:buffer';
2
+ import { chmod, copyFile, cp, lstat, mkdir, mkdtemp, readFile, rm, writeFile, } from 'node:fs/promises';
3
+ import { homedir, tmpdir } from 'node:os';
4
+ import { basename, dirname, join, resolve } from 'node:path';
5
+ import { ContainerBuildError } from '../errors.js';
6
+ import { execDocker } from '../exec.js';
7
+ function defaultDockerConfigPath() {
8
+ const configuredDirectory = process.env.DOCKER_CONFIG;
9
+ return configuredDirectory
10
+ ? join(configuredDirectory, 'config.json')
11
+ : join(homedir(), '.docker', 'config.json');
12
+ }
13
+ async function copyDockerConfiguration(source, target) {
14
+ try {
15
+ await copyFile(source, target);
16
+ }
17
+ catch (error) {
18
+ const code = error.code;
19
+ if (code !== 'ENOENT')
20
+ throw error;
21
+ await writeFile(target, '{}\n', { encoding: 'utf8', mode: 0o600 });
22
+ }
23
+ await chmod(target, 0o600);
24
+ // config.json can select a named context. Docker resolves that context through
25
+ // sibling contexts/meta and contexts/tls state, so copying only config.json
26
+ // makes otherwise valid configurations (including OrbStack) unusable.
27
+ try {
28
+ await cp(join(dirname(source), 'contexts'), join(dirname(target), 'contexts'), {
29
+ recursive: true,
30
+ });
31
+ }
32
+ catch (error) {
33
+ if (error.code !== 'ENOENT')
34
+ throw error;
35
+ }
36
+ // DOCKER_CONFIG also controls per-user CLI plugin discovery. Keep Buildx
37
+ // available without copying unrelated plugins or sharing mutable state.
38
+ const sourceBuildx = join(dirname(source), 'cli-plugins', 'docker-buildx');
39
+ const targetBuildx = join(dirname(target), 'cli-plugins', 'docker-buildx');
40
+ try {
41
+ await mkdir(dirname(targetBuildx), { recursive: true });
42
+ await cp(sourceBuildx, targetBuildx);
43
+ if (!(await lstat(targetBuildx)).isSymbolicLink())
44
+ await chmod(targetBuildx, 0o700);
45
+ }
46
+ catch (error) {
47
+ if (error.code !== 'ENOENT')
48
+ throw error;
49
+ }
50
+ }
51
+ function tomlString(value) {
52
+ return JSON.stringify(value);
53
+ }
54
+ async function writeDockerCredential(configPath, registryHost, credential) {
55
+ const parsed = JSON.parse(await readFile(configPath, 'utf8'));
56
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
57
+ throw new Error('Docker config.json must contain an object.');
58
+ }
59
+ const config = parsed;
60
+ const currentAuths = config.auths && typeof config.auths === 'object' && !Array.isArray(config.auths)
61
+ ? config.auths
62
+ : {};
63
+ const currentHelpers = config.credHelpers &&
64
+ typeof config.credHelpers === 'object' &&
65
+ !Array.isArray(config.credHelpers)
66
+ ? config.credHelpers
67
+ : {};
68
+ const { [registryHost]: _targetHelper, ...otherHelpers } = currentHelpers;
69
+ const { credsStore: _globalCredentialStore, credHelpers: _credHelpers, ...sessionConfig } = config;
70
+ const auth = Buffer.from(`${credential.username}:${credential.password}`, 'utf8').toString('base64');
71
+ await writeFile(configPath, `${JSON.stringify({
72
+ ...sessionConfig,
73
+ ...(Object.keys(otherHelpers).length > 0 ? { credHelpers: otherHelpers } : {}),
74
+ auths: {
75
+ ...currentAuths,
76
+ [registryHost]: { username: credential.username, password: credential.password, auth },
77
+ },
78
+ })}\n`, { encoding: 'utf8', mode: 0o600 });
79
+ await chmod(configPath, 0o600);
80
+ }
81
+ async function prepareBuildkitTrust(directory, registryHost, tls) {
82
+ if (!tls?.caCertificate && !tls?.caFile && !tls?.insecure && !tls?.plainHttp)
83
+ return undefined;
84
+ let caPath;
85
+ if (tls.caCertificate) {
86
+ caPath = join(directory, 'registry-ca.pem');
87
+ await writeFile(caPath, tls.caCertificate, { encoding: 'utf8', mode: 0o600 });
88
+ }
89
+ else if (tls.caFile) {
90
+ caPath = join(directory, basename(tls.caFile));
91
+ await copyFile(resolve(tls.caFile), caPath);
92
+ await chmod(caPath, 0o600);
93
+ }
94
+ const lines = [
95
+ `[registry.${tomlString(registryHost)}]`,
96
+ ...(caPath ? [` ca = [${tomlString(caPath)}]`] : []),
97
+ ...(tls.plainHttp ? [' http = true'] : []),
98
+ ...(tls.insecure ? [' insecure = true'] : []),
99
+ ];
100
+ const configPath = join(directory, 'buildkitd.toml');
101
+ await writeFile(configPath, `${lines.join('\n')}\n`, { encoding: 'utf8', mode: 0o600 });
102
+ return configPath;
103
+ }
104
+ /** Open an isolated Docker authentication and BuildKit trust session. */
105
+ export async function createDockerRegistrySession(options) {
106
+ const directory = await mkdtemp(join(tmpdir(), 'typekro-registry-'));
107
+ await chmod(directory, 0o700);
108
+ try {
109
+ const configPath = join(directory, 'config.json');
110
+ await mkdir(dirname(configPath), { recursive: true });
111
+ await copyDockerConfiguration(options.dockerConfigPath ?? defaultDockerConfigPath(), configPath);
112
+ const environment = { DOCKER_CONFIG: directory };
113
+ if (options.credentialProvider) {
114
+ const credential = await options.credentialProvider(options.signal);
115
+ if (!credential.username || !credential.password) {
116
+ throw new ContainerBuildError('OCI credential provider returned an empty username or password.', 'REGISTRY_CREDENTIAL_INVALID', ['Return both username and password from the credential provider.']);
117
+ }
118
+ if (options.tls?.plainHttp ||
119
+ options.tls?.insecure ||
120
+ options.tls?.caCertificate ||
121
+ options.tls?.caFile) {
122
+ // docker login has no per-command transport or CA override. For every
123
+ // custom transport, write the standard short-lived auth entry directly
124
+ // into the isolated config and let the dedicated BuildKit configuration
125
+ // carry HTTP, CA, or insecure-TLS trust. This avoids depending on the
126
+ // developer machine's global Docker daemon trust store.
127
+ await writeDockerCredential(configPath, options.registryHost, credential);
128
+ }
129
+ else {
130
+ await execDocker(['login', '--username', credential.username, '--password-stdin', options.registryHost], {
131
+ stdin: credential.password,
132
+ quiet: true,
133
+ timeout: options.timeout,
134
+ environment,
135
+ ...(options.signal ? { signal: options.signal } : {}),
136
+ sensitiveValues: [credential.username, credential.password],
137
+ });
138
+ }
139
+ }
140
+ const buildkitConfigPath = await prepareBuildkitTrust(directory, options.registryHost, options.tls);
141
+ return {
142
+ remote: true,
143
+ environment,
144
+ ...(buildkitConfigPath ? { buildkitConfigPath } : {}),
145
+ async cleanup() {
146
+ await rm(directory, { recursive: true, force: true });
147
+ },
148
+ };
149
+ }
150
+ catch (error) {
151
+ await rm(directory, { recursive: true, force: true });
152
+ if (error instanceof ContainerBuildError)
153
+ throw error;
154
+ throw new ContainerBuildError(`Failed to prepare isolated registry credentials: ${error instanceof Error ? error.message : String(error)}`, 'REGISTRY_SESSION_FAILED', ['Verify the Docker config, credential provider, and registry TLS configuration.'], error instanceof Error ? error : undefined);
155
+ }
156
+ }
157
+ /** Read an isolated Docker config for tests without exposing it through public build results. */
158
+ export async function readDockerSessionConfig(session) {
159
+ const directory = session.environment?.DOCKER_CONFIG;
160
+ if (!directory)
161
+ return undefined;
162
+ return readFile(join(directory, 'config.json'), 'utf8');
163
+ }
164
+ //# sourceMappingURL=docker-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-session.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/docker-session.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  * Supports env vars, profiles, SSO sessions, instance roles, and role
6
6
  * assumption — all through the SDK's standard mechanisms.
7
7
  */
8
- import type { EcrRegistryConfig, RegistryHandler } from './types.js';
8
+ import type { EcrRegistryConfig, RegistryHandler, RegistrySession } from './types.js';
9
9
  export declare class EcrRegistryHandler implements RegistryHandler {
10
10
  private readonly config;
11
11
  private resolvedAccountId;
@@ -14,8 +14,7 @@ export declare class EcrRegistryHandler implements RegistryHandler {
14
14
  private ecrClient;
15
15
  constructor(config: EcrRegistryConfig);
16
16
  resolveImageUri(imageName: string, tag: string): Promise<string>;
17
- authenticate(): Promise<void>;
18
- push(imageUri: string, imageName: string): Promise<boolean>;
17
+ prepare(imageName: string, timeout: number, signal?: AbortSignal): Promise<RegistrySession>;
19
18
  private getAccountId;
20
19
  private ensureRepositoryExists;
21
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ecr.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/ecr.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIrE,qBAAa,kBAAmB,YAAW,eAAe;IAM5C,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,kBAAkB,CAAgC;IAC1D,OAAO,CAAC,SAAS,CAAY;gBAEA,MAAM,EAAE,iBAAiB;IAYhD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKhE,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC7B,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAiBnD,YAAY;YAuBZ,sBAAsB;CAoBrC"}
1
+ {"version":3,"file":"ecr.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/ecr.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAItF,qBAAa,kBAAmB,YAAW,eAAe;IAM5C,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,kBAAkB,CAAgC;IAC1D,OAAO,CAAC,SAAS,CAAY;gBAEA,MAAM,EAAE,iBAAiB;IAUhD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKhE,OAAO,CACX,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC;YAmCb,YAAY;YAuBZ,sBAAsB;CAoBrC"}
@@ -10,7 +10,7 @@ import { GetCallerIdentityCommand, STSClient } from '@aws-sdk/client-sts';
10
10
  import { fromNodeProviderChain } from '@aws-sdk/credential-providers';
11
11
  import { getComponentLogger } from '../../logging/index.js';
12
12
  import { ContainerBuildError } from '../errors.js';
13
- import { execDocker } from '../exec.js';
13
+ import { createDockerRegistrySession } from './docker-session.js';
14
14
  const logger = getComponentLogger('container-registry-ecr');
15
15
  export class EcrRegistryHandler {
16
16
  config;
@@ -20,10 +20,8 @@ export class EcrRegistryHandler {
20
20
  ecrClient;
21
21
  constructor(config) {
22
22
  this.config = config;
23
- this.resolvedRegion = config.region
24
- ?? process.env.AWS_REGION
25
- ?? process.env.AWS_DEFAULT_REGION
26
- ?? 'us-east-1';
23
+ this.resolvedRegion =
24
+ config.region ?? process.env.AWS_REGION ?? process.env.AWS_DEFAULT_REGION ?? 'us-east-1';
27
25
  this.credentialProvider = fromNodeProviderChain(config.credentials ?? {});
28
26
  this.ecrClient = new ECRClient({
29
27
  region: this.resolvedRegion,
@@ -34,7 +32,9 @@ export class EcrRegistryHandler {
34
32
  const accountId = await this.getAccountId();
35
33
  return `${accountId}.dkr.ecr.${this.resolvedRegion}.amazonaws.com/${imageName}:${tag}`;
36
34
  }
37
- async authenticate() {
35
+ async prepare(imageName, timeout, signal) {
36
+ if (this.config.createRepository !== false)
37
+ await this.ensureRepositoryExists(imageName);
38
38
  try {
39
39
  const authResponse = await this.ecrClient.send(new GetAuthorizationTokenCommand({}));
40
40
  const authData = authResponse.authorizationData?.[0];
@@ -46,9 +46,12 @@ export class EcrRegistryHandler {
46
46
  if (colonIndex === -1)
47
47
  throw new Error('Failed to decode ECR authorization token');
48
48
  const password = decoded.slice(colonIndex + 1);
49
- await execDocker(['login', '--username', 'AWS', '--password-stdin', authData.proxyEndpoint], {
50
- stdin: password,
51
- quiet: true,
49
+ const host = new URL(authData.proxyEndpoint).host;
50
+ const session = await createDockerRegistrySession({
51
+ registryHost: host,
52
+ credentialProvider: async () => ({ username: 'AWS', password }),
53
+ timeout,
54
+ ...(signal ? { signal } : {}),
52
55
  });
53
56
  logger.info('Authenticated with ECR', { endpoint: authData.proxyEndpoint });
54
57
  if (!this.resolvedAccountId) {
@@ -56,6 +59,7 @@ export class EcrRegistryHandler {
56
59
  if (match?.[1])
57
60
  this.resolvedAccountId = match[1];
58
61
  }
62
+ return session;
59
63
  }
60
64
  catch (error) {
61
65
  if (error instanceof ContainerBuildError)
@@ -63,19 +67,6 @@ export class EcrRegistryHandler {
63
67
  throw ContainerBuildError.ecrAuthFailed(error instanceof Error ? error : new Error(String(error)));
64
68
  }
65
69
  }
66
- async push(imageUri, imageName) {
67
- if (this.config.createRepository !== false) {
68
- await this.ensureRepositoryExists(imageName);
69
- }
70
- try {
71
- await execDocker(['push', imageUri]);
72
- logger.info('Image pushed to ECR', { imageUri });
73
- return true;
74
- }
75
- catch (error) {
76
- throw ContainerBuildError.pushFailed(imageUri, error instanceof Error ? error : new Error(String(error)));
77
- }
78
- }
79
70
  async getAccountId() {
80
71
  if (this.config.accountId)
81
72
  return this.config.accountId;
@@ -1 +1 @@
1
- {"version":3,"file":"ecr.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/ecr.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ecr.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/ecr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { HarborRegistryConfig, OciRegistryConfig } from './types.js';
2
+ /**
3
+ * Configure Harbor as an OCI transport. Harbor API lifecycle (projects and robot accounts) remains
4
+ * in the Harbor integration rather than leaking into this generic registry boundary.
5
+ */
6
+ export declare function harbor(config: HarborRegistryConfig): OciRegistryConfig;
7
+ //# sourceMappingURL=harbor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harbor.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/harbor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE1E;;;GAGG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,iBAAiB,CAGtE"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Configure Harbor as an OCI transport. Harbor API lifecycle (projects and robot accounts) remains
3
+ * in the Harbor integration rather than leaking into this generic registry boundary.
4
+ */
5
+ export function harbor(config) {
6
+ const { project, ...registry } = config;
7
+ return { type: 'oci', ...registry, repositoryPrefix: project };
8
+ }
9
+ //# sourceMappingURL=harbor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harbor.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/harbor.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,MAA4B;IACjD,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC;IACxC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;AACjE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElE,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe,CAavE;AAED,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElE,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe,CAiBvE;AAED,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
@@ -5,6 +5,7 @@
5
5
  */
6
6
  import { ContainerBuildError } from '../errors.js';
7
7
  import { EcrRegistryHandler } from './ecr.js';
8
+ import { OciRegistryHandler } from './oci.js';
8
9
  import { OrbstackRegistryHandler } from './orbstack.js';
9
10
  export function resolveRegistry(config) {
10
11
  switch (config.type) {
@@ -12,6 +13,10 @@ export function resolveRegistry(config) {
12
13
  return new OrbstackRegistryHandler();
13
14
  case 'ecr':
14
15
  return new EcrRegistryHandler(config);
16
+ case 'oci':
17
+ return new OciRegistryHandler(config);
18
+ case 'custom':
19
+ return config.handler;
15
20
  case 'gcr':
16
21
  throw ContainerBuildError.registryNotSupported('gcr');
17
22
  case 'acr':
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAGxD,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,UAAU;YACb,OAAO,IAAI,uBAAuB,EAAE,CAAC;QACvC,KAAK,KAAK;YACR,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,KAAK,KAAK;YACR,MAAM,mBAAmB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxD,KAAK,KAAK;YACR,MAAM,mBAAmB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxD;YACE,MAAM,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,CAAE,MAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAGxD,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,UAAU;YACb,OAAO,IAAI,uBAAuB,EAAE,CAAC;QACvC,KAAK,KAAK;YACR,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,KAAK,KAAK;YACR,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB,KAAK,KAAK;YACR,MAAM,mBAAmB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxD,KAAK,KAAK;YACR,MAAM,mBAAmB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxD;YACE,MAAM,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,CAAE,MAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { OciRegistryConfig, RegistryHandler, RegistrySession } from './types.js';
2
+ export declare function normalizeRegistryHost(value: string): string;
3
+ export declare class OciRegistryHandler implements RegistryHandler {
4
+ private readonly config;
5
+ readonly registryHost: string;
6
+ readonly repositoryPrefix: string | undefined;
7
+ constructor(config: OciRegistryConfig);
8
+ resolveImageUri(imageName: string, tag: string): Promise<string>;
9
+ prepare(_imageName: string, timeout: number, signal?: AbortSignal): Promise<RegistrySession>;
10
+ }
11
+ /** Create a generic OCI registry config with inferred discriminant. */
12
+ export declare function ociRegistry(config: Omit<OciRegistryConfig, 'type'>): OciRegistryConfig;
13
+ //# sourceMappingURL=oci.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oci.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/oci.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEtF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAc3D;AAcD,qBAAa,kBAAmB,YAAW,eAAe;IAI5C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;gBAEjB,MAAM,EAAE,iBAAiB;IA8BhD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKhE,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC;CAY5B;AAED,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG,iBAAiB,CAEtF"}
@@ -0,0 +1,68 @@
1
+ import { ContainerBuildError } from '../errors.js';
2
+ import { createDockerRegistrySession } from './docker-session.js';
3
+ export function normalizeRegistryHost(value) {
4
+ const parsed = new URL(value.includes('://') ? value : `https://${value}`);
5
+ if (parsed.pathname !== '/' ||
6
+ parsed.search ||
7
+ parsed.hash ||
8
+ parsed.username ||
9
+ parsed.password) {
10
+ throw new ContainerBuildError(`Invalid OCI registry origin: "${value}".`, 'INVALID_REGISTRY', [
11
+ 'Provide only a registry origin or host. Put the project in repositoryPrefix.',
12
+ ]);
13
+ }
14
+ return parsed.host;
15
+ }
16
+ function normalizeRepositoryPrefix(value) {
17
+ if (!value)
18
+ return undefined;
19
+ const normalized = value.replace(/^\/+|\/+$/g, '').toLowerCase();
20
+ if (!/^[a-z0-9]+(?:[._-][a-z0-9]+)*(?:\/[a-z0-9]+(?:[._-][a-z0-9]+)*)*$/.test(normalized)) {
21
+ throw new ContainerBuildError(`Invalid OCI repository prefix: "${value}".`, 'INVALID_REGISTRY_PREFIX');
22
+ }
23
+ return normalized;
24
+ }
25
+ export class OciRegistryHandler {
26
+ config;
27
+ registryHost;
28
+ repositoryPrefix;
29
+ constructor(config) {
30
+ this.config = config;
31
+ this.registryHost = normalizeRegistryHost(config.registry);
32
+ this.repositoryPrefix = normalizeRepositoryPrefix(config.repositoryPrefix);
33
+ const explicitProtocol = config.registry
34
+ .match(/^([a-z][a-z0-9+.-]*):\/\//i)?.[1]
35
+ ?.toLowerCase();
36
+ if (config.tls?.plainHttp && explicitProtocol === 'https') {
37
+ throw new ContainerBuildError('OCI registry cannot use plainHttp with an https:// registry origin.', 'INVALID_REGISTRY_TLS');
38
+ }
39
+ if (explicitProtocol === 'http' && !config.tls?.plainHttp) {
40
+ throw new ContainerBuildError('OCI registry with an http:// origin must explicitly enable tls.plainHttp.', 'INVALID_REGISTRY_TLS', ['Use HTTPS, or acknowledge a development-only HTTP registry with tls.plainHttp.']);
41
+ }
42
+ if (config.tls?.plainHttp &&
43
+ (config.tls.caCertificate || config.tls.caFile || config.tls.insecure)) {
44
+ throw new ContainerBuildError('OCI plainHttp cannot be combined with HTTPS CA or insecure-TLS options.', 'INVALID_REGISTRY_TLS');
45
+ }
46
+ }
47
+ async resolveImageUri(imageName, tag) {
48
+ const path = this.repositoryPrefix ? `${this.repositoryPrefix}/${imageName}` : imageName;
49
+ return `${this.registryHost}/${path}:${tag}`;
50
+ }
51
+ async prepare(_imageName, timeout, signal) {
52
+ return createDockerRegistrySession({
53
+ registryHost: this.registryHost,
54
+ timeout,
55
+ ...(this.config.credentialProvider
56
+ ? { credentialProvider: this.config.credentialProvider }
57
+ : {}),
58
+ ...(this.config.dockerConfigPath ? { dockerConfigPath: this.config.dockerConfigPath } : {}),
59
+ ...(this.config.tls ? { tls: this.config.tls } : {}),
60
+ ...(signal ? { signal } : {}),
61
+ });
62
+ }
63
+ }
64
+ /** Create a generic OCI registry config with inferred discriminant. */
65
+ export function ociRegistry(config) {
66
+ return { type: 'oci', ...config };
67
+ }
68
+ //# sourceMappingURL=oci.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oci.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/oci.ts"],"names":[],"mappings":"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"}
@@ -5,10 +5,9 @@
5
5
  * built-in Kubernetes cluster. No push step is needed — `docker build` is
6
6
  * sufficient.
7
7
  */
8
- import type { RegistryHandler } from './types.js';
8
+ import type { RegistryHandler, RegistrySession } from './types.js';
9
9
  export declare class OrbstackRegistryHandler implements RegistryHandler {
10
10
  resolveImageUri(imageName: string, tag: string): Promise<string>;
11
- authenticate(): Promise<void>;
12
- push(_imageUri: string, _imageName: string): Promise<boolean>;
11
+ prepare(_imageName: string, _timeout: number, _signal?: AbortSignal): Promise<RegistrySession>;
13
12
  }
14
13
  //# sourceMappingURL=orbstack.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orbstack.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/orbstack.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,qBAAa,uBAAwB,YAAW,eAAe;IACvD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIhE,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7B,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAKpE"}
1
+ {"version":3,"file":"orbstack.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/orbstack.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAInE,qBAAa,uBAAwB,YAAW,eAAe;IACvD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIhE,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,eAAe,CAAC;CAS5B"}
@@ -11,14 +11,14 @@ export class OrbstackRegistryHandler {
11
11
  async resolveImageUri(imageName, tag) {
12
12
  return `${imageName}:${tag}`;
13
13
  }
14
- async authenticate() {
15
- // No authentication needed — Orbstack uses the local Docker daemon.
16
- logger.debug('Orbstack registry: no authentication needed');
17
- }
18
- async push(_imageUri, _imageName) {
19
- // No push needed images built locally are auto-available to Orbstack K8s.
20
- logger.debug('Orbstack registry: skipping push (images auto-available to local K8s)');
21
- return false;
14
+ async prepare(_imageName, _timeout, _signal) {
15
+ logger.debug('Orbstack registry: using local Docker image availability');
16
+ return {
17
+ remote: false,
18
+ async cleanup() {
19
+ // Local OrbStack builds create no temporary registry session.
20
+ },
21
+ };
22
22
  }
23
23
  }
24
24
  //# sourceMappingURL=orbstack.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"orbstack.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/orbstack.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,MAAM,MAAM,GAAG,kBAAkB,CAAC,6BAA6B,CAAC,CAAC;AAEjE,MAAM,OAAO,uBAAuB;IAClC,KAAK,CAAC,eAAe,CAAC,SAAiB,EAAE,GAAW;QAClD,OAAO,GAAG,SAAS,IAAI,GAAG,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,oEAAoE;QACpE,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAiB,EAAE,UAAkB;QAC9C,4EAA4E;QAC5E,MAAM,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;QACtF,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
1
+ {"version":3,"file":"orbstack.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/orbstack.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,MAAM,MAAM,GAAG,kBAAkB,CAAC,6BAA6B,CAAC,CAAC;AAEjE,MAAM,OAAO,uBAAuB;IAClC,KAAK,CAAC,eAAe,CAAC,SAAiB,EAAE,GAAW;QAClD,OAAO,GAAG,SAAS,IAAI,GAAG,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,OAAO,CACX,UAAkB,EAClB,QAAgB,EAChB,OAAqB;QAErB,MAAM,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QACzE,OAAO;YACL,MAAM,EAAE,KAAK;YACb,KAAK,CAAC,OAAO;gBACX,8DAA8D;YAChE,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}