@paymanai/payman-typescript-ask-sdk 4.0.4 → 4.0.6

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/index.mjs CHANGED
@@ -952,16 +952,40 @@ function createCancelledMessageUpdate(steps, currentMessage) {
952
952
  var DEFAULT_STREAM_ENDPOINT = "/api/playground/ask/stream";
953
953
  function buildRequestBody(config, userMessage, sessionId, options) {
954
954
  const sessionOwner = config.sessionParams;
955
+ const sessionOwnerId = sessionOwner?.id?.trim();
956
+ if (!sessionOwnerId) {
957
+ throw new Error("ChatConfig.sessionParams.id is required to send ask requests.");
958
+ }
955
959
  const sessionAttributes = sessionOwner?.attributes && Object.keys(sessionOwner.attributes).length > 0 ? sessionOwner.attributes : void 0;
956
960
  return {
957
961
  agentId: config.agentId,
958
962
  userInput: userMessage,
959
963
  sessionId,
964
+ sessionOwnerId,
960
965
  sessionOwnerLabel: sessionOwner?.name || void 0,
961
966
  sessionAttributes,
962
- analysisMode: options?.analysisMode
967
+ analysisMode: options?.analysisMode,
968
+ locale: resolveLocale(config.locale),
969
+ timezone: resolveTimezone(config.timezone)
963
970
  };
964
971
  }
972
+ function resolveLocale(configured) {
973
+ if (configured && configured.trim().length > 0) return configured.trim();
974
+ if (typeof navigator !== "undefined") {
975
+ const navLocale = navigator.language;
976
+ if (navLocale && navLocale.length > 0) return navLocale;
977
+ }
978
+ return "en-US";
979
+ }
980
+ function resolveTimezone(configured) {
981
+ if (configured && configured.trim().length > 0) return configured.trim();
982
+ try {
983
+ const zone = Intl.DateTimeFormat().resolvedOptions().timeZone;
984
+ if (zone && zone.length > 0) return zone;
985
+ } catch {
986
+ }
987
+ return "UTC";
988
+ }
965
989
  function buildStreamingUrl(config) {
966
990
  const endpoint = config.api.streamEndpoint || DEFAULT_STREAM_ENDPOINT;
967
991
  const stage = config.stage || "DEV";
@@ -1174,16 +1198,16 @@ function useStreamManagerV2(config, callbacks, setMessages, setIsWaitingForRespo
1174
1198
  )
1175
1199
  );
1176
1200
  };
