permaweb-deploy 3.4.6 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/README.md +174 -511
  2. package/dist/chunks/chalk-BP_cCc9v.js +49 -0
  3. package/dist/chunks/chalk-BP_cCc9v.js.map +1 -0
  4. package/dist/chunks/{display-y6lAuqxZ.js → display-CZV6KUcG.js} +2 -2
  5. package/dist/chunks/{display-y6lAuqxZ.js.map → display-CZV6KUcG.js.map} +1 -1
  6. package/dist/chunks/upload-workflow-f3hExxtV.js +620 -0
  7. package/dist/chunks/upload-workflow-f3hExxtV.js.map +1 -0
  8. package/dist/chunks/{uploader-CC-qBdlV.js → uploader-Bz9jraY2.js} +15 -17
  9. package/dist/chunks/uploader-Bz9jraY2.js.map +1 -0
  10. package/dist/commands/deploy.js +72 -98
  11. package/dist/commands/deploy.js.map +1 -1
  12. package/dist/commands/hyperbeam-uploaders.js +48 -0
  13. package/dist/commands/hyperbeam-uploaders.js.map +1 -0
  14. package/dist/commands/upload.js +11 -12
  15. package/dist/commands/upload.js.map +1 -1
  16. package/dist/constants/flags.js +66 -97
  17. package/dist/constants/flags.js.map +1 -1
  18. package/dist/index.js +1 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/prompts/names.js +13 -0
  21. package/dist/prompts/names.js.map +1 -0
  22. package/dist/src/commands/deploy.d.ts +1 -1
  23. package/dist/src/commands/deploy.d.ts.map +1 -1
  24. package/dist/src/commands/hyperbeam-uploaders.d.ts +14 -0
  25. package/dist/src/commands/hyperbeam-uploaders.d.ts.map +1 -0
  26. package/dist/src/commands/upload.d.ts +1 -1
  27. package/dist/src/commands/upload.d.ts.map +1 -1
  28. package/dist/src/constants/flags.d.ts +271 -100
  29. package/dist/src/constants/flags.d.ts.map +1 -1
  30. package/dist/src/index.d.ts +2 -0
  31. package/dist/src/index.d.ts.map +1 -1
  32. package/dist/src/prompts/names.d.ts +2 -0
  33. package/dist/src/prompts/names.d.ts.map +1 -0
  34. package/dist/src/types/index.d.ts +0 -29
  35. package/dist/src/types/index.d.ts.map +1 -1
  36. package/dist/src/utils/__tests__/hyperbeam-uploaders-cli.test.d.ts +2 -0
  37. package/dist/src/utils/__tests__/hyperbeam-uploaders-cli.test.d.ts.map +1 -0
  38. package/dist/src/utils/__tests__/names.test.d.ts +2 -0
  39. package/dist/src/utils/__tests__/names.test.d.ts.map +1 -0
  40. package/dist/src/utils/__tests__/permawebos-bundlers.test.d.ts +2 -0
  41. package/dist/src/utils/__tests__/permawebos-bundlers.test.d.ts.map +1 -0
  42. package/dist/src/utils/config-resolver.d.ts +29 -11
  43. package/dist/src/utils/config-resolver.d.ts.map +1 -1
  44. package/dist/src/utils/constants.d.ts +0 -2
  45. package/dist/src/utils/constants.d.ts.map +1 -1
  46. package/dist/src/utils/hyperbeam-uploader.d.ts +8 -1
  47. package/dist/src/utils/hyperbeam-uploader.d.ts.map +1 -1
  48. package/dist/src/utils/hyperbeam-uploaders-cli.d.ts +7 -0
  49. package/dist/src/utils/hyperbeam-uploaders-cli.d.ts.map +1 -0
  50. package/dist/src/utils/legacy-bundler-uploader.d.ts +29 -0
  51. package/dist/src/utils/legacy-bundler-uploader.d.ts.map +1 -0
  52. package/dist/src/utils/names.d.ts +46 -0
  53. package/dist/src/utils/names.d.ts.map +1 -0
  54. package/dist/src/utils/permawebos-bundlers.d.ts +28 -0
  55. package/dist/src/utils/permawebos-bundlers.d.ts.map +1 -0
  56. package/dist/src/utils/signer.d.ts +4 -6
  57. package/dist/src/utils/signer.d.ts.map +1 -1
  58. package/dist/src/utils/uploader.d.ts +5 -7
  59. package/dist/src/utils/uploader.d.ts.map +1 -1
  60. package/dist/src/utils/validators.d.ts +13 -20
  61. package/dist/src/utils/validators.d.ts.map +1 -1
  62. package/dist/src/workflows/upload-workflow.d.ts +3 -4
  63. package/dist/src/workflows/upload-workflow.d.ts.map +1 -1
  64. package/dist/tests/mocks/{turbo-handlers.d.ts → legacy-handlers.d.ts} +12 -27
  65. package/dist/tests/mocks/legacy-handlers.d.ts.map +1 -0
  66. package/dist/tests/setup.d.ts +2 -2
  67. package/dist/tests/setup.d.ts.map +1 -1
  68. package/dist/tests/types/payment-service.d.ts +2 -2
  69. package/dist/tests/types/payment-service.d.ts.map +1 -1
  70. package/dist/tests/types/upload-service.d.ts +1 -1
  71. package/dist/tests/types/upload-service.d.ts.map +1 -1
  72. package/dist/utils/config-resolver.js +4 -1
  73. package/dist/utils/config-resolver.js.map +1 -1
  74. package/dist/utils/constants.js +1 -3
  75. package/dist/utils/constants.js.map +1 -1
  76. package/dist/utils/hyperbeam-uploaders-cli.js +32 -0
  77. package/dist/utils/hyperbeam-uploaders-cli.js.map +1 -0
  78. package/dist/utils/names.js +157 -0
  79. package/dist/utils/names.js.map +1 -0
  80. package/dist/utils/permawebos-bundlers.js +120 -0
  81. package/dist/utils/permawebos-bundlers.js.map +1 -0
  82. package/dist/utils/signer.js +3 -2
  83. package/dist/utils/signer.js.map +1 -1
  84. package/dist/utils/uploader.js +1 -1
  85. package/dist/utils/validators.js +3 -39
  86. package/dist/utils/validators.js.map +1 -1
  87. package/dist/workflows/upload-workflow.js +5 -6
  88. package/dist/workflows/upload-workflow.js.map +1 -1
  89. package/package.json +6 -6
  90. package/dist/chunks/upload-workflow-CfCTs0EW.js +0 -1113
  91. package/dist/chunks/upload-workflow-CfCTs0EW.js.map +0 -1
  92. package/dist/chunks/uploader-CC-qBdlV.js.map +0 -1
  93. package/dist/prompts/arns.js +0 -89
  94. package/dist/prompts/arns.js.map +0 -1
  95. package/dist/src/prompts/arns.d.ts +0 -13
  96. package/dist/src/prompts/arns.d.ts.map +0 -1
  97. package/dist/tests/mocks/turbo-handlers.d.ts.map +0 -1
