2dai-sdk 1.4.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/dist/client.js ADDED
@@ -0,0 +1,643 @@
1
+ "use strict";
2
+ /**
3
+ * 2DAI SDK Client
4
+ * Official TypeScript/JavaScript client for 2DAI API
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.TwoDAIClient = void 0;
11
+ exports.createClient = createClient;
12
+ const ws_1 = __importDefault(require("ws"));
13
+ const axios_1 = __importDefault(require("axios"));
14
+ const constants_1 = require("./constants");
15
+ /**
16
+ * Main 2DAI SDK Client
17
+ */
18
+ class TwoDAIClient {
19
+ apiKey;
20
+ baseUrl;
21
+ timeout;
22
+ debug;
23
+ axios;
24
+ // WebSocket properties
25
+ ws = null;
26
+ wsPingInterval = null;
27
+ wsReconnectAttempts = 0;
28
+ wsPendingRequests = new Map();
29
+ wsShouldReconnect = true;
30
+ wsAuthenticated = false;
31
+ wsConnecting = false;
32
+ wsClosingIntentionally = false;
33
+ wsOptions;
34
+ /**
35
+ * Create a new 2DAI SDK client
36
+ *
37
+ * @param options Client configuration options
38
+ */
39
+ constructor(options) {
40
+ this.apiKey = options.apiKey;
41
+ this.baseUrl = options.baseUrl || constants_1.DEFAULT_BASE_URL;
42
+ this.timeout = options.timeout || constants_1.DEFAULT_TIMEOUT;
43
+ this.debug = options.debug || false;
44
+ // Initialize WebSocket options
45
+ this.wsOptions = {
46
+ autoReconnect: options.wsAutoReconnect ?? constants_1.WS_DEFAULTS.AUTO_RECONNECT,
47
+ reconnectIntervalMs: options.wsReconnectIntervalMs ?? constants_1.WS_DEFAULTS.RECONNECT_INTERVAL_MS,
48
+ maxReconnectDelayMs: options.wsMaxReconnectDelayMs ?? constants_1.WS_DEFAULTS.MAX_RECONNECT_DELAY_MS,
49
+ pingIntervalMs: options.wsPingIntervalMs ?? constants_1.WS_DEFAULTS.PING_INTERVAL_MS
50
+ };
51
+ // Validate API key format
52
+ if (!this.apiKey || !this.apiKey.startsWith('2dai_pk_')) {
53
+ throw new Error('Invalid API key format. Must start with "2dai_pk_"');
54
+ }
55
+ // Create axios instance with default config
56
+ this.axios = axios_1.default.create({
57
+ baseURL: this.baseUrl,
58
+ timeout: this.timeout,
59
+ headers: {
60
+ 'Authorization': `Bearer ${this.apiKey}`,
61
+ 'Content-Type': 'application/json'
62
+ }
63
+ });
64
+ // Add response interceptor for error handling
65
+ this.axios.interceptors.response.use(response => response, error => {
66
+ if (error.response) {
67
+ const apiError = error.response.data.error || {
68
+ code: 'UNKNOWN_ERROR',
69
+ message: error.message
70
+ };
71
+ throw new Error(`[${apiError.code}] ${apiError.message}`);
72
+ }
73
+ throw error;
74
+ });
75
+ this.log('Client initialized', { baseUrl: this.baseUrl });
76
+ }
77
+ /**
78
+ * Log debug messages
79
+ */
80
+ log(message, data) {
81
+ if (this.debug) {
82
+ console.log(`[2DAI SDK] ${message}`, data || '');
83
+ }
84
+ }
85
+ /**
86
+ * Generate an image from a text prompt
87
+ */
88
+ async generateImage(options) {
89
+ this.log('Generating image', { prompt: options.prompt });
90
+ try {
91
+ const response = await this.axios.post('/api/v1/generation/image', {
92
+ prompt: options.prompt,
93
+ negativePrompt: options.negativePrompt,
94
+ style: typeof options.style === 'string' ? options.style : options.style?.id,
95
+ format: typeof options.format === 'string' ? options.format : options.format?.id,
96
+ width: options.width,
97
+ height: options.height,
98
+ seed: options.seed
99
+ });
100
+ return {
101
+ success: response.data.success,
102
+ imageId: response.data.data.imageId,
103
+ width: response.data.data.width,
104
+ height: response.data.data.height,
105
+ seed: response.data.data.seed
106
+ };
107
+ }
108
+ catch (error) {
109
+ this.log('Image generation error', error.message);
110
+ throw error;
111
+ }
112
+ }
113
+ /**
114
+ * Edit an existing image (img2img)
115
+ * Supports optional width/height for resizing the output image
116
+ * Note: The API does not support strength parameter - it uses fixed settings
117
+ */
118
+ async editImage(imageId, options) {
119
+ this.log('Editing image', {
120
+ imageId,
121
+ prompt: options.prompt,
122
+ ...(options.width !== undefined && { width: options.width }),
123
+ ...(options.height !== undefined && { height: options.height }),
124
+ ...(options.resizePad !== undefined && { resizePad: options.resizePad })
125
+ });
126
+ try {
127
+ const response = await this.axios.post('/api/v1/generation/image/edit', {
128
+ imageId,
129
+ prompt: options.prompt,
130
+ negativePrompt: options.negativePrompt,
131
+ seed: options.seed,
132
+ width: options.width,
133
+ height: options.height,
134
+ resizePad: options.resizePad
135
+ });
136
+ return {
137
+ success: response.data.success,
138
+ imageId: response.data.data.imageId,
139
+ width: response.data.data.width || 0,
140
+ height: response.data.data.height || 0,
141
+ seed: response.data.data.seed
142
+ };
143
+ }
144
+ catch (error) {
145
+ this.log('Image edit error', error.message);
146
+ throw error;
147
+ }
148
+ }
149
+ /**
150
+ * AI upscale an image (img2ximg)
151
+ * Uses AI to generate prompt automatically - no user prompt needed
152
+ *
153
+ * @param imageId Source image ID from CDN
154
+ * @param options Upscale options (factor: 2-4, default: 2)
155
+ */
156
+ async upscaleImage(imageId, options = {}) {
157
+ this.log('Upscaling image', { imageId, factor: options.factor ?? 2 });
158
+ if (!imageId) {
159
+ throw new Error('imageId is required for upscaling');
160
+ }
161
+ try {
162
+ const response = await this.axios.post('/api/v1/generation/image/upscale', {
163
+ imageId,
164
+ factor: options.factor ?? 2,
165
+ seed: options.seed
166
+ });
167
+ return {
168
+ success: response.data.success,
169
+ imageId: response.data.data.imageId,
170
+ width: response.data.data.width || 0,
171
+ height: response.data.data.height || 0,
172
+ seed: response.data.data.seed
173
+ };
174
+ }
175
+ catch (error) {
176
+ this.log('Upscale error', error.message);
177
+ throw error;
178
+ }
179
+ }
180
+ /**
181
+ * Generate a video from an image
182
+ */
183
+ async generateVideo(options) {
184
+ this.log('Generating video', { imageId: options.imageId, duration: options.duration });
185
+ if (!options.imageId) {
186
+ throw new Error('imageId is required for video generation');
187
+ }
188
+ try {
189
+ const response = await this.axios.post('/api/v1/generation/video', {
190
+ imageId: options.imageId,
191
+ duration: options.duration ?? 5,
192
+ fps: options.fps ?? 16
193
+ });
194
+ return {
195
+ success: response.data.success,
196
+ videoId: response.data.data.videoId,
197
+ duration: response.data.data.duration,
198
+ fps: response.data.data.fps
199
+ };
200
+ }
201
+ catch (error) {
202
+ this.log('Video generation error', error.message);
203
+ throw error;
204
+ }
205
+ }
206
+ /**
207
+ * Generate text using LLM
208
+ */
209
+ async generateText(options) {
210
+ this.log('Generating text', {
211
+ prompt: options.prompt,
212
+ ...(options.imageId && { imageId: options.imageId })
213
+ });
214
+ try {
215
+ const response = await this.axios.post('/api/v1/llm/generate', {
216
+ prompt: options.prompt,
217
+ system: options.system,
218
+ memory: options.memory,
219
+ jsonFormat: options.jsonFormat,
220
+ jsonTemplate: options.jsonTemplate,
221
+ useRandomSeed: options.useRandomSeed,
222
+ askKnowledge: options.askKnowledge,
223
+ useMarkdown: options.useMarkdown,
224
+ imageId: options.imageId
225
+ });
226
+ const llmData = response.data.data || {};
227
+ // Build response
228
+ const result = {
229
+ success: response.data.success,
230
+ response: llmData.json
231
+ ? JSON.stringify(llmData.json)
232
+ : (llmData.text || ''),
233
+ inputTokens: llmData.inputTokens,
234
+ outputTokens: llmData.outputTokens,
235
+ totalTokens: llmData.tokensUsed
236
+ };
237
+ // Add parsed JSON if jsonFormat was requested
238
+ if (options.jsonFormat && llmData.json) {
239
+ result.json = llmData.json;
240
+ }
241
+ return result;
242
+ }
243
+ catch (error) {
244
+ this.log('Text generation error', error.message);
245
+ throw error;
246
+ }
247
+ }
248
+ /**
249
+ * Get API key settings
250
+ */
251
+ async getSettings() {
252
+ this.log('Getting API key settings');
253
+ try {
254
+ const response = await this.axios.get('/api/v1/settings');
255
+ return response.data.data;
256
+ }
257
+ catch (error) {
258
+ throw new Error(`Failed to get settings: ${error.message}`);
259
+ }
260
+ }
261
+ /**
262
+ * Update API key watermark
263
+ */
264
+ async updateWatermark(watermarkCdnId) {
265
+ this.log('Updating watermark', { watermarkCdnId });
266
+ try {
267
+ const response = await this.axios.put('/api/v1/settings', {
268
+ watermarkCdnId
269
+ });
270
+ return response.data.success;
271
+ }
272
+ catch (error) {
273
+ throw new Error(`Failed to update watermark: ${error.message}`);
274
+ }
275
+ }
276
+ /**
277
+ * Check rate limits for all operations
278
+ */
279
+ async checkLimits() {
280
+ this.log('Checking rate limits');
281
+ try {
282
+ const response = await this.axios.get('/api/v1/settings/rate-limits');
283
+ return response.data.data;
284
+ }
285
+ catch (error) {
286
+ throw new Error(`Failed to check limits: ${error.message}`);
287
+ }
288
+ }
289
+ /**
290
+ * Get health status of the API
291
+ */
292
+ async health() {
293
+ this.log('Checking health');
294
+ try {
295
+ const response = await this.axios.get('/health');
296
+ return response.data;
297
+ }
298
+ catch (error) {
299
+ throw new Error(`Failed to check health: ${error.message}`);
300
+ }
301
+ }
302
+ // ============================================================================
303
+ // WebSocket Methods
304
+ // ============================================================================
305
+ /**
306
+ * Connect to WebSocket server with auto-reconnect support
307
+ */
308
+ async wsConnect() {
309
+ if (this.wsConnecting) {
310
+ this.log('WebSocket connection already in progress');
311
+ return;
312
+ }
313
+ if (this.ws && this.ws.readyState === ws_1.default.OPEN) {
314
+ this.log('WebSocket already connected');
315
+ return;
316
+ }
317
+ this.wsConnecting = true;
318
+ this.wsShouldReconnect = true;
319
+ const wsUrl = this.baseUrl.replace('http://', 'ws://').replace('https://', 'wss://') + '/ws/generation';
320
+ this.log('Connecting to WebSocket', { url: wsUrl });
321
+ return new Promise((resolve, reject) => {
322
+ this.ws = new ws_1.default(wsUrl);
323
+ this.ws.on('open', () => {
324
+ this.log('WebSocket connected, authenticating...');
325
+ this.wsAuthenticate();
326
+ });
327
+ this.ws.on('message', (data) => {
328
+ this.wsHandleMessage(data, resolve);
329
+ });
330
+ this.ws.on('close', (code) => {
331
+ this.wsConnecting = false;
332
+ this.wsHandleClose(code);
333
+ });
334
+ this.ws.on('error', (error) => {
335
+ this.wsConnecting = false;
336
+ this.log('WebSocket error', error.message);
337
+ if (!this.wsAuthenticated) {
338
+ reject(error);
339
+ }
340
+ });
341
+ this.ws.on('pong', () => {
342
+ this.log('Pong received from server');
343
+ });
344
+ });
345
+ }
346
+ /**
347
+ * Authenticate with the WebSocket server
348
+ */
349
+ wsAuthenticate() {
350
+ if (this.ws && this.ws.readyState === ws_1.default.OPEN) {
351
+ this.ws.send(JSON.stringify({
352
+ type: 'auth',
353
+ data: { apiKey: this.apiKey }
354
+ }));
355
+ }
356
+ }
357
+ /**
358
+ * Handle incoming WebSocket messages
359
+ */
360
+ wsHandleMessage(data, connectResolve) {
361
+ try {
362
+ const message = JSON.parse(data.toString());
363
+ this.log('WebSocket message', { type: message.type });
364
+ switch (message.type) {
365
+ case 'auth_success':
366
+ this.wsAuthenticated = true;
367
+ this.wsConnecting = false;
368
+ this.wsReconnectAttempts = 0;
369
+ this.wsStartPing();
370
+ this.log('WebSocket authenticated');
371
+ if (connectResolve) {
372
+ connectResolve();
373
+ }
374
+ break;
375
+ case 'error':
376
+ if (message.data?.code === 'AUTH_ERROR') {
377
+ this.log('WebSocket auth failed', message.data);
378
+ }
379
+ // Handle pending request errors
380
+ this.wsHandleError(message);
381
+ break;
382
+ case 'generation_complete':
383
+ this.wsHandleResult(message);
384
+ break;
385
+ case 'pong':
386
+ // Application-level pong (in addition to WebSocket pong)
387
+ break;
388
+ default:
389
+ this.log('Unhandled WebSocket message type', message.type);
390
+ }
391
+ }
392
+ catch (error) {
393
+ this.log('Failed to parse WebSocket message', error);
394
+ }
395
+ }
396
+ /**
397
+ * Handle generation result
398
+ */
399
+ wsHandleResult(message) {
400
+ const requestId = message.requestId;
401
+ if (requestId && this.wsPendingRequests.has(requestId)) {
402
+ const pending = this.wsPendingRequests.get(requestId);
403
+ this.wsPendingRequests.delete(requestId);
404
+ pending.resolve(message.data);
405
+ }
406
+ }
407
+ /**
408
+ * Handle error response
409
+ */
410
+ wsHandleError(message) {
411
+ const requestId = message.requestId;
412
+ if (requestId && this.wsPendingRequests.has(requestId)) {
413
+ const pending = this.wsPendingRequests.get(requestId);
414
+ this.wsPendingRequests.delete(requestId);
415
+ pending.reject(new Error(message.data?.message || 'Unknown error'));
416
+ }
417
+ }
418
+ /**
419
+ * Start ping interval to keep connection alive
420
+ */
421
+ wsStartPing() {
422
+ this.wsStopPing(); // Clear any existing interval
423
+ this.wsPingInterval = setInterval(() => {
424
+ if (this.ws && this.ws.readyState === ws_1.default.OPEN) {
425
+ this.ws.ping();
426
+ this.log('Ping sent to server');
427
+ }
428
+ }, this.wsOptions.pingIntervalMs);
429
+ }
430
+ /**
431
+ * Stop ping interval
432
+ */
433
+ wsStopPing() {
434
+ if (this.wsPingInterval) {
435
+ clearInterval(this.wsPingInterval);
436
+ this.wsPingInterval = null;
437
+ }
438
+ }
439
+ /**
440
+ * Handle WebSocket close
441
+ */
442
+ async wsHandleClose(code) {
443
+ this.wsStopPing();
444
+ this.wsAuthenticated = false;
445
+ if (!this.wsClosingIntentionally) {
446
+ this.log('WebSocket closed', { code });
447
+ }
448
+ else {
449
+ this.wsClosingIntentionally = false; // Reset for next use
450
+ }
451
+ // Reconnect if not intentional close and auto-reconnect is enabled
452
+ if (code !== 1000 && this.wsShouldReconnect && this.wsOptions.autoReconnect) {
453
+ await this.wsReconnectWithBackoff();
454
+ }
455
+ }
456
+ /**
457
+ * Reconnect with exponential backoff
458
+ */
459
+ async wsReconnectWithBackoff() {
460
+ const delay = Math.min(this.wsOptions.reconnectIntervalMs * Math.pow(2, this.wsReconnectAttempts), this.wsOptions.maxReconnectDelayMs);
461
+ this.wsReconnectAttempts++;
462
+ this.log(`Reconnecting in ${delay}ms (attempt ${this.wsReconnectAttempts})`);
463
+ await new Promise(r => setTimeout(r, delay));
464
+ try {
465
+ await this.wsConnect();
466
+ this.wsRetryPending();
467
+ }
468
+ catch (error) {
469
+ this.log('Reconnection failed', error);
470
+ // Will trigger another reconnect via close handler
471
+ }
472
+ }
473
+ /**
474
+ * Retry pending requests after reconnection
475
+ */
476
+ wsRetryPending() {
477
+ for (const [id, { request }] of this.wsPendingRequests) {
478
+ this.log(`Retrying request ${id}`);
479
+ if (this.ws && this.ws.readyState === ws_1.default.OPEN) {
480
+ this.ws.send(JSON.stringify(request));
481
+ }
482
+ }
483
+ }
484
+ /**
485
+ * Reject all pending requests
486
+ */
487
+ wsRejectPending(reason) {
488
+ for (const [, { reject }] of this.wsPendingRequests) {
489
+ reject(new Error(reason));
490
+ }
491
+ this.wsPendingRequests.clear();
492
+ }
493
+ // Implementation
494
+ async wsSend(type, data, timeout = 180000) {
495
+ if (!this.ws || this.ws.readyState !== ws_1.default.OPEN) {
496
+ throw new Error('WebSocket not connected. Call wsConnect() first.');
497
+ }
498
+ const requestId = `req_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
499
+ const request = { type, data, requestId };
500
+ return new Promise((resolve, reject) => {
501
+ // Set timeout
502
+ const timer = setTimeout(() => {
503
+ this.wsPendingRequests.delete(requestId);
504
+ reject(new Error('Request timeout'));
505
+ }, timeout);
506
+ // Track pending request
507
+ this.wsPendingRequests.set(requestId, {
508
+ request,
509
+ resolve: (value) => {
510
+ clearTimeout(timer);
511
+ resolve(value);
512
+ },
513
+ reject: (reason) => {
514
+ clearTimeout(timer);
515
+ reject(reason);
516
+ }
517
+ });
518
+ // Send request
519
+ this.ws.send(JSON.stringify(request));
520
+ this.log('WebSocket request sent', { type, requestId });
521
+ });
522
+ }
523
+ /**
524
+ * Generate an image via WebSocket (text2img or img2img)
525
+ *
526
+ * @example Text-to-Image
527
+ * ```typescript
528
+ * const result = await client.wsGenerateImage({
529
+ * prompt: 'A sunset over mountains',
530
+ * style: 'realistic',
531
+ * format: 'landscape'
532
+ * });
533
+ * console.log(result.result.imageId);
534
+ * ```
535
+ *
536
+ * @example Image-to-Image (edit)
537
+ * ```typescript
538
+ * const result = await client.wsGenerateImage({
539
+ * imageId: 'existing-image-id',
540
+ * prompt: 'add dramatic lighting'
541
+ * });
542
+ * ```
543
+ */
544
+ async wsGenerateImage(data, timeout) {
545
+ return this.wsSend('generate_image', data, timeout);
546
+ }
547
+ /**
548
+ * Generate a video from an image via WebSocket
549
+ *
550
+ * @example
551
+ * ```typescript
552
+ * const result = await client.wsGenerateVideo({
553
+ * imageId: 'source-image-id',
554
+ * duration: 5,
555
+ * fps: 16
556
+ * });
557
+ * console.log(result.result.videoId);
558
+ * ```
559
+ */
560
+ async wsGenerateVideo(data, timeout) {
561
+ return this.wsSend('generate_video', data, timeout);
562
+ }
563
+ /**
564
+ * Generate text via LLM over WebSocket
565
+ *
566
+ * @example Basic
567
+ * ```typescript
568
+ * const result = await client.wsGenerateLlm({
569
+ * prompt: 'Explain TypeScript'
570
+ * });
571
+ * console.log(result.result.text);
572
+ * ```
573
+ *
574
+ * @example With system prompt and JSON output
575
+ * ```typescript
576
+ * const result = await client.wsGenerateLlm({
577
+ * prompt: 'List 3 programming languages',
578
+ * system: 'You are a helpful assistant',
579
+ * jsonFormat: true,
580
+ * jsonTemplate: { languages: 'array' }
581
+ * });
582
+ * console.log(result.result.json);
583
+ * ```
584
+ */
585
+ async wsGenerateLlm(data, timeout) {
586
+ return this.wsSend('generate_llm', data, timeout);
587
+ }
588
+ /**
589
+ * AI upscale an image via WebSocket (img2ximg)
590
+ * Uses AI to generate prompt automatically - no user prompt needed
591
+ *
592
+ * @example
593
+ * ```typescript
594
+ * const result = await client.wsUpscaleImage({
595
+ * imageId: 'source-image-id',
596
+ * factor: 2
597
+ * });
598
+ * console.log(result.result.imageId, result.result.width, result.result.height);
599
+ * ```
600
+ */
601
+ async wsUpscaleImage(data, timeout) {
602
+ return this.wsSend('generate_upscale', data, timeout);
603
+ }
604
+ /**
605
+ * Check if WebSocket is connected
606
+ */
607
+ wsIsConnected() {
608
+ return this.ws !== null && this.ws.readyState === ws_1.default.OPEN && this.wsAuthenticated;
609
+ }
610
+ /**
611
+ * Close WebSocket connection and cleanup
612
+ */
613
+ async close() {
614
+ this.log('Closing client');
615
+ this.wsShouldReconnect = false;
616
+ this.wsStopPing();
617
+ this.wsRejectPending('Client closed');
618
+ // Mark as intentional close to suppress logging
619
+ this.wsClosingIntentionally = true;
620
+ if (this.ws) {
621
+ this.ws.close(1000, 'Client closed');
622
+ this.ws = null;
623
+ }
624
+ this.wsAuthenticated = false;
625
+ this.wsConnecting = false;
626
+ this.wsReconnectAttempts = 0;
627
+ }
628
+ }
629
+ exports.TwoDAIClient = TwoDAIClient;
630
+ /**
631
+ * Create a new 2DAI SDK client
632
+ *
633
+ * @param apiKey Your 2DAI API key
634
+ * @param options Optional client configuration
635
+ */
636
+ function createClient(apiKey, options) {
637
+ return new TwoDAIClient({
638
+ apiKey,
639
+ ...options
640
+ });
641
+ }
642
+ exports.default = TwoDAIClient;
643
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}