permaweb-deploy 2.5.1 → 3.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 (78) hide show
  1. package/README.md +311 -83
  2. package/bin/dev.js +5 -0
  3. package/bin/run.js +5 -0
  4. package/dist/commands/deploy.js +227 -0
  5. package/dist/commands/deploy.js.map +1 -0
  6. package/dist/constants/flags.js +190 -0
  7. package/dist/constants/flags.js.map +1 -0
  8. package/dist/index.js +2 -299
  9. package/dist/index.js.map +1 -0
  10. package/dist/prompts/arns.js +89 -0
  11. package/dist/prompts/arns.js.map +1 -0
  12. package/dist/prompts/deployment.js +27 -0
  13. package/dist/prompts/deployment.js.map +1 -0
  14. package/dist/prompts/wallet.js +51 -0
  15. package/dist/prompts/wallet.js.map +1 -0
  16. package/dist/src/commands/deploy.d.ts +9 -0
  17. package/dist/src/commands/deploy.d.ts.map +1 -0
  18. package/dist/src/constants/flags.d.ts +84 -0
  19. package/dist/src/constants/flags.d.ts.map +1 -0
  20. package/dist/src/index.d.ts +2 -0
  21. package/dist/src/index.d.ts.map +1 -0
  22. package/dist/src/prompts/arns.d.ts +13 -0
  23. package/dist/src/prompts/arns.d.ts.map +1 -0
  24. package/dist/src/prompts/deployment.d.ts +6 -0
  25. package/dist/src/prompts/deployment.d.ts.map +1 -0
  26. package/dist/src/prompts/wallet.d.ts +11 -0
  27. package/dist/src/prompts/wallet.d.ts.map +1 -0
  28. package/dist/src/types/index.d.ts +31 -0
  29. package/dist/src/types/index.d.ts.map +1 -0
  30. package/dist/src/utils/__tests__/constants.test.d.ts +2 -0
  31. package/dist/src/utils/__tests__/constants.test.d.ts.map +1 -0
  32. package/dist/src/utils/config-resolver.d.ts +72 -0
  33. package/dist/src/utils/config-resolver.d.ts.map +1 -0
  34. package/dist/src/utils/constants.d.ts +4 -0
  35. package/dist/src/utils/constants.d.ts.map +1 -0
  36. package/dist/src/utils/path.d.ts +5 -0
  37. package/dist/src/utils/path.d.ts.map +1 -0
  38. package/dist/src/utils/signer.d.ts +17 -0
  39. package/dist/src/utils/signer.d.ts.map +1 -0
  40. package/dist/src/utils/uploader.d.ts +8 -0
  41. package/dist/src/utils/uploader.d.ts.map +1 -0
  42. package/dist/src/utils/validators.d.ts +29 -0
  43. package/dist/src/utils/validators.d.ts.map +1 -0
  44. package/dist/tests/constants.d.ts +11 -0
  45. package/dist/tests/constants.d.ts.map +1 -0
  46. package/dist/tests/e2e/deploy-command.test.d.ts +2 -0
  47. package/dist/tests/e2e/deploy-command.test.d.ts.map +1 -0
  48. package/dist/tests/global-setup.d.ts +6 -0
  49. package/dist/tests/global-setup.d.ts.map +1 -0
  50. package/dist/tests/mocks/turbo-handlers.d.ts +105 -0
  51. package/dist/tests/mocks/turbo-handlers.d.ts.map +1 -0
  52. package/dist/tests/setup.d.ts +11 -0
  53. package/dist/tests/setup.d.ts.map +1 -0
  54. package/dist/tests/types/payment-service.d.ts +218 -0
  55. package/dist/tests/types/payment-service.d.ts.map +1 -0
  56. package/dist/tests/types/upload-service.d.ts +168 -0
  57. package/dist/tests/types/upload-service.d.ts.map +1 -0
  58. package/dist/tests/unit/validators.test.d.ts +2 -0
  59. package/dist/tests/unit/validators.test.d.ts.map +1 -0
  60. package/dist/types/index.js +2 -0
  61. package/dist/types/index.js.map +1 -0
  62. package/dist/utils/config-resolver.js +39 -0
  63. package/dist/utils/config-resolver.js.map +1 -0
  64. package/dist/utils/constants.js +6 -0
  65. package/dist/utils/constants.js.map +1 -0
  66. package/dist/utils/path.js +15 -0
  67. package/dist/utils/path.js.map +1 -0
  68. package/dist/utils/signer.js +40 -0
  69. package/dist/utils/signer.js.map +1 -0
  70. package/dist/utils/uploader.js +78 -0
  71. package/dist/utils/uploader.js.map +1 -0
  72. package/dist/utils/validators.js +62 -0
  73. package/dist/utils/validators.js.map +1 -0
  74. package/package.json +107 -37
  75. package/.babelrc +0 -3
  76. package/.editorconfig +0 -4
  77. package/.eslintrc.js +0 -35
  78. package/src/index.js +0 -287
