@acedatacloud/sdk 2026.418.2 → 2026.419.0

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/README.md CHANGED
@@ -96,7 +96,7 @@ import { AceDataCloud, AuthenticationError, RateLimitError } from '@acedatacloud
96
96
 
97
97
  const client = new AceDataCloud({ apiToken: 'your-token' });
98
98
  try {
99
- await client.search.google({ q: 'test' });
99
+ await client.search.google({ query: 'test' });
100
100
  } catch (err) {
101
101
  if (err instanceof AuthenticationError) {
102
102
  console.error('Invalid or expired token');
@@ -120,6 +120,49 @@ const client = new AceDataCloud({
120
120
 
121
121
  The token can also be set via the `ACEDATACLOUD_API_TOKEN` environment variable.
122
122
 
123
+ ## Paying with X402 Instead of a Bearer Token
124
+
125
+ The SDK supports a pluggable `paymentHandler` that is invoked when the
126
+ API returns `402 Payment Required`. Combine it with
127
+ [`@acedatacloud/x402-client`](https://github.com/AceDataCloud/X402Client)
128
+ to pay for requests on-chain (Base, Solana, SKALE) instead of using a
129
+ Bearer token:
130
+
131
+ ```bash
132
+ npm install @acedatacloud/sdk @acedatacloud/x402-client
133
+ ```
134
+
135
+ ```typescript
136
+ import { AceDataCloud } from '@acedatacloud/sdk';
137
+ import { createX402PaymentHandler } from '@acedatacloud/x402-client';
138
+
139
+ const client = new AceDataCloud({
140
+ // No apiToken needed — the x402 handler pays per request.
141
+ paymentHandler: createX402PaymentHandler({
142
+ network: 'base', // or 'solana' | 'skale'
143
+ evmProvider: window.ethereum,
144
+ evmAddress: '0xYourAddress...',
145
+ }),
146
+ });
147
+
148
+ const result = await client.openai.chat.completions.create({
149
+ model: 'gpt-4o-mini',
150
+ messages: [{ role: 'user', content: 'Say hi in 3 words' }],
151
+ max_tokens: 10,
152
+ });
153
+ ```
154
+
155
+ On each API call, the SDK first sends the request unauthenticated. If
156
+ the server replies with `402`, the SDK passes the `accepts` list to
157
+ the handler, which signs and returns an `X-Payment` header. The SDK
158
+ retries the request once with that header. Everything else — task
159
+ polling, streaming, retries, error mapping — keeps working exactly the
160
+ same.
161
+
162
+ You can still pass a Bearer token alongside the handler if you want a
163
+ mixed mode (some endpoints via subscription, others via x402) — the
164
+ SDK only invokes the handler when it actually sees a `402`.
165
+
123
166
  ## License
124
167
 
125
168
  MIT
package/dist/index.d.mts CHANGED
@@ -1,4 +1,47 @@
1
+ /**
2
+ * Pluggable payment handler hook for the SDK transport.
3
+ *
4
+ * When the API returns `402 Payment Required`, the transport calls the
5
+ * configured `PaymentHandler` to produce the extra headers (typically
6
+ * `X-Payment`) to attach to the retry. This keeps the SDK free of any
7
+ * chain-specific signing logic, and lets callers plug in a real x402
8
+ * implementation such as `@acedatacloud/x402-client`.
9
+ */
10
+ /** Payment requirement as returned by the server in a 402 response. */
11
+ interface PaymentRequirement {
12
+ scheme: string;
13
+ network: string;
14
+ maxAmountRequired: string;
15
+ maxTimeoutSeconds?: number;
16
+ resource?: string;
17
+ description?: string;
18
+ payTo: string;
19
+ asset: string;
20
+ extra?: Record<string, unknown>;
21
+ }
22
+ /** Shape of a 402 response body. */
23
+ interface PaymentRequiredBody {
24
+ x402Version?: number;
25
+ accepts: PaymentRequirement[];
26
+ error?: string;
27
+ }
28
+ /** Context passed to a payment handler when a 402 is observed. */
29
+ interface PaymentHandlerContext {
30
+ url: string;
31
+ method: string;
32
+ body?: unknown;
33
+ accepts: PaymentRequirement[];
34
+ }
35
+ /** Result a payment handler must return. */
36
+ interface PaymentHandlerResult {
37
+ /** Extra headers to attach to the retry (must include `X-Payment`). */
38
+ headers: Record<string, string>;
39
+ }
40
+ /** A callable that signs/settles a payment and returns retry headers. */
41
+ type PaymentHandler = (ctx: PaymentHandlerContext) => Promise<PaymentHandlerResult> | PaymentHandlerResult;
42
+
1
43
  /** HTTP transport for AceDataCloud SDK. Uses native fetch (Node 18+). */
44
+
2
45
  interface TransportOptions {
3
46
  apiToken?: string;
4
47
  baseURL?: string;
@@ -6,6 +49,14 @@ interface TransportOptions {
6
49
  timeout?: number;
7
50
  maxRetries?: number;
8
51
  headers?: Record<string, string>;
52
+ /**
53
+ * Optional handler invoked when a request returns `402 Payment Required`.
54
+ * The handler receives the parsed `accepts` list and must return the extra
55
+ * headers (typically `X-Payment`) to attach to the automatic retry.
56
+ *
57
+ * See `@acedatacloud/x402-client` for a drop-in implementation.
58
+ */
59
+ paymentHandler?: PaymentHandler;
9
60
  }
10
61
  declare class Transport {
11
62
  private baseURL;
@@ -13,6 +64,7 @@ declare class Transport {
13
64
  private timeout;
14
65
  private maxRetries;
15
66
  private headers;
67
+ private paymentHandler?;
16
68
  constructor(opts?: TransportOptions);
17
69
  request(method: string, path: string, opts?: {
18
70
  json?: Record<string, unknown>;
@@ -273,6 +325,12 @@ interface AceDataCloudOptions {
273
325
  timeout?: number;
274
326
  maxRetries?: number;
275
327
  headers?: Record<string, string>;
328
+ /**
329
+ * Optional payment handler invoked when the API returns `402 Payment
330
+ * Required`. Use `createX402PaymentHandler` from
331
+ * `@acedatacloud/x402-client` to enable on-chain payments via X402.
332
+ */
333
+ paymentHandler?: PaymentHandler;
276
334
  }
277
335
  declare class AceDataCloud {
278
336
  readonly chat: Chat;
@@ -333,4 +391,4 @@ declare class TimeoutError extends APIError {
333
391
  constructor(opts: ConstructorParameters<typeof APIError>[0]);
334
392
  }
335
393
 
336
- export { APIError, AceDataCloud, AceDataCloudError, type AceDataCloudOptions, type AudioProvider, AuthenticationError, type ImageProvider, InsufficientBalanceError, ModerationError, RateLimitError, ResourceDisabledError, TaskHandle, type TaskHandleOptions, TimeoutError, TokenMismatchError, TransportError, ValidationError, type VideoProvider };
394
+ export { APIError, AceDataCloud, AceDataCloudError, type AceDataCloudOptions, type AudioProvider, AuthenticationError, type ImageProvider, InsufficientBalanceError, ModerationError, type PaymentHandler, type PaymentHandlerContext, type PaymentHandlerResult, type PaymentRequiredBody, type PaymentRequirement, RateLimitError, ResourceDisabledError, TaskHandle, type TaskHandleOptions, TimeoutError, TokenMismatchError, TransportError, ValidationError, type VideoProvider };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,47 @@
1
+ /**
2
+ * Pluggable payment handler hook for the SDK transport.
3
+ *
4
+ * When the API returns `402 Payment Required`, the transport calls the
5
+ * configured `PaymentHandler` to produce the extra headers (typically
6
+ * `X-Payment`) to attach to the retry. This keeps the SDK free of any
7
+ * chain-specific signing logic, and lets callers plug in a real x402
8
+ * implementation such as `@acedatacloud/x402-client`.
9
+ */
10
+ /** Payment requirement as returned by the server in a 402 response. */
11
+ interface PaymentRequirement {
12
+ scheme: string;
13
+ network: string;
14
+ maxAmountRequired: string;
15
+ maxTimeoutSeconds?: number;
16
+ resource?: string;
17
+ description?: string;
18
+ payTo: string;
19
+ asset: string;
20
+ extra?: Record<string, unknown>;
21
+ }
22
+ /** Shape of a 402 response body. */
23
+ interface PaymentRequiredBody {
24
+ x402Version?: number;
25
+ accepts: PaymentRequirement[];
26
+ error?: string;
27
+ }
28
+ /** Context passed to a payment handler when a 402 is observed. */
29
+ interface PaymentHandlerContext {
30
+ url: string;
31
+ method: string;
32
+ body?: unknown;
33
+ accepts: PaymentRequirement[];
34
+ }
35
+ /** Result a payment handler must return. */
36
+ interface PaymentHandlerResult {
37
+ /** Extra headers to attach to the retry (must include `X-Payment`). */
38
+ headers: Record<string, string>;
39
+ }
40
+ /** A callable that signs/settles a payment and returns retry headers. */
41
+ type PaymentHandler = (ctx: PaymentHandlerContext) => Promise<PaymentHandlerResult> | PaymentHandlerResult;
42
+
1
43
  /** HTTP transport for AceDataCloud SDK. Uses native fetch (Node 18+). */
44
+
2
45
  interface TransportOptions {
3
46
  apiToken?: string;
4
47
  baseURL?: string;
@@ -6,6 +49,14 @@ interface TransportOptions {
6
49
  timeout?: number;
7
50
  maxRetries?: number;
8
51
  headers?: Record<string, string>;
52
+ /**
53
+ * Optional handler invoked when a request returns `402 Payment Required`.
54
+ * The handler receives the parsed `accepts` list and must return the extra
55
+ * headers (typically `X-Payment`) to attach to the automatic retry.
56
+ *
57
+ * See `@acedatacloud/x402-client` for a drop-in implementation.
58
+ */
59
+ paymentHandler?: PaymentHandler;
9
60
  }
10
61
  declare class Transport {
11
62
  private baseURL;
@@ -13,6 +64,7 @@ declare class Transport {
13
64
  private timeout;
14
65
  private maxRetries;
15
66
  private headers;
67
+ private paymentHandler?;
16
68
  constructor(opts?: TransportOptions);
17
69
  request(method: string, path: string, opts?: {
18
70
  json?: Record<string, unknown>;
@@ -273,6 +325,12 @@ interface AceDataCloudOptions {
273
325
  timeout?: number;
274
326
  maxRetries?: number;
275
327
  headers?: Record<string, string>;
328
+ /**
329
+ * Optional payment handler invoked when the API returns `402 Payment
330
+ * Required`. Use `createX402PaymentHandler` from
331
+ * `@acedatacloud/x402-client` to enable on-chain payments via X402.
332
+ */
333
+ paymentHandler?: PaymentHandler;
276
334
  }
277
335
  declare class AceDataCloud {
278
336
  readonly chat: Chat;
@@ -333,4 +391,4 @@ declare class TimeoutError extends APIError {
333
391
  constructor(opts: ConstructorParameters<typeof APIError>[0]);
334
392
  }
335
393
 
336
- export { APIError, AceDataCloud, AceDataCloudError, type AceDataCloudOptions, type AudioProvider, AuthenticationError, type ImageProvider, InsufficientBalanceError, ModerationError, RateLimitError, ResourceDisabledError, TaskHandle, type TaskHandleOptions, TimeoutError, TokenMismatchError, TransportError, ValidationError, type VideoProvider };
394
+ export { APIError, AceDataCloud, AceDataCloudError, type AceDataCloudOptions, type AudioProvider, AuthenticationError, type ImageProvider, InsufficientBalanceError, ModerationError, type PaymentHandler, type PaymentHandlerContext, type PaymentHandlerResult, type PaymentRequiredBody, type PaymentRequirement, RateLimitError, ResourceDisabledError, TaskHandle, type TaskHandleOptions, TimeoutError, TokenMismatchError, TransportError, ValidationError, type VideoProvider };
package/dist/index.js CHANGED
@@ -162,11 +162,12 @@ var Transport = class {
162
162
  timeout;
163
163
  maxRetries;
164
164
  headers;
165
+ paymentHandler;
165
166
  constructor(opts = {}) {
166
167
  const token = opts.apiToken ?? process.env.ACEDATACLOUD_API_TOKEN ?? "";
167
- if (!token) {
168
+ if (!token && !opts.paymentHandler) {
168
169
  throw new AuthenticationError({
169
- message: "apiToken is required. Pass it to the client or set ACEDATACLOUD_API_TOKEN.",
170
+ message: "apiToken is required (or provide a paymentHandler, e.g. from @acedatacloud/x402-client). Pass it to the client or set ACEDATACLOUD_API_TOKEN.",
170
171
  statusCode: 0,
171
172
  code: "no_token"
172
173
  });
@@ -175,13 +176,17 @@ var Transport = class {
175
176
  this.platformBaseURL = (opts.platformBaseURL ?? "https://platform.acedata.cloud").replace(/\/+$/, "");
176
177
  this.timeout = opts.timeout ?? 3e5;
177
178
  this.maxRetries = opts.maxRetries ?? 2;
178
- this.headers = {
179
+ this.paymentHandler = opts.paymentHandler;
180
+ const baseHeaders = {
179
181
  accept: "application/json",
180
- authorization: `Bearer ${token}`,
181
182
  "content-type": "application/json",
182
183
  "user-agent": "acedatacloud-node/0.1.0",
183
184
  ...opts.headers ?? {}
184
185
  };
186
+ if (token) {
187
+ baseHeaders.authorization = `Bearer ${token}`;
188
+ }
189
+ this.headers = baseHeaders;
185
190
  }
186
191
  async request(method, path2, opts = {}) {
187
192
  const base = opts.platform ? this.platformBaseURL : this.baseURL;
@@ -193,17 +198,40 @@ var Transport = class {
193
198
  const headers = { ...this.headers, ...opts.headers ?? {} };
194
199
  const timeoutMs = opts.timeout ?? this.timeout;
195
200
  let lastError = null;
201
+ let paymentAttempted = false;
202
+ let extraHeaders = {};
196
203
  for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
197
204
  const controller = new AbortController();
198
205
  const timer = setTimeout(() => controller.abort(), timeoutMs);
199
206
  try {
200
207
  const resp = await fetch(url, {
201
208
  method,
202
- headers,
209
+ headers: { ...headers, ...extraHeaders },
203
210
  body: opts.json ? JSON.stringify(opts.json) : void 0,
204
211
  signal: controller.signal
205
212
  });
206
213
  clearTimeout(timer);
214
+ if (resp.status === 402 && this.paymentHandler && !paymentAttempted) {
215
+ const text = await resp.text();
216
+ let body;
217
+ try {
218
+ body = JSON.parse(text);
219
+ } catch {
220
+ throw mapError(402, { error: { code: "invalid_402", message: text } });
221
+ }
222
+ if (!body.accepts?.length) {
223
+ throw mapError(402, { error: { code: "invalid_402", message: "No payment requirements" } });
224
+ }
225
+ const result = await this.paymentHandler({
226
+ url,
227
+ method,
228
+ body: opts.json,
229
+ accepts: body.accepts
230
+ });
231
+ extraHeaders = { ...extraHeaders, ...result.headers };
232
+ paymentAttempted = true;
233
+ continue;
234
+ }
207
235
  if (resp.status >= 400) {
208
236
  const text = await resp.text();
209
237
  let body;
@@ -683,7 +711,8 @@ var AceDataCloud = class {
683
711
  platformBaseURL: opts.platformBaseURL,
684
712
  timeout: opts.timeout,
685
713
  maxRetries: opts.maxRetries,
686
- headers: opts.headers
714
+ headers: opts.headers,
715
+ paymentHandler: opts.paymentHandler
687
716
  });
688
717
  this.chat = new Chat(this.transport);
689
718
  this.images = new Images(this.transport);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/runtime/errors.ts","../src/runtime/transport.ts","../src/resources/chat.ts","../src/runtime/tasks.ts","../src/resources/images.ts","../src/resources/audio.ts","../src/resources/video.ts","../src/resources/search.ts","../src/resources/tasks.ts","../src/resources/files.ts","../src/resources/platform.ts","../src/resources/openai.ts","../src/client.ts"],"sourcesContent":["/** @acedatacloud/sdk — Official TypeScript SDK for AceDataCloud. */\n\nexport { AceDataCloud, AceDataCloudOptions } from './client';\n\nexport {\n AceDataCloudError,\n APIError,\n AuthenticationError,\n InsufficientBalanceError,\n ModerationError,\n RateLimitError,\n ResourceDisabledError,\n TimeoutError,\n TokenMismatchError,\n TransportError,\n ValidationError,\n} from './runtime/errors';\n\nexport { TaskHandle, TaskHandleOptions } from './runtime/tasks';\n\nexport type { ImageProvider } from './resources/images';\nexport type { VideoProvider } from './resources/video';\nexport type { AudioProvider } from './resources/audio';\n","/** AceDataCloud SDK errors. */\n\nexport class AceDataCloudError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'AceDataCloudError';\n }\n}\n\nexport class TransportError extends AceDataCloudError {\n constructor(message: string) {\n super(message);\n this.name = 'TransportError';\n }\n}\n\nexport class APIError extends AceDataCloudError {\n statusCode: number;\n code: string;\n traceId?: string;\n body: Record<string, unknown>;\n\n constructor(opts: {\n message: string;\n statusCode: number;\n code: string;\n traceId?: string;\n body?: Record<string, unknown>;\n }) {\n super(opts.message);\n this.name = 'APIError';\n this.statusCode = opts.statusCode;\n this.code = opts.code;\n this.traceId = opts.traceId;\n this.body = opts.body ?? {};\n }\n}\n\nexport class AuthenticationError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'AuthenticationError';\n }\n}\n\nexport class TokenMismatchError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'TokenMismatchError';\n }\n}\n\nexport class RateLimitError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'RateLimitError';\n }\n}\n\nexport class ValidationError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'ValidationError';\n }\n}\n\nexport class InsufficientBalanceError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'InsufficientBalanceError';\n }\n}\n\nexport class ResourceDisabledError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'ResourceDisabledError';\n }\n}\n\nexport class ModerationError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'ModerationError';\n }\n}\n\nexport class TimeoutError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'TimeoutError';\n }\n}\n","/** HTTP transport for AceDataCloud SDK. Uses native fetch (Node 18+). */\n\nimport {\n APIError,\n AuthenticationError,\n InsufficientBalanceError,\n ModerationError,\n RateLimitError,\n ResourceDisabledError,\n TimeoutError,\n TokenMismatchError,\n TransportError,\n ValidationError,\n} from './errors';\n\nconst ERROR_CODE_MAP: Record<string, typeof APIError> = {\n invalid_token: AuthenticationError,\n token_expired: AuthenticationError,\n no_token: AuthenticationError,\n token_mismatched: TokenMismatchError,\n used_up: InsufficientBalanceError,\n disabled: ResourceDisabledError,\n too_many_requests: RateLimitError,\n bad_request: ValidationError,\n};\n\nconst RETRY_STATUS_CODES = new Set([408, 409, 429, 500, 502, 503, 504]);\n\nfunction mapError(statusCode: number, body: Record<string, unknown>): APIError {\n const errorData = (body.error ?? {}) as Record<string, unknown>;\n const code = (errorData.code ?? '') as string;\n const message = (errorData.message ?? '') as string;\n const traceId = body.trace_id as string | undefined;\n\n let ErrorClass = ERROR_CODE_MAP[code];\n if (!ErrorClass) {\n if (statusCode === 403) ErrorClass = ModerationError;\n else if (statusCode === 401) ErrorClass = AuthenticationError;\n else if (statusCode === 429) ErrorClass = RateLimitError;\n else if (statusCode === 400) ErrorClass = ValidationError;\n else ErrorClass = APIError;\n }\n\n return new ErrorClass({ message, statusCode, code, traceId, body });\n}\n\nfunction backoffDelay(attempt: number): number {\n const base = Math.min(2 ** attempt, 8);\n return base + Math.random() * 0.5;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport interface TransportOptions {\n apiToken?: string;\n baseURL?: string;\n platformBaseURL?: string;\n timeout?: number;\n maxRetries?: number;\n headers?: Record<string, string>;\n}\n\nexport class Transport {\n private baseURL: string;\n private platformBaseURL: string;\n private timeout: number;\n private maxRetries: number;\n private headers: Record<string, string>;\n\n constructor(opts: TransportOptions = {}) {\n const token = opts.apiToken ?? process.env.ACEDATACLOUD_API_TOKEN ?? '';\n if (!token) {\n throw new AuthenticationError({\n message: 'apiToken is required. Pass it to the client or set ACEDATACLOUD_API_TOKEN.',\n statusCode: 0,\n code: 'no_token',\n });\n }\n this.baseURL = (opts.baseURL ?? 'https://api.acedata.cloud').replace(/\\/+$/, '');\n this.platformBaseURL = (opts.platformBaseURL ?? 'https://platform.acedata.cloud').replace(/\\/+$/, '');\n this.timeout = opts.timeout ?? 300_000;\n this.maxRetries = opts.maxRetries ?? 2;\n this.headers = {\n accept: 'application/json',\n authorization: `Bearer ${token}`,\n 'content-type': 'application/json',\n 'user-agent': 'acedatacloud-node/0.1.0',\n ...(opts.headers ?? {}),\n };\n }\n\n async request(\n method: string,\n path: string,\n opts: {\n json?: Record<string, unknown>;\n params?: Record<string, string>;\n platform?: boolean;\n timeout?: number;\n headers?: Record<string, string>;\n } = {}\n ): Promise<Record<string, unknown>> {\n const base = opts.platform ? this.platformBaseURL : this.baseURL;\n let url = `${base}${path}`;\n if (opts.params) {\n const qs = new URLSearchParams(opts.params).toString();\n url += `?${qs}`;\n }\n const headers = { ...this.headers, ...(opts.headers ?? {}) };\n const timeoutMs = opts.timeout ?? this.timeout;\n\n let lastError: Error | null = null;\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const resp = await fetch(url, {\n method,\n headers,\n body: opts.json ? JSON.stringify(opts.json) : undefined,\n signal: controller.signal,\n });\n clearTimeout(timer);\n\n if (resp.status >= 400) {\n const text = await resp.text();\n let body: Record<string, unknown>;\n try {\n body = JSON.parse(text) as Record<string, unknown>;\n } catch {\n body = { error: { code: 'unknown', message: text } };\n }\n if (RETRY_STATUS_CODES.has(resp.status) && attempt < this.maxRetries) {\n await sleep(backoffDelay(attempt) * 1000);\n continue;\n }\n throw mapError(resp.status, body);\n }\n\n return (await resp.json()) as Record<string, unknown>;\n } catch (err) {\n clearTimeout(timer);\n if (err instanceof APIError) throw err;\n lastError = err as Error;\n if (attempt < this.maxRetries) {\n await sleep(backoffDelay(attempt) * 1000);\n continue;\n }\n }\n }\n throw lastError ?? new TransportError('Request failed after retries');\n }\n\n async *requestStream(\n method: string,\n path: string,\n opts: { json?: Record<string, unknown>; timeout?: number } = {}\n ): AsyncGenerator<string, void, unknown> {\n const url = `${this.baseURL}${path}`;\n const headers = { ...this.headers, accept: 'text/event-stream' };\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), opts.timeout ?? this.timeout);\n\n try {\n const resp = await fetch(url, {\n method,\n headers,\n body: opts.json ? JSON.stringify(opts.json) : undefined,\n signal: controller.signal,\n });\n\n if (resp.status >= 400) {\n const text = await resp.text();\n let body: Record<string, unknown>;\n try {\n body = JSON.parse(text) as Record<string, unknown>;\n } catch {\n body = { error: { code: 'unknown', message: text } };\n }\n throw mapError(resp.status, body);\n }\n\n if (!resp.body) throw new TransportError('No response body for stream');\n\n const reader = resp.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n const data = line.slice(6);\n if (data === '[DONE]') return;\n yield data;\n }\n }\n }\n } finally {\n clearTimeout(timer);\n }\n }\n\n async upload(\n path: string,\n fileData: Buffer | Uint8Array,\n filename: string,\n opts: { timeout?: number } = {}\n ): Promise<Record<string, unknown>> {\n const url = `${this.platformBaseURL}${path}`;\n const boundary = `----AceDataCloudBoundary${Date.now()}`;\n const headers = {\n ...this.headers,\n 'content-type': `multipart/form-data; boundary=${boundary}`,\n };\n delete (headers as Record<string, string>)['content-type'];\n\n const body = new FormData();\n body.append('file', new Blob([fileData]), filename);\n\n const authHeaders: Record<string, string> = {\n authorization: this.headers.authorization,\n 'user-agent': this.headers['user-agent'],\n };\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), opts.timeout ?? this.timeout);\n try {\n const resp = await fetch(url, {\n method: 'POST',\n headers: authHeaders,\n body,\n signal: controller.signal,\n });\n clearTimeout(timer);\n\n if (resp.status >= 400) {\n const text = await resp.text();\n let respBody: Record<string, unknown>;\n try {\n respBody = JSON.parse(text) as Record<string, unknown>;\n } catch {\n respBody = { error: { code: 'unknown', message: text } };\n }\n throw mapError(resp.status, respBody);\n }\n return (await resp.json()) as Record<string, unknown>;\n } finally {\n clearTimeout(timer);\n }\n }\n}\n","/** Chat resources — native provider APIs (Claude Messages). */\n\nimport { Transport } from '../runtime/transport';\n\nexport class Messages {\n constructor(private transport: Transport) {}\n\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n maxTokens?: number;\n stream?: false;\n [key: string]: unknown;\n }): Promise<Record<string, unknown>>;\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n maxTokens?: number;\n stream: true;\n [key: string]: unknown;\n }): Promise<AsyncGenerator<Record<string, unknown>>>;\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n maxTokens?: number;\n stream?: boolean;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | AsyncGenerator<Record<string, unknown>>> {\n const { model, messages, maxTokens = 4096, stream, ...rest } = opts;\n const body: Record<string, unknown> = { model, messages, max_tokens: maxTokens, ...rest };\n\n if (stream) {\n body.stream = true;\n return this.stream(body);\n }\n return this.transport.request('POST', '/v1/messages', { json: body });\n }\n\n private async *stream(body: Record<string, unknown>): AsyncGenerator<Record<string, unknown>> {\n for await (const chunk of this.transport.requestStream('POST', '/v1/messages', { json: body })) {\n yield JSON.parse(chunk);\n }\n }\n\n async countTokens(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n [key: string]: unknown;\n }): Promise<Record<string, unknown>> {\n const { model, messages, ...rest } = opts;\n return this.transport.request('POST', '/v1/messages/count_tokens', {\n json: { model, messages, ...rest },\n });\n }\n}\n\nexport class Chat {\n readonly messages: Messages;\n\n constructor(transport: Transport) {\n this.messages = new Messages(transport);\n }\n}\n","/** Task polling abstraction. */\n\nimport { Transport } from './transport';\n\nexport interface TaskHandleOptions {\n pollInterval?: number;\n maxWait?: number;\n}\n\nexport class TaskHandle {\n readonly id: string;\n private pollEndpoint: string;\n private transport: Transport;\n private _result: Record<string, unknown> | null = null;\n\n constructor(taskId: string, pollEndpoint: string, transport: Transport) {\n this.id = taskId;\n this.pollEndpoint = pollEndpoint;\n this.transport = transport;\n }\n\n async get(): Promise<Record<string, unknown>> {\n return this.transport.request('POST', this.pollEndpoint, {\n json: { id: this.id, action: 'retrieve' },\n });\n }\n\n async isCompleted(): Promise<boolean> {\n const state = await this.get();\n const response = (state.response ?? state) as Record<string, unknown>;\n const status = response.status as string;\n return status === 'succeeded' || status === 'failed';\n }\n\n async wait(opts: TaskHandleOptions = {}): Promise<Record<string, unknown>> {\n const pollInterval = opts.pollInterval ?? 3000;\n const maxWait = opts.maxWait ?? 600_000;\n const start = Date.now();\n\n while (Date.now() - start < maxWait) {\n const state = await this.get();\n const response = (state.response ?? state) as Record<string, unknown>;\n const status = response.status as string;\n\n if (status === 'succeeded' || status === 'failed') {\n this._result = state;\n return state;\n }\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n }\n throw new Error(`Task ${this.id} did not complete within ${maxWait}ms`);\n }\n\n get result(): Record<string, unknown> | null {\n return this._result;\n }\n}\n","/** Image generation resources. */\n\nimport { Transport } from '../runtime/transport';\nimport { TaskHandle } from '../runtime/tasks';\n\nexport type ImageProvider = 'nano-banana' | 'midjourney' | 'flux' | 'seedream' | (string & {});\n\nexport class Images {\n constructor(private transport: Transport) {}\n\n async generate(opts: {\n prompt: string;\n provider?: ImageProvider;\n model?: string;\n negativePrompt?: string;\n imageUrl?: string;\n callbackUrl?: string;\n wait?: boolean;\n pollInterval?: number;\n maxWait?: number;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | TaskHandle> {\n const { prompt, provider = 'nano-banana', model, negativePrompt, imageUrl, callbackUrl, wait: shouldWait, pollInterval, maxWait, ...rest } = opts;\n const body: Record<string, unknown> = { prompt, ...rest };\n if (model !== undefined) body.model = model;\n if (negativePrompt !== undefined) body.negative_prompt = negativePrompt;\n if (imageUrl !== undefined) body.image_url = imageUrl;\n if (callbackUrl !== undefined) body.callback_url = callbackUrl;\n\n const endpoint = provider === 'midjourney' ? '/midjourney/imagine' : `/${provider}/images`;\n const result = await this.transport.request('POST', endpoint, { json: body });\n const taskId = result.task_id as string | undefined;\n\n if (!taskId || (result.data && !shouldWait)) return result;\n\n const handle = new TaskHandle(taskId, `/${provider}/tasks`, this.transport);\n if (shouldWait) return handle.wait({ pollInterval, maxWait });\n return handle;\n }\n}\n","/** Audio/music generation resources. */\n\nimport { Transport } from '../runtime/transport';\nimport { TaskHandle } from '../runtime/tasks';\n\nexport type AudioProvider = 'suno' | 'producer' | 'fish' | (string & {});\n\nexport class Audio {\n constructor(private transport: Transport) {}\n\n async generate(opts: {\n prompt: string;\n provider?: AudioProvider;\n model?: string;\n tags?: string;\n callbackUrl?: string;\n wait?: boolean;\n pollInterval?: number;\n maxWait?: number;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | TaskHandle> {\n const { prompt, provider = 'suno', model, tags, callbackUrl, wait: shouldWait, pollInterval, maxWait, ...rest } = opts;\n const body: Record<string, unknown> = { prompt, ...rest };\n if (model !== undefined) body.model = model;\n if (tags !== undefined) body.tags = tags;\n if (callbackUrl !== undefined) body.callback_url = callbackUrl;\n\n const result = await this.transport.request('POST', `/${provider}/audios`, { json: body });\n const taskId = result.task_id as string | undefined;\n\n if (!taskId || (result.data && !shouldWait)) return result;\n\n const handle = new TaskHandle(taskId, `/${provider}/tasks`, this.transport);\n if (shouldWait) return handle.wait({ pollInterval, maxWait });\n return handle;\n }\n}\n","/** Video generation resources. */\n\nimport { Transport } from '../runtime/transport';\nimport { TaskHandle } from '../runtime/tasks';\n\nexport type VideoProvider = 'sora' | 'luma' | 'veo' | 'kling' | 'hailuo' | 'seedance' | 'wan' | 'pika' | 'pixverse' | (string & {});\n\nexport class Video {\n constructor(private transport: Transport) {}\n\n async generate(opts: {\n prompt: string;\n provider?: VideoProvider;\n model?: string;\n imageUrl?: string;\n callbackUrl?: string;\n wait?: boolean;\n pollInterval?: number;\n maxWait?: number;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | TaskHandle> {\n const { prompt, provider = 'sora', model, imageUrl, callbackUrl, wait: shouldWait, pollInterval, maxWait, ...rest } = opts;\n const body: Record<string, unknown> = { prompt, ...rest };\n if (model !== undefined) body.model = model;\n if (imageUrl !== undefined) body.image_url = imageUrl;\n if (callbackUrl !== undefined) body.callback_url = callbackUrl;\n\n const result = await this.transport.request('POST', `/${provider}/videos`, { json: body });\n const taskId = result.task_id as string | undefined;\n\n if (!taskId || (result.data && !shouldWait)) return result;\n\n const handle = new TaskHandle(taskId, `/${provider}/tasks`, this.transport);\n if (shouldWait) return handle.wait({ pollInterval, maxWait });\n return handle;\n }\n}\n","/** Search resources. */\n\nimport { Transport } from '../runtime/transport';\n\nexport class Search {\n constructor(private transport: Transport) {}\n\n async google(opts: {\n query: string;\n type?: string;\n country?: string;\n language?: string;\n page?: number;\n [key: string]: unknown;\n }): Promise<Record<string, unknown>> {\n const { query, type = 'search', country, language, page, ...rest } = opts;\n const body: Record<string, unknown> = { query, type, ...rest };\n if (country !== undefined) body.country = country;\n if (language !== undefined) body.language = language;\n if (page !== undefined) body.page = page;\n return this.transport.request('POST', '/serp/google', { json: body });\n }\n}\n","/** Cross-service task retrieval. */\n\nimport { Transport } from '../runtime/transport';\nimport { TaskHandle } from '../runtime/tasks';\n\nconst SERVICE_TASK_ENDPOINTS: Record<string, string> = {\n suno: '/suno/tasks',\n producer: '/producer/tasks',\n fish: '/fish/tasks',\n 'nano-banana': '/nano-banana/tasks',\n seedream: '/seedream/tasks',\n seedance: '/seedance/tasks',\n sora: '/sora/tasks',\n midjourney: '/midjourney/tasks',\n luma: '/luma/tasks',\n veo: '/veo/tasks',\n flux: '/flux/tasks',\n kling: '/kling/tasks',\n hailuo: '/hailuo/tasks',\n wan: '/wan/tasks',\n pika: '/pika/tasks',\n pixverse: '/pixverse/tasks',\n};\n\nexport class Tasks {\n constructor(private transport: Transport) {}\n\n async get(taskId: string, opts: { service?: string } = {}): Promise<Record<string, unknown>> {\n const service = opts.service ?? 'suno';\n const endpoint = SERVICE_TASK_ENDPOINTS[service] ?? `/${service}/tasks`;\n return this.transport.request('POST', endpoint, {\n json: { id: taskId, action: 'retrieve' },\n });\n }\n\n async wait(\n taskId: string,\n opts: { service?: string; pollInterval?: number; maxWait?: number } = {}\n ): Promise<Record<string, unknown>> {\n const service = opts.service ?? 'suno';\n const endpoint = SERVICE_TASK_ENDPOINTS[service] ?? `/${service}/tasks`;\n const handle = new TaskHandle(taskId, endpoint, this.transport);\n return handle.wait({ pollInterval: opts.pollInterval, maxWait: opts.maxWait });\n }\n}\n","/** File upload resources. */\n\nimport { Transport } from '../runtime/transport';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nexport class Files {\n constructor(private transport: Transport) {}\n\n async upload(\n file: string | Buffer | Uint8Array,\n opts: { filename?: string } = {}\n ): Promise<Record<string, unknown>> {\n let data: Buffer | Uint8Array;\n let filename: string;\n\n if (typeof file === 'string') {\n data = fs.readFileSync(file);\n filename = opts.filename ?? path.basename(file);\n } else {\n data = file;\n filename = opts.filename ?? 'upload';\n }\n\n return this.transport.upload('/api/v1/files/', data, filename);\n }\n}\n","/** Management-plane resources. */\n\nimport { Transport } from '../runtime/transport';\n\nclass Applications {\n constructor(private transport: Transport) {}\n\n async list(params?: Record<string, string>): Promise<Record<string, unknown>> {\n return this.transport.request('GET', '/api/v1/applications/', { params, platform: true });\n }\n\n async create(opts: { serviceId: string; [key: string]: unknown }): Promise<Record<string, unknown>> {\n const { serviceId, ...rest } = opts;\n return this.transport.request('POST', '/api/v1/applications/', {\n json: { service_id: serviceId, ...rest },\n platform: true,\n });\n }\n\n async get(applicationId: string): Promise<Record<string, unknown>> {\n return this.transport.request('GET', `/api/v1/applications/${applicationId}/`, { platform: true });\n }\n}\n\nclass Credentials {\n constructor(private transport: Transport) {}\n\n async list(params?: Record<string, string>): Promise<Record<string, unknown>> {\n return this.transport.request('GET', '/api/v1/credentials/', { params, platform: true });\n }\n\n async create(opts: { applicationId: string; [key: string]: unknown }): Promise<Record<string, unknown>> {\n const { applicationId, ...rest } = opts;\n return this.transport.request('POST', '/api/v1/credentials/', {\n json: { application_id: applicationId, ...rest },\n platform: true,\n });\n }\n\n async rotate(credentialId: string): Promise<Record<string, unknown>> {\n return this.transport.request('POST', `/api/v1/credentials/${credentialId}/rotate/`, { platform: true });\n }\n\n async delete(credentialId: string): Promise<Record<string, unknown>> {\n return this.transport.request('DELETE', `/api/v1/credentials/${credentialId}/`, { platform: true });\n }\n}\n\nclass Models {\n constructor(private transport: Transport) {}\n\n async list(params?: Record<string, string>): Promise<Record<string, unknown>> {\n return this.transport.request('GET', '/api/v1/models/', { params, platform: true });\n }\n}\n\nclass Config {\n constructor(private transport: Transport) {}\n\n async get(): Promise<Record<string, unknown>> {\n return this.transport.request('GET', '/api/v1/config/', { platform: true });\n }\n}\n\nexport class Platform {\n readonly applications: Applications;\n readonly credentials: Credentials;\n readonly models: Models;\n readonly config: Config;\n\n constructor(transport: Transport) {\n this.applications = new Applications(transport);\n this.credentials = new Credentials(transport);\n this.models = new Models(transport);\n this.config = new Config(transport);\n }\n}\n","/** OpenAI-compatible facade resources. */\n\nimport { Transport } from '../runtime/transport';\n\nclass Completions {\n constructor(private transport: Transport) {}\n\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n stream?: false;\n [key: string]: unknown;\n }): Promise<Record<string, unknown>>;\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n stream: true;\n [key: string]: unknown;\n }): Promise<AsyncGenerator<Record<string, unknown>>>;\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n stream?: boolean;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | AsyncGenerator<Record<string, unknown>>> {\n const { model, messages, stream, ...rest } = opts;\n const body: Record<string, unknown> = { model, messages, ...rest };\n\n if (stream) {\n body.stream = true;\n return this.streamResponse(body);\n }\n return this.transport.request('POST', '/v1/chat/completions', { json: body });\n }\n\n private async *streamResponse(body: Record<string, unknown>): AsyncGenerator<Record<string, unknown>> {\n for await (const chunk of this.transport.requestStream('POST', '/v1/chat/completions', { json: body })) {\n yield JSON.parse(chunk);\n }\n }\n}\n\nclass ChatNamespace {\n readonly completions: Completions;\n constructor(transport: Transport) {\n this.completions = new Completions(transport);\n }\n}\n\nclass Responses {\n constructor(private transport: Transport) {}\n\n async create(opts: {\n model: string;\n input: string | Array<Record<string, unknown>>;\n stream?: false;\n [key: string]: unknown;\n }): Promise<Record<string, unknown>>;\n async create(opts: {\n model: string;\n input: string | Array<Record<string, unknown>>;\n stream: true;\n [key: string]: unknown;\n }): Promise<AsyncGenerator<Record<string, unknown>>>;\n async create(opts: {\n model: string;\n input: string | Array<Record<string, unknown>>;\n stream?: boolean;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | AsyncGenerator<Record<string, unknown>>> {\n const { model, input, stream, ...rest } = opts;\n const body: Record<string, unknown> = { model, input, ...rest };\n\n if (stream) {\n body.stream = true;\n return this.streamResponse(body);\n }\n return this.transport.request('POST', '/openai/responses', { json: body });\n }\n\n private async *streamResponse(body: Record<string, unknown>): AsyncGenerator<Record<string, unknown>> {\n for await (const chunk of this.transport.requestStream('POST', '/openai/responses', { json: body })) {\n yield JSON.parse(chunk);\n }\n }\n}\n\nexport class OpenAI {\n readonly chat: ChatNamespace;\n readonly responses: Responses;\n\n constructor(transport: Transport) {\n this.chat = new ChatNamespace(transport);\n this.responses = new Responses(transport);\n }\n}\n","/** Top-level AceDataCloud client for TypeScript. */\n\nimport { Transport, TransportOptions } from './runtime/transport';\nimport { Chat } from './resources/chat';\nimport { Images } from './resources/images';\nimport { Audio } from './resources/audio';\nimport { Video } from './resources/video';\nimport { Search } from './resources/search';\nimport { Tasks } from './resources/tasks';\nimport { Files } from './resources/files';\nimport { Platform } from './resources/platform';\nimport { OpenAI } from './resources/openai';\n\nexport interface AceDataCloudOptions {\n apiToken?: string;\n baseURL?: string;\n platformBaseURL?: string;\n timeout?: number;\n maxRetries?: number;\n headers?: Record<string, string>;\n}\n\nexport class AceDataCloud {\n readonly chat: Chat;\n readonly images: Images;\n readonly audio: Audio;\n readonly video: Video;\n readonly search: Search;\n readonly tasks: Tasks;\n readonly files: Files;\n readonly platform: Platform;\n readonly openai: OpenAI;\n\n private transport: Transport;\n\n constructor(opts: AceDataCloudOptions = {}) {\n this.transport = new Transport({\n apiToken: opts.apiToken,\n baseURL: opts.baseURL,\n platformBaseURL: opts.platformBaseURL,\n timeout: opts.timeout,\n maxRetries: opts.maxRetries,\n headers: opts.headers,\n });\n\n this.chat = new Chat(this.transport);\n this.images = new Images(this.transport);\n this.audio = new Audio(this.transport);\n this.video = new Video(this.transport);\n this.search = new Search(this.transport);\n this.tasks = new Tasks(this.transport);\n this.files = new Files(this.transport);\n this.platform = new Platform(this.transport);\n this.openai = new OpenAI(this.transport);\n }\n}\n"],"mappings":"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","names":["path"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/runtime/errors.ts","../src/runtime/transport.ts","../src/resources/chat.ts","../src/runtime/tasks.ts","../src/resources/images.ts","../src/resources/audio.ts","../src/resources/video.ts","../src/resources/search.ts","../src/resources/tasks.ts","../src/resources/files.ts","../src/resources/platform.ts","../src/resources/openai.ts","../src/client.ts"],"sourcesContent":["/** @acedatacloud/sdk — Official TypeScript SDK for AceDataCloud. */\n\nexport { AceDataCloud, AceDataCloudOptions } from './client';\n\nexport {\n AceDataCloudError,\n APIError,\n AuthenticationError,\n InsufficientBalanceError,\n ModerationError,\n RateLimitError,\n ResourceDisabledError,\n TimeoutError,\n TokenMismatchError,\n TransportError,\n ValidationError,\n} from './runtime/errors';\n\nexport { TaskHandle, TaskHandleOptions } from './runtime/tasks';\n\nexport type {\n PaymentHandler,\n PaymentHandlerContext,\n PaymentHandlerResult,\n PaymentRequirement,\n PaymentRequiredBody,\n} from './runtime/payment';\n\nexport type { ImageProvider } from './resources/images';\nexport type { VideoProvider } from './resources/video';\nexport type { AudioProvider } from './resources/audio';\n","/** AceDataCloud SDK errors. */\n\nexport class AceDataCloudError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'AceDataCloudError';\n }\n}\n\nexport class TransportError extends AceDataCloudError {\n constructor(message: string) {\n super(message);\n this.name = 'TransportError';\n }\n}\n\nexport class APIError extends AceDataCloudError {\n statusCode: number;\n code: string;\n traceId?: string;\n body: Record<string, unknown>;\n\n constructor(opts: {\n message: string;\n statusCode: number;\n code: string;\n traceId?: string;\n body?: Record<string, unknown>;\n }) {\n super(opts.message);\n this.name = 'APIError';\n this.statusCode = opts.statusCode;\n this.code = opts.code;\n this.traceId = opts.traceId;\n this.body = opts.body ?? {};\n }\n}\n\nexport class AuthenticationError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'AuthenticationError';\n }\n}\n\nexport class TokenMismatchError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'TokenMismatchError';\n }\n}\n\nexport class RateLimitError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'RateLimitError';\n }\n}\n\nexport class ValidationError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'ValidationError';\n }\n}\n\nexport class InsufficientBalanceError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'InsufficientBalanceError';\n }\n}\n\nexport class ResourceDisabledError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'ResourceDisabledError';\n }\n}\n\nexport class ModerationError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'ModerationError';\n }\n}\n\nexport class TimeoutError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'TimeoutError';\n }\n}\n","/** HTTP transport for AceDataCloud SDK. Uses native fetch (Node 18+). */\n\nimport {\n APIError,\n AuthenticationError,\n InsufficientBalanceError,\n ModerationError,\n RateLimitError,\n ResourceDisabledError,\n TimeoutError,\n TokenMismatchError,\n TransportError,\n ValidationError,\n} from './errors';\nimport type {\n PaymentHandler,\n PaymentRequiredBody,\n} from './payment';\n\nconst ERROR_CODE_MAP: Record<string, typeof APIError> = {\n invalid_token: AuthenticationError,\n token_expired: AuthenticationError,\n no_token: AuthenticationError,\n token_mismatched: TokenMismatchError,\n used_up: InsufficientBalanceError,\n disabled: ResourceDisabledError,\n too_many_requests: RateLimitError,\n bad_request: ValidationError,\n};\n\nconst RETRY_STATUS_CODES = new Set([408, 409, 429, 500, 502, 503, 504]);\n\nfunction mapError(statusCode: number, body: Record<string, unknown>): APIError {\n const errorData = (body.error ?? {}) as Record<string, unknown>;\n const code = (errorData.code ?? '') as string;\n const message = (errorData.message ?? '') as string;\n const traceId = body.trace_id as string | undefined;\n\n let ErrorClass = ERROR_CODE_MAP[code];\n if (!ErrorClass) {\n if (statusCode === 403) ErrorClass = ModerationError;\n else if (statusCode === 401) ErrorClass = AuthenticationError;\n else if (statusCode === 429) ErrorClass = RateLimitError;\n else if (statusCode === 400) ErrorClass = ValidationError;\n else ErrorClass = APIError;\n }\n\n return new ErrorClass({ message, statusCode, code, traceId, body });\n}\n\nfunction backoffDelay(attempt: number): number {\n const base = Math.min(2 ** attempt, 8);\n return base + Math.random() * 0.5;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport interface TransportOptions {\n apiToken?: string;\n baseURL?: string;\n platformBaseURL?: string;\n timeout?: number;\n maxRetries?: number;\n headers?: Record<string, string>;\n /**\n * Optional handler invoked when a request returns `402 Payment Required`.\n * The handler receives the parsed `accepts` list and must return the extra\n * headers (typically `X-Payment`) to attach to the automatic retry.\n *\n * See `@acedatacloud/x402-client` for a drop-in implementation.\n */\n paymentHandler?: PaymentHandler;\n}\n\nexport class Transport {\n private baseURL: string;\n private platformBaseURL: string;\n private timeout: number;\n private maxRetries: number;\n private headers: Record<string, string>;\n private paymentHandler?: PaymentHandler;\n\n constructor(opts: TransportOptions = {}) {\n const token = opts.apiToken ?? process.env.ACEDATACLOUD_API_TOKEN ?? '';\n if (!token && !opts.paymentHandler) {\n throw new AuthenticationError({\n message:\n 'apiToken is required (or provide a paymentHandler, e.g. from @acedatacloud/x402-client). ' +\n 'Pass it to the client or set ACEDATACLOUD_API_TOKEN.',\n statusCode: 0,\n code: 'no_token',\n });\n }\n this.baseURL = (opts.baseURL ?? 'https://api.acedata.cloud').replace(/\\/+$/, '');\n this.platformBaseURL = (opts.platformBaseURL ?? 'https://platform.acedata.cloud').replace(/\\/+$/, '');\n this.timeout = opts.timeout ?? 300_000;\n this.maxRetries = opts.maxRetries ?? 2;\n this.paymentHandler = opts.paymentHandler;\n const baseHeaders: Record<string, string> = {\n accept: 'application/json',\n 'content-type': 'application/json',\n 'user-agent': 'acedatacloud-node/0.1.0',\n ...(opts.headers ?? {}),\n };\n if (token) {\n baseHeaders.authorization = `Bearer ${token}`;\n }\n this.headers = baseHeaders;\n }\n\n async request(\n method: string,\n path: string,\n opts: {\n json?: Record<string, unknown>;\n params?: Record<string, string>;\n platform?: boolean;\n timeout?: number;\n headers?: Record<string, string>;\n } = {}\n ): Promise<Record<string, unknown>> {\n const base = opts.platform ? this.platformBaseURL : this.baseURL;\n let url = `${base}${path}`;\n if (opts.params) {\n const qs = new URLSearchParams(opts.params).toString();\n url += `?${qs}`;\n }\n const headers = { ...this.headers, ...(opts.headers ?? {}) };\n const timeoutMs = opts.timeout ?? this.timeout;\n\n let lastError: Error | null = null;\n let paymentAttempted = false;\n let extraHeaders: Record<string, string> = {};\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const resp = await fetch(url, {\n method,\n headers: { ...headers, ...extraHeaders },\n body: opts.json ? JSON.stringify(opts.json) : undefined,\n signal: controller.signal,\n });\n clearTimeout(timer);\n\n if (resp.status === 402 && this.paymentHandler && !paymentAttempted) {\n const text = await resp.text();\n let body: PaymentRequiredBody;\n try {\n body = JSON.parse(text) as PaymentRequiredBody;\n } catch {\n throw mapError(402, { error: { code: 'invalid_402', message: text } });\n }\n if (!body.accepts?.length) {\n throw mapError(402, { error: { code: 'invalid_402', message: 'No payment requirements' } });\n }\n const result = await this.paymentHandler({\n url,\n method,\n body: opts.json,\n accepts: body.accepts,\n });\n extraHeaders = { ...extraHeaders, ...result.headers };\n paymentAttempted = true;\n continue;\n }\n\n if (resp.status >= 400) {\n const text = await resp.text();\n let body: Record<string, unknown>;\n try {\n body = JSON.parse(text) as Record<string, unknown>;\n } catch {\n body = { error: { code: 'unknown', message: text } };\n }\n if (RETRY_STATUS_CODES.has(resp.status) && attempt < this.maxRetries) {\n await sleep(backoffDelay(attempt) * 1000);\n continue;\n }\n throw mapError(resp.status, body);\n }\n\n return (await resp.json()) as Record<string, unknown>;\n } catch (err) {\n clearTimeout(timer);\n if (err instanceof APIError) throw err;\n lastError = err as Error;\n if (attempt < this.maxRetries) {\n await sleep(backoffDelay(attempt) * 1000);\n continue;\n }\n }\n }\n throw lastError ?? new TransportError('Request failed after retries');\n }\n\n async *requestStream(\n method: string,\n path: string,\n opts: { json?: Record<string, unknown>; timeout?: number } = {}\n ): AsyncGenerator<string, void, unknown> {\n const url = `${this.baseURL}${path}`;\n const headers = { ...this.headers, accept: 'text/event-stream' };\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), opts.timeout ?? this.timeout);\n\n try {\n const resp = await fetch(url, {\n method,\n headers,\n body: opts.json ? JSON.stringify(opts.json) : undefined,\n signal: controller.signal,\n });\n\n if (resp.status >= 400) {\n const text = await resp.text();\n let body: Record<string, unknown>;\n try {\n body = JSON.parse(text) as Record<string, unknown>;\n } catch {\n body = { error: { code: 'unknown', message: text } };\n }\n throw mapError(resp.status, body);\n }\n\n if (!resp.body) throw new TransportError('No response body for stream');\n\n const reader = resp.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n const data = line.slice(6);\n if (data === '[DONE]') return;\n yield data;\n }\n }\n }\n } finally {\n clearTimeout(timer);\n }\n }\n\n async upload(\n path: string,\n fileData: Buffer | Uint8Array,\n filename: string,\n opts: { timeout?: number } = {}\n ): Promise<Record<string, unknown>> {\n const url = `${this.platformBaseURL}${path}`;\n const boundary = `----AceDataCloudBoundary${Date.now()}`;\n const headers = {\n ...this.headers,\n 'content-type': `multipart/form-data; boundary=${boundary}`,\n };\n delete (headers as Record<string, string>)['content-type'];\n\n const body = new FormData();\n body.append('file', new Blob([fileData]), filename);\n\n const authHeaders: Record<string, string> = {\n authorization: this.headers.authorization,\n 'user-agent': this.headers['user-agent'],\n };\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), opts.timeout ?? this.timeout);\n try {\n const resp = await fetch(url, {\n method: 'POST',\n headers: authHeaders,\n body,\n signal: controller.signal,\n });\n clearTimeout(timer);\n\n if (resp.status >= 400) {\n const text = await resp.text();\n let respBody: Record<string, unknown>;\n try {\n respBody = JSON.parse(text) as Record<string, unknown>;\n } catch {\n respBody = { error: { code: 'unknown', message: text } };\n }\n throw mapError(resp.status, respBody);\n }\n return (await resp.json()) as Record<string, unknown>;\n } finally {\n clearTimeout(timer);\n }\n }\n}\n","/** Chat resources — native provider APIs (Claude Messages). */\n\nimport { Transport } from '../runtime/transport';\n\nexport class Messages {\n constructor(private transport: Transport) {}\n\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n maxTokens?: number;\n stream?: false;\n [key: string]: unknown;\n }): Promise<Record<string, unknown>>;\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n maxTokens?: number;\n stream: true;\n [key: string]: unknown;\n }): Promise<AsyncGenerator<Record<string, unknown>>>;\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n maxTokens?: number;\n stream?: boolean;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | AsyncGenerator<Record<string, unknown>>> {\n const { model, messages, maxTokens = 4096, stream, ...rest } = opts;\n const body: Record<string, unknown> = { model, messages, max_tokens: maxTokens, ...rest };\n\n if (stream) {\n body.stream = true;\n return this.stream(body);\n }\n return this.transport.request('POST', '/v1/messages', { json: body });\n }\n\n private async *stream(body: Record<string, unknown>): AsyncGenerator<Record<string, unknown>> {\n for await (const chunk of this.transport.requestStream('POST', '/v1/messages', { json: body })) {\n yield JSON.parse(chunk);\n }\n }\n\n async countTokens(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n [key: string]: unknown;\n }): Promise<Record<string, unknown>> {\n const { model, messages, ...rest } = opts;\n return this.transport.request('POST', '/v1/messages/count_tokens', {\n json: { model, messages, ...rest },\n });\n }\n}\n\nexport class Chat {\n readonly messages: Messages;\n\n constructor(transport: Transport) {\n this.messages = new Messages(transport);\n }\n}\n","/** Task polling abstraction. */\n\nimport { Transport } from './transport';\n\nexport interface TaskHandleOptions {\n pollInterval?: number;\n maxWait?: number;\n}\n\nexport class TaskHandle {\n readonly id: string;\n private pollEndpoint: string;\n private transport: Transport;\n private _result: Record<string, unknown> | null = null;\n\n constructor(taskId: string, pollEndpoint: string, transport: Transport) {\n this.id = taskId;\n this.pollEndpoint = pollEndpoint;\n this.transport = transport;\n }\n\n async get(): Promise<Record<string, unknown>> {\n return this.transport.request('POST', this.pollEndpoint, {\n json: { id: this.id, action: 'retrieve' },\n });\n }\n\n async isCompleted(): Promise<boolean> {\n const state = await this.get();\n const response = (state.response ?? state) as Record<string, unknown>;\n const status = response.status as string;\n return status === 'succeeded' || status === 'failed';\n }\n\n async wait(opts: TaskHandleOptions = {}): Promise<Record<string, unknown>> {\n const pollInterval = opts.pollInterval ?? 3000;\n const maxWait = opts.maxWait ?? 600_000;\n const start = Date.now();\n\n while (Date.now() - start < maxWait) {\n const state = await this.get();\n const response = (state.response ?? state) as Record<string, unknown>;\n const status = response.status as string;\n\n if (status === 'succeeded' || status === 'failed') {\n this._result = state;\n return state;\n }\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n }\n throw new Error(`Task ${this.id} did not complete within ${maxWait}ms`);\n }\n\n get result(): Record<string, unknown> | null {\n return this._result;\n }\n}\n","/** Image generation resources. */\n\nimport { Transport } from '../runtime/transport';\nimport { TaskHandle } from '../runtime/tasks';\n\nexport type ImageProvider = 'nano-banana' | 'midjourney' | 'flux' | 'seedream' | (string & {});\n\nexport class Images {\n constructor(private transport: Transport) {}\n\n async generate(opts: {\n prompt: string;\n provider?: ImageProvider;\n model?: string;\n negativePrompt?: string;\n imageUrl?: string;\n callbackUrl?: string;\n wait?: boolean;\n pollInterval?: number;\n maxWait?: number;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | TaskHandle> {\n const { prompt, provider = 'nano-banana', model, negativePrompt, imageUrl, callbackUrl, wait: shouldWait, pollInterval, maxWait, ...rest } = opts;\n const body: Record<string, unknown> = { prompt, ...rest };\n if (model !== undefined) body.model = model;\n if (negativePrompt !== undefined) body.negative_prompt = negativePrompt;\n if (imageUrl !== undefined) body.image_url = imageUrl;\n if (callbackUrl !== undefined) body.callback_url = callbackUrl;\n\n const endpoint = provider === 'midjourney' ? '/midjourney/imagine' : `/${provider}/images`;\n const result = await this.transport.request('POST', endpoint, { json: body });\n const taskId = result.task_id as string | undefined;\n\n if (!taskId || (result.data && !shouldWait)) return result;\n\n const handle = new TaskHandle(taskId, `/${provider}/tasks`, this.transport);\n if (shouldWait) return handle.wait({ pollInterval, maxWait });\n return handle;\n }\n}\n","/** Audio/music generation resources. */\n\nimport { Transport } from '../runtime/transport';\nimport { TaskHandle } from '../runtime/tasks';\n\nexport type AudioProvider = 'suno' | 'producer' | 'fish' | (string & {});\n\nexport class Audio {\n constructor(private transport: Transport) {}\n\n async generate(opts: {\n prompt: string;\n provider?: AudioProvider;\n model?: string;\n tags?: string;\n callbackUrl?: string;\n wait?: boolean;\n pollInterval?: number;\n maxWait?: number;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | TaskHandle> {\n const { prompt, provider = 'suno', model, tags, callbackUrl, wait: shouldWait, pollInterval, maxWait, ...rest } = opts;\n const body: Record<string, unknown> = { prompt, ...rest };\n if (model !== undefined) body.model = model;\n if (tags !== undefined) body.tags = tags;\n if (callbackUrl !== undefined) body.callback_url = callbackUrl;\n\n const result = await this.transport.request('POST', `/${provider}/audios`, { json: body });\n const taskId = result.task_id as string | undefined;\n\n if (!taskId || (result.data && !shouldWait)) return result;\n\n const handle = new TaskHandle(taskId, `/${provider}/tasks`, this.transport);\n if (shouldWait) return handle.wait({ pollInterval, maxWait });\n return handle;\n }\n}\n","/** Video generation resources. */\n\nimport { Transport } from '../runtime/transport';\nimport { TaskHandle } from '../runtime/tasks';\n\nexport type VideoProvider = 'sora' | 'luma' | 'veo' | 'kling' | 'hailuo' | 'seedance' | 'wan' | 'pika' | 'pixverse' | (string & {});\n\nexport class Video {\n constructor(private transport: Transport) {}\n\n async generate(opts: {\n prompt: string;\n provider?: VideoProvider;\n model?: string;\n imageUrl?: string;\n callbackUrl?: string;\n wait?: boolean;\n pollInterval?: number;\n maxWait?: number;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | TaskHandle> {\n const { prompt, provider = 'sora', model, imageUrl, callbackUrl, wait: shouldWait, pollInterval, maxWait, ...rest } = opts;\n const body: Record<string, unknown> = { prompt, ...rest };\n if (model !== undefined) body.model = model;\n if (imageUrl !== undefined) body.image_url = imageUrl;\n if (callbackUrl !== undefined) body.callback_url = callbackUrl;\n\n const result = await this.transport.request('POST', `/${provider}/videos`, { json: body });\n const taskId = result.task_id as string | undefined;\n\n if (!taskId || (result.data && !shouldWait)) return result;\n\n const handle = new TaskHandle(taskId, `/${provider}/tasks`, this.transport);\n if (shouldWait) return handle.wait({ pollInterval, maxWait });\n return handle;\n }\n}\n","/** Search resources. */\n\nimport { Transport } from '../runtime/transport';\n\nexport class Search {\n constructor(private transport: Transport) {}\n\n async google(opts: {\n query: string;\n type?: string;\n country?: string;\n language?: string;\n page?: number;\n [key: string]: unknown;\n }): Promise<Record<string, unknown>> {\n const { query, type = 'search', country, language, page, ...rest } = opts;\n const body: Record<string, unknown> = { query, type, ...rest };\n if (country !== undefined) body.country = country;\n if (language !== undefined) body.language = language;\n if (page !== undefined) body.page = page;\n return this.transport.request('POST', '/serp/google', { json: body });\n }\n}\n","/** Cross-service task retrieval. */\n\nimport { Transport } from '../runtime/transport';\nimport { TaskHandle } from '../runtime/tasks';\n\nconst SERVICE_TASK_ENDPOINTS: Record<string, string> = {\n suno: '/suno/tasks',\n producer: '/producer/tasks',\n fish: '/fish/tasks',\n 'nano-banana': '/nano-banana/tasks',\n seedream: '/seedream/tasks',\n seedance: '/seedance/tasks',\n sora: '/sora/tasks',\n midjourney: '/midjourney/tasks',\n luma: '/luma/tasks',\n veo: '/veo/tasks',\n flux: '/flux/tasks',\n kling: '/kling/tasks',\n hailuo: '/hailuo/tasks',\n wan: '/wan/tasks',\n pika: '/pika/tasks',\n pixverse: '/pixverse/tasks',\n};\n\nexport class Tasks {\n constructor(private transport: Transport) {}\n\n async get(taskId: string, opts: { service?: string } = {}): Promise<Record<string, unknown>> {\n const service = opts.service ?? 'suno';\n const endpoint = SERVICE_TASK_ENDPOINTS[service] ?? `/${service}/tasks`;\n return this.transport.request('POST', endpoint, {\n json: { id: taskId, action: 'retrieve' },\n });\n }\n\n async wait(\n taskId: string,\n opts: { service?: string; pollInterval?: number; maxWait?: number } = {}\n ): Promise<Record<string, unknown>> {\n const service = opts.service ?? 'suno';\n const endpoint = SERVICE_TASK_ENDPOINTS[service] ?? `/${service}/tasks`;\n const handle = new TaskHandle(taskId, endpoint, this.transport);\n return handle.wait({ pollInterval: opts.pollInterval, maxWait: opts.maxWait });\n }\n}\n","/** File upload resources. */\n\nimport { Transport } from '../runtime/transport';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nexport class Files {\n constructor(private transport: Transport) {}\n\n async upload(\n file: string | Buffer | Uint8Array,\n opts: { filename?: string } = {}\n ): Promise<Record<string, unknown>> {\n let data: Buffer | Uint8Array;\n let filename: string;\n\n if (typeof file === 'string') {\n data = fs.readFileSync(file);\n filename = opts.filename ?? path.basename(file);\n } else {\n data = file;\n filename = opts.filename ?? 'upload';\n }\n\n return this.transport.upload('/api/v1/files/', data, filename);\n }\n}\n","/** Management-plane resources. */\n\nimport { Transport } from '../runtime/transport';\n\nclass Applications {\n constructor(private transport: Transport) {}\n\n async list(params?: Record<string, string>): Promise<Record<string, unknown>> {\n return this.transport.request('GET', '/api/v1/applications/', { params, platform: true });\n }\n\n async create(opts: { serviceId: string; [key: string]: unknown }): Promise<Record<string, unknown>> {\n const { serviceId, ...rest } = opts;\n return this.transport.request('POST', '/api/v1/applications/', {\n json: { service_id: serviceId, ...rest },\n platform: true,\n });\n }\n\n async get(applicationId: string): Promise<Record<string, unknown>> {\n return this.transport.request('GET', `/api/v1/applications/${applicationId}/`, { platform: true });\n }\n}\n\nclass Credentials {\n constructor(private transport: Transport) {}\n\n async list(params?: Record<string, string>): Promise<Record<string, unknown>> {\n return this.transport.request('GET', '/api/v1/credentials/', { params, platform: true });\n }\n\n async create(opts: { applicationId: string; [key: string]: unknown }): Promise<Record<string, unknown>> {\n const { applicationId, ...rest } = opts;\n return this.transport.request('POST', '/api/v1/credentials/', {\n json: { application_id: applicationId, ...rest },\n platform: true,\n });\n }\n\n async rotate(credentialId: string): Promise<Record<string, unknown>> {\n return this.transport.request('POST', `/api/v1/credentials/${credentialId}/rotate/`, { platform: true });\n }\n\n async delete(credentialId: string): Promise<Record<string, unknown>> {\n return this.transport.request('DELETE', `/api/v1/credentials/${credentialId}/`, { platform: true });\n }\n}\n\nclass Models {\n constructor(private transport: Transport) {}\n\n async list(params?: Record<string, string>): Promise<Record<string, unknown>> {\n return this.transport.request('GET', '/api/v1/models/', { params, platform: true });\n }\n}\n\nclass Config {\n constructor(private transport: Transport) {}\n\n async get(): Promise<Record<string, unknown>> {\n return this.transport.request('GET', '/api/v1/config/', { platform: true });\n }\n}\n\nexport class Platform {\n readonly applications: Applications;\n readonly credentials: Credentials;\n readonly models: Models;\n readonly config: Config;\n\n constructor(transport: Transport) {\n this.applications = new Applications(transport);\n this.credentials = new Credentials(transport);\n this.models = new Models(transport);\n this.config = new Config(transport);\n }\n}\n","/** OpenAI-compatible facade resources. */\n\nimport { Transport } from '../runtime/transport';\n\nclass Completions {\n constructor(private transport: Transport) {}\n\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n stream?: false;\n [key: string]: unknown;\n }): Promise<Record<string, unknown>>;\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n stream: true;\n [key: string]: unknown;\n }): Promise<AsyncGenerator<Record<string, unknown>>>;\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n stream?: boolean;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | AsyncGenerator<Record<string, unknown>>> {\n const { model, messages, stream, ...rest } = opts;\n const body: Record<string, unknown> = { model, messages, ...rest };\n\n if (stream) {\n body.stream = true;\n return this.streamResponse(body);\n }\n return this.transport.request('POST', '/v1/chat/completions', { json: body });\n }\n\n private async *streamResponse(body: Record<string, unknown>): AsyncGenerator<Record<string, unknown>> {\n for await (const chunk of this.transport.requestStream('POST', '/v1/chat/completions', { json: body })) {\n yield JSON.parse(chunk);\n }\n }\n}\n\nclass ChatNamespace {\n readonly completions: Completions;\n constructor(transport: Transport) {\n this.completions = new Completions(transport);\n }\n}\n\nclass Responses {\n constructor(private transport: Transport) {}\n\n async create(opts: {\n model: string;\n input: string | Array<Record<string, unknown>>;\n stream?: false;\n [key: string]: unknown;\n }): Promise<Record<string, unknown>>;\n async create(opts: {\n model: string;\n input: string | Array<Record<string, unknown>>;\n stream: true;\n [key: string]: unknown;\n }): Promise<AsyncGenerator<Record<string, unknown>>>;\n async create(opts: {\n model: string;\n input: string | Array<Record<string, unknown>>;\n stream?: boolean;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | AsyncGenerator<Record<string, unknown>>> {\n const { model, input, stream, ...rest } = opts;\n const body: Record<string, unknown> = { model, input, ...rest };\n\n if (stream) {\n body.stream = true;\n return this.streamResponse(body);\n }\n return this.transport.request('POST', '/openai/responses', { json: body });\n }\n\n private async *streamResponse(body: Record<string, unknown>): AsyncGenerator<Record<string, unknown>> {\n for await (const chunk of this.transport.requestStream('POST', '/openai/responses', { json: body })) {\n yield JSON.parse(chunk);\n }\n }\n}\n\nexport class OpenAI {\n readonly chat: ChatNamespace;\n readonly responses: Responses;\n\n constructor(transport: Transport) {\n this.chat = new ChatNamespace(transport);\n this.responses = new Responses(transport);\n }\n}\n","/** Top-level AceDataCloud client for TypeScript. */\n\nimport { Transport, TransportOptions } from './runtime/transport';\nimport type { PaymentHandler } from './runtime/payment';\nimport { Chat } from './resources/chat';\nimport { Images } from './resources/images';\nimport { Audio } from './resources/audio';\nimport { Video } from './resources/video';\nimport { Search } from './resources/search';\nimport { Tasks } from './resources/tasks';\nimport { Files } from './resources/files';\nimport { Platform } from './resources/platform';\nimport { OpenAI } from './resources/openai';\n\nexport interface AceDataCloudOptions {\n apiToken?: string;\n baseURL?: string;\n platformBaseURL?: string;\n timeout?: number;\n maxRetries?: number;\n headers?: Record<string, string>;\n /**\n * Optional payment handler invoked when the API returns `402 Payment\n * Required`. Use `createX402PaymentHandler` from\n * `@acedatacloud/x402-client` to enable on-chain payments via X402.\n */\n paymentHandler?: PaymentHandler;\n}\n\nexport class AceDataCloud {\n readonly chat: Chat;\n readonly images: Images;\n readonly audio: Audio;\n readonly video: Video;\n readonly search: Search;\n readonly tasks: Tasks;\n readonly files: Files;\n readonly platform: Platform;\n readonly openai: OpenAI;\n\n private transport: Transport;\n\n constructor(opts: AceDataCloudOptions = {}) {\n this.transport = new Transport({\n apiToken: opts.apiToken,\n baseURL: opts.baseURL,\n platformBaseURL: opts.platformBaseURL,\n timeout: opts.timeout,\n maxRetries: opts.maxRetries,\n headers: opts.headers,\n paymentHandler: opts.paymentHandler,\n });\n\n this.chat = new Chat(this.transport);\n this.images = new Images(this.transport);\n this.audio = new Audio(this.transport);\n this.video = new Video(this.transport);\n this.search = new Search(this.transport);\n this.tasks = new Tasks(this.transport);\n this.files = new Files(this.transport);\n this.platform = new Platform(this.transport);\n this.openai = new OpenAI(this.transport);\n }\n}\n"],"mappings":"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","names":["path"]}
package/dist/index.mjs CHANGED
@@ -114,11 +114,12 @@ var Transport = class {
114
114
  timeout;
115
115
  maxRetries;
116
116
  headers;
117
+ paymentHandler;
117
118
  constructor(opts = {}) {
118
119
  const token = opts.apiToken ?? process.env.ACEDATACLOUD_API_TOKEN ?? "";
119
- if (!token) {
120
+ if (!token && !opts.paymentHandler) {
120
121
  throw new AuthenticationError({
121
- message: "apiToken is required. Pass it to the client or set ACEDATACLOUD_API_TOKEN.",
122
+ message: "apiToken is required (or provide a paymentHandler, e.g. from @acedatacloud/x402-client). Pass it to the client or set ACEDATACLOUD_API_TOKEN.",
122
123
  statusCode: 0,
123
124
  code: "no_token"
124
125
  });
@@ -127,13 +128,17 @@ var Transport = class {
127
128
  this.platformBaseURL = (opts.platformBaseURL ?? "https://platform.acedata.cloud").replace(/\/+$/, "");
128
129
  this.timeout = opts.timeout ?? 3e5;
129
130
  this.maxRetries = opts.maxRetries ?? 2;
130
- this.headers = {
131
+ this.paymentHandler = opts.paymentHandler;
132
+ const baseHeaders = {
131
133
  accept: "application/json",
132
- authorization: `Bearer ${token}`,
133
134
  "content-type": "application/json",
134
135
  "user-agent": "acedatacloud-node/0.1.0",
135
136
  ...opts.headers ?? {}
136
137
  };
138
+ if (token) {
139
+ baseHeaders.authorization = `Bearer ${token}`;
140
+ }
141
+ this.headers = baseHeaders;
137
142
  }
138
143
  async request(method, path2, opts = {}) {
139
144
  const base = opts.platform ? this.platformBaseURL : this.baseURL;
@@ -145,17 +150,40 @@ var Transport = class {
145
150
  const headers = { ...this.headers, ...opts.headers ?? {} };
146
151
  const timeoutMs = opts.timeout ?? this.timeout;
147
152
  let lastError = null;
153
+ let paymentAttempted = false;
154
+ let extraHeaders = {};
148
155
  for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
149
156
  const controller = new AbortController();
150
157
  const timer = setTimeout(() => controller.abort(), timeoutMs);
151
158
  try {
152
159
  const resp = await fetch(url, {
153
160
  method,
154
- headers,
161
+ headers: { ...headers, ...extraHeaders },
155
162
  body: opts.json ? JSON.stringify(opts.json) : void 0,
156
163
  signal: controller.signal
157
164
  });
158
165
  clearTimeout(timer);
166
+ if (resp.status === 402 && this.paymentHandler && !paymentAttempted) {
167
+ const text = await resp.text();
168
+ let body;
169
+ try {
170
+ body = JSON.parse(text);
171
+ } catch {
172
+ throw mapError(402, { error: { code: "invalid_402", message: text } });
173
+ }
174
+ if (!body.accepts?.length) {
175
+ throw mapError(402, { error: { code: "invalid_402", message: "No payment requirements" } });
176
+ }
177
+ const result = await this.paymentHandler({
178
+ url,
179
+ method,
180
+ body: opts.json,
181
+ accepts: body.accepts
182
+ });
183
+ extraHeaders = { ...extraHeaders, ...result.headers };
184
+ paymentAttempted = true;
185
+ continue;
186
+ }
159
187
  if (resp.status >= 400) {
160
188
  const text = await resp.text();
161
189
  let body;
@@ -635,7 +663,8 @@ var AceDataCloud = class {
635
663
  platformBaseURL: opts.platformBaseURL,
636
664
  timeout: opts.timeout,
637
665
  maxRetries: opts.maxRetries,
638
- headers: opts.headers
666
+ headers: opts.headers,
667
+ paymentHandler: opts.paymentHandler
639
668
  });
640
669
  this.chat = new Chat(this.transport);
641
670
  this.images = new Images(this.transport);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/runtime/errors.ts","../src/runtime/transport.ts","../src/resources/chat.ts","../src/runtime/tasks.ts","../src/resources/images.ts","../src/resources/audio.ts","../src/resources/video.ts","../src/resources/search.ts","../src/resources/tasks.ts","../src/resources/files.ts","../src/resources/platform.ts","../src/resources/openai.ts","../src/client.ts"],"sourcesContent":["/** AceDataCloud SDK errors. */\n\nexport class AceDataCloudError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'AceDataCloudError';\n }\n}\n\nexport class TransportError extends AceDataCloudError {\n constructor(message: string) {\n super(message);\n this.name = 'TransportError';\n }\n}\n\nexport class APIError extends AceDataCloudError {\n statusCode: number;\n code: string;\n traceId?: string;\n body: Record<string, unknown>;\n\n constructor(opts: {\n message: string;\n statusCode: number;\n code: string;\n traceId?: string;\n body?: Record<string, unknown>;\n }) {\n super(opts.message);\n this.name = 'APIError';\n this.statusCode = opts.statusCode;\n this.code = opts.code;\n this.traceId = opts.traceId;\n this.body = opts.body ?? {};\n }\n}\n\nexport class AuthenticationError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'AuthenticationError';\n }\n}\n\nexport class TokenMismatchError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'TokenMismatchError';\n }\n}\n\nexport class RateLimitError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'RateLimitError';\n }\n}\n\nexport class ValidationError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'ValidationError';\n }\n}\n\nexport class InsufficientBalanceError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'InsufficientBalanceError';\n }\n}\n\nexport class ResourceDisabledError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'ResourceDisabledError';\n }\n}\n\nexport class ModerationError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'ModerationError';\n }\n}\n\nexport class TimeoutError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'TimeoutError';\n }\n}\n","/** HTTP transport for AceDataCloud SDK. Uses native fetch (Node 18+). */\n\nimport {\n APIError,\n AuthenticationError,\n InsufficientBalanceError,\n ModerationError,\n RateLimitError,\n ResourceDisabledError,\n TimeoutError,\n TokenMismatchError,\n TransportError,\n ValidationError,\n} from './errors';\n\nconst ERROR_CODE_MAP: Record<string, typeof APIError> = {\n invalid_token: AuthenticationError,\n token_expired: AuthenticationError,\n no_token: AuthenticationError,\n token_mismatched: TokenMismatchError,\n used_up: InsufficientBalanceError,\n disabled: ResourceDisabledError,\n too_many_requests: RateLimitError,\n bad_request: ValidationError,\n};\n\nconst RETRY_STATUS_CODES = new Set([408, 409, 429, 500, 502, 503, 504]);\n\nfunction mapError(statusCode: number, body: Record<string, unknown>): APIError {\n const errorData = (body.error ?? {}) as Record<string, unknown>;\n const code = (errorData.code ?? '') as string;\n const message = (errorData.message ?? '') as string;\n const traceId = body.trace_id as string | undefined;\n\n let ErrorClass = ERROR_CODE_MAP[code];\n if (!ErrorClass) {\n if (statusCode === 403) ErrorClass = ModerationError;\n else if (statusCode === 401) ErrorClass = AuthenticationError;\n else if (statusCode === 429) ErrorClass = RateLimitError;\n else if (statusCode === 400) ErrorClass = ValidationError;\n else ErrorClass = APIError;\n }\n\n return new ErrorClass({ message, statusCode, code, traceId, body });\n}\n\nfunction backoffDelay(attempt: number): number {\n const base = Math.min(2 ** attempt, 8);\n return base + Math.random() * 0.5;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport interface TransportOptions {\n apiToken?: string;\n baseURL?: string;\n platformBaseURL?: string;\n timeout?: number;\n maxRetries?: number;\n headers?: Record<string, string>;\n}\n\nexport class Transport {\n private baseURL: string;\n private platformBaseURL: string;\n private timeout: number;\n private maxRetries: number;\n private headers: Record<string, string>;\n\n constructor(opts: TransportOptions = {}) {\n const token = opts.apiToken ?? process.env.ACEDATACLOUD_API_TOKEN ?? '';\n if (!token) {\n throw new AuthenticationError({\n message: 'apiToken is required. Pass it to the client or set ACEDATACLOUD_API_TOKEN.',\n statusCode: 0,\n code: 'no_token',\n });\n }\n this.baseURL = (opts.baseURL ?? 'https://api.acedata.cloud').replace(/\\/+$/, '');\n this.platformBaseURL = (opts.platformBaseURL ?? 'https://platform.acedata.cloud').replace(/\\/+$/, '');\n this.timeout = opts.timeout ?? 300_000;\n this.maxRetries = opts.maxRetries ?? 2;\n this.headers = {\n accept: 'application/json',\n authorization: `Bearer ${token}`,\n 'content-type': 'application/json',\n 'user-agent': 'acedatacloud-node/0.1.0',\n ...(opts.headers ?? {}),\n };\n }\n\n async request(\n method: string,\n path: string,\n opts: {\n json?: Record<string, unknown>;\n params?: Record<string, string>;\n platform?: boolean;\n timeout?: number;\n headers?: Record<string, string>;\n } = {}\n ): Promise<Record<string, unknown>> {\n const base = opts.platform ? this.platformBaseURL : this.baseURL;\n let url = `${base}${path}`;\n if (opts.params) {\n const qs = new URLSearchParams(opts.params).toString();\n url += `?${qs}`;\n }\n const headers = { ...this.headers, ...(opts.headers ?? {}) };\n const timeoutMs = opts.timeout ?? this.timeout;\n\n let lastError: Error | null = null;\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const resp = await fetch(url, {\n method,\n headers,\n body: opts.json ? JSON.stringify(opts.json) : undefined,\n signal: controller.signal,\n });\n clearTimeout(timer);\n\n if (resp.status >= 400) {\n const text = await resp.text();\n let body: Record<string, unknown>;\n try {\n body = JSON.parse(text) as Record<string, unknown>;\n } catch {\n body = { error: { code: 'unknown', message: text } };\n }\n if (RETRY_STATUS_CODES.has(resp.status) && attempt < this.maxRetries) {\n await sleep(backoffDelay(attempt) * 1000);\n continue;\n }\n throw mapError(resp.status, body);\n }\n\n return (await resp.json()) as Record<string, unknown>;\n } catch (err) {\n clearTimeout(timer);\n if (err instanceof APIError) throw err;\n lastError = err as Error;\n if (attempt < this.maxRetries) {\n await sleep(backoffDelay(attempt) * 1000);\n continue;\n }\n }\n }\n throw lastError ?? new TransportError('Request failed after retries');\n }\n\n async *requestStream(\n method: string,\n path: string,\n opts: { json?: Record<string, unknown>; timeout?: number } = {}\n ): AsyncGenerator<string, void, unknown> {\n const url = `${this.baseURL}${path}`;\n const headers = { ...this.headers, accept: 'text/event-stream' };\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), opts.timeout ?? this.timeout);\n\n try {\n const resp = await fetch(url, {\n method,\n headers,\n body: opts.json ? JSON.stringify(opts.json) : undefined,\n signal: controller.signal,\n });\n\n if (resp.status >= 400) {\n const text = await resp.text();\n let body: Record<string, unknown>;\n try {\n body = JSON.parse(text) as Record<string, unknown>;\n } catch {\n body = { error: { code: 'unknown', message: text } };\n }\n throw mapError(resp.status, body);\n }\n\n if (!resp.body) throw new TransportError('No response body for stream');\n\n const reader = resp.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n const data = line.slice(6);\n if (data === '[DONE]') return;\n yield data;\n }\n }\n }\n } finally {\n clearTimeout(timer);\n }\n }\n\n async upload(\n path: string,\n fileData: Buffer | Uint8Array,\n filename: string,\n opts: { timeout?: number } = {}\n ): Promise<Record<string, unknown>> {\n const url = `${this.platformBaseURL}${path}`;\n const boundary = `----AceDataCloudBoundary${Date.now()}`;\n const headers = {\n ...this.headers,\n 'content-type': `multipart/form-data; boundary=${boundary}`,\n };\n delete (headers as Record<string, string>)['content-type'];\n\n const body = new FormData();\n body.append('file', new Blob([fileData]), filename);\n\n const authHeaders: Record<string, string> = {\n authorization: this.headers.authorization,\n 'user-agent': this.headers['user-agent'],\n };\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), opts.timeout ?? this.timeout);\n try {\n const resp = await fetch(url, {\n method: 'POST',\n headers: authHeaders,\n body,\n signal: controller.signal,\n });\n clearTimeout(timer);\n\n if (resp.status >= 400) {\n const text = await resp.text();\n let respBody: Record<string, unknown>;\n try {\n respBody = JSON.parse(text) as Record<string, unknown>;\n } catch {\n respBody = { error: { code: 'unknown', message: text } };\n }\n throw mapError(resp.status, respBody);\n }\n return (await resp.json()) as Record<string, unknown>;\n } finally {\n clearTimeout(timer);\n }\n }\n}\n","/** Chat resources — native provider APIs (Claude Messages). */\n\nimport { Transport } from '../runtime/transport';\n\nexport class Messages {\n constructor(private transport: Transport) {}\n\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n maxTokens?: number;\n stream?: false;\n [key: string]: unknown;\n }): Promise<Record<string, unknown>>;\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n maxTokens?: number;\n stream: true;\n [key: string]: unknown;\n }): Promise<AsyncGenerator<Record<string, unknown>>>;\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n maxTokens?: number;\n stream?: boolean;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | AsyncGenerator<Record<string, unknown>>> {\n const { model, messages, maxTokens = 4096, stream, ...rest } = opts;\n const body: Record<string, unknown> = { model, messages, max_tokens: maxTokens, ...rest };\n\n if (stream) {\n body.stream = true;\n return this.stream(body);\n }\n return this.transport.request('POST', '/v1/messages', { json: body });\n }\n\n private async *stream(body: Record<string, unknown>): AsyncGenerator<Record<string, unknown>> {\n for await (const chunk of this.transport.requestStream('POST', '/v1/messages', { json: body })) {\n yield JSON.parse(chunk);\n }\n }\n\n async countTokens(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n [key: string]: unknown;\n }): Promise<Record<string, unknown>> {\n const { model, messages, ...rest } = opts;\n return this.transport.request('POST', '/v1/messages/count_tokens', {\n json: { model, messages, ...rest },\n });\n }\n}\n\nexport class Chat {\n readonly messages: Messages;\n\n constructor(transport: Transport) {\n this.messages = new Messages(transport);\n }\n}\n","/** Task polling abstraction. */\n\nimport { Transport } from './transport';\n\nexport interface TaskHandleOptions {\n pollInterval?: number;\n maxWait?: number;\n}\n\nexport class TaskHandle {\n readonly id: string;\n private pollEndpoint: string;\n private transport: Transport;\n private _result: Record<string, unknown> | null = null;\n\n constructor(taskId: string, pollEndpoint: string, transport: Transport) {\n this.id = taskId;\n this.pollEndpoint = pollEndpoint;\n this.transport = transport;\n }\n\n async get(): Promise<Record<string, unknown>> {\n return this.transport.request('POST', this.pollEndpoint, {\n json: { id: this.id, action: 'retrieve' },\n });\n }\n\n async isCompleted(): Promise<boolean> {\n const state = await this.get();\n const response = (state.response ?? state) as Record<string, unknown>;\n const status = response.status as string;\n return status === 'succeeded' || status === 'failed';\n }\n\n async wait(opts: TaskHandleOptions = {}): Promise<Record<string, unknown>> {\n const pollInterval = opts.pollInterval ?? 3000;\n const maxWait = opts.maxWait ?? 600_000;\n const start = Date.now();\n\n while (Date.now() - start < maxWait) {\n const state = await this.get();\n const response = (state.response ?? state) as Record<string, unknown>;\n const status = response.status as string;\n\n if (status === 'succeeded' || status === 'failed') {\n this._result = state;\n return state;\n }\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n }\n throw new Error(`Task ${this.id} did not complete within ${maxWait}ms`);\n }\n\n get result(): Record<string, unknown> | null {\n return this._result;\n }\n}\n","/** Image generation resources. */\n\nimport { Transport } from '../runtime/transport';\nimport { TaskHandle } from '../runtime/tasks';\n\nexport type ImageProvider = 'nano-banana' | 'midjourney' | 'flux' | 'seedream' | (string & {});\n\nexport class Images {\n constructor(private transport: Transport) {}\n\n async generate(opts: {\n prompt: string;\n provider?: ImageProvider;\n model?: string;\n negativePrompt?: string;\n imageUrl?: string;\n callbackUrl?: string;\n wait?: boolean;\n pollInterval?: number;\n maxWait?: number;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | TaskHandle> {\n const { prompt, provider = 'nano-banana', model, negativePrompt, imageUrl, callbackUrl, wait: shouldWait, pollInterval, maxWait, ...rest } = opts;\n const body: Record<string, unknown> = { prompt, ...rest };\n if (model !== undefined) body.model = model;\n if (negativePrompt !== undefined) body.negative_prompt = negativePrompt;\n if (imageUrl !== undefined) body.image_url = imageUrl;\n if (callbackUrl !== undefined) body.callback_url = callbackUrl;\n\n const endpoint = provider === 'midjourney' ? '/midjourney/imagine' : `/${provider}/images`;\n const result = await this.transport.request('POST', endpoint, { json: body });\n const taskId = result.task_id as string | undefined;\n\n if (!taskId || (result.data && !shouldWait)) return result;\n\n const handle = new TaskHandle(taskId, `/${provider}/tasks`, this.transport);\n if (shouldWait) return handle.wait({ pollInterval, maxWait });\n return handle;\n }\n}\n","/** Audio/music generation resources. */\n\nimport { Transport } from '../runtime/transport';\nimport { TaskHandle } from '../runtime/tasks';\n\nexport type AudioProvider = 'suno' | 'producer' | 'fish' | (string & {});\n\nexport class Audio {\n constructor(private transport: Transport) {}\n\n async generate(opts: {\n prompt: string;\n provider?: AudioProvider;\n model?: string;\n tags?: string;\n callbackUrl?: string;\n wait?: boolean;\n pollInterval?: number;\n maxWait?: number;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | TaskHandle> {\n const { prompt, provider = 'suno', model, tags, callbackUrl, wait: shouldWait, pollInterval, maxWait, ...rest } = opts;\n const body: Record<string, unknown> = { prompt, ...rest };\n if (model !== undefined) body.model = model;\n if (tags !== undefined) body.tags = tags;\n if (callbackUrl !== undefined) body.callback_url = callbackUrl;\n\n const result = await this.transport.request('POST', `/${provider}/audios`, { json: body });\n const taskId = result.task_id as string | undefined;\n\n if (!taskId || (result.data && !shouldWait)) return result;\n\n const handle = new TaskHandle(taskId, `/${provider}/tasks`, this.transport);\n if (shouldWait) return handle.wait({ pollInterval, maxWait });\n return handle;\n }\n}\n","/** Video generation resources. */\n\nimport { Transport } from '../runtime/transport';\nimport { TaskHandle } from '../runtime/tasks';\n\nexport type VideoProvider = 'sora' | 'luma' | 'veo' | 'kling' | 'hailuo' | 'seedance' | 'wan' | 'pika' | 'pixverse' | (string & {});\n\nexport class Video {\n constructor(private transport: Transport) {}\n\n async generate(opts: {\n prompt: string;\n provider?: VideoProvider;\n model?: string;\n imageUrl?: string;\n callbackUrl?: string;\n wait?: boolean;\n pollInterval?: number;\n maxWait?: number;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | TaskHandle> {\n const { prompt, provider = 'sora', model, imageUrl, callbackUrl, wait: shouldWait, pollInterval, maxWait, ...rest } = opts;\n const body: Record<string, unknown> = { prompt, ...rest };\n if (model !== undefined) body.model = model;\n if (imageUrl !== undefined) body.image_url = imageUrl;\n if (callbackUrl !== undefined) body.callback_url = callbackUrl;\n\n const result = await this.transport.request('POST', `/${provider}/videos`, { json: body });\n const taskId = result.task_id as string | undefined;\n\n if (!taskId || (result.data && !shouldWait)) return result;\n\n const handle = new TaskHandle(taskId, `/${provider}/tasks`, this.transport);\n if (shouldWait) return handle.wait({ pollInterval, maxWait });\n return handle;\n }\n}\n","/** Search resources. */\n\nimport { Transport } from '../runtime/transport';\n\nexport class Search {\n constructor(private transport: Transport) {}\n\n async google(opts: {\n query: string;\n type?: string;\n country?: string;\n language?: string;\n page?: number;\n [key: string]: unknown;\n }): Promise<Record<string, unknown>> {\n const { query, type = 'search', country, language, page, ...rest } = opts;\n const body: Record<string, unknown> = { query, type, ...rest };\n if (country !== undefined) body.country = country;\n if (language !== undefined) body.language = language;\n if (page !== undefined) body.page = page;\n return this.transport.request('POST', '/serp/google', { json: body });\n }\n}\n","/** Cross-service task retrieval. */\n\nimport { Transport } from '../runtime/transport';\nimport { TaskHandle } from '../runtime/tasks';\n\nconst SERVICE_TASK_ENDPOINTS: Record<string, string> = {\n suno: '/suno/tasks',\n producer: '/producer/tasks',\n fish: '/fish/tasks',\n 'nano-banana': '/nano-banana/tasks',\n seedream: '/seedream/tasks',\n seedance: '/seedance/tasks',\n sora: '/sora/tasks',\n midjourney: '/midjourney/tasks',\n luma: '/luma/tasks',\n veo: '/veo/tasks',\n flux: '/flux/tasks',\n kling: '/kling/tasks',\n hailuo: '/hailuo/tasks',\n wan: '/wan/tasks',\n pika: '/pika/tasks',\n pixverse: '/pixverse/tasks',\n};\n\nexport class Tasks {\n constructor(private transport: Transport) {}\n\n async get(taskId: string, opts: { service?: string } = {}): Promise<Record<string, unknown>> {\n const service = opts.service ?? 'suno';\n const endpoint = SERVICE_TASK_ENDPOINTS[service] ?? `/${service}/tasks`;\n return this.transport.request('POST', endpoint, {\n json: { id: taskId, action: 'retrieve' },\n });\n }\n\n async wait(\n taskId: string,\n opts: { service?: string; pollInterval?: number; maxWait?: number } = {}\n ): Promise<Record<string, unknown>> {\n const service = opts.service ?? 'suno';\n const endpoint = SERVICE_TASK_ENDPOINTS[service] ?? `/${service}/tasks`;\n const handle = new TaskHandle(taskId, endpoint, this.transport);\n return handle.wait({ pollInterval: opts.pollInterval, maxWait: opts.maxWait });\n }\n}\n","/** File upload resources. */\n\nimport { Transport } from '../runtime/transport';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nexport class Files {\n constructor(private transport: Transport) {}\n\n async upload(\n file: string | Buffer | Uint8Array,\n opts: { filename?: string } = {}\n ): Promise<Record<string, unknown>> {\n let data: Buffer | Uint8Array;\n let filename: string;\n\n if (typeof file === 'string') {\n data = fs.readFileSync(file);\n filename = opts.filename ?? path.basename(file);\n } else {\n data = file;\n filename = opts.filename ?? 'upload';\n }\n\n return this.transport.upload('/api/v1/files/', data, filename);\n }\n}\n","/** Management-plane resources. */\n\nimport { Transport } from '../runtime/transport';\n\nclass Applications {\n constructor(private transport: Transport) {}\n\n async list(params?: Record<string, string>): Promise<Record<string, unknown>> {\n return this.transport.request('GET', '/api/v1/applications/', { params, platform: true });\n }\n\n async create(opts: { serviceId: string; [key: string]: unknown }): Promise<Record<string, unknown>> {\n const { serviceId, ...rest } = opts;\n return this.transport.request('POST', '/api/v1/applications/', {\n json: { service_id: serviceId, ...rest },\n platform: true,\n });\n }\n\n async get(applicationId: string): Promise<Record<string, unknown>> {\n return this.transport.request('GET', `/api/v1/applications/${applicationId}/`, { platform: true });\n }\n}\n\nclass Credentials {\n constructor(private transport: Transport) {}\n\n async list(params?: Record<string, string>): Promise<Record<string, unknown>> {\n return this.transport.request('GET', '/api/v1/credentials/', { params, platform: true });\n }\n\n async create(opts: { applicationId: string; [key: string]: unknown }): Promise<Record<string, unknown>> {\n const { applicationId, ...rest } = opts;\n return this.transport.request('POST', '/api/v1/credentials/', {\n json: { application_id: applicationId, ...rest },\n platform: true,\n });\n }\n\n async rotate(credentialId: string): Promise<Record<string, unknown>> {\n return this.transport.request('POST', `/api/v1/credentials/${credentialId}/rotate/`, { platform: true });\n }\n\n async delete(credentialId: string): Promise<Record<string, unknown>> {\n return this.transport.request('DELETE', `/api/v1/credentials/${credentialId}/`, { platform: true });\n }\n}\n\nclass Models {\n constructor(private transport: Transport) {}\n\n async list(params?: Record<string, string>): Promise<Record<string, unknown>> {\n return this.transport.request('GET', '/api/v1/models/', { params, platform: true });\n }\n}\n\nclass Config {\n constructor(private transport: Transport) {}\n\n async get(): Promise<Record<string, unknown>> {\n return this.transport.request('GET', '/api/v1/config/', { platform: true });\n }\n}\n\nexport class Platform {\n readonly applications: Applications;\n readonly credentials: Credentials;\n readonly models: Models;\n readonly config: Config;\n\n constructor(transport: Transport) {\n this.applications = new Applications(transport);\n this.credentials = new Credentials(transport);\n this.models = new Models(transport);\n this.config = new Config(transport);\n }\n}\n","/** OpenAI-compatible facade resources. */\n\nimport { Transport } from '../runtime/transport';\n\nclass Completions {\n constructor(private transport: Transport) {}\n\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n stream?: false;\n [key: string]: unknown;\n }): Promise<Record<string, unknown>>;\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n stream: true;\n [key: string]: unknown;\n }): Promise<AsyncGenerator<Record<string, unknown>>>;\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n stream?: boolean;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | AsyncGenerator<Record<string, unknown>>> {\n const { model, messages, stream, ...rest } = opts;\n const body: Record<string, unknown> = { model, messages, ...rest };\n\n if (stream) {\n body.stream = true;\n return this.streamResponse(body);\n }\n return this.transport.request('POST', '/v1/chat/completions', { json: body });\n }\n\n private async *streamResponse(body: Record<string, unknown>): AsyncGenerator<Record<string, unknown>> {\n for await (const chunk of this.transport.requestStream('POST', '/v1/chat/completions', { json: body })) {\n yield JSON.parse(chunk);\n }\n }\n}\n\nclass ChatNamespace {\n readonly completions: Completions;\n constructor(transport: Transport) {\n this.completions = new Completions(transport);\n }\n}\n\nclass Responses {\n constructor(private transport: Transport) {}\n\n async create(opts: {\n model: string;\n input: string | Array<Record<string, unknown>>;\n stream?: false;\n [key: string]: unknown;\n }): Promise<Record<string, unknown>>;\n async create(opts: {\n model: string;\n input: string | Array<Record<string, unknown>>;\n stream: true;\n [key: string]: unknown;\n }): Promise<AsyncGenerator<Record<string, unknown>>>;\n async create(opts: {\n model: string;\n input: string | Array<Record<string, unknown>>;\n stream?: boolean;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | AsyncGenerator<Record<string, unknown>>> {\n const { model, input, stream, ...rest } = opts;\n const body: Record<string, unknown> = { model, input, ...rest };\n\n if (stream) {\n body.stream = true;\n return this.streamResponse(body);\n }\n return this.transport.request('POST', '/openai/responses', { json: body });\n }\n\n private async *streamResponse(body: Record<string, unknown>): AsyncGenerator<Record<string, unknown>> {\n for await (const chunk of this.transport.requestStream('POST', '/openai/responses', { json: body })) {\n yield JSON.parse(chunk);\n }\n }\n}\n\nexport class OpenAI {\n readonly chat: ChatNamespace;\n readonly responses: Responses;\n\n constructor(transport: Transport) {\n this.chat = new ChatNamespace(transport);\n this.responses = new Responses(transport);\n }\n}\n","/** Top-level AceDataCloud client for TypeScript. */\n\nimport { Transport, TransportOptions } from './runtime/transport';\nimport { Chat } from './resources/chat';\nimport { Images } from './resources/images';\nimport { Audio } from './resources/audio';\nimport { Video } from './resources/video';\nimport { Search } from './resources/search';\nimport { Tasks } from './resources/tasks';\nimport { Files } from './resources/files';\nimport { Platform } from './resources/platform';\nimport { OpenAI } from './resources/openai';\n\nexport interface AceDataCloudOptions {\n apiToken?: string;\n baseURL?: string;\n platformBaseURL?: string;\n timeout?: number;\n maxRetries?: number;\n headers?: Record<string, string>;\n}\n\nexport class AceDataCloud {\n readonly chat: Chat;\n readonly images: Images;\n readonly audio: Audio;\n readonly video: Video;\n readonly search: Search;\n readonly tasks: Tasks;\n readonly files: Files;\n readonly platform: Platform;\n readonly openai: OpenAI;\n\n private transport: Transport;\n\n constructor(opts: AceDataCloudOptions = {}) {\n this.transport = new Transport({\n apiToken: opts.apiToken,\n baseURL: opts.baseURL,\n platformBaseURL: opts.platformBaseURL,\n timeout: opts.timeout,\n maxRetries: opts.maxRetries,\n headers: opts.headers,\n });\n\n this.chat = new Chat(this.transport);\n this.images = new Images(this.transport);\n this.audio = new Audio(this.transport);\n this.video = new Video(this.transport);\n this.search = new Search(this.transport);\n this.tasks = new Tasks(this.transport);\n this.files = new Files(this.transport);\n this.platform = new Platform(this.transport);\n this.openai = new OpenAI(this.transport);\n }\n}\n"],"mappings":"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","names":["path"]}
1
+ {"version":3,"sources":["../src/runtime/errors.ts","../src/runtime/transport.ts","../src/resources/chat.ts","../src/runtime/tasks.ts","../src/resources/images.ts","../src/resources/audio.ts","../src/resources/video.ts","../src/resources/search.ts","../src/resources/tasks.ts","../src/resources/files.ts","../src/resources/platform.ts","../src/resources/openai.ts","../src/client.ts"],"sourcesContent":["/** AceDataCloud SDK errors. */\n\nexport class AceDataCloudError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'AceDataCloudError';\n }\n}\n\nexport class TransportError extends AceDataCloudError {\n constructor(message: string) {\n super(message);\n this.name = 'TransportError';\n }\n}\n\nexport class APIError extends AceDataCloudError {\n statusCode: number;\n code: string;\n traceId?: string;\n body: Record<string, unknown>;\n\n constructor(opts: {\n message: string;\n statusCode: number;\n code: string;\n traceId?: string;\n body?: Record<string, unknown>;\n }) {\n super(opts.message);\n this.name = 'APIError';\n this.statusCode = opts.statusCode;\n this.code = opts.code;\n this.traceId = opts.traceId;\n this.body = opts.body ?? {};\n }\n}\n\nexport class AuthenticationError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'AuthenticationError';\n }\n}\n\nexport class TokenMismatchError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'TokenMismatchError';\n }\n}\n\nexport class RateLimitError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'RateLimitError';\n }\n}\n\nexport class ValidationError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'ValidationError';\n }\n}\n\nexport class InsufficientBalanceError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'InsufficientBalanceError';\n }\n}\n\nexport class ResourceDisabledError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'ResourceDisabledError';\n }\n}\n\nexport class ModerationError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'ModerationError';\n }\n}\n\nexport class TimeoutError extends APIError {\n constructor(opts: ConstructorParameters<typeof APIError>[0]) {\n super(opts);\n this.name = 'TimeoutError';\n }\n}\n","/** HTTP transport for AceDataCloud SDK. Uses native fetch (Node 18+). */\n\nimport {\n APIError,\n AuthenticationError,\n InsufficientBalanceError,\n ModerationError,\n RateLimitError,\n ResourceDisabledError,\n TimeoutError,\n TokenMismatchError,\n TransportError,\n ValidationError,\n} from './errors';\nimport type {\n PaymentHandler,\n PaymentRequiredBody,\n} from './payment';\n\nconst ERROR_CODE_MAP: Record<string, typeof APIError> = {\n invalid_token: AuthenticationError,\n token_expired: AuthenticationError,\n no_token: AuthenticationError,\n token_mismatched: TokenMismatchError,\n used_up: InsufficientBalanceError,\n disabled: ResourceDisabledError,\n too_many_requests: RateLimitError,\n bad_request: ValidationError,\n};\n\nconst RETRY_STATUS_CODES = new Set([408, 409, 429, 500, 502, 503, 504]);\n\nfunction mapError(statusCode: number, body: Record<string, unknown>): APIError {\n const errorData = (body.error ?? {}) as Record<string, unknown>;\n const code = (errorData.code ?? '') as string;\n const message = (errorData.message ?? '') as string;\n const traceId = body.trace_id as string | undefined;\n\n let ErrorClass = ERROR_CODE_MAP[code];\n if (!ErrorClass) {\n if (statusCode === 403) ErrorClass = ModerationError;\n else if (statusCode === 401) ErrorClass = AuthenticationError;\n else if (statusCode === 429) ErrorClass = RateLimitError;\n else if (statusCode === 400) ErrorClass = ValidationError;\n else ErrorClass = APIError;\n }\n\n return new ErrorClass({ message, statusCode, code, traceId, body });\n}\n\nfunction backoffDelay(attempt: number): number {\n const base = Math.min(2 ** attempt, 8);\n return base + Math.random() * 0.5;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport interface TransportOptions {\n apiToken?: string;\n baseURL?: string;\n platformBaseURL?: string;\n timeout?: number;\n maxRetries?: number;\n headers?: Record<string, string>;\n /**\n * Optional handler invoked when a request returns `402 Payment Required`.\n * The handler receives the parsed `accepts` list and must return the extra\n * headers (typically `X-Payment`) to attach to the automatic retry.\n *\n * See `@acedatacloud/x402-client` for a drop-in implementation.\n */\n paymentHandler?: PaymentHandler;\n}\n\nexport class Transport {\n private baseURL: string;\n private platformBaseURL: string;\n private timeout: number;\n private maxRetries: number;\n private headers: Record<string, string>;\n private paymentHandler?: PaymentHandler;\n\n constructor(opts: TransportOptions = {}) {\n const token = opts.apiToken ?? process.env.ACEDATACLOUD_API_TOKEN ?? '';\n if (!token && !opts.paymentHandler) {\n throw new AuthenticationError({\n message:\n 'apiToken is required (or provide a paymentHandler, e.g. from @acedatacloud/x402-client). ' +\n 'Pass it to the client or set ACEDATACLOUD_API_TOKEN.',\n statusCode: 0,\n code: 'no_token',\n });\n }\n this.baseURL = (opts.baseURL ?? 'https://api.acedata.cloud').replace(/\\/+$/, '');\n this.platformBaseURL = (opts.platformBaseURL ?? 'https://platform.acedata.cloud').replace(/\\/+$/, '');\n this.timeout = opts.timeout ?? 300_000;\n this.maxRetries = opts.maxRetries ?? 2;\n this.paymentHandler = opts.paymentHandler;\n const baseHeaders: Record<string, string> = {\n accept: 'application/json',\n 'content-type': 'application/json',\n 'user-agent': 'acedatacloud-node/0.1.0',\n ...(opts.headers ?? {}),\n };\n if (token) {\n baseHeaders.authorization = `Bearer ${token}`;\n }\n this.headers = baseHeaders;\n }\n\n async request(\n method: string,\n path: string,\n opts: {\n json?: Record<string, unknown>;\n params?: Record<string, string>;\n platform?: boolean;\n timeout?: number;\n headers?: Record<string, string>;\n } = {}\n ): Promise<Record<string, unknown>> {\n const base = opts.platform ? this.platformBaseURL : this.baseURL;\n let url = `${base}${path}`;\n if (opts.params) {\n const qs = new URLSearchParams(opts.params).toString();\n url += `?${qs}`;\n }\n const headers = { ...this.headers, ...(opts.headers ?? {}) };\n const timeoutMs = opts.timeout ?? this.timeout;\n\n let lastError: Error | null = null;\n let paymentAttempted = false;\n let extraHeaders: Record<string, string> = {};\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const resp = await fetch(url, {\n method,\n headers: { ...headers, ...extraHeaders },\n body: opts.json ? JSON.stringify(opts.json) : undefined,\n signal: controller.signal,\n });\n clearTimeout(timer);\n\n if (resp.status === 402 && this.paymentHandler && !paymentAttempted) {\n const text = await resp.text();\n let body: PaymentRequiredBody;\n try {\n body = JSON.parse(text) as PaymentRequiredBody;\n } catch {\n throw mapError(402, { error: { code: 'invalid_402', message: text } });\n }\n if (!body.accepts?.length) {\n throw mapError(402, { error: { code: 'invalid_402', message: 'No payment requirements' } });\n }\n const result = await this.paymentHandler({\n url,\n method,\n body: opts.json,\n accepts: body.accepts,\n });\n extraHeaders = { ...extraHeaders, ...result.headers };\n paymentAttempted = true;\n continue;\n }\n\n if (resp.status >= 400) {\n const text = await resp.text();\n let body: Record<string, unknown>;\n try {\n body = JSON.parse(text) as Record<string, unknown>;\n } catch {\n body = { error: { code: 'unknown', message: text } };\n }\n if (RETRY_STATUS_CODES.has(resp.status) && attempt < this.maxRetries) {\n await sleep(backoffDelay(attempt) * 1000);\n continue;\n }\n throw mapError(resp.status, body);\n }\n\n return (await resp.json()) as Record<string, unknown>;\n } catch (err) {\n clearTimeout(timer);\n if (err instanceof APIError) throw err;\n lastError = err as Error;\n if (attempt < this.maxRetries) {\n await sleep(backoffDelay(attempt) * 1000);\n continue;\n }\n }\n }\n throw lastError ?? new TransportError('Request failed after retries');\n }\n\n async *requestStream(\n method: string,\n path: string,\n opts: { json?: Record<string, unknown>; timeout?: number } = {}\n ): AsyncGenerator<string, void, unknown> {\n const url = `${this.baseURL}${path}`;\n const headers = { ...this.headers, accept: 'text/event-stream' };\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), opts.timeout ?? this.timeout);\n\n try {\n const resp = await fetch(url, {\n method,\n headers,\n body: opts.json ? JSON.stringify(opts.json) : undefined,\n signal: controller.signal,\n });\n\n if (resp.status >= 400) {\n const text = await resp.text();\n let body: Record<string, unknown>;\n try {\n body = JSON.parse(text) as Record<string, unknown>;\n } catch {\n body = { error: { code: 'unknown', message: text } };\n }\n throw mapError(resp.status, body);\n }\n\n if (!resp.body) throw new TransportError('No response body for stream');\n\n const reader = resp.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n const data = line.slice(6);\n if (data === '[DONE]') return;\n yield data;\n }\n }\n }\n } finally {\n clearTimeout(timer);\n }\n }\n\n async upload(\n path: string,\n fileData: Buffer | Uint8Array,\n filename: string,\n opts: { timeout?: number } = {}\n ): Promise<Record<string, unknown>> {\n const url = `${this.platformBaseURL}${path}`;\n const boundary = `----AceDataCloudBoundary${Date.now()}`;\n const headers = {\n ...this.headers,\n 'content-type': `multipart/form-data; boundary=${boundary}`,\n };\n delete (headers as Record<string, string>)['content-type'];\n\n const body = new FormData();\n body.append('file', new Blob([fileData]), filename);\n\n const authHeaders: Record<string, string> = {\n authorization: this.headers.authorization,\n 'user-agent': this.headers['user-agent'],\n };\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), opts.timeout ?? this.timeout);\n try {\n const resp = await fetch(url, {\n method: 'POST',\n headers: authHeaders,\n body,\n signal: controller.signal,\n });\n clearTimeout(timer);\n\n if (resp.status >= 400) {\n const text = await resp.text();\n let respBody: Record<string, unknown>;\n try {\n respBody = JSON.parse(text) as Record<string, unknown>;\n } catch {\n respBody = { error: { code: 'unknown', message: text } };\n }\n throw mapError(resp.status, respBody);\n }\n return (await resp.json()) as Record<string, unknown>;\n } finally {\n clearTimeout(timer);\n }\n }\n}\n","/** Chat resources — native provider APIs (Claude Messages). */\n\nimport { Transport } from '../runtime/transport';\n\nexport class Messages {\n constructor(private transport: Transport) {}\n\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n maxTokens?: number;\n stream?: false;\n [key: string]: unknown;\n }): Promise<Record<string, unknown>>;\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n maxTokens?: number;\n stream: true;\n [key: string]: unknown;\n }): Promise<AsyncGenerator<Record<string, unknown>>>;\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n maxTokens?: number;\n stream?: boolean;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | AsyncGenerator<Record<string, unknown>>> {\n const { model, messages, maxTokens = 4096, stream, ...rest } = opts;\n const body: Record<string, unknown> = { model, messages, max_tokens: maxTokens, ...rest };\n\n if (stream) {\n body.stream = true;\n return this.stream(body);\n }\n return this.transport.request('POST', '/v1/messages', { json: body });\n }\n\n private async *stream(body: Record<string, unknown>): AsyncGenerator<Record<string, unknown>> {\n for await (const chunk of this.transport.requestStream('POST', '/v1/messages', { json: body })) {\n yield JSON.parse(chunk);\n }\n }\n\n async countTokens(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n [key: string]: unknown;\n }): Promise<Record<string, unknown>> {\n const { model, messages, ...rest } = opts;\n return this.transport.request('POST', '/v1/messages/count_tokens', {\n json: { model, messages, ...rest },\n });\n }\n}\n\nexport class Chat {\n readonly messages: Messages;\n\n constructor(transport: Transport) {\n this.messages = new Messages(transport);\n }\n}\n","/** Task polling abstraction. */\n\nimport { Transport } from './transport';\n\nexport interface TaskHandleOptions {\n pollInterval?: number;\n maxWait?: number;\n}\n\nexport class TaskHandle {\n readonly id: string;\n private pollEndpoint: string;\n private transport: Transport;\n private _result: Record<string, unknown> | null = null;\n\n constructor(taskId: string, pollEndpoint: string, transport: Transport) {\n this.id = taskId;\n this.pollEndpoint = pollEndpoint;\n this.transport = transport;\n }\n\n async get(): Promise<Record<string, unknown>> {\n return this.transport.request('POST', this.pollEndpoint, {\n json: { id: this.id, action: 'retrieve' },\n });\n }\n\n async isCompleted(): Promise<boolean> {\n const state = await this.get();\n const response = (state.response ?? state) as Record<string, unknown>;\n const status = response.status as string;\n return status === 'succeeded' || status === 'failed';\n }\n\n async wait(opts: TaskHandleOptions = {}): Promise<Record<string, unknown>> {\n const pollInterval = opts.pollInterval ?? 3000;\n const maxWait = opts.maxWait ?? 600_000;\n const start = Date.now();\n\n while (Date.now() - start < maxWait) {\n const state = await this.get();\n const response = (state.response ?? state) as Record<string, unknown>;\n const status = response.status as string;\n\n if (status === 'succeeded' || status === 'failed') {\n this._result = state;\n return state;\n }\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n }\n throw new Error(`Task ${this.id} did not complete within ${maxWait}ms`);\n }\n\n get result(): Record<string, unknown> | null {\n return this._result;\n }\n}\n","/** Image generation resources. */\n\nimport { Transport } from '../runtime/transport';\nimport { TaskHandle } from '../runtime/tasks';\n\nexport type ImageProvider = 'nano-banana' | 'midjourney' | 'flux' | 'seedream' | (string & {});\n\nexport class Images {\n constructor(private transport: Transport) {}\n\n async generate(opts: {\n prompt: string;\n provider?: ImageProvider;\n model?: string;\n negativePrompt?: string;\n imageUrl?: string;\n callbackUrl?: string;\n wait?: boolean;\n pollInterval?: number;\n maxWait?: number;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | TaskHandle> {\n const { prompt, provider = 'nano-banana', model, negativePrompt, imageUrl, callbackUrl, wait: shouldWait, pollInterval, maxWait, ...rest } = opts;\n const body: Record<string, unknown> = { prompt, ...rest };\n if (model !== undefined) body.model = model;\n if (negativePrompt !== undefined) body.negative_prompt = negativePrompt;\n if (imageUrl !== undefined) body.image_url = imageUrl;\n if (callbackUrl !== undefined) body.callback_url = callbackUrl;\n\n const endpoint = provider === 'midjourney' ? '/midjourney/imagine' : `/${provider}/images`;\n const result = await this.transport.request('POST', endpoint, { json: body });\n const taskId = result.task_id as string | undefined;\n\n if (!taskId || (result.data && !shouldWait)) return result;\n\n const handle = new TaskHandle(taskId, `/${provider}/tasks`, this.transport);\n if (shouldWait) return handle.wait({ pollInterval, maxWait });\n return handle;\n }\n}\n","/** Audio/music generation resources. */\n\nimport { Transport } from '../runtime/transport';\nimport { TaskHandle } from '../runtime/tasks';\n\nexport type AudioProvider = 'suno' | 'producer' | 'fish' | (string & {});\n\nexport class Audio {\n constructor(private transport: Transport) {}\n\n async generate(opts: {\n prompt: string;\n provider?: AudioProvider;\n model?: string;\n tags?: string;\n callbackUrl?: string;\n wait?: boolean;\n pollInterval?: number;\n maxWait?: number;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | TaskHandle> {\n const { prompt, provider = 'suno', model, tags, callbackUrl, wait: shouldWait, pollInterval, maxWait, ...rest } = opts;\n const body: Record<string, unknown> = { prompt, ...rest };\n if (model !== undefined) body.model = model;\n if (tags !== undefined) body.tags = tags;\n if (callbackUrl !== undefined) body.callback_url = callbackUrl;\n\n const result = await this.transport.request('POST', `/${provider}/audios`, { json: body });\n const taskId = result.task_id as string | undefined;\n\n if (!taskId || (result.data && !shouldWait)) return result;\n\n const handle = new TaskHandle(taskId, `/${provider}/tasks`, this.transport);\n if (shouldWait) return handle.wait({ pollInterval, maxWait });\n return handle;\n }\n}\n","/** Video generation resources. */\n\nimport { Transport } from '../runtime/transport';\nimport { TaskHandle } from '../runtime/tasks';\n\nexport type VideoProvider = 'sora' | 'luma' | 'veo' | 'kling' | 'hailuo' | 'seedance' | 'wan' | 'pika' | 'pixverse' | (string & {});\n\nexport class Video {\n constructor(private transport: Transport) {}\n\n async generate(opts: {\n prompt: string;\n provider?: VideoProvider;\n model?: string;\n imageUrl?: string;\n callbackUrl?: string;\n wait?: boolean;\n pollInterval?: number;\n maxWait?: number;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | TaskHandle> {\n const { prompt, provider = 'sora', model, imageUrl, callbackUrl, wait: shouldWait, pollInterval, maxWait, ...rest } = opts;\n const body: Record<string, unknown> = { prompt, ...rest };\n if (model !== undefined) body.model = model;\n if (imageUrl !== undefined) body.image_url = imageUrl;\n if (callbackUrl !== undefined) body.callback_url = callbackUrl;\n\n const result = await this.transport.request('POST', `/${provider}/videos`, { json: body });\n const taskId = result.task_id as string | undefined;\n\n if (!taskId || (result.data && !shouldWait)) return result;\n\n const handle = new TaskHandle(taskId, `/${provider}/tasks`, this.transport);\n if (shouldWait) return handle.wait({ pollInterval, maxWait });\n return handle;\n }\n}\n","/** Search resources. */\n\nimport { Transport } from '../runtime/transport';\n\nexport class Search {\n constructor(private transport: Transport) {}\n\n async google(opts: {\n query: string;\n type?: string;\n country?: string;\n language?: string;\n page?: number;\n [key: string]: unknown;\n }): Promise<Record<string, unknown>> {\n const { query, type = 'search', country, language, page, ...rest } = opts;\n const body: Record<string, unknown> = { query, type, ...rest };\n if (country !== undefined) body.country = country;\n if (language !== undefined) body.language = language;\n if (page !== undefined) body.page = page;\n return this.transport.request('POST', '/serp/google', { json: body });\n }\n}\n","/** Cross-service task retrieval. */\n\nimport { Transport } from '../runtime/transport';\nimport { TaskHandle } from '../runtime/tasks';\n\nconst SERVICE_TASK_ENDPOINTS: Record<string, string> = {\n suno: '/suno/tasks',\n producer: '/producer/tasks',\n fish: '/fish/tasks',\n 'nano-banana': '/nano-banana/tasks',\n seedream: '/seedream/tasks',\n seedance: '/seedance/tasks',\n sora: '/sora/tasks',\n midjourney: '/midjourney/tasks',\n luma: '/luma/tasks',\n veo: '/veo/tasks',\n flux: '/flux/tasks',\n kling: '/kling/tasks',\n hailuo: '/hailuo/tasks',\n wan: '/wan/tasks',\n pika: '/pika/tasks',\n pixverse: '/pixverse/tasks',\n};\n\nexport class Tasks {\n constructor(private transport: Transport) {}\n\n async get(taskId: string, opts: { service?: string } = {}): Promise<Record<string, unknown>> {\n const service = opts.service ?? 'suno';\n const endpoint = SERVICE_TASK_ENDPOINTS[service] ?? `/${service}/tasks`;\n return this.transport.request('POST', endpoint, {\n json: { id: taskId, action: 'retrieve' },\n });\n }\n\n async wait(\n taskId: string,\n opts: { service?: string; pollInterval?: number; maxWait?: number } = {}\n ): Promise<Record<string, unknown>> {\n const service = opts.service ?? 'suno';\n const endpoint = SERVICE_TASK_ENDPOINTS[service] ?? `/${service}/tasks`;\n const handle = new TaskHandle(taskId, endpoint, this.transport);\n return handle.wait({ pollInterval: opts.pollInterval, maxWait: opts.maxWait });\n }\n}\n","/** File upload resources. */\n\nimport { Transport } from '../runtime/transport';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nexport class Files {\n constructor(private transport: Transport) {}\n\n async upload(\n file: string | Buffer | Uint8Array,\n opts: { filename?: string } = {}\n ): Promise<Record<string, unknown>> {\n let data: Buffer | Uint8Array;\n let filename: string;\n\n if (typeof file === 'string') {\n data = fs.readFileSync(file);\n filename = opts.filename ?? path.basename(file);\n } else {\n data = file;\n filename = opts.filename ?? 'upload';\n }\n\n return this.transport.upload('/api/v1/files/', data, filename);\n }\n}\n","/** Management-plane resources. */\n\nimport { Transport } from '../runtime/transport';\n\nclass Applications {\n constructor(private transport: Transport) {}\n\n async list(params?: Record<string, string>): Promise<Record<string, unknown>> {\n return this.transport.request('GET', '/api/v1/applications/', { params, platform: true });\n }\n\n async create(opts: { serviceId: string; [key: string]: unknown }): Promise<Record<string, unknown>> {\n const { serviceId, ...rest } = opts;\n return this.transport.request('POST', '/api/v1/applications/', {\n json: { service_id: serviceId, ...rest },\n platform: true,\n });\n }\n\n async get(applicationId: string): Promise<Record<string, unknown>> {\n return this.transport.request('GET', `/api/v1/applications/${applicationId}/`, { platform: true });\n }\n}\n\nclass Credentials {\n constructor(private transport: Transport) {}\n\n async list(params?: Record<string, string>): Promise<Record<string, unknown>> {\n return this.transport.request('GET', '/api/v1/credentials/', { params, platform: true });\n }\n\n async create(opts: { applicationId: string; [key: string]: unknown }): Promise<Record<string, unknown>> {\n const { applicationId, ...rest } = opts;\n return this.transport.request('POST', '/api/v1/credentials/', {\n json: { application_id: applicationId, ...rest },\n platform: true,\n });\n }\n\n async rotate(credentialId: string): Promise<Record<string, unknown>> {\n return this.transport.request('POST', `/api/v1/credentials/${credentialId}/rotate/`, { platform: true });\n }\n\n async delete(credentialId: string): Promise<Record<string, unknown>> {\n return this.transport.request('DELETE', `/api/v1/credentials/${credentialId}/`, { platform: true });\n }\n}\n\nclass Models {\n constructor(private transport: Transport) {}\n\n async list(params?: Record<string, string>): Promise<Record<string, unknown>> {\n return this.transport.request('GET', '/api/v1/models/', { params, platform: true });\n }\n}\n\nclass Config {\n constructor(private transport: Transport) {}\n\n async get(): Promise<Record<string, unknown>> {\n return this.transport.request('GET', '/api/v1/config/', { platform: true });\n }\n}\n\nexport class Platform {\n readonly applications: Applications;\n readonly credentials: Credentials;\n readonly models: Models;\n readonly config: Config;\n\n constructor(transport: Transport) {\n this.applications = new Applications(transport);\n this.credentials = new Credentials(transport);\n this.models = new Models(transport);\n this.config = new Config(transport);\n }\n}\n","/** OpenAI-compatible facade resources. */\n\nimport { Transport } from '../runtime/transport';\n\nclass Completions {\n constructor(private transport: Transport) {}\n\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n stream?: false;\n [key: string]: unknown;\n }): Promise<Record<string, unknown>>;\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n stream: true;\n [key: string]: unknown;\n }): Promise<AsyncGenerator<Record<string, unknown>>>;\n async create(opts: {\n model: string;\n messages: Array<Record<string, unknown>>;\n stream?: boolean;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | AsyncGenerator<Record<string, unknown>>> {\n const { model, messages, stream, ...rest } = opts;\n const body: Record<string, unknown> = { model, messages, ...rest };\n\n if (stream) {\n body.stream = true;\n return this.streamResponse(body);\n }\n return this.transport.request('POST', '/v1/chat/completions', { json: body });\n }\n\n private async *streamResponse(body: Record<string, unknown>): AsyncGenerator<Record<string, unknown>> {\n for await (const chunk of this.transport.requestStream('POST', '/v1/chat/completions', { json: body })) {\n yield JSON.parse(chunk);\n }\n }\n}\n\nclass ChatNamespace {\n readonly completions: Completions;\n constructor(transport: Transport) {\n this.completions = new Completions(transport);\n }\n}\n\nclass Responses {\n constructor(private transport: Transport) {}\n\n async create(opts: {\n model: string;\n input: string | Array<Record<string, unknown>>;\n stream?: false;\n [key: string]: unknown;\n }): Promise<Record<string, unknown>>;\n async create(opts: {\n model: string;\n input: string | Array<Record<string, unknown>>;\n stream: true;\n [key: string]: unknown;\n }): Promise<AsyncGenerator<Record<string, unknown>>>;\n async create(opts: {\n model: string;\n input: string | Array<Record<string, unknown>>;\n stream?: boolean;\n [key: string]: unknown;\n }): Promise<Record<string, unknown> | AsyncGenerator<Record<string, unknown>>> {\n const { model, input, stream, ...rest } = opts;\n const body: Record<string, unknown> = { model, input, ...rest };\n\n if (stream) {\n body.stream = true;\n return this.streamResponse(body);\n }\n return this.transport.request('POST', '/openai/responses', { json: body });\n }\n\n private async *streamResponse(body: Record<string, unknown>): AsyncGenerator<Record<string, unknown>> {\n for await (const chunk of this.transport.requestStream('POST', '/openai/responses', { json: body })) {\n yield JSON.parse(chunk);\n }\n }\n}\n\nexport class OpenAI {\n readonly chat: ChatNamespace;\n readonly responses: Responses;\n\n constructor(transport: Transport) {\n this.chat = new ChatNamespace(transport);\n this.responses = new Responses(transport);\n }\n}\n","/** Top-level AceDataCloud client for TypeScript. */\n\nimport { Transport, TransportOptions } from './runtime/transport';\nimport type { PaymentHandler } from './runtime/payment';\nimport { Chat } from './resources/chat';\nimport { Images } from './resources/images';\nimport { Audio } from './resources/audio';\nimport { Video } from './resources/video';\nimport { Search } from './resources/search';\nimport { Tasks } from './resources/tasks';\nimport { Files } from './resources/files';\nimport { Platform } from './resources/platform';\nimport { OpenAI } from './resources/openai';\n\nexport interface AceDataCloudOptions {\n apiToken?: string;\n baseURL?: string;\n platformBaseURL?: string;\n timeout?: number;\n maxRetries?: number;\n headers?: Record<string, string>;\n /**\n * Optional payment handler invoked when the API returns `402 Payment\n * Required`. Use `createX402PaymentHandler` from\n * `@acedatacloud/x402-client` to enable on-chain payments via X402.\n */\n paymentHandler?: PaymentHandler;\n}\n\nexport class AceDataCloud {\n readonly chat: Chat;\n readonly images: Images;\n readonly audio: Audio;\n readonly video: Video;\n readonly search: Search;\n readonly tasks: Tasks;\n readonly files: Files;\n readonly platform: Platform;\n readonly openai: OpenAI;\n\n private transport: Transport;\n\n constructor(opts: AceDataCloudOptions = {}) {\n this.transport = new Transport({\n apiToken: opts.apiToken,\n baseURL: opts.baseURL,\n platformBaseURL: opts.platformBaseURL,\n timeout: opts.timeout,\n maxRetries: opts.maxRetries,\n headers: opts.headers,\n paymentHandler: opts.paymentHandler,\n });\n\n this.chat = new Chat(this.transport);\n this.images = new Images(this.transport);\n this.audio = new Audio(this.transport);\n this.video = new Video(this.transport);\n this.search = new Search(this.transport);\n this.tasks = new Tasks(this.transport);\n this.files = new Files(this.transport);\n this.platform = new Platform(this.transport);\n this.openai = new OpenAI(this.transport);\n }\n}\n"],"mappings":";AAEO,IAAM,oBAAN,cAAgC,MAAM;AAAA,EAC3C,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,iBAAN,cAA6B,kBAAkB;AAAA,EACpD,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,WAAN,cAAuB,kBAAkB;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,MAMT;AACD,UAAM,KAAK,OAAO;AAClB,SAAK,OAAO;AACZ,SAAK,aAAa,KAAK;AACvB,SAAK,OAAO,KAAK;AACjB,SAAK,UAAU,KAAK;AACpB,SAAK,OAAO,KAAK,QAAQ,CAAC;AAAA,EAC5B;AACF;AAEO,IAAM,sBAAN,cAAkC,SAAS;AAAA,EAChD,YAAY,MAAiD;AAC3D,UAAM,IAAI;AACV,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,qBAAN,cAAiC,SAAS;AAAA,EAC/C,YAAY,MAAiD;AAC3D,UAAM,IAAI;AACV,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,iBAAN,cAA6B,SAAS;AAAA,EAC3C,YAAY,MAAiD;AAC3D,UAAM,IAAI;AACV,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,kBAAN,cAA8B,SAAS;AAAA,EAC5C,YAAY,MAAiD;AAC3D,UAAM,IAAI;AACV,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,2BAAN,cAAuC,SAAS;AAAA,EACrD,YAAY,MAAiD;AAC3D,UAAM,IAAI;AACV,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,wBAAN,cAAoC,SAAS;AAAA,EAClD,YAAY,MAAiD;AAC3D,UAAM,IAAI;AACV,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,kBAAN,cAA8B,SAAS;AAAA,EAC5C,YAAY,MAAiD;AAC3D,UAAM,IAAI;AACV,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,eAAN,cAA2B,SAAS;AAAA,EACzC,YAAY,MAAiD;AAC3D,UAAM,IAAI;AACV,SAAK,OAAO;AAAA,EACd;AACF;;;ACzEA,IAAM,iBAAkD;AAAA,EACtD,eAAe;AAAA,EACf,eAAe;AAAA,EACf,UAAU;AAAA,EACV,kBAAkB;AAAA,EAClB,SAAS;AAAA,EACT,UAAU;AAAA,EACV,mBAAmB;AAAA,EACnB,aAAa;AACf;AAEA,IAAM,qBAAqB,oBAAI,IAAI,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;AAEtE,SAAS,SAAS,YAAoB,MAAyC;AAC7E,QAAM,YAAa,KAAK,SAAS,CAAC;AAClC,QAAM,OAAQ,UAAU,QAAQ;AAChC,QAAM,UAAW,UAAU,WAAW;AACtC,QAAM,UAAU,KAAK;AAErB,MAAI,aAAa,eAAe,IAAI;AACpC,MAAI,CAAC,YAAY;AACf,QAAI,eAAe,IAAK,cAAa;AAAA,aAC5B,eAAe,IAAK,cAAa;AAAA,aACjC,eAAe,IAAK,cAAa;AAAA,aACjC,eAAe,IAAK,cAAa;AAAA,QACrC,cAAa;AAAA,EACpB;AAEA,SAAO,IAAI,WAAW,EAAE,SAAS,YAAY,MAAM,SAAS,KAAK,CAAC;AACpE;AAEA,SAAS,aAAa,SAAyB;AAC7C,QAAM,OAAO,KAAK,IAAI,KAAK,SAAS,CAAC;AACrC,SAAO,OAAO,KAAK,OAAO,IAAI;AAChC;AAEA,SAAS,MAAM,IAA2B;AACxC,SAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AACzD;AAmBO,IAAM,YAAN,MAAgB;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,OAAyB,CAAC,GAAG;AACvC,UAAM,QAAQ,KAAK,YAAY,QAAQ,IAAI,0BAA0B;AACrE,QAAI,CAAC,SAAS,CAAC,KAAK,gBAAgB;AAClC,YAAM,IAAI,oBAAoB;AAAA,QAC5B,SACE;AAAA,QAEF,YAAY;AAAA,QACZ,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AACA,SAAK,WAAW,KAAK,WAAW,6BAA6B,QAAQ,QAAQ,EAAE;AAC/E,SAAK,mBAAmB,KAAK,mBAAmB,kCAAkC,QAAQ,QAAQ,EAAE;AACpG,SAAK,UAAU,KAAK,WAAW;AAC/B,SAAK,aAAa,KAAK,cAAc;AACrC,SAAK,iBAAiB,KAAK;AAC3B,UAAM,cAAsC;AAAA,MAC1C,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,GAAI,KAAK,WAAW,CAAC;AAAA,IACvB;AACA,QAAI,OAAO;AACT,kBAAY,gBAAgB,UAAU,KAAK;AAAA,IAC7C;AACA,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,MAAM,QACJ,QACAA,OACA,OAMI,CAAC,GAC6B;AAClC,UAAM,OAAO,KAAK,WAAW,KAAK,kBAAkB,KAAK;AACzD,QAAI,MAAM,GAAG,IAAI,GAAGA,KAAI;AACxB,QAAI,KAAK,QAAQ;AACf,YAAM,KAAK,IAAI,gBAAgB,KAAK,MAAM,EAAE,SAAS;AACrD,aAAO,IAAI,EAAE;AAAA,IACf;AACA,UAAM,UAAU,EAAE,GAAG,KAAK,SAAS,GAAI,KAAK,WAAW,CAAC,EAAG;AAC3D,UAAM,YAAY,KAAK,WAAW,KAAK;AAEvC,QAAI,YAA0B;AAC9B,QAAI,mBAAmB;AACvB,QAAI,eAAuC,CAAC;AAC5C,aAAS,UAAU,GAAG,WAAW,KAAK,YAAY,WAAW;AAC3D,YAAM,aAAa,IAAI,gBAAgB;AACvC,YAAM,QAAQ,WAAW,MAAM,WAAW,MAAM,GAAG,SAAS;AAC5D,UAAI;AACF,cAAM,OAAO,MAAM,MAAM,KAAK;AAAA,UAC5B;AAAA,UACA,SAAS,EAAE,GAAG,SAAS,GAAG,aAAa;AAAA,UACvC,MAAM,KAAK,OAAO,KAAK,UAAU,KAAK,IAAI,IAAI;AAAA,UAC9C,QAAQ,WAAW;AAAA,QACrB,CAAC;AACD,qBAAa,KAAK;AAElB,YAAI,KAAK,WAAW,OAAO,KAAK,kBAAkB,CAAC,kBAAkB;AACnE,gBAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,cAAI;AACJ,cAAI;AACF,mBAAO,KAAK,MAAM,IAAI;AAAA,UACxB,QAAQ;AACN,kBAAM,SAAS,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,SAAS,KAAK,EAAE,CAAC;AAAA,UACvE;AACA,cAAI,CAAC,KAAK,SAAS,QAAQ;AACzB,kBAAM,SAAS,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,SAAS,0BAA0B,EAAE,CAAC;AAAA,UAC5F;AACA,gBAAM,SAAS,MAAM,KAAK,eAAe;AAAA,YACvC;AAAA,YACA;AAAA,YACA,MAAM,KAAK;AAAA,YACX,SAAS,KAAK;AAAA,UAChB,CAAC;AACD,yBAAe,EAAE,GAAG,cAAc,GAAG,OAAO,QAAQ;AACpD,6BAAmB;AACnB;AAAA,QACF;AAEA,YAAI,KAAK,UAAU,KAAK;AACtB,gBAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,cAAI;AACJ,cAAI;AACF,mBAAO,KAAK,MAAM,IAAI;AAAA,UACxB,QAAQ;AACN,mBAAO,EAAE,OAAO,EAAE,MAAM,WAAW,SAAS,KAAK,EAAE;AAAA,UACrD;AACA,cAAI,mBAAmB,IAAI,KAAK,MAAM,KAAK,UAAU,KAAK,YAAY;AACpE,kBAAM,MAAM,aAAa,OAAO,IAAI,GAAI;AACxC;AAAA,UACF;AACA,gBAAM,SAAS,KAAK,QAAQ,IAAI;AAAA,QAClC;AAEA,eAAQ,MAAM,KAAK,KAAK;AAAA,MAC1B,SAAS,KAAK;AACZ,qBAAa,KAAK;AAClB,YAAI,eAAe,SAAU,OAAM;AACnC,oBAAY;AACZ,YAAI,UAAU,KAAK,YAAY;AAC7B,gBAAM,MAAM,aAAa,OAAO,IAAI,GAAI;AACxC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,UAAM,aAAa,IAAI,eAAe,8BAA8B;AAAA,EACtE;AAAA,EAEA,OAAO,cACL,QACAA,OACA,OAA6D,CAAC,GACvB;AACvC,UAAM,MAAM,GAAG,KAAK,OAAO,GAAGA,KAAI;AAClC,UAAM,UAAU,EAAE,GAAG,KAAK,SAAS,QAAQ,oBAAoB;AAC/D,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,QAAQ,WAAW,MAAM,WAAW,MAAM,GAAG,KAAK,WAAW,KAAK,OAAO;AAE/E,QAAI;AACF,YAAM,OAAO,MAAM,MAAM,KAAK;AAAA,QAC5B;AAAA,QACA;AAAA,QACA,MAAM,KAAK,OAAO,KAAK,UAAU,KAAK,IAAI,IAAI;AAAA,QAC9C,QAAQ,WAAW;AAAA,MACrB,CAAC;AAED,UAAI,KAAK,UAAU,KAAK;AACtB,cAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,YAAI;AACJ,YAAI;AACF,iBAAO,KAAK,MAAM,IAAI;AAAA,QACxB,QAAQ;AACN,iBAAO,EAAE,OAAO,EAAE,MAAM,WAAW,SAAS,KAAK,EAAE;AAAA,QACrD;AACA,cAAM,SAAS,KAAK,QAAQ,IAAI;AAAA,MAClC;AAEA,UAAI,CAAC,KAAK,KAAM,OAAM,IAAI,eAAe,6BAA6B;AAEtE,YAAM,SAAS,KAAK,KAAK,UAAU;AACnC,YAAM,UAAU,IAAI,YAAY;AAChC,UAAI,SAAS;AAEb,aAAO,MAAM;AACX,cAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,YAAI,KAAM;AACV,kBAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAEhD,cAAM,QAAQ,OAAO,MAAM,IAAI;AAC/B,iBAAS,MAAM,IAAI,KAAK;AAExB,mBAAW,QAAQ,OAAO;AACxB,cAAI,KAAK,WAAW,QAAQ,GAAG;AAC7B,kBAAM,OAAO,KAAK,MAAM,CAAC;AACzB,gBAAI,SAAS,SAAU;AACvB,kBAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,IACF,UAAE;AACA,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,MAAM,OACJA,OACA,UACA,UACA,OAA6B,CAAC,GACI;AAClC,UAAM,MAAM,GAAG,KAAK,eAAe,GAAGA,KAAI;AAC1C,UAAM,WAAW,2BAA2B,KAAK,IAAI,CAAC;AACtD,UAAM,UAAU;AAAA,MACd,GAAG,KAAK;AAAA,MACR,gBAAgB,iCAAiC,QAAQ;AAAA,IAC3D;AACA,WAAQ,QAAmC,cAAc;AAEzD,UAAM,OAAO,IAAI,SAAS;AAC1B,SAAK,OAAO,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,QAAQ;AAElD,UAAM,cAAsC;AAAA,MAC1C,eAAe,KAAK,QAAQ;AAAA,MAC5B,cAAc,KAAK,QAAQ,YAAY;AAAA,IACzC;AAEA,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,QAAQ,WAAW,MAAM,WAAW,MAAM,GAAG,KAAK,WAAW,KAAK,OAAO;AAC/E,QAAI;AACF,YAAM,OAAO,MAAM,MAAM,KAAK;AAAA,QAC5B,QAAQ;AAAA,QACR,SAAS;AAAA,QACT;AAAA,QACA,QAAQ,WAAW;AAAA,MACrB,CAAC;AACD,mBAAa,KAAK;AAElB,UAAI,KAAK,UAAU,KAAK;AACtB,cAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,YAAI;AACJ,YAAI;AACF,qBAAW,KAAK,MAAM,IAAI;AAAA,QAC5B,QAAQ;AACN,qBAAW,EAAE,OAAO,EAAE,MAAM,WAAW,SAAS,KAAK,EAAE;AAAA,QACzD;AACA,cAAM,SAAS,KAAK,QAAQ,QAAQ;AAAA,MACtC;AACA,aAAQ,MAAM,KAAK,KAAK;AAAA,IAC1B,UAAE;AACA,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF;AACF;;;AC1SO,IAAM,WAAN,MAAe;AAAA,EACpB,YAAoB,WAAsB;AAAtB;AAAA,EAAuB;AAAA,EAAvB;AAAA,EAgBpB,MAAM,OAAO,MAMkE;AAC7E,UAAM,EAAE,OAAO,UAAU,YAAY,MAAM,QAAQ,GAAG,KAAK,IAAI;AAC/D,UAAM,OAAgC,EAAE,OAAO,UAAU,YAAY,WAAW,GAAG,KAAK;AAExF,QAAI,QAAQ;AACV,WAAK,SAAS;AACd,aAAO,KAAK,OAAO,IAAI;AAAA,IACzB;AACA,WAAO,KAAK,UAAU,QAAQ,QAAQ,gBAAgB,EAAE,MAAM,KAAK,CAAC;AAAA,EACtE;AAAA,EAEA,OAAe,OAAO,MAAwE;AAC5F,qBAAiB,SAAS,KAAK,UAAU,cAAc,QAAQ,gBAAgB,EAAE,MAAM,KAAK,CAAC,GAAG;AAC9F,YAAM,KAAK,MAAM,KAAK;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,MAImB;AACnC,UAAM,EAAE,OAAO,UAAU,GAAG,KAAK,IAAI;AACrC,WAAO,KAAK,UAAU,QAAQ,QAAQ,6BAA6B;AAAA,MACjE,MAAM,EAAE,OAAO,UAAU,GAAG,KAAK;AAAA,IACnC,CAAC;AAAA,EACH;AACF;AAEO,IAAM,OAAN,MAAW;AAAA,EACP;AAAA,EAET,YAAY,WAAsB;AAChC,SAAK,WAAW,IAAI,SAAS,SAAS;AAAA,EACxC;AACF;;;ACrDO,IAAM,aAAN,MAAiB;AAAA,EACb;AAAA,EACD;AAAA,EACA;AAAA,EACA,UAA0C;AAAA,EAElD,YAAY,QAAgB,cAAsB,WAAsB;AACtE,SAAK,KAAK;AACV,SAAK,eAAe;AACpB,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,MAAM,MAAwC;AAC5C,WAAO,KAAK,UAAU,QAAQ,QAAQ,KAAK,cAAc;AAAA,MACvD,MAAM,EAAE,IAAI,KAAK,IAAI,QAAQ,WAAW;AAAA,IAC1C,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,cAAgC;AACpC,UAAM,QAAQ,MAAM,KAAK,IAAI;AAC7B,UAAM,WAAY,MAAM,YAAY;AACpC,UAAM,SAAS,SAAS;AACxB,WAAO,WAAW,eAAe,WAAW;AAAA,EAC9C;AAAA,EAEA,MAAM,KAAK,OAA0B,CAAC,GAAqC;AACzE,UAAM,eAAe,KAAK,gBAAgB;AAC1C,UAAM,UAAU,KAAK,WAAW;AAChC,UAAM,QAAQ,KAAK,IAAI;AAEvB,WAAO,KAAK,IAAI,IAAI,QAAQ,SAAS;AACnC,YAAM,QAAQ,MAAM,KAAK,IAAI;AAC7B,YAAM,WAAY,MAAM,YAAY;AACpC,YAAM,SAAS,SAAS;AAExB,UAAI,WAAW,eAAe,WAAW,UAAU;AACjD,aAAK,UAAU;AACf,eAAO;AAAA,MACT;AACA,YAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,YAAY,CAAC;AAAA,IAClE;AACA,UAAM,IAAI,MAAM,QAAQ,KAAK,EAAE,4BAA4B,OAAO,IAAI;AAAA,EACxE;AAAA,EAEA,IAAI,SAAyC;AAC3C,WAAO,KAAK;AAAA,EACd;AACF;;;ACjDO,IAAM,SAAN,MAAa;AAAA,EAClB,YAAoB,WAAsB;AAAtB;AAAA,EAAuB;AAAA,EAAvB;AAAA,EAEpB,MAAM,SAAS,MAWmC;AAChD,UAAM,EAAE,QAAQ,WAAW,eAAe,OAAO,gBAAgB,UAAU,aAAa,MAAM,YAAY,cAAc,SAAS,GAAG,KAAK,IAAI;AAC7I,UAAM,OAAgC,EAAE,QAAQ,GAAG,KAAK;AACxD,QAAI,UAAU,OAAW,MAAK,QAAQ;AACtC,QAAI,mBAAmB,OAAW,MAAK,kBAAkB;AACzD,QAAI,aAAa,OAAW,MAAK,YAAY;AAC7C,QAAI,gBAAgB,OAAW,MAAK,eAAe;AAEnD,UAAM,WAAW,aAAa,eAAe,wBAAwB,IAAI,QAAQ;AACjF,UAAM,SAAS,MAAM,KAAK,UAAU,QAAQ,QAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AAC5E,UAAM,SAAS,OAAO;AAEtB,QAAI,CAAC,UAAW,OAAO,QAAQ,CAAC,WAAa,QAAO;AAEpD,UAAM,SAAS,IAAI,WAAW,QAAQ,IAAI,QAAQ,UAAU,KAAK,SAAS;AAC1E,QAAI,WAAY,QAAO,OAAO,KAAK,EAAE,cAAc,QAAQ,CAAC;AAC5D,WAAO;AAAA,EACT;AACF;;;AChCO,IAAM,QAAN,MAAY;AAAA,EACjB,YAAoB,WAAsB;AAAtB;AAAA,EAAuB;AAAA,EAAvB;AAAA,EAEpB,MAAM,SAAS,MAUmC;AAChD,UAAM,EAAE,QAAQ,WAAW,QAAQ,OAAO,MAAM,aAAa,MAAM,YAAY,cAAc,SAAS,GAAG,KAAK,IAAI;AAClH,UAAM,OAAgC,EAAE,QAAQ,GAAG,KAAK;AACxD,QAAI,UAAU,OAAW,MAAK,QAAQ;AACtC,QAAI,SAAS,OAAW,MAAK,OAAO;AACpC,QAAI,gBAAgB,OAAW,MAAK,eAAe;AAEnD,UAAM,SAAS,MAAM,KAAK,UAAU,QAAQ,QAAQ,IAAI,QAAQ,WAAW,EAAE,MAAM,KAAK,CAAC;AACzF,UAAM,SAAS,OAAO;AAEtB,QAAI,CAAC,UAAW,OAAO,QAAQ,CAAC,WAAa,QAAO;AAEpD,UAAM,SAAS,IAAI,WAAW,QAAQ,IAAI,QAAQ,UAAU,KAAK,SAAS;AAC1E,QAAI,WAAY,QAAO,OAAO,KAAK,EAAE,cAAc,QAAQ,CAAC;AAC5D,WAAO;AAAA,EACT;AACF;;;AC7BO,IAAM,QAAN,MAAY;AAAA,EACjB,YAAoB,WAAsB;AAAtB;AAAA,EAAuB;AAAA,EAAvB;AAAA,EAEpB,MAAM,SAAS,MAUmC;AAChD,UAAM,EAAE,QAAQ,WAAW,QAAQ,OAAO,UAAU,aAAa,MAAM,YAAY,cAAc,SAAS,GAAG,KAAK,IAAI;AACtH,UAAM,OAAgC,EAAE,QAAQ,GAAG,KAAK;AACxD,QAAI,UAAU,OAAW,MAAK,QAAQ;AACtC,QAAI,aAAa,OAAW,MAAK,YAAY;AAC7C,QAAI,gBAAgB,OAAW,MAAK,eAAe;AAEnD,UAAM,SAAS,MAAM,KAAK,UAAU,QAAQ,QAAQ,IAAI,QAAQ,WAAW,EAAE,MAAM,KAAK,CAAC;AACzF,UAAM,SAAS,OAAO;AAEtB,QAAI,CAAC,UAAW,OAAO,QAAQ,CAAC,WAAa,QAAO;AAEpD,UAAM,SAAS,IAAI,WAAW,QAAQ,IAAI,QAAQ,UAAU,KAAK,SAAS;AAC1E,QAAI,WAAY,QAAO,OAAO,KAAK,EAAE,cAAc,QAAQ,CAAC;AAC5D,WAAO;AAAA,EACT;AACF;;;AChCO,IAAM,SAAN,MAAa;AAAA,EAClB,YAAoB,WAAsB;AAAtB;AAAA,EAAuB;AAAA,EAAvB;AAAA,EAEpB,MAAM,OAAO,MAOwB;AACnC,UAAM,EAAE,OAAO,OAAO,UAAU,SAAS,UAAU,MAAM,GAAG,KAAK,IAAI;AACrE,UAAM,OAAgC,EAAE,OAAO,MAAM,GAAG,KAAK;AAC7D,QAAI,YAAY,OAAW,MAAK,UAAU;AAC1C,QAAI,aAAa,OAAW,MAAK,WAAW;AAC5C,QAAI,SAAS,OAAW,MAAK,OAAO;AACpC,WAAO,KAAK,UAAU,QAAQ,QAAQ,gBAAgB,EAAE,MAAM,KAAK,CAAC;AAAA,EACtE;AACF;;;ACjBA,IAAM,yBAAiD;AAAA,EACrD,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AAAA,EACN,eAAe;AAAA,EACf,UAAU;AAAA,EACV,UAAU;AAAA,EACV,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,MAAM;AAAA,EACN,UAAU;AACZ;AAEO,IAAM,QAAN,MAAY;AAAA,EACjB,YAAoB,WAAsB;AAAtB;AAAA,EAAuB;AAAA,EAAvB;AAAA,EAEpB,MAAM,IAAI,QAAgB,OAA6B,CAAC,GAAqC;AAC3F,UAAM,UAAU,KAAK,WAAW;AAChC,UAAM,WAAW,uBAAuB,OAAO,KAAK,IAAI,OAAO;AAC/D,WAAO,KAAK,UAAU,QAAQ,QAAQ,UAAU;AAAA,MAC9C,MAAM,EAAE,IAAI,QAAQ,QAAQ,WAAW;AAAA,IACzC,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,KACJ,QACA,OAAsE,CAAC,GACrC;AAClC,UAAM,UAAU,KAAK,WAAW;AAChC,UAAM,WAAW,uBAAuB,OAAO,KAAK,IAAI,OAAO;AAC/D,UAAM,SAAS,IAAI,WAAW,QAAQ,UAAU,KAAK,SAAS;AAC9D,WAAO,OAAO,KAAK,EAAE,cAAc,KAAK,cAAc,SAAS,KAAK,QAAQ,CAAC;AAAA,EAC/E;AACF;;;ACzCA,YAAY,QAAQ;AACpB,YAAY,UAAU;AAEf,IAAM,QAAN,MAAY;AAAA,EACjB,YAAoB,WAAsB;AAAtB;AAAA,EAAuB;AAAA,EAAvB;AAAA,EAEpB,MAAM,OACJ,MACA,OAA8B,CAAC,GACG;AAClC,QAAI;AACJ,QAAI;AAEJ,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAU,gBAAa,IAAI;AAC3B,iBAAW,KAAK,YAAiB,cAAS,IAAI;AAAA,IAChD,OAAO;AACL,aAAO;AACP,iBAAW,KAAK,YAAY;AAAA,IAC9B;AAEA,WAAO,KAAK,UAAU,OAAO,kBAAkB,MAAM,QAAQ;AAAA,EAC/D;AACF;;;ACtBA,IAAM,eAAN,MAAmB;AAAA,EACjB,YAAoB,WAAsB;AAAtB;AAAA,EAAuB;AAAA,EAAvB;AAAA,EAEpB,MAAM,KAAK,QAAmE;AAC5E,WAAO,KAAK,UAAU,QAAQ,OAAO,yBAAyB,EAAE,QAAQ,UAAU,KAAK,CAAC;AAAA,EAC1F;AAAA,EAEA,MAAM,OAAO,MAAuF;AAClG,UAAM,EAAE,WAAW,GAAG,KAAK,IAAI;AAC/B,WAAO,KAAK,UAAU,QAAQ,QAAQ,yBAAyB;AAAA,MAC7D,MAAM,EAAE,YAAY,WAAW,GAAG,KAAK;AAAA,MACvC,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,eAAyD;AACjE,WAAO,KAAK,UAAU,QAAQ,OAAO,wBAAwB,aAAa,KAAK,EAAE,UAAU,KAAK,CAAC;AAAA,EACnG;AACF;AAEA,IAAM,cAAN,MAAkB;AAAA,EAChB,YAAoB,WAAsB;AAAtB;AAAA,EAAuB;AAAA,EAAvB;AAAA,EAEpB,MAAM,KAAK,QAAmE;AAC5E,WAAO,KAAK,UAAU,QAAQ,OAAO,wBAAwB,EAAE,QAAQ,UAAU,KAAK,CAAC;AAAA,EACzF;AAAA,EAEA,MAAM,OAAO,MAA2F;AACtG,UAAM,EAAE,eAAe,GAAG,KAAK,IAAI;AACnC,WAAO,KAAK,UAAU,QAAQ,QAAQ,wBAAwB;AAAA,MAC5D,MAAM,EAAE,gBAAgB,eAAe,GAAG,KAAK;AAAA,MAC/C,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,cAAwD;AACnE,WAAO,KAAK,UAAU,QAAQ,QAAQ,uBAAuB,YAAY,YAAY,EAAE,UAAU,KAAK,CAAC;AAAA,EACzG;AAAA,EAEA,MAAM,OAAO,cAAwD;AACnE,WAAO,KAAK,UAAU,QAAQ,UAAU,uBAAuB,YAAY,KAAK,EAAE,UAAU,KAAK,CAAC;AAAA,EACpG;AACF;AAEA,IAAM,SAAN,MAAa;AAAA,EACX,YAAoB,WAAsB;AAAtB;AAAA,EAAuB;AAAA,EAAvB;AAAA,EAEpB,MAAM,KAAK,QAAmE;AAC5E,WAAO,KAAK,UAAU,QAAQ,OAAO,mBAAmB,EAAE,QAAQ,UAAU,KAAK,CAAC;AAAA,EACpF;AACF;AAEA,IAAM,SAAN,MAAa;AAAA,EACX,YAAoB,WAAsB;AAAtB;AAAA,EAAuB;AAAA,EAAvB;AAAA,EAEpB,MAAM,MAAwC;AAC5C,WAAO,KAAK,UAAU,QAAQ,OAAO,mBAAmB,EAAE,UAAU,KAAK,CAAC;AAAA,EAC5E;AACF;AAEO,IAAM,WAAN,MAAe;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,WAAsB;AAChC,SAAK,eAAe,IAAI,aAAa,SAAS;AAC9C,SAAK,cAAc,IAAI,YAAY,SAAS;AAC5C,SAAK,SAAS,IAAI,OAAO,SAAS;AAClC,SAAK,SAAS,IAAI,OAAO,SAAS;AAAA,EACpC;AACF;;;ACxEA,IAAM,cAAN,MAAkB;AAAA,EAChB,YAAoB,WAAsB;AAAtB;AAAA,EAAuB;AAAA,EAAvB;AAAA,EAcpB,MAAM,OAAO,MAKkE;AAC7E,UAAM,EAAE,OAAO,UAAU,QAAQ,GAAG,KAAK,IAAI;AAC7C,UAAM,OAAgC,EAAE,OAAO,UAAU,GAAG,KAAK;AAEjE,QAAI,QAAQ;AACV,WAAK,SAAS;AACd,aAAO,KAAK,eAAe,IAAI;AAAA,IACjC;AACA,WAAO,KAAK,UAAU,QAAQ,QAAQ,wBAAwB,EAAE,MAAM,KAAK,CAAC;AAAA,EAC9E;AAAA,EAEA,OAAe,eAAe,MAAwE;AACpG,qBAAiB,SAAS,KAAK,UAAU,cAAc,QAAQ,wBAAwB,EAAE,MAAM,KAAK,CAAC,GAAG;AACtG,YAAM,KAAK,MAAM,KAAK;AAAA,IACxB;AAAA,EACF;AACF;AAEA,IAAM,gBAAN,MAAoB;AAAA,EACT;AAAA,EACT,YAAY,WAAsB;AAChC,SAAK,cAAc,IAAI,YAAY,SAAS;AAAA,EAC9C;AACF;AAEA,IAAM,YAAN,MAAgB;AAAA,EACd,YAAoB,WAAsB;AAAtB;AAAA,EAAuB;AAAA,EAAvB;AAAA,EAcpB,MAAM,OAAO,MAKkE;AAC7E,UAAM,EAAE,OAAO,OAAO,QAAQ,GAAG,KAAK,IAAI;AAC1C,UAAM,OAAgC,EAAE,OAAO,OAAO,GAAG,KAAK;AAE9D,QAAI,QAAQ;AACV,WAAK,SAAS;AACd,aAAO,KAAK,eAAe,IAAI;AAAA,IACjC;AACA,WAAO,KAAK,UAAU,QAAQ,QAAQ,qBAAqB,EAAE,MAAM,KAAK,CAAC;AAAA,EAC3E;AAAA,EAEA,OAAe,eAAe,MAAwE;AACpG,qBAAiB,SAAS,KAAK,UAAU,cAAc,QAAQ,qBAAqB,EAAE,MAAM,KAAK,CAAC,GAAG;AACnG,YAAM,KAAK,MAAM,KAAK;AAAA,IACxB;AAAA,EACF;AACF;AAEO,IAAM,SAAN,MAAa;AAAA,EACT;AAAA,EACA;AAAA,EAET,YAAY,WAAsB;AAChC,SAAK,OAAO,IAAI,cAAc,SAAS;AACvC,SAAK,YAAY,IAAI,UAAU,SAAS;AAAA,EAC1C;AACF;;;AClEO,IAAM,eAAN,MAAmB;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAED;AAAA,EAER,YAAY,OAA4B,CAAC,GAAG;AAC1C,SAAK,YAAY,IAAI,UAAU;AAAA,MAC7B,UAAU,KAAK;AAAA,MACf,SAAS,KAAK;AAAA,MACd,iBAAiB,KAAK;AAAA,MACtB,SAAS,KAAK;AAAA,MACd,YAAY,KAAK;AAAA,MACjB,SAAS,KAAK;AAAA,MACd,gBAAgB,KAAK;AAAA,IACvB,CAAC;AAED,SAAK,OAAO,IAAI,KAAK,KAAK,SAAS;AACnC,SAAK,SAAS,IAAI,OAAO,KAAK,SAAS;AACvC,SAAK,QAAQ,IAAI,MAAM,KAAK,SAAS;AACrC,SAAK,QAAQ,IAAI,MAAM,KAAK,SAAS;AACrC,SAAK,SAAS,IAAI,OAAO,KAAK,SAAS;AACvC,SAAK,QAAQ,IAAI,MAAM,KAAK,SAAS;AACrC,SAAK,QAAQ,IAAI,MAAM,KAAK,SAAS;AACrC,SAAK,WAAW,IAAI,SAAS,KAAK,SAAS;AAC3C,SAAK,SAAS,IAAI,OAAO,KAAK,SAAS;AAAA,EACzC;AACF;","names":["path"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acedatacloud/sdk",
3
- "version": "2026.418.2",
3
+ "version": "2026.419.0",
4
4
  "description": "Official TypeScript SDK for AceDataCloud — AI-powered data services",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -30,7 +30,7 @@
30
30
  "jest": "^29.0.0",
31
31
  "ts-jest": "^29.0.0",
32
32
  "tsup": "^8.5.1",
33
- "typescript": "^5.0.0"
33
+ "typescript": "^5.9.3"
34
34
  },
35
35
  "files": [
36
36
  "dist",
package/src/client.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  /** Top-level AceDataCloud client for TypeScript. */
2
2
 
3
3
  import { Transport, TransportOptions } from './runtime/transport';
4
+ import type { PaymentHandler } from './runtime/payment';
4
5
  import { Chat } from './resources/chat';
5
6
  import { Images } from './resources/images';
6
7
  import { Audio } from './resources/audio';
@@ -18,6 +19,12 @@ export interface AceDataCloudOptions {
18
19
  timeout?: number;
19
20
  maxRetries?: number;
20
21
  headers?: Record<string, string>;
22
+ /**
23
+ * Optional payment handler invoked when the API returns `402 Payment
24
+ * Required`. Use `createX402PaymentHandler` from
25
+ * `@acedatacloud/x402-client` to enable on-chain payments via X402.
26
+ */
27
+ paymentHandler?: PaymentHandler;
21
28
  }
22
29
 
23
30
  export class AceDataCloud {
@@ -41,6 +48,7 @@ export class AceDataCloud {
41
48
  timeout: opts.timeout,
42
49
  maxRetries: opts.maxRetries,
43
50
  headers: opts.headers,
51
+ paymentHandler: opts.paymentHandler,
44
52
  });
45
53
 
46
54
  this.chat = new Chat(this.transport);
package/src/index.ts CHANGED
@@ -18,6 +18,14 @@ export {
18
18
 
19
19
  export { TaskHandle, TaskHandleOptions } from './runtime/tasks';
20
20
 
21
+ export type {
22
+ PaymentHandler,
23
+ PaymentHandlerContext,
24
+ PaymentHandlerResult,
25
+ PaymentRequirement,
26
+ PaymentRequiredBody,
27
+ } from './runtime/payment';
28
+
21
29
  export type { ImageProvider } from './resources/images';
22
30
  export type { VideoProvider } from './resources/video';
23
31
  export type { AudioProvider } from './resources/audio';
@@ -1,5 +1,12 @@
1
1
  export { Transport, TransportOptions } from './transport';
2
2
  export { TaskHandle, TaskHandleOptions } from './tasks';
3
+ export type {
4
+ PaymentHandler,
5
+ PaymentHandlerContext,
6
+ PaymentHandlerResult,
7
+ PaymentRequirement,
8
+ PaymentRequiredBody,
9
+ } from './payment';
3
10
  export {
4
11
  AceDataCloudError,
5
12
  APIError,
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Pluggable payment handler hook for the SDK transport.
3
+ *
4
+ * When the API returns `402 Payment Required`, the transport calls the
5
+ * configured `PaymentHandler` to produce the extra headers (typically
6
+ * `X-Payment`) to attach to the retry. This keeps the SDK free of any
7
+ * chain-specific signing logic, and lets callers plug in a real x402
8
+ * implementation such as `@acedatacloud/x402-client`.
9
+ */
10
+
11
+ /** Payment requirement as returned by the server in a 402 response. */
12
+ export interface PaymentRequirement {
13
+ scheme: string;
14
+ network: string;
15
+ maxAmountRequired: string;
16
+ maxTimeoutSeconds?: number;
17
+ resource?: string;
18
+ description?: string;
19
+ payTo: string;
20
+ asset: string;
21
+ extra?: Record<string, unknown>;
22
+ }
23
+
24
+ /** Shape of a 402 response body. */
25
+ export interface PaymentRequiredBody {
26
+ x402Version?: number;
27
+ accepts: PaymentRequirement[];
28
+ error?: string;
29
+ }
30
+
31
+ /** Context passed to a payment handler when a 402 is observed. */
32
+ export interface PaymentHandlerContext {
33
+ url: string;
34
+ method: string;
35
+ body?: unknown;
36
+ accepts: PaymentRequirement[];
37
+ }
38
+
39
+ /** Result a payment handler must return. */
40
+ export interface PaymentHandlerResult {
41
+ /** Extra headers to attach to the retry (must include `X-Payment`). */
42
+ headers: Record<string, string>;
43
+ }
44
+
45
+ /** A callable that signs/settles a payment and returns retry headers. */
46
+ export type PaymentHandler = (
47
+ ctx: PaymentHandlerContext
48
+ ) => Promise<PaymentHandlerResult> | PaymentHandlerResult;
@@ -12,6 +12,10 @@ import {
12
12
  TransportError,
13
13
  ValidationError,
14
14
  } from './errors';
15
+ import type {
16
+ PaymentHandler,
17
+ PaymentRequiredBody,
18
+ } from './payment';
15
19
 
16
20
  const ERROR_CODE_MAP: Record<string, typeof APIError> = {
17
21
  invalid_token: AuthenticationError,
@@ -60,6 +64,14 @@ export interface TransportOptions {
60
64
  timeout?: number;
61
65
  maxRetries?: number;
62
66
  headers?: Record<string, string>;
67
+ /**
68
+ * Optional handler invoked when a request returns `402 Payment Required`.
69
+ * The handler receives the parsed `accepts` list and must return the extra
70
+ * headers (typically `X-Payment`) to attach to the automatic retry.
71
+ *
72
+ * See `@acedatacloud/x402-client` for a drop-in implementation.
73
+ */
74
+ paymentHandler?: PaymentHandler;
63
75
  }
64
76
 
65
77
  export class Transport {
@@ -68,12 +80,15 @@ export class Transport {
68
80
  private timeout: number;
69
81
  private maxRetries: number;
70
82
  private headers: Record<string, string>;
83
+ private paymentHandler?: PaymentHandler;
71
84
 
72
85
  constructor(opts: TransportOptions = {}) {
73
86
  const token = opts.apiToken ?? process.env.ACEDATACLOUD_API_TOKEN ?? '';
74
- if (!token) {
87
+ if (!token && !opts.paymentHandler) {
75
88
  throw new AuthenticationError({
76
- message: 'apiToken is required. Pass it to the client or set ACEDATACLOUD_API_TOKEN.',
89
+ message:
90
+ 'apiToken is required (or provide a paymentHandler, e.g. from @acedatacloud/x402-client). ' +
91
+ 'Pass it to the client or set ACEDATACLOUD_API_TOKEN.',
77
92
  statusCode: 0,
78
93
  code: 'no_token',
79
94
  });
@@ -82,13 +97,17 @@ export class Transport {
82
97
  this.platformBaseURL = (opts.platformBaseURL ?? 'https://platform.acedata.cloud').replace(/\/+$/, '');
83
98
  this.timeout = opts.timeout ?? 300_000;
84
99
  this.maxRetries = opts.maxRetries ?? 2;
85
- this.headers = {
100
+ this.paymentHandler = opts.paymentHandler;
101
+ const baseHeaders: Record<string, string> = {
86
102
  accept: 'application/json',
87
- authorization: `Bearer ${token}`,
88
103
  'content-type': 'application/json',
89
104
  'user-agent': 'acedatacloud-node/0.1.0',
90
105
  ...(opts.headers ?? {}),
91
106
  };
107
+ if (token) {
108
+ baseHeaders.authorization = `Bearer ${token}`;
109
+ }
110
+ this.headers = baseHeaders;
92
111
  }
93
112
 
94
113
  async request(
@@ -112,18 +131,42 @@ export class Transport {
112
131
  const timeoutMs = opts.timeout ?? this.timeout;
113
132
 
114
133
  let lastError: Error | null = null;
134
+ let paymentAttempted = false;
135
+ let extraHeaders: Record<string, string> = {};
115
136
  for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
116
137
  const controller = new AbortController();
117
138
  const timer = setTimeout(() => controller.abort(), timeoutMs);
118
139
  try {
119
140
  const resp = await fetch(url, {
120
141
  method,
121
- headers,
142
+ headers: { ...headers, ...extraHeaders },
122
143
  body: opts.json ? JSON.stringify(opts.json) : undefined,
123
144
  signal: controller.signal,
124
145
  });
125
146
  clearTimeout(timer);
126
147
 
148
+ if (resp.status === 402 && this.paymentHandler && !paymentAttempted) {
149
+ const text = await resp.text();
150
+ let body: PaymentRequiredBody;
151
+ try {
152
+ body = JSON.parse(text) as PaymentRequiredBody;
153
+ } catch {
154
+ throw mapError(402, { error: { code: 'invalid_402', message: text } });
155
+ }
156
+ if (!body.accepts?.length) {
157
+ throw mapError(402, { error: { code: 'invalid_402', message: 'No payment requirements' } });
158
+ }
159
+ const result = await this.paymentHandler({
160
+ url,
161
+ method,
162
+ body: opts.json,
163
+ accepts: body.accepts,
164
+ });
165
+ extraHeaders = { ...extraHeaders, ...result.headers };
166
+ paymentAttempted = true;
167
+ continue;
168
+ }
169
+
127
170
  if (resp.status >= 400) {
128
171
  const text = await resp.text();
129
172
  let body: Record<string, unknown>;