@purpleschool/gptbot 0.12.68 → 0.12.69

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 (27) hide show
  1. package/api/controllers/http/canvas-template.ts +10 -0
  2. package/api/controllers/http/index.ts +2 -0
  3. package/api/routes.ts +13 -0
  4. package/build/api/controllers/http/canvas-template.js +12 -0
  5. package/build/api/controllers/http/index.js +1 -0
  6. package/build/api/routes.js +8 -0
  7. package/build/commands/canvas-template/create-canvas-from-template.command.js +17 -0
  8. package/build/commands/canvas-template/create-canvas-template.command.js +18 -0
  9. package/build/commands/canvas-template/delete-canvas-template.command.js +15 -0
  10. package/build/commands/canvas-template/find-canvas-template-by-uuid.query.js +14 -0
  11. package/build/commands/canvas-template/find-canvas-templates.query.js +18 -0
  12. package/build/commands/canvas-template/index.js +22 -0
  13. package/build/commands/canvas-template/update-canvas-template.command.js +21 -0
  14. package/build/commands/index.js +1 -0
  15. package/build/models/canvas-template.schema.js +63 -0
  16. package/build/models/index.js +1 -0
  17. package/commands/canvas-template/create-canvas-from-template.command.ts +19 -0
  18. package/commands/canvas-template/create-canvas-template.command.ts +20 -0
  19. package/commands/canvas-template/delete-canvas-template.command.ts +17 -0
  20. package/commands/canvas-template/find-canvas-template-by-uuid.query.ts +16 -0
  21. package/commands/canvas-template/find-canvas-templates.query.ts +20 -0
  22. package/commands/canvas-template/index.ts +6 -0
  23. package/commands/canvas-template/update-canvas-template.command.ts +26 -0
  24. package/commands/index.ts +2 -0
  25. package/models/canvas-template.schema.ts +68 -0
  26. package/models/index.ts +2 -0
  27. package/package.json +1 -1
@@ -0,0 +1,10 @@
1
+ export const CANVAS_TEMPLATE_PRIVATE_CONTROLLER = 'private/canvas-template' as const;
2
+
3
+ export const CANVAS_TEMPLATE_ROUTES = {
4
+ CREATE: '',
5
+ CREATE_CANVAS: (uuid: string) => `${uuid}`,
6
+ GET_ALL: '',
7
+ FIND_BY_UUID: (uuid: string) => `${uuid}`,
8
+ UPDATE: (uuid: string) => `${uuid}`,
9
+ DELETE: (uuid: string) => `${uuid}`,
10
+ } as const;
@@ -70,3 +70,5 @@ export * from './team-account';
70
70
  export * from './spell-corrector';
71
71
  export * from './tool-workspace';
72
72
  export * from './html-page-builder';
73
+
74
+ export * from './canvas-template';
package/api/routes.ts CHANGED
@@ -366,6 +366,19 @@ export const REST_API = {
366
366
  DELETE: (uuid: string) =>
367
367
  `${ROOT}/${CONTROLLERS.FOLDER_PRIVATE_CONTROLLER}/${CONTROLLERS.FOLDER_ROUTES.DELETE(uuid)}`,
368
368
  },
