@memori.ai/memori-react 8.40.0 → 8.40.1

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.
@@ -582,6 +582,7 @@ const MemoriWidget = ({
582
582
  const [showLoginDrawer, setShowLoginDrawer] = useState(false);
583
583
 
584
584
  const [clickedStart, setClickedStart] = useState(false);
585
+ const sessionStartingRef = useRef(false);
585
586
 
586
587
  const language =
587
588
  memori.culture?.split('-')?.[0]?.toUpperCase()! ||
@@ -1843,6 +1844,7 @@ const MemoriWidget = ({
1843
1844
  return () => {
1844
1845
  setHasUserActivatedSpeak(false);
1845
1846
  setClickedStart(false);
1847
+ sessionStartingRef.current = false;
1846
1848
  clearInteractionTimeout();
1847
1849
  timeoutRef.current = undefined;
1848
1850
  };
@@ -2715,6 +2717,7 @@ const MemoriWidget = ({
2715
2717
  if (!sessionID && !!minAge && !birth) {
2716
2718
  setShowAgeVerification(true);
2717
2719
  setClickedStart(false);
2720
+ return;
2718
2721
  }
2719
2722
  // Handle authentication
2720
2723
  else if (
@@ -2730,41 +2733,46 @@ const MemoriWidget = ({
2730
2733
  }
2731
2734
  // Create new session if needed
2732
2735
  else if (!sessionID || initialSessionExpired) {
2733
- setClickedStart(false);
2734
- const session = await fetchSession({
2735
- memoriID: memori.engineMemoriID!,
2736
- password: secret || memoriPwd || memori.secretToken,
2737
- tag: personification?.tag,
2738
- pin: personification?.pin,
2739
- continueFromChatLogID: chatLog?.chatLogID,
2740
- initialContextVars: {
2741
- LANG: userLang,
2742
- PATHNAME: window.location.pathname?.toUpperCase(),
2743
- ROUTE:
2744
- window.location.pathname?.split('/')?.pop()?.toUpperCase() || '',
2745
- ...((!chatLog
2746
- ? initialContextVars
2747
- : chatLog.lines[chatLog.lines.length - 1].contextVars) || {}),
2748
- },
2749
- initialQuestion: chatLog ? undefined : initialQuestion,
2750
- birthDate: birth,
2751
- additionalInfo: {
2752
- ...(additionalInfo || {}),
2753
- loginToken:
2754
- userToken ??
2755
- loginToken ??
2756
- additionalInfo?.loginToken ??
2757
- authToken,
2758
- language: (
2759
- userLang ??
2760
- memori.culture?.split('-')?.[0] ??
2761
- 'IT'
2762
- ).toLowerCase(),
2763
- timeZoneOffset: new Date().getTimezoneOffset().toString(),
2764
- },
2765
- });
2736
+ if (sessionStartingRef.current) {
2737
+ return;
2738
+ }
2739
+ sessionStartingRef.current = true;
2740
+ try {
2741
+ const session = await fetchSession({
2742
+ memoriID: memori.engineMemoriID!,
2743
+ password: secret || memoriPwd || memori.secretToken,
2744
+ tag: personification?.tag,
2745
+ pin: personification?.pin,
2746
+ continueFromChatLogID: chatLog?.chatLogID,
2747
+ initialContextVars: {
2748
+ LANG: userLang,
2749
+ PATHNAME: window.location.pathname?.toUpperCase(),
2750
+ ROUTE:
2751
+ window.location.pathname?.split('/')?.pop()?.toUpperCase() ||
2752
+ '',
2753
+ ...((!chatLog
2754
+ ? initialContextVars
2755
+ : chatLog.lines[chatLog.lines.length - 1].contextVars) || {}),
2756
+ },
2757
+ initialQuestion: chatLog ? undefined : initialQuestion,
2758
+ birthDate: birth,
2759
+ additionalInfo: {
2760
+ ...(additionalInfo || {}),
2761
+ loginToken:
2762
+ userToken ??
2763
+ loginToken ??
2764
+ additionalInfo?.loginToken ??
2765
+ authToken,
2766
+ language: (
2767
+ userLang ??
2768
+ memori.culture?.split('-')?.[0] ??
2769
+ 'IT'
2770
+ ).toLowerCase(),
2771
+ timeZoneOffset: new Date().getTimezoneOffset().toString(),
2772
+ },
2773
+ });
2766
2774
 
2767
- if (session?.dialogState) {
2775
+ if (session?.dialogState) {
2768
2776
  // reset history
2769
2777
  if (!chatLog) {
2770
2778
  setHistory([]);
@@ -2773,6 +2781,7 @@ const MemoriWidget = ({
2773
2781
  await translateAndSpeak(session.dialogState, userLang);
2774
2782
  // No need for additional handleSpeak call since translateAndSpeak already handles it
2775
2783
  setHasUserActivatedSpeak(true);
2784
+ setClickedStart(false);
2776
2785
  } else {
2777
2786
  const messages = chatLog.lines.map(
2778
2787
  (l, i) =>
@@ -2834,12 +2843,18 @@ const MemoriWidget = ({
2834
2843
  true
2835
2844
  ).finally(() => {
2836
2845
  setHasUserActivatedSpeak(true);
2846
+ setClickedStart(false);
2837
2847
  });
2838
2848
  }
2839
- } else if (session?.resultCode === 0) {
2840
- await onClickStart((session as any) || undefined);
2841
- } else {
2842
- setLoading(false);
2849
+ } else if (session?.resultCode === 0) {
2850
+ sessionStartingRef.current = false;
2851
+ await onClickStart((session as any) || undefined);
2852
+ } else {
2853
+ setLoading(false);
2854
+ setClickedStart(false);
2855
+ }
2856
+ } finally {
2857
+ sessionStartingRef.current = false;
2843
2858
  }
2844
2859
 
2845
2860
  return;
@@ -2853,7 +2868,6 @@ const MemoriWidget = ({
2853
2868
  if (response.resultCode !== 0 || !currentState) {
2854
2869
  const { chatLogs } = await getSessionChatLogs(sessionID!, sessionID!);
2855
2870
  setSessionId(undefined);
2856
- setClickedStart(false);
2857
2871
  await onClickStart(undefined, true, chatLogs?.[0]);
2858
2872
  return;
2859
2873
  }
@@ -2879,6 +2893,7 @@ const MemoriWidget = ({
2879
2893
 
2880
2894
  if (session && session.resultCode === 0) {
2881
2895
  await translateAndSpeak(session.currentState, userLang);
2896
+ setClickedStart(false);
2882
2897
  } else {
2883
2898
  throw new Error('No session');
2884
2899
  }
@@ -2902,6 +2917,7 @@ const MemoriWidget = ({
2902
2917
  birth
2903
2918
  ).then(() => {
2904
2919
  setHasUserActivatedSpeak(true);
2920
+ setClickedStart(false);
2905
2921
  });
2906
2922
  }
2907
2923
  }
@@ -2924,6 +2940,7 @@ const MemoriWidget = ({
2924
2940
 
2925
2941
  if (session && session.resultCode === 0) {
2926
2942
  await translateAndSpeak(session.currentState, userLang);
2943
+ setClickedStart(false);
2927
2944
  } else {
2928
2945
  throw new Error('No session');
2929
2946
  }
@@ -2946,6 +2963,7 @@ const MemoriWidget = ({
2946
2963
  birth
2947
2964
  ).then(() => {
2948
2965
  setHasUserActivatedSpeak(true);
2966
+ setClickedStart(false);
2949
2967
  });
2950
2968
  }
2951
2969
  }
@@ -3008,6 +3026,7 @@ const MemoriWidget = ({
3008
3026
  ) {
3009
3027
  // we have a history, don't push message
3010
3028
  setHasUserActivatedSpeak(true);
3029
+ setClickedStart(false);
3011
3030
  await translateAndSpeak(
3012
3031
  currentState,
3013
3032
  userLang,
@@ -3086,6 +3105,7 @@ const MemoriWidget = ({
3086
3105
  undefined,
3087
3106
  false
3088
3107
  );
3108
+ setClickedStart(false);
3089
3109
  }
3090
3110
  } catch (e) {
3091
3111
  console.error('[EnterText] onClickStart: NATS wait failed', e);
@@ -3108,16 +3128,23 @@ const MemoriWidget = ({
3108
3128
 
3109
3129
  // everything is fine, just translate dialog state and activate chat
3110
3130
  await translateAndSpeak(dialogState!, userLang);
3131
+ setClickedStart(false);
3111
3132
  }
3112
3133
  },
3113
3134
  [memoriPwd, memori, memoriTokens, birthDate, sessionId, userLang, position]
3114
3135
  );
3115
3136
 
3116
3137
  useEffect(() => {
3117
- if (!clickedStart && autoStart && selectedLayout !== 'HIDDEN_CHAT') {
3138
+ if (
3139
+ !clickedStart &&
3140
+ !sessionStartingRef.current &&
3141
+ !sessionId &&
3142
+ autoStart &&
3143
+ selectedLayout !== 'HIDDEN_CHAT'
3144
+ ) {
3118
3145
  onClickStart();
3119
3146
  }
3120
- }, [clickedStart, autoStart, selectedLayout]);
3147
+ }, [clickedStart, autoStart, selectedLayout, sessionId]);
3121
3148
 
3122
3149
  useEffect(() => {
3123
3150
  const targetNode =
@@ -43,7 +43,7 @@ DefaultLayout.args = {
43
43
  uiLang: 'IT',
44
44
  spokenLang: 'IT',
45
45
  integrationID: '0b1256c1-530c-4e67-aef8-36667c8887bb',
46
- autoStart: false,
46
+ autoStart: true,
47
47
  sessionID: '' as string | undefined,
48
48
  showUpload: true,
49
49
  showReasoning: false,
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  // This file is auto-generated. Do not edit manually.
2
- export const version = '8.40.0';
2
+ export const version = '8.40.1';