package/README.md CHANGED
@@ -1,10 +1,11 @@
1
- # Permaweb Deployment Package
1
+ # Permaweb Deploy
2
2
 
3
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 updates ArNS (Arweave Name Service) records via ANT (Arweave Name Token) with the transaction ID.
4
4
 
5
- ### Features
5
+ ## Features
6
6
 
7
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
8
9
  - **Arweave Manifest v0.2.0:** Creates manifests with fallback support for SPAs
9
10
  - **ArNS Updates:** Updates ArNS records via ANT with new transaction IDs and metadata
10
11
  - **Automated Workflow:** Integrates with GitHub Actions for continuous deployment
@@ -12,28 +13,30 @@ Inspired by the [cookbook github action deployment guide](https://cookbook.arwea
12
13
  - **404 Fallback Detection:** Automatically detects and sets 404.html as fallback
13
14
  - **Network Support:** Supports mainnet, testnet, and custom ARIO process IDs
14
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
15
18
 
16
- ### Installation
19
+ ## Installation
17
20
 
18
- Install the package using npm:
21
+ Install the package using pnpm (recommended):
19
22
 
20
23
  ```bash
21
- npm install permaweb-deploy
24
+ pnpm add -D permaweb-deploy
22
25
  ```
23
26
 
24
- For development use:
27
+ Or with npm:
25
28
 
26
29
  ```bash
27
- npm install permaweb-deploy --save-dev
30
+ npm install --save-dev permaweb-deploy
28
31
  ```
29
32
 
30
- For Yarn users:
33
+ Or with yarn:
31
34
 
32
35
  ```bash
33
- yarn add permaweb-deploy --dev --ignore-engines
36
+ yarn add --dev permaweb-deploy
34
37
  ```
35
38
 
36
- ### Prerequisites
39
+ ## Prerequisites
37
40
 
38
41
  1. **For Arweave signer (default):** Encode your Arweave wallet key in base64 format and set it as a GitHub secret:
39
42
 
@@ -42,156 +45,381 @@ yarn add permaweb-deploy --dev --ignore-engines
42
45
  ```
43
46
 
44
47
  2. **For Ethereum/Polygon/KYVE signers:** Use your raw private key (no encoding needed) as the `DEPLOY_KEY`.
45
-
46
48
  3. Ensure that the secret name for the encoded wallet or private key is `DEPLOY_KEY`.
47
49
 
48
50
  ⚠️ **Important:** Use a dedicated wallet for deployments to minimize security risks. Ensure your wallet has sufficient Turbo Credits for uploads.
49
51
 
50
- ### Usage
52
+ ## Usage
51
53
 
52
- To deploy your application, ensure you have a build script and a deployment script in your `package.json`:
54
+ ### Interactive Mode (Easiest)
53
55
 
54
- ```json
55
- "scripts": {
56
- "build": "your-build-command",
57
- "deploy": "npm run build && permaweb-deploy --arns-name <ARNS_NAME>"
58
- }
56
+ **Command Menu:**
57
+
58
+ Simply run the CLI for an interactive command selector:
59
+
60
+ ```bash
61
+ permaweb-deploy
62
+ # or explicitly
63
+ permaweb-deploy interactive
59
64
  ```
60
65
 
61
- Replace `<ARNS_NAME>` with your ArNS name. To deploy to an undername, add `--undername <UNDERNAME>`.
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):**
62
73
 
63
- #### CLI Options
74
+ Run the deploy command without arguments to be guided through all deployment options:
64
75
 
