@kadi.build/deploy-ability 0.0.3 → 0.0.5
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/dist/targets/akash/bids.d.ts +183 -0
- package/dist/targets/akash/bids.d.ts.map +1 -0
- package/dist/targets/akash/bids.js +247 -0
- package/dist/targets/akash/bids.js.map +1 -0
- package/dist/targets/akash/certificate-manager.d.ts +89 -167
- package/dist/targets/akash/certificate-manager.d.ts.map +1 -1
- package/dist/targets/akash/certificate-manager.js +193 -301
- package/dist/targets/akash/certificate-manager.js.map +1 -1
- package/dist/targets/akash/client.d.ts +644 -0
- package/dist/targets/akash/client.d.ts.map +1 -0
- package/dist/targets/akash/client.js +972 -0
- package/dist/targets/akash/client.js.map +1 -0
- package/dist/targets/akash/constants.d.ts +12 -149
- package/dist/targets/akash/constants.d.ts.map +1 -1
- package/dist/targets/akash/constants.js +14 -136
- package/dist/targets/akash/constants.js.map +1 -1
- package/dist/targets/akash/deployer.d.ts +3 -82
- package/dist/targets/akash/deployer.d.ts.map +1 -1
- package/dist/targets/akash/deployer.js +122 -160
- package/dist/targets/akash/deployer.js.map +1 -1
- package/dist/targets/akash/environment.d.ts +16 -214
- package/dist/targets/akash/environment.d.ts.map +1 -1
- package/dist/targets/akash/environment.js +20 -210
- package/dist/targets/akash/environment.js.map +1 -1
- package/dist/targets/akash/index.d.ts +95 -189
- package/dist/targets/akash/index.d.ts.map +1 -1
- package/dist/targets/akash/index.js +69 -197
- package/dist/targets/akash/index.js.map +1 -1
- package/dist/targets/akash/lease-monitor.d.ts +3 -21
- package/dist/targets/akash/lease-monitor.d.ts.map +1 -1
- package/dist/targets/akash/lease-monitor.js +39 -56
- package/dist/targets/akash/lease-monitor.js.map +1 -1
- package/dist/targets/akash/logs.d.ts +103 -4
- package/dist/targets/akash/logs.d.ts.map +1 -1
- package/dist/targets/akash/logs.js +12 -3
- package/dist/targets/akash/logs.js.map +1 -1
- package/dist/targets/akash/pricing.d.ts +12 -191
- package/dist/targets/akash/pricing.d.ts.map +1 -1
- package/dist/targets/akash/pricing.js +12 -188
- package/dist/targets/akash/pricing.js.map +1 -1
- package/dist/targets/akash/provider-manager.d.ts +120 -0
- package/dist/targets/akash/provider-manager.d.ts.map +1 -0
- package/dist/targets/akash/provider-manager.js +574 -0
- package/dist/targets/akash/provider-manager.js.map +1 -0
- package/dist/targets/akash/sdl-generator.d.ts +2 -2
- package/dist/targets/akash/sdl-generator.d.ts.map +1 -1
- package/dist/targets/akash/sdl-generator.js +6 -39
- package/dist/targets/akash/sdl-generator.js.map +1 -1
- package/dist/targets/akash/types.d.ts +66 -243
- package/dist/targets/akash/types.d.ts.map +1 -1
- package/dist/targets/akash/types.js +4 -41
- package/dist/targets/akash/types.js.map +1 -1
- package/dist/targets/akash/wallet-manager.d.ts +35 -352
- package/dist/targets/akash/wallet-manager.d.ts.map +1 -1
- package/dist/targets/akash/wallet-manager.js +37 -439
- package/dist/targets/akash/wallet-manager.js.map +1 -1
- package/dist/targets/local/compose-generator.d.ts.map +1 -1
- package/dist/targets/local/compose-generator.js +1 -0
- package/dist/targets/local/compose-generator.js.map +1 -1
- package/dist/targets/local/deployer.js +4 -4
- package/dist/targets/local/deployer.js.map +1 -1
- package/dist/targets/local/types.d.ts +4 -0
- package/dist/targets/local/types.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/options.d.ts +45 -4
- package/dist/types/options.d.ts.map +1 -1
- package/dist/utils/registry/manager.js +6 -6
- package/dist/utils/registry/manager.js.map +1 -1
- package/dist/utils/registry/setup.js +4 -4
- package/dist/utils/registry/setup.js.map +1 -1
- package/docs/KADI_ABILITY_CONVERSION.md +1365 -0
- package/docs/PIPELINE_BUILDER_DESIGN.md +1149 -0
- package/package.json +8 -11
- package/dist/targets/akash/bid-selectors.d.ts +0 -251
- package/dist/targets/akash/bid-selectors.d.ts.map +0 -1
- package/dist/targets/akash/bid-selectors.js +0 -322
- package/dist/targets/akash/bid-selectors.js.map +0 -1
- package/dist/targets/akash/bid-types.d.ts +0 -297
- package/dist/targets/akash/bid-types.d.ts.map +0 -1
- package/dist/targets/akash/bid-types.js +0 -89
- package/dist/targets/akash/bid-types.js.map +0 -1
- package/dist/targets/akash/blockchain-client.d.ts +0 -577
- package/dist/targets/akash/blockchain-client.d.ts.map +0 -1
- package/dist/targets/akash/blockchain-client.js +0 -803
- package/dist/targets/akash/blockchain-client.js.map +0 -1
- package/dist/targets/akash/logs.types.d.ts +0 -102
- package/dist/targets/akash/logs.types.d.ts.map +0 -1
- package/dist/targets/akash/logs.types.js +0 -9
- package/dist/targets/akash/logs.types.js.map +0 -1
- package/dist/targets/akash/provider-client.d.ts +0 -114
- package/dist/targets/akash/provider-client.d.ts.map +0 -1
- package/dist/targets/akash/provider-client.js +0 -318
- package/dist/targets/akash/provider-client.js.map +0 -1
- package/dist/targets/akash/provider-metadata.d.ts +0 -228
- package/dist/targets/akash/provider-metadata.d.ts.map +0 -1
- package/dist/targets/akash/provider-metadata.js +0 -14
- package/dist/targets/akash/provider-metadata.js.map +0 -1
- package/dist/targets/akash/provider-service.d.ts +0 -133
- package/dist/targets/akash/provider-service.d.ts.map +0 -1
- package/dist/targets/akash/provider-service.js +0 -391
- package/dist/targets/akash/provider-service.js.map +0 -1
- package/dist/targets/akash/query-client.d.ts +0 -125
- package/dist/targets/akash/query-client.d.ts.map +0 -1
- package/dist/targets/akash/query-client.js +0 -332
- package/dist/targets/akash/query-client.js.map +0 -1
- package/docs/EXAMPLES.md +0 -293
- package/docs/PLACEMENT.md +0 -433
- package/docs/STORAGE.md +0 -318
|
@@ -0,0 +1,574 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Akash Provider Management
|
|
3
|
+
*
|
|
4
|
+
* Complete provider operations including communication, metadata fetching,
|
|
5
|
+
* and reliability tracking. Handles both direct provider interaction via
|
|
6
|
+
* mTLS and provider discovery via Console API and blockchain queries.
|
|
7
|
+
*
|
|
8
|
+
* @module targets/akash/providers
|
|
9
|
+
*/
|
|
10
|
+
import https from 'node:https';
|
|
11
|
+
import { URL } from 'node:url';
|
|
12
|
+
import axios from 'axios';
|
|
13
|
+
import { success, failure } from '../../types/index.js';
|
|
14
|
+
import { DeploymentError } from '../../errors/index.js';
|
|
15
|
+
import { ProviderError, ProviderErrorCodes, providerUnreachableError, manifestRejectedError, } from '../../errors/index.js';
|
|
16
|
+
import { AkashClient } from './client.js';
|
|
17
|
+
// ========================================
|
|
18
|
+
// Section 1: Provider Communication (mTLS)
|
|
19
|
+
// ========================================
|
|
20
|
+
/** Normalises a provider URI string and ensures it uses HTTPS */
|
|
21
|
+
function normaliseProviderUri(uri) {
|
|
22
|
+
const parsed = new URL(uri);
|
|
23
|
+
if (parsed.protocol !== 'https:') {
|
|
24
|
+
throw new ProviderError(`Provider URI must use HTTPS: ${uri}`, ProviderErrorCodes.PROVIDER_ERROR, { uri }, false, 'Ensure the provider URI begins with https://');
|
|
25
|
+
}
|
|
26
|
+
// Force trailing slash removal for consistent downstream concatenation
|
|
27
|
+
parsed.pathname = parsed.pathname.replace(/\/$/, '');
|
|
28
|
+
return parsed.toString();
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Builds the HTTPS agent used for mutual TLS authentication with the provider
|
|
32
|
+
*
|
|
33
|
+
* Sets servername to empty string to disable SNI (Server Name Indication), which is required
|
|
34
|
+
* for compatibility with all providers.
|
|
35
|
+
*/
|
|
36
|
+
function createMtlsAgent(certificate) {
|
|
37
|
+
return new https.Agent({
|
|
38
|
+
cert: certificate.cert,
|
|
39
|
+
key: certificate.privateKey,
|
|
40
|
+
ca: certificate.chain,
|
|
41
|
+
rejectUnauthorized: false, // Providers often use self-signed certificates
|
|
42
|
+
servername: '', // Disable SNI for mTLS authentication (required by some providers)
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Sends the deployment manifest to the provider over mTLS
|
|
47
|
+
*
|
|
48
|
+
* @param options - Manifest delivery configuration
|
|
49
|
+
* @returns Result signalling success or a ProviderError on failure
|
|
50
|
+
*/
|
|
51
|
+
export async function sendManifestToProvider(options) {
|
|
52
|
+
const { providerUri, lease, manifest, certificate, timeoutMs = 30_000, } = options;
|
|
53
|
+
let normalised;
|
|
54
|
+
try {
|
|
55
|
+
normalised = normaliseProviderUri(providerUri);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
return failure(error);
|
|
59
|
+
}
|
|
60
|
+
const parsed = new URL(normalised);
|
|
61
|
+
const path = `/deployment/${String(lease.dseq)}/manifest`;
|
|
62
|
+
const agent = createMtlsAgent(certificate);
|
|
63
|
+
return new Promise((resolve) => {
|
|
64
|
+
const request = https.request({
|
|
65
|
+
protocol: parsed.protocol,
|
|
66
|
+
hostname: parsed.hostname,
|
|
67
|
+
port: parsed.port || '8443',
|
|
68
|
+
method: 'PUT',
|
|
69
|
+
path,
|
|
70
|
+
headers: {
|
|
71
|
+
'Content-Type': 'application/json',
|
|
72
|
+
Accept: 'application/json',
|
|
73
|
+
'Content-Length': Buffer.byteLength(manifest, 'utf8'),
|
|
74
|
+
},
|
|
75
|
+
agent,
|
|
76
|
+
timeout: timeoutMs,
|
|
77
|
+
}, (response) => {
|
|
78
|
+
const statusCode = response.statusCode ?? 0;
|
|
79
|
+
// Fast-path success: provider accepted the manifest (200/202)
|
|
80
|
+
if (statusCode >= 200 && statusCode < 300) {
|
|
81
|
+
resolve(success(undefined));
|
|
82
|
+
response.resume();
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
// Collect error body for diagnostics
|
|
86
|
+
const chunks = [];
|
|
87
|
+
response.on('data', (chunk) => chunks.push(Buffer.from(chunk)));
|
|
88
|
+
response.on('end', () => {
|
|
89
|
+
const body = Buffer.concat(chunks).toString('utf8');
|
|
90
|
+
if (statusCode === 400 || statusCode === 422) {
|
|
91
|
+
resolve(failure(manifestRejectedError(parsed.hostname, body.trim() || undefined)));
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
resolve(failure(new ProviderError(`Provider returned ${statusCode} while sending manifest`, ProviderErrorCodes.MANIFEST_SEND_FAILED, {
|
|
95
|
+
providerUri: normalised,
|
|
96
|
+
statusCode,
|
|
97
|
+
body: body.trim() || undefined,
|
|
98
|
+
}, true, 'Retry the deployment or choose another provider')));
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
request.on('timeout', () => {
|
|
103
|
+
request.destroy(providerUnreachableError(parsed.host, new Error('Manifest delivery timed out')));
|
|
104
|
+
});
|
|
105
|
+
request.on('error', (error) => {
|
|
106
|
+
// Network errors are wrapped as provider unreachable for caller clarity
|
|
107
|
+
resolve(failure(providerUnreachableError(parsed.host, error)));
|
|
108
|
+
});
|
|
109
|
+
request.write(manifest, 'utf8');
|
|
110
|
+
request.end();
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/** Builds the provider lease status endpoint URL */
|
|
114
|
+
function buildLeaseStatusUrl(providerUri, lease) {
|
|
115
|
+
const base = new URL(providerUri);
|
|
116
|
+
base.pathname = `/lease/${String(lease.dseq)}/${lease.gseq}/${lease.oseq}/status`;
|
|
117
|
+
return base.toString();
|
|
118
|
+
}
|
|
119
|
+
/** Normalises provider service status objects returned by the provider API */
|
|
120
|
+
function normaliseServices(rawServices) {
|
|
121
|
+
if (!rawServices) {
|
|
122
|
+
return {};
|
|
123
|
+
}
|
|
124
|
+
const entries = [];
|
|
125
|
+
for (const [name, raw] of Object.entries(rawServices)) {
|
|
126
|
+
if (!raw || typeof raw !== 'object') {
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
const record = raw;
|
|
130
|
+
const available = normaliseNumber(record.available ?? record.available_replicas, 0);
|
|
131
|
+
const total = normaliseNumber(record.total ?? record.replicas, 0);
|
|
132
|
+
const ready = normaliseNumber(record.ready_replicas, available);
|
|
133
|
+
const uris = Array.isArray(record.uris)
|
|
134
|
+
? record.uris.filter((uri) => typeof uri === 'string')
|
|
135
|
+
: [];
|
|
136
|
+
entries.push([
|
|
137
|
+
name,
|
|
138
|
+
{
|
|
139
|
+
name,
|
|
140
|
+
available,
|
|
141
|
+
total,
|
|
142
|
+
ready,
|
|
143
|
+
uris,
|
|
144
|
+
},
|
|
145
|
+
]);
|
|
146
|
+
}
|
|
147
|
+
return Object.freeze(Object.fromEntries(entries));
|
|
148
|
+
}
|
|
149
|
+
/** Normalises forwarded ports section of provider response */
|
|
150
|
+
function normaliseForwardedPorts(raw) {
|
|
151
|
+
if (!raw) {
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
const entries = [];
|
|
155
|
+
for (const [service, value] of Object.entries(raw)) {
|
|
156
|
+
if (!Array.isArray(value)) {
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
const ports = value
|
|
160
|
+
.map((item) => {
|
|
161
|
+
if (!item || typeof item !== 'object') {
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
const record = item;
|
|
165
|
+
const port = normaliseNumber(record.port, 0);
|
|
166
|
+
const externalPort = normaliseNumber(record.externalPort, port);
|
|
167
|
+
const host = typeof record.host === 'string' ? record.host : '';
|
|
168
|
+
const available = normaliseNumber(record.available, 0);
|
|
169
|
+
if (!host) {
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
port,
|
|
174
|
+
externalPort,
|
|
175
|
+
host,
|
|
176
|
+
available,
|
|
177
|
+
};
|
|
178
|
+
})
|
|
179
|
+
.filter((value) => value !== null);
|
|
180
|
+
if (ports.length > 0) {
|
|
181
|
+
entries.push([service, Object.freeze(ports)]);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return entries.length > 0 ? Object.freeze(Object.fromEntries(entries)) : undefined;
|
|
185
|
+
}
|
|
186
|
+
/** Normalises assigned IPs section of provider response */
|
|
187
|
+
function normaliseAssignedIps(raw) {
|
|
188
|
+
if (!raw) {
|
|
189
|
+
return undefined;
|
|
190
|
+
}
|
|
191
|
+
const entries = [];
|
|
192
|
+
for (const [service, value] of Object.entries(raw)) {
|
|
193
|
+
if (!Array.isArray(value)) {
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
const ips = value
|
|
197
|
+
.map((item) => {
|
|
198
|
+
if (!item || typeof item !== 'object') {
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
const record = item;
|
|
202
|
+
const ip = typeof record.IP === 'string' ? record.IP : undefined;
|
|
203
|
+
if (!ip) {
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
206
|
+
return {
|
|
207
|
+
ip,
|
|
208
|
+
port: normaliseNumber(record.Port, 0),
|
|
209
|
+
externalPort: normaliseNumber(record.ExternalPort, 0),
|
|
210
|
+
protocol: typeof record.Protocol === 'string' ? record.Protocol : 'TCP',
|
|
211
|
+
};
|
|
212
|
+
})
|
|
213
|
+
.filter((value) => value !== null);
|
|
214
|
+
if (ips.length > 0) {
|
|
215
|
+
entries.push([service, Object.freeze(ips)]);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return entries.length > 0 ? Object.freeze(Object.fromEntries(entries)) : undefined;
|
|
219
|
+
}
|
|
220
|
+
/** Converts various number representations into a safe integer with fallback */
|
|
221
|
+
function normaliseNumber(value, fallback) {
|
|
222
|
+
if (typeof value === 'number' && Number.isFinite(value)) {
|
|
223
|
+
return value;
|
|
224
|
+
}
|
|
225
|
+
if (typeof value === 'string') {
|
|
226
|
+
const parsed = Number.parseInt(value, 10);
|
|
227
|
+
if (Number.isFinite(parsed)) {
|
|
228
|
+
return parsed;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return fallback;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Queries the provider status endpoint for container readiness information
|
|
235
|
+
*
|
|
236
|
+
* @param options - Provider status request configuration
|
|
237
|
+
* @returns Result containing normalised provider status data
|
|
238
|
+
*/
|
|
239
|
+
export async function fetchProviderLeaseStatus(options) {
|
|
240
|
+
const { providerUri, lease, certificate, timeoutMs = 10_000 } = options;
|
|
241
|
+
let normalised;
|
|
242
|
+
try {
|
|
243
|
+
normalised = normaliseProviderUri(providerUri);
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
return failure(error);
|
|
247
|
+
}
|
|
248
|
+
const statusUrl = buildLeaseStatusUrl(normalised, lease);
|
|
249
|
+
try {
|
|
250
|
+
const response = await axios.get(statusUrl, {
|
|
251
|
+
httpsAgent: createMtlsAgent(certificate),
|
|
252
|
+
timeout: timeoutMs,
|
|
253
|
+
headers: { Accept: 'application/json' },
|
|
254
|
+
transitional: { clarifyTimeoutError: true },
|
|
255
|
+
});
|
|
256
|
+
const data = response.data;
|
|
257
|
+
const services = normaliseServices(data?.services);
|
|
258
|
+
const forwardedPorts = normaliseForwardedPorts(data?.forwarded_ports);
|
|
259
|
+
const assignedIps = normaliseAssignedIps(data?.ips);
|
|
260
|
+
return success(Object.freeze({
|
|
261
|
+
services,
|
|
262
|
+
forwardedPorts,
|
|
263
|
+
assignedIps,
|
|
264
|
+
}));
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
// Axios wraps network errors into AxiosError, inspect to categorise
|
|
268
|
+
if (axios.isAxiosError(error)) {
|
|
269
|
+
return failure(handleAxiosError(error, normalised));
|
|
270
|
+
}
|
|
271
|
+
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'));
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
/** Maps Axios errors to ProviderError instances with helpful context */
|
|
275
|
+
function handleAxiosError(error, providerUri) {
|
|
276
|
+
if (error.code === 'ECONNREFUSED' || error.code === 'ENOTFOUND') {
|
|
277
|
+
return providerUnreachableError(providerUri, error);
|
|
278
|
+
}
|
|
279
|
+
if (error.code === 'ETIMEDOUT' || error.message.includes('timeout')) {
|
|
280
|
+
return new ProviderError(`Provider ${providerUri} did not respond in time`, ProviderErrorCodes.PROVIDER_TIMEOUT, { providerUri }, true, 'The provider may be busy. Consider retrying the request.');
|
|
281
|
+
}
|
|
282
|
+
if (error.response) {
|
|
283
|
+
const status = error.response.status;
|
|
284
|
+
const body = typeof error.response.data === 'string'
|
|
285
|
+
? error.response.data
|
|
286
|
+
: JSON.stringify(error.response.data);
|
|
287
|
+
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');
|
|
288
|
+
}
|
|
289
|
+
return new ProviderError(`Unknown provider error: ${error.message}`, ProviderErrorCodes.PROVIDER_STATUS_ERROR, { providerUri }, true, 'Retry the request or choose another provider', 'error', error);
|
|
290
|
+
}
|
|
291
|
+
// ========================================
|
|
292
|
+
// Section 2: Provider Metadata (Console API + Blockchain)
|
|
293
|
+
// ========================================
|
|
294
|
+
/**
|
|
295
|
+
* Fetch ALL providers with metadata from Console API
|
|
296
|
+
*
|
|
297
|
+
* Fetches the complete list of providers from the Akash Console API in a single call.
|
|
298
|
+
* Returns complete metadata including reliability metrics and geographic location.
|
|
299
|
+
*
|
|
300
|
+
* @param network - Akash network (mainnet/testnet)
|
|
301
|
+
* @returns Result with map of provider address to provider info
|
|
302
|
+
*
|
|
303
|
+
* @example
|
|
304
|
+
* ```typescript
|
|
305
|
+
* const result = await fetchAllProviders('mainnet');
|
|
306
|
+
* if (result.success) {
|
|
307
|
+
* console.log(`Loaded ${result.data.size} providers`);
|
|
308
|
+
* }
|
|
309
|
+
* ```
|
|
310
|
+
*/
|
|
311
|
+
export async function fetchAllProviders(network) {
|
|
312
|
+
// TODO: Replace with custom blockchain indexer once available
|
|
313
|
+
// The console.akash.network proxy blocks external access (HTTP 403), so this will fail.
|
|
314
|
+
// When you build your own provider reliability tracker (see docs/building-provider-reliability-tracker.md),
|
|
315
|
+
// replace this URL with your own indexer API endpoint:
|
|
316
|
+
// - Development: http://localhost:3000/api/providers
|
|
317
|
+
// - Production: https://your-indexer.example.com/api/providers
|
|
318
|
+
// Your indexer should return the same ConsoleProviderResponse[] format.
|
|
319
|
+
// Use console.akash.network which proxies the API
|
|
320
|
+
// Note: This currently returns 403 Forbidden for external applications
|
|
321
|
+
const apiBase = network === 'mainnet'
|
|
322
|
+
? 'https://console.akash.network/api-mainnet/v1'
|
|
323
|
+
: 'https://console.akash.network/api-testnet/v1';
|
|
324
|
+
try {
|
|
325
|
+
const url = `${apiBase}/providers`;
|
|
326
|
+
const response = await axios.get(url, {
|
|
327
|
+
timeout: 15_000,
|
|
328
|
+
headers: {
|
|
329
|
+
Accept: 'application/json',
|
|
330
|
+
'User-Agent': 'KADI deploy-ability (+https://github.com/kadi-build)'
|
|
331
|
+
},
|
|
332
|
+
transitional: { clarifyTimeoutError: true },
|
|
333
|
+
});
|
|
334
|
+
const providers = response.data;
|
|
335
|
+
// Transform array to map for fast lookups
|
|
336
|
+
const providerMap = new Map();
|
|
337
|
+
for (const data of providers) {
|
|
338
|
+
// Build location if available
|
|
339
|
+
const location = data.ipCountry && data.ipRegion
|
|
340
|
+
? {
|
|
341
|
+
region: data.ipRegion,
|
|
342
|
+
regionCode: data.ipRegionCode || '',
|
|
343
|
+
country: data.ipCountry,
|
|
344
|
+
countryCode: data.ipCountryCode || '',
|
|
345
|
+
latitude: data.ipLat,
|
|
346
|
+
longitude: data.ipLon,
|
|
347
|
+
}
|
|
348
|
+
: undefined;
|
|
349
|
+
// Build reliability if available
|
|
350
|
+
const reliability = typeof data.uptime1d === 'number' &&
|
|
351
|
+
typeof data.uptime7d === 'number' &&
|
|
352
|
+
typeof data.uptime30d === 'number'
|
|
353
|
+
? {
|
|
354
|
+
uptime1d: data.uptime1d,
|
|
355
|
+
uptime7d: data.uptime7d,
|
|
356
|
+
uptime30d: data.uptime30d,
|
|
357
|
+
isOnline: data.isOnline ?? true,
|
|
358
|
+
lastCheckDate: data.lastCheckDate
|
|
359
|
+
? new Date(data.lastCheckDate)
|
|
360
|
+
: undefined,
|
|
361
|
+
}
|
|
362
|
+
: undefined;
|
|
363
|
+
// Transform to ProviderInfo
|
|
364
|
+
const providerInfo = {
|
|
365
|
+
owner: data.owner,
|
|
366
|
+
hostUri: data.hostUri,
|
|
367
|
+
name: data.name ?? undefined, // Convert null to undefined
|
|
368
|
+
email: data.email,
|
|
369
|
+
website: data.website,
|
|
370
|
+
isAudited: data.isAudited,
|
|
371
|
+
akashVersion: data.akashVersion,
|
|
372
|
+
cosmosSdkVersion: data.cosmosSdkVersion,
|
|
373
|
+
location,
|
|
374
|
+
reliability,
|
|
375
|
+
};
|
|
376
|
+
providerMap.set(data.owner, providerInfo);
|
|
377
|
+
}
|
|
378
|
+
return success(providerMap);
|
|
379
|
+
}
|
|
380
|
+
catch (error) {
|
|
381
|
+
// Map axios error information into a helpful message
|
|
382
|
+
let statusCode;
|
|
383
|
+
let detail = String(error);
|
|
384
|
+
if (axios.isAxiosError(error)) {
|
|
385
|
+
statusCode = error.response?.status;
|
|
386
|
+
if (error.code === 'ETIMEDOUT' || error.message.includes('timeout')) {
|
|
387
|
+
detail = `timeout after 15s`;
|
|
388
|
+
}
|
|
389
|
+
else if (statusCode) {
|
|
390
|
+
detail = `HTTP ${statusCode}`;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
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'));
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Fetch provider information with enriched metadata
|
|
398
|
+
*
|
|
399
|
+
* Attempts to fetch complete provider information from the Akash Console API,
|
|
400
|
+
* falling back to blockchain-only data if the API is unavailable.
|
|
401
|
+
*
|
|
402
|
+
* @deprecated Use fetchAllProviders() instead for better performance
|
|
403
|
+
*
|
|
404
|
+
* @param network - Akash network (mainnet/testnet)
|
|
405
|
+
* @param providerAddress - Provider's blockchain address
|
|
406
|
+
* @returns Result with complete provider information
|
|
407
|
+
*/
|
|
408
|
+
export async function fetchProviderInfo(network, providerAddress) {
|
|
409
|
+
try {
|
|
410
|
+
// Try Console API first for complete data
|
|
411
|
+
const consoleResult = await fetchFromConsoleAPI(network, providerAddress);
|
|
412
|
+
if (consoleResult.success) {
|
|
413
|
+
return consoleResult;
|
|
414
|
+
}
|
|
415
|
+
// Fallback to blockchain query
|
|
416
|
+
const blockchainResult = await fetchFromBlockchain(network, providerAddress);
|
|
417
|
+
return blockchainResult;
|
|
418
|
+
}
|
|
419
|
+
catch (error) {
|
|
420
|
+
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'));
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Fetch multiple providers in batch for efficiency
|
|
425
|
+
*
|
|
426
|
+
* Fetches provider information for multiple providers in parallel. Failed fetches return
|
|
427
|
+
* minimal provider info. Never fails entirely - partial data is acceptable.
|
|
428
|
+
*
|
|
429
|
+
* @param network - Akash network (mainnet/testnet)
|
|
430
|
+
* @param providerAddresses - Array of provider addresses to fetch
|
|
431
|
+
* @returns Result with map of provider address to provider info
|
|
432
|
+
*/
|
|
433
|
+
export async function fetchProviderInfoBatch(network, providerAddresses) {
|
|
434
|
+
try {
|
|
435
|
+
// Fetch all providers in parallel
|
|
436
|
+
const results = await Promise.allSettled(providerAddresses.map((address) => fetchProviderInfo(network, address)));
|
|
437
|
+
// Build map of successful fetches
|
|
438
|
+
const providerMap = new Map();
|
|
439
|
+
for (let i = 0; i < providerAddresses.length; i++) {
|
|
440
|
+
const address = providerAddresses[i];
|
|
441
|
+
const result = results[i];
|
|
442
|
+
if (result.status === 'fulfilled' && result.value.success) {
|
|
443
|
+
providerMap.set(address, result.value.data);
|
|
444
|
+
}
|
|
445
|
+
else {
|
|
446
|
+
// For failed fetches, create minimal provider info
|
|
447
|
+
// This ensures we always have at least basic data
|
|
448
|
+
providerMap.set(address, {
|
|
449
|
+
owner: address,
|
|
450
|
+
hostUri: '', // Will be populated from bid data later
|
|
451
|
+
isAudited: false,
|
|
452
|
+
});
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
return success(providerMap);
|
|
456
|
+
}
|
|
457
|
+
catch (error) {
|
|
458
|
+
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'));
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
/** Fetch provider data from Akash Console API (internal helper) */
|
|
462
|
+
async function fetchFromConsoleAPI(network, providerAddress) {
|
|
463
|
+
// TODO: Replace with custom blockchain indexer once available
|
|
464
|
+
// See fetchAllProviders() for details on setting up your own indexer API.
|
|
465
|
+
// Use console.akash.network which proxies the API
|
|
466
|
+
// Note: This currently returns 403 Forbidden for external applications
|
|
467
|
+
const apiBase = network === 'mainnet'
|
|
468
|
+
? 'https://console.akash.network/api-mainnet/v1'
|
|
469
|
+
: 'https://console.akash.network/api-testnet/v1';
|
|
470
|
+
try {
|
|
471
|
+
const url = `${apiBase}/providers/${providerAddress}`;
|
|
472
|
+
const response = await axios.get(url, {
|
|
473
|
+
timeout: 10_000,
|
|
474
|
+
headers: {
|
|
475
|
+
Accept: 'application/json',
|
|
476
|
+
'User-Agent': 'KADI deploy-ability (+https://github.com/kadi-build)'
|
|
477
|
+
},
|
|
478
|
+
transitional: { clarifyTimeoutError: true },
|
|
479
|
+
});
|
|
480
|
+
const data = response.data;
|
|
481
|
+
// Build location if available
|
|
482
|
+
const location = data.ipCountry && data.ipRegion
|
|
483
|
+
? {
|
|
484
|
+
region: data.ipRegion,
|
|
485
|
+
regionCode: data.ipRegionCode || '',
|
|
486
|
+
country: data.ipCountry,
|
|
487
|
+
countryCode: data.ipCountryCode || '',
|
|
488
|
+
latitude: data.ipLat,
|
|
489
|
+
longitude: data.ipLon,
|
|
490
|
+
}
|
|
491
|
+
: undefined;
|
|
492
|
+
// Build reliability if available
|
|
493
|
+
const reliability = typeof data.uptime1d === 'number' &&
|
|
494
|
+
typeof data.uptime7d === 'number' &&
|
|
495
|
+
typeof data.uptime30d === 'number'
|
|
496
|
+
? {
|
|
497
|
+
uptime1d: data.uptime1d,
|
|
498
|
+
uptime7d: data.uptime7d,
|
|
499
|
+
uptime30d: data.uptime30d,
|
|
500
|
+
isOnline: data.isOnline ?? true,
|
|
501
|
+
lastCheckDate: data.lastCheckDate
|
|
502
|
+
? new Date(data.lastCheckDate)
|
|
503
|
+
: undefined,
|
|
504
|
+
}
|
|
505
|
+
: undefined;
|
|
506
|
+
// Transform Console API response to ProviderInfo
|
|
507
|
+
const providerInfo = {
|
|
508
|
+
owner: data.owner,
|
|
509
|
+
hostUri: data.hostUri,
|
|
510
|
+
name: data.name ?? undefined, // Convert null to undefined
|
|
511
|
+
email: data.email,
|
|
512
|
+
website: data.website,
|
|
513
|
+
isAudited: data.isAudited,
|
|
514
|
+
akashVersion: data.akashVersion,
|
|
515
|
+
cosmosSdkVersion: data.cosmosSdkVersion,
|
|
516
|
+
location,
|
|
517
|
+
reliability,
|
|
518
|
+
};
|
|
519
|
+
return success(providerInfo);
|
|
520
|
+
}
|
|
521
|
+
catch (error) {
|
|
522
|
+
// Map axios error information into a helpful message
|
|
523
|
+
let statusCode;
|
|
524
|
+
let detail = String(error);
|
|
525
|
+
if (axios.isAxiosError(error)) {
|
|
526
|
+
statusCode = error.response?.status;
|
|
527
|
+
if (error.code === 'ETIMEDOUT' || error.message.includes('timeout')) {
|
|
528
|
+
detail = `timeout after 10s`;
|
|
529
|
+
}
|
|
530
|
+
else if (statusCode) {
|
|
531
|
+
detail = `HTTP ${statusCode}`;
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
return failure(new DeploymentError(`Console API fetch failed: ${detail}`, 'CONSOLE_API_ERROR', { providerAddress, statusCode, error: String(error) }, true, 'Will fallback to blockchain query'));
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
/**
|
|
538
|
+
* Fetch provider data directly from blockchain (internal helper)
|
|
539
|
+
*
|
|
540
|
+
* Fallback when Console API is unavailable. Returns basic provider data without
|
|
541
|
+
* reliability metrics, location information, or version data.
|
|
542
|
+
*/
|
|
543
|
+
async function fetchFromBlockchain(network, providerAddress) {
|
|
544
|
+
// Create temporary client for read-only query
|
|
545
|
+
const client = new AkashClient({ network });
|
|
546
|
+
try {
|
|
547
|
+
// Query provider metadata from blockchain
|
|
548
|
+
const result = await client.getProvider(providerAddress);
|
|
549
|
+
if (!result.success) {
|
|
550
|
+
return failure(new DeploymentError(result.error.message, result.error.code, result.error.context, result.error.recoverable, result.error.suggestion));
|
|
551
|
+
}
|
|
552
|
+
// After success check, data is guaranteed to exist
|
|
553
|
+
const metadata = result.data;
|
|
554
|
+
// Check if provider is audited based on attributes
|
|
555
|
+
// Audited providers typically have an "audited-by" attribute
|
|
556
|
+
const isAudited = metadata.attributes.some((attr) => attr.key === 'audited-by');
|
|
557
|
+
// Construct minimal provider info from blockchain data
|
|
558
|
+
const providerInfo = {
|
|
559
|
+
owner: providerAddress,
|
|
560
|
+
hostUri: metadata.hostUri || '',
|
|
561
|
+
isAudited,
|
|
562
|
+
// No reliability, location, or version data from blockchain alone
|
|
563
|
+
};
|
|
564
|
+
// Cleanup client connection
|
|
565
|
+
await client.disconnect();
|
|
566
|
+
return success(providerInfo);
|
|
567
|
+
}
|
|
568
|
+
catch (error) {
|
|
569
|
+
// Cleanup client connection on error
|
|
570
|
+
await client.disconnect();
|
|
571
|
+
return failure(new DeploymentError(`Blockchain query failed: ${error}`, 'BLOCKCHAIN_QUERY_ERROR', { providerAddress, error: String(error) }, true, 'Unable to fetch provider info from any source'));
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
//# sourceMappingURL=provider-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-manager.js","sourceRoot":"","sources":["../../../src/targets/akash/provider-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @module targets/akash/sdl-generator
|
|
10
10
|
*/
|
|
11
|
-
import { SDL } from '@akashnetwork/
|
|
11
|
+
import { SDL } from '@akashnetwork/chain-sdk';
|
|
12
12
|
import type { LoadedProfile, AkashDeploymentProfile } from '../../types/index.js';
|
|
13
13
|
/**
|
|
14
14
|
* Generation options allowing the caller to override resource/pricing defaults
|
|
@@ -25,7 +25,7 @@ export interface AkashSdlGenerationOptions {
|
|
|
25
25
|
*/
|
|
26
26
|
export declare function generateAkashSdl(loadedProfile: LoadedProfile<AkashDeploymentProfile>, options?: AkashSdlGenerationOptions): string;
|
|
27
27
|
/**
|
|
28
|
-
* Generates SDL string and returns an instantiated SDL helper from
|
|
28
|
+
* Generates SDL string and returns an instantiated SDL helper from chain-sdk.
|
|
29
29
|
*/
|
|
30
30
|
export declare function createSdlObject(loadedProfile: LoadedProfile<AkashDeploymentProfile>, options?: AkashSdlGenerationOptions): SDL;
|
|
31
31
|
//# sourceMappingURL=sdl-generator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdl-generator.d.ts","sourceRoot":"","sources":["../../../src/targets/akash/sdl-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,GAAG,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"sdl-generator.d.ts","sourceRoot":"","sources":["../../../src/targets/akash/sdl-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAQlF;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACxC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,aAAa,CAAC,sBAAsB,CAAC,EACpD,OAAO,GAAE,yBAA8B,GACtC,MAAM,CAmGR;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,aAAa,EAAE,aAAa,CAAC,sBAAsB,CAAC,EACpD,OAAO,CAAC,EAAE,yBAAyB,GAClC,GAAG,CAGL"}
|