1177
- const currentConfig = configRef.current;
1178
- const requestBody = buildRequestBody(
1179
- currentConfig,
1180
- userMessage,
1181
- sessionId,
1182
- options
1183
- );
1184
- const url = buildStreamingUrl(currentConfig);
1185
- const headers = buildRequestHeaders(currentConfig);
1186
1201
  try {
1202
+ const currentConfig = configRef.current;
1203
+ const requestBody = buildRequestBody(
1204
+ currentConfig,
1205
+ userMessage,
1206
+ sessionId,
1207
+ options
1208
+ );
1209
+ const url = buildStreamingUrl(currentConfig);
1210
+ const headers = buildRequestHeaders(currentConfig);
1187
1211
  await streamWorkflowEvents(url, requestBody, headers, {
1188
1212
  signal: abortController.signal,
1189
1213
  onEvent: (event) => {
@@ -1405,14 +1429,24 @@ function useStreamManagerV2(config, callbacks, setMessages, setIsWaitingForRespo
1405
1429
  }
1406
1430
 
1407
1431
  // src/hooks/useChatV2.ts
1432
+ function getStoredOrInitialMessages(config) {
1433
+ if (!config.userId) return config.initialMessages ?? [];
1434
+ const stored = chatStore.get(config.userId);
1435
+ if (stored.length > 0) return stored;
1436
+ if (config.initialMessages?.length) {
1437
+ chatStore.set(config.userId, config.initialMessages);
1438
+ return config.initialMessages;
1439
+ }
1440
+ return [];
1441
+ }
1442
+ function getSessionIdFromMessages(messages) {
1443
+ return messages.find((message) => message.sessionId)?.sessionId;
1444
+ }
1408
1445
  function useChatV2(config, callbacks = {}) {
1409
- const [messages, setMessages] = useState(() => {
1410
- if (config.userId) return chatStore.get(config.userId);
1411
- return config.initialMessages ?? [];
1412
- });
1446
+ const [messages, setMessages] = useState(() => getStoredOrInitialMessages(config));
1413
1447
  const [isWaitingForResponse, setIsWaitingForResponse] = useState(false);
1414
1448
  const sessionIdRef = useRef(
1415
- config.userId ? chatStore.get(config.userId).find((m) => m.sessionId)?.sessionId ?? config.initialSessionId ?? void 0 : config.initialSessionId ?? void 0
1449
+ getSessionIdFromMessages(getStoredOrInitialMessages(config)) ?? config.initialSessionId ?? void 0
1416
1450
  );
1417
1451
  const prevUserIdRef = useRef(config.userId);
1418
1452
  const callbacksRef = useRef(callbacks);
@@ -1656,7 +1690,7 @@ function useChatV2(config, callbacks = {}) {
1656
1690
  setIsWaitingForResponse(active.isWaiting);
1657
1691
  }
1658
1692
  return unsubscribe;
1659
- }, []);
1693
+ }, [config.userId]);
1660
1694
  useEffect(() => {
1661
1695
  if (!config.userId) return;
1662
1696
  const toSave = messages.filter((m) => !m.isStreaming);
@@ -1664,6 +1698,13 @@ function useChatV2(config, callbacks = {}) {
1664
1698
  chatStore.set(config.userId, toSave);
1665
1699
  }
1666
1700
  }, [messages, config.userId]);
1701
+ useEffect(() => {
1702
+ if (!config.userId || activeStreamStore.has(config.userId)) return;
1703
+ if (!config.initialMessages?.length || messagesRef.current.length > 0) return;
1704
+ chatStore.set(config.userId, config.initialMessages);
1705
+ setMessages(config.initialMessages);
1706
+ sessionIdRef.current = getSessionIdFromMessages(config.initialMessages) ?? config.initialSessionId;
1707
+ }, [config.initialMessages, config.initialSessionId, config.userId]);
1667
1708
  useEffect(() => {
1668
1709
  const prevUserId = prevUserIdRef.current;
1669
1710
  prevUserIdRef.current = config.userId;
@@ -1675,11 +1716,19 @@ function useChatV2(config, callbacks = {}) {
1675
1716
  setIsWaitingForResponse(false);
1676
1717
  setUserActionState({ request: null, result: null, clearOtpTrigger: 0 });
1677
1718
  } else if (config.userId) {
1678
- const stored = chatStore.get(config.userId);
1679
- setMessages(stored);
1680
- sessionIdRef.current = stored.find((m) => m.sessionId)?.sessionId;
1719
+ const active = activeStreamStore.get(config.userId);
1720
+ if (active) {
1721
+ setMessages(active.messages);
1722
+ setIsWaitingForResponse(active.isWaiting);
1723
+ sessionIdRef.current = getSessionIdFromMessages(active.messages) ?? config.initialSessionId;
1724
+ return;
1725
+ }
1726
+ const nextMessages = getStoredOrInitialMessages(config);
1727
+ setMessages(nextMessages);
1728
+ sessionIdRef.current = getSessionIdFromMessages(nextMessages) ?? config.initialSessionId;
1729
+ setIsWaitingForResponse(false);
1681
1730
  }
1682
- }, [config.userId]);
1731
+ }, [config]);
1683
1732
  return {
1684
1733
  messages,
1685
1734
  sendMessage,