permaweb-deploy 0.0.0-alpha-20251208223828

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 (74) hide show
  1. package/README.md +533 -0
  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 -0
  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 +108 -0
package/README.md ADDED
@@ -0,0 +1,533 @@
1
+ # Permaweb Deploy
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 updates ArNS (Arweave Name Service) records via ANT (Arweave Name Token) with the transaction ID.
4
+
5
+ ## Features
6
+
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
+ - **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
18
+
19
+ ## Installation
20
+
21
+ Install the package using pnpm (recommended):
22
+
23
+ ```bash
24
+ pnpm add -D permaweb-deploy
25
+ ```
26
+
27
+ Or with npm:
28
+
29
+ ```bash
30
+ npm install --save-dev permaweb-deploy
31
+ ```
32
+
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)
55
+
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
64
+ ```
65
+
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:
75
+
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)
87
+
88
+ ### Direct Commands
89
+
90
+ Use flags for faster, scriptable deployments:
91
+
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
107
+ ```
108
+
109
+ Deploy a specific folder:
110
+
111
+ ```bash
112
+ permaweb-deploy deploy --arns-name my-app --wallet ./wallet.json --deploy-folder ./build
113
+ ```
114
+
115
+ Deploy a single file:
116
+
117
+ ```bash
118
+ permaweb-deploy deploy --arns-name my-app --wallet ./wallet.json --deploy-file ./path/to/file.txt
119
+ ```
120
+
121
+ ### Advanced Usage
122
+
123
+ Deploy to an undername (subdomain):
124
+
125
+ ```bash
126
+ permaweb-deploy deploy --arns-name my-app --wallet ./wallet.json --undername staging
127
+ ```
128
+
129
+ Deploy with a custom TTL:
130
+
131
+ ```bash
132
+ permaweb-deploy deploy --arns-name my-app --wallet ./wallet.json --ttl-seconds 7200
133
+ ```
134
+
135
+ Deploy using Ethereum wallet (file):
136
+
137
+ ```bash
138
+ permaweb-deploy deploy --arns-name my-app --sig-type ethereum --wallet ./private-key.txt
139
+ ```
140
+
141
+ Deploy using Ethereum wallet (direct key):
142
+
143
+ ```bash
144
+ permaweb-deploy deploy --arns-name my-app --sig-type ethereum --private-key "0x1234..."
145
+ ```
146
+
147
+ ### On-Demand Payment
148
+
149
+ Use on-demand payment to automatically fund uploads with ARIO or Base-ETH tokens when your Turbo balance is insufficient:
150
+
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
155
+ ```
156
+
157
+ Deploy with Base-ETH on-demand payment (using Ethereum signer):
158
+
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
161
+ ```
162
+
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`:
197
+
198
+ ```json
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
+ }
207
+ }
208
+ ```
209
+
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
+ ```
221
+
222
+ ## GitHub Action
223
+
224
+ The easiest way to integrate permaweb-deploy into your CI/CD pipeline is using our official GitHub Action.
225
+
226
+ ### Basic Usage
227
+
228
+ ```yaml
229
+ - uses: permaweb/permaweb-deploy@v1
230
+ with:
231
+ deploy-key: ${{ secrets.DEPLOY_KEY }}
232
+ arns-name: myapp
233
+ deploy-folder: ./dist
234
+ ```
235
+
236
+ ### PR Preview Deployments
237
+
238
+ 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:
239
+
240
+ ```yaml
241
+ name: Deploy PR Preview
242
+
243
+ on:
244
+ pull_request:
245
+ types: [opened, synchronize]
246
+
247
+ jobs:
248
+ deploy-preview:
249
+ runs-on: ubuntu-latest
250
+ steps:
251
+ - uses: actions/checkout@v4
252
+
253
+ - name: Setup Node.js
254
+ uses: actions/setup-node@v4
255
+ with:
256
+ node-version: '20'
257
+
258
+ - name: Install dependencies
259
+ run: npm ci
260
+
261
+ - name: Build
262
+ run: npm run build
263
+
264
+ - name: Deploy Preview
265
+ uses: permaweb/permaweb-deploy@v1
266
+ with:
267
+ deploy-key: ${{ secrets.DEPLOY_KEY }}
268
+ arns-name: myapp
269
+ preview: 'true'
270
+ github-token: ${{ secrets.GITHUB_TOKEN }}
271
+ deploy-folder: ./dist
272
+ ```
273
+
274
+ When `preview` is enabled, the action will:
275
+ - Auto-generate an undername like `pr-123` from the PR number
276
+ - Post a comment on the PR with the preview URL
277
+ - Update the comment on subsequent pushes instead of creating new ones
278
+
279
+ ### Production Deployment
280
+
281
+ Deploy to your base ArNS name when pushing to main:
282
+
283
+ ```yaml
284
+ name: Deploy to Production
285
+
286
+ on:
287
+ push:
288
+ branches: [main]
289
+
290
+ jobs:
291
+ deploy:
292
+ runs-on: ubuntu-latest
293
+ steps:
294
+ - uses: actions/checkout@v4
295
+
296
+ - name: Setup Node.js
297
+ uses: actions/setup-node@v4
298
+ with:
299
+ node-version: '20'
300
+
301
+ - name: Install dependencies
302
+ run: npm ci
303
+
304
+ - name: Build
305
+ run: npm run build
306
+
307
+ - name: Deploy to Permaweb
308
+ uses: permaweb/permaweb-deploy@v1
309
+ with:
310
+ deploy-key: ${{ secrets.DEPLOY_KEY }}
311
+ arns-name: myapp
312
+ deploy-folder: ./dist
313
+ ```
314
+
315
+ ### With On-Demand Payment
316
+
317
+ ```yaml
318
+ - name: Deploy with ARIO on-demand
319
+ uses: permaweb/permaweb-deploy@v1
320
+ with:
321
+ deploy-key: ${{ secrets.DEPLOY_KEY }}
322
+ arns-name: myapp
323
+ deploy-folder: ./dist
324
+ on-demand: ario
325
+ max-token-amount: '2.0'
326
+ ```
327
+
328
+ ---
329
+
330
+ ## CLI in GitHub Actions
331
+
332
+ You can also use the CLI directly in your workflows:
333
+
334
+ **Basic Workflow:**
335
+
336
+ ```yaml
337
+ name: Deploy to Permaweb
338
+
339
+ on:
340
+ push:
341
+ branches:
342
+ - main
343
+
344
+ jobs:
345
+ publish:
346
+ runs-on: ubuntu-latest
347
+ steps:
348
+ - uses: actions/checkout@v4
349
+
350
+ - uses: pnpm/action-setup@v3
351
+ with:
352
+ version: 9
353
+
354
+ - uses: actions/setup-node@v4
355
+ with:
356
+ node-version: 20
357
+ cache: 'pnpm'
358
+
359
+ - run: pnpm install
360
+
361
+ - run: pnpm deploy
362
+ env:
363
+ DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
364
+ ```
365
+
366
+ **With On-Demand Payment:**
367
+
368
+ ```yaml
369
+ name: Deploy to Permaweb with On-Demand Payment
370
+
371
+ on:
372
+ push:
373
+ branches:
374
+ - main
375
+
376
+ jobs:
377
+ publish:
378
+ runs-on: ubuntu-latest
379
+ steps:
380
+ - uses: actions/checkout@v4
381
+
382
+ - uses: pnpm/action-setup@v3
383
+ with:
384
+ version: 9
385
+
386
+ - uses: actions/setup-node@v4
387
+ with:
388
+ node-version: 20
389
+ cache: 'pnpm'
390
+
391
+ - run: pnpm install
392
+ - run: pnpm build
393
+
394
+ - name: Deploy with ARIO on-demand
395
+ run: permaweb-deploy deploy --arns-name my-app --on-demand ario --max-token-amount 2.0
396
+ env:
397
+ DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
398
+
399
+ # Or deploy with Ethereum and Base-ETH:
400
+ # - name: Deploy with Base-ETH on-demand
401
+ # run: |
402
+ # permaweb-deploy deploy \
403
+ # --arns-name my-app \
404
+ # --sig-type ethereum \
405
+ # --on-demand base-eth \
406
+ # --max-token-amount 0.2
407
+ # env:
408
+ # DEPLOY_KEY: ${{ secrets.ETH_PRIVATE_KEY }}
409
+ ```
410
+
411
+ ## Development
412
+
413
+ ### Setup
414
+
415
+ ```bash
416
+ # Install dependencies
417
+ pnpm install
418
+
419
+ # Build the project
420
+ pnpm build
421
+
422
+ # Run in development mode
423
+ pnpm dev
424
+
425
+ # Run tests
426
+ pnpm test
427
+
428
+ # Run linter
429
+ pnpm lint
430
+
431
+ # Format code
432
+ pnpm format
433
+ ```
434
+
435
+ ### Project Structure
436
+
437
+ ```
438
+ permaweb-deploy/
439
+ ├── src/
440
+ │ ├── commands/ # oclif commands
441
+ │ │ └── deploy.ts
442
+ │ ├── types/ # TypeScript type definitions
443
+ │ │ └── index.ts
444
+ │ ├── utils/ # Utility functions
445
+ │ │ ├── constants.ts
446
+ │ │ ├── signer.ts
447
+ │ │ ├── uploader.ts
448
+ │ │ └── __tests__/ # Unit tests
449
+ │ └── index.ts # Main entry point
450
+ ├── bin/ # Executable scripts
451
+ │ ├── run.js
452
+ │ └── dev.js
453
+ ├── .changeset/ # Changesets configuration
454
+ ├── .husky/ # Git hooks
455
+ └── dist/ # Build output
456
+ ```
457
+
458
+ ## Security & Best Practices
459
+
460
+ - **Dedicated Wallet:** Always use a dedicated wallet for deployments to minimize security risks
461
+ - **Wallet Encoding:** Arweave wallets must be base64 encoded to be used in the deployment script
462
+ - **ArNS Name:** The ArNS Name must be passed so that the ANT Process can be resolved to update the target undername or root record
463
+ - **Turbo Credits:** Ensure your wallet has sufficient Turbo Credits, or use on-demand payment for automatic funding
464
+ - **On-Demand Limits:** Set reasonable `--max-token-amount` limits to prevent unexpected costs
465
+ - **Secret Management:** Keep your `DEPLOY_KEY` secret secure and never commit it to your repository
466
+ - **Build Security:** Always check your build for exposed environmental secrets before deployment, as data on Arweave is permanent
467
+
468
+ ## Troubleshooting
469
+
470
+ - **Error: "DEPLOY_KEY environment variable not set":** Verify your base64 encoded wallet is set as the `DEPLOY_KEY` environment variable
471
+ - **Error: "deploy-folder does not exist":** Check that your build folder exists and the path is correct
472
+ - **Error: "deploy-file does not exist":** Check that your build file exists and the path is correct
473
+ - **Error: "ArNS name does not exist":** Verify the ArNS name is correct and exists in the specified network
474
+ - **Upload timeouts:** Files have a timeout for upload. Large files may fail and require optimization
475
+ - **Insufficient Turbo Credits:** Use `--on-demand` with `--max-token-amount` to automatically fund uploads when balance is low
476
+ - **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)
477
+
478
+ ## Contributing
479
+
480
+ Contributions are welcome! Please follow these guidelines:
481
+
482
+ 1. Fork the repository
483
+ 2. Create a feature branch
484
+ 3. Make your changes
485
+ 4. Run tests and linter: `pnpm test && pnpm lint`
486
+ 5. Create a changeset: `pnpm changeset`
487
+ 6. Commit your changes using conventional commits
488
+ 7. Push and create a pull request
489
+
490
+ ### Conventional Commits
491
+
492
+ This project uses [Conventional Commits](https://www.conventionalcommits.org/). Commit messages should follow this format:
493
+
494
+ ```
495
+ type(scope): subject
496
+
497
+ body (optional)
498
+ ```
499
+
500
+ Types: `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `build`, `ci`, `chore`, `revert`
501
+
502
+ ### Changesets
503
+
504
+ We use [changesets](https://github.com/changesets/changesets) for version management. When making changes:
505
+
506
+ ```bash
507
+ pnpm changeset
508
+ ```
509
+
510
+ Follow the prompts to describe your changes.
511
+
512
+ ## Dependencies
513
+
514
+ - **@ar.io/sdk** - For ANT operations and ArNS management
515
+ - **@ardrive/turbo-sdk** - For fast file uploads to Arweave
516
+ - **@permaweb/aoconnect** - For AO network connectivity
517
+ - **@oclif/core** - CLI framework
518
+ - **mime-types** - MIME type detection
519
+
520
+ ## License
521
+
522
+ ISC
523
+
524
+ ## Author
525
+
526
+ NickJ202
527
+
528
+ ## Links
529
+
530
+ - [GitHub Repository](https://github.com/permaweb/permaweb-deploy)
531
+ - [Issues](https://github.com/permaweb/permaweb-deploy/issues)
532
+ - [Arweave Documentation](https://docs.arweave.org/)
533
+ - [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 })