@memori.ai/memori-react 2.6.3 → 2.6.5
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/CHANGELOG.md +19 -0
- package/dist/components/Header/Header.css +2 -2
- package/dist/components/MemoriWidget/MemoriWidget.js +24 -7
- package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/dist/components/PoweredBy/PoweredBy.css +1 -1
- package/dist/components/layouts/chat.css +2 -3
- package/dist/components/ui/Select.css +1 -1
- package/dist/helpers/error.test.d.ts +1 -0
- package/dist/helpers/error.test.js +26 -0
- package/dist/helpers/error.test.js.map +1 -0
- package/dist/helpers/media.js +3 -2
- package/dist/helpers/media.js.map +1 -1
- package/dist/helpers/media.test.d.ts +1 -0
- package/dist/helpers/media.test.js +87 -0
- package/dist/helpers/media.test.js.map +1 -0
- package/dist/helpers/statistics.test.d.ts +3 -0
- package/dist/helpers/statistics.test.js +200 -0
- package/dist/helpers/statistics.test.js.map +1 -0
- package/dist/helpers/utils.test.d.ts +1 -0
- package/dist/helpers/utils.test.js +30 -0
- package/dist/helpers/utils.test.js.map +1 -0
- package/dist/styles.css +1 -1
- package/esm/components/Header/Header.css +2 -2
- package/esm/components/MemoriWidget/MemoriWidget.js +24 -7
- package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/esm/components/PoweredBy/PoweredBy.css +1 -1
- package/esm/components/layouts/chat.css +2 -3
- package/esm/components/ui/Select.css +1 -1
- package/esm/helpers/error.test.d.ts +1 -0
- package/esm/helpers/error.test.js +24 -0
- package/esm/helpers/error.test.js.map +1 -0
- package/esm/helpers/media.js +3 -2
- package/esm/helpers/media.js.map +1 -1
- package/esm/helpers/media.test.d.ts +1 -0
- package/esm/helpers/media.test.js +85 -0
- package/esm/helpers/media.test.js.map +1 -0
- package/esm/helpers/statistics.test.d.ts +3 -0
- package/esm/helpers/statistics.test.js +197 -0
- package/esm/helpers/statistics.test.js.map +1 -0
- package/esm/helpers/utils.test.d.ts +1 -0
- package/esm/helpers/utils.test.js +28 -0
- package/esm/helpers/utils.test.js.map +1 -0
- package/esm/styles.css +1 -1
- package/package.json +1 -1
- package/src/components/Header/Header.css +2 -2
- package/src/components/MemoriWidget/MemoriWidget.tsx +259 -240
- package/src/components/PoweredBy/PoweredBy.css +1 -1
- package/src/components/layouts/chat.css +2 -3
- package/src/components/ui/Select.css +1 -1
- package/src/helpers/error.test.ts +29 -0
- package/src/helpers/media.test.ts +133 -0
- package/src/helpers/media.ts +5 -2
- package/src/helpers/statistics.test.ts +213 -0
- package/src/helpers/utils.test.ts +31 -0
- package/src/styles.css +1 -1
|
@@ -146,6 +146,8 @@ let speechSynthesizer: SpeechSynthesizer | null;
|
|
|
146
146
|
let audioDestination: SpeakerAudioDestination;
|
|
147
147
|
let audioContext: IAudioContext;
|
|
148
148
|
|
|
149
|
+
let memoriPassword: string | undefined;
|
|
150
|
+
|
|
149
151
|
export interface LayoutProps {
|
|
150
152
|
Header?: typeof Header;
|
|
151
153
|
headerProps?: HeaderProps;
|
|
@@ -646,7 +648,6 @@ const MemoriWidget = ({
|
|
|
646
648
|
setAuthModalState('password');
|
|
647
649
|
return;
|
|
648
650
|
}
|
|
649
|
-
|
|
650
651
|
let storageBirthDate = getLocalConfig<string | undefined>(
|
|
651
652
|
'birthDate',
|
|
652
653
|
undefined
|
|
@@ -712,15 +713,31 @@ const MemoriWidget = ({
|
|
|
712
713
|
) => {
|
|
713
714
|
setLoading(true);
|
|
714
715
|
try {
|
|
716
|
+
if (
|
|
717
|
+
memori.privacyType !== 'PUBLIC' &&
|
|
718
|
+
!password &&
|
|
719
|
+
!memori.secretToken &&
|
|
720
|
+
!memoriPwd &&
|
|
721
|
+
!recoveryTokens &&
|
|
722
|
+
!memoriTokens
|
|
723
|
+
) {
|
|
724
|
+
setAuthModalState('password');
|
|
725
|
+
return;
|
|
726
|
+
}
|
|
727
|
+
|
|
715
728
|
let storageBirthDate = getLocalConfig<string | undefined>(
|
|
716
729
|
'birthDate',
|
|
717
730
|
undefined
|
|
718
731
|
);
|
|
732
|
+
if (!(birthDate || storageBirthDate) && !!minAge) {
|
|
733
|
+
setShowAgeVerification(true);
|
|
734
|
+
return;
|
|
735
|
+
}
|
|
719
736
|
|
|
720
737
|
const { sessionID, currentState, ...response } = await initSession({
|
|
721
738
|
memoriID: memori.engineMemoriID ?? '',
|
|
722
|
-
password,
|
|
723
|
-
recoveryTokens,
|
|
739
|
+
password: password || memoriPwd || memori.secretToken,
|
|
740
|
+
recoveryTokens: recoveryTokens || memoriTokens,
|
|
724
741
|
tag,
|
|
725
742
|
pin,
|
|
726
743
|
initialContextVars,
|
|
@@ -826,7 +843,7 @@ const MemoriWidget = ({
|
|
|
826
843
|
|
|
827
844
|
fetchSession({
|
|
828
845
|
memoriID: memori.engineMemoriID ?? '',
|
|
829
|
-
password: secret || memori.secretToken,
|
|
846
|
+
password: secret || memoriPwd || memori.secretToken,
|
|
830
847
|
tag: memori.giverTag,
|
|
831
848
|
pin: memori.giverPIN,
|
|
832
849
|
initialContextVars,
|
|
@@ -1845,241 +1862,254 @@ const MemoriWidget = ({
|
|
|
1845
1862
|
sendMessage(text, undefined, undefined, false, translatedText);
|
|
1846
1863
|
};
|
|
1847
1864
|
|
|
1848
|
-
const onClickStart =
|
|
1849
|
-
dialogState: DialogState;
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
});
|
|
1867
|
-
}
|
|
1865
|
+
const onClickStart = useCallback(
|
|
1866
|
+
async (session?: { dialogState: DialogState; sessionID: string }) => {
|
|
1867
|
+
const sessionID = session?.sessionID || sessionId;
|
|
1868
|
+
const dialogState = session?.dialogState || currentDialogState;
|
|
1869
|
+
setClickedStart(true);
|
|
1870
|
+
|
|
1871
|
+
let memoriAudioElement = document.getElementById(
|
|
1872
|
+
'memori-audio'
|
|
1873
|
+
) as HTMLAudioElement;
|
|
1874
|
+
let isSafari =
|
|
1875
|
+
window.navigator.userAgent.includes('Safari') &&
|
|
1876
|
+
!window.navigator.userAgent.includes('Chrome');
|
|
1877
|
+
if (memoriAudioElement && isSafari) {
|
|
1878
|
+
memoriAudioElement.muted = false;
|
|
1879
|
+
memoriAudioElement.play().catch((e: any) => {
|
|
1880
|
+
console.error('error playing intro audio', e);
|
|
1881
|
+
});
|
|
1882
|
+
}
|
|
1868
1883
|
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
1884
|
+
let storageBirthDate = getLocalConfig<string | undefined>(
|
|
1885
|
+
'birthDate',
|
|
1886
|
+
undefined
|
|
1887
|
+
);
|
|
1888
|
+
let birth = birthDate || storageBirthDate || undefined;
|
|
1874
1889
|
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1890
|
+
if (
|
|
1891
|
+
(!sessionID &&
|
|
1892
|
+
memori.privacyType !== 'PUBLIC' &&
|
|
1893
|
+
!memori.secretToken &&
|
|
1894
|
+
!memoriPwd &&
|
|
1895
|
+
!memoriTokens) ||
|
|
1896
|
+
(!sessionID && gotErrorInOpening)
|
|
1897
|
+
) {
|
|
1898
|
+
setAuthModalState('password');
|
|
1899
|
+
setClickedStart(false);
|
|
1900
|
+
return;
|
|
1901
|
+
} else if (!sessionID && !!minAge && !birth) {
|
|
1902
|
+
setShowAgeVerification(true);
|
|
1903
|
+
setClickedStart(false);
|
|
1904
|
+
} else if (!sessionID) {
|
|
1905
|
+
setClickedStart(false);
|
|
1906
|
+
setGotErrorInOpening(false);
|
|
1907
|
+
const session = await fetchSession({
|
|
1908
|
+
memoriID: memori.engineMemoriID!,
|
|
1909
|
+
password: secret || memoriPwd || memori.secretToken,
|
|
1910
|
+
tag: personification?.tag,
|
|
1911
|
+
pin: personification?.pin,
|
|
1912
|
+
initialContextVars,
|
|
1913
|
+
initialQuestion,
|
|
1914
|
+
birthDate: birth,
|
|
1915
|
+
});
|
|
1901
1916
|
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1917
|
+
if (session?.dialogState) {
|
|
1918
|
+
// reset history
|
|
1919
|
+
setHistory([]);
|
|
1905
1920
|
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1921
|
+
translateDialogState(session.dialogState, userLang)
|
|
1922
|
+
.then(ts => {
|
|
1923
|
+
if (ts.emission) {
|
|
1924
|
+
speak(ts.emission);
|
|
1925
|
+
}
|
|
1926
|
+
})
|
|
1927
|
+
.finally(() => {
|
|
1928
|
+
setHasUserActivatedSpeak(true);
|
|
1929
|
+
});
|
|
1930
|
+
} else {
|
|
1931
|
+
await onClickStart(session || undefined);
|
|
1932
|
+
}
|
|
1918
1933
|
|
|
1919
|
-
return;
|
|
1920
|
-
} else if (initialSessionID) {
|
|
1921
|
-
// check if session is valid and not expired
|
|
1922
|
-
const { currentState, ...response } = await getSession(sessionID);
|
|
1923
|
-
if (response.resultCode !== 0 || !currentState) {
|
|
1924
|
-
console.debug('session expired, opening new session');
|
|
1925
|
-
setGotErrorInOpening(true);
|
|
1926
|
-
setSessionId(undefined);
|
|
1927
|
-
setClickedStart(false);
|
|
1928
|
-
await onClickStart();
|
|
1929
1934
|
return;
|
|
1930
|
-
}
|
|
1935
|
+
} else if (initialSessionID) {
|
|
1936
|
+
// check if session is valid and not expired
|
|
1937
|
+
const { currentState, ...response } = await getSession(sessionID);
|
|
1938
|
+
if (response.resultCode !== 0 || !currentState) {
|
|
1939
|
+
console.debug('session expired, opening new session');
|
|
1940
|
+
setGotErrorInOpening(true);
|
|
1941
|
+
setSessionId(undefined);
|
|
1942
|
+
setClickedStart(false);
|
|
1943
|
+
await onClickStart();
|
|
1944
|
+
return;
|
|
1945
|
+
}
|
|
1931
1946
|
|
|
1932
|
-
|
|
1933
|
-
|
|
1947
|
+
// reset history
|
|
1948
|
+
setHistory([]);
|
|
1934
1949
|
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1950
|
+
// checks engine state for current tag
|
|
1951
|
+
// opening session would have already correct tag
|
|
1952
|
+
// otherwise change tag to anonymous for test, giver for instruct, receiver if set
|
|
1938
1953
|
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1954
|
+
// test if current tag is giver on instruct
|
|
1955
|
+
if (
|
|
1956
|
+
instruct &&
|
|
1957
|
+
memori.giverTag &&
|
|
1958
|
+
currentDialogState?.currentTag !== memori.giverTag
|
|
1959
|
+
) {
|
|
1960
|
+
try {
|
|
1961
|
+
console.debug('change tag #0');
|
|
1962
|
+
// reset tag
|
|
1963
|
+
await changeTag(memori.engineMemoriID!, sessionID, '-');
|
|
1964
|
+
// change tag to giver
|
|
1965
|
+
const session = await changeTag(
|
|
1966
|
+
memori.engineMemoriID!,
|
|
1967
|
+
sessionID,
|
|
1968
|
+
memori.giverTag,
|
|
1969
|
+
memori.giverPIN
|
|
1970
|
+
);
|
|
1956
1971
|
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1972
|
+
if (session && session.resultCode === 0) {
|
|
1973
|
+
translateDialogState(session.currentState, userLang)
|
|
1974
|
+
.then(ts => {
|
|
1975
|
+
if (ts.emission) {
|
|
1976
|
+
speak(ts.emission);
|
|
1977
|
+
}
|
|
1978
|
+
})
|
|
1979
|
+
.finally(() => {
|
|
1980
|
+
setHasUserActivatedSpeak(true);
|
|
1981
|
+
});
|
|
1982
|
+
} else {
|
|
1983
|
+
console.error('session #1', session);
|
|
1984
|
+
throw new Error('No session');
|
|
1985
|
+
}
|
|
1986
|
+
} catch (e) {
|
|
1987
|
+
console.error('session #2', e);
|
|
1988
|
+
reopenSession(
|
|
1989
|
+
true,
|
|
1990
|
+
memori?.secretToken,
|
|
1991
|
+
undefined,
|
|
1992
|
+
memori?.giverTag,
|
|
1993
|
+
memori?.giverPIN,
|
|
1994
|
+
initialContextVars,
|
|
1995
|
+
initialQuestion,
|
|
1996
|
+
birth
|
|
1997
|
+
).then(() => {
|
|
1998
|
+
setHasUserActivatedSpeak(true);
|
|
1999
|
+
});
|
|
1970
2000
|
}
|
|
1971
|
-
}
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
!instruct &&
|
|
1989
|
-
personification &&
|
|
1990
|
-
currentDialogState?.currentTag !== personification.tag
|
|
1991
|
-
) {
|
|
1992
|
-
try {
|
|
1993
|
-
console.debug('change tag #3');
|
|
1994
|
-
// reset tag
|
|
1995
|
-
await changeTag(memori.engineMemoriID!, sessionID, '-');
|
|
1996
|
-
// change tag to receiver
|
|
1997
|
-
const session = await changeTag(
|
|
1998
|
-
memori.engineMemoriID!,
|
|
1999
|
-
sessionID,
|
|
2000
|
-
personification.tag,
|
|
2001
|
-
personification.pin
|
|
2002
|
-
);
|
|
2001
|
+
} else if (
|
|
2002
|
+
// test if current tag is receiver on test as it is requested
|
|
2003
|
+
!instruct &&
|
|
2004
|
+
personification &&
|
|
2005
|
+
currentDialogState?.currentTag !== personification.tag
|
|
2006
|
+
) {
|
|
2007
|
+
try {
|
|
2008
|
+
console.debug('change tag #3');
|
|
2009
|
+
// reset tag
|
|
2010
|
+
await changeTag(memori.engineMemoriID!, sessionID, '-');
|
|
2011
|
+
// change tag to receiver
|
|
2012
|
+
const session = await changeTag(
|
|
2013
|
+
memori.engineMemoriID!,
|
|
2014
|
+
sessionID,
|
|
2015
|
+
personification.tag,
|
|
2016
|
+
personification.pin
|
|
2017
|
+
);
|
|
2003
2018
|
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2019
|
+
if (session && session.resultCode === 0) {
|
|
2020
|
+
translateDialogState(session.currentState, userLang)
|
|
2021
|
+
.then(ts => {
|
|
2022
|
+
if (ts.emission) {
|
|
2023
|
+
speak(ts.emission);
|
|
2024
|
+
}
|
|
2025
|
+
})
|
|
2026
|
+
.finally(() => {
|
|
2027
|
+
setHasUserActivatedSpeak(true);
|
|
2028
|
+
});
|
|
2029
|
+
} else {
|
|
2030
|
+
console.error('session #4', session);
|
|
2031
|
+
throw new Error('No session');
|
|
2032
|
+
}
|
|
2033
|
+
} catch (e) {
|
|
2034
|
+
console.error('session #5', e);
|
|
2035
|
+
reopenSession(
|
|
2036
|
+
true,
|
|
2037
|
+
memori?.secretToken,
|
|
2038
|
+
undefined,
|
|
2039
|
+
personification.tag,
|
|
2040
|
+
personification.pin,
|
|
2041
|
+
initialContextVars,
|
|
2042
|
+
initialQuestion,
|
|
2043
|
+
birth
|
|
2044
|
+
).then(() => {
|
|
2045
|
+
setHasUserActivatedSpeak(true);
|
|
2046
|
+
});
|
|
2017
2047
|
}
|
|
2018
|
-
}
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
// this is the default case with anonymous tag
|
|
2036
|
-
!instruct &&
|
|
2037
|
-
!personification &&
|
|
2038
|
-
currentDialogState?.currentTag !== anonTag
|
|
2039
|
-
) {
|
|
2040
|
-
try {
|
|
2041
|
-
console.debug('change tag #6');
|
|
2042
|
-
// reset tag
|
|
2043
|
-
await changeTag(memori.engineMemoriID!, sessionID, '-');
|
|
2044
|
-
// change tag to anonymous
|
|
2045
|
-
const session = await changeTag(
|
|
2046
|
-
memori.engineMemoriID!,
|
|
2047
|
-
sessionID,
|
|
2048
|
-
anonTag
|
|
2049
|
-
);
|
|
2048
|
+
} else if (
|
|
2049
|
+
// test if current tag is anonymous on test without personification
|
|
2050
|
+
// this is the default case with anonymous tag
|
|
2051
|
+
!instruct &&
|
|
2052
|
+
!personification &&
|
|
2053
|
+
currentDialogState?.currentTag !== anonTag
|
|
2054
|
+
) {
|
|
2055
|
+
try {
|
|
2056
|
+
console.debug('change tag #6');
|
|
2057
|
+
// reset tag
|
|
2058
|
+
await changeTag(memori.engineMemoriID!, sessionID, '-');
|
|
2059
|
+
// change tag to anonymous
|
|
2060
|
+
const session = await changeTag(
|
|
2061
|
+
memori.engineMemoriID!,
|
|
2062
|
+
sessionID,
|
|
2063
|
+
anonTag
|
|
2064
|
+
);
|
|
2050
2065
|
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
|
|
2066
|
+
if (session && session.resultCode === 0) {
|
|
2067
|
+
translateDialogState(session.currentState, userLang)
|
|
2068
|
+
.then(ts => {
|
|
2069
|
+
if (ts.emission) {
|
|
2070
|
+
speak(ts.emission);
|
|
2071
|
+
}
|
|
2072
|
+
})
|
|
2073
|
+
.finally(() => {
|
|
2074
|
+
setHasUserActivatedSpeak(true);
|
|
2075
|
+
});
|
|
2076
|
+
} else {
|
|
2077
|
+
console.error('session #7', session);
|
|
2078
|
+
throw new Error('No session');
|
|
2079
|
+
}
|
|
2080
|
+
} catch (e) {
|
|
2081
|
+
console.error('session #8', e);
|
|
2082
|
+
reopenSession(
|
|
2083
|
+
true,
|
|
2084
|
+
memori?.secretToken,
|
|
2085
|
+
undefined,
|
|
2086
|
+
undefined,
|
|
2087
|
+
undefined,
|
|
2088
|
+
initialContextVars,
|
|
2089
|
+
initialQuestion,
|
|
2090
|
+
birth
|
|
2091
|
+
).then(() => {
|
|
2092
|
+
setHasUserActivatedSpeak(true);
|
|
2093
|
+
});
|
|
2064
2094
|
}
|
|
2065
|
-
}
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
).then(() => {
|
|
2077
|
-
setHasUserActivatedSpeak(true);
|
|
2078
|
-
});
|
|
2095
|
+
} else {
|
|
2096
|
+
// no need to change tag
|
|
2097
|
+
translateDialogState(currentState, userLang)
|
|
2098
|
+
.then(ts => {
|
|
2099
|
+
if (ts.emission) {
|
|
2100
|
+
speak(ts.emission);
|
|
2101
|
+
}
|
|
2102
|
+
})
|
|
2103
|
+
.finally(() => {
|
|
2104
|
+
setHasUserActivatedSpeak(true);
|
|
2105
|
+
});
|
|
2079
2106
|
}
|
|
2080
2107
|
} else {
|
|
2081
|
-
//
|
|
2082
|
-
|
|
2108
|
+
// reset history
|
|
2109
|
+
setHistory([]);
|
|
2110
|
+
|
|
2111
|
+
// everything is fine, just translate dialog state and activate chat
|
|
2112
|
+
translateDialogState(dialogState!, userLang)
|
|
2083
2113
|
.then(ts => {
|
|
2084
2114
|
if (ts.emission) {
|
|
2085
2115
|
speak(ts.emission);
|
|
@@ -2089,22 +2119,9 @@ const MemoriWidget = ({
|
|
|
2089
2119
|
setHasUserActivatedSpeak(true);
|
|
2090
2120
|
});
|
|
2091
2121
|
}
|
|
2092
|
-
}
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
// everything is fine, just translate dialog state and activate chat
|
|
2097
|
-
translateDialogState(dialogState!, userLang)
|
|
2098
|
-
.then(ts => {
|
|
2099
|
-
if (ts.emission) {
|
|
2100
|
-
speak(ts.emission);
|
|
2101
|
-
}
|
|
2102
|
-
})
|
|
2103
|
-
.finally(() => {
|
|
2104
|
-
setHasUserActivatedSpeak(true);
|
|
2105
|
-
});
|
|
2106
|
-
}
|
|
2107
|
-
};
|
|
2122
|
+
},
|
|
2123
|
+
[memoriPwd, memori, memoriTokens, birthDate, sessionId]
|
|
2124
|
+
);
|
|
2108
2125
|
|
|
2109
2126
|
const [loginToken, setLoginToken] = useState<string | undefined>(authToken);
|
|
2110
2127
|
useEffect(() => {
|
|
@@ -2362,6 +2379,7 @@ const MemoriWidget = ({
|
|
|
2362
2379
|
showTokens={memori.privacyType === 'SECRET'}
|
|
2363
2380
|
onFinish={async (values: any) => {
|
|
2364
2381
|
if (values['password']) setMemoriPwd(values['password']);
|
|
2382
|
+
if (values['password']) memoriPassword = values['password'];
|
|
2365
2383
|
if (values['tokens']) setMemoriTokens(values['tokens']);
|
|
2366
2384
|
|
|
2367
2385
|
reopenSession(
|
|
@@ -2401,8 +2419,8 @@ const MemoriWidget = ({
|
|
|
2401
2419
|
|
|
2402
2420
|
reopenSession(
|
|
2403
2421
|
!sessionId,
|
|
2404
|
-
memori?.secretToken,
|
|
2405
|
-
|
|
2422
|
+
memoriPassword || memoriPwd || memori?.secretToken,
|
|
2423
|
+
memoriTokens,
|
|
2406
2424
|
instruct ? memori.giverTag : undefined,
|
|
2407
2425
|
instruct ? memori.giverPIN : undefined,
|
|
2408
2426
|
initialContextVars,
|
|
@@ -2411,6 +2429,7 @@ const MemoriWidget = ({
|
|
|
2411
2429
|
)
|
|
2412
2430
|
.then(state => {
|
|
2413
2431
|
setShowAgeVerification(false);
|
|
2432
|
+
setAuthModalState(null);
|
|
2414
2433
|
onClickStart(state || undefined);
|
|
2415
2434
|
})
|
|
2416
2435
|
.catch(() => {
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
background: none;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
.memori-widget
|
|
9
|
+
.memori-widget > .memori-spin.memori-chat-layout {
|
|
10
10
|
display: flex;
|
|
11
11
|
height: 100%;
|
|
12
12
|
flex-direction: column;
|
|
@@ -72,7 +72,6 @@
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
@media (max-width: 870px) {
|
|
75
|
-
|
|
76
75
|
.memori-chat-layout--controls .memori--start-panel,
|
|
77
76
|
.memori-chat-layout--controls .memori-chat--wrapper {
|
|
78
77
|
width: 100%;
|
|
@@ -111,4 +110,4 @@
|
|
|
111
110
|
|
|
112
111
|
.memori-chat-layout .memori-chat-inputs--mic {
|
|
113
112
|
font-size: 125%;
|
|
114
|
-
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { getErrori18nKey } from './error';
|
|
2
|
+
|
|
3
|
+
describe('Error helper for HTTP status codes', () => {
|
|
4
|
+
it('gets error i18n key correctly for 401', () => {
|
|
5
|
+
expect(getErrori18nKey(401)).toBe('error.unauthorized');
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
it('gets error i18n key correctly for 404', () => {
|
|
9
|
+
expect(getErrori18nKey(404)).toBe('error.notFound');
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
it('gets error i18n key correctly for 500', () => {
|
|
13
|
+
expect(getErrori18nKey(500)).toBe('internal server error');
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('gets error i18n key correctly for 501', () => {
|
|
17
|
+
expect(getErrori18nKey(501)).toBe('error.generic');
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
describe('Error helper for backend error codes', () => {
|
|
22
|
+
it('gets error i18n key correctly for -101', () => {
|
|
23
|
+
expect(getErrori18nKey(-101)).toBe('errors.SESSION_NOT_FOUND');
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('gets error i18n key correctly for -51', () => {
|
|
27
|
+
expect(getErrori18nKey(-51)).toBe('errors.MEMORI_NOT_FOUND');
|
|
28
|
+
});
|
|
29
|
+
});
|