@revstackhq/cli 0.0.0-dev-20260227103607 → 0.0.0-dev-20260228062053

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/.turbo/turbo-build.log +51 -42
  2. package/CHANGELOG.md +18 -0
  3. package/dist/cli.js +622 -49
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/init.d.ts +0 -7
  6. package/dist/commands/init.js +443 -24
  7. package/dist/commands/init.js.map +1 -1
  8. package/dist/commands/login.d.ts +0 -6
  9. package/dist/commands/login.js.map +1 -1
  10. package/dist/commands/logout.d.ts +0 -5
  11. package/dist/commands/logout.js.map +1 -1
  12. package/dist/commands/pull.d.ts +0 -7
  13. package/dist/commands/pull.js +120 -11
  14. package/dist/commands/pull.js.map +1 -1
  15. package/dist/commands/push.js +59 -14
  16. package/dist/commands/push.js.map +1 -1
  17. package/dist/commands/templates/ai-agent-platform.d.ts +5 -0
  18. package/dist/commands/templates/ai-agent-platform.js +119 -0
  19. package/dist/commands/templates/ai-agent-platform.js.map +1 -0
  20. package/dist/commands/templates/b2b-saas.js +23 -10
  21. package/dist/commands/templates/b2b-saas.js.map +1 -1
  22. package/dist/commands/templates/developer-tools.d.ts +5 -0
  23. package/dist/commands/templates/developer-tools.js +131 -0
  24. package/dist/commands/templates/developer-tools.js.map +1 -0
  25. package/dist/commands/templates/ecommerce-platform.d.ts +5 -0
  26. package/dist/commands/templates/ecommerce-platform.js +144 -0
  27. package/dist/commands/templates/ecommerce-platform.js.map +1 -0
  28. package/dist/commands/templates/index.js +437 -23
  29. package/dist/commands/templates/index.js.map +1 -1
  30. package/dist/commands/templates/starter.d.ts +1 -0
  31. package/dist/commands/templates/starter.js +13 -8
  32. package/dist/commands/templates/starter.js.map +1 -1
  33. package/dist/commands/templates/usage-based.js +18 -4
  34. package/dist/commands/templates/usage-based.js.map +1 -1
  35. package/dist/utils/auth.d.ts +0 -5
  36. package/dist/utils/auth.js.map +1 -1
  37. package/dist/utils/config-loader.d.ts +0 -6
  38. package/dist/utils/config-loader.js +4 -0
  39. package/dist/utils/config-loader.js.map +1 -1
  40. package/package.json +2 -2
  41. package/src/commands/init.ts +6 -8
  42. package/src/commands/login.ts +0 -6
  43. package/src/commands/logout.ts +0 -5
  44. package/src/commands/pull.ts +148 -60
  45. package/src/commands/push.ts +67 -16
  46. package/src/commands/templates/ai-agent-platform.ts +114 -0
  47. package/src/commands/templates/b2b-saas.ts +23 -10
  48. package/src/commands/templates/developer-tools.ts +126 -0
  49. package/src/commands/templates/ecommerce-platform.ts +139 -0
  50. package/src/commands/templates/index.ts +6 -0
  51. package/src/commands/templates/starter.ts +14 -8
  52. package/src/commands/templates/usage-based.ts +18 -4
  53. package/src/utils/auth.ts +0 -6
  54. package/src/utils/config-loader.ts +6 -7
  55. package/tests/integration/pull.test.ts +6 -0
  56. package/tests/integration/push.test.ts +3 -0
@@ -17,9 +17,9 @@ export const addons = {
17
17
  name: "5 Extra Seats",
18
18
  description: "Add 5 more team members to your workspace.",
19
19
  type: "recurring",
20
- prices: [
21
- { amount: 1500, currency: "USD", billing_interval: "monthly" }
22
- ],
20
+ amount: 1500,
21
+ currency: "USD",
22
+ billing_interval: "monthly",
23
23
  features: {
24
24
  seats: { value_limit: 5, type: "increment", is_hard_limit: false },
25
25
  }
@@ -28,9 +28,9 @@ export const addons = {
28
28
  name: "Priority Support",
29
29
  description: "24/7 Slack channel support.",
30
30
  type: "recurring",
31
- prices: [
32
- { amount: 9900, currency: "USD", billing_interval: "monthly" }
33
- ],
31
+ amount: 9900,
32
+ currency: "USD",
33
+ billing_interval: "monthly",
34
34
  features: {
35
35
  priority_support: { has_access: true },
36
36
  }
@@ -56,25 +56,30 @@ export const plans = {
56
56
  is_default: false,
57
57
  is_public: true,
58
58
  type: "paid",
59
- available_addons: ["extra_seats", "vip_support"],
60
59
  prices: [
61
- { amount: 2900, currency: "USD", billing_interval: "monthly", trial_period_days: 14 }
60
+ { amount: 2900, currency: "USD", billing_interval: "monthly", trial_period_days: 14, available_addons: ["extra_seats", "vip_support"] }
62
61
  ],
63
62
  features: {
64
63
  seats: { value_limit: 5, is_hard_limit: true },
65
64
  },
66
65
  }),
67
66
  };
67
+ `,
68
+ coupons: `import type { DiscountDef } from "@revstackhq/core";
69
+
70
+ export const coupons: DiscountDef[] = [];
68
71
  `,
69
72
  index: `import { defineConfig } from "@revstackhq/core";
70
73
  import { features } from "./features";
71
74
  import { addons } from "./addons";
72
75
  import { plans } from "./plans";
76
+ import { coupons } from "./coupons";
73
77
 
74
78
  export default defineConfig({
75
79
  features,
76
80
  addons,
77
81
  plans,
82
+ coupons,
78
83
  });
79
84
  `,
80
85
  root: `import config from "./revstack";
@@ -101,9 +106,9 @@ export const addons = {
101
106
  name: "10 Extra Users",
102
107
  description: "Add 10 more active users to your workspace.",
103
108
  type: "recurring",
104
- prices: [
105
- { amount: 5000, currency: "USD", billing_interval: "monthly" }
106
- ],
109
+ amount: 5000,
110
+ currency: "USD",
111
+ billing_interval: "monthly",
107
112
  features: {
108
113
  active_users: { value_limit: 10, type: "increment", is_hard_limit: true },
109
114
  }
@@ -112,12 +117,25 @@ export const addons = {
112
117
  name: "Dedicated Support",
113
118
  description: "Enterprise SLA with 1-hour response time.",
114
119
  type: "recurring",
115
- prices: [
116
- { amount: 49900, currency: "USD", billing_interval: "monthly" }
117
- ],
120
+ amount: 49900,
121
+ currency: "USD",
122
+ billing_interval: "monthly",
118
123
  features: {}
119
124
  })
120
125
  };
126
+ `,
127
+ coupons: `import type { DiscountDef } from "@revstackhq/core";
128
+
129
+ export const coupons: DiscountDef[] = [
130
+ {
131
+ code: "ENTERPRISE_B2B",
132
+ name: "Annual Contract Rebate",
133
+ type: "amount",
134
+ value: 50000,
135
+ duration: "once",
136
+ applies_to_plans: ["enterprise"]
137
+ }
138
+ ];
121
139
  `,
122
140
  plans: `import { definePlan } from "@revstackhq/core";
123
141
  import { features } from "./features";
