@genfeedai/helpers 2.2.2

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 (45) hide show
  1. package/dist/aspect-ratio.helper.d.ts +18 -0
  2. package/dist/aspect-ratio.helper.d.ts.map +1 -0
  3. package/dist/aspect-ratio.helper.js +116 -0
  4. package/dist/aspect-ratio.helper.js.map +1 -0
  5. package/dist/business/pricing/pricing.helper.d.ts +231 -0
  6. package/dist/business/pricing/pricing.helper.d.ts.map +1 -0
  7. package/dist/business/pricing/pricing.helper.js +443 -0
  8. package/dist/business/pricing/pricing.helper.js.map +1 -0
  9. package/dist/business/tier-models/tier-models.helper.d.ts +16 -0
  10. package/dist/business/tier-models/tier-models.helper.d.ts.map +1 -0
  11. package/dist/business/tier-models/tier-models.helper.js +42 -0
  12. package/dist/business/tier-models/tier-models.helper.js.map +1 -0
  13. package/dist/deserializer.helper.d.ts +2 -0
  14. package/dist/deserializer.helper.d.ts.map +1 -0
  15. package/dist/deserializer.helper.js +3 -0
  16. package/dist/deserializer.helper.js.map +1 -0
  17. package/dist/index.d.ts +10 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +10 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/model-capability.helper.d.ts +17 -0
  22. package/dist/model-capability.helper.d.ts.map +1 -0
  23. package/dist/model-capability.helper.js +184 -0
  24. package/dist/model-capability.helper.js.map +1 -0
  25. package/dist/quality-routing.helper.d.ts +29 -0
  26. package/dist/quality-routing.helper.d.ts.map +1 -0
  27. package/dist/quality-routing.helper.js +216 -0
  28. package/dist/quality-routing.helper.js.map +1 -0
  29. package/dist/serializer.helper.d.ts +25 -0
  30. package/dist/serializer.helper.d.ts.map +1 -0
  31. package/dist/serializer.helper.js +46 -0
  32. package/dist/serializer.helper.js.map +1 -0
  33. package/dist/social-url.helper.d.ts +8 -0
  34. package/dist/social-url.helper.d.ts.map +1 -0
  35. package/dist/social-url.helper.js +50 -0
  36. package/dist/social-url.helper.js.map +1 -0
  37. package/dist/types/model-like.type.d.ts +32 -0
  38. package/dist/types/model-like.type.d.ts.map +1 -0
  39. package/dist/types/model-like.type.js +3 -0
  40. package/dist/types/model-like.type.js.map +1 -0
  41. package/dist/video-duration.helper.d.ts +9 -0
  42. package/dist/video-duration.helper.d.ts.map +1 -0
  43. package/dist/video-duration.helper.js +43 -0
  44. package/dist/video-duration.helper.js.map +1 -0
  45. package/package.json +50 -0
