@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":"index.js","sourceRoot":"","sources":["../../../src/targets/akash/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiFG;AAEH,2CAA2C;AAC3C,+BAA+B;AAC/B,2CAA2C;AAE3C;;;;;;;;;;GAUG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAS9C,2CAA2C;AAC3C,uBAAuB;AACvB,2CAA2C;AAE3C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;;;;GAKG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;;GAIG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;;;;GAIG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;;GAIG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D;;;;GAIG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAWvD,2CAA2C;AAC3C,4BAA4B;AAC5B,2CAA2C;AAE3C;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D;;;;GAIG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;;;GAIG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;;;GAIG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAU7D,2CAA2C;AAC3C,2BAA2B;AAC3B,2CAA2C;AAE3C;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D;;;;;GAKG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;;;;GAKG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD;;;;;GAKG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD;;;;;GAKG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAgJzD;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AA8ChD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,2CAA2C;AAC3C,wBAAwB;AACxB,2CAA2C;AAE3C;;;;GAIG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;;;GAIG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;;;GAIG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;GAIG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAgB1D;;;;GAIG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAO9D;;;;GAIG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D;;;;GAIG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAWhE,2CAA2C;AAC3C,mBAAmB;AACnB,2CAA2C;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAY9C,2CAA2C;AAC3C,oBAAoB;AACpB,2CAA2C;AAE3C;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;;;GAKG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAOrD,2CAA2C;AAC3C,uBAAuB;AACvB,2CAA2C;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;;;GAKG;AACH,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,YAAY,GACb,MAAM,cAAc,CAAC;AAEtB,2CAA2C;AAC3C,iCAAiC;AACjC,2CAA2C;AAE3C;;;;;;;;;;GAUG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;GAIG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAOzD;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EACL,aAAa,EACb,WAAW,EACX,eAAe,EACf,aAAa,GACd,MAAM,gBAAgB,CAAC;AAUxB,2CAA2C;AAC3C,0BAA0B;AAC1B,2CAA2C;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D;;;;;GAKG;AACH,OAAO,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAwClF;;GAEG;AACH,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Lease Monitoring Helpers
3
+ *
4
+ * Polls the Akash blockchain and provider APIs until containers report as
5
+ * running. This mirrors the Akash Console behaviour but is packaged as a
6
+ * reusable library function with strong typing and explicit Result-based
7
+ * error handling.
8
+ *
9
+ * @module targets/akash/lease-monitor
10
+ */
11
+ import type { Result } from '../../types/index.js';
12
+ import type { DeploymentLogger } from '../../types/common.js';
13
+ import { ProviderError } from '../../errors/index.js';
14
+ import type { AkashProviderTlsCertificate } from './types.js';
15
+ import type { AkashNetwork } from './environment.js';
16
+ import { type LeaseDetails } from './query-client.js';
17
+ import { type ProviderLeaseStatus } from './provider-client.js';
18
+ /**
19
+ * Options for waiting until provider containers are running
20
+ */
21
+ export interface LeaseMonitorOptions {
22
+ /** Akash network in which the lease exists */
23
+ readonly network: AkashNetwork;
24
+ /** Lease identifiers (owner/provider/dseq/gseq/oseq) */
25
+ readonly lease: LeaseDetails;
26
+ /** Provider URI returned during deployment */
27
+ readonly providerUri: string;
28
+ /** TLS certificate bundle for mTLS authentication */
29
+ readonly certificate: AkashProviderTlsCertificate;
30
+ /**
31
+ * Poll interval in milliseconds
32
+ *
33
+ * @default 10000 (10 seconds)
34
+ */
35
+ readonly pollIntervalMs?: number;
36
+ /**
37
+ * Maximum time to wait before timing out (milliseconds)
38
+ *
39
+ * @default 600000 (10 minutes)
40
+ */
41
+ readonly maxWaitMs?: number;
42
+ /** Logger for human-friendly progress output */
43
+ readonly logger?: DeploymentLogger;
44
+ }
45
+ /**
46
+ * Polls both on-chain lease status and the provider status endpoint until all
47
+ * containers report `ready`. Returns the final provider status snapshot on
48
+ * success or a ProviderError on failure/timeout.
49
+ */
50
+ export declare function waitForContainersRunning(options: LeaseMonitorOptions): Promise<Result<ProviderLeaseStatus, ProviderError>>;
51
+ //# sourceMappingURL=lease-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lease-monitor.d.ts","sourceRoot":"","sources":["../../../src/targets/akash/lease-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EACL,aAAa,EAGd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,8CAA8C;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,qDAAqD;IACrD,QAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAC;IAClD;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;CACpC;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC,CAwFrD"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Lease Monitoring Helpers
3
+ *
4
+ * Polls the Akash blockchain and provider APIs until containers report as
5
+ * running. This mirrors the Akash Console behaviour but is packaged as a
6
+ * reusable library function with strong typing and explicit Result-based
7
+ * error handling.
8
+ *
9
+ * @module targets/akash/lease-monitor
10
+ */
11
+ import { setTimeout as delay } from 'node:timers/promises';
12
+ import { success, failure } from '../../types/index.js';
13
+ import { defaultLogger } from '../../utils/logger.js';
14
+ import { ProviderError, ProviderErrorCodes, containerTimeoutError, } from '../../errors/index.js';
15
+ import { getLeaseById, } from './query-client.js';
16
+ import { fetchProviderLeaseStatus, } from './provider-client.js';
17
+ /**
18
+ * Polls both on-chain lease status and the provider status endpoint until all
19
+ * containers report `ready`. Returns the final provider status snapshot on
20
+ * success or a ProviderError on failure/timeout.
21
+ */
22
+ export async function waitForContainersRunning(options) {
23
+ const { network, lease, providerUri, certificate, pollIntervalMs = 10_000, maxWaitMs = 600_000, logger = defaultLogger, } = options;
24
+ const start = Date.now();
25
+ let lastStatusSummary = '';
26
+ logger.log('🔍 Monitoring provider until containers report ready...');
27
+ while (Date.now() - start < maxWaitMs) {
28
+ // -----------------------------------------------------------------------
29
+ // Step 1: Confirm lease is still active on-chain
30
+ // -----------------------------------------------------------------------
31
+ const leaseResult = await getLeaseById(network, lease);
32
+ if (!leaseResult.success) {
33
+ return failure(new ProviderError('Failed to verify lease status on-chain', ProviderErrorCodes.PROVIDER_STATUS_ERROR, { network }, true, 'Retry the request after network connectivity is restored', 'error', leaseResult.error));
34
+ }
35
+ const currentLease = leaseResult.data;
36
+ if (currentLease.state.toLowerCase() === 'closed') {
37
+ return failure(new ProviderError('Lease has been closed while waiting for containers to start', ProviderErrorCodes.CONTAINER_START_FAILED, { lease: currentLease }, false, 'Inspect provider logs for failure details before retrying'));
38
+ }
39
+ // -----------------------------------------------------------------------
40
+ // Step 2: Query provider status endpoint via mTLS
41
+ // -----------------------------------------------------------------------
42
+ const statusResult = await fetchProviderLeaseStatus({
43
+ providerUri,
44
+ lease: toLeaseReference(lease),
45
+ certificate,
46
+ });
47
+ if (!statusResult.success) {
48
+ // Treat unreachable provider separately to surface clear cause
49
+ if (statusResult.error.code === ProviderErrorCodes.PROVIDER_UNREACHABLE) {
50
+ logger.warn('⚠️ Provider not yet reachable – retrying in a moment...');
51
+ }
52
+ else {
53
+ logger.warn(`⚠️ Provider reported error: ${statusResult.error.message}`);
54
+ }
55
+ await delay(pollIntervalMs);
56
+ continue;
57
+ }
58
+ const providerStatus = statusResult.data;
59
+ const summary = summariseServices(providerStatus);
60
+ if (summary !== lastStatusSummary && summary.length > 0) {
61
+ logger.log(` 📊 Service readiness: ${summary}`);
62
+ lastStatusSummary = summary;
63
+ }
64
+ if (allServicesReady(providerStatus)) {
65
+ logger.log('✅ Containers are reporting ready on the provider.');
66
+ return success(providerStatus);
67
+ }
68
+ await delay(pollIntervalMs);
69
+ }
70
+ // -------------------------------------------------------------------------
71
+ // Timeout reached without readiness
72
+ // -------------------------------------------------------------------------
73
+ return failure(containerTimeoutError('deployment', maxWaitMs));
74
+ }
75
+ /**
76
+ * Converts LeaseDetails into LeaseReference required by provider utilities.
77
+ */
78
+ function toLeaseReference(lease) {
79
+ return {
80
+ dseq: lease.dseq,
81
+ gseq: lease.gseq,
82
+ oseq: lease.oseq,
83
+ };
84
+ }
85
+ /**
86
+ * Generates a human-readable readiness summary for logging.
87
+ */
88
+ function summariseServices(status) {
89
+ const entries = Object.entries(status.services);
90
+ if (entries.length === 0) {
91
+ return '';
92
+ }
93
+ return entries
94
+ .map(([name, service]) => `${name}:${service.ready}/${Math.max(service.total, 1)}`)
95
+ .join(', ');
96
+ }
97
+ /**
98
+ * Determines if all services meet their requested replica counts.
99
+ */
100
+ function allServicesReady(status) {
101
+ const services = Object.values(status.services);
102
+ if (services.length === 0) {
103
+ return false;
104
+ }
105
+ return services.every((service) => {
106
+ const required = Math.max(service.total, 1);
107
+ return service.ready >= required;
108
+ });
109
+ }
110
+ //# sourceMappingURL=lease-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lease-monitor.js","sourceRoot":"","sources":["../../../src/targets/akash/lease-monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Akash Deployment Log Streaming
3
+ *
4
+ * Streams container logs from Akash provider using WebSocket with mTLS authentication.
5
+ * Inspired by Akash Console's log streaming implementation.
6
+ *
7
+ * @module targets/akash/logs
8
+ */
9
+ import type { StreamLogsOptions, GetLogsOptions, LogEntry, LogStream } from './logs.types.js';
10
+ /**
11
+ * Stream container logs from an Akash deployment in real-time
12
+ *
13
+ * Returns an EventEmitter that emits parsed log lines as they arrive.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const stream = streamDeploymentLogs({
18
+ * deployment: deploymentData,
19
+ * wallet: walletContext,
20
+ * certificate: certData,
21
+ * network: 'mainnet',
22
+ * services: ['ollama'],
23
+ * follow: true,
24
+ * tail: 100
25
+ * });
26
+ *
27
+ * stream.on('log', (log) => {
28
+ * console.log(`[${log.service}] ${log.message}`);
29
+ * });
30
+ *
31
+ * stream.on('connected', () => {
32
+ * console.log('Connected to provider');
33
+ * });
34
+ *
35
+ * stream.on('error', (error) => {
36
+ * console.error('Stream error:', error);
37
+ * });
38
+ *
39
+ * stream.on('end', () => {
40
+ * console.log('Stream ended');
41
+ * });
42
+ *
43
+ * // Stop streaming
44
+ * stream.close();
45
+ * ```
46
+ */
47
+ export declare function streamDeploymentLogs(options: StreamLogsOptions): LogStream;
48
+ /**
49
+ * Get deployment logs as a complete array (non-streaming)
50
+ *
51
+ * Useful for downloading full logs or one-time log retrieval.
52
+ * Connects, collects logs until maxLogs is reached or timeout occurs, then disconnects.
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * const logs = await getDeploymentLogs({
57
+ * deployment: deploymentData,
58
+ * wallet: walletContext,
59
+ * certificate: certData,
60
+ * network: 'mainnet',
61
+ * tail: 1000,
62
+ * maxLogs: 1000
63
+ * });
64
+ *
65
+ * logs.forEach(log => {
66
+ * console.log(`[${log.service}] ${log.message}`);
67
+ * });
68
+ * ```
69
+ */
70
+ export declare function getDeploymentLogs(options: GetLogsOptions): Promise<LogEntry[]>;
71
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/targets/akash/logs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,QAAQ,EACR,SAAS,EAEV,MAAM,iBAAiB,CAAC;AAmOzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,CAU1E;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,EAAE,CAAC,CA0CrB"}
@@ -0,0 +1,311 @@
1
+ /**
2
+ * Akash Deployment Log Streaming
3
+ *
4
+ * Streams container logs from Akash provider using WebSocket with mTLS authentication.
5
+ * Inspired by Akash Console's log streaming implementation.
6
+ *
7
+ * @module targets/akash/logs
8
+ */
9
+ import { EventEmitter } from 'node:events';
10
+ import WebSocket from 'ws';
11
+ import https from 'node:https';
12
+ import createDebug from 'debug';
13
+ import stripAnsi from 'strip-ansi';
14
+ // Initialize debug logging
15
+ // Usage: DEBUG=deploy-ability:logs:* to see log parsing details
16
+ const debug = createDebug('deploy-ability:logs');
17
+ /**
18
+ * Implementation of LogStream using EventEmitter
19
+ */
20
+ class LogStreamImpl extends EventEmitter {
21
+ options;
22
+ ws = null;
23
+ connected = false;
24
+ logger;
25
+ constructor(options) {
26
+ super();
27
+ this.options = options;
28
+ this.logger = options.logger;
29
+ }
30
+ /**
31
+ * Start the WebSocket connection and begin streaming
32
+ */
33
+ async start() {
34
+ const { deployment, certificate, services, follow, tail } = this.options;
35
+ // Extract lease information from deployment
36
+ const { dseq, gseq, oseq } = deployment;
37
+ const providerUri = deployment.providerUri;
38
+ // Build WebSocket URL
39
+ // Format: wss://{provider-host}/lease/{dseq}/{gseq}/{oseq}/logs
40
+ // Normalize provider URI by removing trailing slash to avoid double-slash path
41
+ // (e.g., "https://provider.example.com:8443/" → "wss://provider.example.com:8443")
42
+ const normalizedUri = providerUri.replace(/\/$/, ''); // Remove trailing slash
43
+ const wsUrl = normalizedUri.replace('https://', 'wss://');
44
+ let logsPath = `/lease/${dseq}/${gseq}/${oseq}/logs`;
45
+ // Add query parameters
46
+ const params = new URLSearchParams();
47
+ if (follow !== false) {
48
+ params.append('follow', 'true');
49
+ }
50
+ if (typeof tail === 'number') {
51
+ params.append('tail', tail.toString());
52
+ }
53
+ if (services && services.length > 0) {
54
+ params.append('service', services.join(','));
55
+ }
56
+ const fullUrl = `${wsUrl}${logsPath}?${params.toString()}`;
57
+ this.logger?.debug?.(`Connecting to: ${fullUrl}`);
58
+ // Create WebSocket with mTLS authentication
59
+ // We use the Akash certificate for client authentication
60
+ this.ws = new WebSocket(fullUrl, {
61
+ cert: certificate.cert,
62
+ key: certificate.privateKey,
63
+ agent: new https.Agent({
64
+ // Do not use TLS session resumption for websocket
65
+ sessionTimeout: 0,
66
+ // Accept self-signed certificates (Akash providers use self-signed certs)
67
+ rejectUnauthorized: false,
68
+ // Disable SNI for mTLS authentication
69
+ servername: ''
70
+ })
71
+ });
72
+ this.setupEventHandlers();
73
+ }
74
+ /**
75
+ * Setup WebSocket event handlers
76
+ */
77
+ setupEventHandlers() {
78
+ if (!this.ws)
79
+ return;
80
+ this.ws.on('open', () => {
81
+ this.logger?.debug?.('WebSocket connection established');
82
+ this.connected = true;
83
+ this.emit('connected');
84
+ });
85
+ this.ws.on('message', (data) => {
86
+ // handleMessage now handles parsing errors internally,
87
+ // so we don't need to wrap it in try/catch here
88
+ this.handleMessage(data);
89
+ });
90
+ this.ws.on('error', (error) => {
91
+ this.logger?.error?.(`WebSocket error: ${error.message}`);
92
+ this.emit('error', error);
93
+ });
94
+ this.ws.on('close', (code, reason) => {
95
+ this.logger?.debug?.(`WebSocket closed: ${code} ${reason.toString()}`);
96
+ this.connected = false;
97
+ this.emit('end');
98
+ });
99
+ }
100
+ /**
101
+ * Handle incoming WebSocket message
102
+ *
103
+ * Akash providers send messages in the format:
104
+ * {"name":"service-xyz-replica-hash","message":"timestamp log-level: actual log message"}
105
+ *
106
+ * When using tail parameter, provider may send:
107
+ * - Sentinel null frame: "null"
108
+ * - Batched messages: "null\n{...}\n{...}"
109
+ * - Concatenated: null{"name":"...","message":"..."}
110
+ * We handle these gracefully by parsing each line separately.
111
+ */
112
+ handleMessage(data) {
113
+ const text = data.toString().trim();
114
+ // Skip empty messages
115
+ if (!text) {
116
+ return;
117
+ }
118
+ // Log raw message for debugging
119
+ debug(`[RAW] ${text.substring(0, 200)}${text.length > 200 ? '...' : ''}`);
120
+ // Handle potentially batched messages (newline-separated)
121
+ // Provider may send multiple JSON objects separated by newlines
122
+ // When using tail, provider sends: null{"name":"...","message":"..."} (sentinel glued to JSON)
123
+ const lines = text.split('\n');
124
+ for (const line of lines) {
125
+ let trimmed = line.trim();
126
+ // Skip empty lines
127
+ if (!trimmed) {
128
+ continue;
129
+ }
130
+ // Strip leading "null" sentinel if present
131
+ // Provider concatenates null with first JSON chunk: null{"name":"...","message":"..."}
132
+ if (trimmed.startsWith('null')) {
133
+ debug(`[STRIP] Removing null prefix from: ${trimmed.substring(0, 50)}...`);
134
+ trimmed = trimmed.substring(4); // Remove "null" prefix
135
+ }
136
+ // Skip if nothing left after removing null
137
+ if (!trimmed) {
138
+ continue;
139
+ }
140
+ try {
141
+ // Parse JSON - provider sends: {"name":"service-replica","message":"log text"}
142
+ const logData = JSON.parse(trimmed);
143
+ if (!logData.name || !logData.message) {
144
+ debug('[SKIP] Missing name or message field');
145
+ continue;
146
+ }
147
+ // Strip ANSI color codes from message
148
+ // Provider logs contain codes like \u001b[32minfo\u001b[39m
149
+ const cleanMessage = stripAnsi(logData.message);
150
+ debug(`[PARSED] ${cleanMessage}`);
151
+ // Extract service name from full service name
152
+ // Format: "service-name-replica-hash" -> "service-name"
153
+ const serviceName = this.extractServiceName(logData.name);
154
+ // Create parsed log entry with cleaned message
155
+ const logEntry = {
156
+ service: serviceName,
157
+ message: cleanMessage,
158
+ raw: {
159
+ name: logData.name,
160
+ message: cleanMessage, // Use cleaned message
161
+ timestamp: logData.timestamp
162
+ },
163
+ receivedAt: new Date()
164
+ };
165
+ this.emit('log', logEntry);
166
+ }
167
+ catch (parseError) {
168
+ // Silently skip unparseable frames (e.g., null sentinel, malformed JSON)
169
+ // This matches Akash Console behavior
170
+ debug(`[ERROR] Skipping unparseable log frame: ${parseError instanceof Error ? parseError.message : 'Unknown error'}`);
171
+ }
172
+ }
173
+ }
174
+ /**
175
+ * Extract service name from full service name with replica suffix
176
+ *
177
+ * Examples:
178
+ * - "ollama-abc123" -> "ollama"
179
+ * - "vllm-xyz789" -> "vllm"
180
+ * - "gateway" -> "gateway"
181
+ */
182
+ extractServiceName(fullName) {
183
+ // Split by hyphen and take first part
184
+ // This works because Kubernetes appends replica hash after hyphen
185
+ const parts = fullName.split('-');
186
+ return parts[0] || fullName;
187
+ }
188
+ /**
189
+ * Close the WebSocket connection
190
+ */
191
+ close() {
192
+ if (this.ws) {
193
+ this.logger?.debug?.('Closing WebSocket connection');
194
+ this.ws.close();
195
+ this.ws = null;
196
+ this.connected = false;
197
+ }
198
+ }
199
+ /**
200
+ * Check if stream is currently connected
201
+ */
202
+ isConnected() {
203
+ return this.connected;
204
+ }
205
+ }
206
+ /**
207
+ * Stream container logs from an Akash deployment in real-time
208
+ *
209
+ * Returns an EventEmitter that emits parsed log lines as they arrive.
210
+ *
211
+ * @example
212
+ * ```typescript
213
+ * const stream = streamDeploymentLogs({
214
+ * deployment: deploymentData,
215
+ * wallet: walletContext,
216
+ * certificate: certData,
217
+ * network: 'mainnet',
218
+ * services: ['ollama'],
219
+ * follow: true,
220
+ * tail: 100
221
+ * });
222
+ *
223
+ * stream.on('log', (log) => {
224
+ * console.log(`[${log.service}] ${log.message}`);
225
+ * });
226
+ *
227
+ * stream.on('connected', () => {
228
+ * console.log('Connected to provider');
229
+ * });
230
+ *
231
+ * stream.on('error', (error) => {
232
+ * console.error('Stream error:', error);
233
+ * });
234
+ *
235
+ * stream.on('end', () => {
236
+ * console.log('Stream ended');
237
+ * });
238
+ *
239
+ * // Stop streaming
240
+ * stream.close();
241
+ * ```
242
+ */
243
+ export function streamDeploymentLogs(options) {
244
+ const stream = new LogStreamImpl(options);
245
+ // Start connection asynchronously
246
+ // Errors will be emitted via 'error' event
247
+ stream.start().catch((error) => {
248
+ stream.emit('error', error);
249
+ });
250
+ return stream;
251
+ }
252
+ /**
253
+ * Get deployment logs as a complete array (non-streaming)
254
+ *
255
+ * Useful for downloading full logs or one-time log retrieval.
256
+ * Connects, collects logs until maxLogs is reached or timeout occurs, then disconnects.
257
+ *
258
+ * @example
259
+ * ```typescript
260
+ * const logs = await getDeploymentLogs({
261
+ * deployment: deploymentData,
262
+ * wallet: walletContext,
263
+ * certificate: certData,
264
+ * network: 'mainnet',
265
+ * tail: 1000,
266
+ * maxLogs: 1000
267
+ * });
268
+ *
269
+ * logs.forEach(log => {
270
+ * console.log(`[${log.service}] ${log.message}`);
271
+ * });
272
+ * ```
273
+ */
274
+ export async function getDeploymentLogs(options) {
275
+ const { maxLogs = 1000, timeout = 30000 } = options;
276
+ const logs = [];
277
+ return new Promise((resolve, reject) => {
278
+ // Create stream with follow disabled
279
+ const stream = streamDeploymentLogs({
280
+ ...options,
281
+ follow: false
282
+ });
283
+ // Set timeout
284
+ const timeoutId = setTimeout(() => {
285
+ stream.close();
286
+ resolve(logs);
287
+ }, timeout);
288
+ // Collect logs
289
+ stream.on('log', (log) => {
290
+ logs.push(log);
291
+ // Stop if we've collected enough logs
292
+ if (logs.length >= maxLogs) {
293
+ clearTimeout(timeoutId);
294
+ stream.close();
295
+ resolve(logs);
296
+ }
297
+ });
298
+ // Handle errors
299
+ stream.on('error', (error) => {
300
+ clearTimeout(timeoutId);
301
+ stream.close();
302
+ reject(error);
303
+ });
304
+ // Handle end (stream closed naturally)
305
+ stream.on('end', () => {
306
+ clearTimeout(timeoutId);
307
+ resolve(logs);
308
+ });
309
+ });
310
+ }
311
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/targets/akash/logs.ts"],"names":[],"mappings":"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"}