65
- - `--arns-name, -n` (required): The ArNS name to update.
66
- - `--ario-process, -p`: ARIO process to use (`mainnet`, `testnet`, or a custom process ID). Default: mainnet.
67
- - `--deploy-folder, -d`: Folder to deploy. Default: `./dist`.
68
- - `--deploy-file, -f`: Deploy a single file instead of a folder.
69
- - `--undername, -u`: ANT undername to update. Default: `@`.
70
- - `--ttl-seconds, -t`: TTL in seconds for the ANT record (60-86400). Default: `60`.
71
- - `--sig-type, -s`: Signer type for deployment. Choices: `arweave`, `ethereum`, `polygon`, `kyve`. Default: `arweave`.
72
- - `--help`: Show all available options and usage examples.
73
- - `--version`: Show the current version number.
76
+ ```bash
77
+ permaweb-deploy deploy
78
+ ```
79
+
80
+ This 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)
74
87
 
75
- #### Example CLI Usage
88
+ ### Direct Commands
76
89
 
77
- Deploy a folder (default):
90
+ Use flags for faster, scriptable deployments:
78
91
 
79
- ```sh
80
- DEPLOY_KEY=$(base64 -i wallet.json) npx permaweb-deploy --arns-name my-app
92
+ ```bash
93
+ # Basic deployment with wallet file
94
+ permaweb-deploy deploy --arns-name my-app --wallet ./wallet.json
95
+ ```
96
+
97
+ Deploy using private key directly:
98
+
99
+ ```bash
100
+ permaweb-deploy deploy --arns-name my-app --private-key "$(cat wallet.json)"
101
+ ```
102
+
103
+ Deploy using environment variable:
104
+
105
+ ```bash
106
+ DEPLOY_KEY=$(base64 -i wallet.json) permaweb-deploy deploy --arns-name my-app
81
107
  ```
82
108
 
83
109
  Deploy a specific folder:
84
110
 
85
- ```sh
86
- DEPLOY_KEY=$(base64 -i wallet.json) npx permaweb-deploy --arns-name my-app --deploy-folder ./build
111
+ ```bash
112
+ permaweb-deploy deploy --arns-name my-app --wallet ./wallet.json --deploy-folder ./build
87
113
  ```
88
114
 
89
115
  Deploy a single file:
90
116
 
91
- ```sh
92
- DEPLOY_KEY=$(base64 -i wallet.json) npx permaweb-deploy --arns-name my-app --deploy-file ./path/to/file.txt
117
+ ```bash
118
+ permaweb-deploy deploy --arns-name my-app --wallet ./wallet.json --deploy-file ./path/to/file.txt
93
119
  ```
94
120
 
95
- Deploy to an undername:
121
+ ### Advanced Usage
122
+
123
+ Deploy to an undername (subdomain):
96
124
 
97
- ```sh
98
- DEPLOY_KEY=$(base64 -i wallet.json) npx permaweb-deploy --arns-name my-app --undername staging
125
+ ```bash
126
+ permaweb-deploy deploy --arns-name my-app --wallet ./wallet.json --undername staging
99
127
  ```
100
128
 
101
129
  Deploy with a custom TTL:
102
130
 
103
- ```sh
104
- DEPLOY_KEY=$(base64 -i wallet.json) npx permaweb-deploy --arns-name my-app --ttl-seconds 7200
131
+ ```bash
132
+ permaweb-deploy deploy --arns-name my-app --wallet ./wallet.json --ttl-seconds 7200
105
133
  ```
106
134
 
107
- Deploy using a different signer (e.g., Ethereum):
135
+ Deploy using Ethereum wallet (file):
108
136
 
109
- ```sh
110
- DEPLOY_KEY=<ETH_PRIVATE_KEY> npx permaweb-deploy --arns-name my-app --sig-type ethereum
137
+ ```bash
138
+ permaweb-deploy deploy --arns-name my-app --sig-type ethereum --wallet ./private-key.txt
111
139
  ```
112
140
 
113
- #### Example `package.json` Scripts
141
+ Deploy using Ethereum wallet (direct key):
114
142
 
115
- ```json
116
- "scripts": {
117
- "build": "vite build",
118
- "deploy": "npm run build && permaweb-deploy --arns-name <ARNS_NAME>"
119
- }
143
+ ```bash
144
+ permaweb-deploy deploy --arns-name my-app --sig-type ethereum --private-key "0x1234..."
120
145
  ```
121
146
 
122
- #### ARIO Process Examples
147
+ ### On-Demand Payment
123
148
 
124
- **Mainnet (default):**
149
+ Use on-demand payment to automatically fund uploads with ARIO or Base-ETH tokens when your Turbo balance is insufficient:
125
150
 
126
- ```json
127
- "scripts": {
128
- "deploy-main": "npm run build && permaweb-deploy --arns-name <ARNS_NAME>"
129
- }
151
+ Deploy with ARIO on-demand payment:
152
+
153
+ ```bash
154
+ permaweb-deploy deploy --arns-name my-app --wallet ./wallet.json --on-demand ario --max-token-amount 1.5
130
155
  ```
