async getOAuthUrl(data: { pluginId: PluginId; redirectUri?: string }): Promise<string> {
logger.info('getting oauth url for plugin:' + data.pluginId, { type: 'trace' });
const plugin = await this.#ctx.pluginProvider.getPlugin(data.pluginId);
if (!plugin) {
logger.error('plugin not found', { type: 'trace', data: { pluginId: data.pluginId } });
throw new Error(`Plugin ${data.pluginId} not found`);
}
if (plugin.author !== 'composio') {
return super.getOAuthUrl(data);
}
logger.info('initiating oauth for plugin:' + data.pluginId, { type: 'trace' });
const entityId = plugin.scope === 'user' ? this.#ctx.auth.userId : this.#ctx.auth.accountId;
const toolset = new ComposioToolSet({
apiKey: config.plugins.composio.apiKey,
entityId,
});
const integrationId = (plugin.metadata || {}).composioIntegrationId;
if (!integrationId) {
logger.error('plugin has no Composio integration ID', { type: 'trace', data: { pluginId: data.pluginId } });
throw new Error(`Plugin ${data.pluginId} has no Composio integration ID`);
}
const oauthUrl = await toolset.connectedAccounts.initiate({
integrationId,
redirectUri: data.redirectUri,
entityId,
authConfig: {},
});
return oauthUrl.redirectUrl as string;
}