@lidia.poet/sdk 0.2.1 → 0.3.1
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 +1 -1
- package/dist/LidiaSDK.d.ts +12 -1
- package/dist/LidiaSDK.d.ts.map +1 -1
- package/dist/client/LidiaWebSocket.d.ts +62 -0
- package/dist/client/LidiaWebSocket.d.ts.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +396 -2
- package/dist/index.js +397 -2
- package/dist/services/MessageService.d.ts +28 -0
- package/dist/services/MessageService.d.ts.map +1 -1
- package/dist/types/config.d.ts +2 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/message.d.ts +2 -0
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/ws.d.ts +209 -0
- package/dist/types/ws.d.ts.map +1 -0
- package/dist/utils/env.d.ts +1 -0
- package/dist/utils/env.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -41,6 +41,7 @@ __export(index_exports, {
|
|
|
41
41
|
LidiaClient: () => LidiaClient,
|
|
42
42
|
LidiaError: () => LidiaError,
|
|
43
43
|
LidiaSDK: () => LidiaSDK,
|
|
44
|
+
LidiaWebSocket: () => LidiaWebSocket,
|
|
44
45
|
MessageSenderType: () => MessageSenderType,
|
|
45
46
|
MessageService: () => MessageService,
|
|
46
47
|
MessageStatus: () => MessageStatus,
|
|
@@ -342,6 +343,312 @@ var LidiaClient = class {
|
|
|
342
343
|
}
|
|
343
344
|
};
|
|
344
345
|
|
|
346
|
+
// src/client/LidiaWebSocket.ts
|
|
347
|
+
var LidiaWebSocket = class {
|
|
348
|
+
constructor(config) {
|
|
349
|
+
this.ws = null;
|
|
350
|
+
this.state = "disconnected";
|
|
351
|
+
this.pingTimer = null;
|
|
352
|
+
this.reconnectTimer = null;
|
|
353
|
+
this.reconnectAttempts = 0;
|
|
354
|
+
this.intentionalClose = false;
|
|
355
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
356
|
+
this.listeners = /* @__PURE__ */ new Map();
|
|
357
|
+
this.wildcardListeners = /* @__PURE__ */ new Set();
|
|
358
|
+
this.config = {
|
|
359
|
+
wsUrl: config.wsUrl,
|
|
360
|
+
accessToken: config.accessToken,
|
|
361
|
+
debug: config.debug ?? false,
|
|
362
|
+
pingInterval: config.pingInterval ?? 3e4,
|
|
363
|
+
reconnectDelay: config.reconnectDelay ?? 2e3,
|
|
364
|
+
maxReconnectAttempts: config.maxReconnectAttempts ?? 10
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
/** Current connection state */
|
|
368
|
+
getState() {
|
|
369
|
+
return this.state;
|
|
370
|
+
}
|
|
371
|
+
/** Connect to the WebSocket server */
|
|
372
|
+
connect() {
|
|
373
|
+
if (this.state !== "disconnected") return;
|
|
374
|
+
this.intentionalClose = false;
|
|
375
|
+
this.state = "connecting";
|
|
376
|
+
this.log("Connecting to", this.config.wsUrl);
|
|
377
|
+
this.ws = new WebSocket(this.config.wsUrl, [
|
|
378
|
+
"Authorization",
|
|
379
|
+
this.config.accessToken
|
|
380
|
+
]);
|
|
381
|
+
this.ws.onopen = () => {
|
|
382
|
+
this.state = "connected";
|
|
383
|
+
this.reconnectAttempts = 0;
|
|
384
|
+
this.startPing();
|
|
385
|
+
this.log("Connected");
|
|
386
|
+
this.emit("_connected", {});
|
|
387
|
+
};
|
|
388
|
+
this.ws.onmessage = (event) => {
|
|
389
|
+
this.handleMessage(event);
|
|
390
|
+
};
|
|
391
|
+
this.ws.onclose = () => {
|
|
392
|
+
this.cleanup();
|
|
393
|
+
this.log("Disconnected");
|
|
394
|
+
this.emit("_disconnected", {});
|
|
395
|
+
if (!this.intentionalClose) {
|
|
396
|
+
this.scheduleReconnect();
|
|
397
|
+
}
|
|
398
|
+
};
|
|
399
|
+
this.ws.onerror = (error) => {
|
|
400
|
+
this.log("WebSocket error", error);
|
|
401
|
+
this.emit("_error", { error });
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
/** Disconnect from the WebSocket server */
|
|
405
|
+
disconnect() {
|
|
406
|
+
this.intentionalClose = true;
|
|
407
|
+
this.cleanup();
|
|
408
|
+
if (this.ws) {
|
|
409
|
+
this.ws.close();
|
|
410
|
+
this.ws = null;
|
|
411
|
+
}
|
|
412
|
+
this.state = "disconnected";
|
|
413
|
+
}
|
|
414
|
+
/** Update the access token (e.g. after refresh) */
|
|
415
|
+
updateToken(accessToken) {
|
|
416
|
+
this.config.accessToken = accessToken;
|
|
417
|
+
if (this.state === "connected") {
|
|
418
|
+
this.disconnect();
|
|
419
|
+
this.connect();
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
/** Subscribe to a specific event type */
|
|
423
|
+
on(action, listener) {
|
|
424
|
+
if (!this.listeners.has(action)) {
|
|
425
|
+
this.listeners.set(action, /* @__PURE__ */ new Set());
|
|
426
|
+
}
|
|
427
|
+
this.listeners.get(action).add(listener);
|
|
428
|
+
return () => {
|
|
429
|
+
var _a;
|
|
430
|
+
(_a = this.listeners.get(action)) == null ? void 0 : _a.delete(listener);
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
/** Subscribe to all events */
|
|
434
|
+
onAny(listener) {
|
|
435
|
+
this.wildcardListeners.add(listener);
|
|
436
|
+
return () => {
|
|
437
|
+
this.wildcardListeners.delete(listener);
|
|
438
|
+
};
|
|
439
|
+
}
|
|
440
|
+
/** Subscribe to internal lifecycle events */
|
|
441
|
+
onState(event, listener) {
|
|
442
|
+
const wrappedListener = listener;
|
|
443
|
+
if (!this.listeners.has(event)) {
|
|
444
|
+
this.listeners.set(event, /* @__PURE__ */ new Set());
|
|
445
|
+
}
|
|
446
|
+
this.listeners.get(event).add(wrappedListener);
|
|
447
|
+
return () => {
|
|
448
|
+
var _a;
|
|
449
|
+
(_a = this.listeners.get(event)) == null ? void 0 : _a.delete(wrappedListener);
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Wait for a specific event matching a filter.
|
|
454
|
+
* Resolves with the first matching event, or rejects on timeout.
|
|
455
|
+
*/
|
|
456
|
+
waitFor(action, filter, timeoutMs = 6e4) {
|
|
457
|
+
return new Promise((resolve, reject) => {
|
|
458
|
+
const timer = setTimeout(() => {
|
|
459
|
+
unsub();
|
|
460
|
+
reject(new Error(`Timeout waiting for event "${action}"`));
|
|
461
|
+
}, timeoutMs);
|
|
462
|
+
const unsub = this.on(action, (event) => {
|
|
463
|
+
if (!filter || filter(event)) {
|
|
464
|
+
clearTimeout(timer);
|
|
465
|
+
unsub();
|
|
466
|
+
resolve(event);
|
|
467
|
+
}
|
|
468
|
+
});
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* Collect streaming delta events for a specific message into an AsyncGenerator.
|
|
473
|
+
* Yields each delta text chunk and returns the full accumulated text.
|
|
474
|
+
*/
|
|
475
|
+
async *streamMessage(conversationId, messageId, timeoutMs = 12e4) {
|
|
476
|
+
let accumulated = "";
|
|
477
|
+
let done = false;
|
|
478
|
+
let error = null;
|
|
479
|
+
const chunks = [];
|
|
480
|
+
let resolve = null;
|
|
481
|
+
const onChunk = () => {
|
|
482
|
+
if (resolve) {
|
|
483
|
+
resolve();
|
|
484
|
+
resolve = null;
|
|
485
|
+
}
|
|
486
|
+
};
|
|
487
|
+
const matchesMessage = (e) => e.conversationId === conversationId && e.messageId === messageId;
|
|
488
|
+
const unsubs = [
|
|
489
|
+
this.on("streaming.message.delta", (e) => {
|
|
490
|
+
if (matchesMessage(e)) {
|
|
491
|
+
chunks.push(e.eventText);
|
|
492
|
+
onChunk();
|
|
493
|
+
}
|
|
494
|
+
}),
|
|
495
|
+
this.on("streaming.message.stop", (e) => {
|
|
496
|
+
if (matchesMessage(e)) {
|
|
497
|
+
done = true;
|
|
498
|
+
onChunk();
|
|
499
|
+
}
|
|
500
|
+
}),
|
|
501
|
+
this.on("streaming.message.error", (e) => {
|
|
502
|
+
if (matchesMessage(e)) {
|
|
503
|
+
error = e.error;
|
|
504
|
+
done = true;
|
|
505
|
+
onChunk();
|
|
506
|
+
}
|
|
507
|
+
}),
|
|
508
|
+
this.on("streaming.smart_answer.delta", (e) => {
|
|
509
|
+
if (matchesMessage(e)) {
|
|
510
|
+
chunks.push(e.eventText);
|
|
511
|
+
onChunk();
|
|
512
|
+
}
|
|
513
|
+
}),
|
|
514
|
+
this.on("streaming.smart_answer.stop", (e) => {
|
|
515
|
+
if (matchesMessage(e)) {
|
|
516
|
+
done = true;
|
|
517
|
+
onChunk();
|
|
518
|
+
}
|
|
519
|
+
}),
|
|
520
|
+
this.on("streaming.smart_answer.error", (e) => {
|
|
521
|
+
if (matchesMessage(e)) {
|
|
522
|
+
error = e.eventText;
|
|
523
|
+
done = true;
|
|
524
|
+
onChunk();
|
|
525
|
+
}
|
|
526
|
+
}),
|
|
527
|
+
this.on("streaming.legal_search.message_delta", (e) => {
|
|
528
|
+
if (matchesMessage(e)) {
|
|
529
|
+
chunks.push(e.eventText);
|
|
530
|
+
onChunk();
|
|
531
|
+
}
|
|
532
|
+
}),
|
|
533
|
+
this.on("streaming.legal_search.stop", (e) => {
|
|
534
|
+
if (matchesMessage(e)) {
|
|
535
|
+
done = true;
|
|
536
|
+
onChunk();
|
|
537
|
+
}
|
|
538
|
+
}),
|
|
539
|
+
this.on("streaming.legal_search.error", (e) => {
|
|
540
|
+
if (matchesMessage(e)) {
|
|
541
|
+
done = true;
|
|
542
|
+
error = "Legal search error";
|
|
543
|
+
onChunk();
|
|
544
|
+
}
|
|
545
|
+
}),
|
|
546
|
+
this.on("conversation.message.new", (e) => {
|
|
547
|
+
if (matchesMessage(e)) {
|
|
548
|
+
done = true;
|
|
549
|
+
onChunk();
|
|
550
|
+
}
|
|
551
|
+
})
|
|
552
|
+
];
|
|
553
|
+
const timeout = setTimeout(() => {
|
|
554
|
+
error = "Stream timeout";
|
|
555
|
+
done = true;
|
|
556
|
+
onChunk();
|
|
557
|
+
}, timeoutMs);
|
|
558
|
+
try {
|
|
559
|
+
while (!done) {
|
|
560
|
+
if (chunks.length === 0) {
|
|
561
|
+
await new Promise((r) => {
|
|
562
|
+
resolve = r;
|
|
563
|
+
});
|
|
564
|
+
}
|
|
565
|
+
while (chunks.length > 0) {
|
|
566
|
+
const chunk = chunks.shift();
|
|
567
|
+
accumulated += chunk;
|
|
568
|
+
yield chunk;
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
if (error) {
|
|
572
|
+
throw new Error(error);
|
|
573
|
+
}
|
|
574
|
+
return accumulated;
|
|
575
|
+
} finally {
|
|
576
|
+
clearTimeout(timeout);
|
|
577
|
+
unsubs.forEach((unsub) => unsub());
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
// ── Private ──────────────────────────────────────────────
|
|
581
|
+
handleMessage(event) {
|
|
582
|
+
let data;
|
|
583
|
+
try {
|
|
584
|
+
data = JSON.parse(String(event.data));
|
|
585
|
+
} catch {
|
|
586
|
+
this.log("Failed to parse WS message:", event.data);
|
|
587
|
+
return;
|
|
588
|
+
}
|
|
589
|
+
if (!data.action) return;
|
|
590
|
+
this.log("Event:", data.action);
|
|
591
|
+
const actionListeners = this.listeners.get(data.action);
|
|
592
|
+
if (actionListeners) {
|
|
593
|
+
for (const listener of actionListeners) {
|
|
594
|
+
listener(data);
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
for (const listener of this.wildcardListeners) {
|
|
598
|
+
listener(data);
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
emit(action, event) {
|
|
602
|
+
const actionListeners = this.listeners.get(action);
|
|
603
|
+
if (actionListeners) {
|
|
604
|
+
for (const listener of actionListeners) {
|
|
605
|
+
listener(event);
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
startPing() {
|
|
610
|
+
this.stopPing();
|
|
611
|
+
this.pingTimer = setInterval(() => {
|
|
612
|
+
var _a;
|
|
613
|
+
if (((_a = this.ws) == null ? void 0 : _a.readyState) === WebSocket.OPEN) {
|
|
614
|
+
this.ws.send(JSON.stringify({ action: "ping" }));
|
|
615
|
+
}
|
|
616
|
+
}, this.config.pingInterval);
|
|
617
|
+
}
|
|
618
|
+
stopPing() {
|
|
619
|
+
if (this.pingTimer) {
|
|
620
|
+
clearInterval(this.pingTimer);
|
|
621
|
+
this.pingTimer = null;
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
cleanup() {
|
|
625
|
+
this.stopPing();
|
|
626
|
+
if (this.reconnectTimer) {
|
|
627
|
+
clearTimeout(this.reconnectTimer);
|
|
628
|
+
this.reconnectTimer = null;
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
scheduleReconnect() {
|
|
632
|
+
if (this.config.maxReconnectAttempts === 0) return;
|
|
633
|
+
if (this.reconnectAttempts >= this.config.maxReconnectAttempts) {
|
|
634
|
+
this.log("Max reconnect attempts reached");
|
|
635
|
+
return;
|
|
636
|
+
}
|
|
637
|
+
this.reconnectAttempts++;
|
|
638
|
+
const delay = this.config.reconnectDelay * Math.pow(2, this.reconnectAttempts - 1);
|
|
639
|
+
this.log(`Reconnecting in ${delay}ms (attempt ${this.reconnectAttempts}/${this.config.maxReconnectAttempts})`);
|
|
640
|
+
this.reconnectTimer = setTimeout(() => {
|
|
641
|
+
this.state = "disconnected";
|
|
642
|
+
this.connect();
|
|
643
|
+
}, delay);
|
|
644
|
+
}
|
|
645
|
+
log(...args) {
|
|
646
|
+
if (this.config.debug) {
|
|
647
|
+
console.log("[Lidia WS]", ...args);
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
};
|
|
651
|
+
|
|
345
652
|
// src/services/AuthorizationService.ts
|
|
346
653
|
var AuthorizationService = class {
|
|
347
654
|
// Refresh 5 minutes before expiry
|
|
@@ -935,6 +1242,11 @@ var LegisratioService = class {
|
|
|
935
1242
|
var MessageService = class {
|
|
936
1243
|
constructor(client) {
|
|
937
1244
|
this.client = client;
|
|
1245
|
+
this.ws = null;
|
|
1246
|
+
}
|
|
1247
|
+
/** Inject WebSocket reference (called by LidiaSDK) */
|
|
1248
|
+
setWebSocket(ws) {
|
|
1249
|
+
this.ws = ws;
|
|
938
1250
|
}
|
|
939
1251
|
/** List messages with pagination */
|
|
940
1252
|
async find(params) {
|
|
@@ -969,10 +1281,45 @@ var MessageService = class {
|
|
|
969
1281
|
async getUrlRegistry(id, urlRegistryKey) {
|
|
970
1282
|
return this.client.get(`/messages/${id}/url-registry/${urlRegistryKey}`);
|
|
971
1283
|
}
|
|
1284
|
+
/** Get message status (lightweight polling endpoint) */
|
|
1285
|
+
async getStatus(id) {
|
|
1286
|
+
return this.client.get(`/messages/${id}/status`);
|
|
1287
|
+
}
|
|
972
1288
|
/** Export a specific message */
|
|
973
1289
|
async export(id, exportType, exportMedium) {
|
|
974
1290
|
return this.client.post(`/messages/${id}/export/${exportType}/${exportMedium}`);
|
|
975
1291
|
}
|
|
1292
|
+
/**
|
|
1293
|
+
* Create a message and stream the response via WebSocket.
|
|
1294
|
+
* Yields each text chunk as it arrives. The return value is the full accumulated text.
|
|
1295
|
+
*
|
|
1296
|
+
* Requires an active WebSocket connection (sdk.connectWebSocket()).
|
|
1297
|
+
*
|
|
1298
|
+
* @example
|
|
1299
|
+
* ```ts
|
|
1300
|
+
* await sdk.connectWebSocket();
|
|
1301
|
+
* const stream = sdk.messages.createAndStream({
|
|
1302
|
+
* conversationId: 'conv-123',
|
|
1303
|
+
* conversationType: 'smartAnswer',
|
|
1304
|
+
* message: 'What are the key terms?',
|
|
1305
|
+
* relevantDocumentIds: ['doc-1'],
|
|
1306
|
+
* });
|
|
1307
|
+
*
|
|
1308
|
+
* for await (const chunk of stream) {
|
|
1309
|
+
* process.stdout.write(chunk);
|
|
1310
|
+
* }
|
|
1311
|
+
* ```
|
|
1312
|
+
*/
|
|
1313
|
+
async *createAndStream(data, timeoutMs = 12e4) {
|
|
1314
|
+
if (!this.ws) {
|
|
1315
|
+
throw new Error(
|
|
1316
|
+
"WebSocket not connected. Call sdk.connectWebSocket() before using createAndStream()."
|
|
1317
|
+
);
|
|
1318
|
+
}
|
|
1319
|
+
const message = await this.create(data);
|
|
1320
|
+
yield* this.ws.streamMessage(data.conversationId, message.id, timeoutMs);
|
|
1321
|
+
return "";
|
|
1322
|
+
}
|
|
976
1323
|
};
|
|
977
1324
|
|
|
978
1325
|
// src/services/NotificationService.ts
|
|
@@ -1172,16 +1519,19 @@ var WorkflowService = class {
|
|
|
1172
1519
|
var ENVIRONMENT_PRESETS = {
|
|
1173
1520
|
["Production" /* PRODUCTION */]: {
|
|
1174
1521
|
baseUrl: "https://api.lidiatech.ai",
|
|
1522
|
+
wsUrl: "wss://ws.lidiatech.ai",
|
|
1175
1523
|
region: "eu-central-1",
|
|
1176
1524
|
clientId: "10lnfbvtu9lrg1ujeemf2uk0sa"
|
|
1177
1525
|
},
|
|
1178
1526
|
["Development" /* DEVELOPMENT */]: {
|
|
1179
1527
|
baseUrl: "https://api.dev.lidiatech.ai",
|
|
1528
|
+
wsUrl: "wss://ws.dev.lidiatech.ai",
|
|
1180
1529
|
region: "eu-west-1",
|
|
1181
1530
|
clientId: "4uep6n7bmk8o1b7hs7e5ts7u9"
|
|
1182
1531
|
},
|
|
1183
1532
|
["Staging" /* STAGING */]: {
|
|
1184
1533
|
baseUrl: "https://api.staging.lidiatech.ai",
|
|
1534
|
+
wsUrl: "wss://ws.staging.lidiatech.ai",
|
|
1185
1535
|
region: "eu-west-1",
|
|
1186
1536
|
clientId: "5og664h80v1tv1md0fsgtmln2u"
|
|
1187
1537
|
}
|
|
@@ -1214,8 +1564,10 @@ function isNodeEnvironment() {
|
|
|
1214
1564
|
|
|
1215
1565
|
// src/LidiaSDK.ts
|
|
1216
1566
|
var LidiaSDK = class {
|
|
1217
|
-
constructor(config) {
|
|
1218
|
-
|
|
1567
|
+
constructor(config = {}) {
|
|
1568
|
+
/** WebSocket client for real-time events (available after connectWebSocket()) */
|
|
1569
|
+
this.ws = null;
|
|
1570
|
+
const mergedConfig = this.mergedConfig = this.mergeConfigWithEnv(config);
|
|
1219
1571
|
this.client = new LidiaClient(mergedConfig);
|
|
1220
1572
|
this.cases = new CaseService(this.client);
|
|
1221
1573
|
this.conversations = new ConversationService(this.client);
|
|
@@ -1278,6 +1630,13 @@ var LidiaSDK = class {
|
|
|
1278
1630
|
}
|
|
1279
1631
|
}
|
|
1280
1632
|
}
|
|
1633
|
+
if (!mergedConfig.wsUrl) {
|
|
1634
|
+
if (isNodeEnvironment()) {
|
|
1635
|
+
mergedConfig.wsUrl = process.env["LIDIA_WS_URL"] ?? preset.wsUrl;
|
|
1636
|
+
} else {
|
|
1637
|
+
mergedConfig.wsUrl = preset.wsUrl;
|
|
1638
|
+
}
|
|
1639
|
+
}
|
|
1281
1640
|
if (!mergedConfig.baseUrl) {
|
|
1282
1641
|
mergedConfig.baseUrl = preset.baseUrl;
|
|
1283
1642
|
}
|
|
@@ -1353,6 +1712,39 @@ var LidiaSDK = class {
|
|
|
1353
1712
|
getClient() {
|
|
1354
1713
|
return this.client;
|
|
1355
1714
|
}
|
|
1715
|
+
/**
|
|
1716
|
+
* Connect to Lidia WebSocket for real-time events (streaming messages, document updates, etc.).
|
|
1717
|
+
* Requires authentication (call login() or waitForAuthentication() first).
|
|
1718
|
+
*/
|
|
1719
|
+
connectWebSocket(options) {
|
|
1720
|
+
const tokens = this.getAuthTokens();
|
|
1721
|
+
if (!(tokens == null ? void 0 : tokens.accessToken)) {
|
|
1722
|
+
throw new Error("Cannot connect WebSocket: not authenticated. Call login() or waitForAuthentication() first.");
|
|
1723
|
+
}
|
|
1724
|
+
const wsUrl = this.mergedConfig.wsUrl;
|
|
1725
|
+
if (!wsUrl) {
|
|
1726
|
+
throw new Error("WebSocket URL not configured. Set wsUrl in config or LIDIA_WS_URL env var.");
|
|
1727
|
+
}
|
|
1728
|
+
if (this.ws) {
|
|
1729
|
+
this.ws.disconnect();
|
|
1730
|
+
}
|
|
1731
|
+
this.ws = new LidiaWebSocket({
|
|
1732
|
+
wsUrl,
|
|
1733
|
+
accessToken: tokens.accessToken,
|
|
1734
|
+
debug: this.mergedConfig.debug,
|
|
1735
|
+
...options
|
|
1736
|
+
});
|
|
1737
|
+
this.messages.setWebSocket(this.ws);
|
|
1738
|
+
this.ws.connect();
|
|
1739
|
+
return this.ws;
|
|
1740
|
+
}
|
|
1741
|
+
/** Disconnect WebSocket */
|
|
1742
|
+
disconnectWebSocket() {
|
|
1743
|
+
if (this.ws) {
|
|
1744
|
+
this.ws.disconnect();
|
|
1745
|
+
this.ws = null;
|
|
1746
|
+
}
|
|
1747
|
+
}
|
|
1356
1748
|
};
|
|
1357
1749
|
|
|
1358
1750
|
// src/types/case.ts
|
|
@@ -1426,6 +1818,8 @@ var MessageSenderType = /* @__PURE__ */ ((MessageSenderType2) => {
|
|
|
1426
1818
|
})(MessageSenderType || {});
|
|
1427
1819
|
var MessageStatus = /* @__PURE__ */ ((MessageStatus2) => {
|
|
1428
1820
|
MessageStatus2["PROCESSING"] = "PROCESSING";
|
|
1821
|
+
MessageStatus2["STREAMING"] = "STREAMING";
|
|
1822
|
+
MessageStatus2["LOADING_SOURCES"] = "LOADING_SOURCES";
|
|
1429
1823
|
MessageStatus2["DONE"] = "DONE";
|
|
1430
1824
|
MessageStatus2["FAILED"] = "FAILED";
|
|
1431
1825
|
MessageStatus2["CANCELED"] = "CANCELED";
|
|
@@ -1507,6 +1901,7 @@ var ValidationError = class _ValidationError extends Error {
|
|
|
1507
1901
|
LidiaClient,
|
|
1508
1902
|
LidiaError,
|
|
1509
1903
|
LidiaSDK,
|
|
1904
|
+
LidiaWebSocket,
|
|
1510
1905
|
MessageSenderType,
|
|
1511
1906
|
MessageService,
|
|
1512
1907
|
MessageStatus,
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { LidiaClient } from '../client/LidiaClient';
|
|
2
|
+
import { LidiaWebSocket } from '../client/LidiaWebSocket';
|
|
2
3
|
import { MessageDto, MessageListResponseDto, ShowMessageResponse, MessageQueryParams, CreateMessageDto, ContinueMessageDto, PatchMessageDto, CitationDto } from '../types/message';
|
|
3
4
|
export declare class MessageService {
|
|
4
5
|
private client;
|
|
6
|
+
private ws;
|
|
5
7
|
constructor(client: LidiaClient);
|
|
8
|
+
/** Inject WebSocket reference (called by LidiaSDK) */
|
|
9
|
+
setWebSocket(ws: LidiaWebSocket): void;
|
|
6
10
|
/** List messages with pagination */
|
|
7
11
|
find(params: MessageQueryParams): Promise<MessageListResponseDto>;
|
|
8
12
|
/** Get message by ID */
|
|
@@ -21,7 +25,31 @@ export declare class MessageService {
|
|
|
21
25
|
getUrlRegistry(id: string, urlRegistryKey: string): Promise<{
|
|
22
26
|
url: string;
|
|
23
27
|
}>;
|
|
28
|
+
/** Get message status (lightweight polling endpoint) */
|
|
29
|
+
getStatus(id: string): Promise<ShowMessageResponse>;
|
|
24
30
|
/** Export a specific message */
|
|
25
31
|
export(id: string, exportType: string, exportMedium: string): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Create a message and stream the response via WebSocket.
|
|
34
|
+
* Yields each text chunk as it arrives. The return value is the full accumulated text.
|
|
35
|
+
*
|
|
36
|
+
* Requires an active WebSocket connection (sdk.connectWebSocket()).
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* await sdk.connectWebSocket();
|
|
41
|
+
* const stream = sdk.messages.createAndStream({
|
|
42
|
+
* conversationId: 'conv-123',
|
|
43
|
+
* conversationType: 'smartAnswer',
|
|
44
|
+
* message: 'What are the key terms?',
|
|
45
|
+
* relevantDocumentIds: ['doc-1'],
|
|
46
|
+
* });
|
|
47
|
+
*
|
|
48
|
+
* for await (const chunk of stream) {
|
|
49
|
+
* process.stdout.write(chunk);
|
|
50
|
+
* }
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
createAndStream(data: CreateMessageDto, timeoutMs?: number): AsyncGenerator<string, string, undefined>;
|
|
26
54
|
}
|
|
27
55
|
//# sourceMappingURL=MessageService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageService.d.ts","sourceRoot":"","sources":["../../src/services/MessageService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"MessageService.d.ts","sourceRoot":"","sources":["../../src/services/MessageService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,UAAU,EACV,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,cAAc;IAGb,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,EAAE,CAA+B;gBAErB,MAAM,EAAE,WAAW;IAEvC,sDAAsD;IACtD,YAAY,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;IAItC,oCAAoC;IAC9B,IAAI,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAKvE,wBAAwB;IAClB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAIvD,2BAA2B;IACrB,MAAM,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAIzD,kCAAkC;IAC5B,eAAe,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IAIpE,6CAA6C;IACvC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D,yCAAyC;IACnC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,uCAAuC;IACjC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAIxE,6CAA6C;IACvC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAIlF,wDAAwD;IAClD,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAIzD,gCAAgC;IAC1B,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjF;;;;;;;;;;;;;;;;;;;;OAoBG;IACI,eAAe,CACpB,IAAI,EAAE,gBAAgB,EACtB,SAAS,SAAU,GAClB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;CAe7C"}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ export declare enum LidiaEnvironment {
|
|
|
7
7
|
export interface LidiaConfig {
|
|
8
8
|
/** Base URL for the Lidia API */
|
|
9
9
|
baseUrl?: string;
|
|
10
|
+
/** WebSocket URL for real-time events (auto-resolved from environment if not set) */
|
|
11
|
+
wsUrl?: string;
|
|
10
12
|
/** Deployment environment (Production, Development, Staging). Defaults to Production. */
|
|
11
13
|
environment?: LidiaEnvironment;
|
|
12
14
|
/** OAuth access token (set automatically after login) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,oBAAY,gBAAgB;IAC1B,UAAU,eAAe;IACzB,WAAW,gBAAgB;IAC3B,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yFAAyF;IACzF,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,OAAO,CAAC,EAAE;QACR,iBAAiB;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,wBAAwB;QACxB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,0BAA0B;IAC1B,KAAK,CAAC,EAAE;QACN,+BAA+B;QAC/B,QAAQ,EAAE,MAAM,CAAC;QACjB,4CAA4C;QAC5C,KAAK,EAAE,MAAM,CAAC;QACd,0CAA0C;QAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,oBAAY,gBAAgB;IAC1B,UAAU,eAAe;IACzB,WAAW,gBAAgB;IAC3B,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qFAAqF;IACrF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yFAAyF;IACzF,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,OAAO,CAAC,EAAE;QACR,iBAAiB;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,wBAAwB;QACxB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,0BAA0B;IAC1B,KAAK,CAAC,EAAE;QACN,+BAA+B;QAC/B,QAAQ,EAAE,MAAM,CAAC;QACjB,4CAA4C;QAC5C,KAAK,EAAE,MAAM,CAAC;QACd,0CAA0C;QAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH"}
|
package/dist/types/message.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/types/message.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/types/message.ts"],"names":[],"mappings":"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"}
|