@purpleschool/gptbot 0.7.95 → 0.7.96-b2b

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 (54) hide show
  1. package/api/controllers/http/ai-model.ts +0 -1
  2. package/api/controllers/http/ai-proxy.ts +5 -0
  3. package/api/controllers/http/b2b.ts +9 -0
  4. package/api/controllers/http/index.ts +2 -1
  5. package/api/controllers/http/page.ts +0 -1
  6. package/api/routes.ts +9 -2
  7. package/build/api/controllers/http/ai-model.js +0 -1
  8. package/build/api/controllers/http/ai-proxy.js +7 -0
  9. package/build/api/controllers/http/b2b.js +11 -0
  10. package/build/api/controllers/http/index.js +2 -1
  11. package/build/api/controllers/http/page.js +0 -1
  12. package/build/api/routes.js +9 -2
  13. package/build/commands/ai-model/index.js +0 -2
  14. package/build/commands/b2b/get-api-key.command.js +12 -0
  15. package/build/{constants/model/enums → commands/b2b}/index.js +4 -1
  16. package/build/commands/b2b/refresh-api-key.command.js +12 -0
  17. package/build/commands/b2b/send-image-request.command.js +24 -0
  18. package/build/commands/b2b/send-text-request.command.js +22 -0
  19. package/build/commands/index.js +1 -0
  20. package/build/constants/errors/errors.js +19 -4
  21. package/build/constants/subscription/enums/subscription-feature-type.enum.js +0 -3
  22. package/build/constants/tool/enums/index.js +0 -1
  23. package/build/models/api-key.schema.js +15 -0
  24. package/build/models/index.js +1 -0
  25. package/build/models/page.schema.js +0 -1
  26. package/build/models/subscription-feature.schema.js +1 -14
  27. package/commands/ai-model/index.ts +0 -2
  28. package/commands/b2b/get-api-key.command.ts +11 -0
  29. package/commands/b2b/index.ts +4 -0
  30. package/commands/b2b/refresh-api-key.command.ts +11 -0
  31. package/commands/b2b/send-image-request.command.ts +28 -0
  32. package/commands/b2b/send-text-request.command.ts +26 -0
  33. package/commands/index.ts +1 -0
  34. package/constants/errors/errors.ts +19 -4
  35. package/constants/subscription/enums/subscription-feature-type.enum.ts +0 -3
  36. package/constants/tool/enums/index.ts +0 -1
  37. package/models/api-key.schema.ts +10 -0
  38. package/models/index.ts +1 -0
  39. package/models/page.schema.ts +0 -1
  40. package/models/subscription-feature.schema.ts +0 -17
  41. package/package.json +1 -1
  42. package/api/controllers/http/kie.ts +0 -5
  43. package/build/api/controllers/http/kie.js +0 -7
  44. package/build/commands/ai-model/find-formatted-ai-model-v2.command.js +0 -22
  45. package/build/commands/ai-model/find-model-pages.command.js +0 -31
  46. package/build/constants/model/enums/unified-model-content-type.enum.js +0 -20
  47. package/build/constants/model/index.js +0 -17
  48. package/build/constants/tool/enums/tool-content-type.enum.js +0 -16
  49. package/commands/ai-model/find-formatted-ai-model-v2.command.ts +0 -22
  50. package/commands/ai-model/find-model-pages.command.ts +0 -34
  51. package/constants/model/enums/index.ts +0 -1
  52. package/constants/model/enums/unified-model-content-type.enum.ts +0 -16
  53. package/constants/model/index.ts +0 -1
  54. package/constants/tool/enums/tool-content-type.enum.ts +0 -12
@@ -5,6 +5,5 @@ export const AI_MODEL_ROUTES = {
5
5
  FIND_BY_UUID: (uuid: string) => `by/uuid/${uuid}`,
6
6
  GET_ALL: 'all',
7
7
  GET_FORMATTED: 'formatted',
8
- GET_FORMATTED_V2: 'formatted/v2',
9
8
  AVAILABLE: 'available',
10
9
  } as const;
@@ -0,0 +1,5 @@
1
+ export const AI_PROXY_CONTROLLER = 'ai-proxy' as const;
2
+
3
+ export const AI_PROXY_ROUTES = {
4
+ IMAGE_CALLBACK: 'image-callback',
5
+ } as const;
@@ -0,0 +1,9 @@
1
+ export const B2B_CONTROLLER = 'private/b2b' as const;
2
+
3
+ export const B2B_ROUTES = {
4
+ GET_API_TOKEN: 'token',
5
+ REFRESH_API_TOKEN: 'token/refresh',
6
+ SEND_TEXT_REQUEST: 'completions',
7
+ SEND_IMAGE_REQUEST: 'image/generation',
8
+ FILE_UPLOAD: 'file/upload',
9
+ } as const;
@@ -14,7 +14,7 @@ export * from './form-submission';
14
14
  export * from './key-value';
15
15
  export * from './referral';
16
16
  export * from './message';
17
- export * from './kie';
17
+ export * from './ai-proxy';
18
18
  export * from './page';
19
19
  export * from './payment';
20
20
  export * from './presentation';
@@ -53,3 +53,4 @@ export * from './cabinet';
53
53
  export * from './webmaster';
54
54
  export * from './music';
55
55
  export * from './webmaster-click';
56
+ export * from './b2b';
@@ -5,5 +5,4 @@ export const PAGE_ROUTES = {
5
5
  GET_ALL: 'all',
6
6
  FIND_BY_ALIAS: (alias: string) => `by/alias/${alias}`,
7
7
  GET_ALL_WITH_RELATIONS: 'by/all',
8
- MODEL_PAGES: 'by/type/model',
9
8
  } as const;
