permaweb-deploy 3.2.0 → 3.4.0

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.
@@ -0,0 +1,122 @@
1
+ import fs from 'node:fs';
2
+ import { Command } from '@oclif/core';
3
+ import boxen from 'boxen';
4
+ import chalk from 'chalk';
5
+ import Table from 'cli-table3';
6
+ import { uploadFlagConfigs } from '../constants/flags.js';
7
+ import { getWalletConfig } from '../prompts/wallet.js';
8
+ import { extractFlags, resolveConfig } from '../utils/config-resolver.js';
9
+ import { expandPath } from '../utils/path.js';
10
+ import { runUploadWorkflow } from '../workflows/upload-workflow.js';
11
+
12
+ class Upload extends Command {
13
+ static args = {};
14
+ static description = "Upload a file or folder to Arweave via Turbo without updating ArNS";
15
+ static examples = [
16
+ "<%= config.bin %> upload --wallet ./wallet.json",
17
+ "<%= config.bin %> upload --wallet ./wallet.json --deploy-folder ./dist",
18
+ "<%= config.bin %> upload --wallet ./wallet.json --deploy-file ./dist/index.html",
19
+ '<%= config.bin %> upload --private-key "$(cat wallet.json)" --on-demand ario --max-token-amount 1.5',
20
+ "<%= config.bin %> upload --wallet ./wallet.json --uploader https://up.arweave.net"
21
+ ];
22
+ static flags = extractFlags(uploadFlagConfigs);
23
+ async run() {
24
+ try {
25
+ const { flags } = await this.parse(Upload);
26
+ const interactive = !flags.wallet && !flags["private-key"] && !process.env.DEPLOY_KEY?.trim();
27
+ if (interactive) {
28
+ this.log(chalk.cyan.bold("\nInteractive upload mode\n"));
29
+ }
30
+ const baseConfig = await resolveConfig(uploadFlagConfigs, flags, {
31
+ interactive
32
+ });
33
+ let walletConfig = {
34
+ privateKey: baseConfig["private-key"],
35
+ wallet: baseConfig.wallet
36
+ };
37
+ if (interactive && !baseConfig.wallet && !baseConfig["private-key"]) {
38
+ const config = await getWalletConfig();
39
+ walletConfig = {
40
+ privateKey: config.privateKey,
41
+ wallet: config.wallet
42
+ };
43
+ }
44
+ const effectiveCacheMaxEntries = baseConfig["no-dedupe"] ? 0 : baseConfig["dedupe-cache-max-entries"];
45
+ const uploadCfg = {
46
+ "dedupe-cache-max-entries": effectiveCacheMaxEntries,
47
+ "deploy-file": baseConfig["deploy-file"],
48
+ "deploy-folder": baseConfig["deploy-folder"],
49
+ "max-token-amount": baseConfig["max-token-amount"],
50
+ "on-demand": baseConfig["on-demand"],
51
+ "sig-type": baseConfig["sig-type"],
52
+ uploader: baseConfig.uploader
53
+ };
54
+ if (interactive) {
55
+ this.log("");
56
+ }
57
+ const { privateKey, wallet } = walletConfig;
58
+ const sigType = uploadCfg["sig-type"];
59
+ let deployKey;
60
+ if (wallet) {
61
+ const walletPath = expandPath(wallet);
62
+ if (!fs.existsSync(walletPath)) {
63
+ this.error(`Wallet file [${wallet}] does not exist`);
64
+ }
65
+ const walletContent = fs.readFileSync(walletPath, "utf8");
66
+ deployKey = sigType === "arweave" ? Buffer.from(walletContent).toString("base64") : walletContent.trim();
67
+ } else if (privateKey) {
68
+ deployKey = sigType === "arweave" ? Buffer.from(privateKey).toString("base64") : privateKey.trim();
69
+ } else {
70
+ deployKey = process.env.DEPLOY_KEY || "";
71
+ if (!deployKey) {
72
+ this.error(
73
+ "DEPLOY_KEY environment variable not set. Use --wallet, --private-key, or set DEPLOY_KEY"
74
+ );
75
+ }
76
+ }
77
+ this.log(chalk.cyan.bold("\nStarting upload...\n"));
78
+ try {
79
+ const txOrManifestId = await runUploadWorkflow(deployKey, uploadCfg, {
80
+ error: (msg) => this.error(msg)
81
+ });
82
+ this.log("");
83
+ const table = new Table({
84
+ head: [chalk.cyan.bold("Property"), chalk.cyan.bold("Value")],
85
+ style: { head: [] }
86
+ });
87
+ table.push(["Tx ID", chalk.green(txOrManifestId)]);
88
+ if (uploadCfg.uploader) {
89
+ table.push(["Bundler service", chalk.cyan(uploadCfg.uploader)]);
90
+ }
91
+ table.push(["Arweave URL", chalk.yellow(`https://arweave.net/${txOrManifestId}`)]);
92
+ const successMessage = boxen(
93
+ `${chalk.green.bold("Upload successful!")}
94
+
95
+ ${table.toString()}`,
96
+ {
97
+ borderColor: "green",
98
+ borderStyle: "round",
99
+ padding: 1,
100
+ title: chalk.bold("Permaweb Deploy"),
101
+ titleAlignment: "center"
102
+ }
103
+ );
104
+ this.log(`
105
+ ${successMessage}`);
106
+ } catch (error) {
107
+ this.error(
108
+ chalk.red(`Upload failed: ${error instanceof Error ? error.message : String(error)}`)
109
+ );
110
+ }
111
+ } catch (error) {
112
+ if (error instanceof Error && error.name === "ExitPromptError") {
113
+ this.log(chalk.yellow("\n\nUpload cancelled"));
114
+ this.exit(0);
115
+ }
116
+ throw error;
117
+ }
118
+ }
119
+ }
120
+
121
+ export { Upload as default };
122
+ //# sourceMappingURL=upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.js","sources":["../../src/commands/upload.ts"],"sourcesContent":["import fs from 'node:fs'\n\nimport { Command } from '@oclif/core'\nimport boxen from 'boxen'\nimport chalk from 'chalk'\n// eslint-disable-next-line import/no-named-as-default\nimport Table from 'cli-table3'\n\nimport { type UploadConfig, uploadFlagConfigs } from '../constants/flags.js'\nimport { getWalletConfig } from '../prompts/wallet.js'\nimport { extractFlags, resolveConfig } from '../utils/config-resolver.js'\nimport { expandPath } from '../utils/path.js'\nimport { runUploadWorkflow } from '../workflows/upload-workflow.js'\n\nexport default class Upload extends Command {\n static override args = {}\n\n static override description = 'Upload a file or folder to Arweave via Turbo without updating ArNS'\n\n static override examples = [\n '<%= config.bin %> upload --wallet ./wallet.json',\n '<%= config.bin %> upload --wallet ./wallet.json --deploy-folder ./dist',\n '<%= config.bin %> upload --wallet ./wallet.json --deploy-file ./dist/index.html',\n '<%= config.bin %> upload --private-key \"$(cat wallet.json)\" --on-demand ario --max-token-amount 1.5',\n '<%= config.bin %> upload --wallet ./wallet.json --uploader https://up.arweave.net',\n ]\n\n static override flags = extractFlags(uploadFlagConfigs)\n\n public async run(): Promise<void> {\n try {\n const { flags } = await this.parse(Upload)\n\n const interactive = !flags.wallet && !flags['private-key'] && !process.env.DEPLOY_KEY?.trim()\n\n if (interactive) {\n this.log(chalk.cyan.bold('\\nInteractive upload mode\\n'))\n }\n\n const baseConfig = (await resolveConfig<typeof uploadFlagConfigs>(uploadFlagConfigs, flags, {\n interactive,\n })) as UploadConfig\n\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 const effectiveCacheMaxEntries = baseConfig['no-dedupe']\n ? 0\n : baseConfig['dedupe-cache-max-entries']\n\n const uploadCfg = {\n 'dedupe-cache-max-entries': effectiveCacheMaxEntries,\n 'deploy-file': baseConfig['deploy-file'],\n 'deploy-folder': baseConfig['deploy-folder'],\n 'max-token-amount': baseConfig['max-token-amount'],\n 'on-demand': baseConfig['on-demand'],\n 'sig-type': baseConfig['sig-type'],\n uploader: baseConfig.uploader,\n }\n\n if (interactive) {\n this.log('')\n }\n\n const { privateKey, wallet } = walletConfig\n const sigType = uploadCfg['sig-type']\n\n let deployKey: string\n if (wallet) {\n const walletPath = expandPath(wallet)\n if (!fs.existsSync(walletPath)) {\n this.error(`Wallet file [${wallet}] does not exist`)\n }\n\n const walletContent = fs.readFileSync(walletPath, 'utf8')\n deployKey =\n sigType === 'arweave'\n ? Buffer.from(walletContent).toString('base64')\n : walletContent.trim()\n } else if (privateKey) {\n deployKey =\n sigType === 'arweave' ? Buffer.from(privateKey).toString('base64') : privateKey.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 this.log(chalk.cyan.bold('\\nStarting upload...\\n'))\n\n try {\n const txOrManifestId = await runUploadWorkflow(deployKey, uploadCfg, {\n error: (msg) => this.error(msg),\n })\n\n this.log('')\n\n const table = new Table({\n head: [chalk.cyan.bold('Property'), chalk.cyan.bold('Value')],\n style: { head: [] },\n })\n\n table.push(['Tx ID', chalk.green(txOrManifestId)])\n\n if (uploadCfg.uploader) {\n table.push(['Bundler service', chalk.cyan(uploadCfg.uploader)])\n }\n\n table.push(['Arweave URL', chalk.yellow(`https://arweave.net/${txOrManifestId}`)])\n\n const successMessage = boxen(\n `${chalk.green.bold('Upload 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(`Upload failed: ${error instanceof Error ? error.message : String(error)}`),\n )\n }\n } catch (error) {\n if (error instanceof Error && error.name === 'ExitPromptError') {\n this.log(chalk.yellow('\\n\\nUpload cancelled'))\n this.exit(0)\n }\n\n throw error\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import { promptDeployTarget } from '../prompts/deployment.js';
5
5
  import { promptSignerType } from '../prompts/wallet.js';
