@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
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
* });
|
|
37
37
|
*
|
|
38
38
|
* if (result.success) {
|
|
39
|
-
* console.log(
|
|
40
|
-
* console.log(
|
|
39
|
+
* console.log(`Deployed! DSEQ: ${result.data.dseq}`);
|
|
40
|
+
* console.log(`Endpoints:`, result.data.endpoints);
|
|
41
41
|
* }
|
|
42
42
|
* ```
|
|
43
43
|
*
|
|
@@ -81,7 +81,45 @@
|
|
|
81
81
|
* @module akash
|
|
82
82
|
*/
|
|
83
83
|
// ========================================
|
|
84
|
-
//
|
|
84
|
+
// Core Client API
|
|
85
|
+
// ========================================
|
|
86
|
+
/**
|
|
87
|
+
* Akash blockchain client
|
|
88
|
+
*
|
|
89
|
+
* Single SDK instance manager for all Akash blockchain operations.
|
|
90
|
+
* Creates one SDK instance (vs 7+ in old implementation) for 85% reduction in overhead.
|
|
91
|
+
*
|
|
92
|
+
* **Usage Pattern:**
|
|
93
|
+
* ```typescript
|
|
94
|
+
* // Create client (read-only or with signer)
|
|
95
|
+
* const client = new AkashClient({ network: 'mainnet', signer });
|
|
96
|
+
*
|
|
97
|
+
* // Perform operations
|
|
98
|
+
* const bids = await client.getBids(wallet, dseq);
|
|
99
|
+
* const lease = await client.acceptBid(bids.data[0].bid);
|
|
100
|
+
*
|
|
101
|
+
* // Cleanup when done
|
|
102
|
+
* await client.disconnect();
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
export { AkashClient } from './client.js';
|
|
106
|
+
/**
|
|
107
|
+
* Certificate manager for Akash Network
|
|
108
|
+
*
|
|
109
|
+
* Handles certificate operations using AkashClient's SDK instance.
|
|
110
|
+
* Provides methods for querying, broadcasting, and ensuring certificates exist.
|
|
111
|
+
*/
|
|
112
|
+
export { CertificateManager } from './certificate-manager.js';
|
|
113
|
+
/**
|
|
114
|
+
* Certificate utility functions
|
|
115
|
+
*
|
|
116
|
+
* Standalone utilities that don't require SDK access:
|
|
117
|
+
* - generateCertificate: Create new X.509 certificate
|
|
118
|
+
* - parseCertificate: Validate and parse certificate JSON
|
|
119
|
+
*/
|
|
120
|
+
export { generateCertificate, parseCertificate } from './certificate-manager.js';
|
|
121
|
+
// ========================================
|
|
122
|
+
// High-Level Deployment API
|
|
85
123
|
// ========================================
|
|
86
124
|
/**
|
|
87
125
|
* Main deployment orchestration function
|
|
@@ -96,7 +134,7 @@
|
|
|
96
134
|
*/
|
|
97
135
|
export { deployToAkash } from './deployer.js';
|
|
98
136
|
// ========================================
|
|
99
|
-
//
|
|
137
|
+
// Wallet Management
|
|
100
138
|
// ========================================
|
|
101
139
|
/**
|
|
102
140
|
* Connect wallet (Keplr browser extension or WalletConnect)
|
|
@@ -180,12 +218,12 @@ export { createWalletContextFromSigner } from './wallet-manager.js';
|
|
|
180
218
|
/**
|
|
181
219
|
* Create wallet context from mnemonic (for agent-controlled wallets)
|
|
182
220
|
*
|
|
183
|
-
*
|
|
221
|
+
* WARNING: Only use this for wallets YOU control!
|
|
184
222
|
*
|
|
185
223
|
* Use this for:
|
|
186
|
-
* -
|
|
187
|
-
* -
|
|
188
|
-
* -
|
|
224
|
+
* - Your own CI/CD automation
|
|
225
|
+
* - Your own agents (running on your infrastructure)
|
|
226
|
+
* - Custodial services you operate
|
|
189
227
|
*
|
|
190
228
|
* **NEVER** give your mnemonic to third-party agents!
|
|
191
229
|
* For third-party services, use `connectWallet()` with WalletConnect instead.
|
|
@@ -211,145 +249,6 @@ export { createWalletFromMnemonic } from './wallet-manager.js';
|
|
|
211
249
|
* Safely disconnects wallet and cleans up WalletConnect sessions if applicable.
|
|
212
250
|
*/
|
|
213
251
|
export { disconnectWallet } from './wallet-manager.js';
|
|
214
|
-
// ========================================
|
|
215
|
-
// 📜 Certificate Management
|
|
216
|
-
// ========================================
|
|
217
|
-
/**
|
|
218
|
-
* Generate a new Akash certificate
|
|
219
|
-
*
|
|
220
|
-
* Creates fresh X.509 certificate for mTLS authentication with providers.
|
|
221
|
-
* Certificate must be broadcast to blockchain before use.
|
|
222
|
-
*
|
|
223
|
-
* @example
|
|
224
|
-
* ```typescript
|
|
225
|
-
* const cert = generateCertificate(wallet.address);
|
|
226
|
-
* if (cert.success) {
|
|
227
|
-
* // Now broadcast to blockchain
|
|
228
|
-
* await broadcastCertificate(wallet, cert.data, client);
|
|
229
|
-
* }
|
|
230
|
-
* ```
|
|
231
|
-
*/
|
|
232
|
-
export { generateCertificate } from './certificate-manager.js';
|
|
233
|
-
/**
|
|
234
|
-
* Parse and validate certificate from JSON
|
|
235
|
-
*
|
|
236
|
-
* Validates certificate structure and PEM format before use.
|
|
237
|
-
*/
|
|
238
|
-
export { parseCertificate } from './certificate-manager.js';
|
|
239
|
-
/**
|
|
240
|
-
* Broadcast certificate to blockchain
|
|
241
|
-
*
|
|
242
|
-
* Submits certificate transaction, making it available for provider authentication.
|
|
243
|
-
*/
|
|
244
|
-
export { broadcastCertificate } from './certificate-manager.js';
|
|
245
|
-
/**
|
|
246
|
-
* Query certificate from blockchain
|
|
247
|
-
*
|
|
248
|
-
* Checks if valid certificate exists on-chain for wallet address.
|
|
249
|
-
*/
|
|
250
|
-
export { queryCertificate } from './certificate-manager.js';
|
|
251
|
-
/**
|
|
252
|
-
* Ensure certificate exists (convenience)
|
|
253
|
-
*
|
|
254
|
-
* High-level helper that handles complete certificate workflow:
|
|
255
|
-
* - Use existing certificate if provided
|
|
256
|
-
* - Query blockchain for existing certificate
|
|
257
|
-
* - Generate and broadcast new certificate if needed
|
|
258
|
-
*
|
|
259
|
-
* @example
|
|
260
|
-
* ```typescript
|
|
261
|
-
* const cert = await ensureCertificate(wallet, 'mainnet', client);
|
|
262
|
-
* // Certificate is guaranteed ready to use
|
|
263
|
-
* ```
|
|
264
|
-
*/
|
|
265
|
-
export { ensureCertificate } from './certificate-manager.js';
|
|
266
|
-
// ========================================
|
|
267
|
-
// ⛓️ Blockchain Operations
|
|
268
|
-
// ========================================
|
|
269
|
-
/**
|
|
270
|
-
* Create signing client for Akash blockchain
|
|
271
|
-
*
|
|
272
|
-
* Creates SigningStargateClient configured with Akash-specific message types.
|
|
273
|
-
* Required for all blockchain transactions.
|
|
274
|
-
*
|
|
275
|
-
* @example
|
|
276
|
-
* ```typescript
|
|
277
|
-
* const result = await createSigningClient(wallet, 'mainnet');
|
|
278
|
-
* if (result.success) {
|
|
279
|
-
* const { client, account } = result.data;
|
|
280
|
-
* // Use client for transactions
|
|
281
|
-
* }
|
|
282
|
-
* ```
|
|
283
|
-
*/
|
|
284
|
-
export { createSigningClient } from './blockchain-client.js';
|
|
285
|
-
/**
|
|
286
|
-
* Create deployment on Akash blockchain
|
|
287
|
-
*
|
|
288
|
-
* Submits deployment transaction with SDL manifest.
|
|
289
|
-
* Returns deployment sequence number (dseq) for tracking.
|
|
290
|
-
*/
|
|
291
|
-
export { createDeployment } from './blockchain-client.js';
|
|
292
|
-
/**
|
|
293
|
-
* Query provider bids for deployment
|
|
294
|
-
*
|
|
295
|
-
* Fetches current bids from providers willing to host your deployment.
|
|
296
|
-
* Supports provider blacklisting.
|
|
297
|
-
*/
|
|
298
|
-
export { queryBids } from './blockchain-client.js';
|
|
299
|
-
/**
|
|
300
|
-
* Wait for provider bids (polling)
|
|
301
|
-
*
|
|
302
|
-
* Continuously polls for bids until timeout.
|
|
303
|
-
* Useful when bids don't appear immediately.
|
|
304
|
-
*/
|
|
305
|
-
export { waitForBids } from './blockchain-client.js';
|
|
306
|
-
/**
|
|
307
|
-
* Create lease with selected provider
|
|
308
|
-
*
|
|
309
|
-
* Accepts provider bid and creates lease on blockchain.
|
|
310
|
-
* After this, you can send manifest to provider.
|
|
311
|
-
*/
|
|
312
|
-
export { createLease } from './blockchain-client.js';
|
|
313
|
-
/**
|
|
314
|
-
* Close/terminate a deployment
|
|
315
|
-
*
|
|
316
|
-
* Closes an active deployment on the blockchain, terminating the lease
|
|
317
|
-
* and stopping all containers on the provider. The provider will release
|
|
318
|
-
* resources and stop billing.
|
|
319
|
-
*
|
|
320
|
-
* **Important Notes:**
|
|
321
|
-
* - Closing a deployment is permanent and cannot be undone
|
|
322
|
-
* - You'll lose access to all data in ephemeral storage
|
|
323
|
-
* - Persistent storage may be retained by provider for a limited time
|
|
324
|
-
* - You can redeploy using the same SDL if needed
|
|
325
|
-
*
|
|
326
|
-
* **When to Use:**
|
|
327
|
-
* - Gracefully shut down deployments you no longer need
|
|
328
|
-
* - Stop billing for inactive services
|
|
329
|
-
* - Clean up test/development deployments
|
|
330
|
-
* - Migrate to a different provider
|
|
331
|
-
*
|
|
332
|
-
* @example Close a deployment
|
|
333
|
-
* ```typescript
|
|
334
|
-
* import { createSigningClient, closeDeployment } from '@kadi.build/deploy-ability/akash';
|
|
335
|
-
*
|
|
336
|
-
* const clientResult = await createSigningClient(wallet, 'mainnet');
|
|
337
|
-
* if (!clientResult.success) throw clientResult.error;
|
|
338
|
-
*
|
|
339
|
-
* const result = await closeDeployment(
|
|
340
|
-
* clientResult.data,
|
|
341
|
-
* wallet,
|
|
342
|
-
* '12345' // DSEQ from deployment
|
|
343
|
-
* );
|
|
344
|
-
*
|
|
345
|
-
* if (result.success) {
|
|
346
|
-
* console.log('Deployment closed:', result.data.transactionHash);
|
|
347
|
-
* }
|
|
348
|
-
* ```
|
|
349
|
-
*
|
|
350
|
-
* @see DeploymentCloseResult for details on the response structure
|
|
351
|
-
*/
|
|
352
|
-
export { closeDeployment } from './blockchain-client.js';
|
|
353
252
|
/**
|
|
354
253
|
* Create BidPricing from raw blockchain price
|
|
355
254
|
*
|
|
@@ -366,7 +265,7 @@ export { closeDeployment } from './blockchain-client.js';
|
|
|
366
265
|
* console.log(pricing.akt.perMonth); // Monthly cost in AKT
|
|
367
266
|
* ```
|
|
368
267
|
*/
|
|
369
|
-
export { createBidPricing } from './
|
|
268
|
+
export { createBidPricing } from './bids.js';
|
|
370
269
|
/**
|
|
371
270
|
* Select cheapest bid
|
|
372
271
|
*
|
|
@@ -408,7 +307,7 @@ export { createBidPricing } from './bid-types.js';
|
|
|
408
307
|
* });
|
|
409
308
|
* ```
|
|
410
309
|
*/
|
|
411
|
-
export { selectCheapestBid } from './
|
|
310
|
+
export { selectCheapestBid } from './bids.js';
|
|
412
311
|
/**
|
|
413
312
|
* Select most reliable bid
|
|
414
313
|
*
|
|
@@ -445,7 +344,7 @@ export { selectCheapestBid } from './bid-selectors.js';
|
|
|
445
344
|
* });
|
|
446
345
|
* ```
|
|
447
346
|
*/
|
|
448
|
-
export { selectMostReliableBid } from './
|
|
347
|
+
export { selectMostReliableBid } from './bids.js';
|
|
449
348
|
/**
|
|
450
349
|
* Select balanced bid (price + reliability)
|
|
451
350
|
*
|
|
@@ -499,7 +398,7 @@ export { selectMostReliableBid } from './bid-selectors.js';
|
|
|
499
398
|
* });
|
|
500
399
|
* ```
|
|
501
400
|
*/
|
|
502
|
-
export { selectBalancedBid } from './
|
|
401
|
+
export { selectBalancedBid } from './bids.js';
|
|
503
402
|
/**
|
|
504
403
|
* Filter bids by criteria
|
|
505
404
|
*
|
|
@@ -542,7 +441,7 @@ export { selectBalancedBid } from './bid-selectors.js';
|
|
|
542
441
|
* });
|
|
543
442
|
* ```
|
|
544
443
|
*/
|
|
545
|
-
export { filterBids } from './
|
|
444
|
+
export { filterBids } from './bids.js';
|
|
546
445
|
/**
|
|
547
446
|
* Fetch provider metadata
|
|
548
447
|
*
|
|
@@ -567,7 +466,7 @@ export { filterBids } from './bid-selectors.js';
|
|
|
567
466
|
* }
|
|
568
467
|
* ```
|
|
569
468
|
*/
|
|
570
|
-
export { fetchProviderInfo } from './provider-
|
|
469
|
+
export { fetchProviderInfo } from './provider-manager.js';
|
|
571
470
|
/**
|
|
572
471
|
* Fetch multiple providers in parallel
|
|
573
472
|
*
|
|
@@ -586,40 +485,19 @@ export { fetchProviderInfo } from './provider-service.js';
|
|
|
586
485
|
* }
|
|
587
486
|
* ```
|
|
588
487
|
*/
|
|
589
|
-
export { fetchProviderInfoBatch } from './provider-
|
|
488
|
+
export { fetchProviderInfoBatch } from './provider-manager.js';
|
|
590
489
|
// ========================================
|
|
591
|
-
//
|
|
490
|
+
// Query & Monitoring
|
|
592
491
|
// ========================================
|
|
593
492
|
/**
|
|
594
|
-
*
|
|
595
|
-
*
|
|
596
|
-
*
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
/**
|
|
600
|
-
* Fetch single lease by ID
|
|
601
|
-
*
|
|
602
|
-
* Get detailed lease information for specific deployment.
|
|
603
|
-
*/
|
|
604
|
-
export { getLeaseById } from './query-client.js';
|
|
605
|
-
/**
|
|
606
|
-
* Fetch deployment details
|
|
607
|
-
*
|
|
608
|
-
* Get deployment configuration, resource specs, and group information.
|
|
609
|
-
*/
|
|
610
|
-
export { getDeploymentDetails } from './query-client.js';
|
|
611
|
-
/**
|
|
612
|
-
* Fetch provider metadata
|
|
613
|
-
*
|
|
614
|
-
* Get provider host URI and attributes for deployment monitoring.
|
|
615
|
-
*/
|
|
616
|
-
export { getProviderMetadata } from './query-client.js';
|
|
617
|
-
/**
|
|
618
|
-
* Get complete deployment overview
|
|
493
|
+
* Query functions are now AkashClient methods:
|
|
494
|
+
* - client.getLeases() - Query leases with filters
|
|
495
|
+
* - client.getLeaseById() - Get lease details
|
|
496
|
+
* - client.getDeployment() - Get deployment details
|
|
497
|
+
* - client.getProvider() - Get provider metadata
|
|
619
498
|
*
|
|
620
|
-
*
|
|
499
|
+
* Types are exported from client.ts and types.ts
|
|
621
500
|
*/
|
|
622
|
-
export { getDeploymentOverview } from './query-client.js';
|
|
623
501
|
/**
|
|
624
502
|
* Wait for containers to reach running state
|
|
625
503
|
*
|
|
@@ -631,15 +509,15 @@ export { waitForContainersRunning } from './lease-monitor.js';
|
|
|
631
509
|
*
|
|
632
510
|
* Delivers deployment manifest to provider via HTTPS with mTLS authentication.
|
|
633
511
|
*/
|
|
634
|
-
export { sendManifestToProvider } from './provider-
|
|
512
|
+
export { sendManifestToProvider } from './provider-manager.js';
|
|
635
513
|
/**
|
|
636
514
|
* Fetch lease status from provider
|
|
637
515
|
*
|
|
638
516
|
* Query provider for current lease status and service URIs.
|
|
639
517
|
*/
|
|
640
|
-
export { fetchProviderLeaseStatus } from './provider-
|
|
518
|
+
export { fetchProviderLeaseStatus } from './provider-manager.js';
|
|
641
519
|
// ========================================
|
|
642
|
-
//
|
|
520
|
+
// Log Streaming
|
|
643
521
|
// ========================================
|
|
644
522
|
/**
|
|
645
523
|
* Stream container logs from Akash deployment in real-time
|
|
@@ -671,7 +549,7 @@ export { fetchProviderLeaseStatus } from './provider-client.js';
|
|
|
671
549
|
*
|
|
672
550
|
* // Watch for specific events
|
|
673
551
|
* if (log.message.includes('Model ready!')) {
|
|
674
|
-
* console.log('
|
|
552
|
+
* console.log('Model is ready!');
|
|
675
553
|
* stream.close();
|
|
676
554
|
* }
|
|
677
555
|
* });
|
|
@@ -696,7 +574,7 @@ export { fetchProviderLeaseStatus } from './provider-client.js';
|
|
|
696
574
|
* console.log('📦 Downloading model weights...');
|
|
697
575
|
* }
|
|
698
576
|
* if (log.message.includes('100%')) {
|
|
699
|
-
* console.log('
|
|
577
|
+
* console.log('Download complete!');
|
|
700
578
|
* }
|
|
701
579
|
* });
|
|
702
580
|
* ```
|
|
@@ -752,7 +630,7 @@ export { generateAkashSdl } from './sdl-generator.js';
|
|
|
752
630
|
*/
|
|
753
631
|
export { createSdlObject } from './sdl-generator.js';
|
|
754
632
|
// ========================================
|
|
755
|
-
//
|
|
633
|
+
// Pricing Utilities
|
|
756
634
|
// ========================================
|
|
757
635
|
/**
|
|
758
636
|
* Lease price calculator with multi-format support
|
|
@@ -788,8 +666,8 @@ export { createSdlObject } from './sdl-generator.js';
|
|
|
788
666
|
* const result = await deployToAkash({ ... });
|
|
789
667
|
* if (result.success) {
|
|
790
668
|
* const usd = result.data.leasePrice.toUSD(aktPrice);
|
|
791
|
-
* console.log(
|
|
792
|
-
* console.log(
|
|
669
|
+
* console.log(`Cost: $${usd.perMonth.toFixed(2)}/month`);
|
|
670
|
+
* console.log(`Cost: $${usd.perHour.toFixed(4)}/hour`);
|
|
793
671
|
* }
|
|
794
672
|
* ```
|
|
795
673
|
*
|
|
@@ -804,7 +682,7 @@ export { LeasePrice } from './pricing.js';
|
|
|
804
682
|
*/
|
|
805
683
|
export { AVERAGE_BLOCK_TIME_SECONDS, AVERAGE_DAYS_IN_MONTH, UAKT_PER_AKT, } from './pricing.js';
|
|
806
684
|
// ========================================
|
|
807
|
-
//
|
|
685
|
+
// Environment & Configuration
|
|
808
686
|
// ========================================
|
|
809
687
|
/**
|
|
810
688
|
* Get network configuration
|
|
@@ -822,12 +700,6 @@ export { getNetworkConfig } from './environment.js';
|
|
|
822
700
|
* Network configurations for mainnet and testnet
|
|
823
701
|
*/
|
|
824
702
|
export { AKASH_NETWORKS } from './environment.js';
|
|
825
|
-
/**
|
|
826
|
-
* Check if provider is blacklisted
|
|
827
|
-
*
|
|
828
|
-
* Verifies provider against known problematic providers.
|
|
829
|
-
*/
|
|
830
|
-
export { isProviderBlacklisted } from './environment.js';
|
|
831
703
|
/**
|
|
832
704
|
* Placement attribute constants
|
|
833
705
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/targets/akash/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiFG;AAEH,2CAA2C;AAC3C
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/targets/akash/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiFG;AAEH,2CAA2C;AAC3C,kBAAkB;AAClB,2CAA2C;AAE3C;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;GAKG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D;;;;;;GAMG;AACH,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAgBjF,2CAA2C;AAC3C,4BAA4B;AAC5B,2CAA2C;AAE3C;;;;;;;;;;GAUG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAS9C,2CAA2C;AAC3C,oBAAoB;AACpB,2CAA2C;AAE3C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;;;;GAKG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;;GAIG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;;;;GAIG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;;GAIG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D;;;;GAIG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAiMvD;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AA8CvC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,2CAA2C;AAC3C,qBAAqB;AACrB,2CAA2C;AAE3C;;;;;;;;GAQG;AAEH;;;;GAIG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAO9D;;;;GAIG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D;;;;GAIG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAWjE,2CAA2C;AAC3C,gBAAgB;AAChB,2CAA2C;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAY9C,2CAA2C;AAC3C,oBAAoB;AACpB,2CAA2C;AAE3C;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;;;GAKG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAOrD,2CAA2C;AAC3C,oBAAoB;AACpB,2CAA2C;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;;;GAKG;AACH,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,YAAY,GACb,MAAM,cAAc,CAAC;AAEtB,2CAA2C;AAC3C,8BAA8B;AAC9B,2CAA2C;AAE3C;;;;;;;;;;GAUG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOlD;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EACL,aAAa,EACb,WAAW,EACX,eAAe,EACf,aAAa,GACd,MAAM,gBAAgB,CAAC;AAUxB,2CAA2C;AAC3C,0BAA0B;AAC1B,2CAA2C;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D;;;;;GAKG;AACH,OAAO,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAwClF;;GAEG;AACH,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -11,35 +11,17 @@
|
|
|
11
11
|
import type { Result } from '../../types/index.js';
|
|
12
12
|
import type { DeploymentLogger } from '../../types/common.js';
|
|
13
13
|
import { ProviderError } from '../../errors/index.js';
|
|
14
|
-
import type { AkashProviderTlsCertificate } from './types.js';
|
|
14
|
+
import type { AkashProviderTlsCertificate, LeaseDetails } from './types.js';
|
|
15
15
|
import type { AkashNetwork } from './environment.js';
|
|
16
|
-
import { type
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Options for waiting until provider containers are running
|
|
20
|
-
*/
|
|
16
|
+
import { type ProviderLeaseStatus } from './provider-manager.js';
|
|
17
|
+
/** Options for waiting until provider containers are running */
|
|
21
18
|
export interface LeaseMonitorOptions {
|
|
22
|
-
/** Akash network in which the lease exists */
|
|
23
19
|
readonly network: AkashNetwork;
|
|
24
|
-
/** Lease identifiers (owner/provider/dseq/gseq/oseq) */
|
|
25
20
|
readonly lease: LeaseDetails;
|
|
26
|
-
/** Provider URI returned during deployment */
|
|
27
21
|
readonly providerUri: string;
|
|
28
|
-
/** TLS certificate bundle for mTLS authentication */
|
|
29
22
|
readonly certificate: AkashProviderTlsCertificate;
|
|
30
|
-
/**
|
|
31
|
-
* Poll interval in milliseconds
|
|
32
|
-
*
|
|
33
|
-
* @default 10000 (10 seconds)
|
|
34
|
-
*/
|
|
35
23
|
readonly pollIntervalMs?: number;
|
|
36
|
-
/**
|
|
37
|
-
* Maximum time to wait before timing out (milliseconds)
|
|
38
|
-
*
|
|
39
|
-
* @default 600000 (10 minutes)
|
|
40
|
-
*/
|
|
41
24
|
readonly maxWaitMs?: number;
|
|
42
|
-
/** Logger for human-friendly progress output */
|
|
43
25
|
readonly logger?: DeploymentLogger;
|
|
44
26
|
}
|
|
45
27
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lease-monitor.d.ts","sourceRoot":"","sources":["../../../src/targets/akash/lease-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EACL,aAAa,EAGd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"lease-monitor.d.ts","sourceRoot":"","sources":["../../../src/targets/akash/lease-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EACL,aAAa,EAGd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,2BAA2B,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,uBAAuB,CAAC;AAE/B,gEAAgE;AAChE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAC;IAClD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;CACpC;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC,CAwDrD"}
|
|
@@ -11,70 +11,57 @@
|
|
|
11
11
|
import { setTimeout as delay } from 'node:timers/promises';
|
|
12
12
|
import { success, failure } from '../../types/index.js';
|
|
13
13
|
import { defaultLogger } from '../../utils/logger.js';
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import { fetchProviderLeaseStatus, } from './provider-client.js';
|
|
14
|
+
import { ProviderErrorCodes, containerTimeoutError, } from '../../errors/index.js';
|
|
15
|
+
import { fetchProviderLeaseStatus, } from './provider-manager.js';
|
|
17
16
|
/**
|
|
18
17
|
* Polls both on-chain lease status and the provider status endpoint until all
|
|
19
18
|
* containers report `ready`. Returns the final provider status snapshot on
|
|
20
19
|
* success or a ProviderError on failure/timeout.
|
|
21
20
|
*/
|
|
22
21
|
export async function waitForContainersRunning(options) {
|
|
23
|
-
const {
|
|
22
|
+
const { lease, providerUri, certificate, pollIntervalMs = 10_000, maxWaitMs = 600_000, logger = defaultLogger, } = options;
|
|
24
23
|
const start = Date.now();
|
|
25
24
|
let lastStatusSummary = '';
|
|
26
|
-
logger.log('
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
25
|
+
logger.log('Monitoring provider until containers report ready...');
|
|
26
|
+
try {
|
|
27
|
+
while (Date.now() - start < maxWaitMs) {
|
|
28
|
+
// Query provider status endpoint via mTLS to check container readiness
|
|
29
|
+
const statusResult = await fetchProviderLeaseStatus({
|
|
30
|
+
providerUri,
|
|
31
|
+
lease: toLeaseReference(lease),
|
|
32
|
+
certificate,
|
|
33
|
+
});
|
|
34
|
+
if (!statusResult.success) {
|
|
35
|
+
// Treat unreachable provider separately to surface clear cause
|
|
36
|
+
if (statusResult.error.code === ProviderErrorCodes.PROVIDER_UNREACHABLE) {
|
|
37
|
+
logger.warn('Provider not yet reachable – retrying in a moment...');
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
logger.warn(`Provider reported error: ${statusResult.error.message}`);
|
|
41
|
+
}
|
|
42
|
+
await delay(pollIntervalMs);
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
const providerStatus = statusResult.data;
|
|
46
|
+
const summary = summariseServices(providerStatus);
|
|
47
|
+
if (summary !== lastStatusSummary && summary.length > 0) {
|
|
48
|
+
logger.log(` Service readiness: ${summary}`);
|
|
49
|
+
lastStatusSummary = summary;
|
|
51
50
|
}
|
|
52
|
-
|
|
53
|
-
logger.
|
|
51
|
+
if (allServicesReady(providerStatus)) {
|
|
52
|
+
logger.log('Containers are reporting ready on the provider.');
|
|
53
|
+
return success(providerStatus);
|
|
54
54
|
}
|
|
55
55
|
await delay(pollIntervalMs);
|
|
56
|
-
continue;
|
|
57
56
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
if (allServicesReady(providerStatus)) {
|
|
65
|
-
logger.log('✅ Containers are reporting ready on the provider.');
|
|
66
|
-
return success(providerStatus);
|
|
67
|
-
}
|
|
68
|
-
await delay(pollIntervalMs);
|
|
57
|
+
// Timeout reached without readiness
|
|
58
|
+
return failure(containerTimeoutError('deployment', maxWaitMs));
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
// No client cleanup needed - we removed the blockchain query
|
|
69
62
|
}
|
|
70
|
-
// -------------------------------------------------------------------------
|
|
71
|
-
// Timeout reached without readiness
|
|
72
|
-
// -------------------------------------------------------------------------
|
|
73
|
-
return failure(containerTimeoutError('deployment', maxWaitMs));
|
|
74
63
|
}
|
|
75
|
-
/**
|
|
76
|
-
* Converts LeaseDetails into LeaseReference required by provider utilities.
|
|
77
|
-
*/
|
|
64
|
+
/** Converts LeaseDetails into LeaseReference required by provider utilities */
|
|
78
65
|
function toLeaseReference(lease) {
|
|
79
66
|
return {
|
|
80
67
|
dseq: lease.dseq,
|
|
@@ -82,9 +69,7 @@ function toLeaseReference(lease) {
|
|
|
82
69
|
oseq: lease.oseq,
|
|
83
70
|
};
|
|
84
71
|
}
|
|
85
|
-
/**
|
|
86
|
-
* Generates a human-readable readiness summary for logging.
|
|
87
|
-
*/
|
|
72
|
+
/** Generates a human-readable readiness summary for logging */
|
|
88
73
|
function summariseServices(status) {
|
|
89
74
|
const entries = Object.entries(status.services);
|
|
90
75
|
if (entries.length === 0) {
|
|
@@ -94,9 +79,7 @@ function summariseServices(status) {
|
|
|
94
79
|
.map(([name, service]) => `${name}:${service.ready}/${Math.max(service.total, 1)}`)
|
|
95
80
|
.join(', ');
|
|
96
81
|
}
|
|
97
|
-
/**
|
|
98
|
-
* Determines if all services meet their requested replica counts.
|
|
99
|
-
*/
|
|
82
|
+
/** Determines if all services meet their requested replica counts */
|
|
100
83
|
function allServicesReady(status) {
|
|
101
84
|
const services = Object.values(status.services);
|
|
102
85
|
if (services.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lease-monitor.js","sourceRoot":"","sources":["../../../src/targets/akash/lease-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,
|
|
1
|
+
{"version":3,"file":"lease-monitor.js","sourceRoot":"","sources":["../../../src/targets/akash/lease-monitor.ts"],"names":[],"mappings":"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"}
|