@super_studio/ecforce-ai-agent-react 0.4.0 → 0.5.1
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 +34 -1
- package/dist/components/chatbot-frame.d.ts.map +1 -1
- package/dist/components/provider/chatbot-proivder.d.ts +2 -0
- package/dist/components/provider/chatbot-proivder.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 +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +92 -22
- package/dist/index.mjs +92 -22
- package/package.json +1 -1
- package/src/components/chatbot-frame.tsx +145 -1
- package/src/components/provider/chatbot-proivder.tsx +15 -5
- package/src/components/provider/use-chatbot-frame-handler.tsx +22 -1
- package/src/index.ts +0 -1
- package/dist/hooks/use-chatbot-config.d.ts +0 -19
- package/dist/hooks/use-chatbot-config.d.ts.map +0 -1
- package/src/hooks/use-chatbot-config.tsx +0 -60
|
@@ -1,7 +1,40 @@
|
|
|
1
|
+
import type { MCP } from "./provider/use-chatbot-frame-handler";
|
|
1
2
|
export type ChatbotFrameProps = {
|
|
3
|
+
/** 管理画面上のエージェントID */
|
|
2
4
|
agentId: string;
|
|
5
|
+
/** エージェントにつなげるMCPの情報 */
|
|
6
|
+
mcps?: MCP[];
|
|
7
|
+
/** アプリ名のメタデータ */
|
|
8
|
+
appName?: string;
|
|
9
|
+
/** セッションを取得するための関数 */
|
|
10
|
+
getSession?: () => Promise<{
|
|
11
|
+
sessionId: string;
|
|
12
|
+
token: string;
|
|
13
|
+
expiresAt: string;
|
|
14
|
+
}>;
|
|
15
|
+
/**
|
|
16
|
+
* trueになるまで、初期化されません。
|
|
17
|
+
* 初期化せれたあとはもう使われません。
|
|
18
|
+
* @default true
|
|
19
|
+
*/
|
|
20
|
+
enabled?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* エージェントのURLを上書きしたい場合にこちらを使います。
|
|
23
|
+
* 基本的には使われません。
|
|
24
|
+
* [CHATBOT_URL]の環境変数でも設定可能。
|
|
25
|
+
* @internal
|
|
26
|
+
*/
|
|
3
27
|
url?: string;
|
|
4
28
|
className?: string;
|
|
5
29
|
};
|
|
6
|
-
export declare function ChatbotFrame({ agentId,
|
|
30
|
+
export declare function ChatbotFrame({ agentId, appName, mcps, getSession, enabled, url, className, }: ChatbotFrameProps): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
export type SessionData = {
|
|
32
|
+
sessionId: string;
|
|
33
|
+
token: string;
|
|
34
|
+
expiresAt: string;
|
|
35
|
+
};
|
|
36
|
+
export type UseSessionProps = {
|
|
37
|
+
getSession?: () => Promise<SessionData>;
|
|
38
|
+
};
|
|
39
|
+
export declare function useSession({ getSession }: UseSessionProps): string | undefined;
|
|
7
40
|
//# 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,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,YAAY,CAAC,
|
|
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,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,IAAI,EACJ,UAAU,EACV,OAAc,EACd,GAAG,EACH,SAAS,GACV,EAAE,iBAAiB,2CA4EnB;AAED,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
|
/** チャットボットが初期化されたか */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatbot-proivder.d.ts","sourceRoot":"","sources":["../../../src/components/provider/chatbot-proivder.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,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,
|
|
1
|
+
{"version":3,"file":"chatbot-proivder.d.ts","sourceRoot":"","sources":["../../../src/components/provider/chatbot-proivder.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.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wCAAwC,CAAC;AACvD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wCAAwC,CAAC;AACvD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -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
|
|
@@ -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,
|
|
@@ -164,25 +187,47 @@ function ChatbotProvider({ children }) {
|
|
|
164
187
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ChatbotContext.Provider, { value, children });
|
|
165
188
|
}
|
|
166
189
|
|
|
167
|
-
// src/
|
|
190
|
+
// src/components/chatbot-frame.tsx
|
|
191
|
+
|
|
168
192
|
|
|
169
|
-
|
|
170
|
-
|
|
193
|
+
// src/lib/constants.ts
|
|
194
|
+
var PROD_CHATBOT_URL = "https://ecforce-ai-agent.vercel.app";
|
|
195
|
+
|
|
196
|
+
// src/components/chatbot-frame.tsx
|
|
197
|
+
|
|
198
|
+
function ChatbotFrame({
|
|
199
|
+
agentId,
|
|
171
200
|
appName,
|
|
172
|
-
|
|
201
|
+
mcps,
|
|
202
|
+
getSession,
|
|
203
|
+
enabled = true,
|
|
204
|
+
url,
|
|
205
|
+
className
|
|
173
206
|
}) {
|
|
174
|
-
|
|
207
|
+
var _a;
|
|
208
|
+
const chatbotUrl = (_a = url != null ? url : process.env.CHATBOT_URL) != null ? _a : PROD_CHATBOT_URL;
|
|
209
|
+
const { setIframeEl } = useChatbot();
|
|
210
|
+
const { init, setMcps, setAppName, setSessionToken, isReady } = useChatbot();
|
|
175
211
|
const sentInitRef = React5.default.useRef(false);
|
|
176
212
|
const [currentMcps, setCurrentMcps] = React5.default.useState();
|
|
177
213
|
const [currentAppName, setCurrentAppName] = React5.default.useState();
|
|
214
|
+
const [currentSessionToken, setCurrentSessionToken] = React5.default.useState();
|
|
215
|
+
const sessionToken = useSession({ getSession });
|
|
216
|
+
const shouldInit = enabled && isReady && // getSessionが定義されていれば、currentSessionが設定されるまで待つ
|
|
217
|
+
!!(sessionToken || getSession === void 0);
|
|
178
218
|
React5.default.useEffect(() => {
|
|
179
|
-
if (
|
|
180
|
-
init({
|
|
219
|
+
if (shouldInit && !sentInitRef.current) {
|
|
220
|
+
init({
|
|
221
|
+
mcps,
|
|
222
|
+
appName,
|
|
223
|
+
sessionToken
|
|
224
|
+
});
|
|
181
225
|
sentInitRef.current = true;
|
|
182
226
|
setCurrentMcps(mcps);
|
|
183
227
|
setCurrentAppName(appName);
|
|
228
|
+
setCurrentSessionToken(sessionToken);
|
|
184
229
|
}
|
|
185
|
-
}, [enabled, init, mcps, appName, isReady]);
|
|
230
|
+
}, [enabled, init, mcps, appName, isReady, sessionToken]);
|
|
186
231
|
React5.default.useEffect(() => {
|
|
187
232
|
if (sentInitRef.current && mcps && JSON.stringify(currentMcps) !== JSON.stringify(mcps)) {
|
|
188
233
|
setMcps(mcps);
|
|
@@ -195,17 +240,12 @@ function useChatbotConfig({
|
|
|
195
240
|
setAppName(appName);
|
|
196
241
|
}
|
|
197
242
|
}, [appName]);
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
function ChatbotFrame({ agentId, className, url }) {
|
|
206
|
-
var _a;
|
|
207
|
-
const chatbotUrl = (_a = url != null ? url : process.env.CHATBOT_URL) != null ? _a : PROD_CHATBOT_URL;
|
|
208
|
-
const { setIframeEl } = useChatbot();
|
|
243
|
+
React5.default.useEffect(() => {
|
|
244
|
+
if (sentInitRef.current && sessionToken && currentSessionToken !== sessionToken) {
|
|
245
|
+
setCurrentSessionToken(sessionToken);
|
|
246
|
+
setSessionToken(sessionToken);
|
|
247
|
+
}
|
|
248
|
+
}, [sessionToken]);
|
|
209
249
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
210
250
|
"iframe",
|
|
211
251
|
{
|
|
@@ -220,6 +260,36 @@ function ChatbotFrame({ agentId, className, url }) {
|
|
|
220
260
|
}
|
|
221
261
|
);
|
|
222
262
|
}
|
|
263
|
+
function useSession({ getSession }) {
|
|
264
|
+
const { setSessionToken } = useChatbot();
|
|
265
|
+
const [session, setSession] = React5.default.useState();
|
|
266
|
+
const isFetchingSessionRef = React5.default.useRef(false);
|
|
267
|
+
React5.default.useEffect(() => {
|
|
268
|
+
if (!getSession) return;
|
|
269
|
+
let intervalId;
|
|
270
|
+
const fetchSession = async () => {
|
|
271
|
+
if (isFetchingSessionRef.current) return;
|
|
272
|
+
try {
|
|
273
|
+
isFetchingSessionRef.current = true;
|
|
274
|
+
const session2 = await getSession();
|
|
275
|
+
setSession(session2);
|
|
276
|
+
setSessionToken(session2.token);
|
|
277
|
+
} catch (error) {
|
|
278
|
+
console.error("Failed to get session:", error);
|
|
279
|
+
} finally {
|
|
280
|
+
isFetchingSessionRef.current = false;
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
fetchSession();
|
|
284
|
+
intervalId = setInterval(fetchSession, 15 * 60 * 1e3);
|
|
285
|
+
return () => {
|
|
286
|
+
if (intervalId) {
|
|
287
|
+
clearInterval(intervalId);
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
}, [getSession, setSessionToken]);
|
|
291
|
+
return session == null ? void 0 : session.token;
|
|
292
|
+
}
|
|
223
293
|
|
|
224
294
|
// src/components/chatbot-sheet.tsx
|
|
225
295
|
|
|
@@ -461,4 +531,4 @@ function EcforceAiIcon() {
|
|
|
461
531
|
|
|
462
532
|
|
|
463
533
|
|
|
464
|
-
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.
|
|
534
|
+
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
|
@@ -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
|
|
@@ -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,
|
|
@@ -164,25 +187,47 @@ function ChatbotProvider({ children }) {
|
|
|
164
187
|
return /* @__PURE__ */ jsx(ChatbotContext.Provider, { value, children });
|
|
165
188
|
}
|
|
166
189
|
|
|
167
|
-
// src/
|
|
190
|
+
// src/components/chatbot-frame.tsx
|
|
168
191
|
import React4 from "react";
|
|
169
|
-
|
|
170
|
-
|
|
192
|
+
|
|
193
|
+
// src/lib/constants.ts
|
|
194
|
+
var PROD_CHATBOT_URL = "https://ecforce-ai-agent.vercel.app";
|
|
195
|
+
|
|
196
|
+
// src/components/chatbot-frame.tsx
|
|
197
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
198
|
+
function ChatbotFrame({
|
|
199
|
+
agentId,
|
|
171
200
|
appName,
|
|
172
|
-
|
|
201
|
+
mcps,
|
|
202
|
+
getSession,
|
|
203
|
+
enabled = true,
|
|
204
|
+
url,
|
|
205
|
+
className
|
|
173
206
|
}) {
|
|
174
|
-
|
|
207
|
+
var _a;
|
|
208
|
+
const chatbotUrl = (_a = url != null ? url : process.env.CHATBOT_URL) != null ? _a : PROD_CHATBOT_URL;
|
|
209
|
+
const { setIframeEl } = useChatbot();
|
|
210
|
+
const { init, setMcps, setAppName, setSessionToken, isReady } = useChatbot();
|
|
175
211
|
const sentInitRef = React4.useRef(false);
|
|
176
212
|
const [currentMcps, setCurrentMcps] = React4.useState();
|
|
177
213
|
const [currentAppName, setCurrentAppName] = React4.useState();
|
|
214
|
+
const [currentSessionToken, setCurrentSessionToken] = React4.useState();
|
|
215
|
+
const sessionToken = useSession({ getSession });
|
|
216
|
+
const shouldInit = enabled && isReady && // getSessionが定義されていれば、currentSessionが設定されるまで待つ
|
|
217
|
+
!!(sessionToken || getSession === void 0);
|
|
178
218
|
React4.useEffect(() => {
|
|
179
|
-
if (
|
|
180
|
-
init({
|
|
219
|
+
if (shouldInit && !sentInitRef.current) {
|
|
220
|
+
init({
|
|
221
|
+
mcps,
|
|
222
|
+
appName,
|
|
223
|
+
sessionToken
|
|
224
|
+
});
|
|
181
225
|
sentInitRef.current = true;
|
|
182
226
|
setCurrentMcps(mcps);
|
|
183
227
|
setCurrentAppName(appName);
|
|
228
|
+
setCurrentSessionToken(sessionToken);
|
|
184
229
|
}
|
|
185
|
-
}, [enabled, init, mcps, appName, isReady]);
|
|
230
|
+
}, [enabled, init, mcps, appName, isReady, sessionToken]);
|
|
186
231
|
React4.useEffect(() => {
|
|
187
232
|
if (sentInitRef.current && mcps && JSON.stringify(currentMcps) !== JSON.stringify(mcps)) {
|
|
188
233
|
setMcps(mcps);
|
|
@@ -195,17 +240,12 @@ function useChatbotConfig({
|
|
|
195
240
|
setAppName(appName);
|
|
196
241
|
}
|
|
197
242
|
}, [appName]);
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
205
|
-
function ChatbotFrame({ agentId, className, url }) {
|
|
206
|
-
var _a;
|
|
207
|
-
const chatbotUrl = (_a = url != null ? url : process.env.CHATBOT_URL) != null ? _a : PROD_CHATBOT_URL;
|
|
208
|
-
const { setIframeEl } = useChatbot();
|
|
243
|
+
React4.useEffect(() => {
|
|
244
|
+
if (sentInitRef.current && sessionToken && currentSessionToken !== sessionToken) {
|
|
245
|
+
setCurrentSessionToken(sessionToken);
|
|
246
|
+
setSessionToken(sessionToken);
|
|
247
|
+
}
|
|
248
|
+
}, [sessionToken]);
|
|
209
249
|
return /* @__PURE__ */ jsx2(
|
|
210
250
|
"iframe",
|
|
211
251
|
{
|
|
@@ -220,6 +260,36 @@ function ChatbotFrame({ agentId, className, url }) {
|
|
|
220
260
|
}
|
|
221
261
|
);
|
|
222
262
|
}
|
|
263
|
+
function useSession({ getSession }) {
|
|
264
|
+
const { setSessionToken } = useChatbot();
|
|
265
|
+
const [session, setSession] = React4.useState();
|
|
266
|
+
const isFetchingSessionRef = React4.useRef(false);
|
|
267
|
+
React4.useEffect(() => {
|
|
268
|
+
if (!getSession) return;
|
|
269
|
+
let intervalId;
|
|
270
|
+
const fetchSession = async () => {
|
|
271
|
+
if (isFetchingSessionRef.current) return;
|
|
272
|
+
try {
|
|
273
|
+
isFetchingSessionRef.current = true;
|
|
274
|
+
const session2 = await getSession();
|
|
275
|
+
setSession(session2);
|
|
276
|
+
setSessionToken(session2.token);
|
|
277
|
+
} catch (error) {
|
|
278
|
+
console.error("Failed to get session:", error);
|
|
279
|
+
} finally {
|
|
280
|
+
isFetchingSessionRef.current = false;
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
fetchSession();
|
|
284
|
+
intervalId = setInterval(fetchSession, 15 * 60 * 1e3);
|
|
285
|
+
return () => {
|
|
286
|
+
if (intervalId) {
|
|
287
|
+
clearInterval(intervalId);
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
}, [getSession, setSessionToken]);
|
|
291
|
+
return session == null ? void 0 : session.token;
|
|
292
|
+
}
|
|
223
293
|
|
|
224
294
|
// src/components/chatbot-sheet.tsx
|
|
225
295
|
import "react";
|
|
@@ -460,5 +530,5 @@ export {
|
|
|
460
530
|
SheetTrigger,
|
|
461
531
|
Tooltip,
|
|
462
532
|
useChatbot,
|
|
463
|
-
|
|
533
|
+
useSession
|
|
464
534
|
};
|
package/package.json
CHANGED
|
@@ -1,15 +1,108 @@
|
|
|
1
|
+
import React from "react";
|
|
1
2
|
import { PROD_CHATBOT_URL } from "../lib/constants";
|
|
2
3
|
import { useChatbot } from "./provider/chatbot-proivder";
|
|
4
|
+
import type { MCP } from "./provider/use-chatbot-frame-handler";
|
|
3
5
|
|
|
4
6
|
export type ChatbotFrameProps = {
|
|
7
|
+
/** 管理画面上のエージェントID */
|
|
5
8
|
agentId: string;
|
|
9
|
+
/** エージェントにつなげるMCPの情報 */
|
|
10
|
+
mcps?: MCP[];
|
|
11
|
+
/** アプリ名のメタデータ */
|
|
12
|
+
appName?: string;
|
|
13
|
+
/** セッションを取得するための関数 */
|
|
14
|
+
getSession?: () => Promise<{
|
|
15
|
+
sessionId: string;
|
|
16
|
+
token: string;
|
|
17
|
+
expiresAt: string;
|
|
18
|
+
}>;
|
|
19
|
+
/**
|
|
20
|
+
* trueになるまで、初期化されません。
|
|
21
|
+
* 初期化せれたあとはもう使われません。
|
|
22
|
+
* @default true
|
|
23
|
+
*/
|
|
24
|
+
enabled?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* エージェントのURLを上書きしたい場合にこちらを使います。
|
|
27
|
+
* 基本的には使われません。
|
|
28
|
+
* [CHATBOT_URL]の環境変数でも設定可能。
|
|
29
|
+
* @internal
|
|
30
|
+
*/
|
|
6
31
|
url?: string;
|
|
7
32
|
className?: string;
|
|
8
33
|
};
|
|
9
34
|
|
|
10
|
-
export function ChatbotFrame({
|
|
35
|
+
export function ChatbotFrame({
|
|
36
|
+
agentId,
|
|
37
|
+
appName,
|
|
38
|
+
mcps,
|
|
39
|
+
getSession,
|
|
40
|
+
enabled = true,
|
|
41
|
+
url,
|
|
42
|
+
className,
|
|
43
|
+
}: ChatbotFrameProps) {
|
|
11
44
|
const chatbotUrl = url ?? process.env.CHATBOT_URL ?? PROD_CHATBOT_URL;
|
|
12
45
|
const { setIframeEl } = useChatbot();
|
|
46
|
+
const { init, setMcps, setAppName, setSessionToken, isReady } = useChatbot();
|
|
47
|
+
const sentInitRef = React.useRef(false);
|
|
48
|
+
const [currentMcps, setCurrentMcps] = React.useState<MCP[]>();
|
|
49
|
+
const [currentAppName, setCurrentAppName] = React.useState<string>();
|
|
50
|
+
const [currentSessionToken, setCurrentSessionToken] =
|
|
51
|
+
React.useState<string>();
|
|
52
|
+
const sessionToken = useSession({ getSession });
|
|
53
|
+
|
|
54
|
+
const shouldInit =
|
|
55
|
+
enabled &&
|
|
56
|
+
isReady &&
|
|
57
|
+
// getSessionが定義されていれば、currentSessionが設定されるまで待つ
|
|
58
|
+
!!(sessionToken || getSession === undefined);
|
|
59
|
+
|
|
60
|
+
// 初期化の仕組み
|
|
61
|
+
React.useEffect(() => {
|
|
62
|
+
if (shouldInit && !sentInitRef.current) {
|
|
63
|
+
init({
|
|
64
|
+
mcps,
|
|
65
|
+
appName,
|
|
66
|
+
sessionToken,
|
|
67
|
+
});
|
|
68
|
+
sentInitRef.current = true;
|
|
69
|
+
setCurrentMcps(mcps);
|
|
70
|
+
setCurrentAppName(appName);
|
|
71
|
+
setCurrentSessionToken(sessionToken);
|
|
72
|
+
}
|
|
73
|
+
}, [enabled, init, mcps, appName, isReady, sessionToken]);
|
|
74
|
+
|
|
75
|
+
// mcpsの更新の仕組み
|
|
76
|
+
React.useEffect(() => {
|
|
77
|
+
if (
|
|
78
|
+
sentInitRef.current &&
|
|
79
|
+
mcps &&
|
|
80
|
+
JSON.stringify(currentMcps) !== JSON.stringify(mcps)
|
|
81
|
+
) {
|
|
82
|
+
setMcps(mcps);
|
|
83
|
+
setCurrentMcps(mcps);
|
|
84
|
+
}
|
|
85
|
+
}, [mcps]);
|
|
86
|
+
|
|
87
|
+
// appNameの更新の仕組み
|
|
88
|
+
React.useEffect(() => {
|
|
89
|
+
if (sentInitRef.current && appName && currentAppName !== appName) {
|
|
90
|
+
setCurrentAppName(appName);
|
|
91
|
+
setAppName(appName);
|
|
92
|
+
}
|
|
93
|
+
}, [appName]);
|
|
94
|
+
|
|
95
|
+
// sessionTokenの更新の仕組み
|
|
96
|
+
React.useEffect(() => {
|
|
97
|
+
if (
|
|
98
|
+
sentInitRef.current &&
|
|
99
|
+
sessionToken &&
|
|
100
|
+
currentSessionToken !== sessionToken
|
|
101
|
+
) {
|
|
102
|
+
setCurrentSessionToken(sessionToken);
|
|
103
|
+
setSessionToken(sessionToken);
|
|
104
|
+
}
|
|
105
|
+
}, [sessionToken]);
|
|
13
106
|
|
|
14
107
|
return (
|
|
15
108
|
<iframe
|
|
@@ -24,3 +117,54 @@ export function ChatbotFrame({ agentId, className, url }: ChatbotFrameProps) {
|
|
|
24
117
|
/>
|
|
25
118
|
);
|
|
26
119
|
}
|
|
120
|
+
|
|
121
|
+
export type SessionData = {
|
|
122
|
+
sessionId: string;
|
|
123
|
+
token: string;
|
|
124
|
+
expiresAt: string;
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
export type UseSessionProps = {
|
|
128
|
+
getSession?: () => Promise<SessionData>;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
export function useSession({ getSession }: UseSessionProps) {
|
|
132
|
+
const { setSessionToken } = useChatbot();
|
|
133
|
+
const [session, setSession] = React.useState<SessionData>();
|
|
134
|
+
const isFetchingSessionRef = React.useRef(false);
|
|
135
|
+
|
|
136
|
+
// セッションの取得と定期更新
|
|
137
|
+
React.useEffect(() => {
|
|
138
|
+
if (!getSession) return;
|
|
139
|
+
|
|
140
|
+
let intervalId: NodeJS.Timeout;
|
|
141
|
+
|
|
142
|
+
const fetchSession = async () => {
|
|
143
|
+
if (isFetchingSessionRef.current) return;
|
|
144
|
+
try {
|
|
145
|
+
isFetchingSessionRef.current = true;
|
|
146
|
+
const session = await getSession();
|
|
147
|
+
setSession(session);
|
|
148
|
+
setSessionToken(session.token);
|
|
149
|
+
} catch (error) {
|
|
150
|
+
console.error("Failed to get session:", error);
|
|
151
|
+
} finally {
|
|
152
|
+
isFetchingSessionRef.current = false;
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
// 初回実行
|
|
157
|
+
fetchSession();
|
|
158
|
+
|
|
159
|
+
// 15分ごとに実行
|
|
160
|
+
intervalId = setInterval(fetchSession, 15 * 60 * 1000);
|
|
161
|
+
|
|
162
|
+
return () => {
|
|
163
|
+
if (intervalId) {
|
|
164
|
+
clearInterval(intervalId);
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
}, [getSession, setSessionToken]);
|
|
168
|
+
|
|
169
|
+
return session?.token;
|
|
170
|
+
}
|
|
@@ -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/index.ts
CHANGED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { type MCP } from "../components/provider/use-chatbot-frame-handler";
|
|
2
|
-
type ChatbotConfig = {
|
|
3
|
-
/** エージェントにつなげるMCPの情報 */
|
|
4
|
-
mcps?: MCP[];
|
|
5
|
-
/** アプリ名のメタデータ */
|
|
6
|
-
appName?: string;
|
|
7
|
-
/**
|
|
8
|
-
* trueになるまで、初期化されません。
|
|
9
|
-
* 初期化せれたあとはもう使われません。
|
|
10
|
-
* @default true
|
|
11
|
-
*/
|
|
12
|
-
enabled?: boolean;
|
|
13
|
-
};
|
|
14
|
-
/**
|
|
15
|
-
* このフックに渡される情報で受動的にinitを呼び出し、mcpsとappNameを更新する
|
|
16
|
-
*/
|
|
17
|
-
export declare function useChatbotConfig({ mcps, appName, enabled, }: ChatbotConfig): void;
|
|
18
|
-
export {};
|
|
19
|
-
//# sourceMappingURL=use-chatbot-config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-chatbot-config.d.ts","sourceRoot":"","sources":["../../src/hooks/use-chatbot-config.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,kDAAkD,CAAC;AAE5E,KAAK,aAAa,GAAG;IACnB,wBAAwB;IACxB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,iBAAiB;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,OAAO,EACP,OAAc,GACf,EAAE,aAAa,QAmCf"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { useChatbot } from "../components/provider/chatbot-proivder";
|
|
3
|
-
import { type MCP } from "../components/provider/use-chatbot-frame-handler";
|
|
4
|
-
|
|
5
|
-
type ChatbotConfig = {
|
|
6
|
-
/** エージェントにつなげるMCPの情報 */
|
|
7
|
-
mcps?: MCP[];
|
|
8
|
-
/** アプリ名のメタデータ */
|
|
9
|
-
appName?: string;
|
|
10
|
-
/**
|
|
11
|
-
* trueになるまで、初期化されません。
|
|
12
|
-
* 初期化せれたあとはもう使われません。
|
|
13
|
-
* @default true
|
|
14
|
-
*/
|
|
15
|
-
enabled?: boolean;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* このフックに渡される情報で受動的にinitを呼び出し、mcpsとappNameを更新する
|
|
20
|
-
*/
|
|
21
|
-
export function useChatbotConfig({
|
|
22
|
-
mcps,
|
|
23
|
-
appName,
|
|
24
|
-
enabled = true,
|
|
25
|
-
}: ChatbotConfig) {
|
|
26
|
-
const { init, setMcps, setAppName, isReady } = useChatbot();
|
|
27
|
-
const sentInitRef = React.useRef(false);
|
|
28
|
-
const [currentMcps, setCurrentMcps] = React.useState<MCP[]>();
|
|
29
|
-
const [currentAppName, setCurrentAppName] = React.useState<string>();
|
|
30
|
-
|
|
31
|
-
// 初期化の仕組み
|
|
32
|
-
React.useEffect(() => {
|
|
33
|
-
if (enabled && isReady && !sentInitRef.current) {
|
|
34
|
-
init({ mcps, appName });
|
|
35
|
-
sentInitRef.current = true;
|
|
36
|
-
setCurrentMcps(mcps);
|
|
37
|
-
setCurrentAppName(appName);
|
|
38
|
-
}
|
|
39
|
-
}, [enabled, init, mcps, appName, isReady]);
|
|
40
|
-
|
|
41
|
-
// mcpsの更新の仕組み
|
|
42
|
-
React.useEffect(() => {
|
|
43
|
-
if (
|
|
44
|
-
sentInitRef.current &&
|
|
45
|
-
mcps &&
|
|
46
|
-
JSON.stringify(currentMcps) !== JSON.stringify(mcps)
|
|
47
|
-
) {
|
|
48
|
-
setMcps(mcps);
|
|
49
|
-
setCurrentMcps(mcps);
|
|
50
|
-
}
|
|
51
|
-
}, [mcps]);
|
|
52
|
-
|
|
53
|
-
// appNameの更新の仕組み
|
|
54
|
-
React.useEffect(() => {
|
|
55
|
-
if (sentInitRef.current && appName && currentAppName !== appName) {
|
|
56
|
-
setCurrentAppName(appName);
|
|
57
|
-
setAppName(appName);
|
|
58
|
-
}
|
|
59
|
-
}, [appName]);
|
|
60
|
-
}
|