6
6
  import { createFlagConfig } from '../utils/config-resolver.js';
7
7
  import { TTL_MIN, TTL_MAX } from '../utils/constants.js';
8
- import { validateFileExists, validateUndername, validateTtl, validateFolderExists, validateArioProcess, resolveArioProcess } from '../utils/validators.js';
8
+ import { validateFileExists, validateUndername, validateFolderExists, resolveArioProcess, validateTtl, validateArioProcess } from '../utils/validators.js';
9
9
  import { D as DEFAULT_CACHE_MAX_ENTRIES } from '../chunks/cache-BssFyqB-.js';
10
10
 
11
11
  const globalFlags = {
@@ -148,6 +148,12 @@ const globalFlags = {
148
148
  required: false
149
149
  })
150
150
  }),
151
+ uploader: createFlagConfig({
152
+ flag: Flags.string({
153
+ description: "Base URL of the Turbo bundler service to use (omit for ArDrive production: https://upload.ardrive.io). Examples: https://up.arweave.net (Arweave), https://upload.ardrive.dev (dev). The host must implement the Turbo bundler protocol; path/query are not required on the URL.",
154
+ required: false
155
+ })
156
+ }),
151
157
  wallet: createFlagConfig({
152
158
  flag: Flags.string({
153
159
  char: "w",
@@ -177,6 +183,7 @@ const deployFlags = {
177
183
  "sig-type": globalFlags.sigType.flag,
178
184
  "ttl-seconds": globalFlags.ttlSeconds.flag,
179
185
  undername: globalFlags.undername.flag,
186
+ uploader: globalFlags.uploader.flag,
180
187
  wallet: globalFlags.wallet.flag
181
188
  };
182
189
  const arnsFlags = {
@@ -203,8 +210,21 @@ const deployFlagConfigs = {
203
210
  "sig-type": globalFlags.sigType,
204
211
  "ttl-seconds": globalFlags.ttlSeconds,
205
212
  undername: globalFlags.undername,
213
+ uploader: globalFlags.uploader,
214
+ wallet: globalFlags.wallet
215
+ };
216
+ const uploadFlagConfigs = {
217
+ "dedupe-cache-max-entries": globalFlags.dedupeCacheMaxEntries,
218
+ "deploy-file": globalFlags.deployFile,
219
+ "deploy-folder": globalFlags.deployFolder,
220
+ "max-token-amount": globalFlags.maxTokenAmount,
221
+ "no-dedupe": globalFlags.noDedupe,
222
+ "on-demand": globalFlags.onDemand,
223
+ "private-key": globalFlags.privateKey,
224
+ "sig-type": globalFlags.sigType,
225
+ uploader: globalFlags.uploader,
206
226
  wallet: globalFlags.wallet
207
227
  };
208
228
 
209
- export { arnsFlags, deployFlagConfigs, deployFlags, globalFlags, walletFlags };
229
+ export { arnsFlags, deployFlagConfigs, deployFlags, globalFlags, uploadFlagConfigs, walletFlags };
210
230
  //# sourceMappingURL=flags.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"flags.js","sources":["../../src/constants/flags.ts"],"sourcesContent":["import { ARIO_MAINNET_PROCESS_ID } from '@ar.io/sdk'\nimport { Flags } from '@oclif/core'\n\nimport { promptArioProcess, promptArnsName } from '../prompts/arns.js'\nimport { promptDeployTarget } from '../prompts/deployment.js'\nimport { promptSignerType } from '../prompts/wallet.js'\nimport { createFlagConfig } from '../utils/config-resolver.js'\nimport { TTL_MAX, TTL_MIN } from '../utils/constants.js'\nimport {\n resolveArioProcess,\n validateArioProcess,\n validateFileExists,\n validateFolderExists,\n validateTtl,\n validateUndername,\n} from '../utils/validators.js'\nimport { DEFAULT_CACHE_MAX_ENTRIES } from './cache.js'\n\n/**\n * Global flag definitions - single source of truth for all flags\n * Each flag includes its oclif definition and optional prompt function\n */\nexport const globalFlags = {\n arioProcess: createFlagConfig<string>({\n flag: Flags.string({\n char: 'p',\n default: ARIO_MAINNET_PROCESS_ID,\n description: 'The ARIO process to use (mainnet, testnet, or process ID)',\n async parse(input) {\n const validation = validateArioProcess(input)\n if (validation !== true) {\n throw new Error(validation)\n }\n\n return resolveArioProcess(input)\n },\n required: false,\n }),\n prompt: promptArioProcess,\n }),\n arnsName: createFlagConfig<string>({\n flag: Flags.string({\n char: 'n',\n description: 'The ArNS name to deploy to',\n required: false,\n }),\n prompt: promptArnsName,\n triggersInteractive: true,\n }),\n dedupeCacheMaxEntries: createFlagConfig<number>({\n flag: Flags.integer({\n default: DEFAULT_CACHE_MAX_ENTRIES,\n description: 'Maximum number of entries to keep in the dedupe cache (LRU)',\n min: 0,\n required: false,\n }),\n }),\n deployFile: createFlagConfig<string | undefined>({\n flag: Flags.string({\n char: 'f',\n description: 'File to deploy (overrides deploy-folder)',\n async parse(input) {\n const validation = validateFileExists(input)\n if (validation !== true) {\n throw new Error(validation)\n }\n\n return input\n },\n required: false,\n }),\n async prompt() {\n const target = await promptDeployTarget()\n return target.type === 'file' ? target.path : undefined\n },\n }),\n deployFolder: createFlagConfig<string>({\n flag: Flags.string({\n char: 'd',\n default: './dist',\n description: 'Folder to deploy',\n async parse(input) {\n const validation = validateFolderExists(input)\n if (validation !== true) {\n throw new Error(validation)\n }\n\n return input\n },\n required: false,\n }),\n async prompt() {\n const target = await promptDeployTarget()\n return target.type === 'folder' ? target.path : './dist'\n },\n }),\n // Advanced payment settings\n maxTokenAmount: createFlagConfig<string | undefined>({\n flag: Flags.string({\n description: 'Maximum token amount for on-demand payment',\n required: false,\n }),\n }),\n noDedupe: createFlagConfig<boolean>({\n flag: Flags.boolean({\n default: false,\n description: 'Disable deduplication (do not cache or reuse previous uploads)',\n required: false,\n }),\n }),\n onDemand: createFlagConfig<string | undefined>({\n flag: Flags.string({\n description: 'Enable on-demand payment with specified token (ario or base-eth)',\n options: ['ario', 'base-eth'],\n required: false,\n }),\n }),\n privateKey: createFlagConfig<string | undefined>({\n flag: Flags.string({\n char: 'k',\n description: 'Private key or JWK JSON string (alternative to --wallet)',\n exclusive: ['wallet'],\n required: false,\n }),\n }),\n sigType: createFlagConfig<string>({\n flag: Flags.string({\n char: 's',\n default: 'arweave',\n description: 'Signer type for deployment',\n options: ['arweave', 'ethereum', 'polygon', 'kyve'],\n required: false,\n }),\n prompt: promptSignerType,\n }),\n ttlSeconds: createFlagConfig<string>({\n flag: Flags.string({\n char: 't',\n default: '60',\n description: `ArNS TTL in seconds (${TTL_MIN}-${TTL_MAX})`,\n async parse(input) {\n const validation = validateTtl(input)\n if (validation !== true) {\n throw new Error(validation)\n }\n\n return input\n },\n required: false,\n }),\n }),\n undername: createFlagConfig<string>({\n flag: Flags.string({\n char: 'u',\n default: '@',\n description: 'ANT undername to update',\n async parse(input) {\n const validation = validateUndername(input)\n if (validation !== true) {\n throw new Error(validation)\n }\n\n return input\n },\n required: false,\n }),\n }),\n wallet: createFlagConfig<string | undefined>({\n flag: Flags.string({\n char: 'w',\n description: 'Path to wallet file (JWK for Arweave, private key for others)',\n exclusive: ['private-key'],\n async parse(input) {\n const validation = validateFileExists(input)\n if (validation !== true) {\n throw new Error(validation)\n }\n\n return input\n },\n required: false,\n }),\n }),\n}\n\n/**\n * Complete set of flags for the deploy command\n */\nexport const deployFlags = {\n 'ario-process': globalFlags.arioProcess.flag,\n 'arns-name': globalFlags.arnsName.flag,\n 'dedupe-cache-max-entries': globalFlags.dedupeCacheMaxEntries.flag,\n 'deploy-file': globalFlags.deployFile.flag,\n 'deploy-folder': globalFlags.deployFolder.flag,\n 'max-token-amount': globalFlags.maxTokenAmount.flag,\n 'no-dedupe': globalFlags.noDedupe.flag,\n 'on-demand': globalFlags.onDemand.flag,\n 'private-key': globalFlags.privateKey.flag,\n 'sig-type': globalFlags.sigType.flag,\n 'ttl-seconds': globalFlags.ttlSeconds.flag,\n undername: globalFlags.undername.flag,\n wallet: globalFlags.wallet.flag,\n}\n\n/**\n * ArNS-specific flags (subset of deploy flags)\n */\nexport const arnsFlags = {\n 'ario-process': globalFlags.arioProcess.flag,\n 'arns-name': globalFlags.arnsName.flag,\n 'ttl-seconds': globalFlags.ttlSeconds.flag,\n undername: globalFlags.undername.flag,\n}\n\n/**\n * Wallet/authentication flags (subset of deploy flags)\n */\nexport const walletFlags = {\n 'private-key': globalFlags.privateKey.flag,\n 'sig-type': globalFlags.sigType.flag,\n wallet: globalFlags.wallet.flag,\n}\n\n/**\n * Deploy command configuration type\n */\nexport interface DeployConfig {\n 'ario-process': string\n 'arns-name': string\n 'dedupe-cache-max-entries': number\n 'deploy-file'?: string\n 'deploy-folder': string\n 'max-token-amount'?: string\n 'no-dedupe': boolean\n 'on-demand'?: string\n 'private-key'?: string\n 'sig-type': string\n 'ttl-seconds': string\n undername: string\n wallet?: string\n}\n\n/**\n * Deploy command flag configurations\n * Maps kebab-case flag names to their camelCase globalFlags definitions\n */\nexport const deployFlagConfigs = {\n 'ario-process': globalFlags.arioProcess,\n 'arns-name': globalFlags.arnsName,\n 'dedupe-cache-max-entries': globalFlags.dedupeCacheMaxEntries,\n 'deploy-file': globalFlags.deployFile,\n 'deploy-folder': globalFlags.deployFolder,\n 'max-token-amount': globalFlags.maxTokenAmount,\n 'no-dedupe': globalFlags.noDedupe,\n 'on-demand': globalFlags.onDemand,\n 'private-key': globalFlags.privateKey,\n 'sig-type': globalFlags.sigType,\n 'ttl-seconds': globalFlags.ttlSeconds,\n undername: globalFlags.undername,\n wallet: globalFlags.wallet,\n} as const\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flags.js","sources":["../../src/constants/flags.ts"],"sourcesContent":["import { ARIO_MAINNET_PROCESS_ID } from '@ar.io/sdk'\nimport { Flags } from '@oclif/core'\n\nimport { promptArioProcess, promptArnsName } from '../prompts/arns.js'\nimport { promptDeployTarget } from '../prompts/deployment.js'\nimport { promptSignerType } from '../prompts/wallet.js'\nimport { createFlagConfig, type ResolvedConfig } from '../utils/config-resolver.js'\nimport { TTL_MAX, TTL_MIN } from '../utils/constants.js'\nimport {\n resolveArioProcess,\n validateArioProcess,\n validateFileExists,\n validateFolderExists,\n validateTtl,\n validateUndername,\n} from '../utils/validators.js'\nimport { DEFAULT_CACHE_MAX_ENTRIES } from './cache.js'\n\n/**\n * Global flag definitions - single source of truth for all flags\n * Each flag includes its oclif definition and optional prompt function\n */\nexport const globalFlags = {\n arioProcess: createFlagConfig<string>({\n flag: Flags.string({\n char: 'p',\n default: ARIO_MAINNET_PROCESS_ID,\n description: 'The ARIO process to use (mainnet, testnet, or process ID)',\n async parse(input) {\n const validation = validateArioProcess(input)\n if (validation !== true) {\n throw new Error(validation)\n }\n\n return resolveArioProcess(input)\n },\n required: false,\n }),\n prompt: promptArioProcess,\n }),\n arnsName: createFlagConfig<string>({\n flag: Flags.string({\n char: 'n',\n description: 'The ArNS name to deploy to',\n required: false,\n }),\n prompt: promptArnsName,\n triggersInteractive: true,\n }),\n dedupeCacheMaxEntries: createFlagConfig<number>({\n flag: Flags.integer({\n default: DEFAULT_CACHE_MAX_ENTRIES,\n description: 'Maximum number of entries to keep in the dedupe cache (LRU)',\n min: 0,\n required: false,\n }),\n }),\n deployFile: createFlagConfig<string | undefined>({\n flag: Flags.string({\n char: 'f',\n description: 'File to deploy (overrides deploy-folder)',\n async parse(input) {\n const validation = validateFileExists(input)\n if (validation !== true) {\n throw new Error(validation)\n }\n\n return input\n },\n required: false,\n }),\n async prompt() {\n const target = await promptDeployTarget()\n return target.type === 'file' ? target.path : undefined\n },\n }),\n deployFolder: createFlagConfig<string>({\n flag: Flags.string({\n char: 'd',\n default: './dist',\n description: 'Folder to deploy',\n async parse(input) {\n const validation = validateFolderExists(input)\n if (validation !== true) {\n throw new Error(validation)\n }\n\n return input\n },\n required: false,\n }),\n async prompt() {\n const target = await promptDeployTarget()\n return target.type === 'folder' ? target.path : './dist'\n },\n }),\n // Advanced payment settings\n maxTokenAmount: createFlagConfig<string | undefined>({\n flag: Flags.string({\n description: 'Maximum token amount for on-demand payment',\n required: false,\n }),\n }),\n noDedupe: createFlagConfig<boolean>({\n flag: Flags.boolean({\n default: false,\n description: 'Disable deduplication (do not cache or reuse previous uploads)',\n required: false,\n }),\n }),\n onDemand: createFlagConfig<string | undefined>({\n flag: Flags.string({\n description: 'Enable on-demand payment with specified token (ario or base-eth)',\n options: ['ario', 'base-eth'],\n required: false,\n }),\n }),\n privateKey: createFlagConfig<string | undefined>({\n flag: Flags.string({\n char: 'k',\n description: 'Private key or JWK JSON string (alternative to --wallet)',\n exclusive: ['wallet'],\n required: false,\n }),\n }),\n sigType: createFlagConfig<string>({\n flag: Flags.string({\n char: 's',\n default: 'arweave',\n description: 'Signer type for deployment',\n options: ['arweave', 'ethereum', 'polygon', 'kyve'],\n required: false,\n }),\n prompt: promptSignerType,\n }),\n ttlSeconds: createFlagConfig<string>({\n flag: Flags.string({\n char: 't',\n default: '60',\n description: `ArNS TTL in seconds (${TTL_MIN}-${TTL_MAX})`,\n async parse(input) {\n const validation = validateTtl(input)\n if (validation !== true) {\n throw new Error(validation)\n }\n\n return input\n },\n required: false,\n }),\n }),\n undername: createFlagConfig<string>({\n flag: Flags.string({\n char: 'u',\n default: '@',\n description: 'ANT undername to update',\n async parse(input) {\n const validation = validateUndername(input)\n if (validation !== true) {\n throw new Error(validation)\n }\n\n return input\n },\n required: false,\n }),\n }),\n uploader: createFlagConfig<string | undefined>({\n flag: Flags.string({\n description:\n 'Base URL of the Turbo bundler service to use (omit for ArDrive production: https://upload.ardrive.io). Examples: https://up.arweave.net (Arweave), https://upload.ardrive.dev (dev). The host must implement the Turbo bundler protocol; path/query are not required on the URL.',\n required: false,\n }),\n }),\n wallet: createFlagConfig<string | undefined>({\n flag: Flags.string({\n char: 'w',\n description: 'Path to wallet file (JWK for Arweave, private key for others)',\n exclusive: ['private-key'],\n async parse(input) {\n const validation = validateFileExists(input)\n if (validation !== true) {\n throw new Error(validation)\n }\n\n return input\n },\n required: false,\n }),\n }),\n}\n\n/**\n * Complete set of flags for the deploy command\n */\nexport const deployFlags = {\n 'ario-process': globalFlags.arioProcess.flag,\n 'arns-name': globalFlags.arnsName.flag,\n 'dedupe-cache-max-entries': globalFlags.dedupeCacheMaxEntries.flag,\n 'deploy-file': globalFlags.deployFile.flag,\n 'deploy-folder': globalFlags.deployFolder.flag,\n 'max-token-amount': globalFlags.maxTokenAmount.flag,\n 'no-dedupe': globalFlags.noDedupe.flag,\n 'on-demand': globalFlags.onDemand.flag,\n 'private-key': globalFlags.privateKey.flag,\n 'sig-type': globalFlags.sigType.flag,\n 'ttl-seconds': globalFlags.ttlSeconds.flag,\n undername: globalFlags.undername.flag,\n uploader: globalFlags.uploader.flag,\n wallet: globalFlags.wallet.flag,\n}\n\n/**\n * ArNS-specific flags (subset of deploy flags)\n */\nexport const arnsFlags = {\n 'ario-process': globalFlags.arioProcess.flag,\n 'arns-name': globalFlags.arnsName.flag,\n 'ttl-seconds': globalFlags.ttlSeconds.flag,\n undername: globalFlags.undername.flag,\n}\n\n/**\n * Wallet/authentication flags (subset of deploy flags)\n */\nexport const walletFlags = {\n 'private-key': globalFlags.privateKey.flag,\n 'sig-type': globalFlags.sigType.flag,\n wallet: globalFlags.wallet.flag,\n}\n\n/**\n * Deploy command configuration type\n */\nexport interface DeployConfig {\n 'ario-process': string\n 'arns-name': string\n 'dedupe-cache-max-entries': number\n 'deploy-file'?: string\n 'deploy-folder': string\n 'max-token-amount'?: string\n 'no-dedupe': boolean\n 'on-demand'?: string\n 'private-key'?: string\n 'sig-type': string\n 'ttl-seconds': string\n undername: string\n uploader?: string\n wallet?: string\n}\n\n/**\n * Deploy command flag configurations\n * Maps kebab-case flag names to their camelCase globalFlags definitions\n */\nexport const deployFlagConfigs = {\n 'ario-process': globalFlags.arioProcess,\n 'arns-name': globalFlags.arnsName,\n 'dedupe-cache-max-entries': globalFlags.dedupeCacheMaxEntries,\n 'deploy-file': globalFlags.deployFile,\n 'deploy-folder': globalFlags.deployFolder,\n 'max-token-amount': globalFlags.maxTokenAmount,\n 'no-dedupe': globalFlags.noDedupe,\n 'on-demand': globalFlags.onDemand,\n 'private-key': globalFlags.privateKey,\n 'sig-type': globalFlags.sigType,\n 'ttl-seconds': globalFlags.ttlSeconds,\n undername: globalFlags.undername,\n uploader: globalFlags.uploader,\n wallet: globalFlags.wallet,\n} as const\n\n/**\n * Upload command — file/folder to Arweave via Turbo without updating ArNS\n */\nexport const uploadFlagConfigs = {\n 'dedupe-cache-max-entries': globalFlags.dedupeCacheMaxEntries,\n 'deploy-file': globalFlags.deployFile,\n 'deploy-folder': globalFlags.deployFolder,\n 'max-token-amount': globalFlags.maxTokenAmount,\n 'no-dedupe': globalFlags.noDedupe,\n 'on-demand': globalFlags.onDemand,\n 'private-key': globalFlags.privateKey,\n 'sig-type': globalFlags.sigType,\n uploader: globalFlags.uploader,\n wallet: globalFlags.wallet,\n} as const\n\nexport type UploadConfig = ResolvedConfig<typeof uploadFlagConfigs>\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AA8BrC,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;CA2YlC"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAiBrC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,OAAgB,IAAI,KAAK;IAEzB,OAAgB,WAAW,SAA4C;IAEvE,OAAgB,QAAQ,WAWvB;IAED,OAAgB,KAAK,sBAAkC;IAE1C,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgNlC"}
@@ -0,0 +1,9 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class Upload extends Command {
3
+ static args: {};
4
+ static description: string;
5
+ static examples: string[];
6
+ static flags: Record<string, any>;
7
+ run(): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/commands/upload.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAYrC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,OAAgB,IAAI,KAAK;IAEzB,OAAgB,WAAW,SAAuE;IAElG,OAAgB,QAAQ,WAMvB;IAED,OAAgB,KAAK,sBAAkC;IAE1C,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAwHlC"}
@@ -1,3 +1,4 @@
1
+ import { type ResolvedConfig } from '../utils/config-resolver.js';
1
2
  /**
2
3
  * Global flag definitions - single source of truth for all flags
3
4
  * Each flag includes its oclif definition and optional prompt function
@@ -15,6 +16,7 @@ export declare const globalFlags: {
15
16
  sigType: import("../utils/config-resolver.js").FlagConfig<string, any>;
16
17
  ttlSeconds: import("../utils/config-resolver.js").FlagConfig<string, any>;
17
18
  undername: import("../utils/config-resolver.js").FlagConfig<string, any>;
19
+ uploader: import("../utils/config-resolver.js").FlagConfig<string | undefined, any>;
18
20
  wallet: import("../utils/config-resolver.js").FlagConfig<string | undefined, any>;
19
21
  };
20
22
  /**
@@ -33,6 +35,7 @@ export declare const deployFlags: {
33
35
  'sig-type': any;
34
36
  'ttl-seconds': any;
35
37
  undername: any;
38
+ uploader: any;
36
39
  wallet: any;
37
40
  };
38
41
  /**
@@ -68,6 +71,7 @@ export interface DeployConfig {
68
71
  'sig-type': string;
69
72
  'ttl-seconds': string;
70
73
  undername: string;
74
+ uploader?: string;
71
75
  wallet?: string;
72
76
  }
73
77
  /**
@@ -87,6 +91,23 @@ export declare const deployFlagConfigs: {
87
91
  readonly 'sig-type': import("../utils/config-resolver.js").FlagConfig<string, any>;
88
92
  readonly 'ttl-seconds': import("../utils/config-resolver.js").FlagConfig<string, any>;
89
93
  readonly undername: import("../utils/config-resolver.js").FlagConfig<string, any>;
94
+ readonly uploader: import("../utils/config-resolver.js").FlagConfig<string | undefined, any>;
90
95
  readonly wallet: import("../utils/config-resolver.js").FlagConfig<string | undefined, any>;
91
96
  };
97
+ /**
98
+ * Upload command — file/folder to Arweave via Turbo without updating ArNS
99
+ */
100
+ export declare const uploadFlagConfigs: {
101
+ readonly 'dedupe-cache-max-entries': import("../utils/config-resolver.js").FlagConfig<number, any>;
102
+ readonly 'deploy-file': import("../utils/config-resolver.js").FlagConfig<string | undefined, any>;
103
+ readonly 'deploy-folder': import("../utils/config-resolver.js").FlagConfig<string, any>;
104
+ readonly 'max-token-amount': import("../utils/config-resolver.js").FlagConfig<string | undefined, any>;
105
+ readonly 'no-dedupe': import("../utils/config-resolver.js").FlagConfig<boolean, any>;
106
+ readonly 'on-demand': import("../utils/config-resolver.js").FlagConfig<string | undefined, any>;
107
+ readonly 'private-key': import("../utils/config-resolver.js").FlagConfig<string | undefined, any>;
108
+ readonly 'sig-type': import("../utils/config-resolver.js").FlagConfig<string, any>;
109
+ readonly uploader: import("../utils/config-resolver.js").FlagConfig<string | undefined, any>;
110
+ readonly wallet: import("../utils/config-resolver.js").FlagConfig<string | undefined, any>;
111
+ };
112
+ export type UploadConfig = ResolvedConfig<typeof uploadFlagConfigs>;
92
113
  //# sourceMappingURL=flags.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../../src/constants/flags.ts"],"names":[],"mappings":"AAkBA;;;GAGG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;CAiKvB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;CAcvB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;CAKrB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,WAAW;;;;CAIvB,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,0BAA0B,EAAE,MAAM,CAAA;IAClC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,WAAW,EAAE,OAAO,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;CAcpB,CAAA"}
1
+ {"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../../src/constants/flags.ts"],"names":[],"mappings":"AAMA,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAYnF;;;GAGG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;CAwKvB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;CAevB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;CAKrB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,WAAW;;;;CAIvB,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,0BAA0B,EAAE,MAAM,CAAA;IAClC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,WAAW,EAAE,OAAO,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;CAepB,CAAA;AAEV;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;CAWpB,CAAA;AAEV,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,iBAAiB,CAAC,CAAA"}
@@ -0,0 +1,22 @@
1
+ export interface UploadWorkflowConfig {
2
+ 'dedupe-cache-max-entries': number;
3
+ 'deploy-file'?: string;
4
+ 'deploy-folder': string;
5
+ 'max-token-amount'?: string;
6
+ 'on-demand'?: string;
7
+ 'sig-type': string;
8
+ uploader?: string;
9
+ }
10
+ export interface UploadWorkflowIo {
11
+ error: (msg: string) => never;
12
+ }
13
+ /**
14
+ * Sign in to Turbo and upload a file or folder.
15
+ *
16
+ * @param deployKey - Wallet material (base64 JWK or hex private key per sig-type)
17
+ * @param config - Upload paths, dedupe, bundler service URL, on-demand payment
18
+ * @param io - Error handler (must exit the process)
19
+ * @returns Transaction ID or folder manifest ID
20
+ */
21
+ export declare function runUploadWorkflow(deployKey: string, config: UploadWorkflowConfig, io: UploadWorkflowIo): Promise<string>;
22
+ //# sourceMappingURL=upload-workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-workflow.d.ts","sourceRoot":"","sources":["../../../src/workflows/upload-workflow.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,oBAAoB;IACnC,0BAA0B,EAAE,MAAM,CAAA;IAClC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAeD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,KAAK,CAAA;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,oBAAoB,EAC5B,EAAE,EAAE,gBAAgB,GACnB,OAAO,CAAC,MAAM,CAAC,CAuKjB"}
@@ -1,5 +1,5 @@
1
1
  import 'node:path';
2
2
  import 'node:stream';
3
3
  import 'mime-types';
4
- export { u as uploadFile, a as uploadFolder } from '../chunks/uploader-d40K7e4Z.js';
4
+ export { u as uploadFile, a as uploadFolder } from '../chunks/uploader-DDS_d-O_.js';
5
5
  //# sourceMappingURL=uploader.js.map
@@ -0,0 +1,147 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { TurboFactory, ETHToTokenAmount, ARIOToTokenAmount, OnDemandFunding } from '@ardrive/turbo-sdk';
4
+ import chalk from 'chalk';
5
+ import ora from 'ora';
6
+ import { l as loadCache, u as uploadFile, c as cleanupCache, s as saveCache, a as uploadFolder } from '../chunks/uploader-DDS_d-O_.js';
7
+ import { expandPath } from '../utils/path.js';
8
+ import { createSigner } from '../utils/signer.js';
9
+
10
+ function getFolderSize(folderPath) {
11
+ let totalSize = 0;
12
+ for (const item of fs.readdirSync(folderPath)) {
13
+ const fullPath = path.join(folderPath, item);
14
+ const stats = fs.statSync(fullPath);
15
+ totalSize += stats.isDirectory() ? getFolderSize(fullPath) : stats.size;
16
+ }
17
+ return totalSize;
18
+ }
19
+ async function runUploadWorkflow(deployKey, config, io) {
20
+ const spinner = ora();
21
+ spinner.start("Creating signer");
22
+ const { signer, token } = createSigner(config["sig-type"], deployKey);
23
+ spinner.succeed(`Signer created (${chalk.cyan(config["sig-type"])})`);
24
+ spinner.start("Initializing Turbo");
25
+ const turboFactoryArgs = { signer, token };
26
+ if (config.uploader) {
27
+ turboFactoryArgs.uploadServiceConfig = { url: config.uploader };
28
+ }
29
+ const turbo = TurboFactory.authenticated(turboFactoryArgs);
30
+ spinner.succeed("Turbo initialized");
31
+ let fundingMode;
32
+ if (config["on-demand"] && config["max-token-amount"]) {
33
+ const tokenType = config["on-demand"];
34
+ const maxAmount = Number.parseFloat(config["max-token-amount"]);
35
+ let maxTokenAmount;
36
+ switch (tokenType) {
37
+ case "ario": {
38
+ maxTokenAmount = ARIOToTokenAmount(maxAmount);
39
+ break;
40
+ }
41
+ case "base-eth": {
42
+ maxTokenAmount = ETHToTokenAmount(maxAmount);
43
+ break;
44
+ }
45
+ default: {
46
+ throw new Error(`Unsupported on-demand token type: ${tokenType}`);
47
+ }
48
+ }
49
+ fundingMode = new OnDemandFunding({
50
+ maxTokenAmount,
51
+ topUpBufferMultiplier: 1.1
52
+ });
53
+ }
54
+ if (!fundingMode) {
55
+ spinner.start("Checking Turbo credits for upload");
56
+ try {
57
+ const uploadBytes = config["deploy-file"] ? (() => {
58
+ const filePath = expandPath(config["deploy-file"]);
59
+ return fs.statSync(filePath).size;
60
+ })() : (() => {
61
+ const folderPath = expandPath(config["deploy-folder"]);
62
+ return getFolderSize(folderPath);
63
+ })();
64
+ const FREE_THRESHOLD_BYTES = 107520;
65
+ if (uploadBytes >= FREE_THRESHOLD_BYTES) {
66
+ const [uploadCost] = await turbo.getUploadCosts({ bytes: [uploadBytes] });
67
+ const balance = await turbo.getBalance();
68
+ const requiredWinc = BigInt(uploadCost.winc);
69
+ const currentWinc = BigInt(balance.winc);
70
+ if (requiredWinc > currentWinc) {
71
+ spinner.fail("Insufficient Turbo credits");
72
+ io.error(
73
+ [
74
+ "Insufficient Turbo credits for this upload.",
75
+ `Required: ${requiredWinc.toString()} winc, available: ${currentWinc.toString()} winc.`,
76
+ "",
77
+ "Top up your Turbo balance (or re-run with --on-demand and --max-token-amount)."
78
+ ].join(" ")
79
+ );
80
+ }
81
+ }
82
+ spinner.succeed("Turbo credits check passed");
83
+ } catch (balanceError) {
84
+ spinner.fail("Failed to check Turbo credits");
85
+ const errorMessage = balanceError instanceof Error ? balanceError.message : String(balanceError);
86
+ io.error(`Failed to check Turbo credits: ${errorMessage}`);
87
+ }
88
+ }
89
+ let txOrManifestId;
90
+ try {
91
+ if (config["deploy-file"]) {
92
+ const filePath = expandPath(config["deploy-file"]);
93
+ spinner.start(`Uploading file ${chalk.yellow(config["deploy-file"])}`);
94
+ let cache = config["dedupe-cache-max-entries"] > 0 ? loadCache() : {};
95
+ const uploadResult = await uploadFile(turbo, filePath, { cache, fundingMode });
96
+ if (!uploadResult.transactionId) {
97
+ spinner.fail("File upload failed: no transaction ID returned");
98
+ io.error("File upload failed: no transaction ID returned");
99
+ }
100
+ txOrManifestId = uploadResult.transactionId;
101
+ if (uploadResult.updatedCache && config["dedupe-cache-max-entries"] > 0) {
102
+ cache = cleanupCache(uploadResult.updatedCache, config["dedupe-cache-max-entries"]);
103
+ saveCache(cache);
104
+ }
105
+ if (uploadResult.cacheHit) {
106
+ spinner.succeed(`File cache hit - reusing transaction ${chalk.green(txOrManifestId)}`);
107
+ } else {
108
+ const cacheMsg = config["dedupe-cache-max-entries"] > 0 ? chalk.gray("(cached for future uploads)") : "";
109
+ spinner.succeed(`File uploaded: ${chalk.green(txOrManifestId)} ${cacheMsg}`.trim());
110
+ }
111
+ } else {
112
+ const folderPath = expandPath(config["deploy-folder"]);
113
+ spinner.start(`Uploading folder ${chalk.yellow(config["deploy-folder"])}`);
114
+ let cache = config["dedupe-cache-max-entries"] > 0 ? loadCache() : {};
115
+ const uploadResult = await uploadFolder(turbo, folderPath, {
116
+ cache,
117
+ fundingMode,
118
+ throwOnFailure: true
119
+ });
120
+ if (!uploadResult.transactionId) {
121
+ spinner.fail("Folder upload failed: no transaction ID returned");
122
+ io.error("Folder upload failed: no transaction ID returned");
123
+ }
124
+ txOrManifestId = uploadResult.transactionId;
125
+ if (uploadResult.updatedCache && config["dedupe-cache-max-entries"] > 0) {
126
+ cache = cleanupCache(uploadResult.updatedCache, config["dedupe-cache-max-entries"]);
127
+ saveCache(cache);
128
+ }
129
+ const { cacheHits, totalFiles, uploaded } = uploadResult;
130
+ const statsMsg = cacheHits > 0 ? chalk.gray(` (${cacheHits}/${totalFiles} files cached, ${uploaded} uploaded)`) : "";
131
+ if (uploadResult.cacheHit) {
132
+ spinner.succeed(`All ${totalFiles} files cached - manifest: ${chalk.green(txOrManifestId)}`);
133
+ } else {
134
+ const cacheMsg = config["dedupe-cache-max-entries"] > 0 ? chalk.gray(" (files cached for future uploads)") : "";
135
+ spinner.succeed(`Folder uploaded: ${chalk.green(txOrManifestId)}${statsMsg}${cacheMsg}`);
136
+ }
137
+ }
138
+ } catch (uploadError) {
139
+ spinner.fail("Upload failed");
140
+ const errorMessage = uploadError instanceof Error ? uploadError.message : String(uploadError);
141
+ io.error(`Upload failed: ${errorMessage}`);
142
+ }
143
+ return txOrManifestId;
144
+ }
145
+
146
+ export { runUploadWorkflow };
147
+ //# sourceMappingURL=upload-workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-workflow.js","sources":["../../src/workflows/upload-workflow.ts"],"sourcesContent":["import fs from 'node:fs'\nimport path from 'node:path'\n\nimport {\n ARIOToTokenAmount,\n ETHToTokenAmount,\n OnDemandFunding,\n TurboAuthenticatedConfiguration,\n TurboFactory,\n} from '@ardrive/turbo-sdk'\nimport chalk from 'chalk'\nimport ora from 'ora'\n\nimport type { SignerType } from '../types/index.js'\nimport { cleanupCache, loadCache, saveCache } from '../utils/cache.js'\nimport { expandPath } from '../utils/path.js'\nimport { createSigner } from '../utils/signer.js'\nimport { type FolderUploadResult, uploadFile, uploadFolder } from '../utils/uploader.js'\n\nexport interface UploadWorkflowConfig {\n 'dedupe-cache-max-entries': number\n 'deploy-file'?: string\n 'deploy-folder': string\n 'max-token-amount'?: string\n 'on-demand'?: string\n 'sig-type': string\n uploader?: string\n}\n\nfunction getFolderSize(folderPath: string): number {\n let totalSize = 0\n\n for (const item of fs.readdirSync(folderPath)) {\n const fullPath = path.join(folderPath, item)\n const stats = fs.statSync(fullPath)\n\n totalSize += stats.isDirectory() ? getFolderSize(fullPath) : stats.size\n }\n\n return totalSize\n}\n\nexport interface UploadWorkflowIo {\n error: (msg: string) => never\n}\n\n/**\n * Sign in to Turbo and upload a file or folder.\n *\n * @param deployKey - Wallet material (base64 JWK or hex private key per sig-type)\n * @param config - Upload paths, dedupe, bundler service URL, on-demand payment\n * @param io - Error handler (must exit the process)\n * @returns Transaction ID or folder manifest ID\n */\nexport async function runUploadWorkflow(\n deployKey: string,\n config: UploadWorkflowConfig,\n io: UploadWorkflowIo,\n): Promise<string> {\n const spinner = ora()\n\n spinner.start('Creating signer')\n const { signer, token } = createSigner(config['sig-type'] as SignerType, deployKey)\n spinner.succeed(`Signer created (${chalk.cyan(config['sig-type'])})`)\n\n spinner.start('Initializing Turbo')\n\n const turboFactoryArgs: TurboAuthenticatedConfiguration = { signer, token }\n\n if (config.uploader) {\n turboFactoryArgs.uploadServiceConfig = { url: config.uploader }\n }\n\n const turbo = TurboFactory.authenticated(turboFactoryArgs)\n\n spinner.succeed('Turbo initialized')\n\n let fundingMode: OnDemandFunding | undefined\n if (config['on-demand'] && config['max-token-amount']) {\n const tokenType = config['on-demand']\n const maxAmount = Number.parseFloat(config['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 const uploadBytes = config['deploy-file']\n ? (() => {\n const filePath = expandPath(config['deploy-file']!)\n return fs.statSync(filePath).size\n })()\n : (() => {\n const folderPath = expandPath(config['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 const [uploadCost] = await turbo.getUploadCosts({ bytes: [uploadBytes] })\n const balance = await turbo.getBalance()\n\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 io.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 io.error(`Failed to check Turbo credits: ${errorMessage}`)\n }\n }\n\n let txOrManifestId: string\n try {\n if (config['deploy-file']) {\n const filePath = expandPath(config['deploy-file'])\n spinner.start(`Uploading file ${chalk.yellow(config['deploy-file'])}`)\n\n let cache = config['dedupe-cache-max-entries'] > 0 ? loadCache() : {}\n const uploadResult = await uploadFile(turbo, filePath, { cache, fundingMode })\n\n if (!uploadResult.transactionId) {\n spinner.fail('File upload failed: no transaction ID returned')\n io.error('File upload failed: no transaction ID returned')\n }\n\n txOrManifestId = uploadResult.transactionId\n\n if (uploadResult.updatedCache && config['dedupe-cache-max-entries'] > 0) {\n cache = cleanupCache(uploadResult.updatedCache, config['dedupe-cache-max-entries'])\n saveCache(cache)\n }\n\n if (uploadResult.cacheHit) {\n spinner.succeed(`File cache hit - reusing transaction ${chalk.green(txOrManifestId)}`)\n } else {\n const cacheMsg =\n config['dedupe-cache-max-entries'] > 0 ? chalk.gray('(cached for future uploads)') : ''\n spinner.succeed(`File uploaded: ${chalk.green(txOrManifestId)} ${cacheMsg}`.trim())\n }\n } else {\n const folderPath = expandPath(config['deploy-folder'])\n spinner.start(`Uploading folder ${chalk.yellow(config['deploy-folder'])}`)\n\n let cache = config['dedupe-cache-max-entries'] > 0 ? loadCache() : {}\n const uploadResult: FolderUploadResult = await uploadFolder(turbo, folderPath, {\n cache,\n fundingMode,\n throwOnFailure: true,\n })\n\n if (!uploadResult.transactionId) {\n spinner.fail('Folder upload failed: no transaction ID returned')\n io.error('Folder upload failed: no transaction ID returned')\n }\n\n txOrManifestId = uploadResult.transactionId\n\n if (uploadResult.updatedCache && config['dedupe-cache-max-entries'] > 0) {\n cache = cleanupCache(uploadResult.updatedCache, config['dedupe-cache-max-entries'])\n saveCache(cache)\n }\n\n const { cacheHits, totalFiles, uploaded } = uploadResult\n const statsMsg =\n cacheHits > 0\n ? chalk.gray(` (${cacheHits}/${totalFiles} files cached, ${uploaded} uploaded)`)\n : ''\n\n if (uploadResult.cacheHit) {\n spinner.succeed(`All ${totalFiles} files cached - manifest: ${chalk.green(txOrManifestId)}`)\n } else {\n const cacheMsg =\n config['dedupe-cache-max-entries'] > 0\n ? chalk.gray(' (files cached for future uploads)')\n : ''\n spinner.succeed(`Folder uploaded: ${chalk.green(txOrManifestId)}${statsMsg}${cacheMsg}`)\n }\n }\n } catch (uploadError) {\n spinner.fail('Upload failed')\n const errorMessage = uploadError instanceof Error ? uploadError.message : String(uploadError)\n io.error(`Upload failed: ${errorMessage}`)\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": "3.2.0",
3
+ "version": "3.4.0",
4
4
  "description": "Permaweb App Deployment Package",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -17,6 +17,9 @@
17
17
  "topics": {
18
18
  "deploy": {
19
19
  "description": "Deploy to the permaweb"
20
+ },
21
+ "upload": {
22
+ "description": "Upload to Arweave without updating ArNS"
20
23
  }
21
24
  }
22
25
  },
@@ -58,6 +61,7 @@
58
61
  "eslint-plugin-prettier": "^5.2.1",
59
62
  "eslint-plugin-simple-import-sort": "^12.1.1",
60
63
  "husky": "^9.1.7",
64
+ "lint-staged": "^16.4.0",
61
65
  "msw": "^2.11.3",
62
66
  "openapi-typescript": "^7.9.1",
63
67
  "prettier": "^3.4.2",
@@ -85,7 +89,15 @@
85
89
  "url": "https://github.com/permaweb/permaweb-deploy/issues"
86
90
  },
87
91
  "homepage": "https://github.com/permaweb/permaweb-deploy#readme",
92
+ "lint-staged": {
93
+ "*.{ts,tsx}": [
94
+ "eslint --fix --max-warnings=0",
95
+ "prettier --write"
96
+ ],
97
+ "*.{json,md,yml,yaml}": "prettier --write"
98
+ },
88
99
  "scripts": {
100
+ "clean:install": "rm -rf node_modules pnpm-lock.yaml || true && pnpm store prune && pnpm install",
89
101
  "build": "vite build && tsc --emitDeclarationOnly",
90
102
  "dev": "./bin/dev.js",
91
103
  "test": "vitest",