@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
|
@@ -41,6 +41,8 @@ const sanitizer_1 = require("../../helpers/sanitizer");
|
|
|
41
41
|
const useTTS_1 = require("../../helpers/tts/useTTS");
|
|
42
42
|
const ChatHistory_1 = tslib_1.__importDefault(require("../ChatHistoryDrawer/ChatHistory"));
|
|
43
43
|
const useSTT_1 = require("../../helpers/stt/useSTT");
|
|
44
|
+
const useNats_1 = require("../../helpers/nats/useNats");
|
|
45
|
+
const isSessionExpiredError_1 = require("../../helpers/nats/isSessionExpiredError");
|
|
44
46
|
const getMemoriState = (integrationId) => {
|
|
45
47
|
var _a, _b, _c, _d, _f;
|
|
46
48
|
let widget = integrationId
|
|
@@ -62,12 +64,23 @@ const getMemoriState = (integrationId) => {
|
|
|
62
64
|
loginToken,
|
|
63
65
|
};
|
|
64
66
|
};
|
|
67
|
+
const resolveLoginTokenValue = (loginToken, userTokenRef, callAdditionalInfoLoginToken, additionalInfoLoginToken, authTokenProp) => {
|
|
68
|
+
var _a, _b, _c;
|
|
69
|
+
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;
|
|
70
|
+
};
|
|
65
71
|
const NULL_PLACE_SPEC = {
|
|
66
72
|
placeName: null,
|
|
67
73
|
latitude: null,
|
|
68
74
|
longitude: null,
|
|
69
75
|
uncertaintyKm: null,
|
|
70
76
|
};
|
|
77
|
+
const logWidgetError = (context, detail) => {
|
|
78
|
+
console.error(`[MemoriWidget] ${context}`, detail !== null && detail !== void 0 ? detail : '');
|
|
79
|
+
};
|
|
80
|
+
function readCorrelationID(response) {
|
|
81
|
+
const value = response.correlationID;
|
|
82
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
83
|
+
}
|
|
71
84
|
const typeMessage = (message, waitForPrevious = true, hidden = false, typingText, useLoaderTextAsMsg = false, hasBatchQueued = false) => {
|
|
72
85
|
const e = new CustomEvent('MemoriTextEntered', {
|
|
73
86
|
detail: {
|
|
@@ -163,7 +176,6 @@ window.typeMessageHidden = typeMessageHidden;
|
|
|
163
176
|
window.typeBatchMessages = typeBatchMessages;
|
|
164
177
|
let audioContext;
|
|
165
178
|
let memoriPassword;
|
|
166
|
-
let userToken;
|
|
167
179
|
function getChatStyles(config) {
|
|
168
180
|
var _a;
|
|
169
181
|
const primary = config === null || config === void 0 ? void 0 : config.buttonBgColor;
|
|
@@ -197,7 +209,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
197
209
|
setIsClient(true);
|
|
198
210
|
}, []);
|
|
199
211
|
const client = (0, memori_api_client_1.default)(apiURL, engineURL);
|
|
200
|
-
const { initSession, deleteSession, postTextEnteredEvent, postPlaceChangedEvent, postDateChangedEvent, postTagChangedEvent, getSession, getExpertReferences, getSessionChatLogs, } = client;
|
|
212
|
+
const { initSession, deleteSession, postEnterTextAsync, postTextEnteredEvent, postPlaceChangedEvent, postDateChangedEvent, postTagChangedEvent, getSession, getExpertReferences, getSessionChatLogs, } = client;
|
|
201
213
|
const [instruct, setInstruct] = (0, react_1.useState)(false);
|
|
202
214
|
const [enableFocusChatInput, setEnableFocusChatInput] = (0, react_1.useState)(true);
|
|
203
215
|
const [widgetRootEl, setWidgetRootEl] = (0, react_1.useState)(null);
|
|
@@ -220,35 +232,64 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
220
232
|
return () => observer.disconnect();
|
|
221
233
|
}, [widgetRootEl]);
|
|
222
234
|
const [loginToken, setLoginToken] = (0, react_1.useState)((_a = additionalInfo === null || additionalInfo === void 0 ? void 0 : additionalInfo.loginToken) !== null && _a !== void 0 ? _a : authToken);
|
|
235
|
+
const userTokenRef = (0, react_1.useRef)((_b = additionalInfo === null || additionalInfo === void 0 ? void 0 : additionalInfo.loginToken) !== null && _b !== void 0 ? _b : authToken);
|
|
236
|
+
const prevPropsLoginTokenRef = (0, react_1.useRef)((_c = additionalInfo === null || additionalInfo === void 0 ? void 0 : additionalInfo.loginToken) !== null && _c !== void 0 ? _c : authToken);
|
|
223
237
|
const [user, setUser] = (0, react_1.useState)({
|
|
224
238
|
avatarURL: typeof userAvatar === 'string' ? userAvatar : undefined,
|
|
225
239
|
});
|
|
240
|
+
const resolveLoginToken = (0, react_1.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]);
|
|
226
241
|
(0, react_1.useEffect)(() => {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
(0, configuration_1.setLocalConfig)('birthDate', user.birthDate);
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
else {
|
|
242
|
-
(0, configuration_1.removeLocalConfig)('loginToken');
|
|
243
|
-
}
|
|
244
|
-
});
|
|
242
|
+
var _a;
|
|
243
|
+
const incomingToken = (_a = additionalInfo === null || additionalInfo === void 0 ? void 0 : additionalInfo.loginToken) !== null && _a !== void 0 ? _a : authToken;
|
|
244
|
+
const prevPropsToken = prevPropsLoginTokenRef.current;
|
|
245
|
+
prevPropsLoginTokenRef.current = incomingToken;
|
|
246
|
+
if (incomingToken !== prevPropsToken) {
|
|
247
|
+
setLoginToken(incomingToken);
|
|
248
|
+
userTokenRef.current = incomingToken;
|
|
249
|
+
if (!incomingToken) {
|
|
250
|
+
(0, configuration_1.removeLocalConfig)('loginToken');
|
|
251
|
+
setUser(undefined);
|
|
252
|
+
}
|
|
245
253
|
}
|
|
246
|
-
}, [
|
|
254
|
+
}, [additionalInfo === null || additionalInfo === void 0 ? void 0 : additionalInfo.loginToken, authToken]);
|
|
255
|
+
(0, react_1.useEffect)(() => {
|
|
256
|
+
if (!loginToken || !(showLogin || memori.requireLoginToken)) {
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
let cancelled = false;
|
|
260
|
+
client.backend
|
|
261
|
+
.pwlGetCurrentUser(loginToken)
|
|
262
|
+
.then(({ user: fetchedUser, resultCode }) => {
|
|
263
|
+
if (cancelled)
|
|
264
|
+
return;
|
|
265
|
+
if (fetchedUser && resultCode === 0) {
|
|
266
|
+
setUser(fetchedUser);
|
|
267
|
+
(0, configuration_1.setLocalConfig)('loginToken', loginToken);
|
|
268
|
+
userTokenRef.current = loginToken;
|
|
269
|
+
if (!birthDate && fetchedUser.birthDate) {
|
|
270
|
+
setBirthDate(fetchedUser.birthDate);
|
|
271
|
+
(0, configuration_1.setLocalConfig)('birthDate', fetchedUser.birthDate);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
setLoginToken(undefined);
|
|
276
|
+
userTokenRef.current = undefined;
|
|
277
|
+
setUser(undefined);
|
|
278
|
+
(0, configuration_1.removeLocalConfig)('loginToken');
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
return () => {
|
|
282
|
+
cancelled = true;
|
|
283
|
+
};
|
|
284
|
+
}, [loginToken, showLogin, memori.requireLoginToken]);
|
|
247
285
|
const [showLoginDrawer, setShowLoginDrawer] = (0, react_1.useState)(false);
|
|
248
286
|
const [clickedStart, setClickedStart] = (0, react_1.useState)(false);
|
|
249
287
|
const [gotErrorInOpening, setGotErrorInOpening] = (0, react_1.useState)(false);
|
|
250
|
-
const
|
|
251
|
-
|
|
288
|
+
const sessionStartingRef = (0, react_1.useRef)(false);
|
|
289
|
+
const needsCredits = tenant === null || tenant === void 0 ? void 0 : tenant.billingDelegation;
|
|
290
|
+
const [hasEnoughCredits, setHasEnoughCredits] = (0, react_1.useState)(true);
|
|
291
|
+
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()) ||
|
|
292
|
+
((_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());
|
|
252
293
|
const integrationConfig = (integration === null || integration === void 0 ? void 0 : integration.customData)
|
|
253
294
|
? JSON.parse(integration.customData)
|
|
254
295
|
: null;
|
|
@@ -256,7 +297,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
256
297
|
? multilingual
|
|
257
298
|
: !!(integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.multilanguage);
|
|
258
299
|
const forcedTimeout = integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.forcedTimeout;
|
|
259
|
-
const [userLang, setUserLang] = (0, react_1.useState)((
|
|
300
|
+
const [userLang, setUserLang] = (0, react_1.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');
|
|
260
301
|
(0, react_1.useEffect)(() => {
|
|
261
302
|
if (spokenLang != null) {
|
|
262
303
|
setUserLang(spokenLang);
|
|
@@ -282,6 +323,8 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
282
323
|
const [loading, setLoading] = (0, react_1.useState)(false);
|
|
283
324
|
const [memoriTyping, setMemoriTyping] = (0, react_1.useState)(false);
|
|
284
325
|
const [typingText, setTypingText] = (0, react_1.useState)();
|
|
326
|
+
const pendingEnterTextRef = (0, react_1.useRef)(new Map());
|
|
327
|
+
const bufferedNatsResponsesRef = (0, react_1.useRef)(new Map());
|
|
285
328
|
const layoutName = typeof layout === 'string'
|
|
286
329
|
? layout
|
|
287
330
|
: layout &&
|
|
@@ -292,7 +335,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
292
335
|
? layout.name
|
|
293
336
|
: typeof (integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.layout) === 'string'
|
|
294
337
|
? integrationConfig.layout
|
|
295
|
-
: (
|
|
338
|
+
: (_s = integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.layout) === null || _s === void 0 ? void 0 : _s.name;
|
|
296
339
|
const selectedLayout = (() => {
|
|
297
340
|
if (typeof layoutName === 'string') {
|
|
298
341
|
const lower = layoutName.toLowerCase();
|
|
@@ -320,14 +363,14 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
320
363
|
typeof layout === 'object' &&
|
|
321
364
|
layout !== null &&
|
|
322
365
|
'piiDetection' in layout &&
|
|
323
|
-
((
|
|
366
|
+
((_t = layout.piiDetection) === null || _t === void 0 ? void 0 : _t.enabled)
|
|
324
367
|
? layout.piiDetection
|
|
325
368
|
: typeof (integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.layout) === 'object' &&
|
|
326
369
|
(integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.layout) !== null &&
|
|
327
|
-
((
|
|
370
|
+
((_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)
|
|
328
371
|
? integrationConfig.layout.piiDetection
|
|
329
372
|
: undefined;
|
|
330
|
-
const defaultEnableAudio = (
|
|
373
|
+
const defaultEnableAudio = (_w = enableAudio !== null && enableAudio !== void 0 ? enableAudio : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.enableAudio) !== null && _w !== void 0 ? _w : true;
|
|
331
374
|
const [hasUserActivatedListening, setHasUserActivatedListening] = (0, react_1.useState)(false);
|
|
332
375
|
const [hasUserTypedMessage, setHasUserTypedMessage] = (0, react_1.useState)(false);
|
|
333
376
|
const [positionPopoverOpen, setPositionPopoverOpenState] = (0, react_1.useState)(false);
|
|
@@ -370,7 +413,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
370
413
|
setRuntimeShowMessageConsumption((0, configuration_1.getLocalConfig)('showMessageConsumption', (_a = showMessageConsumption !== null && showMessageConsumption !== void 0 ? showMessageConsumption : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.showMessageConsumption) !== null && _a !== void 0 ? _a : false));
|
|
371
414
|
if (!(additionalInfo === null || additionalInfo === void 0 ? void 0 : additionalInfo.loginToken) && !authToken) {
|
|
372
415
|
setLoginToken((0, configuration_1.getLocalConfig)('loginToken', undefined));
|
|
373
|
-
|
|
416
|
+
userTokenRef.current = (0, configuration_1.getLocalConfig)('loginToken', undefined);
|
|
374
417
|
setBirthDate((0, configuration_1.getLocalConfig)('birthDate', undefined));
|
|
375
418
|
}
|
|
376
419
|
if (!((_b = enableAudio !== null && enableAudio !== void 0 ? enableAudio : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.enableAudio) !== null && _b !== void 0 ? _b : true)) {
|
|
@@ -468,8 +511,8 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
468
511
|
});
|
|
469
512
|
};
|
|
470
513
|
const [chatLogID, setChatLogID] = (0, react_1.useState)(undefined);
|
|
471
|
-
const sendMessage = async (text, media, newSessionId, translate = true, translatedText, hidden = false, typingText, useLoaderTextAsMsg = false, hasBatchQueued = false) => {
|
|
472
|
-
var _a, _b
|
|
514
|
+
const sendMessage = async (text, media, newSessionId, translate = true, translatedText, hidden = false, typingText, useLoaderTextAsMsg = false, hasBatchQueued = false, skipHistoryPush = false) => {
|
|
515
|
+
var _a, _b;
|
|
473
516
|
const sessionID = newSessionId ||
|
|
474
517
|
sessionId ||
|
|
475
518
|
((_a = window.getMemoriState()) === null || _a === void 0 ? void 0 : _a.sessionID);
|
|
@@ -513,7 +556,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
513
556
|
return;
|
|
514
557
|
}
|
|
515
558
|
}
|
|
516
|
-
if (!hidden)
|
|
559
|
+
if (!hidden && !skipHistoryPush)
|
|
517
560
|
pushMessage({
|
|
518
561
|
text: text,
|
|
519
562
|
translatedText,
|
|
@@ -523,12 +566,10 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
523
566
|
? !!newSessionId && newSessionId !== sessionId
|
|
524
567
|
: !!newSessionId,
|
|
525
568
|
});
|
|
526
|
-
setMemoriTyping(true);
|
|
527
|
-
setTypingText(typingText);
|
|
528
569
|
let gotError = false;
|
|
529
570
|
try {
|
|
530
571
|
const placeSpec = getPlaceSpecForEnterText(position);
|
|
531
|
-
const
|
|
572
|
+
const response = await postEnterTextAsync({
|
|
532
573
|
sessionId: sessionID,
|
|
533
574
|
text: msg,
|
|
534
575
|
...(memori.needsDateTime && {
|
|
@@ -536,65 +577,37 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
536
577
|
}),
|
|
537
578
|
...(placeSpec !== undefined && { place: placeSpec }),
|
|
538
579
|
});
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
...currentState,
|
|
558
|
-
emission,
|
|
559
|
-
});
|
|
560
|
-
if (emission) {
|
|
561
|
-
pushMessage({
|
|
562
|
-
text: emission,
|
|
563
|
-
emitter: currentState.emitter,
|
|
564
|
-
media: (_d = currentState.emittedMedia) !== null && _d !== void 0 ? _d : currentState.media,
|
|
565
|
-
llmUsage: currentState.llmUsage,
|
|
566
|
-
fromUser: false,
|
|
567
|
-
questionAnswered: msg,
|
|
568
|
-
generatedByAI: !!currentState.completion,
|
|
569
|
-
contextVars: currentState.contextVars,
|
|
570
|
-
date: currentState.currentDate,
|
|
571
|
-
placeName: currentState.currentPlaceName,
|
|
572
|
-
placeLatitude: currentState.currentLatitude,
|
|
573
|
-
placeLongitude: currentState.currentLongitude,
|
|
574
|
-
placeUncertaintyKm: currentState.currentUncertaintyKm,
|
|
575
|
-
tag: currentState.currentTag,
|
|
576
|
-
memoryTags: currentState.memoryTags,
|
|
577
|
-
});
|
|
578
|
-
if (emission && shouldPlayAudio(emission)) {
|
|
579
|
-
handleSpeak(emission);
|
|
580
|
-
}
|
|
581
|
-
}
|
|
582
|
-
}
|
|
580
|
+
const correlationID = readCorrelationID(response);
|
|
581
|
+
if (response.resultCode === 0 && correlationID) {
|
|
582
|
+
registerPendingEnterText(correlationID, {
|
|
583
|
+
msg,
|
|
584
|
+
text,
|
|
585
|
+
media,
|
|
586
|
+
translate,
|
|
587
|
+
translatedText,
|
|
588
|
+
hidden,
|
|
589
|
+
typingText,
|
|
590
|
+
useLoaderTextAsMsg,
|
|
591
|
+
hasBatchQueued,
|
|
592
|
+
});
|
|
593
|
+
setMemoriTyping(true);
|
|
594
|
+
setTypingText(typingText);
|
|
595
|
+
}
|
|
596
|
+
else if (response.resultCode === 0) {
|
|
597
|
+
logWidgetError('enter-text missing correlationID', response);
|
|
583
598
|
}
|
|
584
599
|
else if (response.resultCode === 404) {
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
}, 500);
|
|
597
|
-
}
|
|
600
|
+
retryAfterExpiredSessionRef.current({
|
|
601
|
+
text,
|
|
602
|
+
media,
|
|
603
|
+
translate,
|
|
604
|
+
translatedText,
|
|
605
|
+
hidden,
|
|
606
|
+
typingText,
|
|
607
|
+
useLoaderTextAsMsg,
|
|
608
|
+
hasBatchQueued,
|
|
609
|
+
expiredSessionID: sessionID,
|
|
610
|
+
continueFromChatLogID: chatLogID,
|
|
598
611
|
});
|
|
599
612
|
}
|
|
600
613
|
else if (response.resultCode === 500 && response.resultMessage) {
|
|
@@ -611,18 +624,12 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
611
624
|
]);
|
|
612
625
|
}
|
|
613
626
|
else {
|
|
614
|
-
console.warn('[SEND_MESSAGE]', response);
|
|
615
627
|
return Promise.reject(response);
|
|
616
628
|
}
|
|
617
629
|
}
|
|
618
630
|
catch (error) {
|
|
619
|
-
console.log('error', error);
|
|
620
|
-
console.error(error);
|
|
621
631
|
gotError = true;
|
|
622
|
-
|
|
623
|
-
setMemoriTyping(false);
|
|
624
|
-
}
|
|
625
|
-
if (!hasBatchQueued) {
|
|
632
|
+
logWidgetError('sendMessage failed', error);
|
|
626
633
|
setTypingText(undefined);
|
|
627
634
|
setMemoriTyping(false);
|
|
628
635
|
}
|
|
@@ -704,7 +711,6 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
704
711
|
}
|
|
705
712
|
}
|
|
706
713
|
catch (error) {
|
|
707
|
-
console.error('[TRANSLATE] Error during translation:', error);
|
|
708
714
|
translatedState = { ...state, emission };
|
|
709
715
|
translatedMsg = {
|
|
710
716
|
text: emission,
|
|
@@ -812,7 +818,6 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
812
818
|
try {
|
|
813
819
|
setTimeout(() => {
|
|
814
820
|
var _a;
|
|
815
|
-
console.log('snippet', s);
|
|
816
821
|
new Function((_a = s.content) !== null && _a !== void 0 ? _a : '')();
|
|
817
822
|
setTimeout(() => {
|
|
818
823
|
var _a, _b, _c;
|
|
@@ -821,8 +826,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
821
826
|
}, 400);
|
|
822
827
|
}, 1000);
|
|
823
828
|
}
|
|
824
|
-
catch (
|
|
825
|
-
console.warn(e);
|
|
829
|
+
catch (_a) {
|
|
826
830
|
}
|
|
827
831
|
});
|
|
828
832
|
};
|
|
@@ -833,7 +837,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
833
837
|
}
|
|
834
838
|
}, [initialSessionID]);
|
|
835
839
|
const fetchSession = async (params) => {
|
|
836
|
-
var _a, _b, _c, _d, _f, _g, _h
|
|
840
|
+
var _a, _b, _c, _d, _f, _g, _h;
|
|
837
841
|
let storageBirthDate = (0, configuration_1.getLocalConfig)('birthDate', undefined);
|
|
838
842
|
let userBirthDate = (_a = birthDate !== null && birthDate !== void 0 ? birthDate : params.birthDate) !== null && _a !== void 0 ? _a : storageBirthDate;
|
|
839
843
|
if (!userBirthDate && !!minAge) {
|
|
@@ -847,6 +851,9 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
847
851
|
setAuthModalState('password');
|
|
848
852
|
return;
|
|
849
853
|
}
|
|
854
|
+
if (!(await checkCredits({ notify: true }))) {
|
|
855
|
+
return;
|
|
856
|
+
}
|
|
850
857
|
setLoading(true);
|
|
851
858
|
try {
|
|
852
859
|
let referral;
|
|
@@ -855,8 +862,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
855
862
|
return window.location.href;
|
|
856
863
|
})();
|
|
857
864
|
}
|
|
858
|
-
catch (
|
|
859
|
-
console.debug(err);
|
|
865
|
+
catch (_j) {
|
|
860
866
|
}
|
|
861
867
|
const session = await initSession({
|
|
862
868
|
...params,
|
|
@@ -865,8 +871,8 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
865
871
|
pin: (_c = params.pin) !== null && _c !== void 0 ? _c : personification === null || personification === void 0 ? void 0 : personification.pin,
|
|
866
872
|
additionalInfo: {
|
|
867
873
|
...(params.additionalInfo || additionalInfo || {}),
|
|
868
|
-
loginToken: (
|
|
869
|
-
language: ((
|
|
874
|
+
loginToken: resolveLoginToken((_d = params.additionalInfo) === null || _d === void 0 ? void 0 : _d.loginToken),
|
|
875
|
+
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(),
|
|
870
876
|
referral: referral,
|
|
871
877
|
timeZoneOffset: new Date().getTimezoneOffset().toString(),
|
|
872
878
|
},
|
|
@@ -895,7 +901,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
895
901
|
}));
|
|
896
902
|
setGotErrorInOpening(true);
|
|
897
903
|
}
|
|
898
|
-
else if ((session === null || session === void 0 ? void 0 : session.resultCode) === 403) {
|
|
904
|
+
else if ((session === null || session === void 0 ? void 0 : session.resultCode) === 403 && memori.privacyType !== 'PUBLIC') {
|
|
899
905
|
setMemoriPwd(undefined);
|
|
900
906
|
setAuthModalState('password');
|
|
901
907
|
return session;
|
|
@@ -907,16 +913,15 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
907
913
|
severity: 'error',
|
|
908
914
|
duration: 0,
|
|
909
915
|
}));
|
|
910
|
-
setGotErrorInOpening(true);
|
|
911
916
|
return session;
|
|
912
917
|
}
|
|
913
918
|
}
|
|
914
919
|
catch (err) {
|
|
915
|
-
|
|
920
|
+
logWidgetError('fetchSession failed', err);
|
|
916
921
|
}
|
|
917
922
|
};
|
|
918
|
-
const reopenSession = async (updateDialogState = false, password, recoveryTokens, tag, pin, initialContextVars, initialQuestion, birthDate, additionalInfoProp, continueFromChatLogID, continueFromSessionID, isSessionExpired) => {
|
|
919
|
-
var _a, _b, _c, _d, _f, _g, _h, _j
|
|
923
|
+
const reopenSession = async (updateDialogState = false, password, recoveryTokens, tag, pin, initialContextVars, initialQuestion, birthDate, additionalInfoProp, continueFromChatLogID, continueFromSessionID, isSessionExpired, suppressHistoryUpdate) => {
|
|
924
|
+
var _a, _b, _c, _d, _f, _g, _h, _j;
|
|
920
925
|
setLoading(true);
|
|
921
926
|
let storageBirthDate = (0, configuration_1.getLocalConfig)('birthDate', undefined);
|
|
922
927
|
let userBirthDate = birthDate !== null && birthDate !== void 0 ? birthDate : storageBirthDate;
|
|
@@ -934,14 +939,17 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
934
939
|
setAuthModalState('password');
|
|
935
940
|
return;
|
|
936
941
|
}
|
|
942
|
+
if (!(await checkCredits({ notify: true }))) {
|
|
943
|
+
setLoading(false);
|
|
944
|
+
return null;
|
|
945
|
+
}
|
|
937
946
|
let referral;
|
|
938
947
|
try {
|
|
939
948
|
referral = (() => {
|
|
940
949
|
return window.location.href;
|
|
941
950
|
})();
|
|
942
951
|
}
|
|
943
|
-
catch (
|
|
944
|
-
console.debug('[REOPEN_SESSION] Error getting referral:', err);
|
|
952
|
+
catch (_k) {
|
|
945
953
|
}
|
|
946
954
|
const { sessionID, currentState, ...response } = await initSession({
|
|
947
955
|
memoriID: (_a = memori.engineMemoriID) !== null && _a !== void 0 ? _a : '',
|
|
@@ -961,21 +969,32 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
961
969
|
birthDate: userBirthDate,
|
|
962
970
|
additionalInfo: {
|
|
963
971
|
...(additionalInfoProp || additionalInfo || {}),
|
|
964
|
-
loginToken: (
|
|
965
|
-
language: ((
|
|
972
|
+
loginToken: resolveLoginToken(additionalInfoProp === null || additionalInfoProp === void 0 ? void 0 : additionalInfoProp.loginToken),
|
|
973
|
+
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(),
|
|
966
974
|
referral: referral,
|
|
967
975
|
timeZoneOffset: new Date().getTimezoneOffset().toString(),
|
|
968
976
|
},
|
|
969
977
|
});
|
|
970
978
|
if (sessionID && currentState && response.resultCode === 0) {
|
|
971
|
-
console.log('[REOPEN_SESSION] Session initialized successfully:', sessionID);
|
|
972
979
|
setSessionId(sessionID);
|
|
973
980
|
if (updateDialogState) {
|
|
974
981
|
setCurrentDialogState(currentState);
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
982
|
+
const sessionExpiredStatus = isSessionExpired && history.length > 1
|
|
983
|
+
? t('sessionExpiredReopening')
|
|
984
|
+
: null;
|
|
985
|
+
if (sessionExpiredStatus && suppressHistoryUpdate) {
|
|
986
|
+
pushMessage({
|
|
987
|
+
text: '',
|
|
988
|
+
emitter: 'system',
|
|
989
|
+
fromUser: false,
|
|
990
|
+
initial: sessionExpiredStatus,
|
|
991
|
+
contextVars: {},
|
|
992
|
+
date: new Date().toISOString(),
|
|
993
|
+
});
|
|
994
|
+
}
|
|
995
|
+
if (currentState.emission && !suppressHistoryUpdate) {
|
|
996
|
+
const initialStatus = sessionExpiredStatus
|
|
997
|
+
? sessionExpiredStatus
|
|
979
998
|
: history.length <= 1
|
|
980
999
|
? true
|
|
981
1000
|
: undefined;
|
|
@@ -984,7 +1003,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
984
1003
|
{
|
|
985
1004
|
text: currentState.emission,
|
|
986
1005
|
emitter: currentState.emitter,
|
|
987
|
-
media: (
|
|
1006
|
+
media: (_h = currentState.emittedMedia) !== null && _h !== void 0 ? _h : currentState.media,
|
|
988
1007
|
fromUser: false,
|
|
989
1008
|
initial: (initialStatus === true
|
|
990
1009
|
? true
|
|
@@ -1002,7 +1021,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1002
1021
|
: pushMessage({
|
|
1003
1022
|
text: currentState.emission,
|
|
1004
1023
|
emitter: currentState.emitter,
|
|
1005
|
-
media: (
|
|
1024
|
+
media: (_j = currentState.emittedMedia) !== null && _j !== void 0 ? _j : currentState.media,
|
|
1006
1025
|
fromUser: false,
|
|
1007
1026
|
initial: (initialStatus === true
|
|
1008
1027
|
? true
|
|
@@ -1032,8 +1051,8 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1032
1051
|
}));
|
|
1033
1052
|
setGotErrorInOpening(true);
|
|
1034
1053
|
}
|
|
1035
|
-
else if ((response === null || response === void 0 ? void 0 : response.resultCode) === 403
|
|
1036
|
-
|
|
1054
|
+
else if ((response === null || response === void 0 ? void 0 : response.resultCode) === 403 &&
|
|
1055
|
+
memori.privacyType !== 'PUBLIC') {
|
|
1037
1056
|
setMemoriPwd(undefined);
|
|
1038
1057
|
setAuthModalState('password');
|
|
1039
1058
|
}
|
|
@@ -1047,15 +1066,61 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1047
1066
|
}
|
|
1048
1067
|
}
|
|
1049
1068
|
catch (err) {
|
|
1050
|
-
|
|
1069
|
+
logWidgetError('reopenSession failed', err);
|
|
1051
1070
|
}
|
|
1052
1071
|
setLoading(false);
|
|
1053
1072
|
return null;
|
|
1054
1073
|
};
|
|
1074
|
+
const retryAfterExpiredSessionRef = (0, react_1.useRef)(() => Promise.resolve(null));
|
|
1075
|
+
retryAfterExpiredSessionRef.current = (params) => {
|
|
1076
|
+
const { text, media, translate = true, translatedText, hidden = false, typingText, useLoaderTextAsMsg = false, hasBatchQueued = false, expiredSessionID, continueFromChatLogID: continueFromChatLogIDParam, } = params;
|
|
1077
|
+
const continueFromSessionID = expiredSessionID !== null && expiredSessionID !== void 0 ? expiredSessionID : sessionId;
|
|
1078
|
+
const continueFromChatLogID = continueFromChatLogIDParam !== null && continueFromChatLogIDParam !== void 0 ? continueFromChatLogIDParam : chatLogID;
|
|
1079
|
+
const reopenAfterExpiry = () => {
|
|
1080
|
+
var _a, _b;
|
|
1081
|
+
return reopenSession(true, memoriPwd || memori.secretToken, memoriTokens, undefined, undefined, {
|
|
1082
|
+
LANG: userLang,
|
|
1083
|
+
PATHNAME: window.location.pathname,
|
|
1084
|
+
ROUTE: ((_b = (_a = window.location.pathname) === null || _a === void 0 ? void 0 : _a.split('/')) === null || _b === void 0 ? void 0 : _b.pop()) || '',
|
|
1085
|
+
...(initialContextVars || {}),
|
|
1086
|
+
}, initialQuestion, undefined, undefined, continueFromChatLogID, continueFromSessionID, true, true);
|
|
1087
|
+
};
|
|
1088
|
+
const scheduleRetry = (newSessionID) => {
|
|
1089
|
+
setTimeout(() => {
|
|
1090
|
+
sendMessage(text, media, newSessionID, translate, translatedText, hidden, typingText, useLoaderTextAsMsg, hasBatchQueued, true);
|
|
1091
|
+
}, 500);
|
|
1092
|
+
};
|
|
1093
|
+
const handleReopenFailure = (state) => {
|
|
1094
|
+
setMemoriTyping(false);
|
|
1095
|
+
setTypingText(undefined);
|
|
1096
|
+
if (state === null && text && !hidden) {
|
|
1097
|
+
add((0, ui_1.createAlertOptions)({
|
|
1098
|
+
description: t('errors.SESSION_EXPIRED'),
|
|
1099
|
+
severity: 'error',
|
|
1100
|
+
}));
|
|
1101
|
+
}
|
|
1102
|
+
};
|
|
1103
|
+
if (!text) {
|
|
1104
|
+
return reopenAfterExpiry().then(state => {
|
|
1105
|
+
if (!(state === null || state === void 0 ? void 0 : state.sessionID)) {
|
|
1106
|
+
handleReopenFailure(state);
|
|
1107
|
+
}
|
|
1108
|
+
return state;
|
|
1109
|
+
});
|
|
1110
|
+
}
|
|
1111
|
+
return reopenAfterExpiry().then(state => {
|
|
1112
|
+
if (state === null || state === void 0 ? void 0 : state.sessionID) {
|
|
1113
|
+
scheduleRetry(state.sessionID);
|
|
1114
|
+
}
|
|
1115
|
+
else {
|
|
1116
|
+
handleReopenFailure(state);
|
|
1117
|
+
}
|
|
1118
|
+
return state;
|
|
1119
|
+
});
|
|
1120
|
+
};
|
|
1055
1121
|
const changeTag = async (memoriId, sessionId, tag, pin) => {
|
|
1056
|
-
var _a, _b, _c, _d, _f, _g, _h
|
|
1122
|
+
var _a, _b, _c, _d, _f, _g, _h;
|
|
1057
1123
|
if (!memoriId || !sessionId) {
|
|
1058
|
-
console.error('CHANGETAG/Session not found');
|
|
1059
1124
|
return Promise.reject('Session not found');
|
|
1060
1125
|
}
|
|
1061
1126
|
try {
|
|
@@ -1087,7 +1152,6 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1087
1152
|
}
|
|
1088
1153
|
}
|
|
1089
1154
|
else if ([400, 401, 403, 404, 500].includes(resultCode)) {
|
|
1090
|
-
console.warn('[APPCONTEXT/CHANGETAG]', resultCode);
|
|
1091
1155
|
let storageBirthDate = (0, configuration_1.getLocalConfig)('birthDate', undefined);
|
|
1092
1156
|
let referral;
|
|
1093
1157
|
try {
|
|
@@ -1095,8 +1159,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1095
1159
|
return window.location.href;
|
|
1096
1160
|
})();
|
|
1097
1161
|
}
|
|
1098
|
-
catch (
|
|
1099
|
-
console.debug(err);
|
|
1162
|
+
catch (_j) {
|
|
1100
1163
|
}
|
|
1101
1164
|
fetchSession({
|
|
1102
1165
|
memoriID: (_b = memori.engineMemoriID) !== null && _b !== void 0 ? _b : '',
|
|
@@ -1113,8 +1176,8 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1113
1176
|
birthDate: birthDate || storageBirthDate || undefined,
|
|
1114
1177
|
additionalInfo: {
|
|
1115
1178
|
...(additionalInfo || {}),
|
|
1116
|
-
loginToken: (
|
|
1117
|
-
language: ((
|
|
1179
|
+
loginToken: resolveLoginToken(),
|
|
1180
|
+
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(),
|
|
1118
1181
|
referral: referral,
|
|
1119
1182
|
timeZoneOffset: new Date().getTimezoneOffset().toString(),
|
|
1120
1183
|
},
|
|
@@ -1131,7 +1194,6 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1131
1194
|
}
|
|
1132
1195
|
catch (_e) {
|
|
1133
1196
|
let err = _e;
|
|
1134
|
-
console.warn('[APPCONTEXT/CHANGETAG]', err);
|
|
1135
1197
|
return Promise.reject(err);
|
|
1136
1198
|
}
|
|
1137
1199
|
return null;
|
|
@@ -1152,6 +1214,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1152
1214
|
return () => {
|
|
1153
1215
|
setHasUserActivatedSpeak(false);
|
|
1154
1216
|
setClickedStart(false);
|
|
1217
|
+
sessionStartingRef.current = false;
|
|
1155
1218
|
clearInteractionTimeout();
|
|
1156
1219
|
timeoutRef.current = undefined;
|
|
1157
1220
|
};
|
|
@@ -1178,10 +1241,9 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1178
1241
|
apiUrl: `${baseUrl}/api/tts`,
|
|
1179
1242
|
continuousSpeech: continuousSpeech,
|
|
1180
1243
|
preview: preview,
|
|
1181
|
-
}, autoStart, defaultEnableAudio, (
|
|
1244
|
+
}, autoStart, defaultEnableAudio, (_x = defaultSpeakerActive !== null && defaultSpeakerActive !== void 0 ? defaultSpeakerActive : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.defaultSpeakerActive) !== null && _x !== void 0 ? _x : true);
|
|
1182
1245
|
const shouldPlayAudio = (text) => {
|
|
1183
1246
|
const currentSpeakerMuted = (0, configuration_1.getLocalConfig)('muteSpeaker', !defaultEnableAudio);
|
|
1184
|
-
console.log('[MemoriWidget] shouldPlayAudio', currentSpeakerMuted);
|
|
1185
1247
|
return (text &&
|
|
1186
1248
|
text.trim() &&
|
|
1187
1249
|
!preview &&
|
|
@@ -1194,15 +1256,12 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1194
1256
|
}
|
|
1195
1257
|
try {
|
|
1196
1258
|
const message = (0, utils_1.stripDuplicates)(text);
|
|
1197
|
-
console.debug('Processing speech message:', message);
|
|
1198
1259
|
if (message.length > 0) {
|
|
1199
1260
|
setUserMessage('');
|
|
1200
|
-
console.debug('Sending message:', message);
|
|
1201
1261
|
sendMessage(message);
|
|
1202
1262
|
}
|
|
1203
1263
|
}
|
|
1204
|
-
catch (
|
|
1205
|
-
console.error('Error in processSpeechAndSendMessage:', error);
|
|
1264
|
+
catch (_a) {
|
|
1206
1265
|
}
|
|
1207
1266
|
};
|
|
1208
1267
|
const { isListening, startRecording, stopRecording, } = (0, useSTT_1.useSTT)(sttConfig, processSpeechAndSendMessage, {
|
|
@@ -1236,8 +1295,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1236
1295
|
}
|
|
1237
1296
|
return translatedState;
|
|
1238
1297
|
}
|
|
1239
|
-
catch (
|
|
1240
|
-
console.error('Error in translateAndSpeak:', error);
|
|
1298
|
+
catch (_a) {
|
|
1241
1299
|
if (!hasUserActivatedSpeak) {
|
|
1242
1300
|
setHasUserActivatedSpeak(true);
|
|
1243
1301
|
}
|
|
@@ -1250,6 +1308,221 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1250
1308
|
setHasUserActivatedSpeak,
|
|
1251
1309
|
speakerMuted,
|
|
1252
1310
|
]);
|
|
1311
|
+
const processEnterTextDialogResponse = (0, react_1.useCallback)((event, pending) => {
|
|
1312
|
+
var _a, _b;
|
|
1313
|
+
const { msg, typingText: pendingTypingText, useLoaderTextAsMsg, } = pending;
|
|
1314
|
+
const currentState = event.currentState;
|
|
1315
|
+
if (event.resultCode !== 0 || !currentState) {
|
|
1316
|
+
if ((0, isSessionExpiredError_1.isSessionExpiredNatsResponse)(event) && pending.text) {
|
|
1317
|
+
setMemoriTyping(false);
|
|
1318
|
+
setTypingText(undefined);
|
|
1319
|
+
retryAfterExpiredSessionRef.current({
|
|
1320
|
+
text: pending.text,
|
|
1321
|
+
media: pending.media,
|
|
1322
|
+
translate: pending.translate,
|
|
1323
|
+
translatedText: pending.translatedText,
|
|
1324
|
+
hidden: pending.hidden,
|
|
1325
|
+
typingText: pending.typingText,
|
|
1326
|
+
useLoaderTextAsMsg: pending.useLoaderTextAsMsg,
|
|
1327
|
+
hasBatchQueued: pending.hasBatchQueued,
|
|
1328
|
+
expiredSessionID: sessionId,
|
|
1329
|
+
continueFromChatLogID: chatLogID,
|
|
1330
|
+
});
|
|
1331
|
+
return;
|
|
1332
|
+
}
|
|
1333
|
+
if (event.resultCode === 500 && event.resultMessage) {
|
|
1334
|
+
setHistory(h => [
|
|
1335
|
+
...h,
|
|
1336
|
+
{
|
|
1337
|
+
text: 'Error: ' + event.resultMessage,
|
|
1338
|
+
emitter: 'system',
|
|
1339
|
+
fromUser: false,
|
|
1340
|
+
initial: false,
|
|
1341
|
+
contextVars: {},
|
|
1342
|
+
date: new Date().toISOString(),
|
|
1343
|
+
},
|
|
1344
|
+
]);
|
|
1345
|
+
}
|
|
1346
|
+
return;
|
|
1347
|
+
}
|
|
1348
|
+
if (!msg) {
|
|
1349
|
+
return;
|
|
1350
|
+
}
|
|
1351
|
+
setChatLogID(undefined);
|
|
1352
|
+
const emission = useLoaderTextAsMsg && pendingTypingText
|
|
1353
|
+
? pendingTypingText
|
|
1354
|
+
: (_a = currentState.emission) !== null && _a !== void 0 ? _a : currentDialogState === null || currentDialogState === void 0 ? void 0 : currentDialogState.emission;
|
|
1355
|
+
if (userLang.toLowerCase() !== language.toLowerCase() &&
|
|
1356
|
+
emission &&
|
|
1357
|
+
isMultilanguageEnabled) {
|
|
1358
|
+
currentState.emission = emission;
|
|
1359
|
+
translateDialogState(currentState, userLang, msg).then(ts => {
|
|
1360
|
+
const text = ts.translatedEmission || ts.emission;
|
|
1361
|
+
if (text && shouldPlayAudio(text)) {
|
|
1362
|
+
handleSpeak(text);
|
|
1363
|
+
}
|
|
1364
|
+
});
|
|
1365
|
+
}
|
|
1366
|
+
else {
|
|
1367
|
+
setCurrentDialogState({
|
|
1368
|
+
...currentState,
|
|
1369
|
+
emission,
|
|
1370
|
+
});
|
|
1371
|
+
if (emission) {
|
|
1372
|
+
pushMessage({
|
|
1373
|
+
text: emission,
|
|
1374
|
+
emitter: currentState.emitter,
|
|
1375
|
+
media: (_b = currentState.emittedMedia) !== null && _b !== void 0 ? _b : currentState.media,
|
|
1376
|
+
llmUsage: currentState.llmUsage,
|
|
1377
|
+
fromUser: false,
|
|
1378
|
+
questionAnswered: msg,
|
|
1379
|
+
generatedByAI: !!currentState.completion,
|
|
1380
|
+
contextVars: currentState.contextVars,
|
|
1381
|
+
date: currentState.currentDate,
|
|
1382
|
+
placeName: currentState.currentPlaceName,
|
|
1383
|
+
placeLatitude: currentState.currentLatitude,
|
|
1384
|
+
placeLongitude: currentState.currentLongitude,
|
|
1385
|
+
placeUncertaintyKm: currentState.currentUncertaintyKm,
|
|
1386
|
+
tag: currentState.currentTag,
|
|
1387
|
+
memoryTags: currentState.memoryTags,
|
|
1388
|
+
});
|
|
1389
|
+
if (emission && shouldPlayAudio(emission)) {
|
|
1390
|
+
handleSpeak(emission);
|
|
1391
|
+
}
|
|
1392
|
+
}
|
|
1393
|
+
}
|
|
1394
|
+
}, [
|
|
1395
|
+
userLang,
|
|
1396
|
+
language,
|
|
1397
|
+
isMultilanguageEnabled,
|
|
1398
|
+
currentDialogState === null || currentDialogState === void 0 ? void 0 : currentDialogState.emission,
|
|
1399
|
+
translateDialogState,
|
|
1400
|
+
handleSpeak,
|
|
1401
|
+
shouldPlayAudio,
|
|
1402
|
+
]);
|
|
1403
|
+
const clearEnterTextPending = (0, react_1.useCallback)((correlationID, pending) => {
|
|
1404
|
+
var _a;
|
|
1405
|
+
if ((_a = pending.waitForResponse) === null || _a === void 0 ? void 0 : _a.timeoutId) {
|
|
1406
|
+
clearTimeout(pending.waitForResponse.timeoutId);
|
|
1407
|
+
}
|
|
1408
|
+
pendingEnterTextRef.current.delete(correlationID);
|
|
1409
|
+
}, []);
|
|
1410
|
+
const deliverEnterTextNatsError = (0, react_1.useCallback)((event) => {
|
|
1411
|
+
var _a, _b, _c;
|
|
1412
|
+
const correlationID = event.correlationID;
|
|
1413
|
+
let pending;
|
|
1414
|
+
if (correlationID) {
|
|
1415
|
+
pending = pendingEnterTextRef.current.get(correlationID);
|
|
1416
|
+
if (pending) {
|
|
1417
|
+
clearEnterTextPending(correlationID, pending);
|
|
1418
|
+
(_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')));
|
|
1419
|
+
}
|
|
1420
|
+
}
|
|
1421
|
+
if ((0, isSessionExpiredError_1.isSessionExpiredNatsError)(event) && (pending === null || pending === void 0 ? void 0 : pending.text)) {
|
|
1422
|
+
setMemoriTyping(false);
|
|
1423
|
+
setTypingText(undefined);
|
|
1424
|
+
retryAfterExpiredSessionRef.current({
|
|
1425
|
+
text: pending.text,
|
|
1426
|
+
media: pending.media,
|
|
1427
|
+
translate: pending.translate,
|
|
1428
|
+
translatedText: pending.translatedText,
|
|
1429
|
+
hidden: pending.hidden,
|
|
1430
|
+
typingText: pending.typingText,
|
|
1431
|
+
useLoaderTextAsMsg: pending.useLoaderTextAsMsg,
|
|
1432
|
+
hasBatchQueued: pending.hasBatchQueued,
|
|
1433
|
+
expiredSessionID: sessionId,
|
|
1434
|
+
continueFromChatLogID: chatLogID,
|
|
1435
|
+
});
|
|
1436
|
+
return;
|
|
1437
|
+
}
|
|
1438
|
+
const errorText = event.errorMessage
|
|
1439
|
+
? `Error: ${event.errorMessage}`
|
|
1440
|
+
: event.errorCode
|
|
1441
|
+
? `Error: ${event.errorCode}`
|
|
1442
|
+
: 'Error: An unexpected error occurred';
|
|
1443
|
+
pushMessage({
|
|
1444
|
+
text: errorText,
|
|
1445
|
+
emitter: 'system',
|
|
1446
|
+
fromUser: false,
|
|
1447
|
+
initial: false,
|
|
1448
|
+
contextVars: {},
|
|
1449
|
+
date: new Date().toISOString(),
|
|
1450
|
+
});
|
|
1451
|
+
setMemoriTyping(false);
|
|
1452
|
+
setTypingText(undefined);
|
|
1453
|
+
}, [clearEnterTextPending]);
|
|
1454
|
+
const deliverEnterTextNatsResponse = (0, react_1.useCallback)((correlationID, event) => {
|
|
1455
|
+
const pending = pendingEnterTextRef.current.get(correlationID);
|
|
1456
|
+
if (!pending) {
|
|
1457
|
+
bufferedNatsResponsesRef.current.set(correlationID, event);
|
|
1458
|
+
return;
|
|
1459
|
+
}
|
|
1460
|
+
clearEnterTextPending(correlationID, pending);
|
|
1461
|
+
if (pending.waitForResponse) {
|
|
1462
|
+
pending.waitForResponse.resolve(event);
|
|
1463
|
+
setMemoriTyping(false);
|
|
1464
|
+
setTypingText(undefined);
|
|
1465
|
+
return;
|
|
1466
|
+
}
|
|
1467
|
+
processEnterTextDialogResponse(event, pending);
|
|
1468
|
+
if (!pending.hasBatchQueued) {
|
|
1469
|
+
setMemoriTyping(false);
|
|
1470
|
+
setTypingText(undefined);
|
|
1471
|
+
}
|
|
1472
|
+
}, [processEnterTextDialogResponse, clearEnterTextPending]);
|
|
1473
|
+
const registerPendingEnterText = (0, react_1.useCallback)((correlationID, pending) => {
|
|
1474
|
+
const buffered = bufferedNatsResponsesRef.current.get(correlationID);
|
|
1475
|
+
if (buffered) {
|
|
1476
|
+
bufferedNatsResponsesRef.current.delete(correlationID);
|
|
1477
|
+
pendingEnterTextRef.current.set(correlationID, pending);
|
|
1478
|
+
deliverEnterTextNatsResponse(correlationID, buffered);
|
|
1479
|
+
return;
|
|
1480
|
+
}
|
|
1481
|
+
pendingEnterTextRef.current.set(correlationID, pending);
|
|
1482
|
+
}, [deliverEnterTextNatsResponse]);
|
|
1483
|
+
const waitForEnterTextNatsResponse = (0, react_1.useCallback)((correlationID, timeoutMs = 120000) => new Promise((resolve, reject) => {
|
|
1484
|
+
const timeoutId = setTimeout(() => {
|
|
1485
|
+
const current = pendingEnterTextRef.current.get(correlationID);
|
|
1486
|
+
if (current) {
|
|
1487
|
+
clearEnterTextPending(correlationID, current);
|
|
1488
|
+
}
|
|
1489
|
+
logWidgetError('NATS timeout', { correlationID, timeoutMs });
|
|
1490
|
+
reject(new Error('NATS enter-text response timeout'));
|
|
1491
|
+
}, timeoutMs);
|
|
1492
|
+
registerPendingEnterText(correlationID, {
|
|
1493
|
+
waitForResponse: {
|
|
1494
|
+
resolve: event => {
|
|
1495
|
+
clearTimeout(timeoutId);
|
|
1496
|
+
resolve(event);
|
|
1497
|
+
},
|
|
1498
|
+
reject: error => {
|
|
1499
|
+
clearTimeout(timeoutId);
|
|
1500
|
+
reject(error);
|
|
1501
|
+
},
|
|
1502
|
+
timeoutId,
|
|
1503
|
+
},
|
|
1504
|
+
});
|
|
1505
|
+
}), [registerPendingEnterText, clearEnterTextPending]);
|
|
1506
|
+
(0, useNats_1.useNats)({
|
|
1507
|
+
baseUrl,
|
|
1508
|
+
sessionId,
|
|
1509
|
+
onProgress: (0, react_1.useCallback)((event) => {
|
|
1510
|
+
if (event.message) {
|
|
1511
|
+
setTypingText(event.message);
|
|
1512
|
+
}
|
|
1513
|
+
}, []),
|
|
1514
|
+
onDialogResponse: (0, react_1.useCallback)((event) => {
|
|
1515
|
+
const correlationID = event.correlationID;
|
|
1516
|
+
if (!correlationID) {
|
|
1517
|
+
logWidgetError('NATS dialog response missing correlationID', event);
|
|
1518
|
+
setMemoriTyping(false);
|
|
1519
|
+
setTypingText(undefined);
|
|
1520
|
+
return;
|
|
1521
|
+
}
|
|
1522
|
+
deliverEnterTextNatsResponse(correlationID, event);
|
|
1523
|
+
}, [deliverEnterTextNatsResponse]),
|
|
1524
|
+
onError: deliverEnterTextNatsError,
|
|
1525
|
+
});
|
|
1253
1526
|
const focusChatInput = () => {
|
|
1254
1527
|
let textarea = document.querySelector('#chat-fieldset textarea');
|
|
1255
1528
|
if (textarea && enableFocusChatInput) {
|
|
@@ -1271,7 +1544,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1271
1544
|
timeoutRef.current = undefined;
|
|
1272
1545
|
ttsStop();
|
|
1273
1546
|
}
|
|
1274
|
-
catch (
|
|
1547
|
+
catch (_a) {
|
|
1275
1548
|
}
|
|
1276
1549
|
};
|
|
1277
1550
|
(0, react_1.useEffect)(() => {
|
|
@@ -1434,7 +1707,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1434
1707
|
};
|
|
1435
1708
|
}, [sessionId, userLang, disableTextEnteredEvents]);
|
|
1436
1709
|
const onClickStart = (0, react_1.useCallback)(async (session, initialSessionExpired = false, chatLog, targetSessionID) => {
|
|
1437
|
-
var _a, _b, _c, _d, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t
|
|
1710
|
+
var _a, _b, _c, _d, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
|
|
1438
1711
|
const sessionID = chatLog ? undefined : (session === null || session === void 0 ? void 0 : session.sessionID) || sessionId;
|
|
1439
1712
|
const dialogState = chatLog
|
|
1440
1713
|
? undefined
|
|
@@ -1451,9 +1724,15 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1451
1724
|
setPositionPopoverOpenState(true);
|
|
1452
1725
|
return;
|
|
1453
1726
|
}
|
|
1727
|
+
if (!(await checkCredits({ notify: true }))) {
|
|
1728
|
+
setClickedStart(false);
|
|
1729
|
+
setLoading(false);
|
|
1730
|
+
return;
|
|
1731
|
+
}
|
|
1454
1732
|
if (!sessionID && !!minAge && !birth) {
|
|
1455
1733
|
setShowAgeVerification(true);
|
|
1456
1734
|
setClickedStart(false);
|
|
1735
|
+
return;
|
|
1457
1736
|
}
|
|
1458
1737
|
else if ((!sessionID &&
|
|
1459
1738
|
memori.privacyType !== 'PUBLIC' &&
|
|
@@ -1466,83 +1745,95 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1466
1745
|
return;
|
|
1467
1746
|
}
|
|
1468
1747
|
else if (!sessionID || initialSessionExpired) {
|
|
1469
|
-
setClickedStart(false);
|
|
1470
1748
|
setGotErrorInOpening(false);
|
|
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
|
-
|
|
1513
|
-
|
|
1514
|
-
});
|
|
1515
|
-
});
|
|
1516
|
-
translatedMessages = messages !== null && messages !== void 0 ? messages : [];
|
|
1517
|
-
if (language.toUpperCase() !== userLang.toUpperCase() &&
|
|
1518
|
-
isMultilanguageEnabled) {
|
|
1519
|
-
try {
|
|
1520
|
-
translatedMessages = await Promise.all(messages.map(async (m) => {
|
|
1521
|
-
if ('originalText' in m && m.originalText) {
|
|
1522
|
-
return m;
|
|
1523
|
-
}
|
|
1524
|
-
return {
|
|
1749
|
+
if (sessionStartingRef.current) {
|
|
1750
|
+
return;
|
|
1751
|
+
}
|
|
1752
|
+
sessionStartingRef.current = true;
|
|
1753
|
+
try {
|
|
1754
|
+
const session = await fetchSession({
|
|
1755
|
+
memoriID: memori.engineMemoriID,
|
|
1756
|
+
password: secret || memoriPwd || memori.secretToken,
|
|
1757
|
+
tag: personification === null || personification === void 0 ? void 0 : personification.tag,
|
|
1758
|
+
pin: personification === null || personification === void 0 ? void 0 : personification.pin,
|
|
1759
|
+
continueFromChatLogID: chatLog === null || chatLog === void 0 ? void 0 : chatLog.chatLogID,
|
|
1760
|
+
initialContextVars: {
|
|
1761
|
+
LANG: userLang,
|
|
1762
|
+
PATHNAME: (_a = window.location.pathname) === null || _a === void 0 ? void 0 : _a.toUpperCase(),
|
|
1763
|
+
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()) ||
|
|
1764
|
+
'',
|
|
1765
|
+
...((!chatLog
|
|
1766
|
+
? initialContextVars
|
|
1767
|
+
: chatLog.lines[chatLog.lines.length - 1].contextVars) || {}),
|
|
1768
|
+
},
|
|
1769
|
+
initialQuestion: chatLog ? undefined : initialQuestion,
|
|
1770
|
+
birthDate: birth,
|
|
1771
|
+
additionalInfo: {
|
|
1772
|
+
...(additionalInfo || {}),
|
|
1773
|
+
loginToken: resolveLoginToken(),
|
|
1774
|
+
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(),
|
|
1775
|
+
timeZoneOffset: new Date().getTimezoneOffset().toString(),
|
|
1776
|
+
},
|
|
1777
|
+
});
|
|
1778
|
+
if (session === null || session === void 0 ? void 0 : session.dialogState) {
|
|
1779
|
+
if (!chatLog) {
|
|
1780
|
+
setHistory([]);
|
|
1781
|
+
await translateAndSpeak(session.dialogState, userLang);
|
|
1782
|
+
setHasUserActivatedSpeak(true);
|
|
1783
|
+
setClickedStart(false);
|
|
1784
|
+
}
|
|
1785
|
+
else {
|
|
1786
|
+
const messages = chatLog.lines.map((l, i) => {
|
|
1787
|
+
var _a, _b;
|
|
1788
|
+
return ({
|
|
1789
|
+
text: l.text,
|
|
1790
|
+
media: (_b = (_a = l.media) === null || _a === void 0 ? void 0 : _a.filter(m => constants_1.allowedMediaTypes.includes(m.mimeType))) === null || _b === void 0 ? void 0 : _b.map(m => ({
|
|
1791
|
+
mediumID: `${i}-${m.mimeType}`,
|
|
1525
1792
|
...m,
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1793
|
+
})),
|
|
1794
|
+
fromUser: l.inbound,
|
|
1795
|
+
llmUsage: l.llmUsage,
|
|
1796
|
+
timestamp: l.timestamp,
|
|
1797
|
+
emitter: l.emitter,
|
|
1798
|
+
initial: i === 0,
|
|
1799
|
+
});
|
|
1800
|
+
});
|
|
1801
|
+
translatedMessages = messages !== null && messages !== void 0 ? messages : [];
|
|
1802
|
+
if (language.toUpperCase() !== userLang.toUpperCase() &&
|
|
1803
|
+
isMultilanguageEnabled) {
|
|
1804
|
+
try {
|
|
1805
|
+
translatedMessages = await Promise.all(messages.map(async (m) => {
|
|
1806
|
+
if ('originalText' in m && m.originalText) {
|
|
1807
|
+
return m;
|
|
1808
|
+
}
|
|
1809
|
+
return {
|
|
1810
|
+
...m,
|
|
1811
|
+
originalText: m.text,
|
|
1812
|
+
text: (await (0, translations_1.getTranslation)(m.text, userLang, language, baseUrl)).text,
|
|
1813
|
+
};
|
|
1814
|
+
}));
|
|
1815
|
+
}
|
|
1816
|
+
catch (_u) {
|
|
1817
|
+
}
|
|
1533
1818
|
}
|
|
1819
|
+
setHistory(translatedMessages);
|
|
1820
|
+
translateDialogState(session.dialogState, userLang, undefined, true).finally(() => {
|
|
1821
|
+
setHasUserActivatedSpeak(true);
|
|
1822
|
+
setClickedStart(false);
|
|
1823
|
+
});
|
|
1534
1824
|
}
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1825
|
+
}
|
|
1826
|
+
else if ((session === null || session === void 0 ? void 0 : session.resultCode) === 0) {
|
|
1827
|
+
sessionStartingRef.current = false;
|
|
1828
|
+
await onClickStart(session || undefined);
|
|
1829
|
+
}
|
|
1830
|
+
else {
|
|
1831
|
+
setLoading(false);
|
|
1832
|
+
setClickedStart(false);
|
|
1539
1833
|
}
|
|
1540
1834
|
}
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
}
|
|
1544
|
-
else {
|
|
1545
|
-
setLoading(false);
|
|
1835
|
+
finally {
|
|
1836
|
+
sessionStartingRef.current = false;
|
|
1546
1837
|
}
|
|
1547
1838
|
return;
|
|
1548
1839
|
}
|
|
@@ -1551,9 +1842,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1551
1842
|
const { currentState, ...response } = await getSession(sessionID);
|
|
1552
1843
|
if (response.resultCode !== 0 || !currentState) {
|
|
1553
1844
|
const { chatLogs } = await getSessionChatLogs(sessionID, sessionID);
|
|
1554
|
-
setGotErrorInOpening(true);
|
|
1555
1845
|
setSessionId(undefined);
|
|
1556
|
-
setClickedStart(false);
|
|
1557
1846
|
await onClickStart(undefined, true, chatLogs === null || chatLogs === void 0 ? void 0 : chatLogs[0]);
|
|
1558
1847
|
return;
|
|
1559
1848
|
}
|
|
@@ -1565,21 +1854,22 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1565
1854
|
const session = await changeTag(memori.engineMemoriID, sessionID, personification.tag, personification.pin);
|
|
1566
1855
|
if (session && session.resultCode === 0) {
|
|
1567
1856
|
await translateAndSpeak(session.currentState, userLang);
|
|
1857
|
+
setClickedStart(false);
|
|
1568
1858
|
}
|
|
1569
1859
|
else {
|
|
1570
1860
|
throw new Error('No session');
|
|
1571
1861
|
}
|
|
1572
1862
|
}
|
|
1573
|
-
catch (
|
|
1574
|
-
console.error('[onClickStart] Error changing tag:', e);
|
|
1863
|
+
catch (_v) {
|
|
1575
1864
|
reopenSession(true, memori === null || memori === void 0 ? void 0 : memori.secretToken, undefined, personification.tag, personification.pin, {
|
|
1576
1865
|
LANG: userLang,
|
|
1577
|
-
PATHNAME: (
|
|
1578
|
-
ROUTE: ((
|
|
1866
|
+
PATHNAME: (_j = window.location.pathname) === null || _j === void 0 ? void 0 : _j.toUpperCase(),
|
|
1867
|
+
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()) ||
|
|
1579
1868
|
'',
|
|
1580
1869
|
...(initialContextVars || {}),
|
|
1581
1870
|
}, initialQuestion, birth).then(() => {
|
|
1582
1871
|
setHasUserActivatedSpeak(true);
|
|
1872
|
+
setClickedStart(false);
|
|
1583
1873
|
});
|
|
1584
1874
|
}
|
|
1585
1875
|
}
|
|
@@ -1592,6 +1882,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1592
1882
|
const session = await changeTag(memori.engineMemoriID, sessionID, constants_1.anonTag);
|
|
1593
1883
|
if (session && session.resultCode === 0) {
|
|
1594
1884
|
await translateAndSpeak(session.currentState, userLang);
|
|
1885
|
+
setClickedStart(false);
|
|
1595
1886
|
}
|
|
1596
1887
|
else {
|
|
1597
1888
|
throw new Error('No session');
|
|
@@ -1600,19 +1891,20 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1600
1891
|
catch (e) {
|
|
1601
1892
|
reopenSession(true, memori === null || memori === void 0 ? void 0 : memori.secretToken, undefined, undefined, undefined, {
|
|
1602
1893
|
LANG: userLang,
|
|
1603
|
-
PATHNAME: (
|
|
1604
|
-
ROUTE: ((
|
|
1894
|
+
PATHNAME: (_o = window.location.pathname) === null || _o === void 0 ? void 0 : _o.toUpperCase(),
|
|
1895
|
+
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()) ||
|
|
1605
1896
|
'',
|
|
1606
1897
|
...(initialContextVars || {}),
|
|
1607
1898
|
}, initialQuestion, birth).then(() => {
|
|
1608
1899
|
setHasUserActivatedSpeak(true);
|
|
1900
|
+
setClickedStart(false);
|
|
1609
1901
|
});
|
|
1610
1902
|
}
|
|
1611
1903
|
}
|
|
1612
1904
|
else {
|
|
1613
1905
|
try {
|
|
1614
1906
|
const { chatLogs } = await getSessionChatLogs(sessionID, sessionID);
|
|
1615
|
-
const messages = (
|
|
1907
|
+
const messages = (_s = chatLogs === null || chatLogs === void 0 ? void 0 : chatLogs[0]) === null || _s === void 0 ? void 0 : _s.lines.map((l, i) => {
|
|
1616
1908
|
var _a, _b;
|
|
1617
1909
|
return ({
|
|
1618
1910
|
text: l.text,
|
|
@@ -1637,31 +1929,28 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1637
1929
|
text: (await (0, translations_1.getTranslation)(m.text, userLang, language, baseUrl)).text,
|
|
1638
1930
|
})));
|
|
1639
1931
|
}
|
|
1640
|
-
catch (
|
|
1641
|
-
console.error('[onClickStart] Error translating messages:', e);
|
|
1932
|
+
catch (_w) {
|
|
1642
1933
|
}
|
|
1643
1934
|
}
|
|
1644
1935
|
setHistory(translatedMessages);
|
|
1645
1936
|
}
|
|
1646
|
-
catch (
|
|
1647
|
-
console.error('[onClickStart] Error retrieving chat logs:', e);
|
|
1937
|
+
catch (_x) {
|
|
1648
1938
|
}
|
|
1649
1939
|
if ((!!(translatedMessages === null || translatedMessages === void 0 ? void 0 : translatedMessages.length) && translatedMessages.length > 1) ||
|
|
1650
1940
|
!initialQuestion) {
|
|
1651
1941
|
setHasUserActivatedSpeak(true);
|
|
1942
|
+
setClickedStart(false);
|
|
1652
1943
|
await translateAndSpeak(currentState, userLang, undefined, !!(translatedMessages === null || translatedMessages === void 0 ? void 0 : translatedMessages.length));
|
|
1653
1944
|
}
|
|
1654
1945
|
else {
|
|
1655
|
-
console.log('[onClickStart] Starting with initial question');
|
|
1656
1946
|
translatedMessages = [];
|
|
1657
1947
|
setHistory([]);
|
|
1658
|
-
setMemoriTyping(true);
|
|
1659
1948
|
const placeSpec = getPlaceSpecForEnterText(position);
|
|
1660
|
-
const response = await
|
|
1949
|
+
const response = await postEnterTextAsync({
|
|
1661
1950
|
sessionId: sessionID,
|
|
1662
1951
|
text: initialQuestion,
|
|
1663
1952
|
...(memori.needsDateTime && {
|
|
1664
|
-
dateUTC: (
|
|
1953
|
+
dateUTC: (_t = luxon_1.DateTime.utc().toISO()) !== null && _t !== void 0 ? _t : undefined,
|
|
1665
1954
|
}),
|
|
1666
1955
|
...(placeSpec !== undefined && { place: placeSpec }),
|
|
1667
1956
|
});
|
|
@@ -1677,16 +1966,34 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1677
1966
|
date: new Date().toISOString(),
|
|
1678
1967
|
},
|
|
1679
1968
|
]);
|
|
1680
|
-
setMemoriTyping(false);
|
|
1681
1969
|
return;
|
|
1682
1970
|
}
|
|
1683
|
-
|
|
1971
|
+
const onClickStartCorrelationID = readCorrelationID(response);
|
|
1972
|
+
if (response.resultCode === 0 && onClickStartCorrelationID) {
|
|
1973
|
+
setMemoriTyping(true);
|
|
1974
|
+
try {
|
|
1975
|
+
const natsEvent = await waitForEnterTextNatsResponse(onClickStartCorrelationID);
|
|
1976
|
+
if (natsEvent.resultCode === 0 && natsEvent.currentState) {
|
|
1977
|
+
await translateAndSpeak(natsEvent.currentState, userLang, undefined, false);
|
|
1978
|
+
setClickedStart(false);
|
|
1979
|
+
}
|
|
1980
|
+
}
|
|
1981
|
+
catch (err) {
|
|
1982
|
+
logWidgetError('onClickStart NATS wait failed', err);
|
|
1983
|
+
setMemoriTyping(false);
|
|
1984
|
+
setTypingText(undefined);
|
|
1985
|
+
}
|
|
1986
|
+
}
|
|
1987
|
+
else if (response.resultCode === 0) {
|
|
1988
|
+
logWidgetError('onClickStart enter-text missing correlationID', response);
|
|
1989
|
+
}
|
|
1684
1990
|
}
|
|
1685
1991
|
}
|
|
1686
1992
|
}
|
|
1687
1993
|
else {
|
|
1688
1994
|
setHistory([]);
|
|
1689
1995
|
await translateAndSpeak(dialogState, userLang);
|
|
1996
|
+
setClickedStart(false);
|
|
1690
1997
|
}
|
|
1691
1998
|
}, [memoriPwd, memori, memoriTokens, birthDate, sessionId, userLang, position]);
|
|
1692
1999
|
const setPositionPopoverOpen = (0, react_1.useCallback)((open) => {
|
|
@@ -1696,32 +2003,52 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1696
2003
|
}
|
|
1697
2004
|
}, [autoStart, onClickStart]);
|
|
1698
2005
|
(0, react_1.useEffect)(() => {
|
|
1699
|
-
if (!clickedStart &&
|
|
2006
|
+
if (!clickedStart &&
|
|
2007
|
+
!sessionStartingRef.current &&
|
|
2008
|
+
!sessionId &&
|
|
2009
|
+
autoStart &&
|
|
2010
|
+
selectedLayout !== 'HIDDEN_CHAT' &&
|
|
2011
|
+
(!needsCredits || hasEnoughCredits)) {
|
|
1700
2012
|
onClickStart();
|
|
1701
2013
|
}
|
|
1702
|
-
}, [
|
|
2014
|
+
}, [
|
|
2015
|
+
clickedStart,
|
|
2016
|
+
autoStart,
|
|
2017
|
+
selectedLayout,
|
|
2018
|
+
sessionId,
|
|
2019
|
+
needsCredits,
|
|
2020
|
+
hasEnoughCredits,
|
|
2021
|
+
]);
|
|
1703
2022
|
(0, react_1.useEffect)(() => {
|
|
2023
|
+
var _a;
|
|
1704
2024
|
const targetNode = document.querySelector(`memori-client[memoriname="${memori.name}"]`) ||
|
|
1705
2025
|
document.querySelector(`memori-client[memoriid="${memori.memoriID}"]`) ||
|
|
1706
2026
|
document.querySelector('memori-client');
|
|
1707
2027
|
if (!targetNode) {
|
|
1708
2028
|
return;
|
|
1709
2029
|
}
|
|
2030
|
+
const propsToken = (_a = additionalInfo === null || additionalInfo === void 0 ? void 0 : additionalInfo.loginToken) !== null && _a !== void 0 ? _a : authToken;
|
|
2031
|
+
const initialDomToken = targetNode.getAttribute('authtoken') || undefined;
|
|
2032
|
+
if (initialDomToken && !propsToken) {
|
|
2033
|
+
setLoginToken(initialDomToken);
|
|
2034
|
+
userTokenRef.current = initialDomToken;
|
|
2035
|
+
}
|
|
2036
|
+
const applyAuthTokenFromElement = (element) => {
|
|
2037
|
+
var _a;
|
|
2038
|
+
const clientNode = element.nodeName === 'MEMORI-CLIENT'
|
|
2039
|
+
? element
|
|
2040
|
+
: (_a = element.closest('memori-client')) !== null && _a !== void 0 ? _a : element.parentElement;
|
|
2041
|
+
const token = (clientNode === null || clientNode === void 0 ? void 0 : clientNode.getAttribute('authtoken')) || undefined;
|
|
2042
|
+
setLoginToken(token);
|
|
2043
|
+
userTokenRef.current = token;
|
|
2044
|
+
};
|
|
1710
2045
|
const config = { attributes: true, childList: false, subtree: false };
|
|
1711
|
-
const callback =
|
|
1712
|
-
var _a
|
|
2046
|
+
const callback = mutationList => {
|
|
2047
|
+
var _a;
|
|
1713
2048
|
for (const mutation of mutationList) {
|
|
1714
2049
|
if (mutation.type === 'attributes' &&
|
|
1715
2050
|
((_a = mutation.attributeName) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === 'authtoken') {
|
|
1716
|
-
|
|
1717
|
-
setLoginToken(mutation.target.getAttribute('authtoken') || undefined);
|
|
1718
|
-
userToken = mutation.target.getAttribute('authtoken') || undefined;
|
|
1719
|
-
}
|
|
1720
|
-
else {
|
|
1721
|
-
setLoginToken(((_c = (_b = mutation.target) === null || _b === void 0 ? void 0 : _b.parentElement) === null || _c === void 0 ? void 0 : _c.getAttribute('authtoken')) ||
|
|
1722
|
-
undefined);
|
|
1723
|
-
userToken = mutation.target.getAttribute('authtoken') || undefined;
|
|
1724
|
-
}
|
|
2051
|
+
applyAuthTokenFromElement(mutation.target);
|
|
1725
2052
|
}
|
|
1726
2053
|
}
|
|
1727
2054
|
};
|
|
@@ -1730,7 +2057,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1730
2057
|
return () => {
|
|
1731
2058
|
observer.disconnect();
|
|
1732
2059
|
};
|
|
1733
|
-
}, []);
|
|
2060
|
+
}, [memori.name, memori.memoriID, additionalInfo === null || additionalInfo === void 0 ? void 0 : additionalInfo.loginToken, authToken]);
|
|
1734
2061
|
const [experts, setExperts] = (0, react_1.useState)();
|
|
1735
2062
|
const fetchExperts = (0, react_1.useCallback)(async () => {
|
|
1736
2063
|
if (!sessionId || !(memori === null || memori === void 0 ? void 0 : memori.enableBoardOfExperts))
|
|
@@ -1740,12 +2067,8 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1740
2067
|
if (resp.resultCode === 0) {
|
|
1741
2068
|
setExperts(experts);
|
|
1742
2069
|
}
|
|
1743
|
-
else {
|
|
1744
|
-
console.warn('Error fetching experts', resp);
|
|
1745
|
-
}
|
|
1746
2070
|
}
|
|
1747
|
-
catch (
|
|
1748
|
-
console.warn(err);
|
|
2071
|
+
catch (_a) {
|
|
1749
2072
|
}
|
|
1750
2073
|
}, [sessionId, memori === null || memori === void 0 ? void 0 : memori.enableBoardOfExperts]);
|
|
1751
2074
|
(0, react_1.useEffect)(() => {
|
|
@@ -1755,11 +2078,26 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1755
2078
|
!!loginToken &&
|
|
1756
2079
|
!!(user === null || user === void 0 ? void 0 : user.userID) &&
|
|
1757
2080
|
(user === null || user === void 0 ? void 0 : user.pAndCUAccepted);
|
|
1758
|
-
const
|
|
1759
|
-
|
|
1760
|
-
|
|
2081
|
+
const handleNotEnoughCredits = (0, react_1.useCallback)(() => {
|
|
2082
|
+
setHasEnoughCredits(false);
|
|
2083
|
+
setAuthModalState(null);
|
|
2084
|
+
add((0, ui_1.createAlertOptions)({
|
|
2085
|
+
description: t('notEnoughCredits'),
|
|
2086
|
+
severity: 'error',
|
|
2087
|
+
}));
|
|
2088
|
+
}, [add, t]);
|
|
2089
|
+
const checkCredits = (0, react_1.useCallback)(async (options) => {
|
|
1761
2090
|
if (!(tenant === null || tenant === void 0 ? void 0 : tenant.billingDelegation))
|
|
1762
|
-
return;
|
|
2091
|
+
return true;
|
|
2092
|
+
if (!ownerUserID && !ownerUserName) {
|
|
2093
|
+
if (options === null || options === void 0 ? void 0 : options.notify) {
|
|
2094
|
+
handleNotEnoughCredits();
|
|
2095
|
+
}
|
|
2096
|
+
else {
|
|
2097
|
+
setHasEnoughCredits(false);
|
|
2098
|
+
}
|
|
2099
|
+
return false;
|
|
2100
|
+
}
|
|
1763
2101
|
try {
|
|
1764
2102
|
const resp = await (0, credits_1.getCredits)({
|
|
1765
2103
|
operation: deepThoughtEnabled
|
|
@@ -1772,22 +2110,36 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1772
2110
|
});
|
|
1773
2111
|
if (resp.enough) {
|
|
1774
2112
|
setHasEnoughCredits(true);
|
|
2113
|
+
return true;
|
|
1775
2114
|
}
|
|
1776
2115
|
else {
|
|
1777
|
-
|
|
1778
|
-
|
|
2116
|
+
if (options === null || options === void 0 ? void 0 : options.notify) {
|
|
2117
|
+
handleNotEnoughCredits();
|
|
2118
|
+
}
|
|
2119
|
+
else {
|
|
2120
|
+
setHasEnoughCredits(false);
|
|
2121
|
+
}
|
|
2122
|
+
return false;
|
|
1779
2123
|
}
|
|
1780
2124
|
}
|
|
1781
|
-
catch (
|
|
1782
|
-
|
|
1783
|
-
|
|
2125
|
+
catch (err) {
|
|
2126
|
+
logWidgetError('checkCredits failed', err);
|
|
2127
|
+
return true;
|
|
1784
2128
|
}
|
|
1785
|
-
}, [
|
|
2129
|
+
}, [
|
|
2130
|
+
baseUrl,
|
|
2131
|
+
deepThoughtEnabled,
|
|
2132
|
+
handleNotEnoughCredits,
|
|
2133
|
+
ownerUserID,
|
|
2134
|
+
ownerUserName,
|
|
2135
|
+
tenant === null || tenant === void 0 ? void 0 : tenant.billingDelegation,
|
|
2136
|
+
tenantID,
|
|
2137
|
+
]);
|
|
1786
2138
|
(0, react_1.useEffect)(() => {
|
|
1787
2139
|
if (tenant === null || tenant === void 0 ? void 0 : tenant.billingDelegation) {
|
|
1788
2140
|
checkCredits();
|
|
1789
2141
|
}
|
|
1790
|
-
}, [tenant === null || tenant === void 0 ? void 0 : tenant.billingDelegation, deepThoughtEnabled]);
|
|
2142
|
+
}, [tenant === null || tenant === void 0 ? void 0 : tenant.billingDelegation, deepThoughtEnabled, checkCredits]);
|
|
1791
2143
|
(0, react_1.useEffect)(() => {
|
|
1792
2144
|
if (__WEBCOMPONENT__)
|
|
1793
2145
|
return;
|
|
@@ -1806,16 +2158,16 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1806
2158
|
? selectedLayout !== 'TOTEM' && selectedLayout !== 'WEBSITE_ASSISTANT'
|
|
1807
2159
|
: !showOnlyLastMessages;
|
|
1808
2160
|
const canShowLoginButton = !(tenant === null || tenant === void 0 ? void 0 : tenant.ssoLogin) &&
|
|
1809
|
-
((
|
|
2161
|
+
((_y = showLogin !== null && showLogin !== void 0 ? showLogin : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.showLogin) !== null && _y !== void 0 ? _y : memori.requireLoginToken);
|
|
1810
2162
|
const headerProps = {
|
|
1811
2163
|
memori: {
|
|
1812
2164
|
...memori,
|
|
1813
|
-
ownerUserID: (
|
|
2165
|
+
ownerUserID: (_0 = (_z = memori.ownerUserID) !== null && _z !== void 0 ? _z : ownerUserID) !== null && _0 !== void 0 ? _0 : undefined,
|
|
1814
2166
|
},
|
|
1815
2167
|
apiClient: client,
|
|
1816
2168
|
tenant,
|
|
1817
2169
|
history,
|
|
1818
|
-
showShare: (
|
|
2170
|
+
showShare: (_1 = showShare !== null && showShare !== void 0 ? showShare : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.showShare) !== null && _1 !== void 0 ? _1 : true,
|
|
1819
2171
|
position,
|
|
1820
2172
|
layout: selectedLayout,
|
|
1821
2173
|
additionalSettings,
|
|
@@ -1825,18 +2177,18 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1825
2177
|
setShowSettingsDrawer,
|
|
1826
2178
|
setShowKnownFactsDrawer,
|
|
1827
2179
|
setShowExpertsDrawer,
|
|
1828
|
-
enableAudio: (
|
|
2180
|
+
enableAudio: (_2 = enableAudio !== null && enableAudio !== void 0 ? enableAudio : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.enableAudio) !== null && _2 !== void 0 ? _2 : true,
|
|
1829
2181
|
speakerMuted: speakerMuted !== null && speakerMuted !== void 0 ? speakerMuted : false,
|
|
1830
2182
|
setSpeakerMuted: (mute) => {
|
|
1831
2183
|
toggleMute(mute);
|
|
1832
2184
|
},
|
|
1833
2185
|
setShowChatHistoryDrawer,
|
|
1834
|
-
showSettings: (
|
|
1835
|
-
showChatHistory: (
|
|
2186
|
+
showSettings: (_3 = showSettings !== null && showSettings !== void 0 ? showSettings : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.showSettings) !== null && _3 !== void 0 ? _3 : true,
|
|
2187
|
+
showChatHistory: (_4 = showChatHistory !== null && showChatHistory !== void 0 ? showChatHistory : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.showChatHistory) !== null && _4 !== void 0 ? _4 : true,
|
|
1836
2188
|
showMessageConsumption: enableMessageConsumption,
|
|
1837
2189
|
hasUserActivatedSpeak,
|
|
1838
2190
|
showReload: selectedLayout === 'TOTEM',
|
|
1839
|
-
showClear: (
|
|
2191
|
+
showClear: (_5 = showClear !== null && showClear !== void 0 ? showClear : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.showClear) !== null && _5 !== void 0 ? _5 : false,
|
|
1840
2192
|
clearHistory: () => setHistory(h => h.slice(-1)),
|
|
1841
2193
|
showLogin: canShowLoginButton,
|
|
1842
2194
|
setShowLoginDrawer,
|
|
@@ -1851,7 +2203,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1851
2203
|
setShowLoginDrawer(false);
|
|
1852
2204
|
setUser(undefined);
|
|
1853
2205
|
setLoginToken(undefined);
|
|
1854
|
-
|
|
2206
|
+
userTokenRef.current = undefined;
|
|
1855
2207
|
(0, configuration_1.removeLocalConfig)('loginToken');
|
|
1856
2208
|
});
|
|
1857
2209
|
},
|
|
@@ -1867,7 +2219,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1867
2219
|
hasUserActivatedSpeak,
|
|
1868
2220
|
isPlayingAudio: isPlayingAudio &&
|
|
1869
2221
|
!speakerMuted &&
|
|
1870
|
-
((
|
|
2222
|
+
((_6 = enableAudio !== null && enableAudio !== void 0 ? enableAudio : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.enableAudio) !== null && _6 !== void 0 ? _6 : true),
|
|
1871
2223
|
loading: !!memoriTyping,
|
|
1872
2224
|
baseUrl,
|
|
1873
2225
|
apiUrl: client.constants.BACKEND_URL,
|
|
@@ -1897,7 +2249,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1897
2249
|
notEnoughCredits: needsCredits && !hasEnoughCredits,
|
|
1898
2250
|
showLogin: canShowLoginButton,
|
|
1899
2251
|
setShowLoginDrawer,
|
|
1900
|
-
showChatHistory: (
|
|
2252
|
+
showChatHistory: (_7 = showChatHistory !== null && showChatHistory !== void 0 ? showChatHistory : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.showChatHistory) !== null && _7 !== void 0 ? _7 : true,
|
|
1901
2253
|
setShowChatHistoryDrawer,
|
|
1902
2254
|
user,
|
|
1903
2255
|
};
|
|
@@ -1907,7 +2259,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1907
2259
|
tenant,
|
|
1908
2260
|
translateTo: isMultilanguageEnabled &&
|
|
1909
2261
|
userLang.toUpperCase() !==
|
|
1910
|
-
((
|
|
2262
|
+
((_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())
|
|
1911
2263
|
? userLang
|
|
1912
2264
|
: undefined,
|
|
1913
2265
|
baseUrl,
|
|
@@ -1915,9 +2267,9 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1915
2267
|
layout,
|
|
1916
2268
|
memoriTyping,
|
|
1917
2269
|
typingText,
|
|
1918
|
-
showTypingText: (
|
|
2270
|
+
showTypingText: (_13 = showTypingText !== null && showTypingText !== void 0 ? showTypingText : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.showTypingText) !== null && _13 !== void 0 ? _13 : false,
|
|
1919
2271
|
history: showFullHistory ? history : history.slice(-2),
|
|
1920
|
-
authToken: (
|
|
2272
|
+
authToken: resolveLoginToken(),
|
|
1921
2273
|
dialogState: currentDialogState,
|
|
1922
2274
|
pushMessage,
|
|
1923
2275
|
simulateUserPrompt,
|
|
@@ -2092,7 +2444,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
2092
2444
|
setShowLoginDrawer(false);
|
|
2093
2445
|
setUser(user);
|
|
2094
2446
|
setLoginToken(token);
|
|
2095
|
-
|
|
2447
|
+
userTokenRef.current = token;
|
|
2096
2448
|
(0, configuration_1.setLocalConfig)('loginToken', token);
|
|
2097
2449
|
if ((state === null || state === void 0 ? void 0 : state.sessionID) &&
|
|
2098
2450
|
state.sessionID !== sessionId &&
|
|
@@ -2125,7 +2477,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
2125
2477
|
setShowLoginDrawer(false);
|
|
2126
2478
|
setUser(undefined);
|
|
2127
2479
|
setLoginToken(undefined);
|
|
2128
|
-
|
|
2480
|
+
userTokenRef.current = undefined;
|
|
2129
2481
|
(0, configuration_1.removeLocalConfig)('loginToken');
|
|
2130
2482
|
});
|
|
2131
2483
|
} }))] }) }));
|