vidspotai-shared 1.0.87 → 1.0.88
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/lib/globals/creditUnit.d.ts +17 -0
- package/lib/globals/creditUnit.d.ts.map +1 -1
- package/lib/globals/creditUnit.js +18 -1
- package/lib/globals/index.d.ts +1 -0
- package/lib/globals/index.d.ts.map +1 -1
- package/lib/globals/index.js +1 -0
- package/lib/globals/types.d.ts +11 -2
- package/lib/globals/types.d.ts.map +1 -1
- package/lib/globals/types.js +9 -0
- package/lib/models/agent.model.d.ts +18 -0
- package/lib/models/agent.model.d.ts.map +1 -1
- package/lib/models/video.model.d.ts +11 -0
- package/lib/models/video.model.d.ts.map +1 -1
- package/lib/schemas/agentRunJob.schema.d.ts +1 -0
- package/lib/schemas/agentRunJob.schema.d.ts.map +1 -1
- package/lib/schemas/agentRunJob.schema.js +9 -0
- package/lib/services/agent/beatSnap.d.ts +3 -0
- package/lib/services/agent/beatSnap.d.ts.map +1 -1
- package/lib/services/agent/beatSnap.js +5 -0
- package/lib/services/agent/executor/core.d.ts +6 -0
- package/lib/services/agent/executor/core.d.ts.map +1 -1
- package/lib/services/agent/executor/core.js +45 -0
- package/lib/services/agent/executor/types.d.ts +29 -0
- package/lib/services/agent/executor/types.d.ts.map +1 -1
- package/lib/services/agent/executor/visual.d.ts.map +1 -1
- package/lib/services/agent/executor/visual.js +7 -0
- package/lib/services/agent/index.d.ts +1 -0
- package/lib/services/agent/index.d.ts.map +1 -1
- package/lib/services/agent/index.js +1 -0
- package/lib/services/agent/resnapVo.d.ts +51 -0
- package/lib/services/agent/resnapVo.d.ts.map +1 -0
- package/lib/services/agent/resnapVo.js +102 -0
- package/lib/services/aiGen/providers/alibaba/alibaba.d.ts +1 -1
- package/lib/services/aiGen/providers/alibaba/alibaba.d.ts.map +1 -1
- package/lib/services/aiGen/providers/alibaba/alibaba.js +2 -2
- package/lib/services/aiGen/providers/bytedance/bytedance.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/bytedance/bytedance.service.js +8 -0
- package/lib/services/aiGen/providers/google/google.service.d.ts +1 -1
- package/lib/services/aiGen/providers/google/google.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/google/google.service.js +71 -16
- package/lib/services/aiGen/providers/google/googleErrors.d.ts +28 -0
- package/lib/services/aiGen/providers/google/googleErrors.d.ts.map +1 -1
- package/lib/services/aiGen/providers/google/googleErrors.js +75 -2
- package/lib/services/aiGen/providers/google/googleKeyPool.d.ts +8 -1
- package/lib/services/aiGen/providers/google/googleKeyPool.d.ts.map +1 -1
- package/lib/services/aiGen/providers/google/googleKeyPool.js +77 -9
- package/lib/services/aiGen/providers/kling/klingImage.service.d.ts +1 -1
- package/lib/services/aiGen/providers/kling/klingImage.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/kling/klingImage.service.js +3 -3
- package/lib/services/aiGen/providers/minimax/minimax.service.d.ts +1 -1
- package/lib/services/aiGen/providers/minimax/minimax.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/minimax/minimax.service.js +16 -7
- package/lib/services/aiGen/providers/openai/openai.service.d.ts +1 -1
- package/lib/services/aiGen/providers/openai/openai.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/openai/openai.service.js +13 -3
- package/lib/services/aiGen/providers/runway/runway.service.d.ts +1 -1
- package/lib/services/aiGen/providers/runway/runway.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/runway/runway.service.js +3 -3
- package/lib/services/aiGen/providers/types.d.ts +8 -0
- package/lib/services/aiGen/providers/types.d.ts.map +1 -1
- package/lib/services/bullmq.service.d.ts.map +1 -1
- package/lib/services/bullmq.service.js +13 -5
- package/lib/services/freePlan/index.d.ts +38 -0
- package/lib/services/freePlan/index.d.ts.map +1 -0
- package/lib/services/freePlan/index.js +55 -0
- package/lib/services/index.d.ts +1 -0
- package/lib/services/index.d.ts.map +1 -1
- package/lib/services/index.js +1 -0
- package/lib/utils/errors.d.ts +23 -0
- package/lib/utils/errors.d.ts.map +1 -1
- package/lib/utils/errors.js +75 -1
- package/lib/utils/helpers.d.ts +8 -1
- package/lib/utils/helpers.d.ts.map +1 -1
- package/lib/utils/helpers.js +9 -2
- package/package.json +1 -1
|
@@ -16,6 +16,6 @@ export declare class KlingImageService extends BaseAiGenProviderService {
|
|
|
16
16
|
private pollUntilDone;
|
|
17
17
|
private uploadToStorage;
|
|
18
18
|
generateImage(params: ImageGenerationParams): Promise<ImageGenerationResult>;
|
|
19
|
-
getCreditUsed({ modelKey, numImages, multiClip }: CreditUsageParams): number;
|
|
19
|
+
getCreditUsed({ modelKey, numImages, multiClip, creditFloor }: CreditUsageParams): number;
|
|
20
20
|
}
|
|
21
21
|
//# sourceMappingURL=klingImage.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"klingImage.service.d.ts","sourceRoot":"","sources":["../../../../../src/services/aiGen/providers/kling/klingImage.service.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AA2C3F,qBAAa,iBAAkB,SAAQ,wBAAwB;IAC7D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAE/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;IAExC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IAEtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IAErC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAGxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkD;IAC9E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmD;;IAWhF,OAAO,CAAC,cAAc;YAUR,OAAO;YA6BP,mBAAmB;YAsCnB,uBAAuB;YAmCvB,aAAa;YA+Bb,eAAe;IAmBvB,aAAa,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAuClF,aAAa,CAAC,EAAE,QAAQ,EAAE,SAAa,EAAE,SAAiB,EAAE,EAAE,iBAAiB,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"klingImage.service.d.ts","sourceRoot":"","sources":["../../../../../src/services/aiGen/providers/kling/klingImage.service.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AA2C3F,qBAAa,iBAAkB,SAAQ,wBAAwB;IAC7D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAE/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;IAExC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IAEtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IAErC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAGxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkD;IAC9E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmD;;IAWhF,OAAO,CAAC,cAAc;YAUR,OAAO;YA6BP,mBAAmB;YAsCnB,uBAAuB;YAmCvB,aAAa;YA+Bb,eAAe;IAmBvB,aAAa,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAuClF,aAAa,CAAC,EAAE,QAAQ,EAAE,SAAa,EAAE,SAAiB,EAAE,WAAW,EAAE,EAAE,iBAAiB,GAAG,MAAM;CAStG"}
|
|
@@ -195,14 +195,14 @@ class KlingImageService extends baseAiGenProvider_service_1.BaseAiGenProviderSer
|
|
|
195
195
|
imageUrls: signedUrls.length > 1 ? signedUrls : undefined,
|
|
196
196
|
};
|
|
197
197
|
}
|
|
198
|
-
getCreditUsed({ modelKey, numImages = 1, multiClip = false }) {
|
|
198
|
+
getCreditUsed({ modelKey, numImages = 1, multiClip = false, creditFloor }) {
|
|
199
199
|
const modelConfig = aiModels_1.aiModelConfigs[modelKey];
|
|
200
200
|
const cost = modelConfig?.cost?.fixed;
|
|
201
201
|
if (cost === undefined) {
|
|
202
202
|
logger_1.logger.warn(`KlingImageService.getCreditUsed: no fixed cost for "${modelKey}" — using fallback`);
|
|
203
|
-
return (0, helpers_1.getCreditsFromCost)(0.05 * Math.max(1, numImages), !multiClip);
|
|
203
|
+
return (0, helpers_1.getCreditsFromCost)(0.05 * Math.max(1, numImages), !multiClip, creditFloor);
|
|
204
204
|
}
|
|
205
|
-
return (0, helpers_1.getCreditsFromCost)(cost * Math.max(1, numImages), !multiClip);
|
|
205
|
+
return (0, helpers_1.getCreditsFromCost)(cost * Math.max(1, numImages), !multiClip, creditFloor);
|
|
206
206
|
}
|
|
207
207
|
}
|
|
208
208
|
exports.KlingImageService = KlingImageService;
|
|
@@ -25,6 +25,6 @@ export declare class MinimaxService extends BaseAiGenProviderService {
|
|
|
25
25
|
* { model, prompt, lyrics?, refer_voice?, audio_setting: { sample_rate, bitrate, format } }
|
|
26
26
|
*/
|
|
27
27
|
generateMusic(params: MusicGenerationParams): Promise<MusicGenerationResult>;
|
|
28
|
-
getCreditUsed({ modelKey, resolution, duration, multiClip, numImages, }: CreditUsageParams): number;
|
|
28
|
+
getCreditUsed({ modelKey, resolution, duration, multiClip, numImages, creditFloor, }: CreditUsageParams): number;
|
|
29
29
|
}
|
|
30
30
|
//# sourceMappingURL=minimax.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"minimax.service.d.ts","sourceRoot":"","sources":["../../../../../src/services/aiGen/providers/minimax/minimax.service.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAUlB;;;GAGG;AAGH,eAAO,MAAM,+BAA+B,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"minimax.service.d.ts","sourceRoot":"","sources":["../../../../../src/services/aiGen/providers/minimax/minimax.service.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAUlB;;;GAGG;AAGH,eAAO,MAAM,+BAA+B,uBAAuB,CAAC;AA+GpE,qBAAa,cAAe,SAAQ,wBAAwB;IAC1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IAEpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;;YAUlB,OAAO;IAuDf,aAAa,CACjB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IAgE3B,gBAAgB,CAAC,EACrB,IAAI,EACJ,cAAc,EACd,cAAyB,GAC1B,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA6EjD;;;;OAIG;IACG,aAAa,CACjB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IAuDjC;;;;;OAKG;IACG,aAAa,CACjB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IA+CjC,aAAa,CAAC,EACZ,QAAQ,EACR,UAAmB,EACnB,QAAY,EACZ,SAAiB,EACjB,SAAa,EACb,WAAW,GACZ,EAAE,iBAAiB,GAAG,MAAM;CAgC9B"}
|
|
@@ -56,12 +56,21 @@ function classifyMinimaxError(code, msg) {
|
|
|
56
56
|
case 1027:
|
|
57
57
|
return { message: "Your request was declined because the generated content was flagged for sensitive material. Please adjust your prompt and try again.", code: errors_1.USER_FACING_ERROR_CODES.CONTENT_POLICY_VIOLATION, isUserInput: true };
|
|
58
58
|
case 1002:
|
|
59
|
-
//
|
|
60
|
-
//
|
|
61
|
-
//
|
|
62
|
-
|
|
59
|
+
// MiniMax code 1002 = "trigger rate limit" (transient throttle, per the
|
|
60
|
+
// base_resp spec) — NOT balance depletion (that's 1008 below). Treated as
|
|
61
|
+
// user-facing so the frontend shows a translated retry message AND so the
|
|
62
|
+
// pipeline logs it as warn (no Slack page for an upstream throttle).
|
|
63
|
+
return { message: "The request was rejected due to a rate limit. Please try again in a moment.", code: errors_1.USER_FACING_ERROR_CODES.VIDEO_PROVIDER_RATE_LIMITED, isUserInput: true };
|
|
64
|
+
case 1008:
|
|
65
|
+
// 1008 = "insufficient balance" — OUR MiniMax account is out of credit.
|
|
66
|
+
// This is an ops-actionable billing outage (top up the account), not a
|
|
67
|
+
// user error, so it MUST page: ACCOUNT_QUOTA_EXCEEDED is not in the
|
|
68
|
+
// non-paging set. isUserInput:false so it isn't prefixed/suppressed.
|
|
69
|
+
return { message: "The video service is temporarily unavailable due to an account limit. Please try again later.", code: errors_1.USER_FACING_ERROR_CODES.ACCOUNT_QUOTA_EXCEEDED, isUserInput: false };
|
|
63
70
|
case 1004:
|
|
64
|
-
|
|
71
|
+
// 1004 = authentication failed — a bad/revoked MiniMax key (deploy/config
|
|
72
|
+
// fault). Must page: PROVIDER_AUTH_ERROR is not in the non-paging set.
|
|
73
|
+
return { message: "Authorization failed for the video generation service. Please contact support.", code: errors_1.USER_FACING_ERROR_CODES.PROVIDER_AUTH_ERROR, isUserInput: false };
|
|
65
74
|
default:
|
|
66
75
|
return { message: msg || `Generation failed (code ${code})`, isUserInput: false };
|
|
67
76
|
}
|
|
@@ -365,7 +374,7 @@ class MinimaxService extends baseAiGenProvider_service_1.BaseAiGenProviderServic
|
|
|
365
374
|
providerRequestId: resp.trace_id,
|
|
366
375
|
};
|
|
367
376
|
}
|
|
368
|
-
getCreditUsed({ modelKey, resolution = "512P", duration = 6, multiClip = false, numImages = 1, }) {
|
|
377
|
+
getCreditUsed({ modelKey, resolution = "512P", duration = 6, multiClip = false, numImages = 1, creditFloor, }) {
|
|
369
378
|
const modelConfig = aiModels_1.aiModelConfigs[modelKey];
|
|
370
379
|
// Music-gen / image-gen — flat fixed price (music-1.5 ~$0.05, image-01 ~$0.01 × n).
|
|
371
380
|
if (modelConfig?.cost?.fixed !== undefined &&
|
|
@@ -375,7 +384,7 @@ class MinimaxService extends baseAiGenProvider_service_1.BaseAiGenProviderServic
|
|
|
375
384
|
// Image-gen — flat fixed × numImages (image-01).
|
|
376
385
|
if (modelConfig?.cost?.fixed !== undefined &&
|
|
377
386
|
modelConfig.type?.some((t) => t.endsWith("-to-image"))) {
|
|
378
|
-
return (0, helpers_2.getCreditsFromCost)(modelConfig.cost.fixed * Math.max(1, numImages), !multiClip);
|
|
387
|
+
return (0, helpers_2.getCreditsFromCost)(modelConfig.cost.fixed * Math.max(1, numImages), !multiClip, creditFloor);
|
|
379
388
|
}
|
|
380
389
|
const cost = modelConfig.cost?.fixed ??
|
|
381
390
|
modelConfig.cost?.table?.[resolution]?.[duration];
|
|
@@ -13,6 +13,6 @@ export declare class OpenaiService extends BaseAiGenProviderService {
|
|
|
13
13
|
* reference images and an optional pixel mask).
|
|
14
14
|
*/
|
|
15
15
|
generateImage(params: ImageGenerationParams): Promise<ImageGenerationResult>;
|
|
16
|
-
getCreditUsed({ modelKey, resolution, duration, multiClip, numImages, quality, }: CreditUsageParams): number;
|
|
16
|
+
getCreditUsed({ modelKey, resolution, duration, multiClip, numImages, quality, creditFloor, }: CreditUsageParams): number;
|
|
17
17
|
}
|
|
18
18
|
//# sourceMappingURL=openai.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.service.d.ts","sourceRoot":"","sources":["../../../../../src/services/aiGen/providers/openai/openai.service.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAElB,qBAAa,aAAc,SAAQ,wBAAwB;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,MAAM,CAAS;;IAQjB,aAAa,CACjB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"openai.service.d.ts","sourceRoot":"","sources":["../../../../../src/services/aiGen/providers/openai/openai.service.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAElB,qBAAa,aAAc,SAAQ,wBAAwB;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,MAAM,CAAS;;IAQjB,aAAa,CACjB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IAwF3B,gBAAgB,CAAC,EACrB,IAAI,EACJ,cAAc,EACd,cAAyB,GAC1B,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAsC3C,YAAY,CAChB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,oBAAoB,CAAC;IA2ChC;;;;OAIG;IACG,aAAa,CACjB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IA6HjC,aAAa,CAAC,EACZ,QAAQ,EACR,UAAuB,EACvB,QAAY,EACZ,SAAiB,EACjB,SAAa,EACb,OAAO,EACP,WAAW,GACZ,EAAE,iBAAiB,GAAG,MAAM;CAqB9B"}
|
|
@@ -108,7 +108,17 @@ class OpenaiService extends baseAiGenProvider_service_1.BaseAiGenProviderService
|
|
|
108
108
|
throw new errors_1.UserFacingError(message, errors_1.USER_FACING_ERROR_CODES.PROVIDER_AUTH_ERROR);
|
|
109
109
|
}
|
|
110
110
|
if (status === 429) {
|
|
111
|
-
|
|
111
|
+
// OpenAI returns 429 for BOTH transient throttling AND hard account
|
|
112
|
+
// billing/quota depletion. Only the latter is ops-actionable (top up the
|
|
113
|
+
// account) and must page — `insufficient_quota` is the depletion marker
|
|
114
|
+
// (exposed on err.code / err.type). Misclassifying it as a plain rate
|
|
115
|
+
// limit is exactly how a depleted account fails silently.
|
|
116
|
+
const oaCode = err?.code ?? err?.error?.code ?? err?.type ?? err?.error?.type ?? "";
|
|
117
|
+
const isQuota = /insufficient_quota|billing|exceeded_current_quota/i.test(oaCode) ||
|
|
118
|
+
/quota|billing|insufficient/i.test(message);
|
|
119
|
+
throw new errors_1.UserFacingError(message, isQuota
|
|
120
|
+
? errors_1.USER_FACING_ERROR_CODES.ACCOUNT_QUOTA_EXCEEDED
|
|
121
|
+
: errors_1.USER_FACING_ERROR_CODES.VIDEO_PROVIDER_RATE_LIMITED);
|
|
112
122
|
}
|
|
113
123
|
throw err;
|
|
114
124
|
}
|
|
@@ -312,13 +322,13 @@ class OpenaiService extends baseAiGenProvider_service_1.BaseAiGenProviderService
|
|
|
312
322
|
imageUrls: urls.length > 1 ? urls : undefined,
|
|
313
323
|
};
|
|
314
324
|
}
|
|
315
|
-
getCreditUsed({ modelKey, resolution = "720x1280", duration = 5, multiClip = false, numImages = 1, quality, }) {
|
|
325
|
+
getCreditUsed({ modelKey, resolution = "720x1280", duration = 5, multiClip = false, numImages = 1, quality, creditFloor, }) {
|
|
316
326
|
const modelConfig = aiModels_1.aiModelConfigs[modelKey];
|
|
317
327
|
// Image-gen — fixed per-image cost; quality scales gpt-image price (low=0.5×,
|
|
318
328
|
// medium=1×, high=4×, auto≈medium).
|
|
319
329
|
if (modelConfig?.cost?.fixed !== undefined) {
|
|
320
330
|
const qualityMultiplier = quality === "high" ? 4 : quality === "low" ? 0.5 : 1;
|
|
321
|
-
return (0, utils_1.getCreditsFromCost)(modelConfig.cost.fixed * Math.max(1, numImages) * qualityMultiplier, !multiClip);
|
|
331
|
+
return (0, utils_1.getCreditsFromCost)(modelConfig.cost.fixed * Math.max(1, numImages) * qualityMultiplier, !multiClip, creditFloor);
|
|
322
332
|
}
|
|
323
333
|
const cost = modelConfig?.cost?.table?.[resolution]?.[duration];
|
|
324
334
|
if (cost === undefined || cost === null) {
|
|
@@ -7,7 +7,7 @@ export declare class RunwayService extends BaseAiGenProviderService {
|
|
|
7
7
|
private request;
|
|
8
8
|
generateVideo(params: VideoGenerationParams): Promise<VideoGenerationResult>;
|
|
9
9
|
checkVideoStatus({ task, outputFilename, outputFilePath, }: VideoStatusParams): Promise<VideoStatusResult>;
|
|
10
|
-
getCreditUsed({ modelKey, duration, multiClip, numImages, aspectRatio }: CreditUsageParams): number;
|
|
10
|
+
getCreditUsed({ modelKey, duration, multiClip, numImages, aspectRatio, creditFloor }: CreditUsageParams): number;
|
|
11
11
|
/**
|
|
12
12
|
* Runway Gen-4 Image (text-to-image). Async — POST returns a task id,
|
|
13
13
|
* we poll /tasks/{id} until SUCCEEDED, then rehost the time-limited URL
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runway.service.d.ts","sourceRoot":"","sources":["../../../../../src/services/aiGen/providers/runway/runway.service.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAIlB,qBAAa,aAAc,SAAQ,wBAAwB;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;;YAUlB,OAAO;IAgCf,aAAa,CACjB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IA6G3B,gBAAgB,CAAC,EACrB,IAAI,EACJ,cAAc,EACd,cAAyB,GAC1B,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA4DjD,aAAa,CAAC,EAAE,QAAQ,EAAE,QAAY,EAAE,SAAiB,EAAE,SAAa,EAAE,WAAW,EAAE,EAAE,iBAAiB,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"runway.service.d.ts","sourceRoot":"","sources":["../../../../../src/services/aiGen/providers/runway/runway.service.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAIlB,qBAAa,aAAc,SAAQ,wBAAwB;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;;YAUlB,OAAO;IAgCf,aAAa,CACjB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IA6G3B,gBAAgB,CAAC,EACrB,IAAI,EACJ,cAAc,EACd,cAAyB,GAC1B,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA4DjD,aAAa,CAAC,EAAE,QAAQ,EAAE,QAAY,EAAE,SAAiB,EAAE,SAAa,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,iBAAiB,GAAG,MAAM;IA0BhI;;;;;;;;OAQG;IACG,aAAa,CACjB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;CA0ElC"}
|
|
@@ -181,7 +181,7 @@ class RunwayService extends baseAiGenProvider_service_1.BaseAiGenProviderService
|
|
|
181
181
|
// Still processing
|
|
182
182
|
return { status: types_1.EVideoSceneStatus.PENDING };
|
|
183
183
|
}
|
|
184
|
-
getCreditUsed({ modelKey, duration = 5, multiClip = false, numImages = 1, aspectRatio }) {
|
|
184
|
+
getCreditUsed({ modelKey, duration = 5, multiClip = false, numImages = 1, aspectRatio, creditFloor }) {
|
|
185
185
|
const modelConfig = aiModels_1.aiModelConfigs[modelKey];
|
|
186
186
|
const cost = modelConfig?.cost;
|
|
187
187
|
const applyFloor = !multiClip;
|
|
@@ -189,12 +189,12 @@ class RunwayService extends baseAiGenProvider_service_1.BaseAiGenProviderService
|
|
|
189
189
|
if (cost?.perAspect && aspectRatio) {
|
|
190
190
|
const perImage = cost.perAspect[aspectRatio] ?? cost.fixed;
|
|
191
191
|
if (perImage !== undefined) {
|
|
192
|
-
return (0, helpers_1.getCreditsFromCost)(perImage * Math.max(1, numImages), applyFloor);
|
|
192
|
+
return (0, helpers_1.getCreditsFromCost)(perImage * Math.max(1, numImages), applyFloor, creditFloor);
|
|
193
193
|
}
|
|
194
194
|
}
|
|
195
195
|
// Image-gen — flat per-image cost (Runway Gen-4 Image / Turbo).
|
|
196
196
|
if (cost?.fixed !== undefined) {
|
|
197
|
-
return (0, helpers_1.getCreditsFromCost)(cost.fixed * Math.max(1, numImages), applyFloor);
|
|
197
|
+
return (0, helpers_1.getCreditsFromCost)(cost.fixed * Math.max(1, numImages), applyFloor, creditFloor);
|
|
198
198
|
}
|
|
199
199
|
const perSecond = cost?.perSecond;
|
|
200
200
|
if (perSecond === undefined || perSecond === null) {
|
|
@@ -310,5 +310,13 @@ export interface CreditUsageParams {
|
|
|
310
310
|
inputVideoDurationSec?: number;
|
|
311
311
|
/** Image-gen — output resolution tier (e.g. Google nano-banana-pro "1K"/"2K"/"4K"). */
|
|
312
312
|
imageSize?: string;
|
|
313
|
+
/**
|
|
314
|
+
* Per-op credit floor override. Only the image controller sets this (to
|
|
315
|
+
* MIN_CREDITS_PER_IMAGE_OP) so image-gen isn't billed against the standard
|
|
316
|
+
* 10-credit floor. Video/agent callers leave it unset; provider image
|
|
317
|
+
* branches forward it to getCreditsFromCost, where `undefined` falls back to
|
|
318
|
+
* MIN_CREDITS_PER_PAID_OP. See globals/creditUnit.ts.
|
|
319
|
+
*/
|
|
320
|
+
creditFloor?: number;
|
|
313
321
|
}
|
|
314
322
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/aiGen/providers/types.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,EAChB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,iBAAiB,EACjB,aAAa,EACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAEtE,MAAM,WAAW,qBAAqB;IAEpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,eAAe,CAAC;IAC1B,4FAA4F;IAC5F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,eAAe,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;IAE7D;;;;;OAKG;IACH,QAAQ,CAAC,EACL,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,oBAAoB,GACpB,QAAQ,GACR,YAAY,GACZ,QAAQ,GACR,MAAM,GACN,WAAW,GACX,gBAAgB,CAAC;IAGrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uGAAuG;IACvG,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,0FAA0F;IAC1F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,2DAA2D;IAC3D,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,+DAA+D;IAC/D,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAG9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6FAA6F;IAC7F,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAG3B,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1E,YAAY,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IAG/C,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oFAAoF;IACpF,YAAY,CAAC,EAAE,KAAK,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,KAAK,CAAC;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC/C,CAAC,CAAC;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAGtB,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,WAAW,GAAG,aAAa,GAAG,YAAY,CAAC;IAC9D,iCAAiC;IACjC,qBAAqB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAGvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kGAAkG;IAClG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,iBAAiB,CAAC,SAAS,CAAC;IACpC,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CAEvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,eAAe,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IAEnC,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,oFAAoF;IACpF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,OAAO,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IAC7C,sEAAsE;IACtE,UAAU,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,MAAM,CAAC;IAC/C,YAAY,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IACvC,6BAA6B;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc;IACd,gBAAgB,CAAC,EAAE,WAAW,GAAG,aAAa,GAAG,YAAY,CAAC;IAC9D,+CAA+C;IAC/C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6CAA6C;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAClC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kEAAkE;IAClE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,oFAAoF;IACpF,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,eAAe,CAAC;IAC1B,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,cAAc,EAAE,MAAM,CAAC;IACvB,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,aAAa,CAAC;IACxB,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,cAAc,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EACJ,eAAe,GACf,cAAc,GACd,iBAAiB,GACjB,eAAe,GACf,aAAa,CAAC;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IACxC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,uFAAuF;IACvF,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/aiGen/providers/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bullmq.service.d.ts","sourceRoot":"","sources":["../../src/services/bullmq.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAgB,EAAwB,YAAY,EAAE,MAAM,SAAS,CAAC;AAItE,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAc1C,UAAU,oBAAoB;IAC5B,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,cAAM,aAAa;IACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,YAAY,CAAgB;IAIpC,OAAO,CAAC,UAAU,CAAC,CAAc;IACjC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO;WAQO,WAAW,CAAC,OAAO,EAAE,oBAAoB;IAOvD;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,OAAO,CAAC,aAAa;IAOrB,sDAAsD;IACzC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBlC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,oBAAoB;IAQ5B,gBAAgB;IACH,MAAM,CACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,OAAO,EACb,IAAI,CAAC,EAAE;QACL,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,0DAA0D;QAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,mDAAmD;QACnD,OAAO,CAAC,EAAE;YAAE,IAAI,EAAE,OAAO,GAAG,aAAa,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3D;;;;WAIG;QACH,gBAAgB,CAAC,EAAE,MAAM,GAAG;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7D,YAAY,CAAC,EAAE,MAAM,GAAG;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC1D;IA+BH,6EAA6E;IAC7E,OAAO,CAAC,QAAQ;IAQhB;;;;;OAKG;IACU,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAUtE,wEAAwE;IAC3D,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CACvD,KAAK,CAAC;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CACH;IAgCD,gDAAgD;IACnC,eAAe,IAAI,OAAO,CAAC;QACtC,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAWK,YAAY,CACjB,UAAU,EAAE,MAAM,EAAE,EACpB,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,EACtC,eAAe,CAAC,EAAE,MAAM,CACtB,MAAM,EACN;QACE,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CACF;
|
|
1
|
+
{"version":3,"file":"bullmq.service.d.ts","sourceRoot":"","sources":["../../src/services/bullmq.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -288,16 +288,24 @@ class BullMQService {
|
|
|
288
288
|
// else has settled.
|
|
289
289
|
hardExit.unref();
|
|
290
290
|
logger_1.logger.info("Shutting down BullMQ workers gracefully...", { hardTimeoutMs });
|
|
291
|
-
|
|
291
|
+
// Close workers CONCURRENTLY, not sequentially. worker.close() waits for
|
|
292
|
+
// that worker's in-flight job to finish; a sequential for-await loop
|
|
293
|
+
// blocks on the FIRST worker, so a single long job (a video/render can
|
|
294
|
+
// run ~15 min) holds open ALL 14 workers' blocking Redis connections for
|
|
295
|
+
// the entire drain. On a rolling deploy the new container is already up
|
|
296
|
+
// with its own 14 connections — keeping the old container's 14 alive for
|
|
297
|
+
// 15 min doubles us against the Redis `maxclients` cap and is exactly
|
|
298
|
+
// what surfaces "ERR max number of clients reached". Closing in parallel
|
|
299
|
+
// releases every IDLE worker's connection within milliseconds; only the
|
|
300
|
+
// genuinely-busy workers linger until their job completes.
|
|
301
|
+
await Promise.all(this.workers.map(async (worker) => {
|
|
292
302
|
await worker.close();
|
|
293
303
|
logger_1.logger.info(`Worker for queue closed`, { queueName: worker.name });
|
|
294
|
-
}
|
|
304
|
+
}));
|
|
295
305
|
// Close queues and the shared connection so blocking-client dups are
|
|
296
306
|
// released cleanly (prevents lingering clients on the Redis side after
|
|
297
307
|
// a rolling deploy / SIGTERM on Railway).
|
|
298
|
-
|
|
299
|
-
await queue.close();
|
|
300
|
-
}
|
|
308
|
+
await Promise.all([...this.queues.values()].map((queue) => queue.close()));
|
|
301
309
|
if (this.connection) {
|
|
302
310
|
await this.connection.quit();
|
|
303
311
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { VideoBrief } from "../../schemas/brief.schema";
|
|
2
|
+
import type { IUserSubscription } from "../../models/user.model";
|
|
3
|
+
/**
|
|
4
|
+
* Free-plan single-generation flow (Task 5).
|
|
5
|
+
*
|
|
6
|
+
* A free user (no active paid subscription) starts with
|
|
7
|
+
* MIN_CREDITS_PER_PAID_OP credits — exactly enough for ONE floored paid
|
|
8
|
+
* operation. The per-op credit floor already makes that a single generation
|
|
9
|
+
* across video / image / avatar; this module covers the AGENT path, which has
|
|
10
|
+
* no floor (it bills actual per-scene cost) and would otherwise plan a
|
|
11
|
+
* multi-scene run far beyond the free balance — leaving a trial user unable to
|
|
12
|
+
* reach any finished video.
|
|
13
|
+
*
|
|
14
|
+
* The clamp below is the "hard minimal preset": force the planner toward the
|
|
15
|
+
* cheapest, shortest plan and hand it a hard spend cap equal to the free
|
|
16
|
+
* budget, so a free agent run is GUARANTEED to fit in the starting credits and
|
|
17
|
+
* always produce a final video to evaluate the product.
|
|
18
|
+
*/
|
|
19
|
+
/** Starting credits for a free user — the single-generation budget. */
|
|
20
|
+
export declare const FREE_PLAN_CREDIT_BUDGET = 10;
|
|
21
|
+
/** Free budget expressed as the planner's USD spend cap (10 credits × $0.10). */
|
|
22
|
+
export declare const FREE_PLAN_MAX_SPEND_USD: number;
|
|
23
|
+
/** Whether free-plan limits apply to this subscription (i.e. it's NOT paid). */
|
|
24
|
+
export declare function isFreePlan(subscription: IUserSubscription | undefined | null): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Clamp a brief to the free-plan minimal preset before planning. Idempotent and
|
|
27
|
+
* non-destructive (returns a new object; never mutates the caller's brief).
|
|
28
|
+
*
|
|
29
|
+
* - `durationSec` / `lengthTier` → shortest, so the planner emits a couple of
|
|
30
|
+
* scenes rather than a 30–60s multi-scene run.
|
|
31
|
+
* - `tierBudget` → at most T1 (cheap AI), so the trial still showcases
|
|
32
|
+
* generation rather than dropping straight to stock.
|
|
33
|
+
* - `maxSpendUSD` → the free budget. The planner's L-6 hard cap then downgrades
|
|
34
|
+
* any over-budget scene (to T0/stock) so the total never exceeds the 10
|
|
35
|
+
* starting credits — the guarantee that the trial reaches a finished video.
|
|
36
|
+
*/
|
|
37
|
+
export declare function clampBriefForFreePlan(brief: VideoBrief): VideoBrief;
|
|
38
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/freePlan/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAGjE;;;;;;;;;;;;;;;GAeG;AAEH,uEAAuE;AACvE,eAAO,MAAM,uBAAuB,KAA0B,CAAC;AAE/D,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,QAA2C,CAAC;AAKhF,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,YAAY,EAAE,iBAAiB,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAEtF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CASnE"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FREE_PLAN_MAX_SPEND_USD = exports.FREE_PLAN_CREDIT_BUDGET = void 0;
|
|
4
|
+
exports.isFreePlan = isFreePlan;
|
|
5
|
+
exports.clampBriefForFreePlan = clampBriefForFreePlan;
|
|
6
|
+
const creditUnit_1 = require("../../globals/creditUnit");
|
|
7
|
+
const renderTier_1 = require("../../utils/renderTier");
|
|
8
|
+
/**
|
|
9
|
+
* Free-plan single-generation flow (Task 5).
|
|
10
|
+
*
|
|
11
|
+
* A free user (no active paid subscription) starts with
|
|
12
|
+
* MIN_CREDITS_PER_PAID_OP credits — exactly enough for ONE floored paid
|
|
13
|
+
* operation. The per-op credit floor already makes that a single generation
|
|
14
|
+
* across video / image / avatar; this module covers the AGENT path, which has
|
|
15
|
+
* no floor (it bills actual per-scene cost) and would otherwise plan a
|
|
16
|
+
* multi-scene run far beyond the free balance — leaving a trial user unable to
|
|
17
|
+
* reach any finished video.
|
|
18
|
+
*
|
|
19
|
+
* The clamp below is the "hard minimal preset": force the planner toward the
|
|
20
|
+
* cheapest, shortest plan and hand it a hard spend cap equal to the free
|
|
21
|
+
* budget, so a free agent run is GUARANTEED to fit in the starting credits and
|
|
22
|
+
* always produce a final video to evaluate the product.
|
|
23
|
+
*/
|
|
24
|
+
/** Starting credits for a free user — the single-generation budget. */
|
|
25
|
+
exports.FREE_PLAN_CREDIT_BUDGET = creditUnit_1.MIN_CREDITS_PER_PAID_OP;
|
|
26
|
+
/** Free budget expressed as the planner's USD spend cap (10 credits × $0.10). */
|
|
27
|
+
exports.FREE_PLAN_MAX_SPEND_USD = exports.FREE_PLAN_CREDIT_BUDGET * creditUnit_1.USD_PER_CREDIT;
|
|
28
|
+
/** Longest a free agent trial may run — keeps the plan to a couple of scenes. */
|
|
29
|
+
const FREE_PLAN_MAX_DURATION_SEC = 8;
|
|
30
|
+
/** Whether free-plan limits apply to this subscription (i.e. it's NOT paid). */
|
|
31
|
+
function isFreePlan(subscription) {
|
|
32
|
+
return !(0, renderTier_1.isPaidSubscription)(subscription);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Clamp a brief to the free-plan minimal preset before planning. Idempotent and
|
|
36
|
+
* non-destructive (returns a new object; never mutates the caller's brief).
|
|
37
|
+
*
|
|
38
|
+
* - `durationSec` / `lengthTier` → shortest, so the planner emits a couple of
|
|
39
|
+
* scenes rather than a 30–60s multi-scene run.
|
|
40
|
+
* - `tierBudget` → at most T1 (cheap AI), so the trial still showcases
|
|
41
|
+
* generation rather than dropping straight to stock.
|
|
42
|
+
* - `maxSpendUSD` → the free budget. The planner's L-6 hard cap then downgrades
|
|
43
|
+
* any over-budget scene (to T0/stock) so the total never exceeds the 10
|
|
44
|
+
* starting credits — the guarantee that the trial reaches a finished video.
|
|
45
|
+
*/
|
|
46
|
+
function clampBriefForFreePlan(brief) {
|
|
47
|
+
const tierBudget = brief.tierBudget === "T0" ? "T0" : "T1";
|
|
48
|
+
return {
|
|
49
|
+
...brief,
|
|
50
|
+
durationSec: Math.min(brief.durationSec ?? FREE_PLAN_MAX_DURATION_SEC, FREE_PLAN_MAX_DURATION_SEC),
|
|
51
|
+
lengthTier: "S1",
|
|
52
|
+
tierBudget,
|
|
53
|
+
maxSpendUSD: Math.min(brief.maxSpendUSD ?? exports.FREE_PLAN_MAX_SPEND_USD, exports.FREE_PLAN_MAX_SPEND_USD),
|
|
54
|
+
};
|
|
55
|
+
}
|
package/lib/services/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,OAAO,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,OAAO,CAAC;AACtB,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,OAAO,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,OAAO,CAAC;AACtB,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC"}
|
package/lib/services/index.js
CHANGED
package/lib/utils/errors.d.ts
CHANGED
|
@@ -40,4 +40,27 @@ export declare const USER_FACING_ERROR_CODES: {
|
|
|
40
40
|
readonly PROVIDER_UNAVAILABLE: "PROVIDER_UNAVAILABLE";
|
|
41
41
|
};
|
|
42
42
|
export type UserFacingErrorCode = keyof typeof USER_FACING_ERROR_CODES;
|
|
43
|
+
/**
|
|
44
|
+
* Canned, user-safe default message per code. The frontend translates by `code`
|
|
45
|
+
* via the `Toasts` namespace; these are the English fallback shown when a code
|
|
46
|
+
* isn't translated AND the safe text we store in `scene.errorMessage` so raw
|
|
47
|
+
* provider internals (billing consoles, API-key hints, request ids) never reach
|
|
48
|
+
* a user. Each reassures "you haven't been charged" where the failure is ours /
|
|
49
|
+
* the provider's, matching the credit-refund behaviour on failed jobs.
|
|
50
|
+
*/
|
|
51
|
+
export declare const USER_FACING_ERROR_MESSAGES: Record<string, string>;
|
|
52
|
+
/** Friendly default for a code, or undefined if the code is unknown/unset. */
|
|
53
|
+
export declare function friendlyMessageForCode(code: string | undefined): string | undefined;
|
|
54
|
+
/**
|
|
55
|
+
* Display-boundary guard. Returns a message that is safe to show a user:
|
|
56
|
+
* - if `code` has a canned friendly message, always prefer it (provider text
|
|
57
|
+
* is never authoritative for display);
|
|
58
|
+
* - else, if the message contains provider-internal leak markers, strip them;
|
|
59
|
+
* if stripping leaves it too short / still internal, fall back to generic;
|
|
60
|
+
* - else return the message unchanged.
|
|
61
|
+
*
|
|
62
|
+
* This is the last line of defence against ANY provider (Google, Kling, Runway,
|
|
63
|
+
* …) leaking billing/console/internal text into a user-visible error.
|
|
64
|
+
*/
|
|
65
|
+
export declare function sanitizeUserFacingMessage(message: string | undefined, code?: string): string;
|
|
43
66
|
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,iBAAiB,QAAQ;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;gBAEX,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;IAM1C,qEAAqE;IACrE,MAAM,IAAI;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAG7C;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;IAUlC,wFAAwF;;IAExF,qFAAqF;;IAErF,+FAA+F;;IAE/F,oGAAoG;;CAE5F,CAAC;AACX,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,iBAAiB,QAAQ;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;gBAEX,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;IAM1C,qEAAqE;IACrE,MAAM,IAAI;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAG7C;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;IAUlC,wFAAwF;;IAExF,qFAAqF;;IAErF,+FAA+F;;IAE/F,oGAAoG;;CAE5F,CAAC;AACX,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,uBAAuB,CAAC;AAEvE;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA2B7D,CAAC;AAEF,8EAA8E;AAC9E,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAEnF;AAqBD;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAaR"}
|
package/lib/utils/errors.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.USER_FACING_ERROR_CODES = exports.UserFacingError = void 0;
|
|
3
|
+
exports.USER_FACING_ERROR_MESSAGES = exports.USER_FACING_ERROR_CODES = exports.UserFacingError = void 0;
|
|
4
|
+
exports.friendlyMessageForCode = friendlyMessageForCode;
|
|
5
|
+
exports.sanitizeUserFacingMessage = sanitizeUserFacingMessage;
|
|
4
6
|
/**
|
|
5
7
|
* Thrown when an error should be shown to the user rather than retried/escalated.
|
|
6
8
|
* These are logged as `warn` (Loki only) instead of `error` (Slack) to reduce noise.
|
|
@@ -45,3 +47,75 @@ exports.USER_FACING_ERROR_CODES = {
|
|
|
45
47
|
/** Provider classified the request as unavailable (general service degradation, 5xx persistent). */
|
|
46
48
|
PROVIDER_UNAVAILABLE: "PROVIDER_UNAVAILABLE",
|
|
47
49
|
};
|
|
50
|
+
/**
|
|
51
|
+
* Canned, user-safe default message per code. The frontend translates by `code`
|
|
52
|
+
* via the `Toasts` namespace; these are the English fallback shown when a code
|
|
53
|
+
* isn't translated AND the safe text we store in `scene.errorMessage` so raw
|
|
54
|
+
* provider internals (billing consoles, API-key hints, request ids) never reach
|
|
55
|
+
* a user. Each reassures "you haven't been charged" where the failure is ours /
|
|
56
|
+
* the provider's, matching the credit-refund behaviour on failed jobs.
|
|
57
|
+
*/
|
|
58
|
+
exports.USER_FACING_ERROR_MESSAGES = {
|
|
59
|
+
[exports.USER_FACING_ERROR_CODES.VIDEO_PROVIDER_RATE_LIMITED]: "Our video provider is handling a lot of requests right now and couldn't start your video. You haven't been charged — please try again in a few minutes.",
|
|
60
|
+
[exports.USER_FACING_ERROR_CODES.VIDEO_PROVIDER_HIGH_DEMAND]: "The video model is experiencing high demand right now. You haven't been charged — please try again in a few minutes.",
|
|
61
|
+
[exports.USER_FACING_ERROR_CODES.VIDEO_PROVIDER_TIMEOUT]: "Your video took too long to generate and timed out. You haven't been charged — please try again.",
|
|
62
|
+
[exports.USER_FACING_ERROR_CODES.ACCOUNT_QUOTA_EXCEEDED]: "We've hit a temporary capacity limit with this video model. You haven't been charged — please try again shortly, or pick a different model.",
|
|
63
|
+
[exports.USER_FACING_ERROR_CODES.PROVIDER_UNAVAILABLE]: "The video service is temporarily unavailable. You haven't been charged — please try again in a few minutes.",
|
|
64
|
+
[exports.USER_FACING_ERROR_CODES.PROVIDER_AUTH_ERROR]: "Something went wrong on our side starting your video. You haven't been charged — please try again, and contact support if it keeps happening.",
|
|
65
|
+
[exports.USER_FACING_ERROR_CODES.TTS_PROVIDER_TIMEOUT]: "The voiceover service timed out. Please try again.",
|
|
66
|
+
[exports.USER_FACING_ERROR_CODES.TTS_PROVIDER_UNAVAILABLE]: "The voiceover service is temporarily unavailable. Please try again in a few minutes.",
|
|
67
|
+
[exports.USER_FACING_ERROR_CODES.PROMPT_TOO_LONG]: "Your prompt is too long for this model. Please shorten it and try again.",
|
|
68
|
+
[exports.USER_FACING_ERROR_CODES.PROMPT_INVALID]: "Your prompt was rejected by the model. Please simplify or rephrase it and try again.",
|
|
69
|
+
[exports.USER_FACING_ERROR_CODES.INPUT_IMAGE_REJECTED]: "Your input image was rejected. Please try a different image.",
|
|
70
|
+
[exports.USER_FACING_ERROR_CODES.CONTENT_POLICY_VIOLATION]: "Your prompt was flagged by the model's safety filters. Please rephrase and try again.",
|
|
71
|
+
[exports.USER_FACING_ERROR_CODES.CAPABILITY_MISMATCH]: "This combination of settings isn't supported by the selected model. Please adjust your options and try again.",
|
|
72
|
+
};
|
|
73
|
+
/** Friendly default for a code, or undefined if the code is unknown/unset. */
|
|
74
|
+
function friendlyMessageForCode(code) {
|
|
75
|
+
return code ? exports.USER_FACING_ERROR_MESSAGES[code] : undefined;
|
|
76
|
+
}
|
|
77
|
+
// Detection patterns (non-global, for .test) for provider-internal detail that
|
|
78
|
+
// must never be shown to a user: billing/console URLs, dashboards, API-key
|
|
79
|
+
// hints, and request ids. Kept in sync with REPLACE_PATTERNS below.
|
|
80
|
+
const LEAK_DETECT_PATTERNS = [
|
|
81
|
+
/https?:\/\/\S+/i,
|
|
82
|
+
/ai\.studio|aistudio\.google|console\.cloud\.google|platform\.openai|dashboard/i,
|
|
83
|
+
/prepayment|\bbilling\b|quota project|API[_ ]?key|service account|GOOGLE_[A-Z_]+/i,
|
|
84
|
+
/Request id:/i,
|
|
85
|
+
];
|
|
86
|
+
// Replacement patterns (global) used to strip leaked fragments when we have no
|
|
87
|
+
// canned message to substitute.
|
|
88
|
+
const LEAK_REPLACE_PATTERNS = [
|
|
89
|
+
/https?:\/\/\S+/gi,
|
|
90
|
+
/\s*Request id:.*$/gi,
|
|
91
|
+
];
|
|
92
|
+
const GENERIC_USER_FACING_MESSAGE = "Something went wrong generating your video. You haven't been charged — please try again, and contact support if it keeps happening.";
|
|
93
|
+
/**
|
|
94
|
+
* Display-boundary guard. Returns a message that is safe to show a user:
|
|
95
|
+
* - if `code` has a canned friendly message, always prefer it (provider text
|
|
96
|
+
* is never authoritative for display);
|
|
97
|
+
* - else, if the message contains provider-internal leak markers, strip them;
|
|
98
|
+
* if stripping leaves it too short / still internal, fall back to generic;
|
|
99
|
+
* - else return the message unchanged.
|
|
100
|
+
*
|
|
101
|
+
* This is the last line of defence against ANY provider (Google, Kling, Runway,
|
|
102
|
+
* …) leaking billing/console/internal text into a user-visible error.
|
|
103
|
+
*/
|
|
104
|
+
function sanitizeUserFacingMessage(message, code) {
|
|
105
|
+
const canned = friendlyMessageForCode(code);
|
|
106
|
+
if (canned)
|
|
107
|
+
return canned;
|
|
108
|
+
if (!message)
|
|
109
|
+
return GENERIC_USER_FACING_MESSAGE;
|
|
110
|
+
const hasLeak = LEAK_DETECT_PATTERNS.some((re) => re.test(message));
|
|
111
|
+
if (!hasLeak)
|
|
112
|
+
return message;
|
|
113
|
+
let scrubbed = message;
|
|
114
|
+
for (const re of LEAK_REPLACE_PATTERNS)
|
|
115
|
+
scrubbed = scrubbed.replace(re, "");
|
|
116
|
+
scrubbed = scrubbed.replace(/\s{2,}/g, " ").trim();
|
|
117
|
+
// If, after stripping, the remaining text still trips a detector or is too
|
|
118
|
+
// short to be meaningful, don't risk it — use the generic message.
|
|
119
|
+
const stillLeaks = LEAK_DETECT_PATTERNS.some((re) => re.test(scrubbed));
|
|
120
|
+
return !stillLeaks && scrubbed.length >= 12 ? scrubbed : GENERIC_USER_FACING_MESSAGE;
|
|
121
|
+
}
|
package/lib/utils/helpers.d.ts
CHANGED
|
@@ -4,7 +4,14 @@ import { ETextGenModels } from "../globals";
|
|
|
4
4
|
export declare const getPlanTypeById: (priceId: string) => ESUBSCRIPTION_PLANS | null;
|
|
5
5
|
export declare const getFreqById: (priceId: string) => ERENEWAL_FREQUENCY | null;
|
|
6
6
|
export declare const getPriceIdByType: (type: ESUBSCRIPTION_PLANS, freq?: ERENEWAL_FREQUENCY) => string;
|
|
7
|
-
export declare const getCreditsFromCost: (cost: number, applyFloor?: boolean
|
|
7
|
+
export declare const getCreditsFromCost: (cost: number, applyFloor?: boolean,
|
|
8
|
+
/**
|
|
9
|
+
* Per-op minimum when `applyFloor`. Defaults to MIN_CREDITS_PER_PAID_OP (10).
|
|
10
|
+
* Image-gen passes a lower floor (MIN_CREDITS_PER_IMAGE_OP) so cheap images
|
|
11
|
+
* aren't billed as if they cost $1 — see creditUnit.ts. Callers other than
|
|
12
|
+
* the image path leave it unset and keep the standard floor.
|
|
13
|
+
*/
|
|
14
|
+
floor?: number) => number;
|
|
8
15
|
/**
|
|
9
16
|
* Guard against silent under-billing when a model's `cost` block is missing
|
|
10
17
|
* from `aiModelConfigs`. Every provider's `getCreditUsed()` historically fell
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAEnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,eAAO,MAAM,eAAe,GAC1B,SAAS,MAAM,KACd,mBAAmB,GAAG,IASxB,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,KAAG,kBAAkB,GAAG,IASlE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,MAAM,mBAAmB,EACzB,OAAM,kBAA+C,WAgBtD,CAAC;AAEF,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAEnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,eAAO,MAAM,eAAe,GAC1B,SAAS,MAAM,KACd,mBAAmB,GAAG,IASxB,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,KAAG,kBAAkB,GAAG,IASlE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,MAAM,mBAAmB,EACzB,OAAM,kBAA+C,WAgBtD,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,MAAM,MAAM,EACZ,oBAAiB;AACjB;;;;;GAKG;AACH,QAAO,MAAgC,KACtC,MAQF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,EAChB,MAAM,MAAM,GAAG,SAAS,EACxB,UAAU,MAAM,KACf,MASF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,2BAA2B,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAInF,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,kBAAkB,GAAG,MAAM,CAEnF;AAOD,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,UAAU,GACX,MAAM,6CAA6C,CAAC;AAErD,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,SAAQ,EACf,QAAQ,SAAM,oBAQf;AAGD,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;IAC1E,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,SAAS,EAAE,CAAC,CAAC;IACb,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAGxB,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AA0DrB,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAatE"}
|
package/lib/utils/helpers.js
CHANGED
|
@@ -50,13 +50,20 @@ const getPriceIdByType = (type, freq = types_1.ERENEWAL_FREQUENCY.MONTHLY) => {
|
|
|
50
50
|
: planDetails?.monthly?.id;
|
|
51
51
|
};
|
|
52
52
|
exports.getPriceIdByType = getPriceIdByType;
|
|
53
|
-
const getCreditsFromCost = (cost, applyFloor = true
|
|
53
|
+
const getCreditsFromCost = (cost, applyFloor = true,
|
|
54
|
+
/**
|
|
55
|
+
* Per-op minimum when `applyFloor`. Defaults to MIN_CREDITS_PER_PAID_OP (10).
|
|
56
|
+
* Image-gen passes a lower floor (MIN_CREDITS_PER_IMAGE_OP) so cheap images
|
|
57
|
+
* aren't billed as if they cost $1 — see creditUnit.ts. Callers other than
|
|
58
|
+
* the image path leave it unset and keep the standard floor.
|
|
59
|
+
*/
|
|
60
|
+
floor = creditUnit_1.MIN_CREDITS_PER_PAID_OP) => {
|
|
54
61
|
if (cost <= 0)
|
|
55
62
|
return 0;
|
|
56
63
|
// Canonical rate (see globals/creditUnit.ts). USD_PER_CREDIT is cost basis;
|
|
57
64
|
// the 2× user markup lives in plan pricing, not here.
|
|
58
65
|
const credits = Math.ceil(cost / creditUnit_1.USD_PER_CREDIT);
|
|
59
|
-
return applyFloor ? Math.max(credits,
|
|
66
|
+
return applyFloor ? Math.max(credits, floor) : credits;
|
|
60
67
|
};
|
|
61
68
|
exports.getCreditsFromCost = getCreditsFromCost;
|
|
62
69
|
/**
|