131
156
 
132
- **Testnet:**
157
+ Deploy with Base-ETH on-demand payment (using Ethereum signer):
133
158
 
134
- ```json
135
- "scripts": {
136
- "deploy-test": "npm run build && permaweb-deploy --arns-name <ARNS_NAME> --ario-process testnet"
137
- }
159
+ ```bash
160
+ permaweb-deploy deploy --arns-name my-app --sig-type ethereum --private-key "0x..." --on-demand base-eth --max-token-amount 0.1
138
161
  ```
139
162
 
140
- **Custom process ID:**
163
+ **On-Demand Payment Options:**
164
+
165
+ - `--on-demand`: Token to use for on-demand payment (`ario` or `base-eth`)
166
+ - `--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)
167
+
168
+ **How it works:**
169
+
170
+ 1. Checks your Turbo balance before upload
171
+ 2. If balance is insufficient, converts tokens to Turbo credits on-demand
172
+ 3. Automatically adds a 10% buffer (`topUpBufferMultiplier: 1.1`) for reliability
173
+ 4. Proceeds with upload once funded
174
+
175
+ **Token compatibility:**
176
+
177
+ - **ARIO**: Works with Arweave signer
178
+ - **Base-ETH**: Works with Ethereum signer (Base Network)
179
+
180
+ ### Command Options
181
+
182
+ - `--arns-name, -n` (required): The ArNS name to update
183
+ - `--ario-process, -p`: ARIO process to use (`mainnet`, `testnet`, or a custom process ID). Default: `mainnet`
184
+ - `--deploy-folder, -d`: Folder to deploy. Default: `./dist`
185
+ - `--deploy-file, -f`: Deploy a single file instead of a folder
186
+ - `--undername, -u`: ANT undername to update. Default: `@`
187
+ - `--ttl-seconds, -t`: TTL in seconds for the ANT record (60-86400). Default: `60`
188
+ - `--sig-type, -s`: Signer type for deployment. Choices: `arweave`, `ethereum`, `polygon`, `kyve`. Default: `arweave`
189
+ - `--wallet, -w`: Path to wallet file (JWK for Arweave, private key for Ethereum/Polygon/KYVE)
190
+ - `--private-key, -k`: Private key or JWK JSON string (alternative to `--wallet`)
191
+ - `--on-demand`: Enable on-demand payment with specified token. Choices: `ario`, `base-eth`
192
+ - `--max-token-amount`: Maximum token amount for on-demand payment (used with `--on-demand`)
193
+
194
+ ### Package.json Scripts
195
+
196
+ Add deployment scripts to your `package.json`:
141
197
 
142
198
  ```json
143
- "scripts": {
144
- "deploy-custom": "npm run build && permaweb-deploy --arns-name <ARNS_NAME> --ario-process <PROCESS_ID>"
199
+ {
200
+ "scripts": {
201
+ "build": "vite build",
202
+ "deploy": "pnpm build && permaweb-deploy deploy --arns-name <ARNS_NAME>",
203
+ "deploy:staging": "pnpm build && permaweb-deploy deploy --arns-name <ARNS_NAME> --undername staging",
204
+ "deploy:testnet": "pnpm build && permaweb-deploy deploy --arns-name <ARNS_NAME> --ario-process testnet",
205
+ "deploy:on-demand": "pnpm build && permaweb-deploy deploy --arns-name <ARNS_NAME> --on-demand ario --max-token-amount 1.5"
206
+ }
145
207
  }
146
208
  ```
147
209
 
148
- ### GitHub Actions Workflow
210
+ Then deploy with:
211
+
212
+ ```bash
213
+ DEPLOY_KEY=$(base64 -i wallet.json) pnpm deploy
214
+ ```
215
+
216
+ Or with on-demand payment:
217
+
218
+ ```bash
219
+ DEPLOY_KEY=$(base64 -i wallet.json) pnpm deploy:on-demand
220
+ ```
149
221
 
