@kadi.build/deploy-ability 0.0.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 (198) hide show
  1. package/README.md +523 -0
  2. package/dist/constants.d.ts +82 -0
  3. package/dist/constants.d.ts.map +1 -0
  4. package/dist/constants.js +82 -0
  5. package/dist/constants.js.map +1 -0
  6. package/dist/errors/certificate-error.d.ts +95 -0
  7. package/dist/errors/certificate-error.d.ts.map +1 -0
  8. package/dist/errors/certificate-error.js +111 -0
  9. package/dist/errors/certificate-error.js.map +1 -0
  10. package/dist/errors/deployment-error.d.ts +122 -0
  11. package/dist/errors/deployment-error.d.ts.map +1 -0
  12. package/dist/errors/deployment-error.js +185 -0
  13. package/dist/errors/deployment-error.js.map +1 -0
  14. package/dist/errors/index.d.ts +13 -0
  15. package/dist/errors/index.d.ts.map +1 -0
  16. package/dist/errors/index.js +18 -0
  17. package/dist/errors/index.js.map +1 -0
  18. package/dist/errors/profile-error.d.ts +106 -0
  19. package/dist/errors/profile-error.d.ts.map +1 -0
  20. package/dist/errors/profile-error.js +127 -0
  21. package/dist/errors/profile-error.js.map +1 -0
  22. package/dist/errors/provider-error.d.ts +104 -0
  23. package/dist/errors/provider-error.d.ts.map +1 -0
  24. package/dist/errors/provider-error.js +120 -0
  25. package/dist/errors/provider-error.js.map +1 -0
  26. package/dist/errors/wallet-error.d.ts +131 -0
  27. package/dist/errors/wallet-error.d.ts.map +1 -0
  28. package/dist/errors/wallet-error.js +154 -0
  29. package/dist/errors/wallet-error.js.map +1 -0
  30. package/dist/index.d.ts +49 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +53 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/targets/akash/bid-selectors.d.ts +251 -0
  35. package/dist/targets/akash/bid-selectors.d.ts.map +1 -0
  36. package/dist/targets/akash/bid-selectors.js +322 -0
  37. package/dist/targets/akash/bid-selectors.js.map +1 -0
  38. package/dist/targets/akash/bid-types.d.ts +297 -0
  39. package/dist/targets/akash/bid-types.d.ts.map +1 -0
  40. package/dist/targets/akash/bid-types.js +89 -0
  41. package/dist/targets/akash/bid-types.js.map +1 -0
  42. package/dist/targets/akash/blockchain-client.d.ts +577 -0
  43. package/dist/targets/akash/blockchain-client.d.ts.map +1 -0
  44. package/dist/targets/akash/blockchain-client.js +803 -0
  45. package/dist/targets/akash/blockchain-client.js.map +1 -0
  46. package/dist/targets/akash/certificate-manager.d.ts +228 -0
  47. package/dist/targets/akash/certificate-manager.d.ts.map +1 -0
  48. package/dist/targets/akash/certificate-manager.js +395 -0
  49. package/dist/targets/akash/certificate-manager.js.map +1 -0
  50. package/dist/targets/akash/constants.d.ts +231 -0
  51. package/dist/targets/akash/constants.d.ts.map +1 -0
  52. package/dist/targets/akash/constants.js +225 -0
  53. package/dist/targets/akash/constants.js.map +1 -0
  54. package/dist/targets/akash/deployer.d.ts +136 -0
  55. package/dist/targets/akash/deployer.d.ts.map +1 -0
  56. package/dist/targets/akash/deployer.js +599 -0
  57. package/dist/targets/akash/deployer.js.map +1 -0
  58. package/dist/targets/akash/environment.d.ts +241 -0
  59. package/dist/targets/akash/environment.d.ts.map +1 -0
  60. package/dist/targets/akash/environment.js +245 -0
  61. package/dist/targets/akash/environment.js.map +1 -0
  62. package/dist/targets/akash/index.d.ts +1113 -0
  63. package/dist/targets/akash/index.d.ts.map +1 -0
  64. package/dist/targets/akash/index.js +909 -0
  65. package/dist/targets/akash/index.js.map +1 -0
  66. package/dist/targets/akash/lease-monitor.d.ts +51 -0
  67. package/dist/targets/akash/lease-monitor.d.ts.map +1 -0
  68. package/dist/targets/akash/lease-monitor.js +110 -0
  69. package/dist/targets/akash/lease-monitor.js.map +1 -0
  70. package/dist/targets/akash/logs.d.ts +71 -0
  71. package/dist/targets/akash/logs.d.ts.map +1 -0
  72. package/dist/targets/akash/logs.js +311 -0
  73. package/dist/targets/akash/logs.js.map +1 -0
  74. package/dist/targets/akash/logs.types.d.ts +102 -0
  75. package/dist/targets/akash/logs.types.d.ts.map +1 -0
  76. package/dist/targets/akash/logs.types.js +9 -0
  77. package/dist/targets/akash/logs.types.js.map +1 -0
  78. package/dist/targets/akash/pricing.d.ts +247 -0
  79. package/dist/targets/akash/pricing.d.ts.map +1 -0
  80. package/dist/targets/akash/pricing.js +246 -0
  81. package/dist/targets/akash/pricing.js.map +1 -0
  82. package/dist/targets/akash/provider-client.d.ts +114 -0
  83. package/dist/targets/akash/provider-client.d.ts.map +1 -0
  84. package/dist/targets/akash/provider-client.js +318 -0
  85. package/dist/targets/akash/provider-client.js.map +1 -0
  86. package/dist/targets/akash/provider-metadata.d.ts +228 -0
  87. package/dist/targets/akash/provider-metadata.d.ts.map +1 -0
  88. package/dist/targets/akash/provider-metadata.js +14 -0
  89. package/dist/targets/akash/provider-metadata.js.map +1 -0
  90. package/dist/targets/akash/provider-service.d.ts +133 -0
  91. package/dist/targets/akash/provider-service.d.ts.map +1 -0
  92. package/dist/targets/akash/provider-service.js +391 -0
  93. package/dist/targets/akash/provider-service.js.map +1 -0
  94. package/dist/targets/akash/query-client.d.ts +125 -0
  95. package/dist/targets/akash/query-client.d.ts.map +1 -0
  96. package/dist/targets/akash/query-client.js +332 -0
  97. package/dist/targets/akash/query-client.js.map +1 -0
  98. package/dist/targets/akash/sdl-generator.d.ts +31 -0
  99. package/dist/targets/akash/sdl-generator.d.ts.map +1 -0
  100. package/dist/targets/akash/sdl-generator.js +279 -0
  101. package/dist/targets/akash/sdl-generator.js.map +1 -0
  102. package/dist/targets/akash/types.d.ts +285 -0
  103. package/dist/targets/akash/types.d.ts.map +1 -0
  104. package/dist/targets/akash/types.js +54 -0
  105. package/dist/targets/akash/types.js.map +1 -0
  106. package/dist/targets/akash/wallet-manager.d.ts +526 -0
  107. package/dist/targets/akash/wallet-manager.d.ts.map +1 -0
  108. package/dist/targets/akash/wallet-manager.js +953 -0
  109. package/dist/targets/akash/wallet-manager.js.map +1 -0
  110. package/dist/targets/local/compose-generator.d.ts +244 -0
  111. package/dist/targets/local/compose-generator.d.ts.map +1 -0
  112. package/dist/targets/local/compose-generator.js +324 -0
  113. package/dist/targets/local/compose-generator.js.map +1 -0
  114. package/dist/targets/local/deployer.d.ts +82 -0
  115. package/dist/targets/local/deployer.d.ts.map +1 -0
  116. package/dist/targets/local/deployer.js +367 -0
  117. package/dist/targets/local/deployer.js.map +1 -0
  118. package/dist/targets/local/engine-manager.d.ts +155 -0
  119. package/dist/targets/local/engine-manager.d.ts.map +1 -0
  120. package/dist/targets/local/engine-manager.js +250 -0
  121. package/dist/targets/local/engine-manager.js.map +1 -0
  122. package/dist/targets/local/index.d.ts +40 -0
  123. package/dist/targets/local/index.d.ts.map +1 -0
  124. package/dist/targets/local/index.js +43 -0
  125. package/dist/targets/local/index.js.map +1 -0
  126. package/dist/targets/local/network-manager.d.ts +160 -0
  127. package/dist/targets/local/network-manager.d.ts.map +1 -0
  128. package/dist/targets/local/network-manager.js +337 -0
  129. package/dist/targets/local/network-manager.js.map +1 -0
  130. package/dist/targets/local/types.d.ts +327 -0
  131. package/dist/targets/local/types.d.ts.map +1 -0
  132. package/dist/targets/local/types.js +9 -0
  133. package/dist/targets/local/types.js.map +1 -0
  134. package/dist/types/common.d.ts +585 -0
  135. package/dist/types/common.d.ts.map +1 -0
  136. package/dist/types/common.js +13 -0
  137. package/dist/types/common.js.map +1 -0
  138. package/dist/types/index.d.ts +15 -0
  139. package/dist/types/index.d.ts.map +1 -0
  140. package/dist/types/index.js +12 -0
  141. package/dist/types/index.js.map +1 -0
  142. package/dist/types/options.d.ts +329 -0
  143. package/dist/types/options.d.ts.map +1 -0
  144. package/dist/types/options.js +10 -0
  145. package/dist/types/options.js.map +1 -0
  146. package/dist/types/profiles.d.ts +329 -0
  147. package/dist/types/profiles.d.ts.map +1 -0
  148. package/dist/types/profiles.js +27 -0
  149. package/dist/types/profiles.js.map +1 -0
  150. package/dist/types/results.d.ts +443 -0
  151. package/dist/types/results.d.ts.map +1 -0
  152. package/dist/types/results.js +64 -0
  153. package/dist/types/results.js.map +1 -0
  154. package/dist/types/validators.d.ts +118 -0
  155. package/dist/types/validators.d.ts.map +1 -0
  156. package/dist/types/validators.js +198 -0
  157. package/dist/types/validators.js.map +1 -0
  158. package/dist/utils/command-runner.d.ts +128 -0
  159. package/dist/utils/command-runner.d.ts.map +1 -0
  160. package/dist/utils/command-runner.js +210 -0
  161. package/dist/utils/command-runner.js.map +1 -0
  162. package/dist/utils/index.d.ts +10 -0
  163. package/dist/utils/index.d.ts.map +1 -0
  164. package/dist/utils/index.js +10 -0
  165. package/dist/utils/index.js.map +1 -0
  166. package/dist/utils/logger.d.ts +68 -0
  167. package/dist/utils/logger.d.ts.map +1 -0
  168. package/dist/utils/logger.js +93 -0
  169. package/dist/utils/logger.js.map +1 -0
  170. package/dist/utils/profile-loader.d.ts +76 -0
  171. package/dist/utils/profile-loader.d.ts.map +1 -0
  172. package/dist/utils/profile-loader.js +194 -0
  173. package/dist/utils/profile-loader.js.map +1 -0
  174. package/dist/utils/registry/index.d.ts +27 -0
  175. package/dist/utils/registry/index.d.ts.map +1 -0
  176. package/dist/utils/registry/index.js +29 -0
  177. package/dist/utils/registry/index.js.map +1 -0
  178. package/dist/utils/registry/manager.d.ts +319 -0
  179. package/dist/utils/registry/manager.d.ts.map +1 -0
  180. package/dist/utils/registry/manager.js +671 -0
  181. package/dist/utils/registry/manager.js.map +1 -0
  182. package/dist/utils/registry/setup.d.ts +135 -0
  183. package/dist/utils/registry/setup.d.ts.map +1 -0
  184. package/dist/utils/registry/setup.js +207 -0
  185. package/dist/utils/registry/setup.js.map +1 -0
  186. package/dist/utils/registry/transformer.d.ts +92 -0
  187. package/dist/utils/registry/transformer.d.ts.map +1 -0
  188. package/dist/utils/registry/transformer.js +131 -0
  189. package/dist/utils/registry/transformer.js.map +1 -0
  190. package/dist/utils/registry/types.d.ts +241 -0
  191. package/dist/utils/registry/types.d.ts.map +1 -0
  192. package/dist/utils/registry/types.js +10 -0
  193. package/dist/utils/registry/types.js.map +1 -0
  194. package/docs/EXAMPLES.md +293 -0
  195. package/docs/PLACEMENT.md +433 -0
  196. package/docs/STORAGE.md +318 -0
  197. package/docs/building-provider-reliability-tracker.md +2581 -0
  198. package/package.json +109 -0