@@ -0,0 +1,443 @@
1
+ /**
2
+ * Genfeed.ai Pricing Configuration
3
+ *
4
+ * SINGLE SOURCE OF TRUTH for all pricing across the platform.
5
+ * See: https://github.com/genfeedai/cloud/issues?q=is%3Aissue+pricing
6
+ *
7
+ * Pricing Strategy:
8
+ * - Output-based pricing (videos, images, voice) - NOT credit-based
9
+ * - Premium positioning ($499-$4,999/month)
10
+ * - Credits are tracked internally but NEVER shown to users
11
+ * - Auto-select premium AI models (no user decision fatigue)
12
+ *
13
+ * @updated 2026-01-21
14
+ */
15
+ const CALENDLY_URL = process.env.NEXT_PUBLIC_CALENDLY_URL ||
16
+ 'https://calendly.com/vincent-genfeed/30min';
17
+ const STRIPE_PRICE_IDS = {
18
+ creator: process.env.NEXT_PUBLIC_STRIPE_PRICE_SUBSCRIPTION_CREATOR_MONTHLY,
19
+ enterprise: process.env.NEXT_PUBLIC_STRIPE_PRICE_SUBSCRIPTION_ENTERPRISE_MONTHLY,
20
+ // Convenience aliases
21
+ monthly: process.env.NEXT_PUBLIC_STRIPE_PRICE_SUBSCRIPTION_PRO_MONTHLY,
22
+ pro: process.env.NEXT_PUBLIC_STRIPE_PRICE_SUBSCRIPTION_PRO_MONTHLY,
23
+ scale: process.env.NEXT_PUBLIC_STRIPE_PRICE_SUBSCRIPTION_SCALE_MONTHLY,
24
+ };
25
+ /**
26
+ * BYOK Platform Fee Configuration
27
+ * 5% fee on BYOK usage after a free monthly threshold.
28
+ * Exchange rate: 1 credit = $0.01
29
+ */
30
+ export const BYOK_FEE_PERCENTAGE = 5;
31
+ export const BYOK_FREE_THRESHOLD_CREDITS = 500;
32
+ export const BYOK_CREDIT_VALUE_DOLLARS = 0.01;
33
+ export const BYOK_FEE_PER_CREDIT = BYOK_CREDIT_VALUE_DOLLARS * (BYOK_FEE_PERCENTAGE / 100);
34
+ /**
35
+ * Apply 70% margin to a provider cost in USD.
36
+ * Returns the sell price in credits (1 credit = $0.01).
37
+ *
38
+ * Formula: Sell Price (USD) = providerCostUsd / 0.30
39
+ * Credits = Sell Price / BYOK_CREDIT_VALUE_DOLLARS
40
+ *
41
+ * @example applyMargin(0.15) → 50 credits ($0.50 sell price on $0.15 cost)
42
+ * @example applyMargin(0.50) → 167 credits ($1.67 sell price on $0.50 cost)
43
+ */
44
+ export function applyMargin(providerCostUsd) {
45
+ const sellPriceUsd = providerCostUsd / 0.3;
46
+ const credits = Math.ceil(sellPriceUsd / BYOK_CREDIT_VALUE_DOLLARS);
47
+ return Math.max(credits, 2); // absolute minimum floor
48
+ }
49
+ /**
50
+ * Internal credit costs (hidden from users)
51
+ * Used for margin tracking and cost accounting only
52
+ *
53
+ * Exchange rate: 1 credit = $0.01
54
+ * Pricing formula: Sell Price = Cost / 0.30 (70% margin target)
55
+ *
56
+ * See: https://github.com/genfeedai/cloud/issues?q=is%3Aissue+pricing
57
+ */
58
+ export const INTERNAL_CREDIT_COSTS = {
59
+ /** Avatar/Lip-sync per second: 100 credits = $1.00/sec */
60
+ avatarPerSecond: 100,
61
+ /** Image (1K/2K): 50 credits = $0.50 (70% margin on $0.15 cost) */
62
+ image: 50,
63
+ /** Image (4K): 100 credits = $1.00 (70% margin on $0.30 cost) */
64
+ image4k: 100,
65
+ /** Video per second: 75 credits = $0.75/sec */
66
+ videoPerSecond: 75,
67
+ /** Voice per minute: 17 credits = $0.17 (70% margin on $0.05 cost) */
68
+ voicePerMinute: 17,
69
+ };
70
+ /**
71
+ * Video duration helpers
72
+ * Standard video durations and their credit costs
73
+ */
74
+ export const VIDEO_CREDIT_COSTS = {
75
+ /** 4 second video: 300 credits = $3.00 */
76
+ video4s: INTERNAL_CREDIT_COSTS.videoPerSecond * 4,
77
+ /** 8 second video: 600 credits = $6.00 */
78
+ video8s: INTERNAL_CREDIT_COSTS.videoPerSecond * 8,
79
+ /** 15 second video: 1125 credits = $11.25 */
80
+ video15s: INTERNAL_CREDIT_COSTS.videoPerSecond * 15,
81
+ };
82
+ /**
83
+ * Avatar duration helpers
84
+ * Standard avatar durations and their credit costs
85
+ */
86
+ export const AVATAR_CREDIT_COSTS = {
87
+ /** 4 second avatar: 400 credits = $4.00 */
88
+ avatar4s: INTERNAL_CREDIT_COSTS.avatarPerSecond * 4,
89
+ /** 8 second avatar: 800 credits = $8.00 */
90
+ avatar8s: INTERNAL_CREDIT_COSTS.avatarPerSecond * 8,
91
+ /** 15 second avatar: 1500 credits = $15.00 */
92
+ avatar15s: INTERNAL_CREDIT_COSTS.avatarPerSecond * 15,
93
+ };
94
+ /**
95
+ * Website pricing plans - displayed on public pricing page
96
+ * Output-based pricing for premium positioning
97
+ */
98
+ export const websitePlans = [
99
+ // BYOK Tier - Bring Your Own Key (entry tier, $0)
100
+ {
101
+ cta: 'Start Free',
102
+ ctaHref: '/sign-up',
103
+ description: 'Use your own AI keys, pay nothing',
104
+ features: [
105
+ 'Full platform access',
106
+ 'Bring your own AI keys (OpenAI, Anthropic, Replicate, etc.)',
107
+ 'All core features',
108
+ 'Multi-platform publishing',
109
+ 'Content library',
110
+ 'Community support',
111
+ ],
112
+ interval: 'payg',
113
+ label: 'BYOK',
114
+ outputs: null,
115
+ price: 0,
116
+ target: 'Developers, creators with own API keys',
117
+ type: 'byok',
118
+ valueProposition: 'Full platform access with your own AI keys. You pay providers directly.',
119
+ },
120
+ // Pro Tier - $499/month
121
+ {
122
+ cta: 'Subscribe',
123
+ ctaHref: `${process.env.NEXT_PUBLIC_APPS_APP_ENDPOINT || 'https://app.genfeed.ai'}/sign-up?plan=pro`,
124
+ description: 'For serious creators and small agencies',
125
+ features: [
126
+ '5 min video/month',
127
+ '500 images/month',
128
+ '60 min voice/month',
129
+ '2 team seats',
130
+ '1 brand kit',
131
+ 'Premium AI models (auto-selected)',
132
+ 'Multi-platform publishing',
133
+ 'Email support (48hr)',
134
+ ],
135
+ interval: 'month',
136
+ label: 'Pro',
137
+ outputs: {
138
+ images: 500,
139
+ videoMinutes: 5,
140
+ voiceMinutes: 60,
141
+ },
142
+ price: 499,
143
+ stripePriceId: STRIPE_PRICE_IDS.pro,
144
+ target: 'Serious creators, small agencies (1-3 people)',
145
+ type: 'subscription',
146
+ valueProposition: 'Studio-quality video, images, and voice—for less than a single production day.',
147
+ },
148
+ // Scale Tier - $1,499/month
149
+ {
150
+ cta: 'Subscribe',
151
+ ctaHref: `${process.env.NEXT_PUBLIC_APPS_APP_ENDPOINT || 'https://app.genfeed.ai'}/sign-up?plan=scale`,
152
+ description: 'For agencies managing multiple brands',
153
+ features: [
154
+ '15 min video/month',
155
+ '2,000 images/month',
156
+ '200 min voice/month',
157
+ '10 team seats',
158
+ '5 brand kits',
159
+ 'All AI models (your choice)',
160
+ 'Priority support (24hr)',
161
+ 'Read-only API access',
162
+ 'Advanced analytics',
163
+ 'Custom domains',
164
+ ],
165
+ interval: 'month',
166
+ label: 'Scale',
167
+ outputs: {
168
+ images: 2000,
169
+ videoMinutes: 15,
170
+ voiceMinutes: 200,
171
+ },
172
+ price: 1499,
173
+ stripePriceId: STRIPE_PRICE_IDS.scale,
174
+ target: 'Agencies managing multiple brands (5-15 people)',
175
+ type: 'subscription',
176
+ valueProposition: 'Run 5 client accounts with enough output for daily content across all channels.',
177
+ },
178
+ // Enterprise Tier - $4,999/month
179
+ {
180
+ cta: 'Book a Call',
181
+ ctaHref: CALENDLY_URL,
182
+ description: 'For studios and large teams',
183
+ features: [
184
+ 'Unlimited video',
185
+ 'Unlimited images',
186
+ 'Unlimited voice',
187
+ 'Unlimited team seats',
188
+ 'Unlimited brand kits',
189
+ 'Full read/write API access',
190
+ 'White-label (custom domain + branding)',
191
+ 'Dedicated Slack support',
192
+ 'SSO & team management',
193
+ 'Dedicated account manager',
194
+ 'SLA 99.9% uptime',
195
+ ],
196
+ interval: 'month',
197
+ label: 'Enterprise',
198
+ outputs: null, // Unlimited
199
+ price: 4999,
200
+ stripePriceId: STRIPE_PRICE_IDS.enterprise,
201
+ target: 'Studios, white-label partners, large teams',
202
+ type: 'enterprise',
203
+ valueProposition: 'Your own AI content studio, fully managed.',
204
+ },
205
+ ];
206
+ /**
207
+ * Get plan by label
208
+ */
209
+ export function getPlanByLabel(label) {
210
+ return websitePlans.find((plan) => plan.label.toLowerCase() === label.toLowerCase());
211
+ }
212
+ /**
213
+ * Get Pro tier plan
214
+ */
215
+ export function getProPlan() {
216
+ return websitePlans.find((plan) => plan.label === 'Pro');
217
+ }
218
+ /**
219
+ * Get Scale tier plan
220
+ */
221
+ export function getScalePlan() {
222
+ return websitePlans.find((plan) => plan.label === 'Scale');
223
+ }
224
+ /**
225
+ * Get Enterprise tier plan
226
+ */
227
+ export function getEnterprisePlan() {
228
+ return websitePlans.find((plan) => plan.label === 'Enterprise');
229
+ }
230
+ /**
231
+ * Format price for display
232
+ */
233
+ export function formatPrice(price) {
234
+ if (price === null) {
235
+ return 'Contact Sales';
236
+ }
237
+ if (price === 0) {
238
+ return 'Free';
239
+ }
240
+ return `$${price.toLocaleString()}`;
241
+ }
242
+ /**
243
+ * Format outputs for display
244
+ */
245
+ export function formatOutputs(outputs) {
246
+ if (!outputs) {
247
+ return null;
248
+ }
249
+ const parts = [];
250
+ if (outputs.videoMinutes) {
251
+ parts.push(`${outputs.videoMinutes} min video`);
252
+ }
253
+ if (outputs.images) {
254
+ parts.push(`${outputs.images.toLocaleString()} images`);
255
+ }
256
+ if (outputs.voiceMinutes) {
257
+ parts.push(`${outputs.voiceMinutes} min voice`);
258
+ }
259
+ return parts.join(' \u00b7 ');
260
+ }
261
+ /**
262
+ * Creator Tier - $50/month (UNLISTED - invite only)
263
+ *
264
+ * This is a secret offering for individual content creators.
265
+ * NOT displayed on the website or pricing page.
266
+ * Only accessible via direct link or invite.
267
+ */
268
+ export const creatorPlan = {
269
+ cta: 'Subscribe',
270
+ ctaHref: '/checkout/creator',
271
+ description: 'For individual content creators',
272
+ features: [
273
+ '1 min video/month',
274
+ '50 images/month',
275
+ '15 min voice/month',
276
+ '1 team seat',
277
+ '1 brand kit',
278
+ 'Premium AI models (auto-selected)',
279
+ 'Email support',
280
+ ],
281
+ interval: 'month',
282
+ label: 'Creator',
283
+ outputs: {
284
+ images: 50,
285
+ videoMinutes: 1,
286
+ voiceMinutes: 15,
287
+ },
288
+ price: 50,
289
+ stripePriceId: STRIPE_PRICE_IDS.creator,
290
+ target: 'Individual content creators',
291
+ type: 'subscription',
292
+ valueProposition: '5 studio-quality AI videos per month for less than a coffee a day.',
293
+ };
294
+ /**
295
+ * Get Creator tier plan (unlisted)
296
+ */
297
+ export function getCreatorPlan() {
298
+ return creatorPlan;
299
+ }
300
+ /**
301
+ * Dedicated Server plan - Custom pricing for open-source models on dedicated infrastructure
302
+ */
303
+ export const dedicatedServerPlan = {
304
+ cta: 'Book a Call',
305
+ ctaHref: CALENDLY_URL,
306
+ description: 'Your own AI infrastructure with managed content creation',
307
+ features: [
308
+ 'Dedicated server infrastructure',
309
+ 'Run any open-source model (Llama, Mistral, SD, etc.)',
310
+ 'No API rate limits or quotas',
311
+ 'Managed content creation service',
312
+ 'Full control over model selection',
313
+ 'Cost-based pricing (server costs only)',
314
+ ],
315
+ interval: 'month',
316
+ label: 'Dedicated',
317
+ outputs: null,
318
+ price: null,
319
+ target: 'Studios and brands wanting unlimited open-source AI',
320
+ type: 'enterprise',
321
+ valueProposition: 'Run unlimited open-source models on your own dedicated server.',
322
+ };
323
+ export const PAYG_CREDIT_PACKS = [
324
+ { bonus: null, credits: 9_900, label: 'Starter' },
325
+ { bonus: null, credits: 49_900, label: 'Creator' },
326
+ { bonus: 10_000, credits: 99_900, label: 'Pro' },
327
+ { bonus: 37_500, credits: 249_900, label: 'Business' },
328
+ { bonus: 100_000, credits: 499_900, label: 'Scale' },
329
+ ];
330
+ /** Subset of credit packs shown on public pages (website, home). Settings/checkout use full list. */
331
+ export const WEBSITE_CREDIT_PACKS = PAYG_CREDIT_PACKS.filter((p) => ['Starter', 'Pro', 'Scale'].includes(p.label));
332
+ /**
333
+ * Get total credits for a pack (base + bonus).
334
+ */
335
+ export function creditPackTotalCredits(pack) {
336
+ return pack.credits + (pack.bonus ?? 0);
337
+ }
338
+ /**
339
+ * Convert credits to approximate output estimates.
340
+ * Uses INTERNAL_CREDIT_COSTS for calculations.
341
+ */
342
+ export function creditsToOutputEstimate(credits) {
343
+ const rawImages = credits / INTERNAL_CREDIT_COSTS.image;
344
+ const rawVideoMin = credits / INTERNAL_CREDIT_COSTS.videoPerSecond / 60;
345
+ const rawVoiceMin = credits / INTERNAL_CREDIT_COSTS.voicePerMinute;
346
+ return {
347
+ images: Math.round(rawImages / 100) * 100,
348
+ videoMinutes: Math.round(rawVideoMin),
349
+ voiceMinutes: Math.round(rawVoiceMin / 100) * 100,
350
+ };
351
+ }
352
+ /**
353
+ * Calculate the dollar price for a credit pack.
354
+ * Exchange rate: 1 credit = $0.01 (bonus credits are free).
355
+ */
356
+ export function creditPackPrice(pack) {
357
+ return pack.credits * 0.01;
358
+ }
359
+ /**
360
+ * Done-For-You content service offering
361
+ * Full-service content creation retainer
362
+ */
363
+ export const contentServiceOffering = {
364
+ ctaHref: CALENDLY_URL,
365
+ description: 'We handle everything — strategy, production, publishing. You review and approve.',
366
+ includes: [
367
+ 'Dedicated content strategist',
368
+ 'Unlimited video production',
369
+ 'Unlimited image generation',
370
+ 'AI voice production',
371
+ 'Social media copywriting',
372
+ 'Multi-platform scheduling',
373
+ 'Brand kit management',
374
+ 'Monthly content calendar',
375
+ 'Performance reporting',
376
+ 'Unlimited revisions',
377
+ ],
378
+ name: 'Done-For-You Content',
379
+ process: [
380
+ {
381
+ description: 'We learn your brand, audience, and goals in a 30-minute call.',
382
+ step: 'Discovery Call',
383
+ },
384
+ {
385
+ description: 'We build your monthly content calendar with topics, formats, and channels.',
386
+ step: 'Strategy & Calendar',
387
+ },
388
+ {
389
+ description: 'Our team creates all content — videos, images, copy — using Genfeed AI.',
390
+ step: 'Production',
391
+ },
392
+ {
393
+ description: 'You review, request changes, and we publish across all platforms.',
394
+ step: 'Review & Publish',
395
+ },
396
+ ],
397
+ };
398
+ /**
399
+ * Setup & Training packages
400
+ * One-time onboarding and training sessions
401
+ */
402
+ export const TRAINING_PACKAGES = [
403
+ {
404
+ ctaHref: CALENDLY_URL,
405
+ description: 'Get up and running in under an hour.',
406
+ includes: [
407
+ 'Workspace configuration',
408
+ '1 brand kit setup',
409
+ '1-hour platform overview',
410
+ 'Publishing setup walkthrough',
411
+ 'Email support for 7 days',
412
+ ],
413
+ name: 'Quick Start',
414
+ priceLabel: '$299',
415
+ },
416
+ {
417
+ ctaHref: CALENDLY_URL,
418
+ description: 'Custom deep-dive for advanced use cases.',
419
+ includes: [
420
+ 'Custom agenda based on your needs',
421
+ '2-hour live workshop',
422
+ 'Session recording',
423
+ 'Q&A follow-up',
424
+ 'Email support for 14 days',
425
+ ],
426
+ name: 'Training Sessions',
427
+ priceLabel: '$499',
428
+ },
429
+ {
430
+ ctaHref: CALENDLY_URL,
431
+ description: 'Full onboarding for teams ready to scale.',
432
+ includes: [
433
+ 'Up to 5 brand kits',
434
+ 'Full team training session',
435
+ 'Content strategy session',
436
+ 'Integration setup (socials, CMS)',
437
+ '30-day email support',
438
+ ],
439
+ name: 'Full Onboarding',
440
+ priceLabel: '$999',
441
+ },
442
+ ];
443
+ //# sourceMappingURL=pricing.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.helper.js","sourceRoot":"","sources":["../../../src/business/pricing/pricing.helper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { QualityTier, SubscriptionTier } from '@genfeedai/enums';
2
+ /**
3
+ * Maps subscription tiers to their allowed quality tiers.
4
+ * Higher tiers get access to more quality options.
5
+ */
6
+ export declare const TIER_QUALITY_ACCESS: Record<SubscriptionTier, QualityTier[]>;
7
+ /**
8
+ * Get all allowed quality tiers for a subscription tier.
9
+ * Returns BASIC only for unknown tiers.
10
+ */
11
+ export declare function getQualityTiersForSubscription(tier: SubscriptionTier): QualityTier[];
12
+ /**
13
+ * Check if a subscription tier has access to a specific quality tier.
14
+ */
15
+ export declare function hasQualityAccess(subscriptionTier: SubscriptionTier, qualityTier: QualityTier): boolean;
16
+ //# sourceMappingURL=tier-models.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier-models.helper.d.ts","sourceRoot":"","sources":["../../../src/business/tier-models/tier-models.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEjE;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,gBAAgB,EAAE,WAAW,EAAE,CAqBvE,CAAC;AAEF;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,gBAAgB,GACrB,WAAW,EAAE,CAEf;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,WAAW,GACvB,OAAO,CAGT"}
@@ -0,0 +1,42 @@
1
+ import { QualityTier, SubscriptionTier } from '@genfeedai/enums';
2
+ /**
3
+ * Maps subscription tiers to their allowed quality tiers.
4
+ * Higher tiers get access to more quality options.
5
+ */
6
+ export const TIER_QUALITY_ACCESS = {
7
+ [SubscriptionTier.FREE]: [QualityTier.BASIC],
8
+ [SubscriptionTier.BYOK]: [QualityTier.BASIC],
9
+ [SubscriptionTier.CREATOR]: [QualityTier.BASIC, QualityTier.STANDARD],
10
+ [SubscriptionTier.PRO]: [
11
+ QualityTier.BASIC,
12
+ QualityTier.STANDARD,
13
+ QualityTier.HIGH,
14
+ ],
15
+ [SubscriptionTier.SCALE]: [
16
+ QualityTier.BASIC,
17
+ QualityTier.STANDARD,
18
+ QualityTier.HIGH,
19
+ QualityTier.ULTRA,
20
+ ],
21
+ [SubscriptionTier.ENTERPRISE]: [
22
+ QualityTier.BASIC,
23
+ QualityTier.STANDARD,
24
+ QualityTier.HIGH,
25
+ QualityTier.ULTRA,
26
+ ],
27
+ };
28
+ /**
29
+ * Get all allowed quality tiers for a subscription tier.
30
+ * Returns BASIC only for unknown tiers.
31
+ */
32
+ export function getQualityTiersForSubscription(tier) {
33
+ return TIER_QUALITY_ACCESS[tier] ?? [QualityTier.BASIC];
34
+ }
35
+ /**
36
+ * Check if a subscription tier has access to a specific quality tier.
37
+ */
38
+ export function hasQualityAccess(subscriptionTier, qualityTier) {
39
+ const allowed = TIER_QUALITY_ACCESS[subscriptionTier];
40
+ return allowed ? allowed.includes(qualityTier) : false;
41
+ }
42
+ //# sourceMappingURL=tier-models.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier-models.helper.js","sourceRoot":"","sources":["../../../src/business/tier-models/tier-models.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEjE;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA4C;IAC1E,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;IAC5C,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;IAC5C,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC;IACrE,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE;QACtB,WAAW,CAAC,KAAK;QACjB,WAAW,CAAC,QAAQ;QACpB,WAAW,CAAC,IAAI;KACjB;IACD,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;QACxB,WAAW,CAAC,KAAK;QACjB,WAAW,CAAC,QAAQ;QACpB,WAAW,CAAC,IAAI;QAChB,WAAW,CAAC,KAAK;KAClB;IACD,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE;QAC7B,WAAW,CAAC,KAAK;QACjB,WAAW,CAAC,QAAQ;QACpB,WAAW,CAAC,IAAI;QAChB,WAAW,CAAC,KAAK;KAClB;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,8BAA8B,CAC5C,IAAsB;IAEtB,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,gBAAkC,EAClC,WAAwB;IAExB,MAAM,OAAO,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IACtD,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACzD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { getDeserializer, isDeserializerRuntime, type JsonApiDocument, type JsonApiResource, } from '@genfeedai/deserializer';
2
+ //# sourceMappingURL=deserializer.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deserializer.helper.d.ts","sourceRoot":"","sources":["../src/deserializer.helper.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,3 @@
1
+ // Canonical implementation lives in @genfeedai/deserializer
2
+ export { getDeserializer, isDeserializerRuntime, } from '@genfeedai/deserializer';
3
+ //# sourceMappingURL=deserializer.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deserializer.helper.js","sourceRoot":"","sources":["../src/deserializer.helper.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,OAAO,EACL,eAAe,EACf,qBAAqB,GAGtB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,10 @@
1
+ export * from '@helpers/aspect-ratio.helper';
2
+ export * from '@helpers/business/pricing/pricing.helper';
3
+ export * from '@helpers/business/tier-models/tier-models.helper';
4
+ export * from '@helpers/deserializer.helper';
5
+ export * from '@helpers/model-capability.helper';
6
+ export * from '@helpers/quality-routing.helper';
7
+ export * from '@helpers/serializer.helper';
8
+ export * from '@helpers/social-url.helper';
9
+ export * from '@helpers/video-duration.helper';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0CAA0C,CAAC;AACzD,cAAc,kDAAkD,CAAC;AACjE,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ export * from '@helpers/aspect-ratio.helper';
2
+ export * from '@helpers/business/pricing/pricing.helper';
3
+ export * from '@helpers/business/tier-models/tier-models.helper';
4
+ export * from '@helpers/deserializer.helper';
5
+ export * from '@helpers/model-capability.helper';
6
+ export * from '@helpers/quality-routing.helper';
7
+ export * from '@helpers/serializer.helper';
8
+ export * from '@helpers/social-url.helper';
9
+ export * from '@helpers/video-duration.helper';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0CAA0C,CAAC;AACzD,cAAc,kDAAkD,CAAC;AACjE,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type ModelOutputCapability } from '@genfeedai/constants';
2
+ import type { IModel } from '@genfeedai/interfaces';
3
+ /**
4
+ * Build a ModelOutputCapability from DB fields on the IModel document.
5
+ * Returns null if the model has no capability fields populated (maxOutputs is undefined).
6
+ */
7
+ export declare function getModelCapabilityFromDoc(model: IModel): ModelOutputCapability | null;
8
+ /**
9
+ * Get capability from DB fields first, falling back to the static constant.
10
+ */
11
+ export declare function getModelCapability(model: IModel): ModelOutputCapability | null;
12
+ /**
13
+ * Get capability by model key string. If an IModel document is provided,
14
+ * uses DB fields with constant fallback. Otherwise looks up the static constant only.
15
+ */
16
+ export declare function getModelCapabilityByKey(modelKey: string, model?: IModel): ModelOutputCapability | null;
17
+ //# sourceMappingURL=model-capability.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-capability.helper.d.ts","sourceRoot":"","sources":["../src/model-capability.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,qBAAqB,EAO3B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AA2KpD;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,GACZ,qBAAqB,GAAG,IAAI,CAY9B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,GACZ,qBAAqB,GAAG,IAAI,CAM9B;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,GACb,qBAAqB,GAAG,IAAI,CAM9B"}