@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,337 @@
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 debug from 'debug';
17
+ import { success, failure, } from '../../types/index.js';
18
+ import { DeploymentError } from '../../errors/index.js';
19
+ import { runCommand } from '../../utils/command-runner.js';
20
+ /**
21
+ * Debug logger for network operations
22
+ */
23
+ const log = debug('deploy-ability:local:network');
24
+ /**
25
+ * Checks if a Docker network exists
26
+ *
27
+ * Queries the container engine to verify if a network with the given
28
+ * name exists. Returns true if it exists, false otherwise.
29
+ *
30
+ * @param engine - Container engine to use
31
+ * @param networkName - Name of the network to check
32
+ * @param options - Network operation options
33
+ * @returns Result with boolean indicating existence
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * const result = await networkExists('docker', 'kadi-net');
38
+ *
39
+ * if (result.success && result.data) {
40
+ * console.log('Network exists');
41
+ * } else if (result.success && !result.data) {
42
+ * console.log('Network does not exist');
43
+ * } else {
44
+ * console.error('Error checking network:', result.error.message);
45
+ * }
46
+ * ```
47
+ */
48
+ export async function networkExists(engine, networkName, options = {}) {
49
+ const { timeout = 30_000, commandOptions } = options;
50
+ log('Checking if network %s exists', networkName);
51
+ const inspectCommand = `${engine} network inspect ${networkName}`;
52
+ const result = await runCommand(inspectCommand, {
53
+ ...commandOptions,
54
+ timeout,
55
+ silent: true,
56
+ });
57
+ if (result.success) {
58
+ log('Network %s exists', networkName);
59
+ return success(true);
60
+ }
61
+ // Check if this is a "not found" error vs other errors
62
+ const errorMessage = result.error.context.stderr || '';
63
+ const isNotFound = /no such network|not found|Error: network .* not found/i.test(errorMessage);
64
+ if (isNotFound) {
65
+ log('Network %s does not exist', networkName);
66
+ return success(false);
67
+ }
68
+ // Other error - return it
69
+ log('Error checking network %s: %s', networkName, result.error.message);
70
+ return failure(new DeploymentError(`Failed to check if network "${networkName}" exists`, 'NETWORK_CHECK_FAILED', {
71
+ engine,
72
+ networkName,
73
+ error: result.error.message,
74
+ }, true, 'Ensure the container engine is running and accessible', 'error', result.error));
75
+ }
76
+ /**
77
+ * Gets detailed information about a Docker network
78
+ *
79
+ * Retrieves and parses network information including driver, scope,
80
+ * and whether the network was created externally.
81
+ *
82
+ * @param engine - Container engine to use
83
+ * @param networkName - Name of the network to inspect
84
+ * @param options - Network operation options
85
+ * @returns Result with network information
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * const result = await getNetworkInfo('docker', 'kadi-net');
90
+ *
91
+ * if (result.success) {
92
+ * console.log('Network ID:', result.data.id);
93
+ * console.log('Driver:', result.data.driver);
94
+ * console.log('Pre-existing:', result.data.preexisting);
95
+ * }
96
+ * ```
97
+ */
98
+ export async function getNetworkInfo(engine, networkName, options = {}) {
99
+ const { timeout = 30_000, commandOptions } = options;
100
+ log('Getting info for network %s', networkName);
101
+ const inspectCommand = `${engine} network inspect ${networkName}`;
102
+ const result = await runCommand(inspectCommand, {
103
+ ...commandOptions,
104
+ timeout,
105
+ silent: true,
106
+ });
107
+ if (!result.success) {
108
+ log('Failed to get network info for %s: %s', networkName, result.error.message);
109
+ return failure(new DeploymentError(`Network "${networkName}" not found`, 'NETWORK_NOT_FOUND', {
110
+ engine,
111
+ networkName,
112
+ error: result.error.message,
113
+ }, true, `Create the network with: ${engine} network create ${networkName}`, 'error', result.error));
114
+ }
115
+ // Parse network info from JSON output
116
+ try {
117
+ const networks = JSON.parse(result.data.stdout);
118
+ if (!Array.isArray(networks) || networks.length === 0) {
119
+ log('Network inspect returned empty array for %s', networkName);
120
+ return failure(new DeploymentError(`Network "${networkName}" inspect returned no data`, 'NETWORK_INSPECT_EMPTY', {
121
+ engine,
122
+ networkName,
123
+ }, false, undefined, 'warning'));
124
+ }
125
+ const network = networks[0];
126
+ log('Network %s found: id=%s driver=%s', networkName, network.Id, network.Driver);
127
+ return success({
128
+ id: network.Id,
129
+ name: network.Name || networkName,
130
+ driver: network.Driver || 'bridge',
131
+ preexisting: true, // If we're inspecting it, it existed before this call
132
+ });
133
+ }
134
+ catch (error) {
135
+ log('Failed to parse network inspect JSON: %s', error.message);
136
+ return failure(new DeploymentError('Failed to parse network information', 'NETWORK_PARSE_ERROR', {
137
+ engine,
138
+ networkName,
139
+ stdout: result.data.stdout.substring(0, 200),
140
+ error: error.message,
141
+ }, false, undefined, 'error', error));
142
+ }
143
+ }
144
+ /**
145
+ * Creates a Docker network if it doesn't already exist
146
+ *
147
+ * This function is idempotent - safe to call multiple times. If the
148
+ * network already exists, it will return success with `preexisting: true`.
149
+ *
150
+ * Handles the common "already exists" error gracefully and returns
151
+ * structured network information.
152
+ *
153
+ * @param engine - Container engine to use
154
+ * @param networkName - Name of the network to create
155
+ * @param options - Network creation options
156
+ * @returns Result with network information
157
+ *
158
+ * @example Basic Usage
159
+ * ```typescript
160
+ * const result = await ensureNetwork('docker', 'kadi-net');
161
+ *
162
+ * if (result.success) {
163
+ * if (result.data.preexisting) {
164
+ * console.log('Network already existed');
165
+ * } else {
166
+ * console.log('Network created:', result.data.id);
167
+ * }
168
+ * }
169
+ * ```
170
+ *
171
+ * @example With Custom Driver
172
+ * ```typescript
173
+ * const result = await ensureNetwork('docker', 'my-overlay-net', {
174
+ * driver: 'overlay',
175
+ * ipv6: true
176
+ * });
177
+ * ```
178
+ */
179
+ export async function ensureNetwork(engine, networkName, options = {}) {
180
+ const { timeout = 30_000, driver = 'bridge', ipv6 = false, driverOpts, commandOptions, } = options;
181
+ log('Ensuring network %s exists (driver: %s)', networkName, driver);
182
+ // First, check if network already exists
183
+ const existsResult = await networkExists(engine, networkName, {
184
+ timeout,
185
+ commandOptions,
186
+ });
187
+ if (!existsResult.success) {
188
+ return failure(existsResult.error);
189
+ }
190
+ if (existsResult.data) {
191
+ log('Network %s already exists, getting info', networkName);
192
+ // Network exists - get its info
193
+ const infoResult = await getNetworkInfo(engine, networkName, {
194
+ timeout,
195
+ commandOptions,
196
+ });
197
+ if (infoResult.success) {
198
+ return success({
199
+ ...infoResult.data,
200
+ preexisting: true,
201
+ });
202
+ }
203
+ // Failed to get info but we know it exists - return minimal info
204
+ log('Failed to get network info, returning minimal data');
205
+ return success({
206
+ id: '',
207
+ name: networkName,
208
+ driver,
209
+ preexisting: true,
210
+ });
211
+ }
212
+ // Network doesn't exist - create it
213
+ log('Network %s does not exist, creating', networkName);
214
+ // Build create command with options
215
+ const createArgs = ['network', 'create'];
216
+ if (driver) {
217
+ createArgs.push('--driver', driver);
218
+ }
219
+ if (ipv6) {
220
+ createArgs.push('--ipv6');
221
+ }
222
+ if (driverOpts) {
223
+ for (const [key, value] of Object.entries(driverOpts)) {
224
+ createArgs.push('--opt', `${key}=${value}`);
225
+ }
226
+ }
227
+ createArgs.push(networkName);
228
+ const createCommand = `${engine} ${createArgs.join(' ')}`;
229
+ log('Creating network with command: %s', createCommand);
230
+ const createResult = await runCommand(createCommand, {
231
+ ...commandOptions,
232
+ timeout,
233
+ silent: true,
234
+ });
235
+ if (!createResult.success) {
236
+ // Check if this is an "already exists" error (race condition)
237
+ const errorMessage = createResult.error.context.stderr ||
238
+ createResult.error.message;
239
+ if (/already exists/i.test(errorMessage)) {
240
+ log('Network %s was created by another process (race condition)', networkName);
241
+ // Another process created it - get its info
242
+ const infoResult = await getNetworkInfo(engine, networkName, {
243
+ timeout,
244
+ commandOptions,
245
+ });
246
+ if (infoResult.success) {
247
+ return success({
248
+ ...infoResult.data,
249
+ preexisting: true,
250
+ });
251
+ }
252
+ // Couldn't get info but we know it exists
253
+ return success({
254
+ id: '',
255
+ name: networkName,
256
+ driver,
257
+ preexisting: true,
258
+ });
259
+ }
260
+ // Other error - return it
261
+ log('Failed to create network %s: %s', networkName, createResult.error.message);
262
+ return failure(new DeploymentError(`Failed to create network "${networkName}"`, 'NETWORK_CREATE_FAILED', {
263
+ engine,
264
+ networkName,
265
+ driver,
266
+ error: createResult.error.message,
267
+ }, true, 'Check container engine logs and ensure you have network creation permissions', 'error', createResult.error));
268
+ }
269
+ // Network created successfully
270
+ const networkId = createResult.data.stdout.trim();
271
+ log('Network %s created successfully: id=%s', networkName, networkId);
272
+ return success({
273
+ id: networkId,
274
+ name: networkName,
275
+ driver,
276
+ preexisting: false,
277
+ });
278
+ }
279
+ /**
280
+ * Removes a Docker network
281
+ *
282
+ * Deletes the specified network. Will fail if containers are still
283
+ * attached to the network.
284
+ *
285
+ * @param engine - Container engine to use
286
+ * @param networkName - Name of the network to remove
287
+ * @param options - Network operation options
288
+ * @returns Result indicating success or failure
289
+ *
290
+ * @example
291
+ * ```typescript
292
+ * const result = await removeNetwork('docker', 'kadi-net');
293
+ *
294
+ * if (result.success) {
295
+ * console.log('Network removed');
296
+ * } else if (result.error.code === 'NETWORK_IN_USE') {
297
+ * console.log('Network still has containers attached');
298
+ * }
299
+ * ```
300
+ */
301
+ export async function removeNetwork(engine, networkName, options = {}) {
302
+ const { timeout = 30_000, commandOptions } = options;
303
+ log('Removing network %s', networkName);
304
+ const removeCommand = `${engine} network rm ${networkName}`;
305
+ const result = await runCommand(removeCommand, {
306
+ ...commandOptions,
307
+ timeout,
308
+ silent: true,
309
+ });
310
+ if (!result.success) {
311
+ const errorMessage = result.error.context.stderr || result.error.message;
312
+ // Check for common error cases
313
+ if (/has active endpoints|network .* has active endpoints/i.test(errorMessage)) {
314
+ log('Network %s has active endpoints', networkName);
315
+ return failure(new DeploymentError(`Network "${networkName}" has active containers attached`, 'NETWORK_IN_USE', {
316
+ engine,
317
+ networkName,
318
+ error: result.error.message,
319
+ }, true, `Stop all containers using this network first, then retry`, 'error', result.error));
320
+ }
321
+ if (/no such network|not found/i.test(errorMessage)) {
322
+ log('Network %s does not exist', networkName);
323
+ // Not found is actually success for removal
324
+ return success(undefined);
325
+ }
326
+ // Other error
327
+ log('Failed to remove network %s: %s', networkName, result.error.message);
328
+ return failure(new DeploymentError(`Failed to remove network "${networkName}"`, 'NETWORK_REMOVE_FAILED', {
329
+ engine,
330
+ networkName,
331
+ error: result.error.message,
332
+ }, true, 'Check container engine logs for details', 'error', result.error));
333
+ }
334
+ log('Network %s removed successfully', networkName);
335
+ return success(undefined);
336
+ }
337
+ //# sourceMappingURL=network-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-manager.js","sourceRoot":"","sources":["../../../src/targets/local/network-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,327 @@
1
+ /**
2
+ * Local deployment target type definitions
3
+ *
4
+ * Types specific to local Docker/Podman deployment
5
+ *
6
+ * @module targets/local/types
7
+ */
8
+ import type { ImageReference } from '../../types/index.js';
9
+ /**
10
+ * Port mapping in Docker Compose format
11
+ *
12
+ * Format: "external:internal" (e.g., "8080:8080")
13
+ */
14
+ export type PortMapping = `${number}:${number}`;
15
+ /**
16
+ * Container restart policy
17
+ */
18
+ export type RestartPolicy = 'no' | 'always' | 'on-failure' | 'unless-stopped';
19
+ /**
20
+ * Volume mount specification
21
+ */
22
+ export interface VolumeMount {
23
+ /**
24
+ * Source path or volume name
25
+ */
26
+ readonly source: string;
27
+ /**
28
+ * Target path inside container
29
+ */
30
+ readonly target: string;
31
+ /**
32
+ * Mount type
33
+ */
34
+ readonly type?: 'bind' | 'volume' | 'tmpfs';
35
+ /**
36
+ * Read-only mount
37
+ */
38
+ readonly readOnly?: boolean;
39
+ }
40
+ /**
41
+ * Network mode for container
42
+ */
43
+ export type NetworkMode = 'bridge' | 'host' | 'none' | string;
44
+ /**
45
+ * Healthcheck configuration
46
+ */
47
+ export interface Healthcheck {
48
+ /**
49
+ * Test command
50
+ */
51
+ readonly test: readonly string[];
52
+ /**
53
+ * Interval between checks
54
+ */
55
+ readonly interval?: string;
56
+ /**
57
+ * Timeout for each check
58
+ */
59
+ readonly timeout?: string;
60
+ /**
61
+ * Number of retries before unhealthy
62
+ */
63
+ readonly retries?: number;
64
+ /**
65
+ * Start period before first check
66
+ */
67
+ readonly startPeriod?: string;
68
+ }
69
+ /**
70
+ * Service dependency
71
+ */
72
+ export interface ServiceDependency {
73
+ /**
74
+ * Service name
75
+ */
76
+ readonly service: string;
77
+ /**
78
+ * Condition to wait for
79
+ */
80
+ readonly condition: 'service_started' | 'service_healthy' | 'service_completed_successfully';
81
+ }
82
+ /**
83
+ * Docker Compose service definition
84
+ *
85
+ * Strongly typed version with no `any` types
86
+ */
87
+ export interface ComposeService {
88
+ /**
89
+ * Container image
90
+ */
91
+ readonly image: ImageReference;
92
+ /**
93
+ * Container name
94
+ */
95
+ readonly container_name?: string;
96
+ /**
97
+ * Build configuration (if building from Dockerfile)
98
+ */
99
+ readonly build?: {
100
+ readonly context: string;
101
+ readonly dockerfile?: string;
102
+ readonly args?: Record<string, string>;
103
+ };
104
+ /**
105
+ * Command override
106
+ */
107
+ readonly command?: readonly string[];
108
+ /**
109
+ * Entrypoint override
110
+ */
111
+ readonly entrypoint?: readonly string[];
112
+ /**
113
+ * Environment variables
114
+ */
115
+ readonly environment?: Record<string, string>;
116
+ /**
117
+ * Port mappings
118
+ */
119
+ readonly ports?: readonly string[];
120
+ /**
121
+ * Volume mounts
122
+ */
123
+ readonly volumes?: readonly string[];
124
+ /**
125
+ * Networks this service connects to
126
+ */
127
+ readonly networks?: readonly string[];
128
+ /**
129
+ * Service dependencies
130
+ */
131
+ readonly depends_on?: readonly string[] | Record<string, ServiceDependency>;
132
+ /**
133
+ * Restart policy
134
+ */
135
+ readonly restart?: RestartPolicy;
136
+ /**
137
+ * Healthcheck configuration
138
+ */
139
+ readonly healthcheck?: Healthcheck;
140
+ /**
141
+ * Working directory
142
+ */
143
+ readonly working_dir?: string;
144
+ /**
145
+ * User to run as
146
+ */
147
+ readonly user?: string;
148
+ /**
149
+ * Enable TTY
150
+ */
151
+ readonly tty?: boolean;
152
+ /**
153
+ * Keep stdin open
154
+ */
155
+ readonly stdin_open?: boolean;
156
+ /**
157
+ * Privileged mode
158
+ */
159
+ readonly privileged?: boolean;
160
+ /**
161
+ * Extra hosts
162
+ */
163
+ readonly extra_hosts?: readonly string[];
164
+ /**
165
+ * DNS servers
166
+ */
167
+ readonly dns?: readonly string[];
168
+ /**
169
+ * Resource limits (Compose v3)
170
+ */
171
+ readonly deploy?: {
172
+ readonly resources?: {
173
+ readonly limits?: {
174
+ readonly cpus?: string;
175
+ readonly memory?: string;
176
+ };
177
+ readonly reservations?: {
178
+ readonly cpus?: string;
179
+ readonly memory?: string;
180
+ };
181
+ };
182
+ };
183
+ }
184
+ /**
185
+ * Docker network configuration
186
+ */
187
+ export interface ComposeNetwork {
188
+ /**
189
+ * Network driver
190
+ */
191
+ readonly driver?: 'bridge' | 'host' | 'overlay' | 'macvlan' | 'none' | string;
192
+ /**
193
+ * External network (already exists)
194
+ */
195
+ readonly external?: boolean;
196
+ /**
197
+ * Network name (for external networks)
198
+ */
199
+ readonly name?: string;
200
+ /**
201
+ * Driver options
202
+ */
203
+ readonly driver_opts?: Record<string, string>;
204
+ /**
205
+ * Enable IPv6
206
+ */
207
+ readonly enable_ipv6?: boolean;
208
+ /**
209
+ * IPAM configuration
210
+ */
211
+ readonly ipam?: {
212
+ readonly driver?: string;
213
+ readonly config?: ReadonlyArray<{
214
+ readonly subnet?: string;
215
+ readonly ip_range?: string;
216
+ readonly gateway?: string;
217
+ }>;
218
+ };
219
+ }
220
+ /**
221
+ * Docker Compose file structure
222
+ *
223
+ * Complete type-safe representation of docker-compose.yml
224
+ */
225
+ export interface ComposeFile {
226
+ /**
227
+ * Compose file version
228
+ */
229
+ readonly version: string;
230
+ /**
231
+ * Services to deploy
232
+ */
233
+ readonly services: Readonly<Record<string, ComposeService>>;
234
+ /**
235
+ * Networks configuration
236
+ */
237
+ readonly networks?: Readonly<Record<string, ComposeNetwork>>;
238
+ /**
239
+ * Volumes configuration
240
+ */
241
+ readonly volumes?: Readonly<Record<string, {
242
+ readonly driver?: string;
243
+ readonly driver_opts?: Record<string, string>;
244
+ readonly external?: boolean;
245
+ readonly name?: string;
246
+ }>>;
247
+ }
248
+ /**
249
+ * Container status from Docker/Podman
250
+ */
251
+ export type ContainerStatus = 'created' | 'running' | 'paused' | 'restarting' | 'removing' | 'exited' | 'dead';
252
+ /**
253
+ * Container information
254
+ */
255
+ export interface ContainerInfo {
256
+ /**
257
+ * Container ID
258
+ */
259
+ readonly id: string;
260
+ /**
261
+ * Container name
262
+ */
263
+ readonly name: string;
264
+ /**
265
+ * Container status
266
+ */
267
+ readonly status: ContainerStatus;
268
+ /**
269
+ * Image used
270
+ */
271
+ readonly image: ImageReference;
272
+ /**
273
+ * Ports exposed
274
+ */
275
+ readonly ports: ReadonlyArray<{
276
+ readonly internal: number;
277
+ readonly external?: number;
278
+ readonly protocol: 'tcp' | 'udp';
279
+ }>;
280
+ /**
281
+ * When container was created
282
+ */
283
+ readonly createdAt: Date;
284
+ /**
285
+ * When container started (if running)
286
+ */
287
+ readonly startedAt?: Date;
288
+ }
289
+ /**
290
+ * Network information
291
+ */
292
+ export interface NetworkInfo {
293
+ /**
294
+ * Network ID
295
+ */
296
+ readonly id: string;
297
+ /**
298
+ * Network name
299
+ */
300
+ readonly name: string;
301
+ /**
302
+ * Network driver
303
+ */
304
+ readonly driver: string;
305
+ /**
306
+ * Whether network already existed
307
+ */
308
+ readonly preexisting: boolean;
309
+ }
310
+ /**
311
+ * Validation error for service configuration
312
+ */
313
+ export interface ServiceValidationError {
314
+ /**
315
+ * Service name
316
+ */
317
+ readonly service: string;
318
+ /**
319
+ * Field that failed validation
320
+ */
321
+ readonly field: string;
322
+ /**
323
+ * Error message
324
+ */
325
+ readonly message: string;
326
+ }
327
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/targets/local/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Local deployment target type definitions
3
+ *
4
+ * Types specific to local Docker/Podman deployment
5
+ *
6
+ * @module targets/local/types
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map