@loadnetwork/permaweb-deploy 2.5.1-loadnetwork.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.
Files changed (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +581 -0
  3. package/bin/dev.js +5 -0
  4. package/bin/run.js +5 -0
  5. package/dist/commands/deploy.js +384 -0
  6. package/dist/commands/deploy.js.map +1 -0
  7. package/dist/constants/flags.js +195 -0
  8. package/dist/constants/flags.js.map +1 -0
  9. package/dist/index.js +2 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/prompts/arns.js +89 -0
  12. package/dist/prompts/arns.js.map +1 -0
  13. package/dist/prompts/deployment.js +27 -0
  14. package/dist/prompts/deployment.js.map +1 -0
  15. package/dist/prompts/wallet.js +51 -0
  16. package/dist/prompts/wallet.js.map +1 -0
  17. package/dist/src/commands/deploy.d.ts +9 -0
  18. package/dist/src/commands/deploy.d.ts.map +1 -0
  19. package/dist/src/constants/flags.d.ts +96 -0
  20. package/dist/src/constants/flags.d.ts.map +1 -0
  21. package/dist/src/index.d.ts +2 -0
  22. package/dist/src/index.d.ts.map +1 -0
  23. package/dist/src/prompts/arns.d.ts +13 -0
  24. package/dist/src/prompts/arns.d.ts.map +1 -0
  25. package/dist/src/prompts/deployment.d.ts +6 -0
  26. package/dist/src/prompts/deployment.d.ts.map +1 -0
  27. package/dist/src/prompts/wallet.d.ts +11 -0
  28. package/dist/src/prompts/wallet.d.ts.map +1 -0
  29. package/dist/src/types/index.d.ts +31 -0
  30. package/dist/src/types/index.d.ts.map +1 -0
  31. package/dist/src/utils/__tests__/constants.test.d.ts +2 -0
  32. package/dist/src/utils/__tests__/constants.test.d.ts.map +1 -0
  33. package/dist/src/utils/config-resolver.d.ts +72 -0
  34. package/dist/src/utils/config-resolver.d.ts.map +1 -0
  35. package/dist/src/utils/constants.d.ts +4 -0
  36. package/dist/src/utils/constants.d.ts.map +1 -0
  37. package/dist/src/utils/path.d.ts +5 -0
  38. package/dist/src/utils/path.d.ts.map +1 -0
  39. package/dist/src/utils/signer.d.ts +17 -0
  40. package/dist/src/utils/signer.d.ts.map +1 -0
  41. package/dist/src/utils/uploader.d.ts +8 -0
  42. package/dist/src/utils/uploader.d.ts.map +1 -0
  43. package/dist/src/utils/validators.d.ts +29 -0
  44. package/dist/src/utils/validators.d.ts.map +1 -0
  45. package/dist/tests/constants.d.ts +11 -0
  46. package/dist/tests/constants.d.ts.map +1 -0
  47. package/dist/tests/e2e/deploy-command.test.d.ts +2 -0
  48. package/dist/tests/e2e/deploy-command.test.d.ts.map +1 -0
  49. package/dist/tests/global-setup.d.ts +6 -0
  50. package/dist/tests/global-setup.d.ts.map +1 -0
  51. package/dist/tests/mocks/turbo-handlers.d.ts +105 -0
  52. package/dist/tests/mocks/turbo-handlers.d.ts.map +1 -0
  53. package/dist/tests/setup.d.ts +11 -0
  54. package/dist/tests/setup.d.ts.map +1 -0
  55. package/dist/tests/types/payment-service.d.ts +218 -0
  56. package/dist/tests/types/payment-service.d.ts.map +1 -0
  57. package/dist/tests/types/upload-service.d.ts +168 -0
  58. package/dist/tests/types/upload-service.d.ts.map +1 -0
  59. package/dist/tests/unit/validators.test.d.ts +2 -0
  60. package/dist/tests/unit/validators.test.d.ts.map +1 -0
  61. package/dist/types/index.js +2 -0
  62. package/dist/types/index.js.map +1 -0
  63. package/dist/utils/config-resolver.js +39 -0
  64. package/dist/utils/config-resolver.js.map +1 -0
  65. package/dist/utils/constants.js +6 -0
  66. package/dist/utils/constants.js.map +1 -0
  67. package/dist/utils/path.js +15 -0
  68. package/dist/utils/path.js.map +1 -0
  69. package/dist/utils/signer.js +40 -0
  70. package/dist/utils/signer.js.map +1 -0
  71. package/dist/utils/uploader.js +86 -0
  72. package/dist/utils/uploader.js.map +1 -0
  73. package/dist/utils/validators.js +62 -0
  74. package/dist/utils/validators.js.map +1 -0
  75. package/package.json +110 -0
@@ -0,0 +1,384 @@
1
+ import fs from 'node:fs';
2
+ import { Readable } from 'node:stream';
3
+ import { ARIO, AOProcess, ANT } from '@ar.io/sdk';
4
+ import { TurboFactory, ETHToTokenAmount, ARIOToTokenAmount, OnDemandFunding } from '@ardrive/turbo-sdk';
5
+ import { Command } from '@oclif/core';
6
+ import { connect } from '@permaweb/aoconnect';
7
+ import boxen from 'boxen';
8
+ import chalk from 'chalk';
9
+ import Table from 'cli-table3';
10
+ import ora from 'ora';
11
+ import { deployFlagConfigs } from '../constants/flags.js';
12
+ import { promptAdvancedOptions } from '../prompts/arns.js';
13
+ import { getWalletConfig } from '../prompts/wallet.js';
14
+ import { extractFlags, resolveConfig } from '../utils/config-resolver.js';
15
+ import { expandPath } from '../utils/path.js';
16
+ import { createSigner } from '../utils/signer.js';
17
+ import { uploadFile, uploadFolder } from '../utils/uploader.js';
18
+ import { validateArioProcess, validateTtl, validateUndername, resolveArioProcess } from '../utils/validators.js';
19
+
20
+ class Deploy extends Command {
21
+ static args = {};
22
+ static description = "Deploy your application to the permaweb";
23
+ static examples = [
24
+ "<%= config.bin %> deploy # Interactive mode",
25
+ "<%= config.bin %> deploy --arns-name my-app --wallet ./wallet.json",
26
+ '<%= config.bin %> deploy --arns-name my-app --private-key "$(cat wallet.json)"',
27
+ "<%= config.bin %> deploy --arns-name my-app --undername staging",
28
+ "<%= config.bin %> deploy --arns-name my-app --deploy-file ./dist/index.html",
29
+ "<%= config.bin %> deploy --arns-name my-app --sig-type ethereum --wallet ./private-key.txt",
30
+ '<%= config.bin %> deploy --arns-name my-app --sig-type ethereum --private-key "0x..."',
31
+ "<%= config.bin %> deploy --arns-name my-app --on-demand ario --max-token-amount 1000"
32
+ ];
33
+ static flags = extractFlags(deployFlagConfigs);
34
+ async run() {
35
+ try {
36
+ const { flags } = await this.parse(Deploy);
37
+ if (flags.anchor) {
38
+ const allowedLong = /* @__PURE__ */ new Set(["--anchor", "--preview-id", "--wallet"]);
39
+ const allowedShort = /* @__PURE__ */ new Set(["-w"]);
40
+ const disallowed = [];
41
+ for (const arg of this.argv) {
42
+ if (!arg.startsWith("-")) {
43
+ continue;
44
+ }
45
+ if (arg.startsWith("--")) {
46
+ const name = arg.split("=")[0];
47
+ if (!allowedLong.has(name)) {
48
+ disallowed.push(name);
49
+ }
50
+ continue;
51
+ }
52
+ if (!allowedShort.has(arg)) {
53
+ disallowed.push(arg);
54
+ }
55
+ }
56
+ if (disallowed.length > 0) {
57
+ this.error(
58
+ `--anchor only allows --preview-id and --wallet (found ${disallowed.join(", ")})`
59
+ );
60
+ }
61
+ }
62
+ if (flags.preview) {
63
+ const allowedLong = /* @__PURE__ */ new Set(["--preview", "--deploy-folder", "--deploy-file", "--wallet"]);
64
+ const allowedShort = /* @__PURE__ */ new Set(["-d", "-f", "-w"]);
65
+ const disallowed = [];
66
+ for (const arg of this.argv) {
67
+ if (!arg.startsWith("-")) {
68
+ continue;
69
+ }
70
+ if (arg.startsWith("--")) {
71
+ const name = arg.split("=")[0];
72
+ if (!allowedLong.has(name)) {
73
+ disallowed.push(name);
74
+ }
75
+ continue;
76
+ }
77
+ if (!allowedShort.has(arg)) {
78
+ disallowed.push(arg);
79
+ }
80
+ }
81
+ if (disallowed.length > 0) {
82
+ this.error(
83
+ `--preview only allows --deploy-folder/--deploy-file and --wallet (found ${disallowed.join(", ")})`
84
+ );
85
+ }
86
+ }
87
+ const interactive = !flags.preview && !flags.anchor && !flags["arns-name"];
88
+ if (interactive) {
89
+ this.log(chalk.cyan.bold("\n🎯 Interactive Deployment Mode\n"));
90
+ }
91
+ const baseConfig = await resolveConfig(deployFlagConfigs, flags, {
92
+ interactive
93
+ });
94
+ let walletConfig = {
95
+ privateKey: baseConfig["private-key"],
96
+ wallet: baseConfig.wallet
97
+ };
98
+ if (interactive && !baseConfig.wallet && !baseConfig["private-key"]) {
99
+ const config = await getWalletConfig();
100
+ walletConfig = {
101
+ privateKey: config.privateKey,
102
+ wallet: config.wallet
103
+ };
104
+ }
105
+ let advancedOptions;
106
+ if (interactive) {
107
+ const options = await promptAdvancedOptions();
108
+ advancedOptions = options || void 0;
109
+ }
110
+ const deployConfig = {
111
+ "ario-process": advancedOptions?.arioProcess || baseConfig["ario-process"],
112
+ "arns-name": baseConfig["arns-name"],
113
+ "deploy-file": baseConfig["deploy-file"],
114
+ "deploy-folder": baseConfig["deploy-folder"],
115
+ "max-token-amount": advancedOptions?.maxTokenAmount || baseConfig["max-token-amount"],
116
+ "on-demand": advancedOptions?.onDemand || baseConfig["on-demand"],
117
+ "private-key": walletConfig.privateKey,
118
+ preview: baseConfig.preview,
119
+ anchor: baseConfig.anchor,
120
+ "preview-id": baseConfig["preview-id"],
121
+ "sig-type": baseConfig["sig-type"],
122
+ "ttl-seconds": advancedOptions?.ttlSeconds || baseConfig["ttl-seconds"],
123
+ undername: advancedOptions?.undername || baseConfig.undername,
124
+ wallet: walletConfig.wallet
125
+ };
126
+ if (interactive) {
127
+ this.log("");
128
+ }
129
+ let deployKey;
130
+ if (deployConfig.wallet) {
131
+ const walletPath = expandPath(deployConfig.wallet);
132
+ if (!fs.existsSync(walletPath)) {
133
+ this.error(`Wallet file [${deployConfig.wallet}] does not exist`);
134
+ }
135
+ const walletContent = fs.readFileSync(walletPath, "utf8");
136
+ deployKey = deployConfig["sig-type"] === "arweave" ? Buffer.from(walletContent).toString("base64") : walletContent.trim();
137
+ } else if (deployConfig["private-key"]) {
138
+ deployKey = deployConfig["sig-type"] === "arweave" ? Buffer.from(deployConfig["private-key"]).toString("base64") : deployConfig["private-key"].trim();
139
+ } else {
140
+ deployKey = process.env.DEPLOY_KEY || "";
141
+ if (!deployKey) {
142
+ this.error(
143
+ "DEPLOY_KEY environment variable not set. Use --wallet, --private-key, or set DEPLOY_KEY"
144
+ );
145
+ }
146
+ }
147
+ if (deployConfig.anchor) {
148
+ if (!deployConfig["preview-id"]) {
149
+ this.error("--preview-id is required when using --anchor");
150
+ }
151
+ if (!deployConfig.wallet) {
152
+ this.error("--wallet is required when using --anchor");
153
+ }
154
+ await anchorPreviewManifest({
155
+ previewId: deployConfig["preview-id"],
156
+ deployKey
157
+ });
158
+ return;
159
+ }
160
+ let arioProcess = deployConfig["ario-process"];
161
+ const usePreview = Boolean(deployConfig.preview);
162
+ const skipAnt = usePreview;
163
+ if (!usePreview) {
164
+ const arioValidation = validateArioProcess(arioProcess);
165
+ if (arioValidation !== true) {
166
+ this.error(arioValidation);
167
+ }
168
+ const ttlValidation = validateTtl(deployConfig["ttl-seconds"]);
169
+ if (ttlValidation !== true) {
170
+ this.error(ttlValidation);
171
+ }
172
+ const undernameValidation = validateUndername(deployConfig.undername);
173
+ if (undernameValidation !== true) {
174
+ this.error(undernameValidation);
175
+ }
176
+ arioProcess = resolveArioProcess(arioProcess);
177
+ }
178
+ this.log(chalk.cyan.bold("\n🚀 Starting deployment...\n"));
179
+ try {
180
+ const spinner = ora("Initializing ARIO").start();
181
+ let ario;
182
+ let arnsNameRecord;
183
+ if (!skipAnt) {
184
+ const ao = connect({
185
+ CU_URL: "https://cu.ardrive.io",
186
+ MODE: "legacy",
187
+ MU_URL: "https://mu.ao-testnet.xyz"
188
+ });
189
+ ario = ARIO.init({
190
+ process: new AOProcess({
191
+ ao,
192
+ processId: arioProcess
193
+ })
194
+ });
195
+ spinner.succeed("ARIO initialized");
196
+ spinner.start(`Fetching ArNS record for ${chalk.yellow(deployConfig["arns-name"])}`);
197
+ const arioClient = ario;
198
+ arnsNameRecord = await arioClient.getArNSRecord({ name: deployConfig["arns-name"] }).catch(() => {
199
+ spinner.fail(`ArNS name ${chalk.red(deployConfig["arns-name"])} does not exist`);
200
+ this.error(`ArNS name [${deployConfig["arns-name"]}] does not exist`);
201
+ });
202
+ spinner.succeed(`ArNS record fetched for ${chalk.green(deployConfig["arns-name"])}`);
203
+ } else {
204
+ spinner.succeed("Skipping ANT update");
205
+ }
206
+ spinner.start("Creating signer");
207
+ const { signer, token } = createSigner(deployConfig["sig-type"], deployKey);
208
+ spinner.succeed(`Signer created (${chalk.cyan(deployConfig["sig-type"])})`);
209
+ spinner.start("Initializing Turbo");
210
+ const uploadServiceUrl = usePreview ? "https://loaded-turbo-api.load.network" : process.env.TURBO_UPLOAD_SERVICE_URL || "https://upload.ardrive.io";
211
+ const turbo = TurboFactory.authenticated({
212
+ signer,
213
+ token,
214
+ uploadServiceConfig: {
215
+ url: uploadServiceUrl
216
+ }
217
+ });
218
+ spinner.succeed("Turbo initialized");
219
+ let fundingMode;
220
+ if (deployConfig["on-demand"] && deployConfig["max-token-amount"]) {
221
+ const tokenType = deployConfig["on-demand"];
222
+ const maxAmount = Number.parseFloat(deployConfig["max-token-amount"]);
223
+ let maxTokenAmount;
224
+ switch (tokenType) {
225
+ case "ario": {
226
+ maxTokenAmount = ARIOToTokenAmount(maxAmount);
227
+ break;
228
+ }
229
+ case "base-eth": {
230
+ maxTokenAmount = ETHToTokenAmount(maxAmount);
231
+ break;
232
+ }
233
+ default: {
234
+ throw new Error(`Unsupported on-demand token type: ${tokenType}`);
235
+ }
236
+ }
237
+ fundingMode = new OnDemandFunding({
238
+ maxTokenAmount,
239
+ topUpBufferMultiplier: 1.1
240
+ });
241
+ }
242
+ let txOrManifestId;
243
+ if (deployConfig["deploy-file"]) {
244
+ const filePath = expandPath(deployConfig["deploy-file"]);
245
+ spinner.start(`Uploading file ${chalk.yellow(deployConfig["deploy-file"])}`);
246
+ txOrManifestId = await uploadFile(turbo, filePath, { fundingMode });
247
+ spinner.succeed(`File uploaded: ${chalk.green(txOrManifestId)}`);
248
+ } else {
249
+ const folderPath = expandPath(deployConfig["deploy-folder"]);
250
+ spinner.start(`Uploading folder ${chalk.yellow(deployConfig["deploy-folder"])}`);
251
+ txOrManifestId = await uploadFolder(turbo, folderPath, { fundingMode });
252
+ spinner.succeed(`Folder uploaded: ${chalk.green(txOrManifestId)}`);
253
+ }
254
+ this.log("");
255
+ if (!skipAnt) {
256
+ spinner.start("Updating ANT record");
257
+ const ant = ANT.init({ processId: arnsNameRecord?.processId || "", signer });
258
+ await ant.setRecord(
259
+ {
260
+ transactionId: txOrManifestId,
261
+ ttlSeconds: Number.parseInt(deployConfig["ttl-seconds"], 10),
262
+ undername: deployConfig.undername
263
+ },
264
+ {
265
+ tags: [
266
+ {
267
+ name: "App-Name",
268
+ value: "Permaweb-Deploy"
269
+ },
270
+ ...process.env.GITHUB_SHA ? [
271
+ {
272
+ name: "GIT-HASH",
273
+ value: process.env.GITHUB_SHA
274
+ }
275
+ ] : []
276
+ ]
277
+ }
278
+ );
279
+ spinner.succeed("ANT record updated");
280
+ const table = new Table({
281
+ head: [chalk.cyan.bold("Property"), chalk.cyan.bold("Value")],
282
+ style: {
283
+ head: []
284
+ }
285
+ });
286
+ table.push(
287
+ ["Tx ID", chalk.green(txOrManifestId)],
288
+ ["ArNS Name", chalk.yellow(deployConfig["arns-name"])],
289
+ ["Undername", chalk.yellow(deployConfig.undername)],
290
+ ["ANT", chalk.cyan(arnsNameRecord?.processId || "")],
291
+ ["ARIO Process", chalk.gray(arioProcess)],
292
+ ["TTL Seconds", chalk.blue(deployConfig["ttl-seconds"])]
293
+ );
294
+ const successMessage = boxen(
295
+ `${chalk.green.bold("✨ Deployment Successful!")}
296
+
297
+ ${table.toString()}`,
298
+ {
299
+ borderColor: "green",
300
+ borderStyle: "round",
301
+ padding: 1,
302
+ title: chalk.bold("🚀 Permaweb Deploy"),
303
+ titleAlignment: "center"
304
+ }
305
+ );
306
+ this.log(`
307
+ ${successMessage}`);
308
+ } else {
309
+ this.log(`Uploaded successfully: ${txOrManifestId}
310
+ Visit your site: https://gateway.s3-node-1.load.network/resolve/preview/${txOrManifestId}`);
311
+ }
312
+ } catch (error) {
313
+ this.error(
314
+ chalk.red(`Deployment failed: ${error instanceof Error ? error.message : String(error)}`)
315
+ );
316
+ }
317
+ } catch (error) {
318
+ if (error instanceof Error && error.name === "ExitPromptError") {
319
+ this.log(chalk.yellow("\n\n👋 Deployment cancelled"));
320
+ this.exit(0);
321
+ }
322
+ throw error;
323
+ }
324
+ }
325
+ }
326
+ async function anchorPreviewManifest({
327
+ previewId,
328
+ deployKey
329
+ }) {
330
+ const { signer, token } = createSigner("arweave", deployKey);
331
+ const turbo = TurboFactory.authenticated({
332
+ signer,
333
+ token
334
+ });
335
+ const balance = await turbo.getBalance().catch(() => null);
336
+ if (balance) {
337
+ console.log(`Turbo balance: ${balance.winc}`);
338
+ }
339
+ const manifestResponse = await fetch(
340
+ `https://gateway.s3-node-1.load.network/resolve/${previewId}`
341
+ );
342
+ if (!manifestResponse.ok) {
343
+ throw new Error(`Failed to fetch preview manifest: ${manifestResponse.status}`);
344
+ }
345
+ const manifest = await manifestResponse.json();
346
+ const paths = manifest.paths || {};
347
+ const ids = /* @__PURE__ */ new Set();
348
+ for (const entry of Object.values(paths)) {
349
+ if (entry?.id) {
350
+ ids.add(entry.id);
351
+ }
352
+ }
353
+ if (manifest.fallback?.id) {
354
+ ids.add(manifest.fallback.id);
355
+ }
356
+ console.log(`Anchoring ${ids.size} dataitems from preview manifest`);
357
+ for (const id of ids) {
358
+ console.log(`Anchoring dataitem: ${id}`);
359
+ const binary = await fetch(`https://gateway.s3-node-1.load.network/binary/${id}`);
360
+ if (!binary.ok) {
361
+ throw new Error(`Failed to fetch dataitem binary: ${id}`);
362
+ }
363
+ const buffer = Buffer.from(await binary.arrayBuffer());
364
+ await turbo.uploadSignedDataItem({
365
+ dataItemStreamFactory: () => Readable.from(buffer),
366
+ dataItemSizeFactory: () => buffer.length
367
+ });
368
+ }
369
+ const manifestBinary = await fetch(
370
+ `https://gateway.s3-node-1.load.network/binary/${previewId}`
371
+ );
372
+ if (!manifestBinary.ok) {
373
+ throw new Error(`Failed to fetch manifest binary: ${previewId}`);
374
+ }
375
+ const manifestBuffer = Buffer.from(await manifestBinary.arrayBuffer());
376
+ await turbo.uploadSignedDataItem({
377
+ dataItemStreamFactory: () => Readable.from(manifestBuffer),
378
+ dataItemSizeFactory: () => manifestBuffer.length
379
+ });
380
+ console.log(`Anchored manifest: ${previewId}`);
381
+ }
382
+
383
+ export { Deploy as default };
384
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sources":["../../src/commands/deploy.ts"],"sourcesContent":["import fs from 'node:fs'\nimport { Readable } from 'node:stream'\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 { ArnsRecord, 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'\nimport {\n resolveArioProcess,\n validateArioProcess,\n validateTtl,\n validateUndername,\n} from '../utils/validators.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 if (flags.anchor) {\n const allowedLong = new Set(['--anchor', '--preview-id', '--wallet'])\n const allowedShort = new Set(['-w'])\n const disallowed: string[] = []\n\n for (const arg of this.argv) {\n if (!arg.startsWith('-')) {\n continue\n }\n\n if (arg.startsWith('--')) {\n const name = arg.split('=')[0]\n if (!allowedLong.has(name)) {\n disallowed.push(name)\n }\n continue\n }\n\n if (!allowedShort.has(arg)) {\n disallowed.push(arg)\n }\n }\n\n if (disallowed.length > 0) {\n this.error(\n `--anchor only allows --preview-id and --wallet (found ${disallowed.join(', ')})`,\n )\n }\n }\n\n if (flags.preview) {\n const allowedLong = new Set(['--preview', '--deploy-folder', '--deploy-file', '--wallet'])\n const allowedShort = new Set(['-d', '-f', '-w'])\n const disallowed: string[] = []\n\n for (const arg of this.argv) {\n if (!arg.startsWith('-')) {\n continue\n }\n\n if (arg.startsWith('--')) {\n const name = arg.split('=')[0]\n if (!allowedLong.has(name)) {\n disallowed.push(name)\n }\n continue\n }\n\n if (!allowedShort.has(arg)) {\n disallowed.push(arg)\n }\n }\n\n if (disallowed.length > 0) {\n this.error(\n `--preview only allows --deploy-folder/--deploy-file and --wallet (found ${disallowed.join(', ')})`,\n )\n }\n }\n\n const interactive = !flags.preview && !flags.anchor && !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 preview: baseConfig.preview,\n anchor: baseConfig.anchor,\n 'preview-id': baseConfig['preview-id'],\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 if (deployConfig.anchor) {\n if (!deployConfig['preview-id']) {\n this.error('--preview-id is required when using --anchor')\n }\n\n if (!deployConfig.wallet) {\n this.error('--wallet is required when using --anchor')\n }\n\n await anchorPreviewManifest({\n previewId: deployConfig['preview-id'],\n deployKey,\n })\n\n return\n }\n\n let arioProcess = deployConfig['ario-process']\n const usePreview = Boolean(deployConfig.preview)\n const skipAnt = usePreview\n\n if (!usePreview) {\n const arioValidation = validateArioProcess(arioProcess)\n if (arioValidation !== true) {\n this.error(arioValidation)\n }\n\n const ttlValidation = validateTtl(deployConfig['ttl-seconds'])\n if (ttlValidation !== true) {\n this.error(ttlValidation)\n }\n\n const undernameValidation = validateUndername(deployConfig.undername)\n if (undernameValidation !== true) {\n this.error(undernameValidation)\n }\n\n arioProcess = resolveArioProcess(arioProcess)\n }\n\n this.log(chalk.cyan.bold('\\n🚀 Starting deployment...\\n'))\n try {\n const spinner = ora('Initializing ARIO').start()\n let ario: ARIO | undefined\n let arnsNameRecord: ArnsRecord | undefined\n\n if (!skipAnt) {\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 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 arioClient = ario as unknown as {\n getArNSRecord: (args: { name: string }) => Promise<ArnsRecord>\n }\n\n arnsNameRecord = await arioClient\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 } else {\n spinner.succeed('Skipping ANT update')\n }\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 uploadServiceUrl = usePreview\n ? 'https://loaded-turbo-api.load.network'\n : process.env.TURBO_UPLOAD_SERVICE_URL || 'https://upload.ardrive.io'\n const turbo = TurboFactory.authenticated({\n signer,\n token,\n uploadServiceConfig: {\n url: uploadServiceUrl,\n },\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 if (!skipAnt) {\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 } else {\n this.log(`Uploaded successfully: ${txOrManifestId}\\nVisit your site: https://gateway.s3-node-1.load.network/resolve/preview/${txOrManifestId}`)\n }\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\nasync function anchorPreviewManifest({\n previewId,\n deployKey,\n}: {\n previewId: string\n deployKey: string\n}): Promise<void> {\n const { signer, token } = createSigner('arweave', deployKey)\n const turbo = TurboFactory.authenticated({\n signer,\n token,\n })\n\n const balance = await turbo.getBalance().catch(() => null)\n if (balance) {\n console.log(`Turbo balance: ${balance.winc}`)\n }\n\n const manifestResponse = await fetch(\n `https://gateway.s3-node-1.load.network/resolve/${previewId}`,\n )\n if (!manifestResponse.ok) {\n throw new Error(`Failed to fetch preview manifest: ${manifestResponse.status}`)\n }\n\n const manifest = (await manifestResponse.json()) as {\n paths?: Record<string, { id?: string }>\n fallback?: { id?: string }\n }\n const paths = manifest.paths || {}\n const ids = new Set<string>()\n\n for (const entry of Object.values(paths)) {\n if (entry?.id) {\n ids.add(entry.id)\n }\n }\n\n if (manifest.fallback?.id) {\n ids.add(manifest.fallback.id)\n }\n\n console.log(`Anchoring ${ids.size} dataitems from preview manifest`)\n\n for (const id of ids) {\n console.log(`Anchoring dataitem: ${id}`)\n const binary = await fetch(`https://gateway.s3-node-1.load.network/binary/${id}`)\n if (!binary.ok) {\n throw new Error(`Failed to fetch dataitem binary: ${id}`)\n }\n\n const buffer = Buffer.from(await binary.arrayBuffer())\n await turbo.uploadSignedDataItem({\n dataItemStreamFactory: () => Readable.from(buffer),\n dataItemSizeFactory: () => buffer.length,\n })\n }\n\n const manifestBinary = await fetch(\n `https://gateway.s3-node-1.load.network/binary/${previewId}`,\n )\n if (!manifestBinary.ok) {\n throw new Error(`Failed to fetch manifest binary: ${previewId}`)\n }\n\n const manifestBuffer = Buffer.from(await manifestBinary.arrayBuffer())\n await turbo.uploadSignedDataItem({\n dataItemStreamFactory: () => Readable.from(manifestBuffer),\n dataItemSizeFactory: () => manifestBuffer.length,\n })\n console.log(`Anchored manifest: ${previewId}`)\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,195 @@
1
+ import { ARIO_MAINNET_PROCESS_ID } from '@ar.io/sdk';
2
+ import { Flags } from '@oclif/core';
3
+ import { promptArnsName, promptArioProcess } from '../prompts/arns.js';
4
+ import { promptDeployTarget } from '../prompts/deployment.js';
5
+ import { promptSignerType } from '../prompts/wallet.js';
6
+ import { createFlagConfig } from '../utils/config-resolver.js';
7
+ import { TTL_MIN, TTL_MAX } from '../utils/constants.js';
8
+ import { validateFileExists, validateFolderExists } from '../utils/validators.js';
9
+
10
+ const globalFlags = {
11
+ arioProcess: createFlagConfig({
12
+ flag: Flags.string({
13
+ char: "p",
14
+ default: ARIO_MAINNET_PROCESS_ID,
15
+ description: "The ARIO process to use (mainnet, testnet, or process ID)",
16
+ required: false
17
+ }),
18
+ prompt: promptArioProcess
19
+ }),
20
+ arnsName: createFlagConfig({
21
+ flag: Flags.string({
22
+ char: "n",
23
+ description: "The ArNS name to deploy to",
24
+ required: false
25
+ }),
26
+ prompt: promptArnsName,
27
+ triggersInteractive: true
28
+ }),
29
+ deployFile: createFlagConfig({
30
+ flag: Flags.string({
31
+ char: "f",
32
+ description: "File to deploy (overrides deploy-folder)",
33
+ async parse(input) {
34
+ const validation = validateFileExists(input);
35
+ if (validation !== true) {
36
+ throw new Error(validation);
37
+ }
38
+ return input;
39
+ },
40
+ required: false
41
+ }),
42
+ async prompt() {
43
+ const target = await promptDeployTarget();
44
+ return target.type === "file" ? target.path : void 0;
45
+ }
46
+ }),
47
+ deployFolder: createFlagConfig({
48
+ flag: Flags.string({
49
+ char: "d",
50
+ default: "./dist",
51
+ description: "Folder to deploy",
52
+ async parse(input) {
53
+ const validation = validateFolderExists(input);
54
+ if (validation !== true) {
55
+ throw new Error(validation);
56
+ }
57
+ return input;
58
+ },
59
+ required: false
60
+ }),
61
+ async prompt() {
62
+ const target = await promptDeployTarget();
63
+ return target.type === "folder" ? target.path : "./dist";
64
+ }
65
+ }),
66
+ // Advanced payment settings
67
+ maxTokenAmount: createFlagConfig({
68
+ flag: Flags.string({
69
+ description: "Maximum token amount for on-demand payment",
70
+ required: false
71
+ })
72
+ }),
73
+ onDemand: createFlagConfig({
74
+ flag: Flags.string({
75
+ description: "Enable on-demand payment with specified token (ario or base-eth)",
76
+ options: ["ario", "base-eth"],
77
+ required: false
78
+ })
79
+ }),
80
+ privateKey: createFlagConfig({
81
+ flag: Flags.string({
82
+ char: "k",
83
+ description: "Private key or JWK JSON string (alternative to --wallet)",
84
+ exclusive: ["wallet"],
85
+ required: false
86
+ })
87
+ }),
88
+ sigType: createFlagConfig({
89
+ flag: Flags.string({
90
+ char: "s",
91
+ default: "arweave",
92
+ description: "Signer type for deployment",
93
+ options: ["arweave", "ethereum", "polygon", "kyve"],
94
+ required: false
95
+ }),
96
+ prompt: promptSignerType
97
+ }),
98
+ ttlSeconds: createFlagConfig({
99
+ flag: Flags.string({
100
+ char: "t",
101
+ default: "60",
102
+ description: `ArNS TTL in seconds (${TTL_MIN}-${TTL_MAX})`,
103
+ required: false
104
+ })
105
+ }),
106
+ undername: createFlagConfig({
107
+ flag: Flags.string({
108
+ char: "u",
109
+ default: "@",
110
+ description: "ANT undername to update",
111
+ required: false
112
+ })
113
+ }),
114
+ wallet: createFlagConfig({
115
+ flag: Flags.string({
116
+ char: "w",
117
+ description: "Path to wallet file (JWK for Arweave, private key for others)",
118
+ exclusive: ["private-key"],
119
+ async parse(input) {
120
+ const validation = validateFileExists(input);
121
+ if (validation !== true) {
122
+ throw new Error(validation);
123
+ }
124
+ return input;
125
+ },
126
+ required: false
127
+ })
128
+ }),
129
+ preview: createFlagConfig({
130
+ flag: Flags.boolean({
131
+ description: "Deploy to Load S3 preview endpoint (no ANT update)",
132
+ required: false,
133
+ default: false
134
+ })
135
+ }),
136
+ anchor: createFlagConfig({
137
+ flag: Flags.boolean({
138
+ description: "Anchor a Load S3 preview manifest to Arweave",
139
+ required: false,
140
+ default: false
141
+ })
142
+ }),
143
+ previewId: createFlagConfig({
144
+ flag: Flags.string({
145
+ description: "Load S3 preview manifest ID to anchor",
146
+ required: false
147
+ })
148
+ })
149
+ };
150
+ const deployFlags = {
151
+ "ario-process": globalFlags.arioProcess.flag,
152
+ "arns-name": globalFlags.arnsName.flag,
153
+ "deploy-file": globalFlags.deployFile.flag,
154
+ "deploy-folder": globalFlags.deployFolder.flag,
155
+ "max-token-amount": globalFlags.maxTokenAmount.flag,
156
+ "on-demand": globalFlags.onDemand.flag,
157
+ "private-key": globalFlags.privateKey.flag,
158
+ "sig-type": globalFlags.sigType.flag,
159
+ "ttl-seconds": globalFlags.ttlSeconds.flag,
160
+ undername: globalFlags.undername.flag,
161
+ wallet: globalFlags.wallet.flag,
162
+ preview: globalFlags.preview.flag,
163
+ anchor: globalFlags.anchor.flag,
164
+ "preview-id": globalFlags.previewId.flag
165
+ };
166
+ const arnsFlags = {
167
+ "ario-process": globalFlags.arioProcess.flag,
168
+ "arns-name": globalFlags.arnsName.flag,
169
+ "ttl-seconds": globalFlags.ttlSeconds.flag,
170
+ undername: globalFlags.undername.flag
171
+ };
172
+ const walletFlags = {
173
+ "private-key": globalFlags.privateKey.flag,
174
+ "sig-type": globalFlags.sigType.flag,
175
+ wallet: globalFlags.wallet.flag
176
+ };
177
+ const deployFlagConfigs = {
178
+ "ario-process": globalFlags.arioProcess,
179
+ "arns-name": globalFlags.arnsName,
180
+ "deploy-file": globalFlags.deployFile,
181
+ "deploy-folder": globalFlags.deployFolder,
182
+ "max-token-amount": globalFlags.maxTokenAmount,
183
+ "on-demand": globalFlags.onDemand,
184
+ "private-key": globalFlags.privateKey,
185
+ "sig-type": globalFlags.sigType,
186
+ "ttl-seconds": globalFlags.ttlSeconds,
187
+ undername: globalFlags.undername,
188
+ wallet: globalFlags.wallet,
189
+ preview: globalFlags.preview,
190
+ anchor: globalFlags.anchor,
191
+ "preview-id": globalFlags.previewId
192
+ };
193
+
194
+ export { arnsFlags, deployFlagConfigs, deployFlags, globalFlags, walletFlags };
195
+ //# sourceMappingURL=flags.js.map