import { workosRequest } from './client.ts'
import { mapOrganization } from './models.ts'
import type { WorkosAuthInput, WorkosOrganizationSummary } from './types.ts'
import { optionalString, requireRecord, requireString } from './types.ts'
export type GetOrganizationInput = WorkosAuthInput & {
/** Organization id (`org_…`) or `externalId` when `lookup: 'external'`. */
organization: string
lookup?: 'id' | 'external'
}
/**
* Read one WorkOS organization by id, or by `externalId` when
* `lookup: "external"`.
* @example
* import getOrganization from 'kody:@kody/workos/get-organization'
* const org = await getOrganization({ organization: 'org_01EXAMPLE' })
*/
export async function getOrganization(
input: GetOrganizationInput,
): Promise<WorkosOrganizationSummary> {
const organization = requireString(input.organization, 'organization')
const lookup = input.lookup ?? 'id'
if (lookup !== 'id' && lookup !== 'external') {
throw new Error('lookup must be "id" or "external".')
}
const path =
lookup === 'external'
? `/organizations/external_id/${encodeURIComponent(organization)}`
: `/organizations/${encodeURIComponent(organization)}`
const result = await workosRequest<unknown>({
...input,
operation: 'organizations.read',
path,
})
return mapOrganization(result.data)
}
/**
* Read one WorkOS organization by id, or by `externalId` when
* `lookup: "external"`.
* @example
* import getOrganization from 'kody:@kody/workos/get-organization'
* const org = await getOrganization({ organization: 'org_01EXAMPLE' })
*/
export default async function getOrganizationEntrypoint(
params: Partial<GetOrganizationInput> & Record<string, unknown> = {},
) {
const input = requireRecord(params, 'get-organization')
const lookup = optionalString(input.lookup, 'lookup')
if (lookup !== undefined && lookup !== 'id' && lookup !== 'external') {
throw new Error('lookup must be "id" or "external".')
}
return getOrganization({
organization: requireString(input.organization, 'organization'),
lookup,
account: optionalString(input.account, 'account'),
secretName: optionalString(input.secretName, 'secretName'),
})
}