@paymanai/payman-typescript-ask-sdk 2.0.0 → 2.0.2

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
@@ -145,13 +145,13 @@ function getEventMessage(event) {
145
145
  case "USER_ACTION_REQUIRED":
146
146
  return "Waiting for verification...";
147
147
  case "USER_ACTION_SUCCESS":
148
- return "Verification successful";
148
+ return "Verification approved";
149
149
  case "USER_ACTION_EXPIRED":
150
150
  return "Verification expired";
151
151
  case "USER_ACTION_INVALID":
152
- return "Invalid input, please try again";
152
+ return "Invalid code. Please try again.";
153
153
  case "USER_ACTION_REJECTED":
154
- return "Verification rejected";
154
+ return "Verification cancelled";
155
155
  case "USER_ACTION_RESENT":
156
156
  return "Verification code resent";
157
157
  case "USER_ACTION_FAILED":
@@ -166,6 +166,31 @@ function getEventMessage(event) {
166
166
  return eventType;
167
167
  }
168
168
  }
169
+ function isUserActionPrompt(text) {
170
+ return /\benter\b.+\b(code|otp)\b/i.test(text) || /\b(authorization|verification)\s+code\b/i.test(text) || /\bsent\s+to\s+your\b/i.test(text);
171
+ }
172
+ function getUserActionDisplayMessage(eventType, rawMessage) {
173
+ const raw = rawMessage?.trim();
174
+ const safeRaw = raw && !isUserActionPrompt(raw) ? raw : "";
175
+ switch (eventType) {
176
+ case "USER_ACTION_REQUIRED":
177
+ return raw || "Waiting for verification...";
178
+ case "USER_ACTION_SUCCESS":
179
+ return safeRaw || "Verification approved";
180
+ case "USER_ACTION_INVALID":
181
+ return safeRaw || "Invalid code. Please try again.";
182
+ case "USER_ACTION_REJECTED":
183
+ return safeRaw || "Verification cancelled";
184
+ case "USER_ACTION_EXPIRED":
185
+ return safeRaw || "Verification expired";
186
+ case "USER_ACTION_RESENT":
187
+ return safeRaw || "Verification code resent";
188
+ case "USER_ACTION_FAILED":
189
+ return safeRaw || "Verification failed";
190
+ default:
191
+ return safeRaw || raw || eventType;
192
+ }
193
+ }
169
194
  function workingPhaseDetailForDisplay(raw) {
170
195
  const t = raw.trim();
171
196
  if (!t) return "";
@@ -254,19 +279,27 @@ function buildFormattedThinking(steps, allThinkingText) {
254
279
  break;
255
280
  case "USER_ACTION_REQUIRED":
256
281
  parts.push("**Verification Required**");
257
- if (step.message) parts.push(step.message);
282
+ if (step.message) {
283
+ parts.push(getUserActionDisplayMessage(step.eventType, step.message));
284
+ }
258
285
  break;
259
286
  case "USER_ACTION_SUCCESS":
260
- parts.push(`\u2713 ${step.message || "Verification successful"}`);
287
+ parts.push(`\u2713 ${getUserActionDisplayMessage(step.eventType, step.message)}`);
261
288
  break;
262
289
  case "USER_ACTION_REJECTED":
263
- parts.push(`\u2717 ${step.message || "Verification rejected"}`);
290
+ parts.push(getUserActionDisplayMessage(step.eventType, step.message));
264
291
  break;
265
292
  case "USER_ACTION_EXPIRED":
266
- parts.push(`\u2717 ${step.message || "Verification expired"}`);
293
+ parts.push(`\u2717 ${getUserActionDisplayMessage(step.eventType, step.message)}`);
294
+ break;
295
+ case "USER_ACTION_INVALID":
296
+ parts.push(`\u2717 ${getUserActionDisplayMessage(step.eventType, step.message)}`);
297
+ break;
298
+ case "USER_ACTION_RESENT":
299
+ parts.push(getUserActionDisplayMessage(step.eventType, step.message));
267
300
  break;
268
301
  case "USER_ACTION_FAILED":
269
- parts.push(`\u2717 ${step.message || "Verification failed"}`);
302
+ parts.push(`\u2717 ${getUserActionDisplayMessage(step.eventType, step.message)}`);
270
303
  break;
271
304
  }
272
305
  }
@@ -709,14 +742,18 @@ function processStreamEventV2(event, state) {
709
742
  }
