import type { ForgeProvider, RepoRef } from 'forges' import { github } from 'forges/github' export const SLIDES_REPO: RepoRef = { forge: 'github', instance: 'github.com', owner: 'danielroe', name: 'slides' } export function createGitHub (token: string): ForgeProvider { return github({ auth: { type: 'token', token }, userAgent: 'roe (https://roe.dev, 0.1)', }).create() } export async function githubGraphQL ( gh: ForgeProvider, query: string, variables?: Record, ): Promise { const { data } = await gh.request<{ data?: T, errors?: Array<{ message: string }> }>('POST', '/graphql', { body: { query, variables }, }) if (data.errors?.length || !data.data) { throw new Error(`GitHub GraphQL request failed: ${data.errors?.map(e => e.message).join('; ') || 'empty response'}`) } return data.data } export async function downloadSlides (gh: ForgeProvider, tag: string): Promise { const release = await gh.releases.getByTag(SLIDES_REPO, tag) const asset = release.assets?.find(a => a.name.endsWith('.pdf'))?.ref if (!asset) return return new Response(await gh.releases.downloadAsset(asset)).arrayBuffer() }