Skip to content

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

Package listing

@kentcdodds/notion

src/get-data-source.ts

38 lines · 1.1 KB · TypeScript
import { notionRequest, type JsonRecord } from './request.ts'
import { inputRecord, optionalString, requiredString } from './validation.ts'

type DataSourceResponse = {
  id?: string
  title?: unknown[]
  properties?: JsonRecord
  parent?: JsonRecord
  database_parent?: JsonRecord
  [key: string]: unknown
}

/**
 * Read a Notion data source (schema/properties) by data source id.
 *
 * Databases are containers; the schema lives on their data sources. Get a data
 * source id from get-database, then call this helper.
 */
export default async function getDataSource(params: Record<string, unknown>) {
  const input = inputRecord(params)
  const dataSourceId = requiredString(input, 'dataSourceId')

  const result = await notionRequest<DataSourceResponse>(
    '/data_sources/' + encodeURIComponent(dataSourceId),
    {
      account: optionalString(input, 'account'),
      integration: optionalString(input, 'integration'),
    },
  )

  return {
    id: result.id ?? null,
    title: result.title ?? [],
    properties: result.properties ?? {},
    parent: result.parent ?? null,
    databaseParent: result.database_parent ?? null,
  }
}