@contractspec/integration.providers-impls 3.0.0 → 3.1.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/README.md +59 -9
- package/dist/impls/async-event-queue.js +2 -0
- package/dist/impls/composio-fallback-resolver.d.ts +34 -0
- package/dist/impls/composio-fallback-resolver.js +580 -0
- package/dist/impls/composio-mcp.d.ts +22 -0
- package/dist/impls/composio-mcp.js +164 -0
- package/dist/impls/composio-proxies.d.ts +60 -0
- package/dist/impls/composio-proxies.js +311 -0
- package/dist/impls/composio-sdk.d.ts +25 -0
- package/dist/impls/composio-sdk.js +78 -0
- package/dist/impls/composio-types.d.ts +43 -0
- package/dist/impls/composio-types.js +54 -0
- package/dist/impls/elevenlabs-voice.js +2 -0
- package/dist/impls/fal-voice.js +2 -0
- package/dist/impls/fathom-meeting-recorder.js +2 -0
- package/dist/impls/fathom-meeting-recorder.mapper.js +2 -0
- package/dist/impls/fathom-meeting-recorder.utils.js +2 -0
- package/dist/impls/fathom-meeting-recorder.webhooks.js +2 -0
- package/dist/impls/fireflies-meeting-recorder.js +2 -0
- package/dist/impls/fireflies-meeting-recorder.queries.js +2 -0
- package/dist/impls/fireflies-meeting-recorder.utils.js +2 -0
- package/dist/impls/gcs-storage.js +2 -0
- package/dist/impls/gmail-inbound.js +2 -0
- package/dist/impls/gmail-outbound.js +2 -0
- package/dist/impls/google-calendar.js +2 -0
- package/dist/impls/gradium-voice.js +2 -0
- package/dist/impls/granola-meeting-recorder.js +2 -0
- package/dist/impls/granola-meeting-recorder.mcp.js +2 -0
- package/dist/impls/health/base-health-provider.js +2 -0
- package/dist/impls/health/hybrid-health-providers.js +2 -0
- package/dist/impls/health/official-health-providers.js +2 -0
- package/dist/impls/health/provider-normalizers.js +2 -0
- package/dist/impls/health/providers.js +2 -0
- package/dist/impls/health-provider-factory.js +2 -0
- package/dist/impls/index.d.ts +5 -0
- package/dist/impls/index.js +657 -0
- package/dist/impls/jira.js +2 -0
- package/dist/impls/linear.js +2 -0
- package/dist/impls/messaging-github.js +2 -0
- package/dist/impls/messaging-slack.js +2 -0
- package/dist/impls/messaging-whatsapp-meta.js +2 -0
- package/dist/impls/messaging-whatsapp-twilio.js +2 -0
- package/dist/impls/mistral-conversational.js +2 -0
- package/dist/impls/mistral-conversational.session.js +2 -0
- package/dist/impls/mistral-embedding.js +2 -0
- package/dist/impls/mistral-llm.js +2 -0
- package/dist/impls/mistral-stt.js +2 -0
- package/dist/impls/notion.js +2 -0
- package/dist/impls/posthog-reader.js +2 -0
- package/dist/impls/posthog-utils.js +2 -0
- package/dist/impls/posthog.js +2 -0
- package/dist/impls/postmark-email.js +2 -0
- package/dist/impls/powens-client.js +2 -0
- package/dist/impls/powens-openbanking.js +2 -0
- package/dist/impls/provider-factory.d.ts +24 -0
- package/dist/impls/provider-factory.js +70 -0
- package/dist/impls/qdrant-vector.js +2 -0
- package/dist/impls/stripe-payments.js +2 -0
- package/dist/impls/supabase-psql.js +2 -0
- package/dist/impls/supabase-vector.js +2 -0
- package/dist/impls/tldv-meeting-recorder.js +2 -0
- package/dist/impls/twilio-sms.js +2 -0
- package/dist/index.js +657 -0
- package/dist/node/impls/async-event-queue.js +3 -0
- package/dist/node/impls/composio-fallback-resolver.js +580 -0
- package/dist/node/impls/composio-mcp.js +164 -0
- package/dist/node/impls/composio-proxies.js +311 -0
- package/dist/node/impls/composio-sdk.js +78 -0
- package/dist/node/impls/composio-types.js +54 -0
- package/dist/node/impls/elevenlabs-voice.js +3 -0
- package/dist/node/impls/fal-voice.js +3 -0
- package/dist/node/impls/fathom-meeting-recorder.js +3 -0
- package/dist/node/impls/fathom-meeting-recorder.mapper.js +3 -0
- package/dist/node/impls/fathom-meeting-recorder.utils.js +3 -0
- package/dist/node/impls/fathom-meeting-recorder.webhooks.js +3 -0
- package/dist/node/impls/fireflies-meeting-recorder.js +3 -0
- package/dist/node/impls/fireflies-meeting-recorder.queries.js +3 -0
- package/dist/node/impls/fireflies-meeting-recorder.utils.js +3 -0
- package/dist/node/impls/gcs-storage.js +3 -0
- package/dist/node/impls/gmail-inbound.js +3 -0
- package/dist/node/impls/gmail-outbound.js +3 -0
- package/dist/node/impls/google-calendar.js +3 -0
- package/dist/node/impls/gradium-voice.js +3 -0
- package/dist/node/impls/granola-meeting-recorder.js +3 -0
- package/dist/node/impls/granola-meeting-recorder.mcp.js +3 -0
- package/dist/node/impls/health/base-health-provider.js +3 -0
- package/dist/node/impls/health/hybrid-health-providers.js +3 -0
- package/dist/node/impls/health/official-health-providers.js +3 -0
- package/dist/node/impls/health/provider-normalizers.js +3 -0
- package/dist/node/impls/health/providers.js +3 -0
- package/dist/node/impls/health-provider-factory.js +3 -0
- package/dist/node/impls/index.js +658 -0
- package/dist/node/impls/jira.js +3 -0
- package/dist/node/impls/linear.js +3 -0
- package/dist/node/impls/messaging-github.js +3 -0
- package/dist/node/impls/messaging-slack.js +3 -0
- package/dist/node/impls/messaging-whatsapp-meta.js +3 -0
- package/dist/node/impls/messaging-whatsapp-twilio.js +3 -0
- package/dist/node/impls/mistral-conversational.js +3 -0
- package/dist/node/impls/mistral-conversational.session.js +3 -0
- package/dist/node/impls/mistral-embedding.js +3 -0
- package/dist/node/impls/mistral-llm.js +3 -0
- package/dist/node/impls/mistral-stt.js +3 -0
- package/dist/node/impls/notion.js +3 -0
- package/dist/node/impls/posthog-reader.js +3 -0
- package/dist/node/impls/posthog-utils.js +3 -0
- package/dist/node/impls/posthog.js +3 -0
- package/dist/node/impls/postmark-email.js +3 -0
- package/dist/node/impls/powens-client.js +3 -0
- package/dist/node/impls/powens-openbanking.js +3 -0
- package/dist/node/impls/provider-factory.js +71 -0
- package/dist/node/impls/qdrant-vector.js +3 -0
- package/dist/node/impls/stripe-payments.js +3 -0
- package/dist/node/impls/supabase-psql.js +3 -0
- package/dist/node/impls/supabase-vector.js +3 -0
- package/dist/node/impls/tldv-meeting-recorder.js +3 -0
- package/dist/node/impls/twilio-sms.js +3 -0
- package/dist/node/index.js +658 -0
- package/dist/node/secrets/provider.js +3 -0
- package/dist/secrets/provider.js +2 -0
- package/package.json +71 -10
package/dist/node/impls/index.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
3
|
+
|
|
1
4
|
// src/impls/async-event-queue.ts
|
|
2
5
|
class AsyncEventQueue {
|
|
3
6
|
values = [];
|
|
@@ -42,6 +45,581 @@ class AsyncEventQueue {
|
|
|
42
45
|
}
|
|
43
46
|
}
|
|
44
47
|
|
|
48
|
+
// src/impls/composio-types.ts
|
|
49
|
+
var INTEGRATION_KEY_TO_TOOLKIT = {
|
|
50
|
+
payments: "stripe",
|
|
51
|
+
email: "gmail",
|
|
52
|
+
calendar: "googlecalendar",
|
|
53
|
+
sms: "twilio",
|
|
54
|
+
"messaging.slack": "slack",
|
|
55
|
+
"messaging.github": "github",
|
|
56
|
+
"messaging.discord": "discord",
|
|
57
|
+
"messaging.teams": "microsoft_teams",
|
|
58
|
+
"analytics.posthog": "posthog",
|
|
59
|
+
"project-management.linear": "linear",
|
|
60
|
+
"project-management.jira": "jira",
|
|
61
|
+
"project-management.notion": "notion",
|
|
62
|
+
"project-management.asana": "asana",
|
|
63
|
+
"project-management.trello": "trello",
|
|
64
|
+
"project-management.monday": "monday",
|
|
65
|
+
"storage.s3": "aws",
|
|
66
|
+
"storage.gcs": "google_cloud",
|
|
67
|
+
"storage.gdrive": "googledrive",
|
|
68
|
+
"storage.dropbox": "dropbox",
|
|
69
|
+
"storage.onedrive": "onedrive",
|
|
70
|
+
"crm.salesforce": "salesforce",
|
|
71
|
+
"crm.hubspot": "hubspot",
|
|
72
|
+
"crm.pipedrive": "pipedrive",
|
|
73
|
+
"database.supabase": "supabase",
|
|
74
|
+
"vectordb.supabase": "supabase",
|
|
75
|
+
"ai-llm": "openai"
|
|
76
|
+
};
|
|
77
|
+
var SESSION_TTL_MS = 30 * 60 * 1000;
|
|
78
|
+
function isSessionExpired(session) {
|
|
79
|
+
return Date.now() - session.createdAt > SESSION_TTL_MS;
|
|
80
|
+
}
|
|
81
|
+
function resolveToolkit(integrationKey) {
|
|
82
|
+
if (INTEGRATION_KEY_TO_TOOLKIT[integrationKey]) {
|
|
83
|
+
return INTEGRATION_KEY_TO_TOOLKIT[integrationKey];
|
|
84
|
+
}
|
|
85
|
+
for (const [prefix, toolkit] of Object.entries(INTEGRATION_KEY_TO_TOOLKIT)) {
|
|
86
|
+
if (integrationKey.startsWith(prefix)) {
|
|
87
|
+
return toolkit;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const parts = integrationKey.split(".");
|
|
91
|
+
const last = parts[parts.length - 1];
|
|
92
|
+
return parts.length > 1 && last ? last : integrationKey;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// src/impls/composio-mcp.ts
|
|
96
|
+
class ComposioMcpProvider {
|
|
97
|
+
sessions = new Map;
|
|
98
|
+
config;
|
|
99
|
+
composioInstance;
|
|
100
|
+
constructor(config) {
|
|
101
|
+
this.config = config;
|
|
102
|
+
}
|
|
103
|
+
async executeTool(toolName, args) {
|
|
104
|
+
const userId = args._userId ?? "default";
|
|
105
|
+
const session = await this.getOrCreateSession(userId);
|
|
106
|
+
try {
|
|
107
|
+
const response = await fetch(session.mcpUrl, {
|
|
108
|
+
method: "POST",
|
|
109
|
+
headers: {
|
|
110
|
+
"Content-Type": "application/json",
|
|
111
|
+
...session.mcpHeaders
|
|
112
|
+
},
|
|
113
|
+
body: JSON.stringify({
|
|
114
|
+
jsonrpc: "2.0",
|
|
115
|
+
id: crypto.randomUUID(),
|
|
116
|
+
method: "tools/call",
|
|
117
|
+
params: { name: toolName, arguments: args }
|
|
118
|
+
})
|
|
119
|
+
});
|
|
120
|
+
if (!response.ok) {
|
|
121
|
+
return {
|
|
122
|
+
success: false,
|
|
123
|
+
error: `Composio MCP call failed: ${response.status} ${response.statusText}`
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
const result = await response.json();
|
|
127
|
+
if (result.error) {
|
|
128
|
+
return {
|
|
129
|
+
success: false,
|
|
130
|
+
error: result.error.message ?? "Unknown MCP error"
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
return { success: true, data: result.result };
|
|
134
|
+
} catch (error) {
|
|
135
|
+
return {
|
|
136
|
+
success: false,
|
|
137
|
+
error: error instanceof Error ? error.message : String(error)
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
async searchTools(query) {
|
|
142
|
+
const session = await this.getOrCreateSession("default");
|
|
143
|
+
try {
|
|
144
|
+
const response = await fetch(session.mcpUrl, {
|
|
145
|
+
method: "POST",
|
|
146
|
+
headers: {
|
|
147
|
+
"Content-Type": "application/json",
|
|
148
|
+
...session.mcpHeaders
|
|
149
|
+
},
|
|
150
|
+
body: JSON.stringify({
|
|
151
|
+
jsonrpc: "2.0",
|
|
152
|
+
id: crypto.randomUUID(),
|
|
153
|
+
method: "tools/list",
|
|
154
|
+
params: {}
|
|
155
|
+
})
|
|
156
|
+
});
|
|
157
|
+
if (!response.ok)
|
|
158
|
+
return [];
|
|
159
|
+
const result = await response.json();
|
|
160
|
+
const tools = result.result?.tools ?? [];
|
|
161
|
+
return tools.filter((t) => t.name.toLowerCase().includes(query.toLowerCase()) || (t.description ?? "").toLowerCase().includes(query.toLowerCase())).map((t) => ({
|
|
162
|
+
name: t.name,
|
|
163
|
+
description: t.description ?? "",
|
|
164
|
+
toolkit: resolveToolkit(t.name.split("_")[0]?.toLowerCase() ?? ""),
|
|
165
|
+
parameters: t.inputSchema ?? {}
|
|
166
|
+
}));
|
|
167
|
+
} catch {
|
|
168
|
+
return [];
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
getMcpConfig(userId) {
|
|
172
|
+
const session = this.sessions.get(userId);
|
|
173
|
+
if (!session || isSessionExpired(session))
|
|
174
|
+
return;
|
|
175
|
+
return { url: session.mcpUrl, headers: session.mcpHeaders };
|
|
176
|
+
}
|
|
177
|
+
async getOrCreateSession(userId) {
|
|
178
|
+
const existing = this.sessions.get(userId);
|
|
179
|
+
if (existing && !isSessionExpired(existing)) {
|
|
180
|
+
return existing;
|
|
181
|
+
}
|
|
182
|
+
const client = await this.getClient();
|
|
183
|
+
const entity = await client.getEntity(userId);
|
|
184
|
+
const mcpUrl = entity.getMcpUrl();
|
|
185
|
+
const mcpHeaders = entity.getMcpHeaders();
|
|
186
|
+
const session = {
|
|
187
|
+
userId,
|
|
188
|
+
mcpUrl,
|
|
189
|
+
mcpHeaders,
|
|
190
|
+
createdAt: Date.now()
|
|
191
|
+
};
|
|
192
|
+
this.sessions.set(userId, session);
|
|
193
|
+
return session;
|
|
194
|
+
}
|
|
195
|
+
async getClient() {
|
|
196
|
+
if (this.composioInstance)
|
|
197
|
+
return this.composioInstance;
|
|
198
|
+
const { Composio } = await import("@composio/core");
|
|
199
|
+
this.composioInstance = new Composio({
|
|
200
|
+
apiKey: this.config.apiKey,
|
|
201
|
+
...this.config.baseUrl ? { baseUrl: this.config.baseUrl } : {}
|
|
202
|
+
});
|
|
203
|
+
return this.composioInstance;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// src/impls/composio-sdk.ts
|
|
208
|
+
class ComposioSdkProvider {
|
|
209
|
+
config;
|
|
210
|
+
client;
|
|
211
|
+
constructor(config) {
|
|
212
|
+
this.config = config;
|
|
213
|
+
}
|
|
214
|
+
async executeTool(toolName, args) {
|
|
215
|
+
const client = await this.getClient();
|
|
216
|
+
const userId = args._userId ?? "default";
|
|
217
|
+
try {
|
|
218
|
+
const entity = await client.getEntity(userId);
|
|
219
|
+
const result = await entity.execute(toolName, args);
|
|
220
|
+
return { success: true, data: result };
|
|
221
|
+
} catch (error) {
|
|
222
|
+
return {
|
|
223
|
+
success: false,
|
|
224
|
+
error: error instanceof Error ? error.message : String(error)
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
async searchTools(query) {
|
|
229
|
+
const client = await this.getClient();
|
|
230
|
+
try {
|
|
231
|
+
const tools = await client.actions.list({ query, limit: 20 });
|
|
232
|
+
return tools.map((t) => ({
|
|
233
|
+
name: t.name,
|
|
234
|
+
description: t.description ?? "",
|
|
235
|
+
toolkit: t.appName ?? "",
|
|
236
|
+
parameters: t.parameters ?? {}
|
|
237
|
+
}));
|
|
238
|
+
} catch {
|
|
239
|
+
return [];
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
async getConnectedAccounts(userId) {
|
|
243
|
+
const client = await this.getClient();
|
|
244
|
+
try {
|
|
245
|
+
const entity = await client.getEntity(userId);
|
|
246
|
+
const connections = await entity.getConnections();
|
|
247
|
+
return connections.map((c) => ({
|
|
248
|
+
id: c.id,
|
|
249
|
+
appName: c.appName,
|
|
250
|
+
status: c.status
|
|
251
|
+
}));
|
|
252
|
+
} catch {
|
|
253
|
+
return [];
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
async getMcpConfig(userId) {
|
|
257
|
+
const client = await this.getClient();
|
|
258
|
+
try {
|
|
259
|
+
const entity = await client.getEntity(userId);
|
|
260
|
+
return {
|
|
261
|
+
url: entity.getMcpUrl(),
|
|
262
|
+
headers: entity.getMcpHeaders()
|
|
263
|
+
};
|
|
264
|
+
} catch {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
async getClient() {
|
|
269
|
+
if (this.client)
|
|
270
|
+
return this.client;
|
|
271
|
+
const { Composio } = await import("@composio/core");
|
|
272
|
+
this.client = new Composio({
|
|
273
|
+
apiKey: this.config.apiKey,
|
|
274
|
+
...this.config.baseUrl ? { baseUrl: this.config.baseUrl } : {}
|
|
275
|
+
});
|
|
276
|
+
return this.client;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// src/impls/composio-proxies.ts
|
|
281
|
+
function composioToolName(toolkit, action) {
|
|
282
|
+
return `${toolkit.toUpperCase()}_${action.toUpperCase()}`;
|
|
283
|
+
}
|
|
284
|
+
function unwrapResult(result, fallback) {
|
|
285
|
+
if (!result.success) {
|
|
286
|
+
throw new Error(`Composio tool execution failed: ${result.error}`);
|
|
287
|
+
}
|
|
288
|
+
return result.data ?? fallback;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
class ComposioMessagingProxy {
|
|
292
|
+
proxy;
|
|
293
|
+
toolkit;
|
|
294
|
+
constructor(proxy, toolkit) {
|
|
295
|
+
this.proxy = proxy;
|
|
296
|
+
this.toolkit = toolkit;
|
|
297
|
+
}
|
|
298
|
+
async sendMessage(input) {
|
|
299
|
+
const result = await this.proxy.executeTool(composioToolName(this.toolkit, "SEND_MESSAGE"), {
|
|
300
|
+
channel: input.channelId,
|
|
301
|
+
thread_ts: input.threadId,
|
|
302
|
+
text: input.text,
|
|
303
|
+
recipient: input.recipientId
|
|
304
|
+
});
|
|
305
|
+
const data = unwrapResult(result, {});
|
|
306
|
+
return {
|
|
307
|
+
id: String(data.id ?? data.ts ?? crypto.randomUUID()),
|
|
308
|
+
providerMessageId: data.ts,
|
|
309
|
+
status: "sent",
|
|
310
|
+
sentAt: new Date
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
async updateMessage(messageId, input) {
|
|
314
|
+
const result = await this.proxy.executeTool(composioToolName(this.toolkit, "UPDATE_MESSAGE"), {
|
|
315
|
+
message_id: messageId,
|
|
316
|
+
channel: input.channelId,
|
|
317
|
+
text: input.text
|
|
318
|
+
});
|
|
319
|
+
const data = unwrapResult(result, {});
|
|
320
|
+
return {
|
|
321
|
+
id: String(data.id ?? messageId),
|
|
322
|
+
status: "sent",
|
|
323
|
+
sentAt: new Date
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
class ComposioEmailProxy {
|
|
329
|
+
proxy;
|
|
330
|
+
toolkit;
|
|
331
|
+
constructor(proxy, toolkit) {
|
|
332
|
+
this.proxy = proxy;
|
|
333
|
+
this.toolkit = toolkit;
|
|
334
|
+
}
|
|
335
|
+
async sendEmail(message) {
|
|
336
|
+
const result = await this.proxy.executeTool(composioToolName(this.toolkit, "SEND_EMAIL"), {
|
|
337
|
+
to: message.to.map((a) => a.email).join(","),
|
|
338
|
+
cc: message.cc?.map((a) => a.email).join(","),
|
|
339
|
+
bcc: message.bcc?.map((a) => a.email).join(","),
|
|
340
|
+
subject: message.subject,
|
|
341
|
+
body: message.htmlBody ?? message.textBody ?? "",
|
|
342
|
+
from: message.from.email
|
|
343
|
+
});
|
|
344
|
+
const data = unwrapResult(result, {});
|
|
345
|
+
return {
|
|
346
|
+
id: String(data.id ?? data.messageId ?? crypto.randomUUID()),
|
|
347
|
+
providerMessageId: data.messageId,
|
|
348
|
+
queuedAt: new Date
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
class ComposioPaymentsProxy {
|
|
354
|
+
proxy;
|
|
355
|
+
toolkit;
|
|
356
|
+
constructor(proxy, toolkit) {
|
|
357
|
+
this.proxy = proxy;
|
|
358
|
+
this.toolkit = toolkit;
|
|
359
|
+
}
|
|
360
|
+
async createCustomer(input) {
|
|
361
|
+
const result = await this.proxy.executeTool(composioToolName(this.toolkit, "CREATE_CUSTOMER"), { email: input.email, name: input.name, description: input.description });
|
|
362
|
+
const data = unwrapResult(result, {});
|
|
363
|
+
return {
|
|
364
|
+
id: String(data.id ?? crypto.randomUUID()),
|
|
365
|
+
email: data.email ?? input.email,
|
|
366
|
+
name: data.name ?? input.name
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
async getCustomer(customerId) {
|
|
370
|
+
const result = await this.proxy.executeTool(composioToolName(this.toolkit, "GET_CUSTOMER"), { customer_id: customerId });
|
|
371
|
+
if (!result.success)
|
|
372
|
+
return null;
|
|
373
|
+
const data = result.data;
|
|
374
|
+
if (!data)
|
|
375
|
+
return null;
|
|
376
|
+
return {
|
|
377
|
+
id: String(data.id ?? customerId),
|
|
378
|
+
email: data.email,
|
|
379
|
+
name: data.name
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
async createPaymentIntent(input) {
|
|
383
|
+
const result = await this.proxy.executeTool(composioToolName(this.toolkit, "CREATE_PAYMENT_INTENT"), {
|
|
384
|
+
amount: input.amount.amount,
|
|
385
|
+
currency: input.amount.currency,
|
|
386
|
+
customer_id: input.customerId,
|
|
387
|
+
description: input.description
|
|
388
|
+
});
|
|
389
|
+
const data = unwrapResult(result, {});
|
|
390
|
+
return {
|
|
391
|
+
id: String(data.id ?? crypto.randomUUID()),
|
|
392
|
+
amount: input.amount,
|
|
393
|
+
status: data.status ?? "requires_payment_method",
|
|
394
|
+
customerId: input.customerId,
|
|
395
|
+
clientSecret: data.client_secret
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
async capturePayment(paymentIntentId, input) {
|
|
399
|
+
const result = await this.proxy.executeTool(composioToolName(this.toolkit, "CAPTURE_PAYMENT"), { payment_intent_id: paymentIntentId, amount: input?.amount?.amount });
|
|
400
|
+
const data = unwrapResult(result, {});
|
|
401
|
+
return {
|
|
402
|
+
id: paymentIntentId,
|
|
403
|
+
amount: input?.amount ?? { amount: 0, currency: "usd" },
|
|
404
|
+
status: data.status ?? "succeeded"
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
async cancelPaymentIntent(paymentIntentId) {
|
|
408
|
+
const result = await this.proxy.executeTool(composioToolName(this.toolkit, "CANCEL_PAYMENT_INTENT"), { payment_intent_id: paymentIntentId });
|
|
409
|
+
const data = unwrapResult(result, {});
|
|
410
|
+
return {
|
|
411
|
+
id: paymentIntentId,
|
|
412
|
+
amount: { amount: 0, currency: "usd" },
|
|
413
|
+
status: data.status ?? "canceled"
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
async refundPayment(input) {
|
|
417
|
+
const result = await this.proxy.executeTool(composioToolName(this.toolkit, "REFUND_PAYMENT"), {
|
|
418
|
+
payment_intent_id: input.paymentIntentId,
|
|
419
|
+
amount: input.amount?.amount,
|
|
420
|
+
reason: input.reason
|
|
421
|
+
});
|
|
422
|
+
const data = unwrapResult(result, {});
|
|
423
|
+
return {
|
|
424
|
+
id: String(data.id ?? crypto.randomUUID()),
|
|
425
|
+
paymentIntentId: input.paymentIntentId,
|
|
426
|
+
amount: input.amount ?? { amount: 0, currency: "usd" },
|
|
427
|
+
status: "succeeded"
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
async listInvoices(_query) {
|
|
431
|
+
const result = await this.proxy.executeTool(composioToolName(this.toolkit, "LIST_INVOICES"), { customer_id: _query?.customerId, limit: _query?.limit });
|
|
432
|
+
if (!result.success)
|
|
433
|
+
return [];
|
|
434
|
+
const items = result.data ?? [];
|
|
435
|
+
return items.map((i) => ({
|
|
436
|
+
id: String(i.id),
|
|
437
|
+
status: i.status ?? "open",
|
|
438
|
+
amountDue: {
|
|
439
|
+
amount: Number(i.amount_due ?? 0),
|
|
440
|
+
currency: String(i.currency ?? "usd")
|
|
441
|
+
}
|
|
442
|
+
}));
|
|
443
|
+
}
|
|
444
|
+
async listTransactions(_query) {
|
|
445
|
+
const result = await this.proxy.executeTool(composioToolName(this.toolkit, "LIST_TRANSACTIONS"), { customer_id: _query?.customerId, limit: _query?.limit });
|
|
446
|
+
if (!result.success)
|
|
447
|
+
return [];
|
|
448
|
+
const items = result.data ?? [];
|
|
449
|
+
return items.map((i) => ({
|
|
450
|
+
id: String(i.id),
|
|
451
|
+
amount: {
|
|
452
|
+
amount: Number(i.amount ?? 0),
|
|
453
|
+
currency: String(i.currency ?? "usd")
|
|
454
|
+
},
|
|
455
|
+
type: "capture",
|
|
456
|
+
status: "succeeded",
|
|
457
|
+
createdAt: new Date
|
|
458
|
+
}));
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
class ComposioProjectManagementProxy {
|
|
463
|
+
proxy;
|
|
464
|
+
toolkit;
|
|
465
|
+
constructor(proxy, toolkit) {
|
|
466
|
+
this.proxy = proxy;
|
|
467
|
+
this.toolkit = toolkit;
|
|
468
|
+
}
|
|
469
|
+
async createWorkItem(input) {
|
|
470
|
+
const result = await this.proxy.executeTool(composioToolName(this.toolkit, "CREATE_ISSUE"), {
|
|
471
|
+
title: input.title,
|
|
472
|
+
description: input.description,
|
|
473
|
+
priority: input.priority,
|
|
474
|
+
assignee_id: input.assigneeId,
|
|
475
|
+
project_id: input.projectId,
|
|
476
|
+
labels: input.tags
|
|
477
|
+
});
|
|
478
|
+
const data = unwrapResult(result, {});
|
|
479
|
+
return {
|
|
480
|
+
id: String(data.id ?? data.key ?? crypto.randomUUID()),
|
|
481
|
+
title: input.title,
|
|
482
|
+
url: data.url,
|
|
483
|
+
status: data.status,
|
|
484
|
+
priority: input.priority,
|
|
485
|
+
tags: input.tags,
|
|
486
|
+
projectId: input.projectId
|
|
487
|
+
};
|
|
488
|
+
}
|
|
489
|
+
async createWorkItems(items) {
|
|
490
|
+
return Promise.all(items.map((item) => this.createWorkItem(item)));
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
class ComposioCalendarProxy {
|
|
495
|
+
proxy;
|
|
496
|
+
toolkit;
|
|
497
|
+
constructor(proxy, toolkit) {
|
|
498
|
+
this.proxy = proxy;
|
|
499
|
+
this.toolkit = toolkit;
|
|
500
|
+
}
|
|
501
|
+
async listEvents(query) {
|
|
502
|
+
const result = await this.proxy.executeTool(composioToolName(this.toolkit, "LIST_EVENTS"), {
|
|
503
|
+
calendar_id: query.calendarId,
|
|
504
|
+
time_min: query.timeMin?.toISOString(),
|
|
505
|
+
time_max: query.timeMax?.toISOString(),
|
|
506
|
+
max_results: query.maxResults
|
|
507
|
+
});
|
|
508
|
+
if (!result.success)
|
|
509
|
+
return { events: [] };
|
|
510
|
+
const items = result.data ?? [];
|
|
511
|
+
return {
|
|
512
|
+
events: items.map((e) => ({
|
|
513
|
+
id: String(e.id),
|
|
514
|
+
calendarId: query.calendarId,
|
|
515
|
+
title: String(e.summary ?? e.title ?? ""),
|
|
516
|
+
start: new Date(String(e.start ?? Date.now())),
|
|
517
|
+
end: new Date(String(e.end ?? Date.now()))
|
|
518
|
+
}))
|
|
519
|
+
};
|
|
520
|
+
}
|
|
521
|
+
async createEvent(input) {
|
|
522
|
+
const result = await this.proxy.executeTool(composioToolName(this.toolkit, "CREATE_EVENT"), {
|
|
523
|
+
calendar_id: input.calendarId,
|
|
524
|
+
summary: input.title,
|
|
525
|
+
description: input.description,
|
|
526
|
+
location: input.location,
|
|
527
|
+
start: input.start.toISOString(),
|
|
528
|
+
end: input.end.toISOString(),
|
|
529
|
+
attendees: input.attendees?.map((a) => a.email)
|
|
530
|
+
});
|
|
531
|
+
const data = unwrapResult(result, {});
|
|
532
|
+
return {
|
|
533
|
+
id: String(data.id ?? crypto.randomUUID()),
|
|
534
|
+
calendarId: input.calendarId,
|
|
535
|
+
title: input.title,
|
|
536
|
+
start: input.start,
|
|
537
|
+
end: input.end
|
|
538
|
+
};
|
|
539
|
+
}
|
|
540
|
+
async updateEvent(calendarId, eventId, input) {
|
|
541
|
+
const result = await this.proxy.executeTool(composioToolName(this.toolkit, "UPDATE_EVENT"), {
|
|
542
|
+
calendar_id: calendarId,
|
|
543
|
+
event_id: eventId,
|
|
544
|
+
summary: input.title,
|
|
545
|
+
description: input.description,
|
|
546
|
+
start: input.start?.toISOString(),
|
|
547
|
+
end: input.end?.toISOString()
|
|
548
|
+
});
|
|
549
|
+
const data = unwrapResult(result, {});
|
|
550
|
+
return {
|
|
551
|
+
id: eventId,
|
|
552
|
+
calendarId,
|
|
553
|
+
title: String(data.summary ?? input.title ?? ""),
|
|
554
|
+
start: input.start ?? new Date,
|
|
555
|
+
end: input.end ?? new Date
|
|
556
|
+
};
|
|
557
|
+
}
|
|
558
|
+
async deleteEvent(calendarId, eventId) {
|
|
559
|
+
await this.proxy.executeTool(composioToolName(this.toolkit, "DELETE_EVENT"), { calendar_id: calendarId, event_id: eventId });
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
class ComposioGenericProxy {
|
|
564
|
+
proxy;
|
|
565
|
+
toolkit;
|
|
566
|
+
constructor(proxy, toolkit) {
|
|
567
|
+
this.proxy = proxy;
|
|
568
|
+
this.toolkit = toolkit;
|
|
569
|
+
}
|
|
570
|
+
async executeTool(action, args) {
|
|
571
|
+
return this.proxy.executeTool(composioToolName(this.toolkit, action), args);
|
|
572
|
+
}
|
|
573
|
+
async searchTools(query) {
|
|
574
|
+
return this.proxy.searchTools(query);
|
|
575
|
+
}
|
|
576
|
+
getToolkit() {
|
|
577
|
+
return this.toolkit;
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
// src/impls/composio-fallback-resolver.ts
|
|
582
|
+
class ComposioFallbackResolver {
|
|
583
|
+
mcpProvider;
|
|
584
|
+
sdkProvider;
|
|
585
|
+
preferredTransport;
|
|
586
|
+
constructor(config) {
|
|
587
|
+
this.mcpProvider = new ComposioMcpProvider(config);
|
|
588
|
+
this.sdkProvider = new ComposioSdkProvider(config);
|
|
589
|
+
this.preferredTransport = config.preferredTransport;
|
|
590
|
+
}
|
|
591
|
+
canHandle(_integrationKey) {
|
|
592
|
+
return true;
|
|
593
|
+
}
|
|
594
|
+
createMessagingProxy(context) {
|
|
595
|
+
const toolkit = resolveToolkit(context.spec.meta.key);
|
|
596
|
+
return new ComposioMessagingProxy(this.getProxy(), toolkit);
|
|
597
|
+
}
|
|
598
|
+
createEmailProxy(context) {
|
|
599
|
+
const toolkit = resolveToolkit(context.spec.meta.key);
|
|
600
|
+
return new ComposioEmailProxy(this.getProxy(), toolkit);
|
|
601
|
+
}
|
|
602
|
+
createPaymentsProxy(context) {
|
|
603
|
+
const toolkit = resolveToolkit(context.spec.meta.key);
|
|
604
|
+
return new ComposioPaymentsProxy(this.getProxy(), toolkit);
|
|
605
|
+
}
|
|
606
|
+
createProjectManagementProxy(context) {
|
|
607
|
+
const toolkit = resolveToolkit(context.spec.meta.key);
|
|
608
|
+
return new ComposioProjectManagementProxy(this.getProxy(), toolkit);
|
|
609
|
+
}
|
|
610
|
+
createCalendarProxy(context) {
|
|
611
|
+
const toolkit = resolveToolkit(context.spec.meta.key);
|
|
612
|
+
return new ComposioCalendarProxy(this.getProxy(), toolkit);
|
|
613
|
+
}
|
|
614
|
+
createGenericProxy(context) {
|
|
615
|
+
const toolkit = resolveToolkit(context.spec.meta.key);
|
|
616
|
+
return new ComposioGenericProxy(this.getProxy(), toolkit);
|
|
617
|
+
}
|
|
618
|
+
getProxy() {
|
|
619
|
+
return this.preferredTransport === "sdk" ? this.sdkProvider : this.mcpProvider;
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
|
|
45
623
|
// src/impls/elevenlabs-voice.ts
|
|
46
624
|
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";
|
|
47
625
|
var FORMAT_MAP = {
|
|
@@ -6407,9 +6985,29 @@ async function safeReadError4(response) {
|
|
|
6407
6985
|
|
|
6408
6986
|
// src/impls/provider-factory.ts
|
|
6409
6987
|
import { Buffer as Buffer6 } from "node:buffer";
|
|
6988
|
+
import { resolveIntegrationRequestContext } from "@contractspec/lib.contracts-integrations/integrations/runtime";
|
|
6989
|
+
import { buildAuthHeaders } from "@contractspec/lib.contracts-integrations/integrations/auth-helpers";
|
|
6990
|
+
import { findAuthConfig } from "@contractspec/lib.contracts-integrations/integrations/auth";
|
|
6410
6991
|
var SECRET_CACHE = new Map;
|
|
6411
6992
|
|
|
6412
6993
|
class IntegrationProviderFactory {
|
|
6994
|
+
composioFallback;
|
|
6995
|
+
constructor(options) {
|
|
6996
|
+
this.composioFallback = options?.composioFallback;
|
|
6997
|
+
}
|
|
6998
|
+
async resolveProviderContext(context) {
|
|
6999
|
+
const secrets = await this.loadSecrets(context);
|
|
7000
|
+
const { transport, authMethod, apiVersion } = resolveIntegrationRequestContext(context.spec, context.connection);
|
|
7001
|
+
let authHeaders = {};
|
|
7002
|
+
if (authMethod && context.spec.supportedAuthMethods) {
|
|
7003
|
+
const authConfig = findAuthConfig(context.spec.supportedAuthMethods, authMethod);
|
|
7004
|
+
if (authConfig) {
|
|
7005
|
+
const stringSecrets = Object.fromEntries(Object.entries(secrets).filter(([, v]) => typeof v === "string").map(([k, v]) => [k, v]));
|
|
7006
|
+
authHeaders = buildAuthHeaders(authConfig, stringSecrets);
|
|
7007
|
+
}
|
|
7008
|
+
}
|
|
7009
|
+
return { transport, authMethod, apiVersion, authHeaders, secrets };
|
|
7010
|
+
}
|
|
6413
7011
|
async createPaymentsProvider(context) {
|
|
6414
7012
|
const secrets = await this.loadSecrets(context);
|
|
6415
7013
|
switch (context.spec.meta.key) {
|
|
@@ -6418,6 +7016,9 @@ class IntegrationProviderFactory {
|
|
|
6418
7016
|
apiKey: requireSecret(secrets, "apiKey", "Stripe API key is required")
|
|
6419
7017
|
});
|
|
6420
7018
|
default:
|
|
7019
|
+
if (this.composioFallback?.canHandle(context.spec.meta.key)) {
|
|
7020
|
+
return this.composioFallback.createPaymentsProxy(context);
|
|
7021
|
+
}
|
|
6421
7022
|
throw new Error(`Unsupported payments integration: ${context.spec.meta.key}`);
|
|
6422
7023
|
}
|
|
6423
7024
|
}
|
|
@@ -6431,6 +7032,9 @@ class IntegrationProviderFactory {
|
|
|
6431
7032
|
messageStream: context.config.messageStream
|
|
6432
7033
|
});
|
|
6433
7034
|
default:
|
|
7035
|
+
if (this.composioFallback?.canHandle(context.spec.meta.key)) {
|
|
7036
|
+
return this.composioFallback.createEmailProxy(context);
|
|
7037
|
+
}
|
|
6434
7038
|
throw new Error(`Unsupported email integration: ${context.spec.meta.key}`);
|
|
6435
7039
|
}
|
|
6436
7040
|
}
|
|
@@ -6444,6 +7048,9 @@ class IntegrationProviderFactory {
|
|
|
6444
7048
|
fromNumber: context.config.fromNumber
|
|
6445
7049
|
});
|
|
6446
7050
|
default:
|
|
7051
|
+
if (this.composioFallback?.canHandle(context.spec.meta.key)) {
|
|
7052
|
+
return this.composioFallback.createMessagingProxy(context);
|
|
7053
|
+
}
|
|
6447
7054
|
throw new Error(`Unsupported SMS integration: ${context.spec.meta.key}`);
|
|
6448
7055
|
}
|
|
6449
7056
|
}
|
|
@@ -6477,6 +7084,9 @@ class IntegrationProviderFactory {
|
|
|
6477
7084
|
fromNumber: config?.fromNumber
|
|
6478
7085
|
});
|
|
6479
7086
|
default:
|
|
7087
|
+
if (this.composioFallback?.canHandle(context.spec.meta.key)) {
|
|
7088
|
+
return this.composioFallback.createMessagingProxy(context);
|
|
7089
|
+
}
|
|
6480
7090
|
throw new Error(`Unsupported messaging integration: ${context.spec.meta.key}`);
|
|
6481
7091
|
}
|
|
6482
7092
|
}
|
|
@@ -6500,6 +7110,9 @@ class IntegrationProviderFactory {
|
|
|
6500
7110
|
sslMode: config?.sslMode
|
|
6501
7111
|
});
|
|
6502
7112
|
default:
|
|
7113
|
+
if (this.composioFallback?.canHandle(context.spec.meta.key)) {
|
|
7114
|
+
return this.composioFallback.createGenericProxy(context);
|
|
7115
|
+
}
|
|
6503
7116
|
throw new Error(`Unsupported vector store integration: ${context.spec.meta.key}`);
|
|
6504
7117
|
}
|
|
6505
7118
|
}
|
|
@@ -6516,6 +7129,9 @@ class IntegrationProviderFactory {
|
|
|
6516
7129
|
personalApiKey: requireSecret(secrets, "personalApiKey", "PostHog personalApiKey is required")
|
|
6517
7130
|
});
|
|
6518
7131
|
default:
|
|
7132
|
+
if (this.composioFallback?.canHandle(context.spec.meta.key)) {
|
|
7133
|
+
return this.composioFallback.createGenericProxy(context);
|
|
7134
|
+
}
|
|
6519
7135
|
throw new Error(`Unsupported analytics integration: ${context.spec.meta.key}`);
|
|
6520
7136
|
}
|
|
6521
7137
|
}
|
|
@@ -6530,6 +7146,9 @@ class IntegrationProviderFactory {
|
|
|
6530
7146
|
sslMode: config?.sslMode
|
|
6531
7147
|
});
|
|
6532
7148
|
default:
|
|
7149
|
+
if (this.composioFallback?.canHandle(context.spec.meta.key)) {
|
|
7150
|
+
return this.composioFallback.createGenericProxy(context);
|
|
7151
|
+
}
|
|
6533
7152
|
throw new Error(`Unsupported database integration: ${context.spec.meta.key}`);
|
|
6534
7153
|
}
|
|
6535
7154
|
}
|
|
@@ -6543,6 +7162,9 @@ class IntegrationProviderFactory {
|
|
|
6543
7162
|
clientOptions: secrets.type === "service_account" ? { credentials: secrets } : undefined
|
|
6544
7163
|
});
|
|
6545
7164
|
default:
|
|
7165
|
+
if (this.composioFallback?.canHandle(context.spec.meta.key)) {
|
|
7166
|
+
return this.composioFallback.createGenericProxy(context);
|
|
7167
|
+
}
|
|
6546
7168
|
throw new Error(`Unsupported storage integration: ${context.spec.meta.key}`);
|
|
6547
7169
|
}
|
|
6548
7170
|
}
|
|
@@ -6575,6 +7197,9 @@ class IntegrationProviderFactory {
|
|
|
6575
7197
|
pollIntervalMs: config?.pollIntervalMs
|
|
6576
7198
|
});
|
|
6577
7199
|
default:
|
|
7200
|
+
if (this.composioFallback?.canHandle(context.spec.meta.key)) {
|
|
7201
|
+
return this.composioFallback.createGenericProxy(context);
|
|
7202
|
+
}
|
|
6578
7203
|
throw new Error(`Unsupported voice integration: ${context.spec.meta.key}`);
|
|
6579
7204
|
}
|
|
6580
7205
|
}
|
|
@@ -6590,6 +7215,9 @@ class IntegrationProviderFactory {
|
|
|
6590
7215
|
serverURL: config?.serverURL
|
|
6591
7216
|
});
|
|
6592
7217
|
default:
|
|
7218
|
+
if (this.composioFallback?.canHandle(context.spec.meta.key)) {
|
|
7219
|
+
return this.composioFallback.createGenericProxy(context);
|
|
7220
|
+
}
|
|
6593
7221
|
throw new Error(`Unsupported STT integration: ${context.spec.meta.key}`);
|
|
6594
7222
|
}
|
|
6595
7223
|
}
|
|
@@ -6610,6 +7238,9 @@ class IntegrationProviderFactory {
|
|
|
6610
7238
|
}
|
|
6611
7239
|
});
|
|
6612
7240
|
default:
|
|
7241
|
+
if (this.composioFallback?.canHandle(context.spec.meta.key)) {
|
|
7242
|
+
return this.composioFallback.createGenericProxy(context);
|
|
7243
|
+
}
|
|
6613
7244
|
throw new Error(`Unsupported conversational integration: ${context.spec.meta.key}`);
|
|
6614
7245
|
}
|
|
6615
7246
|
}
|
|
@@ -6650,6 +7281,9 @@ class IntegrationProviderFactory {
|
|
|
6650
7281
|
descriptionProperty: config?.descriptionProperty
|
|
6651
7282
|
});
|
|
6652
7283
|
default:
|
|
7284
|
+
if (this.composioFallback?.canHandle(context.spec.meta.key)) {
|
|
7285
|
+
return this.composioFallback.createProjectManagementProxy(context);
|
|
7286
|
+
}
|
|
6653
7287
|
throw new Error(`Unsupported project management integration: ${context.spec.meta.key}`);
|
|
6654
7288
|
}
|
|
6655
7289
|
}
|
|
@@ -6698,6 +7332,9 @@ class IntegrationProviderFactory {
|
|
|
6698
7332
|
webhookSecret: secrets.webhookSecret
|
|
6699
7333
|
});
|
|
6700
7334
|
default:
|
|
7335
|
+
if (this.composioFallback?.canHandle(context.spec.meta.key)) {
|
|
7336
|
+
return this.composioFallback.createGenericProxy(context);
|
|
7337
|
+
}
|
|
6701
7338
|
throw new Error(`Unsupported meeting recorder integration: ${context.spec.meta.key}`);
|
|
6702
7339
|
}
|
|
6703
7340
|
}
|
|
@@ -6710,6 +7347,9 @@ class IntegrationProviderFactory {
|
|
|
6710
7347
|
defaultModel: context.config.model
|
|
6711
7348
|
});
|
|
6712
7349
|
default:
|
|
7350
|
+
if (this.composioFallback?.canHandle(context.spec.meta.key)) {
|
|
7351
|
+
return this.composioFallback.createGenericProxy(context);
|
|
7352
|
+
}
|
|
6713
7353
|
throw new Error(`Unsupported LLM integration: ${context.spec.meta.key}`);
|
|
6714
7354
|
}
|
|
6715
7355
|
}
|
|
@@ -6722,6 +7362,9 @@ class IntegrationProviderFactory {
|
|
|
6722
7362
|
defaultModel: context.config.embeddingModel
|
|
6723
7363
|
});
|
|
6724
7364
|
default:
|
|
7365
|
+
if (this.composioFallback?.canHandle(context.spec.meta.key)) {
|
|
7366
|
+
return this.composioFallback.createGenericProxy(context);
|
|
7367
|
+
}
|
|
6725
7368
|
throw new Error(`Unsupported embeddings integration: ${context.spec.meta.key}`);
|
|
6726
7369
|
}
|
|
6727
7370
|
}
|
|
@@ -6743,6 +7386,9 @@ class IntegrationProviderFactory {
|
|
|
6743
7386
|
});
|
|
6744
7387
|
}
|
|
6745
7388
|
default:
|
|
7389
|
+
if (this.composioFallback?.canHandle(context.spec.meta.key)) {
|
|
7390
|
+
return this.composioFallback.createGenericProxy(context);
|
|
7391
|
+
}
|
|
6746
7392
|
throw new Error(`Unsupported open banking integration: ${context.spec.meta.key}`);
|
|
6747
7393
|
}
|
|
6748
7394
|
}
|
|
@@ -6795,6 +7441,8 @@ function requireConfig(context, key, message) {
|
|
|
6795
7441
|
return value;
|
|
6796
7442
|
}
|
|
6797
7443
|
export {
|
|
7444
|
+
resolveToolkit,
|
|
7445
|
+
isSessionExpired,
|
|
6798
7446
|
createHealthProviderFromContext,
|
|
6799
7447
|
WhoopHealthProvider,
|
|
6800
7448
|
UnofficialHealthAutomationProvider,
|
|
@@ -6826,6 +7474,7 @@ export {
|
|
|
6826
7474
|
LinearProjectManagementProvider,
|
|
6827
7475
|
JiraProjectManagementProvider,
|
|
6828
7476
|
IntegrationProviderFactory,
|
|
7477
|
+
INTEGRATION_KEY_TO_TOOLKIT,
|
|
6829
7478
|
GranolaMeetingRecorderProvider,
|
|
6830
7479
|
GradiumVoiceProvider,
|
|
6831
7480
|
GoogleCloudStorageProvider,
|
|
@@ -6840,5 +7489,14 @@ export {
|
|
|
6840
7489
|
FalVoiceProvider,
|
|
6841
7490
|
ElevenLabsVoiceProvider,
|
|
6842
7491
|
EightSleepHealthProvider,
|
|
7492
|
+
ComposioSdkProvider,
|
|
7493
|
+
ComposioProjectManagementProxy,
|
|
7494
|
+
ComposioPaymentsProxy,
|
|
7495
|
+
ComposioMessagingProxy,
|
|
7496
|
+
ComposioMcpProvider,
|
|
7497
|
+
ComposioGenericProxy,
|
|
7498
|
+
ComposioFallbackResolver,
|
|
7499
|
+
ComposioEmailProxy,
|
|
7500
|
+
ComposioCalendarProxy,
|
|
6843
7501
|
AppleHealthBridgeProvider
|
|
6844
7502
|
};
|