permaweb-deploy 3.4.4 → 3.4.5

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.
@@ -1,6 +1,4 @@
1
- import boxen from 'boxen';
2
- import chalk from 'chalk';
3
- import Table from 'cli-table3';
1
+ import { c as chalk } from './upload-workflow-CcYev67_.js';
4
2
 
5
3
  const AO_BASE_UNITS = 1000000000000n;
6
4
  function formatUploadSize(size) {
@@ -15,6 +13,9 @@ function formatUploadCost(cost) {
15
13
  const decimal = fraction === 0n ? whole.toString() : `${whole.toString()}.${fraction.toString().padStart(12, "0").replaceAll(/0+$/g, "")}`;
16
14
  return `${decimal} AO`;
17
15
  }
16
+ function formatDisplayRows(rows) {
17
+ return rows.map(([label, value]) => `${label}: ${value}`).join("\n");
18
+ }
18
19
  function fundingDisplay(section) {
19
20
  const fundingLine = section.split("\n").map((line) => line.trim()).find((line) => line.startsWith("- "))?.replace(/^- /, "");
20
21
  if (!fundingLine) {
@@ -22,39 +23,31 @@ function fundingDisplay(section) {
22
23
  }
23
24
  return fundingLine.replace(/^AO: send funds to /, "Sending AO to ").replace(/\. Local ledger:.*$/, "");
24
25
  }
25
- function uploadErrorTable(message, title = "Upload failed") {
26
- const table = new Table({
27
- style: { head: [] }
28
- });
26
+ function formatUploadError(message, title = "Upload failed") {
27
+ const rows = [];
29
28
  const sections = message.split(/\n{2,}/).map((section) => section.trim()).filter(Boolean);
30
29
  for (const [index, section] of sections.entries()) {
31
30
  if (index === 0) {
32
- table.push(["Error", chalk.red(section)]);
31
+ rows.push(["Error", chalk.red(section)]);
33
32
  continue;
34
33
  }
35
34
  if (section.startsWith("Required upload credit:")) {
36
- table.push([
35
+ rows.push([
37
36
  "Required upload credit",
38
37
  chalk.blue(section.replace(/^Required upload credit:\s*/, ""))
39
38
  ]);
40
39
  continue;
41
40
  }
42
41
  if (section.startsWith("The HyperBEAM node requires AO")) {
43
- table.push(["Funding", fundingDisplay(section)]);
42
+ rows.push(["Funding", fundingDisplay(section)]);
44
43
  continue;
45
44
  }
46
- table.push(["Note", section]);
45
+ rows.push(["Note", section]);
47
46
  }
48
- return boxen(`${chalk.red.bold(title)}
47
+ return `${chalk.bold(chalk.red(title))}
49
48
 
50
- ${table.toString()}`, {
51
- borderColor: "red",
52
- borderStyle: "round",
53
- padding: 1,
54
- title: chalk.bold("Permaweb Deploy"),
55
- titleAlignment: "center"
56
- });
49
+ ${formatDisplayRows(rows)}`;
57
50
  }
58
51
 
59
- export { formatUploadCost as a, formatUploadSize as f, uploadErrorTable as u };
60
- //# sourceMappingURL=display-BgIiyBIu.js.map
52
+ export { formatUploadError as a, formatUploadSize as b, formatUploadCost as c, formatDisplayRows as f };
53
+ //# sourceMappingURL=display-CyJXNtkl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display-CyJXNtkl.js","sources":["../../src/utils/display.ts"],"sourcesContent":["import { chalk } from './chalk.js'\nimport type { UploadCost, UploadSize } from './hyperbeam-uploader.js'\n\nconst AO_BASE_UNITS = 1_000_000_000_000n\n\nexport type DisplayRow = [label: string, value: string]\n\nexport function formatUploadSize(size: UploadSize): string {\n return `${(size.signedBytes ?? size.payloadBytes).toLocaleString()} bytes`\n}\n\nexport function formatUploadCost(cost: UploadCost): string {\n if (cost.token !== 'AO') {\n return `${cost.amount.toString()}`\n }\n\n const whole = cost.amount / AO_BASE_UNITS\n const fraction = cost.amount % AO_BASE_UNITS\n const decimal =\n fraction === 0n\n ? whole.toString()\n : `${whole.toString()}.${fraction.toString().padStart(12, '0').replaceAll(/0+$/g, '')}`\n\n return `${decimal} AO`\n}\n\nexport function formatDisplayRows(rows: DisplayRow[]): string {\n return rows.map(([label, value]) => `${label}: ${value}`).join('\\n')\n}\n\nfunction fundingDisplay(section: string): string {\n const fundingLine = section\n .split('\\n')\n .map((line) => line.trim())\n .find((line) => line.startsWith('- '))\n ?.replace(/^- /, '')\n\n if (!fundingLine) {\n return section\n }\n\n return fundingLine\n .replace(/^AO: send funds to /, 'Sending AO to ')\n .replace(/\\. Local ledger:.*$/, '')\n}\n\nexport function formatUploadError(message: string, title = 'Upload failed'): string {\n const rows: DisplayRow[] = []\n const sections = message\n .split(/\\n{2,}/)\n .map((section) => section.trim())\n .filter(Boolean)\n\n for (const [index, section] of sections.entries()) {\n if (index === 0) {\n rows.push(['Error', chalk.red(section)])\n continue\n }\n\n if (section.startsWith('Required upload credit:')) {\n rows.push([\n 'Required upload credit',\n chalk.blue(section.replace(/^Required upload credit:\\s*/, '')),\n ])\n continue\n }\n\n if (section.startsWith('The HyperBEAM node requires AO')) {\n rows.push(['Funding', fundingDisplay(section)])\n continue\n }\n\n rows.push(['Note', section])\n }\n\n return `${chalk.bold(chalk.red(title))}\\n\\n${formatDisplayRows(rows)}`\n}\n"],"names":[],"mappings":";;AAGA,MAAM,aAAA,GAAgB,cAAA;AAIf,SAAS,iBAAiB,IAAA,EAA0B;AACzD,EAAA,OAAO,IAAI,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,YAAA,EAAc,gBAAgB,CAAA,MAAA,CAAA;AACpE;AAEO,SAAS,iBAAiB,IAAA,EAA0B;AACzD,EAAA,IAAI,IAAA,CAAK,UAAU,IAAA,EAAM;AACvB,IAAA,OAAO,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,QAAA,EAAU,CAAA,CAAA;AAAA,EAClC;AAEA,EAAA,MAAM,KAAA,GAAQ,KAAK,MAAA,GAAS,aAAA;AAC5B,EAAA,MAAM,QAAA,GAAW,KAAK,MAAA,GAAS,aAAA;AAC/B,EAAA,MAAM,OAAA,GACJ,aAAa,EAAA,GACT,KAAA,CAAM,UAAS,GACf,CAAA,EAAG,MAAM,QAAA,EAAU,IAAI,QAAA,CAAS,QAAA,GAAW,QAAA,CAAS,EAAA,EAAI,GAAG,CAAA,CAAE,UAAA,CAAW,MAAA,EAAQ,EAAE,CAAC,CAAA,CAAA;AAEzF,EAAA,OAAO,GAAG,OAAO,CAAA,GAAA,CAAA;AACnB;AAEO,SAAS,kBAAkB,IAAA,EAA4B;AAC5D,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,OAAO,KAAK,CAAA,KAAM,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AACrE;AAEA,SAAS,eAAe,OAAA,EAAyB;AAC/C,EAAA,MAAM,WAAA,GAAc,QACjB,KAAA,CAAM,IAAI,EACV,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,EAAM,EACzB,IAAA,CAAK,CAAC,SAAS,IAAA,CAAK,UAAA,CAAW,IAAI,CAAC,CAAA,EACnC,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAErB,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,OAAO,YACJ,OAAA,CAAQ,qBAAA,EAAuB,gBAAgB,CAAA,CAC/C,OAAA,CAAQ,uBAAuB,EAAE,CAAA;AACtC;AAEO,SAAS,iBAAA,CAAkB,OAAA,EAAiB,KAAA,GAAQ,eAAA,EAAyB;AAClF,EAAA,MAAM,OAAqB,EAAC;AAC5B,EAAA,MAAM,QAAA,GAAW,OAAA,CACd,KAAA,CAAM,QAAQ,CAAA,CACd,GAAA,CAAI,CAAC,OAAA,KAAY,OAAA,CAAQ,IAAA,EAAM,CAAA,CAC/B,OAAO,OAAO,CAAA;AAEjB,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,OAAO,CAAA,IAAK,QAAA,CAAS,SAAQ,EAAG;AACjD,IAAA,IAAI,UAAU,CAAA,EAAG;AACf,MAAA,IAAA,CAAK,KAAK,CAAC,OAAA,EAAS,MAAM,GAAA,CAAI,OAAO,CAAC,CAAC,CAAA;AACvC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,yBAAyB,CAAA,EAAG;AACjD,MAAA,IAAA,CAAK,IAAA,CAAK;AAAA,QACR,wBAAA;AAAA,QACA,MAAM,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,6BAAA,EAA+B,EAAE,CAAC;AAAA,OAC9D,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,gCAAgC,CAAA,EAAG;AACxD,MAAA,IAAA,CAAK,KAAK,CAAC,SAAA,EAAW,cAAA,CAAe,OAAO,CAAC,CAAC,CAAA;AAC9C,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,IAAA,CAAK,CAAC,MAAA,EAAQ,OAAO,CAAC,CAAA;AAAA,EAC7B;AAEA,EAAA,OAAO,GAAG,KAAA,CAAM,IAAA,CAAK,MAAM,GAAA,CAAI,KAAK,CAAC,CAAC;;AAAA,EAAO,iBAAA,CAAkB,IAAI,CAAC,CAAA,CAAA;AACtE;;;;"}
@@ -1,7 +1,6 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { TurboFactory, ETHToTokenAmount, ARIOToTokenAmount, OnDemandFunding } from '@ardrive/turbo-sdk';
4
- import chalk from 'chalk';
5
4
  import ora from 'ora';
6
5
  import { l as loadCache, u as uploadFile, c as cleanupCache, s as saveCache, a as uploadFolder } from './uploader-CIHu22Fw.js';
7
6
  import { createHash } from 'node:crypto';
@@ -11,6 +10,53 @@ import { createDataItemSigner, message } from '@permaweb/aoconnect';
11
10
  import { expandPath } from '../utils/path.js';
12
11
  import { createSigner } from '../utils/signer.js';
13
12
 
13
+ const RESET = "\x1B[0m";
14
+ const WHITE = "\x1B[37m";
15
+ const BG_BLACK = "\x1B[40m";
16
+ const colorCodes = [
17
+ ["bold", "\x1B[1m"],
18
+ ["dim", "\x1B[2m"],
19
+ ["italic", "\x1B[3m"],
20
+ ["underline", "\x1B[4m"],
21
+ ["inverse", "\x1B[7m"],
22
+ ["strikethrough", "\x1B[9m"],
23
+ ["black", "\x1B[30m"],
24
+ ["red", "\x1B[31m"],
25
+ ["green", "\x1B[32m"],
26
+ ["yellow", "\x1B[33m"],
27
+ ["blue", "\x1B[34m"],
28
+ ["magenta", "\x1B[35m"],
29
+ ["cyan", "\x1B[36m"],
30
+ ["white", WHITE],
31
+ ["gray", "\x1B[90m"],
32
+ ["grey", "\x1B[90m"],
33
+ ["blackBright", "\x1B[90m"],
34
+ ["redBright", "\x1B[91m"],
35
+ ["greenBright", "\x1B[92m"],
36
+ ["yellowBright", "\x1B[93m"],
37
+ ["blueBright", "\x1B[94m"],
38
+ ["magentaBright", "\x1B[95m"],
39
+ ["cyanBright", "\x1B[96m"],
40
+ ["whiteBright", "\x1B[97m"],
41
+ ["bgBlack", BG_BLACK],
42
+ ["bgRed", "\x1B[41m"],
43
+ ["bgGreen", "\x1B[42m"],
44
+ ["bgYellow", "\x1B[43m"],
45
+ ["bgBlue", "\x1B[44m"],
46
+ ["bgMagenta", "\x1B[45m"],
47
+ ["bgCyan", "\x1B[46m"],
48
+ ["bgWhite", "\x1B[47m"],
49
+ ["bgBlackBright", "\x1B[100m"]
50
+ ];
51
+ const createColorFunction = (code) => (text) => `${code}${String(text)}${RESET}`;
52
+ const colorFunctions = {};
53
+ for (const [name, code] of colorCodes) {
54
+ colorFunctions[name] = createColorFunction(code);
55
+ }
56
+ const chalk = Object.assign(colorFunctions, {
57
+ highlight: (text) => `${BG_BLACK}${WHITE}${String(text)} ${RESET}`
58
+ });
59
+
14
60
  class HyperbalanceError extends Error {
15
61
  cause;
16
62
  constructor(message, cause) {
@@ -1063,5 +1109,5 @@ async function runUploadWorkflow(deployKey, config, io) {
1063
1109
  };
1064
1110
  }
1065
1111
 
1066
- export { hyperbeamBundlerLink as h, runUploadWorkflow as r };
1067
- //# sourceMappingURL=upload-workflow-DMKlwZve.js.map
1112
+ export { chalk as c, hyperbeamBundlerLink as h, runUploadWorkflow as r };
1113
+ //# sourceMappingURL=upload-workflow-CcYev67_.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-workflow-CcYev67_.js","sources":["../../src/utils/chalk.ts","../../node_modules/.pnpm/hyperbalance@https+++codeload.github.com+xylophonez+hyperbalance+tar.gz+dcb009349368197c88586e4eba784bb5290203cb/node_modules/hyperbalance/dist/errors.js","../../node_modules/.pnpm/hyperbalance@https+++codeload.github.com+xylophonez+hyperbalance+tar.gz+dcb009349368197c88586e4eba784bb5290203cb/node_modules/hyperbalance/dist/discovery.js","../../node_modules/.pnpm/hyperbalance@https+++codeload.github.com+xylophonez+hyperbalance+tar.gz+dcb009349368197c88586e4eba784bb5290203cb/node_modules/hyperbalance/dist/lookup.js","../../node_modules/.pnpm/hyperbalance@https+++codeload.github.com+xylophonez+hyperbalance+tar.gz+dcb009349368197c88586e4eba784bb5290203cb/node_modules/hyperbalance/dist/parse.js","../../node_modules/.pnpm/hyperbalance@https+++codeload.github.com+xylophonez+hyperbalance+tar.gz+dcb009349368197c88586e4eba784bb5290203cb/node_modules/hyperbalance/dist/templates.js","../../node_modules/.pnpm/hyperbalance@https+++codeload.github.com+xylophonez+hyperbalance+tar.gz+dcb009349368197c88586e4eba784bb5290203cb/node_modules/hyperbalance/dist/client.js","../../node_modules/.pnpm/hyperbalance@https+++codeload.github.com+xylophonez+hyperbalance+tar.gz+dcb009349368197c88586e4eba784bb5290203cb/node_modules/hyperbalance/dist/adapters/ao.js","../../node_modules/.pnpm/hyperbalance@https+++codeload.github.com+xylophonez+hyperbalance+tar.gz+dcb009349368197c88586e4eba784bb5290203cb/node_modules/hyperbalance/dist/conventions.js","../../src/utils/hyperbeam-uploader.ts","../../src/workflows/upload-workflow.ts"],"sourcesContent":["const RESET = '\\u001B[0m'\nconst WHITE = '\\u001B[37m'\nconst BG_BLACK = '\\u001B[40m'\n\nconst colorCodes = [\n ['bold', '\\u001B[1m'],\n ['dim', '\\u001B[2m'],\n ['italic', '\\u001B[3m'],\n ['underline', '\\u001B[4m'],\n ['inverse', '\\u001B[7m'],\n ['strikethrough', '\\u001B[9m'],\n\n ['black', '\\u001B[30m'],\n ['red', '\\u001B[31m'],\n ['green', '\\u001B[32m'],\n ['yellow', '\\u001B[33m'],\n ['blue', '\\u001B[34m'],\n ['magenta', '\\u001B[35m'],\n ['cyan', '\\u001B[36m'],\n ['white', WHITE],\n ['gray', '\\u001B[90m'],\n ['grey', '\\u001B[90m'],\n\n ['blackBright', '\\u001B[90m'],\n ['redBright', '\\u001B[91m'],\n ['greenBright', '\\u001B[92m'],\n ['yellowBright', '\\u001B[93m'],\n ['blueBright', '\\u001B[94m'],\n ['magentaBright', '\\u001B[95m'],\n ['cyanBright', '\\u001B[96m'],\n ['whiteBright', '\\u001B[97m'],\n\n ['bgBlack', BG_BLACK],\n ['bgRed', '\\u001B[41m'],\n ['bgGreen', '\\u001B[42m'],\n ['bgYellow', '\\u001B[43m'],\n ['bgBlue', '\\u001B[44m'],\n ['bgMagenta', '\\u001B[45m'],\n ['bgCyan', '\\u001B[46m'],\n ['bgWhite', '\\u001B[47m'],\n ['bgBlackBright', '\\u001B[100m'],\n] as const\n\ntype ColorName = (typeof colorCodes)[number][0]\ntype ColorFunction = (text: unknown) => string\ntype Chalk = {\n highlight: ColorFunction\n} & Record<ColorName, ColorFunction>\n\nconst createColorFunction =\n (code: string): ColorFunction =>\n (text) =>\n `${code}${String(text)}${RESET}`\n\nconst colorFunctions = {} as Record<ColorName, ColorFunction>\n\nfor (const [name, code] of colorCodes) {\n colorFunctions[name] = createColorFunction(code)\n}\n\nexport const chalk: Chalk = Object.assign(colorFunctions, {\n highlight: (text: unknown) => `${BG_BLACK}${WHITE}${String(text)} ${RESET}`,\n})\n","export class HyperbalanceError extends Error {\n cause;\n constructor(message, cause) {\n super(message);\n this.cause = cause;\n this.name = \"HyperbalanceError\";\n }\n}\nexport class MissingDiscoveryError extends HyperbalanceError {\n attemptedUrls;\n constructor(attemptedUrls) {\n super(`No hyperbalance discovery endpoint found: ${attemptedUrls.join(\", \")}`);\n this.attemptedUrls = attemptedUrls;\n this.name = \"MissingDiscoveryError\";\n }\n}\nexport class PaymentRequiredError extends HyperbalanceError {\n required;\n available;\n constructor(message, required, available) {\n super(message);\n this.required = required;\n this.available = available;\n this.name = \"PaymentRequiredError\";\n }\n}\n","import { MissingDiscoveryError } from \"./errors.js\";\nexport const DEFAULT_DISCOVERY_PATHS = [\"/.well-known/hyperbalance\"];\nexport function normalizeNodeUrl(nodeUrl) {\n return nodeUrl.replace(/\\/+$/, \"\");\n}\nexport async function discoverPaymentProfile(nodeUrl, options = {}) {\n const fetcher = options.fetch ?? globalThis.fetch;\n const base = normalizeNodeUrl(nodeUrl);\n const paths = options.paths ?? DEFAULT_DISCOVERY_PATHS;\n const attemptedUrls = [];\n for (const path of paths) {\n const url = `${base}${path.startsWith(\"/\") ? path : `/${path}`}`;\n attemptedUrls.push(url);\n const response = await fetcher(url, { headers: { accept: \"application/json\" } }).catch(() => undefined);\n if (!response?.ok)\n continue;\n const profile = (await response.json());\n validateProfile(profile);\n return profile;\n }\n throw new MissingDiscoveryError(attemptedUrls);\n}\nfunction validateProfile(profile) {\n if (!profile || typeof profile !== \"object\") {\n throw new Error(\"Invalid hyperbalance profile: expected object\");\n }\n if (!Array.isArray(profile.ledgers)) {\n throw new Error(\"Invalid hyperbalance profile: ledgers must be an array\");\n }\n if (!Array.isArray(profile.tokens)) {\n throw new Error(\"Invalid hyperbalance profile: tokens must be an array\");\n }\n}\n","export function getLedger(profile, ledgerId) {\n const ledger = profile.ledgers.find((candidate) => candidate.id === ledgerId);\n if (!ledger) {\n throw new Error(`Ledger not found in payment profile: ${ledgerId}`);\n }\n return ledger;\n}\nexport function getToken(profile, tokenId) {\n const token = profile.tokens.find((candidate) => candidate.id === tokenId);\n if (!token) {\n throw new Error(`Token not found in payment profile: ${tokenId}`);\n }\n return token;\n}\n","export async function parseBalanceResponse(response) {\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n const raw = await response.text();\n if (contentType.includes(\"application/json\")) {\n const parsed = JSON.parse(raw);\n return parseBalanceValue(parsed);\n }\n return BigInt(raw.trim());\n}\nexport async function parseQuoteResponse(response) {\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n const raw = await response.text();\n if (contentType.includes(\"application/json\")) {\n const parsed = JSON.parse(raw);\n const quote = parseQuoteValue(parsed);\n return { ...quote, raw: parsed };\n }\n return { amount: BigInt(raw.trim()), raw };\n}\nfunction parseBalanceValue(value) {\n if (typeof value === \"bigint\")\n return value;\n if (typeof value === \"number\")\n return BigInt(value);\n if (typeof value === \"string\")\n return BigInt(value);\n if (value && typeof value === \"object\") {\n const record = value;\n for (const key of [\"balance\", \"value\", \"amount\", \"ok\"]) {\n if (key in record)\n return parseBalanceValue(record[key]);\n }\n }\n throw new Error(\"Could not parse ledger balance response\");\n}\nfunction parseQuoteValue(value) {\n if (typeof value === \"bigint\" || typeof value === \"number\" || typeof value === \"string\") {\n return { amount: BigInt(value) };\n }\n if (value && typeof value === \"object\") {\n const record = value;\n const amountKey = [\"amount\", \"price\", \"quote\", \"value\", \"ok\"].find((key) => key in record);\n if (!amountKey) {\n throw new Error(\"Could not parse quote amount response\");\n }\n const quote = parseQuoteValue(record[amountKey]);\n const ledgerId = typeof record.ledgerId === \"string\" ? record.ledgerId : undefined;\n const tokenId = typeof record.tokenId === \"string\" ? record.tokenId : undefined;\n return {\n amount: quote.amount,\n ...(ledgerId !== undefined && { ledgerId }),\n ...(tokenId !== undefined && { tokenId }),\n };\n }\n throw new Error(\"Could not parse quote amount response\");\n}\n","export function applyTemplate(template, values) {\n return template.replaceAll(/\\{([A-Za-z0-9_-]+)\\}/g, (_match, key) => {\n const value = values[key];\n if (value === undefined) {\n throw new Error(`Missing template value: ${key}`);\n }\n return encodeURIComponent(String(value));\n });\n}\nexport function applyTemplateMap(templates, values) {\n if (!templates)\n return {};\n return Object.fromEntries(Object.entries(templates).map(([key, template]) => [key, applyTemplate(template, values)]));\n}\n","import { discoverPaymentProfile, normalizeNodeUrl } from \"./discovery.js\";\nimport { PaymentRequiredError } from \"./errors.js\";\nimport { getLedger, getToken } from \"./lookup.js\";\nimport { parseBalanceResponse, parseQuoteResponse } from \"./parse.js\";\nimport { applyTemplate, applyTemplateMap } from \"./templates.js\";\nexport class HyperbalanceClient {\n fetch;\n nodeUrl;\n constructor(options) {\n this.fetch = options.fetch ?? globalThis.fetch;\n this.nodeUrl = normalizeNodeUrl(options.nodeUrl);\n }\n discover(options = {}) {\n return discoverPaymentProfile(this.nodeUrl, { ...options, fetch: this.fetch });\n }\n async getBalance(request) {\n const ledger = getLedger(request.profile, request.ledgerId);\n const path = applyTemplate(ledger.balancePath, { address: request.address });\n const response = await this.fetch(this.absoluteUrl(path), {\n headers: { accept: \"application/json, text/plain\" },\n });\n if (response.status === 404) {\n return {\n address: request.address,\n ledger,\n value: 0n,\n };\n }\n if (!response.ok) {\n throw new Error(`Balance request failed: ${response.status} ${response.statusText}`);\n }\n return {\n address: request.address,\n ledger,\n value: await parseBalanceResponse(response),\n };\n }\n async ensureCredit(request) {\n const token = getToken(request.profile, request.tokenId);\n const ledger = getLedger(request.profile, request.ledgerId);\n const before = await this.getBalance({\n address: request.recipient,\n ledgerId: ledger.id,\n profile: request.profile,\n });\n if (before.value >= request.minimumBalance) {\n return {\n after: before,\n before,\n shortfall: 0n,\n };\n }\n const shortfall = request.minimumBalance - before.value;\n const depositAddress = token.depositAddress ?? request.profile.node?.operator;\n if (!depositAddress) {\n throw new PaymentRequiredError(\"Payment is required, but the node did not advertise a deposit address\", request.minimumBalance, before.value);\n }\n if (token.transfer?.kind && token.transfer.kind !== request.transferAdapter.kind) {\n throw new Error(`Transfer adapter kind mismatch: token expects ${token.transfer.kind}, got ${request.transferAdapter.kind}`);\n }\n const sender = await request.transferAdapter.inferSender?.();\n const transferRequest = {\n amount: shortfall,\n depositAddress,\n recipient: request.recipient,\n token,\n };\n if (sender !== undefined)\n transferRequest.sender = sender;\n const transfer = await request.transferAdapter.transfer(transferRequest);\n const importRequest = {\n amount: shortfall,\n ledger,\n profile: request.profile,\n recipient: request.recipient,\n token,\n transfer,\n };\n const importSender = transfer.sender ?? sender;\n if (importSender !== undefined)\n importRequest.sender = importSender;\n const imported = await this.importDeposit(importRequest);\n const after = await this.getBalance({\n address: request.recipient,\n ledgerId: ledger.id,\n profile: request.profile,\n });\n return {\n after,\n before,\n imported,\n shortfall,\n transfer,\n };\n }\n async ensureCreditAuto(request) {\n const profile = request.profile ?? (await this.discover());\n const targetOptions = {\n transferKind: request.transferAdapter.kind,\n };\n if (request.ledgerId !== undefined)\n targetOptions.ledgerId = request.ledgerId;\n if (request.tokenId !== undefined)\n targetOptions.tokenId = request.tokenId;\n const { ledger, token } = selectFundingTarget(profile, targetOptions);\n return this.ensureCredit({\n ledgerId: ledger.id,\n minimumBalance: request.minimumBalance,\n profile,\n recipient: request.recipient,\n tokenId: token.id,\n transferAdapter: request.transferAdapter,\n });\n }\n async quote(request) {\n const descriptor = request.profile.pricing?.find((candidate) => candidate.action === request.action);\n if (!descriptor?.quotePath) {\n throw new Error(`No quote path advertised for action: ${request.action}`);\n }\n const values = request.params ?? {};\n const url = new URL(this.absoluteUrl(applyTemplate(descriptor.quotePath, values)));\n for (const [key, value] of Object.entries(applyTemplateMap(descriptor.query, values))) {\n url.searchParams.set(key, value);\n }\n const bodyValues = applyTemplateMap(descriptor.body, values);\n const hasBody = Object.keys(bodyValues).length > 0;\n const init = {\n headers: { accept: \"application/json, text/plain\" },\n method: descriptor.method ?? (hasBody ? \"POST\" : \"GET\"),\n };\n if (hasBody) {\n init.body = JSON.stringify(bodyValues);\n init.headers = { ...init.headers, \"content-type\": \"application/json\" };\n }\n const response = await this.fetch(url, init);\n if (!response.ok) {\n throw new Error(`Quote request failed: ${response.status} ${response.statusText}`);\n }\n return parseQuoteResponse(response);\n }\n async quoteAuto(request) {\n const quoteRequest = {\n action: request.action,\n profile: request.profile ?? (await this.discover()),\n };\n if (request.params !== undefined)\n quoteRequest.params = request.params;\n return this.quote(quoteRequest);\n }\n async importDeposit(request) {\n const descriptor = request.token.import;\n if (!descriptor) {\n throw new Error(`Token does not advertise a deposit import flow: ${request.token.id}`);\n }\n const values = {\n ledgerId: request.ledger.id,\n messageId: request.transfer.messageId,\n quantity: request.amount,\n recipient: request.recipient,\n sender: request.sender,\n slot: request.transfer.slot,\n tokenId: request.token.id,\n };\n const url = new URL(this.absoluteUrl(descriptor.path));\n for (const [key, value] of Object.entries(applyTemplateMap(descriptor.query, values))) {\n url.searchParams.set(key, value);\n }\n const bodyValues = applyTemplateMap(descriptor.body, values);\n const hasBody = Object.keys(bodyValues).length > 0;\n const init = {\n method: descriptor.method ?? \"POST\",\n };\n if (hasBody) {\n init.body = JSON.stringify(bodyValues);\n init.headers = { \"content-type\": \"application/json\" };\n }\n const response = await this.fetch(url, init);\n if (!response.ok) {\n throw new Error(`Deposit import failed: ${response.status} ${response.statusText}`);\n }\n const text = await response.text();\n if (!text.trim())\n return undefined;\n try {\n return JSON.parse(text);\n }\n catch {\n return text;\n }\n }\n absoluteUrl(pathOrUrl) {\n if (/^https?:\\/\\//.test(pathOrUrl))\n return pathOrUrl;\n return `${this.nodeUrl}${pathOrUrl.startsWith(\"/\") ? pathOrUrl : `/${pathOrUrl}`}`;\n }\n}\nexport function selectFundingTarget(profile, options = {}) {\n const token = options.tokenId\n ? getToken(profile, options.tokenId)\n : profile.tokens.find((candidate) => (!options.transferKind || candidate.transfer?.kind === options.transferKind) &&\n (!options.ledgerId || candidate.ledgerId === options.ledgerId));\n if (!token) {\n throw new Error(\"No matching funding token found in payment profile\");\n }\n const ledgerId = options.ledgerId ?? token.ledgerId;\n if (!ledgerId) {\n throw new Error(`Funding token does not specify a ledger: ${token.id}`);\n }\n return {\n ledger: getLedger(profile, ledgerId),\n token,\n };\n}\n","import { applyTemplateMap } from \"../templates.js\";\nexport class AoTokenTransferAdapter {\n options;\n kind = \"ao\";\n inferSender;\n constructor(options) {\n this.options = options;\n if (options.inferSender) {\n this.inferSender = options.inferSender;\n }\n }\n async transfer(request) {\n const transfer = request.token.transfer;\n assertAoTransferDescriptor(request.token, transfer);\n const tags = buildAoTransferTags(request, transfer);\n const messageId = await this.options.message({\n data: \"\",\n process: transfer.processId,\n tags,\n });\n const slot = await this.options.waitForAssignmentSlot?.(messageId, {\n processId: transfer.processId,\n });\n const result = { messageId };\n if (request.sender !== undefined)\n result.sender = request.sender;\n if (slot !== undefined)\n result.slot = slot;\n return result;\n }\n}\nexport async function waitForAoAssignmentSlot(options) {\n const fetcher = options.fetch ?? globalThis.fetch;\n const stateUrl = (options.stateUrl ?? \"https://state.forward.computer\").replace(/\\/+$/, \"\");\n const pollMs = options.pollMs ?? 5000;\n const timeoutMs = options.timeoutMs ?? 360000;\n const fromSlot = Math.max(0, (await currentSlot(fetcher, stateUrl, options.processId)) - 5);\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n const toSlot = (await currentSlot(fetcher, stateUrl, options.processId)) + 20;\n const url = `${stateUrl}/${options.processId}~process@1.0/schedule` +\n `?from=${fromSlot}&to=${toSlot}&accept=application/aos-2`;\n const response = await fetcher(url);\n if (!response.ok) {\n throw new Error(`AO schedule request failed: ${response.status} ${response.statusText}`);\n }\n const schedule = (await response.json());\n for (const edge of schedule.edges ?? []) {\n if (edge.node?.message?.Id === options.messageId) {\n const slot = edge.node.assignment?.Tags?.find((tag) => tag.name === \"Nonce\")?.value;\n if (!slot) {\n throw new Error(`AO assignment is missing Nonce for message ${options.messageId}`);\n }\n return slot;\n }\n }\n await sleep(pollMs);\n }\n throw new Error(`AO message did not appear in schedule: ${options.messageId}`);\n}\nasync function currentSlot(fetcher, stateUrl, processId) {\n const response = await fetcher(`${stateUrl}/${processId}~process@1.0/slot/current`);\n if (!response.ok) {\n throw new Error(`AO current slot request failed: ${response.status} ${response.statusText}`);\n }\n const text = await response.text();\n const match = text.match(/\\d+/);\n if (!match) {\n throw new Error(`Could not parse AO current slot: ${text}`);\n }\n return Number(match[0]);\n}\nfunction sleep(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\nexport function buildAoTransferTags(request, transfer) {\n const tags = applyTemplateMap(transfer.tags, {\n depositAddress: request.depositAddress,\n quantity: request.amount,\n recipient: request.recipient,\n sender: request.sender,\n tokenId: request.token.id,\n });\n return Object.entries(tags).map(([name, value]) => ({ name, value }));\n}\nfunction assertAoTransferDescriptor(token, transfer) {\n if (!transfer) {\n throw new Error(`AO token does not advertise a transfer flow: ${token.id}`);\n }\n if (transfer.kind !== \"ao\") {\n throw new Error(`Token transfer kind is not AO: ${transfer.kind}`);\n }\n if (!transfer.processId) {\n throw new Error(`AO token is missing transfer.processId: ${token.id}`);\n }\n}\n","import { normalizeNodeUrl } from \"./discovery.js\";\nexport const DEFAULT_AO_TOKEN_ID = \"0syT13r0s0tgPmIed95bJnuSqaD29HQNN8D3ElLSrsc\";\nexport const HYPERBEAM_AO_BUNDLER_QUOTE_ACTION = \"hyperbeam-upload\";\nexport const HYPERBEAM_DEFAULT_LEDGER_ID = \"default\";\nexport const HYPERBEAM_DEFAULT_LEDGER_ROUTE = \"/ledger~node-process@1.0\";\nexport async function discoverHyperbeamAoBundlerProfile(options) {\n const fetcher = options.fetch ?? globalThis.fetch;\n const nodeUrl = normalizeNodeUrl(options.nodeUrl);\n const ledgerId = options.ledgerId ?? HYPERBEAM_DEFAULT_LEDGER_ID;\n const ledgerRoute = options.ledgerRoute ?? HYPERBEAM_DEFAULT_LEDGER_ROUTE;\n const tokenId = options.tokenId ?? DEFAULT_AO_TOKEN_ID;\n const depositAddress = await fetchHyperbeamOperatorAddress(fetcher, nodeUrl);\n return {\n ledgers: [\n {\n balancePath: `${ledgerRoute}/now/balance/{address}`,\n id: ledgerId,\n route: ledgerRoute,\n type: \"process-ledger@1.0\",\n unit: \"AO\",\n },\n ],\n node: {\n operator: depositAddress,\n url: nodeUrl,\n },\n pricing: [\n {\n action: HYPERBEAM_AO_BUNDLER_QUOTE_ACTION,\n query: {\n amount: \"{bytes}\",\n resource: \"arweave-bytes\",\n },\n quotePath: \"/~metering@1.0/quote\",\n },\n ],\n tokens: [\n {\n decimals: 12,\n depositAddress,\n id: tokenId,\n import: {\n method: \"POST\",\n path: \"/~ao-payment@1.0/ingest\",\n query: {\n \"message-id\": \"{messageId}\",\n quantity: \"{quantity}\",\n recipient: \"{recipient}\",\n sender: \"{sender}\",\n slot: \"{slot}\",\n token: \"{tokenId}\",\n },\n },\n ledgerId,\n network: \"ao\",\n ticker: \"AO\",\n transfer: {\n kind: \"ao\",\n processId: tokenId,\n tags: {\n Action: \"Transfer\",\n Quantity: \"{quantity}\",\n Recipient: \"{depositAddress}\",\n },\n },\n },\n ],\n version: \"hyperbalance@0.1\",\n };\n}\nasync function fetchHyperbeamOperatorAddress(fetcher, nodeUrl) {\n const response = await fetcher(`${nodeUrl}/~meta@1.0/info/address`, {\n headers: { accept: \"text/plain\" },\n });\n if (!response.ok) {\n throw new Error(`HyperBEAM operator address request failed: ${response.status} ${response.statusText}`);\n }\n const address = (await response.text()).trim();\n if (!address) {\n throw new Error(\"HyperBEAM operator address response was empty\");\n }\n return address;\n}\n","import { createHash } from 'node:crypto'\nimport fs from 'node:fs'\nimport { createRequire } from 'node:module'\nimport { Readable } from 'node:stream'\n\nimport { createDataItemSigner, message as aoMessage } from '@permaweb/aoconnect'\nimport {\n AoTokenTransferAdapter,\n DEFAULT_AO_TOKEN_ID,\n discoverHyperbeamAoBundlerProfile,\n type FundingResult,\n HyperbalanceClient,\n type HyperbalanceProfile,\n HYPERBEAM_DEFAULT_LEDGER_ID,\n HYPERBEAM_DEFAULT_LEDGER_ROUTE,\n waitForAoAssignmentSlot,\n} from 'hyperbalance'\n\nconst require = createRequire(import.meta.url)\nconst { ArweaveSigner, DataItem, createData } = require('@dha-team/arbundles') as {\n ArweaveSigner: new (jwk: Record<string, unknown>) => unknown\n DataItem: new (raw: Buffer) => { id: string | Uint8Array }\n createData: (\n data: Buffer,\n signer: unknown,\n opts?: { tags?: Array<{ name: string; value: string }> },\n ) => {\n getRaw: () => Uint8Array\n id?: string\n sign: (signer: unknown) => Promise<void>\n }\n}\n\nexport interface UploadFileArgs {\n dataItemOpts?: { tags?: Array<{ name: string; value: string }> }\n file?: string | Buffer\n fileSizeFactory?: () => number\n fileStreamFactory?: () => unknown\n fundingMode?: unknown\n}\n\nexport interface UploadClient {\n uploadFile: (args: UploadFileArgs) => Promise<UploadClientResult>\n}\n\nexport interface UploadClientResult {\n cost?: UploadCost\n id?: string\n size?: UploadSize\n}\n\nexport interface UploadCost {\n amount: bigint\n token: 'AO'\n}\n\nexport interface UploadSize {\n payloadBytes: number\n signedBytes?: number\n}\n\nconst AO_BASE_UNITS = 1_000_000_000_000n\nconst ARWEAVE_GATEWAY = 'https://arweave.net'\n\nexport interface HyperbeamBundlerOptions {\n autoFund?: HyperbeamBundlerAutoFundOptions\n deployKey: string\n quote?: HyperbeamBundlerQuoteOptions\n uploadPath: string\n uploader: string\n}\n\nexport interface HyperbeamAutoFundOptions {\n aoPollMs?: number\n aoStateUrl?: string\n aoTimeoutMs?: number\n deployKey: string\n ledgerId?: string\n minimumBalance: bigint\n tokenId?: string\n uploader: string\n}\n\nexport interface HyperbeamBundlerAutoFundOptions {\n aoPollMs?: number\n aoStateUrl?: string\n aoTimeoutMs?: number\n deployKey: string\n ledgerId?: string\n minimumBalance?: bigint\n quoteAction?: string\n tokenId?: string\n uploader: string\n}\n\nexport interface HyperbeamBundlerQuoteOptions {\n ledgerId?: string\n quoteAction?: string\n tokenId?: string\n uploader: string\n}\n\nasync function readableToBuffer(stream: Readable): Promise<Buffer> {\n const chunks: Buffer[] = []\n\n for await (const chunk of stream) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk))\n }\n\n return Buffer.concat(chunks)\n}\n\nasync function streamToBuffer(stream: unknown): Promise<Buffer> {\n if (Buffer.isBuffer(stream)) {\n return stream\n }\n\n if (stream instanceof Uint8Array) {\n return Buffer.from(stream)\n }\n\n if (stream instanceof Readable) {\n return readableToBuffer(stream)\n }\n\n if (stream && typeof (stream as { getReader?: unknown }).getReader === 'function') {\n return readableToBuffer(Readable.fromWeb(stream as ReadableStream))\n }\n\n throw new Error('Unsupported upload stream type')\n}\n\nfunction toBase64Url(value: string | Uint8Array): string {\n if (typeof value === 'string') {\n return value\n }\n\n return Buffer.from(value).toString('base64url')\n}\n\nfunction normalizeUploadUrl(base: string, uploadPath: string): string {\n const normalizedBase = base.endsWith('/') ? base : `${base}/`\n const cleanPath = uploadPath.startsWith('/') ? uploadPath.slice(1) : uploadPath\n return new URL(cleanPath, normalizedBase).toString()\n}\n\nfunction arweaveAddressFromJwk(jwk: Record<string, unknown>): string {\n if (typeof jwk.n !== 'string') {\n throw new TypeError('Arweave JWK is missing modulus field \"n\"')\n }\n\n return createHash('sha256').update(Buffer.from(jwk.n, 'base64url')).digest('base64url')\n}\n\nexport function parseHyperbeamFundAmount(value: string): bigint {\n if (!/^[1-9]\\d*$/.test(value)) {\n throw new Error('--hyperbeam-fund-amount must be a positive integer in token base units')\n }\n\n return BigInt(value)\n}\n\nfunction formatAoAmount(amount: bigint): string {\n const whole = amount / AO_BASE_UNITS\n const fraction = amount % AO_BASE_UNITS\n\n if (fraction === 0n) {\n return `${whole.toString()} AO`\n }\n\n return `${whole.toString()}.${fraction.toString().padStart(12, '0').replaceAll(/0+$/g, '')} AO`\n}\n\nfunction responsePreview(body: string): string | undefined {\n const preview = body.replaceAll(/\\s+/g, ' ').trim()\n if (!preview) {\n return undefined\n }\n\n if (/^(<!doctype html\\b|<html\\b)/i.test(preview)) {\n return 'HTML error response'\n }\n\n return preview.slice(0, 300)\n}\n\nexport async function autoFundHyperbeamLedger(\n options: HyperbeamAutoFundOptions,\n): Promise<FundingResult> {\n const profile = await discoverHyperbeamAoBundlerProfile({\n ledgerId: options.ledgerId,\n nodeUrl: options.uploader,\n tokenId: options.tokenId,\n })\n\n return ensureHyperbeamCredit(options, profile)\n}\n\nasync function ensureHyperbeamCredit(\n options: HyperbeamAutoFundOptions,\n profile: HyperbalanceProfile,\n): Promise<FundingResult> {\n const jwk = JSON.parse(Buffer.from(options.deployKey, 'base64').toString('utf8')) as Record<\n string,\n unknown\n >\n const recipient = arweaveAddressFromJwk(jwk)\n const signer = createDataItemSigner(jwk)\n const client = new HyperbalanceClient({ nodeUrl: options.uploader })\n const adapter = new AoTokenTransferAdapter({\n async inferSender() {\n return recipient\n },\n async message(input) {\n return aoMessage({\n data: input.data ?? '',\n process: input.process,\n signer,\n tags: input.tags,\n })\n },\n async waitForAssignmentSlot(messageId, context) {\n return waitForAoAssignmentSlot({\n messageId,\n pollMs: options.aoPollMs,\n processId: context.processId,\n stateUrl: options.aoStateUrl,\n timeoutMs: options.aoTimeoutMs,\n })\n },\n })\n\n return client.ensureCreditAuto({\n ledgerId: options.ledgerId,\n minimumBalance: options.minimumBalance,\n profile,\n recipient,\n tokenId: options.tokenId ?? DEFAULT_AO_TOKEN_ID,\n transferAdapter: adapter,\n })\n}\n\nexport async function autoFundQuotedHyperbeamLedger(\n options: { signedBytes: number } & HyperbeamBundlerAutoFundOptions,\n): Promise<FundingResult> {\n const profile = await discoverHyperbeamAoBundlerProfile({\n ledgerId: options.ledgerId,\n nodeUrl: options.uploader,\n tokenId: options.tokenId,\n })\n const client = new HyperbalanceClient({ nodeUrl: options.uploader })\n let { ledgerId } = options\n let { minimumBalance } = options\n let { tokenId } = options\n\n if (minimumBalance === undefined) {\n const quote = await client.quoteAuto({\n action: options.quoteAction ?? 'hyperbeam-upload',\n params: { bytes: options.signedBytes },\n profile,\n })\n minimumBalance = quote.amount\n ledgerId ??= quote.ledgerId\n tokenId ??= quote.tokenId\n }\n\n return ensureHyperbeamCredit(\n {\n aoPollMs: options.aoPollMs,\n aoStateUrl: options.aoStateUrl,\n aoTimeoutMs: options.aoTimeoutMs,\n deployKey: options.deployKey,\n ledgerId,\n minimumBalance,\n tokenId,\n uploader: options.uploader,\n },\n profile,\n )\n}\n\nexport async function quoteHyperbeamUpload(\n options: { signedBytes: number } & HyperbeamBundlerQuoteOptions,\n): Promise<{ amount: bigint; ledgerId?: string; tokenId?: string }> {\n const profile = await discoverHyperbeamAoBundlerProfile({\n ledgerId: options.ledgerId,\n nodeUrl: options.uploader,\n tokenId: options.tokenId,\n })\n const quote = await new HyperbalanceClient({ nodeUrl: options.uploader }).quoteAuto({\n action: options.quoteAction ?? 'hyperbeam-upload',\n params: { bytes: options.signedBytes },\n profile,\n })\n\n return { amount: quote.amount, ledgerId: quote.ledgerId, tokenId: quote.tokenId }\n}\n\nexport function hyperbeamBundlerLink(uploader: string, id: string, isManifest = false): string {\n const normalizedBase = uploader.endsWith('/') ? uploader : `${uploader}/`\n return new URL(`${encodeURIComponent(id)}${isManifest ? '/' : ''}`, normalizedBase).toString()\n}\n\nasync function preflightHyperbeamBundlerArBalance(uploader: string): Promise<void> {\n const nodeUrl = uploader.replace(/\\/+$/, '')\n const addressRes = await fetch(`${nodeUrl}/~meta@1.0/info/address`)\n if (!addressRes.ok) {\n throw new Error(`HyperBEAM bundler address check failed with HTTP ${addressRes.status}`)\n }\n\n const address = (await addressRes.text()).trim()\n if (!address) {\n throw new Error('HyperBEAM bundler address check returned an empty address')\n }\n\n const balanceRes = await fetch(`${ARWEAVE_GATEWAY}/wallet/${encodeURIComponent(address)}/balance`)\n if (!balanceRes.ok) {\n throw new Error(`HyperBEAM bundler AR balance check failed with HTTP ${balanceRes.status}`)\n }\n\n const balance = (await balanceRes.text()).trim()\n if (!/^\\d+$/.test(balance)) {\n throw new Error('HyperBEAM bundler AR balance check returned an invalid balance')\n }\n\n if (BigInt(balance) === 0n) {\n throw new Error(\n `HyperBEAM bundler wallet ${address} has 0 AR; upload aborted because the node cannot seed data to Arweave.`,\n )\n }\n}\n\nfunction responseId(headers: Headers, body: string): string | undefined {\n const headerId = headers.get('id')\n if (headerId) {\n return headerId\n }\n\n try {\n const parsed = JSON.parse(body) as { body?: { id?: string }; id?: string }\n return parsed.id || parsed.body?.id\n } catch {\n return undefined\n }\n}\n\nfunction cleanAutoFundErrorMessage(message: string): string {\n const jsonStart = message.indexOf('{')\n if (jsonStart >= 0) {\n try {\n const parsed = JSON.parse(message.slice(jsonStart)) as { error?: string }\n if (parsed.error) {\n return parsed.error.replace(/^Error:\\s*/, '')\n }\n } catch {\n // Keep the original error below if the body is not JSON.\n }\n }\n\n return message\n}\n\nfunction autoFundFailureNote(message: string): string {\n if (/rate limit exceeded/i.test(message)) {\n return 'AO token transfer was rate limited. Check that the wallet has enough spendable AO before retrying auto-fund.'\n }\n\n return 'Check the wallet or node ledger before retrying auto-fund; the AO transfer may already have been submitted.'\n}\n\nexport class HyperbeamBundlerClient implements UploadClient {\n private readonly autoFund?: HyperbeamBundlerAutoFundOptions\n private readonly quote: HyperbeamBundlerQuoteOptions\n private seedPreflight?: Promise<void>\n private readonly signer: unknown\n private readonly uploader: string\n private readonly uploadUrl: string\n\n constructor({ autoFund, deployKey, quote, uploadPath, uploader }: HyperbeamBundlerOptions) {\n const jwk = JSON.parse(Buffer.from(deployKey, 'base64').toString('utf8')) as Record<\n string,\n unknown\n >\n this.autoFund = autoFund\n this.quote = quote ?? { uploader }\n this.signer = new ArweaveSigner(jwk)\n this.uploader = uploader\n this.uploadUrl = normalizeUploadUrl(uploader, uploadPath)\n }\n\n async uploadFile(args: UploadFileArgs): Promise<{ id: string } & UploadClientResult> {\n this.seedPreflight ??= preflightHyperbeamBundlerArBalance(this.uploader)\n await this.seedPreflight\n\n const data = args.file\n ? typeof args.file === 'string'\n ? fs.readFileSync(args.file)\n : args.file\n : await streamToBuffer(args.fileStreamFactory?.() ?? Readable.from([]))\n const tags = args.dataItemOpts?.tags ?? []\n const item = createData(data, this.signer, { tags })\n\n await item.sign(this.signer)\n\n const raw = Buffer.from(item.getRaw())\n const localId = item.id || toBase64Url(new DataItem(raw).id)\n const size: UploadSize = { payloadBytes: data.length, signedBytes: raw.length }\n let cost: UploadCost | undefined\n\n if (this.autoFund) {\n const quote = await quoteHyperbeamUpload({ ...this.quote, signedBytes: raw.length })\n cost = { amount: quote.amount, token: 'AO' }\n try {\n await autoFundQuotedHyperbeamLedger({\n ...this.autoFund,\n ledgerId: this.autoFund.ledgerId ?? quote.ledgerId,\n minimumBalance: this.autoFund.minimumBalance ?? quote.amount,\n signedBytes: raw.length,\n tokenId: this.autoFund.tokenId ?? quote.tokenId,\n })\n } catch (error) {\n const message = cleanAutoFundErrorMessage(\n error instanceof Error ? error.message : String(error),\n )\n throw new Error(\n [\n `HyperBEAM auto-fund failed: ${message}`,\n `Required upload credit: ${formatAoAmount(cost.amount)}`,\n autoFundFailureNote(message),\n await this.paymentHint(false),\n ]\n .filter(Boolean)\n .join('\\n\\n'),\n )\n }\n } else {\n try {\n const quote = await quoteHyperbeamUpload({ ...this.quote, signedBytes: raw.length })\n cost = { amount: quote.amount, token: 'AO' }\n } catch {\n cost = undefined\n }\n }\n\n const res = await fetch(this.uploadUrl, {\n body: raw,\n headers: {\n accept: 'application/json, text/plain, */*',\n 'content-type': 'application/octet-stream',\n },\n method: 'POST',\n })\n const body = await res.text()\n\n if (!res.ok) {\n const preview = responsePreview(body)\n const paymentHint = res.status === 402 ? await this.paymentHint() : undefined\n throw new Error(\n [\n `HyperBEAM bundler upload failed with HTTP ${res.status}${preview ? `: ${preview}` : ''}`,\n paymentHint,\n ]\n .filter(Boolean)\n .join('\\n\\n'),\n )\n }\n\n return { cost, id: responseId(res.headers, body) || localId, size }\n }\n\n private async paymentHint(includeAutoFundInstruction = true): Promise<string | undefined> {\n try {\n return hyperbeamAoFundingHint(\n await discoverHyperbeamAoBundlerProfile({ nodeUrl: this.uploader }),\n { includeAutoFundInstruction },\n )\n } catch {\n try {\n const operator = await fetch(\n `${this.uploader.replace(/\\/+$/, '')}/~meta@1.0/info/address`,\n ).then((res) => (res.ok ? res.text() : undefined))\n if (!operator?.trim()) return undefined\n\n return [\n 'The HyperBEAM node requires AO in its local ledger:',\n `- AO: send funds to ${operator.trim()}. Local ledger: ${HYPERBEAM_DEFAULT_LEDGER_ID} at ${HYPERBEAM_DEFAULT_LEDGER_ROUTE}.`,\n includeAutoFundInstruction\n ? 'Use --hyperbeam-auto-fund to transfer AO and import the credit automatically before upload.'\n : undefined,\n ]\n .filter(Boolean)\n .join('\\n')\n } catch {\n return undefined\n }\n }\n }\n}\n\nexport function hyperbeamAoFundingHint(\n profile: HyperbalanceProfile,\n options: { includeAutoFundInstruction?: boolean } = {},\n): string | undefined {\n const lines = profile.tokens\n .map((token) => {\n const depositAddress = token.depositAddress ?? profile.node?.operator\n if (!depositAddress) return\n\n const label =\n token.ticker === 'AO' ? 'AO' : token.ticker ? `${token.ticker} (${token.id})` : token.id\n const ledger = token.ledgerId\n ? profile.ledgers.find((candidate) => candidate.id === token.ledgerId)\n : undefined\n const ledgerInfo = ledger\n ? ` Local ledger: ${ledger.id}${ledger.route ? ` at ${ledger.route}` : ''}.`\n : ''\n\n return `- ${label}: send funds to ${depositAddress}.${ledgerInfo}`\n })\n .filter(Boolean)\n\n if (lines.length === 0) return undefined\n\n return [\n 'The HyperBEAM node requires AO in its local ledger:',\n ...lines,\n options.includeAutoFundInstruction === false\n ? undefined\n : 'Use --hyperbeam-auto-fund to transfer AO and import the credit automatically before upload.',\n ]\n .filter(Boolean)\n .join('\\n')\n}\n","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 ora from 'ora'\n\nimport type { SignerType } from '../types/index.js'\nimport { cleanupCache, loadCache, saveCache } from '../utils/cache.js'\nimport { chalk } from '../utils/chalk.js'\nimport {\n type HyperbeamBundlerAutoFundOptions,\n HyperbeamBundlerClient,\n parseHyperbeamFundAmount,\n type UploadClient,\n type UploadCost,\n type UploadSize,\n} from '../utils/hyperbeam-uploader.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 'hyperbeam-ao-state-url'?: string\n 'hyperbeam-auto-fund'?: boolean\n 'hyperbeam-fund-amount'?: string\n 'hyperbeam-ledger-id'?: string\n 'hyperbeam-token-id'?: string\n 'hyperbeam-upload-path'?: string\n 'max-token-amount'?: string\n 'on-demand'?: string\n 'sig-type': string\n uploader?: string\n 'uploader-type'?: 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\nexport interface UploadWorkflowResult {\n cost?: UploadCost\n size?: UploadSize\n transactionId: string\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<UploadWorkflowResult> {\n const spinner = ora()\n\n const uploaderType = config['uploader-type'] ?? 'turbo'\n let uploadClient: UploadClient\n let turbo: ReturnType<typeof TurboFactory.authenticated> | undefined\n\n if (uploaderType === 'hyperbeam') {\n if (config['sig-type'] !== 'arweave') {\n io.error('HyperBEAM uploads require --sig-type arweave')\n }\n\n if (!config.uploader) {\n io.error('HyperBEAM uploads require --uploader <node-url>')\n }\n\n if (config['on-demand']) {\n io.error('HyperBEAM uploads do not support Turbo --on-demand payments')\n }\n\n let autoFund: HyperbeamBundlerAutoFundOptions | undefined\n if (config['hyperbeam-auto-fund']) {\n autoFund = {\n deployKey,\n uploader: config.uploader,\n }\n if (config['hyperbeam-ao-state-url']) autoFund.aoStateUrl = config['hyperbeam-ao-state-url']\n if (config['hyperbeam-ledger-id']) autoFund.ledgerId = config['hyperbeam-ledger-id']\n if (config['hyperbeam-token-id']) autoFund.tokenId = config['hyperbeam-token-id']\n if (config['hyperbeam-fund-amount']) {\n autoFund.minimumBalance = parseHyperbeamFundAmount(config['hyperbeam-fund-amount'])\n }\n }\n\n spinner.start('Initializing HyperBEAM bundler')\n uploadClient = new HyperbeamBundlerClient({\n autoFund,\n deployKey,\n quote: {\n ledgerId: config['hyperbeam-ledger-id'],\n tokenId: config['hyperbeam-token-id'],\n uploader: config.uploader,\n },\n uploadPath: config['hyperbeam-upload-path'] ?? '/~bundler@1.0/item?codec-device=ans104@1.0',\n uploader: config.uploader,\n })\n spinner.succeed(`HyperBEAM bundler initialized (${chalk.cyan(config.uploader)})`)\n } else {\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 turbo = TurboFactory.authenticated(turboFactoryArgs)\n uploadClient = turbo as UploadClient\n\n spinner.succeed('Turbo initialized')\n }\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 && turbo) {\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 let cost: UploadCost | undefined\n let size: UploadSize | undefined\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(uploadClient, 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 cost = uploadResult.cost\n size = uploadResult.size\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(uploadClient, folderPath, {\n cache,\n concurrency: config['hyperbeam-auto-fund'] ? 1 : undefined,\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 cost = uploadResult.cost\n size = uploadResult.size\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 {\n cost,\n size,\n transactionId: txOrManifestId,\n }\n}\n"],"names":["require","aoMessage"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8]}
@@ -2,16 +2,13 @@ import fs from 'node:fs';
2
2
  import { ARIO, AOProcess, ANT } from '@ar.io/sdk';
3
3
  import { Command } from '@oclif/core';
4
4
  import { connect } from '@permaweb/aoconnect';
5
- import boxen from 'boxen';
6
- import chalk from 'chalk';
7
- import Table from 'cli-table3';
8
5
  import ora from 'ora';
9
6
  import { deployFlagConfigs } from '../constants/flags.js';
10
7
  import { promptAdvancedOptions } from '../prompts/arns.js';
11
8
  import { getWalletConfig } from '../prompts/wallet.js';
9
+ import { c as chalk, r as runUploadWorkflow, h as hyperbeamBundlerLink } from '../chunks/upload-workflow-CcYev67_.js';
12
10
  import { extractFlags, resolveConfig } from '../utils/config-resolver.js';
13
- import { u as uploadErrorTable } from '../chunks/display-BgIiyBIu.js';
14
- import { r as runUploadWorkflow, h as hyperbeamBundlerLink } from '../chunks/upload-workflow-DMKlwZve.js';
11
+ import { f as formatDisplayRows, a as formatUploadError } from '../chunks/display-CyJXNtkl.js';
15
12
  import { expandPath } from '../utils/path.js';
16
13
  import { createSigner } from '../utils/signer.js';
17
14
 
@@ -33,7 +30,7 @@ class Deploy extends Command {
33
30
  const useArns = Boolean(flags["use-arns"] || flags["arns-name"]);
34
31
  const interactive = useArns && !flags["arns-name"];
35
32
  if (interactive) {
36
- this.log(chalk.cyan.bold("\nInteractive ArNS Deployment Mode\n"));
33
+ this.log(chalk.bold(chalk.cyan("\nInteractive ArNS Deployment Mode\n")));
37
34
  }
38
35
  const baseConfig = await resolveConfig(deployFlagConfigs, flags, {
39
36
  interactive
@@ -101,7 +98,7 @@ class Deploy extends Command {
101
98
  );
102
99
  }
103
100
  }
104
- this.log(chalk.cyan.bold("\nStarting deployment...\n"));
101
+ this.log(chalk.bold(chalk.cyan("\nStarting deployment...\n")));
105
102
  try {
106
103
  if (!deployConfig["use-arns"]) {
107
104
  const { transactionId: txOrManifestId2 } = await runUploadWorkflow(
@@ -112,53 +109,24 @@ class Deploy extends Command {
112
109
  }
113
110
  );
114
111
  this.log("");
115
- const isCI2 = Boolean(process.env.CI);
116
112
  const bundlerLink2 = deployConfig["uploader-type"] === "hyperbeam" && deployConfig.uploader ? hyperbeamBundlerLink(
117
113
  deployConfig.uploader,
118
114
  txOrManifestId2,
119
115
  !deployConfig["deploy-file"]
120
116
  ) : void 0;
121
- if (isCI2) {
122
- this.log("Deployment Successful!");
123
- this.log("Tx ID: " + txOrManifestId2);
124
- if (deployConfig.uploader) {
125
- this.log("Bundler service: " + deployConfig.uploader);
126
- this.log("Uploader type: " + deployConfig["uploader-type"]);
127
- }
128
- if (bundlerLink2) {
129
- this.log("Bundler link: " + bundlerLink2);
130
- }
131
- this.log(`Arweave URL: https://arweave.net/${txOrManifestId2}`);
132
- } else {
133
- const table = new Table({
134
- style: {
135
- head: []
136
- }
137
- });
138
- table.push(
139
- ["Tx ID", chalk.green(txOrManifestId2)],
140
- ...deployConfig.uploader ? [
141
- ["Bundler service", chalk.cyan(deployConfig.uploader)],
142
- ["Uploader type", chalk.cyan(deployConfig["uploader-type"])]
143
- ] : [],
144
- ...bundlerLink2 ? [["Bundler link", chalk.yellow(bundlerLink2)]] : [],
145
- ["Arweave URL", chalk.yellow(`https://arweave.net/${txOrManifestId2}`)]
146
- );
147
- const successMessage = boxen(
148
- `${chalk.green.bold("Deployment Successful!")}
149
-
150
- ${table.toString()}`,
151
- {
152
- borderColor: "green",
153
- borderStyle: "round",
154
- padding: 1,
155
- title: chalk.bold("Permaweb Deploy"),
156
- titleAlignment: "center"
157
- }
117
+ const rows2 = [["Tx ID", chalk.green(txOrManifestId2)]];
118
+ if (deployConfig.uploader) {
119
+ rows2.push(
120
+ ["Bundler service", chalk.cyan(deployConfig.uploader)],
121
+ ["Uploader type", chalk.cyan(deployConfig["uploader-type"])]
158
122
  );
159
- this.log(`
160
- ${successMessage}`);
161
123
  }
124
+ if (bundlerLink2) {
125
+ rows2.push(["Bundler link", chalk.yellow(bundlerLink2)]);
126
+ }
127
+ rows2.push(["Arweave URL", chalk.yellow(`https://arweave.net/${txOrManifestId2}`)]);
128
+ this.log(chalk.bold(chalk.green("Deployment Successful!")));
129
+ this.log(formatDisplayRows(rows2));
162
130
  return;
163
131
  }
164
132
  const arioProcess = deployConfig["ario-process"];
@@ -215,69 +183,37 @@ ${successMessage}`);
215
183
  }
216
184
  );
217
185
  spinner.succeed("ANT record updated");
218
- const isCI = Boolean(process.env.CI);
219
186
  const bundlerLink = deployConfig["uploader-type"] === "hyperbeam" && deployConfig.uploader ? hyperbeamBundlerLink(
220
187
  deployConfig.uploader,
221
188
  txOrManifestId,
222
189
  !deployConfig["deploy-file"]
223
190
  ) : void 0;
224
- if (isCI) {
225
- this.log("Deployment Successful!");
226
- this.log("Tx ID: " + txOrManifestId);
227
- if (deployConfig.uploader) {
228
- this.log("Bundler service: " + deployConfig.uploader);
229
- this.log("Uploader type: " + deployConfig["uploader-type"]);
230
- }
231
- if (bundlerLink) {
232
- this.log("Bundler link: " + bundlerLink);
233
- }
234
- this.log("ArNS Name: " + arnsName);
235
- this.log("Undername: " + deployConfig.undername);
236
- this.log("ANT: " + arnsNameRecord.processId);
237
- this.log("ARIO Process: " + arioProcess);
238
- this.log("TTL Seconds: " + deployConfig["ttl-seconds"]);
239
- this.log(`Arweave URL: https://arweave.net/${txOrManifestId}`);
240
- } else {
241
- const table = new Table({
242
- style: {
243
- head: []
244
- }
245
- });
246
- table.push(
247
- ["Tx ID", chalk.green(txOrManifestId)],
248
- ...deployConfig.uploader ? [
249
- ["Bundler service", chalk.cyan(deployConfig.uploader)],
250
- ["Uploader type", chalk.cyan(deployConfig["uploader-type"])]
251
- ] : [],
252
- ...bundlerLink ? [["Bundler link", chalk.yellow(bundlerLink)]] : [],
253
- ["ArNS Name", chalk.yellow(arnsName)],
254
- ["Undername", chalk.yellow(deployConfig.undername)],
255
- ["ANT", chalk.cyan(arnsNameRecord.processId)],
256
- ["ARIO Process", chalk.gray(arioProcess)],
257
- ["TTL Seconds", chalk.blue(deployConfig["ttl-seconds"])],
258
- ["Arweave URL", chalk.yellow(`https://arweave.net/${txOrManifestId}`)]
191
+ const rows = [["Tx ID", chalk.green(txOrManifestId)]];
192
+ if (deployConfig.uploader) {
193
+ rows.push(
194
+ ["Bundler service", chalk.cyan(deployConfig.uploader)],
195
+ ["Uploader type", chalk.cyan(deployConfig["uploader-type"])]
259
196
  );
260
- const successMessage = boxen(
261
- `${chalk.green.bold("Deployment Successful!")}
262
-
263
- ${table.toString()}`,
264
- {
265
- borderColor: "green",
266
- borderStyle: "round",
267
- padding: 1,
268
- title: chalk.bold("Permaweb Deploy"),
269
- titleAlignment: "center"
270
- }
271
- );
272
- this.log(`
273
- ${successMessage}`);
274
197
  }
198
+ if (bundlerLink) {
199
+ rows.push(["Bundler link", chalk.yellow(bundlerLink)]);
200
+ }
201
+ rows.push(
202
+ ["ArNS Name", chalk.yellow(arnsName)],
203
+ ["Undername", chalk.yellow(deployConfig.undername)],
204
+ ["ANT", chalk.cyan(arnsNameRecord.processId)],
205
+ ["ARIO Process", chalk.gray(arioProcess)],
206
+ ["TTL Seconds", chalk.blue(deployConfig["ttl-seconds"])],
207
+ ["Arweave URL", chalk.yellow(`https://arweave.net/${txOrManifestId}`)]
208
+ );
209
+ this.log(chalk.bold(chalk.green("Deployment Successful!")));
210
+ this.log(formatDisplayRows(rows));
275
211
  } catch (error) {
276
212
  const errorMessage = error instanceof Error ? error.message : String(error);
277
213
  const normalizedError = errorMessage.startsWith("Upload failed:") ? errorMessage.replace(/^Upload failed:\s*/, "") : errorMessage;
278
214
  if (errorMessage.startsWith("Upload failed:") && !process.env.CI && process.stdout.isTTY) {
279
215
  this.log(`
280
- ${uploadErrorTable(normalizedError, "Deployment failed")}`);
216
+ ${formatUploadError(normalizedError, "Deployment failed")}`);
281
217
  this.exit(1);
282
218
  }
283
219
  this.error(chalk.red(`Deployment failed: ${errorMessage}`));
@@ -1 +1 @@
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 { Command } from '@oclif/core'\nimport { connect } from '@permaweb/aoconnect'\nimport boxen from 'boxen'\nimport chalk from 'chalk'\n// eslint-disable-next-line import/no-named-as-default\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 { uploadErrorTable } from '../utils/display.js'\nimport { hyperbeamBundlerLink } from '../utils/hyperbeam-uploader.js'\nimport { expandPath } from '../utils/path.js'\nimport { createSigner } from '../utils/signer.js'\nimport { runUploadWorkflow } from '../workflows/upload-workflow.js'\n\nexport default class Deploy extends Command {\n static override args = {}\n\n static override description = 'Deploy an application to the permaweb with optional ArNS update'\n\n static override examples = [\n '<%= config.bin %> deploy --wallet ./wallet.json',\n '<%= config.bin %> deploy --wallet ./wallet.json --deploy-folder ./dist',\n '<%= config.bin %> deploy --wallet ./wallet.json --deploy-file ./dist/index.html',\n '<%= config.bin %> deploy --wallet ./wallet.json --uploader-type hyperbeam --uploader https://hyperbeam.example.com',\n '<%= config.bin %> deploy --wallet ./wallet.json --use-arns --arns-name my-app',\n '<%= config.bin %> deploy --wallet ./wallet.json --use-arns --arns-name my-app --undername staging',\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 const useArns = Boolean(flags['use-arns'] || flags['arns-name'])\n const interactive = useArns && !flags['arns-name']\n\n if (interactive) {\n this.log(chalk.cyan.bold('\\nInteractive ArNS Deployment Mode\\n'))\n }\n\n const baseConfig = (await resolveConfig<typeof deployFlagConfigs>(deployFlagConfigs, flags, {\n interactive,\n })) as DeployConfig\n\n let walletConfig: { privateKey?: string; wallet?: string } = {\n privateKey: baseConfig['private-key'],\n wallet: baseConfig.wallet,\n }\n\n const shouldPromptWallet =\n !baseConfig.wallet &&\n !baseConfig['private-key'] &&\n (interactive || !process.env.DEPLOY_KEY?.trim())\n\n if (shouldPromptWallet) {\n const config = await getWalletConfig()\n walletConfig = {\n privateKey: config.privateKey,\n wallet: config.wallet,\n }\n }\n\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 const effectiveCacheMaxEntries = baseConfig['no-dedupe']\n ? 0\n : baseConfig['dedupe-cache-max-entries']\n\n const deployConfig: DeployConfig = {\n 'ario-process': advancedOptions?.arioProcess || baseConfig['ario-process'],\n 'arns-name': baseConfig['arns-name'],\n 'dedupe-cache-max-entries': effectiveCacheMaxEntries,\n 'deploy-file': baseConfig['deploy-file'],\n 'deploy-folder': baseConfig['deploy-folder'],\n 'hyperbeam-ao-state-url': baseConfig['hyperbeam-ao-state-url'],\n 'hyperbeam-auto-fund': baseConfig['hyperbeam-auto-fund'],\n 'hyperbeam-fund-amount': baseConfig['hyperbeam-fund-amount'],\n 'hyperbeam-ledger-id': baseConfig['hyperbeam-ledger-id'],\n 'hyperbeam-token-id': baseConfig['hyperbeam-token-id'],\n 'hyperbeam-upload-path': baseConfig['hyperbeam-upload-path'],\n 'max-token-amount': advancedOptions?.maxTokenAmount || baseConfig['max-token-amount'],\n 'no-dedupe': baseConfig['no-dedupe'],\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 uploader: baseConfig.uploader,\n 'uploader-type': baseConfig['uploader-type'],\n 'use-arns': useArns,\n wallet: walletConfig.wallet,\n }\n\n if (interactive) {\n this.log('')\n }\n\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 deployKey =\n deployConfig['sig-type'] === 'arweave'\n ? Buffer.from(walletContent).toString('base64')\n : walletContent.trim()\n } else if (deployConfig['private-key']) {\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 this.log(chalk.cyan.bold('\\nStarting deployment...\\n'))\n try {\n if (!deployConfig['use-arns']) {\n const { transactionId: txOrManifestId } = await runUploadWorkflow(\n deployKey,\n deployConfig,\n {\n error: (msg) => this.error(msg),\n },\n )\n\n this.log('')\n\n const isCI = Boolean(process.env.CI)\n const bundlerLink =\n deployConfig['uploader-type'] === 'hyperbeam' && deployConfig.uploader\n ? hyperbeamBundlerLink(\n deployConfig.uploader,\n txOrManifestId,\n !deployConfig['deploy-file'],\n )\n : undefined\n\n if (isCI) {\n this.log('Deployment Successful!')\n this.log('Tx ID: ' + txOrManifestId)\n if (deployConfig.uploader) {\n this.log('Bundler service: ' + deployConfig.uploader)\n this.log('Uploader type: ' + deployConfig['uploader-type'])\n }\n\n if (bundlerLink) {\n this.log('Bundler link: ' + bundlerLink)\n }\n\n this.log(`Arweave URL: https://arweave.net/${txOrManifestId}`)\n } else {\n const table = new Table({\n style: {\n head: [],\n },\n })\n\n table.push(\n ['Tx ID', chalk.green(txOrManifestId)],\n ...(deployConfig.uploader\n ? ([\n ['Bundler service', chalk.cyan(deployConfig.uploader)],\n ['Uploader type', chalk.cyan(deployConfig['uploader-type'])],\n ] as [string, string][])\n : []),\n ...(bundlerLink\n ? ([['Bundler link', chalk.yellow(bundlerLink)]] as [string, string][])\n : []),\n ['Arweave URL', chalk.yellow(`https://arweave.net/${txOrManifestId}`)],\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 }\n\n return\n }\n\n const arioProcess = deployConfig['ario-process']\n const arnsName = deployConfig['arns-name']\n if (!arnsName) {\n this.error('--use-arns requires --arns-name')\n }\n\n const spinner = ora()\n\n spinner.start('Initializing ARIO')\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 spinner.start(`Fetching ArNS record for ${chalk.yellow(arnsName)}`)\n const arnsNameRecord = await ario.getArNSRecord({ name: arnsName }).catch(() => {\n spinner.fail(`ArNS name ${chalk.red(arnsName)} does not exist`)\n this.error(`ArNS name [${arnsName}] does not exist`)\n })\n\n spinner.succeed(`ArNS record fetched for ${chalk.green(arnsName)}`)\n\n const { transactionId: txOrManifestId } = await runUploadWorkflow(deployKey, deployConfig, {\n error: (msg) => this.error(msg),\n })\n\n this.log('')\n\n spinner.start('Updating ANT record')\n const { signer } = createSigner(deployConfig['sig-type'] as SignerType, deployKey)\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 const isCI = Boolean(process.env.CI)\n const bundlerLink =\n deployConfig['uploader-type'] === 'hyperbeam' && deployConfig.uploader\n ? hyperbeamBundlerLink(\n deployConfig.uploader,\n txOrManifestId,\n !deployConfig['deploy-file'],\n )\n : undefined\n\n if (isCI) {\n this.log('Deployment Successful!')\n this.log('Tx ID: ' + txOrManifestId)\n if (deployConfig.uploader) {\n this.log('Bundler service: ' + deployConfig.uploader)\n this.log('Uploader type: ' + deployConfig['uploader-type'])\n }\n\n if (bundlerLink) {\n this.log('Bundler link: ' + bundlerLink)\n }\n\n this.log('ArNS Name: ' + arnsName)\n this.log('Undername: ' + deployConfig.undername)\n this.log('ANT: ' + arnsNameRecord.processId)\n this.log('ARIO Process: ' + arioProcess)\n this.log('TTL Seconds: ' + deployConfig['ttl-seconds'])\n this.log(`Arweave URL: https://arweave.net/${txOrManifestId}`)\n } else {\n const table = new Table({\n style: {\n head: [],\n },\n })\n\n table.push(\n ['Tx ID', chalk.green(txOrManifestId)],\n ...(deployConfig.uploader\n ? ([\n ['Bundler service', chalk.cyan(deployConfig.uploader)],\n ['Uploader type', chalk.cyan(deployConfig['uploader-type'])],\n ] as [string, string][])\n : []),\n ...(bundlerLink\n ? ([['Bundler link', chalk.yellow(bundlerLink)]] as [string, string][])\n : []),\n ['ArNS Name', chalk.yellow(arnsName)],\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 ['Arweave URL', chalk.yellow(`https://arweave.net/${txOrManifestId}`)],\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 }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n const normalizedError = errorMessage.startsWith('Upload failed:')\n ? errorMessage.replace(/^Upload failed:\\s*/, '')\n : errorMessage\n\n if (errorMessage.startsWith('Upload failed:') && !process.env.CI && process.stdout.isTTY) {\n this.log(`\\n${uploadErrorTable(normalizedError, 'Deployment failed')}`)\n this.exit(1)\n }\n\n this.error(chalk.red(`Deployment failed: ${errorMessage}`))\n }\n } catch (error) {\n if (error instanceof Error && error.name === 'ExitPromptError') {\n this.log(chalk.yellow('\\n\\nDeployment cancelled'))\n this.exit(0)\n }\n\n throw error\n }\n }\n}\n"],"names":["txOrManifestId","isCI","bundlerLink"],"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 { Command } from '@oclif/core'\nimport { connect } from '@permaweb/aoconnect'\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 { chalk } from '../utils/chalk.js'\nimport { extractFlags, resolveConfig } from '../utils/config-resolver.js'\nimport { type DisplayRow, formatDisplayRows, formatUploadError } from '../utils/display.js'\nimport { hyperbeamBundlerLink } from '../utils/hyperbeam-uploader.js'\nimport { expandPath } from '../utils/path.js'\nimport { createSigner } from '../utils/signer.js'\nimport { runUploadWorkflow } from '../workflows/upload-workflow.js'\n\nexport default class Deploy extends Command {\n static override args = {}\n\n static override description = 'Deploy an application to the permaweb with optional ArNS update'\n\n static override examples = [\n '<%= config.bin %> deploy --wallet ./wallet.json',\n '<%= config.bin %> deploy --wallet ./wallet.json --deploy-folder ./dist',\n '<%= config.bin %> deploy --wallet ./wallet.json --deploy-file ./dist/index.html',\n '<%= config.bin %> deploy --wallet ./wallet.json --uploader-type hyperbeam --uploader https://hyperbeam.example.com',\n '<%= config.bin %> deploy --wallet ./wallet.json --use-arns --arns-name my-app',\n '<%= config.bin %> deploy --wallet ./wallet.json --use-arns --arns-name my-app --undername staging',\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 const useArns = Boolean(flags['use-arns'] || flags['arns-name'])\n const interactive = useArns && !flags['arns-name']\n\n if (interactive) {\n this.log(chalk.bold(chalk.cyan('\\nInteractive ArNS Deployment Mode\\n')))\n }\n\n const baseConfig = (await resolveConfig<typeof deployFlagConfigs>(deployFlagConfigs, flags, {\n interactive,\n })) as DeployConfig\n\n let walletConfig: { privateKey?: string; wallet?: string } = {\n privateKey: baseConfig['private-key'],\n wallet: baseConfig.wallet,\n }\n\n const shouldPromptWallet =\n !baseConfig.wallet &&\n !baseConfig['private-key'] &&\n (interactive || !process.env.DEPLOY_KEY?.trim())\n\n if (shouldPromptWallet) {\n const config = await getWalletConfig()\n walletConfig = {\n privateKey: config.privateKey,\n wallet: config.wallet,\n }\n }\n\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 const effectiveCacheMaxEntries = baseConfig['no-dedupe']\n ? 0\n : baseConfig['dedupe-cache-max-entries']\n\n const deployConfig: DeployConfig = {\n 'ario-process': advancedOptions?.arioProcess || baseConfig['ario-process'],\n 'arns-name': baseConfig['arns-name'],\n 'dedupe-cache-max-entries': effectiveCacheMaxEntries,\n 'deploy-file': baseConfig['deploy-file'],\n 'deploy-folder': baseConfig['deploy-folder'],\n 'hyperbeam-ao-state-url': baseConfig['hyperbeam-ao-state-url'],\n 'hyperbeam-auto-fund': baseConfig['hyperbeam-auto-fund'],\n 'hyperbeam-fund-amount': baseConfig['hyperbeam-fund-amount'],\n 'hyperbeam-ledger-id': baseConfig['hyperbeam-ledger-id'],\n 'hyperbeam-token-id': baseConfig['hyperbeam-token-id'],\n 'hyperbeam-upload-path': baseConfig['hyperbeam-upload-path'],\n 'max-token-amount': advancedOptions?.maxTokenAmount || baseConfig['max-token-amount'],\n 'no-dedupe': baseConfig['no-dedupe'],\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 uploader: baseConfig.uploader,\n 'uploader-type': baseConfig['uploader-type'],\n 'use-arns': useArns,\n wallet: walletConfig.wallet,\n }\n\n if (interactive) {\n this.log('')\n }\n\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 deployKey =\n deployConfig['sig-type'] === 'arweave'\n ? Buffer.from(walletContent).toString('base64')\n : walletContent.trim()\n } else if (deployConfig['private-key']) {\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 this.log(chalk.bold(chalk.cyan('\\nStarting deployment...\\n')))\n try {\n if (!deployConfig['use-arns']) {\n const { transactionId: txOrManifestId } = await runUploadWorkflow(\n deployKey,\n deployConfig,\n {\n error: (msg) => this.error(msg),\n },\n )\n\n this.log('')\n\n const bundlerLink =\n deployConfig['uploader-type'] === 'hyperbeam' && deployConfig.uploader\n ? hyperbeamBundlerLink(\n deployConfig.uploader,\n txOrManifestId,\n !deployConfig['deploy-file'],\n )\n : undefined\n\n const rows: DisplayRow[] = [['Tx ID', chalk.green(txOrManifestId)]]\n if (deployConfig.uploader) {\n rows.push(\n ['Bundler service', chalk.cyan(deployConfig.uploader)],\n ['Uploader type', chalk.cyan(deployConfig['uploader-type'])],\n )\n }\n\n if (bundlerLink) {\n rows.push(['Bundler link', chalk.yellow(bundlerLink)])\n }\n\n rows.push(['Arweave URL', chalk.yellow(`https://arweave.net/${txOrManifestId}`)])\n\n this.log(chalk.bold(chalk.green('Deployment Successful!')))\n this.log(formatDisplayRows(rows))\n\n return\n }\n\n const arioProcess = deployConfig['ario-process']\n const arnsName = deployConfig['arns-name']\n if (!arnsName) {\n this.error('--use-arns requires --arns-name')\n }\n\n const spinner = ora()\n\n spinner.start('Initializing ARIO')\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 spinner.start(`Fetching ArNS record for ${chalk.yellow(arnsName)}`)\n const arnsNameRecord = await ario.getArNSRecord({ name: arnsName }).catch(() => {\n spinner.fail(`ArNS name ${chalk.red(arnsName)} does not exist`)\n this.error(`ArNS name [${arnsName}] does not exist`)\n })\n\n spinner.succeed(`ArNS record fetched for ${chalk.green(arnsName)}`)\n\n const { transactionId: txOrManifestId } = await runUploadWorkflow(deployKey, deployConfig, {\n error: (msg) => this.error(msg),\n })\n\n this.log('')\n\n spinner.start('Updating ANT record')\n const { signer } = createSigner(deployConfig['sig-type'] as SignerType, deployKey)\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 const bundlerLink =\n deployConfig['uploader-type'] === 'hyperbeam' && deployConfig.uploader\n ? hyperbeamBundlerLink(\n deployConfig.uploader,\n txOrManifestId,\n !deployConfig['deploy-file'],\n )\n : undefined\n\n const rows: DisplayRow[] = [['Tx ID', chalk.green(txOrManifestId)]]\n if (deployConfig.uploader) {\n rows.push(\n ['Bundler service', chalk.cyan(deployConfig.uploader)],\n ['Uploader type', chalk.cyan(deployConfig['uploader-type'])],\n )\n }\n\n if (bundlerLink) {\n rows.push(['Bundler link', chalk.yellow(bundlerLink)])\n }\n\n rows.push(\n ['ArNS Name', chalk.yellow(arnsName)],\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 ['Arweave URL', chalk.yellow(`https://arweave.net/${txOrManifestId}`)],\n )\n\n this.log(chalk.bold(chalk.green('Deployment Successful!')))\n this.log(formatDisplayRows(rows))\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n const normalizedError = errorMessage.startsWith('Upload failed:')\n ? errorMessage.replace(/^Upload failed:\\s*/, '')\n : errorMessage\n\n if (errorMessage.startsWith('Upload failed:') && !process.env.CI && process.stdout.isTTY) {\n this.log(`\\n${formatUploadError(normalizedError, 'Deployment failed')}`)\n this.exit(1)\n }\n\n this.error(chalk.red(`Deployment failed: ${errorMessage}`))\n }\n } catch (error) {\n if (error instanceof Error && error.name === 'ExitPromptError') {\n this.log(chalk.yellow('\\n\\nDeployment cancelled'))\n this.exit(0)\n }\n\n throw error\n }\n }\n}\n"],"names":["txOrManifestId","bundlerLink","rows"],"mappings":"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"}
@@ -1,13 +1,10 @@
1
1
  import fs from 'node:fs';
2
2
  import { Command } from '@oclif/core';
3
- import boxen from 'boxen';
4
- import chalk from 'chalk';
5
- import Table from 'cli-table3';
6
3
  import { uploadFlagConfigs } from '../constants/flags.js';
7
4
  import { getWalletConfig } from '../prompts/wallet.js';
5
+ import { c as chalk, r as runUploadWorkflow, h as hyperbeamBundlerLink } from '../chunks/upload-workflow-CcYev67_.js';
8
6
  import { extractFlags, resolveConfig } from '../utils/config-resolver.js';
9
- import { f as formatUploadSize, a as formatUploadCost, u as uploadErrorTable } from '../chunks/display-BgIiyBIu.js';
10
- import { r as runUploadWorkflow, h as hyperbeamBundlerLink } from '../chunks/upload-workflow-DMKlwZve.js';
7
+ import { b as formatUploadSize, c as formatUploadCost, f as formatDisplayRows, a as formatUploadError } from '../chunks/display-CyJXNtkl.js';
11
8
  import { expandPath } from '../utils/path.js';
12
9
 
13
10
  class Upload extends Command {
@@ -27,7 +24,7 @@ class Upload extends Command {
27
24
  const { flags } = await this.parse(Upload);
28
25
  const interactive = !flags.wallet && !flags["private-key"] && !process.env.DEPLOY_KEY?.trim();
29
26
  if (interactive) {
30
- this.log(chalk.cyan.bold("\nInteractive upload mode\n"));
27
+ this.log(chalk.bold(chalk.cyan("\nInteractive upload mode\n")));
31
28
  }
32
29
  const baseConfig = await resolveConfig(uploadFlagConfigs, flags, {
33
30
  interactive
@@ -83,75 +80,40 @@ class Upload extends Command {
83
80
  );
84
81
  }
85
82
  }
86
- this.log(chalk.cyan.bold("\nStarting upload...\n"));
83
+ this.log(chalk.bold(chalk.cyan("\nStarting upload...\n")));
87
84
  try {
88
85
  const uploadResult = await runUploadWorkflow(deployKey, uploadCfg, {
89
86
  error: (msg) => this.error(msg)
90
87
  });
91
88
  const txOrManifestId = uploadResult.transactionId;
92
89
  this.log("");
93
- const isCI = Boolean(process.env.CI);
94
90
  const uploadSize = uploadResult.size;
95
91
  const bundlerLink = uploadCfg["uploader-type"] === "hyperbeam" && uploadCfg.uploader ? hyperbeamBundlerLink(uploadCfg.uploader, txOrManifestId, !uploadCfg["deploy-file"]) : void 0;
96
- if (isCI) {
97
- this.log("Upload successful!");
98
- this.log("Tx ID: " + txOrManifestId);
99
- if (uploadSize) {
100
- this.log("Upload size: " + formatUploadSize(uploadSize));
101
- }
102
- if (uploadResult.cost) {
103
- this.log("Upload cost: " + formatUploadCost(uploadResult.cost));
104
- }
105
- if (uploadCfg.uploader) {
106
- this.log("Bundler service: " + uploadCfg.uploader);
107
- this.log("Uploader type: " + uploadCfg["uploader-type"]);
108
- }
109
- if (bundlerLink) {
110
- this.log("Bundler link: " + bundlerLink);
111
- }
112
- this.log(`Arweave URL: https://arweave.net/${txOrManifestId}`);
113
- } else {
114
- const table = new Table({
115
- style: { head: [] }
116
- });
117
- table.push(["Tx ID", chalk.green(txOrManifestId)]);
118
- if (uploadSize) {
119
- table.push(["Upload size", chalk.blue(formatUploadSize(uploadSize))]);
120
- }
121
- if (uploadResult.cost) {
122
- table.push(["Upload cost", chalk.blue(formatUploadCost(uploadResult.cost))]);
123
- }
124
- if (uploadCfg.uploader) {
125
- table.push(
126
- ["Bundler service", chalk.cyan(uploadCfg.uploader)],
127
- ["Uploader type", chalk.cyan(uploadCfg["uploader-type"])]
128
- );
129
- }
130
- if (bundlerLink) {
131
- table.push(["Bundler link", chalk.yellow(bundlerLink)]);
132
- }
133
- table.push(["Arweave URL", chalk.yellow(`https://arweave.net/${txOrManifestId}`)]);
134
- const successMessage = boxen(
135
- `${chalk.green.bold("Upload successful!")}
136
-
137
- ${table.toString()}`,
138
- {
139
- borderColor: "green",
140
- borderStyle: "round",
141
- padding: 1,
142
- title: chalk.bold("Permaweb Deploy"),
143
- titleAlignment: "center"
144
- }
92
+ const rows = [["Tx ID", chalk.green(txOrManifestId)]];
93
+ if (uploadSize) {
94
+ rows.push(["Upload size", chalk.blue(formatUploadSize(uploadSize))]);
95
+ }
96
+ if (uploadResult.cost) {
97
+ rows.push(["Upload cost", chalk.blue(formatUploadCost(uploadResult.cost))]);
98
+ }
99
+ if (uploadCfg.uploader) {
100
+ rows.push(
101
+ ["Bundler service", chalk.cyan(uploadCfg.uploader)],
102
+ ["Uploader type", chalk.cyan(uploadCfg["uploader-type"])]
145
103
  );
146
- this.log(`
147
- ${successMessage}`);
148
104
  }
105
+ if (bundlerLink) {
106
+ rows.push(["Bundler link", chalk.yellow(bundlerLink)]);
107
+ }
108
+ rows.push(["Arweave URL", chalk.yellow(`https://arweave.net/${txOrManifestId}`)]);
109
+ this.log(chalk.bold(chalk.green("Upload successful!")));
110
+ this.log(formatDisplayRows(rows));
149
111
  } catch (error) {
150
112
  const errorMessage = error instanceof Error ? error.message : String(error);
151
113
  const normalizedError = errorMessage.startsWith("Upload failed:") ? errorMessage.replace(/^Upload failed:\s*/, "") : errorMessage;
152
114
  if (!process.env.CI && process.stdout.isTTY) {
153
115
  this.log(`
154
- ${uploadErrorTable(normalizedError)}`);
116
+ ${formatUploadError(normalizedError)}`);
155
117
  this.exit(1);
156
118
  }
157
119
  this.error(
@@ -1 +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 { formatUploadCost, formatUploadSize, uploadErrorTable } from '../utils/display.js'\nimport { hyperbeamBundlerLink } from '../utils/hyperbeam-uploader.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 '<%= config.bin %> upload --wallet ./wallet.json --uploader-type hyperbeam --uploader https://hyperbeam.example.com',\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 'hyperbeam-ao-state-url': baseConfig['hyperbeam-ao-state-url'],\n 'hyperbeam-auto-fund': baseConfig['hyperbeam-auto-fund'],\n 'hyperbeam-fund-amount': baseConfig['hyperbeam-fund-amount'],\n 'hyperbeam-ledger-id': baseConfig['hyperbeam-ledger-id'],\n 'hyperbeam-token-id': baseConfig['hyperbeam-token-id'],\n 'hyperbeam-upload-path': baseConfig['hyperbeam-upload-path'],\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 'uploader-type': baseConfig['uploader-type'],\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 uploadResult = await runUploadWorkflow(deployKey, uploadCfg, {\n error: (msg) => this.error(msg),\n })\n const txOrManifestId = uploadResult.transactionId\n\n this.log('')\n\n const isCI = Boolean(process.env.CI)\n const uploadSize = uploadResult.size\n const bundlerLink =\n uploadCfg['uploader-type'] === 'hyperbeam' && uploadCfg.uploader\n ? hyperbeamBundlerLink(uploadCfg.uploader, txOrManifestId, !uploadCfg['deploy-file'])\n : undefined\n\n if (isCI) {\n this.log('Upload successful!')\n this.log('Tx ID: ' + txOrManifestId)\n if (uploadSize) {\n this.log('Upload size: ' + formatUploadSize(uploadSize))\n }\n\n if (uploadResult.cost) {\n this.log('Upload cost: ' + formatUploadCost(uploadResult.cost))\n }\n\n if (uploadCfg.uploader) {\n this.log('Bundler service: ' + uploadCfg.uploader)\n this.log('Uploader type: ' + uploadCfg['uploader-type'])\n }\n\n if (bundlerLink) {\n this.log('Bundler link: ' + bundlerLink)\n }\n\n this.log(`Arweave URL: https://arweave.net/${txOrManifestId}`)\n } else {\n const table = new Table({\n style: { head: [] },\n })\n\n table.push(['Tx ID', chalk.green(txOrManifestId)])\n if (uploadSize) {\n table.push(['Upload size', chalk.blue(formatUploadSize(uploadSize))])\n }\n\n if (uploadResult.cost) {\n table.push(['Upload cost', chalk.blue(formatUploadCost(uploadResult.cost))])\n }\n\n if (uploadCfg.uploader) {\n table.push(\n ['Bundler service', chalk.cyan(uploadCfg.uploader)],\n ['Uploader type', chalk.cyan(uploadCfg['uploader-type'])],\n )\n }\n\n if (bundlerLink) {\n table.push(['Bundler link', chalk.yellow(bundlerLink)])\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 }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n const normalizedError = errorMessage.startsWith('Upload failed:')\n ? errorMessage.replace(/^Upload failed:\\s*/, '')\n : errorMessage\n\n if (!process.env.CI && process.stdout.isTTY) {\n this.log(`\\n${uploadErrorTable(normalizedError)}`)\n this.exit(1)\n }\n\n this.error(\n chalk.red(\n errorMessage.startsWith('Upload failed:')\n ? errorMessage\n : `Upload failed: ${errorMessage}`,\n ),\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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"}
1
+ {"version":3,"file":"upload.js","sources":["../../src/commands/upload.ts"],"sourcesContent":["import fs from 'node:fs'\n\nimport { Command } from '@oclif/core'\n\nimport { type UploadConfig, uploadFlagConfigs } from '../constants/flags.js'\nimport { getWalletConfig } from '../prompts/wallet.js'\nimport { chalk } from '../utils/chalk.js'\nimport { extractFlags, resolveConfig } from '../utils/config-resolver.js'\nimport {\n type DisplayRow,\n formatDisplayRows,\n formatUploadCost,\n formatUploadError,\n formatUploadSize,\n} from '../utils/display.js'\nimport { hyperbeamBundlerLink } from '../utils/hyperbeam-uploader.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 '<%= config.bin %> upload --wallet ./wallet.json --uploader-type hyperbeam --uploader https://hyperbeam.example.com',\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.bold(chalk.cyan('\\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 'hyperbeam-ao-state-url': baseConfig['hyperbeam-ao-state-url'],\n 'hyperbeam-auto-fund': baseConfig['hyperbeam-auto-fund'],\n 'hyperbeam-fund-amount': baseConfig['hyperbeam-fund-amount'],\n 'hyperbeam-ledger-id': baseConfig['hyperbeam-ledger-id'],\n 'hyperbeam-token-id': baseConfig['hyperbeam-token-id'],\n 'hyperbeam-upload-path': baseConfig['hyperbeam-upload-path'],\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 'uploader-type': baseConfig['uploader-type'],\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.bold(chalk.cyan('\\nStarting upload...\\n')))\n\n try {\n const uploadResult = await runUploadWorkflow(deployKey, uploadCfg, {\n error: (msg) => this.error(msg),\n })\n const txOrManifestId = uploadResult.transactionId\n\n this.log('')\n\n const uploadSize = uploadResult.size\n const bundlerLink =\n uploadCfg['uploader-type'] === 'hyperbeam' && uploadCfg.uploader\n ? hyperbeamBundlerLink(uploadCfg.uploader, txOrManifestId, !uploadCfg['deploy-file'])\n : undefined\n\n const rows: DisplayRow[] = [['Tx ID', chalk.green(txOrManifestId)]]\n if (uploadSize) {\n rows.push(['Upload size', chalk.blue(formatUploadSize(uploadSize))])\n }\n\n if (uploadResult.cost) {\n rows.push(['Upload cost', chalk.blue(formatUploadCost(uploadResult.cost))])\n }\n\n if (uploadCfg.uploader) {\n rows.push(\n ['Bundler service', chalk.cyan(uploadCfg.uploader)],\n ['Uploader type', chalk.cyan(uploadCfg['uploader-type'])],\n )\n }\n\n if (bundlerLink) {\n rows.push(['Bundler link', chalk.yellow(bundlerLink)])\n }\n\n rows.push(['Arweave URL', chalk.yellow(`https://arweave.net/${txOrManifestId}`)])\n\n this.log(chalk.bold(chalk.green('Upload successful!')))\n this.log(formatDisplayRows(rows))\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n const normalizedError = errorMessage.startsWith('Upload failed:')\n ? errorMessage.replace(/^Upload failed:\\s*/, '')\n : errorMessage\n\n if (!process.env.CI && process.stdout.isTTY) {\n this.log(`\\n${formatUploadError(normalizedError)}`)\n this.exit(1)\n }\n\n this.error(\n chalk.red(\n errorMessage.startsWith('Upload failed:')\n ? errorMessage\n : `Upload failed: ${errorMessage}`,\n ),\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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAmBrC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,OAAgB,IAAI,KAAK;IAEzB,OAAgB,WAAW,SAAoE;IAE/F,OAAgB,QAAQ,WAOvB;IAED,OAAgB,KAAK,sBAAkC;IAE1C,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAmVlC"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAgBrC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,OAAgB,IAAI,KAAK;IAEzB,OAAgB,WAAW,SAAoE;IAE/F,OAAgB,QAAQ,WAOvB;IAED,OAAgB,KAAK,sBAAkC;IAE1C,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgRlC"}
@@ -1 +1 @@
1
- {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/commands/upload.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAcrC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,OAAgB,IAAI,KAAK;IAEzB,OAAgB,WAAW,SAAuE;IAElG,OAAgB,QAAQ,WAOvB;IAED,OAAgB,KAAK,sBAAkC;IAE1C,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAyLlC"}
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/commands/upload.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAiBrC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,OAAgB,IAAI,KAAK;IAEzB,OAAgB,WAAW,SAAuE;IAElG,OAAgB,QAAQ,WAOvB;IAED,OAAgB,KAAK,sBAAkC;IAE1C,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAmJlC"}
@@ -0,0 +1,9 @@
1
+ declare const colorCodes: readonly [readonly ["bold", "\u001B[1m"], readonly ["dim", "\u001B[2m"], readonly ["italic", "\u001B[3m"], readonly ["underline", "\u001B[4m"], readonly ["inverse", "\u001B[7m"], readonly ["strikethrough", "\u001B[9m"], readonly ["black", "\u001B[30m"], readonly ["red", "\u001B[31m"], readonly ["green", "\u001B[32m"], readonly ["yellow", "\u001B[33m"], readonly ["blue", "\u001B[34m"], readonly ["magenta", "\u001B[35m"], readonly ["cyan", "\u001B[36m"], readonly ["white", "\u001B[37m"], readonly ["gray", "\u001B[90m"], readonly ["grey", "\u001B[90m"], readonly ["blackBright", "\u001B[90m"], readonly ["redBright", "\u001B[91m"], readonly ["greenBright", "\u001B[92m"], readonly ["yellowBright", "\u001B[93m"], readonly ["blueBright", "\u001B[94m"], readonly ["magentaBright", "\u001B[95m"], readonly ["cyanBright", "\u001B[96m"], readonly ["whiteBright", "\u001B[97m"], readonly ["bgBlack", "\u001B[40m"], readonly ["bgRed", "\u001B[41m"], readonly ["bgGreen", "\u001B[42m"], readonly ["bgYellow", "\u001B[43m"], readonly ["bgBlue", "\u001B[44m"], readonly ["bgMagenta", "\u001B[45m"], readonly ["bgCyan", "\u001B[46m"], readonly ["bgWhite", "\u001B[47m"], readonly ["bgBlackBright", "\u001B[100m"]];
2
+ type ColorName = (typeof colorCodes)[number][0];
3
+ type ColorFunction = (text: unknown) => string;
4
+ type Chalk = {
5
+ highlight: ColorFunction;
6
+ } & Record<ColorName, ColorFunction>;
7
+ export declare const chalk: Chalk;
8
+ export {};
9
+ //# sourceMappingURL=chalk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chalk.d.ts","sourceRoot":"","sources":["../../../src/utils/chalk.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,UAAU,urCAqCN,CAAA;AAEV,KAAK,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/C,KAAK,aAAa,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAA;AAC9C,KAAK,KAAK,GAAG;IACX,SAAS,EAAE,aAAa,CAAA;CACzB,GAAG,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;AAapC,eAAO,MAAM,KAAK,EAAE,KAElB,CAAA"}
@@ -1,5 +1,7 @@
1
1
  import type { UploadCost, UploadSize } from './hyperbeam-uploader.js';
2
+ export type DisplayRow = [label: string, value: string];
2
3
  export declare function formatUploadSize(size: UploadSize): string;
3
4
  export declare function formatUploadCost(cost: UploadCost): string;
4
- export declare function uploadErrorTable(message: string, title?: string): string;
5
+ export declare function formatDisplayRows(rows: DisplayRow[]): string;
6
+ export declare function formatUploadError(message: string, title?: string): string;
5
7
  //# sourceMappingURL=display.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../../src/utils/display.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAIrE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAEzD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAazD;AAkBD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAkB,GAAG,MAAM,CAsCjF"}
1
+ {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../../src/utils/display.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAIrE,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;AAEvD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAEzD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAazD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAE5D;AAkBD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAkB,GAAG,MAAM,CA8BlF"}
@@ -1,10 +1,9 @@
1
1
  import 'node:fs';
2
2
  import 'node:path';
3
3
  import '@ardrive/turbo-sdk';
4
- import 'chalk';
5
4
  import 'ora';
6
5
  import '../chunks/uploader-CIHu22Fw.js';
7
- export { r as runUploadWorkflow } from '../chunks/upload-workflow-DMKlwZve.js';
6
+ export { r as runUploadWorkflow } from '../chunks/upload-workflow-CcYev67_.js';
8
7
  import '../utils/path.js';
9
8
  import '../utils/signer.js';
10
9
  //# sourceMappingURL=upload-workflow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload-workflow.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
1
+ {"version":3,"file":"upload-workflow.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "permaweb-deploy",
3
- "version": "3.4.4",
3
+ "version": "3.4.5",
4
4
  "description": "Permaweb App Deployment Package",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -58,9 +58,6 @@
58
58
  "@inquirer/prompts": "^7.2.0",
59
59
  "@oclif/core": "^4.0.30",
60
60
  "@permaweb/aoconnect": "^0.0.85",
61
- "boxen": "^8.0.1",
62
- "chalk": "^5.3.0",
63
- "cli-table3": "^0.6.5",
64
61
  "hyperbalance": "github:xylophonez/hyperbalance#main",
65
62
  "mime-types": "^3.0.1",
66
63
  "ora": "^8.1.1",
@@ -115,7 +112,7 @@
115
112
  },
116
113
  "homepage": "https://github.com/permaweb/permaweb-deploy#readme",
117
114
  "lint-staged": {
118
- "*.{ts,tsx}": [
115
+ "{src,tests}/**/*.{ts,tsx}": [
119
116
  "eslint --fix --max-warnings=0",
120
117
  "prettier --write"
121
118
  ],
@@ -1 +0,0 @@
1
- {"version":3,"file":"display-BgIiyBIu.js","sources":["../../src/utils/display.ts"],"sourcesContent":["import 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 { UploadCost, UploadSize } from './hyperbeam-uploader.js'\n\nconst AO_BASE_UNITS = 1_000_000_000_000n\n\nexport function formatUploadSize(size: UploadSize): string {\n return `${(size.signedBytes ?? size.payloadBytes).toLocaleString()} bytes`\n}\n\nexport function formatUploadCost(cost: UploadCost): string {\n if (cost.token !== 'AO') {\n return `${cost.amount.toString()}`\n }\n\n const whole = cost.amount / AO_BASE_UNITS\n const fraction = cost.amount % AO_BASE_UNITS\n const decimal =\n fraction === 0n\n ? whole.toString()\n : `${whole.toString()}.${fraction.toString().padStart(12, '0').replaceAll(/0+$/g, '')}`\n\n return `${decimal} AO`\n}\n\nfunction fundingDisplay(section: string): string {\n const fundingLine = section\n .split('\\n')\n .map((line) => line.trim())\n .find((line) => line.startsWith('- '))\n ?.replace(/^- /, '')\n\n if (!fundingLine) {\n return section\n }\n\n return fundingLine\n .replace(/^AO: send funds to /, 'Sending AO to ')\n .replace(/\\. Local ledger:.*$/, '')\n}\n\nexport function uploadErrorTable(message: string, title = 'Upload failed'): string {\n const table = new Table({\n style: { head: [] },\n })\n const sections = message\n .split(/\\n{2,}/)\n .map((section) => section.trim())\n .filter(Boolean)\n\n for (const [index, section] of sections.entries()) {\n if (index === 0) {\n table.push(['Error', chalk.red(section)])\n continue\n }\n\n if (section.startsWith('Required upload credit:')) {\n table.push([\n 'Required upload credit',\n chalk.blue(section.replace(/^Required upload credit:\\s*/, '')),\n ])\n continue\n }\n\n if (section.startsWith('The HyperBEAM node requires AO')) {\n table.push(['Funding', fundingDisplay(section)])\n continue\n }\n\n table.push(['Note', section])\n }\n\n return boxen(`${chalk.red.bold(title)}\\n\\n${table.toString()}`, {\n borderColor: 'red',\n borderStyle: 'round',\n padding: 1,\n title: chalk.bold('Permaweb Deploy'),\n titleAlignment: 'center',\n })\n}\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"upload-workflow-DMKlwZve.js","sources":["../../node_modules/.pnpm/hyperbalance@https+++codeload.github.com+xylophonez+hyperbalance+tar.gz+dcb009349368197c88586e4eba784bb5290203cb/node_modules/hyperbalance/dist/errors.js","../../node_modules/.pnpm/hyperbalance@https+++codeload.github.com+xylophonez+hyperbalance+tar.gz+dcb009349368197c88586e4eba784bb5290203cb/node_modules/hyperbalance/dist/discovery.js","../../node_modules/.pnpm/hyperbalance@https+++codeload.github.com+xylophonez+hyperbalance+tar.gz+dcb009349368197c88586e4eba784bb5290203cb/node_modules/hyperbalance/dist/lookup.js","../../node_modules/.pnpm/hyperbalance@https+++codeload.github.com+xylophonez+hyperbalance+tar.gz+dcb009349368197c88586e4eba784bb5290203cb/node_modules/hyperbalance/dist/parse.js","../../node_modules/.pnpm/hyperbalance@https+++codeload.github.com+xylophonez+hyperbalance+tar.gz+dcb009349368197c88586e4eba784bb5290203cb/node_modules/hyperbalance/dist/templates.js","../../node_modules/.pnpm/hyperbalance@https+++codeload.github.com+xylophonez+hyperbalance+tar.gz+dcb009349368197c88586e4eba784bb5290203cb/node_modules/hyperbalance/dist/client.js","../../node_modules/.pnpm/hyperbalance@https+++codeload.github.com+xylophonez+hyperbalance+tar.gz+dcb009349368197c88586e4eba784bb5290203cb/node_modules/hyperbalance/dist/adapters/ao.js","../../node_modules/.pnpm/hyperbalance@https+++codeload.github.com+xylophonez+hyperbalance+tar.gz+dcb009349368197c88586e4eba784bb5290203cb/node_modules/hyperbalance/dist/conventions.js","../../src/utils/hyperbeam-uploader.ts","../../src/workflows/upload-workflow.ts"],"sourcesContent":["export class HyperbalanceError extends Error {\n cause;\n constructor(message, cause) {\n super(message);\n this.cause = cause;\n this.name = \"HyperbalanceError\";\n }\n}\nexport class MissingDiscoveryError extends HyperbalanceError {\n attemptedUrls;\n constructor(attemptedUrls) {\n super(`No hyperbalance discovery endpoint found: ${attemptedUrls.join(\", \")}`);\n this.attemptedUrls = attemptedUrls;\n this.name = \"MissingDiscoveryError\";\n }\n}\nexport class PaymentRequiredError extends HyperbalanceError {\n required;\n available;\n constructor(message, required, available) {\n super(message);\n this.required = required;\n this.available = available;\n this.name = \"PaymentRequiredError\";\n }\n}\n","import { MissingDiscoveryError } from \"./errors.js\";\nexport const DEFAULT_DISCOVERY_PATHS = [\"/.well-known/hyperbalance\"];\nexport function normalizeNodeUrl(nodeUrl) {\n return nodeUrl.replace(/\\/+$/, \"\");\n}\nexport async function discoverPaymentProfile(nodeUrl, options = {}) {\n const fetcher = options.fetch ?? globalThis.fetch;\n const base = normalizeNodeUrl(nodeUrl);\n const paths = options.paths ?? DEFAULT_DISCOVERY_PATHS;\n const attemptedUrls = [];\n for (const path of paths) {\n const url = `${base}${path.startsWith(\"/\") ? path : `/${path}`}`;\n attemptedUrls.push(url);\n const response = await fetcher(url, { headers: { accept: \"application/json\" } }).catch(() => undefined);\n if (!response?.ok)\n continue;\n const profile = (await response.json());\n validateProfile(profile);\n return profile;\n }\n throw new MissingDiscoveryError(attemptedUrls);\n}\nfunction validateProfile(profile) {\n if (!profile || typeof profile !== \"object\") {\n throw new Error(\"Invalid hyperbalance profile: expected object\");\n }\n if (!Array.isArray(profile.ledgers)) {\n throw new Error(\"Invalid hyperbalance profile: ledgers must be an array\");\n }\n if (!Array.isArray(profile.tokens)) {\n throw new Error(\"Invalid hyperbalance profile: tokens must be an array\");\n }\n}\n","export function getLedger(profile, ledgerId) {\n const ledger = profile.ledgers.find((candidate) => candidate.id === ledgerId);\n if (!ledger) {\n throw new Error(`Ledger not found in payment profile: ${ledgerId}`);\n }\n return ledger;\n}\nexport function getToken(profile, tokenId) {\n const token = profile.tokens.find((candidate) => candidate.id === tokenId);\n if (!token) {\n throw new Error(`Token not found in payment profile: ${tokenId}`);\n }\n return token;\n}\n","export async function parseBalanceResponse(response) {\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n const raw = await response.text();\n if (contentType.includes(\"application/json\")) {\n const parsed = JSON.parse(raw);\n return parseBalanceValue(parsed);\n }\n return BigInt(raw.trim());\n}\nexport async function parseQuoteResponse(response) {\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n const raw = await response.text();\n if (contentType.includes(\"application/json\")) {\n const parsed = JSON.parse(raw);\n const quote = parseQuoteValue(parsed);\n return { ...quote, raw: parsed };\n }\n return { amount: BigInt(raw.trim()), raw };\n}\nfunction parseBalanceValue(value) {\n if (typeof value === \"bigint\")\n return value;\n if (typeof value === \"number\")\n return BigInt(value);\n if (typeof value === \"string\")\n return BigInt(value);\n if (value && typeof value === \"object\") {\n const record = value;\n for (const key of [\"balance\", \"value\", \"amount\", \"ok\"]) {\n if (key in record)\n return parseBalanceValue(record[key]);\n }\n }\n throw new Error(\"Could not parse ledger balance response\");\n}\nfunction parseQuoteValue(value) {\n if (typeof value === \"bigint\" || typeof value === \"number\" || typeof value === \"string\") {\n return { amount: BigInt(value) };\n }\n if (value && typeof value === \"object\") {\n const record = value;\n const amountKey = [\"amount\", \"price\", \"quote\", \"value\", \"ok\"].find((key) => key in record);\n if (!amountKey) {\n throw new Error(\"Could not parse quote amount response\");\n }\n const quote = parseQuoteValue(record[amountKey]);\n const ledgerId = typeof record.ledgerId === \"string\" ? record.ledgerId : undefined;\n const tokenId = typeof record.tokenId === \"string\" ? record.tokenId : undefined;\n return {\n amount: quote.amount,\n ...(ledgerId !== undefined && { ledgerId }),\n ...(tokenId !== undefined && { tokenId }),\n };\n }\n throw new Error(\"Could not parse quote amount response\");\n}\n","export function applyTemplate(template, values) {\n return template.replaceAll(/\\{([A-Za-z0-9_-]+)\\}/g, (_match, key) => {\n const value = values[key];\n if (value === undefined) {\n throw new Error(`Missing template value: ${key}`);\n }\n return encodeURIComponent(String(value));\n });\n}\nexport function applyTemplateMap(templates, values) {\n if (!templates)\n return {};\n return Object.fromEntries(Object.entries(templates).map(([key, template]) => [key, applyTemplate(template, values)]));\n}\n","import { discoverPaymentProfile, normalizeNodeUrl } from \"./discovery.js\";\nimport { PaymentRequiredError } from \"./errors.js\";\nimport { getLedger, getToken } from \"./lookup.js\";\nimport { parseBalanceResponse, parseQuoteResponse } from \"./parse.js\";\nimport { applyTemplate, applyTemplateMap } from \"./templates.js\";\nexport class HyperbalanceClient {\n fetch;\n nodeUrl;\n constructor(options) {\n this.fetch = options.fetch ?? globalThis.fetch;\n this.nodeUrl = normalizeNodeUrl(options.nodeUrl);\n }\n discover(options = {}) {\n return discoverPaymentProfile(this.nodeUrl, { ...options, fetch: this.fetch });\n }\n async getBalance(request) {\n const ledger = getLedger(request.profile, request.ledgerId);\n const path = applyTemplate(ledger.balancePath, { address: request.address });\n const response = await this.fetch(this.absoluteUrl(path), {\n headers: { accept: \"application/json, text/plain\" },\n });\n if (response.status === 404) {\n return {\n address: request.address,\n ledger,\n value: 0n,\n };\n }\n if (!response.ok) {\n throw new Error(`Balance request failed: ${response.status} ${response.statusText}`);\n }\n return {\n address: request.address,\n ledger,\n value: await parseBalanceResponse(response),\n };\n }\n async ensureCredit(request) {\n const token = getToken(request.profile, request.tokenId);\n const ledger = getLedger(request.profile, request.ledgerId);\n const before = await this.getBalance({\n address: request.recipient,\n ledgerId: ledger.id,\n profile: request.profile,\n });\n if (before.value >= request.minimumBalance) {\n return {\n after: before,\n before,\n shortfall: 0n,\n };\n }\n const shortfall = request.minimumBalance - before.value;\n const depositAddress = token.depositAddress ?? request.profile.node?.operator;\n if (!depositAddress) {\n throw new PaymentRequiredError(\"Payment is required, but the node did not advertise a deposit address\", request.minimumBalance, before.value);\n }\n if (token.transfer?.kind && token.transfer.kind !== request.transferAdapter.kind) {\n throw new Error(`Transfer adapter kind mismatch: token expects ${token.transfer.kind}, got ${request.transferAdapter.kind}`);\n }\n const sender = await request.transferAdapter.inferSender?.();\n const transferRequest = {\n amount: shortfall,\n depositAddress,\n recipient: request.recipient,\n token,\n };\n if (sender !== undefined)\n transferRequest.sender = sender;\n const transfer = await request.transferAdapter.transfer(transferRequest);\n const importRequest = {\n amount: shortfall,\n ledger,\n profile: request.profile,\n recipient: request.recipient,\n token,\n transfer,\n };\n const importSender = transfer.sender ?? sender;\n if (importSender !== undefined)\n importRequest.sender = importSender;\n const imported = await this.importDeposit(importRequest);\n const after = await this.getBalance({\n address: request.recipient,\n ledgerId: ledger.id,\n profile: request.profile,\n });\n return {\n after,\n before,\n imported,\n shortfall,\n transfer,\n };\n }\n async ensureCreditAuto(request) {\n const profile = request.profile ?? (await this.discover());\n const targetOptions = {\n transferKind: request.transferAdapter.kind,\n };\n if (request.ledgerId !== undefined)\n targetOptions.ledgerId = request.ledgerId;\n if (request.tokenId !== undefined)\n targetOptions.tokenId = request.tokenId;\n const { ledger, token } = selectFundingTarget(profile, targetOptions);\n return this.ensureCredit({\n ledgerId: ledger.id,\n minimumBalance: request.minimumBalance,\n profile,\n recipient: request.recipient,\n tokenId: token.id,\n transferAdapter: request.transferAdapter,\n });\n }\n async quote(request) {\n const descriptor = request.profile.pricing?.find((candidate) => candidate.action === request.action);\n if (!descriptor?.quotePath) {\n throw new Error(`No quote path advertised for action: ${request.action}`);\n }\n const values = request.params ?? {};\n const url = new URL(this.absoluteUrl(applyTemplate(descriptor.quotePath, values)));\n for (const [key, value] of Object.entries(applyTemplateMap(descriptor.query, values))) {\n url.searchParams.set(key, value);\n }\n const bodyValues = applyTemplateMap(descriptor.body, values);\n const hasBody = Object.keys(bodyValues).length > 0;\n const init = {\n headers: { accept: \"application/json, text/plain\" },\n method: descriptor.method ?? (hasBody ? \"POST\" : \"GET\"),\n };\n if (hasBody) {\n init.body = JSON.stringify(bodyValues);\n init.headers = { ...init.headers, \"content-type\": \"application/json\" };\n }\n const response = await this.fetch(url, init);\n if (!response.ok) {\n throw new Error(`Quote request failed: ${response.status} ${response.statusText}`);\n }\n return parseQuoteResponse(response);\n }\n async quoteAuto(request) {\n const quoteRequest = {\n action: request.action,\n profile: request.profile ?? (await this.discover()),\n };\n if (request.params !== undefined)\n quoteRequest.params = request.params;\n return this.quote(quoteRequest);\n }\n async importDeposit(request) {\n const descriptor = request.token.import;\n if (!descriptor) {\n throw new Error(`Token does not advertise a deposit import flow: ${request.token.id}`);\n }\n const values = {\n ledgerId: request.ledger.id,\n messageId: request.transfer.messageId,\n quantity: request.amount,\n recipient: request.recipient,\n sender: request.sender,\n slot: request.transfer.slot,\n tokenId: request.token.id,\n };\n const url = new URL(this.absoluteUrl(descriptor.path));\n for (const [key, value] of Object.entries(applyTemplateMap(descriptor.query, values))) {\n url.searchParams.set(key, value);\n }\n const bodyValues = applyTemplateMap(descriptor.body, values);\n const hasBody = Object.keys(bodyValues).length > 0;\n const init = {\n method: descriptor.method ?? \"POST\",\n };\n if (hasBody) {\n init.body = JSON.stringify(bodyValues);\n init.headers = { \"content-type\": \"application/json\" };\n }\n const response = await this.fetch(url, init);\n if (!response.ok) {\n throw new Error(`Deposit import failed: ${response.status} ${response.statusText}`);\n }\n const text = await response.text();\n if (!text.trim())\n return undefined;\n try {\n return JSON.parse(text);\n }\n catch {\n return text;\n }\n }\n absoluteUrl(pathOrUrl) {\n if (/^https?:\\/\\//.test(pathOrUrl))\n return pathOrUrl;\n return `${this.nodeUrl}${pathOrUrl.startsWith(\"/\") ? pathOrUrl : `/${pathOrUrl}`}`;\n }\n}\nexport function selectFundingTarget(profile, options = {}) {\n const token = options.tokenId\n ? getToken(profile, options.tokenId)\n : profile.tokens.find((candidate) => (!options.transferKind || candidate.transfer?.kind === options.transferKind) &&\n (!options.ledgerId || candidate.ledgerId === options.ledgerId));\n if (!token) {\n throw new Error(\"No matching funding token found in payment profile\");\n }\n const ledgerId = options.ledgerId ?? token.ledgerId;\n if (!ledgerId) {\n throw new Error(`Funding token does not specify a ledger: ${token.id}`);\n }\n return {\n ledger: getLedger(profile, ledgerId),\n token,\n };\n}\n","import { applyTemplateMap } from \"../templates.js\";\nexport class AoTokenTransferAdapter {\n options;\n kind = \"ao\";\n inferSender;\n constructor(options) {\n this.options = options;\n if (options.inferSender) {\n this.inferSender = options.inferSender;\n }\n }\n async transfer(request) {\n const transfer = request.token.transfer;\n assertAoTransferDescriptor(request.token, transfer);\n const tags = buildAoTransferTags(request, transfer);\n const messageId = await this.options.message({\n data: \"\",\n process: transfer.processId,\n tags,\n });\n const slot = await this.options.waitForAssignmentSlot?.(messageId, {\n processId: transfer.processId,\n });\n const result = { messageId };\n if (request.sender !== undefined)\n result.sender = request.sender;\n if (slot !== undefined)\n result.slot = slot;\n return result;\n }\n}\nexport async function waitForAoAssignmentSlot(options) {\n const fetcher = options.fetch ?? globalThis.fetch;\n const stateUrl = (options.stateUrl ?? \"https://state.forward.computer\").replace(/\\/+$/, \"\");\n const pollMs = options.pollMs ?? 5000;\n const timeoutMs = options.timeoutMs ?? 360000;\n const fromSlot = Math.max(0, (await currentSlot(fetcher, stateUrl, options.processId)) - 5);\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n const toSlot = (await currentSlot(fetcher, stateUrl, options.processId)) + 20;\n const url = `${stateUrl}/${options.processId}~process@1.0/schedule` +\n `?from=${fromSlot}&to=${toSlot}&accept=application/aos-2`;\n const response = await fetcher(url);\n if (!response.ok) {\n throw new Error(`AO schedule request failed: ${response.status} ${response.statusText}`);\n }\n const schedule = (await response.json());\n for (const edge of schedule.edges ?? []) {\n if (edge.node?.message?.Id === options.messageId) {\n const slot = edge.node.assignment?.Tags?.find((tag) => tag.name === \"Nonce\")?.value;\n if (!slot) {\n throw new Error(`AO assignment is missing Nonce for message ${options.messageId}`);\n }\n return slot;\n }\n }\n await sleep(pollMs);\n }\n throw new Error(`AO message did not appear in schedule: ${options.messageId}`);\n}\nasync function currentSlot(fetcher, stateUrl, processId) {\n const response = await fetcher(`${stateUrl}/${processId}~process@1.0/slot/current`);\n if (!response.ok) {\n throw new Error(`AO current slot request failed: ${response.status} ${response.statusText}`);\n }\n const text = await response.text();\n const match = text.match(/\\d+/);\n if (!match) {\n throw new Error(`Could not parse AO current slot: ${text}`);\n }\n return Number(match[0]);\n}\nfunction sleep(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\nexport function buildAoTransferTags(request, transfer) {\n const tags = applyTemplateMap(transfer.tags, {\n depositAddress: request.depositAddress,\n quantity: request.amount,\n recipient: request.recipient,\n sender: request.sender,\n tokenId: request.token.id,\n });\n return Object.entries(tags).map(([name, value]) => ({ name, value }));\n}\nfunction assertAoTransferDescriptor(token, transfer) {\n if (!transfer) {\n throw new Error(`AO token does not advertise a transfer flow: ${token.id}`);\n }\n if (transfer.kind !== \"ao\") {\n throw new Error(`Token transfer kind is not AO: ${transfer.kind}`);\n }\n if (!transfer.processId) {\n throw new Error(`AO token is missing transfer.processId: ${token.id}`);\n }\n}\n","import { normalizeNodeUrl } from \"./discovery.js\";\nexport const DEFAULT_AO_TOKEN_ID = \"0syT13r0s0tgPmIed95bJnuSqaD29HQNN8D3ElLSrsc\";\nexport const HYPERBEAM_AO_BUNDLER_QUOTE_ACTION = \"hyperbeam-upload\";\nexport const HYPERBEAM_DEFAULT_LEDGER_ID = \"default\";\nexport const HYPERBEAM_DEFAULT_LEDGER_ROUTE = \"/ledger~node-process@1.0\";\nexport async function discoverHyperbeamAoBundlerProfile(options) {\n const fetcher = options.fetch ?? globalThis.fetch;\n const nodeUrl = normalizeNodeUrl(options.nodeUrl);\n const ledgerId = options.ledgerId ?? HYPERBEAM_DEFAULT_LEDGER_ID;\n const ledgerRoute = options.ledgerRoute ?? HYPERBEAM_DEFAULT_LEDGER_ROUTE;\n const tokenId = options.tokenId ?? DEFAULT_AO_TOKEN_ID;\n const depositAddress = await fetchHyperbeamOperatorAddress(fetcher, nodeUrl);\n return {\n ledgers: [\n {\n balancePath: `${ledgerRoute}/now/balance/{address}`,\n id: ledgerId,\n route: ledgerRoute,\n type: \"process-ledger@1.0\",\n unit: \"AO\",\n },\n ],\n node: {\n operator: depositAddress,\n url: nodeUrl,\n },\n pricing: [\n {\n action: HYPERBEAM_AO_BUNDLER_QUOTE_ACTION,\n query: {\n amount: \"{bytes}\",\n resource: \"arweave-bytes\",\n },\n quotePath: \"/~metering@1.0/quote\",\n },\n ],\n tokens: [\n {\n decimals: 12,\n depositAddress,\n id: tokenId,\n import: {\n method: \"POST\",\n path: \"/~ao-payment@1.0/ingest\",\n query: {\n \"message-id\": \"{messageId}\",\n quantity: \"{quantity}\",\n recipient: \"{recipient}\",\n sender: \"{sender}\",\n slot: \"{slot}\",\n token: \"{tokenId}\",\n },\n },\n ledgerId,\n network: \"ao\",\n ticker: \"AO\",\n transfer: {\n kind: \"ao\",\n processId: tokenId,\n tags: {\n Action: \"Transfer\",\n Quantity: \"{quantity}\",\n Recipient: \"{depositAddress}\",\n },\n },\n },\n ],\n version: \"hyperbalance@0.1\",\n };\n}\nasync function fetchHyperbeamOperatorAddress(fetcher, nodeUrl) {\n const response = await fetcher(`${nodeUrl}/~meta@1.0/info/address`, {\n headers: { accept: \"text/plain\" },\n });\n if (!response.ok) {\n throw new Error(`HyperBEAM operator address request failed: ${response.status} ${response.statusText}`);\n }\n const address = (await response.text()).trim();\n if (!address) {\n throw new Error(\"HyperBEAM operator address response was empty\");\n }\n return address;\n}\n","import { createHash } from 'node:crypto'\nimport fs from 'node:fs'\nimport { createRequire } from 'node:module'\nimport { Readable } from 'node:stream'\n\nimport { createDataItemSigner, message as aoMessage } from '@permaweb/aoconnect'\nimport {\n AoTokenTransferAdapter,\n DEFAULT_AO_TOKEN_ID,\n discoverHyperbeamAoBundlerProfile,\n type FundingResult,\n HyperbalanceClient,\n type HyperbalanceProfile,\n HYPERBEAM_DEFAULT_LEDGER_ID,\n HYPERBEAM_DEFAULT_LEDGER_ROUTE,\n waitForAoAssignmentSlot,\n} from 'hyperbalance'\n\nconst require = createRequire(import.meta.url)\nconst { ArweaveSigner, DataItem, createData } = require('@dha-team/arbundles') as {\n ArweaveSigner: new (jwk: Record<string, unknown>) => unknown\n DataItem: new (raw: Buffer) => { id: string | Uint8Array }\n createData: (\n data: Buffer,\n signer: unknown,\n opts?: { tags?: Array<{ name: string; value: string }> },\n ) => {\n getRaw: () => Uint8Array\n id?: string\n sign: (signer: unknown) => Promise<void>\n }\n}\n\nexport interface UploadFileArgs {\n dataItemOpts?: { tags?: Array<{ name: string; value: string }> }\n file?: string | Buffer\n fileSizeFactory?: () => number\n fileStreamFactory?: () => unknown\n fundingMode?: unknown\n}\n\nexport interface UploadClient {\n uploadFile: (args: UploadFileArgs) => Promise<UploadClientResult>\n}\n\nexport interface UploadClientResult {\n cost?: UploadCost\n id?: string\n size?: UploadSize\n}\n\nexport interface UploadCost {\n amount: bigint\n token: 'AO'\n}\n\nexport interface UploadSize {\n payloadBytes: number\n signedBytes?: number\n}\n\nconst AO_BASE_UNITS = 1_000_000_000_000n\nconst ARWEAVE_GATEWAY = 'https://arweave.net'\n\nexport interface HyperbeamBundlerOptions {\n autoFund?: HyperbeamBundlerAutoFundOptions\n deployKey: string\n quote?: HyperbeamBundlerQuoteOptions\n uploadPath: string\n uploader: string\n}\n\nexport interface HyperbeamAutoFundOptions {\n aoPollMs?: number\n aoStateUrl?: string\n aoTimeoutMs?: number\n deployKey: string\n ledgerId?: string\n minimumBalance: bigint\n tokenId?: string\n uploader: string\n}\n\nexport interface HyperbeamBundlerAutoFundOptions {\n aoPollMs?: number\n aoStateUrl?: string\n aoTimeoutMs?: number\n deployKey: string\n ledgerId?: string\n minimumBalance?: bigint\n quoteAction?: string\n tokenId?: string\n uploader: string\n}\n\nexport interface HyperbeamBundlerQuoteOptions {\n ledgerId?: string\n quoteAction?: string\n tokenId?: string\n uploader: string\n}\n\nasync function readableToBuffer(stream: Readable): Promise<Buffer> {\n const chunks: Buffer[] = []\n\n for await (const chunk of stream) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk))\n }\n\n return Buffer.concat(chunks)\n}\n\nasync function streamToBuffer(stream: unknown): Promise<Buffer> {\n if (Buffer.isBuffer(stream)) {\n return stream\n }\n\n if (stream instanceof Uint8Array) {\n return Buffer.from(stream)\n }\n\n if (stream instanceof Readable) {\n return readableToBuffer(stream)\n }\n\n if (stream && typeof (stream as { getReader?: unknown }).getReader === 'function') {\n return readableToBuffer(Readable.fromWeb(stream as ReadableStream))\n }\n\n throw new Error('Unsupported upload stream type')\n}\n\nfunction toBase64Url(value: string | Uint8Array): string {\n if (typeof value === 'string') {\n return value\n }\n\n return Buffer.from(value).toString('base64url')\n}\n\nfunction normalizeUploadUrl(base: string, uploadPath: string): string {\n const normalizedBase = base.endsWith('/') ? base : `${base}/`\n const cleanPath = uploadPath.startsWith('/') ? uploadPath.slice(1) : uploadPath\n return new URL(cleanPath, normalizedBase).toString()\n}\n\nfunction arweaveAddressFromJwk(jwk: Record<string, unknown>): string {\n if (typeof jwk.n !== 'string') {\n throw new TypeError('Arweave JWK is missing modulus field \"n\"')\n }\n\n return createHash('sha256').update(Buffer.from(jwk.n, 'base64url')).digest('base64url')\n}\n\nexport function parseHyperbeamFundAmount(value: string): bigint {\n if (!/^[1-9]\\d*$/.test(value)) {\n throw new Error('--hyperbeam-fund-amount must be a positive integer in token base units')\n }\n\n return BigInt(value)\n}\n\nfunction formatAoAmount(amount: bigint): string {\n const whole = amount / AO_BASE_UNITS\n const fraction = amount % AO_BASE_UNITS\n\n if (fraction === 0n) {\n return `${whole.toString()} AO`\n }\n\n return `${whole.toString()}.${fraction.toString().padStart(12, '0').replaceAll(/0+$/g, '')} AO`\n}\n\nfunction responsePreview(body: string): string | undefined {\n const preview = body.replaceAll(/\\s+/g, ' ').trim()\n if (!preview) {\n return undefined\n }\n\n if (/^(<!doctype html\\b|<html\\b)/i.test(preview)) {\n return 'HTML error response'\n }\n\n return preview.slice(0, 300)\n}\n\nexport async function autoFundHyperbeamLedger(\n options: HyperbeamAutoFundOptions,\n): Promise<FundingResult> {\n const profile = await discoverHyperbeamAoBundlerProfile({\n ledgerId: options.ledgerId,\n nodeUrl: options.uploader,\n tokenId: options.tokenId,\n })\n\n return ensureHyperbeamCredit(options, profile)\n}\n\nasync function ensureHyperbeamCredit(\n options: HyperbeamAutoFundOptions,\n profile: HyperbalanceProfile,\n): Promise<FundingResult> {\n const jwk = JSON.parse(Buffer.from(options.deployKey, 'base64').toString('utf8')) as Record<\n string,\n unknown\n >\n const recipient = arweaveAddressFromJwk(jwk)\n const signer = createDataItemSigner(jwk)\n const client = new HyperbalanceClient({ nodeUrl: options.uploader })\n const adapter = new AoTokenTransferAdapter({\n async inferSender() {\n return recipient\n },\n async message(input) {\n return aoMessage({\n data: input.data ?? '',\n process: input.process,\n signer,\n tags: input.tags,\n })\n },\n async waitForAssignmentSlot(messageId, context) {\n return waitForAoAssignmentSlot({\n messageId,\n pollMs: options.aoPollMs,\n processId: context.processId,\n stateUrl: options.aoStateUrl,\n timeoutMs: options.aoTimeoutMs,\n })\n },\n })\n\n return client.ensureCreditAuto({\n ledgerId: options.ledgerId,\n minimumBalance: options.minimumBalance,\n profile,\n recipient,\n tokenId: options.tokenId ?? DEFAULT_AO_TOKEN_ID,\n transferAdapter: adapter,\n })\n}\n\nexport async function autoFundQuotedHyperbeamLedger(\n options: { signedBytes: number } & HyperbeamBundlerAutoFundOptions,\n): Promise<FundingResult> {\n const profile = await discoverHyperbeamAoBundlerProfile({\n ledgerId: options.ledgerId,\n nodeUrl: options.uploader,\n tokenId: options.tokenId,\n })\n const client = new HyperbalanceClient({ nodeUrl: options.uploader })\n let { ledgerId } = options\n let { minimumBalance } = options\n let { tokenId } = options\n\n if (minimumBalance === undefined) {\n const quote = await client.quoteAuto({\n action: options.quoteAction ?? 'hyperbeam-upload',\n params: { bytes: options.signedBytes },\n profile,\n })\n minimumBalance = quote.amount\n ledgerId ??= quote.ledgerId\n tokenId ??= quote.tokenId\n }\n\n return ensureHyperbeamCredit(\n {\n aoPollMs: options.aoPollMs,\n aoStateUrl: options.aoStateUrl,\n aoTimeoutMs: options.aoTimeoutMs,\n deployKey: options.deployKey,\n ledgerId,\n minimumBalance,\n tokenId,\n uploader: options.uploader,\n },\n profile,\n )\n}\n\nexport async function quoteHyperbeamUpload(\n options: { signedBytes: number } & HyperbeamBundlerQuoteOptions,\n): Promise<{ amount: bigint; ledgerId?: string; tokenId?: string }> {\n const profile = await discoverHyperbeamAoBundlerProfile({\n ledgerId: options.ledgerId,\n nodeUrl: options.uploader,\n tokenId: options.tokenId,\n })\n const quote = await new HyperbalanceClient({ nodeUrl: options.uploader }).quoteAuto({\n action: options.quoteAction ?? 'hyperbeam-upload',\n params: { bytes: options.signedBytes },\n profile,\n })\n\n return { amount: quote.amount, ledgerId: quote.ledgerId, tokenId: quote.tokenId }\n}\n\nexport function hyperbeamBundlerLink(uploader: string, id: string, isManifest = false): string {\n const normalizedBase = uploader.endsWith('/') ? uploader : `${uploader}/`\n return new URL(`${encodeURIComponent(id)}${isManifest ? '/' : ''}`, normalizedBase).toString()\n}\n\nasync function preflightHyperbeamBundlerArBalance(uploader: string): Promise<void> {\n const nodeUrl = uploader.replace(/\\/+$/, '')\n const addressRes = await fetch(`${nodeUrl}/~meta@1.0/info/address`)\n if (!addressRes.ok) {\n throw new Error(`HyperBEAM bundler address check failed with HTTP ${addressRes.status}`)\n }\n\n const address = (await addressRes.text()).trim()\n if (!address) {\n throw new Error('HyperBEAM bundler address check returned an empty address')\n }\n\n const balanceRes = await fetch(`${ARWEAVE_GATEWAY}/wallet/${encodeURIComponent(address)}/balance`)\n if (!balanceRes.ok) {\n throw new Error(`HyperBEAM bundler AR balance check failed with HTTP ${balanceRes.status}`)\n }\n\n const balance = (await balanceRes.text()).trim()\n if (!/^\\d+$/.test(balance)) {\n throw new Error('HyperBEAM bundler AR balance check returned an invalid balance')\n }\n\n if (BigInt(balance) === 0n) {\n throw new Error(\n `HyperBEAM bundler wallet ${address} has 0 AR; upload aborted because the node cannot seed data to Arweave.`,\n )\n }\n}\n\nfunction responseId(headers: Headers, body: string): string | undefined {\n const headerId = headers.get('id')\n if (headerId) {\n return headerId\n }\n\n try {\n const parsed = JSON.parse(body) as { body?: { id?: string }; id?: string }\n return parsed.id || parsed.body?.id\n } catch {\n return undefined\n }\n}\n\nfunction cleanAutoFundErrorMessage(message: string): string {\n const jsonStart = message.indexOf('{')\n if (jsonStart >= 0) {\n try {\n const parsed = JSON.parse(message.slice(jsonStart)) as { error?: string }\n if (parsed.error) {\n return parsed.error.replace(/^Error:\\s*/, '')\n }\n } catch {\n // Keep the original error below if the body is not JSON.\n }\n }\n\n return message\n}\n\nfunction autoFundFailureNote(message: string): string {\n if (/rate limit exceeded/i.test(message)) {\n return 'AO token transfer was rate limited. Check that the wallet has enough spendable AO before retrying auto-fund.'\n }\n\n return 'Check the wallet or node ledger before retrying auto-fund; the AO transfer may already have been submitted.'\n}\n\nexport class HyperbeamBundlerClient implements UploadClient {\n private readonly autoFund?: HyperbeamBundlerAutoFundOptions\n private readonly quote: HyperbeamBundlerQuoteOptions\n private seedPreflight?: Promise<void>\n private readonly signer: unknown\n private readonly uploader: string\n private readonly uploadUrl: string\n\n constructor({ autoFund, deployKey, quote, uploadPath, uploader }: HyperbeamBundlerOptions) {\n const jwk = JSON.parse(Buffer.from(deployKey, 'base64').toString('utf8')) as Record<\n string,\n unknown\n >\n this.autoFund = autoFund\n this.quote = quote ?? { uploader }\n this.signer = new ArweaveSigner(jwk)\n this.uploader = uploader\n this.uploadUrl = normalizeUploadUrl(uploader, uploadPath)\n }\n\n async uploadFile(args: UploadFileArgs): Promise<{ id: string } & UploadClientResult> {\n this.seedPreflight ??= preflightHyperbeamBundlerArBalance(this.uploader)\n await this.seedPreflight\n\n const data = args.file\n ? typeof args.file === 'string'\n ? fs.readFileSync(args.file)\n : args.file\n : await streamToBuffer(args.fileStreamFactory?.() ?? Readable.from([]))\n const tags = args.dataItemOpts?.tags ?? []\n const item = createData(data, this.signer, { tags })\n\n await item.sign(this.signer)\n\n const raw = Buffer.from(item.getRaw())\n const localId = item.id || toBase64Url(new DataItem(raw).id)\n const size: UploadSize = { payloadBytes: data.length, signedBytes: raw.length }\n let cost: UploadCost | undefined\n\n if (this.autoFund) {\n const quote = await quoteHyperbeamUpload({ ...this.quote, signedBytes: raw.length })\n cost = { amount: quote.amount, token: 'AO' }\n try {\n await autoFundQuotedHyperbeamLedger({\n ...this.autoFund,\n ledgerId: this.autoFund.ledgerId ?? quote.ledgerId,\n minimumBalance: this.autoFund.minimumBalance ?? quote.amount,\n signedBytes: raw.length,\n tokenId: this.autoFund.tokenId ?? quote.tokenId,\n })\n } catch (error) {\n const message = cleanAutoFundErrorMessage(\n error instanceof Error ? error.message : String(error),\n )\n throw new Error(\n [\n `HyperBEAM auto-fund failed: ${message}`,\n `Required upload credit: ${formatAoAmount(cost.amount)}`,\n autoFundFailureNote(message),\n await this.paymentHint(false),\n ]\n .filter(Boolean)\n .join('\\n\\n'),\n )\n }\n } else {\n try {\n const quote = await quoteHyperbeamUpload({ ...this.quote, signedBytes: raw.length })\n cost = { amount: quote.amount, token: 'AO' }\n } catch {\n cost = undefined\n }\n }\n\n const res = await fetch(this.uploadUrl, {\n body: raw,\n headers: {\n accept: 'application/json, text/plain, */*',\n 'content-type': 'application/octet-stream',\n },\n method: 'POST',\n })\n const body = await res.text()\n\n if (!res.ok) {\n const preview = responsePreview(body)\n const paymentHint = res.status === 402 ? await this.paymentHint() : undefined\n throw new Error(\n [\n `HyperBEAM bundler upload failed with HTTP ${res.status}${preview ? `: ${preview}` : ''}`,\n paymentHint,\n ]\n .filter(Boolean)\n .join('\\n\\n'),\n )\n }\n\n return { cost, id: responseId(res.headers, body) || localId, size }\n }\n\n private async paymentHint(includeAutoFundInstruction = true): Promise<string | undefined> {\n try {\n return hyperbeamAoFundingHint(\n await discoverHyperbeamAoBundlerProfile({ nodeUrl: this.uploader }),\n { includeAutoFundInstruction },\n )\n } catch {\n try {\n const operator = await fetch(\n `${this.uploader.replace(/\\/+$/, '')}/~meta@1.0/info/address`,\n ).then((res) => (res.ok ? res.text() : undefined))\n if (!operator?.trim()) return undefined\n\n return [\n 'The HyperBEAM node requires AO in its local ledger:',\n `- AO: send funds to ${operator.trim()}. Local ledger: ${HYPERBEAM_DEFAULT_LEDGER_ID} at ${HYPERBEAM_DEFAULT_LEDGER_ROUTE}.`,\n includeAutoFundInstruction\n ? 'Use --hyperbeam-auto-fund to transfer AO and import the credit automatically before upload.'\n : undefined,\n ]\n .filter(Boolean)\n .join('\\n')\n } catch {\n return undefined\n }\n }\n }\n}\n\nexport function hyperbeamAoFundingHint(\n profile: HyperbalanceProfile,\n options: { includeAutoFundInstruction?: boolean } = {},\n): string | undefined {\n const lines = profile.tokens\n .map((token) => {\n const depositAddress = token.depositAddress ?? profile.node?.operator\n if (!depositAddress) return\n\n const label =\n token.ticker === 'AO' ? 'AO' : token.ticker ? `${token.ticker} (${token.id})` : token.id\n const ledger = token.ledgerId\n ? profile.ledgers.find((candidate) => candidate.id === token.ledgerId)\n : undefined\n const ledgerInfo = ledger\n ? ` Local ledger: ${ledger.id}${ledger.route ? ` at ${ledger.route}` : ''}.`\n : ''\n\n return `- ${label}: send funds to ${depositAddress}.${ledgerInfo}`\n })\n .filter(Boolean)\n\n if (lines.length === 0) return undefined\n\n return [\n 'The HyperBEAM node requires AO in its local ledger:',\n ...lines,\n options.includeAutoFundInstruction === false\n ? undefined\n : 'Use --hyperbeam-auto-fund to transfer AO and import the credit automatically before upload.',\n ]\n .filter(Boolean)\n .join('\\n')\n}\n","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 {\n type HyperbeamBundlerAutoFundOptions,\n HyperbeamBundlerClient,\n parseHyperbeamFundAmount,\n type UploadClient,\n type UploadCost,\n type UploadSize,\n} from '../utils/hyperbeam-uploader.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 'hyperbeam-ao-state-url'?: string\n 'hyperbeam-auto-fund'?: boolean\n 'hyperbeam-fund-amount'?: string\n 'hyperbeam-ledger-id'?: string\n 'hyperbeam-token-id'?: string\n 'hyperbeam-upload-path'?: string\n 'max-token-amount'?: string\n 'on-demand'?: string\n 'sig-type': string\n uploader?: string\n 'uploader-type'?: 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\nexport interface UploadWorkflowResult {\n cost?: UploadCost\n size?: UploadSize\n transactionId: string\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<UploadWorkflowResult> {\n const spinner = ora()\n\n const uploaderType = config['uploader-type'] ?? 'turbo'\n let uploadClient: UploadClient\n let turbo: ReturnType<typeof TurboFactory.authenticated> | undefined\n\n if (uploaderType === 'hyperbeam') {\n if (config['sig-type'] !== 'arweave') {\n io.error('HyperBEAM uploads require --sig-type arweave')\n }\n\n if (!config.uploader) {\n io.error('HyperBEAM uploads require --uploader <node-url>')\n }\n\n if (config['on-demand']) {\n io.error('HyperBEAM uploads do not support Turbo --on-demand payments')\n }\n\n let autoFund: HyperbeamBundlerAutoFundOptions | undefined\n if (config['hyperbeam-auto-fund']) {\n autoFund = {\n deployKey,\n uploader: config.uploader,\n }\n if (config['hyperbeam-ao-state-url']) autoFund.aoStateUrl = config['hyperbeam-ao-state-url']\n if (config['hyperbeam-ledger-id']) autoFund.ledgerId = config['hyperbeam-ledger-id']\n if (config['hyperbeam-token-id']) autoFund.tokenId = config['hyperbeam-token-id']\n if (config['hyperbeam-fund-amount']) {\n autoFund.minimumBalance = parseHyperbeamFundAmount(config['hyperbeam-fund-amount'])\n }\n }\n\n spinner.start('Initializing HyperBEAM bundler')\n uploadClient = new HyperbeamBundlerClient({\n autoFund,\n deployKey,\n quote: {\n ledgerId: config['hyperbeam-ledger-id'],\n tokenId: config['hyperbeam-token-id'],\n uploader: config.uploader,\n },\n uploadPath: config['hyperbeam-upload-path'] ?? '/~bundler@1.0/item?codec-device=ans104@1.0',\n uploader: config.uploader,\n })\n spinner.succeed(`HyperBEAM bundler initialized (${chalk.cyan(config.uploader)})`)\n } else {\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 turbo = TurboFactory.authenticated(turboFactoryArgs)\n uploadClient = turbo as UploadClient\n\n spinner.succeed('Turbo initialized')\n }\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 && turbo) {\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 let cost: UploadCost | undefined\n let size: UploadSize | undefined\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(uploadClient, 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 cost = uploadResult.cost\n size = uploadResult.size\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(uploadClient, folderPath, {\n cache,\n concurrency: config['hyperbeam-auto-fund'] ? 1 : undefined,\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 cost = uploadResult.cost\n size = uploadResult.size\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 {\n cost,\n size,\n transactionId: txOrManifestId,\n }\n}\n"],"names":["require","aoMessage"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7]}