@runapi.ai/suno 0.2.1 → 0.2.4
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.
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/skills/suno/README.md +35 -3
- package/skills/suno/SKILL.md +55 -211
package/dist/index.d.mts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { AsyncTaskStatus, HttpClient, RequestOptions, PollingOptions, ClientOptions } from '@runapi.ai/core';
|
|
2
2
|
export { AuthenticationError, InsufficientCreditsError, NetworkError, NotFoundError, RateLimitError, RunApiError, ServiceUnavailableError, TaskFailedError, TaskTimeoutError, TimeoutError, ValidationError } from '@runapi.ai/core';
|
|
3
3
|
|
|
4
|
-
type SunoModel = '
|
|
5
|
-
type SoundModel = '
|
|
4
|
+
type SunoModel = 'suno-v5.5' | 'suno-v5' | 'suno-v4.5-plus' | 'suno-v4.5-all' | 'suno-v4.5' | 'suno-v4' | 'suno-v3.5';
|
|
5
|
+
type SoundModel = 'suno-v5' | 'suno-v5.5';
|
|
6
6
|
type SoundKey = 'Cm' | 'C#m' | 'Dm' | 'D#m' | 'Em' | 'Fm' | 'F#m' | 'Gm' | 'G#m' | 'Am' | 'A#m' | 'Bm' | 'C' | 'C#' | 'D' | 'D#' | 'E' | 'F' | 'F#' | 'G' | 'G#' | 'A' | 'A#' | 'B';
|
|
7
7
|
type VocalGender = 'm' | 'f';
|
|
8
8
|
type PersonaModel = 'style_persona' | 'voice_persona';
|
|
@@ -503,7 +503,7 @@ declare class BoostStyle {
|
|
|
503
503
|
* custom_mode: false,
|
|
504
504
|
* instrumental: false,
|
|
505
505
|
* prompt: 'A chill lo-fi beat with soft vocals',
|
|
506
|
-
* model: '
|
|
506
|
+
* model: 'suno-v4.5-plus',
|
|
507
507
|
* });
|
|
508
508
|
* ```
|
|
509
509
|
*/
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { AsyncTaskStatus, HttpClient, RequestOptions, PollingOptions, ClientOptions } from '@runapi.ai/core';
|
|
2
2
|
export { AuthenticationError, InsufficientCreditsError, NetworkError, NotFoundError, RateLimitError, RunApiError, ServiceUnavailableError, TaskFailedError, TaskTimeoutError, TimeoutError, ValidationError } from '@runapi.ai/core';
|
|
3
3
|
|
|
4
|
-
type SunoModel = '
|
|
5
|
-
type SoundModel = '
|
|
4
|
+
type SunoModel = 'suno-v5.5' | 'suno-v5' | 'suno-v4.5-plus' | 'suno-v4.5-all' | 'suno-v4.5' | 'suno-v4' | 'suno-v3.5';
|
|
5
|
+
type SoundModel = 'suno-v5' | 'suno-v5.5';
|
|
6
6
|
type SoundKey = 'Cm' | 'C#m' | 'Dm' | 'D#m' | 'Em' | 'Fm' | 'F#m' | 'Gm' | 'G#m' | 'Am' | 'A#m' | 'Bm' | 'C' | 'C#' | 'D' | 'D#' | 'E' | 'F' | 'F#' | 'G' | 'G#' | 'A' | 'A#' | 'B';
|
|
7
7
|
type VocalGender = 'm' | 'f';
|
|
8
8
|
type PersonaModel = 'style_persona' | 'voice_persona';
|
|
@@ -503,7 +503,7 @@ declare class BoostStyle {
|
|
|
503
503
|
* custom_mode: false,
|
|
504
504
|
* instrumental: false,
|
|
505
505
|
* prompt: 'A chill lo-fi beat with soft vocals',
|
|
506
|
-
* model: '
|
|
506
|
+
* model: 'suno-v4.5-plus',
|
|
507
507
|
* });
|
|
508
508
|
* ```
|
|
509
509
|
*/
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/client.ts","../src/resources/text-to-music.ts","../src/resources/extend-music.ts","../src/resources/generate-artwork.ts","../src/resources/cover-audio.ts","../src/resources/add-instrumental.ts","../src/resources/add-vocals.ts","../src/resources/separate-audio-stems.ts","../src/resources/generate-midi.ts","../src/resources/convert-audio.ts","../src/resources/visualize-music.ts","../src/resources/generate-lyrics.ts","../src/resources/get-timestamped-lyrics.ts","../src/resources/replace-section.ts","../src/resources/create-mashup.ts","../src/resources/text-to-sound.ts","../src/resources/generate-persona.ts","../src/resources/boost-style.ts"],"sourcesContent":["export { SunoClient } from './client';\nexport * from './types';\n\n// Re-export common errors from core for convenience\nexport {\n RunApiError,\n AuthenticationError,\n InsufficientCreditsError,\n NotFoundError,\n ValidationError,\n RateLimitError,\n ServiceUnavailableError,\n NetworkError,\n TimeoutError,\n TaskTimeoutError,\n TaskFailedError,\n} from '@runapi.ai/core';\n","import { createHttpClient, type ClientOptions } from '@runapi.ai/core';\nimport { TextToMusic } from './resources/text-to-music';\nimport { ExtendMusic } from './resources/extend-music';\nimport { GenerateArtwork } from './resources/generate-artwork';\nimport { CoverAudio } from './resources/cover-audio';\nimport { AddInstrumental } from './resources/add-instrumental';\nimport { AddVocals } from './resources/add-vocals';\nimport { SeparateAudioStems } from './resources/separate-audio-stems';\nimport { GenerateMidi } from './resources/generate-midi';\nimport { ConvertAudio } from './resources/convert-audio';\nimport { VisualizeMusic } from './resources/visualize-music';\nimport { GenerateLyrics } from './resources/generate-lyrics';\nimport { GetTimestampedLyrics } from './resources/get-timestamped-lyrics';\nimport { ReplaceSection } from './resources/replace-section';\nimport { CreateMashup } from './resources/create-mashup';\nimport { TextToSound } from './resources/text-to-sound';\nimport { GeneratePersona } from './resources/generate-persona';\nimport { BoostStyle } from './resources/boost-style';\n\n/**\n * Suno API client.\n *\n * @example\n * ```typescript\n * const client = new SunoClient({\n * apiKey: 'your-api-key',\n * baseUrl: 'https://runapi.ai',\n * });\n *\n * const result = await client.textToMusic.run({\n * custom_mode: false,\n * instrumental: false,\n * prompt: 'A chill lo-fi beat with soft vocals',\n * model: 'V4_5PLUS',\n * });\n * ```\n */\nexport class SunoClient {\n public readonly textToMusic: TextToMusic;\n public readonly extendMusic: ExtendMusic;\n public readonly generateArtwork: GenerateArtwork;\n public readonly coverAudio: CoverAudio;\n public readonly addInstrumental: AddInstrumental;\n public readonly addVocals: AddVocals;\n public readonly separateAudioStems: SeparateAudioStems;\n public readonly generateMidi: GenerateMidi;\n public readonly convertAudio: ConvertAudio;\n public readonly visualizeMusic: VisualizeMusic;\n public readonly generateLyrics: GenerateLyrics;\n public readonly getTimestampedLyrics: GetTimestampedLyrics;\n public readonly replaceSection: ReplaceSection;\n public readonly createMashup: CreateMashup;\n public readonly textToSound: TextToSound;\n public readonly generatePersona: GeneratePersona;\n public readonly boostStyle: BoostStyle;\n\n constructor(options: ClientOptions = {}) {\n const http = createHttpClient(options);\n this.textToMusic = new TextToMusic(http);\n this.extendMusic = new ExtendMusic(http);\n this.generateArtwork = new GenerateArtwork(http);\n this.coverAudio = new CoverAudio(http);\n this.addInstrumental = new AddInstrumental(http);\n this.addVocals = new AddVocals(http);\n this.separateAudioStems = new SeparateAudioStems(http);\n this.generateMidi = new GenerateMidi(http);\n this.convertAudio = new ConvertAudio(http);\n this.visualizeMusic = new VisualizeMusic(http);\n this.generateLyrics = new GenerateLyrics(http);\n this.getTimestampedLyrics = new GetTimestampedLyrics(http);\n this.replaceSection = new ReplaceSection(http);\n this.createMashup = new CreateMashup(http);\n this.textToSound = new TextToSound(http);\n this.generatePersona = new GeneratePersona(http);\n this.boostStyle = new BoostStyle(http);\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedTextToMusicResponse, TextToMusicParams, TextToMusicResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/text_to_music';\n\nexport class TextToMusic {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: TextToMusicParams, options?: RequestOptions & PollingOptions): Promise<CompletedTextToMusicResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<TextToMusicResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedTextToMusicResponse;\n }\n\n async create(params: TextToMusicParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<TextToMusicResponse> {\n return this.http.request<TextToMusicResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedExtendMusicResponse, ExtendMusicParams, ExtendMusicResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/extend_music';\n\nexport class ExtendMusic {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: ExtendMusicParams, options?: RequestOptions & PollingOptions): Promise<CompletedExtendMusicResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<ExtendMusicResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedExtendMusicResponse;\n }\n\n async create(params: ExtendMusicParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<ExtendMusicResponse> {\n return this.http.request<ExtendMusicResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedGenerateArtworkResponse, GenerateArtworkParams, GenerateArtworkResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/generate_artwork';\n\nexport class GenerateArtwork {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: GenerateArtworkParams, options?: RequestOptions & PollingOptions): Promise<CompletedGenerateArtworkResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<GenerateArtworkResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedGenerateArtworkResponse;\n }\n\n async create(params: GenerateArtworkParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<GenerateArtworkResponse> {\n return this.http.request<GenerateArtworkResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedCoverAudioResponse, CoverAudioParams, CoverAudioResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/cover_audio';\n\nexport class CoverAudio {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: CoverAudioParams, options?: RequestOptions & PollingOptions): Promise<CompletedCoverAudioResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<CoverAudioResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedCoverAudioResponse;\n }\n\n async create(params: CoverAudioParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<CoverAudioResponse> {\n return this.http.request<CoverAudioResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedAddInstrumentalResponse, AddInstrumentalParams, AddInstrumentalResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/add_instrumental';\n\nexport class AddInstrumental {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: AddInstrumentalParams, options?: RequestOptions & PollingOptions): Promise<CompletedAddInstrumentalResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<AddInstrumentalResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedAddInstrumentalResponse;\n }\n\n async create(params: AddInstrumentalParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<AddInstrumentalResponse> {\n return this.http.request<AddInstrumentalResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedAddVocalsResponse, AddVocalsParams, AddVocalsResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/add_vocals';\n\nexport class AddVocals {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: AddVocalsParams, options?: RequestOptions & PollingOptions): Promise<CompletedAddVocalsResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<AddVocalsResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedAddVocalsResponse;\n }\n\n async create(params: AddVocalsParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<AddVocalsResponse> {\n return this.http.request<AddVocalsResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedSeparateAudioStemsResponse, SeparateAudioStemsParams, SeparateAudioStemsResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/separate_audio_stems';\n\nexport class SeparateAudioStems {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: SeparateAudioStemsParams, options?: RequestOptions & PollingOptions): Promise<CompletedSeparateAudioStemsResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<SeparateAudioStemsResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedSeparateAudioStemsResponse;\n }\n\n async create(params: SeparateAudioStemsParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<SeparateAudioStemsResponse> {\n return this.http.request<SeparateAudioStemsResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedGenerateMidiResponse, GenerateMidiParams, GenerateMidiResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/generate_midi';\n\nexport class GenerateMidi {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: GenerateMidiParams, options?: RequestOptions & PollingOptions): Promise<CompletedGenerateMidiResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<GenerateMidiResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedGenerateMidiResponse;\n }\n\n async create(params: GenerateMidiParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<GenerateMidiResponse> {\n return this.http.request<GenerateMidiResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedConvertAudioResponse, ConvertAudioParams, ConvertAudioResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/convert_audio';\n\nexport class ConvertAudio {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: ConvertAudioParams, options?: RequestOptions & PollingOptions): Promise<CompletedConvertAudioResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<ConvertAudioResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedConvertAudioResponse;\n }\n\n async create(params: ConvertAudioParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<ConvertAudioResponse> {\n return this.http.request<ConvertAudioResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedVisualizeMusicResponse, VisualizeMusicParams, VisualizeMusicResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/visualize_music';\n\nexport class VisualizeMusic {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: VisualizeMusicParams, options?: RequestOptions & PollingOptions): Promise<CompletedVisualizeMusicResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<VisualizeMusicResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedVisualizeMusicResponse;\n }\n\n async create(params: VisualizeMusicParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<VisualizeMusicResponse> {\n return this.http.request<VisualizeMusicResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedGenerateLyricsResponse, GenerateLyricsParams, GenerateLyricsResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/generate_lyrics';\n\nexport class GenerateLyrics {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: GenerateLyricsParams, options?: RequestOptions & PollingOptions): Promise<CompletedGenerateLyricsResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<GenerateLyricsResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedGenerateLyricsResponse;\n }\n\n async create(params: GenerateLyricsParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<GenerateLyricsResponse> {\n return this.http.request<GenerateLyricsResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport type { GetTimestampedLyricsParams, GetTimestampedLyricsResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/get_timestamped_lyrics';\n\nexport class GetTimestampedLyrics {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: GetTimestampedLyricsParams, options?: RequestOptions): Promise<GetTimestampedLyricsResponse> {\n return this.http.request<GetTimestampedLyricsResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedReplaceSectionResponse, ReplaceSectionParams, ReplaceSectionResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/replace_section';\n\nexport class ReplaceSection {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: ReplaceSectionParams, options?: RequestOptions & PollingOptions): Promise<CompletedReplaceSectionResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<ReplaceSectionResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedReplaceSectionResponse;\n }\n\n async create(params: ReplaceSectionParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<ReplaceSectionResponse> {\n return this.http.request<ReplaceSectionResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedCreateMashupResponse, CreateMashupParams, CreateMashupResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/create_mashup';\n\nexport class CreateMashup {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: CreateMashupParams, options?: RequestOptions & PollingOptions): Promise<CompletedCreateMashupResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<CreateMashupResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedCreateMashupResponse;\n }\n\n async create(params: CreateMashupParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<CreateMashupResponse> {\n return this.http.request<CreateMashupResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedTextToSoundResponse, TextToSoundParams, TextToSoundResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/text_to_sound';\n\nexport class TextToSound {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: TextToSoundParams, options?: RequestOptions & PollingOptions): Promise<CompletedTextToSoundResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<TextToSoundResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedTextToSoundResponse;\n }\n\n async create(params: TextToSoundParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<TextToSoundResponse> {\n return this.http.request<TextToSoundResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport type { GeneratePersonaParams, GeneratePersonaResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/generate_persona';\n\nexport class GeneratePersona {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: GeneratePersonaParams, options?: RequestOptions): Promise<GeneratePersonaResponse> {\n return this.http.request<GeneratePersonaResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport type { BoostStyleParams, BoostStyleResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/boost_style';\n\nexport class BoostStyle {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: BoostStyleParams, options?: RequestOptions): Promise<BoostStyleResponse> {\n return this.http.request<BoostStyleResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n}\n"],"mappings":"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","names":["import_core","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","ENDPOINT","import_core","ENDPOINT","import_core"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/client.ts","../src/resources/text-to-music.ts","../src/resources/extend-music.ts","../src/resources/generate-artwork.ts","../src/resources/cover-audio.ts","../src/resources/add-instrumental.ts","../src/resources/add-vocals.ts","../src/resources/separate-audio-stems.ts","../src/resources/generate-midi.ts","../src/resources/convert-audio.ts","../src/resources/visualize-music.ts","../src/resources/generate-lyrics.ts","../src/resources/get-timestamped-lyrics.ts","../src/resources/replace-section.ts","../src/resources/create-mashup.ts","../src/resources/text-to-sound.ts","../src/resources/generate-persona.ts","../src/resources/boost-style.ts"],"sourcesContent":["export { SunoClient } from './client';\nexport * from './types';\n\n// Re-export common errors from core for convenience\nexport {\n RunApiError,\n AuthenticationError,\n InsufficientCreditsError,\n NotFoundError,\n ValidationError,\n RateLimitError,\n ServiceUnavailableError,\n NetworkError,\n TimeoutError,\n TaskTimeoutError,\n TaskFailedError,\n} from '@runapi.ai/core';\n","import { createHttpClient, type ClientOptions } from '@runapi.ai/core';\nimport { TextToMusic } from './resources/text-to-music';\nimport { ExtendMusic } from './resources/extend-music';\nimport { GenerateArtwork } from './resources/generate-artwork';\nimport { CoverAudio } from './resources/cover-audio';\nimport { AddInstrumental } from './resources/add-instrumental';\nimport { AddVocals } from './resources/add-vocals';\nimport { SeparateAudioStems } from './resources/separate-audio-stems';\nimport { GenerateMidi } from './resources/generate-midi';\nimport { ConvertAudio } from './resources/convert-audio';\nimport { VisualizeMusic } from './resources/visualize-music';\nimport { GenerateLyrics } from './resources/generate-lyrics';\nimport { GetTimestampedLyrics } from './resources/get-timestamped-lyrics';\nimport { ReplaceSection } from './resources/replace-section';\nimport { CreateMashup } from './resources/create-mashup';\nimport { TextToSound } from './resources/text-to-sound';\nimport { GeneratePersona } from './resources/generate-persona';\nimport { BoostStyle } from './resources/boost-style';\n\n/**\n * Suno API client.\n *\n * @example\n * ```typescript\n * const client = new SunoClient({\n * apiKey: 'your-api-key',\n * baseUrl: 'https://runapi.ai',\n * });\n *\n * const result = await client.textToMusic.run({\n * custom_mode: false,\n * instrumental: false,\n * prompt: 'A chill lo-fi beat with soft vocals',\n * model: 'suno-v4.5-plus',\n * });\n * ```\n */\nexport class SunoClient {\n public readonly textToMusic: TextToMusic;\n public readonly extendMusic: ExtendMusic;\n public readonly generateArtwork: GenerateArtwork;\n public readonly coverAudio: CoverAudio;\n public readonly addInstrumental: AddInstrumental;\n public readonly addVocals: AddVocals;\n public readonly separateAudioStems: SeparateAudioStems;\n public readonly generateMidi: GenerateMidi;\n public readonly convertAudio: ConvertAudio;\n public readonly visualizeMusic: VisualizeMusic;\n public readonly generateLyrics: GenerateLyrics;\n public readonly getTimestampedLyrics: GetTimestampedLyrics;\n public readonly replaceSection: ReplaceSection;\n public readonly createMashup: CreateMashup;\n public readonly textToSound: TextToSound;\n public readonly generatePersona: GeneratePersona;\n public readonly boostStyle: BoostStyle;\n\n constructor(options: ClientOptions = {}) {\n const http = createHttpClient(options);\n this.textToMusic = new TextToMusic(http);\n this.extendMusic = new ExtendMusic(http);\n this.generateArtwork = new GenerateArtwork(http);\n this.coverAudio = new CoverAudio(http);\n this.addInstrumental = new AddInstrumental(http);\n this.addVocals = new AddVocals(http);\n this.separateAudioStems = new SeparateAudioStems(http);\n this.generateMidi = new GenerateMidi(http);\n this.convertAudio = new ConvertAudio(http);\n this.visualizeMusic = new VisualizeMusic(http);\n this.generateLyrics = new GenerateLyrics(http);\n this.getTimestampedLyrics = new GetTimestampedLyrics(http);\n this.replaceSection = new ReplaceSection(http);\n this.createMashup = new CreateMashup(http);\n this.textToSound = new TextToSound(http);\n this.generatePersona = new GeneratePersona(http);\n this.boostStyle = new BoostStyle(http);\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedTextToMusicResponse, TextToMusicParams, TextToMusicResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/text_to_music';\n\nexport class TextToMusic {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: TextToMusicParams, options?: RequestOptions & PollingOptions): Promise<CompletedTextToMusicResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<TextToMusicResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedTextToMusicResponse;\n }\n\n async create(params: TextToMusicParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<TextToMusicResponse> {\n return this.http.request<TextToMusicResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedExtendMusicResponse, ExtendMusicParams, ExtendMusicResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/extend_music';\n\nexport class ExtendMusic {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: ExtendMusicParams, options?: RequestOptions & PollingOptions): Promise<CompletedExtendMusicResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<ExtendMusicResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedExtendMusicResponse;\n }\n\n async create(params: ExtendMusicParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<ExtendMusicResponse> {\n return this.http.request<ExtendMusicResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedGenerateArtworkResponse, GenerateArtworkParams, GenerateArtworkResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/generate_artwork';\n\nexport class GenerateArtwork {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: GenerateArtworkParams, options?: RequestOptions & PollingOptions): Promise<CompletedGenerateArtworkResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<GenerateArtworkResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedGenerateArtworkResponse;\n }\n\n async create(params: GenerateArtworkParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<GenerateArtworkResponse> {\n return this.http.request<GenerateArtworkResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedCoverAudioResponse, CoverAudioParams, CoverAudioResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/cover_audio';\n\nexport class CoverAudio {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: CoverAudioParams, options?: RequestOptions & PollingOptions): Promise<CompletedCoverAudioResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<CoverAudioResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedCoverAudioResponse;\n }\n\n async create(params: CoverAudioParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<CoverAudioResponse> {\n return this.http.request<CoverAudioResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedAddInstrumentalResponse, AddInstrumentalParams, AddInstrumentalResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/add_instrumental';\n\nexport class AddInstrumental {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: AddInstrumentalParams, options?: RequestOptions & PollingOptions): Promise<CompletedAddInstrumentalResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<AddInstrumentalResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedAddInstrumentalResponse;\n }\n\n async create(params: AddInstrumentalParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<AddInstrumentalResponse> {\n return this.http.request<AddInstrumentalResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedAddVocalsResponse, AddVocalsParams, AddVocalsResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/add_vocals';\n\nexport class AddVocals {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: AddVocalsParams, options?: RequestOptions & PollingOptions): Promise<CompletedAddVocalsResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<AddVocalsResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedAddVocalsResponse;\n }\n\n async create(params: AddVocalsParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<AddVocalsResponse> {\n return this.http.request<AddVocalsResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedSeparateAudioStemsResponse, SeparateAudioStemsParams, SeparateAudioStemsResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/separate_audio_stems';\n\nexport class SeparateAudioStems {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: SeparateAudioStemsParams, options?: RequestOptions & PollingOptions): Promise<CompletedSeparateAudioStemsResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<SeparateAudioStemsResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedSeparateAudioStemsResponse;\n }\n\n async create(params: SeparateAudioStemsParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<SeparateAudioStemsResponse> {\n return this.http.request<SeparateAudioStemsResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedGenerateMidiResponse, GenerateMidiParams, GenerateMidiResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/generate_midi';\n\nexport class GenerateMidi {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: GenerateMidiParams, options?: RequestOptions & PollingOptions): Promise<CompletedGenerateMidiResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<GenerateMidiResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedGenerateMidiResponse;\n }\n\n async create(params: GenerateMidiParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<GenerateMidiResponse> {\n return this.http.request<GenerateMidiResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedConvertAudioResponse, ConvertAudioParams, ConvertAudioResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/convert_audio';\n\nexport class ConvertAudio {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: ConvertAudioParams, options?: RequestOptions & PollingOptions): Promise<CompletedConvertAudioResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<ConvertAudioResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedConvertAudioResponse;\n }\n\n async create(params: ConvertAudioParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<ConvertAudioResponse> {\n return this.http.request<ConvertAudioResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedVisualizeMusicResponse, VisualizeMusicParams, VisualizeMusicResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/visualize_music';\n\nexport class VisualizeMusic {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: VisualizeMusicParams, options?: RequestOptions & PollingOptions): Promise<CompletedVisualizeMusicResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<VisualizeMusicResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedVisualizeMusicResponse;\n }\n\n async create(params: VisualizeMusicParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<VisualizeMusicResponse> {\n return this.http.request<VisualizeMusicResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedGenerateLyricsResponse, GenerateLyricsParams, GenerateLyricsResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/generate_lyrics';\n\nexport class GenerateLyrics {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: GenerateLyricsParams, options?: RequestOptions & PollingOptions): Promise<CompletedGenerateLyricsResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<GenerateLyricsResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedGenerateLyricsResponse;\n }\n\n async create(params: GenerateLyricsParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<GenerateLyricsResponse> {\n return this.http.request<GenerateLyricsResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport type { GetTimestampedLyricsParams, GetTimestampedLyricsResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/get_timestamped_lyrics';\n\nexport class GetTimestampedLyrics {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: GetTimestampedLyricsParams, options?: RequestOptions): Promise<GetTimestampedLyricsResponse> {\n return this.http.request<GetTimestampedLyricsResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedReplaceSectionResponse, ReplaceSectionParams, ReplaceSectionResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/replace_section';\n\nexport class ReplaceSection {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: ReplaceSectionParams, options?: RequestOptions & PollingOptions): Promise<CompletedReplaceSectionResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<ReplaceSectionResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedReplaceSectionResponse;\n }\n\n async create(params: ReplaceSectionParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<ReplaceSectionResponse> {\n return this.http.request<ReplaceSectionResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedCreateMashupResponse, CreateMashupParams, CreateMashupResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/create_mashup';\n\nexport class CreateMashup {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: CreateMashupParams, options?: RequestOptions & PollingOptions): Promise<CompletedCreateMashupResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<CreateMashupResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedCreateMashupResponse;\n }\n\n async create(params: CreateMashupParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<CreateMashupResponse> {\n return this.http.request<CreateMashupResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedTextToSoundResponse, TextToSoundParams, TextToSoundResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/text_to_sound';\n\nexport class TextToSound {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: TextToSoundParams, options?: RequestOptions & PollingOptions): Promise<CompletedTextToSoundResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<TextToSoundResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedTextToSoundResponse;\n }\n\n async create(params: TextToSoundParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<TextToSoundResponse> {\n return this.http.request<TextToSoundResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport type { GeneratePersonaParams, GeneratePersonaResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/generate_persona';\n\nexport class GeneratePersona {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: GeneratePersonaParams, options?: RequestOptions): Promise<GeneratePersonaResponse> {\n return this.http.request<GeneratePersonaResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport type { BoostStyleParams, BoostStyleResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/boost_style';\n\nexport class BoostStyle {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: BoostStyleParams, options?: RequestOptions): Promise<BoostStyleResponse> {\n return this.http.request<BoostStyleResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n}\n"],"mappings":"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","names":["import_core","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","import_internal","ENDPOINT","import_core","ENDPOINT","import_core","ENDPOINT","import_core"]}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client.ts","../src/resources/text-to-music.ts","../src/resources/extend-music.ts","../src/resources/generate-artwork.ts","../src/resources/cover-audio.ts","../src/resources/add-instrumental.ts","../src/resources/add-vocals.ts","../src/resources/separate-audio-stems.ts","../src/resources/generate-midi.ts","../src/resources/convert-audio.ts","../src/resources/visualize-music.ts","../src/resources/generate-lyrics.ts","../src/resources/get-timestamped-lyrics.ts","../src/resources/replace-section.ts","../src/resources/create-mashup.ts","../src/resources/text-to-sound.ts","../src/resources/generate-persona.ts","../src/resources/boost-style.ts","../src/index.ts"],"sourcesContent":["import { createHttpClient, type ClientOptions } from '@runapi.ai/core';\nimport { TextToMusic } from './resources/text-to-music';\nimport { ExtendMusic } from './resources/extend-music';\nimport { GenerateArtwork } from './resources/generate-artwork';\nimport { CoverAudio } from './resources/cover-audio';\nimport { AddInstrumental } from './resources/add-instrumental';\nimport { AddVocals } from './resources/add-vocals';\nimport { SeparateAudioStems } from './resources/separate-audio-stems';\nimport { GenerateMidi } from './resources/generate-midi';\nimport { ConvertAudio } from './resources/convert-audio';\nimport { VisualizeMusic } from './resources/visualize-music';\nimport { GenerateLyrics } from './resources/generate-lyrics';\nimport { GetTimestampedLyrics } from './resources/get-timestamped-lyrics';\nimport { ReplaceSection } from './resources/replace-section';\nimport { CreateMashup } from './resources/create-mashup';\nimport { TextToSound } from './resources/text-to-sound';\nimport { GeneratePersona } from './resources/generate-persona';\nimport { BoostStyle } from './resources/boost-style';\n\n/**\n * Suno API client.\n *\n * @example\n * ```typescript\n * const client = new SunoClient({\n * apiKey: 'your-api-key',\n * baseUrl: 'https://runapi.ai',\n * });\n *\n * const result = await client.textToMusic.run({\n * custom_mode: false,\n * instrumental: false,\n * prompt: 'A chill lo-fi beat with soft vocals',\n * model: 'V4_5PLUS',\n * });\n * ```\n */\nexport class SunoClient {\n public readonly textToMusic: TextToMusic;\n public readonly extendMusic: ExtendMusic;\n public readonly generateArtwork: GenerateArtwork;\n public readonly coverAudio: CoverAudio;\n public readonly addInstrumental: AddInstrumental;\n public readonly addVocals: AddVocals;\n public readonly separateAudioStems: SeparateAudioStems;\n public readonly generateMidi: GenerateMidi;\n public readonly convertAudio: ConvertAudio;\n public readonly visualizeMusic: VisualizeMusic;\n public readonly generateLyrics: GenerateLyrics;\n public readonly getTimestampedLyrics: GetTimestampedLyrics;\n public readonly replaceSection: ReplaceSection;\n public readonly createMashup: CreateMashup;\n public readonly textToSound: TextToSound;\n public readonly generatePersona: GeneratePersona;\n public readonly boostStyle: BoostStyle;\n\n constructor(options: ClientOptions = {}) {\n const http = createHttpClient(options);\n this.textToMusic = new TextToMusic(http);\n this.extendMusic = new ExtendMusic(http);\n this.generateArtwork = new GenerateArtwork(http);\n this.coverAudio = new CoverAudio(http);\n this.addInstrumental = new AddInstrumental(http);\n this.addVocals = new AddVocals(http);\n this.separateAudioStems = new SeparateAudioStems(http);\n this.generateMidi = new GenerateMidi(http);\n this.convertAudio = new ConvertAudio(http);\n this.visualizeMusic = new VisualizeMusic(http);\n this.generateLyrics = new GenerateLyrics(http);\n this.getTimestampedLyrics = new GetTimestampedLyrics(http);\n this.replaceSection = new ReplaceSection(http);\n this.createMashup = new CreateMashup(http);\n this.textToSound = new TextToSound(http);\n this.generatePersona = new GeneratePersona(http);\n this.boostStyle = new BoostStyle(http);\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedTextToMusicResponse, TextToMusicParams, TextToMusicResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/text_to_music';\n\nexport class TextToMusic {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: TextToMusicParams, options?: RequestOptions & PollingOptions): Promise<CompletedTextToMusicResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<TextToMusicResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedTextToMusicResponse;\n }\n\n async create(params: TextToMusicParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<TextToMusicResponse> {\n return this.http.request<TextToMusicResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedExtendMusicResponse, ExtendMusicParams, ExtendMusicResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/extend_music';\n\nexport class ExtendMusic {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: ExtendMusicParams, options?: RequestOptions & PollingOptions): Promise<CompletedExtendMusicResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<ExtendMusicResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedExtendMusicResponse;\n }\n\n async create(params: ExtendMusicParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<ExtendMusicResponse> {\n return this.http.request<ExtendMusicResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedGenerateArtworkResponse, GenerateArtworkParams, GenerateArtworkResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/generate_artwork';\n\nexport class GenerateArtwork {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: GenerateArtworkParams, options?: RequestOptions & PollingOptions): Promise<CompletedGenerateArtworkResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<GenerateArtworkResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedGenerateArtworkResponse;\n }\n\n async create(params: GenerateArtworkParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<GenerateArtworkResponse> {\n return this.http.request<GenerateArtworkResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedCoverAudioResponse, CoverAudioParams, CoverAudioResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/cover_audio';\n\nexport class CoverAudio {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: CoverAudioParams, options?: RequestOptions & PollingOptions): Promise<CompletedCoverAudioResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<CoverAudioResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedCoverAudioResponse;\n }\n\n async create(params: CoverAudioParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<CoverAudioResponse> {\n return this.http.request<CoverAudioResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedAddInstrumentalResponse, AddInstrumentalParams, AddInstrumentalResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/add_instrumental';\n\nexport class AddInstrumental {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: AddInstrumentalParams, options?: RequestOptions & PollingOptions): Promise<CompletedAddInstrumentalResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<AddInstrumentalResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedAddInstrumentalResponse;\n }\n\n async create(params: AddInstrumentalParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<AddInstrumentalResponse> {\n return this.http.request<AddInstrumentalResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedAddVocalsResponse, AddVocalsParams, AddVocalsResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/add_vocals';\n\nexport class AddVocals {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: AddVocalsParams, options?: RequestOptions & PollingOptions): Promise<CompletedAddVocalsResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<AddVocalsResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedAddVocalsResponse;\n }\n\n async create(params: AddVocalsParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<AddVocalsResponse> {\n return this.http.request<AddVocalsResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedSeparateAudioStemsResponse, SeparateAudioStemsParams, SeparateAudioStemsResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/separate_audio_stems';\n\nexport class SeparateAudioStems {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: SeparateAudioStemsParams, options?: RequestOptions & PollingOptions): Promise<CompletedSeparateAudioStemsResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<SeparateAudioStemsResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedSeparateAudioStemsResponse;\n }\n\n async create(params: SeparateAudioStemsParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<SeparateAudioStemsResponse> {\n return this.http.request<SeparateAudioStemsResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedGenerateMidiResponse, GenerateMidiParams, GenerateMidiResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/generate_midi';\n\nexport class GenerateMidi {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: GenerateMidiParams, options?: RequestOptions & PollingOptions): Promise<CompletedGenerateMidiResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<GenerateMidiResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedGenerateMidiResponse;\n }\n\n async create(params: GenerateMidiParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<GenerateMidiResponse> {\n return this.http.request<GenerateMidiResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedConvertAudioResponse, ConvertAudioParams, ConvertAudioResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/convert_audio';\n\nexport class ConvertAudio {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: ConvertAudioParams, options?: RequestOptions & PollingOptions): Promise<CompletedConvertAudioResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<ConvertAudioResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedConvertAudioResponse;\n }\n\n async create(params: ConvertAudioParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<ConvertAudioResponse> {\n return this.http.request<ConvertAudioResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedVisualizeMusicResponse, VisualizeMusicParams, VisualizeMusicResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/visualize_music';\n\nexport class VisualizeMusic {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: VisualizeMusicParams, options?: RequestOptions & PollingOptions): Promise<CompletedVisualizeMusicResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<VisualizeMusicResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedVisualizeMusicResponse;\n }\n\n async create(params: VisualizeMusicParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<VisualizeMusicResponse> {\n return this.http.request<VisualizeMusicResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedGenerateLyricsResponse, GenerateLyricsParams, GenerateLyricsResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/generate_lyrics';\n\nexport class GenerateLyrics {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: GenerateLyricsParams, options?: RequestOptions & PollingOptions): Promise<CompletedGenerateLyricsResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<GenerateLyricsResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedGenerateLyricsResponse;\n }\n\n async create(params: GenerateLyricsParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<GenerateLyricsResponse> {\n return this.http.request<GenerateLyricsResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport type { GetTimestampedLyricsParams, GetTimestampedLyricsResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/get_timestamped_lyrics';\n\nexport class GetTimestampedLyrics {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: GetTimestampedLyricsParams, options?: RequestOptions): Promise<GetTimestampedLyricsResponse> {\n return this.http.request<GetTimestampedLyricsResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedReplaceSectionResponse, ReplaceSectionParams, ReplaceSectionResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/replace_section';\n\nexport class ReplaceSection {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: ReplaceSectionParams, options?: RequestOptions & PollingOptions): Promise<CompletedReplaceSectionResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<ReplaceSectionResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedReplaceSectionResponse;\n }\n\n async create(params: ReplaceSectionParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<ReplaceSectionResponse> {\n return this.http.request<ReplaceSectionResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedCreateMashupResponse, CreateMashupParams, CreateMashupResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/create_mashup';\n\nexport class CreateMashup {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: CreateMashupParams, options?: RequestOptions & PollingOptions): Promise<CompletedCreateMashupResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<CreateMashupResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedCreateMashupResponse;\n }\n\n async create(params: CreateMashupParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<CreateMashupResponse> {\n return this.http.request<CreateMashupResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedTextToSoundResponse, TextToSoundParams, TextToSoundResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/text_to_sound';\n\nexport class TextToSound {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: TextToSoundParams, options?: RequestOptions & PollingOptions): Promise<CompletedTextToSoundResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<TextToSoundResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedTextToSoundResponse;\n }\n\n async create(params: TextToSoundParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<TextToSoundResponse> {\n return this.http.request<TextToSoundResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport type { GeneratePersonaParams, GeneratePersonaResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/generate_persona';\n\nexport class GeneratePersona {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: GeneratePersonaParams, options?: RequestOptions): Promise<GeneratePersonaResponse> {\n return this.http.request<GeneratePersonaResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport type { BoostStyleParams, BoostStyleResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/boost_style';\n\nexport class BoostStyle {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: BoostStyleParams, options?: RequestOptions): Promise<BoostStyleResponse> {\n return this.http.request<BoostStyleResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n}\n","export { SunoClient } from './client';\nexport * from './types';\n\n// Re-export common errors from core for convenience\nexport {\n RunApiError,\n AuthenticationError,\n InsufficientCreditsError,\n NotFoundError,\n ValidationError,\n RateLimitError,\n ServiceUnavailableError,\n NetworkError,\n TimeoutError,\n TaskTimeoutError,\n TaskFailedError,\n} from '@runapi.ai/core';\n"],"mappings":"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","names":["compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","ENDPOINT","compactParams","ENDPOINT"]}
|
|
1
|
+
{"version":3,"sources":["../src/client.ts","../src/resources/text-to-music.ts","../src/resources/extend-music.ts","../src/resources/generate-artwork.ts","../src/resources/cover-audio.ts","../src/resources/add-instrumental.ts","../src/resources/add-vocals.ts","../src/resources/separate-audio-stems.ts","../src/resources/generate-midi.ts","../src/resources/convert-audio.ts","../src/resources/visualize-music.ts","../src/resources/generate-lyrics.ts","../src/resources/get-timestamped-lyrics.ts","../src/resources/replace-section.ts","../src/resources/create-mashup.ts","../src/resources/text-to-sound.ts","../src/resources/generate-persona.ts","../src/resources/boost-style.ts","../src/index.ts"],"sourcesContent":["import { createHttpClient, type ClientOptions } from '@runapi.ai/core';\nimport { TextToMusic } from './resources/text-to-music';\nimport { ExtendMusic } from './resources/extend-music';\nimport { GenerateArtwork } from './resources/generate-artwork';\nimport { CoverAudio } from './resources/cover-audio';\nimport { AddInstrumental } from './resources/add-instrumental';\nimport { AddVocals } from './resources/add-vocals';\nimport { SeparateAudioStems } from './resources/separate-audio-stems';\nimport { GenerateMidi } from './resources/generate-midi';\nimport { ConvertAudio } from './resources/convert-audio';\nimport { VisualizeMusic } from './resources/visualize-music';\nimport { GenerateLyrics } from './resources/generate-lyrics';\nimport { GetTimestampedLyrics } from './resources/get-timestamped-lyrics';\nimport { ReplaceSection } from './resources/replace-section';\nimport { CreateMashup } from './resources/create-mashup';\nimport { TextToSound } from './resources/text-to-sound';\nimport { GeneratePersona } from './resources/generate-persona';\nimport { BoostStyle } from './resources/boost-style';\n\n/**\n * Suno API client.\n *\n * @example\n * ```typescript\n * const client = new SunoClient({\n * apiKey: 'your-api-key',\n * baseUrl: 'https://runapi.ai',\n * });\n *\n * const result = await client.textToMusic.run({\n * custom_mode: false,\n * instrumental: false,\n * prompt: 'A chill lo-fi beat with soft vocals',\n * model: 'suno-v4.5-plus',\n * });\n * ```\n */\nexport class SunoClient {\n public readonly textToMusic: TextToMusic;\n public readonly extendMusic: ExtendMusic;\n public readonly generateArtwork: GenerateArtwork;\n public readonly coverAudio: CoverAudio;\n public readonly addInstrumental: AddInstrumental;\n public readonly addVocals: AddVocals;\n public readonly separateAudioStems: SeparateAudioStems;\n public readonly generateMidi: GenerateMidi;\n public readonly convertAudio: ConvertAudio;\n public readonly visualizeMusic: VisualizeMusic;\n public readonly generateLyrics: GenerateLyrics;\n public readonly getTimestampedLyrics: GetTimestampedLyrics;\n public readonly replaceSection: ReplaceSection;\n public readonly createMashup: CreateMashup;\n public readonly textToSound: TextToSound;\n public readonly generatePersona: GeneratePersona;\n public readonly boostStyle: BoostStyle;\n\n constructor(options: ClientOptions = {}) {\n const http = createHttpClient(options);\n this.textToMusic = new TextToMusic(http);\n this.extendMusic = new ExtendMusic(http);\n this.generateArtwork = new GenerateArtwork(http);\n this.coverAudio = new CoverAudio(http);\n this.addInstrumental = new AddInstrumental(http);\n this.addVocals = new AddVocals(http);\n this.separateAudioStems = new SeparateAudioStems(http);\n this.generateMidi = new GenerateMidi(http);\n this.convertAudio = new ConvertAudio(http);\n this.visualizeMusic = new VisualizeMusic(http);\n this.generateLyrics = new GenerateLyrics(http);\n this.getTimestampedLyrics = new GetTimestampedLyrics(http);\n this.replaceSection = new ReplaceSection(http);\n this.createMashup = new CreateMashup(http);\n this.textToSound = new TextToSound(http);\n this.generatePersona = new GeneratePersona(http);\n this.boostStyle = new BoostStyle(http);\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedTextToMusicResponse, TextToMusicParams, TextToMusicResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/text_to_music';\n\nexport class TextToMusic {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: TextToMusicParams, options?: RequestOptions & PollingOptions): Promise<CompletedTextToMusicResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<TextToMusicResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedTextToMusicResponse;\n }\n\n async create(params: TextToMusicParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<TextToMusicResponse> {\n return this.http.request<TextToMusicResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedExtendMusicResponse, ExtendMusicParams, ExtendMusicResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/extend_music';\n\nexport class ExtendMusic {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: ExtendMusicParams, options?: RequestOptions & PollingOptions): Promise<CompletedExtendMusicResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<ExtendMusicResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedExtendMusicResponse;\n }\n\n async create(params: ExtendMusicParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<ExtendMusicResponse> {\n return this.http.request<ExtendMusicResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedGenerateArtworkResponse, GenerateArtworkParams, GenerateArtworkResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/generate_artwork';\n\nexport class GenerateArtwork {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: GenerateArtworkParams, options?: RequestOptions & PollingOptions): Promise<CompletedGenerateArtworkResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<GenerateArtworkResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedGenerateArtworkResponse;\n }\n\n async create(params: GenerateArtworkParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<GenerateArtworkResponse> {\n return this.http.request<GenerateArtworkResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedCoverAudioResponse, CoverAudioParams, CoverAudioResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/cover_audio';\n\nexport class CoverAudio {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: CoverAudioParams, options?: RequestOptions & PollingOptions): Promise<CompletedCoverAudioResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<CoverAudioResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedCoverAudioResponse;\n }\n\n async create(params: CoverAudioParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<CoverAudioResponse> {\n return this.http.request<CoverAudioResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedAddInstrumentalResponse, AddInstrumentalParams, AddInstrumentalResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/add_instrumental';\n\nexport class AddInstrumental {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: AddInstrumentalParams, options?: RequestOptions & PollingOptions): Promise<CompletedAddInstrumentalResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<AddInstrumentalResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedAddInstrumentalResponse;\n }\n\n async create(params: AddInstrumentalParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<AddInstrumentalResponse> {\n return this.http.request<AddInstrumentalResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedAddVocalsResponse, AddVocalsParams, AddVocalsResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/add_vocals';\n\nexport class AddVocals {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: AddVocalsParams, options?: RequestOptions & PollingOptions): Promise<CompletedAddVocalsResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<AddVocalsResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedAddVocalsResponse;\n }\n\n async create(params: AddVocalsParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<AddVocalsResponse> {\n return this.http.request<AddVocalsResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedSeparateAudioStemsResponse, SeparateAudioStemsParams, SeparateAudioStemsResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/separate_audio_stems';\n\nexport class SeparateAudioStems {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: SeparateAudioStemsParams, options?: RequestOptions & PollingOptions): Promise<CompletedSeparateAudioStemsResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<SeparateAudioStemsResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedSeparateAudioStemsResponse;\n }\n\n async create(params: SeparateAudioStemsParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<SeparateAudioStemsResponse> {\n return this.http.request<SeparateAudioStemsResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedGenerateMidiResponse, GenerateMidiParams, GenerateMidiResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/generate_midi';\n\nexport class GenerateMidi {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: GenerateMidiParams, options?: RequestOptions & PollingOptions): Promise<CompletedGenerateMidiResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<GenerateMidiResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedGenerateMidiResponse;\n }\n\n async create(params: GenerateMidiParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<GenerateMidiResponse> {\n return this.http.request<GenerateMidiResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedConvertAudioResponse, ConvertAudioParams, ConvertAudioResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/convert_audio';\n\nexport class ConvertAudio {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: ConvertAudioParams, options?: RequestOptions & PollingOptions): Promise<CompletedConvertAudioResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<ConvertAudioResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedConvertAudioResponse;\n }\n\n async create(params: ConvertAudioParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<ConvertAudioResponse> {\n return this.http.request<ConvertAudioResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedVisualizeMusicResponse, VisualizeMusicParams, VisualizeMusicResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/visualize_music';\n\nexport class VisualizeMusic {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: VisualizeMusicParams, options?: RequestOptions & PollingOptions): Promise<CompletedVisualizeMusicResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<VisualizeMusicResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedVisualizeMusicResponse;\n }\n\n async create(params: VisualizeMusicParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<VisualizeMusicResponse> {\n return this.http.request<VisualizeMusicResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedGenerateLyricsResponse, GenerateLyricsParams, GenerateLyricsResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/generate_lyrics';\n\nexport class GenerateLyrics {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: GenerateLyricsParams, options?: RequestOptions & PollingOptions): Promise<CompletedGenerateLyricsResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<GenerateLyricsResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedGenerateLyricsResponse;\n }\n\n async create(params: GenerateLyricsParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<GenerateLyricsResponse> {\n return this.http.request<GenerateLyricsResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport type { GetTimestampedLyricsParams, GetTimestampedLyricsResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/get_timestamped_lyrics';\n\nexport class GetTimestampedLyrics {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: GetTimestampedLyricsParams, options?: RequestOptions): Promise<GetTimestampedLyricsResponse> {\n return this.http.request<GetTimestampedLyricsResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedReplaceSectionResponse, ReplaceSectionParams, ReplaceSectionResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/replace_section';\n\nexport class ReplaceSection {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: ReplaceSectionParams, options?: RequestOptions & PollingOptions): Promise<CompletedReplaceSectionResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<ReplaceSectionResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedReplaceSectionResponse;\n }\n\n async create(params: ReplaceSectionParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<ReplaceSectionResponse> {\n return this.http.request<ReplaceSectionResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedCreateMashupResponse, CreateMashupParams, CreateMashupResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/create_mashup';\n\nexport class CreateMashup {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: CreateMashupParams, options?: RequestOptions & PollingOptions): Promise<CompletedCreateMashupResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<CreateMashupResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedCreateMashupResponse;\n }\n\n async create(params: CreateMashupParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<CreateMashupResponse> {\n return this.http.request<CreateMashupResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions, PollingOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport { pollUntilComplete } from '@runapi.ai/core/internal';\nimport type { CompletedTextToSoundResponse, TextToSoundParams, TextToSoundResponse, TaskCreateResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/text_to_sound';\n\nexport class TextToSound {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: TextToSoundParams, options?: RequestOptions & PollingOptions): Promise<CompletedTextToSoundResponse> {\n const { id } = await this.create(params, options);\n const response = await pollUntilComplete<TextToSoundResponse>(() => this.get(id, options), {\n maxWaitMs: options?.maxWaitMs,\n pollIntervalMs: options?.pollIntervalMs,\n });\n return response as CompletedTextToSoundResponse;\n }\n\n async create(params: TextToSoundParams, options?: RequestOptions): Promise<TaskCreateResponse> {\n return this.http.request<TaskCreateResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n\n async get(id: string, options?: RequestOptions): Promise<TextToSoundResponse> {\n return this.http.request<TextToSoundResponse>('GET', `${ENDPOINT}/${id}`, {\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport type { GeneratePersonaParams, GeneratePersonaResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/generate_persona';\n\nexport class GeneratePersona {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: GeneratePersonaParams, options?: RequestOptions): Promise<GeneratePersonaResponse> {\n return this.http.request<GeneratePersonaResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n}\n","import type { HttpClient, RequestOptions } from '@runapi.ai/core';\nimport { compactParams } from '@runapi.ai/core';\nimport type { BoostStyleParams, BoostStyleResponse } from '../types';\n\nconst ENDPOINT = '/api/v1/suno/boost_style';\n\nexport class BoostStyle {\n constructor(private readonly http: HttpClient) {}\n\n async run(params: BoostStyleParams, options?: RequestOptions): Promise<BoostStyleResponse> {\n return this.http.request<BoostStyleResponse>('POST', ENDPOINT, {\n body: compactParams(params),\n ...options,\n });\n }\n}\n","export { SunoClient } from './client';\nexport * from './types';\n\n// Re-export common errors from core for convenience\nexport {\n RunApiError,\n AuthenticationError,\n InsufficientCreditsError,\n NotFoundError,\n ValidationError,\n RateLimitError,\n ServiceUnavailableError,\n NetworkError,\n TimeoutError,\n TaskTimeoutError,\n TaskFailedError,\n} from '@runapi.ai/core';\n"],"mappings":";AAAA,SAAS,wBAA4C;;;ACCrD,SAAS,qBAAqB;AAC9B,SAAS,yBAAyB;AAGlC,IAAM,WAAW;AAEV,IAAM,cAAN,MAAkB;AAAA,EACvB,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAAnB;AAAA,EAE7B,MAAM,IAAI,QAA2B,SAAkF;AACrH,UAAM,EAAE,GAAG,IAAI,MAAM,KAAK,OAAO,QAAQ,OAAO;AAChD,UAAM,WAAW,MAAM,kBAAuC,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG;AAAA,MACzF,WAAW,SAAS;AAAA,MACpB,gBAAgB,SAAS;AAAA,IAC3B,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,QAA2B,SAAuD;AAC7F,WAAO,KAAK,KAAK,QAA4B,QAAQ,UAAU;AAAA,MAC7D,MAAM,cAAc,MAAM;AAAA,MAC1B,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,IAAY,SAAwD;AAC5E,WAAO,KAAK,KAAK,QAA6B,OAAO,GAAG,QAAQ,IAAI,EAAE,IAAI;AAAA,MACxE,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;;;AC9BA,SAAS,iBAAAA,sBAAqB;AAC9B,SAAS,qBAAAC,0BAAyB;AAGlC,IAAMC,YAAW;AAEV,IAAM,cAAN,MAAkB;AAAA,EACvB,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAAnB;AAAA,EAE7B,MAAM,IAAI,QAA2B,SAAkF;AACrH,UAAM,EAAE,GAAG,IAAI,MAAM,KAAK,OAAO,QAAQ,OAAO;AAChD,UAAM,WAAW,MAAMD,mBAAuC,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG;AAAA,MACzF,WAAW,SAAS;AAAA,MACpB,gBAAgB,SAAS;AAAA,IAC3B,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,QAA2B,SAAuD;AAC7F,WAAO,KAAK,KAAK,QAA4B,QAAQC,WAAU;AAAA,MAC7D,MAAMF,eAAc,MAAM;AAAA,MAC1B,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,IAAY,SAAwD;AAC5E,WAAO,KAAK,KAAK,QAA6B,OAAO,GAAGE,SAAQ,IAAI,EAAE,IAAI;AAAA,MACxE,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;;;AC9BA,SAAS,iBAAAC,sBAAqB;AAC9B,SAAS,qBAAAC,0BAAyB;AAGlC,IAAMC,YAAW;AAEV,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAAnB;AAAA,EAE7B,MAAM,IAAI,QAA+B,SAAsF;AAC7H,UAAM,EAAE,GAAG,IAAI,MAAM,KAAK,OAAO,QAAQ,OAAO;AAChD,UAAM,WAAW,MAAMD,mBAA2C,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG;AAAA,MAC7F,WAAW,SAAS;AAAA,MACpB,gBAAgB,SAAS;AAAA,IAC3B,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,QAA+B,SAAuD;AACjG,WAAO,KAAK,KAAK,QAA4B,QAAQC,WAAU;AAAA,MAC7D,MAAMF,eAAc,MAAM;AAAA,MAC1B,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,IAAY,SAA4D;AAChF,WAAO,KAAK,KAAK,QAAiC,OAAO,GAAGE,SAAQ,IAAI,EAAE,IAAI;AAAA,MAC5E,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;;;AC9BA,SAAS,iBAAAC,sBAAqB;AAC9B,SAAS,qBAAAC,0BAAyB;AAGlC,IAAMC,YAAW;AAEV,IAAM,aAAN,MAAiB;AAAA,EACtB,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAAnB;AAAA,EAE7B,MAAM,IAAI,QAA0B,SAAiF;AACnH,UAAM,EAAE,GAAG,IAAI,MAAM,KAAK,OAAO,QAAQ,OAAO;AAChD,UAAM,WAAW,MAAMD,mBAAsC,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG;AAAA,MACxF,WAAW,SAAS;AAAA,MACpB,gBAAgB,SAAS;AAAA,IAC3B,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,QAA0B,SAAuD;AAC5F,WAAO,KAAK,KAAK,QAA4B,QAAQC,WAAU;AAAA,MAC7D,MAAMF,eAAc,MAAM;AAAA,MAC1B,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,IAAY,SAAuD;AAC3E,WAAO,KAAK,KAAK,QAA4B,OAAO,GAAGE,SAAQ,IAAI,EAAE,IAAI;AAAA,MACvE,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;;;AC9BA,SAAS,iBAAAC,sBAAqB;AAC9B,SAAS,qBAAAC,0BAAyB;AAGlC,IAAMC,YAAW;AAEV,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAAnB;AAAA,EAE7B,MAAM,IAAI,QAA+B,SAAsF;AAC7H,UAAM,EAAE,GAAG,IAAI,MAAM,KAAK,OAAO,QAAQ,OAAO;AAChD,UAAM,WAAW,MAAMD,mBAA2C,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG;AAAA,MAC7F,WAAW,SAAS;AAAA,MACpB,gBAAgB,SAAS;AAAA,IAC3B,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,QAA+B,SAAuD;AACjG,WAAO,KAAK,KAAK,QAA4B,QAAQC,WAAU;AAAA,MAC7D,MAAMF,eAAc,MAAM;AAAA,MAC1B,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,IAAY,SAA4D;AAChF,WAAO,KAAK,KAAK,QAAiC,OAAO,GAAGE,SAAQ,IAAI,EAAE,IAAI;AAAA,MAC5E,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;;;AC9BA,SAAS,iBAAAC,sBAAqB;AAC9B,SAAS,qBAAAC,0BAAyB;AAGlC,IAAMC,YAAW;AAEV,IAAM,YAAN,MAAgB;AAAA,EACrB,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAAnB;AAAA,EAE7B,MAAM,IAAI,QAAyB,SAAgF;AACjH,UAAM,EAAE,GAAG,IAAI,MAAM,KAAK,OAAO,QAAQ,OAAO;AAChD,UAAM,WAAW,MAAMD,mBAAqC,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG;AAAA,MACvF,WAAW,SAAS;AAAA,MACpB,gBAAgB,SAAS;AAAA,IAC3B,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,QAAyB,SAAuD;AAC3F,WAAO,KAAK,KAAK,QAA4B,QAAQC,WAAU;AAAA,MAC7D,MAAMF,eAAc,MAAM;AAAA,MAC1B,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,IAAY,SAAsD;AAC1E,WAAO,KAAK,KAAK,QAA2B,OAAO,GAAGE,SAAQ,IAAI,EAAE,IAAI;AAAA,MACtE,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;;;AC9BA,SAAS,iBAAAC,sBAAqB;AAC9B,SAAS,qBAAAC,0BAAyB;AAGlC,IAAMC,YAAW;AAEV,IAAM,qBAAN,MAAyB;AAAA,EAC9B,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAAnB;AAAA,EAE7B,MAAM,IAAI,QAAkC,SAAyF;AACnI,UAAM,EAAE,GAAG,IAAI,MAAM,KAAK,OAAO,QAAQ,OAAO;AAChD,UAAM,WAAW,MAAMD,mBAA8C,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG;AAAA,MAChG,WAAW,SAAS;AAAA,MACpB,gBAAgB,SAAS;AAAA,IAC3B,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,QAAkC,SAAuD;AACpG,WAAO,KAAK,KAAK,QAA4B,QAAQC,WAAU;AAAA,MAC7D,MAAMF,eAAc,MAAM;AAAA,MAC1B,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,IAAY,SAA+D;AACnF,WAAO,KAAK,KAAK,QAAoC,OAAO,GAAGE,SAAQ,IAAI,EAAE,IAAI;AAAA,MAC/E,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;;;AC9BA,SAAS,iBAAAC,sBAAqB;AAC9B,SAAS,qBAAAC,0BAAyB;AAGlC,IAAMC,YAAW;AAEV,IAAM,eAAN,MAAmB;AAAA,EACxB,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAAnB;AAAA,EAE7B,MAAM,IAAI,QAA4B,SAAmF;AACvH,UAAM,EAAE,GAAG,IAAI,MAAM,KAAK,OAAO,QAAQ,OAAO;AAChD,UAAM,WAAW,MAAMD,mBAAwC,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG;AAAA,MAC1F,WAAW,SAAS;AAAA,MACpB,gBAAgB,SAAS;AAAA,IAC3B,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,QAA4B,SAAuD;AAC9F,WAAO,KAAK,KAAK,QAA4B,QAAQC,WAAU;AAAA,MAC7D,MAAMF,eAAc,MAAM;AAAA,MAC1B,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,IAAY,SAAyD;AAC7E,WAAO,KAAK,KAAK,QAA8B,OAAO,GAAGE,SAAQ,IAAI,EAAE,IAAI;AAAA,MACzE,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;;;AC9BA,SAAS,iBAAAC,sBAAqB;AAC9B,SAAS,qBAAAC,0BAAyB;AAGlC,IAAMC,YAAW;AAEV,IAAM,eAAN,MAAmB;AAAA,EACxB,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAAnB;AAAA,EAE7B,MAAM,IAAI,QAA4B,SAAmF;AACvH,UAAM,EAAE,GAAG,IAAI,MAAM,KAAK,OAAO,QAAQ,OAAO;AAChD,UAAM,WAAW,MAAMD,mBAAwC,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG;AAAA,MAC1F,WAAW,SAAS;AAAA,MACpB,gBAAgB,SAAS;AAAA,IAC3B,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,QAA4B,SAAuD;AAC9F,WAAO,KAAK,KAAK,QAA4B,QAAQC,WAAU;AAAA,MAC7D,MAAMF,eAAc,MAAM;AAAA,MAC1B,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,IAAY,SAAyD;AAC7E,WAAO,KAAK,KAAK,QAA8B,OAAO,GAAGE,SAAQ,IAAI,EAAE,IAAI;AAAA,MACzE,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;;;AC9BA,SAAS,iBAAAC,uBAAqB;AAC9B,SAAS,qBAAAC,2BAAyB;AAGlC,IAAMC,aAAW;AAEV,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAAnB;AAAA,EAE7B,MAAM,IAAI,QAA8B,SAAqF;AAC3H,UAAM,EAAE,GAAG,IAAI,MAAM,KAAK,OAAO,QAAQ,OAAO;AAChD,UAAM,WAAW,MAAMD,oBAA0C,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG;AAAA,MAC5F,WAAW,SAAS;AAAA,MACpB,gBAAgB,SAAS;AAAA,IAC3B,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,QAA8B,SAAuD;AAChG,WAAO,KAAK,KAAK,QAA4B,QAAQC,YAAU;AAAA,MAC7D,MAAMF,gBAAc,MAAM;AAAA,MAC1B,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,IAAY,SAA2D;AAC/E,WAAO,KAAK,KAAK,QAAgC,OAAO,GAAGE,UAAQ,IAAI,EAAE,IAAI;AAAA,MAC3E,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;;;AC9BA,SAAS,iBAAAC,uBAAqB;AAC9B,SAAS,qBAAAC,2BAAyB;AAGlC,IAAMC,aAAW;AAEV,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAAnB;AAAA,EAE7B,MAAM,IAAI,QAA8B,SAAqF;AAC3H,UAAM,EAAE,GAAG,IAAI,MAAM,KAAK,OAAO,QAAQ,OAAO;AAChD,UAAM,WAAW,MAAMD,oBAA0C,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG;AAAA,MAC5F,WAAW,SAAS;AAAA,MACpB,gBAAgB,SAAS;AAAA,IAC3B,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,QAA8B,SAAuD;AAChG,WAAO,KAAK,KAAK,QAA4B,QAAQC,YAAU;AAAA,MAC7D,MAAMF,gBAAc,MAAM;AAAA,MAC1B,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,IAAY,SAA2D;AAC/E,WAAO,KAAK,KAAK,QAAgC,OAAO,GAAGE,UAAQ,IAAI,EAAE,IAAI;AAAA,MAC3E,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;;;AC9BA,SAAS,iBAAAC,uBAAqB;AAG9B,IAAMC,aAAW;AAEV,IAAM,uBAAN,MAA2B;AAAA,EAChC,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAAnB;AAAA,EAE7B,MAAM,IAAI,QAAoC,SAAiE;AAC7G,WAAO,KAAK,KAAK,QAAsC,QAAQA,YAAU;AAAA,MACvE,MAAMD,gBAAc,MAAM;AAAA,MAC1B,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;;;ACdA,SAAS,iBAAAE,uBAAqB;AAC9B,SAAS,qBAAAC,2BAAyB;AAGlC,IAAMC,aAAW;AAEV,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAAnB;AAAA,EAE7B,MAAM,IAAI,QAA8B,SAAqF;AAC3H,UAAM,EAAE,GAAG,IAAI,MAAM,KAAK,OAAO,QAAQ,OAAO;AAChD,UAAM,WAAW,MAAMD,oBAA0C,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG;AAAA,MAC5F,WAAW,SAAS;AAAA,MACpB,gBAAgB,SAAS;AAAA,IAC3B,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,QAA8B,SAAuD;AAChG,WAAO,KAAK,KAAK,QAA4B,QAAQC,YAAU;AAAA,MAC7D,MAAMF,gBAAc,MAAM;AAAA,MAC1B,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,IAAY,SAA2D;AAC/E,WAAO,KAAK,KAAK,QAAgC,OAAO,GAAGE,UAAQ,IAAI,EAAE,IAAI;AAAA,MAC3E,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;;;AC9BA,SAAS,iBAAAC,uBAAqB;AAC9B,SAAS,qBAAAC,2BAAyB;AAGlC,IAAMC,aAAW;AAEV,IAAM,eAAN,MAAmB;AAAA,EACxB,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAAnB;AAAA,EAE7B,MAAM,IAAI,QAA4B,SAAmF;AACvH,UAAM,EAAE,GAAG,IAAI,MAAM,KAAK,OAAO,QAAQ,OAAO;AAChD,UAAM,WAAW,MAAMD,oBAAwC,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG;AAAA,MAC1F,WAAW,SAAS;AAAA,MACpB,gBAAgB,SAAS;AAAA,IAC3B,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,QAA4B,SAAuD;AAC9F,WAAO,KAAK,KAAK,QAA4B,QAAQC,YAAU;AAAA,MAC7D,MAAMF,gBAAc,MAAM;AAAA,MAC1B,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,IAAY,SAAyD;AAC7E,WAAO,KAAK,KAAK,QAA8B,OAAO,GAAGE,UAAQ,IAAI,EAAE,IAAI;AAAA,MACzE,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;;;AC9BA,SAAS,iBAAAC,uBAAqB;AAC9B,SAAS,qBAAAC,2BAAyB;AAGlC,IAAMC,aAAW;AAEV,IAAM,cAAN,MAAkB;AAAA,EACvB,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAAnB;AAAA,EAE7B,MAAM,IAAI,QAA2B,SAAkF;AACrH,UAAM,EAAE,GAAG,IAAI,MAAM,KAAK,OAAO,QAAQ,OAAO;AAChD,UAAM,WAAW,MAAMD,oBAAuC,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG;AAAA,MACzF,WAAW,SAAS;AAAA,MACpB,gBAAgB,SAAS;AAAA,IAC3B,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,QAA2B,SAAuD;AAC7F,WAAO,KAAK,KAAK,QAA4B,QAAQC,YAAU;AAAA,MAC7D,MAAMF,gBAAc,MAAM;AAAA,MAC1B,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,IAAY,SAAwD;AAC5E,WAAO,KAAK,KAAK,QAA6B,OAAO,GAAGE,UAAQ,IAAI,EAAE,IAAI;AAAA,MACxE,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;;;AC9BA,SAAS,iBAAAC,uBAAqB;AAG9B,IAAMC,aAAW;AAEV,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAAnB;AAAA,EAE7B,MAAM,IAAI,QAA+B,SAA4D;AACnG,WAAO,KAAK,KAAK,QAAiC,QAAQA,YAAU;AAAA,MAClE,MAAMD,gBAAc,MAAM;AAAA,MAC1B,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;;;ACdA,SAAS,iBAAAE,uBAAqB;AAG9B,IAAMC,aAAW;AAEV,IAAM,aAAN,MAAiB;AAAA,EACtB,YAA6B,MAAkB;AAAlB;AAAA,EAAmB;AAAA,EAAnB;AAAA,EAE7B,MAAM,IAAI,QAA0B,SAAuD;AACzF,WAAO,KAAK,KAAK,QAA4B,QAAQA,YAAU;AAAA,MAC7D,MAAMD,gBAAc,MAAM;AAAA,MAC1B,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;;;AjBsBO,IAAM,aAAN,MAAiB;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEhB,YAAY,UAAyB,CAAC,GAAG;AACvC,UAAM,OAAO,iBAAiB,OAAO;AACrC,SAAK,cAAc,IAAI,YAAY,IAAI;AACvC,SAAK,cAAc,IAAI,YAAY,IAAI;AACvC,SAAK,kBAAkB,IAAI,gBAAgB,IAAI;AAC/C,SAAK,aAAa,IAAI,WAAW,IAAI;AACrC,SAAK,kBAAkB,IAAI,gBAAgB,IAAI;AAC/C,SAAK,YAAY,IAAI,UAAU,IAAI;AACnC,SAAK,qBAAqB,IAAI,mBAAmB,IAAI;AACrD,SAAK,eAAe,IAAI,aAAa,IAAI;AACzC,SAAK,eAAe,IAAI,aAAa,IAAI;AACzC,SAAK,iBAAiB,IAAI,eAAe,IAAI;AAC7C,SAAK,iBAAiB,IAAI,eAAe,IAAI;AAC7C,SAAK,uBAAuB,IAAI,qBAAqB,IAAI;AACzD,SAAK,iBAAiB,IAAI,eAAe,IAAI;AAC7C,SAAK,eAAe,IAAI,aAAa,IAAI;AACzC,SAAK,cAAc,IAAI,YAAY,IAAI;AACvC,SAAK,kBAAkB,IAAI,gBAAgB,IAAI;AAC/C,SAAK,aAAa,IAAI,WAAW,IAAI;AAAA,EACvC;AACF;;;AkBxEA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":["compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","pollUntilComplete","ENDPOINT","compactParams","ENDPOINT","compactParams","ENDPOINT"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runapi.ai/suno",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"description": "RunAPI Suno SDK for JavaScript, Ruby, and Go",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"test:manual": "npm run test:all"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@runapi.ai/core": "^0.2.
|
|
48
|
+
"@runapi.ai/core": "^0.2.4"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@types/node": "^20.0.0",
|
package/skills/suno/README.md
CHANGED
|
@@ -1,4 +1,25 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="https://github.com/runapi-ai/suno">
|
|
3
|
+
<h3 align="center">Suno AI API Skill for RunAPI</h3>
|
|
4
|
+
</a>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
Install this agent skill, inspect Suno fields, then run jobs through the RunAPI CLI.
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://runapi.ai/models/suno"><strong>Model Reference</strong></a> · <a href="https://github.com/runapi-ai/cli"><strong>CLI</strong></a> · <a href="https://github.com/runapi-ai/suno-sdk"><strong>SDK</strong></a>
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
<div align="center">
|
|
16
|
+
|
|
17
|
+
[](https://www.skills.sh/runapi-ai/suno/suno)
|
|
18
|
+
[](https://clawhub.ai/runapi-ai/runapi-suno)
|
|
19
|
+
[](https://github.com/runapi-ai/suno/blob/main/LICENSE)
|
|
20
|
+
|
|
21
|
+
</div>
|
|
22
|
+
<br/>
|
|
2
23
|
|
|
3
24
|
Generate music, lyrics, stems, covers, and music videos with the Suno SDK. This skill helps Claude Code, Codex, Gemini CLI, Cursor, and 50+ agents integrate Suno through RunAPI.
|
|
4
25
|
|
|
@@ -10,7 +31,18 @@ The canonical agent file is `skills/suno/SKILL.md`.
|
|
|
10
31
|
npx skills add runapi-ai/suno -g
|
|
11
32
|
```
|
|
12
33
|
|
|
13
|
-
Or
|
|
34
|
+
Or paste this prompt to your AI agent:
|
|
35
|
+
|
|
36
|
+
```text
|
|
37
|
+
Install the suno skill for me:
|
|
38
|
+
|
|
39
|
+
1. Clone https://github.com/runapi-ai/suno
|
|
40
|
+
2. Copy the skills/suno/ directory into your
|
|
41
|
+
user-level skills directory (e.g. ~/.claude/skills/
|
|
42
|
+
for Claude Code, ~/.codex/skills/ for Codex).
|
|
43
|
+
3. Verify that SKILL.md is present.
|
|
44
|
+
4. Confirm the install path when done.
|
|
45
|
+
```
|
|
14
46
|
|
|
15
47
|
## Quick example
|
|
16
48
|
|
|
@@ -22,7 +54,7 @@ const result = await client.textToMusic.run({
|
|
|
22
54
|
custom_mode: false,
|
|
23
55
|
instrumental: false,
|
|
24
56
|
prompt: 'A chill lo-fi beat with soft vocals',
|
|
25
|
-
model: '
|
|
57
|
+
model: 'suno-v5',
|
|
26
58
|
});
|
|
27
59
|
const audioUrl = result.audios[0].audio_url;
|
|
28
60
|
```
|
package/skills/suno/SKILL.md
CHANGED
|
@@ -1,238 +1,82 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: suno
|
|
3
|
-
description: Generate
|
|
4
|
-
documentation: https://runapi.ai/models/suno
|
|
5
|
-
provider_page: https://runapi.ai/providers/suno
|
|
6
|
-
catalog: https://runapi.ai/models
|
|
3
|
+
description: Generate and transform music with Suno through RunAPI. Use when the user asks an agent to create, extend, or transform music and audio with Suno. Default to the RunAPI CLI for one-off generation; use SDKs only when the user is integrating RunAPI into an app or backend.
|
|
4
|
+
documentation: https://runapi.ai/models/suno.md
|
|
5
|
+
provider_page: https://runapi.ai/providers/suno.md
|
|
6
|
+
catalog: https://runapi.ai/models.md
|
|
7
|
+
metadata:
|
|
8
|
+
openclaw:
|
|
9
|
+
homepage: https://runapi.ai/models/suno
|
|
10
|
+
requires:
|
|
11
|
+
bins:
|
|
12
|
+
- runapi
|
|
13
|
+
install:
|
|
14
|
+
- kind: brew
|
|
15
|
+
formula: runapi-ai/tap/runapi
|
|
16
|
+
bins:
|
|
17
|
+
- runapi
|
|
18
|
+
envVars:
|
|
19
|
+
- name: RUNAPI_API_KEY
|
|
20
|
+
required: false
|
|
21
|
+
description: Optional RunAPI API key; agents should prefer environment auth or saved CLI config. Browser login is interactive fallback only.
|
|
7
22
|
---
|
|
8
23
|
|
|
9
|
-
#
|
|
24
|
+
# Suno on RunAPI
|
|
10
25
|
|
|
11
|
-
|
|
26
|
+
Generate and transform music with Suno through RunAPI. The default path for one-off agent tasks is the `runapi` CLI; SDKs are for application integration.
|
|
12
27
|
|
|
13
|
-
##
|
|
28
|
+
## Routing decision
|
|
14
29
|
|
|
15
|
-
|
|
30
|
+
- One-off generation, editing, or transformation for the user → use the **CLI path** with the `runapi` binary.
|
|
31
|
+
- Building an app, backend, worker, library, or production codebase → use the **SDK integration path**.
|
|
16
32
|
|
|
17
|
-
|
|
18
|
-
npm install @runapi.ai/suno
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
Set your API key in the environment:
|
|
33
|
+
## CLI path
|
|
22
34
|
|
|
23
|
-
|
|
24
|
-
# .env
|
|
25
|
-
RUNAPI_API_KEY=runapi_xxx # get one at https://runapi.ai/settings/api_keys
|
|
26
|
-
```
|
|
35
|
+
The `runapi` binary is the runtime dependency. Run `runapi auth status` first. For agents and headless runs, prefer `RUNAPI_API_KEY` or import it into saved config with `printf '%s' "$RUNAPI_API_KEY" | runapi auth import-token --token -`. Use `runapi login` only when the user explicitly wants interactive browser auth.
|
|
27
36
|
|
|
28
|
-
|
|
29
|
-
import { SunoClient } from '@runapi.ai/suno';
|
|
37
|
+
Inspect the available actions and request fields with CLI help:
|
|
30
38
|
|
|
31
|
-
|
|
32
|
-
|
|
39
|
+
```shell
|
|
40
|
+
runapi suno --help
|
|
41
|
+
runapi suno text-to-music --help
|
|
33
42
|
```
|
|
34
43
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
## Core recipe — music generation
|
|
38
|
-
|
|
39
|
-
Two modes share one endpoint. Use `custom_mode: false` for quick results; `custom_mode: true` when you want control over style, title, and persona.
|
|
44
|
+
Run a one-off task (synchronous — polls until the task completes):
|
|
40
45
|
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
const result = await client.textToMusic.run({
|
|
44
|
-
custom_mode: false,
|
|
45
|
-
instrumental: false,
|
|
46
|
-
prompt: 'A chill lo-fi beat with soft vocals',
|
|
47
|
-
model: 'V5',
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
const audioUrl = result.audios[0].audio_url;
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
```ts
|
|
54
|
-
// Custom mode — style, title, and prompt are all required.
|
|
55
|
-
await client.textToMusic.run({
|
|
56
|
-
custom_mode: true,
|
|
57
|
-
instrumental: false,
|
|
58
|
-
style: 'Jazz, Bossa Nova',
|
|
59
|
-
title: 'Midnight Blues',
|
|
60
|
-
prompt: 'Soft vocals over a walking bassline...',
|
|
61
|
-
model: 'V5',
|
|
62
|
-
});
|
|
46
|
+
```shell
|
|
47
|
+
runapi suno text-to-music --input-file request.json
|
|
63
48
|
```
|
|
64
49
|
|
|
65
|
-
|
|
50
|
+
Submit asynchronously and poll separately:
|
|
66
51
|
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
const status = await client.textToMusic.get(id);
|
|
71
|
-
if (status.status === 'completed') { /* ... */ }
|
|
52
|
+
```shell
|
|
53
|
+
runapi suno text-to-music --async --input-file request.json
|
|
54
|
+
runapi wait <task-id> --service suno --action text-to-music
|
|
72
55
|
```
|
|
73
56
|
|
|
74
|
-
`
|
|
75
|
-
|
|
76
|
-
```ts
|
|
77
|
-
await client.textToMusic.run(params, { maxWaitMs: 30 * 60_000, pollIntervalMs: 5_000 });
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
If `TaskTimeoutError` fires, the task is still running server-side — resume with `textToMusic.get(id)` or finish via webhook.
|
|
81
|
-
|
|
82
|
-
## Other resources
|
|
83
|
-
|
|
84
|
-
`SunoClient` exposes these resources; each has the same `create / get / run` shape:
|
|
85
|
-
|
|
86
|
-
| Resource | Purpose |
|
|
87
|
-
|---|---|
|
|
88
|
-
| `textToMusic` | Core text-to-music |
|
|
89
|
-
| `extendMusic` | Extend an existing generated track |
|
|
90
|
-
| `extendMusic` | Extend an uploaded audio file |
|
|
91
|
-
| `generateArtwork` | Generate cover images for an existing track |
|
|
92
|
-
| `coverAudio` | Restyle an uploaded track |
|
|
93
|
-
| `addInstrumental` | Add instrumental backing to a vocal upload (V4_5PLUS / V5) |
|
|
94
|
-
| `addVocals` | Add vocals to an instrumental upload (V4_5PLUS / V5) |
|
|
95
|
-
| `separateAudioStems` | Split vocals from instrumentals (or up to 12 stems) |
|
|
96
|
-
| `generateMidi` | Extract MIDI from a completed `split_stem` audio stem separation |
|
|
97
|
-
| `convertAudio` | Convert a generated audio to WAV |
|
|
98
|
-
| `visualizeMusic` | Render a music video for a generated audio |
|
|
99
|
-
| `generateLyrics` / `getTimestampedLyrics` | Generate lyrics / word-level timing |
|
|
100
|
-
| `replaceSection` | Regenerate a time range of an existing track |
|
|
101
|
-
| `createMashup` | Blend two uploaded tracks |
|
|
102
|
-
| `generatePersona` / `boostStyle` | Create reusable vocal personas / style descriptors |
|
|
103
|
-
|
|
104
|
-
### Upload-and-cover — restyle an external track
|
|
105
|
-
|
|
106
|
-
```ts
|
|
107
|
-
const restyled = await client.coverAudio.run({
|
|
108
|
-
upload_url: 'https://cdn.example.com/song.mp3',
|
|
109
|
-
custom_mode: false,
|
|
110
|
-
instrumental: false,
|
|
111
|
-
prompt: 'Transform into a jazz cover',
|
|
112
|
-
model: 'V4_5PLUS',
|
|
113
|
-
});
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
### Extension — continue a generated track
|
|
117
|
-
|
|
118
|
-
```ts
|
|
119
|
-
const base = await client.textToMusic.run({ custom_mode: false, instrumental: false, prompt: '...', model: 'V5' });
|
|
120
|
-
await client.extendMusic.run({
|
|
121
|
-
audio_id: base.audios[0].id,
|
|
122
|
-
default_param_flag: false,
|
|
123
|
-
model: 'V5',
|
|
124
|
-
prompt: 'Continue with an uplifting chorus',
|
|
125
|
-
});
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
### Vocal removal — separate stems
|
|
129
|
-
|
|
130
|
-
```ts
|
|
131
|
-
const gen = await client.textToMusic.run({ custom_mode: false, instrumental: false, prompt: '...', model: 'V5' });
|
|
132
|
-
const sep = await client.separateAudioStems.run({
|
|
133
|
-
task_id: gen.id,
|
|
134
|
-
audio_id: gen.audios[0].id,
|
|
135
|
-
type: 'split_stem', // or 'separate_vocal' for just vocals + instrumental
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
console.log(sep.separated_audios.vocal_url);
|
|
139
|
-
```
|
|
57
|
+
Available actions: `text-to-music`, `extend-music`, `generate-artwork`, `cover-audio`, `add-instrumental`, `add-vocals`, `separate-audio-stems`, `generate-midi`, `convert-audio`, `visualize-music`, `generate-lyrics`, `get-timestamped-lyrics`, `replace-section`, `create-mashup`, `text-to-sound`, `generate-persona`, `boost-style`.
|
|
140
58
|
|
|
141
|
-
##
|
|
59
|
+
## SDK integration path
|
|
142
60
|
|
|
143
|
-
|
|
144
|
-
|---|---|
|
|
145
|
-
| `V5` | Latest model; best musical expression. |
|
|
146
|
-
| `V4_5PLUS` | Rich sound, max 8 min. |
|
|
147
|
-
| `V4_5ALL` | All features, max 8 min (audio upload max 1 min). |
|
|
148
|
-
| `V4_5` | Balanced quality and speed. |
|
|
149
|
-
| `V4` | Stable, max 4 min. |
|
|
150
|
-
| `V3_5` | Legacy. |
|
|
61
|
+
When integrating Suno into an app, backend, worker, or library — not for one-off tasks — use a RunAPI SDK package:
|
|
151
62
|
|
|
152
|
-
|
|
63
|
+
- JavaScript / TypeScript: `@runapi.ai/suno`
|
|
64
|
+
- Ruby: `runapi-suno`
|
|
65
|
+
- Go: `github.com/runapi-ai/suno-sdk/go`
|
|
153
66
|
|
|
154
|
-
##
|
|
155
|
-
|
|
156
|
-
Pass `callback_url` on `create()` (or any `run()` call) and RunAPI will POST the payload to you:
|
|
157
|
-
|
|
158
|
-
```ts
|
|
159
|
-
await client.textToMusic.create({
|
|
160
|
-
custom_mode: false,
|
|
161
|
-
instrumental: false,
|
|
162
|
-
prompt: '...',
|
|
163
|
-
model: 'V5',
|
|
164
|
-
callback_url: 'https://your.app/webhooks/runapi/suno',
|
|
165
|
-
});
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
Suno fires the callback at multiple stages — `generation_stage` tells you which:
|
|
169
|
-
|
|
170
|
-
```ts
|
|
171
|
-
{
|
|
172
|
-
id: string;
|
|
173
|
-
status: 'processing' | 'completed' | 'failed';
|
|
174
|
-
generation_stage: 'text_generated' | 'first_audio_ready' | 'all_audios_ready' | 'failed';
|
|
175
|
-
audios?: Audio[];
|
|
176
|
-
error?: string;
|
|
177
|
-
}
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
Treat `all_audios_ready` as the terminal success stage. **Always verify the signature before trusting the body.** RunAPI signs every callback with your account's Callback Secret (rotate at `/accounts/callback_secret`). Headers:
|
|
181
|
-
|
|
182
|
-
- `X-Callback-Id` — UUID, store to make handler idempotent
|
|
183
|
-
- `X-Callback-Timestamp` — unix seconds, reject if `|now - ts| > 300`
|
|
184
|
-
- `X-Callback-Signature` — base64 HMAC-SHA256 over `` `${id}.${ts}.${rawBody}` `` using the base64-decoded secret
|
|
185
|
-
|
|
186
|
-
```ts
|
|
187
|
-
import crypto from 'node:crypto';
|
|
188
|
-
|
|
189
|
-
function verify(raw: string, id: string, ts: string, sig: string, secret: string) {
|
|
190
|
-
const key = Buffer.from(secret, 'base64');
|
|
191
|
-
const mac = crypto.createHmac('sha256', key)
|
|
192
|
-
.update(`${id}.${ts}.${raw}`)
|
|
193
|
-
.digest('base64');
|
|
194
|
-
return crypto.timingSafeEqual(Buffer.from(mac), Buffer.from(sig));
|
|
195
|
-
}
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
Reply `2xx` within 10s; any non-2xx triggers retries.
|
|
199
|
-
|
|
200
|
-
## Errors
|
|
201
|
-
|
|
202
|
-
All errors are re-exported from `@runapi.ai/core`. Always `instanceof` — never string-match messages.
|
|
203
|
-
|
|
204
|
-
| Error | Status | Action |
|
|
205
|
-
|---|---|---|
|
|
206
|
-
| `AuthenticationError` | 401 | abort; surface "reconnect your API key" |
|
|
207
|
-
| `InsufficientCreditsError` | 402 | prompt user to top up at runapi.ai/billing |
|
|
208
|
-
| `ValidationError` | 400 / 422 | fix params; do not retry |
|
|
209
|
-
| `RateLimitError` | 429 | sleep `err.retryAfterMs`, then retry |
|
|
210
|
-
| `ServiceUnavailableError` | 503 / 455 | retry with backoff; transient service issue |
|
|
211
|
-
| `TaskFailedError` | — | show `err.details` to user; do not auto-retry |
|
|
212
|
-
| `TaskTimeoutError` | — | re-poll with `<resource>.get(id)` |
|
|
213
|
-
|
|
214
|
-
```ts
|
|
215
|
-
import { InsufficientCreditsError, TaskFailedError } from '@runapi.ai/suno';
|
|
216
|
-
|
|
217
|
-
try {
|
|
218
|
-
await client.textToMusic.run({ custom_mode: false, instrumental: false, prompt: '...', model: 'V5' });
|
|
219
|
-
} catch (err) {
|
|
220
|
-
if (err instanceof InsufficientCreditsError) { /* surface top-up CTA */ }
|
|
221
|
-
else if (err instanceof TaskFailedError) { /* show err.details */ }
|
|
222
|
-
else throw err;
|
|
223
|
-
}
|
|
224
|
-
```
|
|
67
|
+
## References
|
|
225
68
|
|
|
226
|
-
|
|
69
|
+
- Model overview, pricing, and rate limits: https://runapi.ai/models/suno.md
|
|
70
|
+
- Provider comparison: https://runapi.ai/providers/suno.md
|
|
71
|
+
- Full model catalog: https://runapi.ai/models.md
|
|
227
72
|
|
|
228
|
-
|
|
229
|
-
- Custom mode requires `style` **and** `title`. Prompt is required unless `instrumental: true`.
|
|
230
|
-
- `vocal_gender`, `style_weight`, `weirdness_constraint`, and `audio_weight` only apply when advanced settings are on — custom mode, or `default_param_flag: true` on extendMusic.
|
|
231
|
-
- `generateMidi.run()` requires a completed `separateAudioStems` task created with `type: 'split_stem'` — `separate_vocal` does not produce MIDI.
|
|
232
|
-
- `replaceSection` replacement duration should not exceed 50% of the total track.
|
|
233
|
-
- Callbacks fire multiple times; the `all_audios_ready` stage is the final one. Handle every stage idempotently using `X-Callback-Id`.
|
|
234
|
-
- `callback_url` must be reachable from the public internet. `localhost` / `127.0.0.1` URLs will never fire — use a tunnel (cloudflared, ngrok, tailscale funnel) when developing locally.
|
|
73
|
+
## Variants
|
|
235
74
|
|
|
236
|
-
|
|
75
|
+
- [v3.5](https://runapi.ai/models/suno/v3.5.md)
|
|
76
|
+
- [v4](https://runapi.ai/models/suno/v4.md)
|
|
77
|
+
- [v4.5](https://runapi.ai/models/suno/v4.5.md)
|
|
78
|
+
- [v4.5 all](https://runapi.ai/models/suno/v4.5-all.md)
|
|
79
|
+
- [v4.5 plus](https://runapi.ai/models/suno/v4.5-plus.md)
|
|
80
|
+
- [v5](https://runapi.ai/models/suno/v5.md)
|
|
81
|
+
- [v5.5](https://runapi.ai/models/suno/v5.5.md)
|
|
237
82
|
|
|
238
|
-
Package README (full API surface, all params): `node_modules/@runapi.ai/suno/README.md`. Types: `@runapi.ai/suno/dist/types.d.ts`. Product docs: https://runapi.ai/docs.
|