nivii 0.3.4 → 0.4.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.
- package/README.md +223 -113
- package/dist/cli.js +1 -48
- package/dist/cli.js.map +1 -1
- package/dist/commands/share.d.ts.map +1 -1
- package/dist/commands/share.js +4 -5
- package/dist/commands/share.js.map +1 -1
- package/dist/core/upload.d.ts +1 -2
- package/dist/core/upload.d.ts.map +1 -1
- package/dist/core/upload.js +0 -2
- package/dist/core/upload.js.map +1 -1
- package/dist/dist/cli.d.ts +3 -0
- package/dist/dist/cli.d.ts.map +1 -0
- package/dist/dist/cli.js +157 -0
- package/dist/dist/cli.js.map +1 -0
- package/dist/dist/commands/config.d.ts +2 -0
- package/dist/dist/commands/config.d.ts.map +1 -0
- package/dist/dist/commands/config.js +32 -0
- package/dist/dist/commands/config.js.map +1 -0
- package/dist/dist/commands/share.d.ts +18 -0
- package/dist/dist/commands/share.d.ts.map +1 -0
- package/dist/dist/commands/share.js +126 -0
- package/dist/dist/commands/share.js.map +1 -0
- package/dist/dist/commands/whoami.d.ts +2 -0
- package/dist/dist/commands/whoami.d.ts.map +1 -0
- package/dist/dist/commands/whoami.js +17 -0
- package/dist/dist/commands/whoami.js.map +1 -0
- package/dist/dist/core/analytics.d.ts +11 -0
- package/dist/dist/core/analytics.d.ts.map +1 -0
- package/dist/dist/core/analytics.js +47 -0
- package/dist/dist/core/analytics.js.map +1 -0
- package/dist/dist/core/build.d.ts +11 -0
- package/dist/dist/core/build.d.ts.map +1 -0
- package/dist/dist/core/build.js +34 -0
- package/dist/dist/core/build.js.map +1 -0
- package/dist/dist/core/detect.d.ts +12 -0
- package/dist/dist/core/detect.d.ts.map +1 -0
- package/dist/dist/core/detect.js +122 -0
- package/dist/dist/core/detect.js.map +1 -0
- package/dist/dist/core/qr.d.ts +4 -0
- package/dist/dist/core/qr.d.ts.map +1 -0
- package/dist/dist/core/qr.js +29 -0
- package/dist/dist/core/qr.js.map +1 -0
- package/dist/dist/core/tunnel.d.ts +9 -0
- package/dist/dist/core/tunnel.d.ts.map +1 -0
- package/dist/dist/core/tunnel.js +55 -0
- package/dist/dist/core/tunnel.js.map +1 -0
- package/dist/dist/core/upload.d.ts +23 -0
- package/dist/dist/core/upload.d.ts.map +1 -0
- package/dist/dist/core/upload.js +75 -0
- package/dist/dist/core/upload.js.map +1 -0
- package/dist/dist/ui/spinner.d.ts +8 -0
- package/dist/dist/ui/spinner.d.ts.map +1 -0
- package/dist/dist/ui/spinner.js +35 -0
- package/dist/dist/ui/spinner.js.map +1 -0
- package/dist/dist/ui/theme.d.ts +14 -0
- package/dist/dist/ui/theme.d.ts.map +1 -0
- package/dist/dist/ui/theme.js +32 -0
- package/dist/dist/ui/theme.js.map +1 -0
- package/dist/dist/ui/welcome.d.ts +4 -0
- package/dist/dist/ui/welcome.d.ts.map +1 -0
- package/dist/dist/ui/welcome.js +95 -0
- package/dist/dist/ui/welcome.js.map +1 -0
- package/dist/dist/utils/config.d.ts +20 -0
- package/dist/dist/utils/config.d.ts.map +1 -0
- package/dist/dist/utils/config.js +31 -0
- package/dist/dist/utils/config.js.map +1 -0
- package/dist/dist/utils/hash.d.ts +3 -0
- package/dist/dist/utils/hash.d.ts.map +1 -0
- package/dist/dist/utils/hash.js +10 -0
- package/dist/dist/utils/hash.js.map +1 -0
- package/dist/dist/utils/zip.d.ts +2 -0
- package/dist/dist/utils/zip.d.ts.map +1 -0
- package/dist/dist/utils/zip.js +19 -0
- package/dist/dist/utils/zip.js.map +1 -0
- package/dist/ui/spinner.d.ts +0 -1
- package/dist/ui/spinner.d.ts.map +1 -1
- package/dist/ui/spinner.js +0 -3
- package/dist/ui/spinner.js.map +1 -1
- package/dist/ui/welcome.d.ts.map +1 -1
- package/dist/ui/welcome.js +3 -6
- package/dist/ui/welcome.js.map +1 -1
- package/dist/utils/config.d.ts +0 -3
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js.map +1 -1
- package/package.json +1 -1
- package/src/cli.ts +118 -0
- package/src/commands/config.ts +33 -0
- package/src/commands/share.ts +159 -0
- package/src/commands/whoami.ts +16 -0
- package/src/core/analytics.ts +64 -0
- package/src/core/build.ts +46 -0
- package/src/core/detect.ts +159 -0
- package/src/core/qr.ts +30 -0
- package/src/core/tunnel.ts +70 -0
- package/src/core/upload.ts +95 -0
- package/src/ui/spinner.ts +36 -0
- package/src/ui/theme.ts +35 -0
- package/src/ui/welcome.ts +104 -0
- package/src/utils/config.ts +47 -0
- package/src/utils/hash.ts +11 -0
- package/src/utils/zip.ts +22 -0
- /package/dist/{commands → dist/commands}/fullstack.d.ts +0 -0
- /package/dist/{commands → dist/commands}/fullstack.d.ts.map +0 -0
- /package/dist/{commands → dist/commands}/fullstack.js +0 -0
- /package/dist/{commands → dist/commands}/fullstack.js.map +0 -0
- /package/dist/{commands → dist/commands}/pro.d.ts +0 -0
- /package/dist/{commands → dist/commands}/pro.d.ts.map +0 -0
- /package/dist/{commands → dist/commands}/pro.js +0 -0
- /package/dist/{commands → dist/commands}/pro.js.map +0 -0
- /package/dist/{core → dist/core}/backend.d.ts +0 -0
- /package/dist/{core → dist/core}/backend.d.ts.map +0 -0
- /package/dist/{core → dist/core}/backend.js +0 -0
- /package/dist/{core → dist/core}/backend.js.map +0 -0
- /package/dist/{core → dist/core}/env.d.ts +0 -0
- /package/dist/{core → dist/core}/env.d.ts.map +0 -0
- /package/dist/{core → dist/core}/env.js +0 -0
- /package/dist/{core → dist/core}/env.js.map +0 -0
- /package/dist/{core → dist/core}/fullstack.d.ts +0 -0
- /package/dist/{core → dist/core}/fullstack.d.ts.map +0 -0
- /package/dist/{core → dist/core}/fullstack.js +0 -0
- /package/dist/{core → dist/core}/fullstack.js.map +0 -0
package/README.md
CHANGED
|
@@ -1,18 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
███╗ ██╗██╗██╗ ██╗██╗██╗ ████╗ ██║██║██║ ██║██║██║ ██╔██╗ ██║██║██║ ██║██║██║ ██║╚██╗██║██║╚██╗ ██╔╝██║██║ ██║ ╚████║██║ ╚████╔╝ ██║██║ ╚═╝ ╚═══╝╚═╝ ╚═══╝ ╚═╝╚═╝
|
|
2
2
|
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
**The fastest way to share any local dev project via a live public URL.**
|
|
6
|
-
No accounts. No config. One command.
|
|
7
|
-
|
|
8
|
-
[](https://www.npmjs.com/package/nivii)
|
|
9
|
-
[](https://www.npmjs.com/package/nivii)
|
|
10
|
-
[](./LICENSE)
|
|
11
|
-
[](#)
|
|
12
|
-
|
|
13
|
-
[Website](https://nivii.app) · [npm](https://www.npmjs.com/package/nivii) · [Issues](https://github.com/Aadigarg111/Nivi-sh/issues)
|
|
14
|
-
|
|
15
|
-
</div>
|
|
3
|
+
<div align="center"> [](https://www.npmjs.com/package/nivii) [](https://github.com/Aadigarg111/Nivi-sh/blob/main/LICENSE) [](#) [](https://github.com/Aadigarg111/Nivi-sh/pulls) ⚡️ The fastest, most beautiful way to share any local dev project. No accounts. No config. Just share. [Website](https://nivii.app) · [npm](https://www.npmjs.com/package/nivii) · [Issues](https://github.com/Aadigarg111/Nivi-sh/issues) </div>
|
|
16
4
|
|
|
17
5
|
---
|
|
18
6
|
|
|
@@ -20,11 +8,9 @@ No accounts. No config. One command.
|
|
|
20
8
|
|
|
21
9
|
```bash
|
|
22
10
|
npm i -g nivii
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
# or with pnpm / bun
|
|
11
|
+
# or with pnpm
|
|
27
12
|
pnpm add -g nivii
|
|
13
|
+
# or with bun
|
|
28
14
|
bun add -g nivii
|
|
29
15
|
```
|
|
30
16
|
|
|
@@ -33,170 +19,294 @@ bun add -g nivii
|
|
|
33
19
|
## Quick Start
|
|
34
20
|
|
|
35
21
|
```bash
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
```
|
|
22
|
+
# Navigate to any project
|
|
23
|
+
cd ~/my-awesome-project
|
|
39
24
|
|
|
25
|
+
# Share it instantly
|
|
26
|
+
nivii share
|
|
40
27
|
```
|
|
41
|
-
⚡ NIVII v0.3.3 · nivii.app
|
|
42
28
|
|
|
43
|
-
|
|
44
|
-
✓ Detected Next.js (99% confidence)
|
|
45
|
-
✓ Build complete
|
|
46
|
-
✓ Deployed to edge
|
|
29
|
+
Example output:
|
|
47
30
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
31
|
+
```
|
|
32
|
+
⚡️ NIVII v0.1.0
|
|
33
|
+
🔍 Detecting project type… ~/my-awesome-project
|
|
34
|
+
✓ Detected Next.js (99% confidence)
|
|
35
|
+
✓ Build complete (nextjs)
|
|
36
|
+
📦 Compressing project…
|
|
37
|
+
✓ Deployed to edge (xk9m2pqr)
|
|
38
|
+
╭─────────────────────────────────────────────────╮
|
|
39
|
+
│ │
|
|
40
|
+
│ 🚀 Your project is live! │
|
|
41
|
+
│ │
|
|
42
|
+
│ URL: https://xk9m2pqr.nivii.app │
|
|
43
|
+
│ Expires: in 48 hours │
|
|
44
|
+
│ │
|
|
45
|
+
╰─────────────────────────────────────────────────╯
|
|
46
|
+
✓ URL copied to clipboard
|
|
47
|
+
|
|
48
|
+
┌─────────────────────────────────┐
|
|
49
|
+
│ Scan to open on mobile │
|
|
50
|
+
└─────────────────────────────────┘
|
|
58
51
|
```
|
|
59
52
|
|
|
60
53
|
---
|
|
61
54
|
|
|
62
55
|
## Features
|
|
63
56
|
|
|
64
|
-
| Feature | Description |
|
|
65
|
-
|
|
66
|
-
| 🔍 Smart Detection | Auto-detects framework, build command, output
|
|
67
|
-
|
|
|
68
|
-
| 🔒 Password Protection | Password or OTP-protect any deployment |
|
|
69
|
-
| 🔗 Custom Slugs |
|
|
70
|
-
| 📱 QR Codes | Instant QR code in terminal |
|
|
71
|
-
| 📋 Clipboard | URL auto-copied
|
|
72
|
-
| 🌐 Auto-open | Browser opens automatically |
|
|
73
|
-
| 📊 Analytics |
|
|
74
|
-
| 💥 Self-Destruct | Links that expire after N views or a duration |
|
|
75
|
-
| 🤝 Collab Previews | Real-time
|
|
76
|
-
| 🌍 Edge CDN | Cloudflare's global network |
|
|
57
|
+
| Emoji | Feature | Description |
|
|
58
|
+
|-------|---------|-------------|
|
|
59
|
+
| 🔍 | Smart Detection | Auto-detects framework, build command, and output directory |
|
|
60
|
+
| ⚡️ | Live Sync | Watch for file changes and auto-redeploy (Pro) |
|
|
61
|
+
| 🔒 | Password Protection | Password or OTP-protect any deployment |
|
|
62
|
+
| 🔗 | Custom Slugs | Get my-demo.nivii.app instead of random strings (Pro) |
|
|
63
|
+
| 📱 | QR Codes | Instant QR code printed in terminal |
|
|
64
|
+
| 📋 | Clipboard | URL auto-copied to clipboard |
|
|
65
|
+
| 🌐 | Auto-open | Browser opens automatically after deploy |
|
|
66
|
+
| 📊 | Analytics | Privacy-first view counts and visitor data (Pro) |
|
|
67
|
+
| 💥 | Self-Destruct | Links that expire after N views or a duration |
|
|
68
|
+
| 🤝 | Collab Previews | Real-time collaborative previews (Pro) |
|
|
69
|
+
| 🌍 | Edge CDN | Deployed on Cloudflare's global network |
|
|
70
|
+
| 🎨 | Beautiful UI | Futuristic terminal UI with gradients and spinners |
|
|
77
71
|
|
|
78
72
|
---
|
|
79
73
|
|
|
80
|
-
## All Flags
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
|
87
|
-
|
|
88
|
-
|
|
|
89
|
-
|
|
|
90
|
-
|
|
|
91
|
-
|
|
|
92
|
-
|
|
|
93
|
-
|
|
|
94
|
-
|
|
|
95
|
-
|
|
|
96
|
-
|
|
|
97
|
-
|
|
|
98
|
-
| `--self-destruct` | false | Destroy after first view |
|
|
99
|
-
| `--no-qr` | false | Skip QR code display |
|
|
100
|
-
| `--no-open` | false | Don't auto-open browser |
|
|
74
|
+
## All Flags — nivii share
|
|
75
|
+
|
|
76
|
+
| Flag | Type | Default | Description |
|
|
77
|
+
|------|------|---------|-------------|
|
|
78
|
+
| --dir <dir> | string | cwd | Directory to deploy |
|
|
79
|
+
| --slug <slug> | string | random | Custom slug — e.g. my-demo → my-demo.nivii.app (Pro) |
|
|
80
|
+
| --pass <password> | string | — | Password-protect the deployment |
|
|
81
|
+
| --otp | boolean | false | Enable one-time password access |
|
|
82
|
+
| --expires <duration> | string | 48h | Expiry: 1h / 24h / 7d / 30d / never |
|
|
83
|
+
| --live | boolean | false | Enable live sync — watch & auto-redeploy on changes (Pro) |
|
|
84
|
+
| --collab | boolean | false | Real-time collaborative preview (Pro) |
|
|
85
|
+
| --no-build | boolean | false | Skip build step, use existing output directory |
|
|
86
|
+
| --cmd <cmd> | string | auto | Custom build command |
|
|
87
|
+
| --port <port> | number | 3000 | Port for server-mode proxy |
|
|
88
|
+
| --max-views <n> | number | — | Self-destruct after N views |
|
|
89
|
+
| --self-destruct | boolean | false | Destroy after first view |
|
|
90
|
+
| --no-qr | boolean | false | Skip QR code display |
|
|
91
|
+
| --no-open | boolean | false | Don't auto-open browser |
|
|
101
92
|
|
|
102
93
|
---
|
|
103
94
|
|
|
104
95
|
## All Commands
|
|
105
96
|
|
|
106
|
-
```
|
|
107
|
-
nivii share
|
|
108
|
-
nivii ls
|
|
109
|
-
nivii analytics
|
|
110
|
-
nivii config
|
|
111
|
-
nivii whoami
|
|
112
|
-
nivii --help
|
|
97
|
+
```
|
|
98
|
+
nivii share # Deploy current directory
|
|
99
|
+
nivii ls # List recent deployments
|
|
100
|
+
nivii analytics # View analytics for a deployment
|
|
101
|
+
nivii config # View/set config values
|
|
102
|
+
nivii whoami # Show current account info
|
|
103
|
+
nivii --help # Show all commands
|
|
113
104
|
```
|
|
114
105
|
|
|
115
106
|
---
|
|
116
107
|
|
|
117
108
|
## Framework Support
|
|
118
109
|
|
|
119
|
-
| Framework | Build Command | Output
|
|
120
|
-
|
|
121
|
-
| Next.js |
|
|
122
|
-
| Vite |
|
|
123
|
-
| React (CRA) |
|
|
124
|
-
| Vue |
|
|
125
|
-
| Svelte |
|
|
126
|
-
| SvelteKit |
|
|
127
|
-
| Astro |
|
|
128
|
-
| Remix |
|
|
129
|
-
| Nuxt |
|
|
130
|
-
|
|
|
110
|
+
| Framework | Detection | Build Command | Output Directory |
|
|
111
|
+
|-----------|-----------|---------------|-----------------|
|
|
112
|
+
| Next.js | package.json next dep | npm run build | out / .next |
|
|
113
|
+
| Vite | package.json vite dep | npm run build | dist |
|
|
114
|
+
| React (CRA) | vite + react deps | npm run build | dist |
|
|
115
|
+
| Vue | vite + vue deps | npm run build | dist |
|
|
116
|
+
| Svelte | vite + svelte deps | npm run build | dist |
|
|
117
|
+
| SvelteKit | @sveltejs/kit dep | npm run build | build |
|
|
118
|
+
| Astro | astro dep | npm run build | dist |
|
|
119
|
+
| Remix | @remix-run/* deps | npm run build | public |
|
|
120
|
+
| Nuxt | nuxt dep | npm run generate | .output/public |
|
|
121
|
+
| Solid.js | vite + solid-js deps | npm run build | dist |
|
|
122
|
+
| Express | express dep | — (server mode) | . |
|
|
123
|
+
| Fastify | fastify dep | — (server mode) | . |
|
|
124
|
+
| Hono | hono dep | — (server mode) | . |
|
|
125
|
+
| Static HTML | index.html exists | — | . / dist / build |
|
|
131
126
|
|
|
132
127
|
---
|
|
133
128
|
|
|
134
129
|
## Architecture
|
|
135
130
|
|
|
131
|
+
User runs: `nivii share`
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
Nivii CLI (Node.js)
|
|
135
|
+
1. detectFramework() → identifies build system
|
|
136
|
+
2. runBuild() → executes build command
|
|
137
|
+
3. zipDirectory() → zips output dir
|
|
138
|
+
4. uploadDeploy() → POST /deploy to API
|
|
139
|
+
5. showQR() → renders QR in terminal
|
|
140
|
+
6. startLiveSync() → WebSocket watcher (--live)
|
|
141
|
+
```
|
|
142
|
+
|
|
136
143
|
```
|
|
137
|
-
CLI (Node.js)
|
|
138
|
-
detectFramework() → runBuild() → uploadDeploy() → showQR() → startLiveSync()
|
|
139
|
-
↓
|
|
140
144
|
api.nivii.app (Cloudflare Worker)
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
+
POST /deploy
|
|
146
|
+
- Stores metadata in KV (slug, password, expiry…)
|
|
147
|
+
- Uploads files to R2 bucket
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
Cloudflare R2 (Object Storage) | Cloudflare KV (Metadata + Analytics)
|
|
152
|
+
deploys/{slug}/ deploy:{slug} → JSON meta
|
|
153
|
+
analytics:{slug} → stats
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
*.nivii.app (Cloudflare Worker wildcard routing)
|
|
158
|
+
GET xyz.nivii.app/
|
|
159
|
+
- Checks KV for metadata (expiry, password, OTP)
|
|
160
|
+
- Serves files from R2
|
|
161
|
+
- SPA fallback to index.html
|
|
145
162
|
```
|
|
146
163
|
|
|
147
164
|
---
|
|
148
165
|
|
|
149
|
-
## Self-Hosting
|
|
166
|
+
## Self-Hosting on Cloudflare
|
|
150
167
|
|
|
151
|
-
Deploy your own Nivii
|
|
168
|
+
Deploy your own Nivii instance in ~10 minutes:
|
|
152
169
|
|
|
170
|
+
### Prerequisites
|
|
171
|
+
- [Cloudflare account](https://cloudflare.com) (free tier works)
|
|
172
|
+
- [Wrangler CLI](https://developers.cloudflare.com/workers/wrangler/): `npm i -g wrangler`
|
|
173
|
+
- Node.js 18+
|
|
174
|
+
|
|
175
|
+
### Steps
|
|
176
|
+
|
|
177
|
+
1. Clone and install
|
|
153
178
|
```bash
|
|
154
|
-
# 1. Clone
|
|
155
179
|
git clone https://github.com/Aadigarg111/Nivi-sh.git
|
|
156
|
-
cd Nivi-sh
|
|
180
|
+
cd Nivi-sh
|
|
181
|
+
npm install
|
|
182
|
+
```
|
|
157
183
|
|
|
158
|
-
|
|
184
|
+
2. Create Cloudflare resources
|
|
185
|
+
```bash
|
|
186
|
+
# Login to Cloudflare
|
|
159
187
|
wrangler login
|
|
188
|
+
|
|
189
|
+
# Create KV namespace
|
|
160
190
|
wrangler kv:namespace create "DB"
|
|
191
|
+
wrangler kv:namespace create "DB" --preview
|
|
192
|
+
|
|
193
|
+
# Create R2 bucket
|
|
161
194
|
wrangler r2 bucket create nivii-deployments
|
|
195
|
+
```
|
|
162
196
|
|
|
163
|
-
|
|
197
|
+
3. Update `wrangler.toml`
|
|
198
|
+
```
|
|
199
|
+
# packages/worker/wrangler.toml
|
|
200
|
+
[[kv_namespaces]]
|
|
201
|
+
binding = "DB"
|
|
202
|
+
id = "YOUR_ACTUAL_KV_ID"
|
|
203
|
+
preview_id = "YOUR_PREVIEW_KV_ID"
|
|
204
|
+
|
|
205
|
+
[[r2_buckets]]
|
|
206
|
+
binding = "BUCKET"
|
|
207
|
+
bucket_name = "nivii-deployments"
|
|
208
|
+
```
|
|
164
209
|
|
|
165
|
-
|
|
166
|
-
|
|
210
|
+
4. Deploy the worker
|
|
211
|
+
```bash
|
|
212
|
+
cd packages/worker
|
|
213
|
+
wrangler deploy
|
|
214
|
+
```
|
|
167
215
|
|
|
168
|
-
|
|
216
|
+
5. Configure DNS
|
|
217
|
+
Add a wildcard DNS record:
|
|
218
|
+
- Type: CNAME
|
|
219
|
+
- Name: *
|
|
220
|
+
- Target: your-worker.workers.dev
|
|
221
|
+
- Proxy: Enabled (orange cloud)
|
|
222
|
+
|
|
223
|
+
6. Point the CLI at your instance
|
|
224
|
+
```bash
|
|
169
225
|
export NIVII_API=https://api.your-domain.com
|
|
226
|
+
# Or set in config
|
|
227
|
+
nivii config apiBase https://api.your-domain.com
|
|
170
228
|
```
|
|
171
229
|
|
|
172
230
|
---
|
|
173
231
|
|
|
174
232
|
## Configuration
|
|
175
233
|
|
|
176
|
-
Config stored at `~/.nivii/config.json`:
|
|
234
|
+
Config is stored at `~/.nivii/config.json`:
|
|
177
235
|
|
|
178
236
|
```json
|
|
179
237
|
{
|
|
238
|
+
"token": "your-pro-token",
|
|
239
|
+
"plan": "free",
|
|
180
240
|
"apiBase": "https://api.nivii.app",
|
|
181
241
|
"deployments": []
|
|
182
242
|
}
|
|
183
243
|
```
|
|
184
244
|
|
|
245
|
+
Manage it:
|
|
246
|
+
```
|
|
247
|
+
nivii config # show all
|
|
248
|
+
nivii config token <tok> # set token
|
|
249
|
+
nivii config apiBase <url> # point to self-hosted instance
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## Roadmap v2
|
|
255
|
+
- [ ] Team workspaces — share deployments with your team
|
|
256
|
+
- [ ] Custom domains — deploy to preview.your-company.com
|
|
257
|
+
- [ ] GitHub Actions integration — auto-share on every PR
|
|
258
|
+
- [ ] VS Code extension — deploy with a keyboard shortcut
|
|
259
|
+
- [ ] Mobile app — scan QR codes from Nivii deployments
|
|
260
|
+
- [ ] Zip-streaming upload — faster uploads for large projects
|
|
261
|
+
- [ ] Screenshot previews — auto-thumbnail for each deployment
|
|
262
|
+
- [ ] API keys + webhooks — programmatic deployments
|
|
263
|
+
- [ ] Deployment history UI — web dashboard at app.nivii.app
|
|
264
|
+
- [ ] SSR support — run Express/Fastify apps in serverless mode
|
|
265
|
+
- [ ] Monorepo support — deploy multiple packages at once
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## Contributing
|
|
270
|
+
|
|
271
|
+
Contributions are welcome! This is an AGPL-3.0 project.
|
|
272
|
+
|
|
273
|
+
### Fork and clone
|
|
274
|
+
```bash
|
|
275
|
+
git clone https://github.com/YOUR_USERNAME/Nivi-sh.git
|
|
276
|
+
cd Nivi-sh
|
|
277
|
+
npm install
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### Run locally
|
|
185
281
|
```bash
|
|
186
|
-
|
|
187
|
-
|
|
282
|
+
# Build CLI
|
|
283
|
+
cd packages/cli && npm run build
|
|
284
|
+
|
|
285
|
+
# Run the CLI locally
|
|
286
|
+
node dist/cli.js share --help
|
|
188
287
|
```
|
|
189
288
|
|
|
289
|
+
### Submitting PRs
|
|
290
|
+
1. Fork the repository
|
|
291
|
+
2. Create a feature branch: `git checkout -b feat/my-feature`
|
|
292
|
+
3. Commit your changes: `git commit -m 'feat: add something cool'`
|
|
293
|
+
4. Push to your fork: `git push origin feat/my-feature`
|
|
294
|
+
5. Open a Pull Request
|
|
295
|
+
|
|
296
|
+
Please follow conventional commits and keep PRs focused.
|
|
297
|
+
|
|
190
298
|
---
|
|
191
299
|
|
|
192
300
|
## License
|
|
193
301
|
|
|
194
|
-
|
|
302
|
+
Nivii — Futuristic Project Sharing CLI
|
|
195
303
|
|
|
196
|
-
|
|
304
|
+
Copyright (C) 2025 Aadigarg111
|
|
305
|
+
|
|
306
|
+
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
|
197
307
|
|
|
198
|
-
|
|
308
|
+
[AGPL-3.0](./LICENSE) — See the LICENSE file for full terms.
|
|
199
309
|
|
|
200
|
-
|
|
310
|
+
---
|
|
201
311
|
|
|
202
|
-
</div>
|
|
312
|
+
<div align="center"> Made with ❤️ by [Aadigarg111](https://github.com/Aadigarg111) ⚡️ [nivii.app](https://nivii.app) · [npm](https://www.npmjs.com/package/nivii) · [GitHub](https://github.com/Aadigarg111/Nivi-sh) </div>
|
package/dist/cli.js
CHANGED
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { cac } from 'cac';
|
|
3
3
|
import chalk from 'chalk';
|
|
4
|
-
import { createRequire } from 'module';
|
|
5
4
|
import { runShare } from './commands/share.js';
|
|
6
|
-
import { runFullStack } from './commands/fullstack.js';
|
|
7
5
|
import { runConfig } from './commands/config.js';
|
|
8
6
|
import { runWhoami } from './commands/whoami.js';
|
|
9
|
-
import { runPro } from './commands/pro.js';
|
|
10
7
|
import { runAnalytics } from './core/analytics.js';
|
|
11
8
|
import { loadConfig, updateConfig } from './utils/config.js';
|
|
12
|
-
const require = createRequire(import.meta.url);
|
|
13
|
-
const PKG_VERSION = require('../package.json').version;
|
|
14
9
|
import { showWelcome, showHelp } from './ui/welcome.js';
|
|
15
10
|
const cli = cac('nivii');
|
|
16
11
|
// ─── First run ────────────────────────────────────────────────────────────────
|
|
@@ -60,48 +55,6 @@ cli
|
|
|
60
55
|
process.exit(1);
|
|
61
56
|
}
|
|
62
57
|
});
|
|
63
|
-
// ─── fullstack ────────────────────────────────────────────────────────────────
|
|
64
|
-
cli
|
|
65
|
-
.command('fullstack', 'Deploy frontend + backend together, auto-wired')
|
|
66
|
-
.alias('fs')
|
|
67
|
-
.option('--dir <dir>', 'Root directory (default: cwd)')
|
|
68
|
-
.option('--slug <slug>', 'Custom slug')
|
|
69
|
-
.option('--expires <duration>', 'Expiry: 1h / 24h / 7d / 30d')
|
|
70
|
-
.option('--fly-token <token>', 'Fly.io API token for backend deploy')
|
|
71
|
-
.option('--skip-backend', 'Deploy frontend only')
|
|
72
|
-
.option('--skip-frontend', 'Deploy backend only')
|
|
73
|
-
.option('--no-qr', 'Skip QR code')
|
|
74
|
-
.option('--no-open', 'Do not open browser')
|
|
75
|
-
.action(async (options) => {
|
|
76
|
-
try {
|
|
77
|
-
await runFullStack({
|
|
78
|
-
dir: options.dir,
|
|
79
|
-
slug: options.slug,
|
|
80
|
-
expires: options.expires,
|
|
81
|
-
flyToken: options.flyToken,
|
|
82
|
-
skipBackend: options.skipBackend,
|
|
83
|
-
skipFrontend: options.skipFrontend,
|
|
84
|
-
noQr: options['no-qr'],
|
|
85
|
-
noOpen: options['no-open'],
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
catch (err) {
|
|
89
|
-
console.error(chalk.red('\n ✗ ') + err.message);
|
|
90
|
-
process.exit(1);
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
// ─── pro ──────────────────────────────────────────────────────────────────────
|
|
94
|
-
cli
|
|
95
|
-
.command('pro [subcommand]', 'Manage your Nivii Pro early access')
|
|
96
|
-
.action(async (subcommand) => {
|
|
97
|
-
try {
|
|
98
|
-
await runPro(subcommand);
|
|
99
|
-
}
|
|
100
|
-
catch (err) {
|
|
101
|
-
console.error(chalk.red('\n ✗ ') + err.message);
|
|
102
|
-
process.exit(1);
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
58
|
// ─── config ───────────────────────────────────────────────────────────────────
|
|
106
59
|
cli
|
|
107
60
|
.command('config [key] [value]', 'View or set config values')
|
|
@@ -139,7 +92,7 @@ cli
|
|
|
139
92
|
.action(async (slug) => {
|
|
140
93
|
await runAnalytics(slug);
|
|
141
94
|
});
|
|
142
|
-
cli.version(
|
|
95
|
+
cli.version('0.1.8');
|
|
143
96
|
// ─── Show help when no command given ─────────────────────────────────────────
|
|
144
97
|
cli.parse(process.argv, { run: false });
|
|
145
98
|
if (!cli.matchedCommand) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;AAEzB,iFAAiF;AACjF,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;AAC5B,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;IACpB,WAAW,EAAE,CAAC;IACd,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,iFAAiF;AACjF,GAAG;KACA,OAAO,CAAC,OAAO,EAAE,wCAAwC,CAAC;KAC1D,MAAM,CAAC,aAAa,EAAE,oCAAoC,CAAC;KAC3D,MAAM,CAAC,eAAe,EAAE,oDAAoD,CAAC;KAC7E,MAAM,CAAC,mBAAmB,EAAE,kCAAkC,CAAC;KAC/D,MAAM,CAAC,OAAO,EAAE,iCAAiC,CAAC;KAClD,MAAM,CAAC,sBAAsB,EAAE,qCAAqC,CAAC;KACrE,MAAM,CAAC,QAAQ,EAAE,qDAAqD,CAAC;KACvE,MAAM,CAAC,UAAU,EAAE,8CAA8C,CAAC;KAClE,MAAM,CAAC,YAAY,EAAE,2CAA2C,CAAC;KACjE,MAAM,CAAC,aAAa,EAAE,sBAAsB,CAAC;KAC7C,MAAM,CAAC,eAAe,EAAE,4BAA4B,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KACxE,MAAM,CAAC,iBAAiB,EAAE,6BAA6B,CAAC;KACxD,MAAM,CAAC,iBAAiB,EAAE,gCAAgC,CAAC;KAC3D,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC;KACjC,MAAM,CAAC,WAAW,EAAE,qBAAqB,CAAC;KAC1C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC;YACb,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC;YAC5B,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,EAAE,EAAE,OAAO,CAAC,EAAE;SACf,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,iFAAiF;AACjF,GAAG;KACA,OAAO,CAAC,sBAAsB,EAAE,2BAA2B,CAAC;KAC5D,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;IACrB,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC;AAEL,iFAAiF;AACjF,GAAG;KACA,OAAO,CAAC,QAAQ,EAAE,2BAA2B,CAAC;KAC9C,MAAM,CAAC,GAAG,EAAE;IACX,SAAS,EAAE,CAAC;AACd,CAAC,CAAC,CAAC;AAEL,iFAAiF;AACjF,GAAG;KACA,OAAO,CAAC,IAAI,EAAE,8BAA8B,CAAC;KAC7C,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;IAC1C,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC;QAChF,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpG,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEL,iFAAiF;AACjF,GAAG;KACA,OAAO,CAAC,kBAAkB,EAAE,iCAAiC,CAAC;KAC9D,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEL,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAErB,gFAAgF;AAChF,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AACxC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;IACxB,QAAQ,EAAE,CAAC;IACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AACD,MAAM,GAAG,CAAC,iBAAiB,EAAE,CAAC;AAE9B,SAAS,SAAS,CAAC,IAAU;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACjE,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,OAAO,CAAC;IAC3C,IAAI,OAAO,GAAG,IAAI;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;IAC9D,IAAI,OAAO,GAAG,KAAK;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IACjE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAC/C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../src/commands/share.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../src/commands/share.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,iBAgIhD"}
|
package/dist/commands/share.js
CHANGED
|
@@ -42,8 +42,8 @@ export async function runShare(opts) {
|
|
|
42
42
|
if (!slug) {
|
|
43
43
|
slug = generateSlug(8);
|
|
44
44
|
}
|
|
45
|
-
else if (
|
|
46
|
-
warn('Custom slugs require Pro.
|
|
45
|
+
else if (config.plan !== 'pro') {
|
|
46
|
+
warn('Custom slugs require Nivii Pro. Using random slug instead.');
|
|
47
47
|
slug = generateSlug(8);
|
|
48
48
|
}
|
|
49
49
|
// ─── 4. Upload (files directly, no zip) ────────────────────────────────────
|
|
@@ -51,10 +51,9 @@ export async function runShare(opts) {
|
|
|
51
51
|
buildDir: fullOutputDir,
|
|
52
52
|
slug,
|
|
53
53
|
token: config.token,
|
|
54
|
-
proEmail: config.proEmail,
|
|
55
54
|
password: opts.pass,
|
|
56
55
|
otp: opts.otp,
|
|
57
|
-
expires: opts.expires || '48h',
|
|
56
|
+
expires: opts.expires || (config.plan === 'pro' ? undefined : '48h'),
|
|
58
57
|
live: opts.live,
|
|
59
58
|
collab: opts.collab,
|
|
60
59
|
maxViews: opts.maxViews,
|
|
@@ -79,7 +78,7 @@ export async function runShare(opts) {
|
|
|
79
78
|
...(opts.pass ? [' ' + theme.muted('Protected:') + ' ' + theme.success('✓ Password')] : []),
|
|
80
79
|
...(opts.otp && deployResult.otpCode ? [' ' + theme.muted('OTP:') + ' ' + theme.warning(deployResult.otpCode)] : []),
|
|
81
80
|
...(opts.live ? [' ' + theme.muted('Live sync:') + ' ' + theme.success('✓ Active')] : []),
|
|
82
|
-
...(opts.collab
|
|
81
|
+
...(opts.collab ? [' ' + theme.muted('Collab:') + ' ' + theme.success('✓ Active')] : []),
|
|
83
82
|
]));
|
|
84
83
|
console.log('');
|
|
85
84
|
// ─── 7. Copy URL to clipboard ──────────────────────────────────────────────
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"share.js","sourceRoot":"","sources":["../../src/commands/share.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAmBvC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAkB;IAC/C,UAAU,EAAE,CAAC;IAEb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IAC9D,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,8EAA8E;IAC9E,IAAI,CAAC,IAAI,EAAE,yBAAyB,EAAE,GAAG,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAEtC,MAAM,cAAc,GAA2B;QAC7C,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa;QAC3D,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW;QACpD,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM;QAC5C,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS;QACzD,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS;KACxD,CAAC;IAEF,OAAO,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,GAAG;QACzF,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,UAAU,eAAe,CAAC,EAAE,CAAC,CAAC;IAE5D,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACtD,IAAI,CAAC,qEAAqE,CAAC,CAAC;IAC9E,CAAC;IAED,8EAA8E;IAC9E,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC;QACnC,GAAG;QACH,MAAM,EAAE,QAAQ;QAChB,SAAS,EAAE,IAAI,CAAC,GAAG;QACnB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAEnD,8EAA8E;IAC9E,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACrB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;SAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"share.js","sourceRoot":"","sources":["../../src/commands/share.ts"],"names":[],"mappings":"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"}
|
package/dist/core/upload.d.ts
CHANGED
|
@@ -2,7 +2,6 @@ export interface UploadOptions {
|
|
|
2
2
|
buildDir: string;
|
|
3
3
|
slug: string;
|
|
4
4
|
token?: string;
|
|
5
|
-
proEmail?: string;
|
|
6
5
|
password?: string;
|
|
7
6
|
otp?: boolean;
|
|
8
7
|
expires?: string;
|
|
@@ -15,7 +14,7 @@ export interface DeployResult {
|
|
|
15
14
|
url: string;
|
|
16
15
|
slug: string;
|
|
17
16
|
liveToken?: string;
|
|
18
|
-
|
|
17
|
+
collabToken?: string;
|
|
19
18
|
otpCode?: string;
|
|
20
19
|
expiresAt?: string;
|
|
21
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/core/upload.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/core/upload.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgBD,wBAAsB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAiD7E"}
|
package/dist/core/upload.js
CHANGED
|
@@ -44,8 +44,6 @@ export async function uploadDeploy(opts) {
|
|
|
44
44
|
form.append('maxViews', String(opts.maxViews));
|
|
45
45
|
if (opts.selfDestruct)
|
|
46
46
|
form.append('selfDestruct', 'true');
|
|
47
|
-
if (opts.proEmail)
|
|
48
|
-
form.append('proEmail', opts.proEmail);
|
|
49
47
|
// Attach each file with its relative path as the field name
|
|
50
48
|
for (const { abs, rel } of files) {
|
|
51
49
|
form.append('file[]', fs.createReadStream(abs), { filename: rel });
|
package/dist/core/upload.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/core/upload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/core/upload.ts"],"names":[],"mappings":"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"}
|