@@ -0,0 +1,250 @@
1
+ /**
2
+ * Container Engine Management Module
3
+ *
4
+ * Manages Docker and Podman container engine lifecycle, ensuring engines
5
+ * are running and accessible before deployment operations.
6
+ *
7
+ * Key Features:
8
+ * - Automatic Podman VM startup on macOS/Windows
9
+ * - Health checks and connectivity verification
10
+ * - Structured error handling with recovery suggestions
11
+ * - Type-safe Result returns (no throwing)
12
+ *
13
+ * @module targets/local/engine-manager
14
+ */
15
+ import debug from 'debug';
16
+ import { success, failure, } from '../../types/index.js';
17
+ import { DeploymentError } from '../../errors/index.js';
18
+ import { runCommand } from '../../utils/command-runner.js';
19
+ /**
20
+ * Debug logger for engine operations
21
+ */
22
+ const log = debug('deploy-ability:local:engine');
23
+ /**
24
+ * Checks if a container engine is running and accessible
25
+ *
26
+ * Performs a health check by running `docker info` or `podman info`.
27
+ * Returns structured engine information if successful.
28
+ *
29
+ * **Does NOT auto-start the engine** - use `ensureEngineRunning` for that.
30
+ *
31
+ * @param engine - Container engine to check
32
+ * @param options - Check options
33
+ * @returns Result with engine info or error
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * const result = await checkEngineRunning('docker');
38
+ *
39
+ * if (result.success) {
40
+ * console.log(`Docker is running: v${result.data.version}`);
41
+ * } else {
42
+ * console.error('Docker not available:', result.error.message);
43
+ * }
44
+ * ```
45
+ */
46
+ export async function checkEngineRunning(engine, options = {}) {
47
+ const { timeout = 30_000, commandOptions } = options;
48
+ log('Checking if %s is running', engine);
49
+ const infoCommand = `${engine} info --format json`;
50
+ const result = await runCommand(infoCommand, {
51
+ ...commandOptions,
52
+ timeout,
53
+ silent: true,
54
+ });
55
+ if (!result.success) {
56
+ log('%s is not running: %s', engine, result.error.message);
57
+ return failure(new DeploymentError(`${engine} is not running or not accessible`, 'ENGINE_NOT_RUNNING', {
58
+ engine,
59
+ command: infoCommand,
60
+ error: result.error.message,
61
+ }, true, engine === 'docker'
62
+ ? 'Start Docker Desktop or run "dockerd" manually, then retry'
63
+ : 'Run "podman machine start" manually, then retry', 'error', result.error));
64
+ }
65
+ log('%s is running', engine);
66
+ // Parse version and platform from info output
67
+ let version;
68
+ let platform;
69
+ try {
70
+ const info = JSON.parse(result.data.stdout);
71
+ version = info.version?.Version || info.Version;
72
+ platform = info.host?.os || info.host?.arch || process.platform;
73
+ }
74
+ catch {
75
+ // Ignore parsing errors - version/platform are optional
76
+ log('Could not parse engine info JSON');
77
+ }
78
+ return success({
79
+ engine,
80
+ running: true,
81
+ version,
82
+ platform,
83
+ autoStarted: false,
84
+ });
85
+ }
86
+ /**
87
+ * Attempts to start a Podman VM
88
+ *
89
+ * On macOS and Windows, Podman runs inside a VM that must be started
90
+ * before the engine can be used. This function handles the startup
91
+ * process and waits for the VM to become ready.
92
+ *
93
+ * @param options - Command execution options
94
+ * @returns Result indicating success or failure
95
+ *
96
+ * @internal
97
+ */
98
+ async function startPodmanVM(options = {}) {
99
+ const { timeout = 60_000, commandOptions } = options;
100
+ log('Attempting to start Podman VM');
101
+ const startResult = await runCommand('podman machine start', {
102
+ ...commandOptions,
103
+ timeout,
104
+ silent: false,
105
+ });
106
+ if (!startResult.success) {
107
+ log('Failed to start Podman VM: %s', startResult.error.message);
108
+ return failure(new DeploymentError('Podman VM could not be started', 'PODMAN_VM_START_FAILED', {
109
+ command: 'podman machine start',
110
+ error: startResult.error.message,
111
+ }, true, 'Run "podman machine init" (first time only) and "podman machine start" manually', 'error', startResult.error));
112
+ }
113
+ log('Podman VM start command completed');
114
+ // Wait for socket to become available
115
+ log('Waiting for Podman socket to become available');
116
+ const checkResult = await runCommand('podman info --format json', {
117
+ ...commandOptions,
118
+ timeout: 30_000,
119
+ silent: true,
120
+ });
121
+ if (!checkResult.success) {
122
+ log('Podman socket did not become available: %s', checkResult.error.message);
123
+ return failure(new DeploymentError('Podman VM started but socket is not available', 'PODMAN_SOCKET_UNAVAILABLE', {
124
+ error: checkResult.error.message,
125
+ }, true, 'Wait a few seconds and retry, or run "podman machine stop && podman machine start"', 'error', checkResult.error));
126
+ }
127
+ log('Podman socket is now available');
128
+ return success(undefined);
129
+ }
130
+ /**
131
+ * Ensures a container engine is running and accessible
132
+ *
133
+ * This is the main entry point for engine management. It will:
134
+ *
135
+ * **For Docker:**
136
+ * - Check if Docker daemon is running
137
+ * - Return error if not (cannot auto-start Docker)
138
+ * - Provide clear instructions for manual startup
139
+ *
140
+ * **For Podman:**
141
+ * - Check if Podman socket is available
142
+ * - Automatically start Podman VM if not running (macOS/Windows)
143
+ * - Wait for VM to become ready
144
+ * - Return error if auto-start fails
145
+ *
146
+ * This eliminates common "connection refused" errors and provides
147
+ * a better developer experience, especially with Podman's VM architecture.
148
+ *
149
+ * @param engine - Container engine to ensure is running
150
+ * @param options - Engine check options
151
+ * @returns Result with engine info or error
152
+ *
153
+ * @example
154
+ * ```typescript
155
+ * const result = await ensureEngineRunning('podman', { autoStart: true });
156
+ *
157
+ * if (result.success) {
158
+ * console.log('Engine ready:', result.data);
159
+ * if (result.data.autoStarted) {
160
+ * console.log('Podman VM was automatically started');
161
+ * }
162
+ * } else {
163
+ * console.error('Engine error:', result.error.getUserMessage());
164
+ * console.error('Suggestion:', result.error.suggestion);
165
+ * }
166
+ * ```
167
+ *
168
+ * @example With custom timeout
169
+ * ```typescript
170
+ * const result = await ensureEngineRunning('docker', {
171
+ * timeout: 10_000,
172
+ * autoStart: false
173
+ * });
174
+ * ```
175
+ */
176
+ export async function ensureEngineRunning(engine, options = {}) {
177
+ const { autoStart = true } = options;
178
+ log('Ensuring %s is running (autoStart: %s)', engine, autoStart);
179
+ // Fast path: check if engine is already running
180
+ const checkResult = await checkEngineRunning(engine, options);
181
+ if (checkResult.success) {
182
+ log('%s is already running', engine);
183
+ return checkResult;
184
+ }
185
+ // Engine not running - check if we can auto-start
186
+ if (!autoStart) {
187
+ log('Auto-start disabled, returning error');
188
+ return checkResult;
189
+ }
190
+ // Docker cannot be auto-started (platform-specific, complex)
191
+ if (engine === 'docker') {
192
+ log('Cannot auto-start Docker, returning error');
193
+ return checkResult;
194
+ }
195
+ // For Podman, check if this is a connection error we can fix
196
+ const errorMessage = checkResult.error.context.error;
197
+ const isConnectionError = /cannot connect to podman|unable to connect|dial unix/i.test(errorMessage);
198
+ if (!isConnectionError) {
199
+ log('Not a connection error, cannot auto-start: %s', errorMessage);
200
+ return checkResult;
201
+ }
202
+ // Attempt to auto-start Podman VM
203
+ log('Attempting auto-start of Podman VM');
204
+ const startResult = await startPodmanVM(options);
205
+ if (!startResult.success) {
206
+ log('Auto-start failed');
207
+ return failure(startResult.error);
208
+ }
209
+ log('Auto-start succeeded, verifying engine is running');
210
+ // Verify engine is now running
211
+ const verifyResult = await checkEngineRunning(engine, options);
212
+ if (verifyResult.success) {
213
+ log('Engine verified running after auto-start');
214
+ return success({
215
+ ...verifyResult.data,
216
+ autoStarted: true,
217
+ });
218
+ }
219
+ log('Engine still not running after auto-start');
220
+ return verifyResult;
221
+ }
222
+ /**
223
+ * Gets version information for a container engine
224
+ *
225
+ * Convenience function to extract just the version string from an engine.
226
+ *
227
+ * @param engine - Container engine to check
228
+ * @param options - Check options
229
+ * @returns Result with version string or error
230
+ *
231
+ * @example
232
+ * ```typescript
233
+ * const result = await getEngineVersion('docker');
234
+ *
235
+ * if (result.success) {
236
+ * console.log('Docker version:', result.data);
237
+ * }
238
+ * ```
239
+ */
240
+ export async function getEngineVersion(engine, options = {}) {
241
+ const result = await checkEngineRunning(engine, options);
242
+ if (!result.success) {
243
+ return failure(result.error);
244
+ }
245
+ if (!result.data.version) {
246
+ return failure(new DeploymentError('Could not determine engine version', 'ENGINE_VERSION_UNKNOWN', { engine }, false, undefined, 'warning'));
247
+ }
248
+ return success(result.data.version);
249
+ }
250
+ //# sourceMappingURL=engine-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine-manager.js","sourceRoot":"","sources":["../../../src/targets/local/engine-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Local Deployment Target - Public API
3
+ *
4
+ * Main entry point for local Docker/Podman deployments.
5
+ * Re-exports all public APIs and types for the local target.
6
+ *
7
+ * @example Basic Usage
8
+ * ```typescript
9
+ * import { deployToLocal } from 'deploy-ability/local';
10
+ *
11
+ * const result = await deployToLocal({
12
+ * projectRoot: '/path/to/project',
13
+ * profile: 'local-dev'
14
+ * });
15
+ *
16
+ * if (result.success) {
17
+ * console.log('Deployed!', result.data.endpoints);
18
+ * }
19
+ * ```
20
+ *
21
+ * @example With Progress Tracking
22
+ * ```typescript
23
+ * import { deployToLocal } from 'deploy-ability/local';
24
+ *
25
+ * const result = await deployToLocal({
26
+ * projectRoot: process.cwd(),
27
+ * onProgress: (event) => {
28
+ * console.log(`[${event.phase}] ${event.message}`);
29
+ * }
30
+ * });
31
+ * ```
32
+ *
33
+ * @module targets/local
34
+ */
35
+ export { deployLocal as deployToLocal } from './deployer.js';
36
+ export { ensureEngineRunning, checkEngineRunning, getEngineVersion, type EngineInfo, type EngineCheckOptions, } from './engine-manager.js';
37
+ export { ensureNetwork, networkExists, getNetworkInfo, removeNetwork, type NetworkOptions, type CreateNetworkOptions, } from './network-manager.js';
38
+ export { generateComposeFile, generateComposeYAML, composeFileToYAML, convertEnvArrayToObject, convertPortsToComposeFormat, type ServiceInput, type ComposeGenerationOptions, } from './compose-generator.js';
39
+ export type { ComposeFile, ComposeService, ComposeNetwork, PortMapping, RestartPolicy, NetworkMode, ContainerStatus, ContainerInfo, NetworkInfo, ServiceDependency, Healthcheck, VolumeMount, ServiceValidationError, } from './types.js';
40
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/targets/local/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,EAAE,WAAW,IAAI,aAAa,EAAE,MAAM,eAAe,CAAC;AAG7D,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,KAAK,YAAY,EACjB,KAAK,wBAAwB,GAC9B,MAAM,wBAAwB,CAAC;AAGhC,YAAY,EACV,WAAW,EACX,cAAc,EACd,cAAc,EACd,WAAW,EACX,aAAa,EACb,WAAW,EACX,eAAe,EACf,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Local Deployment Target - Public API
3
+ *
4
+ * Main entry point for local Docker/Podman deployments.
5
+ * Re-exports all public APIs and types for the local target.
6
+ *
7
+ * @example Basic Usage
8
+ * ```typescript
9
+ * import { deployToLocal } from 'deploy-ability/local';
10
+ *
11
+ * const result = await deployToLocal({
12
+ * projectRoot: '/path/to/project',
13
+ * profile: 'local-dev'
14
+ * });
15
+ *
16
+ * if (result.success) {
17
+ * console.log('Deployed!', result.data.endpoints);
18
+ * }
19
+ * ```
20
+ *
21
+ * @example With Progress Tracking
22
+ * ```typescript
23
+ * import { deployToLocal } from 'deploy-ability/local';
24
+ *
25
+ * const result = await deployToLocal({
26
+ * projectRoot: process.cwd(),
27
+ * onProgress: (event) => {
28
+ * console.log(`[${event.phase}] ${event.message}`);
29
+ * }
30
+ * });
31
+ * ```
32
+ *
33
+ * @module targets/local
34
+ */
35
+ // Main deployment function
36
+ export { deployLocal as deployToLocal } from './deployer.js';
37
+ // Engine management
38
+ export { ensureEngineRunning, checkEngineRunning, getEngineVersion, } from './engine-manager.js';
39
+ // Network management
40
+ export { ensureNetwork, networkExists, getNetworkInfo, removeNetwork, } from './network-manager.js';
41
+ // Compose generation
42
+ export { generateComposeFile, generateComposeYAML, composeFileToYAML, convertEnvArrayToObject, convertPortsToComposeFormat, } from './compose-generator.js';
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/targets/local/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,2BAA2B;AAC3B,OAAO,EAAE,WAAW,IAAI,aAAa,EAAE,MAAM,eAAe,CAAC;AAE7D,oBAAoB;AACpB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,GAGjB,MAAM,qBAAqB,CAAC;AAE7B,qBAAqB;AACrB,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,aAAa,GAGd,MAAM,sBAAsB,CAAC;AAE9B,qBAAqB;AACrB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,GAG5B,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Docker Network Management Module
3
+ *
4
+ * Manages Docker/Podman networks for KADI deployments, ensuring
5
+ * required networks exist and are properly configured for inter-service
6
+ * communication.
7
+ *
8
+ * Key Features:
9
+ * - Network creation with idempotency (safe to call multiple times)
10
+ * - Network inspection and validation
11
+ * - Automatic conflict resolution
12
+ * - Type-safe Result returns
13
+ *
14
+ * @module targets/local/network-manager
15
+ */
16
+ import { type Result, type ContainerEngine } from '../../types/index.js';
17
+ import { DeploymentError } from '../../errors/index.js';
18
+ import { type CommandOptions } from '../../utils/command-runner.js';
19
+ import type { NetworkInfo } from './types.js';
20
+ /**
21
+ * Options for network operations
22
+ */
23
+ export interface NetworkOptions {
24
+ /**
25
+ * Timeout for network operations in milliseconds
26
+ * @default 30000 (30 seconds)
27
+ */
28
+ readonly timeout?: number;
29
+ /**
30
+ * Command execution options
31
+ */
32
+ readonly commandOptions?: CommandOptions;
33
+ }
34
+ /**
35
+ * Network creation options
36
+ */
37
+ export interface CreateNetworkOptions extends NetworkOptions {
38
+ /**
39
+ * Network driver to use
40
+ * @default 'bridge'
41
+ */
42
+ readonly driver?: 'bridge' | 'host' | 'overlay' | 'macvlan' | 'none' | string;
43
+ /**
44
+ * Enable IPv6
45
+ * @default false
46
+ */
47
+ readonly ipv6?: boolean;
48
+ /**
49
+ * Additional driver options
50
+ */
51
+ readonly driverOpts?: Record<string, string>;
52
+ }
53
+ /**
54
+ * Checks if a Docker network exists
55
+ *
56
+ * Queries the container engine to verify if a network with the given
57
+ * name exists. Returns true if it exists, false otherwise.
58
+ *
59
+ * @param engine - Container engine to use
60
+ * @param networkName - Name of the network to check
61
+ * @param options - Network operation options
62
+ * @returns Result with boolean indicating existence
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * const result = await networkExists('docker', 'kadi-net');
67
+ *
68
+ * if (result.success && result.data) {
69
+ * console.log('Network exists');
70
+ * } else if (result.success && !result.data) {
71
+ * console.log('Network does not exist');
72
+ * } else {
73
+ * console.error('Error checking network:', result.error.message);
74
+ * }
75
+ * ```
76
+ */
77
+ export declare function networkExists(engine: ContainerEngine, networkName: string, options?: NetworkOptions): Promise<Result<boolean, DeploymentError>>;
78
+ /**
79
+ * Gets detailed information about a Docker network
80
+ *
81
+ * Retrieves and parses network information including driver, scope,
82
+ * and whether the network was created externally.
83
+ *
84
+ * @param engine - Container engine to use
85
+ * @param networkName - Name of the network to inspect
86
+ * @param options - Network operation options
87
+ * @returns Result with network information
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * const result = await getNetworkInfo('docker', 'kadi-net');
92
+ *
93
+ * if (result.success) {
94
+ * console.log('Network ID:', result.data.id);
95
+ * console.log('Driver:', result.data.driver);
96
+ * console.log('Pre-existing:', result.data.preexisting);
97
+ * }
98
+ * ```
99
+ */
100
+ export declare function getNetworkInfo(engine: ContainerEngine, networkName: string, options?: NetworkOptions): Promise<Result<NetworkInfo, DeploymentError>>;
101
+ /**
102
+ * Creates a Docker network if it doesn't already exist
103
+ *
104
+ * This function is idempotent - safe to call multiple times. If the
105
+ * network already exists, it will return success with `preexisting: true`.
106
+ *
107
+ * Handles the common "already exists" error gracefully and returns
108
+ * structured network information.
109
+ *
110
+ * @param engine - Container engine to use
111
+ * @param networkName - Name of the network to create
112
+ * @param options - Network creation options
113
+ * @returns Result with network information
114
+ *
115
+ * @example Basic Usage
116
+ * ```typescript
117
+ * const result = await ensureNetwork('docker', 'kadi-net');
118
+ *
119
+ * if (result.success) {
120
+ * if (result.data.preexisting) {
121
+ * console.log('Network already existed');
122
+ * } else {
123
+ * console.log('Network created:', result.data.id);
124
+ * }
125
+ * }
126
+ * ```
127
+ *
128
+ * @example With Custom Driver
129
+ * ```typescript
130
+ * const result = await ensureNetwork('docker', 'my-overlay-net', {
131
+ * driver: 'overlay',
132
+ * ipv6: true
133
+ * });
134
+ * ```
135
+ */
136
+ export declare function ensureNetwork(engine: ContainerEngine, networkName: string, options?: CreateNetworkOptions): Promise<Result<NetworkInfo, DeploymentError>>;
137
+ /**
138
+ * Removes a Docker network
139
+ *
140
+ * Deletes the specified network. Will fail if containers are still
141
+ * attached to the network.
142
+ *
143
+ * @param engine - Container engine to use
144
+ * @param networkName - Name of the network to remove
145
+ * @param options - Network operation options
146
+ * @returns Result indicating success or failure
147
+ *
148
+ * @example
149
+ * ```typescript
150
+ * const result = await removeNetwork('docker', 'kadi-net');
151
+ *
152
+ * if (result.success) {
153
+ * console.log('Network removed');
154
+ * } else if (result.error.code === 'NETWORK_IN_USE') {
155
+ * console.log('Network still has containers attached');
156
+ * }
157
+ * ```
158
+ */
159
+ export declare function removeNetwork(engine: ContainerEngine, networkName: string, options?: NetworkOptions): Promise<Result<void, DeploymentError>>;
160
+ //# sourceMappingURL=network-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-manager.d.ts","sourceRoot":"","sources":["../../../src/targets/local/network-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EACL,KAAK,MAAM,EAGX,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAO9C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAE9E;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9C;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CA8C3C;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,CA0F/C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,CA8I/C;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAmExC"}