Skip to content
← Public packages

@kentcdodds/notion

Search, read, query, and safely write Notion pages and databases across multiple workspaces via notion / notion-* OAuth integrations.

src/smoke-test.ts

36 lines · 1.2 KB · TypeScript
Raw
import { resolveIntegrationName } from './accounts.ts'
import { notionRequest } from './request.ts'
import { inputRecord, optionalString } from './validation.ts'

type BotUserResponse = {
  object?: string
  type?: string
  bot?: { owner?: { type?: string } }
  [key: string]: unknown
}

/** Verify Notion OAuth access without returning workspace or user PII. */
export default async function smokeTest(params: Record<string, unknown> = {}) {
  const input = inputRecord(params)
  const account = optionalString(input, 'account')
  const integration = optionalString(input, 'integration')
  const resolvedIntegration = resolveIntegrationName({ account, integration })
  const result = await notionRequest<BotUserResponse>('/users/me', {
    account,
    integration,
  })

  if (result.object !== 'user') {
    throw new Error(
      'Unexpected response from Notion /users/me; the "' +
        resolvedIntegration +
        '" integration may be misconfigured.',
    )
  }

  return {
    ok: true,
    tokenType: typeof result.type === 'string' ? result.type : 'unknown',
    hasBotOwner: typeof result.bot === 'object' && result.bot !== null && result.bot.owner !== undefined,
  }
}