11const opnRtrProvisionerKey = () => getPlainNoMappedSec('openrouter-provisioner-apikey' as secretNameType) 13export const opnRtrProvisionerFetch = async (urlPath: string, {method = 'GET', bodyH, apiKey}: {method?: string, bodyH?: Record<string, unknown>, apiKey?: string} = {}) => { 14 const token = apiKey || opnRtrProvisionerKey() 15 const resp = await fetch('https://openrouter.ai' + urlPath, { 17 headers: {'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json'}, 18 body: bodyH ? JSON.stringify(bodyH) : undefined, 23const listOpnRtrKeys = async () => { 24 const resp = await opnRtrProvisionerFetch('/api/v1/keys') 26 const {data} = await resp.json() 30export const opnRtrSecretName = (name: string) => `openrouter-${name}` 32export const ensureOpnRtrKey = async ({name, limit, limitReset}: {name: string, limit?: number, limitReset?: string}) => { 34 const secName = opnRtrSecretName(name) 36 if (fs.existsSync(secPath)) return secName 38 betLog({provisioningOpnRtrKey: name, limit, limitReset}) 39 const existingKeys = await listOpnRtrKeys() 40 const existingKeyOnServer = existingKeys.find((k: {name: string}) => k.name === name) 41 throwIf(() => existingKeyOnServer, {name, secName, existingKeyOnServer}) 43 const resp = await opnRtrProvisionerFetch('/api/v1/keys', { 45 bodyH: {name, limit, limit_reset: limitReset}, 47 const respStatus = resp.status, respBody = !resp.ok ? await resp.text().catch(() => '') : undefined 49 const {key} = await resp.json() 51 fs.writeFileSync(secPath, key) 52 betLog({provisionedOpnRtrKey: name, secretFile: secName}) 56export const opnRtrKeyUsageFromSecret = async ({secretName}: {secretName: string}) => { 58 const apiKey = fs.readFileSync(secPath, 'utf-8').trim() 59 const resp = await opnRtrProvisionerFetch('/api/v1/key', {apiKey}) 60 const usageRespStatus = resp.status 62 const {data} = await resp.json() 66export const openrouterusage = async () => { 69 const secretName = opnRtrSecretName(name) 70 const usage = await opnRtrKeyUsageFromSecret({secretName}) 71 console.log(`OpenRouter key: ${usage.name || name}`) 72 console.log(` limit: $${usage.limit ?? 'none'} (resets: ${usage.limit_reset || 'never'})`) 73 console.log(` remaining: $${usage.limit_remaining ?? 'n/a'}`) 74 console.log(` daily: $${usage.usage_daily}`) 75 console.log(` weekly: $${usage.usage_weekly}`) 76 console.log(` monthly: $${usage.usage_monthly}`) 77 console.log(` total: $${usage.usage}`) 79openrouterusage.cliDescript = 'show OpenRouter API key usage and budget'