@aikaara/chat-sdk 0.2.0 → 0.3.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/AikaaraChatClient-Cqbcd1jb.mjs +11538 -0
- package/dist/AikaaraChatClient-kAu65hX-.cjs +8 -0
- package/dist/cdn/aikaara-chat.iife.js +117 -24
- package/dist/headless.cjs +1 -8
- package/dist/headless.d.ts +275 -5
- package/dist/headless.mjs +85 -10531
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +291 -5
- package/dist/index.mjs +29 -24
- package/dist/ui.cjs +111 -18
- package/dist/ui.d.ts +294 -5
- package/dist/ui.mjs +310 -88
- package/package.json +1 -1
- package/dist/AikaaraChatClient-C4lWcRsS.mjs +0 -611
- package/dist/AikaaraChatClient-ChZ2bL9f.cjs +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./AikaaraChatClient-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./AikaaraChatClient-kAu65hX-.cjs"),n=require("./headless.cjs"),a=require("./ui.cjs");function c(t){a.registerComponents();const r=document.createElement("aikaara-chat-widget"),o={baseUrl:"base-url",userToken:"user-token",apiKey:"api-key",title:"title",subtitle:"subtitle",theme:"theme",primaryColor:"primary-color",position:"position",width:"width",height:"height",placeholder:"placeholder",welcomeMessage:"welcome-message",avatarUrl:"avatar-url"};for(const[s,l]of Object.entries(o)){const i=t[s];i!=null&&r.setAttribute(l,String(i))}return r.configure(t),document.body.appendChild(r),r}function d(){const t=document.querySelector("aikaara-chat-widget");t&&t.remove()}exports.ActionCableClient=e.ActionCableClient;exports.AikaaraChatClient=e.AikaaraChatClient;exports.ApiClient=e.ApiClient;exports.ChannelSubscription=e.ChannelSubscription;exports.ConnectionManager=e.ConnectionManager;exports.ConversationManager=e.ConversationManager;exports.EventEmitter=e.EventEmitter;exports.MessageStore=e.MessageStore;exports.TiledeskTransport=e.TiledeskTransport;exports.extractTiledeskFileEnvelope=e.extractTiledeskFileEnvelope;exports.inferTiledeskRole=e.inferTiledeskRole;exports.isTiledeskSelfEcho=e.isTiledeskSelfEcho;exports.parseTiledeskTemplate=e.parseTiledeskTemplate;exports.FormBridge=n.FormBridge;exports.createFetchUploadAdapter=n.createFetchUploadAdapter;exports.AikaaraChatBubble=a.AikaaraChatBubble;exports.AikaaraChatHeader=a.AikaaraChatHeader;exports.AikaaraChatInput=a.AikaaraChatInput;exports.AikaaraChatWidget=a.AikaaraChatWidget;exports.AikaaraErrorBanner=a.AikaaraErrorBanner;exports.AikaaraMessageBubble=a.AikaaraMessageBubble;exports.AikaaraMessageList=a.AikaaraMessageList;exports.AikaaraStreamingMessage=a.AikaaraStreamingMessage;exports.AikaaraTypingIndicator=a.AikaaraTypingIndicator;exports.registerComponents=a.registerComponents;exports.mount=c;exports.unmount=d;
|
package/dist/index.d.ts
CHANGED
|
@@ -41,14 +41,39 @@ export declare class AikaaraChatBubble extends HTMLElement {
|
|
|
41
41
|
|
|
42
42
|
export declare class AikaaraChatClient extends EventEmitter<ChatEvents> {
|
|
43
43
|
private connection;
|
|
44
|
+
private tiledesk;
|
|
44
45
|
private api;
|
|
45
46
|
private messageStore;
|
|
46
47
|
private conversationManager;
|
|
47
48
|
private subscription;
|
|
48
49
|
private config;
|
|
49
|
-
|
|
50
|
+
private mode;
|
|
51
|
+
private uploadAdapter;
|
|
52
|
+
private tiledeskUnsubs;
|
|
53
|
+
constructor(config: ChatClientConfig, opts?: {
|
|
54
|
+
uploadAdapter?: UploadAdapter;
|
|
55
|
+
});
|
|
56
|
+
private usesAikaara;
|
|
57
|
+
private usesTiledesk;
|
|
58
|
+
private initTiledeskTransport;
|
|
50
59
|
connect(): Promise<void>;
|
|
51
60
|
sendMessage(content: string): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Upload a file via the configured UploadAdapter (client-side: file goes
|
|
63
|
+
* to the tenant's own backend, never through Aikaara). Then publish the
|
|
64
|
+
* Tiledesk file-message envelope so hooks_controller picks it up.
|
|
65
|
+
*/
|
|
66
|
+
sendFile(file: File | Blob, opts?: {
|
|
67
|
+
caption?: string;
|
|
68
|
+
}): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Trigger Tiledesk's CHAT_INITIATED event — required to kick off a bot flow
|
|
71
|
+
* for newly-created Tiledesk request groups.
|
|
72
|
+
*/
|
|
73
|
+
initiateTiledeskChat(extraAttributes?: Record<string, unknown>): void;
|
|
74
|
+
/** Mark a Tiledesk message as read (publishes status=300 update). */
|
|
75
|
+
markTiledeskRead(messageId: string): void;
|
|
76
|
+
setUploadAdapter(adapter: UploadAdapter): void;
|
|
52
77
|
sendUserEvent(eventKey: string, value?: object, source?: string): Promise<void>;
|
|
53
78
|
loadHistory(): Promise<Message[]>;
|
|
54
79
|
get messages(): Message[];
|
|
@@ -73,6 +98,8 @@ export declare class AikaaraChatClient extends EventEmitter<ChatEvents> {
|
|
|
73
98
|
*/
|
|
74
99
|
setContext(context: AppContext): Promise<void>;
|
|
75
100
|
disconnect(): Promise<void>;
|
|
101
|
+
private handleTiledeskMessage;
|
|
102
|
+
private handleTiledeskStatusUpdate;
|
|
76
103
|
/**
|
|
77
104
|
* Parse structured action results from tool execution output.
|
|
78
105
|
* When the agent calls tools like `edit_current_entity`, `save_current_entity`,
|
|
@@ -120,6 +147,7 @@ export declare class AikaaraChatWidget extends HTMLElement {
|
|
|
120
147
|
attributeChangedCallback(_name: string, oldVal: string, newVal: string): void;
|
|
121
148
|
configure(config: Partial<WidgetConfig>): void;
|
|
122
149
|
private getConfig;
|
|
150
|
+
setUploadAdapter(adapter: UploadAdapter): void;
|
|
123
151
|
private render;
|
|
124
152
|
private initController;
|
|
125
153
|
sendUserEvent(eventKey: string, value?: Record<string, unknown>, source?: string): void;
|
|
@@ -139,11 +167,19 @@ export declare class AikaaraErrorBanner extends HTMLElement {
|
|
|
139
167
|
|
|
140
168
|
export declare class AikaaraMessageBubble extends HTMLElement {
|
|
141
169
|
private shadow;
|
|
170
|
+
private templatePayload;
|
|
171
|
+
private attachments;
|
|
142
172
|
static get observedAttributes(): string[];
|
|
143
173
|
constructor();
|
|
144
174
|
connectedCallback(): void;
|
|
145
175
|
attributeChangedCallback(): void;
|
|
176
|
+
setTemplatePayload(payload: unknown): void;
|
|
177
|
+
setAttachments(attachments: Array<{
|
|
178
|
+
fileName: string;
|
|
179
|
+
fileUrl: string;
|
|
180
|
+
}>): void;
|
|
146
181
|
private render;
|
|
182
|
+
private renderAttachments;
|
|
147
183
|
}
|
|
148
184
|
|
|
149
185
|
export declare class AikaaraMessageList extends HTMLElement {
|
|
@@ -162,6 +198,13 @@ export declare class AikaaraMessageList extends HTMLElement {
|
|
|
162
198
|
showTypingIndicator(): void;
|
|
163
199
|
removeTypingIndicator(): void;
|
|
164
200
|
private appendMessageElement;
|
|
201
|
+
/**
|
|
202
|
+
* Replace an existing rendered message (matched by id or externalId) in place.
|
|
203
|
+
* Used when a Tiledesk self-echo reconciles with an optimistic bubble or when
|
|
204
|
+
* a status update flips delivered → read.
|
|
205
|
+
*/
|
|
206
|
+
upsertMessage(message: Message): void;
|
|
207
|
+
private findRenderedMessage;
|
|
165
208
|
private scrollToBottom;
|
|
166
209
|
private formatTime;
|
|
167
210
|
}
|
|
@@ -239,11 +282,30 @@ export declare interface ChatClientConfig extends ConnectionConfig {
|
|
|
239
282
|
conversationId?: string;
|
|
240
283
|
systemPromptId?: number;
|
|
241
284
|
channel?: 'widget' | 'api' | 'sidekick';
|
|
285
|
+
/**
|
|
286
|
+
* Transport selection.
|
|
287
|
+
* - `aikaara` (default): ActionCable to Aikaara Rails (AI streaming).
|
|
288
|
+
* - `tiledesk`: MQTT direct to a self-hosted Tiledesk + chat21 stack.
|
|
289
|
+
* - `dual`: both — Aikaara cable for AI, Tiledesk MQTT for live-agent + file events.
|
|
290
|
+
*/
|
|
291
|
+
transport?: TransportMode;
|
|
292
|
+
/**
|
|
293
|
+
* Tiledesk-side identity. Required when `transport` is `tiledesk` or `dual`.
|
|
294
|
+
* `userId` here is the Tiledesk user `_id` and is also used as the SDK conversation
|
|
295
|
+
* subject — Aikaara conversations bound to this user via ext_uid mapping.
|
|
296
|
+
*/
|
|
297
|
+
tiledeskIdentity?: {
|
|
298
|
+
userId: string;
|
|
299
|
+
userName?: string;
|
|
300
|
+
departmentId?: string;
|
|
301
|
+
senderFullname?: string;
|
|
302
|
+
};
|
|
242
303
|
onMessage?: (message: Message) => void;
|
|
243
304
|
onStatusChange?: (status: string) => void;
|
|
244
305
|
onError?: (error: Error) => void;
|
|
245
306
|
onStreamUpdate?: (delta: string, fullContent: string) => void;
|
|
246
307
|
onConnectionStateChange?: (state: ConnectionState) => void;
|
|
308
|
+
onTemplateMessage?: (template: TemplateMessageEvent) => void;
|
|
247
309
|
}
|
|
248
310
|
|
|
249
311
|
export declare interface ChatEvents {
|
|
@@ -331,6 +393,8 @@ declare interface CreateConversationResponse {
|
|
|
331
393
|
status: string;
|
|
332
394
|
}
|
|
333
395
|
|
|
396
|
+
export declare function createFetchUploadAdapter(config: FetchUploadAdapterConfig): UploadAdapter;
|
|
397
|
+
|
|
334
398
|
export declare interface EditEntityAction {
|
|
335
399
|
action: 'edit_entity';
|
|
336
400
|
entity_type: string;
|
|
@@ -346,6 +410,18 @@ export declare class EventEmitter<Events extends Record<string, any>> {
|
|
|
346
410
|
removeAllListeners(): void;
|
|
347
411
|
}
|
|
348
412
|
|
|
413
|
+
export declare function extractTiledeskFileEnvelope(message: TiledeskMessage): TiledeskFileEnvelope | null;
|
|
414
|
+
|
|
415
|
+
export declare interface FetchUploadAdapterConfig {
|
|
416
|
+
endpoint: string;
|
|
417
|
+
method?: 'POST' | 'PUT';
|
|
418
|
+
fieldName?: string;
|
|
419
|
+
headers?: Record<string, string> | (() => Record<string, string> | Promise<Record<string, string>>);
|
|
420
|
+
credentials?: RequestCredentials;
|
|
421
|
+
extraFields?: Record<string, string> | ((ctx: UploadAdapterContext) => Record<string, string>);
|
|
422
|
+
parseResponse?: (raw: unknown, ctx: UploadAdapterContext) => UploadAdapterResult;
|
|
423
|
+
}
|
|
424
|
+
|
|
349
425
|
export declare interface FieldUpdate {
|
|
350
426
|
field: string;
|
|
351
427
|
value: unknown;
|
|
@@ -468,10 +544,19 @@ export declare interface FormRegistration {
|
|
|
468
544
|
getCurrentValues: () => Record<string, unknown>;
|
|
469
545
|
}
|
|
470
546
|
|
|
547
|
+
export declare function inferTiledeskRole(message: TiledeskMessage, cfg: TiledeskRoleConfig): TiledeskRole;
|
|
548
|
+
|
|
549
|
+
/**
|
|
550
|
+
* Self-echo detector — Tiledesk fans the user's outgoing publish back
|
|
551
|
+
* as a `clientadded` event on the same connection. UI must dedupe against
|
|
552
|
+
* the optimistic local message rather than rendering twice.
|
|
553
|
+
*/
|
|
554
|
+
export declare function isTiledeskSelfEcho(message: TiledeskMessage, userId: string): boolean;
|
|
555
|
+
|
|
471
556
|
export declare interface Message {
|
|
472
557
|
id: string;
|
|
473
558
|
conversationId: string;
|
|
474
|
-
role: 'user' | 'assistant' | 'system' | 'tool';
|
|
559
|
+
role: 'user' | 'assistant' | 'system' | 'tool' | 'agent';
|
|
475
560
|
content: string;
|
|
476
561
|
toolCalls?: ToolCall[];
|
|
477
562
|
toolCallResults?: ToolCallResult;
|
|
@@ -479,7 +564,19 @@ export declare interface Message {
|
|
|
479
564
|
tokensOutput?: number;
|
|
480
565
|
metadata?: Record<string, unknown>;
|
|
481
566
|
createdAt: string;
|
|
482
|
-
status?: 'sending' | 'sent' | 'streaming' | 'complete' | 'error';
|
|
567
|
+
status?: 'sending' | 'sent' | 'delivered' | 'read' | 'streaming' | 'complete' | 'error';
|
|
568
|
+
externalId?: string;
|
|
569
|
+
template?: {
|
|
570
|
+
contentType?: string;
|
|
571
|
+
templateId?: string;
|
|
572
|
+
payload?: unknown;
|
|
573
|
+
};
|
|
574
|
+
attachments?: Array<{
|
|
575
|
+
fileName: string;
|
|
576
|
+
fileUrl: string;
|
|
577
|
+
cloudFileId?: string;
|
|
578
|
+
contentType?: string;
|
|
579
|
+
}>;
|
|
483
580
|
}
|
|
484
581
|
|
|
485
582
|
export declare class MessageStore {
|
|
@@ -487,6 +584,22 @@ export declare class MessageStore {
|
|
|
487
584
|
private optimisticCounter;
|
|
488
585
|
get messages(): Message[];
|
|
489
586
|
addOptimistic(role: 'user', content: string, conversationId: string): Message;
|
|
587
|
+
/**
|
|
588
|
+
* Reconcile a remote message against an outstanding optimistic message.
|
|
589
|
+
* Tiledesk fans the user's outgoing publish back as an inbound clientadded —
|
|
590
|
+
* dedupe by exact content + recency window so the optimistic bubble keeps
|
|
591
|
+
* its position and we don't render duplicates.
|
|
592
|
+
*/
|
|
593
|
+
reconcileOptimistic(remote: Message, recencyMs?: number): Message | null;
|
|
594
|
+
/**
|
|
595
|
+
* Append a remote-originated message (e.g. from Tiledesk MQTT). If a matching
|
|
596
|
+
* optimistic message exists it is reconciled in place; otherwise appended.
|
|
597
|
+
*/
|
|
598
|
+
upsertRemoteMessage(remote: Message): {
|
|
599
|
+
message: Message;
|
|
600
|
+
deduped: boolean;
|
|
601
|
+
};
|
|
602
|
+
updateMessageStatus(externalId: string, status: Message['status']): Message | undefined;
|
|
490
603
|
confirmOptimistic(tempId: string): void;
|
|
491
604
|
addStreamingMessage(conversationId: string): Message;
|
|
492
605
|
updateStreaming(content: string): void;
|
|
@@ -507,6 +620,8 @@ export declare interface NavigateAction {
|
|
|
507
620
|
navigate_to: string;
|
|
508
621
|
}
|
|
509
622
|
|
|
623
|
+
export declare function parseTiledeskTemplate(message: TiledeskMessage): TiledeskParsedTemplate;
|
|
624
|
+
|
|
510
625
|
export declare function registerComponents(): void;
|
|
511
626
|
|
|
512
627
|
export declare interface SaveEntityAction {
|
|
@@ -515,44 +630,167 @@ export declare interface SaveEntityAction {
|
|
|
515
630
|
|
|
516
631
|
declare type SubscriptionCallback = (data: unknown) => void;
|
|
517
632
|
|
|
633
|
+
declare interface TemplateMessageEvent {
|
|
634
|
+
messageId: string;
|
|
635
|
+
conversationId: string;
|
|
636
|
+
role: 'user' | 'assistant' | 'system' | 'agent';
|
|
637
|
+
contentType?: string;
|
|
638
|
+
templateId?: string;
|
|
639
|
+
payload?: unknown;
|
|
640
|
+
innerMessage?: string;
|
|
641
|
+
raw: unknown;
|
|
642
|
+
}
|
|
643
|
+
|
|
518
644
|
export declare interface TestToolAction {
|
|
519
645
|
action: 'test_tool';
|
|
520
646
|
tool_id: number;
|
|
521
647
|
parameters: Record<string, unknown>;
|
|
522
648
|
}
|
|
523
649
|
|
|
650
|
+
export declare interface TiledeskFileEnvelope {
|
|
651
|
+
fileName?: string;
|
|
652
|
+
fileUrl?: string;
|
|
653
|
+
cloudFileId?: string;
|
|
654
|
+
templateId?: string;
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
export declare interface TiledeskFileMessageInput {
|
|
658
|
+
fileName: string;
|
|
659
|
+
fileUrl: string;
|
|
660
|
+
cloudFileId?: string;
|
|
661
|
+
templateId?: string;
|
|
662
|
+
headerImgSrc?: string;
|
|
663
|
+
type?: 'link' | 'image';
|
|
664
|
+
isDeepLink?: boolean;
|
|
665
|
+
description?: string;
|
|
666
|
+
attributes?: Record<string, unknown>;
|
|
667
|
+
metadata?: Record<string, unknown>;
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
export declare interface TiledeskFileTemplateConfig {
|
|
671
|
+
templateId: string;
|
|
672
|
+
headerImgSrc?: string;
|
|
673
|
+
type?: 'link' | 'image';
|
|
674
|
+
isDeepLink?: boolean;
|
|
675
|
+
}
|
|
676
|
+
|
|
524
677
|
export declare interface TiledeskMessage {
|
|
525
678
|
text?: string;
|
|
526
679
|
type?: string;
|
|
527
680
|
sender?: string;
|
|
528
681
|
senderFullname?: string;
|
|
682
|
+
sender_fullname?: string;
|
|
529
683
|
recipient?: string;
|
|
684
|
+
recipient_fullname?: string;
|
|
685
|
+
channel_type?: string;
|
|
530
686
|
timestamp?: number;
|
|
687
|
+
app_id?: string;
|
|
688
|
+
message_id?: string;
|
|
689
|
+
status?: number;
|
|
531
690
|
attributes?: Record<string, unknown>;
|
|
532
691
|
metadata?: Record<string, unknown>;
|
|
533
692
|
[key: string]: unknown;
|
|
534
693
|
}
|
|
535
694
|
|
|
695
|
+
export declare interface TiledeskMessageContext {
|
|
696
|
+
topic: string;
|
|
697
|
+
conversationId?: string;
|
|
698
|
+
messageId?: string;
|
|
699
|
+
kind: 'clientadded' | 'update' | 'unknown';
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
export declare interface TiledeskMessageDefaults {
|
|
703
|
+
channelType?: string;
|
|
704
|
+
channel?: string;
|
|
705
|
+
requestChannel?: string;
|
|
706
|
+
platform?: string;
|
|
707
|
+
medium?: string;
|
|
708
|
+
departmentId?: string;
|
|
709
|
+
attributes?: Record<string, unknown>;
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
export declare interface TiledeskParsedTemplate {
|
|
713
|
+
contentType?: string;
|
|
714
|
+
templateId?: string;
|
|
715
|
+
payload?: unknown;
|
|
716
|
+
innerMessage?: string;
|
|
717
|
+
raw: TiledeskMessage;
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
export declare type TiledeskRole = 'user' | 'assistant' | 'system' | 'agent';
|
|
721
|
+
|
|
722
|
+
export declare interface TiledeskRoleConfig {
|
|
723
|
+
userId: string;
|
|
724
|
+
systemSenders?: string[];
|
|
725
|
+
botSenderPrefix?: string;
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
export declare interface TiledeskStatusUpdate {
|
|
729
|
+
conversationId: string;
|
|
730
|
+
messageId: string;
|
|
731
|
+
status: number;
|
|
732
|
+
raw: Record<string, unknown>;
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
export declare interface TiledeskTopicTemplates {
|
|
736
|
+
inbound?: string;
|
|
737
|
+
inboundUpdate?: string;
|
|
738
|
+
outbound?: string;
|
|
739
|
+
presence?: string;
|
|
740
|
+
wildcardSubscribe?: string;
|
|
741
|
+
}
|
|
742
|
+
|
|
536
743
|
export declare class TiledeskTransport {
|
|
537
744
|
private client;
|
|
538
745
|
private config;
|
|
746
|
+
private currentToken;
|
|
747
|
+
private clientId;
|
|
748
|
+
private appId;
|
|
749
|
+
private topics;
|
|
539
750
|
private messageHandlers;
|
|
540
751
|
private stateHandlers;
|
|
752
|
+
private statusUpdateHandlers;
|
|
541
753
|
private subscribedTopics;
|
|
542
754
|
private reconnectAttempt;
|
|
543
755
|
private maxReconnectAttempts;
|
|
756
|
+
private reconnectMaxDelayMs;
|
|
544
757
|
private disposed;
|
|
758
|
+
private reconnectTimer;
|
|
759
|
+
private inboundRegex;
|
|
760
|
+
private inboundUpdateRegex;
|
|
545
761
|
constructor(config: TiledeskTransportConfig);
|
|
546
762
|
connect(): Promise<void>;
|
|
763
|
+
subscribeWildcard(): void;
|
|
547
764
|
subscribeToConversation(conversationId: string): void;
|
|
548
765
|
unsubscribeFromConversation(conversationId: string): void;
|
|
549
|
-
publishMessage(conversationId: string, text: string): void;
|
|
766
|
+
publishMessage(conversationId: string, text: string, overrides?: Partial<TiledeskMessage>): void;
|
|
767
|
+
publishFileMessage(conversationId: string, file: TiledeskFileMessageInput): void;
|
|
768
|
+
publishRaw(conversationId: string, message: TiledeskMessage): void;
|
|
769
|
+
/**
|
|
770
|
+
* Send a read receipt for a message. Tiledesk widgets publish
|
|
771
|
+
* `{"status":300}` to apps/{appId}/users/{userId}/messages/{convId}/{msgId}/update.
|
|
772
|
+
*/
|
|
773
|
+
publishReadReceipt(conversationId: string, messageId: string, status?: number): void;
|
|
774
|
+
/**
|
|
775
|
+
* Trigger conversation kickoff. Tiledesk bot routing waits for the
|
|
776
|
+
* widget to publish a CHAT_INITIATED event before the bot replies.
|
|
777
|
+
*/
|
|
778
|
+
publishChatInitiated(conversationId: string, extraAttributes?: Record<string, unknown>): void;
|
|
550
779
|
onMessage(handler: TransportMessageHandler): () => void;
|
|
551
780
|
onStateChange(handler: TransportStateHandler): () => void;
|
|
781
|
+
onStatusUpdate(handler: TransportStatusUpdateHandler): () => void;
|
|
552
782
|
disconnect(): void;
|
|
553
783
|
get isConnected(): boolean;
|
|
554
784
|
private scheduleReconnect;
|
|
555
785
|
private notifyStateChange;
|
|
786
|
+
private dispatchInbound;
|
|
787
|
+
private buildOutgoingEnvelope;
|
|
788
|
+
private publishEnvelope;
|
|
789
|
+
private renderInboundTopic;
|
|
790
|
+
private renderOutboundTopic;
|
|
791
|
+
private renderPresenceTopic;
|
|
792
|
+
private renderTemplate;
|
|
793
|
+
private buildTopicRegex;
|
|
556
794
|
}
|
|
557
795
|
|
|
558
796
|
export declare interface TiledeskTransportConfig {
|
|
@@ -561,6 +799,28 @@ export declare interface TiledeskTransportConfig {
|
|
|
561
799
|
userId: string;
|
|
562
800
|
userName?: string;
|
|
563
801
|
projectId: string;
|
|
802
|
+
appId?: string;
|
|
803
|
+
clientId?: string;
|
|
804
|
+
protocolVersion?: 3 | 4 | 5;
|
|
805
|
+
protocolId?: 'MQIsdp' | 'MQTT';
|
|
806
|
+
mqttUsername?: string;
|
|
807
|
+
connectTimeoutMs?: number;
|
|
808
|
+
keepAliveSec?: number;
|
|
809
|
+
maxReconnectAttempts?: number;
|
|
810
|
+
reconnectMaxDelayMs?: number;
|
|
811
|
+
tokenProvider?: () => Promise<string>;
|
|
812
|
+
wildcardSubscribe?: boolean;
|
|
813
|
+
subscribeQos?: 0 | 1 | 2;
|
|
814
|
+
publishQos?: 0 | 1 | 2;
|
|
815
|
+
publishRetain?: boolean;
|
|
816
|
+
enablePresence?: boolean;
|
|
817
|
+
presencePayloadConnected?: Record<string, unknown>;
|
|
818
|
+
presencePayloadDisconnected?: Record<string, unknown>;
|
|
819
|
+
topicTemplates?: TiledeskTopicTemplates;
|
|
820
|
+
messageDefaults?: TiledeskMessageDefaults;
|
|
821
|
+
fileTemplate?: TiledeskFileTemplateConfig;
|
|
822
|
+
recipientFullnameResolver?: (conversationId: string) => string | undefined;
|
|
823
|
+
senderFullname?: string;
|
|
564
824
|
}
|
|
565
825
|
|
|
566
826
|
export declare interface ToolCall {
|
|
@@ -577,12 +837,37 @@ export declare interface ToolCallResult {
|
|
|
577
837
|
content: string;
|
|
578
838
|
}
|
|
579
839
|
|
|
580
|
-
export declare type TransportMessageHandler = (message: TiledeskMessage) => void;
|
|
840
|
+
export declare type TransportMessageHandler = (message: TiledeskMessage, ctx: TiledeskMessageContext) => void;
|
|
841
|
+
|
|
842
|
+
declare type TransportMode = 'aikaara' | 'tiledesk' | 'dual';
|
|
581
843
|
|
|
582
844
|
export declare type TransportStateHandler = (connected: boolean) => void;
|
|
583
845
|
|
|
846
|
+
export declare type TransportStatusUpdateHandler = (update: TiledeskStatusUpdate) => void;
|
|
847
|
+
|
|
584
848
|
export declare function unmount(): void;
|
|
585
849
|
|
|
850
|
+
export declare interface UploadAdapter {
|
|
851
|
+
upload(file: File | Blob, ctx: UploadAdapterContext): Promise<UploadAdapterResult>;
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
export declare interface UploadAdapterContext {
|
|
855
|
+
conversationId: string;
|
|
856
|
+
userId: string;
|
|
857
|
+
projectId?: string;
|
|
858
|
+
appId?: string;
|
|
859
|
+
}
|
|
860
|
+
|
|
861
|
+
export declare interface UploadAdapterResult {
|
|
862
|
+
url: string;
|
|
863
|
+
fileName: string;
|
|
864
|
+
cloudFileId?: string;
|
|
865
|
+
relativePath?: string;
|
|
866
|
+
contentType?: string;
|
|
867
|
+
byteSize?: number;
|
|
868
|
+
meta?: Record<string, unknown>;
|
|
869
|
+
}
|
|
870
|
+
|
|
586
871
|
export declare interface WidgetConfig extends ChatClientConfig {
|
|
587
872
|
position?: 'bottom-right' | 'bottom-left';
|
|
588
873
|
offset?: {
|
|
@@ -605,6 +890,7 @@ export declare interface WidgetConfig extends ChatClientConfig {
|
|
|
605
890
|
showBubble?: boolean;
|
|
606
891
|
bubbleText?: string;
|
|
607
892
|
bubbleIcon?: string;
|
|
893
|
+
uploadAdapter?: UploadAdapter;
|
|
608
894
|
}
|
|
609
895
|
|
|
610
896
|
export { }
|
package/dist/index.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { A as
|
|
2
|
-
import { FormBridge as
|
|
3
|
-
import { registerComponents as
|
|
4
|
-
import { AikaaraChatBubble as
|
|
1
|
+
import { A as m, a as u, b as h, C as k, c as g, d as C, E as A, M as b, T as f, e as T, i as M, f as v, p as w } from "./AikaaraChatClient-Cqbcd1jb.mjs";
|
|
2
|
+
import { FormBridge as E, createFetchUploadAdapter as S } from "./headless.mjs";
|
|
3
|
+
import { registerComponents as s } from "./ui.mjs";
|
|
4
|
+
import { AikaaraChatBubble as B, AikaaraChatHeader as F, AikaaraChatInput as U, AikaaraChatWidget as I, AikaaraErrorBanner as j, AikaaraMessageBubble as q, AikaaraMessageList as H, AikaaraStreamingMessage as K, AikaaraTypingIndicator as L } from "./ui.mjs";
|
|
5
5
|
function l(e) {
|
|
6
|
-
|
|
6
|
+
s();
|
|
7
7
|
const a = document.createElement("aikaara-chat-widget"), r = {
|
|
8
8
|
baseUrl: "base-url",
|
|
9
9
|
userToken: "user-token",
|
|
@@ -30,26 +30,31 @@ function c() {
|
|
|
30
30
|
e && e.remove();
|
|
31
31
|
}
|
|
32
32
|
export {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
33
|
+
m as ActionCableClient,
|
|
34
|
+
B as AikaaraChatBubble,
|
|
35
|
+
u as AikaaraChatClient,
|
|
36
|
+
F as AikaaraChatHeader,
|
|
37
|
+
U as AikaaraChatInput,
|
|
38
|
+
I as AikaaraChatWidget,
|
|
39
|
+
j as AikaaraErrorBanner,
|
|
40
|
+
q as AikaaraMessageBubble,
|
|
41
|
+
H as AikaaraMessageList,
|
|
42
|
+
K as AikaaraStreamingMessage,
|
|
43
|
+
L as AikaaraTypingIndicator,
|
|
44
|
+
h as ApiClient,
|
|
45
|
+
k as ChannelSubscription,
|
|
46
|
+
g as ConnectionManager,
|
|
47
47
|
C as ConversationManager,
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
A as EventEmitter,
|
|
49
|
+
E as FormBridge,
|
|
50
|
+
b as MessageStore,
|
|
51
|
+
f as TiledeskTransport,
|
|
52
|
+
S as createFetchUploadAdapter,
|
|
53
|
+
T as extractTiledeskFileEnvelope,
|
|
54
|
+
M as inferTiledeskRole,
|
|
55
|
+
v as isTiledeskSelfEcho,
|
|
52
56
|
l as mount,
|
|
53
|
-
|
|
57
|
+
w as parseTiledeskTemplate,
|
|
58
|
+
s as registerComponents,
|
|
54
59
|
c as unmount
|
|
55
60
|
};
|