710
743
  state.userActionPending = true;
711
744
  const req = event.userActionRequest;
745
+ const displayMessage = getUserActionDisplayMessage(
746
+ eventType,
747
+ req?.message || message
748
+ );
712
749
  if (req) {
713
- addThinkingLine(state, "**Verification Required**", req.message || "Waiting for authorization...");
750
+ addThinkingLine(state, "**Verification Required**", displayMessage);
714
751
  }
715
752
  const stepId = `step-${state.stepCounter++}`;
716
753
  state.steps.push({
717
754
  id: stepId,
718
755
  eventType,
719
- message,
756
+ message: displayMessage,
720
757
  status: "in_progress",
721
758
  timestamp: Date.now(),
722
759
  elapsedMs: event.elapsedMs
@@ -726,7 +763,8 @@ function processStreamEventV2(event, state) {
726
763
  break;
727
764
  }
728
765
  case "USER_ACTION_SUCCESS": {
729
- appendThinkingText(state, "\n\u2713 " + (event.message || "Verification successful"));
766
+ const displayMessage = getUserActionDisplayMessage(eventType, event.message);
767
+ appendThinkingText(state, "\n\u2713 " + displayMessage);
730
768
  completeLastInProgressStep(state.steps);
731
769
  state.userActionRequest = void 0;
732
770
  state.userActionPending = false;
@@ -735,7 +773,7 @@ function processStreamEventV2(event, state) {
735
773
  state.steps.push({
736
774
  id: stepId,
737
775
  eventType,
738
- message,
776
+ message: displayMessage,
739
777
  status: "completed",
740
778
  timestamp: Date.now(),
741
779
  elapsedMs: event.elapsedMs
@@ -744,12 +782,14 @@ function processStreamEventV2(event, state) {
744
782
  break;
745
783
  }
746
784
  case "USER_ACTION_INVALID": {
785
+ const displayMessage = getUserActionDisplayMessage(eventType, event.message);
786
+ appendThinkingText(state, "\n\u2717 " + displayMessage);
747
787
  completeLastInProgressStep(state.steps);
748
788
  const errorStepId = `step-${state.stepCounter++}`;
749
789
  state.steps.push({
750
790
  id: errorStepId,
751
791
  eventType,
752
- message,
792
+ message: displayMessage,
753
793
  status: "error",
754
794
  timestamp: Date.now(),
755
795
  elapsedMs: event.elapsedMs
@@ -767,7 +807,8 @@ function processStreamEventV2(event, state) {
767
807
  break;
768
808
  }
769
809
  case "USER_ACTION_REJECTED": {
770
- appendThinkingText(state, "\n\u2717 " + (event.message || "Verification rejected"));
810
+ const displayMessage = getUserActionDisplayMessage(eventType, event.message);
811
+ appendThinkingText(state, "\n" + displayMessage);
771
812
  completeLastInProgressStep(state.steps);
772
813
  state.userActionRequest = void 0;
773
814
  state.userActionPending = false;
@@ -776,7 +817,7 @@ function processStreamEventV2(event, state) {
776
817
  state.steps.push({
777
818
  id: stepId,
778
819
  eventType,
779
- message,
820
+ message: displayMessage,
780
821
  status: "completed",
781
822
  timestamp: Date.now(),
782
823
  elapsedMs: event.elapsedMs
@@ -785,7 +826,8 @@ function processStreamEventV2(event, state) {
785
826
  break;
786
827
  }
787
828
  case "USER_ACTION_EXPIRED": {
788
- appendThinkingText(state, "\n\u2717 " + (event.message || "Verification expired"));
829
+ const displayMessage = getUserActionDisplayMessage(eventType, event.message);
830
+ appendThinkingText(state, "\n\u2717 " + displayMessage);
789
831
  completeLastInProgressStep(state.steps);
790
832
  state.userActionRequest = void 0;
791
833
  state.userActionPending = false;
@@ -793,7 +835,7 @@ function processStreamEventV2(event, state) {
793
835
  state.steps.push({
794
836
  id: stepId,
795
837
  eventType,
796
- message,
838
+ message: displayMessage,
797
839
  status: "error",
798
840
  timestamp: Date.now(),
799
841
  elapsedMs: event.elapsedMs
@@ -802,11 +844,13 @@ function processStreamEventV2(event, state) {
802
844
  break;
803
845
  }
804
846
  case "USER_ACTION_RESENT": {
847
+ const displayMessage = getUserActionDisplayMessage(eventType, event.message);
848
+ appendThinkingText(state, "\n" + displayMessage);
805
849
  const stepId = `step-${state.stepCounter++}`;
806
850
  state.steps.push({
807
851
  id: stepId,
808
852
  eventType,
809
- message,
853
+ message: displayMessage,
810
854
  status: "completed",
811
855
  timestamp: Date.now(),
812
856
  elapsedMs: event.elapsedMs
@@ -815,7 +859,11 @@ function processStreamEventV2(event, state) {
815
859
  break;
816
860
  }
817
861
  case "USER_ACTION_FAILED": {
818
- appendThinkingText(state, "\n\u2717 " + (event.message || "Verification failed"));
862
+ const displayMessage = getUserActionDisplayMessage(
863
+ eventType,
864
+ event.message || event.errorMessage
865
+ );
866
+ appendThinkingText(state, "\n\u2717 " + displayMessage);
819
867
  completeLastInProgressStep(state.steps);
820
868
  state.userActionRequest = void 0;
821
869
  state.userActionPending = false;
@@ -823,7 +871,7 @@ function processStreamEventV2(event, state) {
823
871
  state.steps.push({
824
872
  id: stepId,
825
873
  eventType,
826
- message,
874
+ message: displayMessage,
827
875
  status: "error",
828
876
  timestamp: Date.now(),
829
877
  elapsedMs: event.elapsedMs
@@ -918,6 +966,7 @@ function useStreamManagerV2(config, callbacks, setMessages, setIsWaitingForRespo
918
966
  const abortController = externalAbortController ?? new AbortController();
919
967
  abortControllerRef.current = abortController;
920
968
  const state = createInitialV2State();
969
+ const streamStartedAt = Date.now();
921
970
  const updateMessage = (update) => {
922
971
  if (abortController.signal.aborted) return;
923
972
  setMessages(
@@ -945,7 +994,10 @@ function useStreamManagerV2(config, callbacks, setMessages, setIsWaitingForRespo
945
994
  if (eventType === "USER_ACTION_REQUIRED" && state.userActionRequest) {
946
995
  callbacksRef.current.onUserActionRequired?.(state.userActionRequest);
947
996
  } else if (eventType.startsWith("USER_ACTION_") && eventType !== "USER_ACTION_REQUIRED") {
948
- const msg = event.message?.trim() || event.errorMessage?.trim() || getEventMessage(event);
997
+ const msg = getUserActionDisplayMessage(
998
+ eventType,
999
+ event.message?.trim() || event.errorMessage?.trim() || getEventMessage(event)
1000
+ );
949
1001
  callbacksRef.current.onUserActionEvent?.(eventType, msg);
950
1002
  }
951
1003
  const activeStep = state.steps.find((s) => s.id === state.currentExecutingStepId);
@@ -1049,7 +1101,8 @@ function useStreamManagerV2(config, callbacks, setMessages, setIsWaitingForRespo
1049
1101
  currentExecutingStepId: void 0,
1050
1102
  userActionResult: state.userActionResult,
1051
1103
  formattedThinkingText: state.hasError ? void 0 : state.formattedThinkingText || void 0,
1052
- isResolvingImages: needsImageResolve
1104
+ isResolvingImages: needsImageResolve,
1105
+ thinkingDurationSec: state.hasError ? void 0 : Math.max(0, Math.round((Date.now() - streamStartedAt) / 1e3))
1053
1106
  };
1054
1107
  setMessages(
1055
1108
  (prev) => prev.map(
@@ -1267,9 +1320,9 @@ function streamKeyFor(scopeKey, sessionId) {
1267
1320
  function useChatV2(config, callbacks = {}) {
1268
1321
  const scopeKey = useMemo(() => buildScopeKey(config), [
1269
1322
  config.session?.userId,
1270
- config.workflow.id,
1271
- config.workflow.version,
1272
- config.workflow.stage
1323
+ config.workflow?.id,
1324
+ config.workflow?.version,
1325
+ config.workflow?.stage
1273
1326
  ]);
1274
1327
  const initialSessionId = chatStore.get(scopeKey).find((m) => m.sessionId)?.sessionId ?? config.session?.initialId ?? void 0;
1275
1328
  const [messages, setMessages] = useState(() => {