@hgt-weprotalk/mira-client 0.1.39 → 0.1.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/chat-widget/ChatWidget.d.ts +1 -1
- package/dist/components/chat-widget/ChatWidget.d.ts.map +1 -1
- package/dist/components/chat-widget/hooks/index.d.ts +2 -0
- package/dist/components/chat-widget/hooks/index.d.ts.map +1 -1
- package/dist/components/chat-widget/hooks/useChatWidgetPanelControlsRegistration.d.ts +12 -0
- package/dist/components/chat-widget/hooks/useChatWidgetPanelControlsRegistration.d.ts.map +1 -0
- package/dist/components/chat-widget/hooks/useZendeskWebWidgetLauncher.d.ts +10 -0
- package/dist/components/chat-widget/hooks/useZendeskWebWidgetLauncher.d.ts.map +1 -0
- package/dist/components/chat-widget/shell/ChatWidgetBody.d.ts.map +1 -1
- package/dist/components/chat-widget/types/chat-widget.d.ts +10 -0
- package/dist/components/chat-widget/types/chat-widget.d.ts.map +1 -1
- package/dist/config/runtime.d.ts +2 -0
- package/dist/config/runtime.d.ts.map +1 -1
- package/dist/config/zendeskIntegrationBySite.d.ts +2 -0
- package/dist/config/zendeskIntegrationBySite.d.ts.map +1 -1
- package/dist/embed/mira-chat-bootstrap.js +64 -22
- package/dist/embed/mira-chat-host.js +2 -2
- package/dist/embed/mira-chat-widget.css +1 -1
- package/dist/embed/mira-chat-widget.js +44 -32
- package/dist/embed/miraChatHostFacade.d.ts +12 -0
- package/dist/embed/miraChatHostFacade.d.ts.map +1 -0
- package/dist/embed/scriptEmbedBridge.d.ts +4 -0
- package/dist/embed/scriptEmbedBridge.d.ts.map +1 -1
- package/dist/index.cjs +40 -28
- package/dist/index.js +2747 -2516
- package/dist/mira-client.css +1 -1
- package/dist/services/zendesk/handoffConversationMetadata.d.ts +3 -1
- package/dist/services/zendesk/handoffConversationMetadata.d.ts.map +1 -1
- package/dist/services/zendesk/webWidgetFallback.d.ts +13 -0
- package/dist/services/zendesk/webWidgetFallback.d.ts.map +1 -0
- package/dist/services/zendesk/zendeskWebWidgetLauncherHide.css.d.ts +5 -0
- package/dist/services/zendesk/zendeskWebWidgetLauncherHide.css.d.ts.map +1 -0
- package/dist/services/zendesk/zendeskWebWidgetMiraPosition.d.ts +5 -0
- package/dist/services/zendesk/zendeskWebWidgetMiraPosition.d.ts.map +1 -0
- package/dist/services/zendesk/zendeskWebWidgetPosition.types.d.ts +17 -0
- package/dist/services/zendesk/zendeskWebWidgetPosition.types.d.ts.map +1 -0
- package/dist/store/chatWidgetState.d.ts +2 -0
- package/dist/store/chatWidgetState.d.ts.map +1 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/slices/chatSlice.d.ts.map +1 -1
- package/dist/types/miraChatHost.d.ts +21 -0
- package/dist/types/miraChatHost.d.ts.map +1 -0
- package/dist/use-cases-bootstrap.js +64 -22
- package/dist/utils/launcherAvatar.d.ts +3 -3
- package/dist/utils/launcherAvatar.d.ts.map +1 -1
- package/dist/utils/launcherAvatar.types.d.ts +9 -0
- package/dist/utils/launcherAvatar.types.d.ts.map +1 -0
- package/dist/utils/launcherAvatarByName.d.ts +7 -0
- package/dist/utils/launcherAvatarByName.d.ts.map +1 -0
- package/package.json +83 -83
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ChatWidgetProps } from "./types";
|
|
2
2
|
import "./chat-widget.css";
|
|
3
3
|
/** 右下角客服挂件:config/byName → Zendesk SDK → 会话 bootstrap */
|
|
4
|
-
declare const ChatWidget: ({ scriptEmbed, locale, agentName, site, launcherAvatar, apiBaseUrl, launcherUnreadEnabled, integrationId, onInitError, }: ChatWidgetProps) => import("react").JSX.Element;
|
|
4
|
+
declare const ChatWidget: ({ scriptEmbed, locale, agentName, site, launcherAvatar, apiBaseUrl, launcherUnreadEnabled, integrationId, zendeskSnippetKey, onInitError, panelControlsRef, }: ChatWidgetProps) => import("react").JSX.Element;
|
|
5
5
|
export default ChatWidget;
|
|
6
6
|
//# sourceMappingURL=ChatWidget.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatWidget.d.ts","sourceRoot":"","sources":["../../../src/components/chat-widget/ChatWidget.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChatWidget.d.ts","sourceRoot":"","sources":["../../../src/components/chat-widget/ChatWidget.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG/C,OAAO,mBAAmB,CAAC;AAE3B,yDAAyD;AACzD,QAAA,MAAM,UAAU,GAAI,+JAYjB,eAAe,gCAuIjB,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export { useChatWidgetPanelControlsRegistration } from "./useChatWidgetPanelControlsRegistration";
|
|
2
|
+
export { useIsZendeskWebWidgetFallback, useZendeskWebWidgetLauncher, } from "./useZendeskWebWidgetLauncher";
|
|
1
3
|
export { useChatWidgetPanelState } from "./useChatWidgetPanelState";
|
|
2
4
|
export { useChatPanelViewportClamp } from "./useChatPanelViewportClamp";
|
|
3
5
|
export { useGuideBubbleHide } from "./useGuideBubbleHide";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/chat-widget/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EACL,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/chat-widget/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sCAAsC,EAAE,MAAM,0CAA0C,CAAC;AAClG,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,GAC5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EACL,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type RefObject } from "react";
|
|
2
|
+
import type { ChatWidgetPanelControls } from "../types/chat-widget";
|
|
3
|
+
interface UseChatWidgetPanelControlsRegistrationOptions {
|
|
4
|
+
scriptEmbed: boolean;
|
|
5
|
+
panelControlsRef?: RefObject<ChatWidgetPanelControls | null>;
|
|
6
|
+
setPanelOpen: (open: boolean) => void;
|
|
7
|
+
setOpenSilently: (open: boolean) => void;
|
|
8
|
+
}
|
|
9
|
+
/** 面板开合注册到 Script embed bridge 与 `window.MiraChatHost` facade */
|
|
10
|
+
export declare function useChatWidgetPanelControlsRegistration({ scriptEmbed, panelControlsRef, setPanelOpen, setOpenSilently, }: UseChatWidgetPanelControlsRegistrationOptions): void;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=useChatWidgetPanelControlsRegistration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useChatWidgetPanelControlsRegistration.d.ts","sourceRoot":"","sources":["../../../../src/components/chat-widget/hooks/useChatWidgetPanelControlsRegistration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAclD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAEpE,UAAU,6CAA6C;IACrD,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,SAAS,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC;IAC7D,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,eAAe,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1C;AAED,iEAAiE;AACjE,wBAAgB,sCAAsC,CAAC,EACrD,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,eAAe,GAChB,EAAE,6CAA6C,GAAG,IAAI,CAmDtD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Zendesk Web Widget 回退态:Mira Launcher 驱动 zE open/close */
|
|
2
|
+
export declare function useZendeskWebWidgetLauncher(enabled: boolean): {
|
|
3
|
+
isOpen: boolean;
|
|
4
|
+
hasUnread: boolean;
|
|
5
|
+
handleToggleOpen: () => void;
|
|
6
|
+
isPanelVisible: boolean;
|
|
7
|
+
isPanelClosing: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare const useIsZendeskWebWidgetFallback: () => boolean;
|
|
10
|
+
//# sourceMappingURL=useZendeskWebWidgetLauncher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useZendeskWebWidgetLauncher.d.ts","sourceRoot":"","sources":["../../../../src/components/chat-widget/hooks/useZendeskWebWidgetLauncher.ts"],"names":[],"mappings":"AAQA,4DAA4D;AAC5D,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO;;;;;;EAwC3D;AAED,eAAO,MAAM,6BAA6B,QAAO,OACoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatWidgetBody.d.ts","sourceRoot":"","sources":["../../../../src/components/chat-widget/shell/ChatWidgetBody.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChatWidgetBody.d.ts","sourceRoot":"","sources":["../../../../src/components/chat-widget/shell/ChatWidgetBody.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAOpD,sCAAsC;AACtC,QAAA,MAAM,cAAc,GAAI,gIAQrB,mBAAmB,gCA2HrB,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
+
import type { RefObject } from "react";
|
|
1
2
|
import type { Locale } from "@/i18n";
|
|
3
|
+
/** 可选 ref:与 `window.MiraChatHost` 同源控制,仅供测试/高级集成 */
|
|
4
|
+
export interface ChatWidgetPanelControls {
|
|
5
|
+
open: () => void;
|
|
6
|
+
close: () => void;
|
|
7
|
+
}
|
|
2
8
|
export interface ChatWidgetProps {
|
|
3
9
|
/** Script CSR 嵌入(非 React 宿主加载 mira-chat-widget.js) */
|
|
4
10
|
scriptEmbed?: boolean;
|
|
@@ -14,10 +20,14 @@ export interface ChatWidgetProps {
|
|
|
14
20
|
apiBaseUrl?: string;
|
|
15
21
|
/** Zendesk integrationId(对应 data-integration-id;覆盖 site 品牌映射) */
|
|
16
22
|
integrationId?: string;
|
|
23
|
+
/** bootstrap 失败时 Web Widget snippet key(对应 data-zendesk-snippet-key) */
|
|
24
|
+
zendeskSnippetKey?: string;
|
|
17
25
|
/** Launcher 未读红点;true 开启(默认关闭) */
|
|
18
26
|
launcherUnreadEnabled?: boolean;
|
|
19
27
|
/** bootstrap 失败时回调 */
|
|
20
28
|
onInitError?: (error: Error) => void;
|
|
29
|
+
/** 挂载后写入 open/close,供宿主页 programmatic 打开面板 */
|
|
30
|
+
panelControlsRef?: RefObject<ChatWidgetPanelControls | null>;
|
|
21
31
|
}
|
|
22
32
|
export interface ChatWidgetBodyProps {
|
|
23
33
|
isOpen: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-widget.d.ts","sourceRoot":"","sources":["../../../../src/components/chat-widget/types/chat-widget.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,MAAM,WAAW,eAAe;IAC9B,sDAAsD;IACtD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,sBAAsB;IACtB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-widget.d.ts","sourceRoot":"","sources":["../../../../src/components/chat-widget/types/chat-widget.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,oDAAoD;AACpD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,sDAAsD;IACtD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kCAAkC;IAClC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,sBAAsB;IACtB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACrC,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,SAAS,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B"}
|
package/dist/config/runtime.d.ts
CHANGED
|
@@ -16,6 +16,8 @@ export interface ChatWidgetRuntimeConfig {
|
|
|
16
16
|
launcherAvatar?: string;
|
|
17
17
|
/** Launcher 未读红点;true 开启(默认关闭) */
|
|
18
18
|
launcherUnreadEnabled?: boolean;
|
|
19
|
+
/** bootstrap 失败时加载 Zendesk Web Widget snippet(Custom Launcher 回退) */
|
|
20
|
+
zendeskSnippetKey?: string;
|
|
19
21
|
loginUserId?: string;
|
|
20
22
|
userNickname?: string;
|
|
21
23
|
hostUser?: HostUserInfo;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/config/runtime.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAC;AAE9F,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kCAAkC;IAClC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,iDAAiD;IACjD,MAAM,CAAC,EAAE,yBAAyB,CAAC;CACpC;AAID,mCAAmC;AACnC,eAAO,MAAM,0BAA0B,GACrC,QAAQ,uBAAuB,KAC9B,IAEF,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,0BAA0B,QAAO,uBAC/B,CAAC"}
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/config/runtime.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAC;AAE9F,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kCAAkC;IAClC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,iDAAiD;IACjD,MAAM,CAAC,EAAE,yBAAyB,CAAC;CACpC;AAID,mCAAmC;AACnC,eAAO,MAAM,0BAA0B,GACrC,QAAQ,uBAAuB,KAC9B,IAEF,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,0BAA0B,QAAO,uBAC/B,CAAC"}
|
|
@@ -6,6 +6,8 @@ export declare const ZENDESK_INTEGRATION_ID_DEFAULT = "67ac5e61bda319808e8ee33f"
|
|
|
6
6
|
export declare const ZENDESK_INTEGRATION_ID_BY_BRAND: Record<string, string>;
|
|
7
7
|
/** 从 site 解析品牌前缀(`awol-us` → `awol`) */
|
|
8
8
|
export declare const parseSiteBrand: (site: string) => string | null;
|
|
9
|
+
/** 从 site 解析区域后缀(`awol-us` → `us`) */
|
|
10
|
+
export declare const parseSiteRegion: (site: string) => string | null;
|
|
9
11
|
/** 按 site 品牌选择 integrationId,未知品牌用默认 */
|
|
10
12
|
export declare const resolveIntegrationIdFromSite: (site: string) => string;
|
|
11
13
|
//# sourceMappingURL=zendeskIntegrationBySite.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zendeskIntegrationBySite.d.ts","sourceRoot":"","sources":["../../src/config/zendeskIntegrationBySite.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,eAAO,MAAM,8BAA8B,6BAA6B,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGlE,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IActD,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,4BAA4B,GAAI,MAAM,MAAM,KAAG,MAQ3D,CAAC"}
|
|
1
|
+
{"version":3,"file":"zendeskIntegrationBySite.d.ts","sourceRoot":"","sources":["../../src/config/zendeskIntegrationBySite.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,eAAO,MAAM,8BAA8B,6BAA6B,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGlE,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IActD,CAAC;AAEF,sCAAsC;AACtC,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IAcvD,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,4BAA4B,GAAI,MAAM,MAAM,KAAG,MAQ3D,CAAC"}
|
|
@@ -6,22 +6,22 @@
|
|
|
6
6
|
/* ========== 宿主配置 ========== */
|
|
7
7
|
|
|
8
8
|
/** @hgt-weprotalk/mira-client 版本(unpkg embed 资源) */
|
|
9
|
-
const MIRA_CLIENT_NPM_VERSION = "0.1.
|
|
9
|
+
const MIRA_CLIENT_NPM_VERSION = "0.1.41";
|
|
10
10
|
|
|
11
11
|
/** Widget 业务配置 */
|
|
12
12
|
const WIDGET_CONFIG = {
|
|
13
|
+
zendeskSnippetKey: "f4f934fc-4156-4aa7-b4eb-15f70d87146b",
|
|
13
14
|
agentName: "after_sales_assistant",
|
|
14
|
-
site: "awol-
|
|
15
|
+
site: "awol-us2",
|
|
15
16
|
locale: "en-US",
|
|
16
17
|
apiBaseUrl: "https://admin.awolvision.com/prod-api",
|
|
17
|
-
launcherAvatar
|
|
18
|
-
"https://s3.us-east-1.amazonaws.com/awol-showrooms/2026/09/02/02dde192149f41e59752af11d064f8bf.png",
|
|
18
|
+
// Launcher 头像由 GET /config/byName 的 launcherAvatar(或 avatar)提供,勿在此覆盖
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
/** unpkg embed 根路径(末尾 /) */
|
|
22
|
-
const MIRA_CLIENT_EMBED_BASE = `https://unpkg.com/@hgt-weprotalk/mira-client@${MIRA_CLIENT_NPM_VERSION}/dist/embed/`;
|
|
22
|
+
// const MIRA_CLIENT_EMBED_BASE = `https://unpkg.com/@hgt-weprotalk/mira-client@${MIRA_CLIENT_NPM_VERSION}/dist/embed/`;
|
|
23
23
|
/** 本地调试:使用本地 embed 资源 */
|
|
24
|
-
|
|
24
|
+
const MIRA_CLIENT_EMBED_BASE = `/embed/`;
|
|
25
25
|
|
|
26
26
|
/** PC:变量写在 :root 并映射到 .chat_widget */
|
|
27
27
|
const HOST_LAYOUT_TOKENS_DESKTOP = {
|
|
@@ -39,6 +39,8 @@ const HOST_LAYOUT_TOKENS_MOBILE_ROOT = {};
|
|
|
39
39
|
|
|
40
40
|
/**
|
|
41
41
|
* 移动端 Launcher 尺寸与 inset(≤768px)
|
|
42
|
+
* 默认 button-bottom 80px;个别路由底部有 Tab/工具条时,可在该路由调用
|
|
43
|
+
* `MiraChatHostLayout.applyMobileLauncherBottom("120px")` 抬高,避免挡住宿主内容。
|
|
42
44
|
*/
|
|
43
45
|
const HOST_LAYOUT_TOKENS_MOBILE_ON_BUTTON = {
|
|
44
46
|
"--mira-chat-widget-button-width": "50px",
|
|
@@ -64,9 +66,6 @@ const HOST_Z_INDEX_TOKENS_MOBILE = {
|
|
|
64
66
|
"--mira-chat-widget-z-index-panel": "999999",
|
|
65
67
|
};
|
|
66
68
|
|
|
67
|
-
/** Widget 初始化失败时加载的 Zendesk snippet */
|
|
68
|
-
const ZENDESK_SNIPPET_KEY = "f4f934fc-4156-4aa7-b4eb-15f70d87146b";
|
|
69
|
-
|
|
70
69
|
/* ========== 以下为加载逻辑(一般无需修改) ========== */
|
|
71
70
|
|
|
72
71
|
(function () {
|
|
@@ -254,11 +253,53 @@ const ZENDESK_SNIPPET_KEY = "f4f934fc-4156-4aa7-b4eb-15f70d87146b";
|
|
|
254
253
|
return result;
|
|
255
254
|
};
|
|
256
255
|
|
|
256
|
+
const buildConfiguredHostLayoutInput = (mobileLauncherTokens) => ({
|
|
257
|
+
desktopRoot: {
|
|
258
|
+
...HOST_LAYOUT_TOKENS_DESKTOP,
|
|
259
|
+
...HOST_Z_INDEX_TOKENS,
|
|
260
|
+
},
|
|
261
|
+
mobileRoot: {
|
|
262
|
+
...HOST_LAYOUT_TOKENS_MOBILE_ROOT,
|
|
263
|
+
...HOST_Z_INDEX_TOKENS_MOBILE,
|
|
264
|
+
},
|
|
265
|
+
mobileLauncherTokens,
|
|
266
|
+
});
|
|
267
|
+
|
|
257
268
|
const applyConfiguredHostLayout = () => {
|
|
269
|
+
window.MiraChatHostLayout.applyHostLayoutTokens(
|
|
270
|
+
buildConfiguredHostLayoutInput(HOST_LAYOUT_TOKENS_MOBILE_ON_BUTTON),
|
|
271
|
+
);
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
/** 特殊路由:覆盖移动端 Launcher 距底(如 "120px"),并同步 .chat_widget inset */
|
|
275
|
+
const applyMobileLauncherBottom = (bottom) => {
|
|
276
|
+
const normalized = String(bottom ?? "").trim();
|
|
277
|
+
|
|
278
|
+
if (!normalized) {
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
window.MiraChatHostLayout.applyHostLayoutTokens(
|
|
283
|
+
buildConfiguredHostLayoutInput({
|
|
284
|
+
...HOST_LAYOUT_TOKENS_MOBILE_ON_BUTTON,
|
|
285
|
+
"--mira-chat-widget-button-bottom": normalized,
|
|
286
|
+
}),
|
|
287
|
+
);
|
|
288
|
+
};
|
|
289
|
+
|
|
290
|
+
/** 特殊路由:覆盖 PC Launcher 距底(默认见 HOST_LAYOUT_TOKENS_DESKTOP) */
|
|
291
|
+
const applyDesktopLauncherBottom = (bottom) => {
|
|
292
|
+
const normalized = String(bottom ?? "").trim();
|
|
293
|
+
|
|
294
|
+
if (!normalized) {
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
|
|
258
298
|
window.MiraChatHostLayout.applyHostLayoutTokens({
|
|
259
299
|
desktopRoot: {
|
|
260
300
|
...HOST_LAYOUT_TOKENS_DESKTOP,
|
|
261
301
|
...HOST_Z_INDEX_TOKENS,
|
|
302
|
+
"--mira-chat-widget-button-bottom": normalized,
|
|
262
303
|
},
|
|
263
304
|
mobileRoot: {
|
|
264
305
|
...HOST_LAYOUT_TOKENS_MOBILE_ROOT,
|
|
@@ -268,6 +309,10 @@ const ZENDESK_SNIPPET_KEY = "f4f934fc-4156-4aa7-b4eb-15f70d87146b";
|
|
|
268
309
|
});
|
|
269
310
|
};
|
|
270
311
|
|
|
312
|
+
window.MiraChatHostLayout.applyConfiguredHostLayout = applyConfiguredHostLayout;
|
|
313
|
+
window.MiraChatHostLayout.applyMobileLauncherBottom = applyMobileLauncherBottom;
|
|
314
|
+
window.MiraChatHostLayout.applyDesktopLauncherBottom = applyDesktopLauncherBottom;
|
|
315
|
+
|
|
271
316
|
const ensureMountRoot = () => {
|
|
272
317
|
if (document.getElementById(MOUNT_ID)) {
|
|
273
318
|
return;
|
|
@@ -291,21 +336,18 @@ const ZENDESK_SNIPPET_KEY = "f4f934fc-4156-4aa7-b4eb-15f70d87146b";
|
|
|
291
336
|
document.head.appendChild(link);
|
|
292
337
|
};
|
|
293
338
|
|
|
294
|
-
const
|
|
295
|
-
|
|
296
|
-
return;
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
const script = document.createElement("script");
|
|
300
|
-
script.id = "ze-snippet";
|
|
301
|
-
script.src = `https://static.zdassets.com/ekr/snippet.js?key=${encodeURIComponent(ZENDESK_SNIPPET_KEY)}`;
|
|
302
|
-
script.async = true;
|
|
303
|
-
document.body.appendChild(script);
|
|
304
|
-
};
|
|
339
|
+
const hostMiraChatOnReady = window.MiraChatHostConfig?.onReady;
|
|
340
|
+
const hostMiraChatOnInitError = window.MiraChatHostConfig?.onInitError;
|
|
305
341
|
|
|
306
342
|
window.MiraChatHostConfig = {
|
|
307
|
-
|
|
308
|
-
|
|
343
|
+
debug: window.MiraChatHostConfig?.debug,
|
|
344
|
+
onReady: (sdk) => {
|
|
345
|
+
hostMiraChatOnReady?.(sdk);
|
|
346
|
+
window.__MIRA_CHAT_HOST_REGISTRY__?.notifySdkReady();
|
|
347
|
+
},
|
|
348
|
+
onInitError: (error) => {
|
|
349
|
+
hostMiraChatOnInitError?.(error);
|
|
350
|
+
console.error("[mira-chat-host] widget init failed", error);
|
|
309
351
|
},
|
|
310
352
|
};
|
|
311
353
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(function(){var e=()=>{if(typeof crypto<`u`&&typeof crypto.randomUUID==`function`)return crypto.randomUUID();if(typeof crypto<`u`&&typeof crypto.getRandomValues==`function`){let e=new Uint8Array(16);crypto.getRandomValues(e),e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}return`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g,e=>{let t=Math.floor(Math.random()*16);return(e===`x`?t:t&3|8).toString(16)})},t=`mira:tab-id`,n=()=>{let n=sessionStorage.getItem(t);if(n)return n;let r=e();return sessionStorage.setItem(t,r),r},r=`mira:tab-sync-debug`,i=()=>{try{return window.localStorage.getItem(r)===`1`}catch{return!1}},a=(e,t,n)=>{i()&&console.info(`[mira-tab-sync] publish`,{tabId:e,transport:n,type:t.type})},o=(e,t,n)=>{i()&&console.info(`[mira-tab-sync] dispatch`,{localTabId:e,source:n,foreign:t.tabId!==e,type:t.type,fromTabId:t.tabId})},s=`mira-chat-widget-sync`,c=`mira:tab-sync-signal`,l=(e,t)=>e.tabId!==t,u=e=>{try{let t=JSON.parse(e);return typeof t.type!=`string`||typeof t.tabId!=`string`?null:t}catch{return null}},d=()=>{let e=n(),t=new Set,r=typeof BroadcastChannel<`u`,i=(n,r)=>{o(e,n,r),t.forEach(e=>{e(n)})},l=t=>{let n={...t,tabId:e,ts:Date.now()};if(r){f?.postMessage(n),a(e,t,`broadcast-channel`);return}try{localStorage.setItem(c,JSON.stringify(n)),a(e,t,`local-storage`)}catch{}},d=e=>(t.add(e),()=>{t.delete(e)}),f=null;return r&&(f=new BroadcastChannel(s),f.addEventListener(`message`,e=>{!e.data?.type||typeof e.data.tabId!=`string`||i(e.data,`broadcast-channel`)})),window.addEventListener(`storage`,e=>{if(r||e.key!==`mira:tab-sync-signal`||!e.newValue)return;let t=u(e.newValue);t&&i(t,`storage`)}),{tabId:e,publish:l,subscribe:d}},f=null,p=()=>(f||=d(),f),m=e=>{p().publish(e)},h={},g=e=>{h={...
|
|
2
|
-
`);a=s.pop()||``;for(let e of s)if(
|
|
1
|
+
(function(){var e=()=>{if(typeof crypto<`u`&&typeof crypto.randomUUID==`function`)return crypto.randomUUID();if(typeof crypto<`u`&&typeof crypto.getRandomValues==`function`){let e=new Uint8Array(16);crypto.getRandomValues(e),e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}return`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g,e=>{let t=Math.floor(Math.random()*16);return(e===`x`?t:t&3|8).toString(16)})},t=`mira:tab-id`,n=()=>{let n=sessionStorage.getItem(t);if(n)return n;let r=e();return sessionStorage.setItem(t,r),r},r=`mira:tab-sync-debug`,i=()=>{try{return window.localStorage.getItem(r)===`1`}catch{return!1}},a=(e,t,n)=>{i()&&console.info(`[mira-tab-sync] publish`,{tabId:e,transport:n,type:t.type})},o=(e,t,n)=>{i()&&console.info(`[mira-tab-sync] dispatch`,{localTabId:e,source:n,foreign:t.tabId!==e,type:t.type,fromTabId:t.tabId})},s=`mira-chat-widget-sync`,c=`mira:tab-sync-signal`,l=(e,t)=>e.tabId!==t,u=e=>{try{let t=JSON.parse(e);return typeof t.type!=`string`||typeof t.tabId!=`string`?null:t}catch{return null}},d=()=>{let e=n(),t=new Set,r=typeof BroadcastChannel<`u`,i=(n,r)=>{o(e,n,r),t.forEach(e=>{e(n)})},l=t=>{let n={...t,tabId:e,ts:Date.now()};if(r){f?.postMessage(n),a(e,t,`broadcast-channel`);return}try{localStorage.setItem(c,JSON.stringify(n)),a(e,t,`local-storage`)}catch{}},d=e=>(t.add(e),()=>{t.delete(e)}),f=null;return r&&(f=new BroadcastChannel(s),f.addEventListener(`message`,e=>{!e.data?.type||typeof e.data.tabId!=`string`||i(e.data,`broadcast-channel`)})),window.addEventListener(`storage`,e=>{if(r||e.key!==`mira:tab-sync-signal`||!e.newValue)return;let t=u(e.newValue);t&&i(t,`storage`)}),{tabId:e,publish:l,subscribe:d}},f=null,p=()=>(f||=d(),f),m=e=>{p().publish(e)},h=`pending`,g=null,_=!1,ee=()=>window.MiraChat?.ready?(window.MiraChat.open(),!0):!1,v=()=>{_&&(_=!1,y.open())},y={getProvider:()=>h,open:()=>{if(h===`zendesk`&&g){g.open();return}ee()||(_=!0)},close:()=>{if(h===`zendesk`&&g){g.close();return}window.MiraChat?.ready&&window.MiraChat.close(),_=!1}},te={registerZendeskFallback:e=>{b(),g=e,h=`zendesk`,v()},notifySdkReady:()=>{h!==`zendesk`&&(h=`mira`,v())},takePendingPanelOpen:()=>{let e=_;return _=!1,e}};function b(){return window.MiraChatHost||(window.MiraChatHost=y),window.__MIRA_CHAT_HOST_REGISTRY__=te,window.MiraChatHost}var x={},S=e=>{x={...x,...e}},ne={},C=()=>ne,w={get agentName(){return C().agentName||`after_sales_assistant`},get site(){return C().site||`valerion-us`},get launcherAvatar(){return C().launcherAvatar||``},get apiBaseUrl(){return C().apiBaseUrl||`/agent-api/prod-api`}},re=`67ac5e61bda319808e8ee33f`,ie={awol:`67ac625c068bf0420481ad97`,valerion:`67ac5e61bda319808e8ee33f`},ae=e=>{let t=e.trim().toLowerCase();if(!t)return null;let n=t.indexOf(`-`);return n<=0?null:t.slice(0,n)},oe=e=>{let t=ae(e);return t?ie[t]??`67ac5e61bda319808e8ee33f`:re},se=()=>C().integrationId?.trim()||oe(w.site),T=null,ce=()=>(T||=d(),T),le=e=>{ce().publish(e)},ue=`zendesk:visitor-id`,E=`mira:visitor-id`,D=null,O=!1,de=new Set,fe=(e,t)=>{let n=localStorage.getItem(e);!n||localStorage.getItem(t)||localStorage.setItem(t,n)},pe=()=>{de.forEach(e=>{e()})},me=()=>{O||typeof window>`u`||(O=!0,window.addEventListener(`storage`,e=>{e.key!==`mira:visitor-id`||!e.newValue||D&&e.newValue!==D&&(D=e.newValue,pe(),le({type:`user-bound`}))}))},k=()=>{me(),fe(ue,E);let t=localStorage.getItem(E);if(t)return D=t,t;if(D)return D;let n=e();return localStorage.setItem(E,n),D=n,n},A=e=>`${w.apiBaseUrl.replace(/\/$/,``)}${e.startsWith(`/`)?e:`/${e}`}`,j=async e=>{let t=await e.json().catch(()=>({}));if(!e.ok||typeof t.code==`number`&&t.code!==200)throw Error(t.msg||t.message||`Request failed: ${e.status}`);return t.data},M=async(e,t)=>j(await fetch(A(e),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)})),N=async(e,t)=>j(await fetch(A(e),{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)})),he=async(e,t={})=>j(await fetch(`${A(e)}${P(t)}`,{method:`DELETE`,headers:{"Content-Type":`application/json`}})),ge=async e=>j(await fetch(A(e),{method:`GET`,headers:{"Content-Type":`application/json`}})),P=e=>{let t=new URLSearchParams;Object.entries(e).forEach(([e,n])=>{n!==void 0&&n!==``&&t.set(e,String(n))});let n=t.toString();return n?`?${n}`:``},F=async(e,t={})=>{let n=await fetch(`${A(e)}${P(t)}`,{method:`GET`,headers:{"Content-Type":`application/json`}}),r=await n.json().catch(()=>({}));if(!n.ok||typeof r.code==`number`&&r.code!==200)throw Error(r.msg||r.message||`Request failed: ${n.status}`);return{total:Number(r.total)||0,rows:Array.isArray(r.rows)?r.rows:[]}},_e=e=>e.replace(/\\u([0-9a-f]{4})/gi,(e,t)=>String.fromCharCode(parseInt(t,16))),I=(e,t=!1)=>{e.onCompleted?.(t)},L=(e,t)=>{let n=e.trim();if(!n.startsWith(`data: `))return!1;let r;try{r=JSON.parse(n.slice(6))}catch{return!1}if(!r||typeof r!=`object`)return!1;let i=typeof r.status==`number`&&r.status>=400;if(r.event===`error`||i)return t.onError?.(r.msg||r.message||`Unknown error`),!0;if(!r.event)return!1;let{onMessage:a}=t;if(r.event===`message`){let e=_e(r.data?.content||r.answer||``);return e&&a?.({answer:e}),!1}return r.event===`question_classification`?(t.onClassification?.({categoryName:r.data?.category_name||``}),!1):r.event===`retrival_knowledge`?(t.onRetrievalKnowledge?.({items:r.data?.retrival_knowledge||[]}),!1):r.event===`transfer_human`?(t.onTransferHuman?.({transferToHuman:!!r.data?.transfer_to_human}),!1):r.event===`knowledge_gap`?(t.onKnowledgeGap?.({knowledgeGap:!!(r.data?.knowledge_gap??!0)}),!1):r.event!==`done`&&r.event===`persist`&&(t.onPersist?.({sessionId:r.sessionId,questionMessageId:r.questionMessageId,answerMessageId:r.answerMessageId,categoryName:r.categoryName||``,transferToHuman:!!r.transferToHuman,knowledgeGap:!!r.knowledgeGap}),r.transferToHuman&&t.onTransferHuman?.({transferToHuman:!0}),!1)},ve=async(e,t)=>{let{onError:n}=t;if(!e.ok){let r=await e.json().catch(()=>({}));n?.(r.msg||r.message||`Request failed: ${e.status}`),I(t,!0);return}let r=e.body?.getReader();if(!r){n?.(`Stream is not supported`),I(t,!0);return}let i=new TextDecoder(`utf-8`),a=``,o=!1;try{for(;;){let{done:e,value:n}=await r.read();if(e)break;a+=i.decode(n,{stream:!0});let s=a.split(`
|
|
2
|
+
`);a=s.pop()||``;for(let e of s)if(L(e,t)){o=!0,I(t,!0);return}}if(a.trim()&&L(a,t)){o=!0,I(t,!0);return}o||I(t,!1)}catch(e){if(e instanceof Error&&e.name===`AbortError`){I(t,!1);return}n?.(String(e)),I(t,!0)}},R={PRESET_MSG:`PRESET_MSG`,LINK:`LINK`,COLLECT_FORM:`COLLECT_FORM`},ye=new Set(Object.values(R)),be=e=>ye.has(e),xe=(e,t)=>{if(!e||typeof e!=`object`)return null;let n=e,r=typeof n.title==`string`?n.title.trim():``;if(!r)return null;let i=typeof n.effectType==`string`?n.effectType.trim():``;if(!be(i))return null;let a=i,o=typeof n.rounds==`number`&&Number.isFinite(n.rounds)?Math.max(0,Math.floor(n.rounds)):0,s=typeof n.sortOrder==`number`&&Number.isFinite(n.sortOrder)?n.sortOrder:t,c=n.effectConfig&&typeof n.effectConfig==`object`?n.effectConfig:{},l=typeof c.question==`string`?c.question.trim():``,u=a===R.PRESET_MSG?l||r:l||void 0;return{title:r,rounds:o,effectType:a,effectConfig:{url:typeof c.url==`string`?c.url:void 0,question:u,reply:typeof c.reply==`string`?c.reply:void 0},sortOrder:s}},Se=(e=[])=>e.map((e,t)=>xe(e,t)).filter(e=>e!==null).sort((e,t)=>e.sortOrder-t.sortOrder),z=e=>!e||typeof e!=`object`||Array.isArray(e)?null:e,B=e=>typeof e==`string`?e.trim():``,V=e=>{try{let t=new URL(e);return t.protocol===`http:`||t.protocol===`https:`}catch{return!1}},Ce=e=>{let t=z(e);if(!t)return null;let n=B(t.type);if(n===`text`){let e=B(t.text);return e?{type:`text`,text:e}:null}if(n===`image`){let e=B(t.imageUrl);return V(e)?{type:`image`,imageUrl:e,alt:B(t.alt)}:null}if(n===`link`){let e=B(t.label),n=B(t.action);if(!e)return null;if(n===`OPEN_CHAT`)return{type:`link`,label:e,action:`OPEN_CHAT`};if(n===`URL`){let n=B(t.url);return V(n)?{type:`link`,label:e,action:`URL`,url:n}:null}return null}if(n===`button`){let e=B(t.label),n=B(t.action);if(!e)return null;if(n===`OPEN_CHAT`)return{type:`button`,label:e,action:`OPEN_CHAT`};if(n===`URL`){let n=B(t.url);return V(n)?{type:`button`,label:e,action:`URL`,url:n}:null}return null}return null},we=(e,t)=>{let n=z(e);if(!n)return null;let r=B(n.title);if(!r)return null;let i=B(n.iconUrl),a=typeof n.sortOrder==`number`&&Number.isFinite(n.sortOrder)?n.sortOrder:t,o=Array.isArray(n.blocks)?n.blocks:[];return{sortOrder:a,title:r,description:B(n.description),iconUrl:V(i)?i:``,blocks:o.map(e=>Ce(e)).filter(e=>e!==null)}},Te=e=>{let t=z(e);if(!t)return{enabled:!1,groups:[]};let n=(Array.isArray(t.groups)?t.groups:[]).map((e,t)=>we(e,t)).filter(e=>e!==null).sort((e,t)=>e.sortOrder-t.sortOrder);return t.enabled===!1?{enabled:!1,groups:n}:{enabled:n.length>0,groups:n}},H={AI_CHAT:`AI_CHAT`,TRANSFERRING:`TRANSFERRING`,TRANSFERRED:`TRANSFERRED`,CLOSE:`CLOSE`},Ee=new Set(Object.values(H)),De=e=>{if(!e)return;let t=e.toUpperCase();if(Ee.has(t))return t},U=`/client/agentChat`,Oe=e=>({...e,sessionStatus:De(e.sessionStatus)}),ke=(e=[])=>e.slice().sort((e,t)=>(e.sortOrder??0)-(t.sortOrder??0)).filter(e=>!!e.question?.trim()),Ae=async(e,t=w.site)=>{let n=await ge(`${U}/config/byName/${encodeURIComponent(e)}?site=${encodeURIComponent(t)}`),r=se(),i=Te(n.guideBubble);return{agentId:n.id,agentName:n.agentName,integrationsId:r,title:n.name||``,avatar:n.avatar||``,launcherAvatar:n.launcherAvatar||``,openingStatement:n.greeting||``,transferWaitText:n.transferWaitText||``,suggestedQuestions:ke(n.recommendedQuestions),quickEntries:Se(n.quickEntries),productCardsEnabled:n.productCardsEnabled??!0,guideBubble:i,placeholder:``}},je=async({agentId:e,visitorId:t=k(),channel:n=`web`})=>{if(!e)throw Error(`Missing agentId, unable to create session`);let r=await M(`${U}/session`,{agentId:e,visitorId:t,channel:n});return{sessionId:r.sessionId,visitorId:r.visitorId||t,userId:r.userId||t}},Me=async e=>{try{await M(`${U}/open`,{...e,channel:`web`})}catch{}},W=async()=>{let{agentName:e}=w;return Ae(e)},Ne=async({visitorId:e=k(),agentId:t,pageNum:n=1,pageSize:r=50}={})=>{let i=await F(`${U}/session/list`,{visitorId:e,agentId:t,pageNum:n,pageSize:r});return{...i,rows:i.rows.map(Oe)}},Pe=async({visitorId:e=k(),agentId:t,sessionId:n,pageNum:r=1,pageSize:i=200})=>F(`${U}/message/list`,{visitorId:e,agentId:t,sessionId:n,pageNum:r,pageSize:i}),Fe=async({sessionId:e,visitorId:t=k()})=>{await M(`${U}/session/${e}/close?${new URLSearchParams({visitorId:t}).toString()}`,{})},Ie=async({sessionId:e,sessionStatus:t,visitorId:n=k()})=>{await N(`${U}/session/${e}/status`,{sessionStatus:t,visitorId:n})},Le=async({messageIds:e,visitorId:t=k()})=>{e.length!==0&&await M(`${U}/message/read`,{messageIds:e,visitorId:t})},Re=async({sessionId:e,visitorId:t=k()})=>{await he(`${U}/session/${e}`,{visitorId:t})},ze=async()=>{let e=k();return{...await W(),sessionId:null,visitorId:e,userId:e,sessionStatus:H.AI_CHAT,conversationId:null,zendeskUserId:null,transferManual:0}},G=null,K={initSession:async()=>(G||=ze().catch(e=>{throw G=null,e}),G),resetInitSession:()=>{G=null},loadAgentConfig:W,createSession:je,openSession:Me,fetchSessionList:Ne,fetchMessageList:Pe,deleteSession:Re,closeSession:Fe,updateSessionStatus:Ie,markMessagesRead:Le,sendMessage:async({query:t,agentId:n,sessionId:r,visitorId:i,clientMessageId:a,signal:o,...s})=>{await ve(await fetch(A(`${U}/chat`),{method:`POST`,credentials:`include`,signal:o,headers:{"Content-Type":`application/json`,Accept:`text/event-stream`},body:JSON.stringify({agentId:n,sessionId:r,visitorId:i,content:t,clientMessageId:a||e()})}),s)},sendPresetMessage:async({agentId:e,sessionId:t,visitorId:n,recommendedQuestion:r,quickEntry:i})=>{let a={agentId:e,sessionId:t,visitorId:n};return r?a.recommendedQuestion=r:i&&(a.quickEntry=i),M(`${U}/message/preset`,a)},reportTransfer:async({agentId:e,sessionId:t,visitorId:n,eventType:r,conversationId:i,zendeskUserId:a})=>{if(!(!e||!t||!r||!i)&&!(r===`TRIGGER`&&!a))try{await M(`${U}/transfer`,{agentId:e,sessionId:t,visitorId:n||k(),eventType:r,conversationId:i,...a?{zendeskUserId:a}:{}})}catch{}},submitFeedback:async({agentId:e,sessionId:t,messageId:n,questionMessageId:r,visitorId:i,feedbackType:a,question:o,answer:s,type:c,feedbackContent:l})=>(await M(`${U}/feedback`,{agentId:e,sessionId:t,messageId:n,questionMessageId:r,visitorId:i,feedbackType:a,question:o,answer:s,...c?{type:c}:{},feedbackContent:l})).id,updateFeedback:async({feedbackId:e,agentId:t,sessionId:n,messageId:r,questionMessageId:i,visitorId:a,feedbackType:o,question:s,answer:c,type:l,feedbackContent:u})=>{await N(`${U}/feedback/${e}`,{agentId:t,sessionId:n,messageId:r,questionMessageId:i,visitorId:a,feedbackType:o,question:s,answer:c,...l?{type:l}:{},feedbackContent:u})},bindUser:async({loginUserId:e,userNickname:t,visitorId:n=k()})=>{if(!e.trim())throw Error(`loginUserId is required`);if(e===n)throw Error(`loginUserId must differ from visitorId`);return M(`${U}/bindUser`,{visitorId:n,loginUserId:e,...t?{userNickname:t}:{}})}},Be=e=>{S({...e.loginUserId?{loginUserId:e.loginUserId}:{},...e.userNickname?{userNickname:e.userNickname}:{},...e.product?{productContext:e.product}:{},...e.loginUserId&&e.userName&&e.userEmail?{hostUser:{loginUserId:e.loginUserId,name:e.userName,email:e.userEmail,...e.userNickname?{userNickname:e.userNickname}:{}}}:{}})},Ve=async e=>{let t=await K.bindUser(e);return m({type:`user-bound`}),t},He=async e=>{S({hostUser:{loginUserId:e.loginUserId,name:e.name,email:e.email,...e.userNickname?{userNickname:e.userNickname}:{}},loginUserId:e.loginUserId,...e.userNickname?{userNickname:e.userNickname}:{}});try{await K.bindUser({loginUserId:e.loginUserId,userNickname:e.userNickname})}catch{}return m({type:`user-bound`}),{ok:!0}},Ue=e=>(Be(e),{ok:!0}),q=async(e,t)=>{switch(e){case`bindUser`:return Ve(t);case`setUser`:return He(t);case`setContext`:return Ue(t);default:throw Error(`Unknown SDK method: ${e}`)}},We=e=>{let t=!1,n=new Map,r=(e,t)=>{n.get(e)?.forEach(e=>{e(t)})};return{sdk:{get ready(){return t},bindUser:e=>q(`bindUser`,e),setContext:e=>q(`setContext`,e),setUser:e=>q(`setUser`,e),open:async()=>(e.open(),{ok:!0}),close:async()=>(e.close(),{ok:!0}),on(e,t){let r=String(e);return n.has(r)||n.set(r,new Set),n.get(r)?.add(t),()=>{n.get(r)?.delete(t)}}},markReady:()=>{t||(t=!0,r(`ready`,void 0))},emitHostEvent:(e,t)=>{r(String(e),t)}}},Ge=`mira-chat-widget-mounted`,J=`mira-chat-ready`,Ke=()=>window.__MIRA_CHAT_WIDGET__??null,Y=null,X=!1,Z=!1,Q=()=>{if(Z)return;Z=!0;let e=window.MiraChatHostConfig?.onReady;if(e){if(window.MiraChat){e(window.MiraChat);return}e()}},qe=e=>{Y=e},Je=()=>{!X||!Y||Xe()},Ye=(e,t)=>{Y?.(e,t)},Xe=()=>{if(!Y){X=!0,Q();return}X=!1,Ye(`ready`,void 0),window.dispatchEvent(new CustomEvent(J)),Q()},Ze=e=>{window.MiraChatHostConfig?.debug&&console.info(`[mira-chat-host] ${e}`)},$=()=>{if(b(),window.MiraChat)return;let e=Ke();if(!e)return;let t=p(),{sdk:n,markReady:r,emitHostEvent:i}=We({open:()=>{e.setPanelOpenSilently(!0),t.publish({type:`window-open`})},close:()=>{e.setPanelOpenSilently(!1),t.publish({type:`window-close`})}}),a=n.setContext.bind(n);n.setContext=async e=>{let n=await a(e);return t.publish({type:`context-updated`,payload:e}),n};let o=n.bindUser.bind(n);n.bindUser=async e=>{let n=await o(e);return t.publish({type:`user-bound`}),n};let s=n.setUser.bind(n);n.setUser=async e=>{let n=await s(e);return t.publish({type:`user-bound`}),n},window.MiraChat=n,qe((e,t)=>{if(e===`ready`&&r(),e===`init-error`){let e=t&&typeof t==`object`&&`message`in t?String(t.message):`Chat widget init failed`;window.MiraChatHostConfig?.onInitError?.(Error(e))}i(e,t)}),n.on(`ready`,()=>{window.__MIRA_CHAT_HOST_REGISTRY__?.notifySdkReady(),Q(),window.dispatchEvent(new CustomEvent(J)),Ze(`MiraChat SDK ready`)}),t.subscribe(n=>{if(l(n,t.tabId)){if(n.type===`window-open`){e.setPanelOpenSilently(!0);return}if(n.type===`window-close`){e.setPanelOpenSilently(!1);return}n.type===`context-updated`&&a(n.payload)}}),Je()};$(),window.addEventListener(Ge,()=>{$()})})();
|