d25d482dc2
Publish CLI Package / publish-npm (push) Waiting to run
Publish Python SDK / publish-pypi (push) Waiting to run
Publish TypeScript SDK / publish-npm (push) Waiting to run
CI / Migrate Dev DB (push) Has been skipped
CI / Detect Version (push) Has been cancelled
CI / Migrate DB (push) Has been cancelled
CI / Build Dev ECR (./docker/app.Dockerfile, ECR_APP) (push) Has been cancelled
CI / Build Dev ECR (./docker/db.Dockerfile, ECR_MIGRATIONS) (push) Has been cancelled
CI / Build Dev ECR (./docker/pii.Dockerfile, ECR_PII) (push) Has been cancelled
CI / Build Dev ECR (./docker/realtime.Dockerfile, ECR_REALTIME) (push) Has been cancelled
CI / Deploy Trigger.dev (Dev) (push) Has been cancelled
CI / Build AMD64 (./docker/app.Dockerfile, ECR_APP, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build AMD64 (./docker/db.Dockerfile, ECR_MIGRATIONS, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build AMD64 (./docker/pii.Dockerfile, ECR_PII, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build AMD64 (./docker/realtime.Dockerfile, ECR_REALTIME, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/app.Dockerfile, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/db.Dockerfile, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/pii.Dockerfile, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/realtime.Dockerfile, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Check Docs Changes (push) Has been cancelled
CI / Process Docs (push) Has been cancelled
CI / Create GitHub Release (push) Has been cancelled
CI / Test and Build (push) Has been cancelled
47 lines
1.6 KiB
TypeScript
47 lines
1.6 KiB
TypeScript
import type { PostHog } from 'posthog-js'
|
|
import type { PostHogEventMap, PostHogEventName } from '@/lib/posthog/events'
|
|
|
|
/**
|
|
* Capture a client-side PostHog event from a non-React context (e.g. Zustand stores).
|
|
*
|
|
* Uses the same dynamic `import('posthog-js')` pattern as `session-provider.tsx`.
|
|
* Fully fire-and-forget — never throws, never blocks.
|
|
*
|
|
* React components should use {@link captureEvent} with the `posthog` instance from `usePostHog()`.
|
|
*
|
|
* @param event - Typed event name from {@link PostHogEventMap}.
|
|
* @param properties - Strongly-typed property bag for this event.
|
|
*/
|
|
export function captureClientEvent<E extends PostHogEventName>(
|
|
event: E,
|
|
properties: PostHogEventMap[E]
|
|
): void {
|
|
import('posthog-js')
|
|
.then(({ default: posthog }) => {
|
|
try {
|
|
if (typeof posthog.capture === 'function') {
|
|
posthog.capture(event, properties)
|
|
}
|
|
} catch {}
|
|
})
|
|
.catch(() => {})
|
|
}
|
|
|
|
/**
|
|
* Typed wrapper for `posthog.capture` in React components.
|
|
*
|
|
* Enforces event names and property shapes from {@link PostHogEventMap} at compile time,
|
|
* matching the type safety provided by `captureServerEvent` on the server side.
|
|
*
|
|
* @param posthog - PostHog instance from `usePostHog()`.
|
|
* @param event - Typed event name from {@link PostHogEventMap}.
|
|
* @param properties - Strongly-typed property bag for this event.
|
|
*/
|
|
export function captureEvent<E extends PostHogEventName>(
|
|
posthog: PostHog | null | undefined,
|
|
event: E,
|
|
properties: PostHogEventMap[E]
|
|
): void {
|
|
posthog?.capture(event, properties as Record<string, unknown>)
|
|
}
|