@memori.ai/memori-react 9.0.0-alpha.4 → 9.0.0-alpha.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/CHANGELOG.md +62 -0
- package/dist/components/AgeVerificationModal/AgeVerificationModal.js +5 -2
- package/dist/components/AgeVerificationModal/AgeVerificationModal.js.map +1 -1
- package/dist/components/Avatar/Avatar.js +5 -10
- package/dist/components/Avatar/Avatar.js.map +1 -1
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js +8 -1
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js.map +1 -1
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.js +1 -1
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.js.map +1 -1
- package/dist/components/Avatar/AvatarView/AvatarComponent/constants.d.ts +2 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/constants.js +14 -5
- package/dist/components/Avatar/AvatarView/AvatarComponent/constants.js.map +1 -1
- package/dist/components/ChatBubble/ChatBubble.js +22 -16
- package/dist/components/ChatBubble/ChatBubble.js.map +1 -1
- package/dist/components/CompletionProviderStatus/CompletionProviderStatus.js +6 -3
- package/dist/components/CompletionProviderStatus/CompletionProviderStatus.js.map +1 -1
- package/dist/components/DateSelector/DateSelector.d.ts +2 -1
- package/dist/components/DateSelector/DateSelector.js +17 -7
- package/dist/components/DateSelector/DateSelector.js.map +1 -1
- package/dist/components/FilePreview/FilePreview.js +22 -5
- package/dist/components/FilePreview/FilePreview.js.map +1 -1
- package/dist/components/Header/ChatConsumptionDropdown.js +1 -1
- package/dist/components/Header/ChatConsumptionDropdown.js.map +1 -1
- package/dist/components/Header/Header.css +2 -1
- package/dist/components/Header/Header.js +1 -1
- package/dist/components/Header/Header.js.map +1 -1
- package/dist/components/MediaWidget/MediaItemWidget.js +14 -12
- package/dist/components/MediaWidget/MediaItemWidget.js.map +1 -1
- package/dist/components/MediaWidget/MediaItemWidget.utils.d.ts +3 -2
- package/dist/components/MediaWidget/MediaItemWidget.utils.js +28 -6
- package/dist/components/MediaWidget/MediaItemWidget.utils.js.map +1 -1
- package/dist/components/MediaWidget/MediaPreviewModal.js +6 -7
- package/dist/components/MediaWidget/MediaPreviewModal.js.map +1 -1
- package/dist/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +5 -4
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +90 -38
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.d.ts +1 -0
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +14 -9
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
- package/dist/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js +2 -2
- package/dist/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js.map +1 -1
- package/dist/components/MemoriWidget/MemoriWidget.js +632 -280
- package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/dist/components/StartPanel/StartPanel.js +10 -5
- package/dist/components/StartPanel/StartPanel.js.map +1 -1
- package/dist/components/UploadButton/UploadButton.js +21 -5
- package/dist/components/UploadButton/UploadButton.js.map +1 -1
- package/dist/components/UploadButton/UploadDocuments/UploadDocuments.js +123 -59
- package/dist/components/UploadButton/UploadDocuments/UploadDocuments.js.map +1 -1
- package/dist/components/layouts/Chat.js +25 -30
- package/dist/components/layouts/Chat.js.map +1 -1
- package/dist/components/layouts/FullPage.js +5 -8
- package/dist/components/layouts/FullPage.js.map +1 -1
- package/dist/components/layouts/HiddenChat.js +2 -1
- package/dist/components/layouts/HiddenChat.js.map +1 -1
- package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js +5 -1
- package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
- package/dist/components/layouts/WebsiteAssistant/website-assistant.css +3 -4
- package/dist/components/layouts/ZoomedFullBody.js +4 -7
- package/dist/components/layouts/ZoomedFullBody.js.map +1 -1
- package/dist/components/layouts/chat.css +19 -31
- package/dist/components/layouts/fullpage.css +52 -19
- package/dist/components/layouts/zoomed-full-body.css +40 -1
- package/dist/helpers/constants.d.ts +3 -0
- package/dist/helpers/constants.js +27 -1
- package/dist/helpers/constants.js.map +1 -1
- package/dist/helpers/credits.d.ts +5 -2
- package/dist/helpers/credits.js +5 -1
- package/dist/helpers/credits.js.map +1 -1
- package/dist/helpers/message.d.ts +1 -1
- package/dist/helpers/message.js +4 -4
- package/dist/helpers/message.js.map +1 -1
- package/dist/helpers/nats/getNatsConfig.d.ts +9 -0
- package/dist/helpers/nats/getNatsConfig.js +65 -0
- package/dist/helpers/nats/getNatsConfig.js.map +1 -0
- package/dist/helpers/nats/isSessionExpiredError.d.ts +3 -0
- package/dist/helpers/nats/isSessionExpiredError.js +36 -0
- package/dist/helpers/nats/isSessionExpiredError.js.map +1 -0
- package/dist/helpers/nats/useNats.d.ts +12 -0
- package/dist/helpers/nats/useNats.js +75 -0
- package/dist/helpers/nats/useNats.js.map +1 -0
- package/dist/helpers/nats/useNatsSession.d.ts +28 -0
- package/dist/helpers/nats/useNatsSession.js +212 -0
- package/dist/helpers/nats/useNatsSession.js.map +1 -0
- package/dist/helpers/usePressTooltip.d.ts +13 -0
- package/dist/helpers/usePressTooltip.js +23 -0
- package/dist/helpers/usePressTooltip.js.map +1 -0
- package/dist/helpers/utils.d.ts +21 -0
- package/dist/helpers/utils.js +75 -4
- package/dist/helpers/utils.js.map +1 -1
- package/dist/locales/de.json +1 -0
- package/dist/locales/en.json +1 -0
- package/dist/locales/es.json +1 -0
- package/dist/locales/fr.json +1 -0
- package/dist/locales/it.json +1 -0
- package/dist/styles.css +1 -1
- package/dist/types/integration.d.ts +3 -0
- package/dist/types/integration.js +16 -0
- package/dist/types/integration.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/esm/components/AgeVerificationModal/AgeVerificationModal.js +5 -2
- package/esm/components/AgeVerificationModal/AgeVerificationModal.js.map +1 -1
- package/esm/components/Avatar/Avatar.js +5 -10
- package/esm/components/Avatar/Avatar.js.map +1 -1
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js +9 -2
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js.map +1 -1
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.js +2 -2
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.js.map +1 -1
- package/esm/components/Avatar/AvatarView/AvatarComponent/constants.d.ts +2 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/constants.js +13 -4
- package/esm/components/Avatar/AvatarView/AvatarComponent/constants.js.map +1 -1
- package/esm/components/ChatBubble/ChatBubble.js +22 -16
- package/esm/components/ChatBubble/ChatBubble.js.map +1 -1
- package/esm/components/CompletionProviderStatus/CompletionProviderStatus.js +6 -3
- package/esm/components/CompletionProviderStatus/CompletionProviderStatus.js.map +1 -1
- package/esm/components/DateSelector/DateSelector.d.ts +2 -1
- package/esm/components/DateSelector/DateSelector.js +17 -7
- package/esm/components/DateSelector/DateSelector.js.map +1 -1
- package/esm/components/FilePreview/FilePreview.js +24 -7
- package/esm/components/FilePreview/FilePreview.js.map +1 -1
- package/esm/components/Header/ChatConsumptionDropdown.js +1 -1
- package/esm/components/Header/ChatConsumptionDropdown.js.map +1 -1
- package/esm/components/Header/Header.css +2 -1
- package/esm/components/Header/Header.js +1 -1
- package/esm/components/Header/Header.js.map +1 -1
- package/esm/components/MediaWidget/MediaItemWidget.js +16 -14
- package/esm/components/MediaWidget/MediaItemWidget.js.map +1 -1
- package/esm/components/MediaWidget/MediaItemWidget.utils.d.ts +3 -2
- package/esm/components/MediaWidget/MediaItemWidget.utils.js +27 -6
- package/esm/components/MediaWidget/MediaItemWidget.utils.js.map +1 -1
- package/esm/components/MediaWidget/MediaPreviewModal.js +6 -7
- package/esm/components/MediaWidget/MediaPreviewModal.js.map +1 -1
- package/esm/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +5 -4
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +90 -38
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.d.ts +1 -0
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +14 -9
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
- package/esm/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js +2 -2
- package/esm/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js.map +1 -1
- package/esm/components/MemoriWidget/MemoriWidget.js +632 -280
- package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/esm/components/StartPanel/StartPanel.js +10 -5
- package/esm/components/StartPanel/StartPanel.js.map +1 -1
- package/esm/components/UploadButton/UploadButton.js +21 -5
- package/esm/components/UploadButton/UploadButton.js.map +1 -1
- package/esm/components/UploadButton/UploadDocuments/UploadDocuments.js +123 -59
- package/esm/components/UploadButton/UploadDocuments/UploadDocuments.js.map +1 -1
- package/esm/components/layouts/Chat.js +25 -30
- package/esm/components/layouts/Chat.js.map +1 -1
- package/esm/components/layouts/FullPage.js +5 -8
- package/esm/components/layouts/FullPage.js.map +1 -1
- package/esm/components/layouts/HiddenChat.js +2 -1
- package/esm/components/layouts/HiddenChat.js.map +1 -1
- package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js +5 -1
- package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
- package/esm/components/layouts/WebsiteAssistant/website-assistant.css +3 -4
- package/esm/components/layouts/ZoomedFullBody.js +4 -7
- package/esm/components/layouts/ZoomedFullBody.js.map +1 -1
- package/esm/components/layouts/chat.css +19 -31
- package/esm/components/layouts/fullpage.css +52 -19
- package/esm/components/layouts/zoomed-full-body.css +40 -1
- package/esm/helpers/constants.d.ts +3 -0
- package/esm/helpers/constants.js +26 -0
- package/esm/helpers/constants.js.map +1 -1
- package/esm/helpers/credits.d.ts +5 -2
- package/esm/helpers/credits.js +5 -1
- package/esm/helpers/credits.js.map +1 -1
- package/esm/helpers/message.d.ts +1 -1
- package/esm/helpers/message.js +2 -2
- package/esm/helpers/message.js.map +1 -1
- package/esm/helpers/nats/getNatsConfig.d.ts +9 -0
- package/esm/helpers/nats/getNatsConfig.js +61 -0
- package/esm/helpers/nats/getNatsConfig.js.map +1 -0
- package/esm/helpers/nats/isSessionExpiredError.d.ts +3 -0
- package/esm/helpers/nats/isSessionExpiredError.js +32 -0
- package/esm/helpers/nats/isSessionExpiredError.js.map +1 -0
- package/esm/helpers/nats/useNats.d.ts +12 -0
- package/esm/helpers/nats/useNats.js +72 -0
- package/esm/helpers/nats/useNats.js.map +1 -0
- package/esm/helpers/nats/useNatsSession.d.ts +28 -0
- package/esm/helpers/nats/useNatsSession.js +208 -0
- package/esm/helpers/nats/useNatsSession.js.map +1 -0
- package/esm/helpers/usePressTooltip.d.ts +13 -0
- package/esm/helpers/usePressTooltip.js +20 -0
- package/esm/helpers/usePressTooltip.js.map +1 -0
- package/esm/helpers/utils.d.ts +21 -0
- package/esm/helpers/utils.js +68 -3
- package/esm/helpers/utils.js.map +1 -1
- package/esm/locales/de.json +1 -0
- package/esm/locales/en.json +1 -0
- package/esm/locales/es.json +1 -0
- package/esm/locales/fr.json +1 -0
- package/esm/locales/it.json +1 -0
- package/esm/styles.css +1 -1
- package/esm/types/integration.d.ts +3 -0
- package/esm/types/integration.js +11 -0
- package/esm/types/integration.js.map +1 -0
- package/esm/version.d.ts +1 -1
- package/esm/version.js +1 -1
- package/package.json +6 -4
- package/src/components/AgeVerificationModal/AgeVerificationModal.tsx +6 -1
- package/src/components/Avatar/Avatar.stories.tsx +45 -28
- package/src/components/Avatar/Avatar.test.tsx +54 -0
- package/src/components/Avatar/Avatar.tsx +8 -12
- package/src/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.tsx +12 -5
- package/src/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.ts +2 -1
- package/src/components/Avatar/AvatarView/AvatarComponent/constants.ts +16 -4
- package/src/components/Avatar/__snapshots__/Avatar.test.tsx.snap +164 -0
- package/src/components/ChatBubble/ChatBubble.tsx +41 -12
- package/src/components/CompletionProviderStatus/CompletionProviderStatus.tsx +8 -4
- package/src/components/DateSelector/DateSelector.stories.tsx +11 -2
- package/src/components/DateSelector/DateSelector.tsx +28 -9
- package/src/components/FilePreview/FilePreview.tsx +28 -7
- package/src/components/Header/ChatConsumptionDropdown.tsx +5 -1
- package/src/components/Header/Header.css +2 -1
- package/src/components/Header/Header.tsx +1 -0
- package/src/components/MediaWidget/MediaItemWidget.tsx +26 -13
- package/src/components/MediaWidget/MediaItemWidget.utils.test.ts +45 -2
- package/src/components/MediaWidget/MediaItemWidget.utils.ts +39 -6
- package/src/components/MediaWidget/MediaPreviewModal.tsx +9 -7
- package/src/components/MemoriArtifactSystem/ArtifactDrawer.stories.tsx +218 -2252
- package/src/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +5 -4
- package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +90 -38
- package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.tsx +31 -14
- package/src/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.tsx +4 -3
- package/src/components/MemoriWidget/MemoriWidget.tsx +785 -331
- package/src/components/StartPanel/StartPanel.stories.tsx +22 -0
- package/src/components/StartPanel/StartPanel.test.tsx +64 -1
- package/src/components/StartPanel/StartPanel.tsx +26 -3
- package/src/components/StartPanel/__snapshots__/StartPanel.test.tsx.snap +261 -0
- package/src/components/UploadButton/UploadButton.tsx +30 -11
- package/src/components/UploadButton/UploadDocuments/UploadDocuments.tsx +148 -61
- package/src/components/UploadButton/__snapshots__/UploadButton.test.tsx.snap +2 -2
- package/src/components/layouts/Chat.tsx +16 -19
- package/src/components/layouts/FullPage.tsx +32 -25
- package/src/components/layouts/HiddenChat.tsx +4 -0
- package/src/components/layouts/WebsiteAssistant/WebsiteAssistant.tsx +8 -0
- package/src/components/layouts/WebsiteAssistant/website-assistant.css +3 -4
- package/src/components/layouts/ZoomedFullBody.tsx +30 -24
- package/src/components/layouts/__snapshots__/Chat.test.tsx.snap +6 -3
- package/src/components/layouts/__snapshots__/FullPage.test.tsx.snap +824 -810
- package/src/components/layouts/__snapshots__/ZoomedFullBody.test.tsx.snap +280 -273
- package/src/components/layouts/chat.css +19 -31
- package/src/components/layouts/fullpage.css +52 -19
- package/src/components/layouts/layouts.stories.tsx +131 -12
- package/src/components/layouts/zoomed-full-body.css +40 -1
- package/src/helpers/constants.ts +32 -1
- package/src/helpers/credits.ts +16 -1
- package/src/helpers/message.test.ts +28 -1
- package/src/helpers/message.ts +4 -4
- package/src/helpers/nats/getNatsConfig.ts +145 -0
- package/src/helpers/nats/isSessionExpiredError.test.ts +38 -0
- package/src/helpers/nats/isSessionExpiredError.ts +51 -0
- package/src/helpers/nats/useNats.ts +124 -0
- package/src/helpers/nats/useNatsSession.ts +394 -0
- package/src/helpers/usePressTooltip.ts +29 -0
- package/src/helpers/utils.test.ts +162 -0
- package/src/helpers/utils.ts +108 -3
- package/src/index.stories.tsx +32 -0
- package/src/locales/de.json +1 -0
- package/src/locales/en.json +1 -0
- package/src/locales/es.json +1 -0
- package/src/locales/fr.json +1 -0
- package/src/locales/it.json +1 -0
- package/src/styles.css +4 -7
- package/src/types/integration.test.ts +32 -0
- package/src/types/integration.ts +31 -0
- package/src/version.ts +1 -1
|
@@ -37,6 +37,8 @@ import { sanitizeText } from '../../helpers/sanitizer';
|
|
|
37
37
|
import { useTTS } from '../../helpers/tts/useTTS';
|
|
38
38
|
import ChatHistoryDrawer from '../ChatHistoryDrawer/ChatHistory';
|
|
39
39
|
import { useSTT } from '../../helpers/stt/useSTT';
|
|
40
|
+
import { useNats } from '../../helpers/nats/useNats';
|
|
41
|
+
import { isSessionExpiredNatsError, isSessionExpiredNatsResponse, } from '../../helpers/nats/isSessionExpiredError';
|
|
40
42
|
const getMemoriState = (integrationId) => {
|
|
41
43
|
var _a, _b, _c, _d, _f;
|
|
42
44
|
let widget = integrationId
|
|
@@ -58,12 +60,23 @@ const getMemoriState = (integrationId) => {
|
|
|
58
60
|
loginToken,
|
|
59
61
|
};
|
|
60
62
|
};
|
|
63
|
+
const resolveLoginTokenValue = (loginToken, userTokenRef, callAdditionalInfoLoginToken, additionalInfoLoginToken, authTokenProp) => {
|
|
64
|
+
var _a, _b, _c;
|
|
65
|
+
return (_c = (_b = (_a = loginToken !== null && loginToken !== void 0 ? loginToken : userTokenRef) !== null && _a !== void 0 ? _a : callAdditionalInfoLoginToken) !== null && _b !== void 0 ? _b : additionalInfoLoginToken) !== null && _c !== void 0 ? _c : authTokenProp;
|
|
66
|
+
};
|
|
61
67
|
const NULL_PLACE_SPEC = {
|
|
62
68
|
placeName: null,
|
|
63
69
|
latitude: null,
|
|
64
70
|
longitude: null,
|
|
65
71
|
uncertaintyKm: null,
|
|
66
72
|
};
|
|
73
|
+
const logWidgetError = (context, detail) => {
|
|
74
|
+
console.error(`[MemoriWidget] ${context}`, detail !== null && detail !== void 0 ? detail : '');
|
|
75
|
+
};
|
|
76
|
+
function readCorrelationID(response) {
|
|
77
|
+
const value = response.correlationID;
|
|
78
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
79
|
+
}
|
|
67
80
|
const typeMessage = (message, waitForPrevious = true, hidden = false, typingText, useLoaderTextAsMsg = false, hasBatchQueued = false) => {
|
|
68
81
|
const e = new CustomEvent('MemoriTextEntered', {
|
|
69
82
|
detail: {
|
|
@@ -159,7 +172,6 @@ window.typeMessageHidden = typeMessageHidden;
|
|
|
159
172
|
window.typeBatchMessages = typeBatchMessages;
|
|
160
173
|
let audioContext;
|
|
161
174
|
let memoriPassword;
|
|
162
|
-
let userToken;
|
|
163
175
|
export function getChatStyles(config) {
|
|
164
176
|
var _a;
|
|
165
177
|
const primary = config === null || config === void 0 ? void 0 : config.buttonBgColor;
|
|
@@ -193,7 +205,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
193
205
|
setIsClient(true);
|
|
194
206
|
}, []);
|
|
195
207
|
const client = memoriApiClient(apiURL, engineURL);
|
|
196
|
-
const { initSession, deleteSession, postTextEnteredEvent, postPlaceChangedEvent, postDateChangedEvent, postTagChangedEvent, getSession, getExpertReferences, getSessionChatLogs, } = client;
|
|
208
|
+
const { initSession, deleteSession, postEnterTextAsync, postTextEnteredEvent, postPlaceChangedEvent, postDateChangedEvent, postTagChangedEvent, getSession, getExpertReferences, getSessionChatLogs, } = client;
|
|
197
209
|
const [instruct, setInstruct] = useState(false);
|
|
198
210
|
const [enableFocusChatInput, setEnableFocusChatInput] = useState(true);
|
|
199
211
|
const [widgetRootEl, setWidgetRootEl] = useState(null);
|
|
@@ -216,35 +228,64 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
216
228
|
return () => observer.disconnect();
|
|
217
229
|
}, [widgetRootEl]);
|
|
218
230
|
const [loginToken, setLoginToken] = useState((_a = additionalInfo === null || additionalInfo === void 0 ? void 0 : additionalInfo.loginToken) !== null && _a !== void 0 ? _a : authToken);
|
|
231
|
+
const userTokenRef = useRef((_b = additionalInfo === null || additionalInfo === void 0 ? void 0 : additionalInfo.loginToken) !== null && _b !== void 0 ? _b : authToken);
|
|
232
|
+
const prevPropsLoginTokenRef = useRef((_c = additionalInfo === null || additionalInfo === void 0 ? void 0 : additionalInfo.loginToken) !== null && _c !== void 0 ? _c : authToken);
|
|
219
233
|
const [user, setUser] = useState({
|
|
220
234
|
avatarURL: typeof userAvatar === 'string' ? userAvatar : undefined,
|
|
221
235
|
});
|
|
236
|
+
const resolveLoginToken = useCallback((callAdditionalInfoLoginToken) => resolveLoginTokenValue(loginToken, userTokenRef.current, callAdditionalInfoLoginToken, additionalInfo === null || additionalInfo === void 0 ? void 0 : additionalInfo.loginToken, authToken), [loginToken, additionalInfo === null || additionalInfo === void 0 ? void 0 : additionalInfo.loginToken, authToken]);
|
|
222
237
|
useEffect(() => {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
setLocalConfig('birthDate', user.birthDate);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
else {
|
|
238
|
-
removeLocalConfig('loginToken');
|
|
239
|
-
}
|
|
240
|
-
});
|
|
238
|
+
var _a;
|
|
239
|
+
const incomingToken = (_a = additionalInfo === null || additionalInfo === void 0 ? void 0 : additionalInfo.loginToken) !== null && _a !== void 0 ? _a : authToken;
|
|
240
|
+
const prevPropsToken = prevPropsLoginTokenRef.current;
|
|
241
|
+
prevPropsLoginTokenRef.current = incomingToken;
|
|
242
|
+
if (incomingToken !== prevPropsToken) {
|
|
243
|
+
setLoginToken(incomingToken);
|
|
244
|
+
userTokenRef.current = incomingToken;
|
|
245
|
+
if (!incomingToken) {
|
|
246
|
+
removeLocalConfig('loginToken');
|
|
247
|
+
setUser(undefined);
|
|
248
|
+
}
|
|
241
249
|
}
|
|
242
|
-
}, [
|
|
250
|
+
}, [additionalInfo === null || additionalInfo === void 0 ? void 0 : additionalInfo.loginToken, authToken]);
|
|
251
|
+
useEffect(() => {
|
|
252
|
+
if (!loginToken || !(showLogin || memori.requireLoginToken)) {
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
let cancelled = false;
|
|
256
|
+
client.backend
|
|
257
|
+
.pwlGetCurrentUser(loginToken)
|
|
258
|
+
.then(({ user: fetchedUser, resultCode }) => {
|
|
259
|
+
if (cancelled)
|
|
260
|
+
return;
|
|
261
|
+
if (fetchedUser && resultCode === 0) {
|
|
262
|
+
setUser(fetchedUser);
|
|
263
|
+
setLocalConfig('loginToken', loginToken);
|
|
264
|
+
userTokenRef.current = loginToken;
|
|
265
|
+
if (!birthDate && fetchedUser.birthDate) {
|
|
266
|
+
setBirthDate(fetchedUser.birthDate);
|
|
267
|
+
setLocalConfig('birthDate', fetchedUser.birthDate);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
setLoginToken(undefined);
|
|
272
|
+
userTokenRef.current = undefined;
|
|
273
|
+
setUser(undefined);
|
|
274
|
+
removeLocalConfig('loginToken');
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
return () => {
|
|
278
|
+
cancelled = true;
|
|
279
|
+
};
|
|
280
|
+
}, [loginToken, showLogin, memori.requireLoginToken]);
|
|
243
281
|
const [showLoginDrawer, setShowLoginDrawer] = useState(false);
|
|
244
282
|
const [clickedStart, setClickedStart] = useState(false);
|
|
245
283
|
const [gotErrorInOpening, setGotErrorInOpening] = useState(false);
|
|
246
|
-
const
|
|
247
|
-
|
|
284
|
+
const sessionStartingRef = useRef(false);
|
|
285
|
+
const needsCredits = tenant === null || tenant === void 0 ? void 0 : tenant.billingDelegation;
|
|
286
|
+
const [hasEnoughCredits, setHasEnoughCredits] = useState(true);
|
|
287
|
+
const language = ((_g = (_f = (_d = memori.culture) === null || _d === void 0 ? void 0 : _d.split('-')) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.toUpperCase()) ||
|
|
288
|
+
((_l = (_k = (_j = (_h = memoriConfigs === null || memoriConfigs === void 0 ? void 0 : memoriConfigs.find(c => c.memoriConfigID === memori.memoriConfigurationID)) === null || _h === void 0 ? void 0 : _h.culture) === null || _j === void 0 ? void 0 : _j.split('-')) === null || _k === void 0 ? void 0 : _k[0]) === null || _l === void 0 ? void 0 : _l.toUpperCase());
|
|
248
289
|
const integrationConfig = (integration === null || integration === void 0 ? void 0 : integration.customData)
|
|
249
290
|
? JSON.parse(integration.customData)
|
|
250
291
|
: null;
|
|
@@ -252,7 +293,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
252
293
|
? multilingual
|
|
253
294
|
: !!(integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.multilanguage);
|
|
254
295
|
const forcedTimeout = integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.forcedTimeout;
|
|
255
|
-
const [userLang, setUserLang] = useState((
|
|
296
|
+
const [userLang, setUserLang] = useState((_r = (_q = (_p = (_o = (_m = spokenLang !== null && spokenLang !== void 0 ? spokenLang : memoriLang) !== null && _m !== void 0 ? _m : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.lang) !== null && _o !== void 0 ? _o : language) !== null && _p !== void 0 ? _p : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.uiLang) !== null && _q !== void 0 ? _q : i18n.language) !== null && _r !== void 0 ? _r : 'IT');
|
|
256
297
|
useEffect(() => {
|
|
257
298
|
if (spokenLang != null) {
|
|
258
299
|
setUserLang(spokenLang);
|
|
@@ -278,6 +319,8 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
278
319
|
const [loading, setLoading] = useState(false);
|
|
279
320
|
const [memoriTyping, setMemoriTyping] = useState(false);
|
|
280
321
|
const [typingText, setTypingText] = useState();
|
|
322
|
+
const pendingEnterTextRef = useRef(new Map());
|
|
323
|
+
const bufferedNatsResponsesRef = useRef(new Map());
|
|
281
324
|
const layoutName = typeof layout === 'string'
|
|
282
325
|
? layout
|
|
283
326
|
: layout &&
|
|
@@ -288,7 +331,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
288
331
|
? layout.name
|
|
289
332
|
: typeof (integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.layout) === 'string'
|
|
290
333
|
? integrationConfig.layout
|
|
291
|
-
: (
|
|
334
|
+
: (_s = integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.layout) === null || _s === void 0 ? void 0 : _s.name;
|
|
292
335
|
const selectedLayout = (() => {
|
|
293
336
|
if (typeof layoutName === 'string') {
|
|
294
337
|
const lower = layoutName.toLowerCase();
|
|
@@ -316,14 +359,14 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
316
359
|
typeof layout === 'object' &&
|
|
317
360
|
layout !== null &&
|
|
318
361
|
'piiDetection' in layout &&
|
|
319
|
-
((
|
|
362
|
+
((_t = layout.piiDetection) === null || _t === void 0 ? void 0 : _t.enabled)
|
|
320
363
|
? layout.piiDetection
|
|
321
364
|
: typeof (integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.layout) === 'object' &&
|
|
322
365
|
(integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.layout) !== null &&
|
|
323
|
-
((
|
|
366
|
+
((_v = (_u = integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.layout) === null || _u === void 0 ? void 0 : _u.piiDetection) === null || _v === void 0 ? void 0 : _v.enabled)
|
|
324
367
|
? integrationConfig.layout.piiDetection
|
|
325
368
|
: undefined;
|
|
326
|
-
const defaultEnableAudio = (
|
|
369
|
+
const defaultEnableAudio = (_w = enableAudio !== null && enableAudio !== void 0 ? enableAudio : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.enableAudio) !== null && _w !== void 0 ? _w : true;
|
|
327
370
|
const [hasUserActivatedListening, setHasUserActivatedListening] = useState(false);
|
|
328
371
|
const [hasUserTypedMessage, setHasUserTypedMessage] = useState(false);
|
|
329
372
|
const [positionPopoverOpen, setPositionPopoverOpenState] = useState(false);
|
|
@@ -366,7 +409,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
366
409
|
setRuntimeShowMessageConsumption(getLocalConfig('showMessageConsumption', (_a = showMessageConsumption !== null && showMessageConsumption !== void 0 ? showMessageConsumption : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.showMessageConsumption) !== null && _a !== void 0 ? _a : false));
|
|
367
410
|
if (!(additionalInfo === null || additionalInfo === void 0 ? void 0 : additionalInfo.loginToken) && !authToken) {
|
|
368
411
|
setLoginToken(getLocalConfig('loginToken', undefined));
|
|
369
|
-
|
|
412
|
+
userTokenRef.current = getLocalConfig('loginToken', undefined);
|
|
370
413
|
setBirthDate(getLocalConfig('birthDate', undefined));
|
|
371
414
|
}
|
|
372
415
|
if (!((_b = enableAudio !== null && enableAudio !== void 0 ? enableAudio : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.enableAudio) !== null && _b !== void 0 ? _b : true)) {
|
|
@@ -464,8 +507,8 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
464
507
|
});
|
|
465
508
|
};
|
|
466
509
|
const [chatLogID, setChatLogID] = useState(undefined);
|
|
467
|
-
const sendMessage = async (text, media, newSessionId, translate = true, translatedText, hidden = false, typingText, useLoaderTextAsMsg = false, hasBatchQueued = false) => {
|
|
468
|
-
var _a, _b
|
|
510
|
+
const sendMessage = async (text, media, newSessionId, translate = true, translatedText, hidden = false, typingText, useLoaderTextAsMsg = false, hasBatchQueued = false, skipHistoryPush = false) => {
|
|
511
|
+
var _a, _b;
|
|
469
512
|
const sessionID = newSessionId ||
|
|
470
513
|
sessionId ||
|
|
471
514
|
((_a = window.getMemoriState()) === null || _a === void 0 ? void 0 : _a.sessionID);
|
|
@@ -509,7 +552,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
509
552
|
return;
|
|
510
553
|
}
|
|
511
554
|
}
|
|
512
|
-
if (!hidden)
|
|
555
|
+
if (!hidden && !skipHistoryPush)
|
|
513
556
|
pushMessage({
|
|
514
557
|
text: text,
|
|
515
558
|
translatedText,
|
|
@@ -519,12 +562,10 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
519
562
|
? !!newSessionId && newSessionId !== sessionId
|
|
520
563
|
: !!newSessionId,
|
|
521
564
|
});
|
|
522
|
-
setMemoriTyping(true);
|
|
523
|
-
setTypingText(typingText);
|
|
524
565
|
let gotError = false;
|
|
525
566
|
try {
|
|
526
567
|
const placeSpec = getPlaceSpecForEnterText(position);
|
|
527
|
-
const
|
|
568
|
+
const response = await postEnterTextAsync({
|
|
528
569
|
sessionId: sessionID,
|
|
529
570
|
text: msg,
|
|
530
571
|
...(memori.needsDateTime && {
|
|
@@ -532,65 +573,37 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
532
573
|
}),
|
|
533
574
|
...(placeSpec !== undefined && { place: placeSpec }),
|
|
534
575
|
});
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
...currentState,
|
|
554
|
-
emission,
|
|
555
|
-
});
|
|
556
|
-
if (emission) {
|
|
557
|
-
pushMessage({
|
|
558
|
-
text: emission,
|
|
559
|
-
emitter: currentState.emitter,
|
|
560
|
-
media: (_d = currentState.emittedMedia) !== null && _d !== void 0 ? _d : currentState.media,
|
|
561
|
-
llmUsage: currentState.llmUsage,
|
|
562
|
-
fromUser: false,
|
|
563
|
-
questionAnswered: msg,
|
|
564
|
-
generatedByAI: !!currentState.completion,
|
|
565
|
-
contextVars: currentState.contextVars,
|
|
566
|
-
date: currentState.currentDate,
|
|
567
|
-
placeName: currentState.currentPlaceName,
|
|
568
|
-
placeLatitude: currentState.currentLatitude,
|
|
569
|
-
placeLongitude: currentState.currentLongitude,
|
|
570
|
-
placeUncertaintyKm: currentState.currentUncertaintyKm,
|
|
571
|
-
tag: currentState.currentTag,
|
|
572
|
-
memoryTags: currentState.memoryTags,
|
|
573
|
-
});
|
|
574
|
-
if (emission && shouldPlayAudio(emission)) {
|
|
575
|
-
handleSpeak(emission);
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
}
|
|
576
|
+
const correlationID = readCorrelationID(response);
|
|
577
|
+
if (response.resultCode === 0 && correlationID) {
|
|
578
|
+
registerPendingEnterText(correlationID, {
|
|
579
|
+
msg,
|
|
580
|
+
text,
|
|
581
|
+
media,
|
|
582
|
+
translate,
|
|
583
|
+
translatedText,
|
|
584
|
+
hidden,
|
|
585
|
+
typingText,
|
|
586
|
+
useLoaderTextAsMsg,
|
|
587
|
+
hasBatchQueued,
|
|
588
|
+
});
|
|
589
|
+
setMemoriTyping(true);
|
|
590
|
+
setTypingText(typingText);
|
|
591
|
+
}
|
|
592
|
+
else if (response.resultCode === 0) {
|
|
593
|
+
logWidgetError('enter-text missing correlationID', response);
|
|
579
594
|
}
|
|
580
595
|
else if (response.resultCode === 404) {
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
}, 500);
|
|
593
|
-
}
|
|
596
|
+
retryAfterExpiredSessionRef.current({
|
|
597
|
+
text,
|
|
598
|
+
media,
|
|
599
|
+
translate,
|
|
600
|
+
translatedText,
|
|
601
|
+
hidden,
|
|
602
|
+
typingText,
|
|
603
|
+
useLoaderTextAsMsg,
|
|
604
|
+
hasBatchQueued,
|
|
605
|
+
expiredSessionID: sessionID,
|
|
606
|
+
continueFromChatLogID: chatLogID,
|
|
594
607
|
});
|
|
595
608
|
}
|
|
596
609
|
else if (response.resultCode === 500 && response.resultMessage) {
|
|
@@ -607,18 +620,12 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
607
620
|
]);
|
|
608
621
|
}
|
|
609
622
|
else {
|
|
610
|
-
console.warn('[SEND_MESSAGE]', response);
|
|
611
623
|
return Promise.reject(response);
|
|
612
624
|
}
|
|
613
625
|
}
|
|
614
626
|
catch (error) {
|
|
615
|
-
console.log('error', error);
|
|
616
|
-
console.error(error);
|
|
617
627
|
gotError = true;
|
|
618
|
-
|
|
619
|
-
setMemoriTyping(false);
|
|
620
|
-
}
|
|
621
|
-
if (!hasBatchQueued) {
|
|
628
|
+
logWidgetError('sendMessage failed', error);
|
|
622
629
|
setTypingText(undefined);
|
|
623
630
|
setMemoriTyping(false);
|
|
624
631
|
}
|
|
@@ -700,7 +707,6 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
700
707
|
}
|
|
701
708
|
}
|
|
702
709
|
catch (error) {
|
|
703
|
-
console.error('[TRANSLATE] Error during translation:', error);
|
|
704
710
|
translatedState = { ...state, emission };
|
|
705
711
|
translatedMsg = {
|
|
706
712
|
text: emission,
|
|
@@ -808,7 +814,6 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
808
814
|
try {
|
|
809
815
|
setTimeout(() => {
|
|
810
816
|
var _a;
|
|
811
|
-
console.log('snippet', s);
|
|
812
817
|
new Function((_a = s.content) !== null && _a !== void 0 ? _a : '')();
|
|
813
818
|
setTimeout(() => {
|
|
814
819
|
var _a, _b, _c;
|
|
@@ -817,8 +822,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
817
822
|
}, 400);
|
|
818
823
|
}, 1000);
|
|
819
824
|
}
|
|
820
|
-
catch (
|
|
821
|
-
console.warn(e);
|
|
825
|
+
catch (_a) {
|
|
822
826
|
}
|
|
823
827
|
});
|
|
824
828
|
};
|
|
@@ -829,7 +833,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
829
833
|
}
|
|
830
834
|
}, [initialSessionID]);
|
|
831
835
|
const fetchSession = async (params) => {
|
|
832
|
-
var _a, _b, _c, _d, _f, _g, _h
|
|
836
|
+
var _a, _b, _c, _d, _f, _g, _h;
|
|
833
837
|
let storageBirthDate = getLocalConfig('birthDate', undefined);
|
|
834
838
|
let userBirthDate = (_a = birthDate !== null && birthDate !== void 0 ? birthDate : params.birthDate) !== null && _a !== void 0 ? _a : storageBirthDate;
|
|
835
839
|
if (!userBirthDate && !!minAge) {
|
|
@@ -843,6 +847,9 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
843
847
|
setAuthModalState('password');
|
|
844
848
|
return;
|
|
845
849
|
}
|
|
850
|
+
if (!(await checkCredits({ notify: true }))) {
|
|
851
|
+
return;
|
|
852
|
+
}
|
|
846
853
|
setLoading(true);
|
|
847
854
|
try {
|
|
848
855
|
let referral;
|
|
@@ -851,8 +858,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
851
858
|
return window.location.href;
|
|
852
859
|
})();
|
|
853
860
|
}
|
|
854
|
-
catch (
|
|
855
|
-
console.debug(err);
|
|
861
|
+
catch (_j) {
|
|
856
862
|
}
|
|
857
863
|
const session = await initSession({
|
|
858
864
|
...params,
|
|
@@ -861,8 +867,8 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
861
867
|
pin: (_c = params.pin) !== null && _c !== void 0 ? _c : personification === null || personification === void 0 ? void 0 : personification.pin,
|
|
862
868
|
additionalInfo: {
|
|
863
869
|
...(params.additionalInfo || additionalInfo || {}),
|
|
864
|
-
loginToken: (
|
|
865
|
-
language: ((
|
|
870
|
+
loginToken: resolveLoginToken((_d = params.additionalInfo) === null || _d === void 0 ? void 0 : _d.loginToken),
|
|
871
|
+
language: ((_h = userLang !== null && userLang !== void 0 ? userLang : (_g = (_f = memori.culture) === null || _f === void 0 ? void 0 : _f.split('-')) === null || _g === void 0 ? void 0 : _g[0]) !== null && _h !== void 0 ? _h : 'IT').toLowerCase(),
|
|
866
872
|
referral: referral,
|
|
867
873
|
timeZoneOffset: new Date().getTimezoneOffset().toString(),
|
|
868
874
|
},
|
|
@@ -891,7 +897,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
891
897
|
}));
|
|
892
898
|
setGotErrorInOpening(true);
|
|
893
899
|
}
|
|
894
|
-
else if ((session === null || session === void 0 ? void 0 : session.resultCode) === 403) {
|
|
900
|
+
else if ((session === null || session === void 0 ? void 0 : session.resultCode) === 403 && memori.privacyType !== 'PUBLIC') {
|
|
895
901
|
setMemoriPwd(undefined);
|
|
896
902
|
setAuthModalState('password');
|
|
897
903
|
return session;
|
|
@@ -903,16 +909,15 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
903
909
|
severity: 'error',
|
|
904
910
|
duration: 0,
|
|
905
911
|
}));
|
|
906
|
-
setGotErrorInOpening(true);
|
|
907
912
|
return session;
|
|
908
913
|
}
|
|
909
914
|
}
|
|
910
915
|
catch (err) {
|
|
911
|
-
|
|
916
|
+
logWidgetError('fetchSession failed', err);
|
|
912
917
|
}
|
|
913
918
|
};
|
|
914
|
-
const reopenSession = async (updateDialogState = false, password, recoveryTokens, tag, pin, initialContextVars, initialQuestion, birthDate, additionalInfoProp, continueFromChatLogID, continueFromSessionID, isSessionExpired) => {
|
|
915
|
-
var _a, _b, _c, _d, _f, _g, _h, _j
|
|
919
|
+
const reopenSession = async (updateDialogState = false, password, recoveryTokens, tag, pin, initialContextVars, initialQuestion, birthDate, additionalInfoProp, continueFromChatLogID, continueFromSessionID, isSessionExpired, suppressHistoryUpdate) => {
|
|
920
|
+
var _a, _b, _c, _d, _f, _g, _h, _j;
|
|
916
921
|
setLoading(true);
|
|
917
922
|
let storageBirthDate = getLocalConfig('birthDate', undefined);
|
|
918
923
|
let userBirthDate = birthDate !== null && birthDate !== void 0 ? birthDate : storageBirthDate;
|
|
@@ -930,14 +935,17 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
930
935
|
setAuthModalState('password');
|
|
931
936
|
return;
|
|
932
937
|
}
|
|
938
|
+
if (!(await checkCredits({ notify: true }))) {
|
|
939
|
+
setLoading(false);
|
|
940
|
+
return null;
|
|
941
|
+
}
|
|
933
942
|
let referral;
|
|
934
943
|
try {
|
|
935
944
|
referral = (() => {
|
|
936
945
|
return window.location.href;
|
|
937
946
|
})();
|
|
938
947
|
}
|
|
939
|
-
catch (
|
|
940
|
-
console.debug('[REOPEN_SESSION] Error getting referral:', err);
|
|
948
|
+
catch (_k) {
|
|
941
949
|
}
|
|
942
950
|
const { sessionID, currentState, ...response } = await initSession({
|
|
943
951
|
memoriID: (_a = memori.engineMemoriID) !== null && _a !== void 0 ? _a : '',
|
|
@@ -957,21 +965,32 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
957
965
|
birthDate: userBirthDate,
|
|
958
966
|
additionalInfo: {
|
|
959
967
|
...(additionalInfoProp || additionalInfo || {}),
|
|
960
|
-
loginToken: (
|
|
961
|
-
language: ((
|
|
968
|
+
loginToken: resolveLoginToken(additionalInfoProp === null || additionalInfoProp === void 0 ? void 0 : additionalInfoProp.loginToken),
|
|
969
|
+
language: ((_g = userLang !== null && userLang !== void 0 ? userLang : (_f = (_d = memori.culture) === null || _d === void 0 ? void 0 : _d.split('-')) === null || _f === void 0 ? void 0 : _f[0]) !== null && _g !== void 0 ? _g : 'IT').toLowerCase(),
|
|
962
970
|
referral: referral,
|
|
963
971
|
timeZoneOffset: new Date().getTimezoneOffset().toString(),
|
|
964
972
|
},
|
|
965
973
|
});
|
|
966
974
|
if (sessionID && currentState && response.resultCode === 0) {
|
|
967
|
-
console.log('[REOPEN_SESSION] Session initialized successfully:', sessionID);
|
|
968
975
|
setSessionId(sessionID);
|
|
969
976
|
if (updateDialogState) {
|
|
970
977
|
setCurrentDialogState(currentState);
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
978
|
+
const sessionExpiredStatus = isSessionExpired && history.length > 1
|
|
979
|
+
? t('sessionExpiredReopening')
|
|
980
|
+
: null;
|
|
981
|
+
if (sessionExpiredStatus && suppressHistoryUpdate) {
|
|
982
|
+
pushMessage({
|
|
983
|
+
text: '',
|
|
984
|
+
emitter: 'system',
|
|
985
|
+
fromUser: false,
|
|
986
|
+
initial: sessionExpiredStatus,
|
|
987
|
+
contextVars: {},
|
|
988
|
+
date: new Date().toISOString(),
|
|
989
|
+
});
|
|
990
|
+
}
|
|
991
|
+
if (currentState.emission && !suppressHistoryUpdate) {
|
|
992
|
+
const initialStatus = sessionExpiredStatus
|
|
993
|
+
? sessionExpiredStatus
|
|
975
994
|
: history.length <= 1
|
|
976
995
|
? true
|
|
977
996
|
: undefined;
|
|
@@ -980,7 +999,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
980
999
|
{
|
|
981
1000
|
text: currentState.emission,
|
|
982
1001
|
emitter: currentState.emitter,
|
|
983
|
-
media: (
|
|
1002
|
+
media: (_h = currentState.emittedMedia) !== null && _h !== void 0 ? _h : currentState.media,
|
|
984
1003
|
fromUser: false,
|
|
985
1004
|
initial: (initialStatus === true
|
|
986
1005
|
? true
|
|
@@ -998,7 +1017,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
998
1017
|
: pushMessage({
|
|
999
1018
|
text: currentState.emission,
|
|
1000
1019
|
emitter: currentState.emitter,
|
|
1001
|
-
media: (
|
|
1020
|
+
media: (_j = currentState.emittedMedia) !== null && _j !== void 0 ? _j : currentState.media,
|
|
1002
1021
|
fromUser: false,
|
|
1003
1022
|
initial: (initialStatus === true
|
|
1004
1023
|
? true
|
|
@@ -1028,8 +1047,8 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1028
1047
|
}));
|
|
1029
1048
|
setGotErrorInOpening(true);
|
|
1030
1049
|
}
|
|
1031
|
-
else if ((response === null || response === void 0 ? void 0 : response.resultCode) === 403
|
|
1032
|
-
|
|
1050
|
+
else if ((response === null || response === void 0 ? void 0 : response.resultCode) === 403 &&
|
|
1051
|
+
memori.privacyType !== 'PUBLIC') {
|
|
1033
1052
|
setMemoriPwd(undefined);
|
|
1034
1053
|
setAuthModalState('password');
|
|
1035
1054
|
}
|
|
@@ -1043,15 +1062,61 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1043
1062
|
}
|
|
1044
1063
|
}
|
|
1045
1064
|
catch (err) {
|
|
1046
|
-
|
|
1065
|
+
logWidgetError('reopenSession failed', err);
|
|
1047
1066
|
}
|
|
1048
1067
|
setLoading(false);
|
|
1049
1068
|
return null;
|
|
1050
1069
|
};
|
|
1070
|
+
const retryAfterExpiredSessionRef = useRef(() => Promise.resolve(null));
|
|
1071
|
+
retryAfterExpiredSessionRef.current = (params) => {
|
|
1072
|
+
const { text, media, translate = true, translatedText, hidden = false, typingText, useLoaderTextAsMsg = false, hasBatchQueued = false, expiredSessionID, continueFromChatLogID: continueFromChatLogIDParam, } = params;
|
|
1073
|
+
const continueFromSessionID = expiredSessionID !== null && expiredSessionID !== void 0 ? expiredSessionID : sessionId;
|
|
1074
|
+
const continueFromChatLogID = continueFromChatLogIDParam !== null && continueFromChatLogIDParam !== void 0 ? continueFromChatLogIDParam : chatLogID;
|
|
1075
|
+
const reopenAfterExpiry = () => {
|
|
1076
|
+
var _a, _b;
|
|
1077
|
+
return reopenSession(true, memoriPwd || memori.secretToken, memoriTokens, undefined, undefined, {
|
|
1078
|
+
LANG: userLang,
|
|
1079
|
+
PATHNAME: window.location.pathname,
|
|
1080
|
+
ROUTE: ((_b = (_a = window.location.pathname) === null || _a === void 0 ? void 0 : _a.split('/')) === null || _b === void 0 ? void 0 : _b.pop()) || '',
|
|
1081
|
+
...(initialContextVars || {}),
|
|
1082
|
+
}, initialQuestion, undefined, undefined, continueFromChatLogID, continueFromSessionID, true, true);
|
|
1083
|
+
};
|
|
1084
|
+
const scheduleRetry = (newSessionID) => {
|
|
1085
|
+
setTimeout(() => {
|
|
1086
|
+
sendMessage(text, media, newSessionID, translate, translatedText, hidden, typingText, useLoaderTextAsMsg, hasBatchQueued, true);
|
|
1087
|
+
}, 500);
|
|
1088
|
+
};
|
|
1089
|
+
const handleReopenFailure = (state) => {
|
|
1090
|
+
setMemoriTyping(false);
|
|
1091
|
+
setTypingText(undefined);
|
|
1092
|
+
if (state === null && text && !hidden) {
|
|
1093
|
+
add(createAlertOptions({
|
|
1094
|
+
description: t('errors.SESSION_EXPIRED'),
|
|
1095
|
+
severity: 'error',
|
|
1096
|
+
}));
|
|
1097
|
+
}
|
|
1098
|
+
};
|
|
1099
|
+
if (!text) {
|
|
1100
|
+
return reopenAfterExpiry().then(state => {
|
|
1101
|
+
if (!(state === null || state === void 0 ? void 0 : state.sessionID)) {
|
|
1102
|
+
handleReopenFailure(state);
|
|
1103
|
+
}
|
|
1104
|
+
return state;
|
|
1105
|
+
});
|
|
1106
|
+
}
|
|
1107
|
+
return reopenAfterExpiry().then(state => {
|
|
1108
|
+
if (state === null || state === void 0 ? void 0 : state.sessionID) {
|
|
1109
|
+
scheduleRetry(state.sessionID);
|
|
1110
|
+
}
|
|
1111
|
+
else {
|
|
1112
|
+
handleReopenFailure(state);
|
|
1113
|
+
}
|
|
1114
|
+
return state;
|
|
1115
|
+
});
|
|
1116
|
+
};
|
|
1051
1117
|
const changeTag = async (memoriId, sessionId, tag, pin) => {
|
|
1052
|
-
var _a, _b, _c, _d, _f, _g, _h
|
|
1118
|
+
var _a, _b, _c, _d, _f, _g, _h;
|
|
1053
1119
|
if (!memoriId || !sessionId) {
|
|
1054
|
-
console.error('CHANGETAG/Session not found');
|
|
1055
1120
|
return Promise.reject('Session not found');
|
|
1056
1121
|
}
|
|
1057
1122
|
try {
|
|
@@ -1083,7 +1148,6 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1083
1148
|
}
|
|
1084
1149
|
}
|
|
1085
1150
|
else if ([400, 401, 403, 404, 500].includes(resultCode)) {
|
|
1086
|
-
console.warn('[APPCONTEXT/CHANGETAG]', resultCode);
|
|
1087
1151
|
let storageBirthDate = getLocalConfig('birthDate', undefined);
|
|
1088
1152
|
let referral;
|
|
1089
1153
|
try {
|
|
@@ -1091,8 +1155,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1091
1155
|
return window.location.href;
|
|
1092
1156
|
})();
|
|
1093
1157
|
}
|
|
1094
|
-
catch (
|
|
1095
|
-
console.debug(err);
|
|
1158
|
+
catch (_j) {
|
|
1096
1159
|
}
|
|
1097
1160
|
fetchSession({
|
|
1098
1161
|
memoriID: (_b = memori.engineMemoriID) !== null && _b !== void 0 ? _b : '',
|
|
@@ -1109,8 +1172,8 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1109
1172
|
birthDate: birthDate || storageBirthDate || undefined,
|
|
1110
1173
|
additionalInfo: {
|
|
1111
1174
|
...(additionalInfo || {}),
|
|
1112
|
-
loginToken: (
|
|
1113
|
-
language: ((
|
|
1175
|
+
loginToken: resolveLoginToken(),
|
|
1176
|
+
language: ((_h = userLang !== null && userLang !== void 0 ? userLang : (_g = (_f = memori.culture) === null || _f === void 0 ? void 0 : _f.split('-')) === null || _g === void 0 ? void 0 : _g[0]) !== null && _h !== void 0 ? _h : 'IT').toLowerCase(),
|
|
1114
1177
|
referral: referral,
|
|
1115
1178
|
timeZoneOffset: new Date().getTimezoneOffset().toString(),
|
|
1116
1179
|
},
|
|
@@ -1127,7 +1190,6 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1127
1190
|
}
|
|
1128
1191
|
catch (_e) {
|
|
1129
1192
|
let err = _e;
|
|
1130
|
-
console.warn('[APPCONTEXT/CHANGETAG]', err);
|
|
1131
1193
|
return Promise.reject(err);
|
|
1132
1194
|
}
|
|
1133
1195
|
return null;
|
|
@@ -1148,6 +1210,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1148
1210
|
return () => {
|
|
1149
1211
|
setHasUserActivatedSpeak(false);
|
|
1150
1212
|
setClickedStart(false);
|
|
1213
|
+
sessionStartingRef.current = false;
|
|
1151
1214
|
clearInteractionTimeout();
|
|
1152
1215
|
timeoutRef.current = undefined;
|
|
1153
1216
|
};
|
|
@@ -1174,10 +1237,9 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1174
1237
|
apiUrl: `${baseUrl}/api/tts`,
|
|
1175
1238
|
continuousSpeech: continuousSpeech,
|
|
1176
1239
|
preview: preview,
|
|
1177
|
-
}, autoStart, defaultEnableAudio, (
|
|
1240
|
+
}, autoStart, defaultEnableAudio, (_x = defaultSpeakerActive !== null && defaultSpeakerActive !== void 0 ? defaultSpeakerActive : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.defaultSpeakerActive) !== null && _x !== void 0 ? _x : true);
|
|
1178
1241
|
const shouldPlayAudio = (text) => {
|
|
1179
1242
|
const currentSpeakerMuted = getLocalConfig('muteSpeaker', !defaultEnableAudio);
|
|
1180
|
-
console.log('[MemoriWidget] shouldPlayAudio', currentSpeakerMuted);
|
|
1181
1243
|
return (text &&
|
|
1182
1244
|
text.trim() &&
|
|
1183
1245
|
!preview &&
|
|
@@ -1190,15 +1252,12 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1190
1252
|
}
|
|
1191
1253
|
try {
|
|
1192
1254
|
const message = stripDuplicates(text);
|
|
1193
|
-
console.debug('Processing speech message:', message);
|
|
1194
1255
|
if (message.length > 0) {
|
|
1195
1256
|
setUserMessage('');
|
|
1196
|
-
console.debug('Sending message:', message);
|
|
1197
1257
|
sendMessage(message);
|
|
1198
1258
|
}
|
|
1199
1259
|
}
|
|
1200
|
-
catch (
|
|
1201
|
-
console.error('Error in processSpeechAndSendMessage:', error);
|
|
1260
|
+
catch (_a) {
|
|
1202
1261
|
}
|
|
1203
1262
|
};
|
|
1204
1263
|
const { isListening, startRecording, stopRecording, } = useSTT(sttConfig, processSpeechAndSendMessage, {
|
|
@@ -1232,8 +1291,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1232
1291
|
}
|
|
1233
1292
|
return translatedState;
|
|
1234
1293
|
}
|
|
1235
|
-
catch (
|
|
1236
|
-
console.error('Error in translateAndSpeak:', error);
|
|
1294
|
+
catch (_a) {
|
|
1237
1295
|
if (!hasUserActivatedSpeak) {
|
|
1238
1296
|
setHasUserActivatedSpeak(true);
|
|
1239
1297
|
}
|
|
@@ -1246,6 +1304,221 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1246
1304
|
setHasUserActivatedSpeak,
|
|
1247
1305
|
speakerMuted,
|
|
1248
1306
|
]);
|
|
1307
|
+
const processEnterTextDialogResponse = useCallback((event, pending) => {
|
|
1308
|
+
var _a, _b;
|
|
1309
|
+
const { msg, typingText: pendingTypingText, useLoaderTextAsMsg, } = pending;
|
|
1310
|
+
const currentState = event.currentState;
|
|
1311
|
+
if (event.resultCode !== 0 || !currentState) {
|
|
1312
|
+
if (isSessionExpiredNatsResponse(event) && pending.text) {
|
|
1313
|
+
setMemoriTyping(false);
|
|
1314
|
+
setTypingText(undefined);
|
|
1315
|
+
retryAfterExpiredSessionRef.current({
|
|
1316
|
+
text: pending.text,
|
|
1317
|
+
media: pending.media,
|
|
1318
|
+
translate: pending.translate,
|
|
1319
|
+
translatedText: pending.translatedText,
|
|
1320
|
+
hidden: pending.hidden,
|
|
1321
|
+
typingText: pending.typingText,
|
|
1322
|
+
useLoaderTextAsMsg: pending.useLoaderTextAsMsg,
|
|
1323
|
+
hasBatchQueued: pending.hasBatchQueued,
|
|
1324
|
+
expiredSessionID: sessionId,
|
|
1325
|
+
continueFromChatLogID: chatLogID,
|
|
1326
|
+
});
|
|
1327
|
+
return;
|
|
1328
|
+
}
|
|
1329
|
+
if (event.resultCode === 500 && event.resultMessage) {
|
|
1330
|
+
setHistory(h => [
|
|
1331
|
+
...h,
|
|
1332
|
+
{
|
|
1333
|
+
text: 'Error: ' + event.resultMessage,
|
|
1334
|
+
emitter: 'system',
|
|
1335
|
+
fromUser: false,
|
|
1336
|
+
initial: false,
|
|
1337
|
+
contextVars: {},
|
|
1338
|
+
date: new Date().toISOString(),
|
|
1339
|
+
},
|
|
1340
|
+
]);
|
|
1341
|
+
}
|
|
1342
|
+
return;
|
|
1343
|
+
}
|
|
1344
|
+
if (!msg) {
|
|
1345
|
+
return;
|
|
1346
|
+
}
|
|
1347
|
+
setChatLogID(undefined);
|
|
1348
|
+
const emission = useLoaderTextAsMsg && pendingTypingText
|
|
1349
|
+
? pendingTypingText
|
|
1350
|
+
: (_a = currentState.emission) !== null && _a !== void 0 ? _a : currentDialogState === null || currentDialogState === void 0 ? void 0 : currentDialogState.emission;
|
|
1351
|
+
if (userLang.toLowerCase() !== language.toLowerCase() &&
|
|
1352
|
+
emission &&
|
|
1353
|
+
isMultilanguageEnabled) {
|
|
1354
|
+
currentState.emission = emission;
|
|
1355
|
+
translateDialogState(currentState, userLang, msg).then(ts => {
|
|
1356
|
+
const text = ts.translatedEmission || ts.emission;
|
|
1357
|
+
if (text && shouldPlayAudio(text)) {
|
|
1358
|
+
handleSpeak(text);
|
|
1359
|
+
}
|
|
1360
|
+
});
|
|
1361
|
+
}
|
|
1362
|
+
else {
|
|
1363
|
+
setCurrentDialogState({
|
|
1364
|
+
...currentState,
|
|
1365
|
+
emission,
|
|
1366
|
+
});
|
|
1367
|
+
if (emission) {
|
|
1368
|
+
pushMessage({
|
|
1369
|
+
text: emission,
|
|
1370
|
+
emitter: currentState.emitter,
|
|
1371
|
+
media: (_b = currentState.emittedMedia) !== null && _b !== void 0 ? _b : currentState.media,
|
|
1372
|
+
llmUsage: currentState.llmUsage,
|
|
1373
|
+
fromUser: false,
|
|
1374
|
+
questionAnswered: msg,
|
|
1375
|
+
generatedByAI: !!currentState.completion,
|
|
1376
|
+
contextVars: currentState.contextVars,
|
|
1377
|
+
date: currentState.currentDate,
|
|
1378
|
+
placeName: currentState.currentPlaceName,
|
|
1379
|
+
placeLatitude: currentState.currentLatitude,
|
|
1380
|
+
placeLongitude: currentState.currentLongitude,
|
|
1381
|
+
placeUncertaintyKm: currentState.currentUncertaintyKm,
|
|
1382
|
+
tag: currentState.currentTag,
|
|
1383
|
+
memoryTags: currentState.memoryTags,
|
|
1384
|
+
});
|
|
1385
|
+
if (emission && shouldPlayAudio(emission)) {
|
|
1386
|
+
handleSpeak(emission);
|
|
1387
|
+
}
|
|
1388
|
+
}
|
|
1389
|
+
}
|
|
1390
|
+
}, [
|
|
1391
|
+
userLang,
|
|
1392
|
+
language,
|
|
1393
|
+
isMultilanguageEnabled,
|
|
1394
|
+
currentDialogState === null || currentDialogState === void 0 ? void 0 : currentDialogState.emission,
|
|
1395
|
+
translateDialogState,
|
|
1396
|
+
handleSpeak,
|
|
1397
|
+
shouldPlayAudio,
|
|
1398
|
+
]);
|
|
1399
|
+
const clearEnterTextPending = useCallback((correlationID, pending) => {
|
|
1400
|
+
var _a;
|
|
1401
|
+
if ((_a = pending.waitForResponse) === null || _a === void 0 ? void 0 : _a.timeoutId) {
|
|
1402
|
+
clearTimeout(pending.waitForResponse.timeoutId);
|
|
1403
|
+
}
|
|
1404
|
+
pendingEnterTextRef.current.delete(correlationID);
|
|
1405
|
+
}, []);
|
|
1406
|
+
const deliverEnterTextNatsError = useCallback((event) => {
|
|
1407
|
+
var _a, _b, _c;
|
|
1408
|
+
const correlationID = event.correlationID;
|
|
1409
|
+
let pending;
|
|
1410
|
+
if (correlationID) {
|
|
1411
|
+
pending = pendingEnterTextRef.current.get(correlationID);
|
|
1412
|
+
if (pending) {
|
|
1413
|
+
clearEnterTextPending(correlationID, pending);
|
|
1414
|
+
(_a = pending.waitForResponse) === null || _a === void 0 ? void 0 : _a.reject(new Error((_b = event.errorMessage) !== null && _b !== void 0 ? _b : String((_c = event.errorCode) !== null && _c !== void 0 ? _c : 'NATS error')));
|
|
1415
|
+
}
|
|
1416
|
+
}
|
|
1417
|
+
if (isSessionExpiredNatsError(event) && (pending === null || pending === void 0 ? void 0 : pending.text)) {
|
|
1418
|
+
setMemoriTyping(false);
|
|
1419
|
+
setTypingText(undefined);
|
|
1420
|
+
retryAfterExpiredSessionRef.current({
|
|
1421
|
+
text: pending.text,
|
|
1422
|
+
media: pending.media,
|
|
1423
|
+
translate: pending.translate,
|
|
1424
|
+
translatedText: pending.translatedText,
|
|
1425
|
+
hidden: pending.hidden,
|
|
1426
|
+
typingText: pending.typingText,
|
|
1427
|
+
useLoaderTextAsMsg: pending.useLoaderTextAsMsg,
|
|
1428
|
+
hasBatchQueued: pending.hasBatchQueued,
|
|
1429
|
+
expiredSessionID: sessionId,
|
|
1430
|
+
continueFromChatLogID: chatLogID,
|
|
1431
|
+
});
|
|
1432
|
+
return;
|
|
1433
|
+
}
|
|
1434
|
+
const errorText = event.errorMessage
|
|
1435
|
+
? `Error: ${event.errorMessage}`
|
|
1436
|
+
: event.errorCode
|
|
1437
|
+
? `Error: ${event.errorCode}`
|
|
1438
|
+
: 'Error: An unexpected error occurred';
|
|
1439
|
+
pushMessage({
|
|
1440
|
+
text: errorText,
|
|
1441
|
+
emitter: 'system',
|
|
1442
|
+
fromUser: false,
|
|
1443
|
+
initial: false,
|
|
1444
|
+
contextVars: {},
|
|
1445
|
+
date: new Date().toISOString(),
|
|
1446
|
+
});
|
|
1447
|
+
setMemoriTyping(false);
|
|
1448
|
+
setTypingText(undefined);
|
|
1449
|
+
}, [clearEnterTextPending]);
|
|
1450
|
+
const deliverEnterTextNatsResponse = useCallback((correlationID, event) => {
|
|
1451
|
+
const pending = pendingEnterTextRef.current.get(correlationID);
|
|
1452
|
+
if (!pending) {
|
|
1453
|
+
bufferedNatsResponsesRef.current.set(correlationID, event);
|
|
1454
|
+
return;
|
|
1455
|
+
}
|
|
1456
|
+
clearEnterTextPending(correlationID, pending);
|
|
1457
|
+
if (pending.waitForResponse) {
|
|
1458
|
+
pending.waitForResponse.resolve(event);
|
|
1459
|
+
setMemoriTyping(false);
|
|
1460
|
+
setTypingText(undefined);
|
|
1461
|
+
return;
|
|
1462
|
+
}
|
|
1463
|
+
processEnterTextDialogResponse(event, pending);
|
|
1464
|
+
if (!pending.hasBatchQueued) {
|
|
1465
|
+
setMemoriTyping(false);
|
|
1466
|
+
setTypingText(undefined);
|
|
1467
|
+
}
|
|
1468
|
+
}, [processEnterTextDialogResponse, clearEnterTextPending]);
|
|
1469
|
+
const registerPendingEnterText = useCallback((correlationID, pending) => {
|
|
1470
|
+
const buffered = bufferedNatsResponsesRef.current.get(correlationID);
|
|
1471
|
+
if (buffered) {
|
|
1472
|
+
bufferedNatsResponsesRef.current.delete(correlationID);
|
|
1473
|
+
pendingEnterTextRef.current.set(correlationID, pending);
|
|
1474
|
+
deliverEnterTextNatsResponse(correlationID, buffered);
|
|
1475
|
+
return;
|
|
1476
|
+
}
|
|
1477
|
+
pendingEnterTextRef.current.set(correlationID, pending);
|
|
1478
|
+
}, [deliverEnterTextNatsResponse]);
|
|
1479
|
+
const waitForEnterTextNatsResponse = useCallback((correlationID, timeoutMs = 120000) => new Promise((resolve, reject) => {
|
|
1480
|
+
const timeoutId = setTimeout(() => {
|
|
1481
|
+
const current = pendingEnterTextRef.current.get(correlationID);
|
|
1482
|
+
if (current) {
|
|
1483
|
+
clearEnterTextPending(correlationID, current);
|
|
1484
|
+
}
|
|
1485
|
+
logWidgetError('NATS timeout', { correlationID, timeoutMs });
|
|
1486
|
+
reject(new Error('NATS enter-text response timeout'));
|
|
1487
|
+
}, timeoutMs);
|
|
1488
|
+
registerPendingEnterText(correlationID, {
|
|
1489
|
+
waitForResponse: {
|
|
1490
|
+
resolve: event => {
|
|
1491
|
+
clearTimeout(timeoutId);
|
|
1492
|
+
resolve(event);
|
|
1493
|
+
},
|
|
1494
|
+
reject: error => {
|
|
1495
|
+
clearTimeout(timeoutId);
|
|
1496
|
+
reject(error);
|
|
1497
|
+
},
|
|
1498
|
+
timeoutId,
|
|
1499
|
+
},
|
|
1500
|
+
});
|
|
1501
|
+
}), [registerPendingEnterText, clearEnterTextPending]);
|
|
1502
|
+
useNats({
|
|
1503
|
+
baseUrl,
|
|
1504
|
+
sessionId,
|
|
1505
|
+
onProgress: useCallback((event) => {
|
|
1506
|
+
if (event.message) {
|
|
1507
|
+
setTypingText(event.message);
|
|
1508
|
+
}
|
|
1509
|
+
}, []),
|
|
1510
|
+
onDialogResponse: useCallback((event) => {
|
|
1511
|
+
const correlationID = event.correlationID;
|
|
1512
|
+
if (!correlationID) {
|
|
1513
|
+
logWidgetError('NATS dialog response missing correlationID', event);
|
|
1514
|
+
setMemoriTyping(false);
|
|
1515
|
+
setTypingText(undefined);
|
|
1516
|
+
return;
|
|
1517
|
+
}
|
|
1518
|
+
deliverEnterTextNatsResponse(correlationID, event);
|
|
1519
|
+
}, [deliverEnterTextNatsResponse]),
|
|
1520
|
+
onError: deliverEnterTextNatsError,
|
|
1521
|
+
});
|
|
1249
1522
|
const focusChatInput = () => {
|
|
1250
1523
|
let textarea = document.querySelector('#chat-fieldset textarea');
|
|
1251
1524
|
if (textarea && enableFocusChatInput) {
|
|
@@ -1267,7 +1540,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1267
1540
|
timeoutRef.current = undefined;
|
|
1268
1541
|
ttsStop();
|
|
1269
1542
|
}
|
|
1270
|
-
catch (
|
|
1543
|
+
catch (_a) {
|
|
1271
1544
|
}
|
|
1272
1545
|
};
|
|
1273
1546
|
useEffect(() => {
|
|
@@ -1430,7 +1703,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1430
1703
|
};
|
|
1431
1704
|
}, [sessionId, userLang, disableTextEnteredEvents]);
|
|
1432
1705
|
const onClickStart = useCallback(async (session, initialSessionExpired = false, chatLog, targetSessionID) => {
|
|
1433
|
-
var _a, _b, _c, _d, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t
|
|
1706
|
+
var _a, _b, _c, _d, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
|
|
1434
1707
|
const sessionID = chatLog ? undefined : (session === null || session === void 0 ? void 0 : session.sessionID) || sessionId;
|
|
1435
1708
|
const dialogState = chatLog
|
|
1436
1709
|
? undefined
|
|
@@ -1447,9 +1720,15 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1447
1720
|
setPositionPopoverOpenState(true);
|
|
1448
1721
|
return;
|
|
1449
1722
|
}
|
|
1723
|
+
if (!(await checkCredits({ notify: true }))) {
|
|
1724
|
+
setClickedStart(false);
|
|
1725
|
+
setLoading(false);
|
|
1726
|
+
return;
|
|
1727
|
+
}
|
|
1450
1728
|
if (!sessionID && !!minAge && !birth) {
|
|
1451
1729
|
setShowAgeVerification(true);
|
|
1452
1730
|
setClickedStart(false);
|
|
1731
|
+
return;
|
|
1453
1732
|
}
|
|
1454
1733
|
else if ((!sessionID &&
|
|
1455
1734
|
memori.privacyType !== 'PUBLIC' &&
|
|
@@ -1462,83 +1741,95 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1462
1741
|
return;
|
|
1463
1742
|
}
|
|
1464
1743
|
else if (!sessionID || initialSessionExpired) {
|
|
1465
|
-
setClickedStart(false);
|
|
1466
1744
|
setGotErrorInOpening(false);
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
:
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
}
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
});
|
|
1511
|
-
});
|
|
1512
|
-
translatedMessages = messages !== null && messages !== void 0 ? messages : [];
|
|
1513
|
-
if (language.toUpperCase() !== userLang.toUpperCase() &&
|
|
1514
|
-
isMultilanguageEnabled) {
|
|
1515
|
-
try {
|
|
1516
|
-
translatedMessages = await Promise.all(messages.map(async (m) => {
|
|
1517
|
-
if ('originalText' in m && m.originalText) {
|
|
1518
|
-
return m;
|
|
1519
|
-
}
|
|
1520
|
-
return {
|
|
1745
|
+
if (sessionStartingRef.current) {
|
|
1746
|
+
return;
|
|
1747
|
+
}
|
|
1748
|
+
sessionStartingRef.current = true;
|
|
1749
|
+
try {
|
|
1750
|
+
const session = await fetchSession({
|
|
1751
|
+
memoriID: memori.engineMemoriID,
|
|
1752
|
+
password: secret || memoriPwd || memori.secretToken,
|
|
1753
|
+
tag: personification === null || personification === void 0 ? void 0 : personification.tag,
|
|
1754
|
+
pin: personification === null || personification === void 0 ? void 0 : personification.pin,
|
|
1755
|
+
continueFromChatLogID: chatLog === null || chatLog === void 0 ? void 0 : chatLog.chatLogID,
|
|
1756
|
+
initialContextVars: {
|
|
1757
|
+
LANG: userLang,
|
|
1758
|
+
PATHNAME: (_a = window.location.pathname) === null || _a === void 0 ? void 0 : _a.toUpperCase(),
|
|
1759
|
+
ROUTE: ((_d = (_c = (_b = window.location.pathname) === null || _b === void 0 ? void 0 : _b.split('/')) === null || _c === void 0 ? void 0 : _c.pop()) === null || _d === void 0 ? void 0 : _d.toUpperCase()) ||
|
|
1760
|
+
'',
|
|
1761
|
+
...((!chatLog
|
|
1762
|
+
? initialContextVars
|
|
1763
|
+
: chatLog.lines[chatLog.lines.length - 1].contextVars) || {}),
|
|
1764
|
+
},
|
|
1765
|
+
initialQuestion: chatLog ? undefined : initialQuestion,
|
|
1766
|
+
birthDate: birth,
|
|
1767
|
+
additionalInfo: {
|
|
1768
|
+
...(additionalInfo || {}),
|
|
1769
|
+
loginToken: resolveLoginToken(),
|
|
1770
|
+
language: ((_h = userLang !== null && userLang !== void 0 ? userLang : (_g = (_f = memori.culture) === null || _f === void 0 ? void 0 : _f.split('-')) === null || _g === void 0 ? void 0 : _g[0]) !== null && _h !== void 0 ? _h : 'IT').toLowerCase(),
|
|
1771
|
+
timeZoneOffset: new Date().getTimezoneOffset().toString(),
|
|
1772
|
+
},
|
|
1773
|
+
});
|
|
1774
|
+
if (session === null || session === void 0 ? void 0 : session.dialogState) {
|
|
1775
|
+
if (!chatLog) {
|
|
1776
|
+
setHistory([]);
|
|
1777
|
+
await translateAndSpeak(session.dialogState, userLang);
|
|
1778
|
+
setHasUserActivatedSpeak(true);
|
|
1779
|
+
setClickedStart(false);
|
|
1780
|
+
}
|
|
1781
|
+
else {
|
|
1782
|
+
const messages = chatLog.lines.map((l, i) => {
|
|
1783
|
+
var _a, _b;
|
|
1784
|
+
return ({
|
|
1785
|
+
text: l.text,
|
|
1786
|
+
media: (_b = (_a = l.media) === null || _a === void 0 ? void 0 : _a.filter(m => allowedMediaTypes.includes(m.mimeType))) === null || _b === void 0 ? void 0 : _b.map(m => ({
|
|
1787
|
+
mediumID: `${i}-${m.mimeType}`,
|
|
1521
1788
|
...m,
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1789
|
+
})),
|
|
1790
|
+
fromUser: l.inbound,
|
|
1791
|
+
llmUsage: l.llmUsage,
|
|
1792
|
+
timestamp: l.timestamp,
|
|
1793
|
+
emitter: l.emitter,
|
|
1794
|
+
initial: i === 0,
|
|
1795
|
+
});
|
|
1796
|
+
});
|
|
1797
|
+
translatedMessages = messages !== null && messages !== void 0 ? messages : [];
|
|
1798
|
+
if (language.toUpperCase() !== userLang.toUpperCase() &&
|
|
1799
|
+
isMultilanguageEnabled) {
|
|
1800
|
+
try {
|
|
1801
|
+
translatedMessages = await Promise.all(messages.map(async (m) => {
|
|
1802
|
+
if ('originalText' in m && m.originalText) {
|
|
1803
|
+
return m;
|
|
1804
|
+
}
|
|
1805
|
+
return {
|
|
1806
|
+
...m,
|
|
1807
|
+
originalText: m.text,
|
|
1808
|
+
text: (await getTranslation(m.text, userLang, language, baseUrl)).text,
|
|
1809
|
+
};
|
|
1810
|
+
}));
|
|
1811
|
+
}
|
|
1812
|
+
catch (_u) {
|
|
1813
|
+
}
|
|
1529
1814
|
}
|
|
1815
|
+
setHistory(translatedMessages);
|
|
1816
|
+
translateDialogState(session.dialogState, userLang, undefined, true).finally(() => {
|
|
1817
|
+
setHasUserActivatedSpeak(true);
|
|
1818
|
+
setClickedStart(false);
|
|
1819
|
+
});
|
|
1530
1820
|
}
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1821
|
+
}
|
|
1822
|
+
else if ((session === null || session === void 0 ? void 0 : session.resultCode) === 0) {
|
|
1823
|
+
sessionStartingRef.current = false;
|
|
1824
|
+
await onClickStart(session || undefined);
|
|
1825
|
+
}
|
|
1826
|
+
else {
|
|
1827
|
+
setLoading(false);
|
|
1828
|
+
setClickedStart(false);
|
|
1535
1829
|
}
|
|
1536
1830
|
}
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
}
|
|
1540
|
-
else {
|
|
1541
|
-
setLoading(false);
|
|
1831
|
+
finally {
|
|
1832
|
+
sessionStartingRef.current = false;
|
|
1542
1833
|
}
|
|
1543
1834
|
return;
|
|
1544
1835
|
}
|
|
@@ -1547,9 +1838,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1547
1838
|
const { currentState, ...response } = await getSession(sessionID);
|
|
1548
1839
|
if (response.resultCode !== 0 || !currentState) {
|
|
1549
1840
|
const { chatLogs } = await getSessionChatLogs(sessionID, sessionID);
|
|
1550
|
-
setGotErrorInOpening(true);
|
|
1551
1841
|
setSessionId(undefined);
|
|
1552
|
-
setClickedStart(false);
|
|
1553
1842
|
await onClickStart(undefined, true, chatLogs === null || chatLogs === void 0 ? void 0 : chatLogs[0]);
|
|
1554
1843
|
return;
|
|
1555
1844
|
}
|
|
@@ -1561,21 +1850,22 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1561
1850
|
const session = await changeTag(memori.engineMemoriID, sessionID, personification.tag, personification.pin);
|
|
1562
1851
|
if (session && session.resultCode === 0) {
|
|
1563
1852
|
await translateAndSpeak(session.currentState, userLang);
|
|
1853
|
+
setClickedStart(false);
|
|
1564
1854
|
}
|
|
1565
1855
|
else {
|
|
1566
1856
|
throw new Error('No session');
|
|
1567
1857
|
}
|
|
1568
1858
|
}
|
|
1569
|
-
catch (
|
|
1570
|
-
console.error('[onClickStart] Error changing tag:', e);
|
|
1859
|
+
catch (_v) {
|
|
1571
1860
|
reopenSession(true, memori === null || memori === void 0 ? void 0 : memori.secretToken, undefined, personification.tag, personification.pin, {
|
|
1572
1861
|
LANG: userLang,
|
|
1573
|
-
PATHNAME: (
|
|
1574
|
-
ROUTE: ((
|
|
1862
|
+
PATHNAME: (_j = window.location.pathname) === null || _j === void 0 ? void 0 : _j.toUpperCase(),
|
|
1863
|
+
ROUTE: ((_m = (_l = (_k = window.location.pathname) === null || _k === void 0 ? void 0 : _k.split('/')) === null || _l === void 0 ? void 0 : _l.pop()) === null || _m === void 0 ? void 0 : _m.toUpperCase()) ||
|
|
1575
1864
|
'',
|
|
1576
1865
|
...(initialContextVars || {}),
|
|
1577
1866
|
}, initialQuestion, birth).then(() => {
|
|
1578
1867
|
setHasUserActivatedSpeak(true);
|
|
1868
|
+
setClickedStart(false);
|
|
1579
1869
|
});
|
|
1580
1870
|
}
|
|
1581
1871
|
}
|
|
@@ -1588,6 +1878,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1588
1878
|
const session = await changeTag(memori.engineMemoriID, sessionID, anonTag);
|
|
1589
1879
|
if (session && session.resultCode === 0) {
|
|
1590
1880
|
await translateAndSpeak(session.currentState, userLang);
|
|
1881
|
+
setClickedStart(false);
|
|
1591
1882
|
}
|
|
1592
1883
|
else {
|
|
1593
1884
|
throw new Error('No session');
|
|
@@ -1596,19 +1887,20 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1596
1887
|
catch (e) {
|
|
1597
1888
|
reopenSession(true, memori === null || memori === void 0 ? void 0 : memori.secretToken, undefined, undefined, undefined, {
|
|
1598
1889
|
LANG: userLang,
|
|
1599
|
-
PATHNAME: (
|
|
1600
|
-
ROUTE: ((
|
|
1890
|
+
PATHNAME: (_o = window.location.pathname) === null || _o === void 0 ? void 0 : _o.toUpperCase(),
|
|
1891
|
+
ROUTE: ((_r = (_q = (_p = window.location.pathname) === null || _p === void 0 ? void 0 : _p.split('/')) === null || _q === void 0 ? void 0 : _q.pop()) === null || _r === void 0 ? void 0 : _r.toUpperCase()) ||
|
|
1601
1892
|
'',
|
|
1602
1893
|
...(initialContextVars || {}),
|
|
1603
1894
|
}, initialQuestion, birth).then(() => {
|
|
1604
1895
|
setHasUserActivatedSpeak(true);
|
|
1896
|
+
setClickedStart(false);
|
|
1605
1897
|
});
|
|
1606
1898
|
}
|
|
1607
1899
|
}
|
|
1608
1900
|
else {
|
|
1609
1901
|
try {
|
|
1610
1902
|
const { chatLogs } = await getSessionChatLogs(sessionID, sessionID);
|
|
1611
|
-
const messages = (
|
|
1903
|
+
const messages = (_s = chatLogs === null || chatLogs === void 0 ? void 0 : chatLogs[0]) === null || _s === void 0 ? void 0 : _s.lines.map((l, i) => {
|
|
1612
1904
|
var _a, _b;
|
|
1613
1905
|
return ({
|
|
1614
1906
|
text: l.text,
|
|
@@ -1633,31 +1925,28 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1633
1925
|
text: (await getTranslation(m.text, userLang, language, baseUrl)).text,
|
|
1634
1926
|
})));
|
|
1635
1927
|
}
|
|
1636
|
-
catch (
|
|
1637
|
-
console.error('[onClickStart] Error translating messages:', e);
|
|
1928
|
+
catch (_w) {
|
|
1638
1929
|
}
|
|
1639
1930
|
}
|
|
1640
1931
|
setHistory(translatedMessages);
|
|
1641
1932
|
}
|
|
1642
|
-
catch (
|
|
1643
|
-
console.error('[onClickStart] Error retrieving chat logs:', e);
|
|
1933
|
+
catch (_x) {
|
|
1644
1934
|
}
|
|
1645
1935
|
if ((!!(translatedMessages === null || translatedMessages === void 0 ? void 0 : translatedMessages.length) && translatedMessages.length > 1) ||
|
|
1646
1936
|
!initialQuestion) {
|
|
1647
1937
|
setHasUserActivatedSpeak(true);
|
|
1938
|
+
setClickedStart(false);
|
|
1648
1939
|
await translateAndSpeak(currentState, userLang, undefined, !!(translatedMessages === null || translatedMessages === void 0 ? void 0 : translatedMessages.length));
|
|
1649
1940
|
}
|
|
1650
1941
|
else {
|
|
1651
|
-
console.log('[onClickStart] Starting with initial question');
|
|
1652
1942
|
translatedMessages = [];
|
|
1653
1943
|
setHistory([]);
|
|
1654
|
-
setMemoriTyping(true);
|
|
1655
1944
|
const placeSpec = getPlaceSpecForEnterText(position);
|
|
1656
|
-
const response = await
|
|
1945
|
+
const response = await postEnterTextAsync({
|
|
1657
1946
|
sessionId: sessionID,
|
|
1658
1947
|
text: initialQuestion,
|
|
1659
1948
|
...(memori.needsDateTime && {
|
|
1660
|
-
dateUTC: (
|
|
1949
|
+
dateUTC: (_t = DateTime.utc().toISO()) !== null && _t !== void 0 ? _t : undefined,
|
|
1661
1950
|
}),
|
|
1662
1951
|
...(placeSpec !== undefined && { place: placeSpec }),
|
|
1663
1952
|
});
|
|
@@ -1673,16 +1962,34 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1673
1962
|
date: new Date().toISOString(),
|
|
1674
1963
|
},
|
|
1675
1964
|
]);
|
|
1676
|
-
setMemoriTyping(false);
|
|
1677
1965
|
return;
|
|
1678
1966
|
}
|
|
1679
|
-
|
|
1967
|
+
const onClickStartCorrelationID = readCorrelationID(response);
|
|
1968
|
+
if (response.resultCode === 0 && onClickStartCorrelationID) {
|
|
1969
|
+
setMemoriTyping(true);
|
|
1970
|
+
try {
|
|
1971
|
+
const natsEvent = await waitForEnterTextNatsResponse(onClickStartCorrelationID);
|
|
1972
|
+
if (natsEvent.resultCode === 0 && natsEvent.currentState) {
|
|
1973
|
+
await translateAndSpeak(natsEvent.currentState, userLang, undefined, false);
|
|
1974
|
+
setClickedStart(false);
|
|
1975
|
+
}
|
|
1976
|
+
}
|
|
1977
|
+
catch (err) {
|
|
1978
|
+
logWidgetError('onClickStart NATS wait failed', err);
|
|
1979
|
+
setMemoriTyping(false);
|
|
1980
|
+
setTypingText(undefined);
|
|
1981
|
+
}
|
|
1982
|
+
}
|
|
1983
|
+
else if (response.resultCode === 0) {
|
|
1984
|
+
logWidgetError('onClickStart enter-text missing correlationID', response);
|
|
1985
|
+
}
|
|
1680
1986
|
}
|
|
1681
1987
|
}
|
|
1682
1988
|
}
|
|
1683
1989
|
else {
|
|
1684
1990
|
setHistory([]);
|
|
1685
1991
|
await translateAndSpeak(dialogState, userLang);
|
|
1992
|
+
setClickedStart(false);
|
|
1686
1993
|
}
|
|
1687
1994
|
}, [memoriPwd, memori, memoriTokens, birthDate, sessionId, userLang, position]);
|
|
1688
1995
|
const setPositionPopoverOpen = useCallback((open) => {
|
|
@@ -1692,32 +1999,52 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1692
1999
|
}
|
|
1693
2000
|
}, [autoStart, onClickStart]);
|
|
1694
2001
|
useEffect(() => {
|
|
1695
|
-
if (!clickedStart &&
|
|
2002
|
+
if (!clickedStart &&
|
|
2003
|
+
!sessionStartingRef.current &&
|
|
2004
|
+
!sessionId &&
|
|
2005
|
+
autoStart &&
|
|
2006
|
+
selectedLayout !== 'HIDDEN_CHAT' &&
|
|
2007
|
+
(!needsCredits || hasEnoughCredits)) {
|
|
1696
2008
|
onClickStart();
|
|
1697
2009
|
}
|
|
1698
|
-
}, [
|
|
2010
|
+
}, [
|
|
2011
|
+
clickedStart,
|
|
2012
|
+
autoStart,
|
|
2013
|
+
selectedLayout,
|
|
2014
|
+
sessionId,
|
|
2015
|
+
needsCredits,
|
|
2016
|
+
hasEnoughCredits,
|
|
2017
|
+
]);
|
|
1699
2018
|
useEffect(() => {
|
|
2019
|
+
var _a;
|
|
1700
2020
|
const targetNode = document.querySelector(`memori-client[memoriname="${memori.name}"]`) ||
|
|
1701
2021
|
document.querySelector(`memori-client[memoriid="${memori.memoriID}"]`) ||
|
|
1702
2022
|
document.querySelector('memori-client');
|
|
1703
2023
|
if (!targetNode) {
|
|
1704
2024
|
return;
|
|
1705
2025
|
}
|
|
2026
|
+
const propsToken = (_a = additionalInfo === null || additionalInfo === void 0 ? void 0 : additionalInfo.loginToken) !== null && _a !== void 0 ? _a : authToken;
|
|
2027
|
+
const initialDomToken = targetNode.getAttribute('authtoken') || undefined;
|
|
2028
|
+
if (initialDomToken && !propsToken) {
|
|
2029
|
+
setLoginToken(initialDomToken);
|
|
2030
|
+
userTokenRef.current = initialDomToken;
|
|
2031
|
+
}
|
|
2032
|
+
const applyAuthTokenFromElement = (element) => {
|
|
2033
|
+
var _a;
|
|
2034
|
+
const clientNode = element.nodeName === 'MEMORI-CLIENT'
|
|
2035
|
+
? element
|
|
2036
|
+
: (_a = element.closest('memori-client')) !== null && _a !== void 0 ? _a : element.parentElement;
|
|
2037
|
+
const token = (clientNode === null || clientNode === void 0 ? void 0 : clientNode.getAttribute('authtoken')) || undefined;
|
|
2038
|
+
setLoginToken(token);
|
|
2039
|
+
userTokenRef.current = token;
|
|
2040
|
+
};
|
|
1706
2041
|
const config = { attributes: true, childList: false, subtree: false };
|
|
1707
|
-
const callback =
|
|
1708
|
-
var _a
|
|
2042
|
+
const callback = mutationList => {
|
|
2043
|
+
var _a;
|
|
1709
2044
|
for (const mutation of mutationList) {
|
|
1710
2045
|
if (mutation.type === 'attributes' &&
|
|
1711
2046
|
((_a = mutation.attributeName) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === 'authtoken') {
|
|
1712
|
-
|
|
1713
|
-
setLoginToken(mutation.target.getAttribute('authtoken') || undefined);
|
|
1714
|
-
userToken = mutation.target.getAttribute('authtoken') || undefined;
|
|
1715
|
-
}
|
|
1716
|
-
else {
|
|
1717
|
-
setLoginToken(((_c = (_b = mutation.target) === null || _b === void 0 ? void 0 : _b.parentElement) === null || _c === void 0 ? void 0 : _c.getAttribute('authtoken')) ||
|
|
1718
|
-
undefined);
|
|
1719
|
-
userToken = mutation.target.getAttribute('authtoken') || undefined;
|
|
1720
|
-
}
|
|
2047
|
+
applyAuthTokenFromElement(mutation.target);
|
|
1721
2048
|
}
|
|
1722
2049
|
}
|
|
1723
2050
|
};
|
|
@@ -1726,7 +2053,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1726
2053
|
return () => {
|
|
1727
2054
|
observer.disconnect();
|
|
1728
2055
|
};
|
|
1729
|
-
}, []);
|
|
2056
|
+
}, [memori.name, memori.memoriID, additionalInfo === null || additionalInfo === void 0 ? void 0 : additionalInfo.loginToken, authToken]);
|
|
1730
2057
|
const [experts, setExperts] = useState();
|
|
1731
2058
|
const fetchExperts = useCallback(async () => {
|
|
1732
2059
|
if (!sessionId || !(memori === null || memori === void 0 ? void 0 : memori.enableBoardOfExperts))
|
|
@@ -1736,12 +2063,8 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1736
2063
|
if (resp.resultCode === 0) {
|
|
1737
2064
|
setExperts(experts);
|
|
1738
2065
|
}
|
|
1739
|
-
else {
|
|
1740
|
-
console.warn('Error fetching experts', resp);
|
|
1741
|
-
}
|
|
1742
2066
|
}
|
|
1743
|
-
catch (
|
|
1744
|
-
console.warn(err);
|
|
2067
|
+
catch (_a) {
|
|
1745
2068
|
}
|
|
1746
2069
|
}, [sessionId, memori === null || memori === void 0 ? void 0 : memori.enableBoardOfExperts]);
|
|
1747
2070
|
useEffect(() => {
|
|
@@ -1751,11 +2074,26 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1751
2074
|
!!loginToken &&
|
|
1752
2075
|
!!(user === null || user === void 0 ? void 0 : user.userID) &&
|
|
1753
2076
|
(user === null || user === void 0 ? void 0 : user.pAndCUAccepted);
|
|
1754
|
-
const
|
|
1755
|
-
|
|
1756
|
-
|
|
2077
|
+
const handleNotEnoughCredits = useCallback(() => {
|
|
2078
|
+
setHasEnoughCredits(false);
|
|
2079
|
+
setAuthModalState(null);
|
|
2080
|
+
add(createAlertOptions({
|
|
2081
|
+
description: t('notEnoughCredits'),
|
|
2082
|
+
severity: 'error',
|
|
2083
|
+
}));
|
|
2084
|
+
}, [add, t]);
|
|
2085
|
+
const checkCredits = useCallback(async (options) => {
|
|
1757
2086
|
if (!(tenant === null || tenant === void 0 ? void 0 : tenant.billingDelegation))
|
|
1758
|
-
return;
|
|
2087
|
+
return true;
|
|
2088
|
+
if (!ownerUserID && !ownerUserName) {
|
|
2089
|
+
if (options === null || options === void 0 ? void 0 : options.notify) {
|
|
2090
|
+
handleNotEnoughCredits();
|
|
2091
|
+
}
|
|
2092
|
+
else {
|
|
2093
|
+
setHasEnoughCredits(false);
|
|
2094
|
+
}
|
|
2095
|
+
return false;
|
|
2096
|
+
}
|
|
1759
2097
|
try {
|
|
1760
2098
|
const resp = await getCredits({
|
|
1761
2099
|
operation: deepThoughtEnabled
|
|
@@ -1768,22 +2106,36 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1768
2106
|
});
|
|
1769
2107
|
if (resp.enough) {
|
|
1770
2108
|
setHasEnoughCredits(true);
|
|
2109
|
+
return true;
|
|
1771
2110
|
}
|
|
1772
2111
|
else {
|
|
1773
|
-
|
|
1774
|
-
|
|
2112
|
+
if (options === null || options === void 0 ? void 0 : options.notify) {
|
|
2113
|
+
handleNotEnoughCredits();
|
|
2114
|
+
}
|
|
2115
|
+
else {
|
|
2116
|
+
setHasEnoughCredits(false);
|
|
2117
|
+
}
|
|
2118
|
+
return false;
|
|
1775
2119
|
}
|
|
1776
2120
|
}
|
|
1777
|
-
catch (
|
|
1778
|
-
|
|
1779
|
-
|
|
2121
|
+
catch (err) {
|
|
2122
|
+
logWidgetError('checkCredits failed', err);
|
|
2123
|
+
return true;
|
|
1780
2124
|
}
|
|
1781
|
-
}, [
|
|
2125
|
+
}, [
|
|
2126
|
+
baseUrl,
|
|
2127
|
+
deepThoughtEnabled,
|
|
2128
|
+
handleNotEnoughCredits,
|
|
2129
|
+
ownerUserID,
|
|
2130
|
+
ownerUserName,
|
|
2131
|
+
tenant === null || tenant === void 0 ? void 0 : tenant.billingDelegation,
|
|
2132
|
+
tenantID,
|
|
2133
|
+
]);
|
|
1782
2134
|
useEffect(() => {
|
|
1783
2135
|
if (tenant === null || tenant === void 0 ? void 0 : tenant.billingDelegation) {
|
|
1784
2136
|
checkCredits();
|
|
1785
2137
|
}
|
|
1786
|
-
}, [tenant === null || tenant === void 0 ? void 0 : tenant.billingDelegation, deepThoughtEnabled]);
|
|
2138
|
+
}, [tenant === null || tenant === void 0 ? void 0 : tenant.billingDelegation, deepThoughtEnabled, checkCredits]);
|
|
1787
2139
|
useEffect(() => {
|
|
1788
2140
|
if (__WEBCOMPONENT__)
|
|
1789
2141
|
return;
|
|
@@ -1802,16 +2154,16 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1802
2154
|
? selectedLayout !== 'TOTEM' && selectedLayout !== 'WEBSITE_ASSISTANT'
|
|
1803
2155
|
: !showOnlyLastMessages;
|
|
1804
2156
|
const canShowLoginButton = !(tenant === null || tenant === void 0 ? void 0 : tenant.ssoLogin) &&
|
|
1805
|
-
((
|
|
2157
|
+
((_y = showLogin !== null && showLogin !== void 0 ? showLogin : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.showLogin) !== null && _y !== void 0 ? _y : memori.requireLoginToken);
|
|
1806
2158
|
const headerProps = {
|
|
1807
2159
|
memori: {
|
|
1808
2160
|
...memori,
|
|
1809
|
-
ownerUserID: (
|
|
2161
|
+
ownerUserID: (_0 = (_z = memori.ownerUserID) !== null && _z !== void 0 ? _z : ownerUserID) !== null && _0 !== void 0 ? _0 : undefined,
|
|
1810
2162
|
},
|
|
1811
2163
|
apiClient: client,
|
|
1812
2164
|
tenant,
|
|
1813
2165
|
history,
|
|
1814
|
-
showShare: (
|
|
2166
|
+
showShare: (_1 = showShare !== null && showShare !== void 0 ? showShare : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.showShare) !== null && _1 !== void 0 ? _1 : true,
|
|
1815
2167
|
position,
|
|
1816
2168
|
layout: selectedLayout,
|
|
1817
2169
|
additionalSettings,
|
|
@@ -1821,18 +2173,18 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1821
2173
|
setShowSettingsDrawer,
|
|
1822
2174
|
setShowKnownFactsDrawer,
|
|
1823
2175
|
setShowExpertsDrawer,
|
|
1824
|
-
enableAudio: (
|
|
2176
|
+
enableAudio: (_2 = enableAudio !== null && enableAudio !== void 0 ? enableAudio : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.enableAudio) !== null && _2 !== void 0 ? _2 : true,
|
|
1825
2177
|
speakerMuted: speakerMuted !== null && speakerMuted !== void 0 ? speakerMuted : false,
|
|
1826
2178
|
setSpeakerMuted: (mute) => {
|
|
1827
2179
|
toggleMute(mute);
|
|
1828
2180
|
},
|
|
1829
2181
|
setShowChatHistoryDrawer,
|
|
1830
|
-
showSettings: (
|
|
1831
|
-
showChatHistory: (
|
|
2182
|
+
showSettings: (_3 = showSettings !== null && showSettings !== void 0 ? showSettings : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.showSettings) !== null && _3 !== void 0 ? _3 : true,
|
|
2183
|
+
showChatHistory: (_4 = showChatHistory !== null && showChatHistory !== void 0 ? showChatHistory : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.showChatHistory) !== null && _4 !== void 0 ? _4 : true,
|
|
1832
2184
|
showMessageConsumption: enableMessageConsumption,
|
|
1833
2185
|
hasUserActivatedSpeak,
|
|
1834
2186
|
showReload: selectedLayout === 'TOTEM',
|
|
1835
|
-
showClear: (
|
|
2187
|
+
showClear: (_5 = showClear !== null && showClear !== void 0 ? showClear : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.showClear) !== null && _5 !== void 0 ? _5 : false,
|
|
1836
2188
|
clearHistory: () => setHistory(h => h.slice(-1)),
|
|
1837
2189
|
showLogin: canShowLoginButton,
|
|
1838
2190
|
setShowLoginDrawer,
|
|
@@ -1847,7 +2199,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1847
2199
|
setShowLoginDrawer(false);
|
|
1848
2200
|
setUser(undefined);
|
|
1849
2201
|
setLoginToken(undefined);
|
|
1850
|
-
|
|
2202
|
+
userTokenRef.current = undefined;
|
|
1851
2203
|
removeLocalConfig('loginToken');
|
|
1852
2204
|
});
|
|
1853
2205
|
},
|
|
@@ -1863,7 +2215,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1863
2215
|
hasUserActivatedSpeak,
|
|
1864
2216
|
isPlayingAudio: isPlayingAudio &&
|
|
1865
2217
|
!speakerMuted &&
|
|
1866
|
-
((
|
|
2218
|
+
((_6 = enableAudio !== null && enableAudio !== void 0 ? enableAudio : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.enableAudio) !== null && _6 !== void 0 ? _6 : true),
|
|
1867
2219
|
loading: !!memoriTyping,
|
|
1868
2220
|
baseUrl,
|
|
1869
2221
|
apiUrl: client.constants.BACKEND_URL,
|
|
@@ -1893,7 +2245,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1893
2245
|
notEnoughCredits: needsCredits && !hasEnoughCredits,
|
|
1894
2246
|
showLogin: canShowLoginButton,
|
|
1895
2247
|
setShowLoginDrawer,
|
|
1896
|
-
showChatHistory: (
|
|
2248
|
+
showChatHistory: (_7 = showChatHistory !== null && showChatHistory !== void 0 ? showChatHistory : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.showChatHistory) !== null && _7 !== void 0 ? _7 : true,
|
|
1897
2249
|
setShowChatHistoryDrawer,
|
|
1898
2250
|
user,
|
|
1899
2251
|
};
|
|
@@ -1903,7 +2255,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1903
2255
|
tenant,
|
|
1904
2256
|
translateTo: isMultilanguageEnabled &&
|
|
1905
2257
|
userLang.toUpperCase() !==
|
|
1906
|
-
((
|
|
2258
|
+
((_12 = ((_11 = (_10 = (_9 = (_8 = memori.culture) === null || _8 === void 0 ? void 0 : _8.split('-')) === null || _9 === void 0 ? void 0 : _9[0]) !== null && _10 !== void 0 ? _10 : i18n.language) !== null && _11 !== void 0 ? _11 : 'IT')) === null || _12 === void 0 ? void 0 : _12.toUpperCase())
|
|
1907
2259
|
? userLang
|
|
1908
2260
|
: undefined,
|
|
1909
2261
|
baseUrl,
|
|
@@ -1911,9 +2263,9 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1911
2263
|
layout,
|
|
1912
2264
|
memoriTyping,
|
|
1913
2265
|
typingText,
|
|
1914
|
-
showTypingText: (
|
|
2266
|
+
showTypingText: (_13 = showTypingText !== null && showTypingText !== void 0 ? showTypingText : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.showTypingText) !== null && _13 !== void 0 ? _13 : false,
|
|
1915
2267
|
history: showFullHistory ? history : history.slice(-2),
|
|
1916
|
-
authToken: (
|
|
2268
|
+
authToken: resolveLoginToken(),
|
|
1917
2269
|
dialogState: currentDialogState,
|
|
1918
2270
|
pushMessage,
|
|
1919
2271
|
simulateUserPrompt,
|
|
@@ -2088,7 +2440,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
2088
2440
|
setShowLoginDrawer(false);
|
|
2089
2441
|
setUser(user);
|
|
2090
2442
|
setLoginToken(token);
|
|
2091
|
-
|
|
2443
|
+
userTokenRef.current = token;
|
|
2092
2444
|
setLocalConfig('loginToken', token);
|
|
2093
2445
|
if ((state === null || state === void 0 ? void 0 : state.sessionID) &&
|
|
2094
2446
|
state.sessionID !== sessionId &&
|
|
@@ -2121,7 +2473,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
2121
2473
|
setShowLoginDrawer(false);
|
|
2122
2474
|
setUser(undefined);
|
|
2123
2475
|
setLoginToken(undefined);
|
|
2124
|
-
|
|
2476
|
+
userTokenRef.current = undefined;
|
|
2125
2477
|
removeLocalConfig('loginToken');
|
|
2126
2478
|
});
|
|
2127
2479
|
} }))] }) }));
|