@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":"provider-metadata.d.ts","sourceRoot":"","sources":["../../../src/targets/akash/provider-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAE5B;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAErC;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAE3C;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAE/B;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC"}
@@ -0,0 +1,14 @@
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
+ export {};
14
+ //# sourceMappingURL=provider-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-metadata.js","sourceRoot":"","sources":["../../../src/targets/akash/provider-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Provider Metadata Service
3
+ *
4
+ * Service for fetching enhanced provider information including reliability
5
+ * metrics, location data, and audit status. Supports both Akash Console API
6
+ * and direct blockchain queries.
7
+ *
8
+ * **Data Sources:**
9
+ *
10
+ * 1. **Akash Console API** (Primary) - Provides rich metadata:
11
+ * - Uptime/reliability metrics (1d, 7d, 30d)
12
+ * - Geographic location (IP geolocation)
13
+ * - Audit status and auditor information
14
+ * - Provider version information
15
+ *
16
+ * 2. **Blockchain Query** (Fallback) - Basic provider data:
17
+ * - Owner address
18
+ * - Host URI
19
+ * - Provider attributes
20
+ *
21
+ * This service tries the Console API first for complete data, and falls back
22
+ * to blockchain-only data if the API is unavailable.
23
+ *
24
+ * @module targets/akash/provider-service
25
+ */
26
+ import { DeploymentError } from '../../errors/index.js';
27
+ import type { Result } from '../../types/index.js';
28
+ import type { AkashNetwork } from './environment.js';
29
+ import type { ProviderInfo } from './provider-metadata.js';
30
+ /**
31
+ * Fetch ALL providers with metadata from Console API
32
+ *
33
+ * Fetches the complete list of providers from the Akash Console API.
34
+ * This is the preferred method as it gets all provider data in a single
35
+ * API call, matching how the web console works.
36
+ *
37
+ * **Performance:**
38
+ * - Single API call for all providers (fast)
39
+ * - Returns complete metadata for all providers
40
+ * - Can be cached and reused across multiple bid queries
41
+ *
42
+ * **Data Included:**
43
+ * - Provider identity (name, owner, hostUri)
44
+ * - Reliability metrics (uptime1d, uptime7d, uptime30d, isOnline)
45
+ * - Geographic location (country, region, coordinates)
46
+ * - Audit status and version information
47
+ *
48
+ * @param network - Akash network (mainnet/testnet)
49
+ * @returns Result with map of provider address to provider info
50
+ *
51
+ * @example Fetch all providers
52
+ * ```typescript
53
+ * const result = await fetchAllProviders('mainnet');
54
+ * if (result.success) {
55
+ * const providers = result.data;
56
+ * console.log(`Loaded ${providers.size} providers`);
57
+ *
58
+ * // Look up a specific provider
59
+ * const provider = providers.get('akash1...');
60
+ * if (provider) {
61
+ * console.log('Uptime:', provider.reliability?.uptime7d);
62
+ * }
63
+ * }
64
+ * ```
65
+ */
66
+ export declare function fetchAllProviders(network: AkashNetwork): Promise<Result<Map<string, ProviderInfo>, DeploymentError>>;
67
+ /**
68
+ * Fetch provider information with enriched metadata
69
+ *
70
+ * Attempts to fetch complete provider information from the Akash Console API,
71
+ * falling back to blockchain-only data if the API is unavailable.
72
+ *
73
+ * **DEPRECATED:** Use `fetchAllProviders()` instead for better performance.
74
+ * This function makes individual API calls per provider, while `fetchAllProviders()`
75
+ * gets all providers in a single call.
76
+ *
77
+ * **Data Quality:**
78
+ * - Console API: Complete data with reliability metrics and location
79
+ * - Blockchain fallback: Basic identity only (owner, hostUri)
80
+ *
81
+ * **Reliability:**
82
+ * The Console API may be temporarily unavailable during maintenance or
83
+ * network issues. The fallback ensures deployment can continue even without
84
+ * enhanced metadata, though bid selection will have less information.
85
+ *
86
+ * @param network - Akash network (mainnet/testnet)
87
+ * @param providerAddress - Provider's blockchain address
88
+ * @returns Result with complete provider information
89
+ *
90
+ * @example Fetch single provider
91
+ * ```typescript
92
+ * const result = await fetchProviderInfo('mainnet', 'akash1...');
93
+ * if (result.success) {
94
+ * const provider = result.data;
95
+ * console.log('Provider:', provider.name || provider.owner);
96
+ * if (provider.reliability) {
97
+ * console.log('Uptime (7d):', (provider.reliability.uptime7d * 100).toFixed(1) + '%');
98
+ * }
99
+ * }
100
+ * ```
101
+ */
102
+ export declare function fetchProviderInfo(network: AkashNetwork, providerAddress: string): Promise<Result<ProviderInfo, DeploymentError>>;
103
+ /**
104
+ * Fetch multiple providers in batch for efficiency
105
+ *
106
+ * Fetches provider information for multiple providers in parallel.
107
+ * This is more efficient than calling `fetchProviderInfo` sequentially
108
+ * when processing multiple bids.
109
+ *
110
+ * **Behavior:**
111
+ * - Fetches all providers in parallel
112
+ * - Failed fetches return minimal provider info (owner + hostUri)
113
+ * - Never fails entirely - partial data is acceptable
114
+ *
115
+ * @param network - Akash network (mainnet/testnet)
116
+ * @param providerAddresses - Array of provider addresses to fetch
117
+ * @returns Result with map of provider address to provider info
118
+ *
119
+ * @example Fetch multiple providers
120
+ * ```typescript
121
+ * const addresses = ['akash1...', 'akash2...', 'akash3...'];
122
+ * const result = await fetchProviderInfoBatch('mainnet', addresses);
123
+ *
124
+ * if (result.success) {
125
+ * const providers = result.data;
126
+ * for (const [address, info] of providers) {
127
+ * console.log(address, ':', info.name || 'Unknown');
128
+ * }
129
+ * }
130
+ * ```
131
+ */
132
+ export declare function fetchProviderInfoBatch(network: AkashNetwork, providerAddresses: string[]): Promise<Result<Map<string, ProviderInfo>, DeploymentError>>;
133
+ //# sourceMappingURL=provider-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-service.d.ts","sourceRoot":"","sources":["../../../src/targets/akash/provider-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EACV,YAAY,EAGb,MAAM,wBAAwB,CAAC;AAgChC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,eAAe,CAAC,CAAC,CAwG7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,YAAY,EACrB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC,CAsBhD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,YAAY,EACrB,iBAAiB,EAAE,MAAM,EAAE,GAC1B,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,eAAe,CAAC,CAAC,CAuC7D"}
@@ -0,0 +1,391 @@
1
+ /**
2
+ * Provider Metadata Service
3
+ *
4
+ * Service for fetching enhanced provider information including reliability
5
+ * metrics, location data, and audit status. Supports both Akash Console API
6
+ * and direct blockchain queries.
7
+ *
8
+ * **Data Sources:**
9
+ *
10
+ * 1. **Akash Console API** (Primary) - Provides rich metadata:
11
+ * - Uptime/reliability metrics (1d, 7d, 30d)
12
+ * - Geographic location (IP geolocation)
13
+ * - Audit status and auditor information
14
+ * - Provider version information
15
+ *
16
+ * 2. **Blockchain Query** (Fallback) - Basic provider data:
17
+ * - Owner address
18
+ * - Host URI
19
+ * - Provider attributes
20
+ *
21
+ * This service tries the Console API first for complete data, and falls back
22
+ * to blockchain-only data if the API is unavailable.
23
+ *
24
+ * @module targets/akash/provider-service
25
+ */
26
+ import axios from 'axios';
27
+ import { DeploymentError } from '../../errors/index.js';
28
+ import { failure, success } from '../../types/index.js';
29
+ import { getProviderMetadata } from './query-client.js';
30
+ /**
31
+ * Fetch ALL providers with metadata from Console API
32
+ *
33
+ * Fetches the complete list of providers from the Akash Console API.
34
+ * This is the preferred method as it gets all provider data in a single
35
+ * API call, matching how the web console works.
36
+ *
37
+ * **Performance:**
38
+ * - Single API call for all providers (fast)
39
+ * - Returns complete metadata for all providers
40
+ * - Can be cached and reused across multiple bid queries
41
+ *
42
+ * **Data Included:**
43
+ * - Provider identity (name, owner, hostUri)
44
+ * - Reliability metrics (uptime1d, uptime7d, uptime30d, isOnline)
45
+ * - Geographic location (country, region, coordinates)
46
+ * - Audit status and version information
47
+ *
48
+ * @param network - Akash network (mainnet/testnet)
49
+ * @returns Result with map of provider address to provider info
50
+ *
51
+ * @example Fetch all providers
52
+ * ```typescript
53
+ * const result = await fetchAllProviders('mainnet');
54
+ * if (result.success) {
55
+ * const providers = result.data;
56
+ * console.log(`Loaded ${providers.size} providers`);
57
+ *
58
+ * // Look up a specific provider
59
+ * const provider = providers.get('akash1...');
60
+ * if (provider) {
61
+ * console.log('Uptime:', provider.reliability?.uptime7d);
62
+ * }
63
+ * }
64
+ * ```
65
+ */
66
+ export async function fetchAllProviders(network) {
67
+ // TODO: Replace with custom blockchain indexer once available
68
+ // The console.akash.network proxy blocks external access (HTTP 403), so this will fail.
69
+ // When you build your own provider reliability tracker (see docs/building-provider-reliability-tracker.md),
70
+ // replace this URL with your own indexer API endpoint:
71
+ // - Development: http://localhost:3000/api/providers
72
+ // - Production: https://your-indexer.example.com/api/providers
73
+ // Your indexer should return the same ConsoleProviderResponse[] format.
74
+ // Use console.akash.network which proxies the API
75
+ // Note: This currently returns 403 Forbidden for external applications
76
+ const apiBase = network === 'mainnet'
77
+ ? 'https://console.akash.network/api-mainnet/v1'
78
+ : 'https://console.akash.network/api-testnet/v1';
79
+ try {
80
+ const url = `${apiBase}/providers`;
81
+ const response = await axios.get(url, {
82
+ timeout: 15_000,
83
+ headers: {
84
+ Accept: 'application/json',
85
+ 'User-Agent': 'KADI deploy-ability (+https://github.com/kadi-build)'
86
+ },
87
+ transitional: { clarifyTimeoutError: true },
88
+ });
89
+ const providers = response.data;
90
+ // Transform array to map for fast lookups
91
+ const providerMap = new Map();
92
+ for (const data of providers) {
93
+ // Build location if available
94
+ const location = data.ipCountry && data.ipRegion
95
+ ? {
96
+ region: data.ipRegion,
97
+ regionCode: data.ipRegionCode || '',
98
+ country: data.ipCountry,
99
+ countryCode: data.ipCountryCode || '',
100
+ latitude: data.ipLat,
101
+ longitude: data.ipLon,
102
+ }
103
+ : undefined;
104
+ // Build reliability if available
105
+ const reliability = typeof data.uptime1d === 'number' &&
106
+ typeof data.uptime7d === 'number' &&
107
+ typeof data.uptime30d === 'number'
108
+ ? {
109
+ uptime1d: data.uptime1d,
110
+ uptime7d: data.uptime7d,
111
+ uptime30d: data.uptime30d,
112
+ isOnline: data.isOnline ?? true,
113
+ lastCheckDate: data.lastCheckDate
114
+ ? new Date(data.lastCheckDate)
115
+ : undefined,
116
+ }
117
+ : undefined;
118
+ // Transform to ProviderInfo
119
+ const providerInfo = {
120
+ owner: data.owner,
121
+ hostUri: data.hostUri,
122
+ name: data.name ?? undefined, // Convert null to undefined
123
+ email: data.email,
124
+ website: data.website,
125
+ isAudited: data.isAudited,
126
+ akashVersion: data.akashVersion,
127
+ cosmosSdkVersion: data.cosmosSdkVersion,
128
+ location,
129
+ reliability,
130
+ };
131
+ providerMap.set(data.owner, providerInfo);
132
+ }
133
+ return success(providerMap);
134
+ }
135
+ catch (error) {
136
+ // Map axios error information into a helpful message
137
+ let statusCode;
138
+ let detail = String(error);
139
+ if (axios.isAxiosError(error)) {
140
+ statusCode = error.response?.status;
141
+ if (error.code === 'ETIMEDOUT' || error.message.includes('timeout')) {
142
+ detail = `timeout after 15s`;
143
+ }
144
+ else if (statusCode) {
145
+ detail = `HTTP ${statusCode}`;
146
+ }
147
+ }
148
+ return failure(new DeploymentError(`Failed to fetch provider list: ${detail}`, 'PROVIDER_LIST_FAILED', { error: String(error), statusCode }, true, 'Could not fetch provider list from Console API'));
149
+ }
150
+ }
151
+ /**
152
+ * Fetch provider information with enriched metadata
153
+ *
154
+ * Attempts to fetch complete provider information from the Akash Console API,
155
+ * falling back to blockchain-only data if the API is unavailable.
156
+ *
157
+ * **DEPRECATED:** Use `fetchAllProviders()` instead for better performance.
158
+ * This function makes individual API calls per provider, while `fetchAllProviders()`
159
+ * gets all providers in a single call.
160
+ *
161
+ * **Data Quality:**
162
+ * - Console API: Complete data with reliability metrics and location
163
+ * - Blockchain fallback: Basic identity only (owner, hostUri)
164
+ *
165
+ * **Reliability:**
166
+ * The Console API may be temporarily unavailable during maintenance or
167
+ * network issues. The fallback ensures deployment can continue even without
168
+ * enhanced metadata, though bid selection will have less information.
169
+ *
170
+ * @param network - Akash network (mainnet/testnet)
171
+ * @param providerAddress - Provider's blockchain address
172
+ * @returns Result with complete provider information
173
+ *
174
+ * @example Fetch single provider
175
+ * ```typescript
176
+ * const result = await fetchProviderInfo('mainnet', 'akash1...');
177
+ * if (result.success) {
178
+ * const provider = result.data;
179
+ * console.log('Provider:', provider.name || provider.owner);
180
+ * if (provider.reliability) {
181
+ * console.log('Uptime (7d):', (provider.reliability.uptime7d * 100).toFixed(1) + '%');
182
+ * }
183
+ * }
184
+ * ```
185
+ */
186
+ export async function fetchProviderInfo(network, providerAddress) {
187
+ try {
188
+ // Try Console API first for complete data
189
+ const consoleResult = await fetchFromConsoleAPI(network, providerAddress);
190
+ if (consoleResult.success) {
191
+ return consoleResult;
192
+ }
193
+ // Fallback to blockchain query
194
+ const blockchainResult = await fetchFromBlockchain(network, providerAddress);
195
+ return blockchainResult;
196
+ }
197
+ catch (error) {
198
+ return failure(new DeploymentError(`Failed to fetch provider info for ${providerAddress}: ${error}`, 'PROVIDER_INFO_FAILED', { providerAddress, error: String(error) }, true, 'Provider metadata fetch failed, but deployment can continue with limited information'));
199
+ }
200
+ }
201
+ /**
202
+ * Fetch multiple providers in batch for efficiency
203
+ *
204
+ * Fetches provider information for multiple providers in parallel.
205
+ * This is more efficient than calling `fetchProviderInfo` sequentially
206
+ * when processing multiple bids.
207
+ *
208
+ * **Behavior:**
209
+ * - Fetches all providers in parallel
210
+ * - Failed fetches return minimal provider info (owner + hostUri)
211
+ * - Never fails entirely - partial data is acceptable
212
+ *
213
+ * @param network - Akash network (mainnet/testnet)
214
+ * @param providerAddresses - Array of provider addresses to fetch
215
+ * @returns Result with map of provider address to provider info
216
+ *
217
+ * @example Fetch multiple providers
218
+ * ```typescript
219
+ * const addresses = ['akash1...', 'akash2...', 'akash3...'];
220
+ * const result = await fetchProviderInfoBatch('mainnet', addresses);
221
+ *
222
+ * if (result.success) {
223
+ * const providers = result.data;
224
+ * for (const [address, info] of providers) {
225
+ * console.log(address, ':', info.name || 'Unknown');
226
+ * }
227
+ * }
228
+ * ```
229
+ */
230
+ export async function fetchProviderInfoBatch(network, providerAddresses) {
231
+ try {
232
+ // Fetch all providers in parallel
233
+ const results = await Promise.allSettled(providerAddresses.map((address) => fetchProviderInfo(network, address)));
234
+ // Build map of successful fetches
235
+ const providerMap = new Map();
236
+ for (let i = 0; i < providerAddresses.length; i++) {
237
+ const address = providerAddresses[i];
238
+ const result = results[i];
239
+ if (result.status === 'fulfilled' && result.value.success) {
240
+ providerMap.set(address, result.value.data);
241
+ }
242
+ else {
243
+ // For failed fetches, create minimal provider info
244
+ // This ensures we always have at least basic data
245
+ providerMap.set(address, {
246
+ owner: address,
247
+ hostUri: '', // Will be populated from bid data later
248
+ isAudited: false,
249
+ });
250
+ }
251
+ }
252
+ return success(providerMap);
253
+ }
254
+ catch (error) {
255
+ return failure(new DeploymentError(`Failed to fetch provider batch: ${error}`, 'PROVIDER_BATCH_FAILED', { providerAddresses, error: String(error) }, true, 'Batch provider fetch failed, deployment can continue with limited information'));
256
+ }
257
+ }
258
+ /**
259
+ * Fetch provider data from Akash Console API
260
+ *
261
+ * Internal helper that queries the Console API for enriched provider data.
262
+ *
263
+ * **Console API Endpoints:**
264
+ * - Mainnet: https://api.cloudmos.io/v1/providers/{address}
265
+ * - Testnet: https://api.testnet.cloudmos.io/v1/providers/{address}
266
+ *
267
+ * @param network - Akash network
268
+ * @param providerAddress - Provider address
269
+ * @returns Result with complete provider info or error
270
+ */
271
+ async function fetchFromConsoleAPI(network, providerAddress) {
272
+ // TODO: Replace with custom blockchain indexer once available
273
+ // See fetchAllProviders() for details on setting up your own indexer API.
274
+ // Use console.akash.network which proxies the API
275
+ // Note: This currently returns 403 Forbidden for external applications
276
+ const apiBase = network === 'mainnet'
277
+ ? 'https://console.akash.network/api-mainnet/v1'
278
+ : 'https://console.akash.network/api-testnet/v1';
279
+ try {
280
+ const url = `${apiBase}/providers/${providerAddress}`;
281
+ const response = await axios.get(url, {
282
+ timeout: 10_000,
283
+ headers: {
284
+ Accept: 'application/json',
285
+ 'User-Agent': 'KADI deploy-ability (+https://github.com/kadi-build)'
286
+ },
287
+ transitional: { clarifyTimeoutError: true },
288
+ });
289
+ const data = response.data;
290
+ // Build location if available
291
+ const location = data.ipCountry && data.ipRegion
292
+ ? {
293
+ region: data.ipRegion,
294
+ regionCode: data.ipRegionCode || '',
295
+ country: data.ipCountry,
296
+ countryCode: data.ipCountryCode || '',
297
+ latitude: data.ipLat,
298
+ longitude: data.ipLon,
299
+ }
300
+ : undefined;
301
+ // Build reliability if available
302
+ const reliability = typeof data.uptime1d === 'number' &&
303
+ typeof data.uptime7d === 'number' &&
304
+ typeof data.uptime30d === 'number'
305
+ ? {
306
+ uptime1d: data.uptime1d,
307
+ uptime7d: data.uptime7d,
308
+ uptime30d: data.uptime30d,
309
+ isOnline: data.isOnline ?? true,
310
+ lastCheckDate: data.lastCheckDate
311
+ ? new Date(data.lastCheckDate)
312
+ : undefined,
313
+ }
314
+ : undefined;
315
+ // Transform Console API response to ProviderInfo
316
+ const providerInfo = {
317
+ owner: data.owner,
318
+ hostUri: data.hostUri,
319
+ name: data.name ?? undefined, // Convert null to undefined
320
+ email: data.email,
321
+ website: data.website,
322
+ isAudited: data.isAudited,
323
+ akashVersion: data.akashVersion,
324
+ cosmosSdkVersion: data.cosmosSdkVersion,
325
+ location,
326
+ reliability,
327
+ };
328
+ return success(providerInfo);
329
+ }
330
+ catch (error) {
331
+ // Map axios error information into a helpful message
332
+ let statusCode;
333
+ let detail = String(error);
334
+ if (axios.isAxiosError(error)) {
335
+ statusCode = error.response?.status;
336
+ if (error.code === 'ETIMEDOUT' || error.message.includes('timeout')) {
337
+ detail = `timeout after 10s`;
338
+ }
339
+ else if (statusCode) {
340
+ detail = `HTTP ${statusCode}`;
341
+ }
342
+ }
343
+ return failure(new DeploymentError(`Console API fetch failed: ${detail}`, 'CONSOLE_API_ERROR', { providerAddress, statusCode, error: String(error) }, true, 'Will fallback to blockchain query'));
344
+ }
345
+ }
346
+ /**
347
+ * Fetch provider data directly from blockchain
348
+ *
349
+ * Internal helper that queries blockchain for basic provider data.
350
+ * This is a fallback when the Console API is unavailable.
351
+ *
352
+ * **Available Data:**
353
+ * - Owner address
354
+ * - Host URI
355
+ * - Provider attributes (used to determine audit status)
356
+ *
357
+ * **Missing Data:**
358
+ * - No reliability metrics
359
+ * - No location information
360
+ * - No version information
361
+ *
362
+ * @param network - Akash network
363
+ * @param providerAddress - Provider address
364
+ * @returns Result with basic provider info
365
+ */
366
+ async function fetchFromBlockchain(network, providerAddress) {
367
+ try {
368
+ // Query provider metadata from blockchain
369
+ const result = await getProviderMetadata(network, providerAddress);
370
+ if (!result.success) {
371
+ return failure(new DeploymentError(result.error.message, result.error.code, result.error.context, result.error.recoverable, result.error.suggestion));
372
+ }
373
+ // After success check, data is guaranteed to exist
374
+ const metadata = result.data;
375
+ // Check if provider is audited based on attributes
376
+ // Audited providers typically have an "audited-by" attribute
377
+ const isAudited = metadata.attributes.some((attr) => attr.key === 'audited-by');
378
+ // Construct minimal provider info from blockchain data
379
+ const providerInfo = {
380
+ owner: providerAddress,
381
+ hostUri: metadata.hostUri || '',
382
+ isAudited,
383
+ // No reliability, location, or version data from blockchain alone
384
+ };
385
+ return success(providerInfo);
386
+ }
387
+ catch (error) {
388
+ return failure(new DeploymentError(`Blockchain query failed: ${error}`, 'BLOCKCHAIN_QUERY_ERROR', { providerAddress, error: String(error) }, true, 'Unable to fetch provider info from any source'));
389
+ }
390
+ }
391
+ //# sourceMappingURL=provider-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-service.js","sourceRoot":"","sources":["../../../src/targets/akash/provider-service.ts"],"names":[],"mappings":"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"}