@jeffusion/bungee-core 5.3.2 → 5.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../llms/src/protocol-converters/registry.ts", "../../../../llms/src/providers/openai/protocol-conversion.ts", "../../../../llms/src/providers/openai/messages-compat-normalization.ts", "../../../../llms/src/token-accounting/types.ts", "../../../../../node_modules/base64-js/index.js", "../../../../../node_modules/js-tiktoken/dist/chunk-VL2OQCWN.js", "../../../../../node_modules/js-tiktoken/dist/index.js", "../../../../llms/src/token-accounting/helpers.ts", "../../../../llms/src/token-accounting/capabilities.ts", "../../../../llms/src/token-accounting/session.ts", "../../../../../plugins/token-stats/server/repository.ts", "../../../../../node_modules/@tokenlens/fetch/dist/index.js", "../../../../../plugins/token-stats/server/price-catalog.ts", "../../../../../plugins/token-stats/server/control.ts"],
3
+ "sources": ["../../../../llms/src/protocol-converters/registry.ts", "../../../../llms/src/providers/openai/protocol-conversion.ts", "../../../../llms/src/providers/openai/messages-compat-normalization.ts", "../../../../llms/src/token-accounting/types.ts", "../../../../../node_modules/base64-js/index.js", "../../../../../node_modules/js-tiktoken/dist/chunk-VL2OQCWN.js", "../../../../../node_modules/js-tiktoken/dist/index.js", "../../../../llms/src/token-accounting/helpers.ts", "../../../../llms/src/token-accounting/capabilities.ts", "../../../../llms/src/token-accounting/session.ts", "../../../src/token-stats-window.ts", "../../../../../plugins/token-stats/server/repository.ts", "../../../../../node_modules/@tokenlens/fetch/dist/index.js", "../../../../../plugins/token-stats/server/price-catalog.ts", "../../../../../plugins/token-stats/server/control.ts"],
4
4
  "sourcesContent": [
5
5
  "import type { AIConverter, TransformDirection } from './base';\n\nexport class ProtocolTransformerRegistry {\n private static converters = new Map<TransformDirection, new () => AIConverter>();\n\n static register(from: string, to: string, ConverterClass: new () => AIConverter): void {\n const key: TransformDirection = `${from}-${to}`;\n this.converters.set(key, ConverterClass);\n }\n\n static get(from: string, to: string): AIConverter {\n const key: TransformDirection = `${from}-${to}`;\n const ConverterClass = this.converters.get(key);\n\n if (!ConverterClass) {\n const availableConverters = Array.from(this.converters.keys()).join(', ');\n throw new Error(\n `No converter found for \"${from}\" → \"${to}\".\\n`\n + `Available converters: ${availableConverters || 'none'}`\n );\n }\n\n return new ConverterClass();\n }\n\n static has(from: string, to: string): boolean {\n const key: TransformDirection = `${from}-${to}`;\n return this.converters.has(key);\n }\n\n static getAllDirections(): TransformDirection[] {\n return Array.from(this.converters.keys());\n }\n\n static clear(): void {\n this.converters.clear();\n }\n}\n",
6
6
  "export type JsonRecord = Record<string, unknown>;\n\nexport interface OpenAIProtocolConversionOptions {\n trimWhitespace?: boolean;\n}\n\nconst THINKING_TAG_PATTERN = /<thinking>([\\s\\S]*?)<\\/thinking>/gi;\nconst TOOL_CALL_CONTENT_TYPES = new Set([\n 'tool_use',\n 'tool_call',\n 'function_call',\n 'output_tool_call'\n]);\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction asString(value: unknown, trimWhitespace: boolean): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n\n return trimWhitespace ? value.trim() : value;\n}\n\nfunction normalizePath(pathname: string): string {\n if (pathname.length > 1 && pathname.endsWith('/')) {\n return pathname.slice(0, -1);\n }\n\n return pathname;\n}\n\nfunction isEnabledLike(value: unknown): boolean {\n if (value === true) {\n return true;\n }\n\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n return normalized === 'enabled'\n || normalized === 'enable'\n || normalized === 'true'\n || normalized === 'on'\n || normalized === '1';\n }\n\n if (!isRecord(value)) {\n return false;\n }\n\n const type = typeof value.type === 'string' ? value.type.trim().toLowerCase() : '';\n if (type === 'disabled' || type === 'disable' || type === 'off') {\n return false;\n }\n\n if (value.enabled === false) {\n return false;\n }\n\n if (value.enabled === true) {\n return true;\n }\n\n if (type === 'enabled' || type === 'enable') {\n return true;\n }\n\n return Object.keys(value).length > 0;\n}\n\nfunction isToolCallContentBlock(item: JsonRecord): boolean {\n const itemType = typeof item.type === 'string' ? item.type.trim().toLowerCase() : '';\n if (TOOL_CALL_CONTENT_TYPES.has(itemType) || itemType.endsWith('_call')) {\n return true;\n }\n\n const hasCallIdentifier = typeof item.id === 'string'\n || typeof item.call_id === 'string'\n || typeof item.name === 'string';\n const hasCallPayload = item.input !== undefined\n || item.arguments !== undefined\n || item.function !== undefined;\n\n return hasCallIdentifier && hasCallPayload;\n}\n\nfunction hasToolCalls(value: unknown): boolean {\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n\n if (isRecord(value)) {\n return Object.keys(value).length > 0;\n }\n\n if (typeof value !== 'string') {\n return false;\n }\n\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n return false;\n }\n\n try {\n const parsed = JSON.parse(trimmed) as unknown;\n if (Array.isArray(parsed)) {\n return parsed.length > 0;\n }\n\n return isRecord(parsed);\n } catch {\n return true;\n }\n}\n\nfunction hasToolCallLikeContent(content: unknown): boolean {\n if (!Array.isArray(content)) {\n return false;\n }\n\n for (const item of content) {\n if (!isRecord(item)) {\n continue;\n }\n\n if (isToolCallContentBlock(item)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction isAssistantToolCallMessage(message: JsonRecord): boolean {\n if (message.role !== 'assistant') {\n return false;\n }\n\n return hasToolCalls(message.tool_calls) || hasToolCallLikeContent(message.content);\n}\n\nfunction extractThinkingTagContent(content: string, trimWhitespace: boolean): string {\n THINKING_TAG_PATTERN.lastIndex = 0;\n const extracted: string[] = [];\n let matched: RegExpExecArray | null = THINKING_TAG_PATTERN.exec(content);\n while (matched !== null) {\n const block = asString(matched[1], trimWhitespace);\n if (block) {\n extracted.push(block);\n }\n matched = THINKING_TAG_PATTERN.exec(content);\n }\n\n if (extracted.length === 0) {\n return '';\n }\n\n return extracted.join('\\n\\n');\n}\n\nfunction extractReasoningFromArrayContent(content: unknown[], trimWhitespace: boolean): string {\n const reasoningTexts: string[] = [];\n\n for (const item of content) {\n if (!isRecord(item)) {\n continue;\n }\n\n const type = typeof item.type === 'string' ? item.type : '';\n if (type !== 'reasoning' && type !== 'thinking' && type !== 'reasoning_content') {\n continue;\n }\n\n const candidates: unknown[] = [\n item.text,\n item.content,\n item.reasoning,\n item.thinking\n ];\n\n for (const candidate of candidates) {\n const text = asString(candidate, trimWhitespace);\n if (text && text.length > 0) {\n reasoningTexts.push(text);\n break;\n }\n }\n }\n\n if (reasoningTexts.length === 0) {\n return '';\n }\n\n return reasoningTexts.join('\\n\\n');\n}\n\nfunction extractReasoningContent(content: unknown, trimWhitespace: boolean): string {\n if (typeof content === 'string') {\n return extractThinkingTagContent(content, trimWhitespace);\n }\n\n if (Array.isArray(content)) {\n return extractReasoningFromArrayContent(content, trimWhitespace);\n }\n\n return '';\n}\n\nfunction normalizeAnthropicUsage(usage: unknown): { input_tokens: number; output_tokens: number } {\n if (!isRecord(usage)) {\n return {\n input_tokens: 0,\n output_tokens: 0\n };\n }\n\n return {\n input_tokens: typeof usage.input_tokens === 'number' ? usage.input_tokens : 0,\n output_tokens: typeof usage.output_tokens === 'number' ? usage.output_tokens : 0\n };\n}\n\nfunction normalizeAssistantToolCallMessage(message: JsonRecord, trimWhitespace: boolean): JsonRecord {\n if (typeof message.reasoning_content === 'string') {\n const normalized = trimWhitespace ? message.reasoning_content.trim() : message.reasoning_content;\n if (normalized === message.reasoning_content) {\n return message;\n }\n\n return {\n ...message,\n reasoning_content: normalized\n };\n }\n\n return {\n ...message,\n reasoning_content: extractReasoningContent(message.content, trimWhitespace)\n };\n}\n\nfunction convertChatUserContentToResponsesContent(content: unknown): JsonRecord[] {\n if (typeof content === 'string') {\n const text = content.trim();\n return text ? [{ type: 'input_text', text }] : [{ type: 'input_text', text: '' }];\n }\n\n if (!Array.isArray(content)) {\n return [{ type: 'input_text', text: '' }];\n }\n\n const converted: JsonRecord[] = [];\n\n for (const part of content) {\n if (typeof part === 'string') {\n const text = part.trim();\n if (text) {\n converted.push({ type: 'input_text', text });\n }\n continue;\n }\n\n if (!isRecord(part)) {\n continue;\n }\n\n if (part.type === 'text' && typeof part.text === 'string') {\n converted.push({ type: 'input_text', text: part.text });\n continue;\n }\n\n if (part.type === 'image_url' && isRecord(part.image_url) && typeof part.image_url.url === 'string') {\n converted.push({ type: 'input_image', image_url: part.image_url.url });\n }\n }\n\n return converted.length > 0 ? converted : [{ type: 'input_text', text: '' }];\n}\n\nexport class OpenAIProtocolConversion {\n private readonly trimWhitespace: boolean;\n\n constructor(options?: OpenAIProtocolConversionOptions) {\n this.trimWhitespace = options?.trimWhitespace !== false;\n }\n\n isResponsesPath(pathname: string): boolean {\n const normalizedPath = normalizePath(pathname);\n return normalizedPath === '/v1/responses' || normalizedPath === '/responses';\n }\n\n isReasoningContext(body: JsonRecord): boolean {\n if (body.reasoning !== undefined && body.reasoning !== null) {\n return true;\n }\n\n if (typeof body.reasoning_effort === 'string' && body.reasoning_effort.trim().length > 0) {\n return true;\n }\n\n if (isEnabledLike(body.enable_thinking)) {\n return true;\n }\n\n return isEnabledLike(body.thinking);\n }\n\n normalizeResponsesReasoningBody(body: JsonRecord): JsonRecord {\n let changed = false;\n let normalizedBody = body;\n\n for (const key of ['input', 'messages'] as const) {\n const normalizedCollection = this.normalizeMessageCollection(normalizedBody, key);\n if (normalizedCollection.changed) {\n normalizedBody = normalizedCollection.body;\n changed = true;\n }\n }\n\n if (!changed) {\n return body;\n }\n\n return normalizedBody;\n }\n\n async ensureAssistantToolUseReasoningContent(response: Response): Promise<Response> {\n const contentType = response.headers.get('content-type') || '';\n if (!contentType.includes('application/json')) {\n return response;\n }\n\n let body: unknown;\n try {\n body = await response.clone().json();\n } catch {\n return response;\n }\n\n if (!isRecord(body) || body.type !== 'message' || body.role !== 'assistant' || !Array.isArray(body.content)) {\n return response;\n }\n\n if (!body.content.some((block) => isRecord(block) && block.type === 'tool_use')) {\n return response;\n }\n\n const existingReasoningContent = typeof body.reasoning_content === 'string'\n ? body.reasoning_content\n : undefined;\n if (existingReasoningContent !== undefined) {\n return response;\n }\n\n const extractedReasoning = this.extractThinkingTextFromAnthropicContent(body.content);\n const patchedBody: JsonRecord = {\n ...body,\n reasoning_content: extractedReasoning\n };\n\n return new Response(JSON.stringify(patchedBody), {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers\n });\n }\n\n ensureMessagesStreamCompatibility(\n events: unknown[],\n ctx: { streamState: Map<string, unknown> }\n ): unknown[] {\n const withUsage = this.ensureMessageDeltaUsage(events, ctx);\n return this.ensureMessageStartReasoningContent(withUsage);\n }\n\n convertChatMessagesToResponsesInput(messages: unknown): { input: JsonRecord[]; instructions?: string } {\n if (!Array.isArray(messages)) {\n return { input: [] };\n }\n\n const input: JsonRecord[] = [];\n const instructionParts: string[] = [];\n\n for (const msg of messages) {\n if (!isRecord(msg)) {\n continue;\n }\n\n if (msg.role === 'system') {\n const text = typeof msg.content === 'string' ? msg.content.trim() : '';\n if (text) instructionParts.push(text);\n continue;\n }\n\n if (msg.role === 'user') {\n input.push({\n role: 'user',\n content: convertChatUserContentToResponsesContent(msg.content)\n });\n continue;\n }\n\n if (msg.role === 'assistant') {\n const assistantText = typeof msg.content === 'string' ? msg.content.trim() : '';\n if (assistantText) {\n input.push({\n role: 'assistant',\n content: [{ type: 'output_text', text: assistantText }]\n });\n }\n\n if (Array.isArray(msg.tool_calls)) {\n for (const toolCall of msg.tool_calls) {\n if (!isRecord(toolCall)) {\n continue;\n }\n\n const callId = typeof toolCall.id === 'string' ? toolCall.id : '';\n const functionObject = isRecord(toolCall.function) ? toolCall.function : undefined;\n if (!functionObject) {\n continue;\n }\n const functionName = typeof functionObject?.name === 'string' ? functionObject.name : '';\n if (!callId || !functionName) {\n continue;\n }\n\n input.push({\n type: 'function_call',\n call_id: callId,\n name: functionName,\n arguments: functionObject.arguments || '{}'\n });\n }\n }\n\n continue;\n }\n\n if (msg.role === 'tool') {\n const callId = typeof msg.tool_call_id === 'string' ? msg.tool_call_id : '';\n if (!callId) {\n continue;\n }\n\n input.push({\n type: 'function_call_output',\n call_id: callId,\n output: msg.content ?? ''\n });\n }\n }\n\n const instructions = instructionParts.length > 0 ? instructionParts.join('\\n') : undefined;\n return { input, instructions };\n }\n\n mapChatToolsToResponsesTools(chatTools: unknown): JsonRecord[] {\n if (!Array.isArray(chatTools)) {\n return [];\n }\n\n const mapped: JsonRecord[] = [];\n for (const tool of chatTools) {\n if (!isRecord(tool) || tool.type !== 'function' || !isRecord(tool.function)) {\n continue;\n }\n\n const name = typeof tool.function.name === 'string' ? tool.function.name : '';\n if (!name) {\n continue;\n }\n\n const parameters = isRecord(tool.function.parameters)\n ? tool.function.parameters\n : { type: 'object', properties: {} };\n\n mapped.push({\n type: 'function',\n name,\n description: typeof tool.function.description === 'string' ? tool.function.description : '',\n parameters\n });\n }\n\n return mapped;\n }\n\n convertResponsesInputToMessages(input: unknown): JsonRecord[] {\n if (typeof input === 'string') {\n const text = input.trim();\n return text ? [{ role: 'user', content: text }] : [];\n }\n\n if (!Array.isArray(input)) {\n return [];\n }\n\n const messages: JsonRecord[] = [];\n const pendingTopLevelInputParts: unknown[] = [];\n\n const flushPendingTopLevelInputParts = (): void => {\n if (pendingTopLevelInputParts.length === 0) {\n return;\n }\n\n messages.push({\n role: 'user',\n content: this.normalizeResponsesMessageContent([...pendingTopLevelInputParts])\n });\n\n pendingTopLevelInputParts.length = 0;\n };\n\n for (const item of input) {\n if (typeof item === 'string') {\n if (item.trim()) {\n pendingTopLevelInputParts.push({ type: 'input_text', text: item });\n }\n continue;\n }\n\n if (!isRecord(item)) {\n continue;\n }\n\n const itemType = item.type;\n\n if (\n itemType === 'input_text'\n || itemType === 'output_text'\n || itemType === 'input_image'\n || itemType === 'text'\n || itemType === 'image_url'\n ) {\n pendingTopLevelInputParts.push(item);\n continue;\n }\n\n if (itemType === 'function_call') {\n flushPendingTopLevelInputParts();\n\n const rawArgs = item.arguments;\n const argumentsString = typeof rawArgs === 'string'\n ? rawArgs\n : JSON.stringify(rawArgs || {});\n\n messages.push({\n role: 'assistant',\n content: null,\n tool_calls: [{\n id: item.call_id || item.id || '',\n type: 'function',\n function: {\n name: item.name || '',\n arguments: argumentsString\n }\n }]\n });\n continue;\n }\n\n if (itemType === 'function_call_output') {\n flushPendingTopLevelInputParts();\n\n messages.push({\n role: 'tool',\n tool_call_id: item.call_id || '',\n content: item.output ?? '',\n is_error: item.is_error === true || item.status === 'error' || item.status === 'failed'\n });\n continue;\n }\n\n if (itemType === 'message') {\n flushPendingTopLevelInputParts();\n\n const role = item.role || 'user';\n if (typeof role === 'string') {\n messages.push({\n role,\n content: this.normalizeResponsesMessageContent(item.content)\n });\n }\n continue;\n }\n\n if (typeof item.role === 'string') {\n flushPendingTopLevelInputParts();\n\n messages.push({\n role: item.role,\n content: this.normalizeResponsesMessageContent(item.content)\n });\n }\n }\n\n flushPendingTopLevelInputParts();\n\n return messages;\n }\n\n normalizeResponsesMessageContent(content: unknown): unknown {\n if (typeof content === 'string') {\n return content;\n }\n\n if (!Array.isArray(content)) {\n return content;\n }\n\n const converted = content\n .map((part) => {\n if (typeof part === 'string') {\n return { type: 'text', text: part };\n }\n\n if (!isRecord(part)) {\n return null;\n }\n\n if (part.type === 'input_text' || part.type === 'output_text') {\n return { type: 'text', text: part.text || '' };\n }\n\n if (part.type === 'input_image') {\n const imageUrl = typeof part.image_url === 'string'\n ? part.image_url\n : isRecord(part.image_url)\n ? part.image_url.url\n : undefined;\n\n if (typeof imageUrl === 'string' && imageUrl) {\n return {\n type: 'image_url',\n image_url: { url: imageUrl }\n };\n }\n }\n\n return part;\n })\n .filter((part) => part !== null);\n\n return converted;\n }\n\n private normalizeMessageCollection(\n body: JsonRecord,\n key: 'input' | 'messages'\n ): { body: JsonRecord; changed: boolean } {\n const collection = body[key];\n if (!Array.isArray(collection)) {\n return { body, changed: false };\n }\n\n let changed = false;\n const normalizedCollection = collection.map((item) => {\n const normalizedItem = this.normalizeAssistantToolCallCandidate(item);\n if (normalizedItem.changed) {\n changed = true;\n }\n\n return normalizedItem.normalized;\n });\n\n if (!changed) {\n return { body, changed: false };\n }\n\n return {\n body: {\n ...body,\n [key]: normalizedCollection\n },\n changed: true\n };\n }\n\n private normalizeAssistantToolCallCandidate(\n value: unknown\n ): { normalized: unknown; changed: boolean } {\n if (!isRecord(value)) {\n return { normalized: value, changed: false };\n }\n\n let changed = false;\n let current: JsonRecord = value;\n\n if (isRecord(current.message)) {\n const nested = this.normalizeAssistantToolCallCandidate(current.message);\n if (nested.changed) {\n current = {\n ...current,\n message: nested.normalized\n };\n changed = true;\n }\n }\n\n if (!isAssistantToolCallMessage(current)) {\n return { normalized: current, changed };\n }\n\n const normalizedMessage = normalizeAssistantToolCallMessage(current, this.trimWhitespace);\n if (normalizedMessage !== current) {\n current = normalizedMessage;\n changed = true;\n }\n\n return { normalized: current, changed };\n }\n\n private extractThinkingTextFromAnthropicContent(content: unknown[]): string {\n const segments: string[] = [];\n\n for (const block of content) {\n if (!isRecord(block) || block.type !== 'thinking') {\n continue;\n }\n\n if (typeof block.thinking === 'string' && block.thinking.trim().length > 0) {\n segments.push(block.thinking.trim());\n }\n }\n\n return segments.join('\\n\\n');\n }\n\n private ensureMessageStartReasoningContent(events: unknown[]): unknown[] {\n return events.map((event) => {\n if (!isRecord(event) || event.type !== 'message_start' || !isRecord(event.message)) {\n return event;\n }\n\n const existingReasoningContent = event.message.reasoning_content;\n if (typeof existingReasoningContent === 'string') {\n return event;\n }\n\n return {\n ...event,\n message: {\n ...event.message,\n reasoning_content: ''\n }\n };\n });\n }\n\n private ensureMessageDeltaUsage(\n events: unknown[],\n ctx: { streamState: Map<string, unknown> }\n ): unknown[] {\n const lastUsageKey = 'messages_compat_last_usage';\n const cachedUsage = normalizeAnthropicUsage(ctx.streamState.get(lastUsageKey));\n\n return events.map((event) => {\n if (!isRecord(event) || event.type !== 'message_delta') {\n return event;\n }\n\n const normalizedUsage = normalizeAnthropicUsage(event.usage ?? cachedUsage);\n ctx.streamState.set(lastUsageKey, normalizedUsage);\n\n return {\n ...event,\n usage: normalizedUsage\n };\n });\n }\n}\n",
@@ -12,12 +12,13 @@
12
12
  "import type {\n CanonicalTokenAccountingEventV2,\n TokenAccountingAuthority,\n TokenAccountingOutcome,\n TokenAccountingSessionState\n} from './types';\nimport { TOKEN_ACCOUNTING_AUTHORITIES } from './types';\nimport { getEncoding, type Tiktoken } from 'js-tiktoken';\n\ntype JsonRecord = Record<string, unknown>;\n\ntype EncodingType = 'cl100k_base' | 'o200k_base';\n\nconst MODEL_ENCODING_MAP: Record<string, EncodingType> = {\n 'gpt-4o': 'o200k_base',\n 'gpt-4o-mini': 'o200k_base',\n 'gpt-4.1': 'o200k_base',\n 'gpt-4.1-mini': 'o200k_base',\n 'gpt-4.1-nano': 'o200k_base',\n 'o1': 'o200k_base',\n 'o1-mini': 'o200k_base',\n 'o1-preview': 'o200k_base',\n 'o3': 'o200k_base',\n 'o3-mini': 'o200k_base',\n 'gpt-4': 'cl100k_base',\n 'gpt-4-turbo': 'cl100k_base',\n 'gpt-4-32k': 'cl100k_base',\n 'gpt-3.5-turbo': 'cl100k_base',\n 'gpt-3.5': 'cl100k_base',\n claude: 'cl100k_base',\n 'claude-3': 'cl100k_base',\n 'claude-3.5': 'cl100k_base',\n gemini: 'cl100k_base',\n 'gemini-1.5': 'cl100k_base',\n 'gemini-2.0': 'cl100k_base',\n 'gemini-2.5': 'cl100k_base'\n};\n\nconst encodingCache = new Map<EncodingType, Tiktoken>();\n\nconst CANONICAL_EVENT_KEYS = new Set([\n 'requestId',\n 'attemptId',\n 'routeId',\n 'upstreamId',\n 'provider',\n 'model',\n 'streaming',\n 'inputTokens',\n 'outputTokens',\n 'cacheReadTokens',\n 'cacheWriteTokens',\n 'inputAuthority',\n 'outputAuthority',\n 'final',\n 'outcome',\n 'countedAt'\n]);\n\nexport function isRecord(value: unknown): value is JsonRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport function asString(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nexport function asFiniteNumber(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\nexport function readNumber(record: JsonRecord | undefined, key: string): number | undefined {\n if (!record) {\n return undefined;\n }\n\n const value = record[key];\n return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0 ? value : undefined;\n}\n\nexport function readRecord(record: JsonRecord | undefined, key: string): JsonRecord | undefined {\n if (!record) {\n return undefined;\n }\n\n const value = record[key];\n return isRecord(value) ? value : undefined;\n}\n\nexport function countTextTokens(text: string): number {\n if (!text) {\n return 0;\n }\n\n return Math.max(1, Math.ceil(text.length / 4));\n}\n\nfunction getEncodingForModel(model: string): EncodingType {\n const normalizedModel = model.trim().toLowerCase();\n if (MODEL_ENCODING_MAP[normalizedModel]) {\n return MODEL_ENCODING_MAP[normalizedModel];\n }\n\n for (const [prefix, encoding] of Object.entries(MODEL_ENCODING_MAP)) {\n if (normalizedModel.startsWith(prefix)) {\n return encoding;\n }\n }\n\n return 'cl100k_base';\n}\n\nfunction getEncodingCached(type: EncodingType): Tiktoken {\n let encoding = encodingCache.get(type);\n if (!encoding) {\n encoding = getEncoding(type);\n encodingCache.set(type, encoding);\n }\n\n return encoding;\n}\n\nexport function countModelTextTokens(text: string, model?: string): number {\n if (!text) {\n return 0;\n }\n\n if (!model) {\n return countTextTokens(text);\n }\n\n try {\n const encoding = getEncodingCached(getEncodingForModel(model));\n return encoding.encode(text).length;\n } catch {\n return countTextTokens(text);\n }\n}\n\nexport function countJsonLikeTokens(value: unknown): number {\n if (typeof value === 'string') {\n return countTextTokens(value);\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return 1;\n }\n\n if (value === null || value === undefined) {\n return 0;\n }\n\n if (Array.isArray(value)) {\n return value.reduce((sum, entry) => sum + countJsonLikeTokens(entry), 0);\n }\n\n if (isRecord(value)) {\n return Object.entries(value).reduce((sum, [key, entry]) => {\n return sum + countTextTokens(key) + countJsonLikeTokens(entry);\n }, 0);\n }\n\n return countTextTokens(String(value));\n}\n\nexport function clampTokens(value: number | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n return Number.isFinite(value) ? Math.min(Number.MAX_SAFE_INTEGER, Math.max(0, Math.floor(value))) : undefined;\n}\n\nexport function buildBaseEvent(\n state: TokenAccountingSessionState,\n overrides: Partial<CanonicalTokenAccountingEventV2>\n): CanonicalTokenAccountingEventV2 {\n return {\n requestId: state.requestId,\n attemptId: state.attemptId,\n routeId: state.routeId,\n upstreamId: state.upstreamId,\n provider: state.provider,\n model: state.model ?? 'unknown',\n streaming: state.streaming,\n inputAuthority: 'none',\n outputAuthority: 'none',\n final: false,\n outcome: 'completed',\n countedAt: new Date().toISOString(),\n ...overrides\n };\n}\n\nexport function createPartialTokenAccountingEvent(\n state: TokenAccountingSessionState,\n overrides: Partial<CanonicalTokenAccountingEventV2> = {}\n): CanonicalTokenAccountingEventV2 {\n return buildBaseEvent(state, {\n final: false,\n outcome: 'completed',\n ...overrides\n });\n}\n\nexport function finalizeTokenAccountingEvent(\n state: TokenAccountingSessionState,\n overrides: Partial<CanonicalTokenAccountingEventV2> = {},\n outcome: TokenAccountingOutcome = 'completed'\n): CanonicalTokenAccountingEventV2 {\n const isCompleted = outcome === 'completed';\n return buildBaseEvent(state, {\n final: isCompleted,\n outcome,\n ...overrides\n });\n}\n\nexport function assertCanonicalTokenAccountingEventV2(\n event: unknown\n): asserts event is CanonicalTokenAccountingEventV2 {\n if (!isRecord(event)) {\n throw new Error('Canonical token accounting event must be an object.');\n }\n\n for (const key of Object.keys(event)) {\n if (!CANONICAL_EVENT_KEYS.has(key)) {\n throw new Error(`Unexpected aggregate or legacy token accounting field: ${key}`);\n }\n }\n\n for (const key of ['requestId', 'attemptId', 'routeId', 'upstreamId', 'provider', 'model', 'countedAt']) {\n if (typeof event[key] !== 'string' || event[key].length === 0) {\n throw new Error(`Canonical token accounting event requires non-empty string field: ${key}`);\n }\n }\n\n if (typeof event.streaming !== 'boolean') {\n throw new Error('Canonical token accounting event requires boolean field: streaming');\n }\n\n if (typeof event.final !== 'boolean') {\n throw new Error('Canonical token accounting event requires boolean field: final');\n }\n\n if (event.outcome !== 'completed' && event.outcome !== 'aborted' && event.outcome !== 'failed') {\n throw new Error('Canonical token accounting event requires outcome completed|aborted|failed.');\n }\n\n if (event.final && event.outcome === 'aborted') {\n throw new Error('Aborted token accounting events must not be final.');\n }\n\n if (!TOKEN_ACCOUNTING_AUTHORITIES.includes(event.inputAuthority as TokenAccountingAuthority)) {\n throw new Error('Canonical token accounting event has invalid inputAuthority.');\n }\n\n if (!TOKEN_ACCOUNTING_AUTHORITIES.includes(event.outputAuthority as TokenAccountingAuthority)) {\n throw new Error('Canonical token accounting event has invalid outputAuthority.');\n }\n\n for (const key of ['inputTokens', 'outputTokens', 'cacheReadTokens', 'cacheWriteTokens'] as const) {\n if (event[key] !== undefined && !(typeof event[key] === 'number' && Number.isSafeInteger(event[key]) && event[key] >= 0)) {\n throw new Error(`Canonical token accounting event has invalid numeric field: ${key}`);\n }\n }\n\n if (Object.prototype.hasOwnProperty.call(event, 'source')) {\n throw new Error('Legacy source/hybrid semantics are not allowed in canonical token accounting events.');\n }\n\n if (Object.prototype.hasOwnProperty.call(event, 'logicalRequests') || Object.prototype.hasOwnProperty.call(event, 'upstreamAttempts')) {\n throw new Error('Plugin aggregate fields logicalRequests/upstreamAttempts must not appear on single llms events.');\n }\n\n if (event.inputAuthority === 'official') {\n if (!(typeof event.inputTokens === 'number' && Number.isSafeInteger(event.inputTokens) && event.inputTokens >= 0)) {\n throw new Error('Official inputAuthority requires inputTokens.');\n }\n\n }\n\n if (event.outputAuthority === 'official' && !(typeof event.outputTokens === 'number' && Number.isSafeInteger(event.outputTokens) && event.outputTokens >= 0)) {\n throw new Error('Official outputAuthority requires outputTokens.');\n }\n}\n",
13
13
  "import type { LLMProvider } from '../core/types';\nimport type {\n ProviderTokenAccountingCapabilities,\n ProviderTokenAccountingCapabilityMatrix,\n SupportedTokenAccountingProvider\n} from './types';\n\nexport const PROVIDER_TOKEN_ACCOUNTING_CAPABILITY_MATRIX = {\n openai: {\n provider: 'openai',\n supportsOfficialResponseUsage: true,\n supportsStreamingResponseUsage: true,\n supportsDedicatedCountEndpoint: true,\n supportsLocalTokenizer: true,\n supportsHeuristicFallback: true,\n dedicatedCountEndpoint: {\n supported: true,\n mode: 'input_estimate_only',\n defaultEnabled: false,\n endpoint: '/responses/input_tokens',\n livePathAuthority: false\n }\n },\n anthropic: {\n provider: 'anthropic',\n supportsOfficialResponseUsage: true,\n supportsStreamingResponseUsage: true,\n supportsDedicatedCountEndpoint: true,\n supportsLocalTokenizer: true,\n supportsHeuristicFallback: true,\n dedicatedCountEndpoint: {\n supported: true,\n mode: 'input_estimate_only',\n livePathAuthority: false,\n endpoint: '/v1/messages/count_tokens'\n }\n },\n gemini: {\n provider: 'gemini',\n supportsOfficialResponseUsage: true,\n supportsStreamingResponseUsage: true,\n supportsDedicatedCountEndpoint: true,\n supportsLocalTokenizer: true,\n supportsHeuristicFallback: true,\n countTokens: {\n supported: true,\n mode: 'input_estimate_only',\n livePathAuthority: false\n }\n }\n} as const satisfies ProviderTokenAccountingCapabilityMatrix;\n\nfunction normalizeProvider(provider: LLMProvider): SupportedTokenAccountingProvider {\n return String(provider).trim().toLowerCase() as SupportedTokenAccountingProvider;\n}\n\nexport function getProviderTokenAccountingCapabilities(provider: LLMProvider): ProviderTokenAccountingCapabilities {\n const capabilities = PROVIDER_TOKEN_ACCOUNTING_CAPABILITY_MATRIX[normalizeProvider(provider)];\n if (!capabilities) {\n throw new Error(`Unsupported token accounting provider: ${provider}`);\n }\n\n return capabilities;\n}\n",
14
14
  "import type { LLMProvider } from '../core/types';\nimport { getProviderTokenAccountingCapabilities } from './capabilities';\nimport {\n asString,\n clampTokens,\n countModelTextTokens,\n countJsonLikeTokens,\n countTextTokens,\n createPartialTokenAccountingEvent,\n finalizeTokenAccountingEvent,\n isRecord,\n readNumber,\n readRecord\n} from './helpers';\nimport type {\n CanonicalTokenAccountingEventV2,\n ProviderTokenAccountingAdapter,\n TokenAccountingSession,\n TokenAccountingSessionInput,\n TokenAccountingSessionState\n} from './types';\n\ntype JsonRecord = Record<string, unknown>;\n\nconst DEFERRED_MEDIA_KEYS = new Set([\n 'image_url', 'imageUrl', 'inline_data', 'inlineData', 'file_data', 'fileData',\n 'file_uri', 'fileUri', 'file_url', 'fileUrl', 'file_id', 'fileId', 'input_audio', 'inputAudio', 'audio_url', 'audioUrl',\n 'input_video', 'inputVideo', 'video_url', 'videoUrl'\n]);\nconst DEFERRED_MEDIA_TYPES = new Set([\n 'image', 'input_image', 'image_url', 'input_audio', 'audio', 'input_video', 'video',\n 'input_file', 'file'\n]);\nconst DEFERRED_METADATA_KEYS = new Set([\n 'model', 'role', 'type', 'status', 'index', 'id', 'mime_type', 'mimeType', 'detail'\n]);\n\n// Keep only bounded output fragments while the proxy is forwarding the stream.\n// Tokenization is deliberately deferred until finalization (one encode per side).\nconst MAX_STREAM_ESTIMATE_CHARS = 64 * 1024;\nconst MAX_STREAM_ESTIMATE_FRAGMENTS = 4096;\nconst MAX_INPUT_ESTIMATE_NODES = 4096;\nconst MAX_DEFERRED_MODEL_CHARS = 256;\ntype StreamEstimateState = TokenAccountingSessionState & {\n estimateFragments?: string[];\n estimateChars?: number;\n estimateTruncated?: boolean;\n requestEstimateTruncated?: boolean;\n deferFinalization?: boolean;\n deferredOutcome?: 'completed' | 'failed';\n estimateMediaSeen?: boolean;\n estimateNodes?: number;\n};\n\nfunction isDeferred(state: TokenAccountingSessionState): boolean {\n return (state as StreamEstimateState).deferFinalization === true;\n}\n\nfunction setSessionModel(state: TokenAccountingSessionState, value: unknown): void {\n const model = asString(value) ?? state.model ?? 'unknown';\n if (isDeferred(state) && model.length > MAX_DEFERRED_MODEL_CHARS) {\n state.model = model.slice(0, MAX_DEFERRED_MODEL_CHARS);\n (state as StreamEstimateState).requestEstimateTruncated = true;\n return;\n }\n state.model = model;\n}\n\nfunction observeOutput(state: TokenAccountingSessionState, value: unknown): void {\n if (state.outputAuthority === 'official') return;\n if (isDeferred(state) && typeof value === 'string' && isMediaDataUri(value)) {\n (state as StreamEstimateState).estimateMediaSeen = true;\n return;\n }\n const text = typeof value === 'string' ? value : JSON.stringify(value);\n if (!text) return;\n const estimateState = state as StreamEstimateState;\n const remaining = MAX_STREAM_ESTIMATE_CHARS - (estimateState.estimateChars ?? 0);\n if (remaining <= 0) {\n estimateState.estimateTruncated = true;\n return;\n }\n if ((estimateState.estimateFragments?.length ?? 0) >= MAX_STREAM_ESTIMATE_FRAGMENTS) {\n estimateState.estimateTruncated = true;\n return;\n }\n const fragment = text.slice(0, remaining);\n (estimateState.estimateFragments ??= []).push(fragment);\n estimateState.estimateChars = (estimateState.estimateChars ?? 0) + fragment.length;\n if (fragment.length < text.length) estimateState.estimateTruncated = true;\n}\n\nfunction observeBoundedOutput(state: TokenAccountingSessionState, value: unknown): void {\n if (state.outputAuthority === 'official') return;\n if (!isDeferred(state)) {\n if (typeof value === 'string') {\n observeOutput(state, value);\n return;\n }\n const bounded = boundedRequestSnapshot({ value });\n if (bounded.truncated) (state as StreamEstimateState).estimateTruncated = true;\n observeOutput(state, bounded.value.value);\n return;\n }\n const estimateState = state as StreamEstimateState;\n const nodesLeft = MAX_INPUT_ESTIMATE_NODES - (estimateState.estimateNodes ?? 0);\n if (nodesLeft < 3) {\n estimateState.estimateTruncated = true;\n return;\n }\n const bounded = typeof value === 'string'\n ? { value: { value: value.slice(0, MAX_STREAM_ESTIMATE_CHARS) }, truncated: value.length > MAX_STREAM_ESTIMATE_CHARS, nodesCopied: 0 }\n : boundedRequestSnapshot({ value }, Math.max(1, Math.floor(nodesLeft / 3)));\n estimateState.estimateNodes = (estimateState.estimateNodes ?? 0) + bounded.nodesCopied * 3;\n const filtered = stripDeferredMedia(bounded.value.value);\n if (bounded.truncated) estimateState.estimateTruncated = true;\n if (filtered.sawMedia) estimateState.estimateMediaSeen = true;\n if (filtered.hasContent) observeOutput(state, filtered.value);\n}\n\nfunction isMediaDataUri(value: string): boolean {\n return /^data:(?:image|audio|video)\\//i.test(value);\n}\n\nfunction stripDeferredMedia(value: unknown, key = ''): { value: unknown; sawMedia: boolean; hasContent: boolean } {\n if (key === 'tools' || key === 'tool_calls' || key === 'tool_use' || key === 'functionCall'\n || key === 'function_call' || key === 'arguments' || key === 'args') {\n return { value, sawMedia: false, hasContent: Array.isArray(value) ? value.length > 0 : value !== null && value !== undefined };\n }\n if (DEFERRED_MEDIA_KEYS.has(key)) return { value: undefined, sawMedia: true, hasContent: false };\n if (typeof value === 'string') {\n const dataUriPattern = /data:(?:image|audio|video)\\/[^\\s\"'<>)}\\]]+/gi;\n const stripped = value.replace(dataUriPattern, '');\n const sawMedia = stripped.length !== value.length;\n return { value: stripped || undefined, sawMedia, hasContent: stripped.length > 0 && !DEFERRED_METADATA_KEYS.has(key) };\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return { value, sawMedia: false, hasContent: !DEFERRED_METADATA_KEYS.has(key) };\n }\n if (Array.isArray(value)) {\n let sawMedia = false;\n let hasContent = false;\n const result: unknown[] = [];\n for (const item of value) {\n const filtered = stripDeferredMedia(item);\n sawMedia ||= filtered.sawMedia;\n hasContent ||= filtered.hasContent;\n if (filtered.value !== undefined) result.push(filtered.value);\n }\n return { value: result, sawMedia, hasContent };\n }\n if (!isRecord(value)) return { value, sawMedia: false, hasContent: false };\n if (asString(value.type) === 'tool_use' || asString(value.type) === 'function_call') return { value, sawMedia: false, hasContent: true };\n if (DEFERRED_MEDIA_TYPES.has(asString(value.type) ?? '')) return { value: undefined, sawMedia: true, hasContent: false };\n const result: JsonRecord = {};\n let sawMedia = false;\n let hasContent = false;\n for (const [childKey, child] of Object.entries(value)) {\n const filtered = stripDeferredMedia(child, childKey);\n sawMedia ||= filtered.sawMedia;\n hasContent ||= filtered.hasContent;\n if (filtered.value !== undefined) result[childKey] = filtered.value;\n }\n return { value: result, sawMedia, hasContent };\n}\n\nfunction clearObservedOutput(state: TokenAccountingSessionState): void {\n const estimateState = state as StreamEstimateState;\n estimateState.estimateFragments = undefined;\n estimateState.estimateChars = undefined;\n estimateState.estimateTruncated = false;\n estimateState.estimateMediaSeen = false;\n estimateState.estimateNodes = 0;\n}\n\nfunction estimatedStreamOutput(state: TokenAccountingSessionState): { tokens?: number; authority: 'local' | 'heuristic' | 'partial' | 'none' } {\n const estimateState = state as StreamEstimateState;\n const estimateChars = estimateState.estimateChars ?? 0;\n if (estimateChars === 0) return { authority: 'none' };\n if (isDeferred(state)) {\n const tokens = clampTokens(countTextTokens('x'.repeat(estimateChars)));\n return tokens === undefined\n ? { authority: 'none' }\n : { tokens, authority: estimateState.estimateTruncated || estimateState.estimateMediaSeen ? 'partial' : 'heuristic' };\n }\n const tokens = clampTokens(countModelTextTokens(estimateState.estimateFragments!.join(''), state.model));\n return tokens === undefined\n ? { authority: 'none' }\n : { tokens, authority: estimateState.estimateTruncated ? 'partial' : 'local' };\n}\n\nfunction finalizeMissingStreamOutput(state: TokenAccountingSessionState, interrupted = false): void {\n if (state.outputAuthority === 'official') return;\n const estimate = estimatedStreamOutput(state);\n state.outputTokens = estimate.tokens;\n state.outputAuthority = interrupted && estimate.tokens !== undefined ? 'partial' : estimate.authority;\n}\n\ntype BoundedRequest = { value: JsonRecord; truncated: boolean; nodesCopied: number };\n\nfunction boundedRequestSnapshot(body: JsonRecord, maxNodes = MAX_INPUT_ESTIMATE_NODES): BoundedRequest {\n let remaining = MAX_STREAM_ESTIMATE_CHARS;\n let nodes = maxNodes;\n let truncated = false;\n const copy = (value: unknown): unknown => {\n if (nodes <= 0 || remaining <= 0) {\n truncated = true;\n return undefined;\n }\n nodes -= 1;\n if (typeof value === 'string') {\n if (value.length > remaining) {\n truncated = true;\n const clipped = value.slice(0, remaining);\n remaining = 0;\n return clipped;\n }\n remaining -= value.length;\n return value;\n }\n if (value === null || typeof value === 'number' || typeof value === 'boolean') return value;\n if (Array.isArray(value)) {\n const result: unknown[] = [];\n for (let index = 0; index < value.length; index += 1) {\n if (nodes <= 0 || remaining <= 0) {\n truncated = true;\n break;\n }\n result.push(copy(value[index]));\n }\n if (result.length < value.length) truncated = true;\n return result;\n }\n if (!isRecord(value)) return undefined;\n const result: JsonRecord = {};\n for (const key in value) {\n if (!Object.prototype.hasOwnProperty.call(value, key)) continue;\n if (nodes <= 0 || remaining <= key.length) {\n truncated = true;\n break;\n }\n remaining -= key.length;\n result[key] = copy(value[key]);\n }\n return result;\n };\n return { value: copy(body) as JsonRecord, truncated, nodesCopied: maxNodes - nodes };\n}\n\nfunction storeRequestForEstimate(state: TokenAccountingSessionState, body: JsonRecord, fields: string[]): void {\n const relevant: JsonRecord = {};\n if (body.model !== undefined) relevant.model = isDeferred(state) && typeof body.model === 'string'\n ? body.model.slice(0, MAX_DEFERRED_MODEL_CHARS)\n : body.model;\n for (const field of fields) {\n if (Object.prototype.hasOwnProperty.call(body, field)) relevant[field] = body[field];\n }\n const bounded = boundedRequestSnapshot(relevant);\n state.requestBody = bounded.value;\n (state as StreamEstimateState).requestEstimateTruncated = bounded.truncated\n || (typeof body.model === 'string' && isDeferred(state) && body.model.length > MAX_DEFERRED_MODEL_CHARS);\n}\n\nfunction estimateMissingInput(state: TokenAccountingSessionState): void {\n if (state.estimatedInputAuthority === 'official') return;\n const requestBody = state.requestBody;\n if (!requestBody) {\n state.estimatedInputTokens = undefined;\n state.estimatedInputAuthority = 'none';\n return;\n }\n const hasInput = state.provider === 'openai'\n ? requestBody.input !== undefined || requestBody.messages !== undefined\n : state.provider === 'anthropic'\n ? requestBody.system !== undefined || requestBody.messages !== undefined\n : requestBody.contents !== undefined || requestBody.systemInstruction !== undefined;\n if (!hasInput) {\n state.estimatedInputTokens = undefined;\n state.estimatedInputAuthority = 'none';\n return;\n }\n const bounded = isDeferred(state)\n ? { value: requestBody, truncated: false }\n : boundedRequestSnapshot(requestBody);\n if (isDeferred(state)) {\n const filtered = stripDeferredMedia(bounded.value);\n const estimateBody = { ...filtered.value as JsonRecord };\n delete estimateBody.model;\n const hasToolSchema = Array.isArray(estimateBody.tools) && estimateBody.tools.length > 0;\n const hasContent = filtered.hasContent || hasToolSchema;\n if (!hasContent) {\n state.estimatedInputTokens = undefined;\n state.estimatedInputAuthority = 'none';\n return;\n }\n state.estimatedInputTokens = clampTokens(countJsonLikeTokens(estimateBody));\n state.estimatedInputAuthority = bounded.truncated\n || (state as StreamEstimateState).requestEstimateTruncated\n || filtered.sawMedia\n ? 'partial'\n : 'heuristic';\n return;\n }\n const estimate = state.provider === 'openai'\n ? estimateOpenAIInputTokens(bounded.value)\n : state.provider === 'anthropic'\n ? estimateAnthropicInputTokens(bounded.value)\n : estimateGeminiInputTokens(bounded.value);\n state.estimatedInputTokens = estimate;\n state.estimatedInputAuthority = bounded.truncated || (state as StreamEstimateState).requestEstimateTruncated ? 'partial' : 'local';\n}\nfunction hasOpenAIOutput(body: JsonRecord): boolean {\n if (Array.isArray(body.output) && body.output.length > 0) return true;\n return Array.isArray(body.choices) && body.choices.some((choice) => {\n if (!isRecord(choice)) return false;\n const message = readRecord(choice, 'message') ?? readRecord(choice, 'delta');\n return !!message && (message.content !== undefined && message.content !== null\n || Array.isArray(message.tool_calls) && message.tool_calls.length > 0);\n });\n}\n\nfunction hasAnthropicOutput(body: JsonRecord): boolean {\n return Array.isArray(body.content) && body.content.length > 0;\n}\n\nfunction observeAnthropicOutput(state: TokenAccountingSessionState, body: JsonRecord): void {\n const blocks = Array.isArray(body.content) ? body.content : [];\n for (let index = 0; index < blocks.length && index < MAX_INPUT_ESTIMATE_NODES; index += 1) {\n observeBoundedOutput(state, blocks[index]);\n }\n if (blocks.length > MAX_INPUT_ESTIMATE_NODES && isDeferred(state)) (state as StreamEstimateState).estimateTruncated = true;\n}\n\nfunction hasGeminiOutput(body: JsonRecord): boolean {\n return Array.isArray(body.candidates) && body.candidates.some((candidate) => {\n const parts = readRecord(candidate, 'content')?.parts;\n return Array.isArray(parts) && parts.length > 0;\n });\n}\n\nfunction isErrorResponse(body: JsonRecord): boolean {\n const status = asString(body.status)?.toLowerCase();\n const type = asString(body.type)?.toLowerCase();\n return body.error !== undefined || status === 'error' || status === 'failed'\n || type === 'error' || type?.endsWith('.error') === true || type?.endsWith('.failed') === true;\n}\n\nfunction isDeferredFailure(body: JsonRecord): boolean {\n const status = asString(body.status)?.toLowerCase();\n const type = asString(body.type)?.toLowerCase();\n return isErrorResponse(body) || status === 'incomplete' || type === 'incomplete' || type?.endsWith('.incomplete') === true;\n}\n\nfunction observeOpenAIOutput(\n state: TokenAccountingSessionState,\n chunk: JsonRecord,\n includeResponseSnapshot = true\n): void {\n if (state.outputAuthority === 'official') return;\n let nodes = MAX_INPUT_ESTIMATE_NODES;\n const truncated = () => {\n if (isDeferred(state)) (state as StreamEstimateState).estimateTruncated = true;\n };\n const type = asString(chunk.type);\n if (type === 'response.output_text.delta') {\n if (isDeferred(state)) observeBoundedOutput(state, chunk.delta);\n else observeOutput(state, chunk.delta);\n }\n if (type === 'response.function_call_arguments.delta') {\n if (isDeferred(state)) observeBoundedOutput(state, chunk.delta);\n else observeOutput(state, chunk.delta);\n }\n if (includeResponseSnapshot) {\n const response = readRecord(chunk, 'response');\n const responseOutput = Array.isArray(response?.output) ? response.output : Array.isArray(chunk.output) ? chunk.output : undefined;\n if (responseOutput !== undefined) {\n if (isDeferred(state)) {\n const limit = Math.min(responseOutput.length, nodes);\n for (let index = 0; index < limit; index += 1, nodes -= 1) {\n observeBoundedOutput(state, responseOutput[index]);\n }\n if (responseOutput.length > limit) truncated();\n } else observeOutput(state, responseOutput);\n }\n }\n const choices = Array.isArray(chunk.choices) ? chunk.choices : [];\n const choiceLimit = Math.min(choices.length, nodes);\n for (let index = 0; index < choiceLimit; index += 1, nodes -= 1) {\n const choice = choices[index];\n if (!isRecord(choice)) continue;\n const delta = readRecord(choice, 'delta') ?? (isDeferred(state) ? readRecord(choice, 'message') : undefined);\n if (delta?.content !== undefined) {\n if (isDeferred(state)) observeBoundedOutput(state, delta.content);\n else observeOutput(state, delta.content);\n }\n const calls = Array.isArray(delta?.tool_calls) ? delta.tool_calls : [];\n const callLimit = Math.min(calls.length, nodes);\n for (let callIndex = 0; callIndex < callLimit; callIndex += 1, nodes -= 1) {\n const call = calls[callIndex];\n const fn = readRecord(call, 'function');\n if (fn?.arguments !== undefined) {\n if (isDeferred(state)) observeBoundedOutput(state, fn.arguments);\n else observeOutput(state, fn.arguments);\n }\n }\n if (calls.length > callLimit) truncated();\n }\n if (choices.length > choiceLimit) truncated();\n}\n\nfunction replaceObservedOutput(state: TokenAccountingSessionState): void {\n const estimateState = state as StreamEstimateState;\n estimateState.estimateFragments = [];\n estimateState.estimateChars = 0;\n estimateState.estimateTruncated = false;\n estimateState.estimateMediaSeen = false;\n estimateState.estimateNodes = 0;\n}\n\nfunction observeGeminiOutput(state: TokenAccountingSessionState, chunk: JsonRecord): void {\n let nodes = MAX_INPUT_ESTIMATE_NODES;\n const candidates = Array.isArray(chunk.candidates) ? chunk.candidates : [];\n const candidateLimit = Math.min(candidates.length, nodes);\n for (let candidateIndex = 0; candidateIndex < candidateLimit; candidateIndex += 1, nodes -= 1) {\n const candidate = candidates[candidateIndex];\n const content = readRecord(candidate, 'content');\n const parts = Array.isArray(content?.parts) ? content.parts : [];\n const partLimit = Math.min(parts.length, nodes);\n for (let partIndex = 0; partIndex < partLimit; partIndex += 1, nodes -= 1) {\n const part = parts[partIndex];\n if (!isRecord(part)) continue;\n if (isDeferred(state) && (part.inlineData !== undefined || part.inline_data !== undefined || part.fileData !== undefined || part.file_data !== undefined)) {\n (state as StreamEstimateState).estimateMediaSeen = true;\n }\n if (typeof part.text === 'string') {\n if (isDeferred(state)) observeBoundedOutput(state, part.text);\n else observeOutput(state, part.text);\n }\n if (part.functionCall !== undefined) {\n if (isDeferred(state)) observeBoundedOutput(state, part.functionCall);\n else observeOutput(state, part.functionCall);\n }\n }\n if (parts.length > partLimit && isDeferred(state)) (state as StreamEstimateState).estimateTruncated = true;\n }\n if (candidates.length > candidateLimit && isDeferred(state)) (state as StreamEstimateState).estimateTruncated = true;\n}\n\nfunction countOpenAIStringTokens(value: unknown, model: string | undefined): number {\n return countModelTextTokens(asString(value) ?? '', model);\n}\n\nfunction countOpenAIJsonLikeTokens(value: unknown, model: string | undefined): number {\n if (typeof value === 'string') {\n return countOpenAIStringTokens(value, model);\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return 1;\n }\n\n if (value === null || value === undefined) {\n return 0;\n }\n\n if (Array.isArray(value)) {\n return value.reduce((total, item) => total + countOpenAIJsonLikeTokens(item, model), 0);\n }\n\n if (isRecord(value)) {\n return Object.entries(value).reduce((total, [key, item]) => {\n return total + countOpenAIStringTokens(key, model) + countOpenAIJsonLikeTokens(item, model);\n }, 0);\n }\n\n return countOpenAIStringTokens(String(value), model);\n}\n\nfunction estimateOpenAIImageTokens(part: JsonRecord): number {\n const imageUrl = readRecord(part, 'image_url');\n const detail = asString(part.detail) ?? asString(imageUrl?.detail);\n if (detail === 'low') {\n return 85;\n }\n\n return 170;\n}\n\nfunction estimateOpenAIToolCallTokens(toolCall: unknown, model: string | undefined): number {\n if (!isRecord(toolCall)) {\n return countOpenAIJsonLikeTokens(toolCall, model);\n }\n\n const toolFunction = readRecord(toolCall, 'function');\n return 12\n + countOpenAIStringTokens(toolCall.id, model)\n + countOpenAIStringTokens(toolCall.type, model)\n + countOpenAIStringTokens(toolFunction?.name, model)\n + countOpenAIStringTokens(toolFunction?.arguments, model)\n + countOpenAIJsonLikeTokens(toolCall, model);\n}\n\nfunction estimateOpenAIMessageTokens(message: unknown, model: string | undefined): number {\n if (!isRecord(message)) {\n return countOpenAIJsonLikeTokens(message, model);\n }\n\n const content = message.content;\n const toolCalls = Array.isArray(message.tool_calls) ? message.tool_calls : [];\n return 4\n + countOpenAIStringTokens(message.role, model)\n + countOpenAIStringTokens(message.name, model)\n + countOpenAIStringTokens(message.tool_call_id, model)\n + estimateOpenAIMessageContent(content, model)\n + toolCalls.reduce((total, toolCall) => total + estimateOpenAIToolCallTokens(toolCall, model), 0);\n}\n\nfunction safeTokenSum(...values: number[]): number | undefined {\n const total = values.reduce((sum, value) => sum + value, 0);\n return Number.isSafeInteger(total) && total >= 0 ? total : undefined;\n}\n\nfunction estimateGeminiInlineDataTokens(inlineData: JsonRecord): number {\n const mimeType = asString(inlineData.mimeType)?.toLowerCase() ?? '';\n\n if (mimeType.startsWith('image/')) {\n return 224;\n }\n\n if (mimeType.startsWith('video/')) {\n return 384;\n }\n\n if (mimeType.startsWith('audio/')) {\n return 128;\n }\n\n return 96;\n}\n\nfunction estimateGeminiFunctionCallTokens(functionCall: JsonRecord): number {\n return 12\n + countTextTokens(asString(functionCall.name) ?? '')\n + countJsonLikeTokens(functionCall.args);\n}\n\nfunction estimateGeminiFunctionResponseTokens(functionResponse: JsonRecord): number {\n return 12\n + countTextTokens(asString(functionResponse.name) ?? '')\n + countJsonLikeTokens(functionResponse.response);\n}\n\nfunction buildAnthropicStreamingEvent(\n state: TokenAccountingSessionState,\n overrides: Partial<CanonicalTokenAccountingEventV2> = {}\n): CanonicalTokenAccountingEventV2 {\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none',\n ...overrides\n });\n}\n\nfunction estimateOpenAIMessageContent(content: unknown, model: string | undefined): number {\n if (typeof content === 'string') {\n return countModelTextTokens(content, model);\n }\n\n if (!Array.isArray(content)) {\n return countOpenAIJsonLikeTokens(content, model);\n }\n\n return content.reduce((total, part) => {\n if (!isRecord(part)) {\n return total + countOpenAIJsonLikeTokens(part, model);\n }\n\n const type = asString(part.type);\n if (type === 'text') {\n return total + countOpenAIStringTokens(part.text, model);\n }\n\n if (type === 'image_url' || type === 'image') {\n return total + estimateOpenAIImageTokens(part);\n }\n\n return total + countOpenAIJsonLikeTokens(part, model);\n }, 0);\n}\n\nfunction estimateOpenAIInputTokens(body: JsonRecord): number {\n const model = asString(body.model);\n if (body.input !== undefined) {\n return clampTokens(countOpenAIJsonLikeTokens(body.input, model) + 8) ?? 0;\n }\n const messages = Array.isArray(body.messages) ? body.messages : [];\n const messageTokens = messages.reduce((total, message) => total + estimateOpenAIMessageTokens(message, model), 0);\n\n const tools = Array.isArray(body.tools) ? body.tools : [];\n const toolTokens = tools.reduce((total, tool) => total + 16 + countOpenAIJsonLikeTokens(tool, model), 0);\n return clampTokens(messageTokens + toolTokens + 8) ?? 0;\n}\n\nfunction estimateOpenAIResponseOutputTokens(body: JsonRecord, model?: string): number {\n const choices = Array.isArray(body.choices) ? body.choices : [];\n return clampTokens(choices.reduce((total, choice) => {\n if (!isRecord(choice)) {\n return total + countOpenAIJsonLikeTokens(choice, model);\n }\n\n const message = readRecord(choice, 'message');\n const delta = readRecord(choice, 'delta');\n const toolCalls = Array.isArray(message?.tool_calls)\n ? message.tool_calls\n : Array.isArray(delta?.tool_calls)\n ? delta.tool_calls\n : [];\n\n return total\n + countOpenAIStringTokens(message?.role ?? delta?.role, model)\n + countOpenAIStringTokens(message?.tool_call_id, model)\n + estimateOpenAIMessageContent(message?.content ?? delta?.content, model)\n + toolCalls.reduce((toolTotal, toolCall) => toolTotal + estimateOpenAIToolCallTokens(toolCall, model), 0)\n + (asString(choice.finish_reason) === 'tool_calls' ? 4 : 0);\n }, 0)) ?? 0;\n}\n\nfunction openAIUsage(body: JsonRecord): JsonRecord | undefined {\n return readRecord(readRecord(body, 'response'), 'usage') ?? readRecord(body, 'usage');\n}\n\nfunction estimateOpenAIResponsesOutputTokens(response: JsonRecord, model?: string): number {\n const output = Array.isArray(response.output) ? response.output : [];\n return clampTokens(output.reduce((total, item) => {\n if (!isRecord(item)) return total + countOpenAIJsonLikeTokens(item, model);\n const content = Array.isArray(item.content) ? item.content : [];\n return total + content.reduce((contentTotal, part) => {\n if (isRecord(part) && typeof part.text === 'string') return contentTotal + countOpenAIStringTokens(part.text, model);\n return contentTotal + countOpenAIJsonLikeTokens(part, model);\n }, 0) + countOpenAIStringTokens(item.arguments, model);\n }, 0)) ?? 0;\n}\n\nfunction isDoneSentinel(chunk: JsonRecord): boolean {\n return chunk.data === '[DONE]' || chunk.type === '[DONE]';\n}\n\nfunction estimateAnthropicInputTokens(body: JsonRecord): number {\n const system = asString(body.system) ?? '';\n const messages = Array.isArray(body.messages) ? body.messages : [];\n const tools = Array.isArray(body.tools) ? body.tools : [];\n return clampTokens(\n countTextTokens(system)\n + messages.reduce((total, message) => total + countJsonLikeTokens(message), 0)\n + tools.reduce((total, tool) => total + 16 + countJsonLikeTokens(tool), 0)\n + 8\n ) ?? 0;\n}\n\nfunction estimateAnthropicOutputTokens(body: JsonRecord): number {\n const content = Array.isArray(body.content) ? body.content : [];\n return clampTokens(content.reduce((total, block) => total + countJsonLikeTokens(block), 0)) ?? 0;\n}\n\nfunction estimateGeminiPartTokens(part: unknown): number {\n if (!isRecord(part)) {\n return countJsonLikeTokens(part);\n }\n\n if (typeof part.text === 'string') {\n return countTextTokens(part.text);\n }\n\n if (isRecord(part.inlineData)) {\n return estimateGeminiInlineDataTokens(part.inlineData);\n }\n\n if (isRecord(part.functionCall)) {\n return estimateGeminiFunctionCallTokens(part.functionCall);\n }\n\n if (isRecord(part.functionResponse)) {\n return estimateGeminiFunctionResponseTokens(part.functionResponse);\n }\n\n return countJsonLikeTokens(part);\n}\n\nfunction estimateGeminiInputTokens(body: JsonRecord): number {\n const systemInstruction = readRecord(body, 'systemInstruction');\n const systemParts = Array.isArray(systemInstruction?.parts) ? systemInstruction.parts : [];\n const contents = Array.isArray(body.contents) ? body.contents : [];\n return clampTokens(\n systemParts.reduce((total, part) => total + estimateGeminiPartTokens(part), 0)\n + contents.reduce((total, item) => {\n if (!isRecord(item)) {\n return total + countJsonLikeTokens(item);\n }\n\n const parts = Array.isArray(item.parts) ? item.parts : [];\n return total + parts.reduce((partTotal, part) => partTotal + estimateGeminiPartTokens(part), 0);\n }, 0)\n + 8\n ) ?? 0;\n}\n\nfunction estimateGeminiOutputTokens(body: JsonRecord): number {\n const candidates = Array.isArray(body.candidates) ? body.candidates : [];\n return clampTokens(candidates.reduce((total, candidate) => {\n if (!isRecord(candidate)) {\n return total + countJsonLikeTokens(candidate);\n }\n\n const content = readRecord(candidate, 'content');\n const parts = Array.isArray(content?.parts) ? content.parts : [];\n return total + parts.reduce((partTotal, part) => partTotal + estimateGeminiPartTokens(part), 0);\n }, 0)) ?? 0;\n}\n\nfunction createOpenAIAdapter(): ProviderTokenAccountingAdapter {\n return {\n provider: 'openai',\n capabilities: getProviderTokenAccountingCapabilities('openai'),\n consumeRequest(state, body) {\n storeRequestForEstimate(state, body, ['input', 'messages', 'tools']);\n setSessionModel(state, body.model);\n },\n consumeResponse(state, body) {\n const usage = openAIUsage(body);\n const promptTokens = readNumber(usage, 'prompt_tokens') ?? readNumber(usage, 'input_tokens');\n const completionTokens = readNumber(usage, 'completion_tokens') ?? readNumber(usage, 'output_tokens');\n const responseStatus = asString(readRecord(body, 'response')?.status) ?? asString(body.status);\n const isIncomplete = responseStatus === 'incomplete' || asString(body.type) === 'response.incomplete';\n const isFailed = responseStatus === 'failed' || asString(body.type) === 'response.failed';\n const promptDetails = readRecord(usage, 'prompt_tokens_details') ?? readRecord(usage, 'input_tokens_details');\n const cacheReadTokens = readNumber(promptDetails, 'cached_tokens');\n if (isDeferred(state)) {\n if (promptTokens !== undefined) {\n state.estimatedInputTokens = promptTokens;\n state.estimatedInputAuthority = 'official';\n }\n if (completionTokens !== undefined) {\n state.outputTokens = completionTokens;\n state.outputAuthority = 'official';\n clearObservedOutput(state);\n }\n if (cacheReadTokens !== undefined) state.cacheReadTokens = cacheReadTokens;\n if (!isIncomplete && !isFailed && !isErrorResponse(body)) observeOpenAIOutput(state, body);\n state.protocolTerminalSeen = true;\n (state as StreamEstimateState).deferredOutcome = isIncomplete || isFailed || isErrorResponse(body) ? 'failed' : 'completed';\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n });\n }\n if (promptTokens === undefined) estimateMissingInput(state);\n const responseHasOutput = hasOpenAIOutput(body) && !isIncomplete && !isFailed && !isErrorResponse(body);\n const estimatedOutput = completionTokens === undefined && responseHasOutput\n ? (Array.isArray(body.output) ? estimateOpenAIResponsesOutputTokens(body, state.model) : estimateOpenAIResponseOutputTokens(body, state.model))\n : undefined;\n\n if (promptTokens !== undefined || completionTokens !== undefined) {\n state.finalReceived = true;\n return finalizeTokenAccountingEvent(state, {\n inputTokens: promptTokens ?? state.estimatedInputTokens,\n outputTokens: completionTokens ?? estimatedOutput,\n cacheReadTokens,\n cacheWriteTokens: undefined,\n inputAuthority: promptTokens !== undefined ? 'official' : (state.estimatedInputAuthority ?? 'heuristic'),\n outputAuthority: completionTokens !== undefined ? 'official' : estimatedOutput === undefined ? 'none' : 'local'\n }, isIncomplete || isFailed ? 'failed' : 'completed');\n }\n\n const outputTokens = estimatedOutput;\n state.finalReceived = true;\n state.outputTokens = outputTokens;\n state.outputAuthority = outputTokens === undefined ? 'none' : 'local';\n return finalizeTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority\n }, isIncomplete || isFailed ? 'failed' : 'completed');\n },\n consumeStreamChunk(state, chunk) {\n if (state.finalReceived || isDoneSentinel(chunk)) return null;\n const response = readRecord(chunk, 'response');\n const usage = openAIUsage(chunk);\n const promptTokens = readNumber(usage, 'prompt_tokens') ?? readNumber(usage, 'input_tokens');\n const completionTokens = readNumber(usage, 'completion_tokens') ?? readNumber(usage, 'output_tokens');\n const promptDetails = readRecord(usage, 'prompt_tokens_details') ?? readRecord(usage, 'input_tokens_details');\n if (promptTokens !== undefined) {\n state.estimatedInputTokens = promptTokens;\n state.estimatedInputAuthority = 'official';\n }\n if (completionTokens !== undefined) {\n state.outputTokens = completionTokens;\n state.outputAuthority = 'official';\n clearObservedOutput(state);\n }\n const reportedCache = readNumber(promptDetails, 'cached_tokens');\n if (reportedCache !== undefined) state.cacheReadTokens = reportedCache;\n const responseType = asString(chunk.type);\n const responseStatus = asString(response?.status);\n const responseCompleted = responseType === 'response.completed' || responseStatus === 'completed';\n observeOpenAIOutput(state, chunk, !responseCompleted);\n const choices = Array.isArray(chunk.choices) ? chunk.choices : [];\n if (choices.some((choice) => isRecord(choice) && asString(choice.finish_reason) !== undefined && choice.finish_reason !== null)) {\n state.protocolTerminalSeen = true;\n if (isDeferred(state)) (state as StreamEstimateState).deferredOutcome = 'completed';\n }\n if (isDeferred(state)) {\n if (responseCompleted) {\n (state as StreamEstimateState).deferredOutcome = 'completed';\n state.protocolTerminalSeen = true;\n if (completionTokens === undefined && state.outputAuthority !== 'official' && Array.isArray(response?.output)) {\n replaceObservedOutput(state);\n observeOpenAIOutput(state, { response });\n }\n } else if (responseType === 'response.incomplete' || responseType === 'response.failed'\n || responseStatus === 'incomplete' || responseStatus === 'failed') {\n (state as StreamEstimateState).deferredOutcome = 'failed';\n state.protocolTerminalSeen = true;\n }\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n });\n }\n if (responseCompleted) {\n if (completionTokens === undefined && state.outputAuthority !== 'official' && Array.isArray(response?.output)) {\n replaceObservedOutput(state);\n observeOpenAIOutput(state, { response });\n }\n if (completionTokens === undefined) finalizeMissingStreamOutput(state);\n if (promptTokens === undefined) estimateMissingInput(state);\n state.finalReceived = true;\n return finalizeTokenAccountingEvent(state, {\n inputTokens: promptTokens ?? state.estimatedInputTokens,\n outputTokens: completionTokens ?? state.outputTokens,\n cacheReadTokens: readNumber(readRecord(usage, 'input_tokens_details') ?? readRecord(usage, 'prompt_tokens_details'), 'cached_tokens') ?? state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: promptTokens !== undefined ? 'official' : (state.estimatedInputAuthority ?? 'heuristic'),\n outputAuthority: completionTokens !== undefined ? 'official' : (state.outputAuthority ?? 'none')\n });\n }\n if (responseType === 'response.incomplete' || responseType === 'response.failed'\n || responseStatus === 'incomplete' || responseStatus === 'failed') {\n state.finalReceived = true;\n const promptDetails = readRecord(usage, 'input_tokens_details') ?? readRecord(usage, 'prompt_tokens_details');\n const input = promptTokens === undefined ? undefined : promptTokens;\n const output = completionTokens;\n state.estimatedInputTokens = input ?? state.estimatedInputTokens;\n state.outputTokens = output ?? state.outputTokens;\n state.cacheReadTokens = readNumber(promptDetails, 'cached_tokens') ?? state.cacheReadTokens;\n if (output === undefined) finalizeMissingStreamOutput(state);\n if (input === undefined) estimateMissingInput(state);\n return finalizeTokenAccountingEvent(state, {\n inputTokens: input ?? state.estimatedInputTokens,\n outputTokens: output ?? state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: input !== undefined ? 'official' : (state.estimatedInputAuthority ?? 'heuristic'),\n outputAuthority: output !== undefined ? 'official' : (state.outputAuthority ?? 'none')\n }, 'failed');\n }\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n });\n },\n finalizeAbortedStream(state) {\n finalizeMissingStreamOutput(state, true);\n estimateMissingInput(state);\n return finalizeTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n }, 'aborted');\n },\n finalizeCompletedStream(state) {\n if (state.finalReceived) return createPartialTokenAccountingEvent(state);\n state.finalReceived = true;\n finalizeMissingStreamOutput(state);\n estimateMissingInput(state);\n return finalizeTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n }, (state as StreamEstimateState).deferredOutcome ?? (state.protocolTerminalSeen ? 'completed' : 'failed'));\n }\n };\n}\n\nfunction createAnthropicAdapter(): ProviderTokenAccountingAdapter {\n return {\n provider: 'anthropic',\n capabilities: getProviderTokenAccountingCapabilities('anthropic'),\n consumeRequest(state, body) {\n storeRequestForEstimate(state, body, ['system', 'messages', 'tools']);\n setSessionModel(state, body.model);\n },\n consumeResponse(state, body) {\n const usage = readRecord(body, 'usage');\n const inputTokens = readNumber(usage, 'input_tokens');\n const outputTokens = readNumber(usage, 'output_tokens');\n const cacheWriteTokens = readNumber(usage, 'cache_creation_input_tokens');\n const cacheReadTokens = readNumber(usage, 'cache_read_input_tokens');\n const totalInputTokens = inputTokens === undefined ? undefined : safeTokenSum(inputTokens, cacheWriteTokens ?? 0, cacheReadTokens ?? 0);\n if (isDeferred(state)) {\n if (totalInputTokens !== undefined) {\n state.estimatedInputTokens = totalInputTokens;\n state.estimatedInputAuthority = 'official';\n }\n if (outputTokens !== undefined) {\n state.outputTokens = outputTokens;\n state.outputAuthority = 'official';\n clearObservedOutput(state);\n }\n if (cacheReadTokens !== undefined) state.cacheReadTokens = cacheReadTokens;\n if (cacheWriteTokens !== undefined) state.cacheWriteTokens = cacheWriteTokens;\n const failed = isDeferredFailure(body);\n if (!failed) observeAnthropicOutput(state, body);\n state.protocolTerminalSeen = true;\n (state as StreamEstimateState).deferredOutcome = failed ? 'failed' : 'completed';\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n });\n }\n if (totalInputTokens === undefined) estimateMissingInput(state);\n const estimatedOutput = outputTokens === undefined && hasAnthropicOutput(body) && !isErrorResponse(body) ? estimateAnthropicOutputTokens(body) : undefined;\n\n if (usage && (inputTokens !== undefined || outputTokens !== undefined\n || readNumber(usage, 'cache_creation_input_tokens') !== undefined\n || readNumber(usage, 'cache_read_input_tokens') !== undefined)) {\n state.finalReceived = true;\n return finalizeTokenAccountingEvent(state, {\n inputTokens: totalInputTokens ?? state.estimatedInputTokens,\n outputTokens: outputTokens ?? estimatedOutput,\n cacheReadTokens,\n cacheWriteTokens,\n inputAuthority: totalInputTokens !== undefined ? 'official' : (state.estimatedInputAuthority ?? 'heuristic'),\n outputAuthority: outputTokens !== undefined ? 'official' : estimatedOutput === undefined ? 'none' : 'local'\n });\n }\n\n return finalizeTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: estimatedOutput,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: estimatedOutput === undefined ? 'none' : 'local'\n });\n },\n consumeStreamChunk(state, chunk) {\n if (state.finalReceived || isDoneSentinel(chunk)) return null;\n const type = asString(chunk.type);\n if (isDeferred(state) && type === 'error') {\n state.protocolTerminalSeen = true;\n (state as StreamEstimateState).deferredOutcome = 'failed';\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n });\n }\n if (type === 'message_start') {\n const message = readRecord(chunk, 'message');\n const usage = readRecord(message, 'usage');\n setSessionModel(state, message?.model);\n state.cacheWriteTokens = readNumber(usage, 'cache_creation_input_tokens') ?? state.cacheWriteTokens;\n state.cacheReadTokens = readNumber(usage, 'cache_read_input_tokens') ?? state.cacheReadTokens;\n const rawInputTokens = readNumber(usage, 'input_tokens');\n const totalInputTokens = rawInputTokens === undefined\n ? undefined\n : safeTokenSum(rawInputTokens, state.cacheWriteTokens ?? 0, state.cacheReadTokens ?? 0);\n state.estimatedInputTokens = totalInputTokens ?? state.estimatedInputTokens;\n if (totalInputTokens !== undefined) state.estimatedInputAuthority = 'official';\n\n const initialOutputTokens = readNumber(usage, 'output_tokens');\n state.outputTokens = initialOutputTokens ?? state.outputTokens;\n state.outputAuthority = initialOutputTokens !== undefined ? 'official' : 'none';\n if (initialOutputTokens !== undefined) clearObservedOutput(state);\n return buildAnthropicStreamingEvent(state, {\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority\n });\n }\n\n if (type === 'content_block_start') {\n const contentBlock = readRecord(chunk, 'content_block');\n if (contentBlock?.text !== undefined) {\n if (isDeferred(state)) observeBoundedOutput(state, contentBlock.text);\n else observeOutput(state, contentBlock.text);\n }\n return buildAnthropicStreamingEvent(state);\n }\n\n if (type === 'content_block_delta') {\n const delta = readRecord(chunk, 'delta');\n const deltaType = asString(delta?.type);\n if (deltaType === 'text_delta') {\n if (isDeferred(state)) observeBoundedOutput(state, delta?.text);\n else observeOutput(state, delta?.text);\n }\n if (deltaType === 'input_json_delta') observeOutput(state, delta?.partial_json);\n return buildAnthropicStreamingEvent(state);\n }\n\n if (type === 'content_block_stop') {\n return buildAnthropicStreamingEvent(state);\n }\n\n if (type === 'message_delta') {\n const usage = readRecord(chunk, 'usage');\n const outputTokens = readNumber(usage, 'output_tokens');\n const rawInputTokens = readNumber(usage, 'input_tokens');\n if (rawInputTokens !== undefined) {\n state.cacheWriteTokens = readNumber(usage, 'cache_creation_input_tokens') ?? state.cacheWriteTokens;\n state.cacheReadTokens = readNumber(usage, 'cache_read_input_tokens') ?? state.cacheReadTokens;\n const totalInput = safeTokenSum(rawInputTokens, state.cacheWriteTokens ?? 0, state.cacheReadTokens ?? 0);\n state.estimatedInputTokens = totalInput ?? state.estimatedInputTokens;\n if (totalInput !== undefined) state.estimatedInputAuthority = 'official';\n }\n if (outputTokens !== undefined) {\n state.outputTokens = outputTokens;\n state.outputAuthority = 'official';\n clearObservedOutput(state);\n }\n state.cacheWriteTokens = readNumber(usage, 'cache_creation_input_tokens') ?? state.cacheWriteTokens;\n state.cacheReadTokens = readNumber(usage, 'cache_read_input_tokens') ?? state.cacheReadTokens;\n\n return buildAnthropicStreamingEvent(state, {\n outputAuthority: state.outputTokens !== undefined ? (state.outputAuthority ?? 'none') : 'none'\n });\n }\n\n if (type === 'message_stop') {\n if (state.finalReceived) {\n return null;\n }\n\n state.protocolTerminalSeen = true;\n if (isDeferred(state)) {\n (state as StreamEstimateState).deferredOutcome ??= 'completed';\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n });\n }\n state.finalReceived = true;\n finalizeMissingStreamOutput(state);\n estimateMissingInput(state);\n return finalizeTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n });\n }\n\n return null;\n },\n finalizeAbortedStream(state) {\n finalizeMissingStreamOutput(state, true);\n estimateMissingInput(state);\n return finalizeTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputTokens !== undefined ? (state.outputAuthority ?? 'partial') : 'none'\n }, 'aborted');\n },\n finalizeCompletedStream(state) {\n if (state.finalReceived) return buildAnthropicStreamingEvent(state);\n state.finalReceived = true;\n finalizeMissingStreamOutput(state);\n estimateMissingInput(state);\n return finalizeTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputTokens !== undefined ? (state.outputAuthority ?? 'partial') : 'none'\n }, (state as StreamEstimateState).deferredOutcome ?? (state.protocolTerminalSeen ? 'completed' : 'failed'));\n }\n };\n}\n\nfunction createGeminiAdapter(): ProviderTokenAccountingAdapter {\n return {\n provider: 'gemini',\n capabilities: getProviderTokenAccountingCapabilities('gemini'),\n consumeRequest(state, body) {\n storeRequestForEstimate(state, body, ['contents', 'systemInstruction']);\n setSessionModel(state, body.model);\n },\n consumeResponse(state, body) {\n const usageMetadata = readRecord(body, 'usageMetadata');\n const promptTokenCount = readNumber(usageMetadata, 'promptTokenCount');\n const candidatesTokenCount = readNumber(usageMetadata, 'candidatesTokenCount');\n const thoughtsTokenCount = readNumber(usageMetadata, 'thoughtsTokenCount') ?? 0;\n const toolUsePromptTokenCount = readNumber(usageMetadata, 'toolUsePromptTokenCount') ?? 0;\n const cachedContentTokenCount = readNumber(usageMetadata, 'cachedContentTokenCount');\n if (isDeferred(state)) {\n const input = promptTokenCount === undefined ? undefined : safeTokenSum(promptTokenCount, toolUsePromptTokenCount);\n const output = candidatesTokenCount === undefined ? undefined : safeTokenSum(candidatesTokenCount, thoughtsTokenCount);\n if (input !== undefined) {\n state.estimatedInputTokens = input;\n state.estimatedInputAuthority = 'official';\n }\n if (output !== undefined) {\n state.outputTokens = output;\n state.outputAuthority = 'official';\n clearObservedOutput(state);\n }\n if (cachedContentTokenCount !== undefined) state.cacheReadTokens = cachedContentTokenCount;\n const failed = isDeferredFailure(body);\n if (!failed) observeGeminiOutput(state, body);\n state.protocolTerminalSeen = true;\n (state as StreamEstimateState).deferredOutcome = failed ? 'failed' : 'completed';\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: undefined,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n });\n }\n if (promptTokenCount === undefined) estimateMissingInput(state);\n const estimatedOutput = candidatesTokenCount === undefined && hasGeminiOutput(body) && !isErrorResponse(body) ? estimateGeminiOutputTokens(body) : undefined;\n\n if (promptTokenCount !== undefined || candidatesTokenCount !== undefined) {\n state.finalReceived = true;\n return finalizeTokenAccountingEvent(state, {\n inputTokens: promptTokenCount === undefined ? state.estimatedInputTokens : safeTokenSum(promptTokenCount, toolUsePromptTokenCount) ?? state.estimatedInputTokens,\n outputTokens: candidatesTokenCount === undefined ? estimatedOutput : safeTokenSum(candidatesTokenCount, thoughtsTokenCount) ?? estimatedOutput,\n cacheReadTokens: cachedContentTokenCount,\n cacheWriteTokens: undefined,\n inputAuthority: promptTokenCount !== undefined && safeTokenSum(promptTokenCount, toolUsePromptTokenCount) !== undefined ? 'official' : (state.estimatedInputAuthority ?? 'heuristic'),\n outputAuthority: candidatesTokenCount !== undefined && safeTokenSum(candidatesTokenCount, thoughtsTokenCount) !== undefined ? 'official' : estimatedOutput === undefined ? 'none' : 'local'\n });\n }\n\n const outputTokens = estimatedOutput;\n state.finalReceived = true;\n state.outputTokens = outputTokens;\n state.outputAuthority = outputTokens === undefined ? 'none' : 'local';\n return finalizeTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority\n });\n },\n consumeStreamChunk(state, chunk) {\n if (state.finalReceived || isDoneSentinel(chunk)) return null;\n observeGeminiOutput(state, chunk);\n const usageMetadata = readRecord(chunk, 'usageMetadata');\n const promptTokenCount = readNumber(usageMetadata, 'promptTokenCount');\n const candidatesTokenCount = readNumber(usageMetadata, 'candidatesTokenCount');\n const thoughtsTokenCount = readNumber(usageMetadata, 'thoughtsTokenCount') ?? 0;\n const toolUsePromptTokenCount = readNumber(usageMetadata, 'toolUsePromptTokenCount') ?? 0;\n const reportedCacheRead = readNumber(usageMetadata, 'cachedContentTokenCount');\n const candidates = Array.isArray(chunk.candidates) ? chunk.candidates : [];\n if (candidates.some((candidate) => isRecord(candidate) && asString(candidate.finishReason) !== undefined)) {\n state.protocolTerminalSeen = true;\n if (isDeferred(state)) (state as StreamEstimateState).deferredOutcome ??= 'completed';\n }\n if (isDeferred(state) && isDeferredFailure(chunk)) {\n state.protocolTerminalSeen = true;\n (state as StreamEstimateState).deferredOutcome = 'failed';\n }\n if (isDeferred(state) && reportedCacheRead !== undefined && promptTokenCount === undefined && candidatesTokenCount === undefined) {\n state.cacheReadTokens = reportedCacheRead;\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: undefined,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? 'none'\n });\n }\n if (promptTokenCount !== undefined || candidatesTokenCount !== undefined) {\n const input = promptTokenCount === undefined ? undefined : safeTokenSum(promptTokenCount, toolUsePromptTokenCount);\n const output = candidatesTokenCount === undefined ? undefined : safeTokenSum(candidatesTokenCount, thoughtsTokenCount);\n state.estimatedInputTokens = input ?? state.estimatedInputTokens;\n if (input !== undefined) state.estimatedInputAuthority = 'official';\n state.outputTokens = output ?? state.outputTokens;\n if (output !== undefined) {\n state.outputAuthority = 'official';\n clearObservedOutput(state);\n }\n const cacheRead = readNumber(usageMetadata, 'cachedContentTokenCount');\n if (cacheRead !== undefined) state.cacheReadTokens = cacheRead;\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: undefined,\n inputAuthority: state.estimatedInputAuthority ?? 'heuristic',\n outputAuthority: state.outputAuthority ?? 'partial'\n });\n }\n\n return createPartialTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'heuristic',\n outputAuthority: state.outputAuthority ?? (state.outputTokens !== undefined ? 'partial' : 'none')\n });\n },\n finalizeAbortedStream(state) {\n finalizeMissingStreamOutput(state, true);\n estimateMissingInput(state);\n return finalizeTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? (state.outputTokens !== undefined ? 'partial' : 'none')\n }, 'aborted');\n },\n finalizeCompletedStream(state) {\n if (state.finalReceived) return createPartialTokenAccountingEvent(state);\n state.finalReceived = true;\n finalizeMissingStreamOutput(state);\n estimateMissingInput(state);\n return finalizeTokenAccountingEvent(state, {\n inputTokens: state.estimatedInputTokens,\n outputTokens: state.outputTokens,\n cacheReadTokens: state.cacheReadTokens,\n cacheWriteTokens: state.cacheWriteTokens,\n inputAuthority: state.estimatedInputAuthority ?? 'none',\n outputAuthority: state.outputAuthority ?? (state.outputTokens !== undefined ? 'partial' : 'none')\n }, (state as StreamEstimateState).deferredOutcome ?? (state.protocolTerminalSeen ? 'completed' : 'failed'));\n }\n };\n}\n\nconst PROVIDER_ADAPTERS = {\n openai: createOpenAIAdapter(),\n anthropic: createAnthropicAdapter(),\n gemini: createGeminiAdapter()\n} as const satisfies Record<string, ProviderTokenAccountingAdapter>;\n\nfunction normalizeProvider(provider: LLMProvider): keyof typeof PROVIDER_ADAPTERS {\n return String(provider).trim().toLowerCase() as keyof typeof PROVIDER_ADAPTERS;\n}\n\nfunction getProviderAdapter(provider: LLMProvider): ProviderTokenAccountingAdapter {\n const adapter = PROVIDER_ADAPTERS[normalizeProvider(provider)];\n if (!adapter) {\n throw new Error(`Unsupported token accounting provider: ${provider}`);\n }\n\n return adapter;\n}\n\nexport function createTokenAccountingSession(\n input: TokenAccountingSessionInput,\n options: { deferFinalization?: boolean } = {}\n): TokenAccountingSession {\n const adapter = getProviderAdapter(input.provider);\n let terminalEvent: CanonicalTokenAccountingEventV2 | undefined;\n const state: TokenAccountingSessionState & StreamEstimateState = {\n provider: adapter.provider,\n routeId: input.routeId,\n upstreamId: input.upstreamId,\n requestId: input.requestId,\n attemptId: input.attemptId,\n streaming: input.streaming,\n model: input.model,\n finalReceived: false,\n deferFinalization: options.deferFinalization === true\n };\n\n return {\n consumeRequest({ body }) {\n adapter.consumeRequest(state, body);\n },\n consumeResponse({ body }): CanonicalTokenAccountingEventV2 {\n const event = adapter.consumeResponse(state, body);\n if (event.final || event.outcome !== 'completed') terminalEvent = event;\n return event;\n },\n consumeStreamChunk({ chunk }): CanonicalTokenAccountingEventV2 | null {\n const event = adapter.consumeStreamChunk(state, chunk);\n if (event && (event.final || event.outcome !== 'completed')) terminalEvent = event;\n return event;\n },\n finalizeCompletedStream(): CanonicalTokenAccountingEventV2 {\n if (terminalEvent) return terminalEvent;\n const event = adapter.finalizeCompletedStream(state);\n terminalEvent = event;\n return event;\n },\n finalizeAbortedStream(): CanonicalTokenAccountingEventV2 {\n if (terminalEvent) return terminalEvent;\n const event = adapter.finalizeAbortedStream(state);\n terminalEvent = event;\n return event;\n }\n };\n}\n",
15
- "import type {\n PluginStorage,\n TokenStatsAttempt,\n TokenStatsMetricName,\n TokenStatsMeteringStorage,\n TokenStatsSnapshotMetrics,\n} from '../../../packages/core/src/plugin.types';\nimport { TOKEN_ACCOUNTING_AUTHORITIES, type CanonicalTokenAccountingEventV2 } from '@jeffusion/bungee-llms/plugin-api';\n\nexport type GroupByDimension = 'model' | 'time';\ntype RangeKey = '1h' | '12h' | '24h';\ntype TokenAccountingAuthority = typeof TOKEN_ACCOUNTING_AUTHORITIES[number];\nexport type CanonicalEvent = CanonicalTokenAccountingEventV2;\n\nexport interface AuthorityBreakdownDto {\n input: Record<TokenAccountingAuthority, number>;\n output: Record<TokenAccountingAuthority, number>;\n}\n\nexport interface GroupedAggregateDto {\n dimension: string;\n bucketStartMs?: number;\n inputTokens: number;\n outputTokens: number;\n officialInputTokens: number;\n officialOutputTokens: number;\n estimatedInputTokens: number;\n estimatedOutputTokens: number;\n cacheReadTokens: number;\n cacheWriteTokens: number;\n partialOutputs: number;\n logicalRequests: number;\n upstreamAttempts: number;\n observationIncompleteAttempts: number;\n estimatedCostUsd: number | null;\n authorityBreakdown: AuthorityBreakdownDto;\n}\n\nexport interface AggregateDto extends Omit<GroupedAggregateDto, 'dimension' | 'bucketStartMs' | 'inputTokens' | 'outputTokens'> {\n groupBy: GroupByDimension;\n bucketMs?: number;\n totalInputTokens: number;\n totalOutputTokens: number;\n data: GroupedAggregateDto[];\n}\n\nexport class TokenStatsRepositoryError extends Error {\n constructor(message: string) { super(message); this.name = 'TokenStatsRepositoryError'; }\n}\n\nexport class TokenStatsRepositoryLimitError extends TokenStatsRepositoryError {}\n\ntype MeteringLogger = { warn(message: string, metadata?: object): void; error(message: string, metadata?: object): void };\ntype AttemptTask = () => TokenStatsAttempt | undefined | Promise<TokenStatsAttempt | undefined>;\ntype QueuedAttempt = { metering: TokenStatsMeteringStorage; task: AttemptTask; logger: MeteringLogger };\n\nconst MAX_PENDING_ATTEMPTS = 256;\nconst LOG_INTERVAL_MS = 60_000;\nconst pendingAttempts: QueuedAttempt[] = [];\nlet pendingCount = 0;\nlet drainTimer: ReturnType<typeof setTimeout> | undefined;\nlet draining = false;\nlet lastDropLogAt = 0;\nlet lastFailureLogAt = 0;\n\nfunction logRateLimited(logger: MeteringLogger, kind: 'drop' | 'failure', error?: unknown): void {\n const now = Date.now();\n if (kind === 'drop') {\n if (now - lastDropLogAt < LOG_INTERVAL_MS) return;\n lastDropLogAt = now;\n try { logger.warn('Token stats attempt queue full; dropping metering rows', { capacity: MAX_PENDING_ATTEMPTS }); } catch { /* logging must not affect proxy flow */ }\n return;\n }\n if (now - lastFailureLogAt < LOG_INTERVAL_MS) return;\n lastFailureLogAt = now;\n try {\n logger.error('Token stats attempt processing failed; dropping metering row', {\n error: error instanceof Error ? error.message : error === undefined ? 'attempt task returned no row' : String(error),\n });\n } catch { /* logging must not affect proxy flow */ }\n}\n\nfunction scheduleDrain(): void {\n if (drainTimer !== undefined || draining) return;\n drainTimer = setTimeout(() => { drainTimer = undefined; void drainOneAttempt(); }, 0);\n}\n\nasync function drainOneAttempt(): Promise<void> {\n if (draining) return;\n const item = pendingAttempts.shift();\n if (!item) return;\n draining = true;\n try {\n try {\n const row = await item.task();\n if (row === undefined) {\n logRateLimited(item.logger, 'failure');\n } else {\n await item.metering.recordAttempt(row);\n }\n } catch (error) {\n logRateLimited(item.logger, 'failure', error);\n }\n } finally {\n pendingCount--;\n draining = false;\n if (pendingAttempts.length) scheduleDrain();\n }\n}\n\nconst METRIC_FIELDS: readonly TokenStatsMetricName[] = [\n 'inputTokens', 'outputTokens', 'officialInputTokens', 'officialOutputTokens',\n 'estimatedInputTokens', 'estimatedOutputTokens', 'cacheReadTokens', 'cacheWriteTokens',\n 'partialOutputs', 'logicalRequests', 'upstreamAttempts', 'observationIncompleteAttempts',\n 'inputAuthorityOfficial', 'inputAuthorityLocal', 'inputAuthorityHeuristic', 'inputAuthorityPartial', 'inputAuthorityNone',\n 'outputAuthorityOfficial', 'outputAuthorityLocal', 'outputAuthorityHeuristic', 'outputAuthorityPartial', 'outputAuthorityNone',\n];\n\nfunction emptyMetrics(): TokenStatsSnapshotMetrics {\n return { ...Object.fromEntries(METRIC_FIELDS.map((key) => [key, 0])) as Record<TokenStatsMetricName, number>, estimatedCostUsd: null };\n}\n\nfunction emptyAuthorityBreakdown(): AuthorityBreakdownDto {\n const empty = () => Object.fromEntries(TOKEN_ACCOUNTING_AUTHORITIES.map((authority) => [authority, 0])) as Record<TokenAccountingAuthority, number>;\n return { input: empty(), output: empty() };\n}\n\nfunction metricsToDto(metrics: TokenStatsSnapshotMetrics): Omit<GroupedAggregateDto, 'dimension'> {\n const authorityBreakdown = emptyAuthorityBreakdown();\n for (const authority of TOKEN_ACCOUNTING_AUTHORITIES) {\n authorityBreakdown.input[authority] = metrics[`inputAuthority${authority[0]!.toUpperCase()}${authority.slice(1)}` as TokenStatsMetricName];\n authorityBreakdown.output[authority] = metrics[`outputAuthority${authority[0]!.toUpperCase()}${authority.slice(1)}` as TokenStatsMetricName];\n }\n return {\n inputTokens: metrics.inputTokens,\n outputTokens: metrics.outputTokens,\n officialInputTokens: metrics.officialInputTokens,\n officialOutputTokens: metrics.officialOutputTokens,\n estimatedInputTokens: metrics.estimatedInputTokens,\n estimatedOutputTokens: metrics.estimatedOutputTokens,\n cacheReadTokens: metrics.cacheReadTokens,\n cacheWriteTokens: metrics.cacheWriteTokens,\n partialOutputs: metrics.partialOutputs,\n logicalRequests: metrics.logicalRequests,\n upstreamAttempts: metrics.upstreamAttempts,\n observationIncompleteAttempts: metrics.observationIncompleteAttempts,\n estimatedCostUsd: metrics.estimatedCostUsd,\n authorityBreakdown,\n };\n}\n\nfunction sourceFor(value: number | undefined, authority: CanonicalTokenAccountingEventV2['inputAuthority']): TokenStatsAttempt['input_source'] {\n if (!Number.isSafeInteger(value) || value! < 0) return 'unknown';\n if (authority === 'official') return 'usage';\n if (authority === 'partial') return 'partial';\n return authority === 'none' ? 'unknown' : 'estimated';\n}\n\nexport function attemptRowFromEvent(\n event: CanonicalEvent,\n finishedAtMs: number,\n observationIncomplete: boolean,\n model: string,\n): TokenStatsAttempt {\n const inputSource = sourceFor(event.inputTokens, event.inputAuthority);\n const outputSource = sourceFor(event.outputTokens, event.outputAuthority);\n return {\n attempt_id: event.attemptId,\n request_id: event.requestId,\n finished_at_ms: finishedAtMs,\n route_id: event.routeId || 'unknown',\n upstream_id: event.upstreamId || 'unknown',\n provider: event.provider || 'unknown',\n outcome: event.outcome,\n model,\n input_tokens: inputSource === 'unknown' ? null : event.inputTokens!,\n output_tokens: outputSource === 'unknown' ? null : event.outputTokens!,\n input_source: inputSource,\n output_source: outputSource,\n cache_read_tokens: Number.isSafeInteger(event.cacheReadTokens) && event.cacheReadTokens! >= 0 ? event.cacheReadTokens! : null,\n cache_write_tokens: Number.isSafeInteger(event.cacheWriteTokens) && event.cacheWriteTokens! >= 0 ? event.cacheWriteTokens! : null,\n cost_usd: null,\n observation_incomplete: observationIncomplete,\n };\n}\n\nexport class TokenStatsRepository {\n private readonly metering: TokenStatsMeteringStorage;\n\n constructor(storage: PluginStorage) {\n if (!storage.metering) throw new TokenStatsRepositoryError('token-stats metering storage is required');\n this.metering = storage.metering;\n }\n\n /** Defers synchronous task work to drain; a task can still occupy the EventLoop. */\n enqueueAttempt(task: AttemptTask, logger: MeteringLogger): boolean {\n if (pendingCount >= MAX_PENDING_ATTEMPTS) {\n logRateLimited(logger, 'drop');\n return false;\n }\n pendingAttempts.push({ metering: this.metering, task, logger });\n pendingCount++;\n scheduleDrain();\n return true;\n }\n\n async query(range: string, groupBy: GroupByDimension, asOfMs = Date.now()): Promise<AggregateDto> {\n if (range !== '1h' && range !== '12h' && range !== '24h') throw new TokenStatsRepositoryError('invalid token-stats range');\n if (groupBy !== 'model' && groupBy !== 'time') {\n throw new TokenStatsRepositoryError('invalid token-stats groupBy');\n }\n if (!Number.isSafeInteger(asOfMs) || asOfMs < 0) throw new TokenStatsRepositoryError('invalid token-stats asOfMs');\n const snapshot = await this.metering.queryWindowSnapshot({ asOfMs, range: range as RangeKey, groupBy });\n const total = metricsToDto(snapshot.all);\n const { inputTokens, outputTokens, ...summary } = total;\n return {\n groupBy,\n ...summary,\n totalInputTokens: inputTokens,\n totalOutputTokens: outputTokens,\n ...(snapshot.bucketMs === undefined ? {} : { bucketMs: snapshot.bucketMs }),\n data: snapshot.data.map((row) => ({\n dimension: row.dimension,\n ...(row.bucketStartMs === undefined ? {} : { bucketStartMs: row.bucketStartMs }),\n ...metricsToDto(row.metrics),\n })).sort(groupBy === 'model'\n ? (a, b) => b.inputTokens + b.outputTokens - a.inputTokens - a.outputTokens\n || b.upstreamAttempts - a.upstreamAttempts || a.dimension.localeCompare(b.dimension)\n : (a, b) => a.bucketStartMs! - b.bucketStartMs! || a.dimension.localeCompare(b.dimension)),\n };\n }\n}\n",
15
+ "import type { TokenStatsRange } from './plugin.types';\n\nconst HOUR = 3_600_000;\nexport const TOKEN_STATS_RETENTION_MS = 31 * 24 * HOUR;\nexport const TOKEN_STATS_RANGES = ['1h', '12h', '24h', '1d', '7d', '30d', 'day', 'week', 'month'] as const;\n\n/** Recent page ranges are consecutive elapsed hours; calendar ranges use local dates. */\nexport function tokenStatsWindow(range: TokenStatsRange, asOfMs: number, timeZone = 'UTC') {\n if (range === '1h' || range === '12h' || range === '24h') {\n const duration = { '1h': HOUR, '12h': 12 * HOUR, '24h': 24 * HOUR };\n const bucketMs = { '1h': 300_000, '12h': HOUR, '24h': 2 * HOUR }[range];\n return { startMs: asOfMs - duration[range], endMs: asOfMs, bucketMs };\n }\n if (range === '1d' || range === '7d' || range === '30d') {\n const days = { '1d': 1, '7d': 7, '30d': 30 }[range];\n const bucketMs = range === '1d' ? HOUR : 24 * HOUR;\n const startMs = asOfMs - days * 24 * HOUR;\n const bucketStarts = Array.from({ length: range === '1d' ? 24 : days }, (_, i) => startMs + i * bucketMs);\n return { startMs, endMs: asOfMs, bucketMs, bucketStarts };\n }\n const format = new Intl.DateTimeFormat('en-US', {\n timeZone, year: 'numeric', month: 'numeric', day: 'numeric',\n hour: 'numeric', minute: 'numeric', second: 'numeric', hourCycle: 'h23',\n });\n const parts = (ms: number) => Object.fromEntries(format.formatToParts(ms)\n .filter(part => part.type !== 'literal').map(part => [part.type, Number(part.value)]));\n const today = parts(asOfMs);\n const day = Date.UTC(today.year!, today.month! - 1, today.day!);\n // Resolve each local midnight separately so DST days can contain 23 or 25 hours.\n const midnight = (date: number) => {\n let candidate = date;\n for (let i = 0; i < 4; i++) {\n const p = parts(candidate);\n const local = Date.UTC(p.year!, p.month! - 1, p.day!, p.hour!, p.minute!, p.second!);\n const next = candidate + date - local;\n if (next === candidate) return candidate;\n candidate = next;\n }\n return candidate;\n };\n if (range === 'day') {\n const startMs = midnight(day);\n const bucketEndMs = midnight(day + 24 * HOUR);\n const bucketStarts = Array.from({ length: Math.ceil((bucketEndMs - startMs) / HOUR) }, (_, i) => startMs + i * HOUR);\n return { startMs, endMs: asOfMs, bucketMs: HOUR, bucketStarts, bucketEndMs };\n }\n const firstDay = range === 'month' ? Date.UTC(today.year!, today.month! - 1, 1)\n : day - ((new Date(day).getUTCDay() + 6) % 7) * 24 * HOUR;\n const nextPeriod = range === 'month' ? Date.UTC(today.year!, today.month!, 1) : firstDay + 7 * 24 * HOUR;\n const days = (nextPeriod - firstDay) / (24 * HOUR);\n const bucketStarts = Array.from({ length: days }, (_, i) => midnight(firstDay + i * 24 * HOUR));\n return { startMs: bucketStarts[0]!, endMs: asOfMs, bucketMs: 24 * HOUR, bucketStarts, bucketEndMs: midnight(nextPeriod) };\n}\n",
16
+ "import type {\n PluginStorage,\n TokenStatsAttempt,\n TokenStatsMetricName,\n TokenStatsMeteringStorage,\n TokenStatsSnapshotMetrics,\n TokenStatsRange,\n} from '../../../packages/core/src/plugin.types';\nimport { TOKEN_ACCOUNTING_AUTHORITIES, type CanonicalTokenAccountingEventV2 } from '@jeffusion/bungee-llms/plugin-api';\nimport { TOKEN_STATS_RANGES } from '../../../packages/core/src/token-stats-window';\n\nexport type GroupByDimension = 'model' | 'time';\ntype TokenAccountingAuthority = typeof TOKEN_ACCOUNTING_AUTHORITIES[number];\nexport type CanonicalEvent = CanonicalTokenAccountingEventV2;\n\nexport interface AuthorityBreakdownDto {\n input: Record<TokenAccountingAuthority, number>;\n output: Record<TokenAccountingAuthority, number>;\n}\n\nexport interface GroupedAggregateDto {\n dimension: string;\n bucketStartMs?: number;\n inputTokens: number;\n outputTokens: number;\n officialInputTokens: number;\n officialOutputTokens: number;\n estimatedInputTokens: number;\n estimatedOutputTokens: number;\n cacheReadTokens: number;\n cacheWriteTokens: number;\n partialOutputs: number;\n logicalRequests: number;\n upstreamAttempts: number;\n observationIncompleteAttempts: number;\n estimatedCostUsd: number | null;\n authorityBreakdown: AuthorityBreakdownDto;\n}\n\nexport interface AggregateDto extends Omit<GroupedAggregateDto, 'dimension' | 'bucketStartMs' | 'inputTokens' | 'outputTokens'> {\n groupBy: GroupByDimension;\n asOfMs: number;\n bucketMs?: number;\n bucketStarts?: number[];\n bucketEndMs?: number;\n totalInputTokens: number;\n totalOutputTokens: number;\n data: GroupedAggregateDto[];\n}\n\nexport class TokenStatsRepositoryError extends Error {\n constructor(message: string) { super(message); this.name = 'TokenStatsRepositoryError'; }\n}\n\nexport class TokenStatsRepositoryLimitError extends TokenStatsRepositoryError {}\n\ntype MeteringLogger = { warn(message: string, metadata?: object): void; error(message: string, metadata?: object): void };\ntype AttemptTask = () => TokenStatsAttempt | undefined | Promise<TokenStatsAttempt | undefined>;\ntype QueuedAttempt = { metering: TokenStatsMeteringStorage; task: AttemptTask; logger: MeteringLogger };\n\nconst MAX_PENDING_ATTEMPTS = 256;\nconst LOG_INTERVAL_MS = 60_000;\nconst pendingAttempts: QueuedAttempt[] = [];\nlet pendingCount = 0;\nlet drainTimer: ReturnType<typeof setTimeout> | undefined;\nlet draining = false;\nlet lastDropLogAt = 0;\nlet lastFailureLogAt = 0;\n\nfunction logRateLimited(logger: MeteringLogger, kind: 'drop' | 'failure', error?: unknown): void {\n const now = Date.now();\n if (kind === 'drop') {\n if (now - lastDropLogAt < LOG_INTERVAL_MS) return;\n lastDropLogAt = now;\n try { logger.warn('Token stats attempt queue full; dropping metering rows', { capacity: MAX_PENDING_ATTEMPTS }); } catch { /* logging must not affect proxy flow */ }\n return;\n }\n if (now - lastFailureLogAt < LOG_INTERVAL_MS) return;\n lastFailureLogAt = now;\n try {\n logger.error('Token stats attempt processing failed; dropping metering row', {\n error: error instanceof Error ? error.message : error === undefined ? 'attempt task returned no row' : String(error),\n });\n } catch { /* logging must not affect proxy flow */ }\n}\n\nfunction scheduleDrain(): void {\n if (drainTimer !== undefined || draining) return;\n drainTimer = setTimeout(() => { drainTimer = undefined; void drainOneAttempt(); }, 0);\n}\n\nasync function drainOneAttempt(): Promise<void> {\n if (draining) return;\n const item = pendingAttempts.shift();\n if (!item) return;\n draining = true;\n try {\n try {\n const row = await item.task();\n if (row === undefined) {\n logRateLimited(item.logger, 'failure');\n } else {\n await item.metering.recordAttempt(row);\n }\n } catch (error) {\n logRateLimited(item.logger, 'failure', error);\n }\n } finally {\n pendingCount--;\n draining = false;\n if (pendingAttempts.length) scheduleDrain();\n }\n}\n\nconst METRIC_FIELDS: readonly TokenStatsMetricName[] = [\n 'inputTokens', 'outputTokens', 'officialInputTokens', 'officialOutputTokens',\n 'estimatedInputTokens', 'estimatedOutputTokens', 'cacheReadTokens', 'cacheWriteTokens',\n 'partialOutputs', 'logicalRequests', 'upstreamAttempts', 'observationIncompleteAttempts',\n 'inputAuthorityOfficial', 'inputAuthorityLocal', 'inputAuthorityHeuristic', 'inputAuthorityPartial', 'inputAuthorityNone',\n 'outputAuthorityOfficial', 'outputAuthorityLocal', 'outputAuthorityHeuristic', 'outputAuthorityPartial', 'outputAuthorityNone',\n];\n\nfunction emptyMetrics(): TokenStatsSnapshotMetrics {\n return { ...Object.fromEntries(METRIC_FIELDS.map((key) => [key, 0])) as Record<TokenStatsMetricName, number>, estimatedCostUsd: null };\n}\n\nfunction emptyAuthorityBreakdown(): AuthorityBreakdownDto {\n const empty = () => Object.fromEntries(TOKEN_ACCOUNTING_AUTHORITIES.map((authority) => [authority, 0])) as Record<TokenAccountingAuthority, number>;\n return { input: empty(), output: empty() };\n}\n\nfunction metricsToDto(metrics: TokenStatsSnapshotMetrics): Omit<GroupedAggregateDto, 'dimension'> {\n const authorityBreakdown = emptyAuthorityBreakdown();\n for (const authority of TOKEN_ACCOUNTING_AUTHORITIES) {\n authorityBreakdown.input[authority] = metrics[`inputAuthority${authority[0]!.toUpperCase()}${authority.slice(1)}` as TokenStatsMetricName];\n authorityBreakdown.output[authority] = metrics[`outputAuthority${authority[0]!.toUpperCase()}${authority.slice(1)}` as TokenStatsMetricName];\n }\n return {\n inputTokens: metrics.inputTokens,\n outputTokens: metrics.outputTokens,\n officialInputTokens: metrics.officialInputTokens,\n officialOutputTokens: metrics.officialOutputTokens,\n estimatedInputTokens: metrics.estimatedInputTokens,\n estimatedOutputTokens: metrics.estimatedOutputTokens,\n cacheReadTokens: metrics.cacheReadTokens,\n cacheWriteTokens: metrics.cacheWriteTokens,\n partialOutputs: metrics.partialOutputs,\n logicalRequests: metrics.logicalRequests,\n upstreamAttempts: metrics.upstreamAttempts,\n observationIncompleteAttempts: metrics.observationIncompleteAttempts,\n estimatedCostUsd: metrics.estimatedCostUsd,\n authorityBreakdown,\n };\n}\n\nfunction sourceFor(value: number | undefined, authority: CanonicalTokenAccountingEventV2['inputAuthority']): TokenStatsAttempt['input_source'] {\n if (!Number.isSafeInteger(value) || value! < 0) return 'unknown';\n if (authority === 'official') return 'usage';\n if (authority === 'partial') return 'partial';\n return authority === 'none' ? 'unknown' : 'estimated';\n}\n\nexport function attemptRowFromEvent(\n event: CanonicalEvent,\n finishedAtMs: number,\n observationIncomplete: boolean,\n model: string,\n): TokenStatsAttempt {\n const inputSource = sourceFor(event.inputTokens, event.inputAuthority);\n const outputSource = sourceFor(event.outputTokens, event.outputAuthority);\n return {\n attempt_id: event.attemptId,\n request_id: event.requestId,\n finished_at_ms: finishedAtMs,\n route_id: event.routeId || 'unknown',\n upstream_id: event.upstreamId || 'unknown',\n provider: event.provider || 'unknown',\n outcome: event.outcome,\n model,\n input_tokens: inputSource === 'unknown' ? null : event.inputTokens!,\n output_tokens: outputSource === 'unknown' ? null : event.outputTokens!,\n input_source: inputSource,\n output_source: outputSource,\n cache_read_tokens: Number.isSafeInteger(event.cacheReadTokens) && event.cacheReadTokens! >= 0 ? event.cacheReadTokens! : null,\n cache_write_tokens: Number.isSafeInteger(event.cacheWriteTokens) && event.cacheWriteTokens! >= 0 ? event.cacheWriteTokens! : null,\n cost_usd: null,\n observation_incomplete: observationIncomplete,\n };\n}\n\nexport class TokenStatsRepository {\n private readonly metering: TokenStatsMeteringStorage;\n\n constructor(storage: PluginStorage) {\n if (!storage.metering) throw new TokenStatsRepositoryError('token-stats metering storage is required');\n this.metering = storage.metering;\n }\n\n /** Defers synchronous task work to drain; a task can still occupy the EventLoop. */\n enqueueAttempt(task: AttemptTask, logger: MeteringLogger): boolean {\n if (pendingCount >= MAX_PENDING_ATTEMPTS) {\n logRateLimited(logger, 'drop');\n return false;\n }\n pendingAttempts.push({ metering: this.metering, task, logger });\n pendingCount++;\n scheduleDrain();\n return true;\n }\n\n async query(range: string, groupBy: GroupByDimension, asOfMs = Date.now(), timeZone?: string): Promise<AggregateDto> {\n if (!(TOKEN_STATS_RANGES as readonly string[]).includes(range)) throw new TokenStatsRepositoryError('invalid token-stats range');\n if (groupBy !== 'model' && groupBy !== 'time') {\n throw new TokenStatsRepositoryError('invalid token-stats groupBy');\n }\n if (!Number.isSafeInteger(asOfMs) || asOfMs < 0) throw new TokenStatsRepositoryError('invalid token-stats asOfMs');\n const snapshot = await this.metering.queryWindowSnapshot({ asOfMs, range: range as TokenStatsRange, groupBy, timeZone });\n const total = metricsToDto(snapshot.all);\n const { inputTokens, outputTokens, ...summary } = total;\n return {\n groupBy,\n asOfMs,\n ...summary,\n totalInputTokens: inputTokens,\n totalOutputTokens: outputTokens,\n ...(snapshot.bucketMs === undefined ? {} : { bucketMs: snapshot.bucketMs }),\n ...(snapshot.bucketStarts === undefined ? {} : { bucketStarts: snapshot.bucketStarts }),\n ...(snapshot.bucketEndMs === undefined ? {} : { bucketEndMs: snapshot.bucketEndMs }),\n data: snapshot.data.map((row) => ({\n dimension: row.dimension,\n ...(row.bucketStartMs === undefined ? {} : { bucketStartMs: row.bucketStartMs }),\n ...metricsToDto(row.metrics),\n })).sort(groupBy === 'model'\n ? (a, b) => b.inputTokens + b.outputTokens - a.inputTokens - a.outputTokens\n || b.upstreamAttempts - a.upstreamAttempts || a.dimension.localeCompare(b.dimension)\n : (a, b) => a.bucketStartMs! - b.bucketStartMs! || a.dimension.localeCompare(b.dimension)),\n };\n }\n}\n",
16
17
  "/**\n * Thin async client for the models.dev API (https://models.dev/api.json).\n *\n * - Defaults to returning the full JSON catalog.\n * - Optionally filter by `provider` (e.g. \"deepseek\", \"vercel\") and/or `model` (e.g. \"gpt-4o\").\n * - No runtime dependencies. Uses `globalThis.fetch` if available, or accept a custom `fetch` via options.\n *\n * Note: This returns the raw models.dev schema as-is. Any higher-level formatting can be layered on later.\n */\nexport { getModelMeta } from \"@tokenlens/core\";\n/** Coded error for better ergonomics in consumers */\nexport class FetchModelsError extends Error {\n code;\n status;\n constructor(opts) {\n super(opts.message);\n this.name = \"FetchModelsError\";\n this.code = opts.code;\n this.status = opts.status;\n }\n}\n/**\n * Fetches the models.dev catalog and optionally filters results by provider and/or model.\n *\n * Error handling:\n * - Throws FetchModelsError with code: 'UNAVAILABLE' (no fetch present), 'NETWORK', 'HTTP', or 'PARSE'.\n */\nexport async function fetchModels(opts = {}) {\n if (typeof opts === \"string\") {\n return fetchModels({ provider: opts });\n }\n const url = opts.baseUrl ?? \"https://models.dev/api.json\";\n const fetchImpl = opts.fetch ?? globalThis.fetch;\n if (typeof fetchImpl !== \"function\") {\n throw new FetchModelsError({\n code: \"UNAVAILABLE\",\n message: \"No fetch implementation found. Pass a custom `fetch` in options or run on a platform with global fetch (Node 18+, modern browsers).\",\n });\n }\n let res;\n try {\n res = await fetchImpl(url, opts.signal ? { signal: opts.signal } : undefined);\n }\n catch (err) {\n const message = err instanceof Error ? err.message : \"Unknown network error\";\n throw new FetchModelsError({ code: \"NETWORK\", message });\n }\n if (!res.ok) {\n let body = \"\";\n try {\n body = await res.text();\n }\n catch { }\n const snippet = body\n ? ` Body: ${body.slice(0, 256)}${body.length > 256 ? \"…\" : \"\"}`\n : \"\";\n throw new FetchModelsError({\n code: \"HTTP\",\n status: res.status,\n message: `Failed to fetch models.dev API (${res.status} ${res.statusText}).${snippet}`,\n });\n }\n let data;\n try {\n data = await res.json();\n }\n catch (err) {\n const message = err instanceof Error ? err.message : \"Invalid JSON\";\n throw new FetchModelsError({ code: \"PARSE\", message });\n }\n const catalog = data;\n const { provider, model } = opts;\n if (!provider && !model)\n return catalog;\n if (provider && !model)\n return catalog[provider];\n if (provider && model)\n return catalog[provider]?.models?.[model];\n // model only: search across providers\n const matches = [];\n if (!model)\n return matches;\n for (const [provKey, prov] of Object.entries(catalog)) {\n const m = prov?.models?.[model];\n if (m)\n matches.push({ provider: provKey, model: m });\n }\n return matches;\n}\n//# sourceMappingURL=index.js.map",
17
18
  "import { fetchModels, type FetchLike } from 'tokenlens/fetch';\nimport type { ModelCatalog } from 'tokenlens';\nimport type { PluginStorage } from '../../../packages/core/src/plugin.types';\n\nexport const PRICE_SETTINGS_KEY = 'pricing:settings:v1';\nexport const PRICE_CACHE_KEY = 'pricing:catalog:v1';\nexport const PRICE_STATUS_KEY = 'pricing:status:v1';\nexport const PRICE_SOURCE = 'https://models.dev/api.json';\nexport interface PriceSettings {\n autoRefresh: boolean;\n intervalMinutes: number;\n timeoutSeconds: number;\n}\nexport interface PriceCache { version: 1; fetchedAt: number; catalog: ModelCatalog }\nexport interface PriceStatus {\n settings: PriceSettings;\n source: string;\n refreshing: boolean;\n lastAttemptAt: number | null;\n lastSuccessAt: number | null;\n nextRefreshAt: number | null;\n lastError: 'timeout' | 'network' | 'invalid_catalog' | 'storage' | null;\n consecutiveFailures: number;\n modelCount: number;\n providerCount: number;\n}\nexport const DEFAULT_PRICE_SETTINGS: PriceSettings = { autoRefresh: true, intervalMinutes: 60, timeoutSeconds: 15 };\n\nexport function parsePriceSettings(value: unknown): PriceSettings {\n if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error('invalid_input');\n const v = value as Record<string, unknown>;\n if (Object.keys(v).some(key => !['autoRefresh', 'intervalMinutes', 'timeoutSeconds'].includes(key))\n || typeof v.autoRefresh !== 'boolean'\n || !Number.isInteger(v.intervalMinutes) || (v.intervalMinutes as number) < 1 || (v.intervalMinutes as number) > 1440\n || !Number.isInteger(v.timeoutSeconds) || (v.timeoutSeconds as number) < 5 || (v.timeoutSeconds as number) > 60) {\n throw new Error('invalid_input');\n }\n return { autoRefresh: v.autoRefresh, intervalMinutes: v.intervalMinutes as number, timeoutSeconds: v.timeoutSeconds as number };\n}\n\n// Cache only direct providers with usable prices, preserving context tiers and cache prices.\nexport function pricedCatalog(value: unknown): ModelCatalog {\n if (!value || typeof value !== 'object') throw new Error('invalid_catalog');\n const input = value as ModelCatalog;\n const output: ModelCatalog = {};\n let count = 0;\n for (const id of ['openai', 'anthropic', 'google', 'xai']) {\n const provider = input[id];\n if (!provider?.models || typeof provider.models !== 'object') continue;\n const models: ModelCatalog[string]['models'] = {};\n for (const [modelId, model] of Object.entries(provider.models)) {\n const cost = model?.cost;\n if (!cost || typeof cost.input !== 'number' || !Number.isFinite(cost.input) || cost.input < 0\n || typeof cost.output !== 'number' || !Number.isFinite(cost.output) || cost.output < 0) continue;\n if (++count > 10_000) throw new Error('invalid_catalog');\n Object.defineProperty(models, modelId, { value: { id: modelId, name: model.name, cost }, enumerable: true });\n }\n if (Object.keys(models).length) output[id] = { id, name: provider.name, models } as ModelCatalog[string];\n }\n if (!count) throw new Error('invalid_catalog');\n return output;\n}\n\nexport interface PriceCatalogOptions {\n fetch?: FetchLike;\n now?: () => number;\n schedule?: (callback: () => void, delayMs: number) => ReturnType<typeof setTimeout>;\n cancel?: (timer: ReturnType<typeof setTimeout>) => void;\n}\n\n/** One control-process owner; workers consume the same persisted catalog. */\nexport class PriceCatalogManager {\n private state: PriceStatus = {\n settings: { ...DEFAULT_PRICE_SETTINGS }, source: PRICE_SOURCE, refreshing: false,\n lastAttemptAt: null, lastSuccessAt: null, nextRefreshAt: null, lastError: null,\n consecutiveFailures: 0, modelCount: 0, providerCount: 0,\n };\n private timer: ReturnType<typeof setTimeout> | undefined;\n private controller: AbortController | undefined;\n private inFlight: Promise<void> | undefined;\n private initialization: Promise<void> | undefined;\n private stopped = false;\n private readonly now: () => number;\n\n constructor(private readonly storage: PluginStorage, private readonly options: PriceCatalogOptions = {}) {\n this.now = options.now ?? Date.now;\n }\n\n async start(): Promise<void> {\n await (this.initialization ??= this.restore());\n }\n\n status(): PriceStatus { return structuredClone(this.state); }\n\n private async restore(): Promise<void> {\n const settings = await this.storage.get<unknown>(PRICE_SETTINGS_KEY);\n if (settings !== null) {\n try { this.state.settings = parsePriceSettings(settings); } catch { /* Recover invalid configuration with defaults. */ }\n }\n const previous = await this.storage.get<PriceStatus>(PRICE_STATUS_KEY);\n if (previous) {\n if (typeof previous.lastAttemptAt === 'number' && Number.isFinite(previous.lastAttemptAt)) this.state.lastAttemptAt = previous.lastAttemptAt;\n if (['timeout', 'network', 'invalid_catalog', 'storage'].includes(previous.lastError as string)) this.state.lastError = previous.lastError;\n if (Number.isSafeInteger(previous.consecutiveFailures) && previous.consecutiveFailures >= 0) this.state.consecutiveFailures = previous.consecutiveFailures;\n }\n const cache = await this.storage.get<PriceCache>(PRICE_CACHE_KEY);\n if (cache?.version === 1 && Number.isFinite(cache.fetchedAt)) {\n try {\n const catalog = pricedCatalog(cache.catalog);\n this.state.lastSuccessAt = cache.fetchedAt;\n this.count(catalog);\n } catch { this.state.lastError = 'invalid_catalog'; }\n }\n if (this.stopped) return;\n this.schedule();\n await this.persist();\n }\n\n async configure(settings: PriceSettings): Promise<PriceStatus> {\n await this.start();\n if (this.stopped) throw new Error('disposed');\n const parsed = parsePriceSettings(settings);\n await this.storage.set(PRICE_SETTINGS_KEY, parsed);\n this.state.settings = parsed;\n this.schedule();\n await this.persist();\n return this.status();\n }\n\n refresh(): Promise<void> {\n if (this.stopped) return Promise.resolve();\n if (this.inFlight) return this.inFlight;\n this.clearTimer();\n this.state.nextRefreshAt = null;\n this.state.refreshing = true;\n this.state.lastAttemptAt = this.now();\n const task = this.load().finally(() => {\n if (this.inFlight === task) this.inFlight = undefined;\n });\n this.inFlight = task;\n return task;\n }\n\n stop(): void {\n this.stopped = true;\n this.clearTimer();\n this.controller?.abort();\n }\n\n private count(catalog: ModelCatalog): void {\n this.state.providerCount = Object.keys(catalog).length;\n this.state.modelCount = Object.values(catalog).reduce((total, provider) => total + Object.keys(provider.models).length, 0);\n }\n\n private async load(): Promise<void> {\n const controller = new AbortController();\n this.controller = controller;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n let onAbort: (() => void) | undefined;\n let timedOut = false;\n let phase: 'network' | 'storage' | 'invalid_catalog' = 'storage';\n try {\n await this.persist();\n if (this.stopped) return;\n phase = 'network';\n const failure = new Promise<never>((_, reject) => {\n onAbort = () => reject(new Error('aborted'));\n controller.signal.addEventListener('abort', onAbort, { once: true });\n timeout = setTimeout(() => { timedOut = true; controller.abort(); }, this.state.settings.timeoutSeconds * 1000);\n });\n const fetched = await Promise.race([\n fetchModels({ ...(this.options.fetch ? { fetch: this.options.fetch } : {}), signal: controller.signal }), failure,\n ]);\n if (this.stopped) return;\n phase = 'invalid_catalog';\n const catalog = pricedCatalog(fetched);\n const fetchedAt = Math.max(this.now(), (this.state.lastSuccessAt ?? -1) + 1);\n phase = 'storage';\n await this.storage.set(PRICE_CACHE_KEY, { version: 1, fetchedAt, catalog } satisfies PriceCache);\n if (this.stopped) return;\n this.state.lastSuccessAt = fetchedAt;\n this.count(catalog);\n this.state.lastError = null;\n this.state.consecutiveFailures = 0;\n } catch {\n if (this.stopped) return;\n this.state.lastError = timedOut ? 'timeout' : phase;\n this.state.consecutiveFailures++;\n } finally {\n if (timeout !== undefined) clearTimeout(timeout);\n if (onAbort) controller.signal.removeEventListener('abort', onAbort);\n if (this.controller === controller) this.controller = undefined;\n this.state.refreshing = false;\n if (!this.stopped) {\n this.schedule();\n try { await this.persist(); } catch { this.state.lastError = 'storage'; }\n }\n }\n }\n\n private clearTimer(): void {\n if (this.timer !== undefined) (this.options.cancel ?? clearTimeout)(this.timer);\n this.timer = undefined;\n }\n\n private schedule(): void {\n this.clearTimer();\n this.state.nextRefreshAt = null;\n if (this.stopped || this.state.refreshing || !this.state.settings.autoRefresh) return;\n const interval = this.state.settings.intervalMinutes * 60_000;\n const due = this.state.consecutiveFailures\n ? this.now() + Math.min(interval, 60_000 * Math.min(15, 2 ** Math.min(this.state.consecutiveFailures - 1, 4)))\n : this.state.lastSuccessAt === null ? this.now() : Math.max(this.now(), this.state.lastSuccessAt + interval);\n this.state.nextRefreshAt = due;\n this.timer = (this.options.schedule ?? setTimeout)(() => { void this.refresh(); }, Math.max(0, due - this.now()));\n }\n\n private persist(): Promise<void> { return this.storage.set(PRICE_STATUS_KEY, this.status()); }\n}\n",
18
- "import type {\n ControlApiDeclaration,\n ControlApiHandlerContext,\n ControlHostContext,\n ControlPlugin,\n PluginControl,\n} from '../../../packages/core/src/plugin-control/contracts';\nimport {\n TokenStatsRepository,\n TokenStatsRepositoryError,\n TokenStatsRepositoryLimitError,\n type AggregateDto,\n type GroupByDimension,\n} from './repository';\nimport { PriceCatalogManager, parsePriceSettings, type PriceCatalogOptions } from './price-catalog';\n\nconst MAX_RESPONSE_BYTES = 256 * 1024;\nconst VALID_RANGES = ['1h', '12h', '24h'] as const;\nconst VALID_GROUP_BY = ['model', 'time'] as const;\n\ntype ControlErrorCode =\n | 'disposed'\n | 'request_cancelled'\n | 'invalid_input'\n | 'invalid_persisted_value'\n | 'response_limit'\n | 'internal_error';\n\nclass ControlError extends Error {\n constructor(readonly code: ControlErrorCode) {\n super(code);\n this.name = 'TokenStatsControlError';\n }\n}\n\nfunction jsonResponse(value: unknown, status = 200): Response {\n const body = JSON.stringify(value);\n if (new TextEncoder().encode(body).byteLength > MAX_RESPONSE_BYTES) {\n return new Response(JSON.stringify({ error: 'response_limit' }), {\n status: 500,\n headers: { 'content-type': 'application/json; charset=utf-8' },\n });\n }\n return new Response(body, {\n status,\n headers: { 'content-type': 'application/json; charset=utf-8' },\n });\n}\n\nfunction errorResponse(error: unknown): Response {\n const code = error instanceof ControlError\n ? error.code\n : error instanceof TokenStatsRepositoryLimitError\n ? 'response_limit'\n : error instanceof TokenStatsRepositoryError\n ? 'invalid_persisted_value'\n : 'internal_error';\n const status = code === 'request_cancelled' || code === 'invalid_input' ? 400 : code === 'disposed' ? 409 : 500;\n return jsonResponse({ error: code }, status);\n}\n\nasync function readSettings(request: Request): Promise<unknown> {\n const reader = request.body?.getReader();\n if (!reader) throw new ControlError('invalid_input');\n const chunks: Uint8Array[] = [];\n let size = 0;\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n size += value.byteLength;\n if (size > 4096) { await reader.cancel(); throw new ControlError('invalid_input'); }\n chunks.push(value);\n }\n const bytes = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) { bytes.set(chunk, offset); offset += chunk.byteLength; }\n return JSON.parse(new TextDecoder().decode(bytes));\n } finally { reader.releaseLock(); }\n}\n\nfunction abortable<T>(promise: Promise<T>, requestSignal: AbortSignal, hostSignal: AbortSignal): Promise<T> {\n if (hostSignal.aborted) return Promise.reject(new ControlError('disposed'));\n if (requestSignal.aborted) return Promise.reject(new ControlError('request_cancelled'));\n\n return new Promise<T>((resolve, reject) => {\n let settled = false;\n const cleanup = () => {\n requestSignal.removeEventListener('abort', onRequestAbort);\n hostSignal.removeEventListener('abort', onHostAbort);\n };\n const onRequestAbort = () => {\n if (!settled) {\n settled = true;\n cleanup();\n reject(new ControlError('request_cancelled'));\n }\n };\n const onHostAbort = () => {\n if (!settled) {\n settled = true;\n cleanup();\n reject(new ControlError('disposed'));\n }\n };\n\n requestSignal.addEventListener('abort', onRequestAbort, { once: true });\n hostSignal.addEventListener('abort', onHostAbort, { once: true });\n promise.then(\n (value) => {\n if (!settled) {\n settled = true;\n cleanup();\n resolve(value);\n }\n },\n (error) => {\n if (!settled) {\n settled = true;\n cleanup();\n reject(error);\n }\n },\n );\n });\n}\n\nclass TokenStatsControl implements PluginControl {\n readonly api: readonly ControlApiDeclaration[];\n readonly rpc = [] as const;\n private readonly repository: TokenStatsRepository;\n private readonly pricing: PriceCatalogManager;\n private disposed = false;\n private readonly abortListener: () => void;\n\n constructor(private readonly host: ControlHostContext, options?: PriceCatalogOptions) {\n this.repository = new TokenStatsRepository(host.storage);\n this.pricing = new PriceCatalogManager(host.storage, options);\n this.abortListener = () => { this.dispose(); };\n if (host.signal.aborted) this.disposed = true;\n else host.signal.addEventListener('abort', this.abortListener, { once: true });\n this.api = this.buildApi();\n }\n\n private assertAlive(signal?: AbortSignal): void {\n if (this.disposed || this.host.signal.aborted) throw new ControlError('disposed');\n if (signal?.aborted) throw new ControlError('request_cancelled');\n }\n\n private buildApi(): readonly ControlApiDeclaration[] {\n const invoke = (handler: (context: ControlApiHandlerContext) => Promise<Response> | Response) =>\n async (context: ControlApiHandlerContext): Promise<Response> => {\n try {\n this.assertAlive(context.requestSignal);\n return await handler(context);\n } catch (error) {\n return errorResponse(error);\n }\n };\n\n return [{\n path: '/stats',\n methods: ['GET'],\n handler: 'getStats',\n invoke: invoke(async (context) => {\n if (context.request.method !== 'GET') {\n return new Response(JSON.stringify({ error: 'method_not_allowed' }), {\n status: 405,\n headers: { allow: 'GET', 'content-type': 'application/json; charset=utf-8' },\n });\n }\n this.assertAlive(context.requestSignal);\n const url = new URL(context.request.url);\n const rawRange = url.searchParams.get('range');\n const rawGroupBy = url.searchParams.get('groupBy');\n if (url.searchParams.getAll('range').length > 1\n || url.searchParams.getAll('groupBy').length > 1\n || (rawRange !== null && !(VALID_RANGES as readonly string[]).includes(rawRange))\n || (rawGroupBy !== null && !(VALID_GROUP_BY as readonly string[]).includes(rawGroupBy))) {\n throw new ControlError('invalid_input');\n }\n const range = rawRange ?? '24h';\n const groupBy = (rawGroupBy ?? 'model') as GroupByDimension;\n const payload = await abortable(\n this.repository.query(range, groupBy),\n context.requestSignal,\n context.signal,\n );\n this.assertAlive(context.requestSignal);\n return jsonResponse(payload as AggregateDto);\n }),\n }, {\n path: '/pricing', methods: ['GET'], handler: 'getPricing',\n invoke: invoke(async () => {\n await this.pricing.start();\n return jsonResponse(this.pricing.status());\n }),\n }, {\n path: '/pricing/settings', methods: ['PUT'], handler: 'configurePricing',\n invoke: invoke(async (context) => {\n let settings;\n try {\n settings = parsePriceSettings(await readSettings(context.request));\n } catch { throw new ControlError('invalid_input'); }\n this.assertAlive(context.requestSignal);\n return jsonResponse(await this.pricing.configure(settings));\n }),\n }, {\n path: '/pricing/refresh', methods: ['POST'], handler: 'refreshPricing',\n invoke: invoke(async () => {\n await this.pricing.start();\n void this.pricing.refresh();\n return jsonResponse(this.pricing.status(), 202);\n }),\n }];\n }\n\n async start(): Promise<void> {\n this.assertAlive();\n await this.pricing.start();\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n this.pricing.stop();\n this.host.signal.removeEventListener('abort', this.abortListener);\n }\n}\n\nexport function createControl(context: ControlHostContext, options?: PriceCatalogOptions): PluginControl {\n return new TokenStatsControl(context, options);\n}\n\nexport default { createControl } satisfies ControlPlugin;\n"
19
+ "import type {\n ControlApiDeclaration,\n ControlApiHandlerContext,\n ControlHostContext,\n ControlPlugin,\n PluginControl,\n} from '../../../packages/core/src/plugin-control/contracts';\nimport {\n TokenStatsRepository,\n TokenStatsRepositoryError,\n TokenStatsRepositoryLimitError,\n type AggregateDto,\n type GroupByDimension,\n} from './repository';\nimport { PriceCatalogManager, parsePriceSettings, type PriceCatalogOptions } from './price-catalog';\nimport { TOKEN_STATS_RANGES } from '../../../packages/core/src/token-stats-window';\n\nconst MAX_RESPONSE_BYTES = 256 * 1024;\nconst MAX_PAGE_STATS_RESPONSE_BYTES = 4 * 1024 * 1024;\nconst VALID_GROUP_BY = ['model', 'time'] as const;\n\ntype ControlErrorCode =\n | 'disposed'\n | 'request_cancelled'\n | 'invalid_input'\n | 'invalid_persisted_value'\n | 'response_limit'\n | 'internal_error';\n\nclass ControlError extends Error {\n constructor(readonly code: ControlErrorCode) {\n super(code);\n this.name = 'TokenStatsControlError';\n }\n}\n\nfunction jsonResponse(value: unknown, status = 200, maxBytes = MAX_RESPONSE_BYTES): Response {\n const body = JSON.stringify(value);\n if (new TextEncoder().encode(body).byteLength > maxBytes) {\n return new Response(JSON.stringify({ error: 'response_limit' }), {\n status: 500,\n headers: { 'content-type': 'application/json; charset=utf-8' },\n });\n }\n return new Response(body, {\n status,\n headers: { 'content-type': 'application/json; charset=utf-8' },\n });\n}\n\nfunction errorResponse(error: unknown): Response {\n const code = error instanceof ControlError\n ? error.code\n : error instanceof TokenStatsRepositoryLimitError\n ? 'response_limit'\n : error instanceof TokenStatsRepositoryError\n ? 'invalid_persisted_value'\n : 'internal_error';\n const status = code === 'request_cancelled' || code === 'invalid_input' ? 400 : code === 'disposed' ? 409 : 500;\n return jsonResponse({ error: code }, status);\n}\n\nasync function readSettings(request: Request): Promise<unknown> {\n const reader = request.body?.getReader();\n if (!reader) throw new ControlError('invalid_input');\n const chunks: Uint8Array[] = [];\n let size = 0;\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n size += value.byteLength;\n if (size > 4096) { await reader.cancel(); throw new ControlError('invalid_input'); }\n chunks.push(value);\n }\n const bytes = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) { bytes.set(chunk, offset); offset += chunk.byteLength; }\n return JSON.parse(new TextDecoder().decode(bytes));\n } finally { reader.releaseLock(); }\n}\n\nfunction abortable<T>(promise: Promise<T>, requestSignal: AbortSignal, hostSignal: AbortSignal): Promise<T> {\n if (hostSignal.aborted) return Promise.reject(new ControlError('disposed'));\n if (requestSignal.aborted) return Promise.reject(new ControlError('request_cancelled'));\n\n return new Promise<T>((resolve, reject) => {\n let settled = false;\n const cleanup = () => {\n requestSignal.removeEventListener('abort', onRequestAbort);\n hostSignal.removeEventListener('abort', onHostAbort);\n };\n const onRequestAbort = () => {\n if (!settled) {\n settled = true;\n cleanup();\n reject(new ControlError('request_cancelled'));\n }\n };\n const onHostAbort = () => {\n if (!settled) {\n settled = true;\n cleanup();\n reject(new ControlError('disposed'));\n }\n };\n\n requestSignal.addEventListener('abort', onRequestAbort, { once: true });\n hostSignal.addEventListener('abort', onHostAbort, { once: true });\n promise.then(\n (value) => {\n if (!settled) {\n settled = true;\n cleanup();\n resolve(value);\n }\n },\n (error) => {\n if (!settled) {\n settled = true;\n cleanup();\n reject(error);\n }\n },\n );\n });\n}\n\nclass TokenStatsControl implements PluginControl {\n readonly api: readonly ControlApiDeclaration[];\n readonly rpc = [] as const;\n private readonly repository: TokenStatsRepository;\n private readonly pricing: PriceCatalogManager;\n private disposed = false;\n private readonly abortListener: () => void;\n\n constructor(private readonly host: ControlHostContext, options?: PriceCatalogOptions) {\n this.repository = new TokenStatsRepository(host.storage);\n this.pricing = new PriceCatalogManager(host.storage, options);\n this.abortListener = () => { this.dispose(); };\n if (host.signal.aborted) this.disposed = true;\n else host.signal.addEventListener('abort', this.abortListener, { once: true });\n this.api = this.buildApi();\n }\n\n private assertAlive(signal?: AbortSignal): void {\n if (this.disposed || this.host.signal.aborted) throw new ControlError('disposed');\n if (signal?.aborted) throw new ControlError('request_cancelled');\n }\n\n private buildApi(): readonly ControlApiDeclaration[] {\n const invoke = (handler: (context: ControlApiHandlerContext) => Promise<Response> | Response) =>\n async (context: ControlApiHandlerContext): Promise<Response> => {\n try {\n this.assertAlive(context.requestSignal);\n return await handler(context);\n } catch (error) {\n return errorResponse(error);\n }\n };\n\n return [{\n path: '/stats',\n methods: ['GET'],\n handler: 'getStats',\n invoke: invoke(async (context) => {\n if (context.request.method !== 'GET') {\n return new Response(JSON.stringify({ error: 'method_not_allowed' }), {\n status: 405,\n headers: { allow: 'GET', 'content-type': 'application/json; charset=utf-8' },\n });\n }\n this.assertAlive(context.requestSignal);\n const url = new URL(context.request.url);\n const rawRange = url.searchParams.get('range');\n const rawGroupBy = url.searchParams.get('groupBy');\n const timeZone = url.searchParams.get('timeZone') ?? undefined;\n if (url.searchParams.getAll('range').length > 1\n || url.searchParams.getAll('groupBy').length > 1\n || url.searchParams.getAll('timeZone').length > 1\n || (rawRange !== null && !(TOKEN_STATS_RANGES as readonly string[]).includes(rawRange))\n || (rawGroupBy !== null && !(VALID_GROUP_BY as readonly string[]).includes(rawGroupBy))) {\n throw new ControlError('invalid_input');\n }\n if (timeZone !== undefined) {\n try {\n if (!timeZone || timeZone.length > 100) throw new Error('invalid time zone');\n new Intl.DateTimeFormat('en-US', { timeZone });\n } catch { throw new ControlError('invalid_input'); }\n }\n const range = rawRange ?? '24h';\n const groupBy = (rawGroupBy ?? 'model') as GroupByDimension;\n const payload = await abortable(\n this.repository.query(range, groupBy, Date.now(), timeZone),\n context.requestSignal,\n context.signal,\n );\n this.assertAlive(context.requestSignal);\n // Monthly per-model rows can exceed the dashboard's response budget.\n const maxBytes = ['1h', '12h', '24h'].includes(range) ? MAX_RESPONSE_BYTES : MAX_PAGE_STATS_RESPONSE_BYTES;\n return jsonResponse(payload as AggregateDto, 200, maxBytes);\n }),\n }, {\n path: '/pricing', methods: ['GET'], handler: 'getPricing',\n invoke: invoke(async () => {\n await this.pricing.start();\n return jsonResponse(this.pricing.status());\n }),\n }, {\n path: '/pricing/settings', methods: ['PUT'], handler: 'configurePricing',\n invoke: invoke(async (context) => {\n let settings;\n try {\n settings = parsePriceSettings(await readSettings(context.request));\n } catch { throw new ControlError('invalid_input'); }\n this.assertAlive(context.requestSignal);\n return jsonResponse(await this.pricing.configure(settings));\n }),\n }, {\n path: '/pricing/refresh', methods: ['POST'], handler: 'refreshPricing',\n invoke: invoke(async () => {\n await this.pricing.start();\n void this.pricing.refresh();\n return jsonResponse(this.pricing.status(), 202);\n }),\n }];\n }\n\n async start(): Promise<void> {\n this.assertAlive();\n await this.pricing.start();\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n this.pricing.stop();\n this.host.signal.removeEventListener('abort', this.abortListener);\n }\n}\n\nexport function createControl(context: ControlHostContext, options?: PriceCatalogOptions): PluginControl {\n return new TokenStatsControl(context, options);\n}\n\nexport default { createControl } satisfies ControlPlugin;\n"
19
20
  ],
20
- "mappings": "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",
21
- "debugId": "C36CBFA86B22DB2D64756E2164756E21",
21
+ "mappings": "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",
22
+ "debugId": "CC440B77E27EEC3464756E2164756E21",
22
23
  "names": []
23
24
  }