@purpleschool/gptbot 0.14.34 → 0.14.35

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 (47) hide show
  1. package/api/controllers/http/music.ts +6 -0
  2. package/api/routes.ts +18 -0
  3. package/build/api/controllers/http/music.js +6 -0
  4. package/build/api/routes.js +12 -0
  5. package/build/commands/tools/music/add-track-to-music-playlist.command.js +17 -0
  6. package/build/commands/tools/music/boost-music-style.command.js +15 -0
  7. package/build/commands/tools/music/create-music-playlist.command.js +14 -0
  8. package/build/commands/tools/music/delete-music-playlist.command.js +11 -0
  9. package/build/commands/tools/music/edit-music.command.js +12 -0
  10. package/build/commands/tools/music/find-music-playlists.command.js +11 -0
  11. package/build/commands/tools/music/generate-music.command.js +2 -5
  12. package/build/commands/tools/music/index.js +8 -0
  13. package/build/commands/tools/music/remove-track-from-music-playlist.command.js +15 -0
  14. package/build/commands/tools/music/update-music-playlist.command.js +17 -0
  15. package/build/constants/tool-music/enums/index.js +4 -0
  16. package/build/constants/tool-music/enums/music-action-type.enum.js +14 -0
  17. package/build/constants/tool-music/enums/music-audio-action-type.enum.js +12 -0
  18. package/build/constants/tool-music/enums/music-generation-action-type.enum.js +10 -0
  19. package/build/constants/tool-music/enums/music-lyrics-structure.enum.js +9 -0
  20. package/build/models/community/community-post-media-data.schema.js +1 -1
  21. package/build/models/tools/music/index.js +1 -0
  22. package/build/models/tools/music/music-config.schema.js +4 -1
  23. package/build/models/tools/music/music-job.schema.js +126 -2
  24. package/build/models/tools/music/music-playlist.schema.js +15 -0
  25. package/build/models/tools/music/music-track.schema.js +13 -2
  26. package/commands/tools/music/add-track-to-music-playlist.command.ts +19 -0
  27. package/commands/tools/music/boost-music-style.command.ts +17 -0
  28. package/commands/tools/music/create-music-playlist.command.ts +14 -0
  29. package/commands/tools/music/delete-music-playlist.command.ts +11 -0
  30. package/commands/tools/music/edit-music.command.ts +12 -0
  31. package/commands/tools/music/find-music-playlists.command.ts +9 -0
  32. package/commands/tools/music/generate-music.command.ts +3 -6
  33. package/commands/tools/music/index.ts +8 -0
  34. package/commands/tools/music/remove-track-from-music-playlist.command.ts +15 -0
  35. package/commands/tools/music/update-music-playlist.command.ts +19 -0
  36. package/constants/tool-music/enums/index.ts +4 -0
  37. package/constants/tool-music/enums/music-action-type.enum.ts +10 -0
  38. package/constants/tool-music/enums/music-audio-action-type.enum.ts +8 -0
  39. package/constants/tool-music/enums/music-generation-action-type.enum.ts +6 -0
  40. package/constants/tool-music/enums/music-lyrics-structure.enum.ts +5 -0
  41. package/models/community/community-post-media-data.schema.ts +2 -2
  42. package/models/tools/music/index.ts +1 -0
  43. package/models/tools/music/music-config.schema.ts +8 -0
  44. package/models/tools/music/music-job.schema.ts +168 -2
  45. package/models/tools/music/music-playlist.schema.ts +15 -0
  46. package/models/tools/music/music-track.schema.ts +13 -2
  47. package/package.json +1 -1
