@paymanai/payman-typescript-ask-sdk 1.2.7 → 1.2.9

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
@@ -334,8 +334,10 @@ function processStreamEvent(event, state) {
334
334
  if (event.userActionRequest) {
335
335
  state.userActionRequest = {
336
336
  userActionId: event.userActionRequest.userActionId,
337
+ userActionType: event.userActionRequest.userActionType,
337
338
  message: event.userActionRequest.message,
338
- requestedSchema: event.userActionRequest.requestedSchema
339
+ requestedSchema: event.userActionRequest.requestedSchema,
340
+ metadata: event.userActionRequest.metadata
339
341
  };
340
342
  }
341
343
  state.userActionPending = true;
@@ -527,7 +529,8 @@ function createFinalMessage(streamingId, state) {
527
529
  currentExecutingStepId: void 0,
528
530
  userActionResult: state.userActionResult,
529
531
  activeThinkingText: void 0,
530
- allThinkingText: state.hasError ? void 0 : state.allThinkingText
532
+ allThinkingText: state.hasError ? void 0 : state.allThinkingText,
533
+ isResolvingImages: state.hasError ? void 0 : state.isResolvingImages
531
534
  };
532
535
  }
533
536
  function createCancelledMessageUpdate(steps, currentMessage) {
@@ -581,6 +584,16 @@ function buildUserActionUrl(config, userActionId, action) {
581
584
  const encodedUserActionId = encodeURIComponent(userActionId);
582
585
  return `${config.api.baseUrl}${basePath}/user-action/${encodedUserActionId}/${action}`;
583
586
  }
587
+ function buildResolveImagesUrl(config) {
588
+ if (config.api.resolveImagesEndpoint) {
589
+ return `${config.api.baseUrl}${config.api.resolveImagesEndpoint}`;
590
+ }
591
+ const streamEndpoint = config.api.streamEndpoint || "/api/workflows/ask/stream";
592
+ const [endpointPath] = streamEndpoint.split("?");
593
+ const normalizedEndpointPath = endpointPath.replace(/\/+$/, "");
594
+ const basePath = normalizedEndpointPath.endsWith("/stream") ? normalizedEndpointPath.slice(0, -"/stream".length) : normalizedEndpointPath;
595
+ return `${config.api.baseUrl}${basePath}/resolve-image-urls`;
596
+ }
584
597
  function buildRequestHeaders(config) {
585
598
  const headers = {
586
599
  ...config.api.headers
@@ -695,6 +708,58 @@ var activeStreamStore = {
695
708
  streams.delete(key);
696
709
  }
697
710
  };
711
+
712
+ // src/utils/ragImageResolver.ts
713
+ var RAG_IMAGE_REGEX = /\/api\/rag\/chunks\/[^"'\s]+\/image/;
714
+ function hasRagImages(content) {
715
+ return RAG_IMAGE_REGEX.test(content);
716
+ }
717
+ async function waitForNextPaint(signal) {
718
+ if (signal?.aborted) return;
719
+ await new Promise((resolve) => {
720
+ let isSettled = false;
721
+ const finish = () => {
722
+ if (isSettled) return;
723
+ isSettled = true;
724
+ signal?.removeEventListener("abort", finish);
725
+ resolve();
726
+ };
727
+ signal?.addEventListener("abort", finish, { once: true });
728
+ if (typeof requestAnimationFrame === "function") {
729
+ requestAnimationFrame(() => {
730
+ setTimeout(finish, 0);
731
+ });
732
+ return;
733
+ }
734
+ setTimeout(finish, 0);
735
+ });
736
+ }
737
+ async function resolveRagImageUrls(config, content, signal) {
738
+ const url = buildResolveImagesUrl(config);
739
+ const baseHeaders = buildRequestHeaders(config);
740
+ const headers = { "Content-Type": "application/json", ...baseHeaders };
741
+ const response = await fetch(url, {
742
+ method: "POST",
743
+ headers,
744
+ body: JSON.stringify({ input: content }),
745
+ signal
746
+ });
747
+ if (!response.ok) {
748
+ const errorText = await response.text();
749
+ throw new Error(`HTTP ${response.status}: ${errorText}`);
750
+ }
751
+ const text = await response.text();
752
+ try {
753
+ const parsed = JSON.parse(text);
754
+ if (typeof parsed === "string") return parsed;
755
+ if (typeof parsed.output === "string") return parsed.output;
756
+ if (typeof parsed.result === "string") return parsed.result;
757
+ } catch {
758
+ }
759
+ return text;
760
+ }
761
+
762
+ // src/hooks/useStreamManager.ts
698
763
  function useStreamManager(config, callbacks, setMessages, setIsWaitingForResponse) {
699
764
  const abortControllerRef = useRef(null);
700
765
  const configRef = useRef(config);
@@ -860,9 +925,11 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
860
925
  if (state.currentSessionId && state.currentSessionId !== sessionId) {
861
926
  callbacksRef.current.onSessionIdChange?.(state.currentSessionId);
862
927
  }
928
+ const needsImageResolve = !state.hasError && !abortController.signal.aborted && hasRagImages(state.accumulatedContent);
863
929
  const finalMessage = createFinalMessage(streamingId, {
864
930
  ...state,
865
- sessionId: state.currentSessionId || sessionId
931
+ sessionId: state.currentSessionId || sessionId,
932
+ isResolvingImages: needsImageResolve
866
933
  });
867
934
  setMessages(
868
935
  (prev) => prev.map(
@@ -873,6 +940,30 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
873
940
  }
874
941
  });
875
942
  clearThrottle();
943
+ const shouldResolveImages = !abortController.signal.aborted && !state.hasError && hasRagImages(state.accumulatedContent);
944
+ if (shouldResolveImages) {
945
+ await waitForNextPaint(abortController.signal);
946
+ }
947
+ if (shouldResolveImages && !abortController.signal.aborted) {
948
+ try {
949
+ const resolvedContent = await resolveRagImageUrls(
950
+ currentConfig,
951
+ state.accumulatedContent,
952
+ abortController.signal
953
+ );
954
+ setMessages(
955
+ (prev) => prev.map(
956
+ (msg) => msg.id === streamingId ? { ...msg, content: resolvedContent, isResolvingImages: false } : msg
957
+ )
958
+ );
959
+ } catch {
960
+ setMessages(
961
+ (prev) => prev.map(
962
+ (msg) => msg.id === streamingId ? { ...msg, isResolvingImages: false } : msg
963
+ )
964
+ );
965
+ }
966
+ }
876
967
  return state.currentSessionId;
877
968
  } catch (error) {
878
969
  clearThrottle();