@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.
- package/README.md +523 -0
- package/dist/constants.d.ts +82 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +82 -0
- package/dist/constants.js.map +1 -0
- package/dist/errors/certificate-error.d.ts +95 -0
- package/dist/errors/certificate-error.d.ts.map +1 -0
- package/dist/errors/certificate-error.js +111 -0
- package/dist/errors/certificate-error.js.map +1 -0
- package/dist/errors/deployment-error.d.ts +122 -0
- package/dist/errors/deployment-error.d.ts.map +1 -0
- package/dist/errors/deployment-error.js +185 -0
- package/dist/errors/deployment-error.js.map +1 -0
- package/dist/errors/index.d.ts +13 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +18 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/profile-error.d.ts +106 -0
- package/dist/errors/profile-error.d.ts.map +1 -0
- package/dist/errors/profile-error.js +127 -0
- package/dist/errors/profile-error.js.map +1 -0
- package/dist/errors/provider-error.d.ts +104 -0
- package/dist/errors/provider-error.d.ts.map +1 -0
- package/dist/errors/provider-error.js +120 -0
- package/dist/errors/provider-error.js.map +1 -0
- package/dist/errors/wallet-error.d.ts +131 -0
- package/dist/errors/wallet-error.d.ts.map +1 -0
- package/dist/errors/wallet-error.js +154 -0
- package/dist/errors/wallet-error.js.map +1 -0
- package/dist/index.d.ts +49 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/targets/akash/bid-selectors.d.ts +251 -0
- package/dist/targets/akash/bid-selectors.d.ts.map +1 -0
- package/dist/targets/akash/bid-selectors.js +322 -0
- package/dist/targets/akash/bid-selectors.js.map +1 -0
- package/dist/targets/akash/bid-types.d.ts +297 -0
- package/dist/targets/akash/bid-types.d.ts.map +1 -0
- package/dist/targets/akash/bid-types.js +89 -0
- package/dist/targets/akash/bid-types.js.map +1 -0
- package/dist/targets/akash/blockchain-client.d.ts +577 -0
- package/dist/targets/akash/blockchain-client.d.ts.map +1 -0
- package/dist/targets/akash/blockchain-client.js +803 -0
- package/dist/targets/akash/blockchain-client.js.map +1 -0
- package/dist/targets/akash/certificate-manager.d.ts +228 -0
- package/dist/targets/akash/certificate-manager.d.ts.map +1 -0
- package/dist/targets/akash/certificate-manager.js +395 -0
- package/dist/targets/akash/certificate-manager.js.map +1 -0
- package/dist/targets/akash/constants.d.ts +231 -0
- package/dist/targets/akash/constants.d.ts.map +1 -0
- package/dist/targets/akash/constants.js +225 -0
- package/dist/targets/akash/constants.js.map +1 -0
- package/dist/targets/akash/deployer.d.ts +136 -0
- package/dist/targets/akash/deployer.d.ts.map +1 -0
- package/dist/targets/akash/deployer.js +599 -0
- package/dist/targets/akash/deployer.js.map +1 -0
- package/dist/targets/akash/environment.d.ts +241 -0
- package/dist/targets/akash/environment.d.ts.map +1 -0
- package/dist/targets/akash/environment.js +245 -0
- package/dist/targets/akash/environment.js.map +1 -0
- package/dist/targets/akash/index.d.ts +1113 -0
- package/dist/targets/akash/index.d.ts.map +1 -0
- package/dist/targets/akash/index.js +909 -0
- package/dist/targets/akash/index.js.map +1 -0
- package/dist/targets/akash/lease-monitor.d.ts +51 -0
- package/dist/targets/akash/lease-monitor.d.ts.map +1 -0
- package/dist/targets/akash/lease-monitor.js +110 -0
- package/dist/targets/akash/lease-monitor.js.map +1 -0
- package/dist/targets/akash/logs.d.ts +71 -0
- package/dist/targets/akash/logs.d.ts.map +1 -0
- package/dist/targets/akash/logs.js +311 -0
- package/dist/targets/akash/logs.js.map +1 -0
- package/dist/targets/akash/logs.types.d.ts +102 -0
- package/dist/targets/akash/logs.types.d.ts.map +1 -0
- package/dist/targets/akash/logs.types.js +9 -0
- package/dist/targets/akash/logs.types.js.map +1 -0
- package/dist/targets/akash/pricing.d.ts +247 -0
- package/dist/targets/akash/pricing.d.ts.map +1 -0
- package/dist/targets/akash/pricing.js +246 -0
- package/dist/targets/akash/pricing.js.map +1 -0
- package/dist/targets/akash/provider-client.d.ts +114 -0
- package/dist/targets/akash/provider-client.d.ts.map +1 -0
- package/dist/targets/akash/provider-client.js +318 -0
- package/dist/targets/akash/provider-client.js.map +1 -0
- package/dist/targets/akash/provider-metadata.d.ts +228 -0
- package/dist/targets/akash/provider-metadata.d.ts.map +1 -0
- package/dist/targets/akash/provider-metadata.js +14 -0
- package/dist/targets/akash/provider-metadata.js.map +1 -0
- package/dist/targets/akash/provider-service.d.ts +133 -0
- package/dist/targets/akash/provider-service.d.ts.map +1 -0
- package/dist/targets/akash/provider-service.js +391 -0
- package/dist/targets/akash/provider-service.js.map +1 -0
- package/dist/targets/akash/query-client.d.ts +125 -0
- package/dist/targets/akash/query-client.d.ts.map +1 -0
- package/dist/targets/akash/query-client.js +332 -0
- package/dist/targets/akash/query-client.js.map +1 -0
- package/dist/targets/akash/sdl-generator.d.ts +31 -0
- package/dist/targets/akash/sdl-generator.d.ts.map +1 -0
- package/dist/targets/akash/sdl-generator.js +279 -0
- package/dist/targets/akash/sdl-generator.js.map +1 -0
- package/dist/targets/akash/types.d.ts +285 -0
- package/dist/targets/akash/types.d.ts.map +1 -0
- package/dist/targets/akash/types.js +54 -0
- package/dist/targets/akash/types.js.map +1 -0
- package/dist/targets/akash/wallet-manager.d.ts +526 -0
- package/dist/targets/akash/wallet-manager.d.ts.map +1 -0
- package/dist/targets/akash/wallet-manager.js +953 -0
- package/dist/targets/akash/wallet-manager.js.map +1 -0
- package/dist/targets/local/compose-generator.d.ts +244 -0
- package/dist/targets/local/compose-generator.d.ts.map +1 -0
- package/dist/targets/local/compose-generator.js +324 -0
- package/dist/targets/local/compose-generator.js.map +1 -0
- package/dist/targets/local/deployer.d.ts +82 -0
- package/dist/targets/local/deployer.d.ts.map +1 -0
- package/dist/targets/local/deployer.js +367 -0
- package/dist/targets/local/deployer.js.map +1 -0
- package/dist/targets/local/engine-manager.d.ts +155 -0
- package/dist/targets/local/engine-manager.d.ts.map +1 -0
- package/dist/targets/local/engine-manager.js +250 -0
- package/dist/targets/local/engine-manager.js.map +1 -0
- package/dist/targets/local/index.d.ts +40 -0
- package/dist/targets/local/index.d.ts.map +1 -0
- package/dist/targets/local/index.js +43 -0
- package/dist/targets/local/index.js.map +1 -0
- package/dist/targets/local/network-manager.d.ts +160 -0
- package/dist/targets/local/network-manager.d.ts.map +1 -0
- package/dist/targets/local/network-manager.js +337 -0
- package/dist/targets/local/network-manager.js.map +1 -0
- package/dist/targets/local/types.d.ts +327 -0
- package/dist/targets/local/types.d.ts.map +1 -0
- package/dist/targets/local/types.js +9 -0
- package/dist/targets/local/types.js.map +1 -0
- package/dist/types/common.d.ts +585 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +13 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +12 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/options.d.ts +329 -0
- package/dist/types/options.d.ts.map +1 -0
- package/dist/types/options.js +10 -0
- package/dist/types/options.js.map +1 -0
- package/dist/types/profiles.d.ts +329 -0
- package/dist/types/profiles.d.ts.map +1 -0
- package/dist/types/profiles.js +27 -0
- package/dist/types/profiles.js.map +1 -0
- package/dist/types/results.d.ts +443 -0
- package/dist/types/results.d.ts.map +1 -0
- package/dist/types/results.js +64 -0
- package/dist/types/results.js.map +1 -0
- package/dist/types/validators.d.ts +118 -0
- package/dist/types/validators.d.ts.map +1 -0
- package/dist/types/validators.js +198 -0
- package/dist/types/validators.js.map +1 -0
- package/dist/utils/command-runner.d.ts +128 -0
- package/dist/utils/command-runner.d.ts.map +1 -0
- package/dist/utils/command-runner.js +210 -0
- package/dist/utils/command-runner.js.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +10 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +68 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +93 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/profile-loader.d.ts +76 -0
- package/dist/utils/profile-loader.d.ts.map +1 -0
- package/dist/utils/profile-loader.js +194 -0
- package/dist/utils/profile-loader.js.map +1 -0
- package/dist/utils/registry/index.d.ts +27 -0
- package/dist/utils/registry/index.d.ts.map +1 -0
- package/dist/utils/registry/index.js +29 -0
- package/dist/utils/registry/index.js.map +1 -0
- package/dist/utils/registry/manager.d.ts +319 -0
- package/dist/utils/registry/manager.d.ts.map +1 -0
- package/dist/utils/registry/manager.js +671 -0
- package/dist/utils/registry/manager.js.map +1 -0
- package/dist/utils/registry/setup.d.ts +135 -0
- package/dist/utils/registry/setup.d.ts.map +1 -0
- package/dist/utils/registry/setup.js +207 -0
- package/dist/utils/registry/setup.js.map +1 -0
- package/dist/utils/registry/transformer.d.ts +92 -0
- package/dist/utils/registry/transformer.d.ts.map +1 -0
- package/dist/utils/registry/transformer.js +131 -0
- package/dist/utils/registry/transformer.js.map +1 -0
- package/dist/utils/registry/types.d.ts +241 -0
- package/dist/utils/registry/types.d.ts.map +1 -0
- package/dist/utils/registry/types.js +10 -0
- package/dist/utils/registry/types.js.map +1 -0
- package/docs/EXAMPLES.md +293 -0
- package/docs/PLACEMENT.md +433 -0
- package/docs/STORAGE.md +318 -0
- package/docs/building-provider-reliability-tracker.md +2581 -0
- 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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"}
|