Hi,
I have developed a custom SaaS connector (as per Test, Build, and Deploy | SailPoint Developer Community) and when I run the “Disable account” or “Enable account” in the UI, the std:account:disable or std:account:enable are not called. Note: std:test-connection, std:account:list and std:account:read work through the UI.
My connector spec contains the declaration of the commands:
"commands": [
"std:account:list",
"std:account:read",
"std:account:enable",
"std:account:disable",
"std:test-connection"
]
and the code implements each of the corresponding functions:
import {
Context,
createConnector,
readConfig,
Response,
logger,
StdAccountListOutput,
StdAccountReadInput,
StdAccountReadOutput,
StdTestConnectionOutput,
StdAccountListInput,
StdTestConnectionInput,
StdAccountDisableInput,
StdAccountDisableOutput,
StdAccountEnableInput,
StdAccountEnableOutput
} from '@sailpoint/connector-sdk'
import { MyClient } from './my-client'
import { toStdOutput } from './tools/utils'
// Connector must be exported as module property named connector
export const connector = async () => {
// Get connector source config
const config = await readConfig()
// Use the vendor SDK, or implement own client as necessary, to initialize a client
const myClient = new MyClient(config)
return createConnector()
.stdTestConnection(async (context: Context, input: StdTestConnectionInput, res: Response<StdTestConnectionOutput>) => {
logger.info("Running test connection")
res.send(await myClient.testConnection());
})
.stdAccountList(async (context: Context, input: StdAccountListInput, res: Response<StdAccountListOutput>) => {
logger.info("Running account list")
const accounts : Array<any> = await myClient.getAllAccounts()
for (const account of accounts) {
res.send(toStdOutput(account));
}
logger.info(`stdAccountList sent ${accounts.length} account(s)`)
})
.stdAccountRead(async (context: Context, input: StdAccountReadInput, res: Response<StdAccountReadOutput>) => {
logger.info("Running account read for: " + input.identity)
const account = await myClient.getAccount(input.identity)
res.send(toStdOutput(account));
logger.info('stdAccountList sent 1 account: ' + input.identity);
})
.stdAccountDisable(async (context: Context, input: StdAccountDisableInput, res: Response<StdAccountDisableOutput>) => {
logger.info("Running account disable for: " + input.identity)
const account = await myClient.disableAccount(input.identity)
res.send(toStdOutput(account))
logger.info('stdAccountDisable disabled the account: ' + input.identity);
})
.stdAccountEnable(async (context: Context, input: StdAccountEnableInput, res: Response<StdAccountEnableOutput>) => {
logger.info("Running account enable for: " + input.identity)
const account = await myClient.enableAccount(input.identity)
res.send(toStdOutput(account))
logger.info('stdAccountEnable enabled the account: ' + input.identity);
})
}
When running the connector locally npm run dev and using Postman to send the API calls, std:account:disable and std:account:enable work fine.
But when running it from the source in the UI, I see in the connector logs that those commands are not launched.
2025-06-06T08:55:26.337-04:00] INFO | createVersion ▶︎ created new connector version: 20
[2025-06-06T08:55:26.443-04:00] INFO | updateTag ▶︎ updated connector tag latest to version: 20
[2025-06-06T08:55:36.496-04:00] INFO | invokeCommand ▶︎ Command execution started : std:account:list, for connector version 20.
[2025-06-06T08:55:37.385-04:00] INFO | connectorMessage ▶︎ {"commandType":"std:account:list","invocationId":"2adc5f7f-fbfc-4693-a437-ee492fe09733","message":"Running account list","requestId":"c23436bd84264f79bda82d49c62c876a","version":20}
[2025-06-06T08:55:38.021-04:00] INFO | connectorMessage ▶︎ {"commandType":"std:account:list","invocationId":"2adc5f7f-fbfc-4693-a437-ee492fe09733","message":"stdAccountList sent 105 account(s)","requestId":"c23436bd84264f79bda82d49c62c876a","version":20}
[2025-06-06T08:55:38.028-04:00] INFO | commandResponse ▶︎ Command response processed: std:account:list, for connector version 20. output_count=100 output_bytes=25390 keep_alive_count=0 state_count=0. Elapsed time 1326ms
[2025-06-06T08:55:38.050-04:00] INFO | commandOutcome ▶︎ Command completed: std:account:list, for connector version 20. output_count=105 output_bytes=26668 keep_alive_count=0 state_count=0. Elapsed time 1348ms
Any idea why it does not work?
Thank you.
Julien