import { workosRequest } from './client.ts'
import { mapConnection } from './models.ts'
import type { WorkosAuthInput, WorkosConnectionSummary, WorkosPageInfo } from './types.ts'
import { clampInt, compactRecord, optionalString, requireRecord } from './types.ts'
export type ListConnectionsInput = WorkosAuthInput & {
organizationId?: string
connectionType?: string
domain?: string
search?: string
limit?: number
after?: string
before?: string
order?: 'asc' | 'desc'
}
export type ListConnectionsResult = {
items: Array<WorkosConnectionSummary>
pageInfo: WorkosPageInfo
}
/**
* List WorkOS SSO connections.
* @example
* import listConnections from 'kody:@kody/workos/list-connections'
* const { items } = await listConnections({ organizationId: 'org_01EXAMPLE' })
*/
export async function listConnections(
input: ListConnectionsInput = {},
): Promise<ListConnectionsResult> {
const result = await workosRequest<Array<unknown>>({
...input,
operation: 'connections.read',
path: '/connections',
query: compactRecord({
organization_id: optionalString(input.organizationId, 'organizationId'),
connection_type: optionalString(input.connectionType, 'connectionType'),
domain: optionalString(input.domain, 'domain'),
search: optionalString(input.search, 'search'),
limit: clampInt(input.limit, 1, 100, 10),
after: optionalString(input.after, 'after'),
before: optionalString(input.before, 'before'),
order: optionalString(input.order, 'order'),
}),
})
return {
items: (Array.isArray(result.data) ? result.data : []).map(mapConnection),
pageInfo: result.pageInfo,
}
}
/**
* List WorkOS SSO connections.
* @example
* import listConnections from 'kody:@kody/workos/list-connections'
* const result = await listConnections()
*/
export default async function listConnectionsEntrypoint(
params: ListConnectionsInput & Record<string, unknown> = {},
) {
const input = requireRecord(params, 'list-connections')
const order = optionalString(input.order, 'order')
if (order !== undefined && order !== 'asc' && order !== 'desc') {
throw new Error('order must be "asc" or "desc".')
}
return listConnections({
organizationId: optionalString(input.organizationId, 'organizationId'),
connectionType: optionalString(input.connectionType, 'connectionType'),
domain: optionalString(input.domain, 'domain'),
search: optionalString(input.search, 'search'),
limit: input.limit as number | undefined,
after: optionalString(input.after, 'after'),
before: optionalString(input.before, 'before'),
order,
account: optionalString(input.account, 'account'),
secretName: optionalString(input.secretName, 'secretName'),
})
}