package/api/routes.ts CHANGED
@@ -788,10 +788,17 @@ export const REST_API = {
788
788
  DELETE_BY_KEY: (namespace: string, key: string) =>
789
789
  `${ROOT}/${CONTROLLERS.KEY_VALUE_NAMESPACE_CONTROLLER}/${CONTROLLERS.KEY_VALUE_NAMESPACE_ROUTES.DELETE_BY_KEY(namespace, key)}`,
790
790
  },
791
- KIE: {
792
- CALLBACK: `${ROOT}/${CONTROLLERS.KIE_CONTROLLER}/${CONTROLLERS.KIE_ROUTES.CALLBACK}`,
791
+ AI_PROXY: {
792
+ IMAGE_CALLBACK: `${ROOT}/${CONTROLLERS.AI_PROXY_CONTROLLER}/${CONTROLLERS.AI_PROXY_ROUTES.IMAGE_CALLBACK}`,
793
793
  },
794
794
  CLOUD_PAYMENTS: {
795
795
  CALLBACK: `${ROOT}/${CONTROLLERS.CLOUD_PAYMENTS_CONTROLLER}/${CONTROLLERS.CLOUD_PAYMENTS_ROUTES.CALLBACK}`,
796
796
  },
797
+ B2B: {
798
+ GET_API_TOKEN: `${ROOT}/${CONTROLLERS.B2B_CONTROLLER}/${CONTROLLERS.B2B_ROUTES.GET_API_TOKEN}`,
799
+ REFRESH_API_TOKEN: `${ROOT}/${CONTROLLERS.B2B_CONTROLLER}/${CONTROLLERS.B2B_ROUTES.REFRESH_API_TOKEN}`,
800
+ SEND_TEXT_REQUEST: `${ROOT}/${CONTROLLERS.B2B_CONTROLLER}/${CONTROLLERS.B2B_ROUTES.SEND_TEXT_REQUEST}`,
801
+ SEND_IMAGE_REQUEST: `${ROOT}/${CONTROLLERS.B2B_CONTROLLER}/${CONTROLLERS.B2B_ROUTES.SEND_IMAGE_REQUEST}`,
802
+ FILE_UPLOAD: `${ROOT}/${CONTROLLERS.B2B_CONTROLLER}/${CONTROLLERS.B2B_ROUTES.FILE_UPLOAD}`,
803
+ },
797
804
  } as const;
@@ -7,6 +7,5 @@ exports.AI_MODEL_ROUTES = {
7
7
  FIND_BY_UUID: (uuid) => `by/uuid/${uuid}`,
8
8
  GET_ALL: 'all',
9
9
  GET_FORMATTED: 'formatted',
10
- GET_FORMATTED_V2: 'formatted/v2',
11
10
  AVAILABLE: 'available',
12
11
  };
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AI_PROXY_ROUTES = exports.AI_PROXY_CONTROLLER = void 0;
4
+ exports.AI_PROXY_CONTROLLER = 'ai-proxy';
5
+ exports.AI_PROXY_ROUTES = {
6
+ IMAGE_CALLBACK: 'image-callback',
7
+ };
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.B2B_ROUTES = exports.B2B_CONTROLLER = void 0;
4
+ exports.B2B_CONTROLLER = 'private/b2b';
5
+ exports.B2B_ROUTES = {
6
+ GET_API_TOKEN: 'token',
7
+ REFRESH_API_TOKEN: 'token/refresh',
8
+ SEND_TEXT_REQUEST: 'completions',
9
+ SEND_IMAGE_REQUEST: 'image/generation',
10
+ FILE_UPLOAD: 'file/upload',
11
+ };
@@ -30,7 +30,7 @@ __exportStar(require("./form-submission"), exports);
30
30
  __exportStar(require("./key-value"), exports);
31
31
  __exportStar(require("./referral"), exports);
32
32
  __exportStar(require("./message"), exports);
33
- __exportStar(require("./kie"), exports);
33
+ __exportStar(require("./ai-proxy"), exports);
34
34
  __exportStar(require("./page"), exports);
35
35
  __exportStar(require("./payment"), exports);
36
36
  __exportStar(require("./presentation"), exports);
@@ -69,3 +69,4 @@ __exportStar(require("./cabinet"), exports);
69
69
  __exportStar(require("./webmaster"), exports);
70
70
  __exportStar(require("./music"), exports);
71
71
  __exportStar(require("./webmaster-click"), exports);
72
+ __exportStar(require("./b2b"), exports);
@@ -7,5 +7,4 @@ exports.PAGE_ROUTES = {
7
7
  GET_ALL: 'all',
8
8
  FIND_BY_ALIAS: (alias) => `by/alias/${alias}`,
9
9
  GET_ALL_WITH_RELATIONS: 'by/all',
10
- MODEL_PAGES: 'by/type/model',
11
10
  };
@@ -617,10 +617,17 @@ exports.REST_API = {
617
617
  CREATE: (namespace) => `${exports.ROOT}/${CONTROLLERS.KEY_VALUE_NAMESPACE_CONTROLLER}/${CONTROLLERS.KEY_VALUE_NAMESPACE_ROUTES.CREATE(namespace)}`,
618
618
  DELETE_BY_KEY: (namespace, key) => `${exports.ROOT}/${CONTROLLERS.KEY_VALUE_NAMESPACE_CONTROLLER}/${CONTROLLERS.KEY_VALUE_NAMESPACE_ROUTES.DELETE_BY_KEY(namespace, key)}`,
619
619
  },
