Skip to content
← Public packages

@kody/notion

Search, read, query, and safely write Notion pages and databases through the saved notion OAuth integration.

src/get-data-source.ts

34 lines · 1008 B · TypeScript
import { notionRequest, type JsonRecord } from './request.ts'
import { inputRecord, 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),
  )

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