permaweb-deploy 0.0.0-alpha-20251211100922 → 0.0.0-alpha-20251211195317
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/LICENSE +21 -0
- package/README.md +111 -2
- package/dist/commands/deploy.js +10 -73
- package/dist/commands/deploy.js.map +1 -1
- package/dist/src/commands/deploy.d.ts.map +1 -1
- package/dist/src/utils/uploader.d.ts +0 -1
- package/dist/src/utils/uploader.d.ts.map +1 -1
- package/dist/tests/mocks/turbo-handlers.d.ts +3 -4
- package/dist/tests/mocks/turbo-handlers.d.ts.map +1 -1
- package/dist/utils/uploader.js +3 -12
- package/dist/utils/uploader.js.map +1 -1
- package/package.json +3 -3
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 ar.io
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -219,9 +219,118 @@ Or with on-demand payment:
|
|
|
219
219
|
DEPLOY_KEY=$(base64 -i wallet.json) pnpm deploy:on-demand
|
|
220
220
|
```
|
|
221
221
|
|
|
222
|
-
## GitHub
|
|
222
|
+
## GitHub Action
|
|
223
223
|
|
|
224
|
-
|
|
224
|
+
The easiest way to integrate permaweb-deploy into your CI/CD pipeline is using our official GitHub Action.
|
|
225
|
+
|
|
226
|
+
### Basic Usage
|
|
227
|
+
|
|
228
|
+
```yaml
|
|
229
|
+
- uses: permaweb/permaweb-deploy@v1
|
|
230
|
+
with:
|
|
231
|
+
deploy-key: ${{ secrets.DEPLOY_KEY }}
|
|
232
|
+
arns-name: myapp
|
|
233
|
+
deploy-folder: ./dist
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### PR Preview Deployments
|
|
237
|
+
|
|
238
|
+
Automatically deploy preview builds for each pull request. The `preview` mode auto-generates an undername from the PR number and posts a comment with the preview URL:
|
|
239
|
+
|
|
240
|
+
```yaml
|
|
241
|
+
name: Deploy PR Preview
|
|
242
|
+
|
|
243
|
+
on:
|
|
244
|
+
pull_request:
|
|
245
|
+
types: [opened, synchronize]
|
|
246
|
+
|
|
247
|
+
jobs:
|
|
248
|
+
deploy-preview:
|
|
249
|
+
runs-on: ubuntu-latest
|
|
250
|
+
steps:
|
|
251
|
+
- uses: actions/checkout@v4
|
|
252
|
+
|
|
253
|
+
- name: Setup Node.js
|
|
254
|
+
uses: actions/setup-node@v4
|
|
255
|
+
with:
|
|
256
|
+
node-version: '20'
|
|
257
|
+
|
|
258
|
+
- name: Install dependencies
|
|
259
|
+
run: npm ci
|
|
260
|
+
|
|
261
|
+
- name: Build
|
|
262
|
+
run: npm run build
|
|
263
|
+
|
|
264
|
+
- name: Deploy Preview
|
|
265
|
+
uses: permaweb/permaweb-deploy@v1
|
|
266
|
+
with:
|
|
267
|
+
deploy-key: ${{ secrets.DEPLOY_KEY }}
|
|
268
|
+
arns-name: myapp
|
|
269
|
+
preview: 'true'
|
|
270
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
271
|
+
deploy-folder: ./dist
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
When `preview` is enabled, the action will:
|
|
275
|
+
|
|
276
|
+
- Auto-generate an undername like `pr-123` from the PR number
|
|
277
|
+
- Post a comment on the PR with the preview URL
|
|
278
|
+
- Update the comment on subsequent pushes instead of creating new ones
|
|
279
|
+
|
|
280
|
+
### Production Deployment
|
|
281
|
+
|
|
282
|
+
Deploy to your base ArNS name when pushing to main:
|
|
283
|
+
|
|
284
|
+
```yaml
|
|
285
|
+
name: Deploy to Production
|
|
286
|
+
|
|
287
|
+
on:
|
|
288
|
+
push:
|
|
289
|
+
branches: [main]
|
|
290
|
+
|
|
291
|
+
jobs:
|
|
292
|
+
deploy:
|
|
293
|
+
runs-on: ubuntu-latest
|
|
294
|
+
steps:
|
|
295
|
+
- uses: actions/checkout@v4
|
|
296
|
+
|
|
297
|
+
- name: Setup Node.js
|
|
298
|
+
uses: actions/setup-node@v4
|
|
299
|
+
with:
|
|
300
|
+
node-version: '20'
|
|
301
|
+
|
|
302
|
+
- name: Install dependencies
|
|
303
|
+
run: npm ci
|
|
304
|
+
|
|
305
|
+
- name: Build
|
|
306
|
+
run: npm run build
|
|
307
|
+
|
|
308
|
+
- name: Deploy to Permaweb
|
|
309
|
+
uses: permaweb/permaweb-deploy@v1
|
|
310
|
+
with:
|
|
311
|
+
deploy-key: ${{ secrets.DEPLOY_KEY }}
|
|
312
|
+
arns-name: myapp
|
|
313
|
+
deploy-folder: ./dist
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### With On-Demand Payment
|
|
317
|
+
|
|
318
|
+
```yaml
|
|
319
|
+
- name: Deploy with ARIO on-demand
|
|
320
|
+
uses: permaweb/permaweb-deploy@v1
|
|
321
|
+
with:
|
|
322
|
+
deploy-key: ${{ secrets.DEPLOY_KEY }}
|
|
323
|
+
arns-name: myapp
|
|
324
|
+
deploy-folder: ./dist
|
|
325
|
+
on-demand: ario
|
|
326
|
+
max-token-amount: '2.0'
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
## CLI in GitHub Actions
|
|
332
|
+
|
|
333
|
+
You can also use the CLI directly in your workflows:
|
|
225
334
|
|
|
226
335
|
**Basic Workflow:**
|
|
227
336
|
|
package/dist/commands/deploy.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
2
|
import { ARIO, AOProcess, ANT } from '@ar.io/sdk';
|
|
4
3
|
import { TurboFactory, ETHToTokenAmount, ARIOToTokenAmount, OnDemandFunding } from '@ardrive/turbo-sdk';
|
|
5
4
|
import { Command } from '@oclif/core';
|
|
@@ -16,16 +15,6 @@ import { expandPath } from '../utils/path.js';
|
|
|
16
15
|
import { createSigner } from '../utils/signer.js';
|
|
17
16
|
import { uploadFile, uploadFolder } from '../utils/uploader.js';
|
|
18
17
|
|
|
19
|
-
function getFolderSize(folderPath) {
|
|
20
|
-
return fs.readdirSync(folderPath).reduce((totalSize, item) => {
|
|
21
|
-
const fullPath = path.join(folderPath, item);
|
|
22
|
-
const stats = fs.statSync(fullPath);
|
|
23
|
-
if (stats.isDirectory()) {
|
|
24
|
-
return totalSize + getFolderSize(fullPath);
|
|
25
|
-
}
|
|
26
|
-
return totalSize + stats.size;
|
|
27
|
-
}, 0);
|
|
28
|
-
}
|
|
29
18
|
class Deploy extends Command {
|
|
30
19
|
static args = {};
|
|
31
20
|
static description = "Deploy your application to the permaweb";
|
|
@@ -154,69 +143,17 @@ class Deploy extends Command {
|
|
|
154
143
|
topUpBufferMultiplier: 1.1
|
|
155
144
|
});
|
|
156
145
|
}
|
|
157
|
-
if (!fundingMode) {
|
|
158
|
-
spinner.start("Checking Turbo credits for upload");
|
|
159
|
-
try {
|
|
160
|
-
const uploadBytes = deployConfig["deploy-file"] ? (() => {
|
|
161
|
-
const filePath = expandPath(deployConfig["deploy-file"]);
|
|
162
|
-
return fs.statSync(filePath).size;
|
|
163
|
-
})() : (() => {
|
|
164
|
-
const folderPath = expandPath(deployConfig["deploy-folder"]);
|
|
165
|
-
return getFolderSize(folderPath);
|
|
166
|
-
})();
|
|
167
|
-
const FREE_THRESHOLD_BYTES = 107520;
|
|
168
|
-
if (uploadBytes >= FREE_THRESHOLD_BYTES) {
|
|
169
|
-
const [uploadCost] = await turbo.getUploadCosts({ bytes: [uploadBytes] });
|
|
170
|
-
const balance = await turbo.getBalance();
|
|
171
|
-
const requiredWinc = BigInt(uploadCost.winc);
|
|
172
|
-
const currentWinc = BigInt(balance.winc);
|
|
173
|
-
if (requiredWinc > currentWinc) {
|
|
174
|
-
spinner.fail("Insufficient Turbo credits");
|
|
175
|
-
this.error(
|
|
176
|
-
[
|
|
177
|
-
"Insufficient Turbo credits for this upload.",
|
|
178
|
-
`Required: ${requiredWinc.toString()} winc, available: ${currentWinc.toString()} winc.`,
|
|
179
|
-
"",
|
|
180
|
-
"Top up your Turbo balance (or re-run with --on-demand and --max-token-amount)."
|
|
181
|
-
].join(" ")
|
|
182
|
-
);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
spinner.succeed("Turbo credits check passed");
|
|
186
|
-
} catch (balanceError) {
|
|
187
|
-
spinner.fail("Failed to check Turbo credits");
|
|
188
|
-
const errorMessage = balanceError instanceof Error ? balanceError.message : String(balanceError);
|
|
189
|
-
this.error(`Failed to check Turbo credits: ${errorMessage}`);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
146
|
let txOrManifestId;
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
} else {
|
|
204
|
-
const folderPath = expandPath(deployConfig["deploy-folder"]);
|
|
205
|
-
spinner.start(`Uploading folder ${chalk.yellow(deployConfig["deploy-folder"])}`);
|
|
206
|
-
txOrManifestId = await uploadFolder(turbo, folderPath, {
|
|
207
|
-
fundingMode,
|
|
208
|
-
throwOnFailure: true
|
|
209
|
-
});
|
|
210
|
-
if (!txOrManifestId) {
|
|
211
|
-
spinner.fail("Folder upload failed: no transaction ID returned");
|
|
212
|
-
this.error("Folder upload failed: no transaction ID returned");
|
|
213
|
-
}
|
|
214
|
-
spinner.succeed(`Folder uploaded: ${chalk.green(txOrManifestId)}`);
|
|
215
|
-
}
|
|
216
|
-
} catch (uploadError) {
|
|
217
|
-
spinner.fail("Upload failed");
|
|
218
|
-
const errorMessage = uploadError instanceof Error ? uploadError.message : String(uploadError);
|
|
219
|
-
this.error(`Upload failed: ${errorMessage}`);
|
|
147
|
+
if (deployConfig["deploy-file"]) {
|
|
148
|
+
const filePath = expandPath(deployConfig["deploy-file"]);
|
|
149
|
+
spinner.start(`Uploading file ${chalk.yellow(deployConfig["deploy-file"])}`);
|
|
150
|
+
txOrManifestId = await uploadFile(turbo, filePath, { fundingMode });
|
|
151
|
+
spinner.succeed(`File uploaded: ${chalk.green(txOrManifestId)}`);
|
|
152
|
+
} else {
|
|
153
|
+
const folderPath = expandPath(deployConfig["deploy-folder"]);
|
|
154
|
+
spinner.start(`Uploading folder ${chalk.yellow(deployConfig["deploy-folder"])}`);
|
|
155
|
+
txOrManifestId = await uploadFolder(turbo, folderPath, { fundingMode });
|
|
156
|
+
spinner.succeed(`Folder uploaded: ${chalk.green(txOrManifestId)}`);
|
|
220
157
|
}
|
|
221
158
|
this.log("");
|
|
222
159
|
spinner.start("Updating ANT record");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.js","sources":["../../src/commands/deploy.ts"],"sourcesContent":["import fs from 'node:fs'\nimport path from 'node:path'\nimport { ANT, AOProcess, ARIO } from '@ar.io/sdk'\nimport {\n ARIOToTokenAmount,\n ETHToTokenAmount,\n OnDemandFunding,\n TurboFactory,\n} from '@ardrive/turbo-sdk'\nimport { Command } from '@oclif/core'\nimport { connect } from '@permaweb/aoconnect'\nimport boxen from 'boxen'\nimport chalk from 'chalk'\nimport Table from 'cli-table3'\nimport ora from 'ora'\n\nimport { type DeployConfig, deployFlagConfigs } from '../constants/flags.js'\nimport { promptAdvancedOptions } from '../prompts/arns.js'\nimport { getWalletConfig } from '../prompts/wallet.js'\nimport type { SignerType } from '../types/index.js'\nimport { extractFlags, resolveConfig } from '../utils/config-resolver.js'\nimport { expandPath } from '../utils/path.js'\nimport { createSigner } from '../utils/signer.js'\nimport { uploadFile, uploadFolder } from '../utils/uploader.js'\n\nfunction getFolderSize(folderPath: string): number {\n return fs.readdirSync(folderPath).reduce((totalSize, item) => {\n const fullPath = path.join(folderPath, item)\n const stats = fs.statSync(fullPath)\n\n if (stats.isDirectory()) {\n return totalSize + getFolderSize(fullPath)\n }\n\n return totalSize + stats.size\n }, 0)\n}\n\nexport default class Deploy extends Command {\n static override args = {}\n\n static override description = 'Deploy your application to the permaweb'\n\n static override examples = [\n '<%= config.bin %> deploy # Interactive mode',\n '<%= config.bin %> deploy --arns-name my-app --wallet ./wallet.json',\n '<%= config.bin %> deploy --arns-name my-app --private-key \"$(cat wallet.json)\"',\n '<%= config.bin %> deploy --arns-name my-app --undername staging',\n '<%= config.bin %> deploy --arns-name my-app --deploy-file ./dist/index.html',\n '<%= config.bin %> deploy --arns-name my-app --sig-type ethereum --wallet ./private-key.txt',\n '<%= config.bin %> deploy --arns-name my-app --sig-type ethereum --private-key \"0x...\"',\n '<%= config.bin %> deploy --arns-name my-app --on-demand ario --max-token-amount 1000',\n ]\n\n static override flags = extractFlags(deployFlagConfigs)\n\n public async run(): Promise<void> {\n try {\n const { flags } = await this.parse(Deploy)\n\n // Check if we need interactive mode (no arns-name provided)\n const interactive = !flags['arns-name']\n\n if (interactive) {\n this.log(chalk.cyan.bold('\\n🎯 Interactive Deployment Mode\\n'))\n }\n\n // Resolve base configuration - prompts will run automatically in interactive mode\n const baseConfig = (await resolveConfig<typeof deployFlagConfigs>(deployFlagConfigs, flags, {\n interactive,\n })) as DeployConfig\n\n // Handle wallet configuration (shared between wallet and privateKey)\n let walletConfig: { privateKey?: string; wallet?: string } = {\n privateKey: baseConfig['private-key'],\n wallet: baseConfig.wallet,\n }\n\n if (interactive && !baseConfig.wallet && !baseConfig['private-key']) {\n const config = await getWalletConfig()\n walletConfig = {\n privateKey: config.privateKey,\n wallet: config.wallet,\n }\n }\n\n // Handle advanced options (shared between ttlSeconds, undername, arioProcess, onDemand, maxTokenAmount)\n let advancedOptions:\n | {\n arioProcess: string\n maxTokenAmount?: string\n onDemand?: string\n ttlSeconds: string\n undername: string\n }\n | undefined\n\n if (interactive) {\n const options = await promptAdvancedOptions()\n advancedOptions = options || undefined\n }\n\n // Build final config with shared prompt results\n const deployConfig: DeployConfig = {\n 'ario-process': advancedOptions?.arioProcess || baseConfig['ario-process'],\n 'arns-name': baseConfig['arns-name'],\n 'deploy-file': baseConfig['deploy-file'],\n 'deploy-folder': baseConfig['deploy-folder'],\n 'max-token-amount': advancedOptions?.maxTokenAmount || baseConfig['max-token-amount'],\n 'on-demand': advancedOptions?.onDemand || baseConfig['on-demand'],\n 'private-key': walletConfig.privateKey,\n 'sig-type': baseConfig['sig-type'],\n 'ttl-seconds': advancedOptions?.ttlSeconds || baseConfig['ttl-seconds'],\n undername: advancedOptions?.undername || baseConfig.undername,\n wallet: walletConfig.wallet,\n }\n\n if (interactive) {\n this.log('')\n }\n\n // Get deploy key from wallet file, private-key flag, or environment variable\n let deployKey: string\n if (deployConfig.wallet) {\n const walletPath = expandPath(deployConfig.wallet)\n if (!fs.existsSync(walletPath)) {\n this.error(`Wallet file [${deployConfig.wallet}] does not exist`)\n }\n\n const walletContent = fs.readFileSync(walletPath, 'utf8')\n // For Arweave wallets (JWK), encode to base64. For others (private keys), use as-is\n deployKey =\n deployConfig['sig-type'] === 'arweave'\n ? Buffer.from(walletContent).toString('base64')\n : walletContent.trim()\n } else if (deployConfig['private-key']) {\n // For Arweave wallets (JWK JSON), encode to base64. For others, use as-is\n deployKey =\n deployConfig['sig-type'] === 'arweave'\n ? Buffer.from(deployConfig['private-key']).toString('base64')\n : deployConfig['private-key'].trim()\n } else {\n deployKey = process.env.DEPLOY_KEY || ''\n if (!deployKey) {\n this.error(\n 'DEPLOY_KEY environment variable not set. Use --wallet, --private-key, or set DEPLOY_KEY',\n )\n }\n }\n\n // All validation is now handled in resolveDeployConfig\n const arioProcess = deployConfig['ario-process']\n\n this.log(chalk.cyan.bold('\\n🚀 Starting deployment...\\n'))\n try {\n // Initialize ARIO\n const spinner = ora('Initializing ARIO').start()\n\n const ao = connect({\n CU_URL: 'https://cu.ardrive.io',\n MODE: 'legacy',\n MU_URL: 'https://mu.ao-testnet.xyz',\n })\n\n const ario = ARIO.init({\n process: new AOProcess({\n ao,\n processId: arioProcess,\n }),\n })\n\n spinner.succeed('ARIO initialized')\n\n // Get ArNS record\n spinner.start(`Fetching ArNS record for ${chalk.yellow(deployConfig['arns-name'])}`)\n const arnsNameRecord = await ario\n .getArNSRecord({ name: deployConfig['arns-name'] })\n .catch(() => {\n spinner.fail(`ArNS name ${chalk.red(deployConfig['arns-name'])} does not exist`)\n this.error(`ArNS name [${deployConfig['arns-name']}] does not exist`)\n })\n\n spinner.succeed(`ArNS record fetched for ${chalk.green(deployConfig['arns-name'])}`)\n\n // Create signer\n spinner.start('Creating signer')\n const { signer, token } = createSigner(deployConfig['sig-type'] as SignerType, deployKey)\n spinner.succeed(`Signer created (${chalk.cyan(deployConfig['sig-type'])})`)\n\n // Initialize Turbo\n spinner.start('Initializing Turbo')\n const turbo = TurboFactory.authenticated({\n signer,\n token,\n })\n spinner.succeed('Turbo initialized')\n\n // Create on-demand funding mode if specified\n let fundingMode: OnDemandFunding | undefined\n if (deployConfig['on-demand'] && deployConfig['max-token-amount']) {\n const tokenType = deployConfig['on-demand']\n const maxAmount = Number.parseFloat(deployConfig['max-token-amount'])\n\n let maxTokenAmount: ReturnType<typeof ARIOToTokenAmount>\n switch (tokenType) {\n case 'ario': {\n maxTokenAmount = ARIOToTokenAmount(maxAmount)\n break\n }\n\n case 'base-eth': {\n maxTokenAmount = ETHToTokenAmount(maxAmount)\n break\n }\n\n default: {\n throw new Error(`Unsupported on-demand token type: ${tokenType}`)\n }\n }\n\n fundingMode = new OnDemandFunding({\n maxTokenAmount,\n topUpBufferMultiplier: 1.1,\n })\n }\n\n if (!fundingMode) {\n spinner.start('Checking Turbo credits for upload')\n\n try {\n // Figure out how many bytes we're about to upload\n const uploadBytes = deployConfig['deploy-file']\n ? (() => {\n const filePath = expandPath(deployConfig['deploy-file']!)\n return fs.statSync(filePath).size\n })()\n : (() => {\n const folderPath = expandPath(deployConfig['deploy-folder']!)\n return getFolderSize(folderPath)\n })()\n\n const FREE_THRESHOLD_BYTES = 107_520 // ~105 KiB\n\n if (uploadBytes >= FREE_THRESHOLD_BYTES) {\n // Ask Turbo how many winc this upload will cost, and compare to current balance\n const [uploadCost] = await turbo.getUploadCosts({ bytes: [uploadBytes] })\n const balance = await turbo.getBalance()\n\n // These come back as strings; treat them as big integers\n const requiredWinc = BigInt(uploadCost.winc)\n const currentWinc = BigInt(balance.winc)\n\n if (requiredWinc > currentWinc) {\n spinner.fail('Insufficient Turbo credits')\n\n this.error(\n [\n 'Insufficient Turbo credits for this upload.',\n `Required: ${requiredWinc.toString()} winc, available: ${currentWinc.toString()} winc.`,\n '',\n 'Top up your Turbo balance (or re-run with --on-demand and --max-token-amount).',\n ].join(' '),\n )\n }\n }\n\n spinner.succeed('Turbo credits check passed')\n } catch (balanceError) {\n spinner.fail('Failed to check Turbo credits')\n const errorMessage =\n balanceError instanceof Error ? balanceError.message : String(balanceError)\n this.error(`Failed to check Turbo credits: ${errorMessage}`)\n }\n }\n // Upload file or folder\n let txOrManifestId: string\n try {\n if (deployConfig['deploy-file']) {\n const filePath = expandPath(deployConfig['deploy-file'])\n spinner.start(`Uploading file ${chalk.yellow(deployConfig['deploy-file'])}`)\n txOrManifestId = await uploadFile(turbo, filePath, { fundingMode })\n if (!txOrManifestId) {\n spinner.fail('File upload failed: no transaction ID returned')\n this.error('File upload failed: no transaction ID returned')\n }\n spinner.succeed(`File uploaded: ${chalk.green(txOrManifestId)}`)\n } else {\n const folderPath = expandPath(deployConfig['deploy-folder'])\n spinner.start(`Uploading folder ${chalk.yellow(deployConfig['deploy-folder'])}`)\n txOrManifestId = await uploadFolder(turbo, folderPath, {\n fundingMode,\n throwOnFailure: true,\n })\n if (!txOrManifestId) {\n spinner.fail('Folder upload failed: no transaction ID returned')\n this.error('Folder upload failed: no transaction ID returned')\n }\n spinner.succeed(`Folder uploaded: ${chalk.green(txOrManifestId)}`)\n }\n } catch (uploadError) {\n spinner.fail('Upload failed')\n const errorMessage =\n uploadError instanceof Error ? uploadError.message : String(uploadError)\n this.error(`Upload failed: ${errorMessage}`)\n }\n\n this.log('')\n\n // Initialize ANT and update record\n spinner.start('Updating ANT record')\n const ant = ANT.init({ processId: arnsNameRecord.processId, signer })\n\n await ant.setRecord(\n {\n transactionId: txOrManifestId,\n ttlSeconds: Number.parseInt(deployConfig['ttl-seconds'], 10),\n undername: deployConfig.undername,\n },\n {\n tags: [\n {\n name: 'App-Name',\n value: 'Permaweb-Deploy',\n },\n ...(process.env.GITHUB_SHA\n ? [\n {\n name: 'GIT-HASH',\n value: process.env.GITHUB_SHA,\n },\n ]\n : []),\n ],\n },\n )\n\n spinner.succeed('ANT record updated')\n\n // Display deployment details in a table inside a success box\n const table = new Table({\n head: [chalk.cyan.bold('Property'), chalk.cyan.bold('Value')],\n style: {\n head: [],\n },\n })\n\n table.push(\n ['Tx ID', chalk.green(txOrManifestId)],\n ['ArNS Name', chalk.yellow(deployConfig['arns-name'])],\n ['Undername', chalk.yellow(deployConfig.undername)],\n ['ANT', chalk.cyan(arnsNameRecord.processId)],\n ['ARIO Process', chalk.gray(arioProcess)],\n ['TTL Seconds', chalk.blue(deployConfig['ttl-seconds'])],\n )\n\n const successMessage = boxen(\n `${chalk.green.bold('✨ Deployment Successful!')}\\n\\n${table.toString()}`,\n {\n borderColor: 'green',\n borderStyle: 'round',\n padding: 1,\n title: chalk.bold('🚀 Permaweb Deploy'),\n titleAlignment: 'center',\n },\n )\n\n this.log(`\\n${successMessage}`)\n } catch (error) {\n this.error(\n chalk.red(`Deployment failed: ${error instanceof Error ? error.message : String(error)}`),\n )\n }\n } catch (error) {\n // Handle user cancellation (Ctrl+C)\n if (error instanceof Error && error.name === 'ExitPromptError') {\n this.log(chalk.yellow('\\n\\n👋 Deployment cancelled'))\n this.exit(0)\n }\n\n throw error\n }\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"deploy.js","sources":["../../src/commands/deploy.ts"],"sourcesContent":["import fs from 'node:fs'\n\nimport { ANT, AOProcess, ARIO } from '@ar.io/sdk'\nimport {\n ARIOToTokenAmount,\n ETHToTokenAmount,\n OnDemandFunding,\n TurboFactory,\n} from '@ardrive/turbo-sdk'\nimport { Command } from '@oclif/core'\nimport { connect } from '@permaweb/aoconnect'\nimport boxen from 'boxen'\nimport chalk from 'chalk'\nimport Table from 'cli-table3'\nimport ora from 'ora'\n\nimport { type DeployConfig, deployFlagConfigs } from '../constants/flags.js'\nimport { promptAdvancedOptions } from '../prompts/arns.js'\nimport { getWalletConfig } from '../prompts/wallet.js'\nimport type { SignerType } from '../types/index.js'\nimport { extractFlags, resolveConfig } from '../utils/config-resolver.js'\nimport { expandPath } from '../utils/path.js'\nimport { createSigner } from '../utils/signer.js'\nimport { uploadFile, uploadFolder } from '../utils/uploader.js'\n\nexport default class Deploy extends Command {\n static override args = {}\n\n static override description = 'Deploy your application to the permaweb'\n\n static override examples = [\n '<%= config.bin %> deploy # Interactive mode',\n '<%= config.bin %> deploy --arns-name my-app --wallet ./wallet.json',\n '<%= config.bin %> deploy --arns-name my-app --private-key \"$(cat wallet.json)\"',\n '<%= config.bin %> deploy --arns-name my-app --undername staging',\n '<%= config.bin %> deploy --arns-name my-app --deploy-file ./dist/index.html',\n '<%= config.bin %> deploy --arns-name my-app --sig-type ethereum --wallet ./private-key.txt',\n '<%= config.bin %> deploy --arns-name my-app --sig-type ethereum --private-key \"0x...\"',\n '<%= config.bin %> deploy --arns-name my-app --on-demand ario --max-token-amount 1000',\n ]\n\n static override flags = extractFlags(deployFlagConfigs)\n\n public async run(): Promise<void> {\n try {\n const { flags } = await this.parse(Deploy)\n\n // Check if we need interactive mode (no arns-name provided)\n const interactive = !flags['arns-name']\n\n if (interactive) {\n this.log(chalk.cyan.bold('\\n🎯 Interactive Deployment Mode\\n'))\n }\n\n // Resolve base configuration - prompts will run automatically in interactive mode\n const baseConfig = (await resolveConfig<typeof deployFlagConfigs>(deployFlagConfigs, flags, {\n interactive,\n })) as DeployConfig\n\n // Handle wallet configuration (shared between wallet and privateKey)\n let walletConfig: { privateKey?: string; wallet?: string } = {\n privateKey: baseConfig['private-key'],\n wallet: baseConfig.wallet,\n }\n\n if (interactive && !baseConfig.wallet && !baseConfig['private-key']) {\n const config = await getWalletConfig()\n walletConfig = {\n privateKey: config.privateKey,\n wallet: config.wallet,\n }\n }\n\n // Handle advanced options (shared between ttlSeconds, undername, arioProcess, onDemand, maxTokenAmount)\n let advancedOptions:\n | {\n arioProcess: string\n maxTokenAmount?: string\n onDemand?: string\n ttlSeconds: string\n undername: string\n }\n | undefined\n\n if (interactive) {\n const options = await promptAdvancedOptions()\n advancedOptions = options || undefined\n }\n\n // Build final config with shared prompt results\n const deployConfig: DeployConfig = {\n 'ario-process': advancedOptions?.arioProcess || baseConfig['ario-process'],\n 'arns-name': baseConfig['arns-name'],\n 'deploy-file': baseConfig['deploy-file'],\n 'deploy-folder': baseConfig['deploy-folder'],\n 'max-token-amount': advancedOptions?.maxTokenAmount || baseConfig['max-token-amount'],\n 'on-demand': advancedOptions?.onDemand || baseConfig['on-demand'],\n 'private-key': walletConfig.privateKey,\n 'sig-type': baseConfig['sig-type'],\n 'ttl-seconds': advancedOptions?.ttlSeconds || baseConfig['ttl-seconds'],\n undername: advancedOptions?.undername || baseConfig.undername,\n wallet: walletConfig.wallet,\n }\n\n if (interactive) {\n this.log('')\n }\n\n // Get deploy key from wallet file, private-key flag, or environment variable\n let deployKey: string\n if (deployConfig.wallet) {\n const walletPath = expandPath(deployConfig.wallet)\n if (!fs.existsSync(walletPath)) {\n this.error(`Wallet file [${deployConfig.wallet}] does not exist`)\n }\n\n const walletContent = fs.readFileSync(walletPath, 'utf8')\n // For Arweave wallets (JWK), encode to base64. For others (private keys), use as-is\n deployKey =\n deployConfig['sig-type'] === 'arweave'\n ? Buffer.from(walletContent).toString('base64')\n : walletContent.trim()\n } else if (deployConfig['private-key']) {\n // For Arweave wallets (JWK JSON), encode to base64. For others, use as-is\n deployKey =\n deployConfig['sig-type'] === 'arweave'\n ? Buffer.from(deployConfig['private-key']).toString('base64')\n : deployConfig['private-key'].trim()\n } else {\n deployKey = process.env.DEPLOY_KEY || ''\n if (!deployKey) {\n this.error(\n 'DEPLOY_KEY environment variable not set. Use --wallet, --private-key, or set DEPLOY_KEY',\n )\n }\n }\n\n // All validation is now handled in resolveDeployConfig\n const arioProcess = deployConfig['ario-process']\n\n this.log(chalk.cyan.bold('\\n🚀 Starting deployment...\\n'))\n try {\n // Initialize ARIO\n const spinner = ora('Initializing ARIO').start()\n\n const ao = connect({\n CU_URL: 'https://cu.ardrive.io',\n MODE: 'legacy',\n MU_URL: 'https://mu.ao-testnet.xyz',\n })\n\n const ario = ARIO.init({\n process: new AOProcess({\n ao,\n processId: arioProcess,\n }),\n })\n\n spinner.succeed('ARIO initialized')\n\n // Get ArNS record\n spinner.start(`Fetching ArNS record for ${chalk.yellow(deployConfig['arns-name'])}`)\n const arnsNameRecord = await ario\n .getArNSRecord({ name: deployConfig['arns-name'] })\n .catch(() => {\n spinner.fail(`ArNS name ${chalk.red(deployConfig['arns-name'])} does not exist`)\n this.error(`ArNS name [${deployConfig['arns-name']}] does not exist`)\n })\n\n spinner.succeed(`ArNS record fetched for ${chalk.green(deployConfig['arns-name'])}`)\n\n // Create signer\n spinner.start('Creating signer')\n const { signer, token } = createSigner(deployConfig['sig-type'] as SignerType, deployKey)\n spinner.succeed(`Signer created (${chalk.cyan(deployConfig['sig-type'])})`)\n\n // Initialize Turbo\n spinner.start('Initializing Turbo')\n const turbo = TurboFactory.authenticated({\n signer,\n token,\n })\n spinner.succeed('Turbo initialized')\n\n // Create on-demand funding mode if specified\n let fundingMode: OnDemandFunding | undefined\n if (deployConfig['on-demand'] && deployConfig['max-token-amount']) {\n const tokenType = deployConfig['on-demand']\n const maxAmount = Number.parseFloat(deployConfig['max-token-amount'])\n\n let maxTokenAmount: ReturnType<typeof ARIOToTokenAmount>\n switch (tokenType) {\n case 'ario': {\n maxTokenAmount = ARIOToTokenAmount(maxAmount)\n break\n }\n\n case 'base-eth': {\n maxTokenAmount = ETHToTokenAmount(maxAmount)\n break\n }\n\n default: {\n throw new Error(`Unsupported on-demand token type: ${tokenType}`)\n }\n }\n\n fundingMode = new OnDemandFunding({\n maxTokenAmount,\n topUpBufferMultiplier: 1.1,\n })\n }\n\n // Upload file or folder\n let txOrManifestId: string\n if (deployConfig['deploy-file']) {\n const filePath = expandPath(deployConfig['deploy-file'])\n spinner.start(`Uploading file ${chalk.yellow(deployConfig['deploy-file'])}`)\n txOrManifestId = await uploadFile(turbo, filePath, { fundingMode })\n spinner.succeed(`File uploaded: ${chalk.green(txOrManifestId)}`)\n } else {\n const folderPath = expandPath(deployConfig['deploy-folder'])\n spinner.start(`Uploading folder ${chalk.yellow(deployConfig['deploy-folder'])}`)\n txOrManifestId = await uploadFolder(turbo, folderPath, { fundingMode })\n spinner.succeed(`Folder uploaded: ${chalk.green(txOrManifestId)}`)\n }\n\n this.log('')\n\n // Initialize ANT and update record\n spinner.start('Updating ANT record')\n const ant = ANT.init({ processId: arnsNameRecord.processId, signer })\n\n await ant.setRecord(\n {\n transactionId: txOrManifestId,\n ttlSeconds: Number.parseInt(deployConfig['ttl-seconds'], 10),\n undername: deployConfig.undername,\n },\n {\n tags: [\n {\n name: 'App-Name',\n value: 'Permaweb-Deploy',\n },\n ...(process.env.GITHUB_SHA\n ? [\n {\n name: 'GIT-HASH',\n value: process.env.GITHUB_SHA,\n },\n ]\n : []),\n ],\n },\n )\n\n spinner.succeed('ANT record updated')\n\n // Display deployment details in a table inside a success box\n const table = new Table({\n head: [chalk.cyan.bold('Property'), chalk.cyan.bold('Value')],\n style: {\n head: [],\n },\n })\n\n table.push(\n ['Tx ID', chalk.green(txOrManifestId)],\n ['ArNS Name', chalk.yellow(deployConfig['arns-name'])],\n ['Undername', chalk.yellow(deployConfig.undername)],\n ['ANT', chalk.cyan(arnsNameRecord.processId)],\n ['ARIO Process', chalk.gray(arioProcess)],\n ['TTL Seconds', chalk.blue(deployConfig['ttl-seconds'])],\n )\n\n const successMessage = boxen(\n `${chalk.green.bold('✨ Deployment Successful!')}\\n\\n${table.toString()}`,\n {\n borderColor: 'green',\n borderStyle: 'round',\n padding: 1,\n title: chalk.bold('🚀 Permaweb Deploy'),\n titleAlignment: 'center',\n },\n )\n\n this.log(`\\n${successMessage}`)\n } catch (error) {\n this.error(\n chalk.red(`Deployment failed: ${error instanceof Error ? error.message : String(error)}`),\n )\n }\n } catch (error) {\n // Handle user cancellation (Ctrl+C)\n if (error instanceof Error && error.name === 'ExitPromptError') {\n this.log(chalk.yellow('\\n\\n👋 Deployment cancelled'))\n this.exit(0)\n }\n\n throw error\n }\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAyBA,MAAqB,eAAe,OAAA,CAAQ;AAAA,EAC1C,OAAgB,OAAO,EAAC;AAAA,EAExB,OAAgB,WAAA,GAAc,yCAAA;AAAA,EAE9B,OAAgB,QAAA,GAAW;AAAA,IACzB,8CAAA;AAAA,IACA,oEAAA;AAAA,IACA,gFAAA;AAAA,IACA,iEAAA;AAAA,IACA,6EAAA;AAAA,IACA,4FAAA;AAAA,IACA,uFAAA;AAAA,IACA;AAAA,GACF;AAAA,EAEA,OAAgB,KAAA,GAAQ,YAAA,CAAa,iBAAiB,CAAA;AAAA,EAEtD,MAAa,GAAA,GAAqB;AAChC,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,IAAA,CAAK,MAAM,MAAM,CAAA;AAGzC,MAAA,MAAM,WAAA,GAAc,CAAC,KAAA,CAAM,WAAW,CAAA;AAEtC,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,oCAAoC,CAAC,CAAA;AAAA,MAChE;AAGA,MAAA,MAAM,UAAA,GAAc,MAAM,aAAA,CAAwC,iBAAA,EAAmB,KAAA,EAAO;AAAA,QAC1F;AAAA,OACD,CAAA;AAGD,MAAA,IAAI,YAAA,GAAyD;AAAA,QAC3D,UAAA,EAAY,WAAW,aAAa,CAAA;AAAA,QACpC,QAAQ,UAAA,CAAW;AAAA,OACrB;AAEA,MAAA,IAAI,eAAe,CAAC,UAAA,CAAW,UAAU,CAAC,UAAA,CAAW,aAAa,CAAA,EAAG;AACnE,QAAA,MAAM,MAAA,GAAS,MAAM,eAAA,EAAgB;AACrC,QAAA,YAAA,GAAe;AAAA,UACb,YAAY,MAAA,CAAO,UAAA;AAAA,UACnB,QAAQ,MAAA,CAAO;AAAA,SACjB;AAAA,MACF;AAGA,MAAA,IAAI,eAAA;AAUJ,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,MAAM,OAAA,GAAU,MAAM,qBAAA,EAAsB;AAC5C,QAAA,eAAA,GAAkB,OAAA,IAAW,KAAA,CAAA;AAAA,MAC/B;AAGA,MAAA,MAAM,YAAA,GAA6B;AAAA,QACjC,cAAA,EAAgB,eAAA,EAAiB,WAAA,IAAe,UAAA,CAAW,cAAc,CAAA;AAAA,QACzE,WAAA,EAAa,WAAW,WAAW,CAAA;AAAA,QACnC,aAAA,EAAe,WAAW,aAAa,CAAA;AAAA,QACvC,eAAA,EAAiB,WAAW,eAAe,CAAA;AAAA,QAC3C,kBAAA,EAAoB,eAAA,EAAiB,cAAA,IAAkB,UAAA,CAAW,kBAAkB,CAAA;AAAA,QACpF,WAAA,EAAa,eAAA,EAAiB,QAAA,IAAY,UAAA,CAAW,WAAW,CAAA;AAAA,QAChE,eAAe,YAAA,CAAa,UAAA;AAAA,QAC5B,UAAA,EAAY,WAAW,UAAU,CAAA;AAAA,QACjC,aAAA,EAAe,eAAA,EAAiB,UAAA,IAAc,UAAA,CAAW,aAAa,CAAA;AAAA,QACtE,SAAA,EAAW,eAAA,EAAiB,SAAA,IAAa,UAAA,CAAW,SAAA;AAAA,QACpD,QAAQ,YAAA,CAAa;AAAA,OACvB;AAEA,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,IAAA,CAAK,IAAI,EAAE,CAAA;AAAA,MACb;AAGA,MAAA,IAAI,SAAA;AACJ,MAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,QAAA,MAAM,UAAA,GAAa,UAAA,CAAW,YAAA,CAAa,MAAM,CAAA;AACjD,QAAA,IAAI,CAAC,EAAA,CAAG,UAAA,CAAW,UAAU,CAAA,EAAG;AAC9B,UAAA,IAAA,CAAK,KAAA,CAAM,CAAA,aAAA,EAAgB,YAAA,CAAa,MAAM,CAAA,gBAAA,CAAkB,CAAA;AAAA,QAClE;AAEA,QAAA,MAAM,aAAA,GAAgB,EAAA,CAAG,YAAA,CAAa,UAAA,EAAY,MAAM,CAAA;AAExD,QAAA,SAAA,GACE,YAAA,CAAa,UAAU,CAAA,KAAM,SAAA,GACzB,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA,GAC5C,aAAA,CAAc,IAAA,EAAK;AAAA,MAC3B,CAAA,MAAA,IAAW,YAAA,CAAa,aAAa,CAAA,EAAG;AAEtC,QAAA,SAAA,GACE,aAAa,UAAU,CAAA,KAAM,SAAA,GACzB,MAAA,CAAO,KAAK,YAAA,CAAa,aAAa,CAAC,CAAA,CAAE,SAAS,QAAQ,CAAA,GAC1D,YAAA,CAAa,aAAa,EAAE,IAAA,EAAK;AAAA,MACzC,CAAA,MAAO;AACL,QAAA,SAAA,GAAY,OAAA,CAAQ,IAAI,UAAA,IAAc,EAAA;AACtC,QAAA,IAAI,CAAC,SAAA,EAAW;AACd,UAAA,IAAA,CAAK,KAAA;AAAA,YACH;AAAA,WACF;AAAA,QACF;AAAA,MACF;AAGA,MAAA,MAAM,WAAA,GAAc,aAAa,cAAc,CAAA;AAE/C,MAAA,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,+BAA+B,CAAC,CAAA;AACzD,MAAA,IAAI;AAEF,QAAA,MAAM,OAAA,GAAU,GAAA,CAAI,mBAAmB,CAAA,CAAE,KAAA,EAAM;AAE/C,QAAA,MAAM,KAAK,OAAA,CAAQ;AAAA,UACjB,MAAA,EAAQ,uBAAA;AAAA,UACR,IAAA,EAAM,QAAA;AAAA,UACN,MAAA,EAAQ;AAAA,SACT,CAAA;AAED,QAAA,MAAM,IAAA,GAAO,KAAK,IAAA,CAAK;AAAA,UACrB,OAAA,EAAS,IAAI,SAAA,CAAU;AAAA,YACrB,EAAA;AAAA,YACA,SAAA,EAAW;AAAA,WACZ;AAAA,SACF,CAAA;AAED,QAAA,OAAA,CAAQ,QAAQ,kBAAkB,CAAA;AAGlC,QAAA,OAAA,CAAQ,KAAA,CAAM,4BAA4B,KAAA,CAAM,MAAA,CAAO,aAAa,WAAW,CAAC,CAAC,CAAA,CAAE,CAAA;AACnF,QAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAC1B,aAAA,CAAc,EAAE,IAAA,EAAM,YAAA,CAAa,WAAW,CAAA,EAAG,CAAA,CACjD,KAAA,CAAM,MAAM;AACX,UAAA,OAAA,CAAQ,IAAA,CAAK,aAAa,KAAA,CAAM,GAAA,CAAI,aAAa,WAAW,CAAC,CAAC,CAAA,eAAA,CAAiB,CAAA;AAC/E,UAAA,IAAA,CAAK,KAAA,CAAM,CAAA,WAAA,EAAc,YAAA,CAAa,WAAW,CAAC,CAAA,gBAAA,CAAkB,CAAA;AAAA,QACtE,CAAC,CAAA;AAEH,QAAA,OAAA,CAAQ,OAAA,CAAQ,2BAA2B,KAAA,CAAM,KAAA,CAAM,aAAa,WAAW,CAAC,CAAC,CAAA,CAAE,CAAA;AAGnF,QAAA,OAAA,CAAQ,MAAM,iBAAiB,CAAA;AAC/B,QAAA,MAAM,EAAE,QAAQ,KAAA,EAAM,GAAI,aAAa,YAAA,CAAa,UAAU,GAAiB,SAAS,CAAA;AACxF,QAAA,OAAA,CAAQ,OAAA,CAAQ,mBAAmB,KAAA,CAAM,IAAA,CAAK,aAAa,UAAU,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AAG1E,QAAA,OAAA,CAAQ,MAAM,oBAAoB,CAAA;AAClC,QAAA,MAAM,KAAA,GAAQ,aAAa,aAAA,CAAc;AAAA,UACvC,MAAA;AAAA,UACA;AAAA,SACD,CAAA;AACD,QAAA,OAAA,CAAQ,QAAQ,mBAAmB,CAAA;AAGnC,QAAA,IAAI,WAAA;AACJ,QAAA,IAAI,YAAA,CAAa,WAAW,CAAA,IAAK,YAAA,CAAa,kBAAkB,CAAA,EAAG;AACjE,UAAA,MAAM,SAAA,GAAY,aAAa,WAAW,CAAA;AAC1C,UAAA,MAAM,SAAA,GAAY,MAAA,CAAO,UAAA,CAAW,YAAA,CAAa,kBAAkB,CAAC,CAAA;AAEpE,UAAA,IAAI,cAAA;AACJ,UAAA,QAAQ,SAAA;AAAW,YACjB,KAAK,MAAA,EAAQ;AACX,cAAA,cAAA,GAAiB,kBAAkB,SAAS,CAAA;AAC5C,cAAA;AAAA,YACF;AAAA,YAEA,KAAK,UAAA,EAAY;AACf,cAAA,cAAA,GAAiB,iBAAiB,SAAS,CAAA;AAC3C,cAAA;AAAA,YACF;AAAA,YAEA,SAAS;AACP,cAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kCAAA,EAAqC,SAAS,CAAA,CAAE,CAAA;AAAA,YAClE;AAAA;AAGF,UAAA,WAAA,GAAc,IAAI,eAAA,CAAgB;AAAA,YAChC,cAAA;AAAA,YACA,qBAAA,EAAuB;AAAA,WACxB,CAAA;AAAA,QACH;AAGA,QAAA,IAAI,cAAA;AACJ,QAAA,IAAI,YAAA,CAAa,aAAa,CAAA,EAAG;AAC/B,UAAA,MAAM,QAAA,GAAW,UAAA,CAAW,YAAA,CAAa,aAAa,CAAC,CAAA;AACvD,UAAA,OAAA,CAAQ,KAAA,CAAM,kBAAkB,KAAA,CAAM,MAAA,CAAO,aAAa,aAAa,CAAC,CAAC,CAAA,CAAE,CAAA;AAC3E,UAAA,cAAA,GAAiB,MAAM,UAAA,CAAW,KAAA,EAAO,QAAA,EAAU,EAAE,aAAa,CAAA;AAClE,UAAA,OAAA,CAAQ,QAAQ,CAAA,eAAA,EAAkB,KAAA,CAAM,KAAA,CAAM,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,QACjE,CAAA,MAAO;AACL,UAAA,MAAM,UAAA,GAAa,UAAA,CAAW,YAAA,CAAa,eAAe,CAAC,CAAA;AAC3D,UAAA,OAAA,CAAQ,KAAA,CAAM,oBAAoB,KAAA,CAAM,MAAA,CAAO,aAAa,eAAe,CAAC,CAAC,CAAA,CAAE,CAAA;AAC/E,UAAA,cAAA,GAAiB,MAAM,YAAA,CAAa,KAAA,EAAO,UAAA,EAAY,EAAE,aAAa,CAAA;AACtE,UAAA,OAAA,CAAQ,QAAQ,CAAA,iBAAA,EAAoB,KAAA,CAAM,KAAA,CAAM,cAAc,CAAC,CAAA,CAAE,CAAA;AAAA,QACnE;AAEA,QAAA,IAAA,CAAK,IAAI,EAAE,CAAA;AAGX,QAAA,OAAA,CAAQ,MAAM,qBAAqB,CAAA;AACnC,QAAA,MAAM,GAAA,GAAM,IAAI,IAAA,CAAK,EAAE,WAAW,cAAA,CAAe,SAAA,EAAW,QAAQ,CAAA;AAEpE,QAAA,MAAM,GAAA,CAAI,SAAA;AAAA,UACR;AAAA,YACE,aAAA,EAAe,cAAA;AAAA,YACf,YAAY,MAAA,CAAO,QAAA,CAAS,YAAA,CAAa,aAAa,GAAG,EAAE,CAAA;AAAA,YAC3D,WAAW,YAAA,CAAa;AAAA,WAC1B;AAAA,UACA;AAAA,YACE,IAAA,EAAM;AAAA,cACJ;AAAA,gBACE,IAAA,EAAM,UAAA;AAAA,gBACN,KAAA,EAAO;AAAA,eACT;AAAA,cACA,GAAI,OAAA,CAAQ,GAAA,CAAI,UAAA,GACZ;AAAA,gBACE;AAAA,kBACE,IAAA,EAAM,UAAA;AAAA,kBACN,KAAA,EAAO,QAAQ,GAAA,CAAI;AAAA;AACrB,kBAEF;AAAC;AACP;AACF,SACF;AAEA,QAAA,OAAA,CAAQ,QAAQ,oBAAoB,CAAA;AAGpC,QAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM;AAAA,UACtB,IAAA,EAAM,CAAC,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,UAC5D,KAAA,EAAO;AAAA,YACL,MAAM;AAAC;AACT,SACD,CAAA;AAED,QAAA,KAAA,CAAM,IAAA;AAAA,UACJ,CAAC,OAAA,EAAS,KAAA,CAAM,KAAA,CAAM,cAAc,CAAC,CAAA;AAAA,UACrC,CAAC,WAAA,EAAa,KAAA,CAAM,OAAO,YAAA,CAAa,WAAW,CAAC,CAAC,CAAA;AAAA,UACrD,CAAC,WAAA,EAAa,KAAA,CAAM,MAAA,CAAO,YAAA,CAAa,SAAS,CAAC,CAAA;AAAA,UAClD,CAAC,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,cAAA,CAAe,SAAS,CAAC,CAAA;AAAA,UAC5C,CAAC,cAAA,EAAgB,KAAA,CAAM,IAAA,CAAK,WAAW,CAAC,CAAA;AAAA,UACxC,CAAC,aAAA,EAAe,KAAA,CAAM,KAAK,YAAA,CAAa,aAAa,CAAC,CAAC;AAAA,SACzD;AAEA,QAAA,MAAM,cAAA,GAAiB,KAAA;AAAA,UACrB,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,0BAA0B,CAAC;;AAAA,EAAO,KAAA,CAAM,UAAU,CAAA,CAAA;AAAA,UACtE;AAAA,YACE,WAAA,EAAa,OAAA;AAAA,YACb,WAAA,EAAa,OAAA;AAAA,YACb,OAAA,EAAS,CAAA;AAAA,YACT,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,oBAAoB,CAAA;AAAA,YACtC,cAAA,EAAgB;AAAA;AAClB,SACF;AAEA,QAAA,IAAA,CAAK,GAAA,CAAI;AAAA,EAAK,cAAc,CAAA,CAAE,CAAA;AAAA,MAChC,SAAS,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,KAAA;AAAA,UACH,KAAA,CAAM,GAAA,CAAI,CAAA,mBAAA,EAAsB,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE;AAAA,SAC1F;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AAEd,MAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,iBAAA,EAAmB;AAC9D,QAAA,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,6BAA6B,CAAC,CAAA;AACpD,QAAA,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,MACb;AAEA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAgBrC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,OAAgB,IAAI,KAAK;IAEzB,OAAgB,WAAW,SAA4C;IAEvE,OAAgB,QAAQ,WASvB;IAED,OAAgB,KAAK,sBAAkC;IAE1C,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoQlC"}
|
|
@@ -4,6 +4,5 @@ export declare function uploadFile(turbo: TurboAuthenticatedClient, filePath: st
|
|
|
4
4
|
}): Promise<string>;
|
|
5
5
|
export declare function uploadFolder(turbo: TurboAuthenticatedClient, folderPath: string, options?: {
|
|
6
6
|
fundingMode?: OnDemandFunding;
|
|
7
|
-
throwOnFailure?: boolean;
|
|
8
7
|
}): Promise<string>;
|
|
9
8
|
//# sourceMappingURL=uploader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../../../src/utils/uploader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,KAAK,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AAGnF,wBAAsB,UAAU,CAC9B,KAAK,EAAE,wBAAwB,EAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IACR,WAAW,CAAC,EAAE,eAAe,CAAA;CAC9B,GACA,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../../../src/utils/uploader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,KAAK,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AAGnF,wBAAsB,UAAU,CAC9B,KAAK,EAAE,wBAAwB,EAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IACR,WAAW,CAAC,EAAE,eAAe,CAAA;CAC9B,GACA,OAAO,CAAC,MAAM,CAAC,CAyBjB;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,wBAAwB,EAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IACR,WAAW,CAAC,EAAE,eAAe,CAAA;CAC9B,GACA,OAAO,CAAC,MAAM,CAAC,CAsDjB"}
|
|
@@ -91,11 +91,10 @@ export declare function mockUploadSuccess(txId: string): import("msw").HttpHandl
|
|
|
91
91
|
export declare function mockUploadFailure(status?: number, message?: string): import("msw").HttpHandler;
|
|
92
92
|
/**
|
|
93
93
|
* Helper to create insufficient balance scenario
|
|
94
|
-
* @param
|
|
95
|
-
* @
|
|
96
|
-
* @returns Array of MSW handlers for insufficient balance scenario
|
|
94
|
+
* @param winc - Balance amount in winc
|
|
95
|
+
* @returns MSW handler for insufficient balance
|
|
97
96
|
*/
|
|
98
|
-
export declare function mockInsufficientBalance(
|
|
97
|
+
export declare function mockInsufficientBalance(winc?: string): import("msw").HttpHandler;
|
|
99
98
|
/**
|
|
100
99
|
* Helper to create on-demand funding success
|
|
101
100
|
* @param winc - Amount topped up in winc
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turbo-handlers.d.ts","sourceRoot":"","sources":["../../../tests/mocks/turbo-handlers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,IAAI,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAClF,OAAO,KAAK,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAEhF;;GAEG;AACH,KAAK,YAAY,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,CAAA;AAC/D,KAAK,eAAe,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,CAAA;AACtE,KAAK,cAAc,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,CAAA;AACpE,KAAK,iBAAiB,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,CAAA;AAE1E;;;GAGG;AACH,eAAO,MAAM,aAAa;wCAEmB,eAAe;sCAOrB,cAAc;qDAShD,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAoEkD,YAAY;CAWnF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,6BAgH/B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,6BAsChC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,6BA+LtB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,6BAAmE,CAAA;AAE7F;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,6BAI7C;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,SAAM,EAAE,OAAO,SAAkB,6BAIxE;AAED
|
|
1
|
+
{"version":3,"file":"turbo-handlers.d.ts","sourceRoot":"","sources":["../../../tests/mocks/turbo-handlers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,IAAI,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAClF,OAAO,KAAK,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAEhF;;GAEG;AACH,KAAK,YAAY,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,CAAA;AAC/D,KAAK,eAAe,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,CAAA;AACtE,KAAK,cAAc,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,CAAA;AACpE,KAAK,iBAAiB,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,CAAA;AAE1E;;;GAGG;AACH,eAAO,MAAM,aAAa;wCAEmB,eAAe;sCAOrB,cAAc;qDAShD,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAoEkD,YAAY;CAWnF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,6BAgH/B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,6BAsChC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,6BA+LtB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,6BAAmE,CAAA;AAE7F;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,6BAI7C;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,SAAM,EAAE,OAAO,SAAkB,6BAIxE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,SAAQ,6BAInD;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,SAAkB,6BAIhE"}
|
package/dist/utils/uploader.js
CHANGED
|
@@ -23,9 +23,6 @@ async function uploadFile(turbo, filePath, options) {
|
|
|
23
23
|
file: filePath,
|
|
24
24
|
...options?.fundingMode && { fundingMode: options.fundingMode }
|
|
25
25
|
});
|
|
26
|
-
if (!uploadResult?.id) {
|
|
27
|
-
throw new Error("Failed to upload file: upload result missing transaction ID");
|
|
28
|
-
}
|
|
29
26
|
return uploadResult.id;
|
|
30
27
|
}
|
|
31
28
|
async function uploadFolder(turbo, folderPath, options) {
|
|
@@ -43,10 +40,7 @@ async function uploadFolder(turbo, folderPath, options) {
|
|
|
43
40
|
]
|
|
44
41
|
},
|
|
45
42
|
folderPath,
|
|
46
|
-
...options?.fundingMode && {
|
|
47
|
-
fundingMode: options.fundingMode,
|
|
48
|
-
throwOnFailure: options.throwOnFailure
|
|
49
|
-
}
|
|
43
|
+
...options?.fundingMode && { fundingMode: options.fundingMode }
|
|
50
44
|
});
|
|
51
45
|
let txOrManifestId = uploadResult.manifestResponse?.id;
|
|
52
46
|
const origPaths = uploadResult.manifest?.paths || {};
|
|
@@ -64,7 +58,7 @@ async function uploadFolder(turbo, folderPath, options) {
|
|
|
64
58
|
console.info("Replacing manifest to support directory indexes");
|
|
65
59
|
const newManifest = { ...uploadResult.manifest, paths: newPaths };
|
|
66
60
|
const buffer = Buffer.from(JSON.stringify(newManifest));
|
|
67
|
-
const
|
|
61
|
+
const { id } = await turbo.uploadFile({
|
|
68
62
|
dataItemOpts: {
|
|
69
63
|
tags: [{ name: "Content-Type", value: "application/x.arweave-manifest+json" }]
|
|
70
64
|
},
|
|
@@ -72,10 +66,7 @@ async function uploadFolder(turbo, folderPath, options) {
|
|
|
72
66
|
fileStreamFactory: () => Readable.from(buffer),
|
|
73
67
|
...options?.fundingMode && { fundingMode: options.fundingMode }
|
|
74
68
|
});
|
|
75
|
-
|
|
76
|
-
throw new Error("Failed to upload manifest: upload result missing transaction ID");
|
|
77
|
-
}
|
|
78
|
-
txOrManifestId = manifestUploadResult.id;
|
|
69
|
+
txOrManifestId = id;
|
|
79
70
|
}
|
|
80
71
|
if (!txOrManifestId) {
|
|
81
72
|
throw new Error("Failed to upload folder");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploader.js","sources":["../../src/utils/uploader.ts"],"sourcesContent":["import { Readable } from 'node:stream'\n\nimport { OnDemandFunding, type TurboAuthenticatedClient } from '@ardrive/turbo-sdk'\nimport * as mime from 'mime-types'\n\nexport async function uploadFile(\n turbo: TurboAuthenticatedClient,\n filePath: string,\n options?: {\n fundingMode?: OnDemandFunding\n },\n): Promise<string> {\n const mimeType = mime.lookup(filePath) || 'application/octet-stream'\n\n const uploadResult = await turbo.uploadFile({\n dataItemOpts: {\n tags: [\n {\n name: 'App-Name',\n value: 'Permaweb-Deploy',\n },\n {\n name: 'anchor',\n value: new Date().toISOString(),\n },\n {\n name: 'Content-Type',\n value: mimeType,\n },\n ],\n },\n file: filePath,\n ...(options?.fundingMode && { fundingMode: options.fundingMode }),\n })\n\n
|
|
1
|
+
{"version":3,"file":"uploader.js","sources":["../../src/utils/uploader.ts"],"sourcesContent":["import { Readable } from 'node:stream'\n\nimport { OnDemandFunding, type TurboAuthenticatedClient } from '@ardrive/turbo-sdk'\nimport * as mime from 'mime-types'\n\nexport async function uploadFile(\n turbo: TurboAuthenticatedClient,\n filePath: string,\n options?: {\n fundingMode?: OnDemandFunding\n },\n): Promise<string> {\n const mimeType = mime.lookup(filePath) || 'application/octet-stream'\n\n const uploadResult = await turbo.uploadFile({\n dataItemOpts: {\n tags: [\n {\n name: 'App-Name',\n value: 'Permaweb-Deploy',\n },\n {\n name: 'anchor',\n value: new Date().toISOString(),\n },\n {\n name: 'Content-Type',\n value: mimeType,\n },\n ],\n },\n file: filePath,\n ...(options?.fundingMode && { fundingMode: options.fundingMode }),\n })\n\n return uploadResult.id\n}\n\nexport async function uploadFolder(\n turbo: TurboAuthenticatedClient,\n folderPath: string,\n options?: {\n fundingMode?: OnDemandFunding\n },\n): Promise<string> {\n const uploadResult = await turbo.uploadFolder({\n dataItemOpts: {\n tags: [\n {\n name: 'App-Name',\n value: 'Permaweb-Deploy',\n },\n {\n name: 'anchor',\n value: new Date().toISOString(),\n },\n ],\n },\n folderPath,\n ...(options?.fundingMode && { fundingMode: options.fundingMode }),\n })\n\n let txOrManifestId = uploadResult.manifestResponse?.id\n\n // Make default folder paths work by adding extra path entries\n const origPaths = uploadResult.manifest?.paths || {}\n const newPaths: Record<string, { id: string }> = {}\n let replaceManifest = false\n\n for (const [key, value] of Object.entries(origPaths)) {\n newPaths[key] = value\n if (key.endsWith('/index.html')) {\n const newKey = key.replace(/\\/index\\.html$/, '')\n newPaths[newKey] = value\n replaceManifest = true\n }\n }\n\n if (replaceManifest && uploadResult.manifest) {\n console.info('Replacing manifest to support directory indexes')\n const newManifest = { ...uploadResult.manifest, paths: newPaths }\n const buffer = Buffer.from(JSON.stringify(newManifest))\n const { id } = await turbo.uploadFile({\n dataItemOpts: {\n tags: [{ name: 'Content-Type', value: 'application/x.arweave-manifest+json' }],\n },\n fileSizeFactory: () => buffer.length,\n fileStreamFactory: () => Readable.from(buffer),\n ...(options?.fundingMode && { fundingMode: options.fundingMode }),\n })\n txOrManifestId = id\n }\n\n if (!txOrManifestId) {\n throw new Error('Failed to upload folder')\n }\n\n return txOrManifestId\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "permaweb-deploy",
|
|
3
|
-
"version": "0.0.0-alpha-
|
|
3
|
+
"version": "0.0.0-alpha-20251211195317",
|
|
4
4
|
"description": "Permaweb App Deployment Package",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"oclif.manifest.json"
|
|
27
27
|
],
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@ar.io/sdk": "^3.
|
|
30
|
-
"@ardrive/turbo-sdk": "^1.
|
|
29
|
+
"@ar.io/sdk": "^3.22.1",
|
|
30
|
+
"@ardrive/turbo-sdk": "^1.39.1",
|
|
31
31
|
"@inquirer/prompts": "^7.2.0",
|
|
32
32
|
"@oclif/core": "^4.0.30",
|
|
33
33
|
"@permaweb/aoconnect": "^0.0.85",
|