@super_studio/ecforce-ai-agent-react 0.5.0 → 0.5.2
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/chatbot-frame.d.ts +18 -1
- package/dist/components/chatbot-frame.d.ts.map +1 -1
- package/dist/components/provider/{chatbot-proivder.d.ts → chatbot-provider.d.ts} +3 -1
- package/dist/components/provider/{chatbot-proivder.d.ts.map → chatbot-provider.d.ts.map} +1 -1
- package/dist/components/provider/use-chatbot-frame-handler.d.ts +6 -0
- package/dist/components/provider/use-chatbot-frame-handler.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +98 -12
- package/dist/index.mjs +98 -12
- package/dist/lib/constants.d.ts +1 -1
- package/dist/lib/constants.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/chatbot-frame.tsx +116 -7
- package/src/components/provider/{chatbot-proivder.tsx → chatbot-provider.tsx} +15 -5
- package/src/components/provider/use-chatbot-frame-handler.tsx +22 -1
- package/src/components/sheet.tsx +1 -1
- package/src/index.ts +1 -1
- package/src/lib/constants.ts +1 -1
|
@@ -2,10 +2,18 @@ import type { MCP } from "./provider/use-chatbot-frame-handler";
|
|
|
2
2
|
export type ChatbotFrameProps = {
|
|
3
3
|
/** 管理画面上のエージェントID */
|
|
4
4
|
agentId: string;
|
|
5
|
+
/** 初期化時のチャットID */
|
|
6
|
+
initialChatId?: string;
|
|
5
7
|
/** エージェントにつなげるMCPの情報 */
|
|
6
8
|
mcps?: MCP[];
|
|
7
9
|
/** アプリ名のメタデータ */
|
|
8
10
|
appName?: string;
|
|
11
|
+
/** セッションを取得するための関数 */
|
|
12
|
+
getSession?: () => Promise<{
|
|
13
|
+
sessionId: string;
|
|
14
|
+
token: string;
|
|
15
|
+
expiresAt: string;
|
|
16
|
+
}>;
|
|
9
17
|
/**
|
|
10
18
|
* trueになるまで、初期化されません。
|
|
11
19
|
* 初期化せれたあとはもう使われません。
|
|
@@ -21,5 +29,14 @@ export type ChatbotFrameProps = {
|
|
|
21
29
|
url?: string;
|
|
22
30
|
className?: string;
|
|
23
31
|
};
|
|
24
|
-
export declare function ChatbotFrame({ agentId, appName, mcps, enabled, url, className, }: ChatbotFrameProps): import("react/jsx-runtime").JSX.Element;
|
|
32
|
+
export declare function ChatbotFrame({ agentId, appName, initialChatId, mcps, getSession, enabled, url, className, }: ChatbotFrameProps): import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
export type SessionData = {
|
|
34
|
+
sessionId: string;
|
|
35
|
+
token: string;
|
|
36
|
+
expiresAt: string;
|
|
37
|
+
};
|
|
38
|
+
export type UseSessionProps = {
|
|
39
|
+
getSession?: () => Promise<SessionData>;
|
|
40
|
+
};
|
|
41
|
+
export declare function useSession({ getSession }: UseSessionProps): string | undefined;
|
|
25
42
|
//# sourceMappingURL=chatbot-frame.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatbot-frame.d.ts","sourceRoot":"","sources":["../../src/components/chatbot-frame.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,sCAAsC,CAAC;AAEhE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,iBAAiB;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,OAAO,EACP,IAAI,EACJ,OAAc,EACd,GAAG,EACH,SAAS,GACV,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"chatbot-frame.d.ts","sourceRoot":"","sources":["../../src/components/chatbot-frame.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,sCAAsC,CAAC;AAEhE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wBAAwB;IACxB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,iBAAiB;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,OAAO,EACP,aAAa,EACb,IAAI,EACJ,UAAU,EACV,OAAc,EACd,GAAG,EACH,SAAS,GACV,EAAE,iBAAiB,2CAgFnB;AAoBD,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;CACzC,CAAC;AAEF,wBAAgB,UAAU,CAAC,EAAE,UAAU,EAAE,EAAE,eAAe,sBAuCzD"}
|
|
@@ -17,6 +17,8 @@ type ChatbotContextType = {
|
|
|
17
17
|
setMcps: (mcps: MCP[]) => void;
|
|
18
18
|
/** アプリ名を設定 */
|
|
19
19
|
setAppName: (appName: string) => void;
|
|
20
|
+
/** セッショントークンを設定 */
|
|
21
|
+
setSessionToken: (sessionToken: string) => void;
|
|
20
22
|
/** チャットボットが準備できたか */
|
|
21
23
|
isReady: boolean;
|
|
22
24
|
/** チャットボットが初期化されたか */
|
|
@@ -33,4 +35,4 @@ type ChatbotProviderProps = {
|
|
|
33
35
|
};
|
|
34
36
|
export declare function ChatbotProvider({ children }: ChatbotProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
35
37
|
export {};
|
|
36
|
-
//# sourceMappingURL=chatbot-
|
|
38
|
+
//# sourceMappingURL=chatbot-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatbot-
|
|
1
|
+
{"version":3,"file":"chatbot-provider.d.ts","sourceRoot":"","sources":["../../../src/components/provider/chatbot-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,GAAG,EACT,MAAM,6BAA6B,CAAC;AAGrC,KAAK,kBAAkB,GAAG;IACxB,gCAAgC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,iBAAiB;IACjB,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,sBAAsB;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,mBAAmB;IACnB,aAAa,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,kBAAkB;IAClB,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACjC,aAAa;IACb,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAC/B,cAAc;IACd,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,mBAAmB;IACnB,eAAe,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,qBAAqB;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,sBAAsB;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,WAAW,EAAE,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAAC;CAC3D,CAAC;AAMF,wBAAgB,UAAU,uBAMzB;AAED,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAkCjE"}
|
|
@@ -18,6 +18,7 @@ export type MCP = {
|
|
|
18
18
|
export type InitProps = {
|
|
19
19
|
mcps?: MCP[];
|
|
20
20
|
appName?: string;
|
|
21
|
+
sessionToken?: string;
|
|
21
22
|
};
|
|
22
23
|
export type ParentMessage = {
|
|
23
24
|
type: "mcps";
|
|
@@ -25,10 +26,14 @@ export type ParentMessage = {
|
|
|
25
26
|
} | {
|
|
26
27
|
type: "appName";
|
|
27
28
|
appName: string;
|
|
29
|
+
} | {
|
|
30
|
+
type: "sessionToken";
|
|
31
|
+
sessionToken: string;
|
|
28
32
|
} | {
|
|
29
33
|
type: "init";
|
|
30
34
|
mcps?: MCP[];
|
|
31
35
|
appName?: string;
|
|
36
|
+
sessionToken?: string;
|
|
32
37
|
};
|
|
33
38
|
export declare function useChatbotFrameHandler({ setOpen, setIsExpanded, }: {
|
|
34
39
|
setOpen: (open: boolean) => void;
|
|
@@ -37,6 +42,7 @@ export declare function useChatbotFrameHandler({ setOpen, setIsExpanded, }: {
|
|
|
37
42
|
init: (props: InitProps) => void;
|
|
38
43
|
setMcps: (mcps: MCP[]) => void;
|
|
39
44
|
setAppName: (appName: string) => void;
|
|
45
|
+
setSessionToken: (sessionToken: string) => void;
|
|
40
46
|
setIframeEl: React.Dispatch<React.SetStateAction<HTMLIFrameElement | null>>;
|
|
41
47
|
isReady: boolean;
|
|
42
48
|
isInitialized: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-chatbot-frame-handler.d.ts","sourceRoot":"","sources":["../../../src/components/provider/use-chatbot-frame-handler.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,qBAAqB,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE/B,MAAM,MAAM,GAAG,GAAG;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"use-chatbot-frame-handler.d.ts","sourceRoot":"","sources":["../../../src/components/provider/use-chatbot-frame-handler.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,qBAAqB,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE/B,MAAM,MAAM,GAAG,GAAG;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GACrB;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;CACb,GACD;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,GACD;IACE,IAAI,EAAE,cAAc,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB,GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEN,wBAAgB,sBAAsB,CAAC,EACrC,OAAO,EACP,aAAa,GACd,EAAE;IACD,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,aAAa,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C;kBAqBW,SAAS;oBAUV,GAAG,EAAE;0BAOF,MAAM;oCAOD,MAAM;;;;EA0DxB"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -31,7 +31,7 @@ var __objRest = (source, exclude) => {
|
|
|
31
31
|
return target;
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
-
// src/components/provider/chatbot-
|
|
34
|
+
// src/components/provider/chatbot-provider.tsx
|
|
35
35
|
var _react = require('react'); var React5 = _interopRequireWildcard(_react);
|
|
36
36
|
|
|
37
37
|
// src/components/provider/use-chatbot-frame-handler.tsx
|
|
@@ -76,6 +76,12 @@ function useChatbotFrameHandler({
|
|
|
76
76
|
},
|
|
77
77
|
[postMessage]
|
|
78
78
|
);
|
|
79
|
+
const setSessionToken = React5.default.useCallback(
|
|
80
|
+
(sessionToken) => {
|
|
81
|
+
postMessage({ type: "sessionToken", sessionToken });
|
|
82
|
+
},
|
|
83
|
+
[postMessage]
|
|
84
|
+
);
|
|
79
85
|
React5.default.useEffect(() => {
|
|
80
86
|
const iframe = iframeEl;
|
|
81
87
|
if (!iframe) {
|
|
@@ -113,7 +119,15 @@ function useChatbotFrameHandler({
|
|
|
113
119
|
iframe.removeEventListener("load", handleIframeLoad);
|
|
114
120
|
};
|
|
115
121
|
}, [iframeEl]);
|
|
116
|
-
return {
|
|
122
|
+
return {
|
|
123
|
+
init,
|
|
124
|
+
setMcps,
|
|
125
|
+
setAppName,
|
|
126
|
+
setSessionToken,
|
|
127
|
+
setIframeEl,
|
|
128
|
+
isReady,
|
|
129
|
+
isInitialized
|
|
130
|
+
};
|
|
117
131
|
}
|
|
118
132
|
|
|
119
133
|
// src/components/provider/use-chatbot-window-states.tsx
|
|
@@ -130,7 +144,7 @@ function useChatbotWindowStates() {
|
|
|
130
144
|
return { hasOpened, open, isExpanded, setOpen, setIsExpanded };
|
|
131
145
|
}
|
|
132
146
|
|
|
133
|
-
// src/components/provider/chatbot-
|
|
147
|
+
// src/components/provider/chatbot-provider.tsx
|
|
134
148
|
var _jsxruntime = require('react/jsx-runtime');
|
|
135
149
|
var ChatbotContext = React5.default.createContext(
|
|
136
150
|
void 0
|
|
@@ -144,7 +158,15 @@ function useChatbot() {
|
|
|
144
158
|
}
|
|
145
159
|
function ChatbotProvider({ children }) {
|
|
146
160
|
const { hasOpened, open, isExpanded, setOpen, setIsExpanded } = useChatbotWindowStates();
|
|
147
|
-
const {
|
|
161
|
+
const {
|
|
162
|
+
setMcps,
|
|
163
|
+
setAppName,
|
|
164
|
+
setSessionToken,
|
|
165
|
+
init,
|
|
166
|
+
isReady,
|
|
167
|
+
isInitialized,
|
|
168
|
+
setIframeEl
|
|
169
|
+
} = useChatbotFrameHandler({
|
|
148
170
|
setOpen,
|
|
149
171
|
setIsExpanded
|
|
150
172
|
});
|
|
@@ -154,6 +176,7 @@ function ChatbotProvider({ children }) {
|
|
|
154
176
|
setOpen,
|
|
155
177
|
isExpanded,
|
|
156
178
|
setIsExpanded,
|
|
179
|
+
setSessionToken,
|
|
157
180
|
init,
|
|
158
181
|
setMcps,
|
|
159
182
|
setAppName,
|
|
@@ -168,33 +191,44 @@ function ChatbotProvider({ children }) {
|
|
|
168
191
|
|
|
169
192
|
|
|
170
193
|
// src/lib/constants.ts
|
|
171
|
-
var PROD_CHATBOT_URL = "https://
|
|
194
|
+
var PROD_CHATBOT_URL = "https://agent.ec-force.com";
|
|
172
195
|
|
|
173
196
|
// src/components/chatbot-frame.tsx
|
|
174
197
|
|
|
175
198
|
function ChatbotFrame({
|
|
176
199
|
agentId,
|
|
177
200
|
appName,
|
|
201
|
+
initialChatId,
|
|
178
202
|
mcps,
|
|
203
|
+
getSession,
|
|
179
204
|
enabled = true,
|
|
180
205
|
url,
|
|
181
206
|
className
|
|
182
207
|
}) {
|
|
183
208
|
var _a;
|
|
184
|
-
const
|
|
209
|
+
const baseUrl = (_a = url != null ? url : process.env.CHATBOT_URL) != null ? _a : PROD_CHATBOT_URL;
|
|
185
210
|
const { setIframeEl } = useChatbot();
|
|
186
|
-
const { init, setMcps, setAppName, isReady } = useChatbot();
|
|
211
|
+
const { init, setMcps, setAppName, setSessionToken, isReady } = useChatbot();
|
|
187
212
|
const sentInitRef = React5.default.useRef(false);
|
|
188
213
|
const [currentMcps, setCurrentMcps] = React5.default.useState();
|
|
189
214
|
const [currentAppName, setCurrentAppName] = React5.default.useState();
|
|
215
|
+
const [currentSessionToken, setCurrentSessionToken] = React5.default.useState();
|
|
216
|
+
const sessionToken = useSession({ getSession });
|
|
217
|
+
const shouldInit = enabled && isReady && // getSessionが定義されていれば、currentSessionが設定されるまで待つ
|
|
218
|
+
!!(sessionToken || getSession === void 0);
|
|
190
219
|
React5.default.useEffect(() => {
|
|
191
|
-
if (
|
|
192
|
-
init({
|
|
220
|
+
if (shouldInit && !sentInitRef.current) {
|
|
221
|
+
init({
|
|
222
|
+
mcps,
|
|
223
|
+
appName,
|
|
224
|
+
sessionToken
|
|
225
|
+
});
|
|
193
226
|
sentInitRef.current = true;
|
|
194
227
|
setCurrentMcps(mcps);
|
|
195
228
|
setCurrentAppName(appName);
|
|
229
|
+
setCurrentSessionToken(sessionToken);
|
|
196
230
|
}
|
|
197
|
-
}, [enabled, init, mcps, appName, isReady]);
|
|
231
|
+
}, [enabled, init, mcps, appName, isReady, sessionToken]);
|
|
198
232
|
React5.default.useEffect(() => {
|
|
199
233
|
if (sentInitRef.current && mcps && JSON.stringify(currentMcps) !== JSON.stringify(mcps)) {
|
|
200
234
|
setMcps(mcps);
|
|
@@ -207,11 +241,21 @@ function ChatbotFrame({
|
|
|
207
241
|
setAppName(appName);
|
|
208
242
|
}
|
|
209
243
|
}, [appName]);
|
|
244
|
+
React5.default.useEffect(() => {
|
|
245
|
+
if (sentInitRef.current && sessionToken && currentSessionToken !== sessionToken) {
|
|
246
|
+
setCurrentSessionToken(sessionToken);
|
|
247
|
+
setSessionToken(sessionToken);
|
|
248
|
+
}
|
|
249
|
+
}, [sessionToken]);
|
|
210
250
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
211
251
|
"iframe",
|
|
212
252
|
{
|
|
213
253
|
ref: setIframeEl,
|
|
214
|
-
src:
|
|
254
|
+
src: buildIframeUrl({
|
|
255
|
+
baseUrl,
|
|
256
|
+
agentId,
|
|
257
|
+
initialChatId
|
|
258
|
+
}),
|
|
215
259
|
className,
|
|
216
260
|
allow: "clipboard-write",
|
|
217
261
|
style: {
|
|
@@ -221,6 +265,47 @@ function ChatbotFrame({
|
|
|
221
265
|
}
|
|
222
266
|
);
|
|
223
267
|
}
|
|
268
|
+
function buildIframeUrl({
|
|
269
|
+
baseUrl,
|
|
270
|
+
agentId,
|
|
271
|
+
initialChatId
|
|
272
|
+
}) {
|
|
273
|
+
const url = new URL(`/embed/${agentId}`, baseUrl);
|
|
274
|
+
if (initialChatId) {
|
|
275
|
+
url.searchParams.set("initialChatId", initialChatId);
|
|
276
|
+
}
|
|
277
|
+
return url.toString();
|
|
278
|
+
}
|
|
279
|
+
function useSession({ getSession }) {
|
|
280
|
+
const { setSessionToken } = useChatbot();
|
|
281
|
+
const [session, setSession] = React5.default.useState();
|
|
282
|
+
const isFetchingSessionRef = React5.default.useRef(false);
|
|
283
|
+
React5.default.useEffect(() => {
|
|
284
|
+
if (!getSession) return;
|
|
285
|
+
let intervalId;
|
|
286
|
+
const fetchSession = async () => {
|
|
287
|
+
if (isFetchingSessionRef.current) return;
|
|
288
|
+
try {
|
|
289
|
+
isFetchingSessionRef.current = true;
|
|
290
|
+
const session2 = await getSession();
|
|
291
|
+
setSession(session2);
|
|
292
|
+
setSessionToken(session2.token);
|
|
293
|
+
} catch (error) {
|
|
294
|
+
console.error("Failed to get session:", error);
|
|
295
|
+
} finally {
|
|
296
|
+
isFetchingSessionRef.current = false;
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
fetchSession();
|
|
300
|
+
intervalId = setInterval(fetchSession, 15 * 60 * 1e3);
|
|
301
|
+
return () => {
|
|
302
|
+
if (intervalId) {
|
|
303
|
+
clearInterval(intervalId);
|
|
304
|
+
}
|
|
305
|
+
};
|
|
306
|
+
}, [getSession, setSessionToken]);
|
|
307
|
+
return session == null ? void 0 : session.token;
|
|
308
|
+
}
|
|
224
309
|
|
|
225
310
|
// src/components/chatbot-sheet.tsx
|
|
226
311
|
|
|
@@ -461,4 +546,5 @@ function EcforceAiIcon() {
|
|
|
461
546
|
|
|
462
547
|
|
|
463
548
|
|
|
464
|
-
|
|
549
|
+
|
|
550
|
+
exports.ChatbotFrame = ChatbotFrame; exports.ChatbotProvider = ChatbotProvider; exports.ChatbotSheet = ChatbotSheet; exports.Sheet = Sheet; exports.SheetClose = SheetClose; exports.SheetContent = SheetContent; exports.SheetDescription = SheetDescription; exports.SheetFooter = SheetFooter; exports.SheetHeader = SheetHeader; exports.SheetTitle = SheetTitle; exports.SheetTrigger = SheetTrigger; exports.Tooltip = Tooltip; exports.useChatbot = useChatbot; exports.useSession = useSession;
|
package/dist/index.mjs
CHANGED
|
@@ -31,7 +31,7 @@ var __objRest = (source, exclude) => {
|
|
|
31
31
|
return target;
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
-
// src/components/provider/chatbot-
|
|
34
|
+
// src/components/provider/chatbot-provider.tsx
|
|
35
35
|
import React3 from "react";
|
|
36
36
|
|
|
37
37
|
// src/components/provider/use-chatbot-frame-handler.tsx
|
|
@@ -76,6 +76,12 @@ function useChatbotFrameHandler({
|
|
|
76
76
|
},
|
|
77
77
|
[postMessage]
|
|
78
78
|
);
|
|
79
|
+
const setSessionToken = React.useCallback(
|
|
80
|
+
(sessionToken) => {
|
|
81
|
+
postMessage({ type: "sessionToken", sessionToken });
|
|
82
|
+
},
|
|
83
|
+
[postMessage]
|
|
84
|
+
);
|
|
79
85
|
React.useEffect(() => {
|
|
80
86
|
const iframe = iframeEl;
|
|
81
87
|
if (!iframe) {
|
|
@@ -113,7 +119,15 @@ function useChatbotFrameHandler({
|
|
|
113
119
|
iframe.removeEventListener("load", handleIframeLoad);
|
|
114
120
|
};
|
|
115
121
|
}, [iframeEl]);
|
|
116
|
-
return {
|
|
122
|
+
return {
|
|
123
|
+
init,
|
|
124
|
+
setMcps,
|
|
125
|
+
setAppName,
|
|
126
|
+
setSessionToken,
|
|
127
|
+
setIframeEl,
|
|
128
|
+
isReady,
|
|
129
|
+
isInitialized
|
|
130
|
+
};
|
|
117
131
|
}
|
|
118
132
|
|
|
119
133
|
// src/components/provider/use-chatbot-window-states.tsx
|
|
@@ -130,7 +144,7 @@ function useChatbotWindowStates() {
|
|
|
130
144
|
return { hasOpened, open, isExpanded, setOpen, setIsExpanded };
|
|
131
145
|
}
|
|
132
146
|
|
|
133
|
-
// src/components/provider/chatbot-
|
|
147
|
+
// src/components/provider/chatbot-provider.tsx
|
|
134
148
|
import { jsx } from "react/jsx-runtime";
|
|
135
149
|
var ChatbotContext = React3.createContext(
|
|
136
150
|
void 0
|
|
@@ -144,7 +158,15 @@ function useChatbot() {
|
|
|
144
158
|
}
|
|
145
159
|
function ChatbotProvider({ children }) {
|
|
146
160
|
const { hasOpened, open, isExpanded, setOpen, setIsExpanded } = useChatbotWindowStates();
|
|
147
|
-
const {
|
|
161
|
+
const {
|
|
162
|
+
setMcps,
|
|
163
|
+
setAppName,
|
|
164
|
+
setSessionToken,
|
|
165
|
+
init,
|
|
166
|
+
isReady,
|
|
167
|
+
isInitialized,
|
|
168
|
+
setIframeEl
|
|
169
|
+
} = useChatbotFrameHandler({
|
|
148
170
|
setOpen,
|
|
149
171
|
setIsExpanded
|
|
150
172
|
});
|
|
@@ -154,6 +176,7 @@ function ChatbotProvider({ children }) {
|
|
|
154
176
|
setOpen,
|
|
155
177
|
isExpanded,
|
|
156
178
|
setIsExpanded,
|
|
179
|
+
setSessionToken,
|
|
157
180
|
init,
|
|
158
181
|
setMcps,
|
|
159
182
|
setAppName,
|
|
@@ -168,33 +191,44 @@ function ChatbotProvider({ children }) {
|
|
|
168
191
|
import React4 from "react";
|
|
169
192
|
|
|
170
193
|
// src/lib/constants.ts
|
|
171
|
-
var PROD_CHATBOT_URL = "https://
|
|
194
|
+
var PROD_CHATBOT_URL = "https://agent.ec-force.com";
|
|
172
195
|
|
|
173
196
|
// src/components/chatbot-frame.tsx
|
|
174
197
|
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
175
198
|
function ChatbotFrame({
|
|
176
199
|
agentId,
|
|
177
200
|
appName,
|
|
201
|
+
initialChatId,
|
|
178
202
|
mcps,
|
|
203
|
+
getSession,
|
|
179
204
|
enabled = true,
|
|
180
205
|
url,
|
|
181
206
|
className
|
|
182
207
|
}) {
|
|
183
208
|
var _a;
|
|
184
|
-
const
|
|
209
|
+
const baseUrl = (_a = url != null ? url : process.env.CHATBOT_URL) != null ? _a : PROD_CHATBOT_URL;
|
|
185
210
|
const { setIframeEl } = useChatbot();
|
|
186
|
-
const { init, setMcps, setAppName, isReady } = useChatbot();
|
|
211
|
+
const { init, setMcps, setAppName, setSessionToken, isReady } = useChatbot();
|
|
187
212
|
const sentInitRef = React4.useRef(false);
|
|
188
213
|
const [currentMcps, setCurrentMcps] = React4.useState();
|
|
189
214
|
const [currentAppName, setCurrentAppName] = React4.useState();
|
|
215
|
+
const [currentSessionToken, setCurrentSessionToken] = React4.useState();
|
|
216
|
+
const sessionToken = useSession({ getSession });
|
|
217
|
+
const shouldInit = enabled && isReady && // getSessionが定義されていれば、currentSessionが設定されるまで待つ
|
|
218
|
+
!!(sessionToken || getSession === void 0);
|
|
190
219
|
React4.useEffect(() => {
|
|
191
|
-
if (
|
|
192
|
-
init({
|
|
220
|
+
if (shouldInit && !sentInitRef.current) {
|
|
221
|
+
init({
|
|
222
|
+
mcps,
|
|
223
|
+
appName,
|
|
224
|
+
sessionToken
|
|
225
|
+
});
|
|
193
226
|
sentInitRef.current = true;
|
|
194
227
|
setCurrentMcps(mcps);
|
|
195
228
|
setCurrentAppName(appName);
|
|
229
|
+
setCurrentSessionToken(sessionToken);
|
|
196
230
|
}
|
|
197
|
-
}, [enabled, init, mcps, appName, isReady]);
|
|
231
|
+
}, [enabled, init, mcps, appName, isReady, sessionToken]);
|
|
198
232
|
React4.useEffect(() => {
|
|
199
233
|
if (sentInitRef.current && mcps && JSON.stringify(currentMcps) !== JSON.stringify(mcps)) {
|
|
200
234
|
setMcps(mcps);
|
|
@@ -207,11 +241,21 @@ function ChatbotFrame({
|
|
|
207
241
|
setAppName(appName);
|
|
208
242
|
}
|
|
209
243
|
}, [appName]);
|
|
244
|
+
React4.useEffect(() => {
|
|
245
|
+
if (sentInitRef.current && sessionToken && currentSessionToken !== sessionToken) {
|
|
246
|
+
setCurrentSessionToken(sessionToken);
|
|
247
|
+
setSessionToken(sessionToken);
|
|
248
|
+
}
|
|
249
|
+
}, [sessionToken]);
|
|
210
250
|
return /* @__PURE__ */ jsx2(
|
|
211
251
|
"iframe",
|
|
212
252
|
{
|
|
213
253
|
ref: setIframeEl,
|
|
214
|
-
src:
|
|
254
|
+
src: buildIframeUrl({
|
|
255
|
+
baseUrl,
|
|
256
|
+
agentId,
|
|
257
|
+
initialChatId
|
|
258
|
+
}),
|
|
215
259
|
className,
|
|
216
260
|
allow: "clipboard-write",
|
|
217
261
|
style: {
|
|
@@ -221,6 +265,47 @@ function ChatbotFrame({
|
|
|
221
265
|
}
|
|
222
266
|
);
|
|
223
267
|
}
|
|
268
|
+
function buildIframeUrl({
|
|
269
|
+
baseUrl,
|
|
270
|
+
agentId,
|
|
271
|
+
initialChatId
|
|
272
|
+
}) {
|
|
273
|
+
const url = new URL(`/embed/${agentId}`, baseUrl);
|
|
274
|
+
if (initialChatId) {
|
|
275
|
+
url.searchParams.set("initialChatId", initialChatId);
|
|
276
|
+
}
|
|
277
|
+
return url.toString();
|
|
278
|
+
}
|
|
279
|
+
function useSession({ getSession }) {
|
|
280
|
+
const { setSessionToken } = useChatbot();
|
|
281
|
+
const [session, setSession] = React4.useState();
|
|
282
|
+
const isFetchingSessionRef = React4.useRef(false);
|
|
283
|
+
React4.useEffect(() => {
|
|
284
|
+
if (!getSession) return;
|
|
285
|
+
let intervalId;
|
|
286
|
+
const fetchSession = async () => {
|
|
287
|
+
if (isFetchingSessionRef.current) return;
|
|
288
|
+
try {
|
|
289
|
+
isFetchingSessionRef.current = true;
|
|
290
|
+
const session2 = await getSession();
|
|
291
|
+
setSession(session2);
|
|
292
|
+
setSessionToken(session2.token);
|
|
293
|
+
} catch (error) {
|
|
294
|
+
console.error("Failed to get session:", error);
|
|
295
|
+
} finally {
|
|
296
|
+
isFetchingSessionRef.current = false;
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
fetchSession();
|
|
300
|
+
intervalId = setInterval(fetchSession, 15 * 60 * 1e3);
|
|
301
|
+
return () => {
|
|
302
|
+
if (intervalId) {
|
|
303
|
+
clearInterval(intervalId);
|
|
304
|
+
}
|
|
305
|
+
};
|
|
306
|
+
}, [getSession, setSessionToken]);
|
|
307
|
+
return session == null ? void 0 : session.token;
|
|
308
|
+
}
|
|
224
309
|
|
|
225
310
|
// src/components/chatbot-sheet.tsx
|
|
226
311
|
import "react";
|
|
@@ -460,5 +545,6 @@ export {
|
|
|
460
545
|
SheetTitle,
|
|
461
546
|
SheetTrigger,
|
|
462
547
|
Tooltip,
|
|
463
|
-
useChatbot
|
|
548
|
+
useChatbot,
|
|
549
|
+
useSession
|
|
464
550
|
};
|
package/dist/lib/constants.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const PROD_CHATBOT_URL = "https://
|
|
1
|
+
export declare const PROD_CHATBOT_URL = "https://agent.ec-force.com";
|
|
2
2
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,+BAA+B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,23 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { PROD_CHATBOT_URL } from "../lib/constants";
|
|
3
|
-
import { useChatbot } from "./provider/chatbot-
|
|
3
|
+
import { useChatbot } from "./provider/chatbot-provider";
|
|
4
4
|
import type { MCP } from "./provider/use-chatbot-frame-handler";
|
|
5
5
|
|
|
6
6
|
export type ChatbotFrameProps = {
|
|
7
7
|
/** 管理画面上のエージェントID */
|
|
8
8
|
agentId: string;
|
|
9
|
+
/** 初期化時のチャットID */
|
|
10
|
+
initialChatId?: string;
|
|
9
11
|
/** エージェントにつなげるMCPの情報 */
|
|
10
12
|
mcps?: MCP[];
|
|
11
13
|
/** アプリ名のメタデータ */
|
|
12
14
|
appName?: string;
|
|
15
|
+
/** セッションを取得するための関数 */
|
|
16
|
+
getSession?: () => Promise<{
|
|
17
|
+
sessionId: string;
|
|
18
|
+
token: string;
|
|
19
|
+
expiresAt: string;
|
|
20
|
+
}>;
|
|
13
21
|
/**
|
|
14
22
|
* trueになるまで、初期化されません。
|
|
15
23
|
* 初期化せれたあとはもう使われません。
|
|
@@ -29,27 +37,43 @@ export type ChatbotFrameProps = {
|
|
|
29
37
|
export function ChatbotFrame({
|
|
30
38
|
agentId,
|
|
31
39
|
appName,
|
|
40
|
+
initialChatId,
|
|
32
41
|
mcps,
|
|
42
|
+
getSession,
|
|
33
43
|
enabled = true,
|
|
34
44
|
url,
|
|
35
45
|
className,
|
|
36
46
|
}: ChatbotFrameProps) {
|
|
37
|
-
const
|
|
47
|
+
const baseUrl = url ?? process.env.CHATBOT_URL ?? PROD_CHATBOT_URL;
|
|
38
48
|
const { setIframeEl } = useChatbot();
|
|
39
|
-
const { init, setMcps, setAppName, isReady } = useChatbot();
|
|
49
|
+
const { init, setMcps, setAppName, setSessionToken, isReady } = useChatbot();
|
|
40
50
|
const sentInitRef = React.useRef(false);
|
|
41
51
|
const [currentMcps, setCurrentMcps] = React.useState<MCP[]>();
|
|
42
52
|
const [currentAppName, setCurrentAppName] = React.useState<string>();
|
|
53
|
+
const [currentSessionToken, setCurrentSessionToken] =
|
|
54
|
+
React.useState<string>();
|
|
55
|
+
const sessionToken = useSession({ getSession });
|
|
56
|
+
|
|
57
|
+
const shouldInit =
|
|
58
|
+
enabled &&
|
|
59
|
+
isReady &&
|
|
60
|
+
// getSessionが定義されていれば、currentSessionが設定されるまで待つ
|
|
61
|
+
!!(sessionToken || getSession === undefined);
|
|
43
62
|
|
|
44
63
|
// 初期化の仕組み
|
|
45
64
|
React.useEffect(() => {
|
|
46
|
-
if (
|
|
47
|
-
init({
|
|
65
|
+
if (shouldInit && !sentInitRef.current) {
|
|
66
|
+
init({
|
|
67
|
+
mcps,
|
|
68
|
+
appName,
|
|
69
|
+
sessionToken,
|
|
70
|
+
});
|
|
48
71
|
sentInitRef.current = true;
|
|
49
72
|
setCurrentMcps(mcps);
|
|
50
73
|
setCurrentAppName(appName);
|
|
74
|
+
setCurrentSessionToken(sessionToken);
|
|
51
75
|
}
|
|
52
|
-
}, [enabled, init, mcps, appName, isReady]);
|
|
76
|
+
}, [enabled, init, mcps, appName, isReady, sessionToken]);
|
|
53
77
|
|
|
54
78
|
// mcpsの更新の仕組み
|
|
55
79
|
React.useEffect(() => {
|
|
@@ -71,10 +95,26 @@ export function ChatbotFrame({
|
|
|
71
95
|
}
|
|
72
96
|
}, [appName]);
|
|
73
97
|
|
|
98
|
+
// sessionTokenの更新の仕組み
|
|
99
|
+
React.useEffect(() => {
|
|
100
|
+
if (
|
|
101
|
+
sentInitRef.current &&
|
|
102
|
+
sessionToken &&
|
|
103
|
+
currentSessionToken !== sessionToken
|
|
104
|
+
) {
|
|
105
|
+
setCurrentSessionToken(sessionToken);
|
|
106
|
+
setSessionToken(sessionToken);
|
|
107
|
+
}
|
|
108
|
+
}, [sessionToken]);
|
|
109
|
+
|
|
74
110
|
return (
|
|
75
111
|
<iframe
|
|
76
112
|
ref={setIframeEl}
|
|
77
|
-
src={
|
|
113
|
+
src={buildIframeUrl({
|
|
114
|
+
baseUrl,
|
|
115
|
+
agentId,
|
|
116
|
+
initialChatId,
|
|
117
|
+
})}
|
|
78
118
|
className={className}
|
|
79
119
|
allow="clipboard-write"
|
|
80
120
|
style={{
|
|
@@ -84,3 +124,72 @@ export function ChatbotFrame({
|
|
|
84
124
|
/>
|
|
85
125
|
);
|
|
86
126
|
}
|
|
127
|
+
|
|
128
|
+
function buildIframeUrl({
|
|
129
|
+
baseUrl,
|
|
130
|
+
agentId,
|
|
131
|
+
initialChatId,
|
|
132
|
+
}: {
|
|
133
|
+
baseUrl: string;
|
|
134
|
+
agentId: string;
|
|
135
|
+
initialChatId?: string;
|
|
136
|
+
}) {
|
|
137
|
+
const url = new URL(`/embed/${agentId}`, baseUrl);
|
|
138
|
+
|
|
139
|
+
if (initialChatId) {
|
|
140
|
+
url.searchParams.set("initialChatId", initialChatId);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return url.toString();
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export type SessionData = {
|
|
147
|
+
sessionId: string;
|
|
148
|
+
token: string;
|
|
149
|
+
expiresAt: string;
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
export type UseSessionProps = {
|
|
153
|
+
getSession?: () => Promise<SessionData>;
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
export function useSession({ getSession }: UseSessionProps) {
|
|
157
|
+
const { setSessionToken } = useChatbot();
|
|
158
|
+
const [session, setSession] = React.useState<SessionData>();
|
|
159
|
+
const isFetchingSessionRef = React.useRef(false);
|
|
160
|
+
|
|
161
|
+
// セッションの取得と定期更新
|
|
162
|
+
React.useEffect(() => {
|
|
163
|
+
if (!getSession) return;
|
|
164
|
+
|
|
165
|
+
let intervalId: NodeJS.Timeout;
|
|
166
|
+
|
|
167
|
+
const fetchSession = async () => {
|
|
168
|
+
if (isFetchingSessionRef.current) return;
|
|
169
|
+
try {
|
|
170
|
+
isFetchingSessionRef.current = true;
|
|
171
|
+
const session = await getSession();
|
|
172
|
+
setSession(session);
|
|
173
|
+
setSessionToken(session.token);
|
|
174
|
+
} catch (error) {
|
|
175
|
+
console.error("Failed to get session:", error);
|
|
176
|
+
} finally {
|
|
177
|
+
isFetchingSessionRef.current = false;
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
// 初回実行
|
|
182
|
+
fetchSession();
|
|
183
|
+
|
|
184
|
+
// 15分ごとに実行
|
|
185
|
+
intervalId = setInterval(fetchSession, 15 * 60 * 1000);
|
|
186
|
+
|
|
187
|
+
return () => {
|
|
188
|
+
if (intervalId) {
|
|
189
|
+
clearInterval(intervalId);
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
}, [getSession, setSessionToken]);
|
|
193
|
+
|
|
194
|
+
return session?.token;
|
|
195
|
+
}
|
|
@@ -23,6 +23,8 @@ type ChatbotContextType = {
|
|
|
23
23
|
setMcps: (mcps: MCP[]) => void;
|
|
24
24
|
/** アプリ名を設定 */
|
|
25
25
|
setAppName: (appName: string) => void;
|
|
26
|
+
/** セッショントークンを設定 */
|
|
27
|
+
setSessionToken: (sessionToken: string) => void;
|
|
26
28
|
/** チャットボットが準備できたか */
|
|
27
29
|
isReady: boolean;
|
|
28
30
|
/** チャットボットが初期化されたか */
|
|
@@ -53,11 +55,18 @@ type ChatbotProviderProps = {
|
|
|
53
55
|
export function ChatbotProvider({ children }: ChatbotProviderProps) {
|
|
54
56
|
const { hasOpened, open, isExpanded, setOpen, setIsExpanded } =
|
|
55
57
|
useChatbotWindowStates();
|
|
56
|
-
const {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
const {
|
|
59
|
+
setMcps,
|
|
60
|
+
setAppName,
|
|
61
|
+
setSessionToken,
|
|
62
|
+
init,
|
|
63
|
+
isReady,
|
|
64
|
+
isInitialized,
|
|
65
|
+
setIframeEl,
|
|
66
|
+
} = useChatbotFrameHandler({
|
|
67
|
+
setOpen,
|
|
68
|
+
setIsExpanded,
|
|
69
|
+
});
|
|
61
70
|
|
|
62
71
|
const value = {
|
|
63
72
|
hasOpened,
|
|
@@ -65,6 +74,7 @@ export function ChatbotProvider({ children }: ChatbotProviderProps) {
|
|
|
65
74
|
setOpen,
|
|
66
75
|
isExpanded,
|
|
67
76
|
setIsExpanded,
|
|
77
|
+
setSessionToken,
|
|
68
78
|
init,
|
|
69
79
|
setMcps,
|
|
70
80
|
setAppName,
|
|
@@ -16,6 +16,7 @@ export type MCP = {
|
|
|
16
16
|
export type InitProps = {
|
|
17
17
|
mcps?: MCP[];
|
|
18
18
|
appName?: string;
|
|
19
|
+
sessionToken?: string;
|
|
19
20
|
};
|
|
20
21
|
|
|
21
22
|
export type ParentMessage =
|
|
@@ -27,10 +28,15 @@ export type ParentMessage =
|
|
|
27
28
|
type: "appName";
|
|
28
29
|
appName: string;
|
|
29
30
|
}
|
|
31
|
+
| {
|
|
32
|
+
type: "sessionToken";
|
|
33
|
+
sessionToken: string;
|
|
34
|
+
}
|
|
30
35
|
| {
|
|
31
36
|
type: "init";
|
|
32
37
|
mcps?: MCP[];
|
|
33
38
|
appName?: string;
|
|
39
|
+
sessionToken?: string;
|
|
34
40
|
};
|
|
35
41
|
|
|
36
42
|
export function useChatbotFrameHandler({
|
|
@@ -83,6 +89,13 @@ export function useChatbotFrameHandler({
|
|
|
83
89
|
[postMessage],
|
|
84
90
|
);
|
|
85
91
|
|
|
92
|
+
const setSessionToken = React.useCallback(
|
|
93
|
+
(sessionToken: string) => {
|
|
94
|
+
postMessage({ type: "sessionToken", sessionToken });
|
|
95
|
+
},
|
|
96
|
+
[postMessage],
|
|
97
|
+
);
|
|
98
|
+
|
|
86
99
|
// Initialize and setup listeners
|
|
87
100
|
React.useEffect(() => {
|
|
88
101
|
const iframe = iframeEl;
|
|
@@ -126,5 +139,13 @@ export function useChatbotFrameHandler({
|
|
|
126
139
|
};
|
|
127
140
|
}, [iframeEl]); // Run when iframe gets mounted
|
|
128
141
|
|
|
129
|
-
return {
|
|
142
|
+
return {
|
|
143
|
+
init,
|
|
144
|
+
setMcps,
|
|
145
|
+
setAppName,
|
|
146
|
+
setSessionToken,
|
|
147
|
+
setIframeEl,
|
|
148
|
+
isReady,
|
|
149
|
+
isInitialized,
|
|
150
|
+
};
|
|
130
151
|
}
|
package/src/components/sheet.tsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as SheetPrimitive from "@radix-ui/react-dialog";
|
|
2
2
|
import * as React from "react";
|
|
3
|
-
import { useChatbot } from "./provider/chatbot-
|
|
3
|
+
import { useChatbot } from "./provider/chatbot-provider";
|
|
4
4
|
|
|
5
5
|
function Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {
|
|
6
6
|
const { open, setOpen } = useChatbot();
|
package/src/index.ts
CHANGED
package/src/lib/constants.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const PROD_CHATBOT_URL = "https://
|
|
1
|
+
export const PROD_CHATBOT_URL = "https://agent.ec-force.com";
|