@prexo/ai-chat-sdk
Version:
AI Chat SDK for building AI chat applications with Context and History
1 lines • 11.2 kB
Source Map (JSON)
{"version":3,"sources":["../src/version.ts","../src/telemetry/client.ts"],"names":["SDK_VERSION","ingestionKeyCache","getSDKVersion","getCacheKey","endpoint","domain","Telementry","options","__publicField","envDisabled","cacheKey","keyEndpoint","res","userAgent","appVersion","vendor","language","platform","cookieEnabled","hardwareConcurrency","deviceMemory","event","properties","ingestionKey","payload"],"mappings":"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","file":"telemetry.cjs","sourcesContent":["// This file is automatically updated during the build process\n// Do not edit manually\n\nexport const SDK_VERSION = \"1.0.1-beta.1\";\nexport const SDK_NAME = \"@prexo/ai-chat-sdk\";\n","import type { TelementryEvents } from \"../types\";\nimport { SDK_VERSION } from \"../version\";\n\nexport type TelementryOptions = {\n enabled?: boolean;\n ingestionKey?: string;\n};\n\n// Static cache for ingestion key per endpoint+domain\nconst ingestionKeyCache: Record<string, Promise<string>> = {};\n\n// Auto-detect SDK version\nfunction getSDKVersion(): string {\n try {\n // Try to get from process.env (works in Node.js)\n if (typeof process !== \"undefined\" && process.env?.PREXO_SDK_VERSION) {\n return process.env.PREXO_SDK_VERSION;\n }\n\n // Try to get from window (works in browser with injected globals)\n if (\n typeof window !== \"undefined\" &&\n (window as any).__PREXO_SDK_VERSION__\n ) {\n return (window as any).__PREXO_SDK_VERSION__;\n }\n\n // Try to get from globalThis (works in modern environments)\n if (\n typeof globalThis !== \"undefined\" &&\n (globalThis as any).__PREXO_SDK_VERSION__\n ) {\n return (globalThis as any).__PREXO_SDK_VERSION__;\n }\n\n // Use the version from the version file (default fallback)\n return SDK_VERSION;\n } catch {\n return SDK_VERSION;\n }\n}\n\nfunction getCacheKey(endpoint: string, domain: string) {\n return `${endpoint}::${domain}`;\n}\n\nexport class Telementry {\n private enabled: boolean;\n private endpoint: string;\n private ingestionKey?: string;\n private sdkVersion: string;\n private ingestionKeyPromise?: Promise<string>;\n\n constructor(options: TelementryOptions) {\n const envDisabled =\n typeof process !== \"undefined\" && process.env?.DISABLE_TELEMETRY === \"1\";\n\n this.enabled = options.enabled ?? !envDisabled;\n this.endpoint =\n typeof process !== \"undefined\" &&\n process.env &&\n process.env.NODE_ENV === \"development\"\n ? \"http://localhost:3001/v1/telementry\"\n : \"https://api.prexoai.xyz/v1/telementry\";\n\n // Auto-detect SDK version if not provided\n this.sdkVersion = getSDKVersion();\n\n if (options.ingestionKey) {\n this.ingestionKey = options.ingestionKey;\n }\n // else: don't fetch here, defer to send() and use cache\n }\n\n private async fetchIngestionKeyCached(): Promise<string> {\n // Determine domain\n let domain = \"\";\n if (\n typeof window !== \"undefined\" &&\n window.location &&\n window.location.origin\n ) {\n if (\n typeof process !== \"undefined\" &&\n process.env &&\n process.env.NODE_ENV === \"development\"\n ) {\n domain = \"devwtf.in\";\n } else {\n domain = window.location.origin;\n }\n }\n const cacheKey = getCacheKey(this.endpoint, domain);\n\n if (!ingestionKeyCache[cacheKey]) {\n ingestionKeyCache[cacheKey] = this.fetchIngestionKey(domain);\n }\n return ingestionKeyCache[cacheKey];\n }\n\n private async fetchIngestionKey(domain: string): Promise<string> {\n const keyEndpoint = this.endpoint\n ? this.endpoint.replace(/\\/?$/, \"/key\")\n : \"https://api.prexoai.xyz/v1/telementry/key\";\n try {\n const res = await fetch(keyEndpoint, {\n method: \"POST\",\n credentials: \"include\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ domain }),\n });\n if (!res.ok) {\n throw new Error(\"Failed to fetch ingestion key\");\n }\n const data = await res.json();\n // Assume the key is in data.key\n return data.key || \"prexoai-ingest-key\";\n } catch {\n // fallback to default\n return \"prexoai-ingest-key\";\n }\n }\n\n /**\n * Returns a string with browser details using the Navigator API.\n * See: https://developer.mozilla.org/en-US/docs/Web/API/Navigator\n */\n private detectBrowser(): string {\n if (typeof window !== \"undefined\" && typeof navigator !== \"undefined\") {\n const userAgent = navigator.userAgent || \"unknown\";\n const appVersion = navigator.appVersion || \"unknown\";\n const vendor = (navigator as any).vendor || \"unknown\";\n const language = (navigator as any).language || \"unknown\";\n const platform = (navigator as any).platform || \"unknown\";\n const cookieEnabled =\n (navigator as any).cookieEnabled !== undefined\n ? String((navigator as any).cookieEnabled)\n : \"unknown\";\n const hardwareConcurrency =\n (navigator as any).hardwareConcurrency !== undefined\n ? String((navigator as any).hardwareConcurrency)\n : \"unknown\";\n const deviceMemory =\n (navigator as any).deviceMemory !== undefined\n ? String((navigator as any).deviceMemory)\n : \"unknown\";\n return [\n `UserAgent: ${userAgent}`,\n `AppVersion: ${appVersion}`,\n `Vendor: ${vendor}`,\n `Language: ${language}`,\n `Platform: ${platform}`,\n `CookieEnabled: ${cookieEnabled}`,\n `HardwareConcurrency: ${hardwareConcurrency}`,\n `DeviceMemory: ${deviceMemory}`,\n ].join(\"; \");\n }\n // Fallback for non-browser environments\n return \"not-browser\";\n }\n\n /**\n * Returns the platform/OS using the Navigator API if available.\n * See: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/platform\n */\n private detectPlatform(): string {\n if (\n typeof navigator !== \"undefined\" &&\n typeof navigator.platform === \"string\"\n ) {\n return navigator.platform || \"unknown\";\n }\n if (\n typeof process !== \"undefined\" &&\n typeof process.platform === \"string\"\n ) {\n return process.platform;\n }\n return \"unknown\";\n }\n\n\n async send<K extends keyof TelementryEvents>(\n event: K,\n properties: TelementryEvents[K],\n ) {\n if (!this.enabled) return;\n\n // Ensure ingestionKey is available\n let ingestionKey = this.ingestionKey;\n if (!ingestionKey) {\n if (!this.ingestionKeyPromise) {\n // Use the static cache to avoid spamming /key endpoint\n this.ingestionKeyPromise = this.fetchIngestionKeyCached();\n }\n ingestionKey = await this.ingestionKeyPromise;\n this.ingestionKey = ingestionKey; // cache for future\n }\n\n const payload = {\n event,\n properties: {\n ...properties,\n sdkVersion: this.sdkVersion,\n browser: this.detectBrowser(),\n platform: this.detectPlatform(),\n timestamp: new Date().toISOString(),\n },\n };\n\n try {\n await fetch(this.endpoint, {\n method: \"POST\",\n credentials: \"include\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-ingest-key\": ingestionKey,\n },\n body: JSON.stringify(payload),\n });\n } catch {\n // never throw\n }\n }\n}\n"]}