@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 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/utils/registry/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Registry Setup
3
+ *
4
+ * Main entry point for setting up temporary registry infrastructure for local images.
5
+ * Automatically detects local images and makes them accessible to Akash providers.
6
+ *
7
+ * @module utils/registry/setup
8
+ */
9
+ import type { DeploymentLogger } from '../../types/common.js';
10
+ import type { AkashDeploymentProfile } from '../../types/profiles.js';
11
+ import type { RegistryContext, RegistryOptions } from './types.js';
12
+ /**
13
+ * Setup temporary registry infrastructure if profile uses local images
14
+ *
15
+ * **Automatic Detection:**
16
+ * This function automatically detects if your profile references local container images
17
+ * (images that exist on your machine but not in a public registry). If local images
18
+ * are found, it starts a temporary registry, pushes the images, and exposes them
19
+ * publicly so Akash providers can pull them during deployment.
20
+ *
21
+ * **Three Possible Outcomes:**
22
+ * 1. **No local images** → Returns profile unchanged, no registry started
23
+ * 2. **User opted out** → Returns profile unchanged (useRemoteRegistry: true)
24
+ * 3. **Local images found** → Starts registry, transforms profile, returns cleanup function
25
+ *
26
+ * **How It Works:**
27
+ * 1. Checks if user opted out via `useRemoteRegistry: true`
28
+ * 2. Scans each service image with `docker images -q <image>`
29
+ * 3. If local images exist:
30
+ * - Starts registry container on localhost
31
+ * - Pushes local images to registry
32
+ * - Exposes registry via tunnel (ngrok/serveo/bore)
33
+ * - Rewrites profile to use public registry URLs
34
+ * 4. Returns `RegistryContext` with transformed profile and cleanup function
35
+ *
36
+ * **Cleanup:**
37
+ * Always call the returned `cleanup()` function after deployment completes.
38
+ * This shuts down the registry and frees resources. Use a finally block to
39
+ * ensure cleanup happens even if deployment fails.
40
+ *
41
+ * @param profile - Deployment profile from agent.json
42
+ * @param logger - Logger for progress messages
43
+ * @param options - Registry configuration options
44
+ * @returns Registry context with transformed profile and cleanup function
45
+ *
46
+ * @example No local images (no registry needed)
47
+ * ```typescript
48
+ * const profile = {
49
+ * target: 'akash',
50
+ * network: 'mainnet',
51
+ * services: {
52
+ * app: { image: 'nginx:latest' } // Remote image
53
+ * }
54
+ * };
55
+ *
56
+ * const ctx = await setupRegistryIfNeeded(profile, logger);
57
+ * // ctx.deployableProfile === profile (unchanged)
58
+ * // ctx.cleanup() is a no-op
59
+ * ```
60
+ *
61
+ * @example Local images detected (registry started)
62
+ * ```typescript
63
+ * const profile = {
64
+ * target: 'akash',
65
+ * network: 'mainnet',
66
+ * services: {
67
+ * app: { image: 'my-app:latest' } // Local image
68
+ * }
69
+ * };
70
+ *
71
+ * const ctx = await setupRegistryIfNeeded(profile, logger);
72
+ * // Registry started, image pushed, profile transformed
73
+ * // ctx.deployableProfile.services.app.image === 'xyz.serveo.net/my-app:latest'
74
+ *
75
+ * try {
76
+ * await deployToAkash({
77
+ * loadedProfile: { profile: ctx.deployableProfile }
78
+ * });
79
+ * } finally {
80
+ * await ctx.cleanup(); // Always cleanup
81
+ * }
82
+ * ```
83
+ *
84
+ * @example User opted out (manual registry management)
85
+ * ```typescript
86
+ * const ctx = await setupRegistryIfNeeded(profile, logger, {
87
+ * useRemoteRegistry: true
88
+ * });
89
+ * // No registry started - user manually pushed images
90
+ * // ctx.deployableProfile === profile (unchanged)
91
+ * ```
92
+ */
93
+ export declare function setupRegistryIfNeeded(profile: AkashDeploymentProfile, logger: DeploymentLogger, options?: RegistryOptions): Promise<RegistryContext>;
94
+ /**
95
+ * Check if profile contains any local container images
96
+ *
97
+ * **Reality-Based Detection:**
98
+ * Instead of guessing based on image name patterns, we check if images
99
+ * actually exist locally using `docker images -q <image>` or `podman images -q <image>`.
100
+ *
101
+ * **Why This is Better:**
102
+ * - **Accurate**: Checks reality, not heuristics
103
+ * - **Simple**: One check instead of multiple name pattern conditions
104
+ * - **Handles edge cases**: "nginx" looks local but is on Docker Hub
105
+ *
106
+ * **Why This Matters:**
107
+ * If this returns true, we start the temporary registry infrastructure
108
+ * (tunnel, registry container). We should only do this when there are ACTUAL local
109
+ * images that need to be made publicly accessible.
110
+ *
111
+ * **Performance:**
112
+ * Runs a shell command for each service image. This is fast (< 100ms per image)
113
+ * and necessary to get accurate results. The alternative (name-based guessing)
114
+ * would lead to false positives and unnecessary infrastructure startup.
115
+ *
116
+ * @param profile - Deployment profile to check
117
+ * @param engine - Container engine to use for checking
118
+ * @returns True if profile has any images that exist locally
119
+ *
120
+ * @example
121
+ * ```typescript
122
+ * const profile = {
123
+ * services: {
124
+ * app: { image: 'my-app:latest' }, // If exists locally: true
125
+ * db: { image: 'postgres:14' } // If not local: false
126
+ * }
127
+ * };
128
+ *
129
+ * const hasLocal = hasLocalImages(profile, 'docker');
130
+ * // true if my-app:latest exists in local Docker images
131
+ * // false if only remote images present
132
+ * ```
133
+ */
134
+ export declare function hasLocalImages(profile: AkashDeploymentProfile, engine?: 'docker' | 'podman'): boolean;
135
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/utils/registry/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAInE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgFG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,sBAAsB,EAC/B,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,eAAe,CAAC,CA2D1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,sBAAsB,EAC/B,MAAM,GAAE,QAAQ,GAAG,QAAmB,GACrC,OAAO,CAoBT"}
@@ -0,0 +1,207 @@
1
+ /**
2
+ * Registry Setup
3
+ *
4
+ * Main entry point for setting up temporary registry infrastructure for local images.
5
+ * Automatically detects local images and makes them accessible to Akash providers.
6
+ *
7
+ * @module utils/registry/setup
8
+ */
9
+ import { execSync } from 'node:child_process';
10
+ import { TemporaryContainerRegistryManager } from './manager.js';
11
+ import { transformProfileWithRegistry } from './transformer.js';
12
+ /**
13
+ * Setup temporary registry infrastructure if profile uses local images
14
+ *
15
+ * **Automatic Detection:**
16
+ * This function automatically detects if your profile references local container images
17
+ * (images that exist on your machine but not in a public registry). If local images
18
+ * are found, it starts a temporary registry, pushes the images, and exposes them
19
+ * publicly so Akash providers can pull them during deployment.
20
+ *
21
+ * **Three Possible Outcomes:**
22
+ * 1. **No local images** → Returns profile unchanged, no registry started
23
+ * 2. **User opted out** → Returns profile unchanged (useRemoteRegistry: true)
24
+ * 3. **Local images found** → Starts registry, transforms profile, returns cleanup function
25
+ *
26
+ * **How It Works:**
27
+ * 1. Checks if user opted out via `useRemoteRegistry: true`
28
+ * 2. Scans each service image with `docker images -q <image>`
29
+ * 3. If local images exist:
30
+ * - Starts registry container on localhost
31
+ * - Pushes local images to registry
32
+ * - Exposes registry via tunnel (ngrok/serveo/bore)
33
+ * - Rewrites profile to use public registry URLs
34
+ * 4. Returns `RegistryContext` with transformed profile and cleanup function
35
+ *
36
+ * **Cleanup:**
37
+ * Always call the returned `cleanup()` function after deployment completes.
38
+ * This shuts down the registry and frees resources. Use a finally block to
39
+ * ensure cleanup happens even if deployment fails.
40
+ *
41
+ * @param profile - Deployment profile from agent.json
42
+ * @param logger - Logger for progress messages
43
+ * @param options - Registry configuration options
44
+ * @returns Registry context with transformed profile and cleanup function
45
+ *
46
+ * @example No local images (no registry needed)
47
+ * ```typescript
48
+ * const profile = {
49
+ * target: 'akash',
50
+ * network: 'mainnet',
51
+ * services: {
52
+ * app: { image: 'nginx:latest' } // Remote image
53
+ * }
54
+ * };
55
+ *
56
+ * const ctx = await setupRegistryIfNeeded(profile, logger);
57
+ * // ctx.deployableProfile === profile (unchanged)
58
+ * // ctx.cleanup() is a no-op
59
+ * ```
60
+ *
61
+ * @example Local images detected (registry started)
62
+ * ```typescript
63
+ * const profile = {
64
+ * target: 'akash',
65
+ * network: 'mainnet',
66
+ * services: {
67
+ * app: { image: 'my-app:latest' } // Local image
68
+ * }
69
+ * };
70
+ *
71
+ * const ctx = await setupRegistryIfNeeded(profile, logger);
72
+ * // Registry started, image pushed, profile transformed
73
+ * // ctx.deployableProfile.services.app.image === 'xyz.serveo.net/my-app:latest'
74
+ *
75
+ * try {
76
+ * await deployToAkash({
77
+ * loadedProfile: { profile: ctx.deployableProfile }
78
+ * });
79
+ * } finally {
80
+ * await ctx.cleanup(); // Always cleanup
81
+ * }
82
+ * ```
83
+ *
84
+ * @example User opted out (manual registry management)
85
+ * ```typescript
86
+ * const ctx = await setupRegistryIfNeeded(profile, logger, {
87
+ * useRemoteRegistry: true
88
+ * });
89
+ * // No registry started - user manually pushed images
90
+ * // ctx.deployableProfile === profile (unchanged)
91
+ * ```
92
+ */
93
+ export async function setupRegistryIfNeeded(profile, logger, options = {}) {
94
+ // User explicitly wants to use remote registry
95
+ // Skip all registry infrastructure and assume images are already pushed
96
+ if (options.useRemoteRegistry) {
97
+ logger.log('📡 Using remote registry (local registry disabled)');
98
+ logger.log('⚠️ Ensure all images are pushed to a remote registry!');
99
+ return {
100
+ deployableProfile: profile,
101
+ cleanup: async () => { } // No cleanup needed
102
+ };
103
+ }
104
+ // Check if any services use local images
105
+ // Uses reality-based detection (docker images -q) to check actual existence
106
+ const engine = options.containerEngine || 'docker';
107
+ if (!hasLocalImages(profile, engine)) {
108
+ // All images are remote (docker.io/nginx, ghcr.io/owner/repo, etc.)
109
+ // No registry needed - providers can pull directly
110
+ return {
111
+ deployableProfile: profile,
112
+ cleanup: async () => { } // No cleanup needed
113
+ };
114
+ }
115
+ // Profile has local images - start registry infrastructure
116
+ logger.log('🔧 Local images detected - setting up temporary registry...');
117
+ const manager = new TemporaryContainerRegistryManager(logger);
118
+ await manager.startTemporaryRegistry({
119
+ port: options.port || 3000,
120
+ tunnelService: options.tunnelService || 'serveo',
121
+ containerEngine: engine,
122
+ registryDuration: options.registryDuration || 600000, // 10 minutes default
123
+ autoShutdown: options.autoShutdown ?? false, // Manual cleanup by default
124
+ tunnelAuthToken: options.tunnelAuthToken,
125
+ tunnelRegion: options.tunnelRegion,
126
+ tunnelProtocol: options.tunnelProtocol,
127
+ tunnelSubdomain: options.tunnelSubdomain
128
+ });
129
+ // Push local images to registry
130
+ await manager.addLocalImagesToTemporaryRegistry(profile, engine);
131
+ // Transform profile: "my-app" → "abc123.serveo.net/my-app:latest"
132
+ const deployableProfile = transformProfileWithRegistry(profile, manager);
133
+ // Return context with cleanup function
134
+ return {
135
+ deployableProfile,
136
+ cleanup: async () => {
137
+ if (manager.isRunning()) {
138
+ logger.log('🛑 Shutting down temporary registry...');
139
+ await manager.stopTemporaryRegistry();
140
+ logger.log('✅ Temporary registry shut down');
141
+ }
142
+ }
143
+ };
144
+ }
145
+ /**
146
+ * Check if profile contains any local container images
147
+ *
148
+ * **Reality-Based Detection:**
149
+ * Instead of guessing based on image name patterns, we check if images
150
+ * actually exist locally using `docker images -q <image>` or `podman images -q <image>`.
151
+ *
152
+ * **Why This is Better:**
153
+ * - **Accurate**: Checks reality, not heuristics
154
+ * - **Simple**: One check instead of multiple name pattern conditions
155
+ * - **Handles edge cases**: "nginx" looks local but is on Docker Hub
156
+ *
157
+ * **Why This Matters:**
158
+ * If this returns true, we start the temporary registry infrastructure
159
+ * (tunnel, registry container). We should only do this when there are ACTUAL local
160
+ * images that need to be made publicly accessible.
161
+ *
162
+ * **Performance:**
163
+ * Runs a shell command for each service image. This is fast (< 100ms per image)
164
+ * and necessary to get accurate results. The alternative (name-based guessing)
165
+ * would lead to false positives and unnecessary infrastructure startup.
166
+ *
167
+ * @param profile - Deployment profile to check
168
+ * @param engine - Container engine to use for checking
169
+ * @returns True if profile has any images that exist locally
170
+ *
171
+ * @example
172
+ * ```typescript
173
+ * const profile = {
174
+ * services: {
175
+ * app: { image: 'my-app:latest' }, // If exists locally: true
176
+ * db: { image: 'postgres:14' } // If not local: false
177
+ * }
178
+ * };
179
+ *
180
+ * const hasLocal = hasLocalImages(profile, 'docker');
181
+ * // true if my-app:latest exists in local Docker images
182
+ * // false if only remote images present
183
+ * ```
184
+ */
185
+ export function hasLocalImages(profile, engine = 'docker') {
186
+ if (!profile.services)
187
+ return false;
188
+ return Object.values(profile.services).some((service) => {
189
+ const image = service.image;
190
+ if (!image)
191
+ return false;
192
+ try {
193
+ // Check if image exists locally using container engine
194
+ // Returns image hash if exists, empty string if not
195
+ const result = execSync(`${engine} images -q ${image}`, {
196
+ encoding: 'utf8',
197
+ stdio: ['pipe', 'pipe', 'pipe'] // Suppress stderr to avoid noise
198
+ });
199
+ return result.trim().length > 0;
200
+ }
201
+ catch (error) {
202
+ // Image doesn't exist locally or engine unavailable
203
+ return false;
204
+ }
205
+ });
206
+ }
207
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/utils/registry/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Profile Transformer
3
+ *
4
+ * Transforms deployment profiles to use temporary registry URLs for local images.
5
+ * Replaces local image references with public registry URLs and adds authentication
6
+ * credentials.
7
+ *
8
+ * @module utils/registry/transformer
9
+ */
10
+ import type { AkashDeploymentProfile } from '../../types/profiles.js';
11
+ import type { TemporaryContainerRegistryManager } from './manager.js';
12
+ /**
13
+ * Transform profile to use registry URLs for local images
14
+ *
15
+ * Creates a new profile object where:
16
+ * - Local image references are replaced with public registry URLs
17
+ * - Registry credentials are added to each service with local images
18
+ * - Remote images remain unchanged
19
+ *
20
+ * **Deep Clone:**
21
+ * Creates a deep copy of the profile to avoid mutating the original. This is
22
+ * important because the original profile might be used for other purposes or
23
+ * stored for future reference.
24
+ *
25
+ * **Transformation Logic:**
26
+ * For each service in the profile:
27
+ * 1. Check if manager has a registry URL for this image (indicates it's local)
28
+ * 2. If yes: Replace image with registry URL and add credentials
29
+ * 3. If no: Leave image unchanged (it's remote or wasn't processed)
30
+ *
31
+ * @param profile - Original deployment profile
32
+ * @param manager - Registry manager with image mappings and credentials
33
+ * @returns Transformed profile ready for deployment
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * const original = {
38
+ * target: 'akash',
39
+ * services: {
40
+ * app: { image: 'my-app:latest' }, // Local image
41
+ * db: { image: 'postgres:14' } // Remote image
42
+ * }
43
+ * };
44
+ *
45
+ * const transformed = transformProfileWithRegistry(original, manager);
46
+ * // Result:
47
+ * // {
48
+ * // target: 'akash',
49
+ * // services: {
50
+ * // app: {
51
+ * // image: 'abc123.serveo.net/my-app:latest',
52
+ * // credentials: { host: '...', username: '...', password: '...' }
53
+ * // },
54
+ * // db: { image: 'postgres:14' } // Unchanged - remote image
55
+ * // }
56
+ * // }
57
+ * ```
58
+ */
59
+ export declare function transformProfileWithRegistry(profile: AkashDeploymentProfile, manager: TemporaryContainerRegistryManager): AkashDeploymentProfile;
60
+ /**
61
+ * Check if an image appears to be local based on name patterns
62
+ *
63
+ * **Heuristic-Based Detection:**
64
+ * Checks image name patterns to guess if an image is local:
65
+ * - No "/" → Likely local (e.g., "my-app")
66
+ * - Starts with "localhost/" → Definitely local
67
+ * - Starts with "127.0.0.1/" → Definitely local
68
+ * - Contains "/" → Likely remote (e.g., "docker.io/nginx", "ghcr.io/owner/repo")
69
+ *
70
+ * **Note:** This is a heuristic and can be wrong!
71
+ * - "nginx" looks local but is actually on Docker Hub
72
+ * - "myregistry.com/app" looks remote but might not exist
73
+ *
74
+ * **Reality-Based Detection is Better:**
75
+ * The manager uses `docker images -q` to check actual existence, which is more
76
+ * accurate. This function is provided as a fallback for quick checks without
77
+ * shelling out to the container engine.
78
+ *
79
+ * @param image - Image name to check
80
+ * @returns True if image appears to be local based on naming patterns
81
+ *
82
+ * @example
83
+ * ```typescript
84
+ * isLocalImagePattern('my-app'); // true - no slash
85
+ * isLocalImagePattern('localhost/my-app'); // true - localhost prefix
86
+ * isLocalImagePattern('nginx:latest'); // true - no slash (but wrong!)
87
+ * isLocalImagePattern('docker.io/nginx'); // false - has registry domain
88
+ * isLocalImagePattern('ghcr.io/owner/repo'); // false - has registry domain
89
+ * ```
90
+ */
91
+ export declare function isLocalImagePattern(image: string): boolean;
92
+ //# sourceMappingURL=transformer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../../src/utils/registry/transformer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,cAAc,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,iCAAiC,GACzC,sBAAsB,CA0CxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAS1D"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Profile Transformer
3
+ *
4
+ * Transforms deployment profiles to use temporary registry URLs for local images.
5
+ * Replaces local image references with public registry URLs and adds authentication
6
+ * credentials.
7
+ *
8
+ * @module utils/registry/transformer
9
+ */
10
+ /**
11
+ * Transform profile to use registry URLs for local images
12
+ *
13
+ * Creates a new profile object where:
14
+ * - Local image references are replaced with public registry URLs
15
+ * - Registry credentials are added to each service with local images
16
+ * - Remote images remain unchanged
17
+ *
18
+ * **Deep Clone:**
19
+ * Creates a deep copy of the profile to avoid mutating the original. This is
20
+ * important because the original profile might be used for other purposes or
21
+ * stored for future reference.
22
+ *
23
+ * **Transformation Logic:**
24
+ * For each service in the profile:
25
+ * 1. Check if manager has a registry URL for this image (indicates it's local)
26
+ * 2. If yes: Replace image with registry URL and add credentials
27
+ * 3. If no: Leave image unchanged (it's remote or wasn't processed)
28
+ *
29
+ * @param profile - Original deployment profile
30
+ * @param manager - Registry manager with image mappings and credentials
31
+ * @returns Transformed profile ready for deployment
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * const original = {
36
+ * target: 'akash',
37
+ * services: {
38
+ * app: { image: 'my-app:latest' }, // Local image
39
+ * db: { image: 'postgres:14' } // Remote image
40
+ * }
41
+ * };
42
+ *
43
+ * const transformed = transformProfileWithRegistry(original, manager);
44
+ * // Result:
45
+ * // {
46
+ * // target: 'akash',
47
+ * // services: {
48
+ * // app: {
49
+ * // image: 'abc123.serveo.net/my-app:latest',
50
+ * // credentials: { host: '...', username: '...', password: '...' }
51
+ * // },
52
+ * // db: { image: 'postgres:14' } // Unchanged - remote image
53
+ * // }
54
+ * // }
55
+ * ```
56
+ */
57
+ export function transformProfileWithRegistry(profile, manager) {
58
+ // Deep clone to avoid mutating original profile
59
+ // Using JSON.parse/JSON.stringify is simple and safe here because:
60
+ // 1. Profile is a plain data object (no functions, symbols, etc.)
61
+ // 2. We want a complete deep copy
62
+ // 3. Any special objects have already been validated by Zod schemas
63
+ const transformed = JSON.parse(JSON.stringify(profile));
64
+ // Get registry credentials (same for all services)
65
+ const credentials = manager.getRegistryCredentials();
66
+ // Transform each service
67
+ for (const [serviceName, service] of Object.entries(transformed.services)) {
68
+ const originalImage = service.image;
69
+ // Check if this image was added to the registry (indicates it's local)
70
+ const registryUrl = manager.getPublicImageUrl(serviceName, originalImage);
71
+ if (registryUrl) {
72
+ // Local image - replace with registry URL
73
+ // TODO: Fix deploy-ability types to provide mutable service configs
74
+ // Currently BaseServiceConfig uses readonly properties which prevents
75
+ // legitimate mutations on cloned objects. We work with plain objects
76
+ // after JSON.parse, so this is safe at runtime.
77
+ const mutableService = service;
78
+ mutableService.image = registryUrl;
79
+ // Add registry credentials if available
80
+ if (credentials) {
81
+ mutableService.credentials = {
82
+ host: credentials.host,
83
+ username: credentials.username,
84
+ password: credentials.password
85
+ };
86
+ }
87
+ }
88
+ // else: Remote image - leave unchanged
89
+ }
90
+ return transformed;
91
+ }
92
+ /**
93
+ * Check if an image appears to be local based on name patterns
94
+ *
95
+ * **Heuristic-Based Detection:**
96
+ * Checks image name patterns to guess if an image is local:
97
+ * - No "/" → Likely local (e.g., "my-app")
98
+ * - Starts with "localhost/" → Definitely local
99
+ * - Starts with "127.0.0.1/" → Definitely local
100
+ * - Contains "/" → Likely remote (e.g., "docker.io/nginx", "ghcr.io/owner/repo")
101
+ *
102
+ * **Note:** This is a heuristic and can be wrong!
103
+ * - "nginx" looks local but is actually on Docker Hub
104
+ * - "myregistry.com/app" looks remote but might not exist
105
+ *
106
+ * **Reality-Based Detection is Better:**
107
+ * The manager uses `docker images -q` to check actual existence, which is more
108
+ * accurate. This function is provided as a fallback for quick checks without
109
+ * shelling out to the container engine.
110
+ *
111
+ * @param image - Image name to check
112
+ * @returns True if image appears to be local based on naming patterns
113
+ *
114
+ * @example
115
+ * ```typescript
116
+ * isLocalImagePattern('my-app'); // true - no slash
117
+ * isLocalImagePattern('localhost/my-app'); // true - localhost prefix
118
+ * isLocalImagePattern('nginx:latest'); // true - no slash (but wrong!)
119
+ * isLocalImagePattern('docker.io/nginx'); // false - has registry domain
120
+ * isLocalImagePattern('ghcr.io/owner/repo'); // false - has registry domain
121
+ * ```
122
+ */
123
+ export function isLocalImagePattern(image) {
124
+ if (!image)
125
+ return false;
126
+ // Local images typically don't contain registry domains or start with localhost
127
+ return (!image.includes('/') ||
128
+ image.startsWith('localhost/') ||
129
+ image.startsWith('127.0.0.1/'));
130
+ }
131
+ //# sourceMappingURL=transformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformer.js","sourceRoot":"","sources":["../../../src/utils/registry/transformer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAM,UAAU,4BAA4B,CAC1C,OAA+B,EAC/B,OAA0C;IAE1C,gDAAgD;IAChD,mEAAmE;IACnE,kEAAkE;IAClE,kCAAkC;IAClC,oEAAoE;IACpE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CACE,CAAC;IAE5B,mDAAmD;IACnD,MAAM,WAAW,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAErD,yBAAyB;IACzB,KAAK,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1E,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;QAEpC,uEAAuE;QACvE,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAE1E,IAAI,WAAW,EAAE,CAAC;YAChB,0CAA0C;YAC1C,oEAAoE;YACpE,sEAAsE;YACtE,qEAAqE;YACrE,gDAAgD;YAChD,MAAM,cAAc,GAAG,OAAc,CAAC;YACtC,cAAc,CAAC,KAAK,GAAG,WAAW,CAAC;YAEnC,wCAAwC;YACxC,IAAI,WAAW,EAAE,CAAC;gBAChB,cAAc,CAAC,WAAW,GAAG;oBAC3B,IAAI,EAAE,WAAW,CAAC,IAAI;oBACtB,QAAQ,EAAE,WAAW,CAAC,QAAQ;oBAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;iBAC/B,CAAC;YACJ,CAAC;QACH,CAAC;QACD,uCAAuC;IACzC,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAEzB,gFAAgF;IAChF,OAAO,CACL,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QACpB,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC;QAC9B,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAC/B,CAAC;AACJ,CAAC"}