@revstackhq/cli 0.0.0-dev-20260227093823 → 0.0.0-dev-20260228060138
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/.turbo/turbo-build.log +49 -40
- package/CHANGELOG.md +22 -0
- package/dist/cli.js +631 -50
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.d.ts +0 -7
- package/dist/commands/init.js +452 -25
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.d.ts +0 -6
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts +0 -5
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/pull.d.ts +0 -7
- package/dist/commands/pull.js +120 -11
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/push.js +59 -14
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/templates/ai-agent-platform.d.ts +5 -0
- package/dist/commands/templates/ai-agent-platform.js +119 -0
- package/dist/commands/templates/ai-agent-platform.js.map +1 -0
- package/dist/commands/templates/b2b-saas.js +23 -10
- package/dist/commands/templates/b2b-saas.js.map +1 -1
- package/dist/commands/templates/developer-tools.d.ts +5 -0
- package/dist/commands/templates/developer-tools.js +131 -0
- package/dist/commands/templates/developer-tools.js.map +1 -0
- package/dist/commands/templates/ecommerce-platform.d.ts +5 -0
- package/dist/commands/templates/ecommerce-platform.js +144 -0
- package/dist/commands/templates/ecommerce-platform.js.map +1 -0
- package/dist/commands/templates/index.js +446 -24
- package/dist/commands/templates/index.js.map +1 -1
- package/dist/commands/templates/starter.d.ts +1 -0
- package/dist/commands/templates/starter.js +13 -8
- package/dist/commands/templates/starter.js.map +1 -1
- package/dist/commands/templates/usage-based.js +27 -5
- package/dist/commands/templates/usage-based.js.map +1 -1
- package/dist/utils/auth.d.ts +0 -5
- package/dist/utils/auth.js.map +1 -1
- package/dist/utils/config-loader.d.ts +0 -6
- package/dist/utils/config-loader.js +4 -0
- package/dist/utils/config-loader.js.map +1 -1
- package/package.json +2 -2
- package/src/commands/init.ts +6 -8
- package/src/commands/login.ts +0 -6
- package/src/commands/logout.ts +0 -5
- package/src/commands/pull.ts +148 -60
- package/src/commands/push.ts +67 -16
- package/src/commands/templates/ai-agent-platform.ts +114 -0
- package/src/commands/templates/b2b-saas.ts +23 -10
- package/src/commands/templates/developer-tools.ts +126 -0
- package/src/commands/templates/ecommerce-platform.ts +139 -0
- package/src/commands/templates/index.ts +6 -0
- package/src/commands/templates/starter.ts +14 -8
- package/src/commands/templates/usage-based.ts +27 -5
- package/src/utils/auth.ts +0 -6
- package/src/utils/config-loader.ts +6 -7
- package/tests/integration/pull.test.ts +6 -0
- package/tests/integration/push.test.ts +3 -0
package/dist/commands/init.js
CHANGED
|
@@ -26,9 +26,9 @@ export const addons = {
|
|
|
26
26
|
name: "5 Extra Seats",
|
|
27
27
|
description: "Add 5 more team members to your workspace.",
|
|
28
28
|
type: "recurring",
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
amount: 1500,
|
|
30
|
+
currency: "USD",
|
|
31
|
+
billing_interval: "monthly",
|
|
32
32
|
features: {
|
|
33
33
|
seats: { value_limit: 5, type: "increment", is_hard_limit: false },
|
|
34
34
|
}
|
|
@@ -37,9 +37,9 @@ export const addons = {
|
|
|
37
37
|
name: "Priority Support",
|
|
38
38
|
description: "24/7 Slack channel support.",
|
|
39
39
|
type: "recurring",
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
amount: 9900,
|
|
41
|
+
currency: "USD",
|
|
42
|
+
billing_interval: "monthly",
|
|
43
43
|
features: {
|
|
44
44
|
priority_support: { has_access: true },
|
|
45
45
|
}
|
|
@@ -65,25 +65,30 @@ export const plans = {
|
|
|
65
65
|
is_default: false,
|
|
66
66
|
is_public: true,
|
|
67
67
|
type: "paid",
|
|
68
|
-
available_addons: ["extra_seats", "vip_support"],
|
|
69
68
|
prices: [
|
|
70
|
-
{ amount: 2900, currency: "USD", billing_interval: "monthly", trial_period_days: 14 }
|
|
69
|
+
{ amount: 2900, currency: "USD", billing_interval: "monthly", trial_period_days: 14, available_addons: ["extra_seats", "vip_support"] }
|
|
71
70
|
],
|
|
72
71
|
features: {
|
|
73
72
|
seats: { value_limit: 5, is_hard_limit: true },
|
|
74
73
|
},
|
|
75
74
|
}),
|
|
76
75
|
};
|
|
76
|
+
`,
|
|
77
|
+
coupons: `import type { DiscountDef } from "@revstackhq/core";
|
|
78
|
+
|
|
79
|
+
export const coupons: DiscountDef[] = [];
|
|
77
80
|
`,
|
|
78
81
|
index: `import { defineConfig } from "@revstackhq/core";
|
|
79
82
|
import { features } from "./features";
|
|
80
83
|
import { addons } from "./addons";
|
|
81
84
|
import { plans } from "./plans";
|
|
85
|
+
import { coupons } from "./coupons";
|
|
82
86
|
|
|
83
87
|
export default defineConfig({
|
|
84
88
|
features,
|
|
85
89
|
addons,
|
|
86
90
|
plans,
|
|
91
|
+
coupons,
|
|
87
92
|
});
|
|
88
93
|
`,
|
|
89
94
|
root: `import config from "./revstack";
|
|
@@ -110,9 +115,9 @@ export const addons = {
|
|
|
110
115
|
name: "10 Extra Users",
|
|
111
116
|
description: "Add 10 more active users to your workspace.",
|
|
112
117
|
type: "recurring",
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
118
|
+
amount: 5000,
|
|
119
|
+
currency: "USD",
|
|
120
|
+
billing_interval: "monthly",
|
|
116
121
|
features: {
|
|
117
122
|
active_users: { value_limit: 10, type: "increment", is_hard_limit: true },
|
|
118
123
|
}
|
|
@@ -121,12 +126,25 @@ export const addons = {
|
|
|
121
126
|
name: "Dedicated Support",
|
|
122
127
|
description: "Enterprise SLA with 1-hour response time.",
|
|
123
128
|
type: "recurring",
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
129
|
+
amount: 49900,
|
|
130
|
+
currency: "USD",
|
|
131
|
+
billing_interval: "monthly",
|
|
127
132
|
features: {}
|
|
128
133
|
})
|
|
129
134
|
};
|
|
135
|
+
`,
|
|
136
|
+
coupons: `import type { DiscountDef } from "@revstackhq/core";
|
|
137
|
+
|
|
138
|
+
export const coupons: DiscountDef[] = [
|
|
139
|
+
{
|
|
140
|
+
code: "ENTERPRISE_B2B",
|
|
141
|
+
name: "Annual Contract Rebate",
|
|
142
|
+
type: "amount",
|
|
143
|
+
value: 50000,
|
|
144
|
+
duration: "once",
|
|
145
|
+
applies_to_plans: ["enterprise"]
|
|
146
|
+
}
|
|
147
|
+
];
|
|
130
148
|
`,
|
|
131
149
|
plans: `import { definePlan } from "@revstackhq/core";
|
|
132
150
|
import { features } from "./features";
|
|
@@ -146,9 +164,8 @@ export const plans = {
|
|
|
146
164
|
is_default: false,
|
|
147
165
|
is_public: true,
|
|
148
166
|
type: "paid",
|
|
149
|
-
available_addons: ["extra_users"],
|
|
150
167
|
prices: [
|
|
151
|
-
{ amount: 9900, currency: "USD", billing_interval: "monthly" }
|
|
168
|
+
{ amount: 9900, currency: "USD", billing_interval: "monthly", available_addons: ["extra_users"] }
|
|
152
169
|
],
|
|
153
170
|
features: {
|
|
154
171
|
active_users: { value_limit: 10, is_hard_limit: true },
|
|
@@ -162,9 +179,8 @@ export const plans = {
|
|
|
162
179
|
is_default: false,
|
|
163
180
|
is_public: true,
|
|
164
181
|
type: "paid",
|
|
165
|
-
available_addons: ["extra_users", "dedicated_support"],
|
|
166
182
|
prices: [
|
|
167
|
-
{ amount: 49900, currency: "USD", billing_interval: "monthly" }
|
|
183
|
+
{ amount: 49900, currency: "USD", billing_interval: "monthly", available_addons: ["extra_users", "dedicated_support"] }
|
|
168
184
|
],
|
|
169
185
|
features: {
|
|
170
186
|
active_users: { value_limit: 100, is_hard_limit: false },
|
|
@@ -178,11 +194,13 @@ export const plans = {
|
|
|
178
194
|
import { features } from "./features";
|
|
179
195
|
import { addons } from "./addons";
|
|
180
196
|
import { plans } from "./plans";
|
|
197
|
+
import { coupons } from "./coupons";
|
|
181
198
|
|
|
182
199
|
export default defineConfig({
|
|
183
200
|
features,
|
|
184
201
|
addons,
|
|
185
202
|
plans,
|
|
203
|
+
coupons,
|
|
186
204
|
});
|
|
187
205
|
`,
|
|
188
206
|
root: `import config from "./revstack";
|
|
@@ -208,12 +226,24 @@ export const addons = {
|
|
|
208
226
|
name: "Premium Support",
|
|
209
227
|
description: "24/7 dedicated support.",
|
|
210
228
|
type: "recurring",
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
229
|
+
amount: 20000,
|
|
230
|
+
currency: "USD",
|
|
231
|
+
billing_interval: "monthly",
|
|
214
232
|
features: {}
|
|
215
233
|
})
|
|
216
234
|
};
|
|
235
|
+
`,
|
|
236
|
+
coupons: `import type { DiscountDef } from "@revstackhq/core";
|
|
237
|
+
|
|
238
|
+
export const coupons: DiscountDef[] = [
|
|
239
|
+
{
|
|
240
|
+
code: "STARTUP_ACCELERATOR",
|
|
241
|
+
name: "Startup Program Credits",
|
|
242
|
+
type: "amount",
|
|
243
|
+
value: 500000, // $5,000 credit
|
|
244
|
+
duration: "forever",
|
|
245
|
+
}
|
|
246
|
+
];
|
|
217
247
|
`,
|
|
218
248
|
plans: `import { definePlan } from "@revstackhq/core";
|
|
219
249
|
import { features } from "./features";
|
|
@@ -233,9 +263,17 @@ export const plans = {
|
|
|
233
263
|
is_default: false,
|
|
234
264
|
is_public: true,
|
|
235
265
|
type: "paid",
|
|
236
|
-
available_addons: ["premium_support"],
|
|
237
266
|
prices: [
|
|
238
|
-
{
|
|
267
|
+
{
|
|
268
|
+
amount: 0,
|
|
269
|
+
currency: "USD",
|
|
270
|
+
billing_interval: "monthly",
|
|
271
|
+
available_addons: ["premium_support"],
|
|
272
|
+
overage_configuration: {
|
|
273
|
+
api_requests: { overage_amount: 15, overage_unit: 1000 }, // $0.15 per 1k extra requests
|
|
274
|
+
storage_gb: { overage_amount: 50, overage_unit: 1 }, // $0.50 per extra GB
|
|
275
|
+
}
|
|
276
|
+
} // Base platform fee
|
|
239
277
|
],
|
|
240
278
|
features: {
|
|
241
279
|
api_requests: { value_limit: 10000, is_hard_limit: false, reset_period: "monthly" }, // 10k free requests per month
|
|
@@ -248,11 +286,392 @@ export const plans = {
|
|
|
248
286
|
import { features } from "./features";
|
|
249
287
|
import { addons } from "./addons";
|
|
250
288
|
import { plans } from "./plans";
|
|
289
|
+
import { coupons } from "./coupons";
|
|
290
|
+
|
|
291
|
+
export default defineConfig({
|
|
292
|
+
features,
|
|
293
|
+
addons,
|
|
294
|
+
plans,
|
|
295
|
+
coupons,
|
|
296
|
+
});
|
|
297
|
+
`,
|
|
298
|
+
root: `import config from "./revstack";
|
|
299
|
+
|
|
300
|
+
export default config;
|
|
301
|
+
`
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
// src/commands/templates/ecommerce-platform.ts
|
|
305
|
+
var ecommercePlatform = {
|
|
306
|
+
features: `import { defineFeature } from "@revstackhq/core";
|
|
307
|
+
|
|
308
|
+
export const features = {
|
|
309
|
+
orders: defineFeature({ name: "Monthly Orders", type: "metered", unit_type: "count" }),
|
|
310
|
+
storefronts: defineFeature({ name: "Storefronts", type: "static", unit_type: "count" }),
|
|
311
|
+
advanced_analytics: defineFeature({ name: "Advanced Analytics", type: "boolean", unit_type: "custom" }),
|
|
312
|
+
};
|
|
313
|
+
`,
|
|
314
|
+
addons: `import { defineAddon } from "@revstackhq/core";
|
|
315
|
+
import { features } from "./features";
|
|
316
|
+
|
|
317
|
+
export const addons = {
|
|
318
|
+
extra_storefront: defineAddon<typeof features>({
|
|
319
|
+
name: "Additional Storefront",
|
|
320
|
+
description: "Launch a new brand under the same account.",
|
|
321
|
+
type: "recurring",
|
|
322
|
+
amount: 5000,
|
|
323
|
+
currency: "USD",
|
|
324
|
+
billing_interval: "monthly",
|
|
325
|
+
features: {
|
|
326
|
+
storefronts: { value_limit: 1, type: "increment", is_hard_limit: true },
|
|
327
|
+
}
|
|
328
|
+
}),
|
|
329
|
+
custom_domain_ssl: defineAddon<typeof features>({
|
|
330
|
+
name: "Custom Domain & SSL",
|
|
331
|
+
description: "Secure your storefront with a custom domain.",
|
|
332
|
+
type: "recurring",
|
|
333
|
+
amount: 1500,
|
|
334
|
+
currency: "USD",
|
|
335
|
+
billing_interval: "monthly",
|
|
336
|
+
features: {}
|
|
337
|
+
})
|
|
338
|
+
};
|
|
339
|
+
`,
|
|
340
|
+
plans: `import { definePlan } from "@revstackhq/core";
|
|
341
|
+
import { features } from "./features";
|
|
342
|
+
|
|
343
|
+
export const plans = {
|
|
344
|
+
default: definePlan<typeof features>({
|
|
345
|
+
name: "Default Sandbox",
|
|
346
|
+
description: "Test your store safely before going live.",
|
|
347
|
+
is_default: true,
|
|
348
|
+
is_public: false,
|
|
349
|
+
type: "free",
|
|
350
|
+
features: {},
|
|
351
|
+
}),
|
|
352
|
+
basic: definePlan<typeof features>({
|
|
353
|
+
name: "Basic Commerce",
|
|
354
|
+
description: "Everything you need to sell online.",
|
|
355
|
+
is_default: false,
|
|
356
|
+
is_public: true,
|
|
357
|
+
type: "paid",
|
|
358
|
+
prices: [
|
|
359
|
+
{
|
|
360
|
+
amount: 2900,
|
|
361
|
+
currency: "USD",
|
|
362
|
+
billing_interval: "monthly",
|
|
363
|
+
available_addons: ["custom_domain_ssl"],
|
|
364
|
+
overage_configuration: {
|
|
365
|
+
orders: { overage_amount: 50, overage_unit: 100 } // $0.50 per 100 extra orders
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
],
|
|
369
|
+
features: {
|
|
370
|
+
orders: { value_limit: 500, is_hard_limit: false, reset_period: "monthly" },
|
|
371
|
+
storefronts: { value_limit: 1, is_hard_limit: true },
|
|
372
|
+
advanced_analytics: { value_bool: false },
|
|
373
|
+
},
|
|
374
|
+
}),
|
|
375
|
+
pro: definePlan<typeof features>({
|
|
376
|
+
name: "Pro Seller",
|
|
377
|
+
description: "For scaling businesses.",
|
|
378
|
+
is_default: false,
|
|
379
|
+
is_public: true,
|
|
380
|
+
type: "paid",
|
|
381
|
+
prices: [
|
|
382
|
+
{
|
|
383
|
+
amount: 19900,
|
|
384
|
+
currency: "USD",
|
|
385
|
+
billing_interval: "monthly",
|
|
386
|
+
available_addons: ["extra_storefront", "custom_domain_ssl"],
|
|
387
|
+
overage_configuration: {
|
|
388
|
+
orders: { overage_amount: 30, overage_unit: 100 } // $0.30 per 100 extra orders
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
],
|
|
392
|
+
features: {
|
|
393
|
+
orders: { value_limit: 5000, is_hard_limit: false, reset_period: "monthly" },
|
|
394
|
+
storefronts: { value_limit: 2, is_hard_limit: true },
|
|
395
|
+
advanced_analytics: { value_bool: true },
|
|
396
|
+
},
|
|
397
|
+
}),
|
|
398
|
+
};
|
|
399
|
+
`,
|
|
400
|
+
coupons: `import type { DiscountDef } from "@revstackhq/core";
|
|
401
|
+
|
|
402
|
+
export const coupons: DiscountDef[] = [
|
|
403
|
+
{
|
|
404
|
+
code: "BFCM_PROMO",
|
|
405
|
+
name: "Black Friday Cyber Monday 20%",
|
|
406
|
+
type: "percent",
|
|
407
|
+
value: 20,
|
|
408
|
+
duration: "repeating",
|
|
409
|
+
duration_in_months: 6,
|
|
410
|
+
expires_at: "2024-11-29T00:00:00Z", // Ephemeral timestamp
|
|
411
|
+
max_redemptions: 5000
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
code: "FIRST_MONTH_FREE",
|
|
415
|
+
name: "New Store Launch",
|
|
416
|
+
type: "percent",
|
|
417
|
+
value: 100,
|
|
418
|
+
duration: "repeating",
|
|
419
|
+
duration_in_months: 1,
|
|
420
|
+
applies_to_plans: ["basic"]
|
|
421
|
+
}
|
|
422
|
+
];
|
|
423
|
+
`,
|
|
424
|
+
index: `import { defineConfig } from "@revstackhq/core";
|
|
425
|
+
import { features } from "./features";
|
|
426
|
+
import { addons } from "./addons";
|
|
427
|
+
import { plans } from "./plans";
|
|
428
|
+
import { coupons } from "./coupons";
|
|
429
|
+
|
|
430
|
+
export default defineConfig({
|
|
431
|
+
features,
|
|
432
|
+
addons,
|
|
433
|
+
plans,
|
|
434
|
+
coupons,
|
|
435
|
+
});
|
|
436
|
+
`,
|
|
437
|
+
root: `import config from "./revstack";
|
|
438
|
+
|
|
439
|
+
export default config;
|
|
440
|
+
`
|
|
441
|
+
};
|
|
442
|
+
|
|
443
|
+
// src/commands/templates/developer-tools.ts
|
|
444
|
+
var developerTools = {
|
|
445
|
+
features: `import { defineFeature } from "@revstackhq/core";
|
|
446
|
+
|
|
447
|
+
export const features = {
|
|
448
|
+
bandwidth_gb: defineFeature({ name: "Bandwidth (GB)", type: "metered", unit_type: "custom" }),
|
|
449
|
+
compute_hours: defineFeature({ name: "Compute (GB-Hours)", type: "metered", unit_type: "custom" }),
|
|
450
|
+
serverless_invokes: defineFeature({ name: "Serverless Invocations", type: "metered", unit_type: "count" }),
|
|
451
|
+
sso_auth: defineFeature({ name: "Enterprise SSO", type: "boolean", unit_type: "custom" })
|
|
452
|
+
};
|
|
453
|
+
`,
|
|
454
|
+
addons: `import { defineAddon } from "@revstackhq/core";
|
|
455
|
+
import { features } from "./features";
|
|
456
|
+
|
|
457
|
+
export const addons = {
|
|
458
|
+
dedicated_ipv4: defineAddon<typeof features>({
|
|
459
|
+
name: "Dedicated IPv4 Address",
|
|
460
|
+
description: "Assign a static IP to your deployments.",
|
|
461
|
+
type: "recurring",
|
|
462
|
+
amount: 500,
|
|
463
|
+
currency: "USD",
|
|
464
|
+
billing_interval: "monthly",
|
|
465
|
+
features: {}
|
|
466
|
+
}),
|
|
467
|
+
premium_sla: defineAddon<typeof features>({
|
|
468
|
+
name: "Premium Escalation SLA",
|
|
469
|
+
description: "Direct engineering support with 30-min response time.",
|
|
470
|
+
type: "recurring",
|
|
471
|
+
amount: 150000,
|
|
472
|
+
currency: "USD",
|
|
473
|
+
billing_interval: "monthly",
|
|
474
|
+
features: {}
|
|
475
|
+
})
|
|
476
|
+
};
|
|
477
|
+
`,
|
|
478
|
+
plans: `import { definePlan } from "@revstackhq/core";
|
|
479
|
+
import { features } from "./features";
|
|
480
|
+
|
|
481
|
+
export const plans = {
|
|
482
|
+
default: definePlan<typeof features>({
|
|
483
|
+
name: "Hobby",
|
|
484
|
+
description: "For personal or non-commercial projects.",
|
|
485
|
+
is_default: true,
|
|
486
|
+
is_public: true,
|
|
487
|
+
type: "free",
|
|
488
|
+
features: {
|
|
489
|
+
bandwidth_gb: { value_limit: 100, is_hard_limit: true, reset_period: "monthly" },
|
|
490
|
+
compute_hours: { value_limit: 100, is_hard_limit: true, reset_period: "monthly" },
|
|
491
|
+
serverless_invokes: { value_limit: 100000, is_hard_limit: true, reset_period: "monthly" },
|
|
492
|
+
sso_auth: { value_bool: false }
|
|
493
|
+
},
|
|
494
|
+
}),
|
|
495
|
+
pro: definePlan<typeof features>({
|
|
496
|
+
name: "Pro",
|
|
497
|
+
description: "For production apps and growing teams.",
|
|
498
|
+
is_default: false,
|
|
499
|
+
is_public: true,
|
|
500
|
+
type: "paid",
|
|
501
|
+
prices: [
|
|
502
|
+
{
|
|
503
|
+
amount: 2000,
|
|
504
|
+
currency: "USD",
|
|
505
|
+
billing_interval: "monthly",
|
|
506
|
+
available_addons: ["dedicated_ipv4"],
|
|
507
|
+
overage_configuration: {
|
|
508
|
+
bandwidth_gb: { overage_amount: 40, overage_unit: 100 }, // $0.40 per 100GB extra
|
|
509
|
+
compute_hours: { overage_amount: 2, overage_unit: 1 }, // $0.02 per extra GB hr
|
|
510
|
+
serverless_invokes: { overage_amount: 50, overage_unit: 1000000 } // $0.50 per 1M invokes
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
],
|
|
514
|
+
features: {
|
|
515
|
+
bandwidth_gb: { value_limit: 1000, is_hard_limit: false, reset_period: "monthly" },
|
|
516
|
+
compute_hours: { value_limit: 1000, is_hard_limit: false, reset_period: "monthly" },
|
|
517
|
+
serverless_invokes: { value_limit: 5000000, is_hard_limit: false, reset_period: "monthly" },
|
|
518
|
+
sso_auth: { value_bool: false }
|
|
519
|
+
},
|
|
520
|
+
}),
|
|
521
|
+
enterprise: definePlan<typeof features>({
|
|
522
|
+
name: "Enterprise",
|
|
523
|
+
description: "Custom infrastructure and legal compliance.",
|
|
524
|
+
is_default: false,
|
|
525
|
+
is_public: true,
|
|
526
|
+
type: "custom",
|
|
527
|
+
prices: [],
|
|
528
|
+
features: {
|
|
529
|
+
bandwidth_gb: { value_limit: 50000, is_hard_limit: false, reset_period: "monthly" },
|
|
530
|
+
compute_hours: { value_limit: 10000, is_hard_limit: false, reset_period: "monthly" },
|
|
531
|
+
serverless_invokes: { value_limit: 100000000, is_hard_limit: false, reset_period: "monthly" },
|
|
532
|
+
sso_auth: { value_bool: true }
|
|
533
|
+
},
|
|
534
|
+
}),
|
|
535
|
+
};
|
|
536
|
+
`,
|
|
537
|
+
coupons: `import type { DiscountDef } from "@revstackhq/core";
|
|
538
|
+
|
|
539
|
+
export const coupons: DiscountDef[] = [
|
|
540
|
+
{
|
|
541
|
+
code: "YCOMBINATOR",
|
|
542
|
+
name: "YC Startup Accelerator Credit",
|
|
543
|
+
type: "amount",
|
|
544
|
+
value: 1000000, // $10,000 credit
|
|
545
|
+
duration: "forever",
|
|
546
|
+
applies_to_plans: ["pro", "enterprise"]
|
|
547
|
+
}
|
|
548
|
+
];
|
|
549
|
+
`,
|
|
550
|
+
index: `import { defineConfig } from "@revstackhq/core";
|
|
551
|
+
import { features } from "./features";
|
|
552
|
+
import { addons } from "./addons";
|
|
553
|
+
import { plans } from "./plans";
|
|
554
|
+
import { coupons } from "./coupons";
|
|
251
555
|
|
|
252
556
|
export default defineConfig({
|
|
253
557
|
features,
|
|
254
558
|
addons,
|
|
255
559
|
plans,
|
|
560
|
+
coupons,
|
|
561
|
+
});
|
|
562
|
+
`,
|
|
563
|
+
root: `import config from "./revstack";
|
|
564
|
+
|
|
565
|
+
export default config;
|
|
566
|
+
`
|
|
567
|
+
};
|
|
568
|
+
|
|
569
|
+
// src/commands/templates/ai-agent-platform.ts
|
|
570
|
+
var aiAgentPlatform = {
|
|
571
|
+
features: `import { defineFeature } from "@revstackhq/core";
|
|
572
|
+
|
|
573
|
+
export const features = {
|
|
574
|
+
llm_tokens: defineFeature({ name: "LLM Tokens (Input+Output)", type: "metered", unit_type: "count" }),
|
|
575
|
+
active_agents: defineFeature({ name: "Concurrent Agents", type: "static", unit_type: "count" }),
|
|
576
|
+
vector_storage_gb: defineFeature({ name: "Vector Database (GB)", type: "metered", unit_type: "custom" }),
|
|
577
|
+
custom_fine_tuning: defineFeature({ name: "Model Fine-Tuning", type: "boolean", unit_type: "custom" })
|
|
578
|
+
};
|
|
579
|
+
`,
|
|
580
|
+
addons: `import { defineAddon } from "@revstackhq/core";
|
|
581
|
+
import { features } from "./features";
|
|
582
|
+
|
|
583
|
+
export const addons = {
|
|
584
|
+
extra_vector_storage: defineAddon<typeof features>({
|
|
585
|
+
name: "10GB Vector Storage Block",
|
|
586
|
+
description: "Retain long-term memory for your AI agents.",
|
|
587
|
+
type: "recurring",
|
|
588
|
+
amount: 1000,
|
|
589
|
+
currency: "USD",
|
|
590
|
+
billing_interval: "monthly",
|
|
591
|
+
features: {
|
|
592
|
+
vector_storage_gb: { value_limit: 10, type: "increment", is_hard_limit: false }
|
|
593
|
+
}
|
|
594
|
+
}),
|
|
595
|
+
fine_tuning_job: defineAddon<typeof features>({
|
|
596
|
+
name: "Fine-Tuning Job Runner",
|
|
597
|
+
description: "Pay once to run a distributed model fine-tuning job on your dataset.",
|
|
598
|
+
type: "one_time",
|
|
599
|
+
amount: 25000,
|
|
600
|
+
currency: "USD",
|
|
601
|
+
features: {
|
|
602
|
+
custom_fine_tuning: { has_access: true }
|
|
603
|
+
}
|
|
604
|
+
})
|
|
605
|
+
};
|
|
606
|
+
`,
|
|
607
|
+
plans: `import { definePlan } from "@revstackhq/core";
|
|
608
|
+
import { features } from "./features";
|
|
609
|
+
|
|
610
|
+
export const plans = {
|
|
611
|
+
default: definePlan<typeof features>({
|
|
612
|
+
name: "Free Preview",
|
|
613
|
+
description: "Trial sandbox using shared models.",
|
|
614
|
+
is_default: true,
|
|
615
|
+
is_public: true,
|
|
616
|
+
type: "free",
|
|
617
|
+
features: {
|
|
618
|
+
llm_tokens: { value_limit: 100000, is_hard_limit: true, reset_period: "monthly" },
|
|
619
|
+
active_agents: { value_limit: 1, is_hard_limit: true },
|
|
620
|
+
vector_storage_gb: { value_limit: 0, is_hard_limit: true, reset_period: "never" },
|
|
621
|
+
custom_fine_tuning: { value_bool: false }
|
|
622
|
+
},
|
|
623
|
+
}),
|
|
624
|
+
builder: definePlan<typeof features>({
|
|
625
|
+
name: "AI Builder",
|
|
626
|
+
description: "High concurrency and dedicated model endpoints.",
|
|
627
|
+
is_default: false,
|
|
628
|
+
is_public: true,
|
|
629
|
+
type: "paid",
|
|
630
|
+
prices: [
|
|
631
|
+
{
|
|
632
|
+
amount: 4900,
|
|
633
|
+
currency: "USD",
|
|
634
|
+
billing_interval: "monthly",
|
|
635
|
+
available_addons: ["extra_vector_storage", "fine_tuning_job"],
|
|
636
|
+
overage_configuration: {
|
|
637
|
+
llm_tokens: { overage_amount: 15, overage_unit: 1000000 } // $0.15 per 1M tokens
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
],
|
|
641
|
+
features: {
|
|
642
|
+
llm_tokens: { value_limit: 10000000, is_hard_limit: false, reset_period: "monthly" }, // 10M free tokens included
|
|
643
|
+
active_agents: { value_limit: 10, is_hard_limit: true },
|
|
644
|
+
vector_storage_gb: { value_limit: 5, is_hard_limit: true, reset_period: "never" }, // Hard limit until they buy the addon
|
|
645
|
+
custom_fine_tuning: { value_bool: false } // Only unlocked via the one-off addon
|
|
646
|
+
},
|
|
647
|
+
}),
|
|
648
|
+
};
|
|
649
|
+
`,
|
|
650
|
+
coupons: `import type { DiscountDef } from "@revstackhq/core";
|
|
651
|
+
|
|
652
|
+
export const coupons: DiscountDef[] = [
|
|
653
|
+
{
|
|
654
|
+
code: "BETA_TESTER",
|
|
655
|
+
name: "Early Beta Access Discount",
|
|
656
|
+
type: "percent",
|
|
657
|
+
value: 50,
|
|
658
|
+
duration: "repeating",
|
|
659
|
+
duration_in_months: 12,
|
|
660
|
+
max_redemptions: 100
|
|
661
|
+
}
|
|
662
|
+
];
|
|
663
|
+
`,
|
|
664
|
+
index: `import { defineConfig } from "@revstackhq/core";
|
|
665
|
+
import { features } from "./features";
|
|
666
|
+
import { addons } from "./addons";
|
|
667
|
+
import { plans } from "./plans";
|
|
668
|
+
import { coupons } from "./coupons";
|
|
669
|
+
|
|
670
|
+
export default defineConfig({
|
|
671
|
+
features,
|
|
672
|
+
addons,
|
|
673
|
+
plans,
|
|
674
|
+
coupons,
|
|
256
675
|
});
|
|
257
676
|
`,
|
|
258
677
|
root: `import config from "./revstack";
|
|
@@ -265,13 +684,16 @@ export default config;
|
|
|
265
684
|
var TEMPLATES = {
|
|
266
685
|
starter,
|
|
267
686
|
"b2b-saas": b2bSaas,
|
|
268
|
-
"usage-based": usageBased
|
|
687
|
+
"usage-based": usageBased,
|
|
688
|
+
"ecommerce-platform": ecommercePlatform,
|
|
689
|
+
"developer-tools": developerTools,
|
|
690
|
+
"ai-agent-platform": aiAgentPlatform
|
|
269
691
|
};
|
|
270
692
|
|
|
271
693
|
// src/commands/init.ts
|
|
272
694
|
var initCommand = new Command("init").description("Scaffold a new revstack.config.ts in the current directory").option(
|
|
273
695
|
"-t, --template <name>",
|
|
274
|
-
|
|
696
|
+
`Choose a starting template (${Object.keys(TEMPLATES).join(", ")})`,
|
|
275
697
|
"starter"
|
|
276
698
|
).action(async (options) => {
|
|
277
699
|
const templateName = options.template || "starter";
|
|
@@ -308,6 +730,11 @@ var initCommand = new Command("init").description("Scaffold a new revstack.confi
|
|
|
308
730
|
template.addons,
|
|
309
731
|
"utf-8"
|
|
310
732
|
);
|
|
733
|
+
fs.writeFileSync(
|
|
734
|
+
path.resolve(revstackDir, "coupons.ts"),
|
|
735
|
+
template.coupons,
|
|
736
|
+
"utf-8"
|
|
737
|
+
);
|
|
311
738
|
fs.writeFileSync(
|
|
312
739
|
path.resolve(revstackDir, "plans.ts"),
|
|
313
740
|
template.plans,
|