pinme 2.0.2-beta.1 → 2.0.2-beta.11

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 CHANGED
@@ -14,7 +14,7 @@
14
14
  # PinMe
15
15
 
16
16
  [PinMe](https://pinme.eth.limo/) is a zero-config frontend deployment tool.
17
- No servers. No accounts. No setup.
17
+ No servers to manage. Minimal setup.
18
18
 
19
19
  Build a static site, generate a page with AI, export your frontend, or import CAR files — then deploy instantly with a single command.
20
20
 
@@ -33,9 +33,10 @@ Website: [https://pinme.eth.limo/](https://pinme.eth.limo/)
33
33
  - [For AI](#for-ai)
34
34
  - [Installation](#installation)
35
35
  - [Usage](#usage)
36
- - [Bind Domain](#bind-domain-requires-vip)
36
+ - [Bind Domain](#bind-domain-requires-wallet-balance)
37
+ - [Full-Stack Projects](#full-stack-projects)
37
38
  - [Command Details](#command-details)
38
- - [VIP Membership](#vip-membership)
39
+ - [Wallet Billing](#wallet-billing)
39
40
  - [Common Static File Directories](#common-static-file-directories)
40
41
  - [Error Handling](#error-handling)
41
42
  - [Upload Limits](#upload-limits)
@@ -54,14 +55,23 @@ Website: [https://pinme.eth.limo/](https://pinme.eth.limo/)
54
55
  node --version
55
56
  ```
56
57
 
57
- ### Three Steps to Deploy
58
+ ### Four Steps to Deploy
58
59
 
59
60
  1. **Install PinMe**
60
61
  ```bash
61
62
  npm install -g pinme
62
63
  ```
63
64
 
64
- 2. **Build your project** (if not already built)
65
+ 2. **Login or set AppKey**
66
+ ```bash
67
+ # Recommended: browser login
68
+ pinme login
69
+
70
+ # Or use an AppKey in CLI/CI environments
71
+ pinme set-appkey <AppKey>
72
+ ```
73
+
74
+ 3. **Build your project** (if not already built)
65
75
  ```bash
66
76
  # For Vite/React/Vue projects
67
77
  npm run build
@@ -70,7 +80,7 @@ npm run build
70
80
  npm run build
71
81
  ```
72
82
 
73
- 3. **Upload to PinMe**
83
+ 4. **Upload to PinMe**
74
84
  ```bash
75
85
  # Upload the dist directory (most common)
76
86
  pinme upload dist
@@ -79,7 +89,7 @@ pinme upload dist
79
89
  pinme upload build
80
90
  ```
81
91
 
82
- That's it! You'll get a preview URL like `https://pinme.eth.limo/#/preview/*`
92
+ That's it! PinMe prints the best available public URL. If no domain is available, it falls back to a preview URL like `https://pinme.eth.limo/#/preview/*`.
83
93
 
84
94
  ---
85
95
 
@@ -89,7 +99,7 @@ This section provides AI-specific instructions for deploying websites using PinM
89
99
 
90
100
  ### AI Execution Protocol
91
101
 
92
- **Goal:** Use PinMe CLI to upload static files to server.
102
+ **Goal:** Use PinMe CLI to upload static files to PinMe/IPFS and return the final public URL.
93
103
 
94
104
  #### Required Steps
95
105
 
@@ -104,7 +114,16 @@ This section provides AI-specific instructions for deploying websites using PinM
104
114
  npm install -g pinme
105
115
  ```
106
116
 
107
- 3. **Identify the Static File Directory**
117
+ 3. **Authenticate before upload**
118
+ ```bash
119
+ # Recommended
120
+ pinme login
121
+
122
+ # Or for automation / non-browser environments
123
+ pinme set-appkey <AppKey>
124
+ ```
125
+
126
+ 4. **Identify the Static File Directory**
108
127
  Priority order to check:
109
128
  - `dist/` - Default output directory for Vue/React/Vite projects
110
129
  - `build/` - Output directory for Create React App
@@ -130,7 +149,9 @@ This section provides AI-specific instructions for deploying websites using PinM
130
149
  ```
131
150
 
132
151
  6. **Return Result**
133
- - Only return final preview page URL: `https://pinme.eth.limo/#/preview/*`
152
+ - Only return the final URL printed by PinMe
153
+ - URL priority is: DNS domain > Pinme subdomain > short URL > hash preview URL
154
+ - Hash fallback format: `https://pinme.eth.limo/#/preview/*`
134
155
  - Do not output additional logs or intermediate steps
135
156
 
136
157
  #### Prohibited Operations
@@ -151,8 +172,12 @@ For easy AI tool parsing:
151
172
  "node_version": ">=16.13.0"
152
173
  },
153
174
  "install": "npm install -g pinme",
175
+ "login": "pinme login",
176
+ "set_appkey": "pinme set-appkey <AppKey>",
177
+ "auth_required_for_upload": true,
154
178
  "upload": "pinme upload {{directory}}",
155
179
  "upload_with_domain": "pinme upload {{directory}} --domain {{domain}}",
180
+ "upload_with_dns": "pinme upload {{directory}} --domain {{domain}} --dns",
156
181
  "validDirectories": ["dist", "build", "out", "public"],
157
182
  "requiredFiles": ["index.html"],
158
183
  "excludePatterns": ["node_modules", ".env", ".git", "src"],
@@ -160,9 +185,11 @@ For easy AI tool parsing:
160
185
  "single_file": "200MB",
161
186
  "total_directory": "1GB"
162
187
  },
163
- "output": "preview_url",
188
+ "output": "public_url",
189
+ "url_priority": ["dns_domain", "pinme_domain", "short_url", "hash_preview_url"],
164
190
  "preview_url_format": "https://pinme.eth.limo/#/preview/*",
165
- "fixed_domain_format": "https://*.pinit.eth.limo",
191
+ "pinme_domain_format": "https://<name>.<root-domain>",
192
+ "dns_domain_format": "https://<your-domain>",
166
193
  "other_commands": {
167
194
  "version": "pinme --version",
168
195
  "list": "pinme list",
@@ -171,6 +198,14 @@ For easy AI tool parsing:
171
198
  "set_appkey": "pinme set-appkey",
172
199
  "show_appkey": "pinme show-appkey",
173
200
  "my_domains": "pinme my-domains",
201
+ "wallet": "pinme wallet",
202
+ "bind": "pinme bind <path> --domain <domain>",
203
+ "create": "pinme create <project-name>",
204
+ "save": "pinme save",
205
+ "update_db": "pinme update-db",
206
+ "update_worker": "pinme update-worker",
207
+ "update_web": "pinme update-web",
208
+ "delete": "pinme delete <project-name>",
174
209
  "remove": "pinme rm <hash>",
175
210
  "logout": "pinme logout",
176
211
  "help": "pinme help"
@@ -181,14 +216,15 @@ For easy AI tool parsing:
181
216
  ### AI Usage Template
182
217
 
183
218
  > **Deployment Request:**
184
- > Please read the PinMe documentation, then use PinMe CLI to deploy the specified website (upload static files) to server.
219
+ > Please read the PinMe documentation, then use PinMe CLI to deploy the specified website by uploading static files to PinMe/IPFS.
185
220
  >
186
221
  > **Operation Steps:**
187
222
  > 1. Check Node.js version (requires 16.13.0+)
188
223
  > 2. Check if pinme is installed, install if not
189
- > 3. Identify the static file directory for the website to deploy
190
- > 4. Execute deployment command
191
- > 5. Return preview page link: `https://pinme.eth.limo/#/preview/*`
224
+ > 3. Authenticate with `pinme login` or `pinme set-appkey <AppKey>`
225
+ > 4. Identify the static file directory for the website to deploy
226
+ > 5. Execute deployment command
227
+ > 6. Return the final public URL printed by PinMe. If no custom URL is available, return the preview page link: `https://pinme.eth.limo/#/preview/*`
192
228
 
193
229
  ---
194
230
 
@@ -220,6 +256,9 @@ pinme --version
220
256
  ### Upload Files or Directories
221
257
 
222
258
  ```bash
259
+ # Login is required before upload
260
+ pinme login
261
+
223
262
  # Interactive upload
224
263
  pinme upload
225
264
 
@@ -227,7 +266,9 @@ pinme upload
227
266
  pinme upload /path/to/file-or-directory
228
267
  ```
229
268
 
230
- ### Bind Domain (requires VIP)
269
+ **Authentication requirement:** `pinme upload` and `pinme import` require a valid login session or AppKey. Use `pinme login` for browser login, or `pinme set-appkey <AppKey>` for CLI/CI environments.
270
+
271
+ ### Bind Domain (requires wallet balance)
231
272
 
232
273
  ```bash
233
274
  # Upload and bind to a domain (auto-detected: Pinme subdomain or DNS domain)
@@ -251,9 +292,54 @@ pinme upload ./dist --domain example.com
251
292
  pinme upload ./dist --domain my-site --dns
252
293
  ```
253
294
 
295
+ ### Full-Stack Projects
296
+
297
+ PinMe can also create and deploy a full-stack project template with frontend, Worker backend, and database migrations.
298
+
299
+ ```bash
300
+ # Login with the browser-based flow
301
+ pinme login
302
+
303
+ # Create a new project from the PinMe worker template
304
+ pinme create my-app
305
+
306
+ # Enter the project and deploy frontend + backend + database
307
+ cd my-app
308
+ pinme save
309
+ ```
310
+
311
+ Use targeted update commands when only one layer changed:
312
+
313
+ ```bash
314
+ # Deploy frontend only
315
+ pinme update-web
316
+
317
+ # Deploy backend Worker only
318
+ pinme update-worker
319
+
320
+ # Run database SQL migrations only
321
+ pinme update-db
322
+ ```
323
+
324
+ Delete a platform project when needed:
325
+
326
+ ```bash
327
+ # From a PinMe project directory
328
+ pinme delete
329
+
330
+ # Or specify a project name
331
+ pinme delete my-app
332
+
333
+ # Skip confirmation
334
+ pinme delete my-app --force
335
+ ```
336
+
254
337
  ### Import CAR files
255
338
 
256
339
  ```bash
340
+ # Login is required before import
341
+ pinme login
342
+
257
343
  # Interactive CAR import
258
344
  pinme import
259
345
 
@@ -310,6 +396,12 @@ pinme rm <IPFS_hash>
310
396
  ### Authentication (AppKey)
311
397
 
312
398
  ```bash
399
+ # Browser login, recommended for full-stack project commands
400
+ pinme login
401
+
402
+ # Use a specific environment when needed
403
+ pinme login --env test
404
+
313
405
  # Set AppKey for login and domain binding
314
406
  pinme set-appkey
315
407
 
@@ -323,6 +415,11 @@ pinme logout
323
415
  # View your domains
324
416
  pinme my-domains
325
417
  pinme domain
418
+
419
+ # View wallet balance
420
+ pinme wallet
421
+ pinme wallet-balance
422
+ pinme balance
326
423
  ```
327
424
 
328
425
  ### Get Help
@@ -368,10 +465,10 @@ The selected directory must meet:
368
465
 
369
466
  ### `bind`
370
467
 
371
- Upload files and bind them to a custom domain. **Domain binding requires VIP membership.**
468
+ Upload files and bind them to a custom domain. **Domain binding deducts from your wallet balance.**
372
469
 
373
470
  ```bash
374
- pinme upload <path> [options]
471
+ pinme bind [path] [options]
375
472
  ```
376
473
 
377
474
  **Options:**
@@ -384,6 +481,9 @@ pinme upload <path> [options]
384
481
  # Interactive mode (will prompt for path and domain)
385
482
  pinme bind
386
483
 
484
+ # Bind a path with the dedicated bind command
485
+ pinme bind ./dist --domain my-site
486
+
387
487
  # Bind to a Pinme subdomain (auto-detected: no dot in domain)
388
488
  pinme upload ./dist --domain my-site
389
489
 
@@ -400,12 +500,13 @@ pinme upload ./dist --domain my-site --dns
400
500
  - Use `--dns` or `-D` flag to force DNS domain mode when needed
401
501
 
402
502
  **Requirements:**
403
- - VIP membership required for domain binding
503
+ - Login or AppKey authentication is required before upload/bind
504
+ - Sufficient wallet balance is required for domain binding
404
505
  - Valid AppKey must be set (run: `pinme set-appkey <AppKey>`)
405
506
  - For DNS domains, you must own the domain
406
507
 
407
508
  **URL Formats:**
408
- - Pinme subdomain: `https://<name>.pinit.eth.limo`
509
+ - Pinme subdomain: `https://<name>.<root-domain>`
409
510
  - DNS domain: `https://<your-domain>`
410
511
 
411
512
  **DNS Setup:**
@@ -421,7 +522,10 @@ pinme upload [path] [--domain <name>]
421
522
 
422
523
  **Options:**
423
524
  - `path`: Path to the file or directory to upload (optional, interactive if not provided)
424
- - `-d, --domain <name>`: Pinme subdomain to bind after upload (optional, requires VIP)
525
+ - `-d, --domain <name>`: Pinme subdomain or DNS domain to bind after upload (optional, requires wallet balance)
526
+ - `--dns`, `-D`: Force DNS domain mode
527
+
528
+ **Authentication:** This command requires login. Run `pinme login` first, or configure `pinme set-appkey <AppKey>`.
425
529
 
426
530
  **Examples:**
427
531
  ```bash
@@ -435,7 +539,15 @@ pinme upload dist
435
539
  pinme upload ./example.jpg
436
540
  ```
437
541
 
438
- **Note:** Domain binding during upload requires VIP. Use the `bind` command for domain binding.
542
+ **Note:** Domain binding during upload requires available wallet balance. Use the `bind` command for domain binding.
543
+
544
+ **Printed URL priority:** PinMe displays the best available final URL in this order:
545
+ 1. DNS domain, for example `https://example.com`
546
+ 2. Pinme subdomain, for example `https://my-site.<root-domain>`
547
+ 3. Short URL returned by the upload service
548
+ 4. Hash preview URL, for example `https://pinme.eth.limo/#/preview/*`
549
+
550
+ When the backend returns a Pinme subdomain without the root domain, the CLI automatically appends the current root domain before printing it.
439
551
 
440
552
  ### `import`
441
553
 
@@ -449,6 +561,8 @@ pinme import [path] [--domain <name>]
449
561
  - `path`: Path to the CAR file to import (optional, if not provided, interactive mode will be entered)
450
562
  - `-d, --domain <name>`: Pinme subdomain to bind after import (optional)
451
563
 
564
+ **Authentication:** This command requires login. Run `pinme login` first, or configure `pinme set-appkey <AppKey>`.
565
+
452
566
  **Examples:**
453
567
  ```bash
454
568
  # Interactive CAR import
@@ -535,7 +649,16 @@ Set AppKey for authentication and automatically merge anonymous upload history t
535
649
  pinme set-appkey [AppKey]
536
650
  ```
537
651
 
538
- **Note:** Fixed domain binding requires AppKey and Plus membership. Get your AppKey from [PinMe website](https://pinme.eth.limo/).
652
+ **Note:** Domain binding requires authentication and sufficient wallet balance. Get your AppKey from [PinMe website](https://pinme.eth.limo/) or use `pinme login`.
653
+
654
+ ### `login`
655
+
656
+ Start the browser-based login flow. After login, anonymous upload history is merged into the logged-in account.
657
+
658
+ ```bash
659
+ pinme login
660
+ pinme login --env test
661
+ ```
539
662
 
540
663
  ### `show-appkey` / `appkey`
541
664
 
@@ -549,32 +672,92 @@ Log out and clear authentication information from local storage.
549
672
 
550
673
  List all domains owned by the current account.
551
674
 
552
- ---
675
+ ### `wallet` / `wallet-balance` / `balance`
553
676
 
554
- ## VIP Membership
677
+ Show the current wallet balance for the logged-in account.
555
678
 
556
- ### Overview
679
+ ```bash
680
+ pinme wallet
681
+ pinme wallet-balance
682
+ pinme balance
683
+ ```
684
+
685
+ ### `create`
686
+
687
+ Create a new full-stack project from the PinMe Worker template. This creates the platform Worker/database, downloads the template, installs dependencies, injects API configuration, builds the frontend, uploads it, and writes project settings to `pinme.toml`.
688
+
689
+ ```bash
690
+ pinme create [name]
691
+ pinme create my-app
692
+ pinme create my-app --force
693
+ ```
557
694
 
558
- VIP membership provides access to premium features including domain binding and custom DNS support.
695
+ **Project layout:**
696
+ - `frontend/`: Static frontend application
697
+ - `backend/`: Worker backend source and metadata
698
+ - `db/`: SQL migration files
699
+ - `pinme.toml`: Project name and deployed frontend URL
700
+
701
+ ### `save`
702
+
703
+ Deploy the current full-stack project from its root directory. It installs dependencies, builds and saves the Worker, applies SQL files from `db/`, builds `frontend/`, uploads `frontend/dist`, and updates `pinme.toml` with the final frontend URL.
704
+
705
+ ```bash
706
+ pinme save
707
+ pinme save --domain my-site
708
+ pinme save --domain example.com
709
+ ```
710
+
711
+ ### `update-web`
712
+
713
+ Build and deploy only the frontend from `frontend/`.
714
+
715
+ ```bash
716
+ pinme update-web
717
+ ```
559
718
 
560
- ### VIP Features
719
+ ### `update-worker`
561
720
 
562
- | Feature | Free | VIP |
563
- |---------|------|-----|
564
- | Upload files to IPFS | ✅ | ✅ |
565
- | Preview URL | ✅ | ✅ |
566
- | Pinme subdomain binding | ❌ | ✅ |
567
- | Custom DNS domain binding | ❌ | ✅ |
568
- | Priority support | ❌ | ✅ |
721
+ Build and deploy only the Worker from `backend/`. SQL files and frontend assets are not processed.
722
+
723
+ ```bash
724
+ pinme update-worker
725
+ ```
726
+
727
+ ### `update-db`
728
+
729
+ Upload and execute SQL migrations from the `db/` directory. The total SQL payload is limited to 10MB per run.
730
+
731
+ ```bash
732
+ pinme update-db
733
+ ```
734
+
735
+ ### `delete`
736
+
737
+ Delete a platform project, including Worker, domain binding, and D1 database. Local files are kept unchanged.
738
+
739
+ ```bash
740
+ pinme delete
741
+ pinme delete my-app
742
+ pinme delete my-app --force
743
+ ```
744
+
745
+ ---
746
+
747
+ ## Wallet Billing
748
+
749
+ ### Overview
750
+
751
+ PinMe now uses wallet balance for paid capabilities such as domain binding and custom DNS support.
569
752
 
570
753
  ### Domain Binding Requirements
571
754
 
572
- Domain binding (both Pinme subdomains and custom DNS domains) requires VIP membership.
755
+ Domain binding (both Pinme subdomains and custom DNS domains) requires sufficient wallet balance.
573
756
 
574
757
  **Before using domain binding:**
575
758
 
576
- 1. **Upgrade to VIP**
577
- - Visit [PinMe website](https://pinme.eth.limo/) to upgrade
759
+ 1. **Recharge your wallet**
760
+ - Visit [PinMe website](https://pinme.eth.limo/) to top up your balance
578
761
 
579
762
  2. **Set AppKey**
580
763
  ```bash
@@ -590,9 +773,9 @@ Domain binding (both Pinme subdomains and custom DNS domains) requires VIP membe
590
773
  pinme upload ./dist --domain example.com --dns
591
774
  ```
592
775
 
593
- ### Checking VIP Status
776
+ ### Checking Wallet Balance
594
777
 
595
- If you attempt to bind a domain without VIP, you'll see an error message. You can check your VIP status on the [PinMe website](https://pinme.eth.limo/).
778
+ If you attempt to bind a domain without enough balance, you'll see an error message. You can check or recharge your wallet on the [PinMe website](https://pinme.eth.limo/).
596
779
 
597
780
  ---
598
781
 
@@ -649,8 +832,8 @@ Uploaded files are stored on the IPFS network and accessible through the Glitter
649
832
 
650
833
  **After successful upload, you receive:**
651
834
  1. IPFS content hash
652
- 2. Preview page URL: `https://pinme.eth.limo/#/preview/*`
653
- 3. Fixed domain option: `https://*.pinit.eth.limo`
835
+ 2. Final public URL, selected by priority: DNS domain > Pinme subdomain > short URL > hash preview URL
836
+ 3. Hash preview fallback: `https://pinme.eth.limo/#/preview/*`
654
837
 
655
838
  ### Log Locations
656
839
 
@@ -663,17 +846,18 @@ Uploaded files are stored on the IPFS network and accessible through the Glitter
663
846
 
664
847
  ### Preview Page
665
848
  - Access uploaded website via preview link: `https://pinme.eth.limo/#/preview/*`
666
- - Get fixed domain: `https://*.pinit.eth.limo`
849
+ - Get a Pinme subdomain: `https://<name>.<root-domain>`
850
+ - Use a custom DNS domain: `https://<your-domain>`
667
851
 
668
852
  ### Login and Management
669
- - Support user login via AppKey
853
+ - Support browser login and AppKey-based authentication
670
854
  - View historical upload records
671
855
  - Manage uploaded files
672
856
 
673
857
  ### Address Binding
674
- - Bind uploads to fixed addresses (requires Plus membership)
858
+ - Bind uploads to fixed addresses (requires authentication and wallet balance)
675
859
  - Convenient for long-term maintenance and access
676
- - Requires AppKey setup and Plus membership activation
860
+ - Requires `pinme login` or AppKey setup
677
861
 
678
862
  ---
679
863
 
@@ -795,6 +979,8 @@ jobs:
795
979
  - run: pinme upload dist --domain "${{ secrets.PINME_DOMAIN }}"
796
980
  ```
797
981
 
982
+ `pinme set-appkey` satisfies the authentication requirement for `pinme upload` in CI.
983
+
798
984
  ### Supported Build Tools
799
985
 
800
986
  - **Vite**: Builds to `dist/`