620
- KIE: {
621
- CALLBACK: `${exports.ROOT}/${CONTROLLERS.KIE_CONTROLLER}/${CONTROLLERS.KIE_ROUTES.CALLBACK}`,
620
+ AI_PROXY: {
621
+ IMAGE_CALLBACK: `${exports.ROOT}/${CONTROLLERS.AI_PROXY_CONTROLLER}/${CONTROLLERS.AI_PROXY_ROUTES.IMAGE_CALLBACK}`,
622
622
  },
623
623
  CLOUD_PAYMENTS: {
624
624
  CALLBACK: `${exports.ROOT}/${CONTROLLERS.CLOUD_PAYMENTS_CONTROLLER}/${CONTROLLERS.CLOUD_PAYMENTS_ROUTES.CALLBACK}`,
625
625
  },
626
+ B2B: {
627
+ GET_API_TOKEN: `${exports.ROOT}/${CONTROLLERS.B2B_CONTROLLER}/${CONTROLLERS.B2B_ROUTES.GET_API_TOKEN}`,
628
+ REFRESH_API_TOKEN: `${exports.ROOT}/${CONTROLLERS.B2B_CONTROLLER}/${CONTROLLERS.B2B_ROUTES.REFRESH_API_TOKEN}`,
629
+ SEND_TEXT_REQUEST: `${exports.ROOT}/${CONTROLLERS.B2B_CONTROLLER}/${CONTROLLERS.B2B_ROUTES.SEND_TEXT_REQUEST}`,
630
+ SEND_IMAGE_REQUEST: `${exports.ROOT}/${CONTROLLERS.B2B_CONTROLLER}/${CONTROLLERS.B2B_ROUTES.SEND_IMAGE_REQUEST}`,
631
+ FILE_UPLOAD: `${exports.ROOT}/${CONTROLLERS.B2B_CONTROLLER}/${CONTROLLERS.B2B_ROUTES.FILE_UPLOAD}`,
632
+ },
626
633
  };
@@ -19,6 +19,4 @@ __exportStar(require("./delete-ai-model.command"), exports);
19
19
  __exportStar(require("./find-ai-model.command"), exports);
20
20
  __exportStar(require("./find-ai-models-available-to-user.comand"), exports);
21
21
  __exportStar(require("./find-formatted-ai-model.command"), exports);
22
- __exportStar(require("./find-formatted-ai-model-v2.command"), exports);
23
- __exportStar(require("./find-model-pages.command"), exports);
24
22
  __exportStar(require("./update-ai-model.command"), exports);
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetApiKeyCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ var GetApiKeyCommand;
6
+ (function (GetApiKeyCommand) {
7
+ GetApiKeyCommand.ResponseSchema = zod_1.z.object({
8
+ data: zod_1.z.object({
9
+ apiKey: zod_1.z.string(),
10
+ }),
11
+ });
12
+ })(GetApiKeyCommand || (exports.GetApiKeyCommand = GetApiKeyCommand = {}));
@@ -14,4 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./unified-model-content-type.enum"), exports);
17
+ __exportStar(require("./get-api-key.command"), exports);
18
+ __exportStar(require("./refresh-api-key.command"), exports);
19
+ __exportStar(require("./send-text-request.command"), exports);
20
+ __exportStar(require("./send-image-request.command"), exports);
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RefreshApiKeyCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ var RefreshApiKeyCommand;
6
+ (function (RefreshApiKeyCommand) {
7
+ RefreshApiKeyCommand.ResponseSchema = zod_1.z.object({
8
+ data: zod_1.z.object({
9
+ apiKey: zod_1.z.string(),
10
+ }),
11
+ });
12
+ })(RefreshApiKeyCommand || (exports.RefreshApiKeyCommand = RefreshApiKeyCommand = {}));
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SendImageRequestCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const constants_1 = require("../../constants");
6
+ var SendImageRequestCommand;
7
+ (function (SendImageRequestCommand) {
8
+ SendImageRequestCommand.RequestSchema = zod_1.z.object({
9
+ model: zod_1.z.string(),
10
+ prompt: zod_1.z.string(),
11
+ params: zod_1.z.array(zod_1.z.object({
12
+ type: zod_1.z.nativeEnum(constants_1.AI_MODEL_CONFIG_PARAM),
13
+ option: zod_1.z.string().uuid(),
14
+ })),
15
+ refinePrompt: zod_1.z.boolean().default(false),
16
+ features: zod_1.z.array(zod_1.z.nativeEnum(constants_1.AI_MODEL_FEATURE)).optional().default([]),
17
+ files: zod_1.z.array(zod_1.z.string().uuid()).optional().default([]),
18
+ });
19
+ SendImageRequestCommand.ResponseSchema = zod_1.z.object({
20
+ data: zod_1.z.object({
21
+ urls: zod_1.z.array(zod_1.z.string()),
22
+ }),
23
+ });
24
+ })(SendImageRequestCommand || (exports.SendImageRequestCommand = SendImageRequestCommand = {}));
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SendTextRequestCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const constants_1 = require("../../constants");
6
+ var SendTextRequestCommand;
7
+ (function (SendTextRequestCommand) {
8
+ SendTextRequestCommand.BodySchema = zod_1.z.object({
9
+ model: zod_1.z.string(),
10
+ prompt: zod_1.z.string(),
11
+ files: zod_1.z.array(zod_1.z.string().uuid()),
12
+ features: zod_1.z.array(zod_1.z.nativeEnum(constants_1.AI_MODEL_FEATURE)),
13
+ });
14
+ SendTextRequestCommand.HeadersSchema = zod_1.z.object({
15
+ 'x-rugpt-key': zod_1.z.string(),
16
+ });
17
+ SendTextRequestCommand.ResponseSchema = zod_1.z.object({
18
+ data: zod_1.z.object({
19
+ text: zod_1.z.string(),
20
+ }),
21
+ });
22
+ })(SendTextRequestCommand || (exports.SendTextRequestCommand = SendTextRequestCommand = {}));
@@ -55,3 +55,4 @@ __exportStar(require("./daily-streak"), exports);
55
55
  __exportStar(require("./cabinet"), exports);
56
56
  __exportStar(require("./webmaster"), exports);
57
57
  __exportStar(require("./webmaster-click"), exports);
58
+ __exportStar(require("./b2b"), exports);
@@ -2346,14 +2346,29 @@ exports.ERRORS = {
2346
2346
  message: 'Ошибка при получении сводки записей о переходе по ссылке вебмастера',
2347
2347
  httpCode: 409,
2348
2348
  },