150
- To automate the deployment, set up a GitHub Actions workflow as follows:
222
+ ## GitHub Actions Workflow
223
+
224
+ To automate deployments, set up a GitHub Actions workflow:
225
+
226
+ **Basic Workflow:**
151
227
 
152
228
  ```yaml
153
229
  name: Deploy to Permaweb
230
+
231
+ on:
232
+ push:
233
+ branches:
234
+ - main
235
+
236
+ jobs:
237
+ publish:
238
+ runs-on: ubuntu-latest
239
+ steps:
240
+ - uses: actions/checkout@v4
241
+
242
+ - uses: pnpm/action-setup@v3
243
+ with:
244
+ version: 9
245
+
246
+ - uses: actions/setup-node@v4
247
+ with:
248
+ node-version: 20
249
+ cache: 'pnpm'
250
+
251
+ - run: pnpm install
252
+
253
+ - run: pnpm deploy
254
+ env:
255
+ DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
256
+ ```
257
+
258
+ **With On-Demand Payment:**
259
+
260
+ ```yaml
261
+ name: Deploy to Permaweb with On-Demand Payment
262
+
154
263
  on:
155
264
  push:
156
265
  branches:
157
266
  - main
267
+
158
268
  jobs:
159
269
  publish:
160
270
  runs-on: ubuntu-latest
161
271
  steps:
162
272
  - uses: actions/checkout@v4
273
+
274
+ - uses: pnpm/action-setup@v3
275
+ with:
276
+ version: 9
277
+
163
278
  - uses: actions/setup-node@v4
164
279
  with:
165
- node-version: 20.x
166
- - run: npm install
167
- - run: npm run deploy
280
+ node-version: 20
281
+ cache: 'pnpm'
282
+
283
+ - run: pnpm install
284
+ - run: pnpm build
285
+
286
+ - name: Deploy with ARIO on-demand
287
+ run: permaweb-deploy deploy --arns-name my-app --on-demand ario --max-token-amount 2.0
168
288
  env:
169
289
  DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
290
+
291
+ # Or deploy with Ethereum and Base-ETH:
292
+ # - name: Deploy with Base-ETH on-demand
293
+ # run: |
294
+ # permaweb-deploy deploy \
295
+ # --arns-name my-app \
296
+ # --sig-type ethereum \
297
+ # --on-demand base-eth \
298
+ # --max-token-amount 0.2
299
+ # env:
300
+ # DEPLOY_KEY: ${{ secrets.ETH_PRIVATE_KEY }}
301
+ ```
302
+
303
+ ## Development
304
+
305
+ ### Setup
306
+
307
+ ```bash
308
+ # Install dependencies
309
+ pnpm install
310
+
311
+ # Build the project
312
+ pnpm build
313
+
314
+ # Run in development mode
315
+ pnpm dev
316
+
317
+ # Run tests
318
+ pnpm test
319
+
320
+ # Run linter
321
+ pnpm lint
322
+
323
+ # Format code
324
+ pnpm format
170
325
  ```
171
326
 
327
+ ### Project Structure
328
+
329
+ ```
330
+ permaweb-deploy/
331
+ ├── src/
332
+ │ ├── commands/ # oclif commands
333
+ │ │ └── deploy.ts
334
+ │ ├── types/ # TypeScript type definitions
335
+ │ │ └── index.ts
336
+ │ ├── utils/ # Utility functions
337
+ │ │ ├── constants.ts
338
+ │ │ ├── signer.ts
339
+ │ │ ├── uploader.ts
340
+ │ │ └── __tests__/ # Unit tests
341
+ │ └── index.ts # Main entry point
342
+ ├── bin/ # Executable scripts
343
+ │ ├── run.js
344
+ │ └── dev.js
345
+ ├── .changeset/ # Changesets configuration
346
+ ├── .husky/ # Git hooks
347
+ └── dist/ # Build output
348
+ ```
172
349
 
173
- ### Security & Best Practices
350
+ ## Security & Best Practices
174
351
 
175
352
  - **Dedicated Wallet:** Always use a dedicated wallet for deployments to minimize security risks
176
353
  - **Wallet Encoding:** Arweave wallets must be base64 encoded to be used in the deployment script
177
354
  - **ArNS Name:** The ArNS Name must be passed so that the ANT Process can be resolved to update the target undername or root record
