Skip to content

Built for people who want to own their automations. Join the waitlist for an invite.

Package listing

@kody/workos

src/get-organization.ts

60 lines · 2.1 KB · TypeScript
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'),
	})
}