Skip to content
← Public packages

@kody/api-research

Research third-party APIs: registry search, provider discovery, OpenAPI summarize, and client scaffold.

src/smoke-test.ts

52 lines · 1.4 KB · TypeScript
import searchRegistry from './search-registry.ts'
import { parseOpenApiSpec } from './parse-spec-lib.ts'
import { summarizeOpenApiSpec } from './summarize-spec-lib.ts'

const PING_SPEC = {
	openapi: '3.0.3',
	info: { title: 'Smoke API', version: '1.0.0' },
	servers: [{ url: 'https://example.com' }],
	paths: {
		'/ping': {
			get: {
				operationId: 'ping',
				summary: 'Ping',
				responses: { '200': { description: 'ok' } },
			},
		},
	},
}

/**
 * Prove registry search and local OpenAPI parse/summarize without mutating anything.
 * Use after publish to confirm the library exports still work.
 *
 * @returns Registry hit count plus a parsed ping-spec summary
 *
 * @example
 * import smokeTest from 'kody:@kody/api-research/smoke-test'
 * const result = await smokeTest()
 */
export default async function smokeTest(): Promise<{
	ok: boolean
	registryHits: number
	sampleDomain: string | null
	parsedTitle: string | null
	operationSlugs: Array<string>
}> {
	const registry = await searchRegistry({ query: 'github', limit: 3 })
	const parsed = parseOpenApiSpec(JSON.stringify(PING_SPEC))
	const summary = summarizeOpenApiSpec(parsed)
	const ok =
		registry.results.length > 0 &&
		parsed.operations.length === 1 &&
		summary.operations[0]?.slug === 'ping'

	return {
		ok,
		registryHits: registry.results.length,
		sampleDomain: registry.results[0]?.domain ?? null,
		parsedTitle: parsed.title,
		operationSlugs: summary.operations.map((operation) => operation.slug),
	}
}