2349
- TOOL_GET_GLOBAL_CONFIG_ERROR: {
2349
+ FAILED_TO_GENERATE_API_KEY: {
2350
2350
  code: 'A480',
2351
- message: 'Ошибка при получении глобальной конфигурации инструментов',
2351
+ message: 'Не удалось сгенерировать ключ API',
2352
2352
  httpCode: 500,
2353
2353
  },
2354
- TOOL_GET_TOOLS_WITH_CONFIGS_ERROR: {
2354
+ FAILED_TO_REFRESH_API_KEY: {
2355
2355
  code: 'A481',
2356
- message: 'Ошибка при получении инструментов с конфигурациями',
2356
+ message: 'Не удалось обновить ключ API',
2357
2357
  httpCode: 500,
2358
2358
  },
2359
+ API_KEY_NOT_FOUND: {
2360
+ code: 'A482',
2361
+ message: 'Ключ API не найден',
2362
+ httpCode: 404,
2363
+ },
2364
+ API_KEY_IS_INACTIVE: {
2365
+ code: 'A483',
2366
+ message: 'Ключ API не активен',
2367
+ httpCode: 403,
2368
+ },
2369
+ API_KEY_ALREADY_EXISTS: {
2370
+ code: 'A484',
2371
+ message: 'Ключ API уже существует, если потеряли ключ воспользуйтесь GET token/refresh',
2372
+ httpCode: 409,
2373
+ },
2359
2374
  };
@@ -22,8 +22,6 @@ var SUBSCRIPTION_FEATURE_TYPE;
22
22
  SUBSCRIPTION_FEATURE_TYPE["CARRYOVER_BALANCE"] = "carryover_balance";
23
23
  SUBSCRIPTION_FEATURE_TYPE["MUSIC_MODEL_ACCESS"] = "music_model_access";
24
24
  SUBSCRIPTION_FEATURE_TYPE["MUSIC_QUOTA"] = "music_quota";
25
- SUBSCRIPTION_FEATURE_TYPE["WRITER_QUOTA"] = "writer_quota";
26
- SUBSCRIPTION_FEATURE_TYPE["WRITER_MODEL_ACCESS"] = "writer_model_access";
27
25
  })(SUBSCRIPTION_FEATURE_TYPE || (exports.SUBSCRIPTION_FEATURE_TYPE = SUBSCRIPTION_FEATURE_TYPE = {}));
28
26
  var SUBSCRIPTION_FEATURE_KIND;
29
27
  (function (SUBSCRIPTION_FEATURE_KIND) {
@@ -37,5 +35,4 @@ var SUBSCRIPTION_FEATURE_KIND;
37
35
  SUBSCRIPTION_FEATURE_KIND["PRESENTATION"] = "presentation";
38
36
  SUBSCRIPTION_FEATURE_KIND["BASE"] = "base";
39
37
  SUBSCRIPTION_FEATURE_KIND["MUSIC"] = "music";
40
- SUBSCRIPTION_FEATURE_KIND["WRITER"] = "writer";
41
38
  })(SUBSCRIPTION_FEATURE_KIND || (exports.SUBSCRIPTION_FEATURE_KIND = SUBSCRIPTION_FEATURE_KIND = {}));
@@ -14,6 +14,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./tool-content-type.enum"), exports);
18
17
  __exportStar(require("./tool-job-status.enum"), exports);
19
18
  __exportStar(require("./tool-type.enum"), exports);
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ApiKeySchema = void 0;
7
+ const zod_1 = __importDefault(require("zod"));
8
+ exports.ApiKeySchema = zod_1.default.object({
9
+ uuid: zod_1.default.string().uuid(),
10
+ userId: zod_1.default.string().uuid(),
11
+ key: zod_1.default.string(),
12
+ isActive: zod_1.default.boolean(),
13
+ createdAt: zod_1.default.date(),
14
+ updatedAt: zod_1.default.date(),
15
+ });
@@ -70,3 +70,4 @@ __exportStar(require("./webmaster.schema"), exports);
70
70
  __exportStar(require("./webmaster-balance.schema"), exports);
71
71
  __exportStar(require("./user-referrals.schema"), exports);
72
72
  __exportStar(require("./webmaster-click.schema"), exports);
