integrate-sdk 0.5.5 → 0.5.7
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/index.js +23 -2
- package/dist/react.js +77 -36
- package/dist/server.js +38 -8
- package/dist/src/client.d.ts +8 -0
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/config/types.d.ts +20 -1
- package/dist/src/config/types.d.ts.map +1 -1
- package/dist/src/react/hooks.d.ts +77 -43
- package/dist/src/react/hooks.d.ts.map +1 -1
- package/dist/src/server.d.ts +15 -3
- package/dist/src/server.d.ts.map +1 -1
- package/package.json +1 -1
- package/react.ts +2 -2
package/dist/index.js
CHANGED
|
@@ -1016,7 +1016,20 @@ class MCPClient {
|
|
|
1016
1016
|
headers: config.headers,
|
|
1017
1017
|
timeout: config.timeout
|
|
1018
1018
|
});
|
|
1019
|
-
|
|
1019
|
+
const oauthApiBase = config.oauthApiBase || "/api/integrate/oauth";
|
|
1020
|
+
const defaultRedirectUri = this.getDefaultRedirectUri(oauthApiBase);
|
|
1021
|
+
this.plugins = config.plugins.map((plugin) => {
|
|
1022
|
+
if (plugin.oauth && !plugin.oauth.redirectUri) {
|
|
1023
|
+
return {
|
|
1024
|
+
...plugin,
|
|
1025
|
+
oauth: {
|
|
1026
|
+
...plugin.oauth,
|
|
1027
|
+
redirectUri: defaultRedirectUri
|
|
1028
|
+
}
|
|
1029
|
+
};
|
|
1030
|
+
}
|
|
1031
|
+
return plugin;
|
|
1032
|
+
});
|
|
1020
1033
|
this.clientInfo = config.clientInfo || {
|
|
1021
1034
|
name: "integrate-sdk",
|
|
1022
1035
|
version: "0.1.0"
|
|
@@ -1024,7 +1037,7 @@ class MCPClient {
|
|
|
1024
1037
|
this.onReauthRequired = config.onReauthRequired;
|
|
1025
1038
|
this.maxReauthRetries = config.maxReauthRetries ?? 1;
|
|
1026
1039
|
this.connectionMode = config.connectionMode ?? "lazy";
|
|
1027
|
-
this.oauthManager = new OAuthManager(
|
|
1040
|
+
this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow);
|
|
1028
1041
|
const providers = this.plugins.filter((p) => p.oauth).map((p) => p.oauth.provider);
|
|
1029
1042
|
this.oauthManager.loadAllProviderTokens(providers);
|
|
1030
1043
|
for (const plugin of this.plugins) {
|
|
@@ -1041,6 +1054,14 @@ class MCPClient {
|
|
|
1041
1054
|
this.server = this.createServerProxy();
|
|
1042
1055
|
this.initializePlugins();
|
|
1043
1056
|
}
|
|
1057
|
+
getDefaultRedirectUri(oauthApiBase) {
|
|
1058
|
+
if (typeof window === "undefined" || !window.location) {
|
|
1059
|
+
return "http://localhost:3000/oauth/callback";
|
|
1060
|
+
}
|
|
1061
|
+
const origin = window.location.origin;
|
|
1062
|
+
const normalizedPath = oauthApiBase.replace(/\/$/, "");
|
|
1063
|
+
return `${origin}${normalizedPath}/callback`;
|
|
1064
|
+
}
|
|
1044
1065
|
async ensureConnected() {
|
|
1045
1066
|
if (this.initialized && this.transport.isConnected()) {
|
|
1046
1067
|
return;
|
package/dist/react.js
CHANGED
|
@@ -11,18 +11,15 @@ var __export = (target, all) => {
|
|
|
11
11
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
12
12
|
|
|
13
13
|
// src/react/hooks.ts
|
|
14
|
-
import { useState, useEffect
|
|
14
|
+
import { useState, useEffect } from "react";
|
|
15
15
|
function getSafeFallback() {
|
|
16
16
|
return {
|
|
17
17
|
tokens: {},
|
|
18
|
-
|
|
19
|
-
isLoading: false,
|
|
20
|
-
fetch: globalThis.fetch?.bind(globalThis) || (async () => new Response),
|
|
21
|
-
mergeHeaders: (existingHeaders) => new Headers(existingHeaders)
|
|
18
|
+
isLoading: false
|
|
22
19
|
};
|
|
23
20
|
}
|
|
24
21
|
function isReactHooksAvailable() {
|
|
25
|
-
if (!useState || !useEffect
|
|
22
|
+
if (!useState || !useEffect) {
|
|
26
23
|
return false;
|
|
27
24
|
}
|
|
28
25
|
if (typeof window === "undefined") {
|
|
@@ -82,39 +79,83 @@ function useIntegrateTokens(client) {
|
|
|
82
79
|
return;
|
|
83
80
|
}
|
|
84
81
|
}, [client]);
|
|
85
|
-
const headers = useMemo(() => {
|
|
86
|
-
if (Object.keys(tokens).length === 0) {
|
|
87
|
-
return {};
|
|
88
|
-
}
|
|
89
|
-
return {
|
|
90
|
-
"x-integrate-tokens": JSON.stringify(tokens)
|
|
91
|
-
};
|
|
92
|
-
}, [tokens]);
|
|
93
|
-
const fetchWithHeaders = useCallback(async (input, init) => {
|
|
94
|
-
const mergedHeaders = new Headers(init?.headers);
|
|
95
|
-
if (headers["x-integrate-tokens"]) {
|
|
96
|
-
mergedHeaders.set("x-integrate-tokens", headers["x-integrate-tokens"]);
|
|
97
|
-
}
|
|
98
|
-
return fetch(input, {
|
|
99
|
-
...init,
|
|
100
|
-
headers: mergedHeaders
|
|
101
|
-
});
|
|
102
|
-
}, [headers]);
|
|
103
|
-
const mergeHeaders = useCallback((existingHeaders) => {
|
|
104
|
-
const merged = new Headers(existingHeaders);
|
|
105
|
-
if (headers["x-integrate-tokens"]) {
|
|
106
|
-
merged.set("x-integrate-tokens", headers["x-integrate-tokens"]);
|
|
107
|
-
}
|
|
108
|
-
return merged;
|
|
109
|
-
}, [headers]);
|
|
110
82
|
return {
|
|
111
83
|
tokens,
|
|
112
|
-
|
|
113
|
-
isLoading,
|
|
114
|
-
fetch: fetchWithHeaders,
|
|
115
|
-
mergeHeaders
|
|
84
|
+
isLoading
|
|
116
85
|
};
|
|
117
86
|
}
|
|
87
|
+
function useIntegrateAI(client, options = {}) {
|
|
88
|
+
const { apiPattern = /\/api\/chat/, debug = false } = options;
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
if (!client || typeof window === "undefined") {
|
|
91
|
+
if (debug && !client) {
|
|
92
|
+
console.warn("[useIntegrateAI] No client provided, skipping interceptor setup");
|
|
93
|
+
}
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const originalFetch = window.fetch;
|
|
97
|
+
let currentTokens = {};
|
|
98
|
+
try {
|
|
99
|
+
currentTokens = client.getAllProviderTokens();
|
|
100
|
+
if (debug) {
|
|
101
|
+
console.log("[useIntegrateAI] Initial tokens loaded:", Object.keys(currentTokens));
|
|
102
|
+
}
|
|
103
|
+
} catch (error) {
|
|
104
|
+
console.error("[useIntegrateAI] Failed to get initial tokens:", error);
|
|
105
|
+
}
|
|
106
|
+
const updateTokens = () => {
|
|
107
|
+
try {
|
|
108
|
+
currentTokens = client.getAllProviderTokens();
|
|
109
|
+
if (debug) {
|
|
110
|
+
console.log("[useIntegrateAI] Tokens updated:", Object.keys(currentTokens));
|
|
111
|
+
}
|
|
112
|
+
} catch (error) {
|
|
113
|
+
console.error("[useIntegrateAI] Failed to update tokens:", error);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
const handleLogout = () => {
|
|
117
|
+
currentTokens = {};
|
|
118
|
+
if (debug) {
|
|
119
|
+
console.log("[useIntegrateAI] Tokens cleared (logout)");
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
client.on("auth:complete", updateTokens);
|
|
123
|
+
client.on("auth:disconnect", updateTokens);
|
|
124
|
+
client.on("auth:logout", handleLogout);
|
|
125
|
+
const interceptedFetch = async (input, init) => {
|
|
126
|
+
const url = typeof input === "string" ? input : input instanceof URL ? input.href : input.url;
|
|
127
|
+
const shouldIntercept = typeof apiPattern === "string" ? url.includes(apiPattern) : apiPattern.test(url);
|
|
128
|
+
if (shouldIntercept && Object.keys(currentTokens).length > 0) {
|
|
129
|
+
if (debug) {
|
|
130
|
+
console.log("[useIntegrateAI] Intercepting request to:", url);
|
|
131
|
+
console.log("[useIntegrateAI] Injecting tokens:", Object.keys(currentTokens));
|
|
132
|
+
}
|
|
133
|
+
const headers = new Headers(init?.headers);
|
|
134
|
+
headers.set("x-integrate-tokens", JSON.stringify(currentTokens));
|
|
135
|
+
return originalFetch(input, {
|
|
136
|
+
...init,
|
|
137
|
+
headers
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
return originalFetch(input, init);
|
|
141
|
+
};
|
|
142
|
+
window.fetch = interceptedFetch;
|
|
143
|
+
if (debug) {
|
|
144
|
+
console.log("[useIntegrateAI] Global fetch interceptor installed");
|
|
145
|
+
console.log("[useIntegrateAI] Pattern:", apiPattern);
|
|
146
|
+
}
|
|
147
|
+
return () => {
|
|
148
|
+
window.fetch = originalFetch;
|
|
149
|
+
client.off("auth:complete", updateTokens);
|
|
150
|
+
client.off("auth:disconnect", updateTokens);
|
|
151
|
+
client.off("auth:logout", handleLogout);
|
|
152
|
+
if (debug) {
|
|
153
|
+
console.log("[useIntegrateAI] Global fetch interceptor removed");
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
}, [client, apiPattern, debug]);
|
|
157
|
+
}
|
|
118
158
|
export {
|
|
119
|
-
useIntegrateTokens
|
|
159
|
+
useIntegrateTokens,
|
|
160
|
+
useIntegrateAI
|
|
120
161
|
};
|
package/dist/server.js
CHANGED
|
@@ -1016,7 +1016,20 @@ class MCPClient {
|
|
|
1016
1016
|
headers: config.headers,
|
|
1017
1017
|
timeout: config.timeout
|
|
1018
1018
|
});
|
|
1019
|
-
|
|
1019
|
+
const oauthApiBase = config.oauthApiBase || "/api/integrate/oauth";
|
|
1020
|
+
const defaultRedirectUri = this.getDefaultRedirectUri(oauthApiBase);
|
|
1021
|
+
this.plugins = config.plugins.map((plugin) => {
|
|
1022
|
+
if (plugin.oauth && !plugin.oauth.redirectUri) {
|
|
1023
|
+
return {
|
|
1024
|
+
...plugin,
|
|
1025
|
+
oauth: {
|
|
1026
|
+
...plugin.oauth,
|
|
1027
|
+
redirectUri: defaultRedirectUri
|
|
1028
|
+
}
|
|
1029
|
+
};
|
|
1030
|
+
}
|
|
1031
|
+
return plugin;
|
|
1032
|
+
});
|
|
1020
1033
|
this.clientInfo = config.clientInfo || {
|
|
1021
1034
|
name: "integrate-sdk",
|
|
1022
1035
|
version: "0.1.0"
|
|
@@ -1024,7 +1037,7 @@ class MCPClient {
|
|
|
1024
1037
|
this.onReauthRequired = config.onReauthRequired;
|
|
1025
1038
|
this.maxReauthRetries = config.maxReauthRetries ?? 1;
|
|
1026
1039
|
this.connectionMode = config.connectionMode ?? "lazy";
|
|
1027
|
-
this.oauthManager = new OAuthManager(
|
|
1040
|
+
this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow);
|
|
1028
1041
|
const providers = this.plugins.filter((p) => p.oauth).map((p) => p.oauth.provider);
|
|
1029
1042
|
this.oauthManager.loadAllProviderTokens(providers);
|
|
1030
1043
|
for (const plugin of this.plugins) {
|
|
@@ -1041,6 +1054,14 @@ class MCPClient {
|
|
|
1041
1054
|
this.server = this.createServerProxy();
|
|
1042
1055
|
this.initializePlugins();
|
|
1043
1056
|
}
|
|
1057
|
+
getDefaultRedirectUri(oauthApiBase) {
|
|
1058
|
+
if (typeof window === "undefined" || !window.location) {
|
|
1059
|
+
return "http://localhost:3000/oauth/callback";
|
|
1060
|
+
}
|
|
1061
|
+
const origin = window.location.origin;
|
|
1062
|
+
const normalizedPath = oauthApiBase.replace(/\/$/, "");
|
|
1063
|
+
return `${origin}${normalizedPath}/callback`;
|
|
1064
|
+
}
|
|
1044
1065
|
async ensureConnected() {
|
|
1045
1066
|
if (this.initialized && this.transport.isConnected()) {
|
|
1046
1067
|
return;
|
|
@@ -1846,12 +1867,12 @@ function getDefaultRedirectUri() {
|
|
|
1846
1867
|
if (typeof window !== "undefined") {
|
|
1847
1868
|
return `${window.location.origin}/oauth/callback`;
|
|
1848
1869
|
}
|
|
1870
|
+
if (process.env.INTEGRATE_URL) {
|
|
1871
|
+
return `${process.env.INTEGRATE_URL}/oauth/callback`;
|
|
1872
|
+
}
|
|
1849
1873
|
if (process.env.VERCEL_URL) {
|
|
1850
1874
|
return `https://${process.env.VERCEL_URL}/oauth/callback`;
|
|
1851
1875
|
}
|
|
1852
|
-
if (process.env.NEXTAUTH_URL) {
|
|
1853
|
-
return `${process.env.NEXTAUTH_URL}/oauth/callback`;
|
|
1854
|
-
}
|
|
1855
1876
|
return "http://localhost:3000/oauth/callback";
|
|
1856
1877
|
}
|
|
1857
1878
|
function createMCPServer(config) {
|
|
@@ -1859,12 +1880,12 @@ function createMCPServer(config) {
|
|
|
1859
1880
|
throw new Error("createMCPServer() should only be called on the server-side. " + "Use createMCPClient() for client-side code.");
|
|
1860
1881
|
}
|
|
1861
1882
|
const providers = {};
|
|
1862
|
-
|
|
1883
|
+
const updatedPlugins = config.plugins.map((plugin) => {
|
|
1863
1884
|
if (plugin.oauth) {
|
|
1864
1885
|
const { clientId, clientSecret, redirectUri: pluginRedirectUri } = plugin.oauth;
|
|
1865
1886
|
if (!clientId || !clientSecret) {
|
|
1866
1887
|
console.warn(`Warning: Plugin "${plugin.id}" is missing OAuth credentials. ` + `Provide clientId and clientSecret in the plugin configuration.`);
|
|
1867
|
-
|
|
1888
|
+
return plugin;
|
|
1868
1889
|
}
|
|
1869
1890
|
const redirectUri = pluginRedirectUri || config.redirectUri || getDefaultRedirectUri();
|
|
1870
1891
|
providers[plugin.id] = {
|
|
@@ -1872,11 +1893,20 @@ function createMCPServer(config) {
|
|
|
1872
1893
|
clientSecret,
|
|
1873
1894
|
redirectUri
|
|
1874
1895
|
};
|
|
1896
|
+
return {
|
|
1897
|
+
...plugin,
|
|
1898
|
+
oauth: {
|
|
1899
|
+
...plugin.oauth,
|
|
1900
|
+
redirectUri
|
|
1901
|
+
}
|
|
1902
|
+
};
|
|
1875
1903
|
}
|
|
1876
|
-
|
|
1904
|
+
return plugin;
|
|
1905
|
+
});
|
|
1877
1906
|
globalServerConfig = { providers };
|
|
1878
1907
|
const clientConfig = {
|
|
1879
1908
|
...config,
|
|
1909
|
+
plugins: updatedPlugins,
|
|
1880
1910
|
connectionMode: config.connectionMode || "lazy",
|
|
1881
1911
|
singleton: config.singleton ?? true
|
|
1882
1912
|
};
|
package/dist/src/client.d.ts
CHANGED
|
@@ -65,6 +65,14 @@ export declare class MCPClient<TPlugins extends readonly MCPPlugin[] = readonly
|
|
|
65
65
|
} ? GmailPluginClient : never;
|
|
66
66
|
readonly server: ServerPluginClient;
|
|
67
67
|
constructor(config: MCPClientConfig<TPlugins>);
|
|
68
|
+
/**
|
|
69
|
+
* Get default redirect URI for OAuth flows
|
|
70
|
+
* Uses window.location.origin + OAuth API base path
|
|
71
|
+
*
|
|
72
|
+
* @param oauthApiBase - The OAuth API base path (e.g., '/api/integrate/oauth')
|
|
73
|
+
* @returns Default redirect URI
|
|
74
|
+
*/
|
|
75
|
+
private getDefaultRedirectUri;
|
|
68
76
|
/**
|
|
69
77
|
* Ensure the client is connected (for lazy connection mode)
|
|
70
78
|
*/
|
package/dist/src/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,OAAO,EAEP,mBAAmB,EAIpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,KAAK,EACV,UAAU,EACV,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAgE1B;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED;;GAEG;AACH,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,EAAE,GAAG,KAAK,CAAC;AAClE,KAAK,SAAS,CAAC,QAAQ,SAAS,SAAS,SAAS,EAAE,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAE1F;;GAEG;AACH,KAAK,WAAW,CAAC,QAAQ,SAAS,SAAS,SAAS,EAAE,EAAE,EAAE,SAAS,MAAM,IACvE,EAAE,SAAS,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;AAEhD;;GAEG;AACH,KAAK,gBAAgB,CAAC,QAAQ,SAAS,SAAS,SAAS,EAAE,IACzD,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,IAAI,GAAG;IAAE,MAAM,EAAE,kBAAkB,CAAA;CAAE,GAAG,EAAE,CAAC,GACpF,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,IAAI,GAAG;IAAE,KAAK,EAAE,iBAAiB,CAAA;CAAE,GAAG,EAAE,CAAC,CAAC;AAEpF;;;;GAIG;AACH,qBAAa,SAAS,CAAC,QAAQ,SAAS,SAAS,SAAS,EAAE,GAAG,SAAS,SAAS,EAAE;IACjF,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,cAAc,CAAmC;IACzD,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,gBAAgB,CAAC,CAAgB;IACzC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,SAAS,CAAuF;IACxG,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,YAAY,CAAgD;IAGpE,SAAgB,MAAM,EAAG,gBAAgB,CAAC,QAAQ,CAAC,SAAS;QAAE,MAAM,EAAE,kBAAkB,CAAA;KAAE,GACtF,kBAAkB,GAClB,KAAK,CAAC;IACV,SAAgB,KAAK,EAAG,gBAAgB,CAAC,QAAQ,CAAC,SAAS;QAAE,KAAK,EAAE,iBAAiB,CAAA;KAAE,GACnF,iBAAiB,GACjB,KAAK,CAAC;IAGV,SAAgB,MAAM,EAAG,kBAAkB,CAAC;gBAEhC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -166,14 +166,33 @@ export interface MCPClientConfig<TPlugins extends readonly MCPPlugin[]> {
|
|
|
166
166
|
/**
|
|
167
167
|
* Global OAuth redirect URI for all providers
|
|
168
168
|
* Used as fallback when individual plugins don't specify their own redirectUri
|
|
169
|
-
*
|
|
169
|
+
*
|
|
170
|
+
* **Server-side (createMCPServer):** If not provided, auto-detects from environment:
|
|
171
|
+
* - INTEGRATE_URL (primary)
|
|
172
|
+
* - VERCEL_URL
|
|
173
|
+
* - Falls back to 'http://localhost:3000/oauth/callback'
|
|
174
|
+
*
|
|
175
|
+
* **Client-side (createMCPClient):** If not provided, auto-detects from:
|
|
176
|
+
* - window.location.origin + oauthApiBase + '/callback'
|
|
177
|
+
* - Example: 'http://localhost:3000/api/integrate/oauth/callback'
|
|
170
178
|
*
|
|
171
179
|
* @example
|
|
172
180
|
* ```typescript
|
|
181
|
+
* // Explicit redirectUri (server-side)
|
|
173
182
|
* createMCPServer({
|
|
174
183
|
* redirectUri: 'https://myapp.com/oauth/callback',
|
|
175
184
|
* plugins: [...]
|
|
176
185
|
* })
|
|
186
|
+
*
|
|
187
|
+
* // Auto-detection (server-side) - uses process.env.INTEGRATE_URL
|
|
188
|
+
* createMCPServer({
|
|
189
|
+
* plugins: [...]
|
|
190
|
+
* })
|
|
191
|
+
*
|
|
192
|
+
* // Auto-detection (client-side) - uses window.location.origin
|
|
193
|
+
* createMCPClient({
|
|
194
|
+
* plugins: [...]
|
|
195
|
+
* })
|
|
177
196
|
* ```
|
|
178
197
|
*/
|
|
179
198
|
redirectUri?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,KAAK,EAAE,mBAAmB,CAAC;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,QAAQ,SAAS,SAAS,SAAS,EAAE;IACpE,iCAAiC;IACjC,OAAO,EAAE,QAAQ,CAAC;IAElB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,yBAAyB;IACzB,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAEF;;;;;;;;;;;;;;;;;;;OAmBG;IACH,gBAAgB,CAAC,EAAE,aAAa,CAAC;IAEjC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAE7C;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,EAAE;QACV,+DAA+D;QAC/D,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;QAC5B,oDAAoD;QACpD,YAAY,CAAC,EAAE;YACb,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,sDAAsD;QACtD,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACnF,CAAC;IAEF;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;;;;;;;;;;;;;OAkBG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;;;;;;;;OAaG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,KAAK,EAAE,mBAAmB,CAAC;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,QAAQ,SAAS,SAAS,SAAS,EAAE;IACpE,iCAAiC;IACjC,OAAO,EAAE,QAAQ,CAAC;IAElB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,yBAAyB;IACzB,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAEF;;;;;;;;;;;;;;;;;;;OAmBG;IACH,gBAAgB,CAAC,EAAE,aAAa,CAAC;IAEjC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAE7C;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,EAAE;QACV,+DAA+D;QAC/D,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;QAC5B,oDAAoD;QACpD,YAAY,CAAC,EAAE;YACb,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,sDAAsD;QACtD,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACnF,CAAC;IAEF;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;;;;;;;;;;;;;OAkBG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;;;;;;;;OAaG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,QAAQ,SAAS,SAAS,SAAS,EAAE,IACjE,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpC;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,QAAQ,SAAS,SAAS,SAAS,EAAE,IAAI;KACnE,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;CAC9C,CAAC"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* React hooks for integrate-sdk
|
|
3
3
|
*
|
|
4
|
-
* Provides React hooks for managing provider tokens
|
|
5
|
-
* in client-side applications.
|
|
4
|
+
* Provides React hooks for managing provider tokens in client-side applications.
|
|
6
5
|
*/
|
|
7
6
|
import type { MCPClient } from "../client.js";
|
|
8
7
|
/**
|
|
@@ -13,82 +12,117 @@ export interface UseIntegrateTokensResult {
|
|
|
13
12
|
* Current provider tokens (e.g., { github: 'token123', gmail: 'token456' })
|
|
14
13
|
*/
|
|
15
14
|
tokens: Record<string, string>;
|
|
16
|
-
/**
|
|
17
|
-
* Headers object ready to spread into fetch/useChat options
|
|
18
|
-
* Includes 'x-integrate-tokens' header with JSON-stringified tokens
|
|
19
|
-
*/
|
|
20
|
-
headers: Record<string, string>;
|
|
21
15
|
/**
|
|
22
16
|
* Whether tokens are currently being loaded
|
|
23
17
|
*/
|
|
24
18
|
isLoading: boolean;
|
|
25
|
-
/**
|
|
26
|
-
* Custom fetch function with integrate tokens automatically included
|
|
27
|
-
* Use this with libraries that accept a custom fetch function (like Vercel AI SDK's useChat)
|
|
28
|
-
*/
|
|
29
|
-
fetch: (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
|
|
30
|
-
/**
|
|
31
|
-
* Helper function to merge integrate headers with existing headers
|
|
32
|
-
* Useful for manual fetch calls where you need to combine headers
|
|
33
|
-
*/
|
|
34
|
-
mergeHeaders: (existingHeaders?: HeadersInit) => Headers;
|
|
35
19
|
}
|
|
36
20
|
/**
|
|
37
|
-
* React hook to access integrate-sdk provider
|
|
21
|
+
* React hook to access integrate-sdk provider token status
|
|
38
22
|
*
|
|
39
23
|
* Automatically listens for authentication events and updates when tokens change.
|
|
40
|
-
*
|
|
24
|
+
* Use this hook to display connection status in your UI.
|
|
25
|
+
*
|
|
26
|
+
* **For automatic token injection**, use `useIntegrateAI()` instead.
|
|
41
27
|
*
|
|
42
28
|
* **Note:** This hook must be called inside a React component. It will return safe
|
|
43
29
|
* fallback values during SSR or if the client is not ready.
|
|
44
30
|
*
|
|
45
31
|
* @param client - MCP client instance created with createMCPClient() (optional)
|
|
46
|
-
* @returns Object with tokens
|
|
32
|
+
* @returns Object with tokens and loading state
|
|
47
33
|
*
|
|
48
34
|
* @example
|
|
49
35
|
* ```tsx
|
|
50
36
|
* import { createMCPClient, githubPlugin } from 'integrate-sdk';
|
|
51
37
|
* import { useIntegrateTokens } from 'integrate-sdk/react';
|
|
52
|
-
* import { useChat } from 'ai/react';
|
|
53
38
|
*
|
|
54
39
|
* const client = createMCPClient({
|
|
55
40
|
* plugins: [githubPlugin({ clientId: '...' })],
|
|
56
41
|
* });
|
|
57
42
|
*
|
|
58
|
-
* function
|
|
59
|
-
* const {
|
|
43
|
+
* function ConnectionStatus() {
|
|
44
|
+
* const { tokens, isLoading } = useIntegrateTokens(client);
|
|
60
45
|
*
|
|
61
|
-
*
|
|
62
|
-
* api: '/api/chat',
|
|
63
|
-
* fetch: fetchWithTokens, // Tokens automatically included
|
|
64
|
-
* });
|
|
46
|
+
* if (isLoading) return <div>Loading...</div>;
|
|
65
47
|
*
|
|
66
|
-
* return
|
|
48
|
+
* return (
|
|
49
|
+
* <div>
|
|
50
|
+
* {Object.keys(tokens).length > 0 ? (
|
|
51
|
+
* <span>Connected: {Object.keys(tokens).join(', ')}</span>
|
|
52
|
+
* ) : (
|
|
53
|
+
* <span>Not connected</span>
|
|
54
|
+
* )}
|
|
55
|
+
* </div>
|
|
56
|
+
* );
|
|
67
57
|
* }
|
|
68
58
|
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare function useIntegrateTokens(client?: MCPClient<any> | null): UseIntegrateTokensResult;
|
|
61
|
+
/**
|
|
62
|
+
* Options for useIntegrateAI hook
|
|
63
|
+
*/
|
|
64
|
+
export interface UseIntegrateAIOptions {
|
|
65
|
+
/**
|
|
66
|
+
* URL pattern to intercept for token injection
|
|
67
|
+
* Default: /\/api\/chat/
|
|
68
|
+
* Can be a string (uses .includes()) or RegExp
|
|
69
|
+
*/
|
|
70
|
+
apiPattern?: string | RegExp;
|
|
71
|
+
/**
|
|
72
|
+
* Enable debug logging
|
|
73
|
+
* Default: false
|
|
74
|
+
*/
|
|
75
|
+
debug?: boolean;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Global fetch interceptor for Vercel AI SDK
|
|
79
|
+
*
|
|
80
|
+
* Automatically injects integrate provider tokens into all AI SDK requests.
|
|
81
|
+
* Call this once at your app root (layout/provider) to enable automatic token
|
|
82
|
+
* injection for all `useChat` calls in your application.
|
|
83
|
+
*
|
|
84
|
+
* **Note:** This installs a global `window.fetch` interceptor that only affects
|
|
85
|
+
* requests matching the `apiPattern`. All other requests pass through unchanged.
|
|
86
|
+
*
|
|
87
|
+
* @param client - MCP client instance created with createMCPClient() (optional)
|
|
88
|
+
* @param options - Configuration options for the interceptor
|
|
69
89
|
*
|
|
70
90
|
* @example
|
|
71
91
|
* ```tsx
|
|
72
|
-
* //
|
|
73
|
-
*
|
|
92
|
+
* // app/layout.tsx or app/providers.tsx
|
|
93
|
+
* 'use client';
|
|
94
|
+
*
|
|
95
|
+
* import { createMCPClient, githubPlugin } from 'integrate-sdk';
|
|
96
|
+
* import { useIntegrateAI } from 'integrate-sdk/react';
|
|
74
97
|
*
|
|
75
|
-
* const client = createMCPClient({
|
|
98
|
+
* const client = createMCPClient({
|
|
99
|
+
* plugins: [
|
|
100
|
+
* githubPlugin({ clientId: process.env.NEXT_PUBLIC_GITHUB_CLIENT_ID }),
|
|
101
|
+
* ],
|
|
102
|
+
* });
|
|
76
103
|
*
|
|
77
|
-
* function
|
|
78
|
-
*
|
|
104
|
+
* export function Providers({ children }) {
|
|
105
|
+
* // Install global interceptor once
|
|
106
|
+
* useIntegrateAI(client);
|
|
79
107
|
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
* method: 'POST',
|
|
83
|
-
* headers: mergeHeaders({ 'Content-Type': 'application/json' }),
|
|
84
|
-
* body: JSON.stringify({ query: 'example' }),
|
|
85
|
-
* });
|
|
86
|
-
* return response.json();
|
|
87
|
-
* };
|
|
108
|
+
* return <>{children}</>;
|
|
109
|
+
* }
|
|
88
110
|
*
|
|
89
|
-
*
|
|
111
|
+
* // Now any component can use useChat without manual token management
|
|
112
|
+
* function ChatPage() {
|
|
113
|
+
* const chat = useChat(); // ✅ Tokens automatically included!
|
|
114
|
+
* return <div>...</div>;
|
|
90
115
|
* }
|
|
91
116
|
* ```
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```tsx
|
|
120
|
+
* // With custom API pattern and debug logging
|
|
121
|
+
* useIntegrateAI(client, {
|
|
122
|
+
* apiPattern: /\/(api|chat)\//, // Match /api/ or /chat/
|
|
123
|
+
* debug: true, // Log intercepted requests
|
|
124
|
+
* });
|
|
125
|
+
* ```
|
|
92
126
|
*/
|
|
93
|
-
export declare function
|
|
127
|
+
export declare function useIntegrateAI(client?: MCPClient<any> | null, options?: UseIntegrateAIOptions): void;
|
|
94
128
|
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/react/hooks.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/react/hooks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE/B;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AAoCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,GAC7B,wBAAwB,CA4E1B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE7B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAgB,cAAc,CAC5B,MAAM,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,EAC9B,OAAO,GAAE,qBAA0B,GAClC,IAAI,CA6GN"}
|
package/dist/src/server.d.ts
CHANGED
|
@@ -12,16 +12,17 @@ import type { MCPPlugin } from './plugins/types.js';
|
|
|
12
12
|
* Use this in your server configuration file (e.g., lib/integrate-server.ts)
|
|
13
13
|
*
|
|
14
14
|
* The redirectUri can be specified globally and will be used for all plugins.
|
|
15
|
-
* If not provided, it will auto-detect from
|
|
15
|
+
* If not provided, it will auto-detect from INTEGRATE_URL or VERCEL_URL
|
|
16
16
|
*
|
|
17
17
|
* @example
|
|
18
18
|
* ```typescript
|
|
19
19
|
* // lib/integrate-server.ts (server-side only!)
|
|
20
20
|
* import { createMCPServer, githubPlugin, gmailPlugin } from 'integrate-sdk/server';
|
|
21
21
|
*
|
|
22
|
+
* // With explicit redirectUri
|
|
22
23
|
* export const { client: serverClient } = createMCPServer({
|
|
23
|
-
* redirectUri: process.env.
|
|
24
|
-
* ?
|
|
24
|
+
* redirectUri: process.env.INTEGRATE_URL
|
|
25
|
+
* ? `${process.env.INTEGRATE_URL}/oauth/callback`
|
|
25
26
|
* : 'http://localhost:3000/oauth/callback',
|
|
26
27
|
* plugins: [
|
|
27
28
|
* githubPlugin({
|
|
@@ -36,6 +37,17 @@ import type { MCPPlugin } from './plugins/types.js';
|
|
|
36
37
|
* }),
|
|
37
38
|
* ],
|
|
38
39
|
* });
|
|
40
|
+
*
|
|
41
|
+
* // Or omit redirectUri to use auto-detection from environment variables
|
|
42
|
+
* export const { client: serverClient } = createMCPServer({
|
|
43
|
+
* plugins: [
|
|
44
|
+
* githubPlugin({
|
|
45
|
+
* clientId: process.env.GITHUB_CLIENT_ID!,
|
|
46
|
+
* clientSecret: process.env.GITHUB_CLIENT_SECRET!,
|
|
47
|
+
* scopes: ['repo', 'user'],
|
|
48
|
+
* }),
|
|
49
|
+
* ],
|
|
50
|
+
* });
|
|
39
51
|
* ```
|
|
40
52
|
*
|
|
41
53
|
* Then in your route file:
|
package/dist/src/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAyCpD
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAyCpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAgB,eAAe,CAAC,QAAQ,SAAS,SAAS,SAAS,EAAE,EACnE,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC;IAmE/B,2DAA2D;;IAG3D,4DAA4D;;;;;;;;IAG5D,2DAA2D;;;;;;;;EAG9D;AAYD,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE9E;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,IAAI,GACf,KAAK,GAAG,EACR,SAAS;IAAE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,iBAYtE,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,GAAG,GACd,KAAK,GAAG,EACR,SAAS;IAAE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,iBAYtE,CAAC"}
|
package/package.json
CHANGED
package/react.ts
CHANGED
|
@@ -4,6 +4,6 @@
|
|
|
4
4
|
* @packageDocumentation
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
export { useIntegrateTokens } from "./src/react/hooks.js";
|
|
8
|
-
export type { UseIntegrateTokensResult } from "./src/react/hooks.js";
|
|
7
|
+
export { useIntegrateTokens, useIntegrateAI } from "./src/react/hooks.js";
|
|
8
|
+
export type { UseIntegrateTokensResult, UseIntegrateAIOptions } from "./src/react/hooks.js";
|
|
9
9
|
|