@purpleschool/gptbot-tools 0.0.74 → 0.0.75

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.
@@ -578,6 +578,11 @@ exports.ERRORS = {
578
578
  message: 'Некорректное соотношение сторон',
579
579
  httpCode: 400,
580
580
  },
581
+ INVALID_RESOLUTION: {
582
+ code: 'VIDEO.INVALID_RESOLUTION',
583
+ message: 'Некорректное разрешение видео',
584
+ httpCode: 400,
585
+ },
581
586
  RUNWAY_CONTENT_POLICY: {
582
587
  code: 'VIDEO.RUNWAY_CONTENT_POLICY',
583
588
  message: 'Запрос на создание видео был отклонен, т.к. он не соответствует требованиям политики безопасности Runway.',
@@ -4,4 +4,5 @@ exports.VIDEO_PRICING_RULE_TYPE = void 0;
4
4
  var VIDEO_PRICING_RULE_TYPE;
5
5
  (function (VIDEO_PRICING_RULE_TYPE) {
6
6
  VIDEO_PRICING_RULE_TYPE["FLAT"] = "flat";
7
+ VIDEO_PRICING_RULE_TYPE["PER_SECOND"] = "per_second";
7
8
  })(VIDEO_PRICING_RULE_TYPE || (exports.VIDEO_PRICING_RULE_TYPE = VIDEO_PRICING_RULE_TYPE = {}));
@@ -9,4 +9,5 @@ var VIDEO_GENERATION_STRATEGY;
9
9
  VIDEO_GENERATION_STRATEGY["RUNWAY_CALLBACK"] = "RUNWAY_CALLBACK";
10
10
  VIDEO_GENERATION_STRATEGY["SORA_2_VIDEO_GENERATION_POLLING"] = "SORA_2_VIDEO_GENERATION_POLLING";
11
11
  VIDEO_GENERATION_STRATEGY["SORA_2_VIDEO_GENERATION_CALLBACK"] = "SORA_2_VIDEO_GENERATION_CALLBACK";
12
+ VIDEO_GENERATION_STRATEGY["SEEDANCE_VIDEO_GENERATION_CALLBACK"] = "SEEDANCE_VIDEO_GENERATION_CALLBACK";
12
13
  })(VIDEO_GENERATION_STRATEGY || (exports.VIDEO_GENERATION_STRATEGY = VIDEO_GENERATION_STRATEGY = {}));
@@ -18,15 +18,22 @@ exports.VideoModelParamsSchema = zod_1.z.object({
18
18
  })
19
19
  .optional(),
20
20
  quality: zod_1.z.string().optional(),
21
+ resolution: zod_1.z
22
+ .object({
23
+ options: zod_1.z.array(zod_1.z.string()),
24
+ })
25
+ .optional(),
21
26
  });
22
27
  exports.VideoGenerationRequestParamsSchema = zod_1.z.object({
23
28
  imageUrls: zod_1.z.string().array().optional(),
24
29
  duration: zod_1.z.number(),
25
30
  aspectRatio: zod_1.z.string().optional(),
26
31
  quality: zod_1.z.string().optional(),
32
+ resolution: zod_1.z.string().optional(),
27
33
  });
28
34
  exports.VideoModelPricingRuleConditionSchema = zod_1.z.object({
29
- aspectRatio: zod_1.z.string(),
35
+ aspectRatio: zod_1.z.string().optional(),
36
+ resolution: zod_1.z.string().optional(),
30
37
  });
