@kadi.build/deploy-ability 0.0.2 → 0.0.4

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.
Files changed (103) hide show
  1. package/dist/targets/akash/bids.d.ts +183 -0
  2. package/dist/targets/akash/bids.d.ts.map +1 -0
  3. package/dist/targets/akash/bids.js +247 -0
  4. package/dist/targets/akash/bids.js.map +1 -0
  5. package/dist/targets/akash/certificate-manager.d.ts +89 -167
  6. package/dist/targets/akash/certificate-manager.d.ts.map +1 -1
  7. package/dist/targets/akash/certificate-manager.js +193 -301
  8. package/dist/targets/akash/certificate-manager.js.map +1 -1
  9. package/dist/targets/akash/client.d.ts +644 -0
  10. package/dist/targets/akash/client.d.ts.map +1 -0
  11. package/dist/targets/akash/client.js +972 -0
  12. package/dist/targets/akash/client.js.map +1 -0
  13. package/dist/targets/akash/constants.d.ts +12 -149
  14. package/dist/targets/akash/constants.d.ts.map +1 -1
  15. package/dist/targets/akash/constants.js +14 -136
  16. package/dist/targets/akash/constants.js.map +1 -1
  17. package/dist/targets/akash/deployer.d.ts +3 -82
  18. package/dist/targets/akash/deployer.d.ts.map +1 -1
  19. package/dist/targets/akash/deployer.js +122 -160
  20. package/dist/targets/akash/deployer.js.map +1 -1
  21. package/dist/targets/akash/environment.d.ts +16 -214
  22. package/dist/targets/akash/environment.d.ts.map +1 -1
  23. package/dist/targets/akash/environment.js +20 -210
  24. package/dist/targets/akash/environment.js.map +1 -1
  25. package/dist/targets/akash/index.d.ts +95 -189
  26. package/dist/targets/akash/index.d.ts.map +1 -1
  27. package/dist/targets/akash/index.js +69 -197
  28. package/dist/targets/akash/index.js.map +1 -1
  29. package/dist/targets/akash/lease-monitor.d.ts +3 -21
  30. package/dist/targets/akash/lease-monitor.d.ts.map +1 -1
  31. package/dist/targets/akash/lease-monitor.js +39 -56
  32. package/dist/targets/akash/lease-monitor.js.map +1 -1
  33. package/dist/targets/akash/logs.d.ts +103 -4
  34. package/dist/targets/akash/logs.d.ts.map +1 -1
  35. package/dist/targets/akash/logs.js +12 -3
  36. package/dist/targets/akash/logs.js.map +1 -1
  37. package/dist/targets/akash/pricing.d.ts +12 -191
  38. package/dist/targets/akash/pricing.d.ts.map +1 -1
  39. package/dist/targets/akash/pricing.js +12 -188
  40. package/dist/targets/akash/pricing.js.map +1 -1
  41. package/dist/targets/akash/provider-manager.d.ts +120 -0
  42. package/dist/targets/akash/provider-manager.d.ts.map +1 -0
  43. package/dist/targets/akash/provider-manager.js +574 -0
  44. package/dist/targets/akash/provider-manager.js.map +1 -0
  45. package/dist/targets/akash/sdl-generator.d.ts +2 -2
  46. package/dist/targets/akash/sdl-generator.d.ts.map +1 -1
  47. package/dist/targets/akash/sdl-generator.js +6 -39
  48. package/dist/targets/akash/sdl-generator.js.map +1 -1
  49. package/dist/targets/akash/types.d.ts +66 -243
  50. package/dist/targets/akash/types.d.ts.map +1 -1
  51. package/dist/targets/akash/types.js +4 -41
  52. package/dist/targets/akash/types.js.map +1 -1
  53. package/dist/targets/akash/wallet-manager.d.ts +35 -352
  54. package/dist/targets/akash/wallet-manager.d.ts.map +1 -1
  55. package/dist/targets/akash/wallet-manager.js +37 -439
  56. package/dist/targets/akash/wallet-manager.js.map +1 -1
  57. package/dist/targets/local/deployer.js +4 -4
  58. package/dist/targets/local/deployer.js.map +1 -1
  59. package/dist/types/index.d.ts +1 -1
  60. package/dist/types/index.d.ts.map +1 -1
  61. package/dist/types/index.js.map +1 -1
  62. package/dist/types/options.d.ts +45 -4
  63. package/dist/types/options.d.ts.map +1 -1
  64. package/dist/utils/registry/manager.js +6 -6
  65. package/dist/utils/registry/manager.js.map +1 -1
  66. package/dist/utils/registry/setup.js +4 -4
  67. package/dist/utils/registry/setup.js.map +1 -1
  68. package/package.json +8 -11
  69. package/dist/targets/akash/bid-selectors.d.ts +0 -251
  70. package/dist/targets/akash/bid-selectors.d.ts.map +0 -1
  71. package/dist/targets/akash/bid-selectors.js +0 -322
  72. package/dist/targets/akash/bid-selectors.js.map +0 -1
  73. package/dist/targets/akash/bid-types.d.ts +0 -297
  74. package/dist/targets/akash/bid-types.d.ts.map +0 -1
  75. package/dist/targets/akash/bid-types.js +0 -89
  76. package/dist/targets/akash/bid-types.js.map +0 -1
  77. package/dist/targets/akash/blockchain-client.d.ts +0 -577
  78. package/dist/targets/akash/blockchain-client.d.ts.map +0 -1
  79. package/dist/targets/akash/blockchain-client.js +0 -803
  80. package/dist/targets/akash/blockchain-client.js.map +0 -1
  81. package/dist/targets/akash/logs.types.d.ts +0 -102
  82. package/dist/targets/akash/logs.types.d.ts.map +0 -1
  83. package/dist/targets/akash/logs.types.js +0 -9
  84. package/dist/targets/akash/logs.types.js.map +0 -1
  85. package/dist/targets/akash/provider-client.d.ts +0 -114
  86. package/dist/targets/akash/provider-client.d.ts.map +0 -1
  87. package/dist/targets/akash/provider-client.js +0 -318
  88. package/dist/targets/akash/provider-client.js.map +0 -1
  89. package/dist/targets/akash/provider-metadata.d.ts +0 -228
  90. package/dist/targets/akash/provider-metadata.d.ts.map +0 -1
  91. package/dist/targets/akash/provider-metadata.js +0 -14
  92. package/dist/targets/akash/provider-metadata.js.map +0 -1
  93. package/dist/targets/akash/provider-service.d.ts +0 -133
  94. package/dist/targets/akash/provider-service.d.ts.map +0 -1
  95. package/dist/targets/akash/provider-service.js +0 -391
  96. package/dist/targets/akash/provider-service.js.map +0 -1
  97. package/dist/targets/akash/query-client.d.ts +0 -125
  98. package/dist/targets/akash/query-client.d.ts.map +0 -1
  99. package/dist/targets/akash/query-client.js +0 -332
  100. package/dist/targets/akash/query-client.js.map +0 -1
  101. package/docs/EXAMPLES.md +0 -293
  102. package/docs/PLACEMENT.md +0 -433
  103. package/docs/STORAGE.md +0 -318