73
+ __exportStar(require("./api-key.schema"), exports);
@@ -15,7 +15,6 @@ exports.PageSchema = zod_1.z.object({
15
15
  aIModelId: zod_1.z.string().uuid().nullable().optional(),
16
16
  toolId: zod_1.z.string().uuid().nullable().optional(),
17
17
  toolOptionId: zod_1.z.string().uuid().nullable().optional(),
18
- toolModelId: zod_1.z.string().uuid().nullable().optional(),
19
18
  toolTitle: zod_1.z.string().nullable(),
20
19
  type: zod_1.z.nativeEnum(constants_1.PageType),
21
20
  createdAt: zod_1.z.date(),
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SubscriptionFeatureSchema = exports.WriterModelAccessFeatureSchema = exports.WriterQuotaFeatureSchema = exports.MusicModelAccessFeatureSchema = exports.MusicQuotaFeatureSchema = exports.PresentationQuotaFeatureSchema = exports.VideoModelAccessFeatureSchema = exports.VideoQuotaFeatureSchema = exports.STTQuotaFeatureSchema = exports.STTModelAccessFeatureSchema = exports.TTSQuotaFeatureSchema = exports.ImageGenerationQuotaFeatureSchema = exports.TtsModelAccessFeatureSchema = exports.AdvancedToolsAccessFeatureSchema = exports.WebSearchFeatureSchema = exports.ExtendedContextFeatureSchema = exports.MaxInputLengthFeatureSchema = exports.RequestsQuotaFeatureSchema = exports.AiModelAccessFeatureSchema = exports.CarryoverBalanceFeatureSchema = exports.TokensFeatureSchema = exports.SubscriptionFeatureBaseSchema = void 0;
3
+ exports.SubscriptionFeatureSchema = exports.MusicModelAccessFeatureSchema = exports.MusicQuotaFeatureSchema = exports.PresentationQuotaFeatureSchema = exports.VideoModelAccessFeatureSchema = exports.VideoQuotaFeatureSchema = exports.STTQuotaFeatureSchema = exports.STTModelAccessFeatureSchema = exports.TTSQuotaFeatureSchema = exports.ImageGenerationQuotaFeatureSchema = exports.TtsModelAccessFeatureSchema = exports.AdvancedToolsAccessFeatureSchema = exports.WebSearchFeatureSchema = exports.ExtendedContextFeatureSchema = exports.MaxInputLengthFeatureSchema = exports.RequestsQuotaFeatureSchema = exports.AiModelAccessFeatureSchema = exports.CarryoverBalanceFeatureSchema = exports.TokensFeatureSchema = exports.SubscriptionFeatureBaseSchema = void 0;
4
4
  const constants_1 = require("../constants");
5
5
  const zod_1 = require("zod");
6
6
  exports.SubscriptionFeatureBaseSchema = zod_1.z.object({
@@ -121,17 +121,6 @@ exports.MusicModelAccessFeatureSchema = exports.SubscriptionFeatureBaseSchema.ex
121
121
  isAvailable: zod_1.z.boolean(),
122
122
  modelId: zod_1.z.string(),
123
123
  });
124
- exports.WriterQuotaFeatureSchema = exports.SubscriptionFeatureBaseSchema.extend({
125
- kind: zod_1.z.literal(constants_1.SUBSCRIPTION_FEATURE_KIND.WRITER),
126
- type: zod_1.z.literal(constants_1.SUBSCRIPTION_FEATURE_TYPE.WRITER_QUOTA),
127
- value: zod_1.z.number(),
128
- });
129
- exports.WriterModelAccessFeatureSchema = exports.SubscriptionFeatureBaseSchema.extend({
130
- kind: zod_1.z.literal(constants_1.SUBSCRIPTION_FEATURE_KIND.WRITER),
131
- type: zod_1.z.literal(constants_1.SUBSCRIPTION_FEATURE_TYPE.WRITER_MODEL_ACCESS),
132
- isAvailable: zod_1.z.boolean(),
133
- modelId: zod_1.z.string(),
134
- });
135
124
  exports.SubscriptionFeatureSchema = zod_1.z.union([
136
125
  exports.AiModelAccessFeatureSchema,
137
126
  exports.RequestsQuotaFeatureSchema,
@@ -151,6 +140,4 @@ exports.SubscriptionFeatureSchema = zod_1.z.union([
151
140
  exports.CarryoverBalanceFeatureSchema,
152
141
  exports.MusicQuotaFeatureSchema,
153
142
  exports.MusicModelAccessFeatureSchema,
154
- exports.WriterQuotaFeatureSchema,
155
- exports.WriterModelAccessFeatureSchema,
156
143
  ]);
@@ -3,6 +3,4 @@ export * from './delete-ai-model.command';
3
3
  export * from './find-ai-model.command';
4
4
  export * from './find-ai-models-available-to-user.comand';
5
5
  export * from './find-formatted-ai-model.command';
6
- export * from './find-formatted-ai-model-v2.command';
7
- export * from './find-model-pages.command';
8
6
  export * from './update-ai-model.command';
@@ -0,0 +1,11 @@
1
+ import { z } from 'zod';
2
+
3
+ export namespace GetApiKeyCommand {
4
+ export const ResponseSchema = z.object({
5
+ data: z.object({
6
+ apiKey: z.string(),
7
+ }),
8
+ });
9
+
10
+ export type Response = z.infer<typeof ResponseSchema>;
11
+ }
@@ -0,0 +1,4 @@
1
+ export * from './get-api-key.command';
2
+ export * from './refresh-api-key.command';
3
+ export * from './send-text-request.command';
4
+ export * from './send-image-request.command';
@@ -0,0 +1,11 @@
1
+ import { z } from 'zod';
2
+
3
+ export namespace RefreshApiKeyCommand {
4
+ export const ResponseSchema = z.object({
5
+ data: z.object({
6
+ apiKey: z.string(),
7
+ }),
8
+ });
9
+
10
+ export type Response = z.infer<typeof ResponseSchema>;
11
+ }
@@ -0,0 +1,28 @@
1
+ import { z } from 'zod';
2
+ import { AI_MODEL_CONFIG_PARAM, AI_MODEL_FEATURE } from '../../constants';
3
+
4
+ export namespace SendImageRequestCommand {
5
+ export const RequestSchema = z.object({
6
+ model: z.string(),
7
+ prompt: z.string(),
8
+ params: z.array(
9
+ z.object({
10
+ type: z.nativeEnum(AI_MODEL_CONFIG_PARAM),
11
+ option: z.string().uuid(),
12
+ }),
13
+ ),
14
+ refinePrompt: z.boolean().default(false),
15
+ features: z.array(z.nativeEnum(AI_MODEL_FEATURE)).optional().default([]),
16
+ files: z.array(z.string().uuid()).optional().default([]),
17
+ });
18
+
19
+ export type Request = z.infer<typeof RequestSchema>;
20
+
21
+ export const ResponseSchema = z.object({
22
+ data: z.object({
23
+ urls: z.array(z.string()),
24
+ }),
25
+ });
26
+
27
+ export type Response = z.infer<typeof ResponseSchema>;
28
+ }
@@ -0,0 +1,26 @@
1
+ import { z } from 'zod';
2
+ import { AI_MODEL_FEATURE } from '../../constants';
3
+
4
+ export namespace SendTextRequestCommand {
5
+ export const BodySchema = z.object({
6
+ model: z.string(),
7
+ prompt: z.string(),
8
+ files: z.array(z.string().uuid()),
9
+ features: z.array(z.nativeEnum(AI_MODEL_FEATURE)),
10
+ });
11
+
12
+ export const HeadersSchema = z.object({
13
+ 'x-rugpt-key': z.string(),
14
+ });
15
+
16
+ export const ResponseSchema = z.object({
17
+ data: z.object({
18
+ text: z.string(),
19
+ }),
20
+ });
21
+
22
+ // ✅ Types
23
+ export type Body = z.infer<typeof BodySchema>;
24
+ export type Headers = z.infer<typeof HeadersSchema>;
25
+ export type Response = z.infer<typeof ResponseSchema>;
26
+ }
package/commands/index.ts CHANGED
@@ -39,3 +39,4 @@ export * from './daily-streak';
39
39
  export * from './cabinet';
40
40
  export * from './webmaster';
41
41
  export * from './webmaster-click';
42
+ export * from './b2b';
@@ -2354,14 +2354,29 @@ export const ERRORS = {
2354
2354
  message: 'Ошибка при получении сводки записей о переходе по ссылке вебмастера',
2355
2355
  httpCode: 409,
2356
2356
  },
2357
- TOOL_GET_GLOBAL_CONFIG_ERROR: {
2357
+ FAILED_TO_GENERATE_API_KEY: {
2358
2358
  code: 'A480',
2359
- message: 'Ошибка при получении глобальной конфигурации инструментов',
2359
+ message: 'Не удалось сгенерировать ключ API',
2360
2360
  httpCode: 500,
2361
2361
  },
2362
- TOOL_GET_TOOLS_WITH_CONFIGS_ERROR: {
2362
+ FAILED_TO_REFRESH_API_KEY: {
2363
2363
  code: 'A481',
2364
- message: 'Ошибка при получении инструментов с конфигурациями',
2364
+ message: 'Не удалось обновить ключ API',
2365
2365
  httpCode: 500,
2366
2366
  },
2367
+ API_KEY_NOT_FOUND: {
2368
+ code: 'A482',
2369
+ message: 'Ключ API не найден',
2370
+ httpCode: 404,
2371
+ },
2372
+ API_KEY_IS_INACTIVE: {
2373
+ code: 'A483',
2374
+ message: 'Ключ API не активен',
2375
+ httpCode: 403,
2376
+ },
2377
+ API_KEY_ALREADY_EXISTS: {
2378
+ code: 'A484',
2379
+ message: 'Ключ API уже существует, если потеряли ключ воспользуйтесь GET token/refresh',
2380
+ httpCode: 409,
2381
+ },
2367
2382
  };
@@ -18,8 +18,6 @@ export enum SUBSCRIPTION_FEATURE_TYPE {
18
18
  CARRYOVER_BALANCE = 'carryover_balance',
19
19
  MUSIC_MODEL_ACCESS = 'music_model_access',
20
20
  MUSIC_QUOTA = 'music_quota',
21
- WRITER_QUOTA = 'writer_quota',
22
- WRITER_MODEL_ACCESS = 'writer_model_access',
23
21
  }
24
22
 
25
23
  export enum SUBSCRIPTION_FEATURE_KIND {
@@ -33,5 +31,4 @@ export enum SUBSCRIPTION_FEATURE_KIND {
33
31
  PRESENTATION = 'presentation',
34
32
  BASE = 'base',
35
33
  MUSIC = 'music',
36
- WRITER = 'writer',
37
34
  }
@@ -1,3 +1,2 @@
1
- export * from './tool-content-type.enum';
2
1
  export * from './tool-job-status.enum';
3
2
  export * from './tool-type.enum';
@@ -0,0 +1,10 @@
1
+ import z from 'zod';
2
+
3
+ export const ApiKeySchema = z.object({
4
+ uuid: z.string().uuid(),
5
+ userId: z.string().uuid(),
6
+ key: z.string(),
7
+ isActive: z.boolean(),
8
+ createdAt: z.date(),
9
+ updatedAt: z.date(),
10
+ });
package/models/index.ts CHANGED
@@ -54,3 +54,4 @@ export * from './webmaster.schema';
54
54
  export * from './webmaster-balance.schema';
55
55
  export * from './user-referrals.schema';
56
56
  export * from './webmaster-click.schema';
57
+ export * from './api-key.schema';
@@ -13,7 +13,6 @@ export const PageSchema = z.object({
13
13
  aIModelId: z.string().uuid().nullable().optional(),
14
14
  toolId: z.string().uuid().nullable().optional(),
15
15
  toolOptionId: z.string().uuid().nullable().optional(),
16
- toolModelId: z.string().uuid().nullable().optional(),
17
16
  toolTitle: z.string().nullable(),
18
17
  type: z.nativeEnum(PageType),
19
18
 
@@ -162,21 +162,6 @@ export const MusicModelAccessFeatureSchema = SubscriptionFeatureBaseSchema.exten
162
162
  });
163
163
  export type MusicModelAccessFeature = z.infer<typeof MusicModelAccessFeatureSchema>;
164
164
 
165
- export const WriterQuotaFeatureSchema = SubscriptionFeatureBaseSchema.extend({
166
- kind: z.literal(SUBSCRIPTION_FEATURE_KIND.WRITER),
167
- type: z.literal(SUBSCRIPTION_FEATURE_TYPE.WRITER_QUOTA),
168
- value: z.number(),
169
- });
170
- export type WriterQuotaFeature = z.infer<typeof WriterQuotaFeatureSchema>;
171
-
172
- export const WriterModelAccessFeatureSchema = SubscriptionFeatureBaseSchema.extend({
173
- kind: z.literal(SUBSCRIPTION_FEATURE_KIND.WRITER),
174
- type: z.literal(SUBSCRIPTION_FEATURE_TYPE.WRITER_MODEL_ACCESS),
175
- isAvailable: z.boolean(),
176
- modelId: z.string(),
177
- });
178
- export type WriterModelAccessFeature = z.infer<typeof WriterModelAccessFeatureSchema>;
179
-
180
165
  export const SubscriptionFeatureSchema = z.union([
181
166
  AiModelAccessFeatureSchema,
182
167
  RequestsQuotaFeatureSchema,
@@ -196,8 +181,6 @@ export const SubscriptionFeatureSchema = z.union([
196
181
  CarryoverBalanceFeatureSchema,
197
182
  MusicQuotaFeatureSchema,
198
183
  MusicModelAccessFeatureSchema,
199
- WriterQuotaFeatureSchema,
200
- WriterModelAccessFeatureSchema,
201
184
  ]);
202
185
 
203
186
  export type SubscriptionFeature = z.infer<typeof SubscriptionFeatureSchema>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purpleschool/gptbot",
3
- "version": "0.7.95",
3
+ "version": "0.7.96-b2b",
4
4
  "description": "",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -1,5 +0,0 @@
1
- export const KIE_CONTROLLER = 'kie' as const;
2
-
3
- export const KIE_ROUTES = {
4
- CALLBACK: 'callback',
5
- } as const;
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.KIE_ROUTES = exports.KIE_CONTROLLER = void 0;
4
- exports.KIE_CONTROLLER = 'kie';
5
- exports.KIE_ROUTES = {
6
- CALLBACK: 'callback',
7
- };
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FindFormattedAIModelV2Command = void 0;
4
- const zod_1 = require("zod");
5
- const unified_model_content_type_enum_1 = require("../../constants/model/enums/unified-model-content-type.enum");
6
- const icon_variants_schema_1 = require("../../models/icon-variants.schema");
7
- const FormattedModelSchema = zod_1.z.object({
8
- uuid: zod_1.z.string().uuid(),
9
- title: zod_1.z.string(),
10
- description: zod_1.z.string().nullable(),
11
- contentType: zod_1.z.nativeEnum(unified_model_content_type_enum_1.UNIFIED_MODEL_CONTENT_TYPE),
12
- order: zod_1.z.number(),
13
- icons: icon_variants_schema_1.IconVariantsSchema,
14
- pageAlias: zod_1.z.string().nullable().optional(),
15
- isToolModel: zod_1.z.boolean(),
16
- });
17
- var FindFormattedAIModelV2Command;
18
- (function (FindFormattedAIModelV2Command) {
19
- FindFormattedAIModelV2Command.ResponseSchema = zod_1.z.object({
20
- data: zod_1.z.array(FormattedModelSchema),
21
- });
22
- })(FindFormattedAIModelV2Command || (exports.FindFormattedAIModelV2Command = FindFormattedAIModelV2Command = {}));
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FindModelPagesCommand = exports.PageWithModelSchema = void 0;
4
- const zod_1 = require("zod");
5
- const icon_variants_schema_1 = require("../../models/icon-variants.schema");
6
- const unified_model_content_type_enum_1 = require("../../constants/model/enums/unified-model-content-type.enum");
7
- const ModelSchema = zod_1.z.object({
8
- uuid: zod_1.z.string().uuid(),
9
- title: zod_1.z.string(),
10
- description: zod_1.z.string().nullable(),
11
- contentType: zod_1.z.nativeEnum(unified_model_content_type_enum_1.UNIFIED_MODEL_CONTENT_TYPE),
12
- order: zod_1.z.number(),
13
- icons: icon_variants_schema_1.IconVariantsSchema,
14
- });
15
- exports.PageWithModelSchema = zod_1.z.object({
16
- uuid: zod_1.z.string().uuid(),
17
- title: zod_1.z.string(),
18
- alias: zod_1.z.string(),
19
- type: zod_1.z.string(),
20
- toolId: zod_1.z.string().uuid().nullable(),
21
- toolModelId: zod_1.z.string().uuid().nullable(),
22
- toolOptionId: zod_1.z.string().uuid().nullable(),
23
- aIModelId: zod_1.z.string().uuid().nullable(),
24
- model: ModelSchema,
25
- });
26
- var FindModelPagesCommand;
27
- (function (FindModelPagesCommand) {
28
- FindModelPagesCommand.ResponseSchema = zod_1.z.object({
29
- data: zod_1.z.array(exports.PageWithModelSchema),
30
- });
31
- })(FindModelPagesCommand || (exports.FindModelPagesCommand = FindModelPagesCommand = {}));
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UNIFIED_MODEL_CONTENT_TYPE = void 0;
4
- var UNIFIED_MODEL_CONTENT_TYPE;
5
- (function (UNIFIED_MODEL_CONTENT_TYPE) {
6
- // AI Model types
7
- UNIFIED_MODEL_CONTENT_TYPE["TEXT"] = "TEXT";
8
- UNIFIED_MODEL_CONTENT_TYPE["IMAGE"] = "IMAGE";
9
- // Tool types
10
- UNIFIED_MODEL_CONTENT_TYPE["IMAGE_EDITOR"] = "IMAGE_EDITOR";
11
- UNIFIED_MODEL_CONTENT_TYPE["TEXT_TO_SPEECH"] = "TEXT_TO_SPEECH";
12
- UNIFIED_MODEL_CONTENT_TYPE["SPEECH_TO_TEXT"] = "SPEECH_TO_TEXT";
13
- UNIFIED_MODEL_CONTENT_TYPE["REPHRASE"] = "REPHRASE";
14
- UNIFIED_MODEL_CONTENT_TYPE["VIDEO"] = "VIDEO";
15
- UNIFIED_MODEL_CONTENT_TYPE["PRESENTATION"] = "PRESENTATION";
16
- UNIFIED_MODEL_CONTENT_TYPE["WRITER"] = "WRITER";
17
- UNIFIED_MODEL_CONTENT_TYPE["VIDEO_EDITOR"] = "VIDEO_EDITOR";
18
- UNIFIED_MODEL_CONTENT_TYPE["MUSIC"] = "MUSIC";
19
- UNIFIED_MODEL_CONTENT_TYPE["NONE"] = "NONE";
20
- })(UNIFIED_MODEL_CONTENT_TYPE || (exports.UNIFIED_MODEL_CONTENT_TYPE = UNIFIED_MODEL_CONTENT_TYPE = {}));
@@ -1,17 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./enums"), exports);
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TOOL_CONTENT_TYPE = void 0;
4
- var TOOL_CONTENT_TYPE;
5
- (function (TOOL_CONTENT_TYPE) {
6
- TOOL_CONTENT_TYPE["IMAGE_EDITOR"] = "IMAGE_EDITOR";
7
- TOOL_CONTENT_TYPE["TEXT_TO_SPEECH"] = "TEXT_TO_SPEECH";
8
- TOOL_CONTENT_TYPE["SPEECH_TO_TEXT"] = "SPEECH_TO_TEXT";
9
- TOOL_CONTENT_TYPE["REPHRASE"] = "REPHRASE";
10
- TOOL_CONTENT_TYPE["VIDEO"] = "VIDEO";
11
- TOOL_CONTENT_TYPE["PRESENTATION"] = "PRESENTATION";
12
- TOOL_CONTENT_TYPE["WRITER"] = "WRITER";
13
- TOOL_CONTENT_TYPE["VIDEO_EDITOR"] = "VIDEO_EDITOR";
14
- TOOL_CONTENT_TYPE["MUSIC"] = "MUSIC";
15
- TOOL_CONTENT_TYPE["NONE"] = "NONE";
16
- })(TOOL_CONTENT_TYPE || (exports.TOOL_CONTENT_TYPE = TOOL_CONTENT_TYPE = {}));
@@ -1,22 +0,0 @@
1
- import { z } from 'zod';
2
- import { UNIFIED_MODEL_CONTENT_TYPE } from '../../constants/model/enums/unified-model-content-type.enum';
3
- import { IconVariantsSchema } from '../../models/icon-variants.schema';
4
-
5
- const FormattedModelSchema = z.object({
6
- uuid: z.string().uuid(),
7
- title: z.string(),
8
- description: z.string().nullable(),
9
- contentType: z.nativeEnum(UNIFIED_MODEL_CONTENT_TYPE),
10
- order: z.number(),
11
- icons: IconVariantsSchema,
12
- pageAlias: z.string().nullable().optional(),
13
- isToolModel: z.boolean(),
14
- });
15
-
16
- export namespace FindFormattedAIModelV2Command {
17
- export const ResponseSchema = z.object({
18
- data: z.array(FormattedModelSchema),
19
- });
20
-
21
- export type Response = z.infer<typeof ResponseSchema>;
22
- }
@@ -1,34 +0,0 @@
1
- import { z } from 'zod';
2
- import { IconVariantsSchema } from '../../models/icon-variants.schema';
3
- import { UNIFIED_MODEL_CONTENT_TYPE } from '../../constants/model/enums/unified-model-content-type.enum';
4
-
5
- const ModelSchema = z.object({
6
- uuid: z.string().uuid(),
7
- title: z.string(),
8
- description: z.string().nullable(),
9
- contentType: z.nativeEnum(UNIFIED_MODEL_CONTENT_TYPE),
10
- order: z.number(),
11
- icons: IconVariantsSchema,
12
- });
13
-
14
- export const PageWithModelSchema = z.object({
15
- uuid: z.string().uuid(),
16
- title: z.string(),
17
- alias: z.string(),
18
- type: z.string(),
19
- toolId: z.string().uuid().nullable(),
20
- toolModelId: z.string().uuid().nullable(),
21
- toolOptionId: z.string().uuid().nullable(),
22
- aIModelId: z.string().uuid().nullable(),
23
- model: ModelSchema,
24
- });
25
-
26
- export type PageWithModel = z.infer<typeof PageWithModelSchema>;
27
-
28
- export namespace FindModelPagesCommand {
29
- export const ResponseSchema = z.object({
30
- data: z.array(PageWithModelSchema),
31
- });
32
-
33
- export type Response = z.infer<typeof ResponseSchema>;
34
- }
@@ -1 +0,0 @@
1
- export * from './unified-model-content-type.enum';
@@ -1,16 +0,0 @@
1
- export enum UNIFIED_MODEL_CONTENT_TYPE {
2
- // AI Model types
3
- TEXT = 'TEXT',
4
- IMAGE = 'IMAGE',
5
- // Tool types
6
- IMAGE_EDITOR = 'IMAGE_EDITOR',
7
- TEXT_TO_SPEECH = 'TEXT_TO_SPEECH',
8
- SPEECH_TO_TEXT = 'SPEECH_TO_TEXT',
9
- REPHRASE = 'REPHRASE',
10
- VIDEO = 'VIDEO',
11
- PRESENTATION = 'PRESENTATION',
12
- WRITER = 'WRITER',
13
- VIDEO_EDITOR = 'VIDEO_EDITOR',
14
- MUSIC = 'MUSIC',
15
- NONE = 'NONE',
16
- }
@@ -1 +0,0 @@
1
- export * from './enums';
@@ -1,12 +0,0 @@
1
- export enum TOOL_CONTENT_TYPE {
2
- IMAGE_EDITOR = 'IMAGE_EDITOR',
3
- TEXT_TO_SPEECH = 'TEXT_TO_SPEECH',
4
- SPEECH_TO_TEXT = 'SPEECH_TO_TEXT',
5
- REPHRASE = 'REPHRASE',
6
- VIDEO = 'VIDEO',
7
- PRESENTATION = 'PRESENTATION',
8
- WRITER = 'WRITER',
9
- VIDEO_EDITOR = 'VIDEO_EDITOR',
10
- MUSIC = 'MUSIC',
11
- NONE = 'NONE',
12
- }