curatedreels-deploy 1.0.1 → 1.0.4
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 +235 -122
- package/dist/clients/deno.d.ts +9 -6
- package/dist/clients/deno.d.ts.map +1 -1
- package/dist/clients/deno.js +20 -36
- package/dist/clients/deno.js.map +1 -1
- package/dist/clients/vercel.d.ts +4 -0
- package/dist/clients/vercel.d.ts.map +1 -1
- package/dist/clients/vercel.js +60 -13
- package/dist/clients/vercel.js.map +1 -1
- package/dist/index.js +15 -6
- package/dist/index.js.map +1 -1
- package/dist/orchestrator.d.ts +6 -0
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +81 -1
- package/dist/orchestrator.js.map +1 -1
- package/dist/services/bundles.d.ts.map +1 -1
- package/dist/services/bundles.js +78 -23
- package/dist/services/bundles.js.map +1 -1
- package/dist/utils/credentials.d.ts +3 -0
- package/dist/utils/credentials.d.ts.map +1 -1
- package/dist/utils/credentials.js +30 -0
- package/dist/utils/credentials.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,176 +1,289 @@
|
|
|
1
|
-
#
|
|
1
|
+
# CuratedReels Deploy CLI
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Deploy your white-label video curation platform to your own infrastructure in minutes.
|
|
4
4
|
|
|
5
|
-
##
|
|
6
|
-
|
|
7
|
-
This CLI tool allows customers to deploy CuratedReels to their own infrastructure (Vercel, Deno Deploy, MongoDB) using pre-compiled bundles, without seeing or modifying the source code.
|
|
8
|
-
|
|
9
|
-
## Installation
|
|
5
|
+
## 🚀 Quick Start
|
|
10
6
|
|
|
11
7
|
```bash
|
|
12
|
-
|
|
8
|
+
# Set your GitHub token (required for private repo access)
|
|
9
|
+
export GITHUB_TOKEN=ghp_your_token_here
|
|
10
|
+
|
|
11
|
+
# Run the deployment
|
|
12
|
+
npx curatedreels-deploy
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
That's it! The CLI will guide you through the entire deployment process.
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
curatedreels-deploy
|
|
19
|
-
```
|
|
17
|
+
## 📋 Prerequisites
|
|
20
18
|
|
|
21
|
-
|
|
22
|
-
1. License verification
|
|
23
|
-
2. Infrastructure credentials collection
|
|
24
|
-
3. Bundle download
|
|
25
|
-
4. Automated deployment
|
|
19
|
+
Before you start, make sure you have:
|
|
26
20
|
|
|
27
|
-
|
|
21
|
+
1. **CuratedReels License Key** - You received this when you purchased CuratedReels
|
|
22
|
+
2. **GitHub Token** - Required to download deployment bundles
|
|
23
|
+
- Get token: https://github.com/settings/tokens
|
|
24
|
+
- Required scope: `repo` (Full control of private repositories)
|
|
25
|
+
- Set as environment variable: `export GITHUB_TOKEN=ghp_...`
|
|
26
|
+
3. **Vercel Account** (free tier works)
|
|
27
|
+
- Sign up: https://vercel.com
|
|
28
|
+
- Get API token: https://vercel.com/account/tokens
|
|
29
|
+
4. **Deno Deploy Account** (free tier works)
|
|
30
|
+
- Sign up: https://deno.com/deploy
|
|
31
|
+
- Get access token: https://dash.deno.com/account/access-tokens
|
|
32
|
+
5. **MongoDB Atlas** (free tier works)
|
|
33
|
+
- Sign up: https://mongodb.com/atlas
|
|
34
|
+
- Create a cluster and get connection URI
|
|
35
|
+
6. **Telegram Bot Token** (See detailed steps below)
|
|
36
|
+
- Chat with [@BotFather](https://t.me/botfather)
|
|
37
|
+
- Create a new bot and get the token
|
|
28
38
|
|
|
29
|
-
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
- ✅ [MongoDB Atlas](https://mongodb.com/atlas) cluster + connection URI
|
|
33
|
-
- ✅ [Telegram Bot](https://t.me/botfather) token
|
|
34
|
-
- ✅ Valid CuratedReels license key
|
|
39
|
+
### Optional (Recommended)
|
|
40
|
+
- **Cloudinary** - For video uploads (https://cloudinary.com)
|
|
41
|
+
- **YouTube API Key** - For video metadata (https://developers.google.com/youtube/v3)
|
|
35
42
|
|
|
36
|
-
##
|
|
43
|
+
## 🎯 What You'll Get
|
|
37
44
|
|
|
38
|
-
|
|
39
|
-
- [YouTube Data API](https://developers.google.com/youtube/v3) - For metadata extraction
|
|
45
|
+
After deployment, you'll have:
|
|
40
46
|
|
|
41
|
-
|
|
47
|
+
- **Public Website** - Your branded video platform at `your-project.vercel.app`
|
|
48
|
+
- **Admin Panel** - CMS to manage content at `your-project-cms.vercel.app`
|
|
49
|
+
- **Telegram Bot** - Interactive bot for video curation at `t.me/your_bot`
|
|
50
|
+
- **Database** - All your data in your own MongoDB
|
|
42
51
|
|
|
43
|
-
|
|
44
|
-
1. **Frontend** - Public-facing web app
|
|
45
|
-
2. **CMS/Admin** - PayloadCMS admin panel + API
|
|
52
|
+
## 📖 Step-by-Step Guide
|
|
46
53
|
|
|
47
|
-
###
|
|
48
|
-
3. **Bot** - Telegram bot worker
|
|
54
|
+
### STEP 1: Create Bot (BEFORE Deployment)
|
|
49
55
|
|
|
50
|
-
|
|
51
|
-
- Creates database collections
|
|
52
|
-
- Sets up indexes
|
|
53
|
-
- Seeds initial data
|
|
56
|
+
Before running the deploy command, create your Telegram bot:
|
|
54
57
|
|
|
55
|
-
|
|
58
|
+
1. **Open Telegram**
|
|
59
|
+
2. **Search for @BotFather**
|
|
60
|
+
3. **Send:** `/newbot`
|
|
61
|
+
4. **Choose a name:** "My CuratedReels Bot"
|
|
62
|
+
5. **Choose username:** `my_curated_bot` (must end with 'bot')
|
|
63
|
+
6. **BotFather gives you a TOKEN:** `7951673577:AAEalQZ...`
|
|
64
|
+
7. **Save this token!** You'll need it in Step 3
|
|
56
65
|
|
|
57
|
-
|
|
58
|
-
Customer's Infrastructure:
|
|
59
|
-
├── Vercel
|
|
60
|
-
│ ├── Frontend (Next.js)
|
|
61
|
-
│ └── CMS (Next.js + PayloadCMS)
|
|
62
|
-
├── Deno Deploy
|
|
63
|
-
│ └── Bot (Telegram worker)
|
|
64
|
-
└── MongoDB Atlas
|
|
65
|
-
└── Database
|
|
66
|
-
```
|
|
66
|
+
**Configure Bot Privacy (IMPORTANT):**
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
8. **Send to @BotFather:** `/setprivacy`
|
|
69
|
+
9. **Select your bot:** Click on @my_curated_bot
|
|
70
|
+
10. **Choose:** `Disable`
|
|
71
|
+
11. **Confirmation:** BotFather says "Success! Privacy mode is disabled"
|
|
69
72
|
|
|
70
|
-
|
|
71
|
-
2. **Credential Collection** - Interactive prompts for API tokens
|
|
72
|
-
3. **Bundle Download** - Downloads pre-compiled bundles (authenticated)
|
|
73
|
-
4. **Checksum Verification** - Ensures bundle integrity
|
|
74
|
-
5. **Deployment** - Deploys to all services
|
|
75
|
-
6. **Configuration** - Sets up environment variables
|
|
76
|
-
7. **Health Check** - Verifies all services are running
|
|
73
|
+
⚠️ **Why?** By default, bots only see messages that start with `/` or mention them. Disabling privacy mode lets your bot see ALL messages in the group, which is required to detect video links.
|
|
77
74
|
|
|
78
|
-
|
|
75
|
+
### STEP 2: Run the Deploy Command
|
|
79
76
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
- ✅ Encrypted credentials
|
|
84
|
-
- ✅ API token validation
|
|
77
|
+
```bash
|
|
78
|
+
npx curatedreels-deploy
|
|
79
|
+
```
|
|
85
80
|
|
|
86
|
-
|
|
81
|
+
### STEP 3: Enter Your License Key
|
|
87
82
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
83
|
+
Paste the license key you received from CuratedReels:
|
|
84
|
+
```
|
|
85
|
+
? Enter your CuratedReels license key: ck_live_abc123...
|
|
86
|
+
```
|
|
92
87
|
|
|
93
|
-
###
|
|
94
|
-
- Next.js production build
|
|
95
|
-
- PayloadCMS compiled code
|
|
96
|
-
- Package.json (dependencies only)
|
|
88
|
+
### STEP 4: Choose Your Project Name
|
|
97
89
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
- Obfuscated code
|
|
90
|
+
```
|
|
91
|
+
? Enter project name: my-video-platform
|
|
92
|
+
```
|
|
102
93
|
|
|
103
|
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
106
|
-
- Seed data structure
|
|
94
|
+
This will be used for:
|
|
95
|
+
- Vercel project names (`my-video-platform`, `my-video-platform-cms`)
|
|
96
|
+
- Deno Deploy project name (`my-video-platform-bot`)
|
|
107
97
|
|
|
108
|
-
|
|
98
|
+
### STEP 5: Enter API Tokens
|
|
109
99
|
|
|
110
|
-
|
|
100
|
+
The CLI will ask for your tokens one by one:
|
|
111
101
|
|
|
112
|
-
**
|
|
113
|
-
```
|
|
114
|
-
|
|
102
|
+
**Vercel:**
|
|
103
|
+
```
|
|
104
|
+
? Vercel API token: [paste your token]
|
|
115
105
|
```
|
|
116
106
|
|
|
117
|
-
**
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
NEXT_PUBLIC_FRONTEND_URL=<frontend-url>
|
|
121
|
-
TELEGRAM_BOT_TOKEN=<customer-bot-token>
|
|
122
|
-
CLOUDINARY_*=<customer-cloudinary-creds>
|
|
107
|
+
**Deno Deploy:**
|
|
108
|
+
```
|
|
109
|
+
? Deno Deploy access token: [paste your token]
|
|
123
110
|
```
|
|
124
111
|
|
|
125
|
-
**
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
MONGODB_URI=<customer-mongo-uri>
|
|
129
|
-
PAYLOAD_API_URL=<cms-url>
|
|
130
|
-
CLOUDINARY_*=<customer-cloudinary-creds>
|
|
131
|
-
YOUTUBE_API_KEY=<customer-youtube-key>
|
|
112
|
+
**MongoDB:**
|
|
113
|
+
```
|
|
114
|
+
? MongoDB connection URI: mongodb+srv://user:pass@cluster.mongodb.net/
|
|
132
115
|
```
|
|
133
116
|
|
|
134
|
-
|
|
117
|
+
**Telegram:**
|
|
118
|
+
```
|
|
119
|
+
? Telegram bot token: [paste the token from STEP 1]
|
|
120
|
+
```
|
|
135
121
|
|
|
136
|
-
|
|
122
|
+
**Admin Account:**
|
|
137
123
|
```
|
|
138
|
-
|
|
124
|
+
? Admin Full Name: John Doe
|
|
125
|
+
? Admin Email: john@mycompany.com
|
|
126
|
+
? Admin Password: ******** (min 8 characters)
|
|
139
127
|
```
|
|
140
|
-
**Solution:** Ensure you have an active CuratedReels license. Purchase at https://curatedreels.com/pricing
|
|
141
128
|
|
|
142
|
-
|
|
129
|
+
**Cloudinary (optional):**
|
|
143
130
|
```
|
|
144
|
-
|
|
131
|
+
? Cloudinary cloud name: [your-cloud-name]
|
|
132
|
+
? Cloudinary API key: [your-api-key]
|
|
133
|
+
? Cloudinary API secret: [your-api-secret]
|
|
145
134
|
```
|
|
146
|
-
**Solution:** Verify your Vercel API token. Get it from https://vercel.com/account/tokens
|
|
147
135
|
|
|
148
|
-
###
|
|
136
|
+
### STEP 6: Wait for Deployment
|
|
137
|
+
|
|
138
|
+
The CLI will:
|
|
139
|
+
1. ✅ Verify your license
|
|
140
|
+
2. ✅ Download deployment bundles
|
|
141
|
+
3. ✅ Deploy frontend to Vercel
|
|
142
|
+
4. ✅ Deploy CMS/admin to Vercel
|
|
143
|
+
5. ✅ Deploy bot to Deno Deploy
|
|
144
|
+
6. ✅ Configure environment variables
|
|
145
|
+
7. ✅ Run health checks
|
|
146
|
+
|
|
147
|
+
This takes ~3-5 minutes.
|
|
148
|
+
|
|
149
|
+
### STEP 7: Access Your Platform
|
|
150
|
+
|
|
151
|
+
When complete, you'll see:
|
|
149
152
|
```
|
|
150
|
-
|
|
153
|
+
✅ Deployment successful!
|
|
154
|
+
|
|
155
|
+
🌐 Frontend: https://my-video-platform.vercel.app
|
|
156
|
+
⚙️ CMS Admin: https://my-video-platform-cms.vercel.app
|
|
157
|
+
🤖 Telegram Bot: https://t.me/my_video_bot
|
|
151
158
|
```
|
|
152
|
-
**Solution:**
|
|
153
|
-
1. Check your connection string format
|
|
154
|
-
2. Verify IP whitelist in MongoDB Atlas
|
|
155
|
-
3. Confirm database user has read/write permissions
|
|
156
159
|
|
|
157
|
-
###
|
|
160
|
+
### STEP 8: Add Bot to Group
|
|
161
|
+
|
|
162
|
+
After deployment completes, add your bot to a Telegram group:
|
|
163
|
+
|
|
164
|
+
1. **Create a Telegram group** (or use an existing one)
|
|
165
|
+
2. **In group settings** → Add Members
|
|
166
|
+
3. **Search for @my_curated_bot** (the username from STEP 1)
|
|
167
|
+
4. **Add it to the group**
|
|
168
|
+
5. **Make it admin** (optional, but recommended for full functionality)
|
|
169
|
+
|
|
170
|
+
✅ **Test it:** Post a YouTube/Instagram/Facebook video link in the group. The bot should respond with age range options!
|
|
171
|
+
|
|
172
|
+
⚠️ **Not working?** Make sure you disabled privacy mode in STEP 1. If you skipped it, go back to @BotFather, send `/setprivacy`, select your bot, and choose `Disable`. Then **remove and re-add** the bot to your group.
|
|
173
|
+
|
|
174
|
+
## 🎨 Next Steps
|
|
175
|
+
|
|
176
|
+
1. **Open your admin panel** - Visit the CMS URL and login with the credentials you provided during deployment
|
|
177
|
+
2. **Configure your bot** - Send `/start` to your Telegram bot
|
|
178
|
+
3. **Customize branding** - Update colors, logo in the admin panel
|
|
179
|
+
4. **Add videos** - Start curating content!
|
|
180
|
+
|
|
181
|
+
## ❓ FAQ
|
|
182
|
+
|
|
183
|
+
### Do I need to know how to code?
|
|
184
|
+
No! The CLI handles everything. Just provide your API tokens and project name.
|
|
185
|
+
|
|
186
|
+
### Will I own the infrastructure?
|
|
187
|
+
Yes! Everything is deployed to **your** accounts (Vercel, Deno, MongoDB). You have full control.
|
|
188
|
+
|
|
189
|
+
### Can I use the free tiers?
|
|
190
|
+
Yes! All platforms offer free tiers that work with CuratedReels:
|
|
191
|
+
- Vercel: Free tier (100GB bandwidth)
|
|
192
|
+
- Deno Deploy: Free tier (100k requests/day)
|
|
193
|
+
- MongoDB Atlas: Free tier (512MB storage)
|
|
194
|
+
|
|
195
|
+
### How do I update my deployment?
|
|
196
|
+
Run `npx curatedreels-deploy` again with the same project name. It will update your existing deployment.
|
|
197
|
+
|
|
198
|
+
### Can I customize the platform?
|
|
199
|
+
You can customize branding, colors, and content through the admin panel. Source code customization is not available.
|
|
200
|
+
|
|
201
|
+
### What happens if I exceed deployment limits?
|
|
202
|
+
Your license tier determines how many deployments you can create:
|
|
203
|
+
- **Starter**: 1 deployment
|
|
204
|
+
- **Pro**: 5 deployments
|
|
205
|
+
- **Enterprise**: 999 deployments
|
|
206
|
+
|
|
207
|
+
Contact support to upgrade your license.
|
|
208
|
+
|
|
209
|
+
## 🏗️ Architecture
|
|
210
|
+
|
|
211
|
+
Your deployed platform includes:
|
|
212
|
+
|
|
158
213
|
```
|
|
159
|
-
|
|
214
|
+
Your Infrastructure:
|
|
215
|
+
├── Vercel (Frontend)
|
|
216
|
+
│ └── User-facing website
|
|
217
|
+
├── Vercel (CMS)
|
|
218
|
+
│ └── Admin panel + API
|
|
219
|
+
├── Deno Deploy (Bot)
|
|
220
|
+
│ └── Telegram bot worker
|
|
221
|
+
└── MongoDB Atlas
|
|
222
|
+
└── Your database
|
|
160
223
|
```
|
|
161
|
-
**Solution:**
|
|
162
|
-
1. Check your internet connection
|
|
163
|
-
2. Verify license key is valid and not expired
|
|
164
|
-
3. Ensure you haven't exceeded deployment limits
|
|
165
224
|
|
|
166
|
-
|
|
225
|
+
All components connect automatically during deployment.
|
|
226
|
+
|
|
227
|
+
## 🔒 Security & Privacy
|
|
228
|
+
|
|
229
|
+
- Your data stays in **your** infrastructure
|
|
230
|
+
- CuratedReels never has access to your MongoDB or user data
|
|
231
|
+
- Pre-compiled, secure bundles
|
|
232
|
+
- Automatic SSL certificates on all deployments
|
|
233
|
+
- Environment variables encrypted in transit
|
|
234
|
+
|
|
235
|
+
## 🐛 Troubleshooting
|
|
236
|
+
|
|
237
|
+
### "Invalid license key"
|
|
238
|
+
- Double-check you copied the entire key (starts with `ck_live_`)
|
|
239
|
+
- Ensure your license hasn't expired
|
|
240
|
+
- Contact support if you need a new key
|
|
241
|
+
|
|
242
|
+
### "Vercel API authentication failed"
|
|
243
|
+
- Get a new token from https://vercel.com/account/tokens
|
|
244
|
+
- Make sure it has deployment permissions
|
|
245
|
+
- Copy the entire token without spaces
|
|
246
|
+
|
|
247
|
+
### "MongoDB connection failed"
|
|
248
|
+
- **IP Whitelist**: Go to MongoDB Atlas → Network Access → Add IP `0.0.0.0/0` (allow all)
|
|
249
|
+
- **Format**: Should look like `mongodb+srv://user:password@cluster.mongodb.net/`
|
|
250
|
+
- **Permissions**: Database user needs read/write access
|
|
251
|
+
|
|
252
|
+
### "Deployment limit exceeded"
|
|
253
|
+
You've used all deployments for your license tier. To add more:
|
|
254
|
+
- Upgrade your license tier
|
|
255
|
+
- Or delete an existing deployment from the admin panel
|
|
256
|
+
|
|
257
|
+
### "Bot not responding on Telegram"
|
|
258
|
+
- Make sure bot token is correct
|
|
259
|
+
- Send `/start` to the bot
|
|
260
|
+
- Check bot status at https://dash.deno.com
|
|
261
|
+
|
|
262
|
+
### Still stuck?
|
|
263
|
+
Contact support with your deployment logs:
|
|
264
|
+
- 💬 Email: support@whatsnxt.in
|
|
265
|
+
- Include: License key (first 10 chars only), error message, timestamps
|
|
266
|
+
|
|
267
|
+
## 📦 What's Included
|
|
268
|
+
|
|
269
|
+
| Component | Technology | Purpose |
|
|
270
|
+
|-----------|-----------|---------|
|
|
271
|
+
| Frontend | Next.js | Public video platform |
|
|
272
|
+
| CMS/Admin | PayloadCMS | Content management |
|
|
273
|
+
| Bot | Grammy (Deno) | Telegram integration |
|
|
274
|
+
| Database | MongoDB | Data storage |
|
|
275
|
+
|
|
276
|
+
## 🔄 Updates
|
|
277
|
+
|
|
278
|
+
To update your deployment to the latest version:
|
|
279
|
+
```bash
|
|
280
|
+
npx curatedreels-deploy
|
|
281
|
+
```
|
|
167
282
|
|
|
168
|
-
|
|
169
|
-
- 💬 Support: support@curatedreels.com
|
|
170
|
-
- 🐛 Issues: https://github.com/curatedreels/deploy-cli/issues
|
|
283
|
+
Use the same project name and credentials. The CLI will update everything automatically.
|
|
171
284
|
|
|
172
|
-
## License
|
|
285
|
+
## 📄 License
|
|
173
286
|
|
|
174
287
|
Proprietary - © CuratedReels 2026
|
|
175
288
|
|
|
176
|
-
This
|
|
289
|
+
This is licensed software. You have the right to deploy and use the platform, but source code is not included.
|
package/dist/clients/deno.d.ts
CHANGED
|
@@ -8,6 +8,13 @@ export interface DenoDeploymentOptions {
|
|
|
8
8
|
entrypoint: string;
|
|
9
9
|
envVars: Record<string, string>;
|
|
10
10
|
}
|
|
11
|
+
export interface DenoDeploymentResult {
|
|
12
|
+
url: string;
|
|
13
|
+
projectId: string;
|
|
14
|
+
projectName: string;
|
|
15
|
+
settingsUrl: string;
|
|
16
|
+
envVarsToSet: Record<string, string>;
|
|
17
|
+
}
|
|
11
18
|
export declare class DenoClient {
|
|
12
19
|
private token;
|
|
13
20
|
private org?;
|
|
@@ -16,9 +23,9 @@ export declare class DenoClient {
|
|
|
16
23
|
/**
|
|
17
24
|
* Deploy a project to Deno Deploy using deployctl
|
|
18
25
|
*/
|
|
19
|
-
deploy(options: DenoDeploymentOptions): Promise<
|
|
26
|
+
deploy(options: DenoDeploymentOptions): Promise<DenoDeploymentResult>;
|
|
20
27
|
/**
|
|
21
|
-
* Deploy using deployctl CLI
|
|
28
|
+
* Deploy using deployctl CLI (without env vars - they must be set in dashboard)
|
|
22
29
|
*/
|
|
23
30
|
private deployWithCLI;
|
|
24
31
|
/**
|
|
@@ -33,10 +40,6 @@ export declare class DenoClient {
|
|
|
33
40
|
* Create a new project
|
|
34
41
|
*/
|
|
35
42
|
private createProject;
|
|
36
|
-
/**
|
|
37
|
-
* Set environment variables
|
|
38
|
-
*/
|
|
39
|
-
setEnvironmentVariables(projectId: string, envVars: Record<string, string>): Promise<void>;
|
|
40
43
|
/**
|
|
41
44
|
* Update project settings
|
|
42
45
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deno.d.ts","sourceRoot":"","sources":["../../src/clients/deno.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,MAAM,WAAW,qBAAqB;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED,qBAAa,UAAU;IAIf,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,GAAG,CAAC;IAJhB,OAAO,CAAC,OAAO,CAA8B;gBAGjC,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,YAAA;IAGxB;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"deno.d.ts","sourceRoot":"","sources":["../../src/clients/deno.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,MAAM,WAAW,qBAAqB;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED,MAAM,WAAW,oBAAoB;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACvC;AAED,qBAAa,UAAU;IAIf,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,GAAG,CAAC;IAJhB,OAAO,CAAC,OAAO,CAA8B;gBAGjC,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,YAAA;IAGxB;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAiB3E;;OAEG;YACW,aAAa;IAwB3B;;OAEG;YACW,aAAa;IAU3B;;OAEG;YACW,UAAU;IAcxB;;OAEG;YACW,aAAa;IAuB3B;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE;QAC7C,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,WAAW,CAAC,EAAE,MAAM,CAAA;KACvB,GAAG,OAAO,CAAC,IAAI,CAAC;IAejB;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAexD;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcrD;;OAEG;IACH,OAAO,CAAC,UAAU;CAMrB"}
|
package/dist/clients/deno.js
CHANGED
|
@@ -19,17 +19,21 @@ export class DenoClient {
|
|
|
19
19
|
* Deploy a project to Deno Deploy using deployctl
|
|
20
20
|
*/
|
|
21
21
|
async deploy(options) {
|
|
22
|
-
// Step 1: Ensure project exists
|
|
23
|
-
const projectName = await this.ensureProject(options.projectName);
|
|
24
|
-
// Step 2: Deploy using deployctl
|
|
25
|
-
// entrypoint should be a directory containing deno.json and src/main.ts
|
|
22
|
+
// Step 1: Ensure project exists and get project ID/name
|
|
23
|
+
const { name: projectName, id: projectId } = await this.ensureProject(options.projectName);
|
|
24
|
+
// Step 2: Deploy using deployctl (without env vars - they must be set in dashboard)
|
|
26
25
|
const url = await this.deployWithCLI(projectName, options.entrypoint);
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
// Return deployment info with manual setup instructions
|
|
27
|
+
return {
|
|
28
|
+
url,
|
|
29
|
+
projectId,
|
|
30
|
+
projectName,
|
|
31
|
+
settingsUrl: `https://dash.deno.com/projects/${projectName}/settings`,
|
|
32
|
+
envVarsToSet: options.envVars
|
|
33
|
+
};
|
|
30
34
|
}
|
|
31
35
|
/**
|
|
32
|
-
* Deploy using deployctl CLI
|
|
36
|
+
* Deploy using deployctl CLI (without env vars - they must be set in dashboard)
|
|
33
37
|
*/
|
|
34
38
|
async deployWithCLI(projectName, deployDir) {
|
|
35
39
|
const deployctlPath = `${process.env.HOME}/.deno/bin/deployctl`;
|
|
@@ -37,12 +41,10 @@ export class DenoClient {
|
|
|
37
41
|
const { stdout, stderr } = await execAsync(`cd "${deployDir}" && DENO_DEPLOY_TOKEN=${this.token} "${deployctlPath}" deploy --project=${projectName} --entrypoint=src/main.ts --prod 2>&1`, { timeout: 300000 } // 5 minute timeout
|
|
38
42
|
);
|
|
39
43
|
const output = stdout + stderr;
|
|
40
|
-
//
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
throw new Error(`Could not extract deployment URL: ${output.slice(0, 500)}`);
|
|
44
|
+
// Return production URL (stable, doesn't change with redeployments)
|
|
45
|
+
// Format: https://{projectName}.deno.dev
|
|
46
|
+
// This is better than the deployment-specific URL with random suffix
|
|
47
|
+
return `https://${projectName}.deno.dev`;
|
|
46
48
|
}
|
|
47
49
|
catch (error) {
|
|
48
50
|
// If deployctl not found, try installing it
|
|
@@ -58,10 +60,11 @@ export class DenoClient {
|
|
|
58
60
|
async ensureProject(name) {
|
|
59
61
|
try {
|
|
60
62
|
const project = await this.getProject(name);
|
|
61
|
-
return project.name
|
|
63
|
+
return { name: project.name, id: project.id };
|
|
62
64
|
}
|
|
63
65
|
catch {
|
|
64
|
-
|
|
66
|
+
const newProjectId = await this.createProject(name);
|
|
67
|
+
return { name, id: newProjectId };
|
|
65
68
|
}
|
|
66
69
|
}
|
|
67
70
|
/**
|
|
@@ -96,26 +99,7 @@ export class DenoClient {
|
|
|
96
99
|
throw new Error(`Failed to create project: ${error}`);
|
|
97
100
|
}
|
|
98
101
|
const project = await response.json();
|
|
99
|
-
return project.
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Set environment variables
|
|
103
|
-
*/
|
|
104
|
-
async setEnvironmentVariables(projectId, envVars) {
|
|
105
|
-
const url = `${this.baseUrl}/projects/${projectId}/env`;
|
|
106
|
-
const variables = Object.entries(envVars).map(([key, value]) => ({
|
|
107
|
-
key,
|
|
108
|
-
value
|
|
109
|
-
}));
|
|
110
|
-
const response = await fetch(url, {
|
|
111
|
-
method: 'PATCH',
|
|
112
|
-
headers: this.getHeaders(),
|
|
113
|
-
body: JSON.stringify({ variables })
|
|
114
|
-
});
|
|
115
|
-
if (!response.ok) {
|
|
116
|
-
const error = await response.text();
|
|
117
|
-
throw new Error(`Failed to set environment variables: ${error}`);
|
|
118
|
-
}
|
|
102
|
+
return project.id; // Return ID
|
|
119
103
|
}
|
|
120
104
|
/**
|
|
121
105
|
* Update project settings
|
package/dist/clients/deno.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deno.js","sourceRoot":"","sources":["../../src/clients/deno.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,YAAY,CAAA;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAEhC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"deno.js","sourceRoot":"","sources":["../../src/clients/deno.ts"],"names":[],"mappings":"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"}
|
package/dist/clients/vercel.d.ts
CHANGED
|
@@ -70,6 +70,10 @@ export declare class VercelClient {
|
|
|
70
70
|
* Add a custom domain to a project
|
|
71
71
|
*/
|
|
72
72
|
addDomain(projectName: string, domain: string): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Delete a project
|
|
75
|
+
*/
|
|
76
|
+
deleteProject(projectName: string): Promise<void>;
|
|
73
77
|
/**
|
|
74
78
|
* Build API URL with team parameter
|
|
75
79
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../src/clients/vercel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,MAAM,WAAW,uBAAuB;IACpC,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;CACjC;AAED,qBAAa,YAAY;IAIjB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM,CAAC;IAJnB,OAAO,CAAC,OAAO,CAA2B;gBAG9B,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,YAAA;IAG3B;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../src/clients/vercel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,MAAM,WAAW,uBAAuB;IACpC,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;CACjC;AAED,qBAAa,YAAY;IAIjB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM,CAAC;IAJnB,OAAO,CAAC,OAAO,CAA2B;gBAG9B,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,YAAA;IAG3B;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;IAe/D;;OAEG;YACW,aAAa;IAqD3B;;OAEG;YACW,aAAa;IAW3B;;OAEG;YACW,UAAU;IAcxB;;OAEG;YACW,aAAa;IA6C3B;;OAEG;YACW,YAAY;IAuC1B;;OAEG;YACW,gBAAgB;IAiD9B;;OAEG;YACW,iBAAiB;IA+B/B;;OAEG;IACG,uBAAuB,CACzB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC;IAShB;;OAEG;YACW,yBAAyB;IA+BvC;;OAEG;YACW,yBAAyB;IAwCvC;;OAEG;IACG,0BAA0B,CAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;YACW,mBAAmB;IAwBjC;;OAEG;IACG,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBnE;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBvD;;OAEG;IACH,OAAO,CAAC,QAAQ;IAQhB;;OAEG;IACH,OAAO,CAAC,UAAU;CAMrB"}
|