Skip to content
← Public packages

@kody/salesforce

Salesforce REST helpers for identity, SOQL, multi-org routing, and error investigation.

src/describe-sobject.ts

44 lines · 1.6 KB · TypeScript
import { salesforceJson } from './request.ts'
import type { JsonRecord } from './types.ts'
import { optionalString, requireRecord, requireSObjectName } from './types.ts'

export type DescribeSObjectInput = {
	sobject: string
	instanceUrl?: string
	apiVersion?: string
	/** Saved OAuth integration name. Defaults to `salesforce`. */
	integrationName?: string
}

/**
 * Describe fields and metadata for one Salesforce sObject.
 * @param input.sobject - Salesforce sObject API name.
 * @returns Describe result for the sObject.
 * @example
 * import describeSObject from 'kody:@kody/salesforce/describe-sobject'
 * const contact = await describeSObject({ sobject: 'Contact' })
 */
export async function describeSObject(input: DescribeSObjectInput): Promise<JsonRecord> {
	const sobject = requireSObjectName(input.sobject)
	return salesforceJson<JsonRecord>({
		path: `sobjects/${sobject}/describe`,
		method: 'GET',
		instanceUrl: optionalString(input.instanceUrl, 'instanceUrl'),
		apiVersion: optionalString(input.apiVersion, 'apiVersion'),
		integrationName: optionalString(input.integrationName, 'integrationName'),
	})
}

/**
 * Describe fields and metadata for one Salesforce sObject.
 * @example
 * import describeSObject from 'kody:@kody/salesforce/describe-sobject'
 * const contact = await describeSObject({ sobject: 'Contact' })
 */
export default async function describeSObjectEntrypoint(
	params: Partial<DescribeSObjectInput> & Record<string, unknown> = {},
) {
	const input = requireRecord(params, 'describe-sobject')
	requireSObjectName(input.sobject)
	return describeSObject(input as DescribeSObjectInput)
}