Rocky_Mountain_Vending/.pnpm-store/v10/files/aa/103a7fa8242fc4fbb7e3d487d8ab3a0d2ef183990bdce299a1b9ebcd94bc91ea36b0002e44111f24c90549ef3e4c55c7112e18288f5100cdd227b55f67d18b
DMleadgen 46d973904b
Initial commit: Rocky Mountain Vending website
Next.js website for Rocky Mountain Vending company featuring:
- Product catalog with Stripe integration
- Service areas and parts pages
- Admin dashboard with Clerk authentication
- SEO optimized pages with JSON-LD structured data

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 16:22:15 -07:00

1 line
No EOL
16 KiB
Text

{"version":3,"file":"index.js","sources":["../../../../src/utils/openai/index.ts"],"sourcesContent":["import { getCurrentScope } from '../../currentScopes';\nimport { captureException } from '../../exports';\nimport { startSpan } from '../../tracing/trace';\nimport type { Span, SpanAttributeValue } from '../../types-hoist/span';\nimport {\n GEN_AI_OPERATION_NAME_ATTRIBUTE,\n GEN_AI_REQUEST_FREQUENCY_PENALTY_ATTRIBUTE,\n GEN_AI_REQUEST_MESSAGES_ATTRIBUTE,\n GEN_AI_REQUEST_MODEL_ATTRIBUTE,\n GEN_AI_REQUEST_PRESENCE_PENALTY_ATTRIBUTE,\n GEN_AI_REQUEST_TEMPERATURE_ATTRIBUTE,\n GEN_AI_REQUEST_TOP_P_ATTRIBUTE,\n GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE,\n GEN_AI_RESPONSE_ID_ATTRIBUTE,\n GEN_AI_RESPONSE_MODEL_ATTRIBUTE,\n GEN_AI_RESPONSE_TEXT_ATTRIBUTE,\n GEN_AI_SYSTEM_ATTRIBUTE,\n GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE,\n GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE,\n GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE,\n OPENAI_RESPONSE_ID_ATTRIBUTE,\n OPENAI_RESPONSE_MODEL_ATTRIBUTE,\n OPENAI_RESPONSE_TIMESTAMP_ATTRIBUTE,\n OPENAI_USAGE_COMPLETION_TOKENS_ATTRIBUTE,\n OPENAI_USAGE_PROMPT_TOKENS_ATTRIBUTE,\n} from '../gen-ai-attributes';\nimport { OPENAI_INTEGRATION_NAME } from './constants';\nimport type {\n InstrumentedMethod,\n OpenAiChatCompletionObject,\n OpenAiClient,\n OpenAiIntegration,\n OpenAiOptions,\n OpenAiResponse,\n OpenAIResponseObject,\n} from './types';\nimport {\n buildMethodPath,\n getOperationName,\n getSpanOperation,\n isChatCompletionResponse,\n isResponsesApiResponse,\n shouldInstrument,\n} from './utils';\n\n/**\n * Extract request attributes from method arguments\n */\nfunction extractRequestAttributes(args: unknown[], methodPath: string): Record<string, unknown> {\n const attributes: Record<string, unknown> = {\n [GEN_AI_SYSTEM_ATTRIBUTE]: 'openai',\n [GEN_AI_OPERATION_NAME_ATTRIBUTE]: getOperationName(methodPath),\n };\n\n if (args.length > 0 && typeof args[0] === 'object' && args[0] !== null) {\n const params = args[0] as Record<string, unknown>;\n\n attributes[GEN_AI_REQUEST_MODEL_ATTRIBUTE] = params.model ?? 'unknown';\n if ('temperature' in params) attributes[GEN_AI_REQUEST_TEMPERATURE_ATTRIBUTE] = params.temperature;\n if ('top_p' in params) attributes[GEN_AI_REQUEST_TOP_P_ATTRIBUTE] = params.top_p;\n if ('frequency_penalty' in params)\n attributes[GEN_AI_REQUEST_FREQUENCY_PENALTY_ATTRIBUTE] = params.frequency_penalty;\n if ('presence_penalty' in params) attributes[GEN_AI_REQUEST_PRESENCE_PENALTY_ATTRIBUTE] = params.presence_penalty;\n } else {\n attributes[GEN_AI_REQUEST_MODEL_ATTRIBUTE] = 'unknown';\n }\n\n return attributes;\n}\n\n/**\n * Helper function to set token usage attributes\n */\nfunction setTokenUsageAttributes(\n span: Span,\n promptTokens?: number,\n completionTokens?: number,\n totalTokens?: number,\n): void {\n if (promptTokens !== undefined) {\n span.setAttributes({\n [OPENAI_USAGE_PROMPT_TOKENS_ATTRIBUTE]: promptTokens,\n [GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE]: promptTokens,\n });\n }\n if (completionTokens !== undefined) {\n span.setAttributes({\n [OPENAI_USAGE_COMPLETION_TOKENS_ATTRIBUTE]: completionTokens,\n [GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE]: completionTokens,\n });\n }\n if (totalTokens !== undefined) {\n span.setAttributes({\n [GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE]: totalTokens,\n });\n }\n}\n\n/**\n * Helper function to set common response attributes (ID, model, timestamp)\n */\nfunction setCommonResponseAttributes(span: Span, id?: string, model?: string, timestamp?: number): void {\n if (id) {\n span.setAttributes({\n [OPENAI_RESPONSE_ID_ATTRIBUTE]: id,\n [GEN_AI_RESPONSE_ID_ATTRIBUTE]: id,\n });\n }\n if (model) {\n span.setAttributes({\n [OPENAI_RESPONSE_MODEL_ATTRIBUTE]: model,\n [GEN_AI_RESPONSE_MODEL_ATTRIBUTE]: model,\n });\n }\n if (timestamp) {\n span.setAttributes({\n [OPENAI_RESPONSE_TIMESTAMP_ATTRIBUTE]: new Date(timestamp * 1000).toISOString(),\n });\n }\n}\n\n/**\n * Add attributes for Chat Completion responses\n */\nfunction addChatCompletionAttributes(span: Span, response: OpenAiChatCompletionObject): void {\n setCommonResponseAttributes(span, response.id, response.model, response.created);\n if (response.usage) {\n setTokenUsageAttributes(\n span,\n response.usage.prompt_tokens,\n response.usage.completion_tokens,\n response.usage.total_tokens,\n );\n }\n if (Array.isArray(response.choices)) {\n const finishReasons = response.choices\n .map(choice => choice.finish_reason)\n .filter((reason): reason is string => reason !== null);\n if (finishReasons.length > 0) {\n span.setAttributes({\n [GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE]: JSON.stringify(finishReasons),\n });\n }\n }\n}\n\n/**\n * Add attributes for Responses API responses\n */\nfunction addResponsesApiAttributes(span: Span, response: OpenAIResponseObject): void {\n setCommonResponseAttributes(span, response.id, response.model, response.created_at);\n if (response.status) {\n span.setAttributes({\n [GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE]: JSON.stringify([response.status]),\n });\n }\n if (response.usage) {\n setTokenUsageAttributes(\n span,\n response.usage.input_tokens,\n response.usage.output_tokens,\n response.usage.total_tokens,\n );\n }\n}\n\n/**\n * Add response attributes to spans\n * This currently supports both Chat Completion and Responses API responses\n */\nfunction addResponseAttributes(span: Span, result: unknown, recordOutputs?: boolean): void {\n if (!result || typeof result !== 'object') return;\n\n const response = result as OpenAiResponse;\n\n if (isChatCompletionResponse(response)) {\n addChatCompletionAttributes(span, response);\n if (recordOutputs && response.choices?.length) {\n const responseTexts = response.choices.map(choice => choice.message?.content || '');\n span.setAttributes({ [GEN_AI_RESPONSE_TEXT_ATTRIBUTE]: JSON.stringify(responseTexts) });\n }\n } else if (isResponsesApiResponse(response)) {\n addResponsesApiAttributes(span, response);\n if (recordOutputs && response.output_text) {\n span.setAttributes({ [GEN_AI_RESPONSE_TEXT_ATTRIBUTE]: response.output_text });\n }\n }\n}\n\n// Extract and record AI request inputs, if present. This is intentionally separate from response attributes.\nfunction addRequestAttributes(span: Span, params: Record<string, unknown>): void {\n if ('messages' in params) {\n span.setAttributes({ [GEN_AI_REQUEST_MESSAGES_ATTRIBUTE]: JSON.stringify(params.messages) });\n }\n if ('input' in params) {\n span.setAttributes({ [GEN_AI_REQUEST_MESSAGES_ATTRIBUTE]: JSON.stringify(params.input) });\n }\n}\n\nfunction getOptionsFromIntegration(): OpenAiOptions {\n const scope = getCurrentScope();\n const client = scope.getClient();\n const integration = client?.getIntegrationByName(OPENAI_INTEGRATION_NAME) as OpenAiIntegration | undefined;\n const shouldRecordInputsAndOutputs = integration ? Boolean(client?.getOptions().sendDefaultPii) : false;\n\n return {\n recordInputs: integration?.options?.recordInputs ?? shouldRecordInputsAndOutputs,\n recordOutputs: integration?.options?.recordOutputs ?? shouldRecordInputsAndOutputs,\n };\n}\n\n/**\n * Instrument a method with Sentry spans\n * Following Sentry AI Agents Manual Instrumentation conventions\n * @see https://docs.sentry.io/platforms/javascript/guides/node/tracing/instrumentation/ai-agents-module/#manual-instrumentation\n */\nfunction instrumentMethod<T extends unknown[], R>(\n originalMethod: (...args: T) => Promise<R>,\n methodPath: InstrumentedMethod,\n context: unknown,\n options?: OpenAiOptions,\n): (...args: T) => Promise<R> {\n return async function instrumentedMethod(...args: T): Promise<R> {\n const finalOptions = options || getOptionsFromIntegration();\n const requestAttributes = extractRequestAttributes(args, methodPath);\n const model = (requestAttributes[GEN_AI_REQUEST_MODEL_ATTRIBUTE] as string) || 'unknown';\n const operationName = getOperationName(methodPath);\n\n return startSpan(\n {\n name: `${operationName} ${model}`,\n op: getSpanOperation(methodPath),\n attributes: requestAttributes as Record<string, SpanAttributeValue>,\n },\n async (span: Span) => {\n try {\n if (finalOptions.recordInputs && args[0] && typeof args[0] === 'object') {\n addRequestAttributes(span, args[0] as Record<string, unknown>);\n }\n\n const result = await originalMethod.apply(context, args);\n // TODO: Add streaming support\n addResponseAttributes(span, result, finalOptions.recordOutputs);\n return result;\n } catch (error) {\n captureException(error);\n throw error;\n }\n },\n );\n };\n}\n\n/**\n * Create a deep proxy for OpenAI client instrumentation\n */\nfunction createDeepProxy(target: object, currentPath = '', options?: OpenAiOptions): OpenAiClient {\n return new Proxy(target, {\n get(obj: object, prop: string): unknown {\n const value = (obj as Record<string, unknown>)[prop];\n const methodPath = buildMethodPath(currentPath, String(prop));\n\n if (typeof value === 'function' && shouldInstrument(methodPath)) {\n return instrumentMethod(value as (...args: unknown[]) => Promise<unknown>, methodPath, obj, options);\n }\n\n if (typeof value === 'function') {\n // Bind non-instrumented functions to preserve the original `this` context,\n // which is required for accessing private class fields (e.g. #baseURL) in OpenAI SDK v5.\n return value.bind(obj);\n }\n\n if (value && typeof value === 'object') {\n return createDeepProxy(value as object, methodPath, options);\n }\n\n return value;\n },\n });\n}\n\n/**\n * Instrument an OpenAI client with Sentry tracing\n * Can be used across Node.js, Cloudflare Workers, and Vercel Edge\n */\nexport function instrumentOpenAiClient(client: OpenAiClient, options?: OpenAiOptions): OpenAiClient {\n return createDeepProxy(client, '', options);\n}\n"],"names":[],"mappings":"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"}