@@ -137,9 +155,8 @@ export const plans = {
137
155
  is_default: false,
138
156
  is_public: true,
139
157
  type: "paid",
140
- available_addons: ["extra_users"],
141
158
  prices: [
142
- { amount: 9900, currency: "USD", billing_interval: "monthly" }
159
+ { amount: 9900, currency: "USD", billing_interval: "monthly", available_addons: ["extra_users"] }
143
160
  ],
144
161
  features: {
145
162
  active_users: { value_limit: 10, is_hard_limit: true },
@@ -153,9 +170,8 @@ export const plans = {
153
170
  is_default: false,
154
171
  is_public: true,
155
172
  type: "paid",
156
- available_addons: ["extra_users", "dedicated_support"],
157
173
  prices: [
158
- { amount: 49900, currency: "USD", billing_interval: "monthly" }
174
+ { amount: 49900, currency: "USD", billing_interval: "monthly", available_addons: ["extra_users", "dedicated_support"] }
159
175
  ],
160
176
  features: {
161
177
  active_users: { value_limit: 100, is_hard_limit: false },
@@ -169,11 +185,13 @@ export const plans = {
169
185
  import { features } from "./features";
170
186
  import { addons } from "./addons";
171
187
  import { plans } from "./plans";
188
+ import { coupons } from "./coupons";
172
189
 
173
190
  export default defineConfig({
174
191
  features,
175
192
  addons,
176
193
  plans,
194
+ coupons,
177
195
  });
178
196
  `,
179
197
  root: `import config from "./revstack";
@@ -199,12 +217,24 @@ export const addons = {
199
217
  name: "Premium Support",
200
218
  description: "24/7 dedicated support.",
201
219
  type: "recurring",
202
- prices: [
203
- { amount: 20000, currency: "USD", billing_interval: "monthly" }
204
- ],
220
+ amount: 20000,
221
+ currency: "USD",
222
+ billing_interval: "monthly",
205
223
  features: {}
206
224
  })
207
225
  };
226
+ `,
227
+ coupons: `import type { DiscountDef } from "@revstackhq/core";
228
+
229
+ export const coupons: DiscountDef[] = [
230
+ {
231
+ code: "STARTUP_ACCELERATOR",
232
+ name: "Startup Program Credits",
233
+ type: "amount",
234
+ value: 500000, // $5,000 credit
235
+ duration: "forever",
236
+ }
237
+ ];
208
238
  `,
209
239
  plans: `import { definePlan } from "@revstackhq/core";
210
240
  import { features } from "./features";
@@ -224,12 +254,12 @@ export const plans = {
224
254
  is_default: false,
225
255
  is_public: true,
226
256
  type: "paid",
227
- available_addons: ["premium_support"],
228
257
  prices: [
229
258
  {
230
259
  amount: 0,
231
260
  currency: "USD",
232
261
  billing_interval: "monthly",
262
+ available_addons: ["premium_support"],
233
263
  overage_configuration: {
234
264
  api_requests: { overage_amount: 15, overage_unit: 1000 }, // $0.15 per 1k extra requests
235
265
  storage_gb: { overage_amount: 50, overage_unit: 1 }, // $0.50 per extra GB
@@ -247,11 +277,392 @@ export const plans = {
247
277
  import { features } from "./features";
248
278
  import { addons } from "./addons";
249
279
  import { plans } from "./plans";
280
+ import { coupons } from "./coupons";
281
+
282
+ export default defineConfig({
283
+ features,
284
+ addons,
285
+ plans,
286
+ coupons,
287
+ });
288
+ `,
289
+ root: `import config from "./revstack";
290
+
291
+ export default config;
292
+ `
293
+ };
294
+
295
+ // src/commands/templates/ecommerce-platform.ts
296
+ var ecommercePlatform = {
297
+ features: `import { defineFeature } from "@revstackhq/core";
298
+
299
+ export const features = {
300
+ orders: defineFeature({ name: "Monthly Orders", type: "metered", unit_type: "count" }),
301
+ storefronts: defineFeature({ name: "Storefronts", type: "static", unit_type: "count" }),
302
+ advanced_analytics: defineFeature({ name: "Advanced Analytics", type: "boolean", unit_type: "custom" }),
303
+ };
304
+ `,
305
+ addons: `import { defineAddon } from "@revstackhq/core";
306
+ import { features } from "./features";
307
+
308
+ export const addons = {
309
+ extra_storefront: defineAddon<typeof features>({
310
+ name: "Additional Storefront",
311
+ description: "Launch a new brand under the same account.",
312
+ type: "recurring",
313
+ amount: 5000,
314
+ currency: "USD",
315
+ billing_interval: "monthly",
316
+ features: {
317
+ storefronts: { value_limit: 1, type: "increment", is_hard_limit: true },
318
+ }
319
+ }),
320
+ custom_domain_ssl: defineAddon<typeof features>({
321
+ name: "Custom Domain & SSL",
322
+ description: "Secure your storefront with a custom domain.",
323
+ type: "recurring",
324
+ amount: 1500,
325
+ currency: "USD",
326
+ billing_interval: "monthly",
327
+ features: {}
328
+ })
329
+ };
330
+ `,
331
+ plans: `import { definePlan } from "@revstackhq/core";
332
+ import { features } from "./features";
333
+
334
+ export const plans = {
335
+ default: definePlan<typeof features>({
336
+ name: "Default Sandbox",
337
+ description: "Test your store safely before going live.",
338
+ is_default: true,
339
+ is_public: false,
340
+ type: "free",
341
+ features: {},
342
+ }),
343
+ basic: definePlan<typeof features>({
344
+ name: "Basic Commerce",
345
+ description: "Everything you need to sell online.",
346
+ is_default: false,
347
+ is_public: true,
348
+ type: "paid",
349
+ prices: [
350
+ {
351
+ amount: 2900,
352
+ currency: "USD",
353
+ billing_interval: "monthly",
354
+ available_addons: ["custom_domain_ssl"],
355
+ overage_configuration: {
356
+ orders: { overage_amount: 50, overage_unit: 100 } // $0.50 per 100 extra orders
357
+ }
358
+ }
359
+ ],
360
+ features: {
361
+ orders: { value_limit: 500, is_hard_limit: false, reset_period: "monthly" },
362
+ storefronts: { value_limit: 1, is_hard_limit: true },
363
+ advanced_analytics: { value_bool: false },
364
+ },
365
+ }),
366
+ pro: definePlan<typeof features>({
367
+ name: "Pro Seller",
368
+ description: "For scaling businesses.",
369
+ is_default: false,
370
+ is_public: true,
371
+ type: "paid",
372
+ prices: [
373
+ {
374
+ amount: 19900,
375
+ currency: "USD",
376
+ billing_interval: "monthly",
377
+ available_addons: ["extra_storefront", "custom_domain_ssl"],
378
+ overage_configuration: {
379
+ orders: { overage_amount: 30, overage_unit: 100 } // $0.30 per 100 extra orders
380
+ }
381
+ }
382
+ ],
383
+ features: {
384
+ orders: { value_limit: 5000, is_hard_limit: false, reset_period: "monthly" },
385
+ storefronts: { value_limit: 2, is_hard_limit: true },
386
+ advanced_analytics: { value_bool: true },
387
+ },
388
+ }),
389
+ };
390
+ `,
391
+ coupons: `import type { DiscountDef } from "@revstackhq/core";
392
+
393
+ export const coupons: DiscountDef[] = [
394
+ {
395
+ code: "BFCM_PROMO",
396
+ name: "Black Friday Cyber Monday 20%",
397
+ type: "percent",
398
+ value: 20,
399
+ duration: "repeating",
400
+ duration_in_months: 6,
401
+ expires_at: "2024-11-29T00:00:00Z", // Ephemeral timestamp
402
+ max_redemptions: 5000
403
+ },
404
+ {
405
+ code: "FIRST_MONTH_FREE",
406
+ name: "New Store Launch",
407
+ type: "percent",
408
+ value: 100,
409
+ duration: "repeating",
410
+ duration_in_months: 1,
411
+ applies_to_plans: ["basic"]
412
+ }
413
+ ];
414
+ `,
415
+ index: `import { defineConfig } from "@revstackhq/core";
416
+ import { features } from "./features";
417
+ import { addons } from "./addons";
418
+ import { plans } from "./plans";
419
+ import { coupons } from "./coupons";
420
+
421
+ export default defineConfig({
422
+ features,
423
+ addons,
424
+ plans,
425
+ coupons,
426
+ });
427
+ `,
428
+ root: `import config from "./revstack";
429
+
430
+ export default config;
431
+ `
432
+ };
433
+
434
+ // src/commands/templates/developer-tools.ts
435
+ var developerTools = {
436
+ features: `import { defineFeature } from "@revstackhq/core";
437
+
438
+ export const features = {
439
+ bandwidth_gb: defineFeature({ name: "Bandwidth (GB)", type: "metered", unit_type: "custom" }),
440
+ compute_hours: defineFeature({ name: "Compute (GB-Hours)", type: "metered", unit_type: "custom" }),
441
+ serverless_invokes: defineFeature({ name: "Serverless Invocations", type: "metered", unit_type: "count" }),
442
+ sso_auth: defineFeature({ name: "Enterprise SSO", type: "boolean", unit_type: "custom" })
443
+ };
444
+ `,
445
+ addons: `import { defineAddon } from "@revstackhq/core";
446
+ import { features } from "./features";
447
+
448
+ export const addons = {
449
+ dedicated_ipv4: defineAddon<typeof features>({
450
+ name: "Dedicated IPv4 Address",
451
+ description: "Assign a static IP to your deployments.",
452
+ type: "recurring",
453
+ amount: 500,
454
+ currency: "USD",
455
+ billing_interval: "monthly",
456
+ features: {}
457
+ }),
458
+ premium_sla: defineAddon<typeof features>({
459
+ name: "Premium Escalation SLA",
460
+ description: "Direct engineering support with 30-min response time.",
461
+ type: "recurring",
462
+ amount: 150000,
463
+ currency: "USD",
464
+ billing_interval: "monthly",
465
+ features: {}
466
+ })
467
+ };
468
+ `,
469
+ plans: `import { definePlan } from "@revstackhq/core";
470
+ import { features } from "./features";
471
+
472
+ export const plans = {
473
+ default: definePlan<typeof features>({
474
+ name: "Hobby",
475
+ description: "For personal or non-commercial projects.",
476
+ is_default: true,
477
+ is_public: true,
478
+ type: "free",
479
+ features: {
480
+ bandwidth_gb: { value_limit: 100, is_hard_limit: true, reset_period: "monthly" },
481
+ compute_hours: { value_limit: 100, is_hard_limit: true, reset_period: "monthly" },
482
+ serverless_invokes: { value_limit: 100000, is_hard_limit: true, reset_period: "monthly" },
483
+ sso_auth: { value_bool: false }
484
+ },
485
+ }),
486
+ pro: definePlan<typeof features>({
487
+ name: "Pro",
488
+ description: "For production apps and growing teams.",
489
+ is_default: false,
490
+ is_public: true,
491
+ type: "paid",
492
+ prices: [
493
+ {
494
+ amount: 2000,
495
+ currency: "USD",
496
+ billing_interval: "monthly",
497
+ available_addons: ["dedicated_ipv4"],
498
+ overage_configuration: {
499
+ bandwidth_gb: { overage_amount: 40, overage_unit: 100 }, // $0.40 per 100GB extra
500
+ compute_hours: { overage_amount: 2, overage_unit: 1 }, // $0.02 per extra GB hr
501
+ serverless_invokes: { overage_amount: 50, overage_unit: 1000000 } // $0.50 per 1M invokes
502
+ }
503
+ }
504
+ ],
505
+ features: {
506
+ bandwidth_gb: { value_limit: 1000, is_hard_limit: false, reset_period: "monthly" },
507
+ compute_hours: { value_limit: 1000, is_hard_limit: false, reset_period: "monthly" },
508
+ serverless_invokes: { value_limit: 5000000, is_hard_limit: false, reset_period: "monthly" },
509
+ sso_auth: { value_bool: false }
510
+ },
511
+ }),
512
+ enterprise: definePlan<typeof features>({
513
+ name: "Enterprise",
514
+ description: "Custom infrastructure and legal compliance.",
515
+ is_default: false,
516
+ is_public: true,
517
+ type: "custom",
518
+ prices: [],
519
+ features: {
520
+ bandwidth_gb: { value_limit: 50000, is_hard_limit: false, reset_period: "monthly" },
521
+ compute_hours: { value_limit: 10000, is_hard_limit: false, reset_period: "monthly" },
522
+ serverless_invokes: { value_limit: 100000000, is_hard_limit: false, reset_period: "monthly" },
523
+ sso_auth: { value_bool: true }
524
+ },
525
+ }),
526
+ };
527
+ `,
528
+ coupons: `import type { DiscountDef } from "@revstackhq/core";
529
+
530
+ export const coupons: DiscountDef[] = [
531
+ {
532
+ code: "YCOMBINATOR",
533
+ name: "YC Startup Accelerator Credit",
534
+ type: "amount",
535
+ value: 1000000, // $10,000 credit
536
+ duration: "forever",
537
+ applies_to_plans: ["pro", "enterprise"]
538
+ }
539
+ ];
540
+ `,
541
+ index: `import { defineConfig } from "@revstackhq/core";
542
+ import { features } from "./features";
543
+ import { addons } from "./addons";
544
+ import { plans } from "./plans";
545
+ import { coupons } from "./coupons";
546
+
547
+ export default defineConfig({
548
+ features,
549
+ addons,
550
+ plans,
551
+ coupons,
552
+ });
553
+ `,
554
+ root: `import config from "./revstack";
555
+
556
+ export default config;
557
+ `
558
+ };
559
+
560
+ // src/commands/templates/ai-agent-platform.ts
561
+ var aiAgentPlatform = {
562
+ features: `import { defineFeature } from "@revstackhq/core";
563
+
564
+ export const features = {
565
+ llm_tokens: defineFeature({ name: "LLM Tokens (Input+Output)", type: "metered", unit_type: "count" }),
566
+ active_agents: defineFeature({ name: "Concurrent Agents", type: "static", unit_type: "count" }),
567
+ vector_storage_gb: defineFeature({ name: "Vector Database (GB)", type: "metered", unit_type: "custom" }),
568
+ custom_fine_tuning: defineFeature({ name: "Model Fine-Tuning", type: "boolean", unit_type: "custom" })
569
+ };
570
+ `,
571
+ addons: `import { defineAddon } from "@revstackhq/core";
572
+ import { features } from "./features";
573
+
574
+ export const addons = {
575
+ extra_vector_storage: defineAddon<typeof features>({
576
+ name: "10GB Vector Storage Block",
577
+ description: "Retain long-term memory for your AI agents.",
578
+ type: "recurring",
579
+ amount: 1000,
580
+ currency: "USD",
581
+ billing_interval: "monthly",
582
+ features: {
583
+ vector_storage_gb: { value_limit: 10, type: "increment", is_hard_limit: false }
584
+ }
585
+ }),
586
+ fine_tuning_job: defineAddon<typeof features>({
587
+ name: "Fine-Tuning Job Runner",
588
+ description: "Pay once to run a distributed model fine-tuning job on your dataset.",
589
+ type: "one_time",
590
+ amount: 25000,
591
+ currency: "USD",
592
+ features: {
593
+ custom_fine_tuning: { has_access: true }
594
+ }
595
+ })
596
+ };
597
+ `,
598
+ plans: `import { definePlan } from "@revstackhq/core";
599
+ import { features } from "./features";
600
+
601
+ export const plans = {
602
+ default: definePlan<typeof features>({
603
+ name: "Free Preview",
604
+ description: "Trial sandbox using shared models.",
605
+ is_default: true,
606
+ is_public: true,
607
+ type: "free",
608
+ features: {
609
+ llm_tokens: { value_limit: 100000, is_hard_limit: true, reset_period: "monthly" },
610
+ active_agents: { value_limit: 1, is_hard_limit: true },
611
+ vector_storage_gb: { value_limit: 0, is_hard_limit: true, reset_period: "never" },
612
+ custom_fine_tuning: { value_bool: false }
613
+ },
614
+ }),
615
+ builder: definePlan<typeof features>({
616
+ name: "AI Builder",
617
+ description: "High concurrency and dedicated model endpoints.",
618
+ is_default: false,
619
+ is_public: true,
620
+ type: "paid",
621
+ prices: [
622
+ {
623
+ amount: 4900,
624
+ currency: "USD",
625
+ billing_interval: "monthly",
626
+ available_addons: ["extra_vector_storage", "fine_tuning_job"],
627
+ overage_configuration: {
628
+ llm_tokens: { overage_amount: 15, overage_unit: 1000000 } // $0.15 per 1M tokens
629
+ }
630
+ }
631
+ ],
632
+ features: {
633
+ llm_tokens: { value_limit: 10000000, is_hard_limit: false, reset_period: "monthly" }, // 10M free tokens included
634
+ active_agents: { value_limit: 10, is_hard_limit: true },
635
+ vector_storage_gb: { value_limit: 5, is_hard_limit: true, reset_period: "never" }, // Hard limit until they buy the addon
636
+ custom_fine_tuning: { value_bool: false } // Only unlocked via the one-off addon
637
+ },
638
+ }),
639
+ };
640
+ `,
641
+ coupons: `import type { DiscountDef } from "@revstackhq/core";
642
+
643
+ export const coupons: DiscountDef[] = [
644
+ {
645
+ code: "BETA_TESTER",
646
+ name: "Early Beta Access Discount",
647
+ type: "percent",
648
+ value: 50,
649
+ duration: "repeating",
650
+ duration_in_months: 12,
651
+ max_redemptions: 100
652
+ }
653
+ ];
654
+ `,
655
+ index: `import { defineConfig } from "@revstackhq/core";
656
+ import { features } from "./features";
657
+ import { addons } from "./addons";
658
+ import { plans } from "./plans";
659
+ import { coupons } from "./coupons";
250
660
 
251
661
  export default defineConfig({
252
662
  features,
253
663
  addons,
254
664
  plans,
665
+ coupons,
255
666
  });
256
667
  `,
257
668
  root: `import config from "./revstack";
@@ -264,7 +675,10 @@ export default config;
264
675
  var TEMPLATES = {
265
676
  starter,
266
677
  "b2b-saas": b2bSaas,
267
- "usage-based": usageBased
678
+ "usage-based": usageBased,
679
+ "ecommerce-platform": ecommercePlatform,
680
+ "developer-tools": developerTools,
681
+ "ai-agent-platform": aiAgentPlatform
268
682
  };
269
683
  export {
270
684
  TEMPLATES
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/templates/starter.ts","../../../src/commands/templates/b2b-saas.ts","../../../src/commands/templates/usage-based.ts","../../../src/commands/templates/index.ts"],"sourcesContent":["export interface TemplateConfig {\r\n features: string;\r\n addons: string;\r\n plans: string;\r\n index: string;\r\n root: string;\r\n}\r\n\r\nexport const starter: TemplateConfig = {\r\n features: `import { defineFeature } from \"@revstackhq/core\";\r\n\r\nexport const features = {\r\n seats: defineFeature({ name: \"Seats\", type: \"static\", unit_type: \"count\" }),\r\n priority_support: defineFeature({ name: \"Priority Support\", type: \"boolean\", unit_type: \"custom\" }),\r\n};\r\n`,\r\n addons: `import { defineAddon } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\n\r\nexport const addons = {\r\n extra_seats: defineAddon<typeof features>({\r\n name: \"5 Extra Seats\",\r\n description: \"Add 5 more team members to your workspace.\",\r\n type: \"recurring\",\r\n prices: [\r\n { amount: 1500, currency: \"USD\", billing_interval: \"monthly\" }\r\n ],\r\n features: {\r\n seats: { value_limit: 5, type: \"increment\", is_hard_limit: false },\r\n }\r\n }),\r\n vip_support: defineAddon<typeof features>({\r\n name: \"Priority Support\",\r\n description: \"24/7 Slack channel support.\",\r\n type: \"recurring\",\r\n prices: [\r\n { amount: 9900, currency: \"USD\", billing_interval: \"monthly\" }\r\n ],\r\n features: {\r\n priority_support: { has_access: true },\r\n }\r\n })\r\n};\r\n`,\r\n plans: `import { definePlan } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\n\r\nexport const plans = {\r\n // DO NOT DELETE: Automatically created default plan for guests.\r\n default: definePlan<typeof features>({\r\n name: \"Default\",\r\n description: \"Automatically created default plan for guests.\",\r\n is_default: true,\r\n is_public: false,\r\n type: \"free\",\r\n features: {},\r\n }),\r\n pro: definePlan<typeof features>({\r\n name: \"Pro\",\r\n description: \"For professional teams.\",\r\n is_default: false,\r\n is_public: true,\r\n type: \"paid\",\r\n available_addons: [\"extra_seats\", \"vip_support\"],\r\n prices: [\r\n { amount: 2900, currency: \"USD\", billing_interval: \"monthly\", trial_period_days: 14 }\r\n ],\r\n features: {\r\n seats: { value_limit: 5, is_hard_limit: true },\r\n },\r\n }),\r\n};\r\n`,\r\n index: `import { defineConfig } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\nimport { addons } from \"./addons\";\r\nimport { plans } from \"./plans\";\r\n\r\nexport default defineConfig({\r\n features,\r\n addons,\r\n plans,\r\n});\r\n`,\r\n root: `import config from \"./revstack\";\r\n\r\nexport default config;\r\n`,\r\n};\r\n","import { TemplateConfig } from \"./starter\";\r\n\r\nexport const b2bSaas: TemplateConfig = {\r\n features: `import { defineFeature } from \"@revstackhq/core\";\r\n\r\nexport const features = {\r\n active_users: defineFeature({ name: \"Active Users\", type: \"static\", unit_type: \"count\" }),\r\n api_access: defineFeature({ name: \"API Access\", type: \"boolean\", unit_type: \"custom\" }),\r\n custom_domain: defineFeature({ name: \"Custom Domain\", type: \"boolean\", unit_type: \"custom\" }),\r\n};\r\n`,\r\n addons: `import { defineAddon } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\n\r\nexport const addons = {\r\n extra_users: defineAddon<typeof features>({\r\n name: \"10 Extra Users\",\r\n description: \"Add 10 more active users to your workspace.\",\r\n type: \"recurring\",\r\n prices: [\r\n { amount: 5000, currency: \"USD\", billing_interval: \"monthly\" }\r\n ],\r\n features: {\r\n active_users: { value_limit: 10, type: \"increment\", is_hard_limit: true },\r\n }\r\n }),\r\n dedicated_support: defineAddon<typeof features>({\r\n name: \"Dedicated Support\",\r\n description: \"Enterprise SLA with 1-hour response time.\",\r\n type: \"recurring\",\r\n prices: [\r\n { amount: 49900, currency: \"USD\", billing_interval: \"monthly\" }\r\n ],\r\n features: {}\r\n })\r\n};\r\n`,\r\n plans: `import { definePlan } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\n\r\nexport const plans = {\r\n default: definePlan<typeof features>({\r\n name: \"Default\",\r\n description: \"Automatically created default plan for guests.\",\r\n is_default: true,\r\n is_public: false,\r\n type: \"free\",\r\n features: {},\r\n }),\r\n startup: definePlan<typeof features>({\r\n name: \"Startup\",\r\n description: \"For small teams getting started.\",\r\n is_default: false,\r\n is_public: true,\r\n type: \"paid\",\r\n available_addons: [\"extra_users\"],\r\n prices: [\r\n { amount: 9900, currency: \"USD\", billing_interval: \"monthly\" }\r\n ],\r\n features: {\r\n active_users: { value_limit: 10, is_hard_limit: true },\r\n api_access: { value_bool: false },\r\n custom_domain: { value_bool: false },\r\n },\r\n }),\r\n enterprise: definePlan<typeof features>({\r\n name: \"Enterprise\",\r\n description: \"Advanced features for scale.\",\r\n is_default: false,\r\n is_public: true,\r\n type: \"paid\",\r\n available_addons: [\"extra_users\", \"dedicated_support\"],\r\n prices: [\r\n { amount: 49900, currency: \"USD\", billing_interval: \"monthly\" }\r\n ],\r\n features: {\r\n active_users: { value_limit: 100, is_hard_limit: false },\r\n api_access: { value_bool: true },\r\n custom_domain: { value_bool: true },\r\n },\r\n }),\r\n};\r\n`,\r\n index: `import { defineConfig } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\nimport { addons } from \"./addons\";\r\nimport { plans } from \"./plans\";\r\n\r\nexport default defineConfig({\r\n features,\r\n addons,\r\n plans,\r\n});\r\n`,\r\n root: `import config from \"./revstack\";\r\n\r\nexport default config;\r\n`,\r\n};\r\n","import { TemplateConfig } from \"./starter\";\r\n\r\nexport const usageBased: TemplateConfig = {\r\n features: `import { defineFeature } from \"@revstackhq/core\";\r\n\r\nexport const features = {\r\n api_requests: defineFeature({ name: \"API Requests\", type: \"metered\", unit_type: \"requests\" }),\r\n storage_gb: defineFeature({ name: \"Storage (GB)\", type: \"metered\", unit_type: \"custom\" }),\r\n};\r\n`,\r\n addons: `import { defineAddon } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\n\r\nexport const addons = {\r\n premium_support: defineAddon<typeof features>({\r\n name: \"Premium Support\",\r\n description: \"24/7 dedicated support.\",\r\n type: \"recurring\",\r\n prices: [\r\n { amount: 20000, currency: \"USD\", billing_interval: \"monthly\" }\r\n ],\r\n features: {}\r\n })\r\n};\r\n`,\r\n plans: `import { definePlan } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\n\r\nexport const plans = {\r\n default: definePlan<typeof features>({\r\n name: \"Default\",\r\n description: \"Automatically created default plan for guests.\",\r\n is_default: true,\r\n is_public: false,\r\n type: \"free\",\r\n features: {},\r\n }),\r\n pay_as_you_go: definePlan<typeof features>({\r\n name: \"Pay As You Go\",\r\n description: \"Flexible usage-based pricing.\",\r\n is_default: false,\r\n is_public: true,\r\n type: \"paid\",\r\n available_addons: [\"premium_support\"],\r\n prices: [\r\n {\r\n amount: 0,\r\n currency: \"USD\",\r\n billing_interval: \"monthly\",\r\n overage_configuration: {\r\n api_requests: { overage_amount: 15, overage_unit: 1000 }, // $0.15 per 1k extra requests\r\n storage_gb: { overage_amount: 50, overage_unit: 1 }, // $0.50 per extra GB\r\n }\r\n } // Base platform fee\r\n ],\r\n features: {\r\n api_requests: { value_limit: 10000, is_hard_limit: false, reset_period: \"monthly\" }, // 10k free requests per month\r\n storage_gb: { value_limit: 5, is_hard_limit: false, reset_period: \"never\" }, // 5GB free storage lifetime\r\n },\r\n }),\r\n};\r\n`,\r\n index: `import { defineConfig } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\nimport { addons } from \"./addons\";\r\nimport { plans } from \"./plans\";\r\n\r\nexport default defineConfig({\r\n features,\r\n addons,\r\n plans,\r\n});\r\n`,\r\n root: `import config from \"./revstack\";\r\n\r\nexport default config;\r\n`,\r\n};\r\n","import { starter } from \"./starter\";\r\nimport { b2bSaas } from \"./b2b-saas\";\r\nimport { usageBased } from \"./usage-based\";\r\nimport type { TemplateConfig } from \"./starter\";\r\n\r\nexport const TEMPLATES: Record<string, TemplateConfig> = {\r\n starter: starter,\r\n \"b2b-saas\": b2bSaas,\r\n \"usage-based\": usageBased,\r\n};\r\n\r\nexport type { TemplateConfig };\r\n"],"mappings":";;;AAQO,IAAM,UAA0B;AAAA,EACrC,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOV,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA4BR,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6BP,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWP,MAAM;AAAA;AAAA;AAAA;AAIR;;;ACtFO,IAAM,UAA0B;AAAA,EACrC,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQV,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0BR,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8CP,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWP,MAAM;AAAA;AAAA;AAAA;AAIR;;;AChGO,IAAM,aAA6B;AAAA,EACxC,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOV,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeR,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqCP,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWP,MAAM;AAAA;AAAA;AAAA;AAIR;;;ACxEO,IAAM,YAA4C;AAAA,EACvD;AAAA,EACA,YAAY;AAAA,EACZ,eAAe;AACjB;","names":[]}
1
+ {"version":3,"sources":["../../../src/commands/templates/starter.ts","../../../src/commands/templates/b2b-saas.ts","../../../src/commands/templates/usage-based.ts","../../../src/commands/templates/ecommerce-platform.ts","../../../src/commands/templates/developer-tools.ts","../../../src/commands/templates/ai-agent-platform.ts","../../../src/commands/templates/index.ts"],"sourcesContent":["export interface TemplateConfig {\r\n features: string;\r\n addons: string;\r\n plans: string;\r\n coupons: string;\r\n index: string;\r\n root: string;\r\n}\r\n\r\nexport const starter: TemplateConfig = {\r\n features: `import { defineFeature } from \"@revstackhq/core\";\r\n\r\nexport const features = {\r\n seats: defineFeature({ name: \"Seats\", type: \"static\", unit_type: \"count\" }),\r\n priority_support: defineFeature({ name: \"Priority Support\", type: \"boolean\", unit_type: \"custom\" }),\r\n};\r\n`,\r\n addons: `import { defineAddon } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\n\r\nexport const addons = {\r\n extra_seats: defineAddon<typeof features>({\r\n name: \"5 Extra Seats\",\r\n description: \"Add 5 more team members to your workspace.\",\r\n type: \"recurring\",\r\n amount: 1500,\r\n currency: \"USD\",\r\n billing_interval: \"monthly\",\r\n features: {\r\n seats: { value_limit: 5, type: \"increment\", is_hard_limit: false },\r\n }\r\n }),\r\n vip_support: defineAddon<typeof features>({\r\n name: \"Priority Support\",\r\n description: \"24/7 Slack channel support.\",\r\n type: \"recurring\",\r\n amount: 9900,\r\n currency: \"USD\",\r\n billing_interval: \"monthly\",\r\n features: {\r\n priority_support: { has_access: true },\r\n }\r\n })\r\n};\r\n`,\r\n plans: `import { definePlan } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\n\r\nexport const plans = {\r\n // DO NOT DELETE: Automatically created default plan for guests.\r\n default: definePlan<typeof features>({\r\n name: \"Default\",\r\n description: \"Automatically created default plan for guests.\",\r\n is_default: true,\r\n is_public: false,\r\n type: \"free\",\r\n features: {},\r\n }),\r\n pro: definePlan<typeof features>({\r\n name: \"Pro\",\r\n description: \"For professional teams.\",\r\n is_default: false,\r\n is_public: true,\r\n type: \"paid\",\r\n prices: [\r\n { amount: 2900, currency: \"USD\", billing_interval: \"monthly\", trial_period_days: 14, available_addons: [\"extra_seats\", \"vip_support\"] }\r\n ],\r\n features: {\r\n seats: { value_limit: 5, is_hard_limit: true },\r\n },\r\n }),\r\n};\r\n`,\r\n coupons: `import type { DiscountDef } from \"@revstackhq/core\";\r\n\r\nexport const coupons: DiscountDef[] = [];\r\n`,\r\n index: `import { defineConfig } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\nimport { addons } from \"./addons\";\r\nimport { plans } from \"./plans\";\r\nimport { coupons } from \"./coupons\";\r\n\r\nexport default defineConfig({\r\n features,\r\n addons,\r\n plans,\r\n coupons,\r\n});\r\n`,\r\n root: `import config from \"./revstack\";\r\n\r\nexport default config;\r\n`,\r\n};\r\n","import { TemplateConfig } from \"./starter\";\r\n\r\nexport const b2bSaas: TemplateConfig = {\r\n features: `import { defineFeature } from \"@revstackhq/core\";\r\n\r\nexport const features = {\r\n active_users: defineFeature({ name: \"Active Users\", type: \"static\", unit_type: \"count\" }),\r\n api_access: defineFeature({ name: \"API Access\", type: \"boolean\", unit_type: \"custom\" }),\r\n custom_domain: defineFeature({ name: \"Custom Domain\", type: \"boolean\", unit_type: \"custom\" }),\r\n};\r\n`,\r\n addons: `import { defineAddon } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\n\r\nexport const addons = {\r\n extra_users: defineAddon<typeof features>({\r\n name: \"10 Extra Users\",\r\n description: \"Add 10 more active users to your workspace.\",\r\n type: \"recurring\",\r\n amount: 5000,\r\n currency: \"USD\",\r\n billing_interval: \"monthly\",\r\n features: {\r\n active_users: { value_limit: 10, type: \"increment\", is_hard_limit: true },\r\n }\r\n }),\r\n dedicated_support: defineAddon<typeof features>({\r\n name: \"Dedicated Support\",\r\n description: \"Enterprise SLA with 1-hour response time.\",\r\n type: \"recurring\",\r\n amount: 49900,\r\n currency: \"USD\",\r\n billing_interval: \"monthly\",\r\n features: {}\r\n })\r\n};\r\n`,\r\n coupons: `import type { DiscountDef } from \"@revstackhq/core\";\r\n\r\nexport const coupons: DiscountDef[] = [\r\n {\r\n code: \"ENTERPRISE_B2B\",\r\n name: \"Annual Contract Rebate\",\r\n type: \"amount\",\r\n value: 50000,\r\n duration: \"once\",\r\n applies_to_plans: [\"enterprise\"]\r\n }\r\n];\r\n`,\r\n plans: `import { definePlan } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\n\r\nexport const plans = {\r\n default: definePlan<typeof features>({\r\n name: \"Default\",\r\n description: \"Automatically created default plan for guests.\",\r\n is_default: true,\r\n is_public: false,\r\n type: \"free\",\r\n features: {},\r\n }),\r\n startup: definePlan<typeof features>({\r\n name: \"Startup\",\r\n description: \"For small teams getting started.\",\r\n is_default: false,\r\n is_public: true,\r\n type: \"paid\",\r\n prices: [\r\n { amount: 9900, currency: \"USD\", billing_interval: \"monthly\", available_addons: [\"extra_users\"] }\r\n ],\r\n features: {\r\n active_users: { value_limit: 10, is_hard_limit: true },\r\n api_access: { value_bool: false },\r\n custom_domain: { value_bool: false },\r\n },\r\n }),\r\n enterprise: definePlan<typeof features>({\r\n name: \"Enterprise\",\r\n description: \"Advanced features for scale.\",\r\n is_default: false,\r\n is_public: true,\r\n type: \"paid\",\r\n prices: [\r\n { amount: 49900, currency: \"USD\", billing_interval: \"monthly\", available_addons: [\"extra_users\", \"dedicated_support\"] }\r\n ],\r\n features: {\r\n active_users: { value_limit: 100, is_hard_limit: false },\r\n api_access: { value_bool: true },\r\n custom_domain: { value_bool: true },\r\n },\r\n }),\r\n};\r\n`,\r\n index: `import { defineConfig } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\nimport { addons } from \"./addons\";\r\nimport { plans } from \"./plans\";\r\nimport { coupons } from \"./coupons\";\r\n\r\nexport default defineConfig({\r\n features,\r\n addons,\r\n plans,\r\n coupons,\r\n});\r\n`,\r\n root: `import config from \"./revstack\";\r\n\r\nexport default config;\r\n`,\r\n};\r\n","import { TemplateConfig } from \"./starter\";\r\n\r\nexport const usageBased: TemplateConfig = {\r\n features: `import { defineFeature } from \"@revstackhq/core\";\r\n\r\nexport const features = {\r\n api_requests: defineFeature({ name: \"API Requests\", type: \"metered\", unit_type: \"requests\" }),\r\n storage_gb: defineFeature({ name: \"Storage (GB)\", type: \"metered\", unit_type: \"custom\" }),\r\n};\r\n`,\r\n addons: `import { defineAddon } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\n\r\nexport const addons = {\r\n premium_support: defineAddon<typeof features>({\r\n name: \"Premium Support\",\r\n description: \"24/7 dedicated support.\",\r\n type: \"recurring\",\r\n amount: 20000,\r\n currency: \"USD\",\r\n billing_interval: \"monthly\",\r\n features: {}\r\n })\r\n};\r\n`,\r\n coupons: `import type { DiscountDef } from \"@revstackhq/core\";\r\n\r\nexport const coupons: DiscountDef[] = [\r\n {\r\n code: \"STARTUP_ACCELERATOR\",\r\n name: \"Startup Program Credits\",\r\n type: \"amount\",\r\n value: 500000, // $5,000 credit\r\n duration: \"forever\",\r\n }\r\n];\r\n`,\r\n plans: `import { definePlan } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\n\r\nexport const plans = {\r\n default: definePlan<typeof features>({\r\n name: \"Default\",\r\n description: \"Automatically created default plan for guests.\",\r\n is_default: true,\r\n is_public: false,\r\n type: \"free\",\r\n features: {},\r\n }),\r\n pay_as_you_go: definePlan<typeof features>({\r\n name: \"Pay As You Go\",\r\n description: \"Flexible usage-based pricing.\",\r\n is_default: false,\r\n is_public: true,\r\n type: \"paid\",\r\n prices: [\r\n {\r\n amount: 0,\r\n currency: \"USD\",\r\n billing_interval: \"monthly\",\r\n available_addons: [\"premium_support\"],\r\n overage_configuration: {\r\n api_requests: { overage_amount: 15, overage_unit: 1000 }, // $0.15 per 1k extra requests\r\n storage_gb: { overage_amount: 50, overage_unit: 1 }, // $0.50 per extra GB\r\n }\r\n } // Base platform fee\r\n ],\r\n features: {\r\n api_requests: { value_limit: 10000, is_hard_limit: false, reset_period: \"monthly\" }, // 10k free requests per month\r\n storage_gb: { value_limit: 5, is_hard_limit: false, reset_period: \"never\" }, // 5GB free storage lifetime\r\n },\r\n }),\r\n};\r\n`,\r\n index: `import { defineConfig } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\nimport { addons } from \"./addons\";\r\nimport { plans } from \"./plans\";\r\nimport { coupons } from \"./coupons\";\r\n\r\nexport default defineConfig({\r\n features,\r\n addons,\r\n plans,\r\n coupons,\r\n});\r\n`,\r\n root: `import config from \"./revstack\";\r\n\r\nexport default config;\r\n`,\r\n};\r\n","import { TemplateConfig } from \"./starter\";\r\n\r\nexport const ecommercePlatform: TemplateConfig = {\r\n features: `import { defineFeature } from \"@revstackhq/core\";\r\n\r\nexport const features = {\r\n orders: defineFeature({ name: \"Monthly Orders\", type: \"metered\", unit_type: \"count\" }),\r\n storefronts: defineFeature({ name: \"Storefronts\", type: \"static\", unit_type: \"count\" }),\r\n advanced_analytics: defineFeature({ name: \"Advanced Analytics\", type: \"boolean\", unit_type: \"custom\" }),\r\n};\r\n`,\r\n addons: `import { defineAddon } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\n\r\nexport const addons = {\r\n extra_storefront: defineAddon<typeof features>({\r\n name: \"Additional Storefront\",\r\n description: \"Launch a new brand under the same account.\",\r\n type: \"recurring\",\r\n amount: 5000,\r\n currency: \"USD\",\r\n billing_interval: \"monthly\",\r\n features: {\r\n storefronts: { value_limit: 1, type: \"increment\", is_hard_limit: true },\r\n }\r\n }),\r\n custom_domain_ssl: defineAddon<typeof features>({\r\n name: \"Custom Domain & SSL\",\r\n description: \"Secure your storefront with a custom domain.\",\r\n type: \"recurring\",\r\n amount: 1500,\r\n currency: \"USD\",\r\n billing_interval: \"monthly\",\r\n features: {}\r\n })\r\n};\r\n`,\r\n plans: `import { definePlan } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\n\r\nexport const plans = {\r\n default: definePlan<typeof features>({\r\n name: \"Default Sandbox\",\r\n description: \"Test your store safely before going live.\",\r\n is_default: true,\r\n is_public: false,\r\n type: \"free\",\r\n features: {},\r\n }),\r\n basic: definePlan<typeof features>({\r\n name: \"Basic Commerce\",\r\n description: \"Everything you need to sell online.\",\r\n is_default: false,\r\n is_public: true,\r\n type: \"paid\",\r\n prices: [\r\n {\r\n amount: 2900,\r\n currency: \"USD\",\r\n billing_interval: \"monthly\",\r\n available_addons: [\"custom_domain_ssl\"],\r\n overage_configuration: {\r\n orders: { overage_amount: 50, overage_unit: 100 } // $0.50 per 100 extra orders\r\n }\r\n }\r\n ],\r\n features: {\r\n orders: { value_limit: 500, is_hard_limit: false, reset_period: \"monthly\" },\r\n storefronts: { value_limit: 1, is_hard_limit: true },\r\n advanced_analytics: { value_bool: false },\r\n },\r\n }),\r\n pro: definePlan<typeof features>({\r\n name: \"Pro Seller\",\r\n description: \"For scaling businesses.\",\r\n is_default: false,\r\n is_public: true,\r\n type: \"paid\",\r\n prices: [\r\n {\r\n amount: 19900,\r\n currency: \"USD\",\r\n billing_interval: \"monthly\",\r\n available_addons: [\"extra_storefront\", \"custom_domain_ssl\"],\r\n overage_configuration: {\r\n orders: { overage_amount: 30, overage_unit: 100 } // $0.30 per 100 extra orders\r\n }\r\n }\r\n ],\r\n features: {\r\n orders: { value_limit: 5000, is_hard_limit: false, reset_period: \"monthly\" },\r\n storefronts: { value_limit: 2, is_hard_limit: true },\r\n advanced_analytics: { value_bool: true },\r\n },\r\n }),\r\n};\r\n`,\r\n coupons: `import type { DiscountDef } from \"@revstackhq/core\";\r\n\r\nexport const coupons: DiscountDef[] = [\r\n {\r\n code: \"BFCM_PROMO\",\r\n name: \"Black Friday Cyber Monday 20%\",\r\n type: \"percent\",\r\n value: 20,\r\n duration: \"repeating\",\r\n duration_in_months: 6,\r\n expires_at: \"2024-11-29T00:00:00Z\", // Ephemeral timestamp\r\n max_redemptions: 5000\r\n },\r\n {\r\n code: \"FIRST_MONTH_FREE\",\r\n name: \"New Store Launch\",\r\n type: \"percent\",\r\n value: 100,\r\n duration: \"repeating\",\r\n duration_in_months: 1,\r\n applies_to_plans: [\"basic\"]\r\n }\r\n];\r\n`,\r\n index: `import { defineConfig } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\nimport { addons } from \"./addons\";\r\nimport { plans } from \"./plans\";\r\nimport { coupons } from \"./coupons\";\r\n\r\nexport default defineConfig({\r\n features,\r\n addons,\r\n plans,\r\n coupons,\r\n});\r\n`,\r\n root: `import config from \"./revstack\";\r\n\r\nexport default config;\r\n`,\r\n};\r\n","import { TemplateConfig } from \"./starter\";\r\n\r\nexport const developerTools: TemplateConfig = {\r\n features: `import { defineFeature } from \"@revstackhq/core\";\r\n\r\nexport const features = {\r\n bandwidth_gb: defineFeature({ name: \"Bandwidth (GB)\", type: \"metered\", unit_type: \"custom\" }),\r\n compute_hours: defineFeature({ name: \"Compute (GB-Hours)\", type: \"metered\", unit_type: \"custom\" }),\r\n serverless_invokes: defineFeature({ name: \"Serverless Invocations\", type: \"metered\", unit_type: \"count\" }),\r\n sso_auth: defineFeature({ name: \"Enterprise SSO\", type: \"boolean\", unit_type: \"custom\" })\r\n};\r\n`,\r\n addons: `import { defineAddon } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\n\r\nexport const addons = {\r\n dedicated_ipv4: defineAddon<typeof features>({\r\n name: \"Dedicated IPv4 Address\",\r\n description: \"Assign a static IP to your deployments.\",\r\n type: \"recurring\",\r\n amount: 500,\r\n currency: \"USD\",\r\n billing_interval: \"monthly\",\r\n features: {}\r\n }),\r\n premium_sla: defineAddon<typeof features>({\r\n name: \"Premium Escalation SLA\",\r\n description: \"Direct engineering support with 30-min response time.\",\r\n type: \"recurring\",\r\n amount: 150000,\r\n currency: \"USD\",\r\n billing_interval: \"monthly\",\r\n features: {}\r\n })\r\n};\r\n`,\r\n plans: `import { definePlan } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\n\r\nexport const plans = {\r\n default: definePlan<typeof features>({\r\n name: \"Hobby\",\r\n description: \"For personal or non-commercial projects.\",\r\n is_default: true,\r\n is_public: true,\r\n type: \"free\",\r\n features: {\r\n bandwidth_gb: { value_limit: 100, is_hard_limit: true, reset_period: \"monthly\" },\r\n compute_hours: { value_limit: 100, is_hard_limit: true, reset_period: \"monthly\" },\r\n serverless_invokes: { value_limit: 100000, is_hard_limit: true, reset_period: \"monthly\" },\r\n sso_auth: { value_bool: false }\r\n },\r\n }),\r\n pro: definePlan<typeof features>({\r\n name: \"Pro\",\r\n description: \"For production apps and growing teams.\",\r\n is_default: false,\r\n is_public: true,\r\n type: \"paid\",\r\n prices: [\r\n {\r\n amount: 2000,\r\n currency: \"USD\",\r\n billing_interval: \"monthly\",\r\n available_addons: [\"dedicated_ipv4\"],\r\n overage_configuration: {\r\n bandwidth_gb: { overage_amount: 40, overage_unit: 100 }, // $0.40 per 100GB extra\r\n compute_hours: { overage_amount: 2, overage_unit: 1 }, // $0.02 per extra GB hr\r\n serverless_invokes: { overage_amount: 50, overage_unit: 1000000 } // $0.50 per 1M invokes\r\n }\r\n }\r\n ],\r\n features: {\r\n bandwidth_gb: { value_limit: 1000, is_hard_limit: false, reset_period: \"monthly\" },\r\n compute_hours: { value_limit: 1000, is_hard_limit: false, reset_period: \"monthly\" },\r\n serverless_invokes: { value_limit: 5000000, is_hard_limit: false, reset_period: \"monthly\" },\r\n sso_auth: { value_bool: false }\r\n },\r\n }),\r\n enterprise: definePlan<typeof features>({\r\n name: \"Enterprise\",\r\n description: \"Custom infrastructure and legal compliance.\",\r\n is_default: false,\r\n is_public: true,\r\n type: \"custom\",\r\n prices: [],\r\n features: {\r\n bandwidth_gb: { value_limit: 50000, is_hard_limit: false, reset_period: \"monthly\" },\r\n compute_hours: { value_limit: 10000, is_hard_limit: false, reset_period: \"monthly\" },\r\n serverless_invokes: { value_limit: 100000000, is_hard_limit: false, reset_period: \"monthly\" },\r\n sso_auth: { value_bool: true }\r\n },\r\n }),\r\n};\r\n`,\r\n coupons: `import type { DiscountDef } from \"@revstackhq/core\";\r\n\r\nexport const coupons: DiscountDef[] = [\r\n {\r\n code: \"YCOMBINATOR\",\r\n name: \"YC Startup Accelerator Credit\",\r\n type: \"amount\",\r\n value: 1000000, // $10,000 credit\r\n duration: \"forever\",\r\n applies_to_plans: [\"pro\", \"enterprise\"]\r\n }\r\n];\r\n`,\r\n index: `import { defineConfig } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\nimport { addons } from \"./addons\";\r\nimport { plans } from \"./plans\";\r\nimport { coupons } from \"./coupons\";\r\n\r\nexport default defineConfig({\r\n features,\r\n addons,\r\n plans,\r\n coupons,\r\n});\r\n`,\r\n root: `import config from \"./revstack\";\r\n\r\nexport default config;\r\n`,\r\n};\r\n","import { TemplateConfig } from \"./starter\";\r\n\r\nexport const aiAgentPlatform: TemplateConfig = {\r\n features: `import { defineFeature } from \"@revstackhq/core\";\r\n\r\nexport const features = {\r\n llm_tokens: defineFeature({ name: \"LLM Tokens (Input+Output)\", type: \"metered\", unit_type: \"count\" }),\r\n active_agents: defineFeature({ name: \"Concurrent Agents\", type: \"static\", unit_type: \"count\" }),\r\n vector_storage_gb: defineFeature({ name: \"Vector Database (GB)\", type: \"metered\", unit_type: \"custom\" }),\r\n custom_fine_tuning: defineFeature({ name: \"Model Fine-Tuning\", type: \"boolean\", unit_type: \"custom\" })\r\n};\r\n`,\r\n addons: `import { defineAddon } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\n\r\nexport const addons = {\r\n extra_vector_storage: defineAddon<typeof features>({\r\n name: \"10GB Vector Storage Block\",\r\n description: \"Retain long-term memory for your AI agents.\",\r\n type: \"recurring\",\r\n amount: 1000,\r\n currency: \"USD\",\r\n billing_interval: \"monthly\",\r\n features: {\r\n vector_storage_gb: { value_limit: 10, type: \"increment\", is_hard_limit: false }\r\n }\r\n }),\r\n fine_tuning_job: defineAddon<typeof features>({\r\n name: \"Fine-Tuning Job Runner\",\r\n description: \"Pay once to run a distributed model fine-tuning job on your dataset.\",\r\n type: \"one_time\",\r\n amount: 25000,\r\n currency: \"USD\",\r\n features: {\r\n custom_fine_tuning: { has_access: true }\r\n }\r\n })\r\n};\r\n`,\r\n plans: `import { definePlan } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\n\r\nexport const plans = {\r\n default: definePlan<typeof features>({\r\n name: \"Free Preview\",\r\n description: \"Trial sandbox using shared models.\",\r\n is_default: true,\r\n is_public: true,\r\n type: \"free\",\r\n features: {\r\n llm_tokens: { value_limit: 100000, is_hard_limit: true, reset_period: \"monthly\" },\r\n active_agents: { value_limit: 1, is_hard_limit: true },\r\n vector_storage_gb: { value_limit: 0, is_hard_limit: true, reset_period: \"never\" },\r\n custom_fine_tuning: { value_bool: false }\r\n },\r\n }),\r\n builder: definePlan<typeof features>({\r\n name: \"AI Builder\",\r\n description: \"High concurrency and dedicated model endpoints.\",\r\n is_default: false,\r\n is_public: true,\r\n type: \"paid\",\r\n prices: [\r\n {\r\n amount: 4900,\r\n currency: \"USD\",\r\n billing_interval: \"monthly\",\r\n available_addons: [\"extra_vector_storage\", \"fine_tuning_job\"],\r\n overage_configuration: {\r\n llm_tokens: { overage_amount: 15, overage_unit: 1000000 } // $0.15 per 1M tokens\r\n }\r\n }\r\n ],\r\n features: {\r\n llm_tokens: { value_limit: 10000000, is_hard_limit: false, reset_period: \"monthly\" }, // 10M free tokens included\r\n active_agents: { value_limit: 10, is_hard_limit: true },\r\n vector_storage_gb: { value_limit: 5, is_hard_limit: true, reset_period: \"never\" }, // Hard limit until they buy the addon\r\n custom_fine_tuning: { value_bool: false } // Only unlocked via the one-off addon\r\n },\r\n }),\r\n};\r\n`,\r\n coupons: `import type { DiscountDef } from \"@revstackhq/core\";\r\n\r\nexport const coupons: DiscountDef[] = [\r\n {\r\n code: \"BETA_TESTER\",\r\n name: \"Early Beta Access Discount\",\r\n type: \"percent\",\r\n value: 50,\r\n duration: \"repeating\",\r\n duration_in_months: 12,\r\n max_redemptions: 100\r\n }\r\n];\r\n`,\r\n index: `import { defineConfig } from \"@revstackhq/core\";\r\nimport { features } from \"./features\";\r\nimport { addons } from \"./addons\";\r\nimport { plans } from \"./plans\";\r\nimport { coupons } from \"./coupons\";\r\n\r\nexport default defineConfig({\r\n features,\r\n addons,\r\n plans,\r\n coupons,\r\n});\r\n`,\r\n root: `import config from \"./revstack\";\r\n\r\nexport default config;\r\n`,\r\n};\r\n","import { starter } from \"./starter\";\r\nimport { b2bSaas } from \"./b2b-saas\";\r\nimport { usageBased } from \"./usage-based\";\r\nimport { ecommercePlatform } from \"./ecommerce-platform\";\r\nimport { developerTools } from \"./developer-tools\";\r\nimport { aiAgentPlatform } from \"./ai-agent-platform\";\r\nimport type { TemplateConfig } from \"./starter\";\r\n\r\nexport const TEMPLATES: Record<string, TemplateConfig> = {\r\n starter: starter,\r\n \"b2b-saas\": b2bSaas,\r\n \"usage-based\": usageBased,\r\n \"ecommerce-platform\": ecommercePlatform,\r\n \"developer-tools\": developerTools,\r\n \"ai-agent-platform\": aiAgentPlatform,\r\n};\r\n\r\nexport type { TemplateConfig };\r\n"],"mappings":"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","names":[]}