@purpleschool/gptbot 0.12.62 → 0.12.64

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 (38) hide show
  1. package/api/controllers/http/canvas-node-definition.ts +5 -0
  2. package/api/controllers/http/canvas.ts +1 -0
  3. package/api/controllers/http/index.ts +1 -0
  4. package/build/api/controllers/http/canvas-node-definition.js +7 -0
  5. package/build/api/controllers/http/canvas.js +1 -0
  6. package/build/api/controllers/http/index.js +1 -0
  7. package/build/commands/canvas/find-canvases-by-user.query.js +1 -0
  8. package/build/commands/canvas/index.js +1 -0
  9. package/build/commands/canvas/run-canvas.command.js +23 -0
  10. package/build/commands/canvas-node/find-canvas-node-definitions-with-configs.query.js +11 -0
  11. package/build/commands/canvas-node/index.js +1 -0
  12. package/build/commands/team-account/find-team-accounts-by-name.command.js +19 -1
  13. package/build/constants/canvas/enums/canvas-status.enum.js +9 -0
  14. package/build/constants/canvas/enums/index.js +17 -0
  15. package/build/constants/canvas/index.js +17 -0
  16. package/build/constants/index.js +1 -0
  17. package/build/models/canvas-node-definition.schema.js +74 -0
  18. package/build/models/canvas-node.schema.js +19 -10
  19. package/build/models/canvas.schema.js +2 -0
  20. package/build/models/index.js +1 -0
  21. package/build/models/tools/image-editor/image-editor-model.schema.js +7 -4
  22. package/commands/canvas/find-canvases-by-user.query.ts +1 -0
  23. package/commands/canvas/index.ts +1 -0
  24. package/commands/canvas/run-canvas.command.ts +31 -0
  25. package/commands/canvas-node/find-canvas-node-definitions-with-configs.query.ts +10 -0
  26. package/commands/canvas-node/index.ts +1 -0
  27. package/commands/team-account/find-team-accounts-by-name.command.ts +24 -1
  28. package/constants/canvas/enums/canvas-status.enum.ts +5 -0
  29. package/constants/canvas/enums/index.ts +1 -0
  30. package/constants/canvas/index.ts +1 -0
  31. package/constants/index.ts +1 -0
  32. package/helpers/image-generation/calculate-gpt-image-2-price-with-margin.helper.ts +1 -1
  33. package/models/canvas-node-definition.schema.ts +94 -0
  34. package/models/canvas-node.schema.ts +20 -11
  35. package/models/canvas.schema.ts +2 -0
  36. package/models/index.ts +1 -0
  37. package/models/tools/image-editor/image-editor-model.schema.ts +7 -4
  38. package/package.json +1 -1
@@ -0,0 +1,5 @@
1
+ export const CANVAS_NODE_DEFINITION_PRIVATE_CONTROLLER = 'private/canvas-node-definitions';
2
+
3
+ export const CANVAS_NODE_DEFINITION_ROUTES = {
4
+ GET: '',
5
+ } as const;
@@ -8,4 +8,5 @@ export const CANVAS_ROUTES = {
8
8
  SAVE: (uuid: string) => `${uuid}/save`,
9
9
  UPDATE: (uuid: string) => `${uuid}`,
10
10
  DELETE: (uuid: string) => `${uuid}`,
11
+ RUN: (uuid: string) => `${uuid}/run`,
11
12
  } as const;
@@ -5,6 +5,7 @@ export * from './ai-vendor';
5
5
  export * from './auth';
6
6
  export * from './blog';
7
7
  export * from './canvas';
8
+ export * from './canvas-node-definition';
8
9
  export * from './canvas-node';
9
10
  export * from './canvas-edge';
10
11
  export * from './category';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CANVAS_NODE_DEFINITION_ROUTES = exports.CANVAS_NODE_DEFINITION_PRIVATE_CONTROLLER = void 0;
4
+ exports.CANVAS_NODE_DEFINITION_PRIVATE_CONTROLLER = 'private/canvas-node-definitions';
5
+ exports.CANVAS_NODE_DEFINITION_ROUTES = {
6
+ GET: '',
7
+ };
@@ -10,4 +10,5 @@ exports.CANVAS_ROUTES = {
10
10
  SAVE: (uuid) => `${uuid}/save`,
11
11
  UPDATE: (uuid) => `${uuid}`,
12
12
  DELETE: (uuid) => `${uuid}`,
13
+ RUN: (uuid) => `${uuid}/run`,
13
14
  };