@@ -1,332 +0,0 @@
1
- /**
2
- * Akash RPC Query Client
3
- *
4
- * Provides typed helper functions for querying Akash blockchain state via the
5
- * gRPC query endpoints exposed by @akashnetwork/akash-api. All helpers return
6
- * Result<T, DeploymentError> to encourage explicit error handling by callers.
7
- *
8
- * Responsibilities:
9
- * 1. Fetch lease information (price, state, identifiers)
10
- * 2. Fetch deployment group/resource information
11
- * 3. Fetch provider metadata (host URI, attributes)
12
- * 4. Optionally combine the above into a consolidated deployment overview
13
- *
14
- * Each function normalises protobuf responses into lightweight, serialisable
15
- * TypeScript interfaces – ready for logging, display, or further processing.
16
- *
17
- * @module targets/akash/query-client
18
- */
19
- import Long from 'long';
20
- import { URL } from 'node:url';
21
- import { getRpc } from '@akashnetwork/akashjs/build/rpc/index.js';
22
- import { QueryClientImpl as MarketQueryClient, QueryLeasesRequest, QueryLeaseRequest, } from '@akashnetwork/akash-api/akash/market/v1beta4';
23
- import { QueryClientImpl as DeploymentQueryClient, QueryDeploymentRequest, } from '@akashnetwork/akash-api/akash/deployment/v1beta3';
24
- import { QueryClientImpl as ProviderQueryClient, QueryProviderRequest, } from '@akashnetwork/akash-api/akash/provider/v1beta3';
25
- import { success, failure } from '../../types/index.js';
26
- import { DeploymentError } from '../../errors/index.js';
27
- import { getNetworkConfig, } from './environment.js';
28
- /** Text decoder for protobuf byte fields */
29
- const DECODER = new TextDecoder();
30
- /**
31
- * Creates a query client for the Akash market module
32
- */
33
- async function createMarketClient(network) {
34
- const { rpc } = getNetworkConfig(network);
35
- return new MarketQueryClient(await getRpc(rpc));
36
- }
37
- /**
38
- * Creates a query client for the Akash deployment module
39
- */
40
- async function createDeploymentClient(network) {
41
- const { rpc } = getNetworkConfig(network);
42
- return new DeploymentQueryClient(await getRpc(rpc));
43
- }
44
- /**
45
- * Creates a query client for the Akash provider module
46
- */
47
- async function createProviderClient(network) {
48
- const { rpc } = getNetworkConfig(network);
49
- return new ProviderQueryClient(await getRpc(rpc));
50
- }
51
- /**
52
- * Fetches leases matching the provided filters.
53
- */
54
- export async function getLeaseRecords(network, filters) {
55
- try {
56
- const client = await createMarketClient(network);
57
- const leaseFilters = {};
58
- if (filters.owner)
59
- leaseFilters.owner = filters.owner;
60
- if (filters.dseq !== undefined) {
61
- leaseFilters.dseq = Long.fromString(String(filters.dseq));
62
- }
63
- if (filters.provider)
64
- leaseFilters.provider = filters.provider;
65
- if (typeof filters.gseq === 'number')
66
- leaseFilters.gseq = filters.gseq;
67
- if (typeof filters.oseq === 'number')
68
- leaseFilters.oseq = filters.oseq;
69
- if (filters.state)
70
- leaseFilters.state = filters.state;
71
- const request = QueryLeasesRequest.fromPartial({ filters: leaseFilters });
72
- const response = await client.Leases(request);
73
- const leases = [];
74
- for (const entry of response.leases ?? []) {
75
- const details = mapLease(entry);
76
- if (details) {
77
- leases.push(details);
78
- }
79
- }
80
- return success(Object.freeze(leases));
81
- }
82
- catch (error) {
83
- return failure(createRpcError('Failed to query leases', network, error));
84
- }
85
- }
86
- export async function getLeaseById(network, lease) {
87
- try {
88
- const client = await createMarketClient(network);
89
- const request = QueryLeaseRequest.fromPartial({
90
- id: {
91
- owner: lease.owner,
92
- provider: lease.provider,
93
- dseq: Long.fromString(String(lease.dseq)),
94
- gseq: lease.gseq,
95
- oseq: lease.oseq,
96
- },
97
- });
98
- const response = await client.Lease(request);
99
- const details = mapLease(response);
100
- if (!details) {
101
- return failure(new DeploymentError('Lease not found', 'LEASE_NOT_FOUND', { network, lease }));
102
- }
103
- return success(details);
104
- }
105
- catch (error) {
106
- return failure(createRpcError('Failed to query lease', network, error));
107
- }
108
- }
109
- /**
110
- * Fetches deployment metadata and group resource information.
111
- */
112
- export async function getDeploymentDetails(network, owner, dseq) {
113
- try {
114
- const client = await createDeploymentClient(network);
115
- const request = QueryDeploymentRequest.fromPartial({
116
- id: {
117
- owner,
118
- dseq: Long.fromString(String(dseq)),
119
- },
120
- });
121
- const response = await client.Deployment(request);
122
- if (!response.deployment) {
123
- return failure(new DeploymentError('Deployment not found', 'DEPLOYMENT_NOT_FOUND', { network, owner, dseq }));
124
- }
125
- const details = mapDeployment(response);
126
- return success(details);
127
- }
128
- catch (error) {
129
- return failure(createRpcError('Failed to query deployment', network, error));
130
- }
131
- }
132
- /**
133
- * Fetches provider metadata (host URI and attributes).
134
- */
135
- export async function getProviderMetadata(network, providerAddress) {
136
- try {
137
- const client = await createProviderClient(network);
138
- const request = QueryProviderRequest.fromPartial({ owner: providerAddress });
139
- const response = await client.Provider(request);
140
- if (!response.provider) {
141
- return success(undefined);
142
- }
143
- return success(mapProvider(response.provider));
144
- }
145
- catch (error) {
146
- return failure(createRpcError('Failed to query provider', network, error));
147
- }
148
- }
149
- /**
150
- * Aggregates lease, deployment, and provider information into one object.
151
- */
152
- export async function getDeploymentOverview(network, lease) {
153
- const [deploymentResult, providerResult] = await Promise.all([
154
- getDeploymentDetails(network, lease.owner, lease.dseq),
155
- getProviderMetadata(network, lease.provider),
156
- ]);
157
- if (!deploymentResult.success) {
158
- return deploymentResult;
159
- }
160
- if (!providerResult.success) {
161
- return providerResult;
162
- }
163
- return success(Object.freeze({
164
- lease,
165
- deployment: deploymentResult.data,
166
- provider: providerResult.data,
167
- }));
168
- }
169
- /**
170
- * Maps a QueryLeaseResponse into a LeaseDetails structure.
171
- */
172
- function mapLease(response) {
173
- // Early return if response or lease is missing
174
- if (!response?.lease) {
175
- return null;
176
- }
177
- const lease = response.lease;
178
- const id = lease.leaseId;
179
- // Additional check: lease ID must exist
180
- if (!id) {
181
- return null;
182
- }
183
- return {
184
- owner: id.owner,
185
- provider: id.provider,
186
- dseq: longToString(id.dseq),
187
- gseq: id.gseq,
188
- oseq: id.oseq,
189
- state: mapLeaseState(lease.state),
190
- price: {
191
- denom: lease.price?.denom ?? 'uakt',
192
- amount: lease.price?.amount ?? '0',
193
- },
194
- createdAt: longToString(lease.createdAt ?? Long.ZERO),
195
- };
196
- }
197
- /**
198
- * Maps deployment response into DeploymentDetails.
199
- */
200
- function mapDeployment(response) {
201
- const deployment = response.deployment;
202
- const owner = deployment.deploymentId?.owner ?? '';
203
- const dseq = deployment.deploymentId?.dseq ?? '';
204
- // Map deployment state enum to string
205
- const state = mapDeploymentState(deployment.state);
206
- const version = toHexString(deployment.version);
207
- // Long types from protobuf need explicit conversion
208
- const createdAt = longToString(deployment.createdAt ?? Long.ZERO);
209
- const groups = (response.groups ?? []).map((group) => {
210
- const groupSpec = group.groupSpec;
211
- const resources = (groupSpec?.resources ?? []).map((item) => {
212
- const resource = item.resource;
213
- return {
214
- resourceId: resource?.id ?? 0,
215
- count: item.count ?? 0,
216
- cpuUnits: decodeResourceValue(resource?.cpu?.units?.val),
217
- memoryQuantity: decodeResourceValue(resource?.memory?.quantity?.val),
218
- storageQuantities: (resource?.storage ?? []).map((storage) => decodeResourceValue(storage.quantity?.val)),
219
- };
220
- });
221
- return {
222
- name: groupSpec?.name ?? 'group',
223
- resources: Object.freeze(resources),
224
- };
225
- });
226
- return {
227
- owner: owner,
228
- dseq: String(dseq),
229
- state,
230
- version,
231
- createdAt,
232
- groups: Object.freeze(groups),
233
- };
234
- }
235
- /**
236
- * Maps provider metadata into a typed structure.
237
- */
238
- function mapProvider(provider) {
239
- return {
240
- owner: provider.owner,
241
- hostUri: normaliseProviderUri(provider.hostUri),
242
- attributes: Object.freeze((provider.attributes ?? []).map((attr) => ({
243
- key: attr.key ?? '',
244
- value: attr.value ?? '',
245
- }))),
246
- };
247
- }
248
- /**
249
- * Converts protobuf byte arrays into UTF-8 strings. Returns empty string if missing.
250
- */
251
- function decodeResourceValue(value) {
252
- if (!value || value.length === 0) {
253
- return '0';
254
- }
255
- return DECODER.decode(value);
256
- }
257
- /**
258
- * Converts binary version hash to hexadecimal string.
259
- */
260
- function toHexString(value) {
261
- if (!value || value.length === 0) {
262
- return '';
263
- }
264
- return Buffer.from(value).toString('hex');
265
- }
266
- /**
267
- * Converts Long/number/string values to string representation.
268
- */
269
- function longToString(value) {
270
- if (Long.isLong(value)) {
271
- return value.toString();
272
- }
273
- return String(value);
274
- }
275
- function mapLeaseState(state) {
276
- if (typeof state === 'string') {
277
- return state;
278
- }
279
- switch (state) {
280
- case 1:
281
- return 'active';
282
- case 2:
283
- return 'insufficient_funds';
284
- case 3:
285
- return 'closed';
286
- default:
287
- return 'unknown';
288
- }
289
- }
290
- /**
291
- * Maps deployment state enum to human-readable string
292
- */
293
- function mapDeploymentState(state) {
294
- if (typeof state === 'string') {
295
- return state;
296
- }
297
- switch (state) {
298
- case 1:
299
- return 'active';
300
- case 2:
301
- return 'closed';
302
- default:
303
- return 'unknown';
304
- }
305
- }
306
- /**
307
- * Normalises provider URI strings, returning undefined if invalid.
308
- */
309
- function normaliseProviderUri(uri) {
310
- if (!uri) {
311
- return undefined;
312
- }
313
- try {
314
- const parsed = new URL(uri);
315
- if (parsed.protocol !== 'https:') {
316
- return undefined;
317
- }
318
- parsed.pathname = parsed.pathname.replace(/\/$/, '');
319
- return parsed.toString();
320
- }
321
- catch {
322
- return undefined;
323
- }
324
- }
325
- /**
326
- * Wraps low-level RPC errors into DeploymentError instances for consistency.
327
- */
328
- function createRpcError(message, network, error) {
329
- const description = error instanceof Error ? error.message : String(error);
330
- return new DeploymentError(message, 'RPC_ERROR', { network, error: description }, true);
331
- }
332
- //# sourceMappingURL=query-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"query-client.js","sourceRoot":"","sources":["../../../src/targets/akash/query-client.ts"],"names":[],"mappings":"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"}
package/docs/EXAMPLES.md DELETED
@@ -1,293 +0,0 @@
1
- # deploy-ability Examples
2
-
3
- Detailed examples for various use cases.
4
-
5
- ## 3. CI/CD Automation
6
-
7
- **Scenario:** Automated deployments from GitHub Actions, GitLab CI, or other CI/CD platforms.
8
-
9
- ### GitHub Actions Example
10
-
11
- ```typescript
12
- // .github/workflows/deploy.ts
13
- import { createWalletContextFromSigner, deployToAkash } from 'deploy-ability';
14
- import { DirectSecp256k1HdWallet } from '@cosmjs/proto-signing';
15
-
16
- async function deploy() {
17
- const environment = process.env.GITHUB_REF_NAME; // branch name
18
- const profile = environment === 'main' ? 'production' : 'staging';
19
- const network = environment === 'main' ? 'mainnet' : 'testnet';
20
-
21
- console.log(`Deploying ${environment} to ${network}...`);
22
-
23
- // Create signer from GitHub Secret
24
- const mnemonic = process.env.AKASH_DEPLOYMENT_MNEMONIC!;
25
- const signer = await DirectSecp256k1HdWallet.fromMnemonic(mnemonic, {
26
- prefix: 'akash'
27
- });
28
-
29
- // Create wallet context
30
- const wallet = await createWalletContextFromSigner(signer, network);
31
-
32
- if (!wallet.success) {
33
- console.error('Wallet setup failed:', wallet.error.message);
34
- process.exit(1);
35
- }
36
-
37
- // Deploy!
38
- const result = await deployToAkash({
39
- wallet: wallet.data,
40
- projectRoot: process.cwd(),
41
- profile,
42
- network
43
- });
44
-
45
- if (result.success) {
46
- console.log(`Deployed successfully!`);
47
- console.log(` DSEQ: ${result.data.dseq}`);
48
- console.log(` Provider: ${result.data.providerUri}`);
49
- console.log(` Console: https://console.akash.network/deployments/${result.data.dseq}`);
50
-
51
- // Post to Slack/Discord
52
- await notify({
53
- environment,
54
- dseq: result.data.dseq,
55
- url: `https://console.akash.network/deployments/${result.data.dseq}`
56
- });
57
-
58
- process.exit(0);
59
- } else {
60
- console.error('Deployment failed:', result.error.message);
61
- process.exit(1);
62
- }
63
- }
64
-
65
- deploy().catch(err => {
66
- console.error('Fatal error:', err);
67
- process.exit(1);
68
- });
69
- ```
70
-
71
- ### GitHub Actions Workflow
72
-
73
- ```yaml
74
- # .github/workflows/deploy.yml
75
- name: Deploy to Akash
76
-
77
- on:
78
- push:
79
- branches: [main, staging]
80
-
81
- jobs:
82
- deploy:
83
- runs-on: ubuntu-latest
84
- steps:
85
- - uses: actions/checkout@v3
86
-
87
- - name: Setup Node.js
88
- uses: actions/setup-node@v3
89
- with:
90
- node-version: '20'
91
-
92
- - name: Install dependencies
93
- run: npm ci
94
-
95
- - name: Deploy to Akash
96
- env:
97
- AKASH_DEPLOYMENT_MNEMONIC: ${{ secrets.AKASH_DEPLOYMENT_MNEMONIC }}
98
- run: npx tsx .github/workflows/deploy.ts
99
- ```
100
-
101
- ---
102
-
103
- ## 4. API Servers
104
-
105
- **Scenario:** Deployment-as-a-Service - users trigger deployments via REST API.
106
-
107
- ```typescript
108
- import express from 'express';
109
- import {
110
- deployToAkash,
111
- createWalletContextFromSigner,
112
- DeploymentError
113
- } from 'deploy-ability';
114
- import { DirectSecp256k1HdWallet } from '@cosmjs/proto-signing';
115
-
116
- const app = express();
117
- app.use(express.json());
118
-
119
- // Service wallet (pays for deployments)
120
- let serviceWallet: WalletContext;
121
-
122
- async function initializeServiceWallet() {
123
- const mnemonic = process.env.SERVICE_WALLET_MNEMONIC!;
124
- const signer = await DirectSecp256k1HdWallet.fromMnemonic(mnemonic, {
125
- prefix: 'akash'
126
- });
127
-
128
- const result = await createWalletContextFromSigner(signer, 'mainnet');
129
- if (!result.success) throw result.error;
130
-
131
- serviceWallet = result.data;
132
- console.log('Service wallet initialized:', serviceWallet.address);
133
- }
134
-
135
- app.post('/api/deployments', async (req, res) => {
136
- const { projectPath, profile, network } = req.body;
137
-
138
- // Validate request
139
- if (!projectPath || !profile) {
140
- return res.status(400).json({
141
- error: 'Missing required fields: projectPath, profile'
142
- });
143
- }
144
-
145
- try {
146
- // Deploy using service wallet
147
- const result = await deployToAkash({
148
- wallet: serviceWallet,
149
- projectRoot: projectPath,
150
- profile,
151
- network: network || 'mainnet'
152
- });
153
-
154
- if (result.success) {
155
- res.json({
156
- success: true,
157
- deployment: {
158
- dseq: result.data.dseq,
159
- provider: result.data.provider,
160
- providerUri: result.data.providerUri,
161
- consoleUrl: `https://console.akash.network/deployments/${result.data.dseq}`
162
- }
163
- });
164
- } else {
165
- res.status(500).json({
166
- success: false,
167
- error: result.error.message,
168
- code: result.error.code
169
- });
170
- }
171
- } catch (error) {
172
- console.error('Deployment error:', error);
173
-
174
- if (error instanceof DeploymentError) {
175
- res.status(400).json({
176
- success: false,
177
- error: error.message,
178
- code: error.code,
179
- context: error.context
180
- });
181
- } else {
182
- res.status(500).json({
183
- success: false,
184
- error: 'Internal server error'
185
- });
186
- }
187
- }
188
- });
189
-
190
- // Initialize and start server
191
- initializeServiceWallet().then(() => {
192
- app.listen(3000, () => {
193
- console.log('Deployment API running on http://localhost:3000');
194
- });
195
- });
196
- ```
197
-
198
- ---
199
- ## Examples
200
-
201
- ### Complete Deployment Script
202
-
203
- ```typescript
204
- import {
205
- connectWallet,
206
- createSigningClient,
207
- ensureCertificate,
208
- deployToAkash
209
- } from 'deploy-ability';
210
- import QRCode from 'qrcode-terminal';
211
-
212
- async function main() {
213
- console.log('Deploying to Akash Network...\n');
214
-
215
- // 1. Connect wallet
216
- console.log('Step 1: Connect Keplr Wallet');
217
- const walletResult = await connectWallet(
218
- 'your-project-id',
219
- 'mainnet',
220
- {
221
- onUriGenerated: (uri) => {
222
- QRCode.generate(uri, { small: true });
223
- console.log('Scan QR code with Keplr mobile app');
224
- console.log('Waiting for approval...');
225
- },
226
- timeoutMs: 120000
227
- }
228
- );
229
-
230
- if (!walletResult.success) {
231
- console.error('Wallet connection failed:', walletResult.error.message);
232
- process.exit(1);
233
- }
234
-
235
- console.log(`Connected: ${walletResult.data.address}\n`);
236
-
237
- // 2. Create signing client
238
- console.log('Step 2: Connect to Akash Blockchain');
239
- const clientResult = await createSigningClient(walletResult.data, 'mainnet');
240
-
241
- if (!clientResult.success) {
242
- console.error('Client creation failed:', clientResult.error.message);
243
- process.exit(1);
244
- }
245
-
246
- console.log('Connected to Akash RPC\n');
247
-
248
- // 3. Ensure certificate
249
- console.log('Step 3: Setup Certificate');
250
- const certResult = await ensureCertificate(
251
- walletResult.data,
252
- 'mainnet',
253
- clientResult.data.client
254
- );
255
-
256
- if (!certResult.success) {
257
- console.error('Certificate setup failed:', certResult.error.message);
258
- process.exit(1);
259
- }
260
-
261
- console.log('Certificate ready\n');
262
-
263
- // 4. Deploy!
264
- console.log('Step 4: Deploy to Akash');
265
- const result = await deployToAkash({
266
- wallet: walletResult.data,
267
- certificate: certResult.data,
268
- projectRoot: process.cwd(),
269
- profile: 'production',
270
- network: 'mainnet'
271
- });
272
-
273
- if (!result.success) {
274
- console.error('Deployment failed:', result.error.message);
275
- process.exit(1);
276
- }
277
-
278
- // Success!
279
- console.log('\nDeployment Successful!\n');
280
- console.log('Deployment Details:');
281
- console.log(` DSEQ: ${result.data.dseq}`);
282
- console.log(` Provider: ${result.data.provider}`);
283
- console.log(` Provider URI: ${result.data.providerUri}`);
284
- console.log(` Console: https://console.akash.network/deployments/${result.data.dseq}`);
285
- }
286
-
287
- main().catch(err => {
288
- console.error('Fatal error:', err);
289
- process.exit(1);
290
- });
291
- ```
292
-
293
- ---