178
- - **Turbo Credits:** Ensure your wallet has sufficient Turbo Credits before deployment
355
+ - **Turbo Credits:** Ensure your wallet has sufficient Turbo Credits, or use on-demand payment for automatic funding
356
+ - **On-Demand Limits:** Set reasonable `--max-token-amount` limits to prevent unexpected costs
179
357
  - **Secret Management:** Keep your `DEPLOY_KEY` secret secure and never commit it to your repository
180
358
  - **Build Security:** Always check your build for exposed environmental secrets before deployment, as data on Arweave is permanent
181
359
 
182
- ### Troubleshooting
360
+ ## Troubleshooting
183
361
 
184
- - **Error: "ARNS_NAME not configured":** Ensure you're passing the `--arns-name` flag with a valid ArNS name
185
- - **Error: "DEPLOY_KEY not configured":** Verify your base64 encoded wallet is set as the `DEPLOY_KEY` environment variable
362
+ - **Error: "DEPLOY_KEY environment variable not set":** Verify your base64 encoded wallet is set as the `DEPLOY_KEY` environment variable
186
363
  - **Error: "deploy-folder does not exist":** Check that your build folder exists and the path is correct
187
364
  - **Error: "deploy-file does not exist":** Check that your build file exists and the path is correct
188
- - **Error: "ARNS name does not exist":** Verify the ArNS name is correct and exists in the specified network
189
- - **Upload timeouts:** Files have a 10-second upload timeout. Large files may fail and require optimization
190
- - **Insufficient Turbo Credits:** Ensure your wallet has enough Turbo Credits for the deployment
365
+ - **Error: "ArNS name does not exist":** Verify the ArNS name is correct and exists in the specified network
366
+ - **Upload timeouts:** Files have a timeout for upload. Large files may fail and require optimization
367
+ - **Insufficient Turbo Credits:** Use `--on-demand` with `--max-token-amount` to automatically fund uploads when balance is low
368
+ - **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)
369
+
370
+ ## Contributing
371
+
372
+ Contributions are welcome! Please follow these guidelines:
373
+
374
+ 1. Fork the repository
375
+ 2. Create a feature branch
376
+ 3. Make your changes
377
+ 4. Run tests and linter: `pnpm test && pnpm lint`
378
+ 5. Create a changeset: `pnpm changeset`
379
+ 6. Commit your changes using conventional commits
380
+ 7. Push and create a pull request
381
+
382
+ ### Conventional Commits
383
+
384
+ This project uses [Conventional Commits](https://www.conventionalcommits.org/). Commit messages should follow this format:
385
+
386
+ ```
387
+ type(scope): subject
388
+
389
+ body (optional)
390
+ ```
391
+
392
+ Types: `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `build`, `ci`, `chore`, `revert`
393
+
394
+ ### Changesets
395
+
396
+ We use [changesets](https://github.com/changesets/changesets) for version management. When making changes:
397
+
398
+ ```bash
399
+ pnpm changeset
400
+ ```
401
+
402
+ Follow the prompts to describe your changes.
403
+
404
+ ## Dependencies
405
+
406
+ - **@ar.io/sdk** - For ANT operations and ArNS management
407
+ - **@ardrive/turbo-sdk** - For fast file uploads to Arweave
408
+ - **@permaweb/aoconnect** - For AO network connectivity
409
+ - **@oclif/core** - CLI framework
410
+ - **mime-types** - MIME type detection
411
+
412
+ ## License
413
+
414
+ ISC
415
+
416
+ ## Author
417
+
418
+ NickJ202
191
419
 
192
- ### Dependencies
420
+ ## Links
193
421
 
194
- - **@ar.io/sdk:** - For ANT operations and ArNS management
195
- - **@ardrive/turbo-sdk:** - For fast file uploads to Arweave
196
- - **@permaweb/aoconnect:** - For AO network connectivity
197
- - **yargs:** - For CLI argument parsing
422
+ - [GitHub Repository](https://github.com/permaweb/permaweb-deploy)
423
+ - [Issues](https://github.com/permaweb/permaweb-deploy/issues)
424
+ - [Arweave Documentation](https://docs.arweave.org/)
425
+ - [AR.IO Documentation](https://docs.ar.io/)
package/bin/dev.js ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env tsx
2
+
3
+ import { execute } from '@oclif/core'
4
+
5
+ await execute({ development: true, dir: import.meta.url })
package/bin/run.js ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { execute } from '@oclif/core'
4
+
5
+ await execute({ development: false, dir: import.meta.url })