369
+
370
+ CANVAS_TEMPLATE_PRIVATE: {
371
+ CREATE_CANVAS: (uuid: string) =>
372
+ `${ROOT}/${CONTROLLERS.CANVAS_TEMPLATE_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_TEMPLATE_ROUTES.CREATE_CANVAS(uuid)}`,
373
+ FIND_BY_UUID: (uuid: string) =>
374
+ `${ROOT}/${CONTROLLERS.CANVAS_TEMPLATE_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_TEMPLATE_ROUTES.FIND_BY_UUID(uuid)}`,
375
+ GET_ALL: `${ROOT}/${CONTROLLERS.CANVAS_TEMPLATE_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_TEMPLATE_ROUTES.GET_ALL}`,
376
+ CREATE: `${ROOT}/${CONTROLLERS.CANVAS_TEMPLATE_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_TEMPLATE_ROUTES.CREATE}`,
377
+ UPDATE: (uuid: string) =>
378
+ `${ROOT}/${CONTROLLERS.CANVAS_TEMPLATE_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_TEMPLATE_ROUTES.UPDATE(uuid)}`,
379
+ DELETE: (uuid: string) =>
380
+ `${ROOT}/${CONTROLLERS.CANVAS_TEMPLATE_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_TEMPLATE_ROUTES.DELETE(uuid)}`,
381
+ },
369
382
  CANVAS_PRIVATE: {
370
383
  FIND_BY_UUID: (uuid: string) =>
371
384
  `${ROOT}/${CONTROLLERS.CANVAS_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_ROUTES.FIND_BY_UUID(uuid)}`,
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CANVAS_TEMPLATE_ROUTES = exports.CANVAS_TEMPLATE_PRIVATE_CONTROLLER = void 0;
4
+ exports.CANVAS_TEMPLATE_PRIVATE_CONTROLLER = 'private/canvas-template';
5
+ exports.CANVAS_TEMPLATE_ROUTES = {
6
+ CREATE: '',
7
+ CREATE_CANVAS: (uuid) => `${uuid}`,
8
+ GET_ALL: '',
9
+ FIND_BY_UUID: (uuid) => `${uuid}`,
10
+ UPDATE: (uuid) => `${uuid}`,
11
+ DELETE: (uuid) => `${uuid}`,
12
+ };
@@ -86,3 +86,4 @@ __exportStar(require("./team-account"), exports);
86
86
  __exportStar(require("./spell-corrector"), exports);
87
87
  __exportStar(require("./tool-workspace"), exports);
88
88
  __exportStar(require("./html-page-builder"), exports);
89
+ __exportStar(require("./canvas-template"), exports);
@@ -321,6 +321,14 @@ exports.REST_API = {
321
321
  UPDATE: (uuid) => `${exports.ROOT}/${CONTROLLERS.FOLDER_PRIVATE_CONTROLLER}/${CONTROLLERS.FOLDER_ROUTES.UPDATE(uuid)}`,
322
322
  DELETE: (uuid) => `${exports.ROOT}/${CONTROLLERS.FOLDER_PRIVATE_CONTROLLER}/${CONTROLLERS.FOLDER_ROUTES.DELETE(uuid)}`,
323
323
  },
324
+ CANVAS_TEMPLATE_PRIVATE: {
325
+ CREATE_CANVAS: (uuid) => `${exports.ROOT}/${CONTROLLERS.CANVAS_TEMPLATE_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_TEMPLATE_ROUTES.CREATE_CANVAS(uuid)}`,
326
+ FIND_BY_UUID: (uuid) => `${exports.ROOT}/${CONTROLLERS.CANVAS_TEMPLATE_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_TEMPLATE_ROUTES.FIND_BY_UUID(uuid)}`,
327
+ GET_ALL: `${exports.ROOT}/${CONTROLLERS.CANVAS_TEMPLATE_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_TEMPLATE_ROUTES.GET_ALL}`,
328
+ CREATE: `${exports.ROOT}/${CONTROLLERS.CANVAS_TEMPLATE_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_TEMPLATE_ROUTES.CREATE}`,
329
+ UPDATE: (uuid) => `${exports.ROOT}/${CONTROLLERS.CANVAS_TEMPLATE_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_TEMPLATE_ROUTES.UPDATE(uuid)}`,
330
+ DELETE: (uuid) => `${exports.ROOT}/${CONTROLLERS.CANVAS_TEMPLATE_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_TEMPLATE_ROUTES.DELETE(uuid)}`,
331
+ },
324
332
  CANVAS_PRIVATE: {
325
333
  FIND_BY_UUID: (uuid) => `${exports.ROOT}/${CONTROLLERS.CANVAS_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_ROUTES.FIND_BY_UUID(uuid)}`,
326
334
  GET_ALL: `${exports.ROOT}/${CONTROLLERS.CANVAS_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_ROUTES.GET_ALL}`,
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CreateCanvasFromTemplateCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const models_1 = require("../../models");
6
+ var CreateCanvasFromTemplateCommand;
7
+ (function (CreateCanvasFromTemplateCommand) {
8
+ CreateCanvasFromTemplateCommand.RequestParamSchema = zod_1.z.object({
9
+ uuid: zod_1.z.string().uuid(),
10
+ });
11
+ CreateCanvasFromTemplateCommand.ResponseSchema = zod_1.z.object({
12
+ data: models_1.CanvasSchema.extend({
13
+ nodes: zod_1.z.array(models_1.CanvasNodeSchema),
14
+ edges: zod_1.z.array(models_1.CanvasEdgeSchema),
15
+ }),
16
+ });
17
+ })(CreateCanvasFromTemplateCommand || (exports.CreateCanvasFromTemplateCommand = CreateCanvasFromTemplateCommand = {}));
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CreateCanvasTemplateCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const models_1 = require("../../models");
6
+ var CreateCanvasTemplateCommand;
7
+ (function (CreateCanvasTemplateCommand) {
8
+ CreateCanvasTemplateCommand.RequestSchema = zod_1.z.object({
9
+ name: zod_1.z.string().trim().min(1),
10
+ description: zod_1.z.string().trim().min(1).optional().nullable(),
11
+ previewImageUrl: zod_1.z.string().url().optional().nullable(),
12
+ tags: zod_1.z.array(zod_1.z.string().trim().min(1)).default([]),
13
+ graph: models_1.CanvasTemplateGraphSchema,
14
+ });
15
+ CreateCanvasTemplateCommand.ResponseSchema = zod_1.z.object({
16
+ data: models_1.CanvasTemplateSchema,
17
+ });
18
+ })(CreateCanvasTemplateCommand || (exports.CreateCanvasTemplateCommand = CreateCanvasTemplateCommand = {}));
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeleteCanvasTemplateCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ var DeleteCanvasTemplateCommand;
6
+ (function (DeleteCanvasTemplateCommand) {
7
+ DeleteCanvasTemplateCommand.RequestParamSchema = zod_1.z.object({
8
+ uuid: zod_1.z.string().uuid(),
9
+ });
10
+ DeleteCanvasTemplateCommand.ResponseSchema = zod_1.z.object({
11
+ data: zod_1.z.object({
12
+ isDeleted: zod_1.z.boolean(),
13
+ }),
14
+ });
15
+ })(DeleteCanvasTemplateCommand || (exports.DeleteCanvasTemplateCommand = DeleteCanvasTemplateCommand = {}));
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FindCanvasTemplateByUuidQuery = void 0;
4
+ const zod_1 = require("zod");
5
+ const models_1 = require("../../models");
6
+ var FindCanvasTemplateByUuidQuery;
7
+ (function (FindCanvasTemplateByUuidQuery) {
8
+ FindCanvasTemplateByUuidQuery.RequestSchema = models_1.CanvasTemplateSchema.pick({
9
+ uuid: true,
10
+ });
11
+ FindCanvasTemplateByUuidQuery.ResponseSchema = zod_1.z.object({
12
+ data: models_1.CanvasTemplateSchema,
13
+ });
14
+ })(FindCanvasTemplateByUuidQuery || (exports.FindCanvasTemplateByUuidQuery = FindCanvasTemplateByUuidQuery = {}));
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FindCanvasTemplatesQuery = void 0;
4
+ const zod_1 = require("zod");
5
+ const models_1 = require("../../models");
6
+ var FindCanvasTemplatesQuery;
7
+ (function (FindCanvasTemplatesQuery) {
8
+ FindCanvasTemplatesQuery.RequestSchema = zod_1.z.object({
9
+ limit: zod_1.z.coerce.number().min(1).default(10),
10
+ offset: zod_1.z.coerce.number().min(0).default(0),
11
+ search: zod_1.z.string().trim().optional(),
12
+ });
13
+ FindCanvasTemplatesQuery.ResponseSchema = zod_1.z.object({
14
+ data: zod_1.z.array(models_1.CanvasTemplateSchema),
15
+ page: zod_1.z.number(),
16
+ totalPages: zod_1.z.number(),
17
+ });
18
+ })(FindCanvasTemplatesQuery || (exports.FindCanvasTemplatesQuery = FindCanvasTemplatesQuery = {}));
@@ -0,0 +1,22 @@
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("./create-canvas-template.command"), exports);
18
+ __exportStar(require("./create-canvas-from-template.command"), exports);
19
+ __exportStar(require("./delete-canvas-template.command"), exports);
20
+ __exportStar(require("./find-canvas-template-by-uuid.query"), exports);
21
+ __exportStar(require("./find-canvas-templates.query"), exports);
22
+ __exportStar(require("./update-canvas-template.command"), exports);
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UpdateCanvasTemplateCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const models_1 = require("../../models");
6
+ var UpdateCanvasTemplateCommand;
7
+ (function (UpdateCanvasTemplateCommand) {
8
+ UpdateCanvasTemplateCommand.RequestParamSchema = models_1.CanvasTemplateSchema.pick({
9
+ uuid: true,
10
+ });
11
+ UpdateCanvasTemplateCommand.RequestSchema = zod_1.z.object({
12
+ name: zod_1.z.string().trim().min(1).optional(),
13
+ description: zod_1.z.string().trim().min(1).optional().nullable(),
14
+ previewImageUrl: zod_1.z.string().url().optional().nullable(),
15
+ tags: zod_1.z.array(zod_1.z.string().trim().min(1)).optional(),
16
+ graph: models_1.CanvasTemplateGraphSchema.optional(),
17
+ });
18
+ UpdateCanvasTemplateCommand.ResponseSchema = zod_1.z.object({
19
+ data: models_1.CanvasTemplateSchema,
20
+ });
21
+ })(UpdateCanvasTemplateCommand || (exports.UpdateCanvasTemplateCommand = UpdateCanvasTemplateCommand = {}));
@@ -65,3 +65,4 @@ __exportStar(require("./user-profile"), exports);
65
65
  __exportStar(require("./team-account"), exports);
66
66
  __exportStar(require("./team-to-subscription"), exports);
67
67
  __exportStar(require("./team-to-product"), exports);
68
+ __exportStar(require("./canvas-template"), exports);
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CanvasTemplateSchema = exports.CanvasTemplateGraphSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const constants_1 = require("../constants");
6
+ const canvas_node_schema_1 = require("./canvas-node.schema");
7
+ const CanvasTemplateGraphNodeSchema = zod_1.z.object({
8
+ uuid: zod_1.z.string().trim().min(1),
9
+ nodeDefinitionId: zod_1.z.nativeEnum(constants_1.CANVAS_NODE_TYPE),
10
+ position: canvas_node_schema_1.CanvasNodePositionSchema,
11
+ params: canvas_node_schema_1.CanvasNodeParamsSchema.nullable().optional(),
12
+ });
13
+ const CanvasTemplateGraphEdgeSchema = zod_1.z.object({
14
+ sourceId: zod_1.z.string().trim().min(1),
15
+ targetId: zod_1.z.string().trim().min(1),
16
+ handle: zod_1.z.nativeEnum(constants_1.INPUT_OUTPUT_TYPE),
17
+ });
18
+ exports.CanvasTemplateGraphSchema = zod_1.z
19
+ .object({
20
+ nodes: zod_1.z.array(CanvasTemplateGraphNodeSchema),
21
+ edges: zod_1.z.array(CanvasTemplateGraphEdgeSchema),
22
+ })
23
+ .superRefine((graph, ctx) => {
24
+ const nodeIds = new Set();
25
+ for (const [index, node] of graph.nodes.entries()) {
26
+ if (nodeIds.has(node.uuid)) {
27
+ ctx.addIssue({
28
+ code: zod_1.z.ZodIssueCode.custom,
29
+ path: ['nodes', index, 'uuid'],
30
+ message: `Duplicate node id: ${node.uuid}`,
31
+ });
32
+ continue;
33
+ }
34
+ nodeIds.add(node.uuid);
35
+ }
36
+ for (const [index, edge] of graph.edges.entries()) {
37
+ if (!nodeIds.has(edge.sourceId)) {
38
+ ctx.addIssue({
39
+ code: zod_1.z.ZodIssueCode.custom,
40
+ path: ['edges', index, 'sourceId'],
41
+ message: `Source node not found: ${edge.sourceId}`,
42
+ });
43
+ }
44
+ if (!nodeIds.has(edge.targetId)) {
45
+ ctx.addIssue({
46
+ code: zod_1.z.ZodIssueCode.custom,
47
+ path: ['edges', index, 'targetId'],
48
+ message: `Target node not found: ${edge.targetId}`,
49
+ });
50
+ }
51
+ }
52
+ });
53
+ exports.CanvasTemplateSchema = zod_1.z.object({
54
+ uuid: zod_1.z.string().uuid(),
55
+ name: zod_1.z.string(),
56
+ description: zod_1.z.string().nullable(),
57
+ userId: zod_1.z.string().uuid().nullable(),
58
+ previewImageUrl: zod_1.z.string().url().nullable(),
59
+ tags: zod_1.z.array(zod_1.z.string()),
60
+ graph: exports.CanvasTemplateGraphSchema,
61
+ createdAt: zod_1.z.date(),
62
+ updatedAt: zod_1.z.date(),
63
+ });
@@ -83,3 +83,4 @@ __exportStar(require("./user-profile.schema"), exports);
83
83
  __exportStar(require("./b2b"), exports);
84
84
  __exportStar(require("./json-value.schema"), exports);
85
85
  __exportStar(require("./team-account"), exports);
86
+ __exportStar(require("./canvas-template.schema"), exports);
@@ -0,0 +1,19 @@
1
+ import { z } from 'zod';
2
+ import { CanvasEdgeSchema, CanvasNodeSchema, CanvasSchema } from '../../models';
3
+
4
+ export namespace CreateCanvasFromTemplateCommand {
5
+ export const RequestParamSchema = z.object({
6
+ uuid: z.string().uuid(),
7
+ });
8
+
9
+ export type RequestParam = z.infer<typeof RequestParamSchema>;
10
+
11
+ export const ResponseSchema = z.object({
12
+ data: CanvasSchema.extend({
13
+ nodes: z.array(CanvasNodeSchema),
14
+ edges: z.array(CanvasEdgeSchema),
15
+ }),
16
+ });
17
+
18
+ export type Response = z.infer<typeof ResponseSchema>;
19
+ }
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ import { CanvasTemplateSchema, CanvasTemplateGraphSchema } from '../../models';
3
+
4
+ export namespace CreateCanvasTemplateCommand {
5
+ export const RequestSchema = z.object({
6
+ name: z.string().trim().min(1),
7
+ description: z.string().trim().min(1).optional().nullable(),
8
+ previewImageUrl: z.string().url().optional().nullable(),
9
+ tags: z.array(z.string().trim().min(1)).default([]),
10
+ graph: CanvasTemplateGraphSchema,
11
+ });
12
+
13
+ export type Request = z.infer<typeof RequestSchema>;
14
+
15
+ export const ResponseSchema = z.object({
16
+ data: CanvasTemplateSchema,
17
+ });
18
+
19
+ export type Response = z.infer<typeof ResponseSchema>;
20
+ }
@@ -0,0 +1,17 @@
1
+ import { z } from 'zod';
2
+
3
+ export namespace DeleteCanvasTemplateCommand {
4
+ export const RequestParamSchema = z.object({
5
+ uuid: z.string().uuid(),
6
+ });
7
+
8
+ export type RequestParam = z.infer<typeof RequestParamSchema>;
9
+
10
+ export const ResponseSchema = z.object({
11
+ data: z.object({
12
+ isDeleted: z.boolean(),
13
+ }),
14
+ });
15
+
16
+ export type Response = z.infer<typeof ResponseSchema>;
17
+ }
@@ -0,0 +1,16 @@
1
+ import { z } from 'zod';
2
+ import { CanvasTemplateSchema } from '../../models';
3
+
4
+ export namespace FindCanvasTemplateByUuidQuery {
5
+ export const RequestSchema = CanvasTemplateSchema.pick({
6
+ uuid: true,
7
+ });
8
+
9
+ export type Request = z.infer<typeof RequestSchema>;
10
+
11
+ export const ResponseSchema = z.object({
12
+ data: CanvasTemplateSchema,
13
+ });
14
+
15
+ export type Response = z.infer<typeof ResponseSchema>;
16
+ }
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ import { CanvasTemplateSchema } from '../../models';
3
+
4
+ export namespace FindCanvasTemplatesQuery {
5
+ export const RequestSchema = z.object({
6
+ limit: z.coerce.number().min(1).default(10),
7
+ offset: z.coerce.number().min(0).default(0),
8
+ search: z.string().trim().optional(),
9
+ });
10
+
11
+ export type Request = z.infer<typeof RequestSchema>;
12
+
13
+ export const ResponseSchema = z.object({
14
+ data: z.array(CanvasTemplateSchema),
15
+ page: z.number(),
16
+ totalPages: z.number(),
17
+ });
18
+
19
+ export type Response = z.infer<typeof ResponseSchema>;
20
+ }
@@ -0,0 +1,6 @@
1
+ export * from './create-canvas-template.command';
2
+ export * from './create-canvas-from-template.command';
3
+ export * from './delete-canvas-template.command';
4
+ export * from './find-canvas-template-by-uuid.query';
5
+ export * from './find-canvas-templates.query';
6
+ export * from './update-canvas-template.command';
@@ -0,0 +1,26 @@
1
+ import { z } from 'zod';
2
+ import { CanvasTemplateSchema, CanvasTemplateGraphSchema } from '../../models';
3
+
4
+ export namespace UpdateCanvasTemplateCommand {
5
+ export const RequestParamSchema = CanvasTemplateSchema.pick({
6
+ uuid: true,
7
+ });
8
+
9
+ export type RequestParam = z.infer<typeof RequestParamSchema>;
10
+
11
+ export const RequestSchema = z.object({
12
+ name: z.string().trim().min(1).optional(),
13
+ description: z.string().trim().min(1).optional().nullable(),
14
+ previewImageUrl: z.string().url().optional().nullable(),
15
+ tags: z.array(z.string().trim().min(1)).optional(),
16
+ graph: CanvasTemplateGraphSchema.optional(),
17
+ });
18
+
19
+ export type Request = z.infer<typeof RequestSchema>;
20
+
21
+ export const ResponseSchema = z.object({
22
+ data: CanvasTemplateSchema,
23
+ });
24
+
25
+ export type Response = z.infer<typeof ResponseSchema>;
26
+ }
package/commands/index.ts CHANGED
@@ -49,3 +49,5 @@ export * from './user-profile';
49
49
  export * from './team-account';
50
50
  export * from './team-to-subscription';
51
51
  export * from './team-to-product';
52
+
53
+ export * from './canvas-template';
@@ -0,0 +1,68 @@
1
+ import { z } from 'zod';
2
+ import { INPUT_OUTPUT_TYPE, CANVAS_NODE_TYPE } from '../constants';
3
+ import { CanvasNodeParamsSchema, CanvasNodePositionSchema } from './canvas-node.schema';
4
+
5
+ const CanvasTemplateGraphNodeSchema = z.object({
6
+ uuid: z.string().trim().min(1),
7
+ nodeDefinitionId: z.nativeEnum(CANVAS_NODE_TYPE),
8
+ position: CanvasNodePositionSchema,
9
+ params: CanvasNodeParamsSchema.nullable().optional(),
10
+ });
11
+
12
+ const CanvasTemplateGraphEdgeSchema = z.object({
13
+ sourceId: z.string().trim().min(1),
14
+ targetId: z.string().trim().min(1),
15
+ handle: z.nativeEnum(INPUT_OUTPUT_TYPE),
16
+ });
17
+
18
+ export const CanvasTemplateGraphSchema = z
19
+ .object({
20
+ nodes: z.array(CanvasTemplateGraphNodeSchema),
21
+ edges: z.array(CanvasTemplateGraphEdgeSchema),
22
+ })
23
+ .superRefine((graph, ctx) => {
24
+ const nodeIds = new Set<string>();
25
+ for (const [index, node] of graph.nodes.entries()) {
26
+ if (nodeIds.has(node.uuid)) {
27
+ ctx.addIssue({
28
+ code: z.ZodIssueCode.custom,
29
+ path: ['nodes', index, 'uuid'],
30
+ message: `Duplicate node id: ${node.uuid}`,
31
+ });
32
+ continue;
33
+ }
34
+ nodeIds.add(node.uuid);
35
+ }
36
+
37
+ for (const [index, edge] of graph.edges.entries()) {
38
+ if (!nodeIds.has(edge.sourceId)) {
39
+ ctx.addIssue({
40
+ code: z.ZodIssueCode.custom,
41
+ path: ['edges', index, 'sourceId'],
42
+ message: `Source node not found: ${edge.sourceId}`,
43
+ });
44
+ }
45
+
46
+ if (!nodeIds.has(edge.targetId)) {
47
+ ctx.addIssue({
48
+ code: z.ZodIssueCode.custom,
49
+ path: ['edges', index, 'targetId'],
50
+ message: `Target node not found: ${edge.targetId}`,
51
+ });
52
+ }
53
+ }
54
+ });
55
+
56
+ export type CanvasTemplateGraph = z.infer<typeof CanvasTemplateGraphSchema>;
57
+
58
+ export const CanvasTemplateSchema = z.object({
59
+ uuid: z.string().uuid(),
60
+ name: z.string(),
61
+ description: z.string().nullable(),
62
+ userId: z.string().uuid().nullable(),
63
+ previewImageUrl: z.string().url().nullable(),
64
+ tags: z.array(z.string()),
65
+ graph: CanvasTemplateGraphSchema,
66
+ createdAt: z.date(),
67
+ updatedAt: z.date(),
68
+ });
package/models/index.ts CHANGED
@@ -67,3 +67,5 @@ export * from './user-profile.schema';
67
67
  export * from './b2b';
68
68
  export * from './json-value.schema';
69
69
  export * from './team-account';
70
+
71
+ export * from './canvas-template.schema';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purpleschool/gptbot",
3
- "version": "0.12.68",
3
+ "version": "0.12.69",
4
4
  "description": "",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",