@acedatacloud/sdk 2026.727.0 → 2026.727.2
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 +8 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +21 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +21 -10
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/resources/providers/producer.ts +4 -4
- package/src/runtime/tasks.ts +20 -9
package/package.json
CHANGED
|
@@ -24,7 +24,7 @@ export interface ProducerUploadOptions {
|
|
|
24
24
|
[key: string]: unknown;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
export interface
|
|
27
|
+
export interface ProducerVideosOptions {
|
|
28
28
|
/** Reference audio ID. */
|
|
29
29
|
audioId: string;
|
|
30
30
|
callbackUrl?: string;
|
|
@@ -40,7 +40,7 @@ export interface ProducerWavOptions {
|
|
|
40
40
|
[key: string]: unknown;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
export interface
|
|
43
|
+
export interface ProducerGenerateOptions {
|
|
44
44
|
/** Lyrics content for generating audio. */
|
|
45
45
|
lyric: string;
|
|
46
46
|
/** Types of audio generation operations. Supported values include `generate` (generate based on prompts), `cover` (cover song), `extend` (continue writing), `variation` (variant), `swap_vocals` (replace vocals), `swap_instrumentals` (replace instrumentals), `replace_section` (replace section), `stems` (separate tracks). */
|
|
@@ -108,7 +108,7 @@ export class Producer {
|
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
/** AceData Producer MP4 retrieval API. Pass an audio_id to receive an MP4 video download link with cover art. */
|
|
111
|
-
async
|
|
111
|
+
async videos(options: ProducerVideosOptions): Promise<Record<string, unknown>> {
|
|
112
112
|
const body: Record<string, unknown> = {};
|
|
113
113
|
body["audio_id"] = options.audioId;
|
|
114
114
|
for (const [key, value] of Object.entries(options)) {
|
|
@@ -134,7 +134,7 @@ export class Producer {
|
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
/** Producer AI music generation API, generates 1 song per request. */
|
|
137
|
-
async
|
|
137
|
+
async generate(options: ProducerGenerateOptions): Promise<TaskHandle> {
|
|
138
138
|
const body: Record<string, unknown> = {};
|
|
139
139
|
body["lyric"] = options.lyric;
|
|
140
140
|
body["action"] = options.action;
|
package/src/runtime/tasks.ts
CHANGED
|
@@ -184,16 +184,32 @@ export class TaskHandle {
|
|
|
184
184
|
return taskProgress(this._result);
|
|
185
185
|
}
|
|
186
186
|
|
|
187
|
+
/**
|
|
188
|
+
* Fetch current task state, remembering it once terminal.
|
|
189
|
+
*
|
|
190
|
+
* A caller that drives its own poll loop — checking status between polls so it
|
|
191
|
+
* can report progress — only ever calls this. Without recording here, urls()
|
|
192
|
+
* and result() stay empty after the task has plainly finished.
|
|
193
|
+
*/
|
|
187
194
|
async get(): Promise<Record<string, unknown>> {
|
|
188
|
-
|
|
195
|
+
const state = await this.transport.request('POST', this.pollEndpoint, {
|
|
189
196
|
json: { id: this.id, action: 'retrieve' },
|
|
190
197
|
});
|
|
198
|
+
this.accept(state);
|
|
199
|
+
return state;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
private accept(state: Record<string, unknown>): void {
|
|
203
|
+
const status = taskStatus(state);
|
|
204
|
+
if (status === 'succeeded' || status === 'failed') {
|
|
205
|
+
this._result = state;
|
|
206
|
+
}
|
|
191
207
|
}
|
|
192
208
|
|
|
193
209
|
async isCompleted(): Promise<boolean> {
|
|
194
210
|
if (this.done) return true;
|
|
195
|
-
|
|
196
|
-
return
|
|
211
|
+
await this.get(); // records a terminal state as a side effect
|
|
212
|
+
return this.done;
|
|
197
213
|
}
|
|
198
214
|
|
|
199
215
|
async wait(opts: TaskHandleOptions = {}): Promise<Record<string, unknown>> {
|
|
@@ -205,12 +221,7 @@ export class TaskHandle {
|
|
|
205
221
|
|
|
206
222
|
while (Date.now() - start < maxWait) {
|
|
207
223
|
const state = await this.get();
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
if (status === 'succeeded' || status === 'failed') {
|
|
211
|
-
this._result = state;
|
|
212
|
-
return state;
|
|
213
|
-
}
|
|
224
|
+
if (this.done) return state;
|
|
214
225
|
await new Promise((resolve) => setTimeout(resolve, pollInterval));
|
|
215
226
|
}
|
|
216
227
|
throw new Error(`Task ${this.id} did not complete within ${maxWait}ms`);
|