integrate-sdk 0.7.66 → 0.8.0

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.
Files changed (44) hide show
  1. package/dist/adapters/index.js +39 -3
  2. package/dist/adapters/solid-start.js +39 -3
  3. package/dist/adapters/svelte-kit.js +39 -3
  4. package/dist/ai/cloudflare.d.ts +158 -0
  5. package/dist/ai/cloudflare.d.ts.map +1 -0
  6. package/dist/ai/cloudflare.js +4249 -0
  7. package/dist/ai/langchain.d.ts +139 -0
  8. package/dist/ai/langchain.d.ts.map +1 -0
  9. package/dist/ai/langchain.js +4237 -0
  10. package/dist/ai/llamaindex.d.ts +125 -0
  11. package/dist/ai/llamaindex.d.ts.map +1 -0
  12. package/dist/ai/llamaindex.js +4236 -0
  13. package/dist/ai/mastra.d.ts +138 -0
  14. package/dist/ai/mastra.d.ts.map +1 -0
  15. package/dist/ai/mastra.js +4240 -0
  16. package/dist/index.js +39 -3
  17. package/dist/server.js +39 -3
  18. package/dist/src/ai/cloudflare.d.ts +158 -0
  19. package/dist/src/ai/cloudflare.d.ts.map +1 -0
  20. package/dist/src/ai/langchain.d.ts +139 -0
  21. package/dist/src/ai/langchain.d.ts.map +1 -0
  22. package/dist/src/ai/llamaindex.d.ts +125 -0
  23. package/dist/src/ai/llamaindex.d.ts.map +1 -0
  24. package/dist/src/ai/mastra.d.ts +138 -0
  25. package/dist/src/ai/mastra.d.ts.map +1 -0
  26. package/dist/src/client.d.ts +14 -1
  27. package/dist/src/client.d.ts.map +1 -1
  28. package/dist/src/integrations/vercel-ai.d.ts +127 -0
  29. package/dist/src/integrations/vercel-ai.d.ts.map +1 -0
  30. package/dist/src/plugins/generic.d.ts +99 -0
  31. package/dist/src/plugins/generic.d.ts.map +1 -0
  32. package/dist/src/plugins/github-client.d.ts +320 -0
  33. package/dist/src/plugins/github-client.d.ts.map +1 -0
  34. package/dist/src/plugins/github.d.ts +89 -0
  35. package/dist/src/plugins/github.d.ts.map +1 -0
  36. package/dist/src/plugins/gmail-client.d.ts +106 -0
  37. package/dist/src/plugins/gmail-client.d.ts.map +1 -0
  38. package/dist/src/plugins/gmail.d.ts +87 -0
  39. package/dist/src/plugins/gmail.d.ts.map +1 -0
  40. package/dist/src/plugins/server-client.d.ts +18 -0
  41. package/dist/src/plugins/server-client.d.ts.map +1 -0
  42. package/dist/src/plugins/types.d.ts +70 -0
  43. package/dist/src/plugins/types.d.ts.map +1 -0
  44. package/package.json +1 -1
@@ -1625,7 +1625,7 @@ class OAuthManager {
1625
1625
  }