@@ -4,10 +4,16 @@ export const MUSIC_CONTROLLER_PUBLIC = 'public/tools/music' as const;
4
4
  export const MUSIC_ROUTES = {
5
5
  CONFIG: 'config',
6
6
  EXECUTE: 'execute',
7
+ EDIT: 'edit',
7
8
  GENERATE_LYRICS: 'lyrics',
9
+ BOOST_STYLE: 'boost-style',
8
10
  CONVERT_TO_WAV: 'convert-to-wav',
9
11
  GET_JOBS: 'jobs',
10
12
  GET_JOB: (uuid: string) => `jobs/${uuid}`,
13
+ PLAYLISTS: 'playlists',
14
+ PLAYLIST: (uuid: string) => `playlists/${uuid}`,
15
+ PLAYLIST_TRACKS: (uuid: string) => `playlists/${uuid}/tracks`,
16
+ PLAYLIST_TRACK: (uuid: string, trackId: string) => `playlists/${uuid}/tracks/${trackId}`,
11
17
  UPDATE: (uuid: string) => `jobs/${uuid}`,
12
18
  UPDATE_FAVORITE: (uuid: string) => `jobs/${uuid}/favorite`,
13
19
  SET_REACTION: (uuid: string) => `jobs/${uuid}/reaction`,
package/api/routes.ts CHANGED
@@ -701,11 +701,20 @@ export const REST_API = {
701
701
  MUSIC_PUBLIC: {
702
702
  CONFIG: `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.CONFIG}`,
703
703
  EXECUTE: `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.EXECUTE}`,
704
+ EDIT: `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.EDIT}`,
704
705
  GENERATE_LYRICS: `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.GENERATE_LYRICS}`,
706
+ BOOST_STYLE: `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.BOOST_STYLE}`,
705
707
  CONVERT_TO_WAV: `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.CONVERT_TO_WAV}`,
706
708
  GET_JOBS: `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.GET_JOBS}`,
707
709
  GET_JOB: (uuid: string) =>
708
710
  `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.GET_JOB(uuid)}`,
711
+ PLAYLISTS: `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.PLAYLISTS}`,
712
+ PLAYLIST: (uuid: string) =>
713
+ `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.PLAYLIST(uuid)}`,
714
+ PLAYLIST_TRACKS: (uuid: string) =>
715
+ `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.PLAYLIST_TRACKS(uuid)}`,
716
+ PLAYLIST_TRACK: (uuid: string, trackId: string) =>
717
+ `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.PLAYLIST_TRACK(uuid, trackId)}`,
709
718
  UPDATE: (uuid: string) =>
710
719
  `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.UPDATE(uuid)}`,
711
720
  UPDATE_FAVORITE: (uuid: string) =>
@@ -721,11 +730,20 @@ export const REST_API = {
721
730
  MUSIC_PRIVATE: {
722
731
  CONFIG: `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.CONFIG}`,
723
732
  EXECUTE: `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.EXECUTE}`,
733
+ EDIT: `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.EDIT}`,
724
734
  GENERATE_LYRICS: `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.GENERATE_LYRICS}`,
735
+ BOOST_STYLE: `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.BOOST_STYLE}`,
725
736
  CONVERT_TO_WAV: `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.CONVERT_TO_WAV}`,
726
737
  GET_JOBS: `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.GET_JOBS}`,
727
738
  GET_JOB: (uuid: string) =>
728
739
  `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.GET_JOB(uuid)}`,
740
+ PLAYLISTS: `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.PLAYLISTS}`,
741
+ PLAYLIST: (uuid: string) =>
742
+ `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.PLAYLIST(uuid)}`,
743
+ PLAYLIST_TRACKS: (uuid: string) =>
744
+ `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.PLAYLIST_TRACKS(uuid)}`,
745
+ PLAYLIST_TRACK: (uuid: string, trackId: string) =>
746
+ `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.PLAYLIST_TRACK(uuid, trackId)}`,
729
747
  UPDATE: (uuid: string) =>
730
748
  `${ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.UPDATE(uuid)}`,
731
749
  UPDATE_FAVORITE: (uuid: string) =>
@@ -6,10 +6,16 @@ exports.MUSIC_CONTROLLER_PUBLIC = 'public/tools/music';
6
6
  exports.MUSIC_ROUTES = {
7
7
  CONFIG: 'config',
8
8
  EXECUTE: 'execute',
9
+ EDIT: 'edit',
9
10
  GENERATE_LYRICS: 'lyrics',
11
+ BOOST_STYLE: 'boost-style',
10
12
  CONVERT_TO_WAV: 'convert-to-wav',
11
13
  GET_JOBS: 'jobs',
12
14
  GET_JOB: (uuid) => `jobs/${uuid}`,
15
+ PLAYLISTS: 'playlists',
16
+ PLAYLIST: (uuid) => `playlists/${uuid}`,
17
+ PLAYLIST_TRACKS: (uuid) => `playlists/${uuid}/tracks`,
18
+ PLAYLIST_TRACK: (uuid, trackId) => `playlists/${uuid}/tracks/${trackId}`,
13
19
  UPDATE: (uuid) => `jobs/${uuid}`,
14
20
  UPDATE_FAVORITE: (uuid) => `jobs/${uuid}/favorite`,
15
21
  SET_REACTION: (uuid) => `jobs/${uuid}/reaction`,
@@ -547,10 +547,16 @@ exports.REST_API = {
547
547
  MUSIC_PUBLIC: {
548
548
  CONFIG: `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.CONFIG}`,
549
549
  EXECUTE: `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.EXECUTE}`,
550
+ EDIT: `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.EDIT}`,
550
551
  GENERATE_LYRICS: `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.GENERATE_LYRICS}`,
552
+ BOOST_STYLE: `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.BOOST_STYLE}`,
551
553
  CONVERT_TO_WAV: `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.CONVERT_TO_WAV}`,
552
554
  GET_JOBS: `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.GET_JOBS}`,
553
555
  GET_JOB: (uuid) => `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.GET_JOB(uuid)}`,
556
+ PLAYLISTS: `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.PLAYLISTS}`,
557
+ PLAYLIST: (uuid) => `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.PLAYLIST(uuid)}`,
558
+ PLAYLIST_TRACKS: (uuid) => `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.PLAYLIST_TRACKS(uuid)}`,
559
+ PLAYLIST_TRACK: (uuid, trackId) => `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.PLAYLIST_TRACK(uuid, trackId)}`,
554
560
  UPDATE: (uuid) => `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.UPDATE(uuid)}`,
555
561
  UPDATE_FAVORITE: (uuid) => `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.UPDATE_FAVORITE(uuid)}`,
556
562
  SET_REACTION: (uuid) => `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PUBLIC}/${CONTROLLERS.MUSIC_ROUTES.SET_REACTION(uuid)}`,
@@ -561,10 +567,16 @@ exports.REST_API = {
561
567
  MUSIC_PRIVATE: {
562
568
  CONFIG: `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.CONFIG}`,
563
569
  EXECUTE: `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.EXECUTE}`,
570
+ EDIT: `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.EDIT}`,
564
571
  GENERATE_LYRICS: `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.GENERATE_LYRICS}`,
572
+ BOOST_STYLE: `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.BOOST_STYLE}`,
565
573
  CONVERT_TO_WAV: `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.CONVERT_TO_WAV}`,
566
574
  GET_JOBS: `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.GET_JOBS}`,
567
575
  GET_JOB: (uuid) => `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.GET_JOB(uuid)}`,
576
+ PLAYLISTS: `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.PLAYLISTS}`,
577
+ PLAYLIST: (uuid) => `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.PLAYLIST(uuid)}`,
578
+ PLAYLIST_TRACKS: (uuid) => `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.PLAYLIST_TRACKS(uuid)}`,
579
+ PLAYLIST_TRACK: (uuid, trackId) => `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.PLAYLIST_TRACK(uuid, trackId)}`,
568
580
  UPDATE: (uuid) => `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.UPDATE(uuid)}`,
569
581
  UPDATE_FAVORITE: (uuid) => `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.UPDATE_FAVORITE(uuid)}`,
570
582
  SET_REACTION: (uuid) => `${exports.ROOT}/${CONTROLLERS.MUSIC_CONTROLLER_PRIVATE}/${CONTROLLERS.MUSIC_ROUTES.SET_REACTION(uuid)}`,
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AddTrackToMusicPlaylistCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const models_1 = require("../../../models");
6
+ var AddTrackToMusicPlaylistCommand;
7
+ (function (AddTrackToMusicPlaylistCommand) {
8
+ AddTrackToMusicPlaylistCommand.RequestSchema = zod_1.z.object({
9
+ trackId: zod_1.z.string().uuid(),
10
+ });
11
+ AddTrackToMusicPlaylistCommand.RequestParamsSchema = zod_1.z.object({
12
+ uuid: zod_1.z.string().uuid(),
13
+ });
14
+ AddTrackToMusicPlaylistCommand.ResponseSchema = zod_1.z.object({
15
+ data: models_1.MusicPlaylistSchema,
16
+ });
17
+ })(AddTrackToMusicPlaylistCommand || (exports.AddTrackToMusicPlaylistCommand = AddTrackToMusicPlaylistCommand = {}));
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BoostMusicStyleCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ var BoostMusicStyleCommand;
6
+ (function (BoostMusicStyleCommand) {
7
+ BoostMusicStyleCommand.RequestSchema = zod_1.z.object({
8
+ content: zod_1.z.string().min(1).max(3000),
9
+ });
10
+ BoostMusicStyleCommand.ResponseSchema = zod_1.z.object({
11
+ data: zod_1.z.object({
12
+ result: zod_1.z.string(),
13
+ }),
14
+ });
15
+ })(BoostMusicStyleCommand || (exports.BoostMusicStyleCommand = BoostMusicStyleCommand = {}));
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CreateMusicPlaylistCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const models_1 = require("../../../models");
6
+ var CreateMusicPlaylistCommand;
7
+ (function (CreateMusicPlaylistCommand) {
8
+ CreateMusicPlaylistCommand.RequestSchema = zod_1.z.object({
9
+ title: zod_1.z.string().min(1).max(80).trim(),
10
+ });
11
+ CreateMusicPlaylistCommand.ResponseSchema = zod_1.z.object({
12
+ data: models_1.MusicPlaylistSchema,
13
+ });
14
+ })(CreateMusicPlaylistCommand || (exports.CreateMusicPlaylistCommand = CreateMusicPlaylistCommand = {}));
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeleteMusicPlaylistCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ var DeleteMusicPlaylistCommand;
6
+ (function (DeleteMusicPlaylistCommand) {
7
+ DeleteMusicPlaylistCommand.RequestParamsSchema = zod_1.z.object({
8
+ uuid: zod_1.z.string().uuid(),
9
+ });
10
+ DeleteMusicPlaylistCommand.ResponseSchema = zod_1.z.void();
11
+ })(DeleteMusicPlaylistCommand || (exports.DeleteMusicPlaylistCommand = DeleteMusicPlaylistCommand = {}));
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EditMusicCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const models_1 = require("../../../models");
6
+ var EditMusicCommand;
7
+ (function (EditMusicCommand) {
8
+ EditMusicCommand.RequestSchema = models_1.MusicEditRequestSchema;
9
+ EditMusicCommand.ResponseSchema = zod_1.z.object({
10
+ data: zod_1.z.union([models_1.MusicJobSchema, models_1.MusicEditActionResultSchema]),
11
+ });
12
+ })(EditMusicCommand || (exports.EditMusicCommand = EditMusicCommand = {}));
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FindMusicPlaylistsCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const models_1 = require("../../../models");
6
+ var FindMusicPlaylistsCommand;
7
+ (function (FindMusicPlaylistsCommand) {
8
+ FindMusicPlaylistsCommand.ResponseSchema = zod_1.z.object({
9
+ data: zod_1.z.array(models_1.MusicPlaylistSchema),
10
+ });
11
+ })(FindMusicPlaylistsCommand || (exports.FindMusicPlaylistsCommand = FindMusicPlaylistsCommand = {}));
@@ -5,11 +5,8 @@ const zod_1 = require("zod");
5
5
  const models_1 = require("../../../models");
6
6
  var MusicCommand;
7
7
  (function (MusicCommand) {
8
- MusicCommand.RequestSchema = zod_1.z.object({
9
- modelId: zod_1.z.string().uuid(),
10
- params: models_1.MusicJobParamsSchema,
11
- });
8
+ MusicCommand.RequestSchema = models_1.MusicExecuteRequestSchema;
12
9
  MusicCommand.ResponseSchema = zod_1.z.object({
13
- data: models_1.ToolJobSchema,
10
+ data: zod_1.z.union([models_1.MusicJobSchema, zod_1.z.object({ lyrics: zod_1.z.string() })]),
14
11
  });
15
12
  })(MusicCommand || (exports.MusicCommand = MusicCommand = {}));
@@ -14,15 +14,23 @@ 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("./add-track-to-music-playlist.command"), exports);
18
+ __exportStar(require("./create-music-playlist.command"), exports);
17
19
  __exportStar(require("./delete-all-music-jobs.command"), exports);
18
20
  __exportStar(require("./delete-music-job-by-uuid.command"), exports);
21
+ __exportStar(require("./delete-music-playlist.command"), exports);
22
+ __exportStar(require("./edit-music.command"), exports);
19
23
  __exportStar(require("./find-music-job-by-uuid.command"), exports);
20
24
  __exportStar(require("./find-music-jobs.command"), exports);
25
+ __exportStar(require("./find-music-playlists.command"), exports);
21
26
  __exportStar(require("./get-music-tool-config.command"), exports);
22
27
  __exportStar(require("./retry-music-job.command"), exports);
23
28
  __exportStar(require("./set-reaction-to-music-job.command"), exports);
24
29
  __exportStar(require("./generate-music.command"), exports);
25
30
  __exportStar(require("./update-music-job-title.command"), exports);
31
+ __exportStar(require("./remove-track-from-music-playlist.command"), exports);
26
32
  __exportStar(require("./convert-to-wav.command"), exports);
27
33
  __exportStar(require("./generate-lyrics.command"), exports);
34
+ __exportStar(require("./boost-music-style.command"), exports);
28
35
  __exportStar(require("./update-music-job-favorite.command"), exports);
36
+ __exportStar(require("./update-music-playlist.command"), exports);
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RemoveTrackFromMusicPlaylistCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const models_1 = require("../../../models");
6
+ var RemoveTrackFromMusicPlaylistCommand;
7
+ (function (RemoveTrackFromMusicPlaylistCommand) {
8
+ RemoveTrackFromMusicPlaylistCommand.RequestParamsSchema = zod_1.z.object({
9
+ uuid: zod_1.z.string().uuid(),
10
+ trackId: zod_1.z.string().uuid(),
11
+ });
12
+ RemoveTrackFromMusicPlaylistCommand.ResponseSchema = zod_1.z.object({
13
+ data: models_1.MusicPlaylistSchema,
14
+ });
15
+ })(RemoveTrackFromMusicPlaylistCommand || (exports.RemoveTrackFromMusicPlaylistCommand = RemoveTrackFromMusicPlaylistCommand = {}));
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UpdateMusicPlaylistCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const models_1 = require("../../../models");
6
+ var UpdateMusicPlaylistCommand;
7
+ (function (UpdateMusicPlaylistCommand) {
8
+ UpdateMusicPlaylistCommand.RequestSchema = zod_1.z.object({
9
+ title: zod_1.z.string().min(1).max(80).trim(),
10
+ });
11
+ UpdateMusicPlaylistCommand.RequestParamsSchema = zod_1.z.object({
12
+ uuid: zod_1.z.string().uuid(),
13
+ });
14
+ UpdateMusicPlaylistCommand.ResponseSchema = zod_1.z.object({
15
+ data: models_1.MusicPlaylistSchema,
16
+ });
17
+ })(UpdateMusicPlaylistCommand || (exports.UpdateMusicPlaylistCommand = UpdateMusicPlaylistCommand = {}));
@@ -15,6 +15,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./suno-model-type.enum"), exports);
18
+ __exportStar(require("./music-action-type.enum"), exports);
19
+ __exportStar(require("./music-audio-action-type.enum"), exports);
20
+ __exportStar(require("./music-generation-action-type.enum"), exports);
21
+ __exportStar(require("./music-lyrics-structure.enum"), exports);
18
22
  __exportStar(require("./music-strategy.enum"), exports);
19
23
  __exportStar(require("./music-vocal-gender.enum"), exports);
20
24
  __exportStar(require("./music-pricing-rule-type.enum"), exports);
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MUSIC_ACTION_TYPE = void 0;
4
+ var MUSIC_ACTION_TYPE;
5
+ (function (MUSIC_ACTION_TYPE) {
6
+ MUSIC_ACTION_TYPE["LYRICS"] = "LYRICS";
7
+ MUSIC_ACTION_TYPE["BOOST_STYLE"] = "BOOST_STYLE";
8
+ MUSIC_ACTION_TYPE["REMOVE_VOCALS"] = "REMOVE_VOCALS";
9
+ MUSIC_ACTION_TYPE["EXTRACT_VOCALS"] = "EXTRACT_VOCALS";
10
+ MUSIC_ACTION_TYPE["COVER"] = "COVER";
11
+ MUSIC_ACTION_TYPE["EXTEND"] = "EXTEND";
12
+ MUSIC_ACTION_TYPE["ADD_INSTRUMENTAL"] = "ADD_INSTRUMENTAL";
13
+ MUSIC_ACTION_TYPE["ADD_VOCALS"] = "ADD_VOCALS";
14
+ })(MUSIC_ACTION_TYPE || (exports.MUSIC_ACTION_TYPE = MUSIC_ACTION_TYPE = {}));
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MUSIC_AUDIO_ACTION_TYPE = void 0;
4
+ var MUSIC_AUDIO_ACTION_TYPE;
5
+ (function (MUSIC_AUDIO_ACTION_TYPE) {
6
+ MUSIC_AUDIO_ACTION_TYPE["REMOVE_VOCALS"] = "removeVocals";
7
+ MUSIC_AUDIO_ACTION_TYPE["EXTRACT_VOCALS"] = "extractVocals";
8
+ MUSIC_AUDIO_ACTION_TYPE["COVER"] = "cover";
9
+ MUSIC_AUDIO_ACTION_TYPE["EXTEND"] = "extend";
10
+ MUSIC_AUDIO_ACTION_TYPE["ADD_INSTRUMENTAL"] = "addInstrumental";
11
+ MUSIC_AUDIO_ACTION_TYPE["ADD_VOCALS"] = "addVocals";
12
+ })(MUSIC_AUDIO_ACTION_TYPE || (exports.MUSIC_AUDIO_ACTION_TYPE = MUSIC_AUDIO_ACTION_TYPE = {}));
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MUSIC_GENERATION_ACTION_TYPE = void 0;
4
+ var MUSIC_GENERATION_ACTION_TYPE;
5
+ (function (MUSIC_GENERATION_ACTION_TYPE) {
6
+ MUSIC_GENERATION_ACTION_TYPE["GENERATE"] = "generate";
7
+ MUSIC_GENERATION_ACTION_TYPE["GIFT"] = "gift";
8
+ MUSIC_GENERATION_ACTION_TYPE["BACKGROUND"] = "background";
9
+ MUSIC_GENERATION_ACTION_TYPE["GENERATE_LYRICS"] = "generateLyrics";
10
+ })(MUSIC_GENERATION_ACTION_TYPE || (exports.MUSIC_GENERATION_ACTION_TYPE = MUSIC_GENERATION_ACTION_TYPE = {}));
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MUSIC_LYRICS_STRUCTURE = void 0;
4
+ var MUSIC_LYRICS_STRUCTURE;
5
+ (function (MUSIC_LYRICS_STRUCTURE) {
6
+ MUSIC_LYRICS_STRUCTURE["VERSE_CHORUS"] = "verse_chorus";
7
+ MUSIC_LYRICS_STRUCTURE["WITH_BRIDGE"] = "with_bridge";
8
+ MUSIC_LYRICS_STRUCTURE["FREE"] = "free";
9
+ })(MUSIC_LYRICS_STRUCTURE || (exports.MUSIC_LYRICS_STRUCTURE = MUSIC_LYRICS_STRUCTURE = {}));
@@ -34,7 +34,7 @@ exports.VideoEditorCommunityMediaSchema = zod_1.z.object({
34
34
  });
35
35
  exports.MusicCommunityMediaSchema = zod_1.z.object({
36
36
  type: zod_1.z.literal(constants_1.COMMUNITY_POST_TYPE.MUSIC),
37
- params: tools_1.MusicJobParamsSchema,
37
+ params: tools_1.MusicAnyJobParamsSchema,
38
38
  prompt: zod_1.z.string(),
39
39
  track: zod_1.z.object({
40
40
  uuid: zod_1.z.string().optional(), // Опционально для backward compatibility
@@ -17,4 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./music-config.schema"), exports);
18
18
  __exportStar(require("./music-job.schema"), exports);
19
19
  __exportStar(require("./music-model.schema"), exports);
20
+ __exportStar(require("./music-playlist.schema"), exports);
20
21
  __exportStar(require("./music-track.schema"), exports);
@@ -1,8 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MusicConfigSchema = void 0;
3
+ exports.MusicConfigSchema = exports.MusicAudioActionPricesSchema = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const music_model_schema_1 = require("./music-model.schema");
6
+ const constants_1 = require("../../../constants");
7
+ exports.MusicAudioActionPricesSchema = zod_1.z.record(zod_1.z.nativeEnum(constants_1.MUSIC_AUDIO_ACTION_TYPE), zod_1.z.number());
6
8
  exports.MusicConfigSchema = zod_1.z.object({
7
9
  models: zod_1.z.array(music_model_schema_1.MusicModelSchema),
10
+ audioActionPrices: exports.MusicAudioActionPricesSchema,
8
11
  });
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MusicJobSchema = exports.MusicJobParamsSchema = void 0;
3
+ exports.MusicJobSchema = exports.MusicExecuteRequestSchema = exports.MusicAnyJobParamsSchema = exports.MusicEditActionResultSchema = exports.MusicEditRequestSchema = exports.MusicAddVocalsParamsSchema = exports.MusicAddInstrumentalParamsSchema = exports.MusicUploadExtendParamsSchema = exports.MusicUploadCoverParamsSchema = exports.MusicSeparateVocalsParamsSchema = exports.MusicBackgroundParamsSchema = exports.MusicLyricsParamsSchema = exports.MusicJobParamsSchema = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const tool_job_schema_1 = require("../../tool-job.schema");
6
6
  const constants_1 = require("../../../constants");
@@ -28,12 +28,136 @@ exports.MusicJobParamsSchema = zod_1.z.discriminatedUnion('mode', [
28
28
  style: zod_1.z.string().min(1).max(1000),
29
29
  }),
30
30
  ]);
31
+ exports.MusicLyricsParamsSchema = zod_1.z.object({
32
+ prompt: zod_1.z.string().min(1).max(1000),
33
+ style: zod_1.z.string().min(1).max(200).optional(),
34
+ structure: zod_1.z.nativeEnum(constants_1.MUSIC_LYRICS_STRUCTURE),
35
+ });
36
+ exports.MusicBackgroundParamsSchema = zod_1.z.object({
37
+ prompt: zod_1.z.string().min(1).max(450),
38
+ style: zod_1.z.string(),
39
+ });
40
+ exports.MusicSeparateVocalsParamsSchema = zod_1.z.object({
41
+ externalId: zod_1.z.string().uuid(),
42
+ audioId: zod_1.z.string().min(1),
43
+ });
44
+ exports.MusicUploadCoverParamsSchema = zod_1.z.object({
45
+ audioId: zod_1.z.string().uuid(),
46
+ style: zod_1.z.string().min(1).max(1000),
47
+ prompt: zod_1.z.string().min(1).max(5000).optional(),
48
+ title: zod_1.z.string().min(1).max(80).optional(),
49
+ negativeTags: zod_1.z.string().max(1000).optional(),
50
+ vocalGender: zod_1.z.nativeEnum(constants_1.MUSIC_VOCAL_GENDER).optional(),
51
+ instrumental: zod_1.z.boolean().optional(),
52
+ });
53
+ exports.MusicUploadExtendParamsSchema = zod_1.z.object({
54
+ audioId: zod_1.z.string().uuid(),
55
+ continueAt: zod_1.z.number().positive(),
56
+ prompt: zod_1.z.string().min(1).max(5000),
57
+ style: zod_1.z.string().min(1).max(1000).optional(),
58
+ title: zod_1.z.string().min(1).max(80).optional(),
59
+ negativeTags: zod_1.z.string().max(1000).optional(),
60
+ vocalGender: zod_1.z.nativeEnum(constants_1.MUSIC_VOCAL_GENDER).optional(),
61
+ instrumental: zod_1.z.boolean().optional(),
62
+ });
63
+ exports.MusicAddInstrumentalParamsSchema = zod_1.z.object({
64
+ audioId: zod_1.z.string().uuid(),
65
+ style: zod_1.z.string().min(1).max(1000),
66
+ title: zod_1.z.string().min(1).max(80).optional(),
67
+ negativeTags: zod_1.z.string().max(1000).optional(),
68
+ vocalGender: zod_1.z.nativeEnum(constants_1.MUSIC_VOCAL_GENDER).optional(),
69
+ });
70
+ exports.MusicAddVocalsParamsSchema = zod_1.z.object({
71
+ audioId: zod_1.z.string().uuid(),
72
+ prompt: zod_1.z.string().min(1).max(5000),
73
+ style: zod_1.z.string().min(1).max(1000),
74
+ title: zod_1.z.string().min(1).max(80).optional(),
75
+ negativeTags: zod_1.z.string().max(1000).optional(),
76
+ vocalGender: zod_1.z.nativeEnum(constants_1.MUSIC_VOCAL_GENDER).optional(),
77
+ });
78
+ exports.MusicEditRequestSchema = zod_1.z
79
+ .object({
80
+ actionType: zod_1.z.nativeEnum(constants_1.MUSIC_AUDIO_ACTION_TYPE),
81
+ modelId: zod_1.z.string().uuid().optional(),
82
+ params: zod_1.z.unknown(),
83
+ })
84
+ .superRefine((data, ctx) => {
85
+ const requiresModel = ![
86
+ constants_1.MUSIC_AUDIO_ACTION_TYPE.REMOVE_VOCALS,
87
+ constants_1.MUSIC_AUDIO_ACTION_TYPE.EXTRACT_VOCALS,
88
+ ].includes(data.actionType);
89
+ if (requiresModel && !data.modelId) {
90
+ ctx.addIssue({
91
+ code: zod_1.z.ZodIssueCode.custom,
92
+ message: 'modelId is required',
93
+ path: ['modelId'],
94
+ });
95
+ }
96
+ const paramsValidation = data.actionType === constants_1.MUSIC_AUDIO_ACTION_TYPE.REMOVE_VOCALS ||
97
+ data.actionType === constants_1.MUSIC_AUDIO_ACTION_TYPE.EXTRACT_VOCALS
98
+ ? exports.MusicSeparateVocalsParamsSchema.safeParse(data.params)
99
+ : data.actionType === constants_1.MUSIC_AUDIO_ACTION_TYPE.COVER
100
+ ? exports.MusicUploadCoverParamsSchema.safeParse(data.params)
101
+ : data.actionType === constants_1.MUSIC_AUDIO_ACTION_TYPE.EXTEND
102
+ ? exports.MusicUploadExtendParamsSchema.safeParse(data.params)
103
+ : data.actionType === constants_1.MUSIC_AUDIO_ACTION_TYPE.ADD_INSTRUMENTAL
104
+ ? exports.MusicAddInstrumentalParamsSchema.safeParse(data.params)
105
+ : exports.MusicAddVocalsParamsSchema.safeParse(data.params);
106
+ if (!paramsValidation.success) {
107
+ for (const issue of paramsValidation.error.issues) {
108
+ ctx.addIssue(Object.assign(Object.assign({}, issue), { path: ['params', ...issue.path] }));
109
+ }
110
+ }
111
+ });
112
+ exports.MusicEditActionResultSchema = zod_1.z.object({
113
+ actionType: zod_1.z.nativeEnum(constants_1.MUSIC_AUDIO_ACTION_TYPE),
114
+ url: zod_1.z.string(),
115
+ vocalUrl: zod_1.z.string().optional(),
116
+ instrumentalUrl: zod_1.z.string().optional(),
117
+ originUrl: zod_1.z.string().optional(),
118
+ price: zod_1.z.number(),
119
+ });
120
+ exports.MusicAnyJobParamsSchema = zod_1.z.union([
121
+ exports.MusicJobParamsSchema,
122
+ exports.MusicUploadCoverParamsSchema,
123
+ exports.MusicUploadExtendParamsSchema,
124
+ exports.MusicAddInstrumentalParamsSchema,
125
+ exports.MusicAddVocalsParamsSchema,
126
+ ]);
127
+ exports.MusicExecuteRequestSchema = zod_1.z
128
+ .object({
129
+ actionType: zod_1.z
130
+ .nativeEnum(constants_1.MUSIC_GENERATION_ACTION_TYPE)
131
+ .optional()
132
+ .default(constants_1.MUSIC_GENERATION_ACTION_TYPE.GENERATE),
133
+ modelId: zod_1.z.string().uuid().optional(),
134
+ params: zod_1.z.unknown(),
135
+ })
136
+ .superRefine((data, ctx) => {
137
+ if (data.actionType !== constants_1.MUSIC_GENERATION_ACTION_TYPE.GENERATE_LYRICS && !data.modelId) {
138
+ ctx.addIssue({
139
+ code: zod_1.z.ZodIssueCode.custom,
140
+ message: 'modelId is required',
141
+ path: ['modelId'],
142
+ });
143
+ }
144
+ const paramsValidation = data.actionType === constants_1.MUSIC_GENERATION_ACTION_TYPE.GENERATE_LYRICS
145
+ ? exports.MusicLyricsParamsSchema.safeParse(data.params)
146
+ : data.actionType === constants_1.MUSIC_GENERATION_ACTION_TYPE.BACKGROUND
147
+ ? exports.MusicBackgroundParamsSchema.safeParse(data.params)
148
+ : exports.MusicJobParamsSchema.safeParse(data.params);
149
+ if (!paramsValidation.success) {
150
+ for (const issue of paramsValidation.error.issues) {
151
+ ctx.addIssue(Object.assign(Object.assign({}, issue), { path: ['params', ...issue.path] }));
152
+ }
153
+ }
154
+ });
31
155
  exports.MusicJobSchema = tool_job_schema_1.ToolJobSchema.extend({
32
156
  title: zod_1.z.string(),
33
157
  prompt: zod_1.z.string(),
34
158
  reaction: zod_1.z.nativeEnum(constants_1.USER_REACTION).nullable(),
35
159
  tracks: zod_1.z.array(music_track_schema_1.MusicTrackSchema),
36
- params: exports.MusicJobParamsSchema,
160
+ params: exports.MusicAnyJobParamsSchema,
37
161
  externalId: zod_1.z.string().nullable(),
38
162
  modelId: zod_1.z.string(),
39
163
  });
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MusicPlaylistSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const music_track_schema_1 = require("./music-track.schema");
6
+ exports.MusicPlaylistSchema = zod_1.z.object({
7
+ uuid: zod_1.z.string().uuid(),
8
+ title: zod_1.z.string(),
9
+ tracks: zod_1.z.array(music_track_schema_1.MusicTrackSchema).optional(),
10
+ trackCount: zod_1.z.number(),
11
+ userId: zod_1.z.string().uuid().nullable().optional(),
12
+ unregisteredUserId: zod_1.z.string().uuid().nullable().optional(),
13
+ createdAt: zod_1.z.date(),
14
+ updatedAt: zod_1.z.date(),
15
+ });
@@ -2,17 +2,28 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MusicTrackSchema = void 0;
4
4
  const zod_1 = require("zod");
5
+ const file_schema_1 = require("../../file.schema");
5
6
  exports.MusicTrackSchema = zod_1.z.object({
6
7
  uuid: zod_1.z.string(),
7
8
  title: zod_1.z.string(),
8
9
  audioId: zod_1.z.string(),
9
10
  audioUrl: zod_1.z.string(),
11
+ audioFile: file_schema_1.FileSchema.pick({
12
+ uuid: true,
13
+ url: true,
14
+ mimeType: true,
15
+ duration: true,
16
+ originalName: true,
17
+ })
18
+ .nullable()
19
+ .optional(),
10
20
  coverUrl: zod_1.z.string(),
11
21
  prompt: zod_1.z.string().nullable(),
22
+ fullLyrics: zod_1.z.string().nullable().optional(),
12
23
  tags: zod_1.z.string(),
13
24
  duration: zod_1.z.number(),
14
- isPublished: zod_1.z.boolean(),
15
- postId: zod_1.z.string().nullable(),
25
+ isPublished: zod_1.z.boolean().optional(),
26
+ postId: zod_1.z.string().nullable().optional(),
16
27
  waveformPeaks: zod_1.z.array(zod_1.z.number()).nullable().optional(),
17
28
  genJobId: zod_1.z.string().nullable().optional(),
18
29
  editorJobId: zod_1.z.string().nullable().optional(),
@@ -0,0 +1,19 @@
1
+ import { z } from 'zod';
2
+ import { MusicPlaylistSchema } from '../../../models';
3
+
4
+ export namespace AddTrackToMusicPlaylistCommand {
5
+ export const RequestSchema = z.object({
6
+ trackId: z.string().uuid(),
7
+ });
8
+ export type Request = z.infer<typeof RequestSchema>;
9
+
10
+ export const RequestParamsSchema = z.object({
11
+ uuid: z.string().uuid(),
12
+ });
13
+ export type RequestParams = z.infer<typeof RequestParamsSchema>;
14
+
15
+ export const ResponseSchema = z.object({
16
+ data: MusicPlaylistSchema,
17
+ });
18
+ export type Response = z.infer<typeof ResponseSchema>;
19
+ }
@@ -0,0 +1,17 @@
1
+ import { z } from 'zod';
2
+
3
+ export namespace BoostMusicStyleCommand {
4
+ export const RequestSchema = z.object({
5
+ content: z.string().min(1).max(3000),
6
+ });
7
+
8
+ export type Request = z.infer<typeof RequestSchema>;
9
+
10
+ export const ResponseSchema = z.object({
11
+ data: z.object({
12
+ result: z.string(),
13
+ }),
14
+ });
15
+
16
+ export type Response = z.infer<typeof ResponseSchema>;
17
+ }
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ import { MusicPlaylistSchema } from '../../../models';
3
+
4
+ export namespace CreateMusicPlaylistCommand {
5
+ export const RequestSchema = z.object({
6
+ title: z.string().min(1).max(80).trim(),
7
+ });
8
+ export type Request = z.infer<typeof RequestSchema>;
9
+
10
+ export const ResponseSchema = z.object({
11
+ data: MusicPlaylistSchema,
12
+ });
13
+ export type Response = z.infer<typeof ResponseSchema>;
14
+ }
@@ -0,0 +1,11 @@
1
+ import { z } from 'zod';
2
+
3
+ export namespace DeleteMusicPlaylistCommand {
4
+ export const RequestParamsSchema = z.object({
5
+ uuid: z.string().uuid(),
6
+ });
7
+ export type RequestParams = z.infer<typeof RequestParamsSchema>;
8
+
9
+ export const ResponseSchema = z.void();
10
+ export type Response = z.infer<typeof ResponseSchema>;
11
+ }
@@ -0,0 +1,12 @@
1
+ import { z } from 'zod';
2
+ import { MusicEditActionResultSchema, MusicEditRequestSchema, MusicJobSchema } from '../../../models';
3
+
4
+ export namespace EditMusicCommand {
5
+ export const RequestSchema = MusicEditRequestSchema;
6
+ export type Request = z.infer<typeof RequestSchema>;
7
+
8
+ export const ResponseSchema = z.object({
9
+ data: z.union([MusicJobSchema, MusicEditActionResultSchema]),
10
+ });
11
+ export type Response = z.infer<typeof ResponseSchema>;
12
+ }
@@ -0,0 +1,9 @@
1
+ import { z } from 'zod';
2
+ import { MusicPlaylistSchema } from '../../../models';
3
+
4
+ export namespace FindMusicPlaylistsCommand {
5
+ export const ResponseSchema = z.object({
6
+ data: z.array(MusicPlaylistSchema),
7
+ });
8
+ export type Response = z.infer<typeof ResponseSchema>;
9
+ }
@@ -1,15 +1,12 @@
1
1
  import { z } from 'zod';
2
- import { ToolJobSchema, MusicJobParamsSchema } from '../../../models';
2
+ import { MusicExecuteRequestSchema, MusicJobSchema } from '../../../models';
3
3
  export namespace MusicCommand {
4
- export const RequestSchema = z.object({
5
- modelId: z.string().uuid(),
6
- params: MusicJobParamsSchema,
7
- });
4
+ export const RequestSchema = MusicExecuteRequestSchema;
8
5
 
9
6
  export type Request = z.infer<typeof RequestSchema>;
10
7
 
11
8
  export const ResponseSchema = z.object({
12
- data: ToolJobSchema,
9
+ data: z.union([MusicJobSchema, z.object({ lyrics: z.string() })]),
13
10
  });
14
11
 
15
12
  export type Response = z.infer<typeof ResponseSchema>;
@@ -1,12 +1,20 @@
1
+ export * from './add-track-to-music-playlist.command';
2
+ export * from './create-music-playlist.command';
1
3
  export * from './delete-all-music-jobs.command';
2
4
  export * from './delete-music-job-by-uuid.command';
5
+ export * from './delete-music-playlist.command';
6
+ export * from './edit-music.command';
3
7
  export * from './find-music-job-by-uuid.command';
4
8
  export * from './find-music-jobs.command';
9
+ export * from './find-music-playlists.command';
5
10
  export * from './get-music-tool-config.command';
6
11
  export * from './retry-music-job.command';
7
12
  export * from './set-reaction-to-music-job.command';
8
13
  export * from './generate-music.command';
9
14
  export * from './update-music-job-title.command';
15
+ export * from './remove-track-from-music-playlist.command';
10
16
  export * from './convert-to-wav.command';
11
17
  export * from './generate-lyrics.command';
18
+ export * from './boost-music-style.command';
12
19
  export * from './update-music-job-favorite.command';
20
+ export * from './update-music-playlist.command';
@@ -0,0 +1,15 @@
1
+ import { z } from 'zod';
2
+ import { MusicPlaylistSchema } from '../../../models';
3
+
4
+ export namespace RemoveTrackFromMusicPlaylistCommand {
5
+ export const RequestParamsSchema = z.object({
6
+ uuid: z.string().uuid(),
7
+ trackId: z.string().uuid(),
8
+ });
9
+ export type RequestParams = z.infer<typeof RequestParamsSchema>;
10
+
11
+ export const ResponseSchema = z.object({
12
+ data: MusicPlaylistSchema,
13
+ });
14
+ export type Response = z.infer<typeof ResponseSchema>;
15
+ }
@@ -0,0 +1,19 @@
1
+ import { z } from 'zod';
2
+ import { MusicPlaylistSchema } from '../../../models';
3
+
4
+ export namespace UpdateMusicPlaylistCommand {
5
+ export const RequestSchema = z.object({
6
+ title: z.string().min(1).max(80).trim(),
7
+ });
8
+ export type Request = z.infer<typeof RequestSchema>;
9
+
10
+ export const RequestParamsSchema = z.object({
11
+ uuid: z.string().uuid(),
12
+ });
13
+ export type RequestParams = z.infer<typeof RequestParamsSchema>;
14
+
15
+ export const ResponseSchema = z.object({
16
+ data: MusicPlaylistSchema,
17
+ });
18
+ export type Response = z.infer<typeof ResponseSchema>;
19
+ }
@@ -1,4 +1,8 @@
1
1
  export * from './suno-model-type.enum';
2
+ export * from './music-action-type.enum';
3
+ export * from './music-audio-action-type.enum';
4
+ export * from './music-generation-action-type.enum';
5
+ export * from './music-lyrics-structure.enum';
2
6
  export * from './music-strategy.enum';
3
7
  export * from './music-vocal-gender.enum';
4
8
  export * from './music-pricing-rule-type.enum';
@@ -0,0 +1,10 @@
1
+ export enum MUSIC_ACTION_TYPE {
2
+ LYRICS = 'LYRICS',
3
+ BOOST_STYLE = 'BOOST_STYLE',
4
+ REMOVE_VOCALS = 'REMOVE_VOCALS',
5
+ EXTRACT_VOCALS = 'EXTRACT_VOCALS',
6
+ COVER = 'COVER',
7
+ EXTEND = 'EXTEND',
8
+ ADD_INSTRUMENTAL = 'ADD_INSTRUMENTAL',
9
+ ADD_VOCALS = 'ADD_VOCALS',
10
+ }
@@ -0,0 +1,8 @@
1
+ export enum MUSIC_AUDIO_ACTION_TYPE {
2
+ REMOVE_VOCALS = 'removeVocals',
3
+ EXTRACT_VOCALS = 'extractVocals',
4
+ COVER = 'cover',
5
+ EXTEND = 'extend',
6
+ ADD_INSTRUMENTAL = 'addInstrumental',
7
+ ADD_VOCALS = 'addVocals',
8
+ }
@@ -0,0 +1,6 @@
1
+ export enum MUSIC_GENERATION_ACTION_TYPE {
2
+ GENERATE = 'generate',
3
+ GIFT = 'gift',
4
+ BACKGROUND = 'background',
5
+ GENERATE_LYRICS = 'generateLyrics',
6
+ }
@@ -0,0 +1,5 @@
1
+ export enum MUSIC_LYRICS_STRUCTURE {
2
+ VERSE_CHORUS = 'verse_chorus',
3
+ WITH_BRIDGE = 'with_bridge',
4
+ FREE = 'free',
5
+ }
@@ -2,7 +2,7 @@ import { z } from 'zod';
2
2
  import { COMMUNITY_POST_TYPE } from '../../constants';
3
3
  import { VideoJobParamsSchema } from '../tools/video/video-job.schema';
4
4
  import { FileSchema } from '../file.schema';
5
- import { MusicJobParamsSchema } from '../tools';
5
+ import { MusicAnyJobParamsSchema } from '../tools';
6
6
 
7
7
  export const ImageCommunityMediaSchema = z.object({
8
8
  type: z.literal(COMMUNITY_POST_TYPE.IMAGE),
@@ -36,7 +36,7 @@ export const VideoEditorCommunityMediaSchema = z.object({
36
36
 
37
37
  export const MusicCommunityMediaSchema = z.object({
38
38
  type: z.literal(COMMUNITY_POST_TYPE.MUSIC),
39
- params: MusicJobParamsSchema,
39
+ params: MusicAnyJobParamsSchema,
40
40
  prompt: z.string(),
41
41
  track: z.object({
42
42
  uuid: z.string().optional(), // Опционально для backward compatibility
@@ -1,4 +1,5 @@
1
1
  export * from './music-config.schema';
2
2
  export * from './music-job.schema';
3
3
  export * from './music-model.schema';
4
+ export * from './music-playlist.schema';
4
5
  export * from './music-track.schema';
@@ -1,8 +1,16 @@
1
1
  import { z } from 'zod';
2
2
  import { MusicModelSchema } from './music-model.schema';
3
+ import { MUSIC_AUDIO_ACTION_TYPE } from '../../../constants';
4
+
5
+ export const MusicAudioActionPricesSchema = z.record(
6
+ z.nativeEnum(MUSIC_AUDIO_ACTION_TYPE),
7
+ z.number(),
8
+ );
3
9
 
4
10
  export const MusicConfigSchema = z.object({
5
11
  models: z.array(MusicModelSchema),
12
+ audioActionPrices: MusicAudioActionPricesSchema,
6
13
  });
7
14
 
8
15
  export type MusicConfig = z.infer<typeof MusicConfigSchema>;
16
+ export type MusicAudioActionPrices = z.infer<typeof MusicAudioActionPricesSchema>;
@@ -1,6 +1,13 @@
1
1
  import { z } from 'zod';
2
2
  import { ToolJobSchema } from '../../tool-job.schema';
3
- import { MUSIC_VOCAL_GENDER, SUNO_MODE_TYPE, USER_REACTION } from '../../../constants';
3
+ import {
4
+ MUSIC_AUDIO_ACTION_TYPE,
5
+ MUSIC_GENERATION_ACTION_TYPE,
6
+ MUSIC_LYRICS_STRUCTURE,
7
+ MUSIC_VOCAL_GENDER,
8
+ SUNO_MODE_TYPE,
9
+ USER_REACTION,
10
+ } from '../../../constants';
4
11
  import { MusicTrackSchema } from './music-track.schema';
5
12
 
6
13
  export const MusicJobParamsSchema = z.discriminatedUnion('mode', [
@@ -29,12 +36,171 @@ export const MusicJobParamsSchema = z.discriminatedUnion('mode', [
29
36
 
30
37
  export type MusicJobParams = z.infer<typeof MusicJobParamsSchema>;
31
38
 
39
+ export const MusicLyricsParamsSchema = z.object({
40
+ prompt: z.string().min(1).max(1000),
41
+ style: z.string().min(1).max(200).optional(),
42
+ structure: z.nativeEnum(MUSIC_LYRICS_STRUCTURE),
43
+ });
44
+ export type MusicLyricsParams = z.infer<typeof MusicLyricsParamsSchema>;
45
+
46
+ export const MusicBackgroundParamsSchema = z.object({
47
+ prompt: z.string().min(1).max(450),
48
+ style: z.string(),
49
+ });
50
+ export type MusicBackgroundParams = z.infer<typeof MusicBackgroundParamsSchema>;
51
+
52
+ export const MusicSeparateVocalsParamsSchema = z.object({
53
+ externalId: z.string().uuid(),
54
+ audioId: z.string().min(1),
55
+ });
56
+ export type MusicSeparateVocalsParams = z.infer<typeof MusicSeparateVocalsParamsSchema>;
57
+
58
+ export const MusicUploadCoverParamsSchema = z.object({
59
+ audioId: z.string().uuid(),
60
+ style: z.string().min(1).max(1000),
61
+ prompt: z.string().min(1).max(5000).optional(),
62
+ title: z.string().min(1).max(80).optional(),
63
+ negativeTags: z.string().max(1000).optional(),
64
+ vocalGender: z.nativeEnum(MUSIC_VOCAL_GENDER).optional(),
65
+ instrumental: z.boolean().optional(),
66
+ });
67
+ export type MusicUploadCoverParams = z.infer<typeof MusicUploadCoverParamsSchema>;
68
+
69
+ export const MusicUploadExtendParamsSchema = z.object({
70
+ audioId: z.string().uuid(),
71
+ continueAt: z.number().positive(),
72
+ prompt: z.string().min(1).max(5000),
73
+ style: z.string().min(1).max(1000).optional(),
74
+ title: z.string().min(1).max(80).optional(),
75
+ negativeTags: z.string().max(1000).optional(),
76
+ vocalGender: z.nativeEnum(MUSIC_VOCAL_GENDER).optional(),
77
+ instrumental: z.boolean().optional(),
78
+ });
79
+ export type MusicUploadExtendParams = z.infer<typeof MusicUploadExtendParamsSchema>;
80
+
81
+ export const MusicAddInstrumentalParamsSchema = z.object({
82
+ audioId: z.string().uuid(),
83
+ style: z.string().min(1).max(1000),
84
+ title: z.string().min(1).max(80).optional(),
85
+ negativeTags: z.string().max(1000).optional(),
86
+ vocalGender: z.nativeEnum(MUSIC_VOCAL_GENDER).optional(),
87
+ });
88
+ export type MusicAddInstrumentalParams = z.infer<typeof MusicAddInstrumentalParamsSchema>;
89
+
90
+ export const MusicAddVocalsParamsSchema = z.object({
91
+ audioId: z.string().uuid(),
92
+ prompt: z.string().min(1).max(5000),
93
+ style: z.string().min(1).max(1000),
94
+ title: z.string().min(1).max(80).optional(),
95
+ negativeTags: z.string().max(1000).optional(),
96
+ vocalGender: z.nativeEnum(MUSIC_VOCAL_GENDER).optional(),
97
+ });
98
+ export type MusicAddVocalsParams = z.infer<typeof MusicAddVocalsParamsSchema>;
99
+
100
+ export const MusicEditRequestSchema = z
101
+ .object({
102
+ actionType: z.nativeEnum(MUSIC_AUDIO_ACTION_TYPE),
103
+ modelId: z.string().uuid().optional(),
104
+ params: z.unknown(),
105
+ })
106
+ .superRefine((data, ctx) => {
107
+ const requiresModel = ![
108
+ MUSIC_AUDIO_ACTION_TYPE.REMOVE_VOCALS,
109
+ MUSIC_AUDIO_ACTION_TYPE.EXTRACT_VOCALS,
110
+ ].includes(data.actionType);
111
+
112
+ if (requiresModel && !data.modelId) {
113
+ ctx.addIssue({
114
+ code: z.ZodIssueCode.custom,
115
+ message: 'modelId is required',
116
+ path: ['modelId'],
117
+ });
118
+ }
119
+
120
+ const paramsValidation =
121
+ data.actionType === MUSIC_AUDIO_ACTION_TYPE.REMOVE_VOCALS ||
122
+ data.actionType === MUSIC_AUDIO_ACTION_TYPE.EXTRACT_VOCALS
123
+ ? MusicSeparateVocalsParamsSchema.safeParse(data.params)
124
+ : data.actionType === MUSIC_AUDIO_ACTION_TYPE.COVER
125
+ ? MusicUploadCoverParamsSchema.safeParse(data.params)
126
+ : data.actionType === MUSIC_AUDIO_ACTION_TYPE.EXTEND
127
+ ? MusicUploadExtendParamsSchema.safeParse(data.params)
128
+ : data.actionType === MUSIC_AUDIO_ACTION_TYPE.ADD_INSTRUMENTAL
129
+ ? MusicAddInstrumentalParamsSchema.safeParse(data.params)
130
+ : MusicAddVocalsParamsSchema.safeParse(data.params);
131
+
132
+ if (!paramsValidation.success) {
133
+ for (const issue of paramsValidation.error.issues) {
134
+ ctx.addIssue({
135
+ ...issue,
136
+ path: ['params', ...issue.path],
137
+ });
138
+ }
139
+ }
140
+ });
141
+ export type MusicEditRequest = z.infer<typeof MusicEditRequestSchema>;
142
+
143
+ export const MusicEditActionResultSchema = z.object({
144
+ actionType: z.nativeEnum(MUSIC_AUDIO_ACTION_TYPE),
145
+ url: z.string(),
146
+ vocalUrl: z.string().optional(),
147
+ instrumentalUrl: z.string().optional(),
148
+ originUrl: z.string().optional(),
149
+ price: z.number(),
150
+ });
151
+ export type MusicEditActionResult = z.infer<typeof MusicEditActionResultSchema>;
152
+
153
+ export const MusicAnyJobParamsSchema = z.union([
154
+ MusicJobParamsSchema,
155
+ MusicUploadCoverParamsSchema,
156
+ MusicUploadExtendParamsSchema,
157
+ MusicAddInstrumentalParamsSchema,
158
+ MusicAddVocalsParamsSchema,
159
+ ]);
160
+ export type MusicAnyJobParams = z.infer<typeof MusicAnyJobParamsSchema>;
161
+
162
+ export const MusicExecuteRequestSchema = z
163
+ .object({
164
+ actionType: z
165
+ .nativeEnum(MUSIC_GENERATION_ACTION_TYPE)
166
+ .optional()
167
+ .default(MUSIC_GENERATION_ACTION_TYPE.GENERATE),
168
+ modelId: z.string().uuid().optional(),
169
+ params: z.unknown(),
170
+ })
171
+ .superRefine((data, ctx) => {
172
+ if (data.actionType !== MUSIC_GENERATION_ACTION_TYPE.GENERATE_LYRICS && !data.modelId) {
173
+ ctx.addIssue({
174
+ code: z.ZodIssueCode.custom,
175
+ message: 'modelId is required',
176
+ path: ['modelId'],
177
+ });
178
+ }
179
+
180
+ const paramsValidation =
181
+ data.actionType === MUSIC_GENERATION_ACTION_TYPE.GENERATE_LYRICS
182
+ ? MusicLyricsParamsSchema.safeParse(data.params)
183
+ : data.actionType === MUSIC_GENERATION_ACTION_TYPE.BACKGROUND
184
+ ? MusicBackgroundParamsSchema.safeParse(data.params)
185
+ : MusicJobParamsSchema.safeParse(data.params);
186
+
187
+ if (!paramsValidation.success) {
188
+ for (const issue of paramsValidation.error.issues) {
189
+ ctx.addIssue({
190
+ ...issue,
191
+ path: ['params', ...issue.path],
192
+ });
193
+ }
194
+ }
195
+ });
196
+ export type MusicExecuteRequest = z.infer<typeof MusicExecuteRequestSchema>;
197
+
32
198
  export const MusicJobSchema = ToolJobSchema.extend({
33
199
  title: z.string(),
34
200
  prompt: z.string(),
35
201
  reaction: z.nativeEnum(USER_REACTION).nullable(),
36
202
  tracks: z.array(MusicTrackSchema),
37
- params: MusicJobParamsSchema,
203
+ params: MusicAnyJobParamsSchema,
38
204
  externalId: z.string().nullable(),
39
205
  modelId: z.string(),
40
206
  });
@@ -0,0 +1,15 @@
1
+ import { z } from 'zod';
2
+ import { MusicTrackSchema } from './music-track.schema';
3
+
4
+ export const MusicPlaylistSchema = z.object({
5
+ uuid: z.string().uuid(),
6
+ title: z.string(),
7
+ tracks: z.array(MusicTrackSchema).optional(),
8
+ trackCount: z.number(),
9
+ userId: z.string().uuid().nullable().optional(),
10
+ unregisteredUserId: z.string().uuid().nullable().optional(),
11
+ createdAt: z.date(),
12
+ updatedAt: z.date(),
13
+ });
14
+
15
+ export type MusicPlaylist = z.infer<typeof MusicPlaylistSchema>;
@@ -1,16 +1,27 @@
1
1
  import { z } from 'zod';
2
+ import { FileSchema } from '../../file.schema';
2
3
 
3
4
  export const MusicTrackSchema = z.object({
4
5
  uuid: z.string(),
5
6
  title: z.string(),
6
7
  audioId: z.string(),
7
8
  audioUrl: z.string(),
9
+ audioFile: FileSchema.pick({
10
+ uuid: true,
11
+ url: true,
12
+ mimeType: true,
13
+ duration: true,
14
+ originalName: true,
15
+ })
16
+ .nullable()
17
+ .optional(),
8
18
  coverUrl: z.string(),
9
19
  prompt: z.string().nullable(),
20
+ fullLyrics: z.string().nullable().optional(),
10
21
  tags: z.string(),
11
22
  duration: z.number(),
12
- isPublished: z.boolean(),
13
- postId: z.string().nullable(),
23
+ isPublished: z.boolean().optional(),
24
+ postId: z.string().nullable().optional(),
14
25
  waveformPeaks: z.array(z.number()).nullable().optional(),
15
26
 
16
27
  genJobId: z.string().nullable().optional(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purpleschool/gptbot",
3
- "version": "0.14.34",
3
+ "version": "0.14.35",
4
4
  "description": "",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",