@@ -21,6 +21,7 @@ __exportStar(require("./ai-vendor"), exports);
21
21
  __exportStar(require("./auth"), exports);
22
22
  __exportStar(require("./blog"), exports);
23
23
  __exportStar(require("./canvas"), exports);
24
+ __exportStar(require("./canvas-node-definition"), exports);
24
25
  __exportStar(require("./canvas-node"), exports);
25
26
  __exportStar(require("./canvas-edge"), exports);
26
27
  __exportStar(require("./category"), exports);
@@ -8,6 +8,7 @@ var FindCanvasesByUserQuery;
8
8
  FindCanvasesByUserQuery.RequestSchema = zod_1.z.object({
9
9
  limit: zod_1.z.coerce.number().min(1).default(10),
10
10
  offset: zod_1.z.coerce.number().min(0).default(0),
11
+ name: zod_1.z.string().trim().optional(),
11
12
  });
12
13
  FindCanvasesByUserQuery.ResponseSchema = zod_1.z.object({
13
14
  data: zod_1.z.array(models_1.CanvasSchema),
@@ -19,5 +19,6 @@ __exportStar(require("./delete-canvas.command"), exports);
19
19
  __exportStar(require("./find-canvas-by-uuid.query"), exports);
20
20
  __exportStar(require("./find-canvas-by-uuid-with-relations.query"), exports);
21
21
  __exportStar(require("./find-canvases-by-user.query"), exports);
22
+ __exportStar(require("./run-canvas.command"), exports);
22
23
  __exportStar(require("./save-canvas.command"), exports);
23
24
  __exportStar(require("./update-canvas.command"), exports);
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RunCanvasCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const models_1 = require("../../models");
6
+ const save_canvas_command_1 = require("./save-canvas.command");
7
+ var RunCanvasCommand;
8
+ (function (RunCanvasCommand) {
9
+ RunCanvasCommand.RequestParamSchema = models_1.CanvasSchema.pick({
10
+ uuid: true,
11
+ });
12
+ RunCanvasCommand.RequestSchema = zod_1.z.object({
13
+ updatedAt: zod_1.z.preprocess((value) => (typeof value === 'string' ? new Date(value) : value), zod_1.z.date()),
14
+ nodes: zod_1.z.array(save_canvas_command_1.SaveCanvasCommand.CanvasNodePayloadSchema),
15
+ edges: zod_1.z.array(save_canvas_command_1.SaveCanvasCommand.CanvasEdgePayloadSchema),
16
+ });
17
+ RunCanvasCommand.ResponseSchema = zod_1.z.object({
18
+ data: models_1.CanvasSchema.extend({
19
+ nodes: zod_1.z.array(models_1.CanvasNodeSchema),
20
+ edges: zod_1.z.array(models_1.CanvasEdgeSchema),
21
+ }),
22
+ });
23
+ })(RunCanvasCommand || (exports.RunCanvasCommand = RunCanvasCommand = {}));
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FindCanvasNodeDefinitionsWithConfigsQuery = void 0;
4
+ const zod_1 = require("zod");
5
+ const models_1 = require("../../models");
6
+ var FindCanvasNodeDefinitionsWithConfigsQuery;
7
+ (function (FindCanvasNodeDefinitionsWithConfigsQuery) {
8
+ FindCanvasNodeDefinitionsWithConfigsQuery.ResponseSchema = zod_1.z.object({
9
+ data: models_1.CanvasNodeDefinitionsWithConfigsSchema,
10
+ });
11
+ })(FindCanvasNodeDefinitionsWithConfigsQuery || (exports.FindCanvasNodeDefinitionsWithConfigsQuery = FindCanvasNodeDefinitionsWithConfigsQuery = {}));
@@ -17,5 +17,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./create-canvas-node.command"), exports);
18
18
  __exportStar(require("./delete-canvas-node.command"), exports);
19
19
  __exportStar(require("./find-canvas-node-by-uuid.query"), exports);
20
+ __exportStar(require("./find-canvas-node-definitions-with-configs.query"), exports);
20
21
  __exportStar(require("./find-canvas-nodes-by-canvas.query"), exports);
21
22
  __exportStar(require("./update-canvas-node.command"), exports);
@@ -6,10 +6,28 @@ const models_1 = require("../../models");
6
6
  const constants_1 = require("../../constants");
7
7
  var FindTeamAccountsByNameCommand;
8
8
  (function (FindTeamAccountsByNameCommand) {
9
+ const BooleanQuerySchema = zod_1.z
10
+ .union([zod_1.z.boolean(), zod_1.z.string().trim().toLowerCase()])
11
+ .transform((value, ctx) => {
12
+ if (typeof value === 'boolean') {
13
+ return value;
14
+ }
15
+ if (value === 'true') {
16
+ return true;
17
+ }
18
+ if (value === 'false') {
19
+ return false;
20
+ }
21
+ ctx.addIssue({
22
+ code: zod_1.z.ZodIssueCode.custom,
23
+ message: 'Expected boolean value: true or false',
24
+ });
25
+ return zod_1.z.NEVER;
26
+ });
9
27
  FindTeamAccountsByNameCommand.RequestSchema = zod_1.z.object({
10
28
  name: zod_1.z.string().trim().min(1).optional(),
11
29
  creatorEmail: zod_1.z.string().trim().min(1).optional(),
12
- hasPaidSubscription: zod_1.z.boolean().optional(),
30
+ hasPaidSubscription: BooleanQuerySchema.optional(),
13
31
  limit: zod_1.z.coerce.number().int().min(1).max(100).default(20).optional(),
14
32
  offset: zod_1.z.coerce.number().int().min(0).default(0).optional(),
15
33
  sortBy: zod_1.z
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CANVAS_STATUS = void 0;
4
+ var CANVAS_STATUS;
5
+ (function (CANVAS_STATUS) {
6
+ CANVAS_STATUS["IDLE"] = "IDLE";
7
+ CANVAS_STATUS["RUNNING"] = "RUNNING";
8
+ CANVAS_STATUS["FAILED"] = "FAILED";
9
+ })(CANVAS_STATUS || (exports.CANVAS_STATUS = CANVAS_STATUS = {}));
@@ -0,0 +1,17 @@
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("./canvas-status.enum"), exports);
@@ -0,0 +1,17 @@
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);
@@ -56,6 +56,7 @@ __exportStar(require("./tool-html-page-builder"), exports);
56
56
  __exportStar(require("./feedback"), exports);
57
57
  __exportStar(require("./daily-streak"), exports);
58
58
  __exportStar(require("./cabinet"), exports);
59
+ __exportStar(require("./canvas"), exports);
59
60
  __exportStar(require("./canvas-node"), exports);
60
61
  __exportStar(require("./canvas-edge"), exports);
61
62
  __exportStar(require("./webmaster"), exports);
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CanvasNodeDefinitionsWithConfigsSchema = exports.CanvasNodeDefinitionWithConfigSchema = exports.CanvasNodeDefinitionSchema = exports.CanvasNodeDefinitionToolConfigSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const constants_1 = require("../constants");
6
+ const icon_variants_schema_1 = require("./icon-variants.schema");
7
+ const tools_1 = require("./tools");
8
+ const createCanvasNodeDefinitionNoConfigSchema = (nodeType) => zod_1.z.object({
9
+ nodeType: zod_1.z.literal(nodeType),
10
+ toolType: zod_1.z.null(),
11
+ config: zod_1.z.null(),
12
+ });
13
+ exports.CanvasNodeDefinitionToolConfigSchema = zod_1.z.discriminatedUnion('nodeType', [
14
+ zod_1.z.object({
15
+ nodeType: zod_1.z.literal(constants_1.CANVAS_NODE_TYPE.imageGen),
16
+ toolType: zod_1.z.literal(constants_1.TOOL_CONTENT_TYPE.IMAGE_GENERATION),
17
+ config: tools_1.ImageGenerationConfigSchema,
18
+ }),
19
+ zod_1.z.object({
20
+ nodeType: zod_1.z.literal(constants_1.CANVAS_NODE_TYPE.imageEdit),
21
+ toolType: zod_1.z.literal(constants_1.TOOL_CONTENT_TYPE.IMAGE_EDITOR),
22
+ config: tools_1.ImageEditorConfigSchema,
23
+ }),
24
+ zod_1.z.object({
25
+ nodeType: zod_1.z.literal(constants_1.CANVAS_NODE_TYPE.ttsGen),
26
+ toolType: zod_1.z.literal(constants_1.TOOL_CONTENT_TYPE.TEXT_TO_SPEECH),
27
+ config: tools_1.TTSConfigSchema,
28
+ }),
29
+ zod_1.z.object({
30
+ nodeType: zod_1.z.literal(constants_1.CANVAS_NODE_TYPE.sttGen),
31
+ toolType: zod_1.z.literal(constants_1.TOOL_CONTENT_TYPE.SPEECH_TO_TEXT),
32
+ config: tools_1.STTConfigSchema,
33
+ }),
34
+ zod_1.z.object({
35
+ nodeType: zod_1.z.literal(constants_1.CANVAS_NODE_TYPE.videoGen),
36
+ toolType: zod_1.z.literal(constants_1.TOOL_CONTENT_TYPE.VIDEO),
37
+ config: tools_1.VideoConfigSchema,
38
+ }),
39
+ zod_1.z.object({
40
+ nodeType: zod_1.z.literal(constants_1.CANVAS_NODE_TYPE.videoEdit),
41
+ toolType: zod_1.z.literal(constants_1.TOOL_CONTENT_TYPE.VIDEO_EDITOR),
42
+ config: tools_1.VideoEditorConfigSchema,
43
+ }),
44
+ zod_1.z.object({
45
+ nodeType: zod_1.z.literal(constants_1.CANVAS_NODE_TYPE.htmlGen),
46
+ toolType: zod_1.z.literal(constants_1.TOOL_CONTENT_TYPE.HTML_PAGE_BUILDER),
47
+ config: tools_1.HtmlPageBuilderConfigSchema,
48
+ }),
49
+ createCanvasNodeDefinitionNoConfigSchema(constants_1.CANVAS_NODE_TYPE.textGen),
50
+ createCanvasNodeDefinitionNoConfigSchema(constants_1.CANVAS_NODE_TYPE.textBlock),
51
+ createCanvasNodeDefinitionNoConfigSchema(constants_1.CANVAS_NODE_TYPE.imageBlock),
52
+ createCanvasNodeDefinitionNoConfigSchema(constants_1.CANVAS_NODE_TYPE.videoBlock),
53
+ createCanvasNodeDefinitionNoConfigSchema(constants_1.CANVAS_NODE_TYPE.fileBlock),
54
+ createCanvasNodeDefinitionNoConfigSchema(constants_1.CANVAS_NODE_TYPE.note),
55
+ createCanvasNodeDefinitionNoConfigSchema(constants_1.CANVAS_NODE_TYPE.colorPalette),
56
+ createCanvasNodeDefinitionNoConfigSchema(constants_1.CANVAS_NODE_TYPE.motionControl),
57
+ createCanvasNodeDefinitionNoConfigSchema(constants_1.CANVAS_NODE_TYPE.varGen),
58
+ createCanvasNodeDefinitionNoConfigSchema(constants_1.CANVAS_NODE_TYPE.varBlock),
59
+ ]);
60
+ exports.CanvasNodeDefinitionSchema = zod_1.z.object({
61
+ type: zod_1.z.nativeEnum(constants_1.CANVAS_NODE_TYPE),
62
+ label: zod_1.z.string(),
63
+ icons: icon_variants_schema_1.IconVariantsSchema,
64
+ inputPoints: zod_1.z.array(zod_1.z.nativeEnum(constants_1.INPUT_OUTPUT_TYPE)),
65
+ outputPoints: zod_1.z.array(zod_1.z.nativeEnum(constants_1.INPUT_OUTPUT_TYPE)),
66
+ toolType: zod_1.z.nativeEnum(constants_1.TOOL_CONTENT_TYPE).nullable(),
67
+ createdAt: zod_1.z.date(),
68
+ updatedAt: zod_1.z.date(),
69
+ });
70
+ exports.CanvasNodeDefinitionWithConfigSchema = zod_1.z.object({
71
+ nodeDefinition: exports.CanvasNodeDefinitionSchema,
72
+ config: exports.CanvasNodeDefinitionToolConfigSchema,
73
+ });
74
+ exports.CanvasNodeDefinitionsWithConfigsSchema = zod_1.z.record(zod_1.z.nativeEnum(constants_1.CANVAS_NODE_TYPE), exports.CanvasNodeDefinitionWithConfigSchema);
@@ -26,18 +26,27 @@ exports.ImageGenParamsSchema = strictObject({
26
26
  });
27
27
  exports.VideoGenParamsSchema = strictObject({
28
28
  prompt: zod_1.z.string(),
29
- duration: zod_1.z.string(),
30
- resolution: zod_1.z.string(),
31
- });
32
- exports.AudioGenParamsSchema = strictObject({
33
- mode: zod_1.z.union([zod_1.z.literal('tts'), zod_1.z.literal('stt')]),
34
- prompt: zod_1.z.string(),
35
- voice: zod_1.z.string(),
36
29
  model: zod_1.z.string(),
37
- stability: zod_1.z.number(),
38
- similarityBoost: zod_1.z.number(),
39
- audioFileUrl: zod_1.z.string(),
30
+ duration: zod_1.z.string().optional(),
31
+ aspectRatio: zod_1.z.string().optional(),
32
+ resolution: zod_1.z.string().optional(),
40
33
  });
34
+ exports.AudioGenParamsSchema = zod_1.z.discriminatedUnion('mode', [
35
+ strictObject({
36
+ mode: zod_1.z.literal('tts'),
37
+ prompt: zod_1.z.string(),
38
+ model: zod_1.z.string(),
39
+ voice: zod_1.z.string(),
40
+ stability: zod_1.z.number(),
41
+ similarityBoost: zod_1.z.number(),
42
+ }),
43
+ strictObject({
44
+ mode: zod_1.z.literal('stt'),
45
+ prompt: zod_1.z.string(),
46
+ model: zod_1.z.string(),
47
+ audioFileId: zod_1.z.string().uuid(),
48
+ }),
49
+ ]);
41
50
  exports.ColorPaletteParamsSchema = strictObject({
42
51
  prompt: zod_1.z.string(),
43
52
  });
@@ -2,10 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CanvasSchema = void 0;
4
4
  const zod_1 = require("zod");
5
+ const constants_1 = require("../constants");
5
6
  exports.CanvasSchema = zod_1.z.object({
6
7
  uuid: zod_1.z.string().uuid(),
7
8
  name: zod_1.z.string(),
8
9
  userId: zod_1.z.string().uuid(),
10
+ status: zod_1.z.nativeEnum(constants_1.CANVAS_STATUS),
9
11
  createdAt: zod_1.z.date(),
10
12
  updatedAt: zod_1.z.date(),
11
13
  });
@@ -20,6 +20,7 @@ __exportStar(require("./ai-model-formatted.schema"), exports);
20
20
  __exportStar(require("./ai-model.schema"), exports);
21
21
  __exportStar(require("./ai-vendor.schema"), exports);
22
22
  __exportStar(require("./canvas.schema"), exports);
23
+ __exportStar(require("./canvas-node-definition.schema"), exports);
23
24
  __exportStar(require("./canvas-node.schema"), exports);
24
25
  __exportStar(require("./canvas-edge.schema"), exports);
25
26
  __exportStar(require("./category.schema"), exports);
@@ -11,10 +11,13 @@ exports.ImageEditorModelParamsSchema = zod_1.z.object({
11
11
  acceptedTypes: zod_1.z.array(zod_1.z.string()),
12
12
  }),
13
13
  aspectRatio: zod_1.z
14
- .record(zod_1.z.string(), zod_1.z.object({
15
- width: zod_1.z.number(),
16
- height: zod_1.z.number(),
17
- }))
14
+ .record(zod_1.z.string(), zod_1.z.union([
15
+ zod_1.z.object({
16
+ width: zod_1.z.number(),
17
+ height: zod_1.z.number(),
18
+ }),
19
+ zod_1.z.string(),
20
+ ]))
18
21
  .optional(),
19
22
  });
20
23
  exports.ImageEditorModelPricingRuleConditionSchema = zod_1.z.object({
@@ -5,6 +5,7 @@ export namespace FindCanvasesByUserQuery {
5
5
  export const RequestSchema = z.object({
6
6
  limit: z.coerce.number().min(1).default(10),
7
7
  offset: z.coerce.number().min(0).default(0),
8
+ name: z.string().trim().optional(),
8
9
  });
9
10
 
10
11
  export type Request = z.infer<typeof RequestSchema>;
@@ -3,5 +3,6 @@ export * from './delete-canvas.command';
3
3
  export * from './find-canvas-by-uuid.query';
4
4
  export * from './find-canvas-by-uuid-with-relations.query';
5
5
  export * from './find-canvases-by-user.query';
6
+ export * from './run-canvas.command';
6
7
  export * from './save-canvas.command';
7
8
  export * from './update-canvas.command';
@@ -0,0 +1,31 @@
1
+ import { z } from 'zod';
2
+ import { CanvasEdgeSchema, CanvasNodeSchema, CanvasSchema } from '../../models';
3
+ import { SaveCanvasCommand } from './save-canvas.command';
4
+
5
+ export namespace RunCanvasCommand {
6
+ export const RequestParamSchema = CanvasSchema.pick({
7
+ uuid: true,
8
+ });
9
+
10
+ export type RequestParam = z.infer<typeof RequestParamSchema>;
11
+
12
+ export const RequestSchema = z.object({
13
+ updatedAt: z.preprocess(
14
+ (value) => (typeof value === 'string' ? new Date(value) : value),
15
+ z.date(),
16
+ ),
17
+ nodes: z.array(SaveCanvasCommand.CanvasNodePayloadSchema),
18
+ edges: z.array(SaveCanvasCommand.CanvasEdgePayloadSchema),
19
+ });
20
+
21
+ export type Request = z.infer<typeof RequestSchema>;
22
+
23
+ export const ResponseSchema = z.object({
24
+ data: CanvasSchema.extend({
25
+ nodes: z.array(CanvasNodeSchema),
26
+ edges: z.array(CanvasEdgeSchema),
27
+ }),
28
+ });
29
+
30
+ export type Response = z.infer<typeof ResponseSchema>;
31
+ }
@@ -0,0 +1,10 @@
1
+ import { z } from 'zod';
2
+ import { CanvasNodeDefinitionsWithConfigsSchema } from '../../models';
3
+
4
+ export namespace FindCanvasNodeDefinitionsWithConfigsQuery {
5
+ export const ResponseSchema = z.object({
6
+ data: CanvasNodeDefinitionsWithConfigsSchema,
7
+ });
8
+
9
+ export type Response = z.infer<typeof ResponseSchema>;
10
+ }
@@ -1,5 +1,6 @@
1
1
  export * from './create-canvas-node.command';
2
2
  export * from './delete-canvas-node.command';
3
3
  export * from './find-canvas-node-by-uuid.query';
4
+ export * from './find-canvas-node-definitions-with-configs.query';
4
5
  export * from './find-canvas-nodes-by-canvas.query';
5
6
  export * from './update-canvas-node.command';
@@ -3,10 +3,33 @@ import { TeamAccountWithBalanceSchema } from '../../models';
3
3
  import { SORT_ORDER, TEAM_ACCOUNT_ADMIN_SORT_BY } from '../../constants';
4
4
 
5
5
  export namespace FindTeamAccountsByNameCommand {
6
+ const BooleanQuerySchema = z
7
+ .union([z.boolean(), z.string().trim().toLowerCase()])
8
+ .transform((value, ctx) => {
9
+ if (typeof value === 'boolean') {
10
+ return value;
11
+ }
12
+
13
+ if (value === 'true') {
14
+ return true;
15
+ }
16
+
17
+ if (value === 'false') {
18
+ return false;
19
+ }
20
+
21
+ ctx.addIssue({
22
+ code: z.ZodIssueCode.custom,
23
+ message: 'Expected boolean value: true or false',
24
+ });
25
+
26
+ return z.NEVER;
27
+ });
28
+
6
29
  export const RequestSchema = z.object({
7
30
  name: z.string().trim().min(1).optional(),
8
31
  creatorEmail: z.string().trim().min(1).optional(),
9
- hasPaidSubscription: z.boolean().optional(),
32
+ hasPaidSubscription: BooleanQuerySchema.optional(),
10
33
  limit: z.coerce.number().int().min(1).max(100).default(20).optional(),
11
34
  offset: z.coerce.number().int().min(0).default(0).optional(),
12
35
  sortBy: z
@@ -0,0 +1,5 @@
1
+ export enum CANVAS_STATUS {
2
+ IDLE = 'IDLE',
3
+ RUNNING = 'RUNNING',
4
+ FAILED = 'FAILED',
5
+ }
@@ -0,0 +1 @@
1
+ export * from './canvas-status.enum';
@@ -0,0 +1 @@
1
+ export * from './enums';
@@ -40,6 +40,7 @@ export * from './tool-html-page-builder';
40
40
  export * from './feedback';
41
41
  export * from './daily-streak';
42
42
  export * from './cabinet';
43
+ export * from './canvas';
43
44
  export * from './canvas-node';
44
45
  export * from './canvas-edge';
45
46
  export * from './webmaster';
@@ -135,4 +135,4 @@ export function calculateGptImage2PriceInStarsByTier(params: {
135
135
  outputTokens,
136
136
  ...priced,
137
137
  };
138
- }
138
+ }
@@ -0,0 +1,94 @@
1
+ import { z } from 'zod';
2
+ import { CANVAS_NODE_TYPE, INPUT_OUTPUT_TYPE, TOOL_CONTENT_TYPE } from '../constants';
3
+ import { IconVariantsSchema } from './icon-variants.schema';
4
+ import {
5
+ HtmlPageBuilderConfigSchema,
6
+ ImageEditorConfigSchema,
7
+ ImageGenerationConfigSchema,
8
+ STTConfigSchema,
9
+ TTSConfigSchema,
10
+ VideoEditorConfigSchema,
11
+ VideoConfigSchema,
12
+ } from './tools';
13
+
14
+ const createCanvasNodeDefinitionNoConfigSchema = (nodeType: CANVAS_NODE_TYPE) =>
15
+ z.object({
16
+ nodeType: z.literal(nodeType),
17
+ toolType: z.null(),
18
+ config: z.null(),
19
+ });
20
+
21
+ export const CanvasNodeDefinitionToolConfigSchema = z.discriminatedUnion('nodeType', [
22
+ z.object({
23
+ nodeType: z.literal(CANVAS_NODE_TYPE.imageGen),
24
+ toolType: z.literal(TOOL_CONTENT_TYPE.IMAGE_GENERATION),
25
+ config: ImageGenerationConfigSchema,
26
+ }),
27
+ z.object({
28
+ nodeType: z.literal(CANVAS_NODE_TYPE.imageEdit),
29
+ toolType: z.literal(TOOL_CONTENT_TYPE.IMAGE_EDITOR),
30
+ config: ImageEditorConfigSchema,
31
+ }),
32
+ z.object({
33
+ nodeType: z.literal(CANVAS_NODE_TYPE.ttsGen),
34
+ toolType: z.literal(TOOL_CONTENT_TYPE.TEXT_TO_SPEECH),
35
+ config: TTSConfigSchema,
36
+ }),
37
+ z.object({
38
+ nodeType: z.literal(CANVAS_NODE_TYPE.sttGen),
39
+ toolType: z.literal(TOOL_CONTENT_TYPE.SPEECH_TO_TEXT),
40
+ config: STTConfigSchema,
41
+ }),
42
+ z.object({
43
+ nodeType: z.literal(CANVAS_NODE_TYPE.videoGen),
44
+ toolType: z.literal(TOOL_CONTENT_TYPE.VIDEO),
45
+ config: VideoConfigSchema,
46
+ }),
47
+ z.object({
48
+ nodeType: z.literal(CANVAS_NODE_TYPE.videoEdit),
49
+ toolType: z.literal(TOOL_CONTENT_TYPE.VIDEO_EDITOR),
50
+ config: VideoEditorConfigSchema,
51
+ }),
52
+ z.object({
53
+ nodeType: z.literal(CANVAS_NODE_TYPE.htmlGen),
54
+ toolType: z.literal(TOOL_CONTENT_TYPE.HTML_PAGE_BUILDER),
55
+ config: HtmlPageBuilderConfigSchema,
56
+ }),
57
+ createCanvasNodeDefinitionNoConfigSchema(CANVAS_NODE_TYPE.textGen),
58
+ createCanvasNodeDefinitionNoConfigSchema(CANVAS_NODE_TYPE.textBlock),
59
+ createCanvasNodeDefinitionNoConfigSchema(CANVAS_NODE_TYPE.imageBlock),
60
+ createCanvasNodeDefinitionNoConfigSchema(CANVAS_NODE_TYPE.videoBlock),
61
+ createCanvasNodeDefinitionNoConfigSchema(CANVAS_NODE_TYPE.fileBlock),
62
+ createCanvasNodeDefinitionNoConfigSchema(CANVAS_NODE_TYPE.note),
63
+ createCanvasNodeDefinitionNoConfigSchema(CANVAS_NODE_TYPE.colorPalette),
64
+ createCanvasNodeDefinitionNoConfigSchema(CANVAS_NODE_TYPE.motionControl),
65
+ createCanvasNodeDefinitionNoConfigSchema(CANVAS_NODE_TYPE.varGen),
66
+ createCanvasNodeDefinitionNoConfigSchema(CANVAS_NODE_TYPE.varBlock),
67
+ ]);
68
+ export type CanvasNodeDefinitionToolConfig = z.infer<typeof CanvasNodeDefinitionToolConfigSchema>;
69
+
70
+ export const CanvasNodeDefinitionSchema = z.object({
71
+ type: z.nativeEnum(CANVAS_NODE_TYPE),
72
+ label: z.string(),
73
+ icons: IconVariantsSchema,
74
+ inputPoints: z.array(z.nativeEnum(INPUT_OUTPUT_TYPE)),
75
+ outputPoints: z.array(z.nativeEnum(INPUT_OUTPUT_TYPE)),
76
+ toolType: z.nativeEnum(TOOL_CONTENT_TYPE).nullable(),
77
+ createdAt: z.date(),
78
+ updatedAt: z.date(),
79
+ });
80
+ export type CanvasNodeDefinition = z.infer<typeof CanvasNodeDefinitionSchema>;
81
+
82
+ export const CanvasNodeDefinitionWithConfigSchema = z.object({
83
+ nodeDefinition: CanvasNodeDefinitionSchema,
84
+ config: CanvasNodeDefinitionToolConfigSchema,
85
+ });
86
+ export type CanvasNodeDefinitionWithConfig = z.infer<typeof CanvasNodeDefinitionWithConfigSchema>;
87
+
88
+ export const CanvasNodeDefinitionsWithConfigsSchema = z.record(
89
+ z.nativeEnum(CANVAS_NODE_TYPE),
90
+ CanvasNodeDefinitionWithConfigSchema,
91
+ );
92
+ export type CanvasNodeDefinitionsWithConfigs = z.infer<
93
+ typeof CanvasNodeDefinitionsWithConfigsSchema
94
+ >;
@@ -32,20 +32,29 @@ export type ImageGenParams = z.infer<typeof ImageGenParamsSchema>;
32
32
 
33
33
  export const VideoGenParamsSchema = strictObject({
34
34
  prompt: z.string(),
35
- duration: z.string(),
36
- resolution: z.string(),
35
+ model: z.string(),
36
+ duration: z.string().optional(),
37
+ aspectRatio: z.string().optional(),
38
+ resolution: z.string().optional(),
37
39
  });
38
40
  export type VideoGenParams = z.infer<typeof VideoGenParamsSchema>;
39
41
 
40
- export const AudioGenParamsSchema = strictObject({
41
- mode: z.union([z.literal('tts'), z.literal('stt')]),
42
- prompt: z.string(),
43
- voice: z.string(),
44
- model: z.string(),
45
- stability: z.number(),
46
- similarityBoost: z.number(),
47
- audioFileUrl: z.string(),
48
- });
42
+ export const AudioGenParamsSchema = z.discriminatedUnion('mode', [
43
+ strictObject({
44
+ mode: z.literal('tts'),
45
+ prompt: z.string(),
46
+ model: z.string(),
47
+ voice: z.string(),
48
+ stability: z.number(),
49
+ similarityBoost: z.number(),
50
+ }),
51
+ strictObject({
52
+ mode: z.literal('stt'),
53
+ prompt: z.string(),
54
+ model: z.string(),
55
+ audioFileId: z.string().uuid(),
56
+ }),
57
+ ]);
49
58
  export type AudioGenParams = z.infer<typeof AudioGenParamsSchema>;
50
59
 
51
60
  export const ColorPaletteParamsSchema = strictObject({
@@ -1,9 +1,11 @@
1
1
  import { z } from 'zod';
2
+ import { CANVAS_STATUS } from '../constants';
2
3
 
3
4
  export const CanvasSchema = z.object({
4
5
  uuid: z.string().uuid(),
5
6
  name: z.string(),
6
7
  userId: z.string().uuid(),
8
+ status: z.nativeEnum(CANVAS_STATUS),
7
9
  createdAt: z.date(),
8
10
  updatedAt: z.date(),
9
11
  });
package/models/index.ts CHANGED
@@ -4,6 +4,7 @@ export * from './ai-model-formatted.schema';
4
4
  export * from './ai-model.schema';
5
5
  export * from './ai-vendor.schema';
6
6
  export * from './canvas.schema';
7
+ export * from './canvas-node-definition.schema';
7
8
  export * from './canvas-node.schema';
8
9
  export * from './canvas-edge.schema';
9
10
  export * from './category.schema';
@@ -11,10 +11,13 @@ export const ImageEditorModelParamsSchema = z.object({
11
11
  aspectRatio: z
12
12
  .record(
13
13
  z.string(),
14
- z.object({
15
- width: z.number(),
16
- height: z.number(),
17
- }),
14
+ z.union([
15
+ z.object({
16
+ width: z.number(),
17
+ height: z.number(),
18
+ }),
19
+ z.string(),
20
+ ]),
18
21
  )
19
22
  .optional(),
20
23
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purpleschool/gptbot",
3
- "version": "0.12.62",
3
+ "version": "0.12.64",
4
4
  "description": "",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",