Skip to content

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

Package listing

@kentcdodds/notion

src/smoke-test.ts

36 lines · 1.2 KB · TypeScript
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,
  }
}