Skip to content

feat(node): metrics autocapture for HTTP, database and runtime metrics - #5149

Draft
DanielVisca wants to merge 6 commits into
mainfrom
posthog/node-metrics-autocapture
Draft

DanielVisca wants to merge 6 commits into
mainfrom
posthog/node-metrics-autocapture

Conversation

@DanielVisca

@DanielVisca DanielVisca commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

Problem

Metrics needs hand-written posthog.metrics.* calls today. We want metrics to be the easiest setup: install the SDK, set one flag, and get HTTP, database and runtime metrics.

Why: posthog-python#967 was closed because a hand-rolled HTTP wrapper duplicates OpenTelemetry instrumentation, and PostHog accepts OTLP directly. So this change starts the official OpenTelemetry instrumentations for you instead of writing new ones.

Changes

  • New opt-in metrics: { autocapture: true } (or { http, db, runtime } toggles). Off by default.
  • New entry node --import posthog-node/metrics/register app.js (reads POSTHOG_PROJECT_TOKEN, POSTHOG_HOST, OTEL_SERVICE_NAME). It starts before the app loads modules, and registers the ESM loader hook, so ESM apps are measured too.
  • Private meter and tracer providers. Nothing is set on the OpenTelemetry globals. If the app already has OpenTelemetry, autocapture warns and does not start.
  • DB: most drivers make only spans, so a span processor turns driver-level client spans (mysql, mysql2, mongodb, redis, ioredis, ...) into db.client.operation.duration. pg and oracledb record it natively and are not counted twice. Only bounded attributes; never the statement.
  • Requests to the PostHog host (the SDK's own uploads and the exporter) are not recorded. Exports stop while the client is disabled or opted out.
  • OpenTelemetry packages are optional peer dependencies. When missing, one warning prints the install command.
  • Resource has telemetry.distro.name=posthog-node so we can measure adoption.

Known gap: http.server.request.duration has no http.route yet (that needs a global context manager, which could clash with an app's own OpenTelemetry setup).

How I tested it

  • TDD: src/__tests__/metrics-autocapture.spec.ts (16 tests). Full posthog-node suite: 1117 passed. check-types, lint, format clean.
  • End to end against a local PostHog stack (hogli with the metrics intent): an ESM Express + pg + ioredis app started with --import posthog-node/metrics/register. In ClickHouse I saw http.server.request.duration, http.client.request.duration (fetch), db.client.operation.duration (pg native + ioredis derived), db.client.connection.* and 15 runtime metrics (nodejs.eventloop.*, v8js.*). No series for the PostHog host.
  • The first end-to-end run found three bugs the unit tests missed (undici ignored all requests, ioredis needs requireParentSpan: false, the runtime gauges were lost on shutdown). Each now has a test.

Release info Sub-libraries affected

Libraries affected

  • posthog-node

Checklist

  • Tests for new code
  • Accounted for the impact of any changes across different platforms (edge build does not load the new code; metrics.autocapture warns there)
  • Accounted for backwards compatibility of any changes (opt-in, off by default)
  • Took care not to unnecessarily increase the bundle size (OpenTelemetry is optional peers, loaded only when the flag is on)

If releasing new changes

  • Ran pnpm changeset to generate a changeset file

🤖 Agent context

Autonomy: Human-driven (agent-assisted)


Created with PostHog Desktop

🤖 Generated with Claude Code

@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

@greptile-apps

greptile-apps Bot commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

Retrigger

[High risk] Adds OpenTelemetry instrumentation and metrics export to the Node SDK.

The PR is not ready to merge because a trailing-slash host can misroute exports and signal termination loses the final metrics window.

Reviews (1) · Last reviewed commit: "feat(node): add metrics autocapture for ..."

Comment thread packages/node/src/extensions/metrics-autocapture.node.ts
Comment thread packages/node/src/entrypoints/metrics-register.node.ts
Comment thread packages/node/src/extensions/metrics-autocapture.node.ts
Comment thread packages/node/src/__tests__/metrics-autocapture.spec.ts
@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

Node SDK compliance v2

Commit: f063dce
Workflow run and artifacts

Capture v0 — acceptance

✅ 5 passed / ❌ 0 non-passing / ⚠️ 812 not selected

Drill-down: run artifacts → node-v2-v0 → acceptance/report.json.diagnostics.json (match case_id below).

Harness exit: 0; report validation exit: 0.

All selected cases passed and report validation succeeded.

Capture v1 — acceptance

✅ 5 passed / ❌ 0 non-passing / ⚠️ 812 not selected

Drill-down: run artifacts → node-v2-v1 → acceptance/report.json.diagnostics.json (match case_id below).

Harness exit: 0; report validation exit: 0.

All selected cases passed and report validation succeeded.

Capture v0 — migration

✅ 55 passed / ❌ 1 non-passing / ⚠️ 101 not selected

Drill-down: run artifacts → node-v2-v0 → reports/report.json.diagnostics.json (match case_id below).

❌ migration/yaml-parity-v1/remote-flags-v1.feature::Omitted GeoIP settings default to enabled in flag requests — failed_assertion

Flags field differs

Code: flag_request_field

Failed step: migration/yaml-parity-v1/remote-flags-v1.feature:134

the first flags request field "geoip_disable" should equal JSON false

Operation: /flags/

Field: geoip_disable

Expected:

false

Actual value:

true

Harness exit: 1; report validation exit: 1.

Capture v1 — migration

✅ 120 passed / ❌ 1 non-passing / ⚠️ 36 not selected

Drill-down: run artifacts → node-v2-v1 → reports/report.json.diagnostics.json (match case_id below).

❌ migration/yaml-parity-v1/remote-flags-v1.feature::Omitted GeoIP settings default to enabled in flag requests — failed_assertion

Flags field differs

Code: flag_request_field

Failed step: migration/yaml-parity-v1/remote-flags-v1.feature:134

the first flags request field "geoip_disable" should equal JSON false

Operation: /flags/

Field: geoip_disable

Expected:

false

Actual value:

true

Harness exit: 1; report validation exit: 1.

@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

Size Change: +35.9 kB (+0.15%)

Total Size: 24.1 MB

📦 View Changed
Filename Size Change
packages/node/dist/client.js 64.4 kB +971 B (+1.53%)
packages/node/dist/client.mjs 60.8 kB +945 B (+1.58%)
packages/node/dist/entrypoints/index.node.js 7.97 kB +1.52 kB (+23.56%) 🚨
packages/node/dist/entrypoints/index.node.mjs 2.78 kB +1 kB (+56.56%) 🆘
packages/node/dist/entrypoints/metrics-********.node.js 2.21 kB +2.21 kB (new file) 🆕
packages/node/dist/entrypoints/metrics-********.node.mjs 1.45 kB +1.45 kB (new file) 🆕
packages/node/dist/extensions/metrics-autocapture.node.js 15 kB +15 kB (new file) 🆕
packages/node/dist/extensions/metrics-autocapture.node.mjs 12.8 kB +12.8 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size
packages/ai/dist/adk/index.cjs 35.8 kB
packages/ai/dist/adk/index.mjs 35.6 kB
packages/ai/dist/anthropic/index.cjs 35.6 kB
packages/ai/dist/anthropic/index.mjs 34.2 kB
packages/ai/dist/claude-agent-sdk/index.cjs 42.4 kB
packages/ai/dist/claude-agent-sdk/index.mjs 42.1 kB
packages/ai/dist/gemini/index.cjs 36 kB
packages/ai/dist/gemini/index.mjs 35.7 kB
packages/ai/dist/index.cjs 57.9 kB
packages/ai/dist/index.mjs 57.7 kB
packages/ai/dist/langchain/index.cjs 37.5 kB
packages/ai/dist/langchain/index.mjs 37.3 kB
packages/ai/dist/langchain/middleware/index.cjs 43.6 kB
packages/ai/dist/langchain/middleware/index.mjs 43.2 kB
packages/ai/dist/openai-agents/index.cjs 30.7 kB
packages/ai/dist/openai-agents/index.mjs 30.6 kB
packages/ai/dist/openai/index.cjs 79 kB
packages/ai/dist/openai/index.mjs 78.4 kB
packages/ai/dist/otel/index.cjs 15.4 kB
packages/ai/dist/otel/index.mjs 15.2 kB
packages/ai/dist/vercel/index.cjs 41 kB
packages/ai/dist/vercel/index.mjs 40.9 kB
packages/browser-common/dist/client.js 585 B
packages/browser-common/dist/client.mjs 12 B
packages/browser-common/dist/config.js 1.52 kB
packages/browser-common/dist/config.mjs 216 B
packages/browser-common/dist/console-logs.js 13 kB
packages/browser-common/dist/console-logs.mjs 11.3 kB
packages/browser-common/dist/constants.js 6.09 kB
packages/browser-common/dist/constants.mjs 1.82 kB
packages/browser-common/dist/disposable.js 1.72 kB
packages/browser-common/dist/disposable.mjs 386 B
packages/browser-common/dist/extension-runtime.js 3.17 kB
packages/browser-common/dist/extension-runtime.mjs 1.83 kB
packages/browser-common/dist/extension-tokens.js 1.44 kB
packages/browser-common/dist/extension-tokens.mjs 98 B
packages/browser-common/dist/extension.js 585 B
packages/browser-common/dist/extension.mjs 12 B
packages/browser-common/dist/feature-flags-config.js 585 B
packages/browser-common/dist/feature-flags-config.mjs 12 B
packages/browser-common/dist/feature-flags.js 60.8 kB
packages/browser-common/dist/feature-flags.mjs 54.6 kB
packages/browser-common/dist/index.js 3.44 kB
packages/browser-common/dist/index.mjs 200 B
packages/browser-common/dist/logs-config.js 3.35 kB
packages/browser-common/dist/logs-config.mjs 1.99 kB
packages/browser-common/dist/logs-types.js 1.46 kB
packages/browser-common/dist/logs-types.mjs 133 B
packages/browser-common/dist/logs.js 20 kB
packages/browser-common/dist/logs.mjs 18.1 kB
packages/browser-common/dist/persistence.js 585 B
packages/browser-common/dist/persistence.mjs 12 B
packages/browser-common/dist/pubsub.js 2.63 kB
packages/browser-common/dist/pubsub.mjs 1.35 kB
packages/browser-common/dist/token.js 585 B
packages/browser-common/dist/token.mjs 12 B
packages/browser-common/dist/types/compression.js 1.37 kB
packages/browser-common/dist/types/compression.mjs 93 B
packages/browser-common/dist/types/feature-flags.js 585 B
packages/browser-common/dist/types/feature-flags.mjs 12 B
packages/browser-common/dist/types/index.js 4.16 kB
packages/browser-common/dist/types/index.mjs 181 B
packages/browser-common/dist/types/network-recording.js 585 B
packages/browser-common/dist/types/network-recording.mjs 12 B
packages/browser-common/dist/types/remote-config.js 585 B
packages/browser-common/dist/types/remote-config.mjs 12 B
packages/browser-common/dist/types/surveys.js 4.61 kB
packages/browser-common/dist/types/surveys.mjs 2.17 kB
packages/browser-common/dist/utils/array-at-********.js 619 B
packages/browser-common/dist/utils/array-at-********.mjs 437 B
packages/browser-common/dist/utils/array-find-last-********.js 604 B
packages/browser-common/dist/utils/array-find-last-********.mjs 422 B
packages/browser-common/dist/utils/autocapture-utils.js 26.5 kB
packages/browser-common/dist/utils/autocapture-utils.mjs 20.3 kB
packages/browser-common/dist/utils/blocked-uas.js 2.2 kB
packages/browser-common/dist/utils/blocked-uas.mjs 598 B
packages/browser-common/dist/utils/console-********.js 1.49 kB
packages/browser-common/dist/utils/console-********.mjs 171 B
packages/browser-common/dist/utils/cookie-utils.js 1.99 kB
packages/browser-common/dist/utils/cookie-utils.mjs 673 B
packages/browser-common/dist/utils/device-model-utils.js 2.08 kB
packages/browser-common/dist/utils/device-model-utils.mjs 678 B
packages/browser-common/dist/utils/element-utils.js 2.56 kB
packages/browser-common/dist/utils/element-utils.mjs 804 B
packages/browser-common/dist/utils/elements-chain-utils.js 2.86 kB
packages/browser-common/dist/utils/elements-chain-utils.mjs 1.23 kB
packages/browser-common/dist/utils/encode-utils.js 1.49 kB
packages/browser-common/dist/utils/encode-utils.mjs 205 B
packages/browser-common/dist/utils/event-utils.js 16 kB
packages/browser-common/dist/utils/event-utils.mjs 10.1 kB
packages/browser-common/dist/utils/general-utils.js 7.83 kB
packages/browser-common/dist/utils/general-utils.mjs 4.77 kB
packages/browser-common/dist/utils/globals.js 2.83 kB
packages/browser-common/dist/utils/globals.mjs 842 B
packages/browser-common/dist/utils/logger.js 3.41 kB
packages/browser-common/dist/utils/logger.mjs 1.62 kB
packages/browser-common/dist/utils/matcher-utils.js 2.94 kB
packages/browser-common/dist/utils/matcher-utils.mjs 1.33 kB
packages/browser-common/dist/utils/patch.js 2.94 kB
packages/browser-common/dist/utils/patch.mjs 1.62 kB
packages/browser-common/dist/utils/promise-utils.js 1.45 kB
packages/browser-common/dist/utils/promise-utils.mjs 169 B
packages/browser-common/dist/utils/property-utils.js 3.63 kB
packages/browser-common/dist/utils/property-utils.mjs 1.6 kB
packages/browser-common/dist/utils/prototype-utils.js 3.61 kB
packages/browser-common/dist/utils/prototype-utils.mjs 1.86 kB
packages/browser-common/dist/utils/regex-utils.js 1.55 kB
packages/browser-common/dist/utils/regex-utils.mjs 71 B
packages/browser-common/dist/utils/request-reachability.js 2.55 kB
packages/browser-common/dist/utils/request-reachability.mjs 996 B
packages/browser-common/dist/utils/request-utils.js 6.53 kB
packages/browser-common/dist/utils/request-utils.mjs 3.76 kB
packages/browser-common/dist/utils/sanitize-url.js 1.76 kB
packages/browser-common/dist/utils/sanitize-url.mjs 475 B
packages/browser-common/dist/utils/simple-event-emitter.js 1.86 kB
packages/browser-common/dist/utils/simple-event-emitter.mjs 553 B
packages/browser-common/dist/utils/stylesheet-loader.js 2.23 kB
packages/browser-common/dist/utils/stylesheet-loader.mjs 823 B
packages/browser-common/dist/utils/timezone.js 1.44 kB
packages/browser-common/dist/utils/timezone.mjs 163 B
packages/browser-common/dist/utils/type-utils.js 1.68 kB
packages/browser-common/dist/utils/type-utils.mjs 258 B
packages/browser-common/dist/utils/url-targeting-utils.js 2.45 kB
packages/browser-common/dist/utils/url-targeting-utils.mjs 863 B
packages/browser-common/dist/utils/uuidv7.js 6.98 kB
packages/browser-common/dist/utils/uuidv7.mjs 5.37 kB
packages/browser-next/dist/analytics-********.js 1.95 kB
packages/browser-next/dist/analytics-********.mjs 273 B
packages/browser-next/dist/analytics-buffer.js 5.72 kB
packages/browser-next/dist/analytics-buffer.mjs 4.07 kB
packages/browser-next/dist/analytics-options.js 585 B
packages/browser-next/dist/analytics-options.mjs 12 B
packages/browser-next/dist/analytics.js 1.67 kB
packages/browser-next/dist/analytics.mjs 259 B
packages/browser-next/dist/automatic-analytics.js 1.64 kB
packages/browser-next/dist/automatic-analytics.mjs 298 B
packages/browser-next/dist/bot-filter.js 2.38 kB
packages/browser-next/dist/bot-filter.mjs 1.09 kB
packages/browser-next/dist/browser-client.js 585 B
packages/browser-next/dist/browser-client.mjs 12 B
packages/browser-next/dist/capture-summary.js 2.14 kB
packages/browser-next/dist/capture-summary.mjs 647 B
packages/browser-next/dist/capture-v1.js 29.6 kB
packages/browser-next/dist/capture-v1.mjs 26.9 kB
packages/browser-next/dist/core.js 1.96 kB
packages/browser-next/dist/core.mjs 244 B
packages/browser-next/dist/event-buffer.js 5.32 kB
packages/browser-next/dist/event-buffer.mjs 4.04 kB
packages/browser-next/dist/extensions/registry.js 4.42 kB
packages/browser-next/dist/extensions/registry.mjs 3.12 kB
packages/browser-next/dist/flags-options.js 585 B
packages/browser-next/dist/flags-options.mjs 12 B
packages/browser-next/dist/flags-token.js 1.4 kB
packages/browser-next/dist/flags-token.mjs 80 B
packages/browser-next/dist/flags.js 6.22 kB
packages/browser-next/dist/flags.mjs 4.65 kB
packages/browser-next/dist/id.js 2.25 kB
packages/browser-next/dist/id.mjs 983 B
packages/browser-next/dist/index.js 4.37 kB
packages/browser-next/dist/index.mjs 2.42 kB
packages/browser-next/dist/lane.js 15.1 kB
packages/browser-next/dist/lane.mjs 13.8 kB
packages/browser-next/dist/logger.js 2.08 kB
packages/browser-next/dist/logger.mjs 742 B
packages/browser-next/dist/logs-********.js 585 B
packages/browser-next/dist/logs-********.mjs 12 B
packages/browser-next/dist/logs-options.js 1.84 kB
packages/browser-next/dist/logs-options.mjs 529 B
packages/browser-next/dist/logs.js 5.33 kB
packages/browser-next/dist/logs.mjs 3.83 kB
packages/browser-next/dist/named-error.js 1.57 kB
packages/browser-next/dist/named-error.mjs 271 B
packages/browser-next/dist/posthog.js 33.7 kB
packages/browser-next/dist/posthog.mjs 31.2 kB
packages/browser-next/dist/rate-limiter.js 2.89 kB
packages/browser-next/dist/rate-limiter.mjs 1.58 kB
packages/browser-next/dist/remote-config.js 1.85 kB
packages/browser-next/dist/remote-config.mjs 483 B
packages/browser-next/dist/request.js 4.99 kB
packages/browser-next/dist/request.mjs 3.58 kB
packages/browser-next/dist/state.js 24.9 kB
packages/browser-next/dist/state.mjs 23.1 kB
packages/browser-next/dist/types.js 585 B
packages/browser-next/dist/types.mjs 12 B
packages/browser-next/dist/version.js 1.31 kB
packages/browser-next/dist/version.mjs 45 B
packages/browser/dist/all-external-dependencies.js 384 kB
packages/browser/dist/array.full.es5.js 537 kB
packages/browser/dist/array.full.js 673 kB
packages/browser/dist/array.full.no-********.js 738 kB
packages/browser/dist/array.js 333 kB
packages/browser/dist/array.no-********.js 378 kB
packages/browser/dist/conversations.js 71 kB
packages/browser/dist/crisp-chat-integration.js 1.66 kB
packages/browser/dist/customizations.full.js 19.4 kB
packages/browser/dist/customizations.js 19 kB
packages/browser/dist/dead-clicks-autocapture.js 23.9 kB
packages/browser/dist/default-extensions.js 330 kB
packages/browser/dist/element-inference.js 5.28 kB
packages/browser/dist/exception-autocapture.js 17.9 kB
packages/browser/dist/extension-bundles.js 185 kB
packages/browser/dist/external-scripts-loader.js 3.28 kB
packages/browser/dist/intercom-integration.js 1.71 kB
packages/browser/dist/lazy-********.js 215 kB
packages/browser/dist/logs.js 7.21 kB
packages/browser/dist/main.js 337 kB
packages/browser/dist/module.full.cjs 677 kB
packages/browser/dist/module.full.js 677 kB
packages/browser/dist/module.full.no-********.cjs 743 kB
packages/browser/dist/module.full.no-********.js 742 kB
packages/browser/dist/module.js 336 kB
packages/browser/dist/module.mjs 336 kB
packages/browser/dist/module.no-********.cjs 382 kB
packages/browser/dist/module.no-********.js 381 kB
packages/browser/dist/module.slim.js 153 kB
packages/browser/dist/module.slim.no-********.js 168 kB
packages/browser/dist/posthog-********.js 215 kB
packages/browser/dist/product-tours-preview.js 78.3 kB
packages/browser/dist/product-tours.js 122 kB
packages/browser/dist/recorder-v2.js 135 kB
packages/browser/dist/recorder.js 135 kB
packages/browser/dist/rrweb-plugin-console-record.js 7.97 kB
packages/browser/dist/rrweb-types.js 2.41 kB
packages/browser/dist/rrweb.js 327 kB
packages/browser/dist/surveys-preview.js 78.3 kB
packages/browser/dist/surveys.js 102 kB
packages/browser/dist/tracing-headers.js 4.71 kB
packages/browser/dist/web-vitals-soft-navs.js 11.1 kB
packages/browser/dist/web-vitals-with-attribution-soft-navs.js 27 kB
packages/browser/dist/web-vitals-with-attribution.js 27 kB
packages/browser/dist/web-vitals.js 11 kB
packages/browser/react/dist/esm/index.js 23.3 kB
packages/browser/react/dist/esm/slim/index.js 19.5 kB
packages/browser/react/dist/esm/surveys/index.js 4.22 kB
packages/browser/react/dist/umd/index.js 27.8 kB
packages/browser/react/dist/umd/slim/index.js 23.5 kB
packages/browser/react/dist/umd/surveys/index.js 6.33 kB
packages/convex/dist/client/feature-flags/crypto.js 76 B
packages/convex/dist/client/feature-flags/evaluator.js 15.1 kB
packages/convex/dist/client/feature-flags/index.js 196 B
packages/convex/dist/client/feature-flags/match-********.js 5.3 kB
packages/convex/dist/client/feature-flags/types.js 44 B
packages/convex/dist/client/index.js 14.8 kB
packages/convex/dist/component/_generated/api.js 712 B
packages/convex/dist/component/_generated/component.js 212 B
packages/convex/dist/component/_generated/dataModel.js 230 B
packages/convex/dist/component/_generated/server.js 3.74 kB
packages/convex/dist/component/convex.config.js 1.66 kB
packages/convex/dist/component/crons.js 969 B
packages/convex/dist/component/lib.js 24.9 kB
packages/convex/dist/component/schema.js 1.17 kB
packages/convex/dist/component/version.js 67 B
packages/core/dist/cookie.js 5.44 kB
packages/core/dist/cookie.mjs 3.12 kB
packages/core/dist/error-tracking/chunk-ids.js 3.44 kB
packages/core/dist/error-tracking/chunk-ids.mjs 2.11 kB
packages/core/dist/error-tracking/coercers/dom-exception-coercer.js 2.4 kB
packages/core/dist/error-tracking/coercers/dom-exception-coercer.mjs 993 B
packages/core/dist/error-tracking/coercers/error-coercer.js 2.58 kB
packages/core/dist/error-tracking/coercers/error-coercer.mjs 1.24 kB
packages/core/dist/error-tracking/coercers/error-event-coercer.js 2.45 kB
packages/core/dist/error-tracking/coercers/error-event-coercer.mjs 1.05 kB
packages/core/dist/error-tracking/coercers/event-coercer.js 1.92 kB
packages/core/dist/error-tracking/coercers/event-coercer.mjs 548 B
packages/core/dist/error-tracking/coercers/index.js 5.82 kB
packages/core/dist/error-tracking/coercers/index.mjs 326 B
packages/core/dist/error-tracking/coercers/object-coercer.js 4.13 kB
packages/core/dist/error-tracking/coercers/object-coercer.mjs 2.53 kB
packages/core/dist/error-tracking/coercers/primitive-coercer.js 1.76 kB
packages/core/dist/error-tracking/coercers/primitive-coercer.mjs 419 B
packages/core/dist/error-tracking/coercers/promise-rejection-event.js 2.69 kB
packages/core/dist/error-tracking/coercers/promise-rejection-event.mjs 1.25 kB
packages/core/dist/error-tracking/coercers/string-coercer.js 2.11 kB
packages/core/dist/error-tracking/coercers/string-coercer.mjs 820 B
packages/core/dist/error-tracking/coercers/utils.js 2.16 kB
packages/core/dist/error-tracking/coercers/utils.mjs 716 B
packages/core/dist/error-tracking/error-properties-builder.js 10.1 kB
packages/core/dist/error-tracking/error-properties-builder.mjs 8.58 kB
packages/core/dist/error-tracking/exception-steps.js 6.1 kB
packages/core/dist/error-tracking/exception-steps.mjs 3.83 kB
packages/core/dist/error-tracking/index.js 4.62 kB
packages/core/dist/error-tracking/index.mjs 222 B
packages/core/dist/error-tracking/parsers/base.js 2.43 kB
packages/core/dist/error-tracking/parsers/base.mjs 961 B
packages/core/dist/error-tracking/parsers/chrome.js 2.83 kB
packages/core/dist/error-tracking/parsers/chrome.mjs 1.32 kB
packages/core/dist/error-tracking/parsers/gecko.js 2.57 kB
packages/core/dist/error-tracking/parsers/gecko.mjs 1.13 kB
packages/core/dist/error-tracking/parsers/index.js 8.87 kB
packages/core/dist/error-tracking/parsers/index.mjs 6.03 kB
packages/core/dist/error-tracking/parsers/node.js 4.31 kB
packages/core/dist/error-tracking/parsers/node.mjs 2.95 kB
packages/core/dist/error-tracking/parsers/opera.js 2.35 kB
packages/core/dist/error-tracking/parsers/opera.mjs 746 B
packages/core/dist/error-tracking/parsers/safari.js 1.98 kB
packages/core/dist/error-tracking/parsers/safari.mjs 574 B
packages/core/dist/error-tracking/parsers/winjs.js 1.82 kB
packages/core/dist/error-tracking/parsers/winjs.mjs 426 B
packages/core/dist/error-tracking/release.js 1.68 kB
packages/core/dist/error-tracking/release.mjs 366 B
packages/core/dist/error-tracking/types.js 1.42 kB
packages/core/dist/error-tracking/types.mjs 131 B
packages/core/dist/error-tracking/utils.js 1.9 kB
packages/core/dist/error-tracking/utils.mjs 604 B
packages/core/dist/eventemitter.js 1.88 kB
packages/core/dist/eventemitter.mjs 571 B
packages/core/dist/featureFlagLocalEvaluation.js 23.2 kB
packages/core/dist/featureFlagLocalEvaluation.mjs 20.5 kB
packages/core/dist/featureFlagUtils.js 8.6 kB
packages/core/dist/featureFlagUtils.mjs 5.51 kB
packages/core/dist/gzip.js 5.88 kB
packages/core/dist/gzip.mjs 3.87 kB
packages/core/dist/index.js 27.3 kB
packages/core/dist/index.mjs 1.98 kB
packages/core/dist/logs/index.js 11.8 kB
packages/core/dist/logs/index.mjs 9.83 kB
packages/core/dist/logs/logs-utils.js 6.7 kB
packages/core/dist/logs/logs-utils.mjs 4.54 kB
packages/core/dist/logs/types.js 585 B
packages/core/dist/logs/types.mjs 12 B
packages/core/dist/metrics/config.js 2.05 kB
packages/core/dist/metrics/config.mjs 735 B
packages/core/dist/metrics/index.js 15.7 kB
packages/core/dist/metrics/index.mjs 12.9 kB
packages/core/dist/metrics/metrics-utils.js 3.67 kB
packages/core/dist/metrics/metrics-utils.mjs 1.68 kB
packages/core/dist/metrics/types.js 585 B
packages/core/dist/metrics/types.mjs 12 B
packages/core/dist/posthog-core-stateless.js 49.1 kB
packages/core/dist/posthog-core-stateless.mjs 45.7 kB
packages/core/dist/posthog-core.js 49.6 kB
packages/core/dist/posthog-core.mjs 43.9 kB
packages/core/dist/privacy.js 15.6 kB
packages/core/dist/privacy.mjs 13.9 kB
packages/core/dist/surveys/activation.js 2.29 kB
packages/core/dist/surveys/activation.mjs 572 B
packages/core/dist/surveys/events.js 5.82 kB
packages/core/dist/surveys/events.mjs 3.14 kB
packages/core/dist/surveys/index.js 7.48 kB
packages/core/dist/surveys/index.mjs 921 B
packages/core/dist/surveys/keys.js 1.8 kB
packages/core/dist/surveys/keys.mjs 350 B
packages/core/dist/surveys/property-********.js 3.8 kB
packages/core/dist/surveys/property-********.mjs 2.15 kB
packages/core/dist/surveys/shuffling.js 2.53 kB
packages/core/dist/surveys/shuffling.mjs 1.07 kB
packages/core/dist/surveys/translations.js 9.18 kB
packages/core/dist/surveys/translations.mjs 6.83 kB
packages/core/dist/surveys/validation.js 3.15 kB
packages/core/dist/surveys/validation.mjs 1.51 kB
packages/core/dist/testing/index.js 2.76 kB
packages/core/dist/testing/index.mjs 79 B
packages/core/dist/testing/PostHogCoreTestClient.js 3.33 kB
packages/core/dist/testing/PostHogCoreTestClient.mjs 1.82 kB
packages/core/dist/testing/test-utils.js 2.9 kB
packages/core/dist/testing/test-utils.mjs 1.11 kB
packages/core/dist/traces/config.js 4.62 kB
packages/core/dist/traces/config.mjs 3.27 kB
packages/core/dist/traces/context.js 1.64 kB
packages/core/dist/traces/context.mjs 318 B
packages/core/dist/traces/ids.js 3.2 kB
packages/core/dist/traces/ids.mjs 1.52 kB
packages/core/dist/traces/index.js 26.7 kB
packages/core/dist/traces/index.mjs 24 kB
packages/core/dist/traces/otlp.js 6.33 kB
packages/core/dist/traces/otlp.mjs 4.14 kB
packages/core/dist/traces/sanitize.js 3.59 kB
packages/core/dist/traces/sanitize.mjs 1.88 kB
packages/core/dist/traces/span.js 20 kB
packages/core/dist/traces/span.mjs 16.7 kB
packages/core/dist/traces/traceparent.js 4.54 kB
packages/core/dist/traces/traceparent.mjs 2.54 kB
packages/core/dist/traces/types.js 585 B
packages/core/dist/traces/types.mjs 12 B
packages/core/dist/tracing-headers.js 3.48 kB
packages/core/dist/tracing-headers.mjs 2.08 kB
packages/core/dist/types.js 8.47 kB
packages/core/dist/types.mjs 5.3 kB
packages/core/dist/utils/backoff.js 2.36 kB
packages/core/dist/utils/backoff.mjs 611 B
packages/core/dist/utils/bot-detection.js 4.17 kB
packages/core/dist/utils/bot-detection.mjs 2.58 kB
packages/core/dist/utils/browser-utils.js 1.57 kB
packages/core/dist/utils/browser-utils.mjs 182 B
packages/core/dist/utils/bucketed-rate-limiter.js 4.32 kB
packages/core/dist/utils/bucketed-rate-limiter.mjs 2.22 kB
packages/core/dist/utils/flush-timer.js 2.06 kB
packages/core/dist/utils/flush-timer.mjs 725 B
packages/core/dist/utils/index.js 17.8 kB
packages/core/dist/utils/index.mjs 3.69 kB
packages/core/dist/utils/json-utils.js 7.44 kB
packages/core/dist/utils/json-utils.mjs 5.02 kB
packages/core/dist/utils/logger.js 2.68 kB
packages/core/dist/utils/logger.mjs 1.29 kB
packages/core/dist/utils/number-utils.js 3.42 kB
packages/core/dist/utils/number-utils.mjs 1.68 kB
packages/core/dist/utils/otlp-********.js 3.94 kB
packages/core/dist/utils/otlp-********.mjs 1.97 kB
packages/core/dist/utils/otlp-any-value.js 7.96 kB
packages/core/dist/utils/otlp-any-value.mjs 5.77 kB
packages/core/dist/utils/promise-queue.js 2.58 kB
packages/core/dist/utils/promise-queue.mjs 1.25 kB
packages/core/dist/utils/retry-after.js 3.5 kB
packages/core/dist/utils/retry-after.mjs 1.96 kB
packages/core/dist/utils/string-utils.js 3.83 kB
packages/core/dist/utils/string-utils.mjs 1.97 kB
packages/core/dist/utils/type-utils.js 7.52 kB
packages/core/dist/utils/type-utils.mjs 3.27 kB
packages/core/dist/utils/user-agent-utils.js 18.5 kB
packages/core/dist/utils/user-agent-utils.mjs 14.7 kB
packages/core/dist/utils/webview-app-utils.js 3.54 kB
packages/core/dist/utils/webview-app-utils.mjs 2.23 kB
packages/core/dist/vendor/uuidv7.js 8.36 kB
packages/core/dist/vendor/uuidv7.mjs 6.7 kB
packages/mcp/dist/extensions/analytics-parameters.js 6.63 kB
packages/mcp/dist/extensions/analytics-parameters.mjs 4.27 kB
packages/mcp/dist/extensions/capture.js 4.11 kB
packages/mcp/dist/extensions/capture.mjs 2.65 kB
packages/mcp/dist/extensions/client-********.js 6.33 kB
packages/mcp/dist/extensions/client-********.mjs 3.71 kB
packages/mcp/dist/extensions/compatibility.js 5.45 kB
packages/mcp/dist/extensions/compatibility.mjs 3.4 kB
packages/mcp/dist/extensions/constants.js 6.33 kB
packages/mcp/dist/extensions/constants.mjs 3.83 kB
packages/mcp/dist/extensions/context-parameters.js 2.85 kB
packages/mcp/dist/extensions/context-parameters.mjs 893 B
packages/mcp/dist/extensions/conversation-id.js 6.41 kB
packages/mcp/dist/extensions/conversation-id.mjs 3.58 kB
packages/mcp/dist/extensions/detect.js 3.87 kB
packages/mcp/dist/extensions/detect.mjs 1.49 kB
packages/mcp/dist/extensions/event-types.js 1.81 kB
packages/mcp/dist/extensions/event-types.mjs 492 B
packages/mcp/dist/extensions/exceptions.js 2.67 kB
packages/mcp/dist/extensions/exceptions.mjs 1.19 kB
packages/mcp/dist/extensions/feedback.js 12.4 kB
packages/mcp/dist/extensions/feedback.mjs 9.48 kB
packages/mcp/dist/extensions/headers.js 2.08 kB
packages/mcp/dist/extensions/headers.mjs 643 B
packages/mcp/dist/extensions/ids.js 2.11 kB
packages/mcp/dist/extensions/ids.mjs 637 B
packages/mcp/dist/extensions/instrument-********.js 7.98 kB
packages/mcp/dist/extensions/instrument-********.mjs 5.43 kB
packages/mcp/dist/extensions/instrument-highlevel.js 15 kB
packages/mcp/dist/extensions/instrument-highlevel.mjs 11.8 kB
packages/mcp/dist/extensions/instrumentation.js 36.4 kB
packages/mcp/dist/extensions/instrumentation.mjs 29.5 kB
packages/mcp/dist/extensions/intent.js 3.3 kB
packages/mcp/dist/extensions/intent.mjs 1.64 kB
packages/mcp/dist/extensions/internal.js 7.8 kB
packages/mcp/dist/extensions/internal.mjs 5.3 kB
packages/mcp/dist/extensions/lib-********.js 1.7 kB
packages/mcp/dist/extensions/lib-********.mjs 267 B
packages/mcp/dist/extensions/logger.js 1.81 kB
packages/mcp/dist/extensions/logger.mjs 380 B
packages/mcp/dist/extensions/mcp-********.js 3.96 kB
packages/mcp/dist/extensions/mcp-********.mjs 2.24 kB
packages/mcp/dist/extensions/mcp-sdk-compat.js 5.86 kB
packages/mcp/dist/extensions/mcp-sdk-compat.mjs 3.5 kB
packages/mcp/dist/extensions/model-parameters.js 4.59 kB
packages/mcp/dist/extensions/model-parameters.mjs 2.32 kB
packages/mcp/dist/extensions/output-instructions.js 6.21 kB
packages/mcp/dist/extensions/output-instructions.mjs 3.91 kB
packages/mcp/dist/extensions/posthog-events.js 12.4 kB
packages/mcp/dist/extensions/posthog-events.mjs 8.42 kB
packages/mcp/dist/extensions/posthog-mcp.js 16.8 kB
packages/mcp/dist/extensions/posthog-mcp.mjs 13.5 kB
packages/mcp/dist/extensions/request-headers.js 2.27 kB
packages/mcp/dist/extensions/request-headers.mjs 963 B
packages/mcp/dist/extensions/sanitization.js 4.56 kB
packages/mcp/dist/extensions/sanitization.mjs 2.77 kB
packages/mcp/dist/extensions/server-build.js 1.94 kB
packages/mcp/dist/extensions/server-build.mjs 482 B
packages/mcp/dist/extensions/session-token.js 5.47 kB
packages/mcp/dist/extensions/session-token.mjs 3.6 kB
packages/mcp/dist/extensions/session.js 6.79 kB
packages/mcp/dist/extensions/session.mjs 4.16 kB
packages/mcp/dist/extensions/sink.js 4.47 kB
packages/mcp/dist/extensions/sink.mjs 2.67 kB
packages/mcp/dist/extensions/tool-input.js 4.82 kB
packages/mcp/dist/extensions/tool-input.mjs 3.27 kB
packages/mcp/dist/extensions/tools.js 3.61 kB
packages/mcp/dist/extensions/tools.mjs 1.63 kB
packages/mcp/dist/extensions/tracing-helpers.js 2.51 kB
packages/mcp/dist/extensions/tracing-helpers.mjs 772 B
packages/mcp/dist/extensions/transport-********.js 3 kB
packages/mcp/dist/extensions/transport-********.mjs 1.09 kB
packages/mcp/dist/extensions/truncation.js 11.9 kB
packages/mcp/dist/extensions/truncation.mjs 9.99 kB
packages/mcp/dist/index.js 10.2 kB
packages/mcp/dist/index.mjs 5.48 kB
packages/mcp/dist/types.js 585 B
packages/mcp/dist/types.mjs 12 B
packages/mcp/dist/version.js 1.31 kB
packages/mcp/dist/version.mjs 46 B
packages/next/dist/app/PostHogProvider.js 5.37 kB
packages/next/dist/client/ClientPostHogProvider.js 2.28 kB
packages/next/dist/client/hooks.js 172 B
packages/next/dist/client/PostHogPageView.js 4.23 kB
packages/next/dist/index.client.js 401 B
packages/next/dist/index.edge.js 570 B
packages/next/dist/index.js 554 B
packages/next/dist/index.react-server.js 420 B
packages/next/dist/middleware/postHogMiddleware.js 4.08 kB
packages/next/dist/pages.client.js 225 B
packages/next/dist/pages.edge.js 294 B
packages/next/dist/pages.js 347 B
packages/next/dist/pages/createPostHog.js 1.48 kB
packages/next/dist/pages/getServerSidePostHog.js 1.48 kB
packages/next/dist/pages/PostHogPageView.js 1.77 kB
packages/next/dist/pages/PostHogProvider.js 1.58 kB
packages/next/dist/server.edge.js 795 B
packages/next/dist/server/captureRequestError.js 5.26 kB
packages/next/dist/server/clientCache.edge.js 305 B
packages/next/dist/server/clientCache.js 1.53 kB
packages/next/dist/server/clientCache.node.js 305 B
packages/next/dist/server/createPostHog.js 1.44 kB
packages/next/dist/server/getPostHog.js 3.45 kB
packages/next/dist/server/onRequestError.js 1.39 kB
packages/next/dist/server/onRequestError.types.js 59 B
packages/next/dist/shared/browser.js 195 B
packages/next/dist/shared/config.js 2.23 kB
packages/next/dist/shared/constants.js 201 B
packages/next/dist/shared/cookie.js 540 B
packages/next/dist/shared/identity.js 2.56 kB
packages/next/dist/shared/tracing-headers.js 2.18 kB
packages/nextjs-config/dist/config.js 13.2 kB
packages/nextjs-config/dist/config.mjs 11.6 kB
packages/nextjs-config/dist/index.js 2.21 kB
packages/nextjs-config/dist/index.mjs 30 B
packages/nextjs-config/dist/strip-sourcemap-********.js 5.46 kB
packages/nextjs-config/dist/strip-sourcemap-********.mjs 3.37 kB
packages/nextjs-config/dist/utils.js 4.58 kB
packages/nextjs-config/dist/utils.mjs 2.1 kB
packages/node/dist/ai-capture/batching.js 2.71 kB
packages/node/dist/ai-capture/batching.mjs 1.21 kB
packages/node/dist/ai-capture/routing.js 1.96 kB
packages/node/dist/ai-capture/routing.mjs 264 B
packages/node/dist/capture-v1/config.js 1.59 kB
packages/node/dist/capture-v1/config.mjs 283 B
packages/node/dist/capture-v1/errors.js 1.99 kB
packages/node/dist/capture-v1/errors.mjs 694 B
packages/node/dist/capture-v1/routing.js 1.77 kB
packages/node/dist/capture-v1/routing.mjs 279 B
packages/node/dist/capture-v1/sender.js 11.5 kB
packages/node/dist/capture-v1/sender.mjs 9.94 kB
packages/node/dist/capture-v1/transform.js 5.22 kB
packages/node/dist/capture-v1/transform.mjs 3.65 kB
packages/node/dist/capture-v1/types.js 585 B
packages/node/dist/capture-v1/types.mjs 12 B
packages/node/dist/entrypoints/index.edge.js 3.66 kB
packages/node/dist/entrypoints/index.edge.mjs 720 B
packages/node/dist/entrypoints/nestjs.js 2.27 kB
packages/node/dist/entrypoints/nestjs.mjs 42 B
packages/node/dist/experimental.js 852 B
packages/node/dist/experimental.mjs 279 B
packages/node/dist/exports.js 6.3 kB
packages/node/dist/exports.mjs 388 B
packages/node/dist/extensions/context/context.js 2.22 kB
packages/node/dist/extensions/context/context.mjs 863 B
packages/node/dist/extensions/context/span-context.node.js 1.8 kB
packages/node/dist/extensions/context/span-context.node.mjs 355 B
packages/node/dist/extensions/context/types.js 585 B
packages/node/dist/extensions/context/types.mjs 12 B
packages/node/dist/extensions/error-tracking/autocapture.js 5.29 kB
packages/node/dist/extensions/error-tracking/autocapture.mjs 3.62 kB
packages/node/dist/extensions/error-tracking/index.js 4.48 kB
packages/node/dist/extensions/error-tracking/index.mjs 3.17 kB
packages/node/dist/extensions/error-tracking/modifiers/context-lines.node.js 11.7 kB
packages/node/dist/extensions/error-tracking/modifiers/context-lines.node.mjs 9.64 kB
packages/node/dist/extensions/error-tracking/modifiers/module.node.js 2.87 kB
packages/node/dist/extensions/error-tracking/modifiers/module.node.mjs 1.45 kB
packages/node/dist/extensions/error-tracking/modifiers/relative-path.node.js 2.07 kB
packages/node/dist/extensions/error-tracking/modifiers/relative-path.node.mjs 624 B
packages/node/dist/extensions/express.js 5.97 kB
packages/node/dist/extensions/express.mjs 3.69 kB
packages/node/dist/extensions/feature-flags/cache.js 585 B
packages/node/dist/extensions/feature-flags/cache.mjs 12 B
packages/node/dist/extensions/feature-flags/crypto.js 1.37 kB
packages/node/dist/extensions/feature-flags/crypto.mjs 42 B
packages/node/dist/extensions/feature-flags/feature-flags.js 35.2 kB
packages/node/dist/extensions/feature-flags/feature-flags.mjs 32.7 kB
packages/node/dist/extensions/nestjs.js 5.71 kB
packages/node/dist/extensions/nestjs.mjs 3.42 kB
packages/node/dist/extensions/sentry-integration.js 4.99 kB
packages/node/dist/extensions/sentry-integration.mjs 3.37 kB
packages/node/dist/extensions/tracing-headers.js 3.41 kB
packages/node/dist/extensions/tracing-headers.mjs 1.53 kB
packages/node/dist/extensions/url-utils.js 2.32 kB
packages/node/dist/extensions/url-utils.mjs 785 B
packages/node/dist/feature-flag-evaluations.js 6.22 kB
packages/node/dist/feature-flag-evaluations.mjs 4.77 kB
packages/node/dist/gzip.node.js 1.83 kB
packages/node/dist/gzip.node.mjs 416 B
packages/node/dist/host-os.node.js 1.8 kB
packages/node/dist/host-os.node.mjs 349 B
packages/node/dist/storage-memory.js 1.61 kB
packages/node/dist/storage-memory.mjs 297 B
packages/node/dist/types.js 1.52 kB
packages/node/dist/types.mjs 224 B
packages/node/dist/version.js 1.31 kB
packages/node/dist/version.mjs 46 B
packages/nuxt/dist/module.mjs 6.13 kB
packages/nuxt/dist/runtime/composables/useFeatureFlagEnabled.js 566 B
packages/nuxt/dist/runtime/composables/useFeatureFlagPayload.js 690 B
packages/nuxt/dist/runtime/composables/useFeatureFlagVariantKey.js 591 B
packages/nuxt/dist/runtime/composables/usePostHog.js 128 B
packages/nuxt/dist/runtime/nitro-plugin-v2.js 480 B
packages/nuxt/dist/runtime/nitro-plugin-v3.js 556 B
packages/nuxt/dist/runtime/nitro-plugin.js 1.32 kB
packages/nuxt/dist/runtime/vue-plugin.js 1.13 kB
packages/openfeature-node-provider/dist/index.js 1.86 kB
packages/openfeature-node-provider/dist/index.mjs 122 B
packages/openfeature-node-provider/dist/mapping.js 5.66 kB
packages/openfeature-node-provider/dist/mapping.mjs 3.5 kB
packages/openfeature-node-provider/dist/provider.js 4.09 kB
packages/openfeature-node-provider/dist/provider.mjs 2.6 kB
packages/openfeature-web-provider/dist/index.js 1.84 kB
packages/openfeature-web-provider/dist/index.mjs 119 B
packages/openfeature-web-provider/dist/mapping.js 5.38 kB
packages/openfeature-web-provider/dist/mapping.mjs 3.18 kB
packages/openfeature-web-provider/dist/provider.js 4.51 kB
packages/openfeature-web-provider/dist/provider.mjs 3.06 kB
packages/plugin-utils/dist/chunk-ids.js 3.96 kB
packages/plugin-utils/dist/chunk-ids.mjs 2.11 kB
packages/plugin-utils/dist/cli.js 4.47 kB
packages/plugin-utils/dist/cli.mjs 2.72 kB
packages/plugin-utils/dist/config.js 3.6 kB
packages/plugin-utils/dist/config.mjs 2.25 kB
packages/plugin-utils/dist/index.js 4.5 kB
packages/plugin-utils/dist/index.mjs 197 B
packages/plugin-utils/dist/spawn-local.js 3.17 kB
packages/plugin-utils/dist/spawn-local.mjs 1.66 kB
packages/plugin-utils/dist/utils.js 3.36 kB
packages/plugin-utils/dist/utils.mjs 1.3 kB
packages/react-native/dist/autocapture.js 8.35 kB
packages/react-native/dist/error-tracking/exception-context.js 2.25 kB
packages/react-native/dist/error-tracking/fatal-payload.js 6.58 kB
packages/react-native/dist/error-tracking/index.js 14.3 kB
packages/react-native/dist/error-tracking/utils.js 4.05 kB
packages/react-native/dist/frameworks/wix-navigation.js 1.35 kB
packages/react-native/dist/hooks/useFeatureFlag.js 1.9 kB
packages/react-native/dist/hooks/useFeatureFlagResult.js 1.03 kB
packages/react-native/dist/hooks/useFeatureFlags.js 985 B
packages/react-native/dist/hooks/useNavigationTracker.js 2.31 kB
packages/react-native/dist/hooks/usePostHog.js 583 B
packages/react-native/dist/hooks/utils.js 1.02 kB
packages/react-native/dist/index.js 4.36 kB
packages/react-native/dist/logs-********.js 3.71 kB
packages/react-native/dist/native-deps.js 8.77 kB
packages/react-native/dist/optional/OptionalAsyncStorage.js 348 B
packages/react-native/dist/optional/OptionalExpoApplication.js 429 B
packages/react-native/dist/optional/OptionalExpoDevice.js 394 B
packages/react-native/dist/optional/OptionalExpoFileSystem.js 437 B
packages/react-native/dist/optional/OptionalExpoFileSystemLegacy.js 480 B
packages/react-native/dist/optional/OptionalExpoLocalization.js 436 B
packages/react-native/dist/optional/OptionalExpoUpdates.js 382 B
packages/react-native/dist/optional/OptionalPlugin.js 1.36 kB
packages/react-native/dist/optional/OptionalReactNativeDeviceInfo.js 473 B
packages/react-native/dist/optional/OptionalReactNativeLocalize.js 359 B
packages/react-native/dist/optional/OptionalReactNativeNavigation.js 473 B
packages/react-native/dist/optional/OptionalReactNativeNavigationWix.js 504 B
packages/react-native/dist/optional/OptionalReactNativeSafeArea.js 700 B
packages/react-native/dist/optional/OptionalReactNativeSvg.js 923 B
packages/react-native/dist/posthog-rn.js 80.6 kB
packages/react-native/dist/PostHogContext.js 372 B
packages/react-native/dist/PostHogErrorBoundary.js 3.98 kB
packages/react-native/dist/PostHogMaskView.js 1.72 kB
packages/react-native/dist/PostHogProvider.js 6.04 kB
packages/react-native/dist/storage.js 6.85 kB
packages/react-native/dist/surveys/components/BottomSection.js 1.69 kB
packages/react-native/dist/surveys/components/Cancel.js 1.19 kB
packages/react-native/dist/surveys/components/ConfirmationMessage.js 1.98 kB
packages/react-native/dist/surveys/components/IntroMessage.js 1.87 kB
packages/react-native/dist/surveys/components/QuestionHeader.js 1.69 kB
packages/react-native/dist/surveys/components/QuestionTypes.js 16.1 kB
packages/react-native/dist/surveys/components/SurveyModal.js 7.8 kB
packages/react-native/dist/surveys/components/Surveys.js 8.7 kB
packages/react-native/dist/surveys/getActiveMatchingSurveys.js 2.99 kB
packages/react-native/dist/surveys/icons.js 10.1 kB
packages/react-native/dist/surveys/index.js 634 B
packages/react-native/dist/surveys/PostHogSurveyProvider.js 10.3 kB
packages/react-native/dist/surveys/safeStyleSheet.js 491 B
packages/react-native/dist/surveys/survey-********.js 7.78 kB
packages/react-native/dist/surveys/survey-shuffling.js 2.38 kB
packages/react-native/dist/surveys/survey-translations.js 1.22 kB
packages/react-native/dist/surveys/surveys-utils.js 11.6 kB
packages/react-native/dist/surveys/useActivatedSurveys.js 3.89 kB
packages/react-native/dist/surveys/useSurveyStorage.js 3.07 kB
packages/react-native/dist/tooling/expoconfig.js 39.6 kB
packages/react-native/dist/tooling/metroconfig.js 2.36 kB
packages/react-native/dist/tooling/posthogMetroSerializer.js 7.5 kB
packages/react-native/dist/tooling/utils.js 4.49 kB
packages/react-native/dist/tooling/vendor/expo/expoconfig.js 109 B
packages/react-native/dist/tooling/vendor/metro/countLines.js 276 B
packages/react-native/dist/tooling/vendor/metro/utils.js 3.61 kB
packages/react-native/dist/types.js 104 B
packages/react-native/dist/utils.js 1.83 kB
packages/react-native/dist/version.js 166 B
packages/react/dist/esm/index.js 23.3 kB
packages/react/dist/esm/slim/index.js 19.5 kB
packages/react/dist/esm/surveys/index.js 4.22 kB
packages/react/dist/umd/index.js 27.8 kB
packages/react/dist/umd/slim/index.js 23.5 kB
packages/react/dist/umd/surveys/index.js 6.33 kB
packages/rollup-plugin/dist/index.js 14.6 kB
packages/rrweb/all/dist/rrweb-all.cjs 658 kB
packages/rrweb/all/dist/rrweb-all.js 657 kB
packages/rrweb/all/dist/rrweb-all.umd.cjs 687 kB
packages/rrweb/all/dist/rrweb-all.umd.min.cjs 339 kB
packages/rrweb/packer/dist/browser-********.cjs 17.9 kB
packages/rrweb/packer/dist/browser-********.js 17.5 kB
packages/rrweb/packer/dist/pack.cjs 401 B
packages/rrweb/packer/dist/pack.js 301 B
packages/rrweb/packer/dist/pack.umd.cjs 1.67 kB
packages/rrweb/packer/dist/pack.umd.min.cjs 1.11 kB
packages/rrweb/packer/dist/packer.cjs 276 B
packages/rrweb/packer/dist/packer.js 133 B
packages/rrweb/packer/dist/packer.umd.cjs 694 B
packages/rrweb/packer/dist/packer.umd.min.cjs 626 B
packages/rrweb/packer/dist/unpack.cjs 737 B
packages/rrweb/packer/dist/unpack.js 637 B
packages/rrweb/packer/dist/unpack.umd.cjs 1.14 kB
packages/rrweb/packer/dist/unpack.umd.min.cjs 953 B
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-record/dist/rrweb-plugin-canvas-webrtc-record.cjs 34.9 kB
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-record/dist/rrweb-plugin-canvas-webrtc-record.js 34.8 kB
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-record/dist/rrweb-plugin-canvas-webrtc-record.umd.cjs 37 kB
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-record/dist/rrweb-plugin-canvas-webrtc-record.umd.min.cjs 22.9 kB
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-replay/dist/rrweb-plugin-canvas-webrtc-replay.cjs 31.8 kB
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-replay/dist/rrweb-plugin-canvas-webrtc-replay.js 31.7 kB
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-replay/dist/rrweb-plugin-canvas-webrtc-replay.umd.cjs 33.7 kB
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-replay/dist/rrweb-plugin-canvas-webrtc-replay.umd.min.cjs 21.1 kB
packages/rrweb/plugins/rrweb-plugin-console-record/dist/rrweb-plugin-console-record.cjs 17.5 kB
packages/rrweb/plugins/rrweb-plugin-console-record/dist/rrweb-plugin-console-record.js 17.4 kB
packages/rrweb/plugins/rrweb-plugin-console-record/dist/rrweb-plugin-console-record.umd.cjs 16.8 kB
packages/rrweb/plugins/rrweb-plugin-console-record/dist/rrweb-plugin-console-record.umd.min.cjs 8.93 kB
packages/rrweb/plugins/rrweb-plugin-console-replay/dist/rrweb-plugin-console-replay.cjs 7.07 kB
packages/rrweb/plugins/rrweb-plugin-console-replay/dist/rrweb-plugin-console-replay.js 6.97 kB
packages/rrweb/plugins/rrweb-plugin-console-replay/dist/rrweb-plugin-console-replay.umd.cjs 7.36 kB
packages/rrweb/plugins/rrweb-plugin-console-replay/dist/rrweb-plugin-console-replay.umd.min.cjs 3.92 kB
packages/rrweb/plugins/rrweb-plugin-sequential-id-record/dist/rrweb-plugin-sequential-id-record.cjs 663 B
packages/rrweb/plugins/rrweb-plugin-sequential-id-record/dist/rrweb-plugin-sequential-id-record.js 540 B
packages/rrweb/plugins/rrweb-plugin-sequential-id-record/dist/rrweb-plugin-sequential-id-record.umd.cjs 1.1 kB
packages/rrweb/plugins/rrweb-plugin-sequential-id-record/dist/rrweb-plugin-sequential-id-record.umd.min.cjs 827 B
packages/rrweb/plugins/rrweb-plugin-sequential-id-replay/dist/rrweb-plugin-sequential-id-replay.cjs 816 B
packages/rrweb/plugins/rrweb-plugin-sequential-id-replay/dist/rrweb-plugin-sequential-id-replay.js 715 B
packages/rrweb/plugins/rrweb-plugin-sequential-id-replay/dist/rrweb-plugin-sequential-id-replay.umd.cjs 1.25 kB
packages/rrweb/plugins/rrweb-plugin-sequential-id-replay/dist/rrweb-plugin-sequential-id-replay.umd.min.cjs 966 B
packages/rrweb/record/dist/rrweb-record.cjs 226 kB
packages/rrweb/record/dist/rrweb-record.js 226 kB
packages/rrweb/record/dist/rrweb-record.umd.cjs 230 kB
packages/rrweb/record/dist/rrweb-record.umd.min.cjs 112 kB
packages/rrweb/replay/dist/rrweb-replay.cjs 436 kB
packages/rrweb/replay/dist/rrweb-replay.js 436 kB
packages/rrweb/replay/dist/rrweb-replay.umd.cjs 459 kB
packages/rrweb/replay/dist/rrweb-replay.umd.min.cjs 228 kB
packages/rrweb/rrdom-nodejs/dist/rrdom-nodejs.cjs 143 kB
packages/rrweb/rrdom-nodejs/dist/rrdom-nodejs.js 142 kB
packages/rrweb/rrdom-nodejs/dist/rrdom-nodejs.umd.cjs 156 kB
packages/rrweb/rrdom-nodejs/dist/rrdom-nodejs.umd.min.cjs 76.8 kB
packages/rrweb/rrdom/dist/rrdom.cjs 168 kB
packages/rrweb/rrdom/dist/rrdom.js 167 kB
packages/rrweb/rrdom/dist/rrdom.umd.cjs 179 kB
packages/rrweb/rrdom/dist/rrdom.umd.min.cjs 87.1 kB
packages/rrweb/rrweb-snapshot/dist/rebuild-********.cjs 133 kB
packages/rrweb/rrweb-snapshot/dist/rebuild-********.js 132 kB
packages/rrweb/rrweb-snapshot/dist/record.cjs 4.33 kB
packages/rrweb/rrweb-snapshot/dist/record.js 3.04 kB
packages/rrweb/rrweb-snapshot/dist/record.umd.cjs 94.9 kB
packages/rrweb/rrweb-snapshot/dist/record.umd.min.cjs 44.6 kB
packages/rrweb/rrweb-snapshot/dist/replay.cjs 1.96 kB
packages/rrweb/rrweb-snapshot/dist/replay.js 1.31 kB
packages/rrweb/rrweb-snapshot/dist/replay.umd.cjs 206 kB
packages/rrweb/rrweb-snapshot/dist/replay.umd.min.cjs 91 kB
packages/rrweb/rrweb-snapshot/dist/rrweb-********.cjs 4.62 kB
packages/rrweb/rrweb-snapshot/dist/rrweb-********.js 3.22 kB
packages/rrweb/rrweb-snapshot/dist/rrweb-********.umd.cjs 250 kB
packages/rrweb/rrweb-snapshot/dist/rrweb-********.umd.min.cjs 112 kB
packages/rrweb/rrweb-snapshot/dist/snapshot-********.cjs 35.1 kB
packages/rrweb/rrweb-snapshot/dist/snapshot-********.js 33.2 kB
packages/rrweb/rrweb-snapshot/dist/types-********.cjs 49.8 kB
packages/rrweb/rrweb-snapshot/dist/types-********.js 44.5 kB
packages/rrweb/rrweb/dist/rrweb.cjs 643 kB
packages/rrweb/rrweb/dist/rrweb.js 642 kB
packages/rrweb/rrweb/dist/rrweb.umd.cjs 669 kB
packages/rrweb/rrweb/dist/rrweb.umd.min.cjs 330 kB
packages/rrweb/types/dist/rrweb-types.cjs 5.8 kB
packages/rrweb/types/dist/rrweb-types.js 5.5 kB
packages/rrweb/types/dist/rrweb-types.umd.cjs 6.06 kB
packages/rrweb/types/dist/rrweb-types.umd.min.cjs 2.95 kB
packages/rrweb/utils/dist/rrweb-utils.cjs 10 kB
packages/rrweb/utils/dist/rrweb-utils.js 9.52 kB
packages/rrweb/utils/dist/rrweb-utils.umd.cjs 10.6 kB
packages/rrweb/utils/dist/rrweb-utils.umd.min.cjs 5.12 kB
packages/types/dist/capture-log.js 585 B
packages/types/dist/capture-log.mjs 12 B
packages/types/dist/capture-metric.js 1.47 kB
packages/types/dist/capture-metric.mjs 93 B
packages/types/dist/capture.js 585 B
packages/types/dist/capture.mjs 12 B
packages/types/dist/common.js 585 B
packages/types/dist/common.mjs 12 B
packages/types/dist/feature-flags.js 585 B
packages/types/dist/feature-flags.mjs 12 B
packages/types/dist/index.js 1.55 kB
packages/types/dist/index.mjs 75 B
packages/types/dist/posthog-config.js 585 B
packages/types/dist/posthog-config.mjs 12 B
packages/types/dist/posthog.js 585 B
packages/types/dist/posthog.mjs 12 B
packages/types/dist/request.js 585 B
packages/types/dist/request.mjs 12 B
packages/types/dist/segment.js 585 B
packages/types/dist/segment.mjs 12 B
packages/types/dist/session-recording.js 585 B
packages/types/dist/session-recording.mjs 12 B
packages/types/dist/survey.js 585 B
packages/types/dist/survey.mjs 12 B
packages/types/dist/toolbar.js 585 B
packages/types/dist/toolbar.mjs 12 B
packages/types/dist/traces.js 585 B
packages/types/dist/traces.mjs 12 B
packages/types/dist/tree-shakeable.js 585 B
packages/types/dist/tree-shakeable.mjs 12 B
packages/web/dist/index.cjs 9.09 kB
packages/web/dist/index.mjs 8.93 kB
packages/webpack-plugin/dist/config.js 2.38 kB
packages/webpack-plugin/dist/config.mjs 1.31 kB
packages/webpack-plugin/dist/index.js 16.9 kB
packages/webpack-plugin/dist/index.mjs 12.6 kB
tooling/changelog/dist/index.js 399 B
tooling/rollup-utils/dist/index.js 1.17 kB
tooling/sdk-mock-server/dist/decode.js 2.03 kB
tooling/sdk-mock-server/dist/index.js 16 kB
tooling/sdk-mock-server/dist/state.js 3.79 kB

compressed-size-action

…trics

`metrics: { autocapture: true }` starts the official OpenTelemetry instrumentations with private meter and tracer providers and exports to `/i/v1/metrics`. `node --import posthog-node/metrics/register` starts it before the app loads any module. The OpenTelemetry packages are optional peer dependencies.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

Generated-By: PostHog Desktop
Task-Id: ef9b57c2-47ff-47e6-a509-8873ffe1fab4
@DanielVisca
DanielVisca force-pushed the posthog/node-metrics-autocapture branch from 443c3d9 to 39704b3 Compare October 6, 2026 14:41
Generated-By: PostHog Desktop
Task-Id: c0218209-575c-46f0-a201-d0c831e38096
Generated-By: PostHog Desktop
Task-Id: 6921bfc1-7e35-4637-83d4-353c11b3af05

@posthog posthog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PostHog Review · Standard · reviewed 99f6143: 6 Must fix.

Comment thread packages/node/package.json
Comment thread packages/node/src/entrypoints/index.node.ts Outdated
Comment thread packages/node/src/extensions/metrics-autocapture.node.ts
Comment on lines +69 to +71
"@opentelemetry/sdk-metrics": "^2.0.0",
"@opentelemetry/sdk-trace-base": "^2.0.0",
"@opentelemetry/resources": "^2.0.0",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 · Preserve installation compatibility with OpenTelemetry 1.x

Applications with direct OpenTelemetry 1.x dependencies now encounter npm peer-resolution conflicts when upgrading posthog-node, even with autocapture disabled. Marking these peers optional permits their absence but still enforces the ^2.0.0 ranges when installed. This makes the minor release incompatible with existing setups; isolate the version requirements to the opt-in integration.

Comment thread packages/node/src/extensions/metrics-autocapture.node.ts
Comment on lines +52 to +55
distroVersion: version,
logger: this._logger,
isEnabled: () => !this.isDisabled && !this.optedOut,
exportIntervalMs: metrics?.flushIntervalMs,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 · Honor the configured metric filter for autocaptured data

With metrics: { autocapture: true, beforeSend: () => null }, autocaptured metrics still upload. startMetricsAutocapture never receives or applies metrics.beforeSend, so filters that drop metrics or redact database namespaces and server addresses protect only manual samples. Apply the filter to autocapture, or explicitly reject the unsupported combination.

The previous commit reset pnpm-lock.yaml to the base branch, so it no longer
matched packages/node/package.json and every `pnpm install --frozen-lockfile`
in CI failed with ERR_PNPM_OUTDATED_LOCKFILE.

Regenerated with `pnpm install --lockfile-only --config.link-workspace-packages=true`
so workspace specifiers keep resolving to the local packages instead of
re-resolving freshly bumped PostHog packages from the registry.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

Generated-By: PostHog Desktop
Task-Id: 6921bfc1-7e35-4637-83d4-353c11b3af05
…s/register

`beforeExit` does not run when the process is stopped by a signal, so a
container stop lost the last metrics window. The register entrypoint now
also shuts the client down on SIGTERM and SIGINT (capped at 5s). When the
app has no handler of its own, the signal is raised again after the flush,
so the process still exits the default way; when it has one, the app keeps
owning the exit.

Adds a `test:built` check that launches the built entrypoint with
`node --import posthog-node/metrics/register` against a fake PostHog host
(with a trailing slash), sends SIGTERM, and asserts the export reaches
/i/v1/metrics with HTTP server and client metrics in it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

Generated-By: PostHog Desktop
Task-Id: 6921bfc1-7e35-4637-83d4-353c11b3af05
@github-actions

Copy link
Copy Markdown
Contributor

Coherence

2 spec problems · 0 failing chokepoints · 2 spec gaps · 0 guard failures

44 components, 5 bullets (5 invariants, 0 requirements), 2 problems

Spec problems (spec --check)

  • Posthog-js.practice.md:20 practice add an invariant cites 187a5c5, which is no commit in this repository
  • Posthog-js.practice.md:20 practice add an invariant cites 8922ab2, which is no commit in this repository

Chokepoints: none declared.

Spec gaps: 2 entrances with outside or unknown trust and no traced control, and 10 more held by the adoption baseline

  • packages/web/Web.spec.md entrance public api (trust host-app): packages/web
  • packages/webpack-plugin/Webpack-plugin.spec.md entrance webpack plugin (trust build): packages/webpack-plugin

Close one with guard: <chokepoint>, an invariant that names it on its entrances: line, or control: none — <reason>; scaffold control proposes it.

… OTel types out of main declarations

- A view on db.client.operation.duration keeps only the leading word of
  db.operation.name. pg derives it from the text before the first space, so
  a statement like `SELECT\n'[email protected]'` would otherwise export the literal.
- optIn() (and enable()) first collects the current window while the
  exporter still sees the client as opted out, so metrics recorded while
  opted out are dropped instead of sent after opt-in.
- The Node entrypoint types its startMetricsAutocapture override with
  Required<MetricsAutocaptureConfig>, so the main declarations no longer
  import the module that references the optional OpenTelemetry packages.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

Generated-By: PostHog Desktop
Task-Id: 6921bfc1-7e35-4637-83d4-353c11b3af05

@posthog posthog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PostHog Review · Standard · reviewed 935f011: 1 Must fix, 5 Should fix.

Comment on lines +289 to +292
new exporter.OTLPMetricExporter({
url: `${options.host}/i/v1/metrics`,
headers: { Authorization: `Bearer ${options.apiKey}` },
temporalityPreference: sdkMetrics.AggregationTemporality.DELTA,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 · Exclude unrelated OTLP credentials from PostHog exports

With OTEL_EXPORTER_OTLP_HEADERS=x-api-key=collector-secret configured for another collector, enabling autocapture sends that secret to PostHog. OTLPMetricExporter merges environment headers with these explicit headers even though this code overrides the destination URL. Isolate this exporter from environment credentials intended for other endpoints.

Comment on lines +372 to +375
delete globals[ACTIVE]
// Export first: disabling removes the runtime gauges' callbacks, so they
// would be missing from the last window.
await allSettled([meterProvider.forceFlush()])

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 · Retain singleton ownership until instrumentation teardown finishes

When another client starts while shutdown() awaits its final flush, deleting globals[ACTIVE] lets it reuse the cached instrumentations. The first shutdown then disables those same instances, silently stopping the new client's autocapture. This also happens after a short shutdown timeout; retain singleton ownership until teardown finishes.

distroVersion: version,
logger: this._logger,
isEnabled: () => !this.isDisabled && !this.optedOut,
exportIntervalMs: metrics?.flushIntervalMs,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 · Apply the configured cardinality guardrail to autocaptured metrics

With metrics: { autocapture: true, maxSeriesPerFlush: 10 }, requests to distinct servers still produce more than ten series. This call never passes the cap to autocapture, which uses OpenTelemetry's default limit per instrument instead of the configured limit per window. The advertised guardrail therefore fails; enforce it across autocaptured series.

Comment on lines +319 to +322
isPostHogRequest(
request.hostname ?? request.host?.replace(/:\d+$/, ''),
Number(request.port) || defaultPort(request.protocol ?? undefined)
),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 · Resolve the HTTPS transport's default port before excluding requests

For https.request({ hostname: 'us.i.posthog.com', path: '/batch/' }), the hook receives options without protocol or port. defaultPort(undefined) supplies 80, so the comparison against the configured HTTPS host's port 443 fails and records PostHog traffic. Use the request transport's actual default port when applying the exclusion.

resultCallback({ code: 0 })
return
}
exporter.export(metrics, resultCallback)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 · Report export failures through the PostHog logger

When the endpoint rejects uploads or the network fails, gateExporter forwards failures only to the metric reader. The reader catches them and logs through OpenTelemetry's diag, which has no logger by default. Autocapture therefore silently loses metrics even with a PostHog logger configured. Log failed export results through options.logger.

Comment on lines +289 to +293
new exporter.OTLPMetricExporter({
url: `${options.host}/i/v1/metrics`,
headers: { Authorization: `Bearer ${options.apiKey}` },
temporalityPreference: sdkMetrics.AggregationTemporality.DELTA,
}),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 · Route autocapture exports through the configured transport

When an application supplies PostHogOptions.fetch to use a proxy or attach gateway authentication, autocapture bypasses it and sends through OpenTelemetry's HTTP transport. Manual metrics use the configured fetch, so enabling autocapture breaks delivery in those deployments. Adapt the exporter to the client's configured transport.

@posthog posthog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PostHog Review · Standard · reviewed f063dce: 1 Must fix, 4 Should fix.

Comment on lines +933 to 935
await this._metricsAutocapture.forceFlush().catch(() => {})
}
return super.optIn()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 · Preserve a later opt-out while an opt-in flush is pending

With autocapture enabled and the client opted out, calling optIn() followed by optOut() leaves capture enabled once the flush finishes. The new await forceFlush() lets the later opt-out complete before super.optIn() overwrites its decision, so subsequent events and metrics upload against consent. Serialize consent transitions or invalidate superseded opt-ins.

Comment on lines +312 to +316
this._metricsAutocapture = this.startMetricsAutocapture({
http: areas.http ?? true,
db: areas.db ?? true,
runtime: areas.runtime ?? true,
})

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 · Include autocaptured data in the public metrics flush

With metrics.autocapture enabled, await posthog.metrics.flush() only drains PostHogMetrics; it never calls this handle's forceFlush(). A serverless invocation that explicitly flushes metrics leaves its HTTP/DB data buffered until the export timer, losing it when the runtime freezes or exits. Include autocapture in the public metrics flush.

Comment on lines +2959 to +2962
await raceWithTimeout(
this._metricsAutocapture.shutdown().catch(() => {}),
Math.max(0, shutdownDeadlineMs - Date.now())
)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 · Drain events concurrently with autocapture shutdown

When the OTLP endpoint stalls longer than shutdownTimeoutMs, this awaited autocapture shutdown consumes the entire shared deadline before super._shutdown begins draining events. The event drain receives zero milliseconds, so exiting after await posthog.shutdown() discards queued events even when event ingestion is healthy. Drain events concurrently with autocapture teardown.

Comment on lines +404 to +408
await allSettled([meterProvider.forceFlush()])
for (const instrumentation of instrumentations) {
instrumentation.disable()
}
await allSettled([meterProvider.shutdown(), tracerProvider.shutdown()])

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 · Cancel autocapture exports when the shutdown deadline expires

When the metrics endpoint stalls, posthog.shutdown(500) returns after its timeout but this final forceFlush() continues with the exporter's default 10-second timeout. Instrumentations remain enabled and the referenced HTTP socket keeps a draining process alive beyond its shutdown budget. Pass the remaining deadline into teardown and abort outstanding exports when it expires.

Comment on lines +405 to +406
for (const instrumentation of instrumentations) {
instrumentation.disable()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 · Preserve application-owned instrumentation during shutdown

When an app enables its own HTTP instrumentation after autocapture but before loading http, its wrappers replace PostHog's. Calling posthog.shutdown() then invokes disable(), whose OpenTelemetry unpatch callback removes those application-owned wrappers too. Subsequent requests lose the app's tracing; check wrapper ownership before unpatching.

@github-actions

Copy link
Copy Markdown
Contributor

This PR hasn't seen activity in a week! Should it be merged, closed, or further worked on? If you want to keep it open, post a comment or remove the stale label – otherwise this will be closed in another week.

@github-actions github-actions Bot added the stale label Oct 21, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant