@undefineds.co/xpod 0.2.26 → 0.2.28

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 +1 @@
1
- {"version":3,"file":"VercelChatService.js","sourceRoot":"","sources":["../../../src/api/service/VercelChatService.ts"],"names":[],"mappings":"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","sourcesContent":["import { createOpenAI } from '@ai-sdk/openai';\nimport { generateText, streamText } from 'ai';\nimport { getLoggerFor } from 'global-logger-factory';\nimport { ProxyAgent } from 'undici';\nimport type { ChatCompletionRequest, ChatCompletionResponse } from '../handlers/ChatHandler';\nimport type { PodChatKitStore } from '../chatkit/pod-store';\nimport type { StoreContext } from '../chatkit/store';\nimport { type AuthContext, getWebId, getAccountId, getDisplayName } from '../auth/AuthContext';\nimport { CredentialStatus } from '../../credential/schema/types';\nimport type { UsageRepository } from '../../storage/quota/UsageRepository';\nimport type { QuotaService } from '../../quota/QuotaService';\nimport {\n getDefaultBaseUrl,\n} from './provider-registry';\nimport {\n getAiGatewayApiKey,\n getAiGatewayBaseUrl,\n getPlatformApiBaseUrl,\n getPlatformApiKey,\n getPlatformDefaultModel,\n getPlatformTimeoutMs,\n} from './platform-ai-config';\nimport {\n buildChatCompletionsBodyFromMessages,\n extractPromptFromMessagesBody,\n extractPromptFromResponsesBody,\n mapChatCompletionToMessagesResponse,\n sanitizeAiGatewayResponsesBody,\n} from './chat-protocol-adapters';\nimport { AiGatewayTransport } from './ai-gateway-transport';\nimport { ProviderHttpTransport } from './provider-http-transport';\nimport {\n resolveChatExecutionRoute,\n resolveMessagesProviderRoute,\n resolveResponsesProviderRoute,\n} from './chat-routing';\n\n// Create a proxy-aware fetch function\nfunction createProxyFetch(proxyUrl: string): typeof fetch {\n const agent = new ProxyAgent(proxyUrl);\n return (url, init) => fetch(url, { ...init, dispatcher: agent } as any);\n}\n\ninterface ProviderConfig {\n baseURL: string;\n apiKey: string;\n proxy?: string;\n credentialId?: string;\n}\n\nexport class VercelChatService {\n private readonly logger = getLoggerFor(this);\n private usageRepo?: UsageRepository;\n private quotaService?: QuotaService;\n private readonly aiGatewayTransport: AiGatewayTransport;\n private readonly providerHttpTransport = new ProviderHttpTransport();\n\n public constructor(private readonly store: PodChatKitStore) {\n this.logger.info('Initializing VercelChatService with Pod-based config support');\n this.aiGatewayTransport = new AiGatewayTransport({\n getBaseUrl: () => this.getAiGatewayBaseUrl(),\n getApiKey: () => this.getAiGatewayApiKey(),\n getTimeoutMs: () => this.getAiGatewayTimeoutMs(),\n });\n }\n\n /**\n * Set optional usage tracking dependencies (injected after construction)\n */\n public setUsageTracking(usageRepo: UsageRepository, quotaService: QuotaService): void {\n this.usageRepo = usageRepo;\n this.quotaService = quotaService;\n }\n\n /**\n * Create a StoreContext from AuthContext for Pod operations\n */\n private createStoreContext(auth: AuthContext): StoreContext {\n return {\n userId: getWebId(auth) ?? getAccountId(auth) ?? 'anonymous',\n auth,\n };\n }\n\n private getAiGatewayBaseUrl(): string | null {\n return getAiGatewayBaseUrl() ?? null;\n }\n\n private getAiGatewayTimeoutMs(): number {\n return getPlatformTimeoutMs();\n }\n\n private getAiGatewayApiKey(): string | null {\n return getAiGatewayApiKey() ?? null;\n }\n\n private async shouldUseAiGateway(model?: string): Promise<boolean> {\n return this.aiGatewayTransport.shouldHandleModel(model);\n }\n\n private toModelId(model: any): string {\n return typeof model?.id === 'string' ? model.id : JSON.stringify(model);\n }\n\n private pushModelsWithDedup(models: any[], seenModelIds: Set<string>, items: any[]): void {\n for (const model of items) {\n const modelId = this.toModelId(model);\n if (seenModelIds.has(modelId)) {\n continue;\n }\n seenModelIds.add(modelId);\n models.push(model);\n }\n }\n\n private async forwardAiGatewayJson(path: string, body: unknown, _auth: AuthContext): Promise<any> {\n return this.aiGatewayTransport.sendJson(path, body);\n }\n\n private async forwardAiGatewayStream(path: string, body: unknown, _auth: AuthContext): Promise<{\n toTextStreamResponse: () => Response;\n }> {\n return this.aiGatewayTransport.sendStream(path, body);\n }\n\n private extractTotalTokens(usage: any): number {\n if (!usage || typeof usage !== 'object') {\n return 0;\n }\n\n if (typeof usage.total_tokens === 'number') {\n return usage.total_tokens;\n }\n if (typeof usage.totalTokens === 'number') {\n return usage.totalTokens;\n }\n if (typeof usage.input_tokens === 'number' || typeof usage.output_tokens === 'number') {\n return (usage.input_tokens ?? 0) + (usage.output_tokens ?? 0);\n }\n if (typeof usage.prompt_tokens === 'number' || typeof usage.completion_tokens === 'number') {\n return (usage.prompt_tokens ?? 0) + (usage.completion_tokens ?? 0);\n }\n\n return 0;\n }\n\n private recordForwardedUsage(accountId: string | undefined, podId: string, payload: any): void {\n const totalTokens = this.extractTotalTokens(payload?.usage);\n if (accountId && totalTokens > 0) {\n this.recordTokenUsage(accountId, podId, totalTokens);\n }\n }\n\n private async getProviderConfig(context: StoreContext): Promise<ProviderConfig | null> {\n let config: Awaited<ReturnType<PodChatKitStore['getAiConfig']>> | undefined;\n try {\n config = await this.store.getAiConfig(context);\n this.logger.info(`Pod config: ${JSON.stringify(config)}`);\n } catch (error) {\n this.logger.warn(`Failed to get Pod config, falling back to defaults: ${error}`);\n config = undefined;\n }\n\n // Priority: Pod config > Platform Provider\n if (config?.apiKey) {\n const baseURL = config.baseUrl || getDefaultBaseUrl();\n const proxy = config.proxyUrl;\n this.logger.info(`Provider config: baseURL=${baseURL}, proxy=${proxy || 'none'} (source=pod)`);\n return { baseURL, apiKey: config.apiKey, proxy, credentialId: config.credentialId };\n }\n\n // 平台 Provider\n const platformBase = getPlatformApiBaseUrl();\n if (platformBase) {\n this.logger.info(`Provider config: baseURL=${platformBase}, proxy=none (source=platform)`);\n return { baseURL: platformBase, apiKey: getPlatformApiKey(), proxy: undefined, credentialId: undefined };\n }\n\n this.logger.warn('No AI provider config found in Pod or DEFAULT_API_BASE');\n return null;\n }\n\n private async getProvider(context: StoreContext) {\n const providerConfig = await this.getProviderConfig(context);\n if (!providerConfig) {\n const err = new Error('No AI provider configured. Please configure Pod AI provider or set DEFAULT_API_BASE.');\n (err as any).code = 'model_not_configured';\n throw err;\n }\n\n const { baseURL, apiKey, proxy } = providerConfig;\n\n this.logger.debug(`Using AI Provider: ${baseURL} (key length: ${apiKey?.length || 0}, proxy: ${proxy || 'none'})`);\n\n const options: any = { baseURL, apiKey };\n if (proxy) {\n options.fetch = createProxyFetch(proxy);\n }\n\n return createOpenAI(options);\n }\n\n public async complete(request: ChatCompletionRequest, auth: AuthContext): Promise<ChatCompletionResponse> {\n const { model, messages, temperature, max_tokens } = request;\n const context = this.createStoreContext(auth);\n const accountId = getAccountId(auth);\n if (accountId) {\n await this.checkTokenQuota(accountId);\n }\n\n if (await resolveChatExecutionRoute({ model, shouldUseAiGateway: this.shouldUseAiGateway.bind(this) }) === 'ai-gateway') {\n this.logger.info(`Forwarding chat completion for model ${model} to ai-gateway`);\n const result = await this.forwardAiGatewayJson('/v1/chat/completions', request, auth) as ChatCompletionResponse;\n this.recordForwardedUsage(accountId, String(context.userId), result);\n return result;\n }\n\n const config = await this.getProviderConfig(context);\n if (!config) {\n const err = new Error('No AI provider configured. Please configure Pod AI provider or set DEFAULT_API_BASE.');\n (err as any).code = 'model_not_configured';\n throw err;\n }\n\n try {\n const provider = await this.getProvider(context);\n\n const coreMessages: any[] = messages.map((m) => ({\n role: m.role as any,\n content: m.content,\n }));\n\n const result = await generateText({\n model: provider.chat(model),\n messages: coreMessages,\n temperature,\n maxTokens: max_tokens,\n } as any);\n\n // Record successful API call\n if (config?.credentialId) {\n this.store.recordCredentialSuccess(context, config.credentialId).catch((err) => {\n this.logger.debug(`Failed to record credential success: ${err}`);\n });\n }\n\n // Record token usage\n const totalTokens = (result.usage as any)?.totalTokens ?? 0;\n if (accountId && totalTokens > 0) {\n this.recordTokenUsage(accountId, String(context.userId), totalTokens);\n }\n\n return {\n id: `chatcmpl-${Date.now()}`,\n object: 'chat.completion',\n created: Math.floor(Date.now() / 1000),\n model,\n choices: [\n {\n index: 0,\n message: {\n role: 'assistant',\n content: result.text,\n },\n finish_reason: this.mapFinishReason(result.finishReason),\n },\n ],\n usage: {\n prompt_tokens: (result.usage as any).promptTokens,\n completion_tokens: (result.usage as any).completionTokens,\n total_tokens: (result.usage as any).totalTokens,\n },\n };\n } catch (error) {\n this.logger.error(`AI completion failed: ${error}`);\n\n // Handle error and update credential status\n if (config?.credentialId) {\n await this.handleApiError(error, context, config.credentialId);\n }\n\n throw error;\n }\n }\n\n public async stream(request: ChatCompletionRequest, auth: AuthContext): Promise<any> {\n const { model, messages, temperature, max_tokens } = request;\n const context = this.createStoreContext(auth);\n\n if (await resolveChatExecutionRoute({ model, shouldUseAiGateway: this.shouldUseAiGateway.bind(this) }) === 'ai-gateway') {\n this.logger.info(`Forwarding chat stream for model ${model} to ai-gateway`);\n return this.forwardAiGatewayStream('/v1/chat/completions', request, auth);\n }\n\n const config = await this.getProviderConfig(context);\n\n if (!config) {\n const err = new Error('No AI provider configured. Please configure Pod AI provider or set DEFAULT_API_BASE.');\n (err as any).code = 'model_not_configured';\n throw err;\n }\n\n const provider = await this.getProvider(context);\n\n const coreMessages: any[] = messages.map((m) => ({\n role: m.role as any,\n content: m.content,\n }));\n\n return streamText({\n model: provider.chat(model),\n messages: coreMessages,\n temperature,\n maxTokens: max_tokens,\n } as any);\n }\n\n public async responses(body: any, auth: AuthContext): Promise<any> {\n const context = this.createStoreContext(auth);\n const displayName = getDisplayName(auth) || context.userId;\n const accountId = getAccountId(auth);\n\n if (await resolveChatExecutionRoute({ model: body?.model, shouldUseAiGateway: this.shouldUseAiGateway.bind(this) }) === 'ai-gateway') {\n this.logger.info(`Forwarding responses request for model ${body?.model} to ai-gateway for ${displayName} (acc: ${accountId})`);\n const sanitizedBody = sanitizeAiGatewayResponsesBody(body);\n const result = await this.forwardAiGatewayJson('/v1/responses', sanitizedBody, auth);\n this.recordForwardedUsage(accountId, String(context.userId), result);\n return result;\n }\n\n const providerConfig = await this.getProviderConfig(context);\n if (!providerConfig) {\n const err = new Error('No AI provider configured. Please configure Pod AI provider or set DEFAULT_API_BASE.');\n (err as any).code = 'model_not_configured';\n throw err;\n }\n\n const { baseURL } = providerConfig;\n\n // Only OpenAI natively supports /v1/responses; all others go through Chat Completions\n if (resolveResponsesProviderRoute(baseURL) === 'chat-fallback') {\n this.logger.info(`Provider ${baseURL} does not support Responses API, converting to Chat Completions for ${displayName} (acc: ${accountId})`);\n return this.responsesViaCompletions(body, context, providerConfig);\n }\n\n const { apiKey, proxy, credentialId } = providerConfig;\n\n // Remove trailing slash if present\n const cleanBaseUrl = baseURL.endsWith('/') ? baseURL.slice(0, -1) : baseURL;\n const url = `${cleanBaseUrl}/responses`;\n\n this.logger.info(`Proxying responses request to ${url} for ${displayName} (acc: ${accountId}), proxy: ${proxy || 'none'}`);\n\n try {\n const result = await this.providerHttpTransport.postJson({\n url,\n apiKey,\n proxy,\n body,\n });\n if (credentialId) {\n this.store.recordCredentialSuccess(context, credentialId).catch(() => {});\n }\n return result;\n } catch (error) {\n const status = (error as any)?.status;\n const headers = (error as any)?.headers;\n const bodyText = (error as any)?.body;\n if (typeof status === 'number') {\n this.logger.error(`Responses API failed: ${status} ${bodyText ?? ''}`);\n if (credentialId) {\n await this.handleApiError(\n { status, headers },\n context,\n credentialId,\n );\n }\n } else if (credentialId) {\n await this.handleApiError(error, context, credentialId);\n }\n throw error;\n }\n }\n\n public async messages(body: any, auth: AuthContext): Promise<any> {\n const context = this.createStoreContext(auth);\n const displayName = getDisplayName(auth) || context.userId;\n const accountId = getAccountId(auth);\n\n if (await resolveChatExecutionRoute({ model: body?.model, shouldUseAiGateway: this.shouldUseAiGateway.bind(this) }) === 'ai-gateway') {\n this.logger.info(`Forwarding messages request for model ${body?.model} to ai-gateway for ${displayName} (acc: ${accountId})`);\n const completionBody = buildChatCompletionsBodyFromMessages(body);\n const completion = await this.forwardAiGatewayJson('/v1/chat/completions', completionBody, auth);\n const result = mapChatCompletionToMessagesResponse(body, completion);\n this.recordForwardedUsage(accountId, String(context.userId), result);\n return result;\n }\n\n const providerConfig = await this.getProviderConfig(context);\n if (!providerConfig) {\n const err = new Error('No AI provider configured. Please configure Pod AI provider or set DEFAULT_API_BASE.');\n (err as any).code = 'model_not_configured';\n throw err;\n }\n\n const { baseURL } = providerConfig;\n\n // Only Anthropic natively supports /v1/messages; all others go through Chat Completions\n if (resolveMessagesProviderRoute(baseURL) === 'chat-fallback') {\n this.logger.info(`Provider ${baseURL} does not support Messages API, converting to Chat Completions for ${displayName} (acc: ${accountId})`);\n return this.messagesViaCompletions(body, context, providerConfig);\n }\n\n const { apiKey, proxy, credentialId } = providerConfig;\n\n // Remove trailing slash if present\n const cleanBaseUrl = baseURL.endsWith('/') ? baseURL.slice(0, -1) : baseURL;\n const url = `${cleanBaseUrl}/messages`;\n\n this.logger.info(`Proxying messages request to ${url} for ${displayName} (acc: ${accountId}), proxy: ${proxy || 'none'}`);\n\n try {\n const result = await this.providerHttpTransport.postJson({\n url,\n apiKey,\n proxy,\n body,\n headers: {\n 'x-api-key': apiKey,\n 'anthropic-version': '2023-06-01',\n },\n });\n if (credentialId) {\n this.store.recordCredentialSuccess(context, credentialId).catch(() => {});\n }\n return result;\n } catch (error) {\n const status = (error as any)?.status;\n const headers = (error as any)?.headers;\n const bodyText = (error as any)?.body;\n if (typeof status === 'number') {\n this.logger.error(`Messages API failed: ${status} ${bodyText ?? ''}`);\n if (credentialId) {\n await this.handleApiError(\n { status, headers },\n context,\n credentialId,\n );\n }\n } else if (credentialId) {\n await this.handleApiError(error, context, credentialId);\n }\n throw error;\n }\n }\n\n\n\n\n private async responsesViaCompletions(\n body: any,\n context: StoreContext,\n providerConfig: { baseURL: string; apiKey: string; proxy?: string; credentialId?: string },\n ): Promise<any> {\n const prompt = extractPromptFromResponsesBody(body);\n const model = body?.model || getPlatformDefaultModel();\n\n const provider = await this.getProvider(context);\n const result = await generateText({\n model: provider.chat(model),\n messages: [{ role: 'user' as const, content: prompt }],\n ...(body?.temperature != null ? { temperature: body.temperature } : {}),\n ...(body?.max_output_tokens != null ? { maxTokens: body.max_output_tokens } : {}),\n } as any);\n\n if (providerConfig.credentialId) {\n this.store.recordCredentialSuccess(context, providerConfig.credentialId).catch(() => {});\n }\n\n const outputText = result.text;\n const now = Math.floor(Date.now() / 1000);\n return {\n id: `resp_${Date.now()}`,\n object: 'response',\n created: now,\n status: 'completed',\n model,\n output: [{\n type: 'message',\n role: 'assistant',\n content: [{ type: 'output_text', text: outputText }],\n }],\n usage: {\n input_tokens: (result.usage as any)?.promptTokens ?? prompt.length,\n output_tokens: (result.usage as any)?.completionTokens ?? outputText.length,\n total_tokens: (result.usage as any)?.totalTokens ?? (prompt.length + outputText.length),\n },\n };\n }\n\n private async messagesViaCompletions(\n body: any,\n context: StoreContext,\n providerConfig: { baseURL: string; apiKey: string; proxy?: string; credentialId?: string },\n ): Promise<any> {\n const prompt = extractPromptFromMessagesBody(body);\n const model = body?.model || getPlatformDefaultModel();\n\n const coreMessages: any[] = [];\n if (body?.system) {\n const systemText = typeof body.system === 'string'\n ? body.system\n : Array.isArray(body.system)\n ? body.system.map((b: any) => b?.text ?? '').join('\\n')\n : '';\n if (systemText) {\n coreMessages.push({ role: 'system', content: systemText });\n }\n }\n if (Array.isArray(body?.messages)) {\n for (const msg of body.messages) {\n if (msg?.role && msg?.content != null) {\n const content = typeof msg.content === 'string'\n ? msg.content\n : Array.isArray(msg.content)\n ? msg.content.filter((p: any) => p?.type === 'text').map((p: any) => p.text).join('\\n')\n : String(msg.content);\n coreMessages.push({ role: msg.role, content });\n }\n }\n }\n if (coreMessages.length === 0) {\n coreMessages.push({ role: 'user', content: prompt });\n }\n\n const provider = await this.getProvider(context);\n const result = await generateText({\n model: provider.chat(model),\n messages: coreMessages,\n ...(body?.temperature != null ? { temperature: body.temperature } : {}),\n ...(body?.max_tokens != null ? { maxTokens: body.max_tokens } : {}),\n } as any);\n\n if (providerConfig.credentialId) {\n this.store.recordCredentialSuccess(context, providerConfig.credentialId).catch(() => {});\n }\n\n const text = result.text;\n return {\n id: `msg_${Date.now()}`,\n type: 'message',\n role: 'assistant',\n model,\n content: [{ type: 'text', text }],\n stop_reason: 'end_turn',\n stop_sequence: null,\n usage: {\n input_tokens: (result.usage as any)?.promptTokens ?? prompt.length,\n output_tokens: (result.usage as any)?.completionTokens ?? text.length,\n },\n };\n }\n\n public async listModels(_auth?: AuthContext): Promise<any[]> {\n const models: any[] = [];\n const seenModelIds = new Set<string>();\n\n if (_auth) {\n try {\n const context = this.createStoreContext(_auth);\n const userModels = await this.store.listAvailableModels(context);\n this.pushModelsWithDedup(models, seenModelIds, userModels);\n } catch (error) {\n this.logger.warn(`Failed to load user Pod models: ${error}`);\n }\n }\n\n const aiGatewayModels = await this.aiGatewayTransport.listModels();\n if (aiGatewayModels) {\n this.pushModelsWithDedup(models, seenModelIds, aiGatewayModels);\n }\n\n // 平台 Provider 模型(从 DEFAULT_API_BASE 获取)\n const platformBase = getPlatformApiBaseUrl();\n const platformKey = getPlatformApiKey();\n const aiGatewayBase = this.getAiGatewayBaseUrl();\n const normalizedAiGatewayModelsUrl = aiGatewayBase\n ? this.aiGatewayTransport.buildUrl('/v1/models')\n : undefined;\n const normalizedPlatformModelsUrl = platformBase\n ? `${platformBase.replace(/\\/$/, '')}/models`\n : undefined;\n if (platformBase && normalizedPlatformModelsUrl !== normalizedAiGatewayModelsUrl) {\n try {\n const url = normalizedPlatformModelsUrl!;\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (platformKey) {\n headers['Authorization'] = `Bearer ${platformKey}`;\n }\n const resp = await fetch(url, { headers });\n if (resp.ok) {\n const data = await resp.json() as { data?: any[] };\n if (Array.isArray(data.data)) {\n this.pushModelsWithDedup(models, seenModelIds, data.data);\n }\n } else {\n this.logger.warn(`Failed to fetch platform models: ${resp.status}`);\n }\n } catch (error) {\n this.logger.warn(`Failed to fetch platform models: ${error}`);\n }\n }\n\n return models;\n }\n\n private mapFinishReason(reason: string): 'stop' | 'length' | 'content_filter' {\n return reason as any;\n }\n\n /**\n * Handle API errors and update credential status accordingly\n */\n private async handleApiError(\n error: unknown,\n context: StoreContext,\n credentialId: string,\n ): Promise<void> {\n const errorInfo = this.parseApiError(error);\n\n if (errorInfo.statusCode === 429) {\n // Rate limit error - mark credential as rate limited\n const resetAt = errorInfo.retryAfter\n ? new Date(Date.now() + errorInfo.retryAfter * 1000)\n : new Date(Date.now() + 60000); // Default 1 minute cooldown\n\n this.logger.warn(`Rate limit hit for credential ${credentialId}, reset at: ${resetAt.toISOString()}`);\n\n await this.store.updateCredentialStatus(\n context,\n credentialId,\n CredentialStatus.RATE_LIMITED,\n { rateLimitResetAt: resetAt },\n );\n } else if (errorInfo.statusCode === 401 || errorInfo.statusCode === 403) {\n // Auth error - mark credential as inactive\n this.logger.warn(`Auth error for credential ${credentialId}, marking as inactive`);\n\n await this.store.updateCredentialStatus(\n context,\n credentialId,\n CredentialStatus.INACTIVE,\n { incrementFailCount: true },\n );\n } else if (errorInfo.statusCode >= 500) {\n // Server error - increment fail count but keep active\n this.logger.warn(`Server error ${errorInfo.statusCode} for credential ${credentialId}`);\n\n await this.store.updateCredentialStatus(\n context,\n credentialId,\n CredentialStatus.ACTIVE,\n { incrementFailCount: true },\n );\n }\n }\n\n /**\n * Parse error to extract status code and retry-after header\n */\n private parseApiError(error: unknown): { statusCode: number; retryAfter?: number } {\n // Handle different error formats from AI SDK\n if (error && typeof error === 'object') {\n const err = error as any;\n\n // Direct status code\n if (typeof err.status === 'number') {\n return {\n statusCode: err.status,\n retryAfter: err.retryAfter || err.headers?.['retry-after'],\n };\n }\n\n // Nested response object\n if (err.response && typeof err.response.status === 'number') {\n return {\n statusCode: err.response.status,\n retryAfter: err.response.headers?.get?.('retry-after'),\n };\n }\n\n // Error message parsing (fallback)\n if (err.message) {\n const match = err.message.match(/(\\d{3})/);\n if (match) {\n return { statusCode: parseInt(match[1], 10) };\n }\n }\n }\n\n return { statusCode: 0 };\n }\n\n /**\n * Check if account has remaining token quota\n */\n private async checkTokenQuota(accountId: string): Promise<void> {\n if (!this.quotaService || !this.usageRepo) {\n return; // No quota enforcement if not configured\n }\n\n try {\n const quota = await this.quotaService.getAccountQuota(accountId);\n if (!quota.tokenLimitMonthly) {\n return; // No limit set\n }\n\n const usage = await this.usageRepo.getAccountUsage(accountId);\n const tokensUsed = usage?.tokensUsed ?? 0;\n\n if (tokensUsed >= quota.tokenLimitMonthly) {\n const err = new Error('Token quota exceeded for this month');\n (err as any).code = 'quota_exceeded';\n throw err;\n }\n } catch (error) {\n if ((error as any).code === 'quota_exceeded') {\n throw error;\n }\n // Log but don't block on quota check errors\n this.logger.warn(`Token quota check failed: ${error}`);\n }\n }\n\n /**\n * Record token usage (fire-and-forget)\n */\n private recordTokenUsage(accountId: string, podId: string, tokens: number): void {\n if (!this.usageRepo) {\n return;\n }\n\n this.usageRepo.incrementTokenUsage(accountId, podId, tokens).catch((err) => {\n this.logger.warn(`Failed to record token usage: ${err}`);\n });\n }\n}\n"]}
1
+ {"version":3,"file":"VercelChatService.js","sourceRoot":"","sources":["../../../src/api/service/VercelChatService.ts"],"names":[],"mappings":"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","sourcesContent":["import { createOpenAI } from '@ai-sdk/openai';\nimport { generateText, streamText } from 'ai';\nimport { getLoggerFor } from 'global-logger-factory';\nimport { ProxyAgent } from 'undici';\nimport type { ChatCompletionRequest, ChatCompletionResponse } from '../handlers/ChatHandler';\nimport type { PodChatKitStore } from '../chatkit/pod-store';\nimport type { StoreContext } from '../chatkit/store';\nimport { type AuthContext, getWebId, getAccountId, getDisplayName } from '../auth/AuthContext';\nimport { CredentialStatus } from '../../credential/schema/types';\nimport type { UsageRepository } from '../../storage/quota/UsageRepository';\nimport type { QuotaService } from '../../quota/QuotaService';\nimport {\n getDefaultBaseUrl,\n} from './provider-registry';\nimport {\n getAiGatewayApiKey,\n getAiGatewayBaseUrl,\n getPlatformApiBaseUrl,\n getPlatformApiKey,\n getPlatformDefaultModel,\n getPlatformTimeoutMs,\n} from './platform-ai-config';\nimport {\n buildChatCompletionsBodyFromMessages,\n extractPromptFromMessagesBody,\n extractPromptFromResponsesBody,\n mapChatCompletionToMessagesResponse,\n sanitizeAiGatewayResponsesBody,\n} from './chat-protocol-adapters';\nimport { AiGatewayTransport } from './ai-gateway-transport';\nimport { ProviderHttpTransport } from './provider-http-transport';\nimport {\n resolveChatExecutionRoute,\n resolveMessagesProviderRoute,\n resolveResponsesProviderRoute,\n} from './chat-routing';\n\n// Create a proxy-aware fetch function\nfunction createProxyFetch(proxyUrl: string): typeof fetch {\n const agent = new ProxyAgent(proxyUrl);\n return (url, init) => fetch(url, { ...init, dispatcher: agent } as any);\n}\n\ninterface ProviderConfig {\n baseURL: string;\n apiKey: string;\n proxy?: string;\n credentialId?: string;\n}\n\nexport class VercelChatService {\n private readonly logger = getLoggerFor(this);\n private usageRepo?: UsageRepository;\n private quotaService?: QuotaService;\n private readonly aiGatewayTransport: AiGatewayTransport;\n private readonly providerHttpTransport = new ProviderHttpTransport();\n\n public constructor(private readonly store: PodChatKitStore) {\n this.logger.info('Initializing VercelChatService with Pod-based config support');\n this.aiGatewayTransport = new AiGatewayTransport({\n getBaseUrl: () => this.getAiGatewayBaseUrl(),\n getApiKey: () => this.getAiGatewayApiKey(),\n getTimeoutMs: () => this.getAiGatewayTimeoutMs(),\n });\n }\n\n /**\n * Set optional usage tracking dependencies (injected after construction)\n */\n public setUsageTracking(usageRepo: UsageRepository, quotaService: QuotaService): void {\n this.usageRepo = usageRepo;\n this.quotaService = quotaService;\n }\n\n /**\n * Create a StoreContext from AuthContext for Pod operations\n */\n private createStoreContext(auth: AuthContext): StoreContext {\n return {\n userId: getWebId(auth) ?? getAccountId(auth) ?? 'anonymous',\n auth,\n };\n }\n\n private getAiGatewayBaseUrl(): string | null {\n return getAiGatewayBaseUrl() ?? null;\n }\n\n private getAiGatewayTimeoutMs(): number {\n return getPlatformTimeoutMs();\n }\n\n private getAiGatewayApiKey(): string | null {\n return getAiGatewayApiKey() ?? null;\n }\n\n private async shouldUseAiGateway(model?: string): Promise<boolean> {\n return this.aiGatewayTransport.shouldHandleModel(model);\n }\n\n private toModelId(model: any): string {\n return typeof model?.id === 'string' ? model.id : JSON.stringify(model);\n }\n\n private pushModelsWithDedup(models: any[], seenModelIds: Set<string>, items: any[]): void {\n for (const model of items) {\n const modelId = this.toModelId(model);\n if (seenModelIds.has(modelId)) {\n continue;\n }\n seenModelIds.add(modelId);\n models.push(model);\n }\n }\n\n private async forwardAiGatewayJson(path: string, body: unknown, _auth: AuthContext): Promise<any> {\n return this.aiGatewayTransport.sendJson(path, body);\n }\n\n private async forwardAiGatewayStream(path: string, body: unknown, _auth: AuthContext): Promise<{\n toTextStreamResponse: () => Response;\n }> {\n return this.aiGatewayTransport.sendStream(path, body);\n }\n\n private getProviderChatCompletionsUrl(baseURL: string): string {\n const cleanBaseUrl = baseURL.endsWith('/') ? baseURL.slice(0, -1) : baseURL;\n return cleanBaseUrl.endsWith('/chat/completions')\n ? cleanBaseUrl\n : `${cleanBaseUrl}/chat/completions`;\n }\n\n private extractTotalTokens(usage: any): number {\n if (!usage || typeof usage !== 'object') {\n return 0;\n }\n\n if (typeof usage.total_tokens === 'number') {\n return usage.total_tokens;\n }\n if (typeof usage.totalTokens === 'number') {\n return usage.totalTokens;\n }\n if (typeof usage.input_tokens === 'number' || typeof usage.output_tokens === 'number') {\n return (usage.input_tokens ?? 0) + (usage.output_tokens ?? 0);\n }\n if (typeof usage.prompt_tokens === 'number' || typeof usage.completion_tokens === 'number') {\n return (usage.prompt_tokens ?? 0) + (usage.completion_tokens ?? 0);\n }\n\n return 0;\n }\n\n private recordForwardedUsage(accountId: string | undefined, podId: string, payload: any): void {\n const totalTokens = this.extractTotalTokens(payload?.usage);\n if (accountId && totalTokens > 0) {\n this.recordTokenUsage(accountId, podId, totalTokens);\n }\n }\n\n private async getProviderConfig(context: StoreContext): Promise<ProviderConfig | null> {\n let config: Awaited<ReturnType<PodChatKitStore['getAiConfig']>> | undefined;\n try {\n config = await this.store.getAiConfig(context);\n this.logger.info(`Pod config: ${JSON.stringify(config)}`);\n } catch (error) {\n this.logger.warn(`Failed to get Pod config, falling back to defaults: ${error}`);\n config = undefined;\n }\n\n // Priority: Pod config > Platform Provider\n if (config?.apiKey) {\n const baseURL = config.baseUrl || getDefaultBaseUrl();\n const proxy = config.proxyUrl;\n this.logger.info(`Provider config: baseURL=${baseURL}, proxy=${proxy || 'none'} (source=pod)`);\n return { baseURL, apiKey: config.apiKey, proxy, credentialId: config.credentialId };\n }\n\n // 平台 Provider\n const platformBase = getPlatformApiBaseUrl();\n if (platformBase) {\n this.logger.info(`Provider config: baseURL=${platformBase}, proxy=none (source=platform)`);\n return { baseURL: platformBase, apiKey: getPlatformApiKey(), proxy: undefined, credentialId: undefined };\n }\n\n this.logger.warn('No AI provider config found in Pod or DEFAULT_API_BASE');\n return null;\n }\n\n private async getProvider(context: StoreContext) {\n const providerConfig = await this.getProviderConfig(context);\n if (!providerConfig) {\n const err = new Error('No AI provider configured. Please configure Pod AI provider or set DEFAULT_API_BASE.');\n (err as any).code = 'model_not_configured';\n throw err;\n }\n\n const { baseURL, apiKey, proxy } = providerConfig;\n\n this.logger.debug(`Using AI Provider: ${baseURL} (key length: ${apiKey?.length || 0}, proxy: ${proxy || 'none'})`);\n\n const options: any = { baseURL, apiKey };\n if (proxy) {\n options.fetch = createProxyFetch(proxy);\n }\n\n return createOpenAI(options);\n }\n\n public async complete(request: ChatCompletionRequest, auth: AuthContext): Promise<ChatCompletionResponse> {\n const { model } = request;\n const context = this.createStoreContext(auth);\n const accountId = getAccountId(auth);\n if (accountId) {\n await this.checkTokenQuota(accountId);\n }\n\n if (await resolveChatExecutionRoute({ model, shouldUseAiGateway: this.shouldUseAiGateway.bind(this) }) === 'ai-gateway') {\n this.logger.info(`Forwarding chat completion for model ${model} to ai-gateway`);\n const result = await this.forwardAiGatewayJson('/v1/chat/completions', request, auth) as ChatCompletionResponse;\n this.recordForwardedUsage(accountId, String(context.userId), result);\n return result;\n }\n\n const config = await this.getProviderConfig(context);\n if (!config) {\n const err = new Error('No AI provider configured. Please configure Pod AI provider or set DEFAULT_API_BASE.');\n (err as any).code = 'model_not_configured';\n throw err;\n }\n\n try {\n const result = await this.providerHttpTransport.postJson({\n url: this.getProviderChatCompletionsUrl(config.baseURL),\n apiKey: config.apiKey,\n proxy: config.proxy,\n body: request,\n }) as ChatCompletionResponse;\n\n // Record successful API call\n if (config?.credentialId) {\n this.store.recordCredentialSuccess(context, config.credentialId).catch((err) => {\n this.logger.debug(`Failed to record credential success: ${err}`);\n });\n }\n\n // Record token usage\n const totalTokens = this.extractTotalTokens(result.usage);\n if (accountId && totalTokens > 0) {\n this.recordTokenUsage(accountId, String(context.userId), totalTokens);\n }\n\n return result;\n } catch (error) {\n this.logger.error(`AI completion failed: ${error}`);\n\n // Handle error and update credential status\n if (config?.credentialId) {\n await this.handleApiError(error, context, config.credentialId);\n }\n\n throw error;\n }\n }\n\n public async stream(request: ChatCompletionRequest, auth: AuthContext): Promise<any> {\n const { model } = request;\n const context = this.createStoreContext(auth);\n\n if (await resolveChatExecutionRoute({ model, shouldUseAiGateway: this.shouldUseAiGateway.bind(this) }) === 'ai-gateway') {\n this.logger.info(`Forwarding chat stream for model ${model} to ai-gateway`);\n return this.forwardAiGatewayStream('/v1/chat/completions', request, auth);\n }\n\n const config = await this.getProviderConfig(context);\n\n if (!config) {\n const err = new Error('No AI provider configured. Please configure Pod AI provider or set DEFAULT_API_BASE.');\n (err as any).code = 'model_not_configured';\n throw err;\n }\n\n const response = await this.providerHttpTransport.postStream({\n url: this.getProviderChatCompletionsUrl(config.baseURL),\n apiKey: config.apiKey,\n proxy: config.proxy,\n body: request,\n headers: {\n Accept: 'text/event-stream',\n },\n });\n\n return {\n toTextStreamResponse: () => new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers: new Headers(response.headers),\n }),\n };\n }\n\n public async responses(body: any, auth: AuthContext): Promise<any> {\n const context = this.createStoreContext(auth);\n const displayName = getDisplayName(auth) || context.userId;\n const accountId = getAccountId(auth);\n\n if (await resolveChatExecutionRoute({ model: body?.model, shouldUseAiGateway: this.shouldUseAiGateway.bind(this) }) === 'ai-gateway') {\n this.logger.info(`Forwarding responses request for model ${body?.model} to ai-gateway for ${displayName} (acc: ${accountId})`);\n const sanitizedBody = sanitizeAiGatewayResponsesBody(body);\n const result = await this.forwardAiGatewayJson('/v1/responses', sanitizedBody, auth);\n this.recordForwardedUsage(accountId, String(context.userId), result);\n return result;\n }\n\n const providerConfig = await this.getProviderConfig(context);\n if (!providerConfig) {\n const err = new Error('No AI provider configured. Please configure Pod AI provider or set DEFAULT_API_BASE.');\n (err as any).code = 'model_not_configured';\n throw err;\n }\n\n const { baseURL } = providerConfig;\n\n // Only OpenAI natively supports /v1/responses; all others go through Chat Completions\n if (resolveResponsesProviderRoute(baseURL) === 'chat-fallback') {\n this.logger.info(`Provider ${baseURL} does not support Responses API, converting to Chat Completions for ${displayName} (acc: ${accountId})`);\n return this.responsesViaCompletions(body, context, providerConfig);\n }\n\n const { apiKey, proxy, credentialId } = providerConfig;\n\n // Remove trailing slash if present\n const cleanBaseUrl = baseURL.endsWith('/') ? baseURL.slice(0, -1) : baseURL;\n const url = `${cleanBaseUrl}/responses`;\n\n this.logger.info(`Proxying responses request to ${url} for ${displayName} (acc: ${accountId}), proxy: ${proxy || 'none'}`);\n\n try {\n const result = await this.providerHttpTransport.postJson({\n url,\n apiKey,\n proxy,\n body,\n });\n if (credentialId) {\n this.store.recordCredentialSuccess(context, credentialId).catch(() => {});\n }\n return result;\n } catch (error) {\n const status = (error as any)?.status;\n const headers = (error as any)?.headers;\n const bodyText = (error as any)?.body;\n if (typeof status === 'number') {\n this.logger.error(`Responses API failed: ${status} ${bodyText ?? ''}`);\n if (credentialId) {\n await this.handleApiError(\n { status, headers },\n context,\n credentialId,\n );\n }\n } else if (credentialId) {\n await this.handleApiError(error, context, credentialId);\n }\n throw error;\n }\n }\n\n public async messages(body: any, auth: AuthContext): Promise<any> {\n const context = this.createStoreContext(auth);\n const displayName = getDisplayName(auth) || context.userId;\n const accountId = getAccountId(auth);\n\n if (await resolveChatExecutionRoute({ model: body?.model, shouldUseAiGateway: this.shouldUseAiGateway.bind(this) }) === 'ai-gateway') {\n this.logger.info(`Forwarding messages request for model ${body?.model} to ai-gateway for ${displayName} (acc: ${accountId})`);\n const completionBody = buildChatCompletionsBodyFromMessages(body);\n const completion = await this.forwardAiGatewayJson('/v1/chat/completions', completionBody, auth);\n const result = mapChatCompletionToMessagesResponse(body, completion);\n this.recordForwardedUsage(accountId, String(context.userId), result);\n return result;\n }\n\n const providerConfig = await this.getProviderConfig(context);\n if (!providerConfig) {\n const err = new Error('No AI provider configured. Please configure Pod AI provider or set DEFAULT_API_BASE.');\n (err as any).code = 'model_not_configured';\n throw err;\n }\n\n const { baseURL } = providerConfig;\n\n // Only Anthropic natively supports /v1/messages; all others go through Chat Completions\n if (resolveMessagesProviderRoute(baseURL) === 'chat-fallback') {\n this.logger.info(`Provider ${baseURL} does not support Messages API, converting to Chat Completions for ${displayName} (acc: ${accountId})`);\n return this.messagesViaCompletions(body, context, providerConfig);\n }\n\n const { apiKey, proxy, credentialId } = providerConfig;\n\n // Remove trailing slash if present\n const cleanBaseUrl = baseURL.endsWith('/') ? baseURL.slice(0, -1) : baseURL;\n const url = `${cleanBaseUrl}/messages`;\n\n this.logger.info(`Proxying messages request to ${url} for ${displayName} (acc: ${accountId}), proxy: ${proxy || 'none'}`);\n\n try {\n const result = await this.providerHttpTransport.postJson({\n url,\n apiKey,\n proxy,\n body,\n headers: {\n 'x-api-key': apiKey,\n 'anthropic-version': '2023-06-01',\n },\n });\n if (credentialId) {\n this.store.recordCredentialSuccess(context, credentialId).catch(() => {});\n }\n return result;\n } catch (error) {\n const status = (error as any)?.status;\n const headers = (error as any)?.headers;\n const bodyText = (error as any)?.body;\n if (typeof status === 'number') {\n this.logger.error(`Messages API failed: ${status} ${bodyText ?? ''}`);\n if (credentialId) {\n await this.handleApiError(\n { status, headers },\n context,\n credentialId,\n );\n }\n } else if (credentialId) {\n await this.handleApiError(error, context, credentialId);\n }\n throw error;\n }\n }\n\n\n\n\n private async responsesViaCompletions(\n body: any,\n context: StoreContext,\n providerConfig: { baseURL: string; apiKey: string; proxy?: string; credentialId?: string },\n ): Promise<any> {\n const prompt = extractPromptFromResponsesBody(body);\n const model = body?.model || getPlatformDefaultModel();\n\n const provider = await this.getProvider(context);\n const result = await generateText({\n model: provider.chat(model),\n messages: [{ role: 'user' as const, content: prompt }],\n ...(body?.temperature != null ? { temperature: body.temperature } : {}),\n ...(body?.max_output_tokens != null ? { maxTokens: body.max_output_tokens } : {}),\n } as any);\n\n if (providerConfig.credentialId) {\n this.store.recordCredentialSuccess(context, providerConfig.credentialId).catch(() => {});\n }\n\n const outputText = result.text;\n const now = Math.floor(Date.now() / 1000);\n return {\n id: `resp_${Date.now()}`,\n object: 'response',\n created: now,\n status: 'completed',\n model,\n output: [{\n type: 'message',\n role: 'assistant',\n content: [{ type: 'output_text', text: outputText }],\n }],\n usage: {\n input_tokens: (result.usage as any)?.promptTokens ?? prompt.length,\n output_tokens: (result.usage as any)?.completionTokens ?? outputText.length,\n total_tokens: (result.usage as any)?.totalTokens ?? (prompt.length + outputText.length),\n },\n };\n }\n\n private async messagesViaCompletions(\n body: any,\n context: StoreContext,\n providerConfig: { baseURL: string; apiKey: string; proxy?: string; credentialId?: string },\n ): Promise<any> {\n const prompt = extractPromptFromMessagesBody(body);\n const model = body?.model || getPlatformDefaultModel();\n\n const coreMessages: any[] = [];\n if (body?.system) {\n const systemText = typeof body.system === 'string'\n ? body.system\n : Array.isArray(body.system)\n ? body.system.map((b: any) => b?.text ?? '').join('\\n')\n : '';\n if (systemText) {\n coreMessages.push({ role: 'system', content: systemText });\n }\n }\n if (Array.isArray(body?.messages)) {\n for (const msg of body.messages) {\n if (msg?.role && msg?.content != null) {\n const content = typeof msg.content === 'string'\n ? msg.content\n : Array.isArray(msg.content)\n ? msg.content.filter((p: any) => p?.type === 'text').map((p: any) => p.text).join('\\n')\n : String(msg.content);\n coreMessages.push({ role: msg.role, content });\n }\n }\n }\n if (coreMessages.length === 0) {\n coreMessages.push({ role: 'user', content: prompt });\n }\n\n const provider = await this.getProvider(context);\n const result = await generateText({\n model: provider.chat(model),\n messages: coreMessages,\n ...(body?.temperature != null ? { temperature: body.temperature } : {}),\n ...(body?.max_tokens != null ? { maxTokens: body.max_tokens } : {}),\n } as any);\n\n if (providerConfig.credentialId) {\n this.store.recordCredentialSuccess(context, providerConfig.credentialId).catch(() => {});\n }\n\n const text = result.text;\n return {\n id: `msg_${Date.now()}`,\n type: 'message',\n role: 'assistant',\n model,\n content: [{ type: 'text', text }],\n stop_reason: 'end_turn',\n stop_sequence: null,\n usage: {\n input_tokens: (result.usage as any)?.promptTokens ?? prompt.length,\n output_tokens: (result.usage as any)?.completionTokens ?? text.length,\n },\n };\n }\n\n public async listModels(_auth?: AuthContext): Promise<any[]> {\n const models: any[] = [];\n const seenModelIds = new Set<string>();\n\n if (_auth) {\n try {\n const context = this.createStoreContext(_auth);\n const userModels = await this.store.listAvailableModels(context);\n this.pushModelsWithDedup(models, seenModelIds, userModels);\n } catch (error) {\n this.logger.warn(`Failed to load user Pod models: ${error}`);\n }\n }\n\n const aiGatewayModels = await this.aiGatewayTransport.listModels();\n if (aiGatewayModels) {\n this.pushModelsWithDedup(models, seenModelIds, aiGatewayModels);\n }\n\n // 平台 Provider 模型(从 DEFAULT_API_BASE 获取)\n const platformBase = getPlatformApiBaseUrl();\n const platformKey = getPlatformApiKey();\n const aiGatewayBase = this.getAiGatewayBaseUrl();\n const normalizedAiGatewayModelsUrl = aiGatewayBase\n ? this.aiGatewayTransport.buildUrl('/v1/models')\n : undefined;\n const normalizedPlatformModelsUrl = platformBase\n ? `${platformBase.replace(/\\/$/, '')}/models`\n : undefined;\n if (platformBase && normalizedPlatformModelsUrl !== normalizedAiGatewayModelsUrl) {\n try {\n const url = normalizedPlatformModelsUrl!;\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (platformKey) {\n headers['Authorization'] = `Bearer ${platformKey}`;\n }\n const resp = await fetch(url, { headers });\n if (resp.ok) {\n const data = await resp.json() as { data?: any[] };\n if (Array.isArray(data.data)) {\n this.pushModelsWithDedup(models, seenModelIds, data.data);\n }\n } else {\n this.logger.warn(`Failed to fetch platform models: ${resp.status}`);\n }\n } catch (error) {\n this.logger.warn(`Failed to fetch platform models: ${error}`);\n }\n }\n\n return models;\n }\n /**\n * Handle API errors and update credential status accordingly\n */\n private async handleApiError(\n error: unknown,\n context: StoreContext,\n credentialId: string,\n ): Promise<void> {\n const errorInfo = this.parseApiError(error);\n\n if (errorInfo.statusCode === 429) {\n // Rate limit error - mark credential as rate limited\n const resetAt = errorInfo.retryAfter\n ? new Date(Date.now() + errorInfo.retryAfter * 1000)\n : new Date(Date.now() + 60000); // Default 1 minute cooldown\n\n this.logger.warn(`Rate limit hit for credential ${credentialId}, reset at: ${resetAt.toISOString()}`);\n\n await this.store.updateCredentialStatus(\n context,\n credentialId,\n CredentialStatus.RATE_LIMITED,\n { rateLimitResetAt: resetAt },\n );\n } else if (errorInfo.statusCode === 401 || errorInfo.statusCode === 403) {\n // Auth error - mark credential as inactive\n this.logger.warn(`Auth error for credential ${credentialId}, marking as inactive`);\n\n await this.store.updateCredentialStatus(\n context,\n credentialId,\n CredentialStatus.INACTIVE,\n { incrementFailCount: true },\n );\n } else if (errorInfo.statusCode >= 500) {\n // Server error - increment fail count but keep active\n this.logger.warn(`Server error ${errorInfo.statusCode} for credential ${credentialId}`);\n\n await this.store.updateCredentialStatus(\n context,\n credentialId,\n CredentialStatus.ACTIVE,\n { incrementFailCount: true },\n );\n }\n }\n\n /**\n * Parse error to extract status code and retry-after header\n */\n private parseApiError(error: unknown): { statusCode: number; retryAfter?: number } {\n // Handle different error formats from AI SDK\n if (error && typeof error === 'object') {\n const err = error as any;\n\n // Direct status code\n if (typeof err.status === 'number') {\n return {\n statusCode: err.status,\n retryAfter: err.retryAfter || err.headers?.['retry-after'],\n };\n }\n\n // Nested response object\n if (err.response && typeof err.response.status === 'number') {\n return {\n statusCode: err.response.status,\n retryAfter: err.response.headers?.get?.('retry-after'),\n };\n }\n\n // Error message parsing (fallback)\n if (err.message) {\n const match = err.message.match(/(\\d{3})/);\n if (match) {\n return { statusCode: parseInt(match[1], 10) };\n }\n }\n }\n\n return { statusCode: 0 };\n }\n\n /**\n * Check if account has remaining token quota\n */\n private async checkTokenQuota(accountId: string): Promise<void> {\n if (!this.quotaService || !this.usageRepo) {\n return; // No quota enforcement if not configured\n }\n\n try {\n const quota = await this.quotaService.getAccountQuota(accountId);\n if (!quota.tokenLimitMonthly) {\n return; // No limit set\n }\n\n const usage = await this.usageRepo.getAccountUsage(accountId);\n const tokensUsed = usage?.tokensUsed ?? 0;\n\n if (tokensUsed >= quota.tokenLimitMonthly) {\n const err = new Error('Token quota exceeded for this month');\n (err as any).code = 'quota_exceeded';\n throw err;\n }\n } catch (error) {\n if ((error as any).code === 'quota_exceeded') {\n throw error;\n }\n // Log but don't block on quota check errors\n this.logger.warn(`Token quota check failed: ${error}`);\n }\n }\n\n /**\n * Record token usage (fire-and-forget)\n */\n private recordTokenUsage(accountId: string, podId: string, tokens: number): void {\n if (!this.usageRepo) {\n return;\n }\n\n this.usageRepo.incrementTokenUsage(accountId, podId, tokens).catch((err) => {\n this.logger.warn(`Failed to record token usage: ${err}`);\n });\n }\n}\n"]}
@@ -6,4 +6,11 @@ export declare class ProviderHttpTransport {
6
6
  proxy?: string;
7
7
  headers?: HeadersInit;
8
8
  }): Promise<any>;
9
+ postStream(options: {
10
+ url: string;
11
+ apiKey: string;
12
+ body: any;
13
+ proxy?: string;
14
+ headers?: HeadersInit;
15
+ }): Promise<Response>;
9
16
  }
@@ -27,6 +27,26 @@ class ProviderHttpTransport {
27
27
  }
28
28
  return response.json();
29
29
  }
30
+ async postStream(options) {
31
+ const fetchFn = options.proxy ? createProxyFetch(options.proxy) : fetch;
32
+ const headers = new Headers(options.headers);
33
+ headers.set('Content-Type', 'application/json');
34
+ headers.set('Authorization', `Bearer ${options.apiKey}`);
35
+ const response = await fetchFn(options.url, {
36
+ method: 'POST',
37
+ headers,
38
+ body: JSON.stringify(options.body),
39
+ });
40
+ if (!response.ok) {
41
+ const errorText = await response.text();
42
+ const error = new Error(`Provider error: ${response.statusText}`);
43
+ error.status = response.status;
44
+ error.headers = response.headers;
45
+ error.body = errorText;
46
+ throw error;
47
+ }
48
+ return response;
49
+ }
30
50
  }
31
51
  exports.ProviderHttpTransport = ProviderHttpTransport;
32
52
  //# sourceMappingURL=provider-http-transport.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider-http-transport.js","sourceRoot":"","sources":["../../../src/api/service/provider-http-transport.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AAEpC,SAAS,gBAAgB,CAAC,QAAgB;IACxC,MAAM,KAAK,GAAG,IAAI,mBAAU,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,KAAK,EAAS,CAAC,CAAC;AAC1E,CAAC;AAED,MAAa,qBAAqB;IACzB,KAAK,CAAC,QAAQ,CAAC,OAMrB;QACC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACxE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAEzD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;YAC1C,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;SACnC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,mBAAmB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACjE,KAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;YACvC,KAAa,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;YACzC,KAAa,CAAC,IAAI,GAAG,SAAS,CAAC;YAChC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;CACF;AA9BD,sDA8BC","sourcesContent":["import { ProxyAgent } from 'undici';\n\nfunction createProxyFetch(proxyUrl: string): typeof fetch {\n const agent = new ProxyAgent(proxyUrl);\n return (url, init) => fetch(url, { ...init, dispatcher: agent } as any);\n}\n\nexport class ProviderHttpTransport {\n public async postJson(options: {\n url: string;\n apiKey: string;\n body: any;\n proxy?: string;\n headers?: HeadersInit;\n }): Promise<any> {\n const fetchFn = options.proxy ? createProxyFetch(options.proxy) : fetch;\n const headers = new Headers(options.headers);\n headers.set('Content-Type', 'application/json');\n headers.set('Authorization', `Bearer ${options.apiKey}`);\n\n const response = await fetchFn(options.url, {\n method: 'POST',\n headers,\n body: JSON.stringify(options.body),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n const error = new Error(`Provider error: ${response.statusText}`);\n (error as any).status = response.status;\n (error as any).headers = response.headers;\n (error as any).body = errorText;\n throw error;\n }\n\n return response.json();\n }\n}\n"]}
