@wix/legends-platform-sdk 1.35.0 → 1.37.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.
Files changed (66) hide show
  1. package/README.md +18 -1
  2. package/dist/cjs/components/LegendsPlatform/LegendsPlatform.js +10 -7
  3. package/dist/cjs/components/LegendsPlatform/LegendsPlatform.js.map +1 -1
  4. package/dist/cjs/components/LegendsPlatformCore/LegendsPlatformCore.js +73 -0
  5. package/dist/cjs/components/LegendsPlatformCore/LegendsPlatformCore.js.map +1 -0
  6. package/dist/cjs/components/LegendsPlatformCore/index.js +10 -0
  7. package/dist/cjs/components/LegendsPlatformCore/index.js.map +1 -0
  8. package/dist/cjs/hooks/useTextChat/streamChatMessage.js +3 -1
  9. package/dist/cjs/hooks/useTextChat/streamChatMessage.js.map +1 -1
  10. package/dist/cjs/hooks/useTextChat/useTextChat.js +3 -2
  11. package/dist/cjs/hooks/useTextChat/useTextChat.js.map +1 -1
  12. package/dist/cjs/hooks/useTextChat/useTextChatStream.js +3 -1
  13. package/dist/cjs/hooks/useTextChat/useTextChatStream.js.map +1 -1
  14. package/dist/cjs/hooks/useTextChat/useToolAwareSend.js +5 -3
  15. package/dist/cjs/hooks/useTextChat/useToolAwareSend.js.map +1 -1
  16. package/dist/cjs/sdk.js +7 -1
  17. package/dist/cjs/sdk.js.map +1 -1
  18. package/dist/cjs/services/BearerPersonaChatService.js +191 -0
  19. package/dist/cjs/services/BearerPersonaChatService.js.map +1 -0
  20. package/dist/cjs/services/FetchPersonaChatService.js +15 -5
  21. package/dist/cjs/services/FetchPersonaChatService.js.map +1 -1
  22. package/dist/cjs/types/service.js.map +1 -1
  23. package/dist/esm/components/LegendsPlatform/LegendsPlatform.js +5 -2
  24. package/dist/esm/components/LegendsPlatform/LegendsPlatform.js.map +1 -1
  25. package/dist/esm/components/LegendsPlatformCore/LegendsPlatformCore.js +40 -0
  26. package/dist/esm/components/LegendsPlatformCore/LegendsPlatformCore.js.map +1 -0
  27. package/dist/esm/components/LegendsPlatformCore/index.js +2 -0
  28. package/dist/esm/components/LegendsPlatformCore/index.js.map +1 -0
  29. package/dist/esm/hooks/useTextChat/streamChatMessage.js +3 -1
  30. package/dist/esm/hooks/useTextChat/streamChatMessage.js.map +1 -1
  31. package/dist/esm/hooks/useTextChat/useTextChat.js +3 -2
  32. package/dist/esm/hooks/useTextChat/useTextChat.js.map +1 -1
  33. package/dist/esm/hooks/useTextChat/useTextChatStream.js +3 -1
  34. package/dist/esm/hooks/useTextChat/useTextChatStream.js.map +1 -1
  35. package/dist/esm/hooks/useTextChat/useToolAwareSend.js +5 -3
  36. package/dist/esm/hooks/useTextChat/useToolAwareSend.js.map +1 -1
  37. package/dist/esm/sdk.js +2 -0
  38. package/dist/esm/sdk.js.map +1 -1
  39. package/dist/esm/services/BearerPersonaChatService.js +181 -0
  40. package/dist/esm/services/BearerPersonaChatService.js.map +1 -0
  41. package/dist/esm/services/FetchPersonaChatService.js +17 -4
  42. package/dist/esm/services/FetchPersonaChatService.js.map +1 -1
  43. package/dist/esm/types/service.js.map +1 -1
  44. package/dist/types/components/LegendsPlatform/LegendsPlatform.d.ts +3 -0
  45. package/dist/types/components/LegendsPlatform/LegendsPlatform.d.ts.map +1 -1
  46. package/dist/types/components/LegendsPlatformCore/LegendsPlatformCore.d.ts +23 -0
  47. package/dist/types/components/LegendsPlatformCore/LegendsPlatformCore.d.ts.map +1 -0
  48. package/dist/types/components/LegendsPlatformCore/index.d.ts +2 -0
  49. package/dist/types/components/LegendsPlatformCore/index.d.ts.map +1 -0
  50. package/dist/types/hooks/useTextChat/streamChatMessage.d.ts +1 -0
  51. package/dist/types/hooks/useTextChat/streamChatMessage.d.ts.map +1 -1
  52. package/dist/types/hooks/useTextChat/useTextChat.d.ts +2 -0
  53. package/dist/types/hooks/useTextChat/useTextChat.d.ts.map +1 -1
  54. package/dist/types/hooks/useTextChat/useTextChatStream.d.ts +1 -0
  55. package/dist/types/hooks/useTextChat/useTextChatStream.d.ts.map +1 -1
  56. package/dist/types/hooks/useTextChat/useToolAwareSend.d.ts +1 -1
  57. package/dist/types/hooks/useTextChat/useToolAwareSend.d.ts.map +1 -1
  58. package/dist/types/sdk.d.ts +4 -0
  59. package/dist/types/sdk.d.ts.map +1 -1
  60. package/dist/types/services/BearerPersonaChatService.d.ts +37 -0
  61. package/dist/types/services/BearerPersonaChatService.d.ts.map +1 -0
  62. package/dist/types/services/FetchPersonaChatService.d.ts +11 -1
  63. package/dist/types/services/FetchPersonaChatService.d.ts.map +1 -1
  64. package/dist/types/types/service.d.ts +2 -0
  65. package/dist/types/types/service.d.ts.map +1 -1
  66. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"names":["_types","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","_useTextChat","_useTranscriptions","_useConversationStatus","_useMicrophone","_useSpeaker","_useCamera","_useMediaRecorder","_useConversationTimer","_useConversationEvents","_useUserActivity","_useAudio","_useConnectionState","_useActivityState","_usePictureInPicture","_useMediaPermissions","_useTools","_types2","_attempt","createStartupIntent","StartupAttempt"],"sources":["../../src/sdk.ts"],"sourcesContent":["export * from './types';\n\nexport * from './hooks/useTextChat';\nexport * from './hooks/useTranscriptions';\nexport * from './hooks/useConversationStatus';\nexport * from './hooks/useMicrophone';\nexport * from './hooks/useSpeaker';\nexport * from './hooks/useCamera';\nexport * from './hooks/useMediaRecorder';\nexport * from './hooks/useConversationTimer';\nexport * from './hooks/useConversationEvents';\nexport * from './hooks/useUserActivity';\nexport * from './hooks/useAudio';\nexport * from './hooks/useConnectionState';\nexport * from './hooks/useActivityState';\nexport * from './hooks/usePictureInPicture';\nexport * from './hooks/useMediaPermissions';\nexport * from './hooks/useTools';\n\nexport * from './conversation/types';\n\nexport {\n createStartupIntent,\n StartupAttempt,\n} from './startup-telemetry/attempt';\nexport type {\n StartupIntent,\n StartupReport,\n StartupTelemetryOptions,\n} from './startup-telemetry/attempt';\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_types","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","_useTextChat","_useTranscriptions","_useConversationStatus","_useMicrophone","_useSpeaker","_useCamera","_useMediaRecorder","_useConversationTimer","_useConversationEvents","_useUserActivity","_useAudio","_useConnectionState","_useActivityState","_usePictureInPicture","_useMediaPermissions","_useTools","_types2","_BearerPersonaChatService","BearerPersonaChatService","_LegendsPlatformCore","LegendsPlatformCore","_attempt","createStartupIntent","StartupAttempt"],"sources":["../../src/sdk.ts"],"sourcesContent":["export * from './types';\n\nexport * from './hooks/useTextChat';\nexport * from './hooks/useTranscriptions';\nexport * from './hooks/useConversationStatus';\nexport * from './hooks/useMicrophone';\nexport * from './hooks/useSpeaker';\nexport * from './hooks/useCamera';\nexport * from './hooks/useMediaRecorder';\nexport * from './hooks/useConversationTimer';\nexport * from './hooks/useConversationEvents';\nexport * from './hooks/useUserActivity';\nexport * from './hooks/useAudio';\nexport * from './hooks/useConnectionState';\nexport * from './hooks/useActivityState';\nexport * from './hooks/usePictureInPicture';\nexport * from './hooks/useMediaPermissions';\nexport * from './hooks/useTools';\n\nexport * from './conversation/types';\n\nexport { BearerPersonaChatService } from './services/BearerPersonaChatService';\nexport type { BearerPersonaChatServiceOptions } from './services/BearerPersonaChatService';\nexport { LegendsPlatformCore } from './components/LegendsPlatformCore';\nexport type { LegendsPlatformCoreProps } from './components/LegendsPlatformCore';\n\nexport {\n createStartupIntent,\n StartupAttempt,\n} from './startup-telemetry/attempt';\nexport type {\n StartupIntent,\n StartupReport,\n StartupTelemetryOptions,\n} from './startup-telemetry/attempt';\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.BearerPersonaChatService = void 0;
6
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
7
+ var _http = require("../types/http");
8
+ var _FetchPersonaChatService = require("./FetchPersonaChatService");
9
+ const PERSONA_CHAT = '/_api/persona-chat-service/v1';
10
+ function resolveLimitMs(limitation) {
11
+ if (!limitation) {
12
+ return undefined;
13
+ }
14
+ switch (limitation.type) {
15
+ case 'MINUTES':
16
+ return (limitation.limit ?? 0) * 60 * 1000;
17
+ case 'SECONDS':
18
+ return (limitation.limit ?? 0) * 1000;
19
+ case 'TOKENS':
20
+ default:
21
+ return 0;
22
+ }
23
+ }
24
+ function parseJson(text) {
25
+ try {
26
+ return JSON.parse(text);
27
+ } catch {
28
+ return undefined;
29
+ }
30
+ }
31
+ function toMessage(m) {
32
+ return {
33
+ id: m.id ?? '',
34
+ content: m.content ?? '',
35
+ role: m.role,
36
+ createdAt: m.createdAt ?? m.createdDate,
37
+ ...(m.attachments ? {
38
+ attachments: m.attachments
39
+ } : {})
40
+ };
41
+ }
42
+
43
+ /**
44
+ * The persona-chat service for a browser: authenticated with the caller's own
45
+ * bearer token (never a namespace API key), on the same REST paths the
46
+ * Legend's own page uses for a visitor.
47
+ */
48
+ class BearerPersonaChatService {
49
+ constructor(options) {
50
+ this.options = options;
51
+ (0, _defineProperty2.default)(this, "baseUrl", void 0);
52
+ this.baseUrl = (options.baseUrl ?? _FetchPersonaChatService.DEFAULT_BASE_URL).replace(/\/+$/, '');
53
+ }
54
+ async request(method, path, body, retried = false) {
55
+ const token = await this.options.getAccessToken();
56
+ const response = await fetch(`${this.baseUrl}${path}`, {
57
+ method,
58
+ headers: {
59
+ ...(body === undefined ? {} : {
60
+ 'Content-Type': 'application/json'
61
+ }),
62
+ Authorization: token
63
+ },
64
+ ...(body === undefined ? {} : {
65
+ body: JSON.stringify(body)
66
+ })
67
+ });
68
+ if (response.status === 401 && !retried && this.options.onUnauthorized && (await this.options.onUnauthorized())) {
69
+ return this.request(method, path, body, true);
70
+ }
71
+ if (!response.ok) {
72
+ const text = await response.text().catch(() => '');
73
+ throw new _http.HttpError(response.status, `Request failed: ${response.status} ${text}`, parseJson(text));
74
+ }
75
+ return response.json();
76
+ }
77
+ async createConversation(kind, params) {
78
+ const {
79
+ chatId,
80
+ namespace,
81
+ chatConfig,
82
+ firstConversation,
83
+ lastConversationTopic,
84
+ conversationLanguage
85
+ } = params;
86
+ const data = await this.request('POST', `${PERSONA_CHAT}/chats/${encodeURIComponent(chatId)}/${kind}`, {
87
+ namespace,
88
+ ...(chatConfig ? {
89
+ chatConfig
90
+ } : {}),
91
+ ...(firstConversation !== undefined ? {
92
+ firstConversation
93
+ } : {}),
94
+ ...(lastConversationTopic ? {
95
+ lastConversationTopic
96
+ } : {}),
97
+ ...(conversationLanguage !== undefined ? {
98
+ conversationLanguage
99
+ } : {})
100
+ });
101
+ return {
102
+ url: data.conversationUrl ?? '',
103
+ id: data.interactiveConversationId ?? '',
104
+ limit: resolveLimitMs(data.limitation)
105
+ };
106
+ }
107
+ createVoiceConversation(params) {
108
+ return this.createConversation('create-voice-conversation', params);
109
+ }
110
+ createInteractiveConversation(params) {
111
+ return this.createConversation('create-interactive-conversation', params);
112
+ }
113
+ async endInteractiveConversation(params) {
114
+ const {
115
+ chatId,
116
+ conversationId,
117
+ namespace
118
+ } = params;
119
+ await this.request('POST', `${PERSONA_CHAT}/chats/${encodeURIComponent(chatId)}/end-interactive-conversation`, {
120
+ namespace,
121
+ interactiveConversationId: conversationId
122
+ }).catch(() => {
123
+ // best-effort
124
+ });
125
+ }
126
+ async sendChatMessage(params) {
127
+ const {
128
+ chatId,
129
+ namespace,
130
+ message,
131
+ functionCallResults,
132
+ chatConfig,
133
+ attachments,
134
+ metadata,
135
+ conversationLanguage,
136
+ includeCitations
137
+ } = params;
138
+ const data = await this.request('POST', `${PERSONA_CHAT}/chat/messages`, {
139
+ chatId,
140
+ namespace,
141
+ ...(message ? {
142
+ message
143
+ } : {}),
144
+ ...(functionCallResults ? {
145
+ functionCallResults
146
+ } : {}),
147
+ ...(chatConfig ? {
148
+ chatConfig
149
+ } : {}),
150
+ ...(attachments ? {
151
+ attachments
152
+ } : {}),
153
+ ...(metadata ? {
154
+ metadata
155
+ } : {}),
156
+ ...(conversationLanguage !== undefined ? {
157
+ conversationLanguage
158
+ } : {}),
159
+ ...(includeCitations !== undefined ? {
160
+ includeCitations
161
+ } : {})
162
+ });
163
+ return {
164
+ functionCalls: data.functionCalls,
165
+ messages: (data.messages ?? []).map(toMessage)
166
+ };
167
+ }
168
+ async queryChatMessages(params) {
169
+ var _data$pagingMetadata;
170
+ const {
171
+ chatId,
172
+ namespace,
173
+ limit = 100,
174
+ cursor
175
+ } = params;
176
+ const query = new URLSearchParams({
177
+ namespace,
178
+ 'query.cursorPaging.limit': String(limit),
179
+ ...(cursor ? {
180
+ 'query.cursorPaging.cursor': cursor
181
+ } : {})
182
+ });
183
+ const data = await this.request('GET', `${PERSONA_CHAT}/chats/${encodeURIComponent(chatId)}/messages?${query}`);
184
+ return {
185
+ messages: (data.chatMessages ?? []).map(toMessage),
186
+ nextCursor: (_data$pagingMetadata = data.pagingMetadata) == null || (_data$pagingMetadata = _data$pagingMetadata.cursors) == null ? void 0 : _data$pagingMetadata.next
187
+ };
188
+ }
189
+ }
190
+ exports.BearerPersonaChatService = BearerPersonaChatService;
191
+ //# sourceMappingURL=BearerPersonaChatService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_http","require","_FetchPersonaChatService","PERSONA_CHAT","resolveLimitMs","limitation","undefined","type","limit","parseJson","text","JSON","parse","toMessage","m","id","content","role","createdAt","createdDate","attachments","BearerPersonaChatService","constructor","options","_defineProperty2","default","baseUrl","DEFAULT_BASE_URL","replace","request","method","path","body","retried","token","getAccessToken","response","fetch","headers","Authorization","stringify","status","onUnauthorized","ok","catch","HttpError","json","createConversation","kind","params","chatId","namespace","chatConfig","firstConversation","lastConversationTopic","conversationLanguage","data","encodeURIComponent","url","conversationUrl","interactiveConversationId","createVoiceConversation","createInteractiveConversation","endInteractiveConversation","conversationId","sendChatMessage","message","functionCallResults","metadata","includeCitations","functionCalls","messages","map","queryChatMessages","_data$pagingMetadata","cursor","query","URLSearchParams","String","chatMessages","nextCursor","pagingMetadata","cursors","next","exports"],"sources":["../../../src/services/BearerPersonaChatService.ts"],"sourcesContent":["import { HttpError } from '../types/http';\nimport type {\n IPersonaChatService,\n CreateConversationParams,\n ConversationResult,\n EndConversationParams,\n SendMessageParams,\n QueryMessagesParams,\n QueryMessagesResult,\n ChatFunctionCall,\n ChatMessage,\n Limitation,\n} from '../types';\nimport { DEFAULT_BASE_URL } from './FetchPersonaChatService';\n\nexport interface BearerPersonaChatServiceOptions {\n /** API host. Defaults to https://www.wixapis.com. */\n baseUrl?: string;\n /**\n * The caller's own access token, e.g. a visitor token minted by the Legend's\n * sign-in app. Sent as the Authorization header, the way Wix's headless\n * clients send it. Called for every request, so a refreshed token is used.\n */\n getAccessToken: () => string | Promise<string>;\n /**\n * Called once when a request answers 401. Refresh the token and resolve true\n * to retry the request with the new token; resolve false to fail it.\n */\n onUnauthorized?: () => Promise<boolean>;\n}\n\nconst PERSONA_CHAT = '/_api/persona-chat-service/v1';\n\nfunction resolveLimitMs(limitation?: Limitation): number | undefined {\n if (!limitation) {\n return undefined;\n }\n switch (limitation.type) {\n case 'MINUTES':\n return (limitation.limit ?? 0) * 60 * 1000;\n case 'SECONDS':\n return (limitation.limit ?? 0) * 1000;\n case 'TOKENS':\n default:\n return 0;\n }\n}\n\nfunction parseJson(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return undefined;\n }\n}\n\ntype RawMessage = {\n id?: string;\n content?: string;\n role?: string;\n createdAt?: string;\n createdDate?: string;\n attachments?: ChatMessage['attachments'];\n};\n\nfunction toMessage(m: RawMessage): ChatMessage {\n return {\n id: m.id ?? '',\n content: m.content ?? '',\n role: m.role as 'USER' | 'ASSISTANT',\n createdAt: m.createdAt ?? m.createdDate,\n ...(m.attachments ? { attachments: m.attachments } : {}),\n };\n}\n\n/**\n * The persona-chat service for a browser: authenticated with the caller's own\n * bearer token (never a namespace API key), on the same REST paths the\n * Legend's own page uses for a visitor.\n */\nexport class BearerPersonaChatService implements IPersonaChatService {\n private readonly baseUrl: string;\n\n constructor(private readonly options: BearerPersonaChatServiceOptions) {\n this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/+$/, '');\n }\n\n private async request<T>(\n method: 'GET' | 'POST',\n path: string,\n body?: unknown,\n retried = false,\n ): Promise<T> {\n const token = await this.options.getAccessToken();\n const response = await fetch(`${this.baseUrl}${path}`, {\n method,\n headers: {\n ...(body === undefined ? {} : { 'Content-Type': 'application/json' }),\n Authorization: token,\n },\n ...(body === undefined ? {} : { body: JSON.stringify(body) }),\n });\n\n if (\n response.status === 401 &&\n !retried &&\n this.options.onUnauthorized &&\n (await this.options.onUnauthorized())\n ) {\n return this.request<T>(method, path, body, true);\n }\n\n if (!response.ok) {\n const text = await response.text().catch(() => '');\n throw new HttpError(\n response.status,\n `Request failed: ${response.status} ${text}`,\n parseJson(text),\n );\n }\n\n return response.json() as Promise<T>;\n }\n\n private async createConversation(\n kind: 'create-voice-conversation' | 'create-interactive-conversation',\n params: CreateConversationParams,\n ): Promise<ConversationResult> {\n const {\n chatId,\n namespace,\n chatConfig,\n firstConversation,\n lastConversationTopic,\n conversationLanguage,\n } = params;\n const data = await this.request<{\n conversationUrl?: string;\n interactiveConversationId?: string;\n limitation?: Limitation;\n }>('POST', `${PERSONA_CHAT}/chats/${encodeURIComponent(chatId)}/${kind}`, {\n namespace,\n ...(chatConfig ? { chatConfig } : {}),\n ...(firstConversation !== undefined ? { firstConversation } : {}),\n ...(lastConversationTopic ? { lastConversationTopic } : {}),\n ...(conversationLanguage !== undefined ? { conversationLanguage } : {}),\n });\n return {\n url: data.conversationUrl ?? '',\n id: data.interactiveConversationId ?? '',\n limit: resolveLimitMs(data.limitation),\n };\n }\n\n createVoiceConversation(\n params: CreateConversationParams,\n ): Promise<ConversationResult> {\n return this.createConversation('create-voice-conversation', params);\n }\n\n createInteractiveConversation(\n params: CreateConversationParams,\n ): Promise<ConversationResult> {\n return this.createConversation('create-interactive-conversation', params);\n }\n\n async endInteractiveConversation(\n params: EndConversationParams,\n ): Promise<void> {\n const { chatId, conversationId, namespace } = params;\n await this.request(\n 'POST',\n `${PERSONA_CHAT}/chats/${encodeURIComponent(\n chatId,\n )}/end-interactive-conversation`,\n { namespace, interactiveConversationId: conversationId },\n ).catch(() => {\n // best-effort\n });\n }\n\n async sendChatMessage(params: SendMessageParams): Promise<{\n functionCalls?: ChatFunctionCall[];\n messages?: ChatMessage[];\n }> {\n const {\n chatId,\n namespace,\n message,\n functionCallResults,\n chatConfig,\n attachments,\n metadata,\n conversationLanguage,\n includeCitations,\n } = params;\n const data = await this.request<{\n functionCalls?: ChatFunctionCall[];\n messages?: RawMessage[];\n }>('POST', `${PERSONA_CHAT}/chat/messages`, {\n chatId,\n namespace,\n ...(message ? { message } : {}),\n ...(functionCallResults ? { functionCallResults } : {}),\n ...(chatConfig ? { chatConfig } : {}),\n ...(attachments ? { attachments } : {}),\n ...(metadata ? { metadata } : {}),\n ...(conversationLanguage !== undefined ? { conversationLanguage } : {}),\n ...(includeCitations !== undefined ? { includeCitations } : {}),\n });\n return {\n functionCalls: data.functionCalls,\n messages: (data.messages ?? []).map(toMessage),\n };\n }\n\n async queryChatMessages(\n params: QueryMessagesParams,\n ): Promise<QueryMessagesResult> {\n const { chatId, namespace, limit = 100, cursor } = params;\n const query = new URLSearchParams({\n namespace,\n 'query.cursorPaging.limit': String(limit),\n ...(cursor ? { 'query.cursorPaging.cursor': cursor } : {}),\n });\n const data = await this.request<{\n chatMessages?: RawMessage[];\n pagingMetadata?: { cursors?: { next?: string } };\n }>(\n 'GET',\n `${PERSONA_CHAT}/chats/${encodeURIComponent(chatId)}/messages?${query}`,\n );\n return {\n messages: (data.chatMessages ?? []).map(toMessage),\n nextCursor: data.pagingMetadata?.cursors?.next,\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -2,10 +2,10 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
  exports.__esModule = true;
5
- exports.FetchPersonaChatService = void 0;
5
+ exports.FetchPersonaChatService = exports.DEFAULT_BASE_URL = void 0;
6
6
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
7
7
  var _http = require("../types/http");
8
- const BASE_URL = 'https://www.wixapis.com';
8
+ const DEFAULT_BASE_URL = exports.DEFAULT_BASE_URL = 'https://www.wixapis.com';
9
9
  function resolveLimitMs(limitation) {
10
10
  if (!limitation) {
11
11
  return undefined;
@@ -21,9 +21,15 @@ function resolveLimitMs(limitation) {
21
21
  }
22
22
  }
23
23
  class FetchPersonaChatService {
24
- constructor(apiKey) {
24
+ /**
25
+ * Server side only: a namespace API key skips owner checks and must never
26
+ * reach a browser. A browser uses BearerPersonaChatService with a visitor token.
27
+ */
28
+ constructor(apiKey, options = {}) {
25
29
  (0, _defineProperty2.default)(this, "apiKey", void 0);
30
+ (0, _defineProperty2.default)(this, "baseUrl", void 0);
26
31
  this.apiKey = apiKey;
32
+ this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\/+$/, '');
27
33
  }
28
34
  headers() {
29
35
  return {
@@ -32,7 +38,7 @@ class FetchPersonaChatService {
32
38
  };
33
39
  }
34
40
  async post(path, body) {
35
- const response = await fetch(`${BASE_URL}${path}`, {
41
+ const response = await fetch(`${this.baseUrl}${path}`, {
36
42
  method: 'POST',
37
43
  headers: this.headers(),
38
44
  body: JSON.stringify(body)
@@ -108,7 +114,8 @@ class FetchPersonaChatService {
108
114
  functionCallResults,
109
115
  chatConfig,
110
116
  attachments,
111
- conversationLanguage
117
+ conversationLanguage,
118
+ includeCitations
112
119
  } = params;
113
120
  return this.post(`/_api/persona-chat-service/v1/chats/${chatId}/messages`, {
114
121
  namespace,
@@ -124,6 +131,9 @@ class FetchPersonaChatService {
124
131
  } : {}),
125
132
  ...(conversationLanguage !== undefined ? {
126
133
  conversationLanguage
134
+ } : {}),
135
+ ...(includeCitations !== undefined ? {
136
+ includeCitations
127
137
  } : {})
128
138
  });
129
139
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_http","require","BASE_URL","resolveLimitMs","limitation","undefined","type","limit","FetchPersonaChatService","constructor","apiKey","_defineProperty2","default","headers","Authorization","post","path","body","response","fetch","method","JSON","stringify","ok","text","catch","HttpError","status","parseJson","json","createVoiceConversation","params","chatId","namespace","chatConfig","conversationLanguage","data","url","conversationUrl","id","interactiveConversationId","createInteractiveConversation","endInteractiveConversation","conversationId","sendChatMessage","message","functionCallResults","attachments","queryChatMessages","_data$pagingMetadata","cursor","query","cursorPaging","messages","chatMessages","map","m","content","role","createdAt","nextCursor","pagingMetadata","cursors","next","exports","parse"],"sources":["../../../src/services/FetchPersonaChatService.ts"],"sourcesContent":["import { HttpError } from '../types/http';\nimport type {\n IPersonaChatService,\n CreateConversationParams,\n ConversationResult,\n EndConversationParams,\n SendMessageParams,\n QueryMessagesParams,\n QueryMessagesResult,\n FunctionCall,\n ChatFunctionCall,\n ChatMessage,\n Limitation,\n} from '../types';\n\nconst BASE_URL = 'https://www.wixapis.com';\n\nfunction resolveLimitMs(limitation?: Limitation): number | undefined {\n if (!limitation) {\n return undefined;\n }\n switch (limitation.type) {\n case 'MINUTES':\n return (limitation.limit ?? 0) * 60 * 1000;\n case 'SECONDS':\n return (limitation.limit ?? 0) * 1000;\n case 'TOKENS':\n default:\n return 0;\n }\n}\n\nexport class FetchPersonaChatService implements IPersonaChatService {\n private readonly apiKey: string;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n private headers(): Record<string, string> {\n return {\n 'Content-Type': 'application/json',\n Authorization: `Api-Key ${this.apiKey}`,\n };\n }\n\n private async post<T>(path: string, body: unknown): Promise<T> {\n const response = await fetch(`${BASE_URL}${path}`, {\n method: 'POST',\n headers: this.headers(),\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const text = await response.text().catch(() => '');\n throw new HttpError(\n response.status,\n `Request failed: ${response.status} ${text}`,\n parseJson(text),\n );\n }\n\n return response.json() as Promise<T>;\n }\n\n async createVoiceConversation(\n params: CreateConversationParams,\n ): Promise<ConversationResult> {\n const { chatId, namespace, chatConfig, conversationLanguage } = params;\n\n const data = await this.post<{\n conversationUrl?: string;\n interactiveConversationId?: string;\n limitation?: Limitation;\n }>(\n `/_api/persona-chat-service/v1/chats/${chatId}/create-voice-conversation`,\n {\n namespace,\n ...(chatConfig ? { chatConfig } : {}),\n ...(conversationLanguage !== undefined ? { conversationLanguage } : {}),\n },\n );\n\n return {\n url: data.conversationUrl ?? '',\n id: data.interactiveConversationId ?? '',\n limit: resolveLimitMs(data.limitation),\n };\n }\n\n async createInteractiveConversation(\n params: CreateConversationParams,\n ): Promise<ConversationResult> {\n const { chatId, namespace, chatConfig, conversationLanguage } = params;\n\n const data = await this.post<{\n conversationUrl?: string;\n interactiveConversationId?: string;\n limitation?: Limitation;\n }>(\n `/_api/persona-chat-service/v1/chats/${chatId}/create-interactive-conversation`,\n {\n namespace,\n ...(chatConfig ? { chatConfig } : {}),\n ...(conversationLanguage !== undefined ? { conversationLanguage } : {}),\n },\n );\n\n return {\n url: data.conversationUrl ?? '',\n id: data.interactiveConversationId ?? '',\n limit: resolveLimitMs(data.limitation),\n };\n }\n\n async endInteractiveConversation(\n params: EndConversationParams,\n ): Promise<void> {\n const { chatId, conversationId, namespace } = params;\n\n await this.post(\n `/_api/persona-chat-service/v1/chats/${chatId}/end-interactive-conversation`,\n { namespace, interactiveConversationId: conversationId },\n ).catch(() => {\n // best-effort\n });\n }\n\n async sendChatMessage(params: SendMessageParams): Promise<{\n functionCalls?: (FunctionCall | ChatFunctionCall)[];\n messages?: ChatMessage[];\n }> {\n const {\n chatId,\n namespace,\n message,\n functionCallResults,\n chatConfig,\n attachments,\n conversationLanguage,\n } = params;\n\n return this.post<{\n functionCalls?: ChatFunctionCall[];\n messages?: ChatMessage[];\n }>(`/_api/persona-chat-service/v1/chats/${chatId}/messages`, {\n namespace,\n message,\n ...(functionCallResults ? { functionCallResults } : {}),\n ...(chatConfig ? { chatConfig } : {}),\n ...(attachments ? { attachments } : {}),\n ...(conversationLanguage !== undefined ? { conversationLanguage } : {}),\n });\n }\n\n async queryChatMessages(\n params: QueryMessagesParams,\n ): Promise<QueryMessagesResult> {\n const { chatId, namespace, limit = 100, cursor } = params;\n\n const data = await this.post<{\n chatMessages?: {\n id: string;\n content: string;\n role: string;\n createdAt?: string;\n }[];\n pagingMetadata?: { cursors?: { next?: string } };\n }>(`/_api/persona-chat-service/v1/chats/${chatId}/messages/query`, {\n namespace,\n query: { cursorPaging: { limit, ...(cursor ? { cursor } : {}) } },\n });\n\n return {\n messages: (data.chatMessages ?? []).map((m) => ({\n id: m.id,\n content: m.content,\n role: m.role as 'USER' | 'ASSISTANT',\n createdAt: m.createdAt,\n })),\n nextCursor: data.pagingMetadata?.cursors?.next,\n };\n }\n}\n\nfunction parseJson(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_http","require","DEFAULT_BASE_URL","exports","resolveLimitMs","limitation","undefined","type","limit","FetchPersonaChatService","constructor","apiKey","options","_defineProperty2","default","baseUrl","replace","headers","Authorization","post","path","body","response","fetch","method","JSON","stringify","ok","text","catch","HttpError","status","parseJson","json","createVoiceConversation","params","chatId","namespace","chatConfig","conversationLanguage","data","url","conversationUrl","id","interactiveConversationId","createInteractiveConversation","endInteractiveConversation","conversationId","sendChatMessage","message","functionCallResults","attachments","includeCitations","queryChatMessages","_data$pagingMetadata","cursor","query","cursorPaging","messages","chatMessages","map","m","content","role","createdAt","nextCursor","pagingMetadata","cursors","next","parse"],"sources":["../../../src/services/FetchPersonaChatService.ts"],"sourcesContent":["import { HttpError } from '../types/http';\nimport type {\n IPersonaChatService,\n CreateConversationParams,\n ConversationResult,\n EndConversationParams,\n SendMessageParams,\n QueryMessagesParams,\n QueryMessagesResult,\n FunctionCall,\n ChatFunctionCall,\n ChatMessage,\n Limitation,\n} from '../types';\n\nexport const DEFAULT_BASE_URL = 'https://www.wixapis.com';\n\nexport interface FetchPersonaChatServiceOptions {\n /** API host, e.g. a local or test gateway. Defaults to https://www.wixapis.com. */\n baseUrl?: string;\n}\n\nfunction resolveLimitMs(limitation?: Limitation): number | undefined {\n if (!limitation) {\n return undefined;\n }\n switch (limitation.type) {\n case 'MINUTES':\n return (limitation.limit ?? 0) * 60 * 1000;\n case 'SECONDS':\n return (limitation.limit ?? 0) * 1000;\n case 'TOKENS':\n default:\n return 0;\n }\n}\n\nexport class FetchPersonaChatService implements IPersonaChatService {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n\n /**\n * Server side only: a namespace API key skips owner checks and must never\n * reach a browser. A browser uses BearerPersonaChatService with a visitor token.\n */\n constructor(apiKey: string, options: FetchPersonaChatServiceOptions = {}) {\n this.apiKey = apiKey;\n this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/+$/, '');\n }\n\n private headers(): Record<string, string> {\n return {\n 'Content-Type': 'application/json',\n Authorization: `Api-Key ${this.apiKey}`,\n };\n }\n\n private async post<T>(path: string, body: unknown): Promise<T> {\n const response = await fetch(`${this.baseUrl}${path}`, {\n method: 'POST',\n headers: this.headers(),\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const text = await response.text().catch(() => '');\n throw new HttpError(\n response.status,\n `Request failed: ${response.status} ${text}`,\n parseJson(text),\n );\n }\n\n return response.json() as Promise<T>;\n }\n\n async createVoiceConversation(\n params: CreateConversationParams,\n ): Promise<ConversationResult> {\n const { chatId, namespace, chatConfig, conversationLanguage } = params;\n\n const data = await this.post<{\n conversationUrl?: string;\n interactiveConversationId?: string;\n limitation?: Limitation;\n }>(\n `/_api/persona-chat-service/v1/chats/${chatId}/create-voice-conversation`,\n {\n namespace,\n ...(chatConfig ? { chatConfig } : {}),\n ...(conversationLanguage !== undefined ? { conversationLanguage } : {}),\n },\n );\n\n return {\n url: data.conversationUrl ?? '',\n id: data.interactiveConversationId ?? '',\n limit: resolveLimitMs(data.limitation),\n };\n }\n\n async createInteractiveConversation(\n params: CreateConversationParams,\n ): Promise<ConversationResult> {\n const { chatId, namespace, chatConfig, conversationLanguage } = params;\n\n const data = await this.post<{\n conversationUrl?: string;\n interactiveConversationId?: string;\n limitation?: Limitation;\n }>(\n `/_api/persona-chat-service/v1/chats/${chatId}/create-interactive-conversation`,\n {\n namespace,\n ...(chatConfig ? { chatConfig } : {}),\n ...(conversationLanguage !== undefined ? { conversationLanguage } : {}),\n },\n );\n\n return {\n url: data.conversationUrl ?? '',\n id: data.interactiveConversationId ?? '',\n limit: resolveLimitMs(data.limitation),\n };\n }\n\n async endInteractiveConversation(\n params: EndConversationParams,\n ): Promise<void> {\n const { chatId, conversationId, namespace } = params;\n\n await this.post(\n `/_api/persona-chat-service/v1/chats/${chatId}/end-interactive-conversation`,\n { namespace, interactiveConversationId: conversationId },\n ).catch(() => {\n // best-effort\n });\n }\n\n async sendChatMessage(params: SendMessageParams): Promise<{\n functionCalls?: (FunctionCall | ChatFunctionCall)[];\n messages?: ChatMessage[];\n }> {\n const {\n chatId,\n namespace,\n message,\n functionCallResults,\n chatConfig,\n attachments,\n conversationLanguage,\n includeCitations,\n } = params;\n\n return this.post<{\n functionCalls?: ChatFunctionCall[];\n messages?: ChatMessage[];\n }>(`/_api/persona-chat-service/v1/chats/${chatId}/messages`, {\n namespace,\n message,\n ...(functionCallResults ? { functionCallResults } : {}),\n ...(chatConfig ? { chatConfig } : {}),\n ...(attachments ? { attachments } : {}),\n ...(conversationLanguage !== undefined ? { conversationLanguage } : {}),\n ...(includeCitations !== undefined ? { includeCitations } : {}),\n });\n }\n\n async queryChatMessages(\n params: QueryMessagesParams,\n ): Promise<QueryMessagesResult> {\n const { chatId, namespace, limit = 100, cursor } = params;\n\n const data = await this.post<{\n chatMessages?: {\n id: string;\n content: string;\n role: string;\n createdAt?: string;\n }[];\n pagingMetadata?: { cursors?: { next?: string } };\n }>(`/_api/persona-chat-service/v1/chats/${chatId}/messages/query`, {\n namespace,\n query: { cursorPaging: { limit, ...(cursor ? { cursor } : {}) } },\n });\n\n return {\n messages: (data.chatMessages ?? []).map((m) => ({\n id: m.id,\n content: m.content,\n role: m.role as 'USER' | 'ASSISTANT',\n createdAt: m.createdAt,\n })),\n nextCursor: data.pagingMetadata?.cursors?.next,\n };\n }\n}\n\nfunction parseJson(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../src/types/service.ts"],"sourcesContent":["export type FunctionCall = {\n functionCallId: string;\n name: string;\n arguments: string;\n};\n\nexport type FunctionCallResult = {\n functionCallId: string;\n result: string;\n error?: string;\n};\n\n/** A function call as persona-chat's text chat returns it. */\nexport type ChatFunctionCall = {\n id: string;\n name: string;\n arguments?: Record<string, unknown> | null;\n};\n\n/** A function call result as persona-chat's text chat expects it. */\nexport type ChatFunctionCallResult = {\n id: string;\n name: string;\n content: string;\n success: boolean;\n};\n\nexport type LimitationType = 'MINUTES' | 'SECONDS' | 'TOKENS';\n\nexport interface Limitation {\n type?: LimitationType;\n limit?: number;\n}\n\nexport interface ConversationResult {\n url: string;\n id: string;\n limit?: number;\n}\n\nexport interface CreateConversationParams {\n chatId: string;\n namespace: string;\n chatConfig?: object;\n /** Whether this is the visitor's first-ever conversation with the persona (drives the opening message). */\n firstConversation?: boolean;\n /** Title of the visitor's last meaningful conversation, for a returning-visitor greeting. */\n lastConversationTopic?: string;\n /** Language or locale for a new voice/video call, e.g. es or en-GB. Omit to keep the default behavior. */\n conversationLanguage?: string;\n}\n\nexport interface EndConversationParams {\n chatId: string;\n conversationId: string;\n namespace: string;\n}\n\nexport interface ChatMessageAttachment {\n fileName?: string;\n url?: string | null;\n mimeType?: string;\n textFileContent?: string | null;\n}\n\nexport interface AdditionalMetadata {\n key?: string | null;\n value?: string | null;\n excludeFromPrompt?: boolean | null;\n}\n\nexport interface SendMessageMetadata {\n additionalMetadata?: AdditionalMetadata[];\n}\n\nexport interface SendMessageParams {\n chatId: string;\n namespace: string;\n message: string;\n functionCallResults?: (FunctionCallResult | ChatFunctionCallResult)[];\n chatConfig?: object;\n attachments?: ChatMessageAttachment[];\n metadata?: SendMessageMetadata;\n /** Language or locale for the persona's text reply, e.g. es or en-GB. Omit to keep the default behavior. */\n conversationLanguage?: string;\n}\n\nexport interface ChatMessage {\n id: string;\n content: string;\n role: 'USER' | 'ASSISTANT';\n createdAt?: string;\n attachments?: ChatMessageAttachment[];\n}\n\nexport interface QueryMessagesParams {\n chatId: string;\n namespace: string;\n limit?: number;\n cursor?: string;\n}\n\nexport interface QueryMessagesResult {\n messages: ChatMessage[];\n nextCursor?: string;\n}\n\nexport interface IPersonaChatService {\n createVoiceConversation(\n params: CreateConversationParams,\n ): Promise<ConversationResult>;\n createInteractiveConversation(\n params: CreateConversationParams,\n ): Promise<ConversationResult>;\n endInteractiveConversation(params: EndConversationParams): Promise<void>;\n sendChatMessage(params: SendMessageParams): Promise<{\n functionCalls?: (FunctionCall | ChatFunctionCall)[];\n messages?: ChatMessage[];\n }>;\n queryChatMessages(params: QueryMessagesParams): Promise<QueryMessagesResult>;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["../../../src/types/service.ts"],"sourcesContent":["export type FunctionCall = {\n functionCallId: string;\n name: string;\n arguments: string;\n};\n\nexport type FunctionCallResult = {\n functionCallId: string;\n result: string;\n error?: string;\n};\n\n/** A function call as persona-chat's text chat returns it. */\nexport type ChatFunctionCall = {\n id: string;\n name: string;\n arguments?: Record<string, unknown> | null;\n};\n\n/** A function call result as persona-chat's text chat expects it. */\nexport type ChatFunctionCallResult = {\n id: string;\n name: string;\n content: string;\n success: boolean;\n};\n\nexport type LimitationType = 'MINUTES' | 'SECONDS' | 'TOKENS';\n\nexport interface Limitation {\n type?: LimitationType;\n limit?: number;\n}\n\nexport interface ConversationResult {\n url: string;\n id: string;\n limit?: number;\n}\n\nexport interface CreateConversationParams {\n chatId: string;\n namespace: string;\n chatConfig?: object;\n /** Whether this is the visitor's first-ever conversation with the persona (drives the opening message). */\n firstConversation?: boolean;\n /** Title of the visitor's last meaningful conversation, for a returning-visitor greeting. */\n lastConversationTopic?: string;\n /** Language or locale for a new voice/video call, e.g. es or en-GB. Omit to keep the default behavior. */\n conversationLanguage?: string;\n}\n\nexport interface EndConversationParams {\n chatId: string;\n conversationId: string;\n namespace: string;\n}\n\nexport interface ChatMessageAttachment {\n fileName?: string;\n url?: string | null;\n mimeType?: string;\n textFileContent?: string | null;\n}\n\nexport interface AdditionalMetadata {\n key?: string | null;\n value?: string | null;\n excludeFromPrompt?: boolean | null;\n}\n\nexport interface SendMessageMetadata {\n additionalMetadata?: AdditionalMetadata[];\n}\n\nexport interface SendMessageParams {\n chatId: string;\n namespace: string;\n message: string;\n functionCallResults?: (FunctionCallResult | ChatFunctionCallResult)[];\n chatConfig?: object;\n attachments?: ChatMessageAttachment[];\n metadata?: SendMessageMetadata;\n /** Language or locale for the persona's text reply, e.g. es or en-GB. Omit to keep the default behavior. */\n conversationLanguage?: string;\n /** Asks the backend for the Knowledge sources behind the answer. Honoured only in PREVIEW chats. */\n includeCitations?: boolean;\n}\n\nexport interface ChatMessage {\n id: string;\n content: string;\n role: 'USER' | 'ASSISTANT';\n createdAt?: string;\n attachments?: ChatMessageAttachment[];\n}\n\nexport interface QueryMessagesParams {\n chatId: string;\n namespace: string;\n limit?: number;\n cursor?: string;\n}\n\nexport interface QueryMessagesResult {\n messages: ChatMessage[];\n nextCursor?: string;\n}\n\nexport interface IPersonaChatService {\n createVoiceConversation(\n params: CreateConversationParams,\n ): Promise<ConversationResult>;\n createInteractiveConversation(\n params: CreateConversationParams,\n ): Promise<ConversationResult>;\n endInteractiveConversation(params: EndConversationParams): Promise<void>;\n sendChatMessage(params: SendMessageParams): Promise<{\n functionCalls?: (FunctionCall | ChatFunctionCall)[];\n messages?: ChatMessage[];\n }>;\n queryChatMessages(params: QueryMessagesParams): Promise<QueryMessagesResult>;\n}\n"],"mappings":"","ignoreList":[]}
@@ -15,6 +15,7 @@ export function LegendsPlatform(props) {
15
15
  _props$tools = props.tools,
16
16
  tools = _props$tools === void 0 ? {} : _props$tools,
17
17
  apiKey = props.apiKey,
18
+ baseUrl = props.baseUrl,
18
19
  personaChatService = props.personaChatService;
19
20
  const store = useMemo(() => props.store || createStore(), [props.store]);
20
21
  const queryClient = useMemo(() => props.queryClient || new QueryClient({
@@ -30,10 +31,12 @@ export function LegendsPlatform(props) {
30
31
  return personaChatService;
31
32
  }
32
33
  if (apiKey) {
33
- return new FetchPersonaChatService(apiKey);
34
+ return new FetchPersonaChatService(apiKey, {
35
+ baseUrl
36
+ });
34
37
  }
35
38
  return undefined;
36
- }, [personaChatService, apiKey]);
39
+ }, [personaChatService, apiKey, baseUrl]);
37
40
  const telemetryRef = useRef(props.startupTelemetry);
38
41
  telemetryRef.current = props.startupTelemetry;
39
42
  const telemetryEnabled = (_props$startupTelemet = props.startupTelemetry) == null ? void 0 : _props$startupTelemet.enabled;
@@ -1 +1 @@
1
- {"version":3,"names":["React","useMemo","useRef","Provider","createStore","LiveKitRoom","QueryClientProvider","QueryClient","BusProvider","FetchPersonaChatService","SdkConsumerContext","StartupTelemetrySession","LegendsPlatform","props","_props$startupTelemet","_props$startupTelemet2","_props$startupTelemet3","chatId","namespace","children","className","_props$tools","tools","apiKey","personaChatService","store","queryClient","defaultOptions","queries","refetchOnMount","refetchOnWindowFocus","resolvedService","undefined","telemetryRef","startupTelemetry","current","telemetryEnabled","enabled","intentId","intent","id","attemptId","attempt","startupTelemetrySession","config","report","event","_telemetryRef$current","consumer","createElement","value","client","serverUrl","token"],"sources":["../../../../src/components/LegendsPlatform/LegendsPlatform.tsx"],"sourcesContent":["import React, { useMemo, useRef } from 'react';\nimport { Provider, createStore } from 'jotai';\nimport { type Store } from 'jotai/vanilla/store';\nimport { LiveKitRoom } from '@livekit/components-react';\nimport { QueryClientProvider, QueryClient } from '@tanstack/react-query';\nimport { Provider as BusProvider } from 'react-bus';\n\nimport type { ToolsRegistry } from '../../hooks/useTools/model/types';\nimport type { IPersonaChatService } from '../../types/service';\nimport { FetchPersonaChatService } from '../../services/FetchPersonaChatService';\nimport { SdkConsumerContext } from '../../sdk-consumer';\nimport {\n StartupTelemetrySession,\n type StartupTelemetryOptions,\n} from '../../startup-telemetry/attempt';\n\nexport type LegendsPlatformProps = {\n startupTelemetry?: StartupTelemetryOptions;\n chatId: string;\n namespace: string;\n apiKey?: string;\n personaChatService?: IPersonaChatService;\n store?: Store;\n tools?: ToolsRegistry;\n children: React.ReactNode;\n queryClient?: QueryClient;\n className?: string;\n};\n\nexport function LegendsPlatform(props: LegendsPlatformProps) {\n const {\n chatId,\n namespace,\n children,\n className,\n tools = {},\n apiKey,\n personaChatService,\n } = props;\n\n const store = useMemo(() => props.store || createStore(), [props.store]);\n\n const queryClient = useMemo(\n () =>\n props.queryClient ||\n new QueryClient({\n defaultOptions: {\n queries: { refetchOnMount: false, refetchOnWindowFocus: false },\n },\n }),\n [props.queryClient],\n );\n\n const resolvedService = useMemo<IPersonaChatService | undefined>(() => {\n if (personaChatService) {\n return personaChatService;\n }\n if (apiKey) {\n return new FetchPersonaChatService(apiKey);\n }\n return undefined;\n }, [personaChatService, apiKey]);\n\n const telemetryRef = useRef(props.startupTelemetry);\n telemetryRef.current = props.startupTelemetry;\n const telemetryEnabled = props.startupTelemetry?.enabled;\n const intentId = props.startupTelemetry?.intent?.id;\n const attemptId = props.startupTelemetry?.attempt?.id;\n const startupTelemetrySession = useMemo(() => {\n const config = telemetryRef.current;\n if (!telemetryEnabled || !config) {\n return undefined;\n }\n return new StartupTelemetrySession(\n {\n ...config,\n report: (event) => {\n if (telemetryRef.current?.enabled) {\n return telemetryRef.current.report?.(event);\n }\n return undefined;\n },\n },\n chatId,\n );\n // A new intent/attempt changes ownership; report callbacks stay live via the ref.\n }, [chatId, telemetryEnabled, intentId, attemptId]);\n\n const consumer = useMemo(\n () => ({\n chatId,\n namespace,\n tools,\n personaChatService: resolvedService,\n startupTelemetrySession,\n }),\n [chatId, namespace, tools, resolvedService, startupTelemetrySession],\n );\n\n return (\n <SdkConsumerContext.Provider value={consumer}>\n <QueryClientProvider client={queryClient}>\n <Provider store={store}>\n <BusProvider>\n <LiveKitRoom\n className={className}\n serverUrl={undefined}\n token={undefined}\n >\n {children}\n </LiveKitRoom>\n </BusProvider>\n </Provider>\n </QueryClientProvider>\n </SdkConsumerContext.Provider>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useMemo","useRef","Provider","createStore","LiveKitRoom","QueryClientProvider","QueryClient","BusProvider","FetchPersonaChatService","SdkConsumerContext","StartupTelemetrySession","LegendsPlatform","props","_props$startupTelemet","_props$startupTelemet2","_props$startupTelemet3","chatId","namespace","children","className","_props$tools","tools","apiKey","baseUrl","personaChatService","store","queryClient","defaultOptions","queries","refetchOnMount","refetchOnWindowFocus","resolvedService","undefined","telemetryRef","startupTelemetry","current","telemetryEnabled","enabled","intentId","intent","id","attemptId","attempt","startupTelemetrySession","config","report","event","_telemetryRef$current","consumer","createElement","value","client","serverUrl","token"],"sources":["../../../../src/components/LegendsPlatform/LegendsPlatform.tsx"],"sourcesContent":["import React, { useMemo, useRef } from 'react';\nimport { Provider, createStore } from 'jotai';\nimport { type Store } from 'jotai/vanilla/store';\nimport { LiveKitRoom } from '@livekit/components-react';\nimport { QueryClientProvider, QueryClient } from '@tanstack/react-query';\nimport { Provider as BusProvider } from 'react-bus';\n\nimport type { ToolsRegistry } from '../../hooks/useTools/model/types';\nimport type { IPersonaChatService } from '../../types/service';\nimport { FetchPersonaChatService } from '../../services/FetchPersonaChatService';\nimport { SdkConsumerContext } from '../../sdk-consumer';\nimport {\n StartupTelemetrySession,\n type StartupTelemetryOptions,\n} from '../../startup-telemetry/attempt';\n\nexport type LegendsPlatformProps = {\n startupTelemetry?: StartupTelemetryOptions;\n chatId: string;\n namespace: string;\n /** Server-side only: a namespace API key never reaches a browser (use personaChatService with a BearerPersonaChatService there). */\n apiKey?: string;\n /** API host for the apiKey service. Defaults to https://www.wixapis.com. */\n baseUrl?: string;\n personaChatService?: IPersonaChatService;\n store?: Store;\n tools?: ToolsRegistry;\n children: React.ReactNode;\n queryClient?: QueryClient;\n className?: string;\n};\n\nexport function LegendsPlatform(props: LegendsPlatformProps) {\n const {\n chatId,\n namespace,\n children,\n className,\n tools = {},\n apiKey,\n baseUrl,\n personaChatService,\n } = props;\n\n const store = useMemo(() => props.store || createStore(), [props.store]);\n\n const queryClient = useMemo(\n () =>\n props.queryClient ||\n new QueryClient({\n defaultOptions: {\n queries: { refetchOnMount: false, refetchOnWindowFocus: false },\n },\n }),\n [props.queryClient],\n );\n\n const resolvedService = useMemo<IPersonaChatService | undefined>(() => {\n if (personaChatService) {\n return personaChatService;\n }\n if (apiKey) {\n return new FetchPersonaChatService(apiKey, { baseUrl });\n }\n return undefined;\n }, [personaChatService, apiKey, baseUrl]);\n\n const telemetryRef = useRef(props.startupTelemetry);\n telemetryRef.current = props.startupTelemetry;\n const telemetryEnabled = props.startupTelemetry?.enabled;\n const intentId = props.startupTelemetry?.intent?.id;\n const attemptId = props.startupTelemetry?.attempt?.id;\n const startupTelemetrySession = useMemo(() => {\n const config = telemetryRef.current;\n if (!telemetryEnabled || !config) {\n return undefined;\n }\n return new StartupTelemetrySession(\n {\n ...config,\n report: (event) => {\n if (telemetryRef.current?.enabled) {\n return telemetryRef.current.report?.(event);\n }\n return undefined;\n },\n },\n chatId,\n );\n // A new intent/attempt changes ownership; report callbacks stay live via the ref.\n }, [chatId, telemetryEnabled, intentId, attemptId]);\n\n const consumer = useMemo(\n () => ({\n chatId,\n namespace,\n tools,\n personaChatService: resolvedService,\n startupTelemetrySession,\n }),\n [chatId, namespace, tools, resolvedService, startupTelemetrySession],\n );\n\n return (\n <SdkConsumerContext.Provider value={consumer}>\n <QueryClientProvider client={queryClient}>\n <Provider store={store}>\n <BusProvider>\n <LiveKitRoom\n className={className}\n serverUrl={undefined}\n token={undefined}\n >\n {children}\n </LiveKitRoom>\n </BusProvider>\n </Provider>\n </QueryClientProvider>\n </SdkConsumerContext.Provider>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,40 @@
1
+ import React, { useMemo } from 'react';
2
+ import { Provider, createStore } from 'jotai';
3
+ import { QueryClientProvider, QueryClient } from '@tanstack/react-query';
4
+ import { Provider as BusProvider } from 'react-bus';
5
+ import { SdkConsumerContext } from '../../sdk-consumer';
6
+ /**
7
+ * The text-chat providers without LiveKit, from the main entry: for a page that
8
+ * loads LiveKit only when a call starts (`@wix/legends-platform-sdk/livekit/sdk`'s
9
+ * LegendsPlatform then wraps the call, with the same store and query client).
10
+ */
11
+ export function LegendsPlatformCore(props) {
12
+ const chatId = props.chatId,
13
+ namespace = props.namespace,
14
+ personaChatService = props.personaChatService,
15
+ tools = props.tools,
16
+ children = props.children;
17
+ const store = useMemo(() => props.store || createStore(), [props.store]);
18
+ const queryClient = useMemo(() => props.queryClient || new QueryClient({
19
+ defaultOptions: {
20
+ queries: {
21
+ refetchOnMount: false,
22
+ refetchOnWindowFocus: false
23
+ }
24
+ }
25
+ }), [props.queryClient]);
26
+ const consumer = useMemo(() => ({
27
+ chatId,
28
+ namespace,
29
+ tools: tools ?? {},
30
+ personaChatService
31
+ }), [chatId, namespace, tools, personaChatService]);
32
+ return /*#__PURE__*/React.createElement(SdkConsumerContext.Provider, {
33
+ value: consumer
34
+ }, /*#__PURE__*/React.createElement(QueryClientProvider, {
35
+ client: queryClient
36
+ }, /*#__PURE__*/React.createElement(Provider, {
37
+ store: store
38
+ }, /*#__PURE__*/React.createElement(BusProvider, null, children))));
39
+ }
40
+ //# sourceMappingURL=LegendsPlatformCore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useMemo","Provider","createStore","QueryClientProvider","QueryClient","BusProvider","SdkConsumerContext","LegendsPlatformCore","props","chatId","namespace","personaChatService","tools","children","store","queryClient","defaultOptions","queries","refetchOnMount","refetchOnWindowFocus","consumer","createElement","value","client"],"sources":["../../../../src/components/LegendsPlatformCore/LegendsPlatformCore.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { Provider, createStore } from 'jotai';\nimport { type Store } from 'jotai/vanilla/store';\nimport { QueryClientProvider, QueryClient } from '@tanstack/react-query';\nimport { Provider as BusProvider } from 'react-bus';\n\nimport type { ToolsRegistry } from '../../hooks/useTools/model/types';\nimport type { IPersonaChatService } from '../../types/service';\nimport { SdkConsumerContext } from '../../sdk-consumer';\n\nexport type LegendsPlatformCoreProps = {\n chatId: string;\n namespace: string;\n /** Required: in a browser, a BearerPersonaChatService with the caller's own token. */\n personaChatService: IPersonaChatService;\n tools?: ToolsRegistry;\n /** Pass the same store and query client to LegendsPlatform when a call starts, to keep the chat state. */\n store?: Store;\n queryClient?: QueryClient;\n children: React.ReactNode;\n};\n\n/**\n * The text-chat providers without LiveKit, from the main entry: for a page that\n * loads LiveKit only when a call starts (`@wix/legends-platform-sdk/livekit/sdk`'s\n * LegendsPlatform then wraps the call, with the same store and query client).\n */\nexport function LegendsPlatformCore(props: LegendsPlatformCoreProps) {\n const { chatId, namespace, personaChatService, tools, children } = props;\n\n const store = useMemo(() => props.store || createStore(), [props.store]);\n const queryClient = useMemo(\n () =>\n props.queryClient ||\n new QueryClient({\n defaultOptions: {\n queries: { refetchOnMount: false, refetchOnWindowFocus: false },\n },\n }),\n [props.queryClient],\n );\n\n const consumer = useMemo(\n () => ({ chatId, namespace, tools: tools ?? {}, personaChatService }),\n [chatId, namespace, tools, personaChatService],\n );\n\n return (\n <SdkConsumerContext.Provider value={consumer}>\n <QueryClientProvider client={queryClient}>\n <Provider store={store}>\n <BusProvider>{children}</BusProvider>\n </Provider>\n </QueryClientProvider>\n </SdkConsumerContext.Provider>\n );\n}\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AACtC,SAASC,QAAQ,EAAEC,WAAW,QAAQ,OAAO;AAE7C,SAASC,mBAAmB,EAAEC,WAAW,QAAQ,uBAAuB;AACxE,SAASH,QAAQ,IAAII,WAAW,QAAQ,WAAW;AAInD,SAASC,kBAAkB,QAAQ,oBAAoB;AAcvD;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,mBAAmBA,CAACC,KAA+B,EAAE;EACnE,MAAQC,MAAM,GAAqDD,KAAK,CAAhEC,MAAM;IAAEC,SAAS,GAA0CF,KAAK,CAAxDE,SAAS;IAAEC,kBAAkB,GAAsBH,KAAK,CAA7CG,kBAAkB;IAAEC,KAAK,GAAeJ,KAAK,CAAzBI,KAAK;IAAEC,QAAQ,GAAKL,KAAK,CAAlBK,QAAQ;EAE9D,MAAMC,KAAK,GAAGd,OAAO,CAAC,MAAMQ,KAAK,CAACM,KAAK,IAAIZ,WAAW,CAAC,CAAC,EAAE,CAACM,KAAK,CAACM,KAAK,CAAC,CAAC;EACxE,MAAMC,WAAW,GAAGf,OAAO,CACzB,MACEQ,KAAK,CAACO,WAAW,IACjB,IAAIX,WAAW,CAAC;IACdY,cAAc,EAAE;MACdC,OAAO,EAAE;QAAEC,cAAc,EAAE,KAAK;QAAEC,oBAAoB,EAAE;MAAM;IAChE;EACF,CAAC,CAAC,EACJ,CAACX,KAAK,CAACO,WAAW,CACpB,CAAC;EAED,MAAMK,QAAQ,GAAGpB,OAAO,CACtB,OAAO;IAAES,MAAM;IAAEC,SAAS;IAAEE,KAAK,EAAEA,KAAK,IAAI,CAAC,CAAC;IAAED;EAAmB,CAAC,CAAC,EACrE,CAACF,MAAM,EAAEC,SAAS,EAAEE,KAAK,EAAED,kBAAkB,CAC/C,CAAC;EAED,oBACEZ,KAAA,CAAAsB,aAAA,CAACf,kBAAkB,CAACL,QAAQ;IAACqB,KAAK,EAAEF;EAAS,gBAC3CrB,KAAA,CAAAsB,aAAA,CAAClB,mBAAmB;IAACoB,MAAM,EAAER;EAAY,gBACvChB,KAAA,CAAAsB,aAAA,CAACpB,QAAQ;IAACa,KAAK,EAAEA;EAAM,gBACrBf,KAAA,CAAAsB,aAAA,CAAChB,WAAW,QAAEQ,QAAsB,CAC5B,CACS,CACM,CAAC;AAElC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export * from './LegendsPlatformCore';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../../../src/components/LegendsPlatformCore/index.ts"],"sourcesContent":["export * from './LegendsPlatformCore';\n"],"mappings":"AAAA,cAAc,uBAAuB","ignoreList":[]}
@@ -91,6 +91,7 @@ export async function streamChatMessage(params, callbacks, signal) {
91
91
  attachments = params.attachments,
92
92
  metadata = params.metadata,
93
93
  conversationLanguage = params.conversationLanguage,
94
+ includeCitations = params.includeCitations,
94
95
  headers = params.headers;
95
96
  const onChunk = callbacks.onChunk,
96
97
  onDone = callbacks.onDone,
@@ -117,7 +118,8 @@ export async function streamChatMessage(params, callbacks, signal) {
117
118
  chatConfig,
118
119
  attachments,
119
120
  metadata,
120
- conversationLanguage
121
+ conversationLanguage,
122
+ includeCitations
121
123
  }),
122
124
  signal
123
125
  });
@@ -1 +1 @@
1
- {"version":3,"names":["DEFAULT_STREAM_PATH","readCookie","name","_document$cookie$spli","document","undefined","cookie","split","map","part","trim","find","startsWith","slice","length","extractContent","frame","parsed","JSON","parse","content","body","decoded","TextDecoder","decode","Uint8Array","from","atob","char","charCodeAt","inner","extractCanSendChatMessage","payload","canSendChatMessage","createObjectScanner","onObject","buffer","cursor","braceDepth","objectStart","inString","escaped","feed","text","streamChatMessage","params","callbacks","signal","chatId","message","namespace","chatConfig","attachments","metadata","conversationLanguage","headers","onChunk","onDone","onError","onCanSendChatMessage","xsrfToken","autoXsrf","response","fetch","method","credentials","stringify","ok","Error","status","scanForObjects","canSend","reader","getReader","decoder","_await$reader$read","read","done","value","stream","err"],"sources":["../../../../src/hooks/useTextChat/streamChatMessage.ts"],"sourcesContent":["// Same-origin Wix persona-chat gateway path. The transport always posts here\n// with `credentials: 'include'`, so the session cookie rides along and a\n// consumer needs no proxy route of its own.\nconst DEFAULT_STREAM_PATH =\n '/_api/persona-chat-service/v1/chat/messages/stream';\n\nexport type StreamCallbacks = {\n onChunk: (token: string) => void;\n onDone: () => void;\n onError: (err: Error) => void;\n onCanSendChatMessage?: (canSend: boolean) => void;\n};\n\nexport type StreamChatMessageParams = {\n chatId: string;\n message: string;\n namespace: string;\n chatConfig?: object;\n attachments?: object[];\n // Request metadata forwarded to the RPC (e.g. `additionalMetadata` carrying\n // opening-message context). Mirrors the top-level `metadata` object the unary\n // `sendChatMessage` request accepts, so a streamed send carries it identically.\n metadata?: object;\n // Language or locale for the persona's text reply, e.g. es or en-GB.\n conversationLanguage?: string;\n // Extra request headers merged onto the POST. Lets the caller satisfy the\n // host's transport requirements the SDK can't know about — e.g. an\n // `x-xsrf-token` when the endpoint sits behind a CSRF-protected gateway.\n headers?: Record<string, string>;\n};\n\n// Read a cookie value by name in the browser. Returns undefined outside a\n// browser or when the cookie is absent.\nfunction readCookie(name: string): string | undefined {\n if (typeof document === 'undefined') {\n return undefined;\n }\n return document.cookie\n .split(';')\n .map((part) => part.trim())\n .find((part) => part.startsWith(`${name}=`))\n ?.slice(name.length + 1);\n}\n\n// Pull the assistant text out of one streamed frame. Two framings reach us: the\n// proxy route yields `{ content }` objects, while the gateway wraps each frame\n// as `{ body: base64(json) }`. Returns null for frames without content.\nexport function extractContent(frame: string): string | null {\n try {\n const parsed = JSON.parse(frame);\n if (typeof parsed.content === 'string') {\n return parsed.content;\n }\n if (typeof parsed.body === 'string') {\n const decoded = new TextDecoder().decode(\n Uint8Array.from(atob(parsed.body), (char) => char.charCodeAt(0)),\n );\n const inner = JSON.parse(decoded);\n return typeof inner.content === 'string' ? inner.content : null;\n }\n } catch {\n // Incomplete or non-object frame — skip it.\n }\n return null;\n}\n\n// Same lookup order as extractContent: top level first, then the gateway body.\nexport function extractCanSendChatMessage(frame: string): boolean | null {\n try {\n const parsed = JSON.parse(frame);\n const payload =\n typeof parsed.canSendChatMessage === 'boolean' ||\n typeof parsed.body !== 'string'\n ? parsed\n : JSON.parse(\n new TextDecoder().decode(\n Uint8Array.from(atob(parsed.body), (char) => char.charCodeAt(0)),\n ),\n );\n return typeof payload.canSendChatMessage === 'boolean'\n ? payload.canSendChatMessage\n : null;\n } catch {\n return null;\n }\n}\n\n// Feeds decoded text through a running scanner that emits each complete\n// top-level `{…}` object as its closing brace arrives.\nexport function createObjectScanner(onObject: (frame: string) => void) {\n let buffer = '';\n let cursor = 0;\n let braceDepth = 0;\n let objectStart = -1;\n let inString = false;\n let escaped = false;\n\n return function feed(text: string) {\n buffer += text;\n for (; cursor < buffer.length; cursor++) {\n const char = buffer[cursor];\n if (inString) {\n if (escaped) {\n escaped = false;\n } else if (char === '\\\\') {\n escaped = true;\n } else if (char === '\"') {\n inString = false;\n }\n continue;\n }\n if (char === '\"') {\n inString = true;\n } else if (char === '{') {\n if (braceDepth === 0) {\n objectStart = cursor;\n }\n braceDepth++;\n } else if (char === '}' && braceDepth > 0) {\n braceDepth--;\n if (braceDepth === 0 && objectStart >= 0) {\n onObject(buffer.slice(objectStart, cursor + 1));\n objectStart = -1;\n }\n }\n }\n };\n}\n\nexport async function streamChatMessage(\n params: StreamChatMessageParams,\n callbacks: StreamCallbacks,\n signal?: AbortSignal,\n): Promise<void> {\n const {\n chatId,\n message,\n namespace,\n chatConfig,\n attachments,\n metadata,\n conversationLanguage,\n headers,\n } = params;\n const { onChunk, onDone, onError, onCanSendChatMessage } = callbacks;\n\n const xsrfToken = readCookie('XSRF-TOKEN');\n const autoXsrf =\n !headers?.['x-xsrf-token'] && xsrfToken\n ? { 'x-xsrf-token': xsrfToken }\n : undefined;\n\n try {\n // eslint-disable-next-line no-undef\n const response = await fetch(DEFAULT_STREAM_PATH, {\n method: 'POST',\n credentials: 'include',\n headers: { 'Content-Type': 'application/json', ...autoXsrf, ...headers },\n body: JSON.stringify({\n chatId,\n message,\n namespace,\n chatConfig,\n attachments,\n metadata,\n conversationLanguage,\n }),\n signal,\n });\n\n if (!response.ok || !response.body) {\n onError(new Error(`Stream request failed: ${response.status}`));\n return;\n }\n\n const scanForObjects = createObjectScanner((frame) => {\n const content = extractContent(frame);\n if (content !== null) {\n onChunk(content);\n }\n const canSend = extractCanSendChatMessage(frame);\n if (canSend !== null) {\n onCanSendChatMessage?.(canSend);\n }\n });\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n for (;;) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n scanForObjects(decoder.decode(value, { stream: true }));\n }\n scanForObjects(decoder.decode());\n onDone();\n } catch (err) {\n if ((err as Error).name !== 'AbortError') {\n onError(err as Error);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["DEFAULT_STREAM_PATH","readCookie","name","_document$cookie$spli","document","undefined","cookie","split","map","part","trim","find","startsWith","slice","length","extractContent","frame","parsed","JSON","parse","content","body","decoded","TextDecoder","decode","Uint8Array","from","atob","char","charCodeAt","inner","extractCanSendChatMessage","payload","canSendChatMessage","createObjectScanner","onObject","buffer","cursor","braceDepth","objectStart","inString","escaped","feed","text","streamChatMessage","params","callbacks","signal","chatId","message","namespace","chatConfig","attachments","metadata","conversationLanguage","includeCitations","headers","onChunk","onDone","onError","onCanSendChatMessage","xsrfToken","autoXsrf","response","fetch","method","credentials","stringify","ok","Error","status","scanForObjects","canSend","reader","getReader","decoder","_await$reader$read","read","done","value","stream","err"],"sources":["../../../../src/hooks/useTextChat/streamChatMessage.ts"],"sourcesContent":["// Same-origin Wix persona-chat gateway path. The transport always posts here\n// with `credentials: 'include'`, so the session cookie rides along and a\n// consumer needs no proxy route of its own.\nconst DEFAULT_STREAM_PATH =\n '/_api/persona-chat-service/v1/chat/messages/stream';\n\nexport type StreamCallbacks = {\n onChunk: (token: string) => void;\n onDone: () => void;\n onError: (err: Error) => void;\n onCanSendChatMessage?: (canSend: boolean) => void;\n};\n\nexport type StreamChatMessageParams = {\n chatId: string;\n message: string;\n namespace: string;\n chatConfig?: object;\n attachments?: object[];\n // Request metadata forwarded to the RPC (e.g. `additionalMetadata` carrying\n // opening-message context). Mirrors the top-level `metadata` object the unary\n // `sendChatMessage` request accepts, so a streamed send carries it identically.\n metadata?: object;\n // Language or locale for the persona's text reply, e.g. es or en-GB.\n conversationLanguage?: string;\n // Asks the backend for the Knowledge sources behind the answer. Honoured\n // only in PREVIEW chats.\n includeCitations?: boolean;\n // Extra request headers merged onto the POST. Lets the caller satisfy the\n // host's transport requirements the SDK can't know about — e.g. an\n // `x-xsrf-token` when the endpoint sits behind a CSRF-protected gateway.\n headers?: Record<string, string>;\n};\n\n// Read a cookie value by name in the browser. Returns undefined outside a\n// browser or when the cookie is absent.\nfunction readCookie(name: string): string | undefined {\n if (typeof document === 'undefined') {\n return undefined;\n }\n return document.cookie\n .split(';')\n .map((part) => part.trim())\n .find((part) => part.startsWith(`${name}=`))\n ?.slice(name.length + 1);\n}\n\n// Pull the assistant text out of one streamed frame. Two framings reach us: the\n// proxy route yields `{ content }` objects, while the gateway wraps each frame\n// as `{ body: base64(json) }`. Returns null for frames without content.\nexport function extractContent(frame: string): string | null {\n try {\n const parsed = JSON.parse(frame);\n if (typeof parsed.content === 'string') {\n return parsed.content;\n }\n if (typeof parsed.body === 'string') {\n const decoded = new TextDecoder().decode(\n Uint8Array.from(atob(parsed.body), (char) => char.charCodeAt(0)),\n );\n const inner = JSON.parse(decoded);\n return typeof inner.content === 'string' ? inner.content : null;\n }\n } catch {\n // Incomplete or non-object frame — skip it.\n }\n return null;\n}\n\n// Same lookup order as extractContent: top level first, then the gateway body.\nexport function extractCanSendChatMessage(frame: string): boolean | null {\n try {\n const parsed = JSON.parse(frame);\n const payload =\n typeof parsed.canSendChatMessage === 'boolean' ||\n typeof parsed.body !== 'string'\n ? parsed\n : JSON.parse(\n new TextDecoder().decode(\n Uint8Array.from(atob(parsed.body), (char) => char.charCodeAt(0)),\n ),\n );\n return typeof payload.canSendChatMessage === 'boolean'\n ? payload.canSendChatMessage\n : null;\n } catch {\n return null;\n }\n}\n\n// Feeds decoded text through a running scanner that emits each complete\n// top-level `{…}` object as its closing brace arrives.\nexport function createObjectScanner(onObject: (frame: string) => void) {\n let buffer = '';\n let cursor = 0;\n let braceDepth = 0;\n let objectStart = -1;\n let inString = false;\n let escaped = false;\n\n return function feed(text: string) {\n buffer += text;\n for (; cursor < buffer.length; cursor++) {\n const char = buffer[cursor];\n if (inString) {\n if (escaped) {\n escaped = false;\n } else if (char === '\\\\') {\n escaped = true;\n } else if (char === '\"') {\n inString = false;\n }\n continue;\n }\n if (char === '\"') {\n inString = true;\n } else if (char === '{') {\n if (braceDepth === 0) {\n objectStart = cursor;\n }\n braceDepth++;\n } else if (char === '}' && braceDepth > 0) {\n braceDepth--;\n if (braceDepth === 0 && objectStart >= 0) {\n onObject(buffer.slice(objectStart, cursor + 1));\n objectStart = -1;\n }\n }\n }\n };\n}\n\nexport async function streamChatMessage(\n params: StreamChatMessageParams,\n callbacks: StreamCallbacks,\n signal?: AbortSignal,\n): Promise<void> {\n const {\n chatId,\n message,\n namespace,\n chatConfig,\n attachments,\n metadata,\n conversationLanguage,\n includeCitations,\n headers,\n } = params;\n const { onChunk, onDone, onError, onCanSendChatMessage } = callbacks;\n\n const xsrfToken = readCookie('XSRF-TOKEN');\n const autoXsrf =\n !headers?.['x-xsrf-token'] && xsrfToken\n ? { 'x-xsrf-token': xsrfToken }\n : undefined;\n\n try {\n // eslint-disable-next-line no-undef\n const response = await fetch(DEFAULT_STREAM_PATH, {\n method: 'POST',\n credentials: 'include',\n headers: { 'Content-Type': 'application/json', ...autoXsrf, ...headers },\n body: JSON.stringify({\n chatId,\n message,\n namespace,\n chatConfig,\n attachments,\n metadata,\n conversationLanguage,\n includeCitations,\n }),\n signal,\n });\n\n if (!response.ok || !response.body) {\n onError(new Error(`Stream request failed: ${response.status}`));\n return;\n }\n\n const scanForObjects = createObjectScanner((frame) => {\n const content = extractContent(frame);\n if (content !== null) {\n onChunk(content);\n }\n const canSend = extractCanSendChatMessage(frame);\n if (canSend !== null) {\n onCanSendChatMessage?.(canSend);\n }\n });\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n for (;;) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n scanForObjects(decoder.decode(value, { stream: true }));\n }\n scanForObjects(decoder.decode());\n onDone();\n } catch (err) {\n if ((err as Error).name !== 'AbortError') {\n onError(err as Error);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -9,12 +9,13 @@ export function useTextChat(options) {
9
9
  const _options = options,
10
10
  _options$limit = _options.limit,
11
11
  limit = _options$limit === void 0 ? 100 : _options$limit,
12
- conversationLanguage = _options.conversationLanguage;
12
+ conversationLanguage = _options.conversationLanguage,
13
+ includeCitations = _options.includeCitations;
13
14
  const _useSdkConsumer = useSdkConsumer(),
14
15
  chatId = _useSdkConsumer.chatId,
15
16
  namespace = _useSdkConsumer.namespace,
16
17
  personaChatService = _useSdkConsumer.personaChatService;
17
- const send = useToolAwareSend(chatId, namespace, conversationLanguage);
18
+ const send = useToolAwareSend(chatId, namespace, conversationLanguage, includeCitations);
18
19
  const pending = usePendingMessages();
19
20
  const _useInfiniteQuery = useInfiniteQuery({
20
21
  queryKey: ['chat-messages', chatId, namespace],