31
38
  exports.VideoModelPricingRulesSchema = zod_1.z.array(zod_1.z.object({
32
39
  type: zod_1.z.nativeEnum(enums_1.VIDEO_PRICING_RULE_TYPE),
@@ -6,4 +6,5 @@ exports.VIDEO_GENERATION_ROUTES = {
6
6
  KIE_VEO_CALLBACK: 'kie/veo/callback',
7
7
  KIE_RUNWAY_CALLBACK: 'kie/runway/callback',
8
8
  KIE_SORA_2_CALLBACK: 'kie/sora-2/callback',
9
+ KIE_SEEDANCE_CALLBACK: 'kie/seedance/callback',
9
10
  };
@@ -17,7 +17,11 @@ function matchesCondition(condition, params) {
17
17
  });
18
18
  }
19
19
  function calculateVideoGenerationPrice({ pricePerSecond, params, rules, }) {
20
- const base = pricePerSecond * params.duration;
20
+ const perSecondRule = rules
21
+ .filter((r) => r.type === enums_1.VIDEO_PRICING_RULE_TYPE.PER_SECOND)
22
+ .find((r) => matchesCondition(r.condition, params));
23
+ const effectivePricePerSecond = perSecondRule ? perSecondRule.value : pricePerSecond;
24
+ const base = effectivePricePerSecond * params.duration;
21
25
  const flatMarkup = rules.reduce((sum, r) => {
22
26
  if (r.type !== enums_1.VIDEO_PRICING_RULE_TYPE.FLAT) {
23
27
  return sum;
@@ -577,6 +577,11 @@ export const ERRORS = {
577
577
  message: 'Некорректное соотношение сторон',
578
578
  httpCode: 400,
579
579
  },
580
+ INVALID_RESOLUTION: {
581
+ code: 'VIDEO.INVALID_RESOLUTION',
582
+ message: 'Некорректное разрешение видео',
583
+ httpCode: 400,
584
+ },
580
585
  RUNWAY_CONTENT_POLICY: {
581
586
  code: 'VIDEO.RUNWAY_CONTENT_POLICY',
582
587
  message:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purpleschool/gptbot-tools",
3
- "version": "0.0.74",
3
+ "version": "0.0.75",
4
4
  "main": "build/index.js",
5
5
  "types": "build/index.d.ts",
6
6
  "scripts": {
@@ -1,3 +1,4 @@
1
1
  export enum VIDEO_PRICING_RULE_TYPE {
2
2
  FLAT = 'flat',
3
+ PER_SECOND = 'per_second',
3
4
  }
@@ -5,4 +5,5 @@ export enum VIDEO_GENERATION_STRATEGY {
5
5
  RUNWAY_CALLBACK = 'RUNWAY_CALLBACK',
6
6
  SORA_2_VIDEO_GENERATION_POLLING = 'SORA_2_VIDEO_GENERATION_POLLING',
7
7
  SORA_2_VIDEO_GENERATION_CALLBACK = 'SORA_2_VIDEO_GENERATION_CALLBACK',
8
+ SEEDANCE_VIDEO_GENERATION_CALLBACK = 'SEEDANCE_VIDEO_GENERATION_CALLBACK',
8
9
  }
@@ -20,6 +20,11 @@ export const VideoModelParamsSchema = z.object({
20
20
  })
21
21
  .optional(),
22
22
  quality: z.string().optional(),
23
+ resolution: z
24
+ .object({
25
+ options: z.array(z.string()),
26
+ })
27
+ .optional(),
23
28
  });
24
29
 
25
30
  export type VideoModelParams = z.infer<typeof VideoModelParamsSchema>;
@@ -29,11 +34,13 @@ export const VideoGenerationRequestParamsSchema = z.object({
29
34
  duration: z.number(),
30
35
  aspectRatio: z.string().optional(),
31
36
  quality: z.string().optional(),
37
+ resolution: z.string().optional(),
32
38
  });
33
39
  export type VideoGenerationRequestParams = z.infer<typeof VideoGenerationRequestParamsSchema>;
34
40
 
35
41
  export const VideoModelPricingRuleConditionSchema = z.object({
36
- aspectRatio: z.string(),
42
+ aspectRatio: z.string().optional(),
43
+ resolution: z.string().optional(),
37
44
  });
38
45
  export type VideoModelPricingRuleCondition = z.infer<typeof VideoModelPricingRuleConditionSchema>;
39
46
 
@@ -4,4 +4,5 @@ export const VIDEO_GENERATION_ROUTES = {
4
4
  KIE_VEO_CALLBACK: 'kie/veo/callback',
5
5
  KIE_RUNWAY_CALLBACK: 'kie/runway/callback',
6
6
  KIE_SORA_2_CALLBACK: 'kie/sora-2/callback',
7
+ KIE_SEEDANCE_CALLBACK: 'kie/seedance/callback',
7
8
  };
@@ -36,7 +36,13 @@ export function calculateVideoGenerationPrice({
36
36
  params: VideoGenerationRequestParams;
37
37
  rules: VideoModelPricingRules;
38
38
  }) {
39
- const base = pricePerSecond * params.duration;
39
+ const perSecondRule = rules
40
+ .filter((r) => r.type === VIDEO_PRICING_RULE_TYPE.PER_SECOND)
41
+ .find((r) => matchesCondition(r.condition, params));
42
+
43
+ const effectivePricePerSecond = perSecondRule ? perSecondRule.value : pricePerSecond;
44
+
45
+ const base = effectivePricePerSecond * params.duration;
40
46
 
41
47
  const flatMarkup = rules.reduce((sum, r) => {
42
48
  if (r.type !== VIDEO_PRICING_RULE_TYPE.FLAT) {