package/README.md CHANGED
@@ -1,361 +1,278 @@
1
1
  # Permaweb Deploy
2
2
 
3
- Inspired by the [cookbook github action deployment guide](https://cookbook.arweave.dev/guides/deployment/github-action.html), `permaweb-deploy` is a Node.js command-line tool designed to streamline the deployment of web applications to the permaweb using Arweave. It uploads your build folder or a single file, creates Arweave manifests, and can optionally update ArNS (Arweave Name Service) records via ANT (Arweave Name Token) with the transaction ID.
3
+ `permaweb-deploy` uploads static sites, folders, or individual files to Arweave and can optionally update a Permaweb Name `~reference@1.0` ref value with the deployed transaction or manifest ID.
4
+
5
+ The CLI uses legacy ANS-104 bundlers for the default upload path, supports HyperBEAM bundlers when selected explicitly, and publishes names updates through [`@permaweb/references`](https://www.npmjs.com/package/@permaweb/references).
6
+
7
+ ## Table of Contents
8
+
9
+ - [Features](#features)
10
+ - [Quick Start](#quick-start)
11
+ - [Installation Options](#installation-options)
12
+ - [Prerequisites](#prerequisites)
13
+ - [CLI Usage](#cli-usage)
14
+ - [Names Publishing](#names-publishing)
15
+ - [Bundlers](#bundlers)
16
+ - [Command Options](#command-options)
17
+ - [Deduplication](#deduplication)
18
+ - [Package Scripts](#package-scripts)
19
+ - [GitHub Action](#github-action)
20
+ - [Development](#development)
21
+ - [Troubleshooting](#troubleshooting)
22
+ - [Dependencies](#dependencies)
23
+ - [License](#license)
4
24
 
5
25
  ## Features
6
26
 
7
- - **Turbo SDK Integration:** Uses Turbo SDK for fast, reliable file uploads to Arweave
8
- - **On-Demand Payment:** Pay with ARIO or Base-ETH tokens on-demand during upload
9
- - **Arweave Manifest v0.2.0:** Creates manifests with fallback support for SPAs
10
- - **Optional ArNS Updates:** Updates ArNS records via ANT with new transaction IDs and metadata
11
- - **Automated Workflow:** Integrates with GitHub Actions for continuous deployment
12
- - **Git Hash Tagging:** Automatically tags deployments with Git commit hashes
13
- - **404 Fallback Detection:** Automatically detects and sets 404.html as fallback
14
- - **Network Support:** Supports mainnet, testnet, and custom ARIO process IDs
15
- - **Flexible Deployment:** Supports deploying a folder or a single file
16
- - **Modern CLI:** Built with oclif for a robust command-line experience
17
- - **TypeScript:** Fully typed for better developer experience
27
+ - **Arweave uploads:** Upload a folder or a single file.
28
+ - **Names publishing:** Update a Permaweb Names reference-id's value after upload.
29
+ - **Legacy bundler uploads:** Use legacy ANS-104 upload endpoints by default.
30
+ - **HyperBEAM uploads:** Sign ANS-104 items and post them to a HyperBEAM bundler route.
31
+ - **Arweave manifests:** Create manifest `0.2.0` documents for folder deployments, with SPA fallback detection.
32
+ - **Dedupe cache:** Reuse unchanged uploads from `.permaweb-deploy/transaction-cache.json`.
33
+ - **GitHub Action:** Deploy from CI and optionally update a namespace reference.
18
34
 
19
- ## Installation
35
+ ## Quick Start
20
36
 
21
- Install the package using pnpm (recommended):
37
+ Install the CLI in your project:
22
38
 
23
39
  ```bash
24
40
  pnpm add -D permaweb-deploy
25
41
  ```
26
42
 
27
- Or with npm:
43
+ Make your Arweave JWK available with either `DEPLOY_KEY` or `--wallet`:
28
44
 
29
45
  ```bash
30
- npm install --save-dev permaweb-deploy
46
+ export DEPLOY_KEY=$(base64 -i wallet.json)
31
47
  ```
32
48
 
33
- Or with yarn:
34
-
35
- ```bash
36
- yarn add --dev permaweb-deploy
37
- ```
38
-
39
- ## Prerequisites
40
-
41
- 1. **For Arweave signer (default):** Encode your Arweave wallet key in base64 format and set it as a GitHub secret:
42
-
43
- ```bash
44
- base64 -i wallet.json | pbcopy
45
- ```
46
-
47
- 2. **For Ethereum/Polygon/KYVE signers:** Use your raw private key (no encoding needed) as the `DEPLOY_KEY`.
48
- 3. Ensure that the secret name for the encoded wallet or private key is `DEPLOY_KEY`.
49
-
50
- ⚠️ **Important:** Use a dedicated wallet for deployments to minimize security risks. Ensure your wallet has sufficient Turbo Credits for uploads.
51
-
52
- ## Usage
53
-
54
- ### Interactive Mode (Easiest)
49
+ If you prefer not to export a key, pass `--wallet ./wallet.json` to the commands below.
55
50
 
56
- **Command Menu:**
57
-
58
- Simply run the CLI for an interactive command selector:
51
+ Upload a built static folder:
59
52
 
60
53
  ```bash
61
- permaweb-deploy
62
- # or explicitly
63
- permaweb-deploy interactive
54
+ permaweb-deploy upload --deploy-folder ./dist
64
55
  ```
65
56
 
66
- This shows a menu with options:
67
-
68
- - **Deploy to Permaweb** - Start the deployment wizard
69
- - **Show Help** - Display help information
70
- - **Exit** - Exit the CLI
71
-
72
- **Interactive Deploy (Guided):**
73
-
74
- Run the deploy command without arguments to be guided through all deployment options:
57
+ Deploy and update a Permaweb Name:
75
58
 
76
59
  ```bash
77
- permaweb-deploy deploy
60
+ permaweb-deploy deploy --use-names --name my-app --deploy-folder ./dist
78
61
  ```
79
62
 
80
- This uploads to the permaweb by default. Use `--use-arns` or `--arns-name` to run the guided ArNS update flow, which will prompt you for:
81
-
82
- - ArNS name
83
- - Wallet method (file, string, or environment variable)
84
- - Signer type (Arweave, Ethereum, Polygon, KYVE)
85
- - What to deploy (folder or file)
86
- - Advanced options (optional: undername, TTL, network)
87
-
88
- ### Direct Commands
89
-
90
- Use flags for faster, scriptable deployments:
63
+ Or deploy and update a direct reference ID:
91
64
 
92
65
  ```bash
93
- # Basic deployment with wallet file
94
- permaweb-deploy deploy --wallet ./wallet.json
95
-
96
- # Deployment with ArNS update
97
- permaweb-deploy deploy --use-arns --arns-name my-app --wallet ./wallet.json
66
+ permaweb-deploy deploy --use-names --reference-id REFERENCE_ID --deploy-folder ./dist
98
67
  ```
99
68
 
100
- Deploy using private key directly:
69
+ For repeatable project scripts, add a build-and-deploy command:
101
70
 
102
- ```bash
103
- permaweb-deploy deploy --arns-name my-app --private-key "$(cat wallet.json)"
71
+ ```json
72
+ {
73
+ "scripts": {
74
+ "build": "vite build",
75
+ "deploy": "pnpm build && permaweb-deploy deploy --use-names --name my-app"
76
+ }
77
+ }
104
78
  ```
105
79
 
106
- Deploy using environment variable:
80
+ ## Installation Options
107
81
 
108
82
  ```bash
109
- DEPLOY_KEY=$(base64 -i wallet.json) permaweb-deploy deploy --arns-name my-app
83
+ pnpm add -D permaweb-deploy
110
84
  ```
111
85
 
112
- Deploy a specific folder:
113
-
114
86
  ```bash
115
- permaweb-deploy deploy --arns-name my-app --wallet ./wallet.json --deploy-folder ./build
87
+ npm install --save-dev permaweb-deploy
116
88
  ```
117
89
 
118
- Deploy a single file:
119
-
120
90
  ```bash
121
- permaweb-deploy deploy --arns-name my-app --wallet ./wallet.json --deploy-file ./path/to/file.txt
91
+ yarn add --dev permaweb-deploy
122
92
  ```
123
93
 
124
- ### Upload/deploy without ArNS
94
+ ## Prerequisites
125
95
 
126
- `deploy` uploads without updating ArNS by default. You can also use the `upload` command explicitly for the same Turbo upload, dedupe cache, and payment options as deploy, minus ArNS flags:
96
+ For the default Arweave signer, store your Arweave JWK as base64:
127
97
 
128
98
  ```bash
129
- permaweb-deploy deploy --wallet ./wallet.json --deploy-folder ./dist
130
- permaweb-deploy upload --wallet ./wallet.json --deploy-folder ./dist
131
- permaweb-deploy upload --wallet ./wallet.json --deploy-file ./dist/index.html
132
- DEPLOY_KEY=$(base64 -i wallet.json) permaweb-deploy upload --deploy-folder ./dist
99
+ base64 -i wallet.json
133
100
  ```
134
101
 
135
- ### Advanced Usage
102
+ Set the encoded value as `DEPLOY_KEY`, or pass `--wallet ./wallet.json`.
136
103
 
137
- Deploy to an undername (subdomain):
104
+ Names updates currently require `--sig-type arweave`, because reference updates are signed as ANS-104 data items and posted to the names bundler endpoint. Ethereum, Polygon, and KYVE signers remain supported for upload-only flows.
138
105
 
139
- ```bash
140
- permaweb-deploy deploy --arns-name my-app --wallet ./wallet.json --undername staging
141
- ```
106
+ Use a dedicated deployment wallet and make sure it has enough upload credits/balance for the selected legacy bundler.
107
+
108
+ ## CLI Usage
142
109
 
143
- Deploy with a custom TTL:
110
+ Upload only:
144
111
 
145
112
  ```bash
146
- permaweb-deploy deploy --arns-name my-app --wallet ./wallet.json --ttl-seconds 7200
113
+ permaweb-deploy deploy --wallet ./wallet.json --deploy-folder ./dist
114
+ permaweb-deploy upload --wallet ./wallet.json --deploy-file ./dist/index.html
115
+ DEPLOY_KEY=$(base64 -i wallet.json) permaweb-deploy upload --deploy-folder ./dist
147
116
  ```
148
117
 
149
- Deploy using Ethereum wallet (file):
118
+ Upload and update a reference-id pointed value using the namespace name:
150
119
 
151
120
  ```bash
152
- permaweb-deploy deploy --arns-name my-app --sig-type ethereum --wallet ./private-key.txt
121
+ permaweb-deploy deploy --use-names --name my-app --wallet ./wallet.json
153
122
  ```
154
123
 
155
- Deploy using Ethereum wallet (direct key):
124
+ Upload and update a direct reference ID:
156
125
 
157
126
  ```bash
158
- permaweb-deploy deploy --arns-name my-app --sig-type ethereum --private-key "0x1234..."
127
+ permaweb-deploy deploy --use-names --reference-id REFERENCE_ID --wallet ./wallet.json
159
128
  ```
160
129
 
161
- ### On-Demand Payment
162
-
163
- Use on-demand payment to automatically fund uploads with ARIO or Base-ETH tokens when your Turbo balance is insufficient:
164
-
165
- Deploy with ARIO on-demand payment:
130
+ Advanced: use a custom namespace root reference or namespace manifest ID:
166
131
 
167
132
  ```bash
168
- permaweb-deploy deploy --arns-name my-app --wallet ./wallet.json --on-demand ario --max-token-amount 1.5
133
+ permaweb-deploy deploy \
134
+ --use-names \
135
+ --name my-app \
136
+ --names-namespace NAMESPACE_ROOT_OR_MANIFEST_ID \
137
+ --wallet ./wallet.json
169
138
  ```
170
139
 
171
- Deploy with Base-ETH on-demand payment (using Ethereum signer):
140
+ Deploy a specific target:
172
141
 
173
142
  ```bash
174
- permaweb-deploy deploy --arns-name my-app --sig-type ethereum --private-key "0x..." --on-demand base-eth --max-token-amount 0.1
143
+ permaweb-deploy deploy --use-names --name my-app --wallet ./wallet.json --deploy-folder ./build
144
+ permaweb-deploy deploy --use-names --name my-app --wallet ./wallet.json --deploy-file ./path/to/file.txt
175
145
  ```
176
146
 
177
- **On-Demand Payment Options:**
178
-
179
- - `--on-demand`: Token to use for on-demand payment (`ario` or `base-eth`)
180
- - `--max-token-amount`: Maximum token amount to spend (in native token units, e.g., `1.5` for 1.5 ARIO or `0.1` for 0.1 ETH)
147
+ ## Names Publishing
181
148
 
182
- **How it works:**
149
+ `--name` resolves the name inside the configured namespace manifest and updates that reference. `--reference-id` bypasses namespace lookup and updates the reference directly.
183
150
 
184
- 1. Checks your Turbo balance before upload
185
- 2. If balance is insufficient, converts tokens to Turbo credits on-demand
186
- 3. Automatically adds a 10% buffer (`topUpBufferMultiplier: 1.1`) for reliability
187
- 4. Proceeds with upload once funded
151
+ The default namespace is the phase-2 namespace exported by `@permaweb/references`. Override it with `--names-namespace` when you want to publish against another namespace root reference or manifest.
188
152
 
189
- **Token compatibility:**
153
+ Useful flags:
190
154
 
191
- - **ARIO**: Works with Arweave signer
192
- - **Base-ETH**: Works with Ethereum signer (Base Network)
155
+ - `--use-names`: update a Permaweb Names reference after upload.
156
+ - `--name, -n`: namespace name to update.
157
+ - `--reference-id`: reference ID to update directly.
158
+ - `--names-namespace`: namespace root reference or manifest ID used to resolve `--name`.
159
+ - `--names-gateway`: gateway for reference and namespace reads. Default: `https://arweave.net`.
160
+ - `--names-graphql`: GraphQL endpoint for reference discovery. Default: `<names-gateway>/graphql`.
193
161
 
194
- ### Bundler service
162
+ ## Bundlers
195
163
 
196
- Uploads go through a bundler service that accepts signed data items and posts them to Arweave. By default, permaweb-deploy uses the [Turbo](https://docs.ardrive.io/docs/turbo/) API and ArDrive’s production bundler (`https://upload.ardrive.io`). **`--uploader`** sets the **base URL** of the bundler service to use (scheme + host; typically no path).
197
-
198
- | When to use | Example value |
199
- | ------------------------- | ----------------------------------------------------------------- |
200
- | **Default** (omit flag) | ArDrive production bundler — same as Turbo CLI defaults |
201
- | **Arweave bundler** | `https://up.arweave.net` |
202
- | **Development / staging** | `https://upload.ardrive.dev` |
203
- | **Custom or self-hosted** | Your own base URL if it implements the selected uploader protocol |
204
-
205
- **Examples:**
164
+ By default, uploads use the legacy ANS-104 endpoint at `https://up.arweave.net`. Pass `--uploader` to choose a different base URL.
206
165
 
207
166
  ```bash
208
- # Deploy using Arweave’s bundler service
209
- permaweb-deploy deploy --arns-name my-app --wallet ./wallet.json --uploader https://up.arweave.net
210
-
211
167
  permaweb-deploy upload --wallet ./wallet.json --deploy-folder ./dist --uploader https://up.arweave.net
212
168
  ```
213
169
 
214
- To upload through a HyperBEAM bundler, set `--uploader-type hyperbeam` and pass the node URL:
170
+ HyperBEAM upload:
215
171
 
216
172
  ```bash
217
173
  permaweb-deploy upload \
218
174
  --wallet ./wallet.json \
219
175
  --deploy-folder ./dist \
220
- --uploader-type hyperbeam \
221
- --uploader https://hyperbeam.example.com
176
+ --uploader-type hyperbeam
177
+ ```
222
178
 
223
- permaweb-deploy deploy \
224
- --wallet ./wallet.json \
225
- --deploy-folder ./dist \
226
- --uploader-type hyperbeam \
227
- --uploader https://hyperbeam.example.com
179
+ When `--uploader-type hyperbeam` is set and `--uploader` is omitted, the CLI discovers active [PermawebOS HyperBEAM](https://ao.arweave.net/#/stake/bundle) uploaders and randomly selects a usable node. HyperBEAM uploads always check that the selected or pinned node wallet has more than 0 AR before posting data, because the node must be able to seed data to Arweave. Pass `--uploader https://hyperbeam.example.com` to pin a specific node and bypass discovery.
180
+
181
+ List discoverable HyperBEAM uploaders:
182
+
183
+ ```bash
184
+ permaweb-deploy hyperbeam-uploaders
185
+ permaweb-deploy hyperbeam-uploaders --json
228
186
  ```
229
187
 
230
- If the node follows the standard AO-paid HyperBEAM bundler flow, either command can fund the uploader wallet before uploading:
188
+ HyperBEAM auto-fund:
231
189
 
232
190
  ```bash
233
191
  permaweb-deploy upload \
234
192
  --wallet ./wallet.json \
235
193
  --deploy-folder ./dist \
236
194
  --uploader-type hyperbeam \
237
- --uploader https://hyperbeam.example.com \
238
195
  --hyperbeam-auto-fund
239
196
  ```
240
197
 
241
- **Notes:**
242
-
243
- - Turbo billing and signer behavior follow Turbo.
244
- - HyperBEAM uploads require an Arweave JWK signer. Before uploading, the CLI checks the node address from `/~meta@1.0/info/address` against `https://arweave.net/wallet/<address>/balance` and aborts if the bundler wallet has 0 AR. With `--hyperbeam-auto-fund`, the CLI signs each data item, asks the node's byte-pricing profile for a quote, sends AO to the node deposit address, imports that deposit through `/~ao-payment@1.0/ingest`, and waits for the uploader's balance at `/ledger~node-process@1.0/now/balance/<address>` before uploading. The default route is `/~bundler@1.0/item?codec-device=ans104@1.0`; override it with `--hyperbeam-upload-path` if your node exposes a different bundler route.
245
- - `--hyperbeam-fund-amount` is an optional override for the minimum local ledger balance to ensure, in AO base units. Without it, `--hyperbeam-auto-fund` uses the node's byte-pricing quote for the signed byte count. Use `--hyperbeam-token-id` only for a non-default AO token process, and `--hyperbeam-ledger-id` only for a non-default local ledger profile.
246
- - Use a **base URL only** (e.g. `https://up.arweave.net` or `https://hyperbeam.example.com`), not a path to a specific file or route.
247
-
248
- ### Command Options
249
-
250
- **`deploy`** (upload by default, optional ArNS update):
251
-
252
- - `--use-arns`: Update an ArNS/ANT record after upload
253
- - `--arns-name, -n`: The ArNS name to update. Required when using `--use-arns`; also implies ArNS mode for backwards compatibility.
254
- - `--ario-process, -p`: ARIO process to use (`mainnet`, `testnet`, or a custom process ID). Default: `mainnet`
255
- - `--deploy-folder, -d`: Folder to deploy. Default: `./dist`
256
- - `--deploy-file, -f`: Deploy a single file instead of a folder
257
- - `--undername, -u`: ANT undername to update. Default: `@`
258
- - `--ttl-seconds, -t`: TTL in seconds for the ANT record (60-86400). Default: `60`
259
- - `--sig-type, -s`: Signer type for deployment. Choices: `arweave`, `ethereum`, `polygon`, `kyve`. Default: `arweave`
260
- - `--wallet, -w`: Path to wallet file (JWK for Arweave, private key for Ethereum/Polygon/KYVE)
261
- - `--private-key, -k`: Private key or JWK JSON string (alternative to `--wallet`)
262
- - `--on-demand`: Enable on-demand payment with specified token. Choices: `ario`, `base-eth`
263
- - `--max-token-amount`: Maximum token amount for on-demand payment (used with `--on-demand`)
264
- - `--no-dedupe`: Disable deduplication (do not cache or reuse previous uploads)
265
- - `--dedupe-cache-max-entries`: Maximum number of entries to keep in the dedupe cache (LRU). Default: `10000`
266
- - `--uploader`: Base URL of the bundler service to use. See [Bundler service](#bundler-service) above.
267
- - `--uploader-type`: Upload protocol to use (`turbo` or `hyperbeam`). Default: `turbo`
268
- - `--hyperbeam-upload-path`: HyperBEAM bundler route. Default: `/~bundler@1.0/item?codec-device=ans104@1.0`
269
- - `--hyperbeam-auto-fund`: Automatically fund the HyperBEAM local ledger before upload
270
- - `--hyperbeam-fund-amount`: Optional minimum HyperBEAM local ledger balance override, in token base units
271
- - `--hyperbeam-token-id`: Advanced AO token process ID override
272
- - `--hyperbeam-ledger-id`: Advanced local HyperBEAM ledger ID override
273
- - `--hyperbeam-ao-state-url`: AO state endpoint used while waiting for auto-fund transfer assignment. Default: `https://state.forward.computer`
198
+ HyperBEAM uploads require an Arweave JWK signer. The default route is `/~bundler@1.0/item?codec-device=ans104@1.0`; override it with `--hyperbeam-upload-path` if your node exposes a different route.
274
199
 
275
- **`upload`** (explicit upload without ArNS): accepts `--deploy-folder`, `--deploy-file`, wallet/signer flags, uploader flags, `--on-demand` / `--max-token-amount`, and dedupe flags only.
200
+ ## Command Options
276
201
 
277
- ### Deduplication
202
+ `deploy` supports upload flags plus names publishing flags:
278
203
 
279
- By default, permaweb-deploy caches your deployment log to prevent uploading duplicate (unchanged) files. This saves both time and upload costs by reusing existing data on Arweave.
204
+ - `--deploy-folder, -d`: folder to deploy. Default: `./dist`.
205
+ - `--deploy-file, -f`: deploy a single file instead of a folder.
206
+ - `--sig-type, -s`: signer type. Choices: `arweave`, `ethereum`, `polygon`, `kyve`. Default: `arweave`.
207
+ - `--wallet, -w`: path to wallet file.
208
+ - `--private-key, -k`: private key or JWK JSON string.
209
+ - `--no-dedupe`: disable dedupe cache.
210
+ - `--dedupe-cache-max-entries`: LRU cache size. Default: `10000`.
211
+ - `--uploader`: bundler service base URL. Legacy uploads default to `https://up.arweave.net`; HyperBEAM uploads auto-discover an active PermawebOS uploader when omitted.
212
+ - `--uploader-type`: upload protocol, `legacy` or `hyperbeam`. Default: `legacy`.
213
+ - `--hyperbeam-upload-path`: HyperBEAM bundler route.
214
+ - `--hyperbeam-auto-fund`: fund the HyperBEAM local ledger before upload.
215
+ - `--hyperbeam-fund-amount`: optional minimum HyperBEAM local ledger balance override.
216
+ - `--hyperbeam-token-id`: advanced AO token process ID override.
217
+ - `--hyperbeam-ledger-id`: advanced local HyperBEAM ledger ID override.
218
+ - `--hyperbeam-ao-state-url`: AO state endpoint used while waiting for auto-fund assignment.
219
+ - `--use-names`, `--name`, `--reference-id`, `--names-namespace`, `--names-gateway`, `--names-graphql`: names publishing options.
280
220
 
281
- **How it works:**
221
+ `upload` accepts upload, wallet, signer, bundler, and dedupe flags only.
282
222
 
283
- 1. When you deploy, permaweb-deploy hashes each file in your build
284
- 2. It checks the local cache for matching hashes from previous uploads
285
- 3. Files that haven't changed are skipped - the existing transaction ID is reused
286
- 4. Only new or modified files are uploaded to Arweave
287
- 5. The cache is stored locally in `.permaweb-deploy/transaction-cache.json`
223
+ ## Deduplication
288
224
 
289
- **Disable deduplication:**
225
+ The dedupe cache avoids re-uploading unchanged files. It hashes each deployed file and stores transaction IDs in `.permaweb-deploy/transaction-cache.json`.
290
226
 
291
- If you need to force a fresh upload of all files (e.g., for debugging or to ensure a completely new deployment):
227
+ Disable dedupe:
292
228
 
293
229
  ```bash
294
- permaweb-deploy deploy --arns-name my-app --wallet ./wallet.json --no-dedupe
230
+ permaweb-deploy deploy --use-names --name my-app --wallet ./wallet.json --no-dedupe
295
231
  ```
296
232
 
297
- **Limit cache size:**
298
-
299
- The dedupe cache uses an LRU (Least Recently Used) eviction strategy. By default, it keeps up to 10,000 entries. You can adjust this limit:
233
+ Limit cache size:
300
234
 
301
235
  ```bash
302
- # Keep only the last 1000 file entries
303
- permaweb-deploy deploy --arns-name my-app --wallet ./wallet.json --dedupe-cache-max-entries 1000
236
+ permaweb-deploy deploy --use-names --name my-app --wallet ./wallet.json --dedupe-cache-max-entries 1000
304
237
  ```
305
238
 
306
- **Cache location:**
307
-
308
- The cache file is stored at `.permaweb-deploy/transaction-cache.json` in your project root. You can:
309
-
310
- - Add it to `.gitignore` if you don't want to share cache across team members
311
- - Commit it to share cached transaction IDs with your team (reduces duplicate uploads)
312
- - Delete it to start fresh: `rm -rf .permaweb-deploy/`
313
-
314
- ### Package.json Scripts
315
-
316
- Add deployment scripts to your `package.json`:
239
+ ## Package Scripts
317
240
 
318
241
  ```json
319
242
  {
320
243
  "scripts": {
321
244
  "build": "vite build",
322
- "deploy": "pnpm build && permaweb-deploy deploy --arns-name <ARNS_NAME>",
323
- "deploy:staging": "pnpm build && permaweb-deploy deploy --arns-name <ARNS_NAME> --undername staging",
324
- "deploy:testnet": "pnpm build && permaweb-deploy deploy --arns-name <ARNS_NAME> --ario-process testnet",
325
- "deploy:on-demand": "pnpm build && permaweb-deploy deploy --arns-name <ARNS_NAME> --on-demand ario --max-token-amount 1.5"
245
+ "deploy": "pnpm build && permaweb-deploy deploy --use-names --name <NAME>",
246
+ "deploy:ref": "pnpm build && permaweb-deploy deploy --use-names --reference-id <REFERENCE_ID>"
326
247
  }
327
248
  }
328
249
  ```
329
250
 
330
- Then deploy with:
331
-
332
251
  ```bash
333
252
  DEPLOY_KEY=$(base64 -i wallet.json) pnpm deploy
334
253
  ```
335
254
 
336
- Or with on-demand payment:
337
-
338
- ```bash
339
- DEPLOY_KEY=$(base64 -i wallet.json) pnpm deploy:on-demand
340
- ```
341
-
342
255
  ## GitHub Action
343
256
 
344
- The easiest way to integrate permaweb-deploy into your CI/CD pipeline is using our official GitHub Action.
257
+ ```yaml
258
+ - uses: permaweb/permaweb-deploy@v1
259
+ with:
260
+ deploy-key: ${{ secrets.DEPLOY_KEY }}
261
+ name: myapp
262
+ deploy-folder: ./dist
263
+ ```
345
264
 
346
- ### Basic Usage
265
+ Use a direct reference ID:
347
266
 
348
267
  ```yaml
349
268
  - uses: permaweb/permaweb-deploy@v1
350
269
  with:
351
270
  deploy-key: ${{ secrets.DEPLOY_KEY }}
352
- arns-name: myapp
271
+ reference-id: ${{ secrets.NAMES_REFERENCE_ID }}
353
272
  deploy-folder: ./dist
354
273
  ```
355
274
 
356
- ### PR Preview Deployments
357
-
358
- Automatically deploy preview builds for each pull request. The `preview` mode auto-generates an undername from the PR number and posts a comment with the preview URL:
275
+ PR preview names:
359
276
 
360
277
  ```yaml
361
278
  name: Deploy PR Preview
@@ -369,327 +286,73 @@ jobs:
369
286
  runs-on: ubuntu-latest
370
287
  steps:
371
288
  - uses: actions/checkout@v4
372
-
373
- - name: Setup Node.js
374
- uses: actions/setup-node@v4
289
+ - uses: actions/setup-node@v4
375
290
  with:
376
291
  node-version: '20'
377
-
378
- - name: Install dependencies
379
- run: npm ci
380
-
381
- - name: Build
382
- run: npm run build
383
-
384
- - name: Deploy Preview
385
- uses: permaweb/permaweb-deploy@v1
292
+ - run: npm ci
293
+ - run: npm run build
294
+ - uses: permaweb/permaweb-deploy@v1
386
295
  with:
387
296
  deploy-key: ${{ secrets.DEPLOY_KEY }}
388
- arns-name: myapp
389
297
  preview: 'true'
390
298
  github-token: ${{ secrets.GITHUB_TOKEN }}
391
299
  deploy-folder: ./dist
392
300
  ```
393
301
 
394
- When `preview` is enabled, the action will:
395
-
396
- - Auto-generate an undername like `pr-123` from the PR number
397
- - Post a comment on the PR with the preview URL
398
- - Update the comment on subsequent pushes instead of creating new ones
399
-
400
- ### Production Deployment
401
-
402
- Deploy to your base ArNS name when pushing to main:
403
-
404
- ```yaml
405
- name: Deploy to Production
406
-
407
- on:
408
- push:
409
- branches: [main]
410
-
411
- jobs:
412
- deploy:
413
- runs-on: ubuntu-latest
414
- steps:
415
- - uses: actions/checkout@v4
416
-
417
- - name: Setup Node.js
418
- uses: actions/setup-node@v4
419
- with:
420
- node-version: '20'
421
-
422
- - name: Install dependencies
423
- run: npm ci
424
-
425
- - name: Build
426
- run: npm run build
427
-
428
- - name: Deploy to Permaweb
429
- uses: permaweb/permaweb-deploy@v1
430
- with:
431
- deploy-key: ${{ secrets.DEPLOY_KEY }}
432
- arns-name: myapp
433
- deploy-folder: ./dist
434
- ```
435
-
436
- ### With On-Demand Payment
437
-
438
- ```yaml
439
- - name: Deploy with ARIO on-demand
440
- uses: permaweb/permaweb-deploy@v1
441
- with:
442
- deploy-key: ${{ secrets.DEPLOY_KEY }}
443
- arns-name: myapp
444
- deploy-folder: ./dist
445
- on-demand: ario
446
- max-token-amount: '2.0'
447
- ```
448
-
449
- ### With HyperBEAM
450
-
451
- ```yaml
452
- - name: Deploy through a HyperBEAM bundler
453
- uses: permaweb/permaweb-deploy@v1
454
- with:
455
- deploy-key: ${{ secrets.DEPLOY_KEY }}
456
- arns-name: myapp
457
- deploy-folder: ./dist
458
- uploader-type: hyperbeam
459
- uploader: https://hyperbeam.example.com
460
- hyperbeam-auto-fund: 'true'
461
- ```
462
-
463
- ### Disabling Deduplication
464
-
465
- By default, the action caches transaction IDs to avoid re-uploading unchanged files. To disable this:
466
-
467
- ```yaml
468
- - name: Deploy without dedupe
469
- uses: permaweb/permaweb-deploy@v1
470
- with:
471
- deploy-key: ${{ secrets.DEPLOY_KEY }}
472
- arns-name: myapp
473
- deploy-folder: ./dist
474
- no-dedupe: 'true'
475
- ```
476
-
477
- You can also limit the cache size:
478
-
479
- ```yaml
480
- - name: Deploy with limited cache
481
- uses: permaweb/permaweb-deploy@v1
482
- with:
483
- deploy-key: ${{ secrets.DEPLOY_KEY }}
484
- arns-name: myapp
485
- deploy-folder: ./dist
486
- dedupe-cache-max-entries: '1000'
487
- ```
488
-
489
- ---
490
-
491
- ## CLI in GitHub Actions
492
-
493
- You can also use the CLI directly in your workflows:
494
-
495
- **Basic Workflow:**
496
-
497
- ```yaml
498
- name: Deploy to Permaweb
499
-
500
- on:
501
- push:
502
- branches:
503
- - main
504
-
505
- jobs:
506
- publish:
507
- runs-on: ubuntu-latest
508
- steps:
509
- - uses: actions/checkout@v4
510
-
511
- - uses: pnpm/action-setup@v3
512
- with:
513
- version: 9
514
-
515
- - uses: actions/setup-node@v4
516
- with:
517
- node-version: 20
518
- cache: 'pnpm'
519
-
520
- - run: pnpm install
521
-
522
- - run: pnpm deploy
523
- env:
524
- DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
525
- ```
526
-
527
- **With On-Demand Payment:**
302
+ When `preview` is enabled, the action generates a namespace name from the repository and PR number, deploys the content, updates that name, and posts or updates a PR comment.
528
303
 
529
- ```yaml
530
- name: Deploy to Permaweb with On-Demand Payment
304
+ Action inputs for names publishing:
531
305
 
532
- on:
533
- push:
534
- branches:
535
- - main
536
-
537
- jobs:
538
- publish:
539
- runs-on: ubuntu-latest
540
- steps:
541
- - uses: actions/checkout@v4
542
-
543
- - uses: pnpm/action-setup@v3
544
- with:
545
- version: 9
546
-
547
- - uses: actions/setup-node@v4
548
- with:
549
- node-version: 20
550
- cache: 'pnpm'
551
-
552
- - run: pnpm install
553
- - run: pnpm build
554
-
555
- - name: Deploy with ARIO on-demand
556
- run: permaweb-deploy deploy --arns-name my-app --on-demand ario --max-token-amount 2.0
557
- env:
558
- DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
559
-
560
- # Or deploy with Ethereum and Base-ETH:
561
- # - name: Deploy with Base-ETH on-demand
562
- # run: |
563
- # permaweb-deploy deploy \
564
- # --arns-name my-app \
565
- # --sig-type ethereum \
566
- # --on-demand base-eth \
567
- # --max-token-amount 0.2
568
- # env:
569
- # DEPLOY_KEY: ${{ secrets.ETH_PRIVATE_KEY }}
570
- ```
306
+ - `name`: namespace name to update.
307
+ - `reference-id`: reference ID to update directly.
308
+ - `names-namespace`: namespace root reference or manifest ID.
309
+ - `names-gateway`: gateway for reference and namespace reads.
310
+ - `names-graphql`: GraphQL endpoint for reference discovery.
311
+ - `auto-name`: generate a namespace name from PR number or branch name.
312
+ - `preview`: enable `auto-name` and post a PR comment.
571
313
 
572
314
  ## Development
573
315
 
574
- ### Setup
575
-
576
316
  ```bash
577
- # Install dependencies
578
317
  pnpm install
579
-
580
- # Build the project
581
318
  pnpm build
582
-
583
- # Run in development mode
584
- pnpm dev
585
-
586
- # Run tests
587
319
  pnpm test
588
-
589
- # Run linter
590
320
  pnpm lint
591
-
592
- # Format code
593
- pnpm format
594
321
  ```
595
322
 
596
- ### Project Structure
323
+ Project layout:
597
324
 
598
- ```
325
+ ```text
599
326
  permaweb-deploy/
600
- ├── src/
601
- ├── commands/ # oclif commands
602
- │ │ ├── deploy.ts
603
- │ │ └── upload.ts
604
- ├── types/ # TypeScript type definitions
605
- │ │ └── index.ts
606
- ├── utils/ # Utility functions
607
- │ │ ├── constants.ts
608
- │ │ ├── signer.ts
609
- │ │ ├── uploader.ts
610
- │ │ └── __tests__/ # Unit tests
611
- │ └── index.ts # Main entry point
612
- ├── bin/ # Executable scripts
613
- │ ├── run.js
614
- │ └── dev.js
615
- ├── .changeset/ # Changesets configuration
616
- ├── .husky/ # Git hooks
617
- └── dist/ # Build output
327
+ ├── src/commands
328
+ ├── src/constants
329
+ ├── src/prompts
330
+ ├── src/types
331
+ ├── src/utils
332
+ ├── src/workflows
333
+ ├── tests
334
+ └── bin
618
335
  ```
619
336
 
620
- ## Security & Best Practices
621
-
622
- - **Dedicated Wallet:** Always use a dedicated wallet for deployments to minimize security risks
623
- - **Wallet Encoding:** Arweave wallets must be base64 encoded to be used in the deployment script
624
- - **ArNS Name:** Required only when updating an ANT/ArNS target undername or root record
625
- - **Turbo Credits:** Ensure your wallet has sufficient Turbo Credits, or use on-demand payment for automatic funding
626
- - **On-Demand Limits:** Set reasonable `--max-token-amount` limits to prevent unexpected costs
627
- - **Secret Management:** Keep your `DEPLOY_KEY` secret secure and never commit it to your repository
628
- - **Build Security:** Always check your build for exposed environmental secrets before deployment, as data on Arweave is permanent
629
-
630
337
  ## Troubleshooting
631
338
 
632
- - **Error: "DEPLOY_KEY environment variable not set":** Verify your base64 encoded wallet is set as the `DEPLOY_KEY` environment variable
633
- - **Error: "deploy-folder does not exist":** Check that your build folder exists and the path is correct
634
- - **Error: "deploy-file does not exist":** Check that your build file exists and the path is correct
635
- - **Error: "ArNS name does not exist":** Verify the ArNS name is correct and exists in the specified network
636
- - **Upload timeouts:** Files have a timeout for upload. Large files may fail and require optimization
637
- - **Insufficient Turbo Credits:** Use `--on-demand` with `--max-token-amount` to automatically fund uploads when balance is low
638
- - **On-demand payment fails:** Ensure your wallet has sufficient tokens (ARIO or Base-ETH) and the token type matches your signer (`ario` with Arweave, `base-eth` with Ethereum)
639
-
640
- ## Contributing
641
-
642
- Contributions are welcome! Please follow these guidelines:
643
-
644
- 1. Fork the repository
645
- 2. Create a feature branch
646
- 3. Make your changes
647
- 4. Run tests and linter: `pnpm test && pnpm lint`
648
- 5. Create a changeset: `pnpm changeset`
649
- 6. Commit your changes using conventional commits
650
- 7. Push and create a pull request
651
-
652
- ### Conventional Commits
653
-
654
- This project uses [Conventional Commits](https://www.conventionalcommits.org/). Commit messages should follow this format:
655
-
656
- ```
657
- type(scope): subject
658
-
659
- body (optional)
660
- ```
661
-
662
- Types: `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `build`, `ci`, `chore`, `revert`
663
-
664
- ### Changesets
665
-
666
- We use [changesets](https://github.com/changesets/changesets) for version management. When making changes:
667
-
668
- ```bash
669
- pnpm changeset
670
- ```
671
-
672
- Follow the prompts to describe your changes.
339
+ - **`DEPLOY_KEY environment variable not set`:** pass `--wallet`, pass `--private-key`, or set `DEPLOY_KEY`.
340
+ - **`Names updates currently require --sig-type arweave`:** reference updates are signed as ANS-104 data items; use an Arweave JWK for names updates.
341
+ - **`Name [...] does not exist in namespace ...`:** verify the namespace manifest contains the name or use `--reference-id`.
342
+ - **`signer is not reference authority`:** use the wallet that controls the target reference.
343
+ - **`deploy-folder does not exist`:** check the build output path.
344
+ - **`deploy-file does not exist`:** check the file path.
345
+ - **Legacy upload rejected:** check the upload endpoint response and retry with another legacy bundler if needed.
673
346
 
674
347
  ## Dependencies
675
348
 
676
- - **@ar.io/sdk** - For ANT operations and ArNS management
677
- - **@ardrive/turbo-sdk** - For fast file uploads to Arweave
678
- - **@permaweb/aoconnect** - For AO network connectivity
679
- - **@oclif/core** - CLI framework
680
- - **mime-types** - MIME type detection
349
+ - **@permaweb/references** - namespace reference reads and writes.
350
+ - **@dha-team/arbundles** - ANS-104 data item signing.
351
+ - **@permaweb/aoconnect** - AO network connectivity.
352
+ - **@permaweb/hyperbalance** - HyperBEAM auto-fund support.
353
+ - **@oclif/core** - CLI framework.
354
+ - **mime-types** - MIME type detection.
681
355
 
682
356
  ## License
683
357
 
684
358
  ISC
685
-
686
- ## Author
687
-
688
- NickJ202
689
-
690
- ## Links
691
-
692
- - [GitHub Repository](https://github.com/permaweb/permaweb-deploy)
693
- - [Issues](https://github.com/permaweb/permaweb-deploy/issues)
694
- - [Arweave Documentation](https://docs.arweave.org/)
695
- - [AR.IO Documentation](https://docs.ar.io/)