@composio/core
Version:

1,247 lines (1,240 loc) • 296 kB
JavaScript
import "./chunk-CWQeghP5.mjs";
import { a as DEFAULT_BASE_URL, c as TEMP_FILES_DIRECTORY_NAME, d as getEnvVariable, f as getEnvsWithPrefix, i as COMPOSIO_LOG_LEVEL, l as USER_DATA_FILE_NAME, n as logger_default, o as DEFAULT_TOOL_ROUTER_SESSION_FILES_MOUNT_ID, r as COMPOSIO_DIR, s as IS_DEVELOPMENT_OR_CI, t as ComposioError, u as constants_exports } from "./ComposioError-ChkSdxqU.mjs";
import { A as AuthConfigErrorCodes, B as ToolErrorCodes, C as ValidationErrorCodes, D as ConnectionRequestErrorCodes, E as ToolkitErrorCodes, F as ComposioInvalidModifierError, G as ConnectedAccountErrorCodes, H as ComposioConnectedAccountNotFoundError, I as ComposioProviderNotDefinedError, L as ComposioToolExecutionError, M as ComposioCustomToolsNotInitializedError, N as ComposioGlobalExecuteToolFnNotSetError, O as ConnectionRequestFailedError, P as ComposioInvalidExecuteFunctionError, R as ComposioToolNotFoundError, S as ValidationError, T as ComposioToolkitNotFoundError, U as ComposioFailedToCreateConnectedAccountLink, V as handleToolExecutionError, W as ComposioMultipleConnectedAccountsError, _ as ComposioWebhookSignatureVerificationError, a as serializeCustomTools, b as SDKErrorCodes, c as CustomToolSlugSchema, d as ComposioFailedToCreatePusherClientError, f as ComposioFailedToGetSDKRealtimeCredentialsError, g as ComposioWebhookPayloadError, h as ComposioTriggerTypeNotFoundError, i as serializeCustomToolkits, j as ComposioAuthConfigNotFoundError, k as ConnectionRequestTimeoutError, l as RemoteFileDownloadError, m as ComposioFailedToUnsubscribeFromPusherChannelError, n as createCustomTool, o as CreateCustomToolBaseSchema, p as ComposioFailedToSubscribeToPusherChannelError, r as createCustomToolkit, s as CreateCustomToolkitBaseSchema, t as buildCustomToolsMapFromResponse, u as RemoteFileErrorCodes, v as TriggerErrorCodes, w as ComposioToolkitFetchError, x as JsonSchemaToZodError, y as ComposioNoAPIKeyError, z as ComposioToolVersionRequiredError } from "./CustomTool-AYNimqhf.mjs";
import { t as telemetry } from "./Telemetry-CjVa99gU.mjs";
import { i as getRandomShortId, t as arrayBufferToBase64 } from "./buffer-yOtEsT4J.mjs";
import ComposioClient, { APIError } from "@composio/client";
import { FileToolModifier } from "#file_tool_modifier";
import z, { z as z$1 } from "zod/v3";
import * as zodToJsonSchema from "zod-to-json-schema";
import { CONFIG_DEFAULTS } from "#config_defaults";
import { APIError as APIError$1 } from "openai";
import { platform } from "#platform";
import semver from "semver";
import { Files } from "#files";
import { jsonSchemaToZod } from "@composio/json-schema-to-zod";
//#region src/types/authConfigs.types.ts
const AuthConfigTypes = {
CUSTOM: "use_custom_auth",
COMPOSIO_MANAGED: "use_composio_managed_auth"
};
const AuthSchemeTypes = {
OAUTH1: "OAUTH1",
OAUTH2: "OAUTH2",
API_KEY: "API_KEY",
BASIC: "BASIC",
BEARER_TOKEN: "BEARER_TOKEN",
BILLCOM_AUTH: "BILLCOM_AUTH",
GOOGLE_SERVICE_ACCOUNT: "GOOGLE_SERVICE_ACCOUNT",
NO_AUTH: "NO_AUTH",
BASIC_WITH_JWT: "BASIC_WITH_JWT",
CALCOM_AUTH: "CALCOM_AUTH",
SERVICE_ACCOUNT: "SERVICE_ACCOUNT",
SAML: "SAML",
DCR_OAUTH: "DCR_OAUTH",
S2S_OAUTH2: "S2S_OAUTH2"
};
const AuthConfigCreationToolAccessConfigSchema = z$1.object({ toolsForConnectedAccountCreation: z$1.array(z$1.string()).optional() });
const AuthConfigToolAccessConfigSchema = z$1.object({
toolsAvailableForExecution: z$1.array(z$1.string()).optional(),
toolsForConnectedAccountCreation: z$1.array(z$1.string()).optional()
});
const AuthSchemeEnum = z$1.enum([
"OAUTH2",
"OAUTH1",
"API_KEY",
"BASIC",
"BILLCOM_AUTH",
"BEARER_TOKEN",
"GOOGLE_SERVICE_ACCOUNT",
"NO_AUTH",
"BASIC_WITH_JWT",
"CALCOM_AUTH",
"SERVICE_ACCOUNT",
"SAML",
"DCR_OAUTH",
"S2S_OAUTH2"
]);
const CreateCustomAuthConfigParamsSchema = z$1.object({
type: z$1.literal("use_custom_auth"),
name: z$1.string().optional(),
credentials: z$1.record(z$1.string(), z$1.union([
z$1.string(),
z$1.number(),
z$1.boolean()
])),
authScheme: AuthSchemeEnum,
proxyConfig: z$1.object({
proxyUrl: z$1.string(),
proxyAuthKey: z$1.string().optional()
}).optional(),
toolAccessConfig: AuthConfigCreationToolAccessConfigSchema.optional(),
isEnabledForToolRouter: z$1.boolean().optional()
});
const CreateComposioManagedAuthConfigParamsSchema = z$1.object({
type: z$1.literal("use_composio_managed_auth"),
name: z$1.string().optional(),
credentials: z$1.object({
scopes: z$1.union([z$1.string(), z$1.array(z$1.string())]).optional(),
user_scopes: z$1.union([z$1.string(), z$1.array(z$1.string())]).optional()
}).passthrough().optional(),
toolAccessConfig: AuthConfigCreationToolAccessConfigSchema.optional(),
isEnabledForToolRouter: z$1.boolean().optional()
});
/**
* Discriminated union of all possible auth config types.
*/
const CreateAuthConfigParamsSchema = z$1.discriminatedUnion("type", [CreateCustomAuthConfigParamsSchema, CreateComposioManagedAuthConfigParamsSchema]);
const CreateAuthConfigResponseSchema = z$1.object({
id: z$1.string(),
authScheme: z$1.string(),
isComposioManaged: z$1.boolean(),
toolkit: z$1.string()
});
const AuthConfigRetrieveResponseSchema = z$1.object({
id: z$1.string(),
name: z$1.string(),
toolkit: z$1.object({
logo: z$1.string(),
slug: z$1.string()
}),
noOfConnections: z$1.number(),
status: z$1.enum(["ENABLED", "DISABLED"]),
uuid: z$1.string(),
authScheme: AuthSchemeEnum.optional(),
credentials: z$1.record(z$1.string(), z$1.unknown()).optional(),
expectedInputFields: z$1.array(z$1.unknown()).optional(),
isEnabledForToolRouter: z$1.boolean().optional(),
restrictToFollowingTools: z$1.array(z$1.string()).optional(),
isComposioManaged: z$1.boolean().optional(),
createdBy: z$1.string().optional(),
createdAt: z$1.string().optional(),
lastUpdatedAt: z$1.string().optional(),
toolAccessConfig: AuthConfigToolAccessConfigSchema.optional()
});
const AuthConfigListParamsSchema = z$1.object({
cursor: z$1.string().optional(),
isComposioManaged: z$1.boolean().optional(),
limit: z$1.number().optional(),
toolkit: z$1.string().optional()
});
const AuthConfigListResponseSchema = z$1.object({
items: z$1.array(AuthConfigRetrieveResponseSchema),
nextCursor: z$1.string().nullable(),
totalPages: z$1.number()
});
const AuthCustomConfigUpdateParamsSchema = z$1.object({
type: z$1.literal("custom"),
credentials: z$1.object({
scopes: z$1.union([z$1.string(), z$1.array(z$1.string())]).optional(),
user_scopes: z$1.union([z$1.string(), z$1.array(z$1.string())]).optional()
}).passthrough().optional(),
isEnabledForToolRouter: z$1.boolean().optional(),
restrictToFollowingTools: z$1.array(z$1.string()).optional(),
toolAccessConfig: AuthConfigToolAccessConfigSchema.optional()
});
const AuthDefaultConfigUpdateParamsSchema = z$1.object({
type: z$1.literal("default"),
scopes: z$1.string().optional(),
isEnabledForToolRouter: z$1.boolean().optional(),
restrictToFollowingTools: z$1.array(z$1.string()).optional(),
toolAccessConfig: AuthConfigToolAccessConfigSchema.optional()
});
const AuthConfigUpdateParamsSchema = z$1.discriminatedUnion("type", [AuthCustomConfigUpdateParamsSchema, AuthDefaultConfigUpdateParamsSchema]);
//#endregion
//#region src/types/connectedAccountAuthStates.types.ts
const ConnectionStatuses = {
INITIALIZING: "INITIALIZING",
INITIATED: "INITIATED",
ACTIVE: "ACTIVE",
FAILED: "FAILED",
EXPIRED: "EXPIRED",
INACTIVE: "INACTIVE"
};
const RedirectableAuthSchemeSchema = z$1.enum([AuthSchemeTypes.OAUTH1, AuthSchemeTypes.OAUTH2]);
const BaseSchemeRaw = z$1.object({
subdomain: z$1.string().optional(),
["your-domain"]: z$1.string().optional(),
region: z$1.string().optional(),
shop: z$1.string().optional(),
account_url: z$1.string().optional(),
COMPANYDOMAIN: z$1.string().optional(),
extension: z$1.string().optional(),
form_api_base_url: z$1.string().optional(),
instanceEndpoint: z$1.string().optional(),
api_url: z$1.string().optional(),
borneo_dashboard_url: z$1.string().optional(),
proxy_username: z$1.string().optional(),
proxy_password: z$1.string().optional(),
domain: z$1.string().optional(),
version: z$1.string().optional(),
dc: z$1.string().optional(),
site_name: z$1.string().optional(),
instanceName: z$1.string().optional(),
account_id: z$1.string().optional(),
your_server: z$1.string().optional(),
server_location: z$1.string().optional(),
base_url: z$1.string().optional(),
api_key: z$1.string().optional(),
generic_api_key: z$1.string().optional(),
bearer_token: z$1.string().optional(),
basic_encoded: z$1.string().optional(),
long_redirect_url: z$1.boolean().optional(),
state_prefix: z$1.string().optional(),
registration_access_token: z$1.string().optional(),
registration_client_uri: z$1.string().optional(),
composio_link_redirect_url: z$1.string().optional()
}).catchall(z$1.unknown());
const Oauth2InitiatingConnectionDataSchema = BaseSchemeRaw.extend({ status: z$1.literal(ConnectionStatuses.INITIALIZING) }).catchall(z$1.unknown());
const Oauth2InitiatedConnectionDataSchema = Oauth2InitiatingConnectionDataSchema.extend({
status: z$1.literal(ConnectionStatuses.INITIATED),
code_verifier: z$1.string().optional(),
redirectUrl: z$1.string(),
callback_url: z$1.string().optional(),
finalRedirectUri: z$1.string().optional(),
webhook_signature: z$1.string().optional()
}).catchall(z$1.unknown());
const Oauth2ActiveConnectionDataSchema = Oauth2InitiatingConnectionDataSchema.extend({
status: z$1.literal(ConnectionStatuses.ACTIVE),
access_token: z$1.string(),
id_token: z$1.string().optional(),
token_type: z$1.string().optional(),
refresh_token: z$1.string().nullish(),
expires_in: z$1.union([
z$1.string(),
z$1.number(),
z$1.null()
]).optional(),
scope: z$1.union([
z$1.string(),
z$1.array(z$1.string()),
z$1.null()
]).optional(),
webhook_signature: z$1.string().optional(),
authed_user: z$1.object({
access_token: z$1.string().optional(),
scope: z$1.string().optional()
}).optional().describe("for slack user scopes")
}).catchall(z$1.unknown());
const Oauth2FailedConnectionDataSchema = Oauth2InitiatingConnectionDataSchema.extend({
status: z$1.literal(ConnectionStatuses.FAILED),
error: z$1.string().optional(),
error_description: z$1.string().optional()
}).catchall(z$1.unknown());
const Oauth2ExpiredConnectionDataSchema = Oauth2InitiatingConnectionDataSchema.extend({
status: z$1.literal(ConnectionStatuses.EXPIRED),
expired_at: z$1.string().optional()
}).catchall(z$1.unknown());
const Oauth2InactiveConnectionDataSchema = Oauth2InitiatingConnectionDataSchema.extend({
status: z$1.literal(ConnectionStatuses.INACTIVE),
access_token: z$1.string(),
id_token: z$1.string().optional(),
token_type: z$1.string().optional(),
refresh_token: z$1.string().nullish(),
expires_in: z$1.union([
z$1.string(),
z$1.number(),
z$1.null()
]).optional(),
scope: z$1.union([
z$1.string(),
z$1.array(z$1.string()),
z$1.null()
]).optional(),
webhook_signature: z$1.string().optional(),
authed_user: z$1.object({
access_token: z$1.string().optional(),
scope: z$1.string().optional()
}).optional().describe("for slack user scopes")
}).catchall(z$1.unknown());
const Oauth2ConnectionDataSchema = z$1.discriminatedUnion("status", [
Oauth2InitiatingConnectionDataSchema,
Oauth2InitiatedConnectionDataSchema,
Oauth2ActiveConnectionDataSchema,
Oauth2FailedConnectionDataSchema,
Oauth2ExpiredConnectionDataSchema,
Oauth2InactiveConnectionDataSchema
]);
const CustomOauth2ConnectionDataSchema = Oauth2ActiveConnectionDataSchema.omit({ status: true });
const S2SOauth2BaseSchema = BaseSchemeRaw.extend({ status: z$1.literal(ConnectionStatuses.INITIALIZING) }).catchall(z$1.unknown());
const S2SOauth2ConnectionDataSchema = z$1.discriminatedUnion("status", [
S2SOauth2BaseSchema,
S2SOauth2BaseSchema.extend({ status: z$1.literal(ConnectionStatuses.INITIATED) }).catchall(z$1.unknown()),
S2SOauth2BaseSchema.extend({
status: z$1.literal(ConnectionStatuses.ACTIVE),
access_token: z$1.string().optional(),
id_token: z$1.string().optional(),
token_type: z$1.string().optional(),
refresh_token: z$1.string().nullish(),
expires_in: z$1.union([
z$1.string(),
z$1.number(),
z$1.null()
]).optional(),
scope: z$1.union([
z$1.string(),
z$1.array(z$1.string()),
z$1.null()
]).optional()
}).catchall(z$1.unknown()),
S2SOauth2BaseSchema.extend({
status: z$1.literal(ConnectionStatuses.INACTIVE),
access_token: z$1.string().optional(),
id_token: z$1.string().optional(),
token_type: z$1.string().optional(),
refresh_token: z$1.string().nullish(),
expires_in: z$1.union([
z$1.string(),
z$1.number(),
z$1.null()
]).optional(),
scope: z$1.union([
z$1.string(),
z$1.array(z$1.string()),
z$1.null()
]).optional()
}).catchall(z$1.unknown()),
S2SOauth2BaseSchema.extend({
status: z$1.literal(ConnectionStatuses.FAILED),
error: z$1.string().optional(),
error_description: z$1.string().optional()
}).catchall(z$1.unknown()),
S2SOauth2BaseSchema.extend({
status: z$1.literal(ConnectionStatuses.EXPIRED),
expired_at: z$1.string().optional()
}).catchall(z$1.unknown())
]);
const CustomS2SOauth2ConnectionDataSchema = BaseSchemeRaw.extend({
access_token: z$1.string().optional(),
id_token: z$1.string().optional(),
token_type: z$1.string().optional(),
refresh_token: z$1.string().nullish().optional(),
expires_in: z$1.union([
z$1.string(),
z$1.number(),
z$1.null()
]).optional(),
scope: z$1.union([
z$1.string(),
z$1.array(z$1.string()),
z$1.null()
]).optional()
}).catchall(z$1.unknown());
const Oauth1InitiatingConnectionDataSchema = BaseSchemeRaw.extend({ status: z$1.literal(ConnectionStatuses.INITIALIZING) }).catchall(z$1.unknown());
const Oauth1InitiatedConnectionDataSchema = Oauth1InitiatingConnectionDataSchema.extend({
status: z$1.literal(ConnectionStatuses.INITIATED),
authUri: z$1.string(),
oauth_token: z$1.string(),
oauth_token_secret: z$1.string(),
redirectUrl: z$1.string(),
callbackUrl: z$1.string().optional()
}).catchall(z$1.unknown());
const Oauth1ActiveConnectionDataSchema = Oauth1InitiatingConnectionDataSchema.extend({
status: z$1.literal(ConnectionStatuses.ACTIVE),
oauth_token: z$1.string(),
oauth_token_secret: z$1.string(),
consumer_key: z$1.string().optional(),
oauth_verifier: z$1.string().optional(),
redirectUrl: z$1.string().optional(),
callback_url: z$1.string().optional()
}).catchall(z$1.unknown());
const Oauth1FailedConnectionDataSchema = Oauth1InitiatingConnectionDataSchema.extend({
status: z$1.literal(ConnectionStatuses.FAILED),
error: z$1.string().optional(),
error_description: z$1.string().optional()
}).catchall(z$1.unknown());
const Oauth1ExpiredConnectionDataSchema = Oauth1InitiatingConnectionDataSchema.extend({
status: z$1.literal(ConnectionStatuses.EXPIRED),
expired_at: z$1.string().optional()
}).catchall(z$1.unknown());
const Oauth1InactiveConnectionDataSchema = Oauth1InitiatingConnectionDataSchema.extend({
status: z$1.literal(ConnectionStatuses.INACTIVE),
oauth_token: z$1.string(),
oauth_token_secret: z$1.string(),
consumer_key: z$1.string().optional(),
oauth_verifier: z$1.string().optional(),
redirectUrl: z$1.string().optional(),
callback_url: z$1.string().optional()
}).catchall(z$1.unknown());
const Oauth1ConnectionDataSchema = z$1.discriminatedUnion("status", [
Oauth1InitiatingConnectionDataSchema,
Oauth1InitiatedConnectionDataSchema,
Oauth1ActiveConnectionDataSchema,
Oauth1FailedConnectionDataSchema,
Oauth1ExpiredConnectionDataSchema,
Oauth1InactiveConnectionDataSchema
]);
const CustomOauth1ConnectionDataSchema = Oauth1ActiveConnectionDataSchema.omit({ status: true });
const BillcomAuthInitiatingSchema = BaseSchemeRaw.extend({ status: z$1.literal(ConnectionStatuses.INITIALIZING) }).catchall(z$1.unknown());
const BillcomAuthConnectionDataSchema = z$1.discriminatedUnion("status", [
BillcomAuthInitiatingSchema,
BillcomAuthInitiatingSchema.extend({
status: z$1.literal(ConnectionStatuses.INITIATED),
redirectUrl: z$1.string()
}).catchall(z$1.unknown()),
BillcomAuthInitiatingSchema.extend({
status: z$1.literal(ConnectionStatuses.ACTIVE),
sessionId: z$1.string(),
devKey: z$1.string()
}).catchall(z$1.unknown()),
BillcomAuthInitiatingSchema.extend({
status: z$1.literal(ConnectionStatuses.FAILED),
error: z$1.string().optional(),
error_description: z$1.string().optional()
}).catchall(z$1.unknown()),
BillcomAuthInitiatingSchema.extend({
status: z$1.literal(ConnectionStatuses.EXPIRED),
expired_at: z$1.string().optional()
}).catchall(z$1.unknown()),
BillcomAuthInitiatingSchema.extend({ status: z$1.literal(ConnectionStatuses.INACTIVE) }).catchall(z$1.unknown())
]);
const BasicBaseSchema = BaseSchemeRaw.extend({ status: z$1.literal(ConnectionStatuses.INITIALIZING) }).catchall(z$1.unknown());
const BasicConnectionDataSchema = z$1.discriminatedUnion("status", [
BasicBaseSchema,
BasicBaseSchema.extend({ status: z$1.literal(ConnectionStatuses.INITIATED) }).catchall(z$1.unknown()),
BasicBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.ACTIVE),
username: z$1.string(),
password: z$1.string()
}).catchall(z$1.unknown()),
BasicBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.INACTIVE),
username: z$1.string(),
password: z$1.string()
}).catchall(z$1.unknown()),
BasicBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.FAILED),
username: z$1.string(),
password: z$1.string(),
error: z$1.string().optional(),
error_description: z$1.string().optional()
}).catchall(z$1.unknown()),
BasicBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.EXPIRED),
username: z$1.string(),
password: z$1.string(),
expired_at: z$1.string().optional()
}).catchall(z$1.unknown())
]);
const CustomBasicConnectionDataSchema = BaseSchemeRaw.extend({
username: z$1.string(),
password: z$1.string()
}).catchall(z$1.unknown());
const ApiKeyBaseSchema = BaseSchemeRaw.extend({ status: z$1.literal(ConnectionStatuses.INITIALIZING) }).catchall(z$1.unknown());
const ApiKeyConnectionDataSchema = z$1.discriminatedUnion("status", [
ApiKeyBaseSchema,
ApiKeyBaseSchema.extend({ status: z$1.literal(ConnectionStatuses.INITIATED) }).catchall(z$1.unknown()),
ApiKeyBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.ACTIVE),
api_key: z$1.string().optional(),
generic_api_key: z$1.string().optional()
}).catchall(z$1.unknown()),
ApiKeyBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.INACTIVE),
api_key: z$1.string().optional(),
generic_api_key: z$1.string().optional()
}).catchall(z$1.unknown()),
ApiKeyBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.FAILED),
error: z$1.string().optional(),
error_description: z$1.string().optional()
}).catchall(z$1.unknown()),
ApiKeyBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.EXPIRED),
expired_at: z$1.string().optional()
}).catchall(z$1.unknown())
]);
const CustomApiKeyConnectionDataSchema = BaseSchemeRaw.extend({
api_key: z$1.string().optional(),
generic_api_key: z$1.string().optional()
}).catchall(z$1.unknown());
const BearerTokenBaseSchema = BaseSchemeRaw.extend({ status: z$1.literal(ConnectionStatuses.INITIALIZING) }).catchall(z$1.unknown());
const BearerTokenConnectionDataSchema = z$1.discriminatedUnion("status", [
BearerTokenBaseSchema,
BearerTokenBaseSchema.extend({ status: z$1.literal(ConnectionStatuses.INITIATED) }).catchall(z$1.unknown()),
BearerTokenBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.ACTIVE),
token: z$1.string()
}).catchall(z$1.unknown()),
BearerTokenBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.INACTIVE),
token: z$1.string()
}).catchall(z$1.unknown()),
BearerTokenBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.FAILED),
error: z$1.string().optional(),
error_description: z$1.string().optional()
}).catchall(z$1.unknown()),
BearerTokenBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.EXPIRED),
expired_at: z$1.string().optional()
}).catchall(z$1.unknown())
]);
const CustomBearerTokenConnectionDataSchema = BaseSchemeRaw.extend({ token: z$1.string() }).catchall(z$1.unknown());
const GoogleServiceAccountBaseSchema = BaseSchemeRaw.extend({ status: z$1.literal(ConnectionStatuses.INITIALIZING) }).catchall(z$1.unknown());
const GoogleServiceAccountConnectionDataSchema = z$1.discriminatedUnion("status", [
GoogleServiceAccountBaseSchema,
GoogleServiceAccountBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.INITIATED),
redirectUrl: z$1.string(),
composio_link_redirect_url: z$1.string().optional()
}).catchall(z$1.unknown()),
GoogleServiceAccountBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.ACTIVE),
credentials_json: z$1.string()
}).catchall(z$1.unknown()),
GoogleServiceAccountBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.INACTIVE),
credentials_json: z$1.string()
}).catchall(z$1.unknown()),
GoogleServiceAccountBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.FAILED),
error: z$1.string().optional(),
error_description: z$1.string().optional()
}).catchall(z$1.unknown()),
GoogleServiceAccountBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.EXPIRED),
expired_at: z$1.string().optional()
}).catchall(z$1.unknown())
]);
const NoAuthBaseSchema = BaseSchemeRaw.extend({ status: z$1.literal(ConnectionStatuses.INITIALIZING) }).catchall(z$1.unknown());
const NoAuthConnectionDataSchema = z$1.discriminatedUnion("status", [
NoAuthBaseSchema,
NoAuthBaseSchema.extend({ status: z$1.literal(ConnectionStatuses.INITIATED) }).catchall(z$1.unknown()),
NoAuthBaseSchema.extend({ status: z$1.literal(ConnectionStatuses.ACTIVE) }).catchall(z$1.unknown()),
NoAuthBaseSchema.extend({ status: z$1.literal(ConnectionStatuses.INACTIVE) }).catchall(z$1.unknown()),
NoAuthBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.FAILED),
error: z$1.string().optional(),
error_description: z$1.string().optional()
}).catchall(z$1.unknown()),
NoAuthBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.EXPIRED),
expired_at: z$1.string().optional()
}).catchall(z$1.unknown())
]);
const CustomNoAuthConnectionDataSchema = BaseSchemeRaw.catchall(z$1.unknown());
const CalcomAuthBaseSchema = BaseSchemeRaw.extend({ status: z$1.literal(ConnectionStatuses.INITIALIZING) }).catchall(z$1.unknown());
const CalcomAuthConnectionDataSchema = z$1.discriminatedUnion("status", [
CalcomAuthBaseSchema,
CalcomAuthBaseSchema.extend({ status: z$1.literal(ConnectionStatuses.INITIATED) }).catchall(z$1.unknown()),
CalcomAuthBaseSchema.extend({ status: z$1.literal(ConnectionStatuses.ACTIVE) }).catchall(z$1.unknown()),
CalcomAuthBaseSchema.extend({ status: z$1.literal(ConnectionStatuses.INACTIVE) }).catchall(z$1.unknown()),
CalcomAuthBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.FAILED),
error: z$1.string().optional(),
error_description: z$1.string().optional()
}).catchall(z$1.unknown()),
CalcomAuthBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.EXPIRED),
expired_at: z$1.string().optional()
}).catchall(z$1.unknown())
]);
const BasicWithJwtBaseSchema = BaseSchemeRaw.extend({ status: z$1.literal(ConnectionStatuses.INITIALIZING) }).catchall(z$1.unknown());
const BasicWithJwtConnectionDataSchema = z$1.discriminatedUnion("status", [
BasicWithJwtBaseSchema,
BasicWithJwtBaseSchema.extend({ status: z$1.literal(ConnectionStatuses.INITIATED) }).catchall(z$1.unknown()),
BasicWithJwtBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.ACTIVE),
username: z$1.string(),
password: z$1.string()
}).catchall(z$1.unknown()),
BasicWithJwtBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.INACTIVE),
username: z$1.string(),
password: z$1.string()
}).catchall(z$1.unknown()),
BasicWithJwtBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.FAILED),
username: z$1.string(),
password: z$1.string(),
error: z$1.string().optional(),
error_description: z$1.string().optional()
}).catchall(z$1.unknown()),
BasicWithJwtBaseSchema.extend({
status: z$1.literal(ConnectionStatuses.EXPIRED),
username: z$1.string(),
password: z$1.string(),
expired_at: z$1.string().optional()
}).catchall(z$1.unknown())
]);
const CustomBasicWithJwtConnectionDataSchema = BaseSchemeRaw.extend({
username: z$1.string(),
password: z$1.string()
}).catchall(z$1.unknown());
const ServiceAccountInitiatingSchema = BaseSchemeRaw.extend({ status: z$1.literal(ConnectionStatuses.INITIALIZING) }).catchall(z$1.unknown());
const ServiceAccountConnectionDataSchema = z$1.discriminatedUnion("status", [
ServiceAccountInitiatingSchema,
ServiceAccountInitiatingSchema.extend({ status: z$1.literal(ConnectionStatuses.INITIATED) }).catchall(z$1.unknown()),
ServiceAccountInitiatingSchema.extend({
status: z$1.literal(ConnectionStatuses.ACTIVE),
application_id: z$1.string(),
installation_id: z$1.string(),
private_key: z$1.string()
}).catchall(z$1.unknown()),
ServiceAccountInitiatingSchema.extend({
status: z$1.literal(ConnectionStatuses.INACTIVE),
application_id: z$1.string(),
installation_id: z$1.string(),
private_key: z$1.string()
}).catchall(z$1.unknown())
]);
const CustomServiceAccountConnectionDataSchema = z$1.object({
application_id: z$1.string(),
installation_id: z$1.string(),
private_key: z$1.string()
}).merge(BaseSchemeRaw).catchall(z$1.unknown());
const SamlInitiatingSchema = BaseSchemeRaw.extend({ status: z$1.literal(ConnectionStatuses.INITIALIZING) }).catchall(z$1.unknown());
const SamlConnectionDataSchema = z$1.discriminatedUnion("status", [
SamlInitiatingSchema,
SamlInitiatingSchema.extend({ status: z$1.literal(ConnectionStatuses.INITIATED) }).catchall(z$1.unknown()),
SamlInitiatingSchema.extend({ status: z$1.literal(ConnectionStatuses.ACTIVE) }).catchall(z$1.unknown()),
SamlInitiatingSchema.extend({ status: z$1.literal(ConnectionStatuses.INACTIVE) }).catchall(z$1.unknown()),
SamlInitiatingSchema.extend({
status: z$1.literal(ConnectionStatuses.FAILED),
error: z$1.string().optional(),
error_description: z$1.string().optional()
}).catchall(z$1.unknown()),
SamlInitiatingSchema.extend({
status: z$1.literal(ConnectionStatuses.EXPIRED),
expired_at: z$1.string().optional()
}).catchall(z$1.unknown())
]);
BaseSchemeRaw.catchall(z$1.unknown());
const DcrOauthInitiatingSchema = BaseSchemeRaw.extend({ status: z$1.literal(ConnectionStatuses.INITIALIZING) }).catchall(z$1.unknown());
const DcrOauthConnectionDataSchema = z$1.discriminatedUnion("status", [
DcrOauthInitiatingSchema,
DcrOauthInitiatingSchema.extend({
status: z$1.literal(ConnectionStatuses.INITIATED),
client_id: z$1.string(),
redirectUrl: z$1.string(),
client_secret: z$1.string().optional(),
callback_url: z$1.string().optional(),
client_id_issued_at: z$1.number().optional(),
client_secret_expires_at: z$1.number().optional(),
code_verifier: z$1.string().optional(),
finalRedirectUri: z$1.string().optional()
}).catchall(z$1.unknown()),
DcrOauthInitiatingSchema.extend({
status: z$1.literal(ConnectionStatuses.ACTIVE),
access_token: z$1.string(),
client_id: z$1.string(),
token_type: z$1.string().optional(),
refresh_token: z$1.string().nullish(),
expires_in: z$1.union([
z$1.string(),
z$1.number(),
z$1.null()
]).optional(),
scope: z$1.union([
z$1.string(),
z$1.array(z$1.string()),
z$1.null()
]).optional(),
id_token: z$1.string().optional(),
client_secret: z$1.string().optional(),
client_id_issued_at: z$1.number().optional(),
client_secret_expires_at: z$1.number().optional()
}).catchall(z$1.unknown()),
DcrOauthInitiatingSchema.extend({
status: z$1.literal(ConnectionStatuses.INACTIVE),
access_token: z$1.string(),
client_id: z$1.string(),
token_type: z$1.string().optional(),
refresh_token: z$1.string().nullish(),
expires_in: z$1.union([
z$1.string(),
z$1.number(),
z$1.null()
]).optional(),
scope: z$1.union([
z$1.string(),
z$1.array(z$1.string()),
z$1.null()
]).optional(),
id_token: z$1.string().optional(),
client_secret: z$1.string().optional(),
client_id_issued_at: z$1.number().optional(),
client_secret_expires_at: z$1.number().optional()
}).catchall(z$1.unknown()),
DcrOauthInitiatingSchema.extend({
status: z$1.literal(ConnectionStatuses.FAILED),
error: z$1.string().optional(),
error_description: z$1.string().optional()
}).catchall(z$1.unknown()),
DcrOauthInitiatingSchema.extend({
status: z$1.literal(ConnectionStatuses.EXPIRED),
expired_at: z$1.string().optional()
}).catchall(z$1.unknown())
]);
const CustomDcrOauthConnectionDataSchema = z$1.object({
access_token: z$1.string(),
client_id: z$1.string()
}).merge(BaseSchemeRaw).catchall(z$1.unknown());
const ConnectionDataSchema = z$1.discriminatedUnion("authScheme", [
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.OAUTH1),
val: Oauth1ConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.OAUTH2),
val: Oauth2ConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.S2S_OAUTH2),
val: S2SOauth2ConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.API_KEY),
val: ApiKeyConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.BASIC),
val: BasicConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.BEARER_TOKEN),
val: BearerTokenConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.GOOGLE_SERVICE_ACCOUNT),
val: GoogleServiceAccountConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.NO_AUTH),
val: NoAuthConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.CALCOM_AUTH),
val: CalcomAuthConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.BILLCOM_AUTH),
val: BillcomAuthConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.BASIC_WITH_JWT),
val: BasicWithJwtConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.SERVICE_ACCOUNT),
val: ServiceAccountConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.SAML),
val: SamlConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.DCR_OAUTH),
val: DcrOauthConnectionDataSchema
})
]);
const CustomConnectionDataSchema = z$1.discriminatedUnion("authScheme", [
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.OAUTH2),
toolkitSlug: z$1.string(),
val: CustomOauth2ConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.S2S_OAUTH2),
toolkitSlug: z$1.string(),
val: CustomS2SOauth2ConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.DCR_OAUTH),
toolkitSlug: z$1.string(),
val: CustomDcrOauthConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.API_KEY),
toolkitSlug: z$1.string(),
val: CustomApiKeyConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.BASIC_WITH_JWT),
toolkitSlug: z$1.string(),
val: CustomBasicWithJwtConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.BASIC),
toolkitSlug: z$1.string(),
val: CustomBasicConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.BEARER_TOKEN),
toolkitSlug: z$1.string(),
val: CustomBearerTokenConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.OAUTH1),
toolkitSlug: z$1.string(),
val: CustomOauth1ConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.NO_AUTH),
toolkitSlug: z$1.string(),
val: CustomNoAuthConnectionDataSchema
}),
z$1.object({
authScheme: z$1.literal(AuthSchemeTypes.SERVICE_ACCOUNT),
toolkitSlug: z$1.string(),
val: CustomServiceAccountConnectionDataSchema
})
]);
//#endregion
//#region src/types/tool.types.ts
/**
* Toolkit is the collection of tools,
* A toolkit can be thought of as an app which provides a set of tools/actions/triggers.
*
* eg. Google Toolkit, which provides tools like Google Search, Google Maps, Google Translate, etc.
*/
const ToolkitSchema = z$1.object({
slug: z$1.string().describe("The slug of the toolkit"),
name: z$1.string().describe("The name of the toolkit"),
logo: z$1.string().describe("The logo of the toolkit").optional()
});
const JSONSchemaType = z$1.enum([
"string",
"number",
"integer",
"boolean",
"object",
"array",
"null"
]);
const JSONSchemaPropertySchema = z$1.object({
type: z$1.union([JSONSchemaType, z$1.array(JSONSchemaType)]).optional(),
description: z$1.string().optional(),
anyOf: z$1.lazy(() => z$1.array(JSONSchemaPropertySchema)).optional(),
oneOf: z$1.lazy(() => z$1.array(JSONSchemaPropertySchema)).optional(),
allOf: z$1.lazy(() => z$1.array(JSONSchemaPropertySchema)).optional(),
not: z$1.lazy(() => JSONSchemaPropertySchema).optional(),
title: z$1.string().optional(),
default: z$1.any().optional(),
nullable: z$1.boolean().optional(),
properties: z$1.lazy(() => z$1.record(z$1.string(), JSONSchemaPropertySchema)).optional(),
required: z$1.array(z$1.string()).optional(),
file_uploadable: z$1.boolean().optional(),
file_downloadable: z$1.boolean().optional(),
items: z$1.lazy(() => z$1.union([JSONSchemaPropertySchema, z$1.array(JSONSchemaPropertySchema)])).optional(),
enum: z$1.array(z$1.any()).optional(),
const: z$1.any().optional(),
minimum: z$1.number().optional(),
maximum: z$1.number().optional(),
exclusiveMinimum: z$1.number().optional(),
exclusiveMaximum: z$1.number().optional(),
multipleOf: z$1.number().optional(),
minLength: z$1.number().optional(),
maxLength: z$1.number().optional(),
pattern: z$1.string().optional(),
format: z$1.string().optional(),
minItems: z$1.number().optional(),
maxItems: z$1.number().optional(),
uniqueItems: z$1.boolean().optional(),
minProperties: z$1.number().optional(),
maxProperties: z$1.number().optional(),
patternProperties: z$1.lazy(() => z$1.record(z$1.string(), JSONSchemaPropertySchema)).optional(),
additionalProperties: z$1.union([z$1.boolean(), z$1.lazy(() => JSONSchemaPropertySchema)]).optional(),
examples: z$1.array(z$1.any()).optional(),
readOnly: z$1.boolean().optional(),
writeOnly: z$1.boolean().optional(),
if: z$1.lazy(() => JSONSchemaPropertySchema).optional(),
then: z$1.lazy(() => JSONSchemaPropertySchema).optional(),
else: z$1.lazy(() => JSONSchemaPropertySchema).optional(),
$ref: z$1.string().optional(),
definitions: z$1.record(z$1.string(), z$1.lazy(() => JSONSchemaPropertySchema)).optional(),
$defs: z$1.record(z$1.string(), z$1.lazy(() => JSONSchemaPropertySchema)).optional()
});
const ParametersSchema = z$1.object({
type: z$1.literal("object"),
anyOf: z$1.array(JSONSchemaPropertySchema).optional(),
oneOf: z$1.array(JSONSchemaPropertySchema).optional(),
allOf: z$1.array(JSONSchemaPropertySchema).optional(),
not: JSONSchemaPropertySchema.optional(),
properties: z$1.record(z$1.string(), JSONSchemaPropertySchema),
required: z$1.array(z$1.string()).optional(),
title: z$1.string().optional(),
default: z$1.any().optional(),
nullable: z$1.boolean().optional(),
description: z$1.string().optional(),
additionalProperties: z$1.boolean().default(false).optional()
});
/**
* Tool is a single action that can be performed by a toolkit.
* Tool is simlar to an action that an app can perform.
*
* eg. Google Search, Google Maps, Google Translate, etc.
*/
const ToolSchema = z$1.object({
slug: z$1.string().describe("The slug of the tool. eg. \"GOOGLE_SEARCH\""),
name: z$1.string().describe(`The name of the tool. eg. "Google Search"`),
description: z$1.string().optional().describe("The description of the tool"),
inputParameters: ParametersSchema.optional().describe("The input parameters of the tool"),
outputParameters: ParametersSchema.optional().describe("The output parameters of the tool"),
tags: z$1.array(z$1.string()).describe("The tags of the tool. eg: Important").default([]).optional(),
toolkit: ToolkitSchema.describe("The toolkit of the tool").optional(),
version: z$1.string().describe("The version of the tool, e.g. \"20250909_00\"").optional(),
isDeprecated: z$1.boolean().describe("Whether the tool is deprecated").optional(),
availableVersions: z$1.array(z$1.string()).describe("Available versions of the tool.").default([]).optional(),
scopes: z$1.array(z$1.string()).describe("The scopes of the tool. eg: [\"task:add\"]").optional(),
isNoAuth: z$1.boolean().describe("Do the tool support no auth?").optional()
});
/**
* ToolListResponse Schema
*/
const ToolListResponseSchema = z$1.object({
items: z$1.array(ToolSchema),
nextCursor: z$1.string().nullable().optional(),
totalPages: z$1.number()
});
const ToolkitLatestVersionSchema = z$1.literal("latest");
const ToolkitVersionSchema = z$1.union([ToolkitLatestVersionSchema, z$1.string()]);
const ToolkitVersionsSchema = z$1.record(z$1.string(), ToolkitVersionSchema);
const ToolkitVersionParamSchema = z$1.union([
ToolkitVersionsSchema,
ToolkitLatestVersionSchema,
z$1.undefined()
]).describe("The versioning of the toolkits. eg: { \"github\": \"latest\", \"slack\": \"20250902_00\" }");
const ToolListParamsSchema = z$1.object({
tools: z$1.array(z$1.string()).optional(),
toolkits: z$1.array(z$1.string()).optional(),
scopes: z$1.array(z$1.string()).optional(),
tags: z$1.array(z$1.string()).optional(),
limit: z$1.number().optional(),
search: z$1.string().optional(),
authConfigIds: z$1.array(z$1.string()).optional(),
important: z$1.boolean().optional()
});
/**
* CustomAuthParams is the parameters for the custom authentication.
*/
const CustomAuthParamsSchema = z$1.object({
baseURL: z$1.string().optional(),
body: z$1.record(z$1.string(), z$1.unknown()).optional(),
parameters: z$1.array(z$1.object({
in: z$1.enum(["query", "header"]),
name: z$1.string(),
value: z$1.union([z$1.string(), z$1.number()])
}))
});
/**
* Parameters for tool execution.
*
* @property {boolean} [allowTracing] - Enable tracing for this tool execution
* @property {string} [connectedAccountId] - The connected account ID to use for authenticated tools
* @property {CustomAuthParams} [customAuthParams] - Custom authentication parameters
* @property {CustomConnectionData} [customConnectionData] - Custom connection data (takes priority over customAuthParams)
* @property {Record<string, unknown>} [arguments] - The arguments to pass to the tool
* @property {string} [userId] - The user ID to execute the tool for (required for no-auth apps)
* @property {string} [version] - The specific version of the tool to execute (e.g., "20250909_00" or "latest")
* @property {boolean} [dangerouslySkipVersionCheck] - Skip version validation when using "latest" version.
* **Warning:** This may cause unexpected behavior when new toolkit versions are released.
* Only use this if you understand the risks. Recommended alternatives:
* - Specify a concrete version in the `version` parameter
* - Configure toolkit versions at SDK initialization level
* - Set toolkit version via environment variable (COMPOSIO_TOOLKIT_VERSION_<TOOLKIT_SLUG>)
* @property {string} [text] - Additional text input for the tool
*
* @example Recommended: Execute with a specific version
* ```typescript
* const params: ToolExecuteParams = {
* userId: 'default',
* version: '20250909_00',
* arguments: { owner: 'composio', repo: 'sdk' }
* };
* ```
*
* @example With dangerouslySkipVersionCheck (use with caution)
* ```typescript
* const params: ToolExecuteParams = {
* userId: 'default',
* dangerouslySkipVersionCheck: true,
* arguments: { userId: 'pg' }
* };
* ```
*/
const ToolExecuteParamsSchema = z$1.object({
allowTracing: z$1.boolean().optional(),
connectedAccountId: z$1.string().optional(),
customAuthParams: CustomAuthParamsSchema.optional(),
customConnectionData: CustomConnectionDataSchema.optional(),
arguments: z$1.record(z$1.string(), z$1.unknown()).optional(),
userId: z$1.string().optional(),
version: z$1.union([z$1.literal("latest"), z$1.string()]).optional(),
dangerouslySkipVersionCheck: z$1.boolean().optional(),
text: z$1.string().optional()
});
const ToolExecuteMetaParamsSchema = z$1.object({
sessionId: z$1.string(),
arguments: z$1.record(z$1.string(), z$1.unknown()).optional()
});
/**
* ToolResponse Schema
*/
const ToolExecuteResponseSchema = z$1.object({
data: z$1.record(z$1.string(), z$1.unknown()),
error: z$1.string().nullable(),
successful: z$1.boolean(),
logId: z$1.string().optional(),
sessionInfo: z$1.unknown().optional()
});
const ToolProxyParamsSchema = z$1.object({
endpoint: z$1.string(),
method: z$1.enum([
"GET",
"POST",
"PUT",
"DELETE",
"PATCH"
]),
body: z$1.unknown().optional(),
parameters: z$1.array(z$1.object({
in: z$1.enum(["query", "header"]),
name: z$1.string(),
value: z$1.union([z$1.string(), z$1.number()])
})).optional(),
connectedAccountId: z$1.string().optional(),
customConnectionData: CustomConnectionDataSchema.describe("DEPRECATED: This field is deprecated and will be removed in the future.").optional()
});
//#endregion
//#region src/types/connectedAccounts.types.ts
/**
* Connected Account create parameters
*/
const ConnectedAccountStatuses = {
INITIALIZING: "INITIALIZING",
INITIATED: "INITIATED",
ACTIVE: "ACTIVE",
FAILED: "FAILED",
EXPIRED: "EXPIRED",
INACTIVE: "INACTIVE"
};
const ConnectedAccountStatusSchema = z$1.enum([
ConnectedAccountStatuses.INITIALIZING,
ConnectedAccountStatuses.INITIATED,
ConnectedAccountStatuses.ACTIVE,
ConnectedAccountStatuses.FAILED,
ConnectedAccountStatuses.EXPIRED,
ConnectedAccountStatuses.INACTIVE
]);
const CreateConnectedAccountParamsSchema = z$1.object({
authConfig: z$1.object({ id: z$1.string() }),
connection: z$1.object({
data: z$1.record(z$1.string(), z$1.unknown()).optional(),
callbackUrl: z$1.string().optional(),
userId: z$1.string().optional()
})
});
const DefaultCreateConnectedAccountParamsSchema = z$1.object({
auth_config: z$1.object({ id: z$1.string() }),
connection: z$1.object({
state: ConnectionDataSchema.optional(),
data: z$1.record(z$1.string(), z$1.unknown()).optional(),
callback_url: z$1.string().optional(),
user_id: z$1.string().optional()
})
});
const CreateConnectedAccountOptionsSchema = z$1.object({
allowMultiple: z$1.boolean().optional(),
callbackUrl: z$1.string().optional(),
config: ConnectionDataSchema.optional()
});
/**
* Connected Account create response
*/
const CreateConnectedAccountResponseSchema = z$1.object({
id: z$1.string(),
status: ConnectedAccountStatusSchema,
redirectUrl: z$1.string().nullable()
});
const ConnectedAccountAuthConfigSchema = z$1.object({
id: z$1.string(),
authScheme: AuthSchemeEnum.optional(),
isComposioManaged: z$1.boolean(),
isDisabled: z$1.boolean()
});
const ConnectedAccountRetrieveResponseSchema = z$1.object({
id: z$1.string(),
authConfig: ConnectedAccountAuthConfigSchema,
data: z$1.record(z$1.string(), z$1.unknown()).optional(),
params: z$1.record(z$1.string(), z$1.unknown()).optional(),
status: ConnectedAccountStatusSchema,
statusReason: z$1.string().nullable(),
toolkit: z$1.object({ slug: z$1.string() }),
state: ConnectionDataSchema.optional(),
testRequestEndpoint: z$1.string().optional(),
isDisabled: z$1.boolean(),
createdAt: z$1.string(),
updatedAt: z$1.string()
});
const ConnectedAccountListParamsSchema = z$1.object({
authConfigIds: z$1.array(z$1.string()).nullable().optional().describe("The auth config ids of the connected accounts"),
cursor: z$1.string().nullish().describe("The cursor to paginate through the connected accounts"),
limit: z$1.number().nullable().optional().describe("The limit of the connected accounts to return"),
orderBy: z$1.enum(["created_at", "updated_at"]).optional().describe("The order by of the connected accounts"),
statuses: z$1.array(ConnectedAccountStatusSchema).nullable().optional().describe("The statuses of the connected accounts"),
toolkitSlugs: z$1.array(z$1.string()).nullable().optional().describe("The toolkit slugs of the connected accounts"),
userIds: z$1.array(z$1.string()).nullable().optional().describe("The user ids of the connected accounts")
});
const ConnectedAccountListResponseSchema = z$1.object({
items: z$1.array(ConnectedAccountRetrieveResponseSchema).describe("The list of connected accounts"),
nextCursor: z$1.string().nullish().describe("The next cursor to paginate through the connected accounts"),
totalPages: z$1.number().describe("The total number of pages of connected accounts")
});
const CreateConnectedAccountLinkOptionsSchema = z$1.object({ callbackUrl: z$1.string().optional() });
const CreateConnectedAccountLinkResponseSchema = z$1.object({ redirectUrl: z$1.string() });
const ConnectedAccountRefreshOptionsSchema = z$1.object({
redirectUrl: z$1.string().optional(),
validateCredentials: z$1.boolean().optional()
});
//#endregion
//#region src/utils/transform.ts
function transform(raw) {
return { with(schema) {
return { using(transformer, options) {
const transformed = transformer(raw);
const result = schema.safeParse(transformed);
if (!result.success) {
const label = options?.label ? ` for ${options.label}` : "";
const issues = result.error.issues.map((issue) => ` - ${issue.path.join(".") || "parameter"}: ${issue.message}`).join("\n");
logger_default.warn(`Transform validation failed${label}:\n${issues}`);
return transformed;
}
return result.data;
} };
} };
}
//#endregion
//#region src/utils/transformers/connectedAccounts.ts
/**
* Transforms the raw connected account response from the Composio API to the SDK format.
*
* This method converts property names from snake_case to camelCase and reorganizes
* the data structure to match the SDK's standardized format.
*
* @param {RawConnectedAccountListResponse['items'][0]|RawConnectedAccountRetrieveResponse} response - The raw API response to transform
* @returns {Promise<ConnectedAccountRetrieveResponse>} The transformed response
* @throws {ZodError} If the response fails validation against the expected schema
*
* @private
*/
function transformConnectedAccountResponse(response) {
const parseState = (state) => {
try {
return state ? ConnectionDataSchema.parse(state) : void 0;
} catch (error) {
logger_default.warn("Unsupported auth scheme in connected account state, ignoring state field", { error });
return;
}
};
return transform(response).with(ConnectedAccountRetrieveResponseSchema).using((response$1) => ({
...response$1,
authConfig: {
...response$1.auth_config,
id: response$1.auth_config.id,
authScheme: response$1.auth_config.auth_scheme,
isComposioManaged: response$1.auth_config.is_composio_managed,
isDisabled: response$1.auth_config.is_disabled
},
data: response$1.data ?? void 0,
state: parseState(response$1.state),
status: response$1.status,
statusReason: response$1.status_reason,
isDisabled: response$1.is_disabled,
createdAt: response$1.created_at,
updatedAt: response$1.updated_at,
testRequestEndpoint: response$1.test_request_endpoint
}));
}
/**
* Transforms the raw connected account list response from the Composio API to the SDK format.
*
* This method converts property names from snake_case to camelCase and reorganizes
* the data structure to match the SDK's standardized format.
*
* @param {RawConnectedAccountListResponse} response - The raw API response to transform
* @returns {ConnectedAccountListResponse} The transformed response
* @throws {ZodError} If the response fails validation against the expected schema
*
* @private
*/
function transformConnectedAccountListResponse(response) {
return transform(response).with(ConnectedAccountListResponseSchema).using((response$1) => ({
items: response$1.items.map(transformConnectedAccountResponse),
nextCursor: response$1.next_cursor ?? null,
totalPages: response$1.total_pages
}));
}
//#endregion
//#region src/models/CustomTools.ts
var CustomTools = class {
client;
customToolsRegistry;
constructor(client) {
if (!client) throw new ComposioError("ComposioClient is required");
this.client = client;
this.customToolsRegistry = /* @__PURE__ */ new Map();
telemetry.instrument(this, "CustomTools");
}
/**
* Create a custom tool and registers it in the registry.
* This is just an in memory registry and is not persisted.
* @param {CustomToolOptions} toolOptions CustomToolOptions
* @returns {Tool} The tool created
*
* @example
* ```typescript
* // Create a custom tool with input parameters
* const customTool = await composio.customTools.createTool({
* name: 'My Custom Tool',
* description: 'A tool that performs a custom operation',
* slug: 'MY_CUSTOM_TOOL',
* inputParams: z.object({
* query: z.string().describe('The search query'),
* limit: z.number().optional().describe('Maximum number of results')
* }),
* execute: async (input, connectionConfig, executeToolRequest) => {
* // Custom implementation logic
* return {
* data: { results: ['result1', 'result2'] }
* };
* }
* });
* ```
*/
async createTool(toolOptions) {
const { slug, execute, inputParams, name, description } = toolOptions;
if (!slug || !execute || !inputParams || !name) throw new Error("Invalid tool options");
const paramsSchemaJson = zodToJsonSchema.default(inputParams, { name: "input" }).definitions.input;
const toolSchema = {
name,
slug,
description,
inputParameters: {
title: name,
type: "object",
description,
properties: paramsSchemaJson.properties,
required: paramsSchemaJson.required
},
outputParameters: {
type: "object",
title: `Response for ${name}`,
properties: {}
},
tags: [],
toolkit: {
name: "custom",
slug: "custom"
}
};
this.customToolsRegistry.set(slug.toLowerCase(), {
options: toolOptions,
schema: toolSchema
});
return toolSchema;
}
/**
* Get all the custom tools from the registry.
* @param {str