@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,114 @@
1
+ /**
2
+ * Akash Provider Client Utilities
3
+ *
4
+ * This module contains helper functions for interacting with Akash providers
5
+ * over HTTPS after a lease has been created on-chain. Responsibilities include:
6
+ *
7
+ * 1. Delivering the deployment manifest to the selected provider via mTLS
8
+ * 2. Querying provider status endpoints to monitor container readiness
9
+ *
10
+ * Design principles:
11
+ * - All operations return Result<T, DeploymentError> for explicit error handling
12
+ * - No `any` usage – every response is normalised into typed objects
13
+ * - Verbose comments explaining each stage for maintainability
14
+ *
15
+ * @module targets/akash/provider-client
16
+ */
17
+ import type { Result } from '../../types/index.js';
18
+ import { ProviderError } from '../../errors/index.js';
19
+ import type { AkashProviderTlsCertificate } from './types.js';
20
+ /**
21
+ * Minimal lease identifier required for provider API operations
22
+ */
23
+ export interface LeaseReference {
24
+ /** Deployment sequence number */
25
+ readonly dseq: string | number;
26
+ /** Group sequence number */
27
+ readonly gseq: number;
28
+ /** Order sequence number */
29
+ readonly oseq: number;
30
+ }
31
+ /**
32
+ * Options for manifest delivery
33
+ */
34
+ export interface ManifestDeliveryOptions {
35
+ /** Provider HTTPS endpoint (e.g., https://provider.example.com:8443) */
36
+ readonly providerUri: string;
37
+ /** Lease reference identifying the deployment */
38
+ readonly lease: LeaseReference;
39
+ /** SDL manifest encoded as JSON (sorted output from akashjs) */
40
+ readonly manifest: string;
41
+ /** Certificate bundle for mutual TLS authentication */
42
+ readonly certificate: AkashProviderTlsCertificate;
43
+ /** Request timeout in milliseconds (default: 30s) */
44
+ readonly timeoutMs?: number;
45
+ }
46
+ /**
47
+ * Status information for a single service reported by the provider
48
+ */
49
+ export interface ProviderServiceStatus {
50
+ readonly name: string;
51
+ readonly available: number;
52
+ readonly total: number;
53
+ readonly ready: number;
54
+ readonly uris: readonly string[];
55
+ }
56
+ /**
57
+ * Forwarded port definition (useful when provider maps ports externally)
58
+ */
59
+ export interface ProviderForwardedPort {
60
+ readonly port: number;
61
+ readonly externalPort: number;
62
+ readonly host: string;
63
+ readonly available: number;
64
+ }
65
+ /**
66
+ * Assigned IP metadata reported by provider
67
+ */
68
+ export interface ProviderAssignedIp {
69
+ readonly ip: string;
70
+ readonly port: number;
71
+ readonly externalPort: number;
72
+ readonly protocol: string;
73
+ }
74
+ /**
75
+ * Normalised provider lease status response
76
+ */
77
+ export interface ProviderLeaseStatus {
78
+ readonly services: Readonly<Record<string, ProviderServiceStatus>>;
79
+ readonly forwardedPorts?: Readonly<Record<string, readonly ProviderForwardedPort[]>>;
80
+ readonly assignedIps?: Readonly<Record<string, readonly ProviderAssignedIp[]>>;
81
+ }
82
+ /**
83
+ * Options for querying provider container status
84
+ */
85
+ export interface ProviderStatusOptions {
86
+ readonly providerUri: string;
87
+ readonly lease: LeaseReference;
88
+ readonly certificate: AkashProviderTlsCertificate;
89
+ readonly timeoutMs?: number;
90
+ }
91
+ /**
92
+ * Sends the deployment manifest to the provider over mTLS.
93
+ *
94
+ * The provider uses this manifest to start containers for the newly created lease.
95
+ * The workflow mirrors the steps outlined in the Akash Console deployment flow.
96
+ *
97
+ * Steps performed:
98
+ * 1. Validate and normalise the provider URI (must be HTTPS)
99
+ * 2. Construct the manifest delivery path `/deployment/{dseq}/manifest`
100
+ * 3. Send a PUT request with the manifest JSON using mutual TLS authentication
101
+ * 4. Resolve with a success Result when the provider accepts the manifest
102
+ *
103
+ * @param options - Manifest delivery configuration
104
+ * @returns Result signalling success or a ProviderError on failure
105
+ */
106
+ export declare function sendManifestToProvider(options: ManifestDeliveryOptions): Promise<Result<void, ProviderError>>;
107
+ /**
108
+ * Queries the provider status endpoint for container readiness information.
109
+ *
110
+ * @param options - Provider status request configuration
111
+ * @returns Result containing normalised provider status data
112
+ */
113
+ export declare function fetchProviderLeaseStatus(options: ProviderStatusOptions): Promise<Result<ProviderLeaseStatus, ProviderError>>;
114
+ //# sourceMappingURL=provider-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-client.d.ts","sourceRoot":"","sources":["../../../src/targets/akash/provider-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGnD,OAAO,EACL,aAAa,EAId,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,iCAAiC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,4BAA4B;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4BAA4B;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,QAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAC;IAClD,qDAAqD;IACrD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACnE,QAAQ,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,qBAAqB,EAAE,CAAC,CAAC,CAAC;IACrF,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,kBAAkB,EAAE,CAAC,CAAC,CAAC;CAChF;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAC;IAClD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAyCD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CA4FtC;AAmKD;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC,CAmDrD"}
@@ -0,0 +1,318 @@
1
+ /**
2
+ * Akash Provider Client Utilities
3
+ *
4
+ * This module contains helper functions for interacting with Akash providers
5
+ * over HTTPS after a lease has been created on-chain. Responsibilities include:
6
+ *
7
+ * 1. Delivering the deployment manifest to the selected provider via mTLS
8
+ * 2. Querying provider status endpoints to monitor container readiness
9
+ *
10
+ * Design principles:
11
+ * - All operations return Result<T, DeploymentError> for explicit error handling
12
+ * - No `any` usage – every response is normalised into typed objects
13
+ * - Verbose comments explaining each stage for maintainability
14
+ *
15
+ * @module targets/akash/provider-client
16
+ */
17
+ import https from 'node:https';
18
+ import { URL } from 'node:url';
19
+ import axios from 'axios';
20
+ import { success, failure } from '../../types/index.js';
21
+ import { ProviderError, ProviderErrorCodes, providerUnreachableError, manifestRejectedError, } from '../../errors/index.js';
22
+ /**
23
+ * Normalises a provider URI string and ensures it uses HTTPS.
24
+ */
25
+ function normaliseProviderUri(uri) {
26
+ const parsed = new URL(uri);
27
+ if (parsed.protocol !== 'https:') {
28
+ throw new ProviderError(`Provider URI must use HTTPS: ${uri}`, ProviderErrorCodes.PROVIDER_ERROR, { uri }, false, 'Ensure the provider URI begins with https://');
29
+ }
30
+ // Force trailing slash removal for consistent downstream concatenation
31
+ parsed.pathname = parsed.pathname.replace(/\/$/, '');
32
+ return parsed.toString();
33
+ }
34
+ /**
35
+ * Builds the HTTPS agent used for mutual TLS authentication with the provider.
36
+ *
37
+ * CRITICAL: Sets servername to empty string to disable SNI (Server Name Indication).
38
+ * Some providers use SNI to route requests, and when SNI contains a hostname, they
39
+ * route mTLS requests to a non-mTLS handler that returns 401 "unauthorized access".
40
+ * This matches Akash Console behavior and is required for compatibility with all providers.
41
+ */
42
+ function createMtlsAgent(certificate) {
43
+ return new https.Agent({
44
+ cert: certificate.cert,
45
+ key: certificate.privateKey,
46
+ ca: certificate.chain,
47
+ rejectUnauthorized: false, // Providers often use self-signed certificates
48
+ servername: '', // Disable SNI for mTLS authentication (required by some providers)
49
+ });
50
+ }
51
+ /**
52
+ * Sends the deployment manifest to the provider over mTLS.
53
+ *
54
+ * The provider uses this manifest to start containers for the newly created lease.
55
+ * The workflow mirrors the steps outlined in the Akash Console deployment flow.
56
+ *
57
+ * Steps performed:
58
+ * 1. Validate and normalise the provider URI (must be HTTPS)
59
+ * 2. Construct the manifest delivery path `/deployment/{dseq}/manifest`
60
+ * 3. Send a PUT request with the manifest JSON using mutual TLS authentication
61
+ * 4. Resolve with a success Result when the provider accepts the manifest
62
+ *
63
+ * @param options - Manifest delivery configuration
64
+ * @returns Result signalling success or a ProviderError on failure
65
+ */
66
+ export async function sendManifestToProvider(options) {
67
+ const { providerUri, lease, manifest, certificate, timeoutMs = 30_000, } = options;
68
+ let normalised;
69
+ try {
70
+ normalised = normaliseProviderUri(providerUri);
71
+ }
72
+ catch (error) {
73
+ return failure(error);
74
+ }
75
+ const parsed = new URL(normalised);
76
+ const path = `/deployment/${String(lease.dseq)}/manifest`;
77
+ const agent = createMtlsAgent(certificate);
78
+ return new Promise((resolve) => {
79
+ const request = https.request({
80
+ protocol: parsed.protocol,
81
+ hostname: parsed.hostname,
82
+ port: parsed.port || '8443',
83
+ method: 'PUT',
84
+ path,
85
+ headers: {
86
+ 'Content-Type': 'application/json',
87
+ Accept: 'application/json',
88
+ 'Content-Length': Buffer.byteLength(manifest, 'utf8'),
89
+ },
90
+ agent,
91
+ timeout: timeoutMs,
92
+ }, (response) => {
93
+ const statusCode = response.statusCode ?? 0;
94
+ // Fast-path success: provider accepted the manifest (200/202)
95
+ if (statusCode >= 200 && statusCode < 300) {
96
+ resolve(success(undefined));
97
+ response.resume();
98
+ return;
99
+ }
100
+ // Collect error body for diagnostics
101
+ const chunks = [];
102
+ response.on('data', (chunk) => chunks.push(Buffer.from(chunk)));
103
+ response.on('end', () => {
104
+ const body = Buffer.concat(chunks).toString('utf8');
105
+ if (statusCode === 400 || statusCode === 422) {
106
+ resolve(failure(manifestRejectedError(parsed.hostname, body.trim() || undefined)));
107
+ }
108
+ else {
109
+ resolve(failure(new ProviderError(`Provider returned ${statusCode} while sending manifest`, ProviderErrorCodes.MANIFEST_SEND_FAILED, {
110
+ providerUri: normalised,
111
+ statusCode,
112
+ body: body.trim() || undefined,
113
+ }, true, 'Retry the deployment or choose another provider')));
114
+ }
115
+ });
116
+ });
117
+ request.on('timeout', () => {
118
+ request.destroy(providerUnreachableError(parsed.host, new Error('Manifest delivery timed out')));
119
+ });
120
+ request.on('error', (error) => {
121
+ // Network errors are wrapped as provider unreachable for caller clarity
122
+ resolve(failure(providerUnreachableError(parsed.host, error)));
123
+ });
124
+ request.write(manifest, 'utf8');
125
+ request.end();
126
+ });
127
+ }
128
+ /**
129
+ * Builds the provider lease status endpoint URL.
130
+ */
131
+ function buildLeaseStatusUrl(providerUri, lease) {
132
+ const base = new URL(providerUri);
133
+ base.pathname = `/lease/${String(lease.dseq)}/${lease.gseq}/${lease.oseq}/status`;
134
+ return base.toString();
135
+ }
136
+ /**
137
+ * Normalises provider service status objects returned by the provider API.
138
+ */
139
+ function normaliseServices(rawServices) {
140
+ if (!rawServices) {
141
+ return {};
142
+ }
143
+ const entries = [];
144
+ for (const [name, raw] of Object.entries(rawServices)) {
145
+ if (!raw || typeof raw !== 'object') {
146
+ continue;
147
+ }
148
+ const record = raw;
149
+ const available = normaliseNumber(record.available ?? record.available_replicas, 0);
150
+ const total = normaliseNumber(record.total ?? record.replicas, 0);
151
+ const ready = normaliseNumber(record.ready_replicas, available);
152
+ const uris = Array.isArray(record.uris)
153
+ ? record.uris.filter((uri) => typeof uri === 'string')
154
+ : [];
155
+ entries.push([
156
+ name,
157
+ {
158
+ name,
159
+ available,
160
+ total,
161
+ ready,
162
+ uris,
163
+ },
164
+ ]);
165
+ }
166
+ return Object.freeze(Object.fromEntries(entries));
167
+ }
168
+ /**
169
+ * Normalises forwarded ports section of provider response.
170
+ */
171
+ function normaliseForwardedPorts(raw) {
172
+ if (!raw) {
173
+ return undefined;
174
+ }
175
+ const entries = [];
176
+ for (const [service, value] of Object.entries(raw)) {
177
+ if (!Array.isArray(value)) {
178
+ continue;
179
+ }
180
+ const ports = value
181
+ .map((item) => {
182
+ if (!item || typeof item !== 'object') {
183
+ return null;
184
+ }
185
+ const record = item;
186
+ const port = normaliseNumber(record.port, 0);
187
+ const externalPort = normaliseNumber(record.externalPort, port);
188
+ const host = typeof record.host === 'string' ? record.host : '';
189
+ const available = normaliseNumber(record.available, 0);
190
+ if (!host) {
191
+ return null;
192
+ }
193
+ return {
194
+ port,
195
+ externalPort,
196
+ host,
197
+ available,
198
+ };
199
+ })
200
+ .filter((value) => value !== null);
201
+ if (ports.length > 0) {
202
+ entries.push([service, Object.freeze(ports)]);
203
+ }
204
+ }
205
+ return entries.length > 0 ? Object.freeze(Object.fromEntries(entries)) : undefined;
206
+ }
207
+ /**
208
+ * Normalises assigned IPs section of provider response.
209
+ */
210
+ function normaliseAssignedIps(raw) {
211
+ if (!raw) {
212
+ return undefined;
213
+ }
214
+ const entries = [];
215
+ for (const [service, value] of Object.entries(raw)) {
216
+ if (!Array.isArray(value)) {
217
+ continue;
218
+ }
219
+ const ips = value
220
+ .map((item) => {
221
+ if (!item || typeof item !== 'object') {
222
+ return null;
223
+ }
224
+ const record = item;
225
+ const ip = typeof record.IP === 'string' ? record.IP : undefined;
226
+ if (!ip) {
227
+ return null;
228
+ }
229
+ return {
230
+ ip,
231
+ port: normaliseNumber(record.Port, 0),
232
+ externalPort: normaliseNumber(record.ExternalPort, 0),
233
+ protocol: typeof record.Protocol === 'string' ? record.Protocol : 'TCP',
234
+ };
235
+ })
236
+ .filter((value) => value !== null);
237
+ if (ips.length > 0) {
238
+ entries.push([service, Object.freeze(ips)]);
239
+ }
240
+ }
241
+ return entries.length > 0 ? Object.freeze(Object.fromEntries(entries)) : undefined;
242
+ }
243
+ /**
244
+ * Converts various number representations into a safe integer with fallback.
245
+ */
246
+ function normaliseNumber(value, fallback) {
247
+ if (typeof value === 'number' && Number.isFinite(value)) {
248
+ return value;
249
+ }
250
+ if (typeof value === 'string') {
251
+ const parsed = Number.parseInt(value, 10);
252
+ if (Number.isFinite(parsed)) {
253
+ return parsed;
254
+ }
255
+ }
256
+ return fallback;
257
+ }
258
+ /**
259
+ * Queries the provider status endpoint for container readiness information.
260
+ *
261
+ * @param options - Provider status request configuration
262
+ * @returns Result containing normalised provider status data
263
+ */
264
+ export async function fetchProviderLeaseStatus(options) {
265
+ const { providerUri, lease, certificate, timeoutMs = 10_000 } = options;
266
+ let normalised;
267
+ try {
268
+ normalised = normaliseProviderUri(providerUri);
269
+ }
270
+ catch (error) {
271
+ return failure(error);
272
+ }
273
+ const statusUrl = buildLeaseStatusUrl(normalised, lease);
274
+ try {
275
+ const response = await axios.get(statusUrl, {
276
+ httpsAgent: createMtlsAgent(certificate),
277
+ timeout: timeoutMs,
278
+ headers: { Accept: 'application/json' },
279
+ transitional: { clarifyTimeoutError: true },
280
+ });
281
+ const data = response.data;
282
+ const services = normaliseServices(data?.services);
283
+ const forwardedPorts = normaliseForwardedPorts(data?.forwarded_ports);
284
+ const assignedIps = normaliseAssignedIps(data?.ips);
285
+ return success(Object.freeze({
286
+ services,
287
+ forwardedPorts,
288
+ assignedIps,
289
+ }));
290
+ }
291
+ catch (error) {
292
+ // Axios wraps network errors into AxiosError, inspect to categorise
293
+ if (axios.isAxiosError(error)) {
294
+ return failure(handleAxiosError(error, normalised));
295
+ }
296
+ return failure(new ProviderError(`Failed to query provider status: ${error.message}`, ProviderErrorCodes.PROVIDER_STATUS_ERROR, { providerUri: normalised }, true, 'Retry in a few moments – providers may need time to start the deployment'));
297
+ }
298
+ }
299
+ /**
300
+ * Maps Axios errors to ProviderError instances with helpful context.
301
+ */
302
+ function handleAxiosError(error, providerUri) {
303
+ if (error.code === 'ECONNREFUSED' || error.code === 'ENOTFOUND') {
304
+ return providerUnreachableError(providerUri, error);
305
+ }
306
+ if (error.code === 'ETIMEDOUT' || error.message.includes('timeout')) {
307
+ return new ProviderError(`Provider ${providerUri} did not respond in time`, ProviderErrorCodes.PROVIDER_TIMEOUT, { providerUri }, true, 'The provider may be busy. Consider retrying the request.');
308
+ }
309
+ if (error.response) {
310
+ const status = error.response.status;
311
+ const body = typeof error.response.data === 'string'
312
+ ? error.response.data
313
+ : JSON.stringify(error.response.data);
314
+ return new ProviderError(`Provider ${providerUri} returned ${status} when querying status`, ProviderErrorCodes.PROVIDER_STATUS_ERROR, { providerUri, statusCode: status, body }, true, 'Inspect the provider logs or retry with a different provider');
315
+ }
316
+ return new ProviderError(`Unknown provider error: ${error.message}`, ProviderErrorCodes.PROVIDER_STATUS_ERROR, { providerUri }, true, 'Retry the request or choose another provider', 'error', error);
317
+ }
318
+ //# sourceMappingURL=provider-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-client.js","sourceRoot":"","sources":["../../../src/targets/akash/provider-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Provider Metadata Types
3
+ *
4
+ * Type definitions for Akash Network provider information including
5
+ * location, reliability metrics, and general provider details.
6
+ *
7
+ * These types are used to enrich bid information so developers can make
8
+ * informed decisions about which provider to choose based on uptime,
9
+ * location, audit status, and other factors.
10
+ *
11
+ * @module targets/akash/provider-metadata
12
+ */
13
+ /**
14
+ * Geographic location information for a provider
15
+ *
16
+ * Provides detailed location data to help developers choose providers
17
+ * based on geographic proximity, regulatory requirements, or latency needs.
18
+ *
19
+ * Location data typically comes from IP geolocation services and may not
20
+ * always be 100% accurate, but is generally reliable for country/region.
21
+ *
22
+ * @example Provider in California, USA
23
+ * ```typescript
24
+ * {
25
+ * region: "California",
26
+ * regionCode: "CA",
27
+ * country: "United States",
28
+ * countryCode: "US",
29
+ * latitude: "37.7749",
30
+ * longitude: "-122.4194"
31
+ * }
32
+ * ```
33
+ */
34
+ export interface ProviderLocation {
35
+ /**
36
+ * Full name of the region/state
37
+ * @example "California", "Tokyo", "Bavaria"
38
+ */
39
+ readonly region: string;
40
+ /**
41
+ * Short code for the region/state
42
+ * @example "CA", "13" (Tokyo), "BY" (Bavaria)
43
+ */
44
+ readonly regionCode: string;
45
+ /**
46
+ * Full name of the country
47
+ * @example "United States", "Japan", "Germany"
48
+ */
49
+ readonly country: string;
50
+ /**
51
+ * ISO 3166-1 alpha-2 country code
52
+ * @example "US", "JP", "DE"
53
+ */
54
+ readonly countryCode: string;
55
+ /**
56
+ * Latitude coordinate (optional)
57
+ * @example "37.7749"
58
+ */
59
+ readonly latitude?: string;
60
+ /**
61
+ * Longitude coordinate (optional)
62
+ * @example "-122.4194"
63
+ */
64
+ readonly longitude?: string;
65
+ }
66
+ /**
67
+ * Provider reliability and uptime metrics
68
+ *
69
+ * Tracks provider availability over different time periods. Uptime values
70
+ * are percentages expressed as decimals (0.0 to 1.0).
71
+ *
72
+ * These metrics are calculated by the Akash indexer which periodically
73
+ * checks provider availability. A provider is considered "online" if its
74
+ * status endpoint responds successfully.
75
+ *
76
+ * **Important**: Not all providers may have reliability data, especially
77
+ * newly registered providers. Always check if reliability data exists
78
+ * before using it in selection logic.
79
+ *
80
+ * @example High reliability provider
81
+ * ```typescript
82
+ * {
83
+ * uptime1d: 1.0, // 100% uptime in last day
84
+ * uptime7d: 0.9987, // 99.87% uptime in last 7 days
85
+ * uptime30d: 0.9954, // 99.54% uptime in last 30 days
86
+ * isOnline: true,
87
+ * lastCheckDate: new Date("2025-10-15T10:30:00Z")
88
+ * }
89
+ * ```
90
+ */
91
+ export interface ProviderReliability {
92
+ /**
93
+ * Uptime percentage for the last 1 day
94
+ * Range: 0.0 (0%) to 1.0 (100%)
95
+ */
96
+ readonly uptime1d: number;
97
+ /**
98
+ * Uptime percentage for the last 7 days
99
+ * Range: 0.0 (0%) to 1.0 (100%)
100
+ */
101
+ readonly uptime7d: number;
102
+ /**
103
+ * Uptime percentage for the last 30 days
104
+ * Range: 0.0 (0%) to 1.0 (100%)
105
+ */
106
+ readonly uptime30d: number;
107
+ /**
108
+ * Whether the provider is currently online
109
+ *
110
+ * Based on the most recent status check. A provider is online if
111
+ * its status endpoint responded successfully to the last ping.
112
+ */
113
+ readonly isOnline: boolean;
114
+ /**
115
+ * Timestamp of the last uptime check (optional)
116
+ *
117
+ * Useful for understanding how fresh the reliability data is.
118
+ */
119
+ readonly lastCheckDate?: Date;
120
+ }
121
+ /**
122
+ * Complete provider information
123
+ *
124
+ * Aggregates all available information about an Akash provider including
125
+ * identity, location, reliability, and audit status.
126
+ *
127
+ * This is the primary interface for representing provider data throughout
128
+ * the deployment process. Not all fields will be present for all providers
129
+ * (e.g., some may not have location data, or may be too new to have
130
+ * reliability metrics).
131
+ *
132
+ * **Provider Auditing:**
133
+ * Audited providers have been verified by recognized community auditors
134
+ * (like Overclock Labs) to meet certain standards for hardware, uptime,
135
+ * and operational practices. Audited status generally indicates higher
136
+ * reliability but also potentially higher prices.
137
+ *
138
+ * @example Complete provider info
139
+ * ```typescript
140
+ * {
141
+ * owner: "akash1...",
142
+ * hostUri: "https://provider.europlots.com:8443",
143
+ * name: "Europlots Provider",
144
+ * email: "support@europlots.com",
145
+ * website: "https://europlots.com",
146
+ * isAudited: true,
147
+ * location: {
148
+ * region: "Frankfurt",
149
+ * regionCode: "HE",
150
+ * country: "Germany",
151
+ * countryCode: "DE"
152
+ * },
153
+ * reliability: {
154
+ * uptime1d: 1.0,
155
+ * uptime7d: 0.998,
156
+ * uptime30d: 0.995,
157
+ * isOnline: true
158
+ * },
159
+ * akashVersion: "0.6.0"
160
+ * }
161
+ * ```
162
+ */
163
+ export interface ProviderInfo {
164
+ /**
165
+ * Provider's Akash account address (owner)
166
+ *
167
+ * This is the unique blockchain identifier for the provider.
168
+ * @example "akash1..."
169
+ */
170
+ readonly owner: string;
171
+ /**
172
+ * Provider's API endpoint (host URI)
173
+ *
174
+ * This is the HTTPS endpoint where the provider's API is accessible.
175
+ * Used for sending manifests and querying deployment status.
176
+ * @example "https://provider.europlots.com:8443"
177
+ */
178
+ readonly hostUri: string;
179
+ /**
180
+ * Human-readable provider name (optional)
181
+ *
182
+ * A friendly name for the provider, if registered.
183
+ * @example "Europlots Provider", "Akash Cloud Services"
184
+ */
185
+ readonly name?: string;
186
+ /**
187
+ * Provider contact email (optional)
188
+ * @example "support@provider.com"
189
+ */
190
+ readonly email?: string;
191
+ /**
192
+ * Provider website URL (optional)
193
+ * @example "https://provider.com"
194
+ */
195
+ readonly website?: string;
196
+ /**
197
+ * Whether the provider is audited by a recognized auditor
198
+ *
199
+ * Audited providers have been verified to meet community standards
200
+ * for hardware quality, uptime, and operational practices.
201
+ */
202
+ readonly isAudited: boolean;
203
+ /**
204
+ * Geographic location information (optional)
205
+ *
206
+ * May not be available for all providers, especially those using VPNs
207
+ * or privacy-focused infrastructure.
208
+ */
209
+ readonly location?: ProviderLocation;
210
+ /**
211
+ * Reliability and uptime metrics (optional)
212
+ *
213
+ * May not be available for newly registered providers or if the
214
+ * indexer hasn't collected enough data yet.
215
+ */
216
+ readonly reliability?: ProviderReliability;
217
+ /**
218
+ * Akash provider software version (optional)
219
+ * @example "0.6.0", "0.5.5"
220
+ */
221
+ readonly akashVersion?: string;
222
+ /**
223
+ * Cosmos SDK version the provider is running (optional)
224
+ * @example "0.47.5"
225
+ */
226
+ readonly cosmosSdkVersion?: string;
227
+ }
228
+ //# sourceMappingURL=provider-metadata.d.ts.map