1
+ {"version":3,"file":"provider-http-transport.js","sourceRoot":"","sources":["../../../src/api/service/provider-http-transport.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AAEpC,SAAS,gBAAgB,CAAC,QAAgB;IACxC,MAAM,KAAK,GAAG,IAAI,mBAAU,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,KAAK,EAAS,CAAC,CAAC;AAC1E,CAAC;AAED,MAAa,qBAAqB;IACzB,KAAK,CAAC,QAAQ,CAAC,OAMrB;QACC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACxE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAEzD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;YAC1C,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;SACnC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,mBAAmB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACjE,KAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;YACvC,KAAa,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;YACzC,KAAa,CAAC,IAAI,GAAG,SAAS,CAAC;YAChC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,OAMvB;QACC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACxE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAEzD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;YAC1C,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;SACnC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,mBAAmB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACjE,KAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;YACvC,KAAa,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;YACzC,KAAa,CAAC,IAAI,GAAG,SAAS,CAAC;YAChC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AA5DD,sDA4DC","sourcesContent":["import { ProxyAgent } from 'undici';\n\nfunction createProxyFetch(proxyUrl: string): typeof fetch {\n const agent = new ProxyAgent(proxyUrl);\n return (url, init) => fetch(url, { ...init, dispatcher: agent } as any);\n}\n\nexport class ProviderHttpTransport {\n public async postJson(options: {\n url: string;\n apiKey: string;\n body: any;\n proxy?: string;\n headers?: HeadersInit;\n }): Promise<any> {\n const fetchFn = options.proxy ? createProxyFetch(options.proxy) : fetch;\n const headers = new Headers(options.headers);\n headers.set('Content-Type', 'application/json');\n headers.set('Authorization', `Bearer ${options.apiKey}`);\n\n const response = await fetchFn(options.url, {\n method: 'POST',\n headers,\n body: JSON.stringify(options.body),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n const error = new Error(`Provider error: ${response.statusText}`);\n (error as any).status = response.status;\n (error as any).headers = response.headers;\n (error as any).body = errorText;\n throw error;\n }\n\n return response.json();\n }\n\n public async postStream(options: {\n url: string;\n apiKey: string;\n body: any;\n proxy?: string;\n headers?: HeadersInit;\n }): Promise<Response> {\n const fetchFn = options.proxy ? createProxyFetch(options.proxy) : fetch;\n const headers = new Headers(options.headers);\n headers.set('Content-Type', 'application/json');\n headers.set('Authorization', `Bearer ${options.apiKey}`);\n\n const response = await fetchFn(options.url, {\n method: 'POST',\n headers,\n body: JSON.stringify(options.body),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n const error = new Error(`Provider error: ${response.statusText}`);\n (error as any).status = response.status;\n (error as any).headers = response.headers;\n (error as any).body = errorText;\n throw error;\n }\n\n return response;\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@undefineds.co/xpod",
3
- "version": "0.2.26",
3
+ "version": "0.2.28",
4
4
  "description": "Xpod is an extended Community Solid Server, offering rich-feature, production-level Solid Pod and identity management.",
5
5
  "repository": "https://github.com/undefinedsco/xpod",
6
6
  "author": "developer@undefineds.co",