@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,599 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Akash Deployment Orchestrator
|
|
3
|
+
*
|
|
4
|
+
* High-level helper that glues together the lower-level modules:
|
|
5
|
+
* - profile loading
|
|
6
|
+
* - SDL generation
|
|
7
|
+
* - blockchain deployment workflow (create deployment → wait for bids → create lease)
|
|
8
|
+
* - provider manifest delivery and optional readiness monitoring
|
|
9
|
+
*
|
|
10
|
+
* This mirrors the legacy kadi-deploy deployment flow while embracing the
|
|
11
|
+
* composable building blocks exposed by deploy-ability.
|
|
12
|
+
*
|
|
13
|
+
* @module targets/akash/deployer
|
|
14
|
+
*/
|
|
15
|
+
import Long from 'long';
|
|
16
|
+
import { success, failure, createWalletAddress, createDeploymentSequence, } from '../../types/index.js';
|
|
17
|
+
import { defaultLogger } from '../../utils/logger.js';
|
|
18
|
+
import { loadProfile } from '../../utils/profile-loader.js';
|
|
19
|
+
import { createSigningClient, createDeployment, waitForBids, createLease, closeDeployment, } from './blockchain-client.js';
|
|
20
|
+
import { sendManifestToProvider, fetchProviderLeaseStatus, } from './provider-client.js';
|
|
21
|
+
import { getProviderMetadata, getLeaseById, getDeploymentDetails, } from './query-client.js';
|
|
22
|
+
import { waitForContainersRunning } from './lease-monitor.js';
|
|
23
|
+
import { LeasePrice } from './pricing.js';
|
|
24
|
+
import { generateAkashSdl, createSdlObject, } from './sdl-generator.js';
|
|
25
|
+
import { DeploymentError } from '../../errors/index.js';
|
|
26
|
+
/**
|
|
27
|
+
* Executes a full Akash deployment.
|
|
28
|
+
*/
|
|
29
|
+
export async function deployToAkash(params) {
|
|
30
|
+
const { wallet, certificate, bidSelector, logger: customLogger, dryRun = false, ...options } = params;
|
|
31
|
+
const logger = customLogger ?? defaultLogger;
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Load and validate deployment profile
|
|
34
|
+
// Use pre-loaded profile if provided (e.g., with registry URL transformations),
|
|
35
|
+
// otherwise load from disk
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
let loadedProfile;
|
|
38
|
+
if (options.loadedProfile) {
|
|
39
|
+
loadedProfile = options.loadedProfile;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
try {
|
|
43
|
+
loadedProfile = await loadProfile(options.projectRoot, options.profile, logger);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
return failure(new DeploymentError(`Failed to load deployment profile '${options.profile}'`, 'PROFILE_LOAD_FAILED', { error: String(error) }));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (loadedProfile.profile.target !== 'akash') {
|
|
50
|
+
return failure(new DeploymentError(`Profile '${loadedProfile.name}' is not an Akash deployment profile`, 'INVALID_PROFILE_TARGET', { profile: loadedProfile.name }));
|
|
51
|
+
}
|
|
52
|
+
// Type assertion: we've verified target === 'akash' above
|
|
53
|
+
const akashProfile = loadedProfile.profile;
|
|
54
|
+
const akashLoadedProfile = loadedProfile;
|
|
55
|
+
const selectedNetwork = (options.network ?? akashProfile.network);
|
|
56
|
+
if (selectedNetwork !== 'mainnet' && selectedNetwork !== 'testnet') {
|
|
57
|
+
return failure(new DeploymentError(`Unsupported Akash network '${selectedNetwork}'`, 'INVALID_NETWORK', { selectedNetwork }));
|
|
58
|
+
}
|
|
59
|
+
const network = selectedNetwork;
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
// Generate SDL (Akash manifest)
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
const sdlYaml = generateAkashSdl(akashLoadedProfile);
|
|
64
|
+
const sdlDocument = createSdlObject(akashLoadedProfile);
|
|
65
|
+
if (dryRun) {
|
|
66
|
+
const dryRunResult = {
|
|
67
|
+
dryRun: true,
|
|
68
|
+
sdl: sdlYaml,
|
|
69
|
+
profile: loadedProfile.name,
|
|
70
|
+
network,
|
|
71
|
+
};
|
|
72
|
+
return success(dryRunResult);
|
|
73
|
+
}
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
// Runtime validation: wallet and certificate required for actual deployment
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
if (!wallet) {
|
|
78
|
+
return failure(new DeploymentError('Wallet is required for deployment (not dry-run)', 'WALLET_REQUIRED', {}, false, 'Connect wallet using wallet-manager before deployment'));
|
|
79
|
+
}
|
|
80
|
+
if (!certificate) {
|
|
81
|
+
return failure(new DeploymentError('TLS certificate is required to communicate with the provider', 'CERTIFICATE_REQUIRED', {}, false, 'Generate or load a certificate using certificate-manager before deployment'));
|
|
82
|
+
}
|
|
83
|
+
if (!bidSelector) {
|
|
84
|
+
return failure(new DeploymentError('Bid selector function is required for deployment', 'BID_SELECTOR_REQUIRED', {}, false, 'Provide a bidSelector function to choose which provider bid to accept. ' +
|
|
85
|
+
'Use pre-built selectors like selectCheapestBid, selectMostReliableBid, or implement custom logic.'));
|
|
86
|
+
}
|
|
87
|
+
// -----------------------------------------------------------------------
|
|
88
|
+
// Start blockchain workflow
|
|
89
|
+
// -----------------------------------------------------------------------
|
|
90
|
+
const signingClientResult = await createSigningClient(wallet, network);
|
|
91
|
+
if (!signingClientResult.success) {
|
|
92
|
+
return signingClientResult;
|
|
93
|
+
}
|
|
94
|
+
const depositAkt = determineDeposit(options, akashProfile);
|
|
95
|
+
logger.log('📝 Creating deployment on blockchain...');
|
|
96
|
+
const deploymentResult = await createDeployment(signingClientResult.data, wallet, sdlDocument, depositAkt);
|
|
97
|
+
if (!deploymentResult.success) {
|
|
98
|
+
return deploymentResult;
|
|
99
|
+
}
|
|
100
|
+
logger.debug?.(`Deployment created: DSEQ ${deploymentResult.data.dseq}`);
|
|
101
|
+
logger.log('💰 Waiting for provider bids...');
|
|
102
|
+
const bidTimeoutMs = options.bidTimeout ?? 180000; // 3 minutes default
|
|
103
|
+
const bidsResult = await waitForBids(wallet, network, deploymentResult.data.dseq, {
|
|
104
|
+
customBlacklist: options.blacklist ? [...options.blacklist] : undefined,
|
|
105
|
+
timeoutMs: bidTimeoutMs,
|
|
106
|
+
});
|
|
107
|
+
if (!bidsResult.success) {
|
|
108
|
+
// Cleanup: close deployment to return escrow
|
|
109
|
+
logger.warn('⚠️ No bids received, closing deployment to return escrow...');
|
|
110
|
+
const closeResult = await closeDeployment(signingClientResult.data, wallet, deploymentResult.data.dseq);
|
|
111
|
+
if (closeResult.success) {
|
|
112
|
+
logger.log('✅ Deployment closed, escrow returned');
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
logger.warn('⚠️ Failed to close deployment automatically:', closeResult.error.message);
|
|
116
|
+
}
|
|
117
|
+
// Return enhanced error with cleanup info
|
|
118
|
+
return failure(new DeploymentError(`No provider bids received within ${bidTimeoutMs / 1000}s. Deployment closed, escrow returned.`, 'BID_TIMEOUT', {
|
|
119
|
+
dseq: deploymentResult.data.dseq,
|
|
120
|
+
timeoutMs: bidTimeoutMs,
|
|
121
|
+
cleaned: closeResult.success,
|
|
122
|
+
originalError: bidsResult.error
|
|
123
|
+
}, true, 'Try: 1) Increase bidTimeout, 2) Reduce resource requirements, 3) Increase deposit amount'));
|
|
124
|
+
}
|
|
125
|
+
const bids = bidsResult.data;
|
|
126
|
+
logger.debug?.(`Received ${bids.length} bid(s) from providers`);
|
|
127
|
+
// Call user's bid selector to choose which provider to use
|
|
128
|
+
logger.log('🎯 Selecting provider...');
|
|
129
|
+
let selectedBid;
|
|
130
|
+
try {
|
|
131
|
+
selectedBid = await bidSelector(bids);
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
return failure(new DeploymentError(`Bid selector function threw an error: ${error}`, 'BID_SELECTOR_ERROR', { error: String(error) }, true, 'Check your bidSelector implementation for errors'));
|
|
135
|
+
}
|
|
136
|
+
if (!selectedBid) {
|
|
137
|
+
return failure(new DeploymentError('Bid selector returned null - no acceptable bids found', 'NO_ACCEPTABLE_BIDS', { bidCount: bids.length }, true, 'Adjust your bid selection criteria or wait for more provider bids'));
|
|
138
|
+
}
|
|
139
|
+
logger.debug?.(`Selected provider: ${selectedBid.provider.name || selectedBid.provider.owner} ` +
|
|
140
|
+
`(${selectedBid.pricing.akt.perMonth.toFixed(2)} AKT/month)`);
|
|
141
|
+
logger.log('📋 Creating lease with provider...');
|
|
142
|
+
const leaseResult = await createLease(signingClientResult.data, selectedBid.bid);
|
|
143
|
+
if (!leaseResult.success) {
|
|
144
|
+
return leaseResult;
|
|
145
|
+
}
|
|
146
|
+
logger.debug?.('Lease created successfully');
|
|
147
|
+
const lease = leaseResult.data.leaseId;
|
|
148
|
+
// ---------------------------------------------------------------------------
|
|
149
|
+
// Provider manifest delivery
|
|
150
|
+
// ---------------------------------------------------------------------------
|
|
151
|
+
const providerMetadataResult = await getProviderMetadata(network, lease.provider);
|
|
152
|
+
if (!providerMetadataResult.success) {
|
|
153
|
+
return failure(new DeploymentError('Failed to retrieve provider metadata', 'PROVIDER_METADATA_ERROR', { provider: lease.provider }, true, 'Retry deployment or choose a different provider', 'error', providerMetadataResult.error));
|
|
154
|
+
}
|
|
155
|
+
const providerMetadata = providerMetadataResult.data;
|
|
156
|
+
const providerUri = providerMetadata?.hostUri;
|
|
157
|
+
if (!providerUri) {
|
|
158
|
+
return failure(new DeploymentError('Selected provider does not expose a host URI', 'PROVIDER_URI_MISSING', { provider: lease.provider }, true, 'Select a different provider or verify on-chain provider records'));
|
|
159
|
+
}
|
|
160
|
+
// ---------------------------------------------------------------------------
|
|
161
|
+
// Send manifest to provider with delay + retry
|
|
162
|
+
// ---------------------------------------------------------------------------
|
|
163
|
+
// Wait 5s before first attempt to give provider time to register the lease
|
|
164
|
+
// Retry up to 3 times on 4xx errors (especially 401 "no lease for deployment")
|
|
165
|
+
// Use exponential backoff (6s, 8s) to match Akash Console behavior
|
|
166
|
+
// Total worst case: 5s + 0s + 6s + 8s = 19s before third attempt
|
|
167
|
+
logger.log('📤 Sending manifest to provider...');
|
|
168
|
+
logger.log('⏳ Waiting 5s for provider to register lease...');
|
|
169
|
+
await new Promise(resolve => setTimeout(resolve, 5000)); // 5 second delay
|
|
170
|
+
const maxAttempts = 5; // Increased for slow GPU providers
|
|
171
|
+
let manifestResult;
|
|
172
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
173
|
+
if (attempt > 1) {
|
|
174
|
+
logger.log(`🔄 Retry attempt ${attempt}/${maxAttempts}...`);
|
|
175
|
+
}
|
|
176
|
+
manifestResult = await sendManifestToProvider({
|
|
177
|
+
providerUri,
|
|
178
|
+
lease: {
|
|
179
|
+
// Long types from protobuf need explicit toString() conversion
|
|
180
|
+
dseq: Long.isLong(lease.dseq) ? lease.dseq.toString() : lease.dseq,
|
|
181
|
+
gseq: lease.gseq,
|
|
182
|
+
oseq: lease.oseq,
|
|
183
|
+
},
|
|
184
|
+
manifest: sdlDocument.manifestSortedJSON(),
|
|
185
|
+
certificate,
|
|
186
|
+
});
|
|
187
|
+
// Success - break out of retry loop
|
|
188
|
+
if (manifestResult.success) {
|
|
189
|
+
logger.log('✅ Manifest sent successfully');
|
|
190
|
+
break;
|
|
191
|
+
}
|
|
192
|
+
// Check if error is retryable (4xx status codes)
|
|
193
|
+
const error = manifestResult.error;
|
|
194
|
+
const statusCode = error.context?.statusCode;
|
|
195
|
+
const isRetryable = typeof statusCode === 'number' && statusCode >= 400 && statusCode < 500;
|
|
196
|
+
// If not retryable or last attempt, return the error
|
|
197
|
+
if (!isRetryable || attempt === maxAttempts) {
|
|
198
|
+
logger.log(`❌ Manifest send failed (status: ${statusCode}): ${error.message}`);
|
|
199
|
+
if (error.context?.body) {
|
|
200
|
+
logger.log(`📄 Provider response: ${error.context.body}`);
|
|
201
|
+
}
|
|
202
|
+
return manifestResult;
|
|
203
|
+
}
|
|
204
|
+
// Exponential backoff: 6s for first retry, 8s for second retry
|
|
205
|
+
// Mirrors Akash Console's ~6s delay between attempts
|
|
206
|
+
const retryDelayMs = 4000 + (attempt * 2000); // 6s, 8s
|
|
207
|
+
logger.log(`⏱️ Got ${statusCode} error, retrying in ${retryDelayMs / 1000}s...`);
|
|
208
|
+
await new Promise(resolve => setTimeout(resolve, retryDelayMs));
|
|
209
|
+
}
|
|
210
|
+
// Should not reach here, but TypeScript needs this
|
|
211
|
+
if (!manifestResult.success) {
|
|
212
|
+
return manifestResult;
|
|
213
|
+
}
|
|
214
|
+
// ---------------------------------------------------------------------------
|
|
215
|
+
// Query additional deployment information
|
|
216
|
+
// ---------------------------------------------------------------------------
|
|
217
|
+
// Fetch detailed lease information (price, createdAt)
|
|
218
|
+
// Create a minimal lease identifier object for the query
|
|
219
|
+
// Validate blockchain addresses using Zod schemas
|
|
220
|
+
let validatedOwner;
|
|
221
|
+
let validatedProvider;
|
|
222
|
+
try {
|
|
223
|
+
validatedOwner = createWalletAddress(lease.owner);
|
|
224
|
+
validatedProvider = createWalletAddress(lease.provider);
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
return failure(new DeploymentError('Invalid wallet addresses received from blockchain', 'INVALID_BLOCKCHAIN_DATA', { owner: lease.owner, provider: lease.provider, error: String(error) }, false, 'This indicates malformed blockchain data. Please report this issue.'));
|
|
228
|
+
}
|
|
229
|
+
const leaseIdentifier = {
|
|
230
|
+
owner: validatedOwner,
|
|
231
|
+
provider: validatedProvider,
|
|
232
|
+
// Convert Long to string for query
|
|
233
|
+
dseq: Long.isLong(lease.dseq) ? lease.dseq.toString() : String(lease.dseq),
|
|
234
|
+
gseq: lease.gseq,
|
|
235
|
+
oseq: lease.oseq,
|
|
236
|
+
};
|
|
237
|
+
const leaseDetailsResult = await getLeaseById(network, leaseIdentifier);
|
|
238
|
+
if (!leaseDetailsResult.success) {
|
|
239
|
+
logger.warn(`Could not fetch lease details: ${leaseDetailsResult.error.message}`);
|
|
240
|
+
}
|
|
241
|
+
// Fetch deployment information (status, services, resources)
|
|
242
|
+
const deploymentDetailsResult = await getDeploymentDetails(network, lease.owner, Long.isLong(lease.dseq) ? lease.dseq.toString() : String(lease.dseq));
|
|
243
|
+
if (!deploymentDetailsResult.success) {
|
|
244
|
+
logger.warn(`Could not fetch deployment details: ${deploymentDetailsResult.error.message}`);
|
|
245
|
+
}
|
|
246
|
+
// ---------------------------------------------------------------------------
|
|
247
|
+
// Optional readiness monitoring
|
|
248
|
+
// ---------------------------------------------------------------------------
|
|
249
|
+
let providerStatus;
|
|
250
|
+
if (options.containerTimeout && options.containerTimeout > 0) {
|
|
251
|
+
// Build lease details with validation
|
|
252
|
+
let leaseDetails;
|
|
253
|
+
try {
|
|
254
|
+
leaseDetails = buildLeaseDetails(selectedBid.bid, leaseResult.data);
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
return failure(new DeploymentError('Invalid wallet addresses in lease data', 'INVALID_BLOCKCHAIN_DATA', { error: String(error) }, false, 'This indicates malformed blockchain data. Please report this issue.'));
|
|
258
|
+
}
|
|
259
|
+
const monitorResult = await waitForContainersRunning({
|
|
260
|
+
network,
|
|
261
|
+
lease: leaseDetails,
|
|
262
|
+
providerUri,
|
|
263
|
+
certificate,
|
|
264
|
+
pollIntervalMs: 10_000,
|
|
265
|
+
maxWaitMs: options.containerTimeout,
|
|
266
|
+
logger,
|
|
267
|
+
});
|
|
268
|
+
if (!monitorResult.success) {
|
|
269
|
+
// Cleanup: close deployment to return escrow
|
|
270
|
+
logger.warn('⚠️ Containers failed to start, closing deployment...');
|
|
271
|
+
const closeResult = await closeDeployment(signingClientResult.data, wallet, deploymentResult.data.dseq);
|
|
272
|
+
if (closeResult.success) {
|
|
273
|
+
logger.log('✅ Deployment closed, escrow returned');
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
logger.warn('⚠️ Failed to close deployment automatically:', closeResult.error.message);
|
|
277
|
+
}
|
|
278
|
+
// Return enhanced error with cleanup info
|
|
279
|
+
return failure(new DeploymentError(`Containers failed to start within ${options.containerTimeout / 1000}s. Deployment closed, escrow returned.`, 'CONTAINER_TIMEOUT', {
|
|
280
|
+
dseq: deploymentResult.data.dseq,
|
|
281
|
+
timeoutMs: options.containerTimeout,
|
|
282
|
+
cleaned: closeResult.success,
|
|
283
|
+
originalError: monitorResult.error
|
|
284
|
+
}, true, 'Try: 1) Increase containerTimeout for large images, 2) Check provider logs, 3) Try different provider'));
|
|
285
|
+
}
|
|
286
|
+
providerStatus = monitorResult.data;
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
const statusResult = await fetchProviderLeaseStatus({
|
|
290
|
+
providerUri,
|
|
291
|
+
lease: {
|
|
292
|
+
// Long types from protobuf need explicit toString() conversion
|
|
293
|
+
dseq: Long.isLong(lease.dseq) ? lease.dseq.toString() : lease.dseq,
|
|
294
|
+
gseq: lease.gseq,
|
|
295
|
+
oseq: lease.oseq,
|
|
296
|
+
},
|
|
297
|
+
certificate,
|
|
298
|
+
});
|
|
299
|
+
if (statusResult.success) {
|
|
300
|
+
providerStatus = statusResult.data;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
// ---------------------------------------------------------------------------
|
|
304
|
+
// Compose deployment result
|
|
305
|
+
// ---------------------------------------------------------------------------
|
|
306
|
+
try {
|
|
307
|
+
const deploymentData = createDeploymentData({
|
|
308
|
+
deployment: deploymentResult.data,
|
|
309
|
+
lease: leaseResult.data,
|
|
310
|
+
leaseDetails: leaseDetailsResult.success ? leaseDetailsResult.data : undefined,
|
|
311
|
+
deploymentDetails: deploymentDetailsResult.success
|
|
312
|
+
? deploymentDetailsResult.data
|
|
313
|
+
: undefined,
|
|
314
|
+
providerUri,
|
|
315
|
+
profileName: loadedProfile.name,
|
|
316
|
+
network,
|
|
317
|
+
certificate,
|
|
318
|
+
providerStatus,
|
|
319
|
+
});
|
|
320
|
+
return success(deploymentData);
|
|
321
|
+
}
|
|
322
|
+
catch (error) {
|
|
323
|
+
// Validation error from Zod schemas (malformed blockchain data)
|
|
324
|
+
return failure(new DeploymentError('Failed to validate deployment data from blockchain', 'INVALID_BLOCKCHAIN_DATA', { error: String(error) }, false, 'This indicates malformed blockchain data. Please report this issue.'));
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
/** Determines deposit in AKT to use for deployment. */
|
|
328
|
+
function determineDeposit(options, profile) {
|
|
329
|
+
// Check CLI options first (takes precedence)
|
|
330
|
+
if (typeof options.deposit === 'number' && options.deposit > 0) {
|
|
331
|
+
return options.deposit; // Already in AKT
|
|
332
|
+
}
|
|
333
|
+
// Check profile deposit
|
|
334
|
+
if (typeof profile.deposit === 'number' && profile.deposit > 0) {
|
|
335
|
+
return profile.deposit; // Already in AKT
|
|
336
|
+
}
|
|
337
|
+
return 5; // Default deposit in AKT
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Normalises deployment data into the published AkashDeploymentData structure.
|
|
341
|
+
*
|
|
342
|
+
* This function combines data from multiple sources:
|
|
343
|
+
* - Blockchain deployment transaction (dseq, owner, etc.)
|
|
344
|
+
* - Lease creation result (gseq, oseq, provider)
|
|
345
|
+
* - Lease details query (price, createdAt)
|
|
346
|
+
* - Deployment details query (status, services, resources)
|
|
347
|
+
* - Provider status (service endpoints)
|
|
348
|
+
*
|
|
349
|
+
* The lease details and deployment details are optional because they come from
|
|
350
|
+
* additional RPC queries that might fail. When available, they enrich the result
|
|
351
|
+
* with pricing information, deployment status, and resource allocations.
|
|
352
|
+
*/
|
|
353
|
+
function createDeploymentData(params) {
|
|
354
|
+
const { deployment, lease, leaseDetails, deploymentDetails, providerUri, profileName, network, certificate, providerStatus, } = params;
|
|
355
|
+
const endpoints = providerStatus
|
|
356
|
+
? buildEndpointMap(providerStatus)
|
|
357
|
+
: undefined;
|
|
358
|
+
// Create LeasePrice instance from lease details
|
|
359
|
+
// If lease details weren't fetched successfully, create from a zero price
|
|
360
|
+
const leasePrice = leaseDetails
|
|
361
|
+
? new LeasePrice(leaseDetails.price)
|
|
362
|
+
: new LeasePrice({ denom: 'uakt', amount: '0' });
|
|
363
|
+
// Extract deployment status (active or closed)
|
|
364
|
+
// Default to 'active' if deployment details weren't fetched
|
|
365
|
+
const status = deploymentDetails?.state === 'closed' ? 'closed' : 'active';
|
|
366
|
+
// Extract services with their resource allocations from deployment groups
|
|
367
|
+
const services = deploymentDetails
|
|
368
|
+
? buildServicesFromGroups(deploymentDetails.groups)
|
|
369
|
+
: undefined;
|
|
370
|
+
// Extract lease created timestamp
|
|
371
|
+
// This is the block height or timestamp when the lease was created on-chain
|
|
372
|
+
const leaseCreatedAt = leaseDetails?.createdAt ?? '0';
|
|
373
|
+
// Validate branded types from blockchain data
|
|
374
|
+
// If validation fails, throw error (will be caught by deployToAkash)
|
|
375
|
+
const validatedDseq = createDeploymentSequence(deployment.dseq);
|
|
376
|
+
const validatedOwner = createWalletAddress(lease.leaseId.owner);
|
|
377
|
+
const validatedProvider = createWalletAddress(lease.leaseId.provider);
|
|
378
|
+
return {
|
|
379
|
+
dseq: validatedDseq,
|
|
380
|
+
owner: validatedOwner,
|
|
381
|
+
provider: validatedProvider,
|
|
382
|
+
providerUri,
|
|
383
|
+
gseq: lease.leaseId.gseq,
|
|
384
|
+
oseq: lease.leaseId.oseq,
|
|
385
|
+
network,
|
|
386
|
+
endpoints,
|
|
387
|
+
certificate: {
|
|
388
|
+
cert: certificate.cert,
|
|
389
|
+
privateKey: certificate.privateKey,
|
|
390
|
+
},
|
|
391
|
+
profile: profileName,
|
|
392
|
+
deployedAt: new Date(),
|
|
393
|
+
// New fields with complete deployment information
|
|
394
|
+
status,
|
|
395
|
+
leasePrice,
|
|
396
|
+
leaseCreatedAt,
|
|
397
|
+
services,
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Builds a simple service → URI mapping from provider lease status.
|
|
402
|
+
*
|
|
403
|
+
* Tries service URIs first, then falls back to synthesizing URLs from forwarded ports.
|
|
404
|
+
* When synthesizing from forwarded ports, uses http:// unless the external port is
|
|
405
|
+
* a typical TLS port (443 or 8443), in which case https:// is used.
|
|
406
|
+
*/
|
|
407
|
+
function buildEndpointMap(status) {
|
|
408
|
+
const entries = [];
|
|
409
|
+
for (const [name, service] of Object.entries(status.services)) {
|
|
410
|
+
// 1. Try URIs first (provider-published endpoints)
|
|
411
|
+
const uri = service.uris?.[0];
|
|
412
|
+
if (uri) {
|
|
413
|
+
entries.push([name, uri]);
|
|
414
|
+
continue;
|
|
415
|
+
}
|
|
416
|
+
// 2. Fallback: synthesize URL from forwarded ports
|
|
417
|
+
const ports = status.forwardedPorts?.[name];
|
|
418
|
+
const port = ports?.[0];
|
|
419
|
+
if (port) {
|
|
420
|
+
// Use https only for typical TLS ports (443, 8443)
|
|
421
|
+
const protocol = port.externalPort === 443 || port.externalPort === 8443
|
|
422
|
+
? 'https'
|
|
423
|
+
: 'http';
|
|
424
|
+
const synthesizedUrl = `${protocol}://${port.host}:${port.externalPort}/`;
|
|
425
|
+
entries.push([name, synthesizedUrl]);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
return entries.length > 0 ? Object.freeze(Object.fromEntries(entries)) : undefined;
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Extracts services with complete resource allocations from deployment groups
|
|
432
|
+
*
|
|
433
|
+
* Provides both aggregated totals and detailed resource specifications for each service.
|
|
434
|
+
* Each deployment group may contain multiple resource specs (e.g., different replica
|
|
435
|
+
* configurations), and this function processes ALL of them to give a complete picture.
|
|
436
|
+
*
|
|
437
|
+
* **How it works:**
|
|
438
|
+
* 1. Processes ALL resource specs in each group (not just the first)
|
|
439
|
+
* 2. Calculates aggregated totals: sum of (count × resources) for all specs
|
|
440
|
+
* 3. Preserves detailed specs with individual replica counts
|
|
441
|
+
*
|
|
442
|
+
* **Resource Format from Blockchain:**
|
|
443
|
+
* - CPU: Raw micro-units as strings (1,000,000 = 1 CPU core)
|
|
444
|
+
* - Memory: Raw bytes as strings (converted to Mi/Gi for display)
|
|
445
|
+
* - Storage: Array of raw bytes as strings (summed and converted to Mi/Gi)
|
|
446
|
+
*
|
|
447
|
+
* **Output Format:**
|
|
448
|
+
* - CPU: Decimal string (e.g., "5.0" = 5 CPU cores)
|
|
449
|
+
* - Memory: Human-readable with unit (e.g., "10Gi", "512Mi")
|
|
450
|
+
* - Storage: Human-readable with unit (e.g., "5Gi", "1Ti")
|
|
451
|
+
*
|
|
452
|
+
* @param groups - Deployment groups from blockchain query
|
|
453
|
+
* @returns Array of services with aggregated totals and detailed resource specs
|
|
454
|
+
*
|
|
455
|
+
* @example Single resource spec (most common)
|
|
456
|
+
* ```typescript
|
|
457
|
+
* {
|
|
458
|
+
* name: "web",
|
|
459
|
+
* totalResources: { cpu: "1.0", memory: "2Gi", storage: "1Gi" },
|
|
460
|
+
* replicaCount: 1,
|
|
461
|
+
* resourceSpecs: [
|
|
462
|
+
* { count: 1, cpu: "1.0", memory: "2Gi", storage: "1Gi" }
|
|
463
|
+
* ]
|
|
464
|
+
* }
|
|
465
|
+
* ```
|
|
466
|
+
*
|
|
467
|
+
* @example Multiple resource specs (advanced deployment)
|
|
468
|
+
* ```typescript
|
|
469
|
+
* {
|
|
470
|
+
* name: "api",
|
|
471
|
+
* totalResources: { cpu: "5.0", memory: "10Gi", storage: "5Gi" },
|
|
472
|
+
* replicaCount: 4,
|
|
473
|
+
* resourceSpecs: [
|
|
474
|
+
* { count: 3, cpu: "1.0", memory: "2Gi", storage: "1Gi" }, // 3 standard replicas
|
|
475
|
+
* { count: 1, cpu: "2.0", memory: "4Gi", storage: "2Gi" } // 1 high-perf replica
|
|
476
|
+
* ]
|
|
477
|
+
* }
|
|
478
|
+
* ```
|
|
479
|
+
*/
|
|
480
|
+
function buildServicesFromGroups(groups) {
|
|
481
|
+
const services = [];
|
|
482
|
+
for (const group of groups) {
|
|
483
|
+
if (group.resources.length === 0) {
|
|
484
|
+
continue; // Skip groups with no resources
|
|
485
|
+
}
|
|
486
|
+
// Process ALL resource specs (not just the first)
|
|
487
|
+
const resourceSpecs = [];
|
|
488
|
+
let totalCpuMicroUnits = 0;
|
|
489
|
+
let totalMemoryBytes = 0;
|
|
490
|
+
let totalStorageBytes = 0;
|
|
491
|
+
let totalReplicas = 0;
|
|
492
|
+
for (const resource of group.resources) {
|
|
493
|
+
const count = resource.count;
|
|
494
|
+
const cpuMicroUnits = parseFloat(resource.cpuUnits || '0');
|
|
495
|
+
const memoryBytes = parseFloat(resource.memoryQuantity || '0');
|
|
496
|
+
// Storage is an array - sum all storage quantities
|
|
497
|
+
const storageBytes = resource.storageQuantities
|
|
498
|
+
.map(s => parseFloat(s || '0'))
|
|
499
|
+
.reduce((a, b) => a + b, 0);
|
|
500
|
+
// Accumulate totals (count × resource value)
|
|
501
|
+
totalCpuMicroUnits += count * cpuMicroUnits;
|
|
502
|
+
totalMemoryBytes += count * memoryBytes;
|
|
503
|
+
totalStorageBytes += count * storageBytes;
|
|
504
|
+
totalReplicas += count;
|
|
505
|
+
// Format individual spec resources
|
|
506
|
+
resourceSpecs.push({
|
|
507
|
+
count,
|
|
508
|
+
cpu: formatCpu(cpuMicroUnits),
|
|
509
|
+
memory: formatBytes(memoryBytes),
|
|
510
|
+
storage: formatBytes(storageBytes),
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
services.push({
|
|
514
|
+
name: group.name,
|
|
515
|
+
totalResources: {
|
|
516
|
+
cpu: formatCpu(totalCpuMicroUnits),
|
|
517
|
+
memory: formatBytes(totalMemoryBytes),
|
|
518
|
+
storage: formatBytes(totalStorageBytes),
|
|
519
|
+
},
|
|
520
|
+
replicaCount: totalReplicas,
|
|
521
|
+
resourceSpecs: Object.freeze(resourceSpecs),
|
|
522
|
+
});
|
|
523
|
+
}
|
|
524
|
+
return Object.freeze(services);
|
|
525
|
+
}
|
|
526
|
+
/**
|
|
527
|
+
* Formats CPU micro-units to human-readable CPU cores
|
|
528
|
+
*
|
|
529
|
+
* Akash stores CPU in micro-units where 1,000,000 = 1 CPU core
|
|
530
|
+
*
|
|
531
|
+
* @param microUnits - CPU in micro-units (e.g., 1000000 = 1.0 CPU)
|
|
532
|
+
* @returns Formatted CPU string (e.g., "1.0", "0.5", "2.5")
|
|
533
|
+
*/
|
|
534
|
+
function formatCpu(microUnits) {
|
|
535
|
+
const cpuCores = microUnits / 1_000_000;
|
|
536
|
+
// Use up to 2 decimal places, remove trailing zeros
|
|
537
|
+
return cpuCores.toFixed(2).replace(/\.?0+$/, '');
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* Formats bytes to human-readable storage/memory with appropriate unit
|
|
541
|
+
*
|
|
542
|
+
* Converts raw bytes to Mi (MiB) or Gi (GiB) using binary units (1024-based).
|
|
543
|
+
* Uses the smallest unit that results in a value >= 1.
|
|
544
|
+
*
|
|
545
|
+
* @param bytes - Raw bytes value
|
|
546
|
+
* @returns Formatted string with unit (e.g., "512Mi", "2Gi", "1Ti")
|
|
547
|
+
*
|
|
548
|
+
* @example
|
|
549
|
+
* ```typescript
|
|
550
|
+
* formatBytes(536870912) // "512Mi"
|
|
551
|
+
* formatBytes(2147483648) // "2Gi"
|
|
552
|
+
* formatBytes(1099511627776) // "1Ti"
|
|
553
|
+
* ```
|
|
554
|
+
*/
|
|
555
|
+
function formatBytes(bytes) {
|
|
556
|
+
if (bytes === 0)
|
|
557
|
+
return '0';
|
|
558
|
+
const units = ['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi'];
|
|
559
|
+
let unitIndex = 0;
|
|
560
|
+
let value = bytes;
|
|
561
|
+
// Find appropriate unit (prefer larger units for readability)
|
|
562
|
+
// Use 1024 for binary units (Mi, Gi, etc.)
|
|
563
|
+
while (value >= 1024 && unitIndex < units.length - 1) {
|
|
564
|
+
value /= 1024;
|
|
565
|
+
unitIndex++;
|
|
566
|
+
}
|
|
567
|
+
// Format with up to 2 decimal places, remove trailing zeros
|
|
568
|
+
const formatted = value.toFixed(2).replace(/\.?0+$/, '');
|
|
569
|
+
return `${formatted}${units[unitIndex]}`;
|
|
570
|
+
}
|
|
571
|
+
/**
|
|
572
|
+
* Constructs LeaseDetails for monitoring using bid and lease information.
|
|
573
|
+
*
|
|
574
|
+
* Validates wallet addresses from blockchain data using Zod schemas.
|
|
575
|
+
* Throws if validation fails (indicating malformed blockchain data).
|
|
576
|
+
*/
|
|
577
|
+
function buildLeaseDetails(bid, lease) {
|
|
578
|
+
// Validate wallet addresses - throws ZodError if invalid
|
|
579
|
+
const validatedOwner = createWalletAddress(lease.leaseId.owner);
|
|
580
|
+
const validatedProvider = createWalletAddress(lease.leaseId.provider);
|
|
581
|
+
return {
|
|
582
|
+
owner: validatedOwner,
|
|
583
|
+
provider: validatedProvider,
|
|
584
|
+
// Long types from protobuf need explicit toString() conversion
|
|
585
|
+
dseq: Long.isLong(lease.leaseId.dseq)
|
|
586
|
+
? lease.leaseId.dseq.toString()
|
|
587
|
+
: String(lease.leaseId.dseq),
|
|
588
|
+
gseq: lease.leaseId.gseq,
|
|
589
|
+
oseq: lease.leaseId.oseq,
|
|
590
|
+
state: 'active',
|
|
591
|
+
price: {
|
|
592
|
+
// Bid price is optional in SDK type, provide fallback
|
|
593
|
+
denom: bid.price?.denom ?? 'uakt',
|
|
594
|
+
amount: bid.price?.amount ?? '0',
|
|
595
|
+
},
|
|
596
|
+
createdAt: new Date().toISOString(),
|
|
597
|
+
};
|
|
598
|
+
}
|
|
599
|
+
//# sourceMappingURL=deployer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployer.js","sourceRoot":"","sources":["../../../src/targets/akash/deployer.ts"],"names":[],"mappings":"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"}
|