@jami-studio/core 0.92.26 → 0.92.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.
- package/corpus/README.md +1 -1
- package/corpus/core/CHANGELOG.md +23 -0
- package/corpus/core/package.json +2 -1
- package/corpus/core/src/deploy/build.ts +56 -2
- package/corpus/core/src/event-bus/bus.ts +138 -140
- package/corpus/core/src/event-bus/registry.ts +81 -79
- package/corpus/core/src/file-upload/registry.ts +135 -125
- package/corpus/core/src/notifications/registry.ts +218 -216
- package/corpus/core/src/observability/store.ts +1313 -1321
- package/corpus/core/src/private-blob/registry.ts +246 -242
- package/corpus/core/src/secrets/register.ts +132 -129
- package/corpus/core/src/shared/global-scope.ts +75 -0
- package/corpus/core/src/shared/init-memo.ts +94 -0
- package/corpus/core/src/sharing/registry.ts +193 -194
- package/corpus/core/src/tracking/providers.ts +425 -422
- package/corpus/core/src/tracking/registry.ts +102 -102
- package/dist/collab/routes.d.ts +1 -1
- package/dist/deploy/build.d.ts +23 -0
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +36 -2
- package/dist/deploy/build.js.map +1 -1
- package/dist/event-bus/bus.d.ts.map +1 -1
- package/dist/event-bus/bus.js +8 -6
- package/dist/event-bus/bus.js.map +1 -1
- package/dist/event-bus/registry.d.ts.map +1 -1
- package/dist/event-bus/registry.js +10 -6
- package/dist/event-bus/registry.js.map +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/file-upload/registry.d.ts.map +1 -1
- package/dist/file-upload/registry.js +28 -8
- package/dist/file-upload/registry.js.map +1 -1
- package/dist/notifications/registry.d.ts.map +1 -1
- package/dist/notifications/registry.js +6 -5
- package/dist/notifications/registry.js.map +1 -1
- package/dist/observability/routes.d.ts +5 -5
- package/dist/observability/store.d.ts +1 -1
- package/dist/observability/store.d.ts.map +1 -1
- package/dist/observability/store.js +311 -316
- package/dist/observability/store.js.map +1 -1
- package/dist/private-blob/registry.d.ts.map +1 -1
- package/dist/private-blob/registry.js +18 -13
- package/dist/private-blob/registry.js.map +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/resources/handlers.d.ts +2 -2
- package/dist/secrets/register.d.ts.map +1 -1
- package/dist/secrets/register.js +11 -7
- package/dist/secrets/register.js.map +1 -1
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/shared/global-scope.d.ts +55 -0
- package/dist/shared/global-scope.d.ts.map +1 -0
- package/dist/shared/global-scope.js +70 -0
- package/dist/shared/global-scope.js.map +1 -0
- package/dist/shared/init-memo.d.ts +34 -0
- package/dist/shared/init-memo.d.ts.map +1 -0
- package/dist/shared/init-memo.js +80 -0
- package/dist/shared/init-memo.js.map +1 -0
- package/dist/sharing/registry.d.ts.map +1 -1
- package/dist/sharing/registry.js +2 -16
- package/dist/sharing/registry.js.map +1 -1
- package/dist/tracking/providers.d.ts.map +1 -1
- package/dist/tracking/providers.js +11 -9
- package/dist/tracking/providers.js.map +1 -1
- package/dist/tracking/registry.d.ts.map +1 -1
- package/dist/tracking/registry.js +5 -5
- package/dist/tracking/registry.js.map +1 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/tracking/providers.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Built-in tracking providers that auto-register from env vars.\r\n *\r\n * No SDK dependencies — uses raw HTTP to keep core lightweight.\r\n * Set the env var and tracking starts automatically.\r\n *\r\n * POSTHOG_API_KEY + POSTHOG_HOST → PostHog\r\n * MIXPANEL_TOKEN → Mixpanel\r\n * AMPLITUDE_API_KEY → Amplitude\r\n * AGENT_NATIVE_ANALYTICS_PUBLIC_KEY → Agent Native Analytics\r\n *\r\n * Call `registerBuiltinProviders()` at server startup (done\r\n * automatically by the core-routes plugin).\r\n */\r\n\r\nimport { registerTrackingProvider } from \"./registry.js\";\r\nimport type { TrackingProvider, TrackingEvent } from \"./types.js\";\r\n\r\nconst POSTHOG_DEFAULT_HOST = \"https://us.i.posthog.com\";\r\nconst AGENT_NATIVE_ANALYTICS_DEFAULT_ENDPOINT =\r\n \"https://analytics.jami.studio/track\";\r\nconst BATCH_INTERVAL_MS = 10_000;\r\nconst MAX_BATCH_SIZE = 50;\r\n\r\n// ─── Batched sender ────────────────────────────────────────────────────────\r\n\r\ninterface QueuedEvent {\r\n url: string;\r\n body: string;\r\n headers?: Record<string, string>;\r\n}\r\n\r\ninterface EnqueueOptions {\r\n flushImmediately?: boolean;\r\n}\r\n\r\n// Use globalThis so multiple ESM graph instances (Vite dev + Nitro symlinks)\r\n// share one queue, matching the same pattern as the tracking registry.\r\nconst QUEUE_KEY = Symbol.for(\"@agent-native/core/tracking.queue\");\r\nconst TIMER_KEY = Symbol.for(\"@agent-native/core/tracking.timer\");\r\n\r\ninterface GlobalWithQueue {\r\n [QUEUE_KEY]?: QueuedEvent[];\r\n [TIMER_KEY]?: ReturnType<typeof setTimeout> | null;\r\n}\r\n\r\nfunction getQueue(): QueuedEvent[] {\r\n const g = globalThis as unknown as GlobalWithQueue;\r\n if (!g[QUEUE_KEY]) g[QUEUE_KEY] = [];\r\n return g[QUEUE_KEY]!;\r\n}\r\n\r\nfunction getTimer(): ReturnType<typeof setTimeout> | null {\r\n const g = globalThis as unknown as GlobalWithQueue;\r\n return g[TIMER_KEY] ?? null;\r\n}\r\n\r\nfunction setTimer(t: ReturnType<typeof setTimeout> | null): void {\r\n (globalThis as unknown as GlobalWithQueue)[TIMER_KEY] = t;\r\n}\r\n\r\nfunction enqueue(\r\n url: string,\r\n body: string,\r\n headers?: Record<string, string>,\r\n options?: EnqueueOptions,\r\n): void {\r\n const queue = getQueue();\r\n queue.push({ url, body, headers });\r\n if (options?.flushImmediately || queue.length >= MAX_BATCH_SIZE) {\r\n void drainQueue();\r\n } else if (!getTimer()) {\r\n const timer = setTimeout(() => {\r\n void drainQueue();\r\n }, BATCH_INTERVAL_MS);\r\n if (timer.unref) timer.unref();\r\n setTimer(timer);\r\n }\r\n}\r\n\r\nfunction drainQueue(): Promise<void[]> {\r\n const t = getTimer();\r\n if (t) {\r\n clearTimeout(t);\r\n setTimer(null);\r\n }\r\n const queue = getQueue();\r\n const batch = queue.splice(0, queue.length);\r\n return Promise.all(\r\n batch.map((item) =>\r\n fetch(item.url, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\", ...item.headers },\r\n body: item.body,\r\n }).then(\r\n () => undefined,\r\n () => undefined,\r\n ),\r\n ),\r\n );\r\n}\r\n\r\nfunction isLocalhostUrl(value: string | undefined): boolean {\r\n if (!value || !value.trim()) return false;\r\n const raw = value.trim();\r\n const withProtocol = /^[a-z][a-z0-9+.-]*:\\/\\//i.test(raw)\r\n ? raw\r\n : `https://${raw}`;\r\n try {\r\n const { hostname } = new URL(withProtocol);\r\n const h = hostname.toLowerCase();\r\n return (\r\n h === \"localhost\" ||\r\n h === \"127.0.0.1\" ||\r\n h === \"::1\" ||\r\n h === \"[::1]\" ||\r\n h.endsWith(\".localhost\") ||\r\n h.endsWith(\".local\")\r\n );\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nfunction shouldSkipAgentNativeAnalyticsForLocalhost(): boolean {\r\n if (process.env.AGENT_NATIVE_ANALYTICS_ALLOW_LOCALHOST === \"true\") {\r\n return false;\r\n }\r\n if (process.env.NODE_ENV === \"development\") return true;\r\n return [\r\n process.env.APP_URL,\r\n process.env.BETTER_AUTH_URL,\r\n process.env.URL,\r\n process.env.DEPLOY_URL,\r\n process.env.VERCEL_PROJECT_PRODUCTION_URL,\r\n process.env.VERCEL_URL,\r\n ].some(isLocalhostUrl);\r\n}\r\n\r\nfunction isServerlessRuntime(): boolean {\r\n return Boolean(\r\n process.env.NETLIFY ||\r\n process.env.VERCEL ||\r\n process.env.AWS_LAMBDA_FUNCTION_NAME ||\r\n process.env.AWS_EXECUTION_ENV ||\r\n process.env.LAMBDA_TASK_ROOT ||\r\n process.env.FUNCTION_NAME,\r\n );\r\n}\r\n\r\nfunction agentNativeAnalyticsFlushesImmediately(): boolean {\r\n const mode =\r\n process.env.AGENT_NATIVE_ANALYTICS_FLUSH_MODE?.trim().toLowerCase();\r\n if (mode === \"batch\") return false;\r\n if (mode === \"immediate\") return true;\r\n return isServerlessRuntime();\r\n}\r\n\r\n// ─── PostHog ───────────────────────────────────────────────────────────────\r\n\r\nfunction isPostHogAiObservabilityEvent(eventName: string): boolean {\r\n return eventName.startsWith(\"$ai_\");\r\n}\r\n\r\nfunction createPostHogProvider(apiKey: string, host: string): TrackingProvider {\r\n return {\r\n name: \"posthog\",\r\n track(event: TrackingEvent) {\r\n const distinctId = event.userId || \"anonymous\";\r\n if (isPostHogAiObservabilityEvent(event.name)) {\r\n enqueue(\r\n `${host}/i/v0/e/`,\r\n JSON.stringify({\r\n api_key: apiKey,\r\n event: event.name,\r\n properties: {\r\n distinct_id: distinctId,\r\n ...event.properties,\r\n timestamp: event.timestamp,\r\n },\r\n }),\r\n );\r\n return;\r\n }\r\n\r\n enqueue(\r\n `${host}/capture/`,\r\n JSON.stringify({\r\n api_key: apiKey,\r\n event: event.name,\r\n distinct_id: distinctId,\r\n properties: {\r\n ...event.properties,\r\n timestamp: event.timestamp,\r\n },\r\n }),\r\n );\r\n },\r\n identify(userId, traits) {\r\n enqueue(\r\n `${host}/capture/`,\r\n JSON.stringify({\r\n api_key: apiKey,\r\n event: \"$identify\",\r\n distinct_id: userId,\r\n properties: { $set: traits },\r\n }),\r\n );\r\n },\r\n flush: () => {\r\n return drainQueue().then(() => undefined);\r\n },\r\n };\r\n}\r\n\r\n// ─── Mixpanel ──────────────────────────────────────────────────────────────\r\n\r\nfunction createMixpanelProvider(token: string): TrackingProvider {\r\n return {\r\n name: \"mixpanel\",\r\n track(event: TrackingEvent) {\r\n const data = {\r\n event: event.name,\r\n properties: {\r\n token,\r\n distinct_id: event.userId || \"anonymous\",\r\n time: event.timestamp\r\n ? new Date(event.timestamp).getTime() / 1000\r\n : undefined,\r\n ...event.properties,\r\n },\r\n };\r\n enqueue(\"https://api.mixpanel.com/track\", JSON.stringify([data]));\r\n },\r\n identify(userId, traits) {\r\n const data = {\r\n $token: token,\r\n $distinct_id: userId,\r\n $set: traits,\r\n };\r\n enqueue(\"https://api.mixpanel.com/engage\", JSON.stringify([data]));\r\n },\r\n flush: () => {\r\n return drainQueue().then(() => undefined);\r\n },\r\n };\r\n}\r\n\r\n// ─── Amplitude ─────────────────────────────────────────────────────────────\r\n\r\nfunction createAmplitudeProvider(apiKey: string): TrackingProvider {\r\n return {\r\n name: \"amplitude\",\r\n track(event: TrackingEvent) {\r\n const data = {\r\n api_key: apiKey,\r\n events: [\r\n {\r\n event_type: event.name,\r\n user_id: event.userId || \"anonymous\",\r\n event_properties: event.properties,\r\n time: event.timestamp\r\n ? new Date(event.timestamp).getTime()\r\n : undefined,\r\n },\r\n ],\r\n };\r\n enqueue(\"https://api2.amplitude.com/2/httpapi\", JSON.stringify(data));\r\n },\r\n identify(userId, traits) {\r\n const data = {\r\n api_key: apiKey,\r\n events: [\r\n {\r\n event_type: \"$identify\",\r\n user_id: userId,\r\n user_properties: { $set: traits },\r\n },\r\n ],\r\n };\r\n enqueue(\"https://api2.amplitude.com/2/httpapi\", JSON.stringify(data));\r\n },\r\n flush: () => {\r\n return drainQueue().then(() => undefined);\r\n },\r\n };\r\n}\r\n\r\n// ─── Webhook (custom HTTP endpoint) ───────────────────────────────────────\r\n\r\nfunction createWebhookProvider(\r\n url: string,\r\n authHeader?: string,\r\n): TrackingProvider {\r\n const extra = authHeader ? { Authorization: authHeader } : undefined;\r\n return {\r\n name: \"webhook\",\r\n track(event: TrackingEvent) {\r\n enqueue(\r\n url,\r\n JSON.stringify({\r\n event: event.name,\r\n properties: event.properties,\r\n userId: event.userId,\r\n timestamp: event.timestamp,\r\n }),\r\n extra,\r\n );\r\n },\r\n identify(userId, traits) {\r\n enqueue(\r\n url,\r\n JSON.stringify({\r\n event: \"$identify\",\r\n userId,\r\n traits,\r\n timestamp: new Date().toISOString(),\r\n }),\r\n extra,\r\n );\r\n },\r\n flush: () => {\r\n return drainQueue().then(() => undefined);\r\n },\r\n };\r\n}\r\n\r\n// ─── Agent Native Analytics ───────────────────────────────────────────────\r\n\r\nfunction createAgentNativeAnalyticsProvider(\r\n publicKey: string,\r\n endpoint: string,\r\n): TrackingProvider {\r\n const flushImmediately = agentNativeAnalyticsFlushesImmediately();\r\n return {\r\n name: \"agent-native-analytics\",\r\n track(event: TrackingEvent) {\r\n enqueue(\r\n endpoint,\r\n JSON.stringify({\r\n publicKey,\r\n event: event.name,\r\n properties: event.properties ?? {},\r\n userId: event.userId,\r\n timestamp: event.timestamp,\r\n }),\r\n undefined,\r\n { flushImmediately },\r\n );\r\n },\r\n identify(userId, traits) {\r\n enqueue(\r\n endpoint,\r\n JSON.stringify({\r\n publicKey,\r\n event: \"$identify\",\r\n userId,\r\n properties: traits ?? {},\r\n timestamp: new Date().toISOString(),\r\n }),\r\n undefined,\r\n { flushImmediately },\r\n );\r\n },\r\n flush: () => {\r\n return drainQueue().then(() => undefined);\r\n },\r\n };\r\n}\r\n\r\n// ─── Auto-registration ────────────────────────────────────────────────────\r\n\r\nlet _registered = false;\r\n\r\nexport function registerBuiltinProviders(): void {\r\n if (_registered) return;\r\n _registered = true;\r\n\r\n const posthogKey = process.env.POSTHOG_API_KEY;\r\n if (posthogKey) {\r\n const host = (process.env.POSTHOG_HOST || POSTHOG_DEFAULT_HOST).replace(\r\n /\\/+$/,\r\n \"\",\r\n );\r\n registerTrackingProvider(createPostHogProvider(posthogKey, host));\r\n }\r\n\r\n const mixpanelToken = process.env.MIXPANEL_TOKEN;\r\n if (mixpanelToken) {\r\n registerTrackingProvider(createMixpanelProvider(mixpanelToken));\r\n }\r\n\r\n const amplitudeKey = process.env.AMPLITUDE_API_KEY;\r\n if (amplitudeKey) {\r\n registerTrackingProvider(createAmplitudeProvider(amplitudeKey));\r\n }\r\n\r\n const agentNativeAnalyticsKey =\r\n process.env.AGENT_NATIVE_ANALYTICS_PUBLIC_KEY ||\r\n process.env.VITE_AGENT_NATIVE_ANALYTICS_PUBLIC_KEY;\r\n if (\r\n agentNativeAnalyticsKey &&\r\n !shouldSkipAgentNativeAnalyticsForLocalhost()\r\n ) {\r\n registerTrackingProvider(\r\n createAgentNativeAnalyticsProvider(\r\n agentNativeAnalyticsKey,\r\n (\r\n process.env.AGENT_NATIVE_ANALYTICS_ENDPOINT ||\r\n AGENT_NATIVE_ANALYTICS_DEFAULT_ENDPOINT\r\n ).replace(/\\/+$/, \"\"),\r\n ),\r\n );\r\n }\r\n\r\n const webhookUrl = process.env.TRACKING_WEBHOOK_URL;\r\n if (webhookUrl) {\r\n registerTrackingProvider(\r\n createWebhookProvider(webhookUrl, process.env.TRACKING_WEBHOOK_AUTH),\r\n );\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/tracking/providers.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Built-in tracking providers that auto-register from env vars.\n *\n * No SDK dependencies — uses raw HTTP to keep core lightweight.\n * Set the env var and tracking starts automatically.\n *\n * POSTHOG_API_KEY + POSTHOG_HOST → PostHog\n * MIXPANEL_TOKEN → Mixpanel\n * AMPLITUDE_API_KEY → Amplitude\n * AGENT_NATIVE_ANALYTICS_PUBLIC_KEY → Agent Native Analytics\n *\n * Call `registerBuiltinProviders()` at server startup (done\n * automatically by the core-routes plugin).\n */\n\nimport { getScopedGlobal } from \"../shared/global-scope.js\";\nimport { registerTrackingProvider } from \"./registry.js\";\nimport type { TrackingProvider, TrackingEvent } from \"./types.js\";\n\nconst POSTHOG_DEFAULT_HOST = \"https://us.i.posthog.com\";\nconst AGENT_NATIVE_ANALYTICS_DEFAULT_ENDPOINT =\n \"https://analytics.jami.studio/track\";\nconst BATCH_INTERVAL_MS = 10_000;\nconst MAX_BATCH_SIZE = 50;\n\n// ─── Batched sender ────────────────────────────────────────────────────────\n\ninterface QueuedEvent {\n url: string;\n body: string;\n headers?: Record<string, string>;\n}\n\ninterface EnqueueOptions {\n flushImmediately?: boolean;\n}\n\n// Use globalThis so multiple ESM graph instances (Vite dev + Nitro symlinks)\n// share one queue, matching the same pattern as the tracking registry.\n// Scope-aware + lazily resolved so unified workspace deployments keep\n// per-app queues/timers. See shared/global-scope.\nconst QUEUE_BASE_KEY = \"agent-native.tracking.queue\";\nconst TIMER_BASE_KEY = \"agent-native.tracking.timer\";\n\ninterface TimerBox {\n timer: ReturnType<typeof setTimeout> | null;\n}\n\nfunction getQueue(): QueuedEvent[] {\n return getScopedGlobal(QUEUE_BASE_KEY, () => [] as QueuedEvent[]);\n}\n\nfunction getTimerBox(): TimerBox {\n return getScopedGlobal(TIMER_BASE_KEY, () => ({ timer: null }) as TimerBox);\n}\n\nfunction getTimer(): ReturnType<typeof setTimeout> | null {\n return getTimerBox().timer;\n}\n\nfunction setTimer(t: ReturnType<typeof setTimeout> | null): void {\n getTimerBox().timer = t;\n}\n\nfunction enqueue(\n url: string,\n body: string,\n headers?: Record<string, string>,\n options?: EnqueueOptions,\n): void {\n const queue = getQueue();\n queue.push({ url, body, headers });\n if (options?.flushImmediately || queue.length >= MAX_BATCH_SIZE) {\n void drainQueue();\n } else if (!getTimer()) {\n const timer = setTimeout(() => {\n void drainQueue();\n }, BATCH_INTERVAL_MS);\n if (timer.unref) timer.unref();\n setTimer(timer);\n }\n}\n\nfunction drainQueue(): Promise<void[]> {\n const t = getTimer();\n if (t) {\n clearTimeout(t);\n setTimer(null);\n }\n const queue = getQueue();\n const batch = queue.splice(0, queue.length);\n return Promise.all(\n batch.map((item) =>\n fetch(item.url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", ...item.headers },\n body: item.body,\n }).then(\n () => undefined,\n () => undefined,\n ),\n ),\n );\n}\n\nfunction isLocalhostUrl(value: string | undefined): boolean {\n if (!value || !value.trim()) return false;\n const raw = value.trim();\n const withProtocol = /^[a-z][a-z0-9+.-]*:\\/\\//i.test(raw)\n ? raw\n : `https://${raw}`;\n try {\n const { hostname } = new URL(withProtocol);\n const h = hostname.toLowerCase();\n return (\n h === \"localhost\" ||\n h === \"127.0.0.1\" ||\n h === \"::1\" ||\n h === \"[::1]\" ||\n h.endsWith(\".localhost\") ||\n h.endsWith(\".local\")\n );\n } catch {\n return false;\n }\n}\n\nfunction shouldSkipAgentNativeAnalyticsForLocalhost(): boolean {\n if (process.env.AGENT_NATIVE_ANALYTICS_ALLOW_LOCALHOST === \"true\") {\n return false;\n }\n if (process.env.NODE_ENV === \"development\") return true;\n return [\n process.env.APP_URL,\n process.env.BETTER_AUTH_URL,\n process.env.URL,\n process.env.DEPLOY_URL,\n process.env.VERCEL_PROJECT_PRODUCTION_URL,\n process.env.VERCEL_URL,\n ].some(isLocalhostUrl);\n}\n\nfunction isServerlessRuntime(): boolean {\n return Boolean(\n process.env.NETLIFY ||\n process.env.VERCEL ||\n process.env.AWS_LAMBDA_FUNCTION_NAME ||\n process.env.AWS_EXECUTION_ENV ||\n process.env.LAMBDA_TASK_ROOT ||\n process.env.FUNCTION_NAME,\n );\n}\n\nfunction agentNativeAnalyticsFlushesImmediately(): boolean {\n const mode =\n process.env.AGENT_NATIVE_ANALYTICS_FLUSH_MODE?.trim().toLowerCase();\n if (mode === \"batch\") return false;\n if (mode === \"immediate\") return true;\n return isServerlessRuntime();\n}\n\n// ─── PostHog ───────────────────────────────────────────────────────────────\n\nfunction isPostHogAiObservabilityEvent(eventName: string): boolean {\n return eventName.startsWith(\"$ai_\");\n}\n\nfunction createPostHogProvider(apiKey: string, host: string): TrackingProvider {\n return {\n name: \"posthog\",\n track(event: TrackingEvent) {\n const distinctId = event.userId || \"anonymous\";\n if (isPostHogAiObservabilityEvent(event.name)) {\n enqueue(\n `${host}/i/v0/e/`,\n JSON.stringify({\n api_key: apiKey,\n event: event.name,\n properties: {\n distinct_id: distinctId,\n ...event.properties,\n timestamp: event.timestamp,\n },\n }),\n );\n return;\n }\n\n enqueue(\n `${host}/capture/`,\n JSON.stringify({\n api_key: apiKey,\n event: event.name,\n distinct_id: distinctId,\n properties: {\n ...event.properties,\n timestamp: event.timestamp,\n },\n }),\n );\n },\n identify(userId, traits) {\n enqueue(\n `${host}/capture/`,\n JSON.stringify({\n api_key: apiKey,\n event: \"$identify\",\n distinct_id: userId,\n properties: { $set: traits },\n }),\n );\n },\n flush: () => {\n return drainQueue().then(() => undefined);\n },\n };\n}\n\n// ─── Mixpanel ──────────────────────────────────────────────────────────────\n\nfunction createMixpanelProvider(token: string): TrackingProvider {\n return {\n name: \"mixpanel\",\n track(event: TrackingEvent) {\n const data = {\n event: event.name,\n properties: {\n token,\n distinct_id: event.userId || \"anonymous\",\n time: event.timestamp\n ? new Date(event.timestamp).getTime() / 1000\n : undefined,\n ...event.properties,\n },\n };\n enqueue(\"https://api.mixpanel.com/track\", JSON.stringify([data]));\n },\n identify(userId, traits) {\n const data = {\n $token: token,\n $distinct_id: userId,\n $set: traits,\n };\n enqueue(\"https://api.mixpanel.com/engage\", JSON.stringify([data]));\n },\n flush: () => {\n return drainQueue().then(() => undefined);\n },\n };\n}\n\n// ─── Amplitude ─────────────────────────────────────────────────────────────\n\nfunction createAmplitudeProvider(apiKey: string): TrackingProvider {\n return {\n name: \"amplitude\",\n track(event: TrackingEvent) {\n const data = {\n api_key: apiKey,\n events: [\n {\n event_type: event.name,\n user_id: event.userId || \"anonymous\",\n event_properties: event.properties,\n time: event.timestamp\n ? new Date(event.timestamp).getTime()\n : undefined,\n },\n ],\n };\n enqueue(\"https://api2.amplitude.com/2/httpapi\", JSON.stringify(data));\n },\n identify(userId, traits) {\n const data = {\n api_key: apiKey,\n events: [\n {\n event_type: \"$identify\",\n user_id: userId,\n user_properties: { $set: traits },\n },\n ],\n };\n enqueue(\"https://api2.amplitude.com/2/httpapi\", JSON.stringify(data));\n },\n flush: () => {\n return drainQueue().then(() => undefined);\n },\n };\n}\n\n// ─── Webhook (custom HTTP endpoint) ───────────────────────────────────────\n\nfunction createWebhookProvider(\n url: string,\n authHeader?: string,\n): TrackingProvider {\n const extra = authHeader ? { Authorization: authHeader } : undefined;\n return {\n name: \"webhook\",\n track(event: TrackingEvent) {\n enqueue(\n url,\n JSON.stringify({\n event: event.name,\n properties: event.properties,\n userId: event.userId,\n timestamp: event.timestamp,\n }),\n extra,\n );\n },\n identify(userId, traits) {\n enqueue(\n url,\n JSON.stringify({\n event: \"$identify\",\n userId,\n traits,\n timestamp: new Date().toISOString(),\n }),\n extra,\n );\n },\n flush: () => {\n return drainQueue().then(() => undefined);\n },\n };\n}\n\n// ─── Agent Native Analytics ───────────────────────────────────────────────\n\nfunction createAgentNativeAnalyticsProvider(\n publicKey: string,\n endpoint: string,\n): TrackingProvider {\n const flushImmediately = agentNativeAnalyticsFlushesImmediately();\n return {\n name: \"agent-native-analytics\",\n track(event: TrackingEvent) {\n enqueue(\n endpoint,\n JSON.stringify({\n publicKey,\n event: event.name,\n properties: event.properties ?? {},\n userId: event.userId,\n timestamp: event.timestamp,\n }),\n undefined,\n { flushImmediately },\n );\n },\n identify(userId, traits) {\n enqueue(\n endpoint,\n JSON.stringify({\n publicKey,\n event: \"$identify\",\n userId,\n properties: traits ?? {},\n timestamp: new Date().toISOString(),\n }),\n undefined,\n { flushImmediately },\n );\n },\n flush: () => {\n return drainQueue().then(() => undefined);\n },\n };\n}\n\n// ─── Auto-registration ────────────────────────────────────────────────────\n\nlet _registered = false;\n\nexport function registerBuiltinProviders(): void {\n if (_registered) return;\n _registered = true;\n\n const posthogKey = process.env.POSTHOG_API_KEY;\n if (posthogKey) {\n const host = (process.env.POSTHOG_HOST || POSTHOG_DEFAULT_HOST).replace(\n /\\/+$/,\n \"\",\n );\n registerTrackingProvider(createPostHogProvider(posthogKey, host));\n }\n\n const mixpanelToken = process.env.MIXPANEL_TOKEN;\n if (mixpanelToken) {\n registerTrackingProvider(createMixpanelProvider(mixpanelToken));\n }\n\n const amplitudeKey = process.env.AMPLITUDE_API_KEY;\n if (amplitudeKey) {\n registerTrackingProvider(createAmplitudeProvider(amplitudeKey));\n }\n\n const agentNativeAnalyticsKey =\n process.env.AGENT_NATIVE_ANALYTICS_PUBLIC_KEY ||\n process.env.VITE_AGENT_NATIVE_ANALYTICS_PUBLIC_KEY;\n if (\n agentNativeAnalyticsKey &&\n !shouldSkipAgentNativeAnalyticsForLocalhost()\n ) {\n registerTrackingProvider(\n createAgentNativeAnalyticsProvider(\n agentNativeAnalyticsKey,\n (\n process.env.AGENT_NATIVE_ANALYTICS_ENDPOINT ||\n AGENT_NATIVE_ANALYTICS_DEFAULT_ENDPOINT\n ).replace(/\\/+$/, \"\"),\n ),\n );\n }\n\n const webhookUrl = process.env.TRACKING_WEBHOOK_URL;\n if (webhookUrl) {\n registerTrackingProvider(\n createWebhookProvider(webhookUrl, process.env.TRACKING_WEBHOOK_AUTH),\n );\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tracking/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tracking/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAiB,MAAM,YAAY,CAAC;AAYlE,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAUzE;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAED,wBAAgB,KAAK,CACnB,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACzB,IAAI,CAuBN;AAED,wBAAgB,QAAQ,CACtB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,IAAI,CAYN;AAED,wBAAgB,aAAa,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAsB/C"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
import { getScopedGlobal } from "../shared/global-scope.js";
|
|
2
|
+
// globalThis-pinned so one app's ESM graphs share one provider registry, but
|
|
3
|
+
// scope-aware + lazily resolved so unified workspace deployments (all apps in
|
|
4
|
+
// one isolate) keep per-app tracking providers. See shared/global-scope.
|
|
2
5
|
function getRegistry() {
|
|
3
|
-
|
|
4
|
-
if (!g[REGISTRY_KEY])
|
|
5
|
-
g[REGISTRY_KEY] = new Map();
|
|
6
|
-
return g[REGISTRY_KEY];
|
|
6
|
+
return getScopedGlobal("agent-native.tracking.registry", () => new Map());
|
|
7
7
|
}
|
|
8
8
|
export function registerTrackingProvider(provider) {
|
|
9
9
|
if (!provider?.name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tracking/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tracking/registry.ts"],"names":[],"mappings":"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","sourcesContent":["import { getScopedGlobal } from \"../shared/global-scope.js\";\nimport type { TrackingProvider, TrackingEvent } from \"./types.js\";\n\n// globalThis-pinned so one app's ESM graphs share one provider registry, but\n// scope-aware + lazily resolved so unified workspace deployments (all apps in\n// one isolate) keep per-app tracking providers. See shared/global-scope.\nfunction getRegistry(): Map<string, TrackingProvider> {\n return getScopedGlobal(\n \"agent-native.tracking.registry\",\n () => new Map<string, TrackingProvider>(),\n );\n}\n\nexport function registerTrackingProvider(provider: TrackingProvider): void {\n if (!provider?.name) {\n throw new Error(\"registerTrackingProvider: provider.name is required\");\n }\n if (typeof provider.track !== \"function\") {\n throw new Error(\n \"registerTrackingProvider: provider.track must be a function\",\n );\n }\n getRegistry().set(provider.name, provider);\n}\n\nexport function unregisterTrackingProvider(name: string): boolean {\n return getRegistry().delete(name);\n}\n\nexport function listTrackingProviders(): string[] {\n return Array.from(getRegistry().keys());\n}\n\nexport function track(\n name: string,\n properties?: Record<string, unknown>,\n meta?: { userId?: string },\n): void {\n const event: TrackingEvent = {\n name,\n properties,\n timestamp: new Date().toISOString(),\n userId: meta?.userId,\n };\n\n for (const provider of getRegistry().values()) {\n try {\n const result = provider.track(event);\n if (result && typeof (result as Promise<void>).catch === \"function\") {\n (result as Promise<void>).catch((err) => {\n console.error(\n `[tracking] Provider \"${provider.name}\" rejected:`,\n err,\n );\n });\n }\n } catch (err) {\n console.error(`[tracking] Provider \"${provider.name}\" threw:`, err);\n }\n }\n}\n\nexport function identify(\n userId: string,\n traits?: Record<string, unknown>,\n): void {\n for (const provider of getRegistry().values()) {\n if (!provider.identify) continue;\n try {\n const result = provider.identify(userId, traits);\n if (result && typeof (result as Promise<void>).catch === \"function\") {\n (result as Promise<void>).catch(() => {});\n }\n } catch {\n // best-effort\n }\n }\n}\n\nexport function flushTracking(): Promise<void[]> {\n const promises: Promise<void>[] = [];\n for (const provider of getRegistry().values()) {\n if (!provider.flush) continue;\n try {\n const result = provider.flush();\n if (result) {\n promises.push(\n result.catch((err) => {\n console.error(\n `[tracking] Provider \"${provider.name}\" flush rejected:`,\n err,\n );\n }),\n );\n }\n } catch (err) {\n console.error(`[tracking] Provider \"${provider.name}\" flush threw:`, err);\n // best-effort\n }\n }\n return Promise.all(promises);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jami-studio/core",
|
|
3
|
-
"version": "0.92.
|
|
3
|
+
"version": "0.92.28",
|
|
4
4
|
"description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
|
|
5
5
|
"homepage": "https://github.com/studio-jami/jami-studio#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -97,6 +97,7 @@
|
|
|
97
97
|
"./embedding/react": "./dist/embedding/react.js",
|
|
98
98
|
"./onboarding": "./dist/onboarding/index.js",
|
|
99
99
|
"./shared": "./dist/shared/index.js",
|
|
100
|
+
"./global-scope": "./dist/shared/global-scope.js",
|
|
100
101
|
"./voice": "./dist/voice/index.js",
|
|
101
102
|
"./scripts": "./dist/scripts/index.js",
|
|
102
103
|
"./application-state": "./dist/application-state/index.js",
|