permaweb-deploy 3.4.3 → 3.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -14
- package/bin/run.js +0 -0
- package/dist/chunks/display-BgIiyBIu.js +60 -0
- package/dist/chunks/display-BgIiyBIu.js.map +1 -0
- package/dist/chunks/{upload-workflow-zlELdPNp.js → upload-workflow-DMKlwZve.js} +156 -19
- package/dist/chunks/upload-workflow-DMKlwZve.js.map +1 -0
- package/dist/chunks/{uploader-DDS_d-O_.js → uploader-CIHu22Fw.js} +5 -1
- package/dist/chunks/uploader-CIHu22Fw.js.map +1 -0
- package/dist/commands/deploy.js +99 -30
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/upload.js +28 -5
- package/dist/commands/upload.js.map +1 -1
- package/dist/constants/flags.js +9 -0
- package/dist/constants/flags.js.map +1 -1
- package/dist/src/commands/deploy.d.ts.map +1 -1
- package/dist/src/commands/upload.d.ts.map +1 -1
- package/dist/src/constants/flags.d.ts +5 -1
- package/dist/src/constants/flags.d.ts.map +1 -1
- package/dist/src/types/index.d.ts +1 -1
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/utils/__tests__/display.test.d.ts +2 -0
- package/dist/src/utils/__tests__/display.test.d.ts.map +1 -0
- package/dist/src/utils/display.d.ts +5 -0
- package/dist/src/utils/display.d.ts.map +1 -0
- package/dist/src/utils/hyperbeam-uploader.d.ts +36 -7
- package/dist/src/utils/hyperbeam-uploader.d.ts.map +1 -1
- package/dist/src/utils/uploader.d.ts +3 -1
- package/dist/src/utils/uploader.d.ts.map +1 -1
- package/dist/src/workflows/upload-workflow.d.ts +7 -1
- package/dist/src/workflows/upload-workflow.d.ts.map +1 -1
- package/dist/tests/setup.d.ts +1 -1
- package/dist/tests/setup.d.ts.map +1 -1
- package/dist/utils/uploader.js +1 -1
- package/dist/workflows/upload-workflow.js +2 -2
- package/package.json +25 -24
- package/dist/chunks/upload-workflow-zlELdPNp.js.map +0 -1
- package/dist/chunks/uploader-DDS_d-O_.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
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]}
|
|
@@ -340,12 +340,16 @@ async function uploadFile(turbo, filePath, options) {
|
|
|
340
340
|
const updatedCache = setCachedTransaction(options.cache, fileHash, uploadResult.id);
|
|
341
341
|
return {
|
|
342
342
|
cacheHit: false,
|
|
343
|
+
cost: uploadResult.cost,
|
|
344
|
+
size: uploadResult.size,
|
|
343
345
|
transactionId: uploadResult.id,
|
|
344
346
|
updatedCache
|
|
345
347
|
};
|
|
346
348
|
}
|
|
347
349
|
return {
|
|
348
350
|
cacheHit: false,
|
|
351
|
+
cost: uploadResult.cost,
|
|
352
|
+
size: uploadResult.size,
|
|
349
353
|
transactionId: uploadResult.id
|
|
350
354
|
};
|
|
351
355
|
}
|
|
@@ -463,4 +467,4 @@ async function uploadFolder(turbo, folderPath, options) {
|
|
|
463
467
|
}
|
|
464
468
|
|
|
465
469
|
export { uploadFolder as a, cleanupCache as c, loadCache as l, saveCache as s, uploadFile as u };
|
|
466
|
-
//# sourceMappingURL=uploader-
|
|
470
|
+
//# sourceMappingURL=uploader-CIHu22Fw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uploader-CIHu22Fw.js","sources":["../../src/utils/cache.ts","../../node_modules/.pnpm/yocto-queue@1.2.2/node_modules/yocto-queue/index.js","../../node_modules/.pnpm/p-limit@7.3.0/node_modules/p-limit/index.js","../../src/utils/uploader.ts"],"sourcesContent":["import crypto from 'node:crypto'\nimport fs from 'node:fs'\nimport path from 'node:path'\n\nimport { CACHE_DIR, CACHE_FILE } from '../constants/cache.js'\n\nexport interface TransactionCacheEntry {\n createdAtTimestamp: number\n lastUsedTimestamp: number\n transactionId: string\n}\n\nexport type TransactionCache = Record<string, TransactionCacheEntry>\n\n/**\n * Get the path to the cache file in the current working directory\n */\nexport function getCachePath(): string {\n return path.join(process.cwd(), CACHE_DIR, CACHE_FILE)\n}\n\n/**\n * Load the transaction cache from disk\n * Returns an empty object if the cache file doesn't exist or is invalid\n */\nexport function loadCache(): TransactionCache {\n const cachePath = getCachePath()\n\n try {\n if (!fs.existsSync(cachePath)) {\n return {}\n }\n\n const content = fs.readFileSync(cachePath, 'utf8')\n return JSON.parse(content) as TransactionCache\n } catch {\n // If the cache is corrupted or unreadable, start fresh\n return {}\n }\n}\n\n/**\n * Save the transaction cache to disk\n * Creates the cache directory if it doesn't exist\n */\nexport function saveCache(cache: TransactionCache): void {\n const cachePath = getCachePath()\n const cacheDir = path.dirname(cachePath)\n\n if (!fs.existsSync(cacheDir)) {\n fs.mkdirSync(cacheDir, { recursive: true })\n }\n\n fs.writeFileSync(cachePath, JSON.stringify(cache, null, 2), 'utf8')\n}\n\n/**\n * Compute the SHA-256 hash of a file using streaming\n */\nexport async function hashFile(filePath: string): Promise<string> {\n return new Promise((resolve, reject) => {\n const hash = crypto.createHash('sha256')\n const stream = fs.createReadStream(filePath)\n\n stream.on('data', (chunk) => hash.update(chunk))\n stream.on('end', () => resolve(hash.digest('hex')))\n stream.on('error', reject)\n })\n}\n\n/**\n * Recursively get all files in a directory\n * Returns relative paths from the base directory\n */\nexport function getAllFiles(dirPath: string, basePath: string = dirPath): string[] {\n const files: string[] = []\n\n for (const item of fs.readdirSync(dirPath)) {\n const fullPath = path.join(dirPath, item)\n const stats = fs.statSync(fullPath)\n\n if (stats.isDirectory()) {\n files.push(...getAllFiles(fullPath, basePath))\n } else {\n // Store relative path for consistent hashing\n files.push(path.relative(basePath, fullPath))\n }\n }\n\n return files\n}\n\n/**\n * Get a cached transaction entry by its file hash\n */\nexport function getCachedTransaction(\n cache: TransactionCache,\n hash: string,\n): TransactionCacheEntry | undefined {\n return cache[hash]\n}\n\n/**\n * Add or update a cache entry for a file hash\n * Updates lastUsedTimestamp if the entry already exists\n */\nexport function setCachedTransaction(\n cache: TransactionCache,\n hash: string,\n transactionId: string,\n): TransactionCache {\n const now = Date.now()\n const existing = cache[hash]\n\n return {\n ...cache,\n [hash]: {\n createdAtTimestamp: existing?.createdAtTimestamp ?? now,\n lastUsedTimestamp: now,\n transactionId,\n },\n }\n}\n\n/**\n * Update the lastUsedTimestamp for an existing cache entry\n */\nexport function touchCacheEntry(cache: TransactionCache, hash: string): TransactionCache {\n const existing = cache[hash]\n if (!existing) {\n return cache\n }\n\n return {\n ...cache,\n [hash]: {\n ...existing,\n lastUsedTimestamp: Date.now(),\n },\n }\n}\n\n/**\n * Clean up the cache by keeping only the most recently used entries\n * Entries are sorted by lastUsedTimestamp descending, keeping the newest maxEntries\n */\nexport function cleanupCache(cache: TransactionCache, maxEntries: number): TransactionCache {\n const entries = Object.entries(cache)\n\n if (entries.length <= maxEntries) {\n return cache\n }\n\n // Sort by lastUsedTimestamp descending (newest first)\n const sorted = entries.sort(([, a], [, b]) => b.lastUsedTimestamp - a.lastUsedTimestamp)\n\n // Keep only the newest maxEntries\n const kept = sorted.slice(0, maxEntries)\n\n return Object.fromEntries(kept)\n}\n","/*\nHow it works:\n`this.#head` is an instance of `Node` which keeps track of its current value and nests another instance of `Node` that keeps the value that comes after it. When a value is provided to `.enqueue()`, the code needs to iterate through `this.#head`, going deeper and deeper to find the last value. However, iterating through every single item is slow. This problem is solved by saving a reference to the last value as `this.#tail` so that it can reference it to add a new value.\n*/\n\nclass Node {\n\tvalue;\n\tnext;\n\n\tconstructor(value) {\n\t\tthis.value = value;\n\t}\n}\n\nexport default class Queue {\n\t#head;\n\t#tail;\n\t#size;\n\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\n\tenqueue(value) {\n\t\tconst node = new Node(value);\n\n\t\tif (this.#head) {\n\t\t\tthis.#tail.next = node;\n\t\t\tthis.#tail = node;\n\t\t} else {\n\t\t\tthis.#head = node;\n\t\t\tthis.#tail = node;\n\t\t}\n\n\t\tthis.#size++;\n\t}\n\n\tdequeue() {\n\t\tconst current = this.#head;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#head = this.#head.next;\n\t\tthis.#size--;\n\n\t\t// Clean up tail reference when queue becomes empty\n\t\tif (!this.#head) {\n\t\t\tthis.#tail = undefined;\n\t\t}\n\n\t\treturn current.value;\n\t}\n\n\tpeek() {\n\t\tif (!this.#head) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.#head.value;\n\n\t\t// TODO: Node.js 18.\n\t\t// return this.#head?.value;\n\t}\n\n\tclear() {\n\t\tthis.#head = undefined;\n\t\tthis.#tail = undefined;\n\t\tthis.#size = 0;\n\t}\n\n\tget size() {\n\t\treturn this.#size;\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tlet current = this.#head;\n\n\t\twhile (current) {\n\t\t\tyield current.value;\n\t\t\tcurrent = current.next;\n\t\t}\n\t}\n\n\t* drain() {\n\t\twhile (this.#head) {\n\t\t\tyield this.dequeue();\n\t\t}\n\t}\n}\n","import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tlet rejectOnClear = false;\n\n\tif (typeof concurrency === 'object') {\n\t\t({concurrency, rejectOnClear = false} = concurrency);\n\t}\n\n\tvalidateConcurrency(concurrency);\n\n\tif (typeof rejectOnClear !== 'boolean') {\n\t\tthrow new TypeError('Expected `rejectOnClear` to be a boolean');\n\t}\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst resumeNext = () => {\n\t\t// Process the next queued function if we're under the concurrency limit\n\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\tactiveCount++;\n\t\t\tqueue.dequeue().run();\n\t\t}\n\t};\n\n\tconst next = () => {\n\t\tactiveCount--;\n\t\tresumeNext();\n\t};\n\n\tconst run = async (function_, resolve, arguments_) => {\n\t\t// Execute the function and capture the result promise\n\t\tconst result = (async () => function_(...arguments_))();\n\n\t\t// Resolve immediately with the promise (don't wait for completion)\n\t\tresolve(result);\n\n\t\t// Wait for the function to complete (success or failure)\n\t\t// We catch errors here to prevent unhandled rejections,\n\t\t// but the original promise rejection is preserved for the caller\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\t// Decrement active count and process next queued function\n\t\tnext();\n\t};\n\n\tconst enqueue = (function_, resolve, reject, arguments_) => {\n\t\tconst queueItem = {reject};\n\n\t\t// Queue the internal resolve function instead of the run function\n\t\t// to preserve the asynchronous execution context.\n\t\tnew Promise(internalResolve => { // eslint-disable-line promise/param-names\n\t\t\tqueueItem.run = internalResolve;\n\t\t\tqueue.enqueue(queueItem);\n\t\t}).then(run.bind(undefined, function_, resolve, arguments_)); // eslint-disable-line promise/prefer-await-to-then\n\n\t\t// Start processing immediately if we haven't reached the concurrency limit\n\t\tif (activeCount < concurrency) {\n\t\t\tresumeNext();\n\t\t}\n\t};\n\n\tconst generator = (function_, ...arguments_) => new Promise((resolve, reject) => {\n\t\tenqueue(function_, resolve, reject, arguments_);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount,\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size,\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue() {\n\t\t\t\tif (!rejectOnClear) {\n\t\t\t\t\tqueue.clear();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst abortError = AbortSignal.abort().reason;\n\n\t\t\t\twhile (queue.size > 0) {\n\t\t\t\t\tqueue.dequeue().reject(abortError);\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\tconcurrency: {\n\t\t\tget: () => concurrency,\n\n\t\t\tset(newConcurrency) {\n\t\t\t\tvalidateConcurrency(newConcurrency);\n\t\t\t\tconcurrency = newConcurrency;\n\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\t// eslint-disable-next-line no-unmodified-loop-condition\n\t\t\t\t\twhile (activeCount < concurrency && queue.size > 0) {\n\t\t\t\t\t\tresumeNext();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t\tmap: {\n\t\t\tasync value(iterable, function_) {\n\t\t\t\tconst promises = Array.from(iterable, (value, index) => this(function_, value, index));\n\t\t\t\treturn Promise.all(promises);\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n\nexport function limitFunction(function_, options) {\n\tconst limit = pLimit(options);\n\n\treturn (...arguments_) => limit(() => function_(...arguments_));\n}\n\nfunction validateConcurrency(concurrency) {\n\tif (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n}\n","import path from 'node:path'\nimport { Readable } from 'node:stream'\n\nimport { OnDemandFunding } from '@ardrive/turbo-sdk'\nimport * as mime from 'mime-types'\nimport pLimit from 'p-limit'\n\nimport {\n getAllFiles,\n getCachedTransaction,\n hashFile,\n setCachedTransaction,\n touchCacheEntry,\n type TransactionCache,\n} from './cache.js'\nimport type { UploadClient, UploadCost, UploadSize } from './hyperbeam-uploader.js'\n\nexport interface UploadResult {\n cacheHit: boolean\n cost?: UploadCost\n size?: UploadSize\n transactionId: string\n updatedCache?: TransactionCache\n}\n\nexport interface FolderUploadResult extends UploadResult {\n /** Number of files that were cache hits (not re-uploaded) */\n cacheHits: number\n /** Total number of files in the folder */\n totalFiles: number\n /** Number of files that were uploaded */\n uploaded: number\n}\n\nexport async function uploadFile(\n turbo: UploadClient,\n filePath: string,\n options?: {\n cache?: TransactionCache\n fundingMode?: OnDemandFunding\n },\n): Promise<UploadResult> {\n const mimeType = mime.lookup(filePath) || 'application/octet-stream'\n\n // Compute hash if cache is provided\n const fileHash = options?.cache ? await hashFile(filePath) : undefined\n\n // Check cache for hit\n if (fileHash && options?.cache) {\n const cached = getCachedTransaction(options.cache, fileHash)\n if (cached) {\n const updatedCache = touchCacheEntry(options.cache, fileHash)\n return {\n cacheHit: true,\n transactionId: cached.transactionId,\n updatedCache,\n }\n }\n }\n\n // Upload file\n const uploadResult = await turbo.uploadFile({\n dataItemOpts: {\n tags: [\n {\n name: 'App-Name',\n value: 'Permaweb-Deploy',\n },\n {\n name: 'anchor',\n value: new Date().toISOString(),\n },\n {\n name: 'Content-Type',\n value: mimeType,\n },\n ],\n },\n file: filePath,\n ...(options?.fundingMode && { fundingMode: options.fundingMode }),\n })\n\n if (!uploadResult?.id) {\n throw new Error('Failed to upload file: upload result missing transaction ID')\n }\n\n // Store in cache if provided\n if (fileHash && options?.cache) {\n const updatedCache = setCachedTransaction(options.cache, fileHash, uploadResult.id)\n return {\n cacheHit: false,\n cost: uploadResult.cost,\n size: uploadResult.size,\n transactionId: uploadResult.id,\n updatedCache,\n }\n }\n\n return {\n cacheHit: false,\n cost: uploadResult.cost,\n size: uploadResult.size,\n transactionId: uploadResult.id,\n }\n}\n\n/** Default concurrency for parallel file uploads */\nconst DEFAULT_UPLOAD_CONCURRENCY = 10\n\ninterface FileUploadTask {\n cached?: { transactionId: string }\n fullPath: string\n hash: string\n relativePath: string\n}\n\n/**\n * Upload a folder with per-file deduplication.\n * Each file is checked against the cache individually, and only uncached files are uploaded.\n * A manifest is then constructed and uploaded to create the folder structure.\n *\n * @param turbo - Upload client used for file and manifest uploads.\n * @param folderPath - Folder to upload.\n * @param options - Upload options for caching, concurrency, funding, and failure handling.\n * @returns Folder upload result including manifest transaction ID and cache stats.\n */\nexport async function uploadFolder(\n turbo: UploadClient,\n folderPath: string,\n options?: {\n cache?: TransactionCache\n concurrency?: number\n fundingMode?: OnDemandFunding\n throwOnFailure?: boolean\n },\n): Promise<FolderUploadResult> {\n const concurrency = options?.concurrency ?? DEFAULT_UPLOAD_CONCURRENCY\n const useCache = options?.cache !== undefined\n\n // Get all files in the folder\n const relativePaths = getAllFiles(folderPath)\n\n if (relativePaths.length === 0) {\n throw new Error('Folder is empty, nothing to upload')\n }\n\n // Prepare file tasks with hashes (if caching is enabled)\n const tasks: FileUploadTask[] = await Promise.all(\n relativePaths.map(async (relativePath) => {\n const fullPath = path.join(folderPath, relativePath)\n const hash = useCache ? await hashFile(fullPath) : ''\n return { fullPath, hash, relativePath }\n }),\n )\n\n // Check cache for each file\n let cache = options?.cache ?? {}\n let cacheHits = 0\n\n for (const task of tasks) {\n if (useCache && task.hash) {\n const cached = getCachedTransaction(cache, task.hash)\n if (cached) {\n task.cached = { transactionId: cached.transactionId }\n cache = touchCacheEntry(cache, task.hash)\n cacheHits++\n }\n }\n }\n\n // If all files are cached, we still need to build and upload a new manifest\n // (because the manifest itself has a unique transaction ID each time)\n const uncachedTasks = tasks.filter((t) => !t.cached)\n\n // Upload uncached files with concurrency control using p-limit\n const limit = pLimit(concurrency)\n\n const uploadResults = await Promise.all(\n uncachedTasks.map((task) =>\n limit(async () => {\n const mimeType = mime.lookup(task.fullPath) || 'application/octet-stream'\n\n const uploadResult = await turbo.uploadFile({\n dataItemOpts: {\n tags: [\n { name: 'App-Name', value: 'Permaweb-Deploy' },\n { name: 'Content-Type', value: mimeType },\n ],\n },\n file: task.fullPath,\n ...(options?.fundingMode && { fundingMode: options.fundingMode }),\n })\n\n if (!uploadResult?.id) {\n if (options?.throwOnFailure) {\n throw new Error(`Failed to upload file: ${task.relativePath}`)\n }\n\n return { hash: task.hash, task, transactionId: null }\n }\n\n return { hash: task.hash, task, transactionId: uploadResult.id }\n }),\n ),\n )\n\n // Update cache with all successful uploads (done sequentially to avoid race conditions)\n for (const result of uploadResults) {\n if (useCache && result.hash && result.transactionId) {\n cache = setCachedTransaction(cache, result.hash, result.transactionId)\n }\n }\n\n // Check for any failed uploads\n const failedUploads = uploadResults.filter((r) => r.transactionId === null)\n if (failedUploads.length > 0 && options?.throwOnFailure) {\n throw new Error(\n `Failed to upload ${failedUploads.length} file(s): ${failedUploads.map((f) => f.task.relativePath).join(', ')}`,\n )\n }\n\n // Build manifest paths from cached and newly uploaded files\n const manifestPaths: Record<string, { id: string }> = {}\n\n for (const task of tasks) {\n let transactionId: string | null = null\n\n if (task.cached) {\n transactionId = task.cached.transactionId\n } else {\n const uploadResult = uploadResults.find((r) => r.task === task)\n transactionId = uploadResult?.transactionId ?? null\n }\n\n if (transactionId) {\n manifestPaths[task.relativePath] = { id: transactionId }\n\n // Add directory index support: if file is dir/index.html, also add dir → same ID\n if (task.relativePath.endsWith('/index.html')) {\n const dirPath = task.relativePath.replace(/\\/index\\.html$/, '')\n manifestPaths[dirPath] = { id: transactionId }\n }\n }\n }\n\n // Determine the index path (root index.html)\n const indexPath = relativePaths.includes('index.html') ? 'index.html' : undefined\n\n // Build the manifest\n const manifest = {\n manifest: 'arweave/paths',\n version: '0.2.0',\n ...(indexPath && { index: { path: indexPath } }),\n paths: manifestPaths,\n }\n\n // Upload the manifest\n const manifestBuffer = Buffer.from(JSON.stringify(manifest))\n const manifestUploadResult = await turbo.uploadFile({\n dataItemOpts: {\n tags: [\n { name: 'App-Name', value: 'Permaweb-Deploy' },\n { name: 'Content-Type', value: 'application/x.arweave-manifest+json' },\n ],\n },\n fileSizeFactory: () => manifestBuffer.length,\n fileStreamFactory: () => Readable.from(manifestBuffer),\n ...(options?.fundingMode && { fundingMode: options.fundingMode }),\n })\n\n if (!manifestUploadResult?.id) {\n throw new Error('Failed to upload manifest: upload result missing transaction ID')\n }\n\n return {\n cacheHit: cacheHits === tasks.length,\n cacheHits,\n totalFiles: tasks.length,\n transactionId: manifestUploadResult.id,\n updatedCache: useCache ? cache : undefined,\n uploaded: uncachedTasks.length - failedUploads.length,\n }\n}\n"],"names":[],"mappings":"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","x_google_ignoreList":[1,2]}
|
package/dist/commands/deploy.js
CHANGED
|
@@ -10,33 +10,30 @@ import { deployFlagConfigs } from '../constants/flags.js';
|
|
|
10
10
|
import { promptAdvancedOptions } from '../prompts/arns.js';
|
|
11
11
|
import { getWalletConfig } from '../prompts/wallet.js';
|
|
12
12
|
import { extractFlags, resolveConfig } from '../utils/config-resolver.js';
|
|
13
|
-
import {
|
|
13
|
+
import { u as uploadErrorTable } from '../chunks/display-BgIiyBIu.js';
|
|
14
|
+
import { r as runUploadWorkflow, h as hyperbeamBundlerLink } from '../chunks/upload-workflow-DMKlwZve.js';
|
|
14
15
|
import { expandPath } from '../utils/path.js';
|
|
15
16
|
import { createSigner } from '../utils/signer.js';
|
|
16
17
|
|
|
17
18
|
class Deploy extends Command {
|
|
18
19
|
static args = {};
|
|
19
|
-
static description = "Deploy
|
|
20
|
+
static description = "Deploy an application to the permaweb with optional ArNS update";
|
|
20
21
|
static examples = [
|
|
21
|
-
"<%= config.bin %> deploy
|
|
22
|
-
"<%= config.bin %> deploy --
|
|
23
|
-
|
|
24
|
-
"<%= config.bin %> deploy --
|
|
25
|
-
"<%= config.bin %> deploy --arns-name my-app
|
|
26
|
-
"<%= config.bin %> deploy --arns-name my-app --
|
|
27
|
-
'<%= config.bin %> deploy --arns-name my-app --sig-type ethereum --private-key "0x..."',
|
|
28
|
-
"<%= config.bin %> deploy --arns-name my-app --on-demand ario --max-token-amount 1000",
|
|
29
|
-
"<%= config.bin %> deploy --arns-name my-app --uploader https://up.arweave.net",
|
|
30
|
-
"<%= config.bin %> deploy --arns-name my-app --uploader-type hyperbeam --uploader https://hyperbeam.example.com",
|
|
31
|
-
"<%= config.bin %> upload --wallet ./wallet.json # Upload only (no ArNS update)"
|
|
22
|
+
"<%= config.bin %> deploy --wallet ./wallet.json",
|
|
23
|
+
"<%= config.bin %> deploy --wallet ./wallet.json --deploy-folder ./dist",
|
|
24
|
+
"<%= config.bin %> deploy --wallet ./wallet.json --deploy-file ./dist/index.html",
|
|
25
|
+
"<%= config.bin %> deploy --wallet ./wallet.json --uploader-type hyperbeam --uploader https://hyperbeam.example.com",
|
|
26
|
+
"<%= config.bin %> deploy --wallet ./wallet.json --use-arns --arns-name my-app",
|
|
27
|
+
"<%= config.bin %> deploy --wallet ./wallet.json --use-arns --arns-name my-app --undername staging"
|
|
32
28
|
];
|
|
33
29
|
static flags = extractFlags(deployFlagConfigs);
|
|
34
30
|
async run() {
|
|
35
31
|
try {
|
|
36
32
|
const { flags } = await this.parse(Deploy);
|
|
37
|
-
const
|
|
33
|
+
const useArns = Boolean(flags["use-arns"] || flags["arns-name"]);
|
|
34
|
+
const interactive = useArns && !flags["arns-name"];
|
|
38
35
|
if (interactive) {
|
|
39
|
-
this.log(chalk.cyan.bold("\nInteractive Deployment Mode\n"));
|
|
36
|
+
this.log(chalk.cyan.bold("\nInteractive ArNS Deployment Mode\n"));
|
|
40
37
|
}
|
|
41
38
|
const baseConfig = await resolveConfig(deployFlagConfigs, flags, {
|
|
42
39
|
interactive
|
|
@@ -45,7 +42,8 @@ class Deploy extends Command {
|
|
|
45
42
|
privateKey: baseConfig["private-key"],
|
|
46
43
|
wallet: baseConfig.wallet
|
|
47
44
|
};
|
|
48
|
-
|
|
45
|
+
const shouldPromptWallet = !baseConfig.wallet && !baseConfig["private-key"] && (interactive || !process.env.DEPLOY_KEY?.trim());
|
|
46
|
+
if (shouldPromptWallet) {
|
|
49
47
|
const config = await getWalletConfig();
|
|
50
48
|
walletConfig = {
|
|
51
49
|
privateKey: config.privateKey,
|
|
@@ -79,6 +77,7 @@ class Deploy extends Command {
|
|
|
79
77
|
undername: advancedOptions?.undername || baseConfig.undername,
|
|
80
78
|
uploader: baseConfig.uploader,
|
|
81
79
|
"uploader-type": baseConfig["uploader-type"],
|
|
80
|
+
"use-arns": useArns,
|
|
82
81
|
wallet: walletConfig.wallet
|
|
83
82
|
};
|
|
84
83
|
if (interactive) {
|
|
@@ -102,9 +101,71 @@ class Deploy extends Command {
|
|
|
102
101
|
);
|
|
103
102
|
}
|
|
104
103
|
}
|
|
105
|
-
const arioProcess = deployConfig["ario-process"];
|
|
106
104
|
this.log(chalk.cyan.bold("\nStarting deployment...\n"));
|
|
107
105
|
try {
|
|
106
|
+
if (!deployConfig["use-arns"]) {
|
|
107
|
+
const { transactionId: txOrManifestId2 } = await runUploadWorkflow(
|
|
108
|
+
deployKey,
|
|
109
|
+
deployConfig,
|
|
110
|
+
{
|
|
111
|
+
error: (msg) => this.error(msg)
|
|
112
|
+
}
|
|
113
|
+
);
|
|
114
|
+
this.log("");
|
|
115
|
+
const isCI2 = Boolean(process.env.CI);
|
|
116
|
+
const bundlerLink2 = deployConfig["uploader-type"] === "hyperbeam" && deployConfig.uploader ? hyperbeamBundlerLink(
|
|
117
|
+
deployConfig.uploader,
|
|
118
|
+
txOrManifestId2,
|
|
119
|
+
!deployConfig["deploy-file"]
|
|
120
|
+
) : 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
|
+
}
|
|
158
|
+
);
|
|
159
|
+
this.log(`
|
|
160
|
+
${successMessage}`);
|
|
161
|
+
}
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const arioProcess = deployConfig["ario-process"];
|
|
165
|
+
const arnsName = deployConfig["arns-name"];
|
|
166
|
+
if (!arnsName) {
|
|
167
|
+
this.error("--use-arns requires --arns-name");
|
|
168
|
+
}
|
|
108
169
|
const spinner = ora();
|
|
109
170
|
spinner.start("Initializing ARIO");
|
|
110
171
|
const ao = connect({
|
|
@@ -119,13 +180,13 @@ class Deploy extends Command {
|
|
|
119
180
|
})
|
|
120
181
|
});
|
|
121
182
|
spinner.succeed("ARIO initialized");
|
|
122
|
-
spinner.start(`Fetching ArNS record for ${chalk.yellow(
|
|
123
|
-
const arnsNameRecord = await ario.getArNSRecord({ name:
|
|
124
|
-
spinner.fail(`ArNS name ${chalk.red(
|
|
125
|
-
this.error(`ArNS name [${
|
|
183
|
+
spinner.start(`Fetching ArNS record for ${chalk.yellow(arnsName)}`);
|
|
184
|
+
const arnsNameRecord = await ario.getArNSRecord({ name: arnsName }).catch(() => {
|
|
185
|
+
spinner.fail(`ArNS name ${chalk.red(arnsName)} does not exist`);
|
|
186
|
+
this.error(`ArNS name [${arnsName}] does not exist`);
|
|
126
187
|
});
|
|
127
|
-
spinner.succeed(`ArNS record fetched for ${chalk.green(
|
|
128
|
-
const txOrManifestId = await runUploadWorkflow(deployKey, deployConfig, {
|
|
188
|
+
spinner.succeed(`ArNS record fetched for ${chalk.green(arnsName)}`);
|
|
189
|
+
const { transactionId: txOrManifestId } = await runUploadWorkflow(deployKey, deployConfig, {
|
|
129
190
|
error: (msg) => this.error(msg)
|
|
130
191
|
});
|
|
131
192
|
this.log("");
|
|
@@ -155,7 +216,11 @@ class Deploy extends Command {
|
|
|
155
216
|
);
|
|
156
217
|
spinner.succeed("ANT record updated");
|
|
157
218
|
const isCI = Boolean(process.env.CI);
|
|
158
|
-
const bundlerLink = deployConfig["uploader-type"] === "hyperbeam" && deployConfig.uploader ? hyperbeamBundlerLink(
|
|
219
|
+
const bundlerLink = deployConfig["uploader-type"] === "hyperbeam" && deployConfig.uploader ? hyperbeamBundlerLink(
|
|
220
|
+
deployConfig.uploader,
|
|
221
|
+
txOrManifestId,
|
|
222
|
+
!deployConfig["deploy-file"]
|
|
223
|
+
) : void 0;
|
|
159
224
|
if (isCI) {
|
|
160
225
|
this.log("Deployment Successful!");
|
|
161
226
|
this.log("Tx ID: " + txOrManifestId);
|
|
@@ -166,7 +231,7 @@ class Deploy extends Command {
|
|
|
166
231
|
if (bundlerLink) {
|
|
167
232
|
this.log("Bundler link: " + bundlerLink);
|
|
168
233
|
}
|
|
169
|
-
this.log("ArNS Name: " +
|
|
234
|
+
this.log("ArNS Name: " + arnsName);
|
|
170
235
|
this.log("Undername: " + deployConfig.undername);
|
|
171
236
|
this.log("ANT: " + arnsNameRecord.processId);
|
|
172
237
|
this.log("ARIO Process: " + arioProcess);
|
|
@@ -174,7 +239,6 @@ class Deploy extends Command {
|
|
|
174
239
|
this.log(`Arweave URL: https://arweave.net/${txOrManifestId}`);
|
|
175
240
|
} else {
|
|
176
241
|
const table = new Table({
|
|
177
|
-
head: [chalk.cyan.bold("Property"), chalk.cyan.bold("Value")],
|
|
178
242
|
style: {
|
|
179
243
|
head: []
|
|
180
244
|
}
|
|
@@ -186,7 +250,7 @@ class Deploy extends Command {
|
|
|
186
250
|
["Uploader type", chalk.cyan(deployConfig["uploader-type"])]
|
|
187
251
|
] : [],
|
|
188
252
|
...bundlerLink ? [["Bundler link", chalk.yellow(bundlerLink)]] : [],
|
|
189
|
-
["ArNS Name", chalk.yellow(
|
|
253
|
+
["ArNS Name", chalk.yellow(arnsName)],
|
|
190
254
|
["Undername", chalk.yellow(deployConfig.undername)],
|
|
191
255
|
["ANT", chalk.cyan(arnsNameRecord.processId)],
|
|
192
256
|
["ARIO Process", chalk.gray(arioProcess)],
|
|
@@ -209,9 +273,14 @@ ${table.toString()}`,
|
|
|
209
273
|
${successMessage}`);
|
|
210
274
|
}
|
|
211
275
|
} catch (error) {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
)
|
|
276
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
277
|
+
const normalizedError = errorMessage.startsWith("Upload failed:") ? errorMessage.replace(/^Upload failed:\s*/, "") : errorMessage;
|
|
278
|
+
if (errorMessage.startsWith("Upload failed:") && !process.env.CI && process.stdout.isTTY) {
|
|
279
|
+
this.log(`
|
|
280
|
+
${uploadErrorTable(normalizedError, "Deployment failed")}`);
|
|
281
|
+
this.exit(1);
|
|
282
|
+
}
|
|
283
|
+
this.error(chalk.red(`Deployment failed: ${errorMessage}`));
|
|
215
284
|
}
|
|
216
285
|
} catch (error) {
|
|
217
286
|
if (error instanceof Error && error.name === "ExitPromptError") {
|