@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,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wallet-related error classes
|
|
3
|
+
*
|
|
4
|
+
* Errors specific to wallet connection, signing, and balance operations
|
|
5
|
+
*
|
|
6
|
+
* @module errors/wallet-error
|
|
7
|
+
*/
|
|
8
|
+
import { DeploymentError } from './deployment-error.js';
|
|
9
|
+
/**
|
|
10
|
+
* Wallet error codes
|
|
11
|
+
*/
|
|
12
|
+
export const WalletErrorCodes = {
|
|
13
|
+
/** Wallet extension not found (e.g., Keplr not installed) */
|
|
14
|
+
WALLET_NOT_FOUND: 'WALLET_NOT_FOUND',
|
|
15
|
+
/** User rejected wallet connection */
|
|
16
|
+
CONNECTION_REJECTED: 'CONNECTION_REJECTED',
|
|
17
|
+
/** Wallet is locked */
|
|
18
|
+
WALLET_LOCKED: 'WALLET_LOCKED',
|
|
19
|
+
/** Insufficient funds for transaction */
|
|
20
|
+
INSUFFICIENT_FUNDS: 'INSUFFICIENT_FUNDS',
|
|
21
|
+
/** Transaction signing failed */
|
|
22
|
+
SIGNING_FAILED: 'SIGNING_FAILED',
|
|
23
|
+
/** WalletConnect initialization failed */
|
|
24
|
+
WALLETCONNECT_INIT_FAILED: 'WALLETCONNECT_INIT_FAILED',
|
|
25
|
+
/** QR code modal was closed */
|
|
26
|
+
QR_MODAL_CLOSED: 'QR_MODAL_CLOSED',
|
|
27
|
+
/** Network mismatch (wallet on wrong network) */
|
|
28
|
+
NETWORK_MISMATCH: 'NETWORK_MISMATCH',
|
|
29
|
+
/** Account not found */
|
|
30
|
+
ACCOUNT_NOT_FOUND: 'ACCOUNT_NOT_FOUND',
|
|
31
|
+
/** WalletConnect project ID missing or invalid */
|
|
32
|
+
MISSING_PROJECT_ID: 'MISSING_PROJECT_ID',
|
|
33
|
+
/** WalletConnect client initialization failed */
|
|
34
|
+
INIT_FAILED: 'INIT_FAILED',
|
|
35
|
+
/** Failed to generate connection URI */
|
|
36
|
+
URI_GENERATION_FAILED: 'URI_GENERATION_FAILED',
|
|
37
|
+
/** WalletConnect connection failed */
|
|
38
|
+
CONNECTION_FAILED: 'CONNECTION_FAILED',
|
|
39
|
+
/** No accounts in WalletConnect session */
|
|
40
|
+
NO_ACCOUNTS: 'NO_ACCOUNTS',
|
|
41
|
+
/** Connection approval timed out */
|
|
42
|
+
APPROVAL_TIMEOUT: 'APPROVAL_TIMEOUT',
|
|
43
|
+
/** User rejected connection approval */
|
|
44
|
+
APPROVAL_REJECTED: 'APPROVAL_REJECTED',
|
|
45
|
+
/** Approval process failed */
|
|
46
|
+
APPROVAL_FAILED: 'APPROVAL_FAILED',
|
|
47
|
+
/** No accounts available from signer */
|
|
48
|
+
NO_SIGNER_ACCOUNTS: 'NO_SIGNER_ACCOUNTS',
|
|
49
|
+
/** Failed to create wallet context */
|
|
50
|
+
CONTEXT_CREATION_FAILED: 'CONTEXT_CREATION_FAILED',
|
|
51
|
+
/** Failed to disconnect wallet */
|
|
52
|
+
DISCONNECT_FAILED: 'DISCONNECT_FAILED',
|
|
53
|
+
/** Feature not yet implemented */
|
|
54
|
+
NOT_IMPLEMENTED: 'NOT_IMPLEMENTED',
|
|
55
|
+
/** Generic wallet error */
|
|
56
|
+
WALLET_ERROR: 'WALLET_ERROR',
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Wallet connection or operation error
|
|
60
|
+
*
|
|
61
|
+
* Thrown when wallet-related operations fail, including:
|
|
62
|
+
* - Wallet not found/installed
|
|
63
|
+
* - Connection rejected by user
|
|
64
|
+
* - Signing failures
|
|
65
|
+
* - Insufficient balance
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* throw new WalletError(
|
|
69
|
+
* 'Keplr wallet not found',
|
|
70
|
+
* WalletErrorCodes.WALLET_NOT_FOUND,
|
|
71
|
+
* {},
|
|
72
|
+
* false,
|
|
73
|
+
* 'Please install the Keplr browser extension from https://keplr.app'
|
|
74
|
+
* );
|
|
75
|
+
*/
|
|
76
|
+
export class WalletError extends DeploymentError {
|
|
77
|
+
constructor(message, code = WalletErrorCodes.WALLET_ERROR, context = {}, recoverable = false, suggestion, severity = 'error', cause) {
|
|
78
|
+
super(message, code, context, recoverable, suggestion, severity, cause);
|
|
79
|
+
// Maintain proper prototype chain
|
|
80
|
+
Object.setPrototypeOf(this, WalletError.prototype);
|
|
81
|
+
this.name = 'WalletError';
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Create a wallet not found error
|
|
86
|
+
*
|
|
87
|
+
* @param walletType - Type of wallet that wasn't found
|
|
88
|
+
* @returns WalletError instance
|
|
89
|
+
*/
|
|
90
|
+
export function walletNotFoundError(walletType) {
|
|
91
|
+
const suggestions = {
|
|
92
|
+
keplr: 'Please install the Keplr browser extension from https://keplr.app',
|
|
93
|
+
walletconnect: 'Please provide a valid WalletConnect project ID or use Keplr instead',
|
|
94
|
+
};
|
|
95
|
+
return new WalletError(`${walletType === 'keplr' ? 'Keplr' : 'WalletConnect'} wallet not found`, WalletErrorCodes.WALLET_NOT_FOUND, { walletType }, false, suggestions[walletType], 'error');
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Create a connection rejected error
|
|
99
|
+
*
|
|
100
|
+
* @returns WalletError instance
|
|
101
|
+
*/
|
|
102
|
+
export function connectionRejectedError() {
|
|
103
|
+
return new WalletError('Wallet connection was rejected by user', WalletErrorCodes.CONNECTION_REJECTED, {}, true, 'Please approve the connection request in your wallet', 'warning');
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Create an insufficient funds error
|
|
107
|
+
*
|
|
108
|
+
* @param required - Amount required
|
|
109
|
+
* @param available - Amount available
|
|
110
|
+
* @param denom - Token denomination
|
|
111
|
+
* @returns WalletError instance
|
|
112
|
+
*/
|
|
113
|
+
export function insufficientFundsError(required, available, denom = 'uakt') {
|
|
114
|
+
const shortfall = required - available;
|
|
115
|
+
return new WalletError(`Insufficient funds: need ${required} ${denom}, have ${available} ${denom}`, WalletErrorCodes.INSUFFICIENT_FUNDS, { required, available, shortfall, denom }, false, `Please add at least ${shortfall} ${denom} to your wallet`, 'error');
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Create a wallet locked error
|
|
119
|
+
*
|
|
120
|
+
* @returns WalletError instance
|
|
121
|
+
*/
|
|
122
|
+
export function walletLockedError() {
|
|
123
|
+
return new WalletError('Wallet is locked', WalletErrorCodes.WALLET_LOCKED, {}, true, 'Please unlock your wallet and try again', 'warning');
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Create a signing failed error
|
|
127
|
+
*
|
|
128
|
+
* @param operation - The operation that failed
|
|
129
|
+
* @param cause - Original error
|
|
130
|
+
* @returns WalletError instance
|
|
131
|
+
*/
|
|
132
|
+
export function signingFailedError(operation, cause) {
|
|
133
|
+
return new WalletError(`Failed to sign ${operation}`, WalletErrorCodes.SIGNING_FAILED, { operation }, true, 'Please try the operation again. If the problem persists, check your wallet connection.', 'error', cause);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Create a network mismatch error
|
|
137
|
+
*
|
|
138
|
+
* @param expected - Expected network
|
|
139
|
+
* @param actual - Actual network
|
|
140
|
+
* @returns WalletError instance
|
|
141
|
+
*/
|
|
142
|
+
export function networkMismatchError(expected, actual) {
|
|
143
|
+
return new WalletError(`Network mismatch: expected ${expected}, wallet is on ${actual}`, WalletErrorCodes.NETWORK_MISMATCH, { expected, actual }, true, `Please switch your wallet to the ${expected} network`, 'error');
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Type guard to check if an error is a WalletError
|
|
147
|
+
*
|
|
148
|
+
* @param error - The error to check
|
|
149
|
+
* @returns True if error is a WalletError
|
|
150
|
+
*/
|
|
151
|
+
export function isWalletError(error) {
|
|
152
|
+
return error instanceof WalletError;
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=wallet-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-error.js","sourceRoot":"","sources":["../../src/errors/wallet-error.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* deploy-ability - Programmatic deployment library for KADI
|
|
3
|
+
*
|
|
4
|
+
* Deploy applications to Akash Network, local Docker, or other platforms
|
|
5
|
+
* without CLI dependencies.
|
|
6
|
+
*
|
|
7
|
+
* @example Quick Start - Akash
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { deployToAkash } from 'deploy-ability';
|
|
10
|
+
*
|
|
11
|
+
* const result = await deployToAkash({
|
|
12
|
+
* projectRoot: process.cwd(),
|
|
13
|
+
* profile: 'production'
|
|
14
|
+
* });
|
|
15
|
+
*
|
|
16
|
+
* if (result.success) {
|
|
17
|
+
* console.log(`Deployed! DSEQ: ${result.data.dseq}`);
|
|
18
|
+
* console.log(`Provider: ${result.data.providerUri}`);
|
|
19
|
+
* } else {
|
|
20
|
+
* console.error(`Deployment failed: ${result.error.message}`);
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @example Quick Start - Local
|
|
25
|
+
* ```typescript
|
|
26
|
+
* import { deployToLocal } from 'deploy-ability';
|
|
27
|
+
*
|
|
28
|
+
* const result = await deployToLocal({
|
|
29
|
+
* projectRoot: process.cwd(),
|
|
30
|
+
* profile: 'local-dev',
|
|
31
|
+
* engine: 'docker'
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* if (result.success) {
|
|
35
|
+
* console.log('Deployed locally!');
|
|
36
|
+
* console.log('Services:', result.data.services);
|
|
37
|
+
* console.log('Endpoints:', result.data.endpoints);
|
|
38
|
+
* }
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @module deploy-ability
|
|
42
|
+
*/
|
|
43
|
+
export type * from './types/index.js';
|
|
44
|
+
export * from './errors/index.js';
|
|
45
|
+
export * from './utils/index.js';
|
|
46
|
+
export * from './constants.js';
|
|
47
|
+
export { deployToLocal } from './targets/local/index.js';
|
|
48
|
+
export * from './targets/akash/index.js';
|
|
49
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAGH,mBAAmB,kBAAkB,CAAC;AAGtC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,gBAAgB,CAAC;AAG/B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,cAAc,0BAA0B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* deploy-ability - Programmatic deployment library for KADI
|
|
3
|
+
*
|
|
4
|
+
* Deploy applications to Akash Network, local Docker, or other platforms
|
|
5
|
+
* without CLI dependencies.
|
|
6
|
+
*
|
|
7
|
+
* @example Quick Start - Akash
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { deployToAkash } from 'deploy-ability';
|
|
10
|
+
*
|
|
11
|
+
* const result = await deployToAkash({
|
|
12
|
+
* projectRoot: process.cwd(),
|
|
13
|
+
* profile: 'production'
|
|
14
|
+
* });
|
|
15
|
+
*
|
|
16
|
+
* if (result.success) {
|
|
17
|
+
* console.log(`Deployed! DSEQ: ${result.data.dseq}`);
|
|
18
|
+
* console.log(`Provider: ${result.data.providerUri}`);
|
|
19
|
+
* } else {
|
|
20
|
+
* console.error(`Deployment failed: ${result.error.message}`);
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @example Quick Start - Local
|
|
25
|
+
* ```typescript
|
|
26
|
+
* import { deployToLocal } from 'deploy-ability';
|
|
27
|
+
*
|
|
28
|
+
* const result = await deployToLocal({
|
|
29
|
+
* projectRoot: process.cwd(),
|
|
30
|
+
* profile: 'local-dev',
|
|
31
|
+
* engine: 'docker'
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* if (result.success) {
|
|
35
|
+
* console.log('Deployed locally!');
|
|
36
|
+
* console.log('Services:', result.data.services);
|
|
37
|
+
* console.log('Endpoints:', result.data.endpoints);
|
|
38
|
+
* }
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @module deploy-ability
|
|
42
|
+
*/
|
|
43
|
+
// Re-export errors
|
|
44
|
+
export * from './errors/index.js';
|
|
45
|
+
// Re-export utilities
|
|
46
|
+
export * from './utils/index.js';
|
|
47
|
+
// Re-export constants
|
|
48
|
+
export * from './constants.js';
|
|
49
|
+
// Main deployment functions
|
|
50
|
+
export { deployToLocal } from './targets/local/index.js';
|
|
51
|
+
// Akash target - complete API exported
|
|
52
|
+
export * from './targets/akash/index.js';
|
|
53
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAKH,mBAAmB;AACnB,cAAc,mBAAmB,CAAC;AAElC,sBAAsB;AACtB,cAAc,kBAAkB,CAAC;AAEjC,sBAAsB;AACtB,cAAc,gBAAgB,CAAC;AAE/B,4BAA4B;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,uCAAuC;AACvC,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bid Selection Helpers
|
|
3
|
+
*
|
|
4
|
+
* Provides pre-built selection strategies and filtering utilities for choosing
|
|
5
|
+
* providers based on different criteria. These functions can be used directly
|
|
6
|
+
* as bidSelectors in the deployment flow, or combined to create custom
|
|
7
|
+
* selection logic.
|
|
8
|
+
*
|
|
9
|
+
* **Selection Strategies:**
|
|
10
|
+
* - `selectCheapestBid` - Lowest price (perMonth basis)
|
|
11
|
+
* - `selectMostReliableBid` - Highest uptime percentage
|
|
12
|
+
* - `selectBalancedBid` - Weighted combination of price and reliability
|
|
13
|
+
*
|
|
14
|
+
* **Filtering:**
|
|
15
|
+
* - `filterBids` - Apply multiple criteria to narrow down options
|
|
16
|
+
*
|
|
17
|
+
* @module targets/akash/bid-selectors
|
|
18
|
+
*/
|
|
19
|
+
import type { EnhancedBid } from './bid-types.js';
|
|
20
|
+
/**
|
|
21
|
+
* Select the cheapest bid based on monthly price
|
|
22
|
+
*
|
|
23
|
+
* Compares all bids and returns the one with the lowest cost per month.
|
|
24
|
+
* Useful when price is the primary concern and provider quality is
|
|
25
|
+
* less critical (e.g., development/testing deployments).
|
|
26
|
+
*
|
|
27
|
+
* **Note:** This only considers price, not provider reliability, location,
|
|
28
|
+
* or audit status. For production deployments, consider using `filterBids`
|
|
29
|
+
* first to ensure minimum quality standards, then select the cheapest
|
|
30
|
+
* from the filtered set.
|
|
31
|
+
*
|
|
32
|
+
* @param bids - Array of enhanced bids to choose from
|
|
33
|
+
* @returns The cheapest bid, or null if array is empty
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* import { deployToAkash, selectCheapestBid } from 'deploy-ability/akash';
|
|
38
|
+
*
|
|
39
|
+
* const result = await deployToAkash({
|
|
40
|
+
* wallet,
|
|
41
|
+
* certificate,
|
|
42
|
+
* projectRoot: './',
|
|
43
|
+
* profile: 'dev',
|
|
44
|
+
* bidSelector: selectCheapestBid
|
|
45
|
+
* });
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* @example With quality filtering
|
|
49
|
+
* ```typescript
|
|
50
|
+
* const result = await deployToAkash({
|
|
51
|
+
* wallet,
|
|
52
|
+
* certificate,
|
|
53
|
+
* projectRoot: './',
|
|
54
|
+
* profile: 'prod',
|
|
55
|
+
* bidSelector: (bids) => {
|
|
56
|
+
* // Only consider audited providers with good uptime
|
|
57
|
+
* const qualityBids = filterBids(bids, {
|
|
58
|
+
* requireAudited: true,
|
|
59
|
+
* minUptime: { value: 0.95, period: '7d' }
|
|
60
|
+
* });
|
|
61
|
+
* // Then pick cheapest among quality providers
|
|
62
|
+
* return selectCheapestBid(qualityBids);
|
|
63
|
+
* }
|
|
64
|
+
* });
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export declare function selectCheapestBid(bids: EnhancedBid[]): EnhancedBid | null;
|
|
68
|
+
/**
|
|
69
|
+
* Select the most reliable provider based on uptime
|
|
70
|
+
*
|
|
71
|
+
* Chooses the provider with the highest uptime percentage for the specified
|
|
72
|
+
* time period. Providers without reliability data are considered last.
|
|
73
|
+
*
|
|
74
|
+
* **Uptime Periods:**
|
|
75
|
+
* - `1d`: Last 24 hours (most recent, but limited sample)
|
|
76
|
+
* - `7d`: Last 7 days (good balance, recommended default)
|
|
77
|
+
* - `30d`: Last 30 days (long-term stability indicator)
|
|
78
|
+
*
|
|
79
|
+
* **Fallback Behavior:**
|
|
80
|
+
* If no providers have reliability data, returns the first bid from the
|
|
81
|
+
* original array (maintains deterministic behavior).
|
|
82
|
+
*
|
|
83
|
+
* @param bids - Array of enhanced bids to choose from
|
|
84
|
+
* @param period - Uptime period to evaluate (default: '7d')
|
|
85
|
+
* @returns The most reliable bid, or null if array is empty
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```typescript
|
|
89
|
+
* import { deployToAkash, selectMostReliableBid } from 'deploy-ability/akash';
|
|
90
|
+
*
|
|
91
|
+
* const result = await deployToAkash({
|
|
92
|
+
* wallet,
|
|
93
|
+
* certificate,
|
|
94
|
+
* projectRoot: './',
|
|
95
|
+
* profile: 'production',
|
|
96
|
+
* bidSelector: selectMostReliableBid // Uses 7d default
|
|
97
|
+
* });
|
|
98
|
+
* ```
|
|
99
|
+
*
|
|
100
|
+
* @example With custom period
|
|
101
|
+
* ```typescript
|
|
102
|
+
* const result = await deployToAkash({
|
|
103
|
+
* wallet,
|
|
104
|
+
* certificate,
|
|
105
|
+
* projectRoot: './',
|
|
106
|
+
* profile: 'production',
|
|
107
|
+
* bidSelector: (bids) => selectMostReliableBid(bids, '30d')
|
|
108
|
+
* });
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export declare function selectMostReliableBid(bids: EnhancedBid[], period?: '1d' | '7d' | '30d'): EnhancedBid | null;
|
|
112
|
+
/**
|
|
113
|
+
* Select bid using balanced scoring (price + reliability)
|
|
114
|
+
*
|
|
115
|
+
* Calculates a composite score for each bid based on normalized price
|
|
116
|
+
* and reliability metrics, then selects the highest-scoring option.
|
|
117
|
+
*
|
|
118
|
+
* **Scoring Methodology:**
|
|
119
|
+
* - Price score: Normalized 0-1 (lower price = higher score)
|
|
120
|
+
* - Reliability score: Uptime percentage (0-1)
|
|
121
|
+
* - Total score = (price score × price weight) + (reliability score × reliability weight)
|
|
122
|
+
*
|
|
123
|
+
* **Default Weights:**
|
|
124
|
+
* Equal balance (0.5 each) - adjust based on your priorities.
|
|
125
|
+
*
|
|
126
|
+
* **Use Cases:**
|
|
127
|
+
* - Production deployments where both cost and reliability matter
|
|
128
|
+
* - Finding "best value" providers (good balance of quality and price)
|
|
129
|
+
* - Avoiding both the cheapest-but-unreliable and expensive-but-reliable extremes
|
|
130
|
+
*
|
|
131
|
+
* @param bids - Array of enhanced bids to choose from
|
|
132
|
+
* @param weights - Scoring weights (default: equal balance)
|
|
133
|
+
* @param weights.price - Weight for price score (0-1)
|
|
134
|
+
* @param weights.reliability - Weight for reliability score (0-1)
|
|
135
|
+
* @returns The best balanced bid, or null if array is empty
|
|
136
|
+
*
|
|
137
|
+
* @example Equal balance (default)
|
|
138
|
+
* ```typescript
|
|
139
|
+
* import { deployToAkash, selectBalancedBid } from 'deploy-ability/akash';
|
|
140
|
+
*
|
|
141
|
+
* const result = await deployToAkash({
|
|
142
|
+
* wallet,
|
|
143
|
+
* certificate,
|
|
144
|
+
* projectRoot: './',
|
|
145
|
+
* profile: 'production',
|
|
146
|
+
* bidSelector: selectBalancedBid // 50/50 price/reliability
|
|
147
|
+
* });
|
|
148
|
+
* ```
|
|
149
|
+
*
|
|
150
|
+
* @example Prioritize reliability
|
|
151
|
+
* ```typescript
|
|
152
|
+
* const result = await deployToAkash({
|
|
153
|
+
* wallet,
|
|
154
|
+
* certificate,
|
|
155
|
+
* projectRoot: './',
|
|
156
|
+
* profile: 'critical-prod',
|
|
157
|
+
* bidSelector: (bids) => selectBalancedBid(bids, {
|
|
158
|
+
* price: 0.3,
|
|
159
|
+
* reliability: 0.7
|
|
160
|
+
* })
|
|
161
|
+
* });
|
|
162
|
+
* ```
|
|
163
|
+
*
|
|
164
|
+
* @example Prioritize cost
|
|
165
|
+
* ```typescript
|
|
166
|
+
* const result = await deployToAkash({
|
|
167
|
+
* wallet,
|
|
168
|
+
* certificate,
|
|
169
|
+
* projectRoot: './',
|
|
170
|
+
* profile: 'dev',
|
|
171
|
+
* bidSelector: (bids) => selectBalancedBid(bids, {
|
|
172
|
+
* price: 0.8,
|
|
173
|
+
* reliability: 0.2
|
|
174
|
+
* })
|
|
175
|
+
* });
|
|
176
|
+
* ```
|
|
177
|
+
*/
|
|
178
|
+
export declare function selectBalancedBid(bids: EnhancedBid[], weights?: {
|
|
179
|
+
price: number;
|
|
180
|
+
reliability: number;
|
|
181
|
+
}): EnhancedBid | null;
|
|
182
|
+
/**
|
|
183
|
+
* Filter bids by multiple criteria
|
|
184
|
+
*
|
|
185
|
+
* Apply various filters to narrow down bid options based on price,
|
|
186
|
+
* reliability, audit status, location, and provider status.
|
|
187
|
+
*
|
|
188
|
+
* **All criteria are optional** - only specify the ones you care about.
|
|
189
|
+
* Multiple criteria are combined with AND logic (all must match).
|
|
190
|
+
*
|
|
191
|
+
* **Filtering Philosophy:**
|
|
192
|
+
* Use this to establish minimum quality standards, then apply a selection
|
|
193
|
+
* strategy to the filtered results. This ensures you never select a provider
|
|
194
|
+
* that doesn't meet your requirements, even if they're the cheapest.
|
|
195
|
+
*
|
|
196
|
+
* @param bids - Array of enhanced bids to filter
|
|
197
|
+
* @param criteria - Filtering criteria (all optional)
|
|
198
|
+
* @returns Filtered array of bids matching all specified criteria
|
|
199
|
+
*
|
|
200
|
+
* @example Filter by price and uptime
|
|
201
|
+
* ```typescript
|
|
202
|
+
* import { filterBids, selectCheapestBid } from 'deploy-ability/akash';
|
|
203
|
+
*
|
|
204
|
+
* const result = await deployToAkash({
|
|
205
|
+
* wallet,
|
|
206
|
+
* certificate,
|
|
207
|
+
* projectRoot: './',
|
|
208
|
+
* profile: 'prod',
|
|
209
|
+
* bidSelector: (bids) => {
|
|
210
|
+
* // Only providers under $50/month with >95% uptime
|
|
211
|
+
* const filtered = filterBids(bids, {
|
|
212
|
+
* maxPricePerMonth: { usd: 50, aktPrice: 0.45 },
|
|
213
|
+
* minUptime: { value: 0.95, period: '7d' }
|
|
214
|
+
* });
|
|
215
|
+
* return selectCheapestBid(filtered);
|
|
216
|
+
* }
|
|
217
|
+
* });
|
|
218
|
+
* ```
|
|
219
|
+
*
|
|
220
|
+
* @example Filter by audit status and location
|
|
221
|
+
* ```typescript
|
|
222
|
+
* const filtered = filterBids(bids, {
|
|
223
|
+
* requireAudited: true,
|
|
224
|
+
* preferredRegions: ['US', 'EU'], // Country codes
|
|
225
|
+
* requireOnline: true
|
|
226
|
+
* });
|
|
227
|
+
* ```
|
|
228
|
+
*
|
|
229
|
+
* @example Price filtering in uAKT
|
|
230
|
+
* ```typescript
|
|
231
|
+
* const filtered = filterBids(bids, {
|
|
232
|
+
* maxPricePerMonth: { uakt: 500_000_000 } // 500M uAKT/month
|
|
233
|
+
* });
|
|
234
|
+
* ```
|
|
235
|
+
*/
|
|
236
|
+
export declare function filterBids(bids: EnhancedBid[], criteria: {
|
|
237
|
+
readonly maxPricePerMonth?: {
|
|
238
|
+
uakt: number;
|
|
239
|
+
} | {
|
|
240
|
+
usd: number;
|
|
241
|
+
aktPrice: number;
|
|
242
|
+
};
|
|
243
|
+
readonly minUptime?: {
|
|
244
|
+
value: number;
|
|
245
|
+
period: '1d' | '7d' | '30d';
|
|
246
|
+
};
|
|
247
|
+
readonly requireAudited?: boolean;
|
|
248
|
+
readonly preferredRegions?: string[];
|
|
249
|
+
readonly requireOnline?: boolean;
|
|
250
|
+
}): EnhancedBid[];
|
|
251
|
+
//# sourceMappingURL=bid-selectors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bid-selectors.d.ts","sourceRoot":"","sources":["../../../src/targets/akash/bid-selectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,WAAW,GAAG,IAAI,CAQzE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,WAAW,EAAE,EACnB,MAAM,GAAE,IAAI,GAAG,IAAI,GAAG,KAAY,GACjC,WAAW,GAAG,IAAI,CAsBpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,WAAW,EAAE,EACnB,OAAO,GAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAqC,GACjF,WAAW,GAAG,IAAI,CAiCpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,WAAW,EAAE,EACnB,QAAQ,EAAE;IACR,QAAQ,CAAC,gBAAgB,CAAC,EACtB;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAChB;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,KAAK,CAAA;KAAE,CAAC;IACpE,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC,GACA,WAAW,EAAE,CA+Cf"}
|