1626
1626
  clearProviderToken(provider) {
1627
1627
  this.providerTokens.delete(provider);
1628
- if (!this.getTokenCallback && typeof window !== "undefined" && window.localStorage) {
1628
+ if (!this.skipLocalStorage && typeof window !== "undefined" && window.localStorage) {
1629
1629
  try {
1630
1630
  window.localStorage.removeItem(`integrate_token_${provider}`);
1631
1631
  } catch (error) {
@@ -1636,7 +1636,7 @@ class OAuthManager {
1636
1636
  clearAllProviderTokens() {
1637
1637
  const providers = Array.from(this.providerTokens.keys());
1638
1638
  this.providerTokens.clear();
1639
- if (!this.getTokenCallback && typeof window !== "undefined" && window.localStorage) {
1639
+ if (!this.skipLocalStorage && typeof window !== "undefined" && window.localStorage) {
1640
1640
  for (const provider of providers) {
1641
1641
  try {
1642
1642
  window.localStorage.removeItem(`integrate_token_${provider}`);
@@ -2315,7 +2315,28 @@ class MCPClientBase {
2315
2315
  await this.oauthCallbackPromise;
2316
2316
  this.oauthCallbackPromise = null;
2317
2317
  }
2318
- return this.authState.get(provider)?.authenticated ?? false;
2318
+ try {
2319
+ const tokenData = await this.oauthManager.getProviderToken(provider);
2320
+ const isAuthenticated = !!tokenData;
2321
+ const currentState = this.authState.get(provider);
2322
+ if (currentState) {
2323
+ currentState.authenticated = isAuthenticated;
2324
+ if (isAuthenticated) {
2325
+ currentState.lastError = undefined;
2326
+ }
2327
+ } else {
2328
+ this.authState.set(provider, { authenticated: isAuthenticated });
2329
+ }
2330
+ return isAuthenticated;
2331
+ } catch (error) {
2332
+ const currentState = this.authState.get(provider);
2333
+ if (currentState) {
2334
+ currentState.authenticated = false;
2335
+ } else {
2336
+ this.authState.set(provider, { authenticated: false });
2337
+ }
2338
+ return false;
2339
+ }
2319
2340
  }
2320
2341
  async authorizedProviders() {
2321
2342
  if (this.oauthCallbackPromise) {
@@ -2343,6 +2364,21 @@ class MCPClientBase {
2343
2364
  this.eventEmitter.emit("auth:error", { provider, error });
2344
2365
  throw error;
2345
2366
  }
2367
+ if (options?.useExistingConnection) {
2368
+ const authStatus = await this.oauthManager.checkAuthStatus(provider);
2369
+ if (authStatus.authorized) {
2370
+ const tokenData = await this.oauthManager.getProviderToken(provider);
2371
+ if (tokenData) {
2372
+ this.eventEmitter.emit("auth:complete", {
2373
+ provider,
2374
+ accessToken: tokenData.accessToken,
2375
+ expiresAt: tokenData.expiresAt
2376
+ });
2377
+ this.authState.set(provider, { authenticated: true });
2378
+ }
2379
+ return;
2380
+ }
2381
+ }
2346
2382
  this.eventEmitter.emit("auth:started", { provider });
2347
2383
  try {
2348
2384
  await this.oauthManager.initiateFlow(provider, integration.oauth, options?.returnUrl);
@@ -1484,7 +1484,7 @@ class OAuthManager {
1484
1484
  }
1485
1485
  clearProviderToken(provider) {
1486
1486
  this.providerTokens.delete(provider);
1487
- if (!this.getTokenCallback && typeof window !== "undefined" && window.localStorage) {
1487
+ if (!this.skipLocalStorage && typeof window !== "undefined" && window.localStorage) {
1488
1488
  try {
1489
1489
  window.localStorage.removeItem(`integrate_token_${provider}`);
1490
1490
  } catch (error) {
@@ -1495,7 +1495,7 @@ class OAuthManager {
1495
1495
  clearAllProviderTokens() {
1496
1496
  const providers = Array.from(this.providerTokens.keys());
1497
1497
  this.providerTokens.clear();
1498
- if (!this.getTokenCallback && typeof window !== "undefined" && window.localStorage) {
1498
+ if (!this.skipLocalStorage && typeof window !== "undefined" && window.localStorage) {
1499
1499
  for (const provider of providers) {
1500
1500
  try {
1501
1501
  window.localStorage.removeItem(`integrate_token_${provider}`);
@@ -2174,7 +2174,28 @@ class MCPClientBase {
2174
2174
  await this.oauthCallbackPromise;
2175
2175
  this.oauthCallbackPromise = null;
2176
2176
  }
2177
- return this.authState.get(provider)?.authenticated ?? false;
2177
+ try {
2178
+ const tokenData = await this.oauthManager.getProviderToken(provider);
2179
+ const isAuthenticated = !!tokenData;
2180
+ const currentState = this.authState.get(provider);
2181
+ if (currentState) {
2182
+ currentState.authenticated = isAuthenticated;
2183
+ if (isAuthenticated) {
2184
+ currentState.lastError = undefined;
2185
+ }
2186
+ } else {
2187
+ this.authState.set(provider, { authenticated: isAuthenticated });
2188
+ }
2189
+ return isAuthenticated;
2190
+ } catch (error) {
2191
+ const currentState = this.authState.get(provider);
2192
+ if (currentState) {
2193
+ currentState.authenticated = false;
2194
+ } else {
2195
+ this.authState.set(provider, { authenticated: false });
2196
+ }
2197
+ return false;
2198
+ }
2178
2199
  }
2179
2200
  async authorizedProviders() {
2180
2201
  if (this.oauthCallbackPromise) {
@@ -2202,6 +2223,21 @@ class MCPClientBase {
2202
2223
  this.eventEmitter.emit("auth:error", { provider, error });
2203
2224
  throw error;
2204
2225
  }
2226
+ if (options?.useExistingConnection) {
2227
+ const authStatus = await this.oauthManager.checkAuthStatus(provider);
2228
+ if (authStatus.authorized) {
2229
+ const tokenData = await this.oauthManager.getProviderToken(provider);
2230
+ if (tokenData) {
2231
+ this.eventEmitter.emit("auth:complete", {
2232
+ provider,
2233
+ accessToken: tokenData.accessToken,
2234
+ expiresAt: tokenData.expiresAt
2235
+ });
2236
+ this.authState.set(provider, { authenticated: true });
2237
+ }
2238
+ return;
2239
+ }
2240
+ }
2205
2241
  this.eventEmitter.emit("auth:started", { provider });
2206
2242
  try {
2207
2243
  await this.oauthManager.initiateFlow(provider, integration.oauth, options?.returnUrl);
@@ -1484,7 +1484,7 @@ class OAuthManager {
1484
1484
  }
1485
1485
  clearProviderToken(provider) {
1486
1486
  this.providerTokens.delete(provider);
1487
- if (!this.getTokenCallback && typeof window !== "undefined" && window.localStorage) {
1487
+ if (!this.skipLocalStorage && typeof window !== "undefined" && window.localStorage) {
1488
1488
  try {
1489
1489
  window.localStorage.removeItem(`integrate_token_${provider}`);
1490
1490
  } catch (error) {
@@ -1495,7 +1495,7 @@ class OAuthManager {
1495
1495
  clearAllProviderTokens() {
1496
1496
  const providers = Array.from(this.providerTokens.keys());
1497
1497
  this.providerTokens.clear();
1498
- if (!this.getTokenCallback && typeof window !== "undefined" && window.localStorage) {
1498
+ if (!this.skipLocalStorage && typeof window !== "undefined" && window.localStorage) {
1499
1499
  for (const provider of providers) {
1500
1500
  try {
1501
1501
  window.localStorage.removeItem(`integrate_token_${provider}`);
@@ -2174,7 +2174,28 @@ class MCPClientBase {
2174
2174
  await this.oauthCallbackPromise;
2175
2175
  this.oauthCallbackPromise = null;
2176
2176
  }
2177
- return this.authState.get(provider)?.authenticated ?? false;
2177
+ try {
2178
+ const tokenData = await this.oauthManager.getProviderToken(provider);
2179
+ const isAuthenticated = !!tokenData;
2180
+ const currentState = this.authState.get(provider);
2181
+ if (currentState) {
2182
+ currentState.authenticated = isAuthenticated;
2183
+ if (isAuthenticated) {
2184
+ currentState.lastError = undefined;
2185
+ }
2186
+ } else {
2187
+ this.authState.set(provider, { authenticated: isAuthenticated });
2188
+ }
2189
+ return isAuthenticated;
2190
+ } catch (error) {
2191
+ const currentState = this.authState.get(provider);
2192
+ if (currentState) {
2193
+ currentState.authenticated = false;
2194
+ } else {
2195
+ this.authState.set(provider, { authenticated: false });
2196
+ }
2197
+ return false;
2198
+ }
2178
2199
  }
2179
2200
  async authorizedProviders() {
2180
2201
  if (this.oauthCallbackPromise) {
@@ -2202,6 +2223,21 @@ class MCPClientBase {
2202
2223
  this.eventEmitter.emit("auth:error", { provider, error });
2203
2224
  throw error;
2204
2225
  }
2226
+ if (options?.useExistingConnection) {
2227
+ const authStatus = await this.oauthManager.checkAuthStatus(provider);
2228
+ if (authStatus.authorized) {
2229
+ const tokenData = await this.oauthManager.getProviderToken(provider);
2230
+ if (tokenData) {
2231
+ this.eventEmitter.emit("auth:complete", {
2232
+ provider,
2233
+ accessToken: tokenData.accessToken,
2234
+ expiresAt: tokenData.expiresAt
2235
+ });
2236
+ this.authState.set(provider, { authenticated: true });
2237
+ }
2238
+ return;
2239
+ }
2240
+ }
2205
2241
  this.eventEmitter.emit("auth:started", { provider });
2206
2242
  try {
2207
2243
  await this.oauthManager.initiateFlow(provider, integration.oauth, options?.returnUrl);
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Cloudflare Workers AI Integration
3
+ *
4
+ * Helper functions to convert MCP tools to Cloudflare Workers AI format
5
+ */
6
+ import type { MCPClient } from "../client.js";
7
+ import type { MCPTool } from "../protocol/messages.js";
8
+ import { type AIToolsOptions } from "./utils.js";
9
+ /**
10
+ * Cloudflare AI tool definition
11
+ * Compatible with Cloudflare Workers AI
12
+ */
13
+ export interface CloudflareTool {
14
+ type: 'function';
15
+ function: {
16
+ name: string;
17
+ description: string;
18
+ parameters: {
19
+ type: 'object';
20
+ properties: Record<string, {
21
+ type: string;
22
+ description?: string;
23
+ }>;
24
+ required: string[];
25
+ };
26
+ };
27
+ }
28
+ /**
29
+ * Options for converting MCP tools to Cloudflare format
30
+ */
31
+ export interface CloudflareToolsOptions extends AIToolsOptions {
32
+ }
33
+ /**
34
+ * Convert a single MCP tool to Cloudflare Workers AI format
35
+ *
36
+ * @param mcpTool - The MCP tool definition
37
+ * @param client - The MCP client instance (used for executing the tool)
38
+ * @param options - Optional configuration including provider tokens
39
+ * @returns Cloudflare compatible tool definition
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * const cloudflareTool = convertMCPToolToCloudflare(mcpTool, client);
44
+ * ```
45
+ */
46
+ export declare function convertMCPToolToCloudflare(mcpTool: MCPTool, _client: MCPClient<any>, _options?: CloudflareToolsOptions): CloudflareTool;
47
+ /**
48
+ * Convert all enabled MCP tools to Cloudflare Workers AI format
49
+ * Returns a dictionary keyed by tool name
50
+ *
51
+ * @param client - The MCP client instance (must be connected)
52
+ * @param options - Optional configuration including provider tokens
53
+ * @returns Dictionary of Cloudflare compatible tool definitions
54
+ *
55
+ * @example
56
+ * ```typescript
57
+ * // Client-side usage
58
+ * const tools = convertMCPToolsToCloudflare(mcpClient);
59
+ *
60
+ * // Server-side with provider tokens
61
+ * const tools = convertMCPToolsToCloudflare(serverClient, {
62
+ * providerTokens: { github: 'ghp_...', gmail: 'ya29...' }
63
+ * });
64
+ * ```
65
+ */
66
+ export declare function convertMCPToolsToCloudflare(client: MCPClient<any>, options?: CloudflareToolsOptions): Record<string, CloudflareTool>;
67
+ /**
68
+ * Execute a tool call from Cloudflare Workers AI
69
+ *
70
+ * @param client - The MCP client instance
71
+ * @param toolCall - The tool call with name and arguments
72
+ * @param options - Optional configuration including provider tokens
73
+ * @returns Tool execution result as JSON string
74
+ *
75
+ * @example
76
+ * ```typescript
77
+ * const result = await executeCloudflareToolCall(client, {
78
+ * name: 'github_create_issue',
79
+ * arguments: { owner: 'user', repo: 'repo', title: 'Bug' }
80
+ * }, { providerTokens });
81
+ * ```
82
+ */
83
+ export declare function executeCloudflareToolCall(client: MCPClient<any>, toolCall: {
84
+ name: string;
85
+ arguments: Record<string, unknown> | string;
86
+ }, options?: CloudflareToolsOptions): Promise<string>;
87
+ /**
88
+ * Get tools in a format compatible with Cloudflare Workers AI
89
+ *
90
+ * Automatically connects the client if not already connected.
91
+ *
92
+ * @param client - The MCP client instance
93
+ * @param options - Optional configuration including provider tokens for server-side usage
94
+ * @returns Dictionary of tools ready to use with Cloudflare Workers AI
95
+ *
96
+ * @example
97
+ * ```typescript
98
+ * // Cloudflare Worker usage
99
+ * import { createMCPClient, githubIntegration } from 'integrate-sdk';
100
+ * import { getCloudflareTools, executeCloudflareToolCall } from 'integrate-sdk/ai/cloudflare';
101
+ *
102
+ * export default {
103
+ * async fetch(request: Request, env: Env): Promise<Response> {
104
+ * const client = createMCPClient({
105
+ * integrations: [githubIntegration({ clientId: env.GITHUB_CLIENT_ID })],
106
+ * });
107
+ *
108
+ * const tools = await getCloudflareTools(client);
109
+ * const ai = new Ai(env.AI);
110
+ *
111
+ * const response = await ai.run('@cf/meta/llama-3-8b-instruct', {
112
+ * messages: [{ role: 'user', content: 'Create a GitHub issue' }],
113
+ * tools: Object.values(tools)
114
+ * });
115
+ *
116
+ * return Response.json(response);
117
+ * }
118
+ * };
119
+ * ```
120
+ *
121
+ * @example
122
+ * ```typescript
123
+ * // Server-side usage with tokens from client
124
+ * import { createMCPServer, githubIntegration } from 'integrate-sdk/server';
125
+ * import { getCloudflareTools, executeCloudflareToolCall } from 'integrate-sdk/ai/cloudflare';
126
+ *
127
+ * const { client: serverClient } = createMCPServer({
128
+ * integrations: [githubIntegration({
129
+ * clientId: '...',
130
+ * clientSecret: '...'
131
+ * })],
132
+ * });
133
+ *
134
+ * // In your API route
135
+ * export async function POST(req: Request) {
136
+ * const providerTokens = JSON.parse(req.headers.get('x-integrate-tokens') || '{}');
137
+ * const tools = await getCloudflareTools(serverClient, { providerTokens });
138
+ *
139
+ * // Use with Cloudflare AI
140
+ * const ai = new Ai(env.AI);
141
+ * const response = await ai.run('@cf/meta/llama-3-8b-instruct', {
142
+ * messages: [{ role: 'user', content: 'Create a GitHub issue' }],
143
+ * tools: Object.values(tools)
144
+ * });
145
+ *
146
+ * // Handle tool calls
147
+ * if (response.tool_calls) {
148
+ * for (const toolCall of response.tool_calls) {
149
+ * await executeCloudflareToolCall(serverClient, toolCall, { providerTokens });
150
+ * }
151
+ * }
152
+ *
153
+ * return Response.json(response);
154
+ * }
155
+ * ```
156
+ */
157
+ export declare function getCloudflareTools(client: MCPClient<any>, options?: CloudflareToolsOptions): Promise<Record<string, CloudflareTool>>;
158
+ //# sourceMappingURL=cloudflare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../../src/ai/cloudflare.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjH;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ,CAAC;YACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;gBACzB,IAAI,EAAE,MAAM,CAAC;gBACb,WAAW,CAAC,EAAE,MAAM,CAAC;aACtB,CAAC,CAAC;YACH,QAAQ,EAAE,MAAM,EAAE,CAAC;SACpB,CAAC;KACH,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,cAAc;CAAI;AAElE;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,EACvB,QAAQ,CAAC,EAAE,sBAAsB,GAChC,cAAc,CAahB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAShC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE;IACR,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;CAC7C,EACD,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAezC"}