History

add posthog to cloud app (#447)

* add posthog to cloud app posthog-js initialised in routes/__root.tsx alongside the existing Sentry init, wrapped in PostHogProvider, and identified against the WorkOS user + org in web/auth.tsx. Events route through a /ingest/* reverse proxy on the same worker so adblockers don't drop them; project key (phc_…) ships as a public var in wrangler.jsonc. * fix exhaustive-deps in posthog identify effect

Rhys Sullivan committed 6 months ago

Commit 54b3dea1 parent 430f1d47 files · +112 −4Browse files

Unified · Split

7 files
  1. apps/cloud/package.json +1 −0
  2. apps/cloud/src/env-augment.d.ts +2 −0
  3. apps/cloud/src/routes/__root.tsx +16 −3
  4. apps/cloud/src/start.ts +31 −0
  5. apps/cloud/src/web/auth.tsx +22 −1
  6. apps/cloud/wrangler.jsonc +1 −0
  7. bun.lock +39 −0
apps/cloud/package.json+1−0
@@ -63,6 +63,7 @@ · 62 unmodified lines
6363 "drizzle-orm": "catalog:",
6464 "effect": "catalog:",
6565 "jose": "^5.6.3",
66+ "posthog-js": "^1.372.5",
6667 "postgres": "^3.4.9",
6768 "react": "catalog:",
6869 "react-dom": "catalog:",
apps/cloud/src/env-augment.d.ts+2−0
@@ -12,6 +12,8 @@ declare global { · 11 unmodified lines
1212 AXIOM_TRACES_SAMPLE_RATIO?: string;
1313 SENTRY_DSN?: string;
1414 VITE_PUBLIC_SENTRY_DSN?: string;
15+ VITE_PUBLIC_POSTHOG_KEY?: string;
16+ VITE_PUBLIC_POSTHOG_HOST?: string;
1517
1618 // Datastore. Prod uses HYPERDRIVE when the binding exists; direct
1719 // DATABASE_URL is only selected when explicitly requested for local/test.
apps/cloud/src/routes/__root.tsx+16−3
@@ -2,6 +2,8 @@ import React from "react"; · 1 unmodified line
22 import * as Sentry from "@sentry/react";
33 import { HeadContent, Scripts, createRootRoute } from "@tanstack/react-router";
44 import { AutumnProvider } from "autumn-js/react";
5+import posthog from "posthog-js";
6+import { PostHogProvider } from "posthog-js/react";
57 import { ExecutorProvider } from "@executor/react/api/provider";
68 import { Skeleton } from "@executor/react/components/skeleton";
79 import { Toaster } from "@executor/react/components/sonner";
@@ -21,6 +23,15 @@ if (typeof window !== "undefined" && import.meta.env.VITE_PUBLIC_SENTRY_DSN) { · 13 unmodified lines
2123 });
2224 }
2325
26+if (typeof window !== "undefined" && import.meta.env.VITE_PUBLIC_POSTHOG_KEY) {
27+ posthog.init(import.meta.env.VITE_PUBLIC_POSTHOG_KEY, {
28+ api_host: import.meta.env.VITE_PUBLIC_POSTHOG_HOST ?? `${window.location.origin}/ingest`,
29+ ui_host: "https://us.posthog.com",
30+ defaults: "2025-05-24",
31+ person_profiles: "identified_only",
32+ });
33+}
34+
2435 export const Route = createRootRoute({
2536 head: () => ({
2637 meta: [
@@ -63,9 +74,11 @@ function RootDocument({ children }: { children: React.ReactNode }) { · 36 unmodified lines
6374
6475 function RootComponent() {
6576 return (
66− <AuthProvider>
67− <AuthGate />
68− </AuthProvider>
77+ <PostHogProvider client={posthog}>
78+ <AuthProvider>
79+ <AuthGate />
80+ </AuthProvider>
81+ </PostHogProvider>
6982 );
7083 }
7184
apps/cloud/src/start.ts+31−0
@@ -105,6 +105,36 @@ const sentryTunnelMiddleware = createMiddleware({ type: "request" }).server( · 104 unmodified lines
105105 },
106106 );
107107
108+// ---------------------------------------------------------------------------
109+// PostHog reverse proxy — the browser SDK targets `/ingest/*` (configured in
110+// routes/__root.tsx) and we forward to PostHog's ingest + asset hosts. Keeps
111+// events flowing past adblockers that match *.posthog.com. See
112+// https://posthog.com/docs/advanced/proxy/cloudflare
113+// ---------------------------------------------------------------------------
114+
115+const POSTHOG_INGEST_HOST = "us.i.posthog.com";
116+const POSTHOG_ASSETS_HOST = "us-assets.i.posthog.com";
117+
118+const posthogProxyMiddleware = createMiddleware({ type: "request" }).server(
119+ ({ pathname, request, next }) => {
120+ if (pathname !== "/ingest" && !pathname.startsWith("/ingest/")) {
121+ return next();
122+ }
123+
124+ const url = new URL(request.url);
125+ url.hostname = pathname.startsWith("/ingest/static/")
126+ ? POSTHOG_ASSETS_HOST
127+ : POSTHOG_INGEST_HOST;
128+ url.protocol = "https:";
129+ url.port = "";
130+ url.pathname = pathname.replace(/^\/ingest/, "") || "/";
131+
132+ const upstream = new Request(url, request);
133+ upstream.headers.delete("cookie");
134+ return fetch(upstream);
135+ },
136+);
137+
108138 // ---------------------------------------------------------------------------
109139 // API middleware — routes /api/* to the Effect HTTP layer
110140 // ---------------------------------------------------------------------------
@@ -125,6 +155,7 @@ export const startInstance = createStart(() => ({ · 14 unmodified lines
125155 marketingMiddleware,
126156 mcpRequestMiddleware,
127157 sentryTunnelMiddleware,
158+ posthogProxyMiddleware,
128159 apiRequestMiddleware,
129160 ],
130161 }));
apps/cloud/src/web/auth.tsx+22−1
@@ -1,6 +1,7 @@
1−import React, { createContext, useContext } from "react";
1+import React, { createContext, useContext, useEffect } from "react";
22 import { Atom } from "@effect-atom/atom";
33 import { useAtomValue, Result } from "@effect-atom/atom-react";
4+import { usePostHog } from "posthog-js/react";
45 import { ReactivityKey } from "@executor/react/api/reactivity-keys";
56
67 import { CloudApiClient } from "./client";
@@ -55,6 +56,7 @@ export const useAuth = () => useContext(AuthContext); · 48 unmodified lines
5556
5657 const AuthProviderClient = ({ children }: { children: React.ReactNode }) => {
5758 const result = useAtomValue(authAtom);
59+ const posthog = usePostHog();
5860
5961 const state: AuthState = Result.match(result, {
6062 onInitial: () => ({ status: "loading" as const }),
@@ -66,6 +68,25 @@ const AuthProviderClient = ({ children }: { children: React.ReactNode }) => { · 5 unmodified lines
6668 onFailure: () => ({ status: "unauthenticated" as const }),
6769 });
6870
71+ const userId = state.status === "authenticated" ? state.user.id : null;
72+ const email = state.status === "authenticated" ? state.user.email : null;
73+ const name = state.status === "authenticated" ? state.user.name : null;
74+ const orgId = state.status === "authenticated" ? state.organization?.id ?? null : null;
75+ const orgName = state.status === "authenticated" ? state.organization?.name ?? null : null;
76+ const isUnauthenticated = state.status === "unauthenticated";
77+
78+ useEffect(() => {
79+ if (!posthog) return;
80+ if (userId) {
81+ posthog.identify(userId, { email, name });
82+ if (orgId) {
83+ posthog.group("organization", orgId, { name: orgName });
84+ }
85+ } else if (isUnauthenticated) {
86+ posthog.reset();
87+ }
88+ }, [posthog, userId, email, name, orgId, orgName, isUnauthenticated]);
89+
6990 return <AuthContext.Provider value={state}>{children}</AuthContext.Provider>;
7091 };
7192
apps/cloud/wrangler.jsonc+1−0
@@ -53,5 +53,6 @@ · 52 unmodified lines
5353 ],
5454 "vars": {
5555 "VITE_PUBLIC_SITE_URL": "https://executor.sh",
56+ "VITE_PUBLIC_POSTHOG_KEY": "phc_nNLrNMALpRsfrEkZovUkfMxYbcJvHnsJHeoSPavprgLL",
5657 },
5758 }
bun.lock+39−0
@@ -93,6 +93,7 @@ · 92 unmodified lines
9393 "effect": "catalog:",
9494 "jose": "^5.6.3",
9595 "postgres": "^3.4.9",
96+ "posthog-js": "^1.372.5",
9697 "react": "catalog:",
9798 "react-dom": "catalog:",
9899 "sonner": "^2.0.7",
@@ -1761,6 +1762,10 @@ · 1662 unmodified lines
17611762
17621763 "@poppinss/exception": ["@poppinss/exception@1.2.3", "", {}, "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw=="],
17631764
1765+ "@posthog/core": ["@posthog/core@1.27.9", "", { "dependencies": { "@posthog/types": "1.372.5" } }, "sha512-7FFWWYWvRFxQqDXYzv8klCjk0Pox1IpuPr61eeOCBsKkmt6xvvHwH0jc3ObvwDXZj2NSAWg+V9N2E2F1ul2CRQ=="],
1766+
1767+ "@posthog/types": ["@posthog/types@1.372.5", "", {}, "sha512-6sYOISiHjfr50FNlFcd8Zw/zCDJzxRCdC7aZzwTCvJABEOLWf41kcsiozi2c3q1cNXYL018X7DAGkUukrNLVIw=="],
1768+
17641769 "@primer/octicons": ["@primer/octicons@19.24.1", "", { "dependencies": { "object-assign": "^4.1.1" } }, "sha512-vgtSHq8IIf3oo/HjPGj0B7NkeatSyyw5mupMjXByPI1gY6uRZ/UQdv7uSJnSOCJYQJF3lVDUwiwp9wM71MYIgA=="],
17651770
17661771 "@protobufjs/aspromise": ["@protobufjs/aspromise@1.1.2", "", {}, "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="],
@@ -2721,6 +2726,8 @@ · 954 unmodified lines
27212726
27222727 "cookie-signature": ["cookie-signature@1.2.2", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="],
27232728
2729+ "core-js": ["core-js@3.49.0", "", {}, "sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg=="],
2730+
27242731 "core-js-pure": ["core-js-pure@3.49.0", "", {}, "sha512-XM4RFka59xATyJv/cS3O3Kml72hQXUeGRuuTmMYFxwzc9/7C8OYTaIR/Ji+Yt8DXzsFLNhat15cE/JP15HrCgw=="],
27252732
27262733 "core-util-is": ["core-util-is@1.0.2", "", {}, "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="],
@@ -3103,6 +3110,8 @@ · 376 unmodified lines
31033110
31043111 "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="],
31053112
3113+ "fflate": ["fflate@0.4.8", "", {}, "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA=="],
3114+
31063115 "figures": ["figures@6.1.0", "", { "dependencies": { "is-unicode-supported": "^2.0.0" } }, "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg=="],
31073116
31083117 "file-selector": ["file-selector@0.5.0", "", { "dependencies": { "tslib": "^2.0.3" } }, "sha512-s8KNnmIDTBoD0p9uJ9uD0XY38SCeBOtj0UMXyQSLg1Ypfrfj8+dAvwsLjYQkQ2GjhVtp2HrnF5cJzMhBjfD8HA=="],
@@ -3993,10 +4002,14 @@ · 884 unmodified lines
39934002
39944003 "postgres": ["postgres@3.4.9", "", {}, "sha512-GD3qdB0x1z9xgFI6cdRD6xu2Sp2WCOEoe3mtnyB5Ee0XrrL5Pe+e4CCnJrRMnL1zYtRDZmQQVbvOttLnKDLnaw=="],
39954004
4005+ "posthog-js": ["posthog-js@1.372.5", "", { "dependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/api-logs": "^0.208.0", "@opentelemetry/exporter-logs-otlp-http": "^0.208.0", "@opentelemetry/resources": "^2.2.0", "@opentelemetry/sdk-logs": "^0.208.0", "@posthog/core": "1.27.9", "@posthog/types": "1.372.5", "core-js": "^3.38.1", "dompurify": "^3.3.2", "fflate": "^0.4.8", "preact": "^10.28.2", "query-selector-shadow-dom": "^1.0.1", "web-vitals": "^5.1.0" } }, "sha512-0Wq4yRTX8rg2/SOTo3T/0tt2EIE0usBDJKxWPY6eRTGxWAajNmPWZwK4vREn2ANZGdPhUHQ+hg4kLEUdQnzs/Q=="],
4006+
39964007 "postject": ["postject@1.0.0-alpha.6", "", { "dependencies": { "commander": "^9.4.0" }, "bin": { "postject": "dist/cli.js" } }, "sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A=="],
39974008
39984009 "powershell-utils": ["powershell-utils@0.2.0", "", {}, "sha512-ZlsFlG7MtSFCoc5xreOvBAozCJ6Pf06opgJjh9ONEv418xpZSAzNjstD36C6+JwOnfSqOW/9uDkqKjezTdxZhw=="],
39994010
4011+ "preact": ["preact@10.29.1", "", {}, "sha512-gQCLc/vWroE8lIpleXtdJhTFDogTdZG9AjMUpVkDf2iTCNwYNWA+u16dL41TqUDJO4gm2IgrcMv3uTpjd4Pwmg=="],
4012+
40004013 "prebuild-install": ["prebuild-install@7.1.3", "", { "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", "pump": "^3.0.0", "rc": "^1.2.7", "simple-get": "^4.0.0", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" }, "bin": { "prebuild-install": "bin.js" } }, "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug=="],
40014014
40024015 "prettier": ["prettier@3.8.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw=="],
@@ -4041,6 +4054,8 @@ · 38 unmodified lines
40414054
40424055 "quansync": ["quansync@0.2.11", "", {}, "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA=="],
40434056
4057+ "query-selector-shadow-dom": ["query-selector-shadow-dom@1.0.1", "", {}, "sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw=="],
4058+
40444059 "query-string": ["query-string@9.3.1", "", { "dependencies": { "decode-uri-component": "^0.4.1", "filter-obj": "^5.1.0", "split-on-first": "^3.0.0" } }, "sha512-5fBfMOcDi5SA9qj5jZhWAcTtDfKF5WFdd2uD9nVNlbxVv1baq65aALy6qofpNEGELHvisjjasxQp7BlM9gvMzw=="],
40454060
40464061 "querystring-es3": ["querystring-es3@0.2.1", "", {}, "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA=="],
@@ -4673,6 +4688,8 @@ · 626 unmodified lines
46734688
46744689 "web-streams-polyfill": ["web-streams-polyfill@4.2.0", "", {}, "sha512-0rYDzGOh9EZpig92umN5g5D/9A1Kff7k0/mzPSSCY8jEQeYkgRMoY7LhbXtUCWzLCMX0TUE9aoHkjFNB7D9pfA=="],
46754690
4691+ "web-vitals": ["web-vitals@5.2.0", "", {}, "sha512-i2z98bEmaCqSDiHEDu+gHl/dmR4Q+TxFmG3/13KkMO+o8UxQzCqWaDRCiLgEa41nlO4VpXSI0ASa1xWmO9sBlA=="],
4692+
46764693 "webpack-virtual-modules": ["webpack-virtual-modules@0.6.2", "", {}, "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="],
46774694
46784695 "whatwg-encoding": ["whatwg-encoding@3.1.1", "", { "dependencies": { "iconv-lite": "0.6.3" } }, "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ=="],
@@ -5253,6 +5270,12 @@ · 574 unmodified lines
52535270
52545271 "postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="],
52555272
5273+ "posthog-js/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.208.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg=="],
5274+
5275+ "posthog-js/@opentelemetry/exporter-logs-otlp-http": ["@opentelemetry/exporter-logs-otlp-http@0.208.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.208.0", "@opentelemetry/core": "2.2.0", "@opentelemetry/otlp-exporter-base": "0.208.0", "@opentelemetry/otlp-transformer": "0.208.0", "@opentelemetry/sdk-logs": "0.208.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-jOv40Bs9jy9bZVLo/i8FwUiuCvbjWDI+ZW13wimJm4LjnlwJxGgB+N/VWOZUTpM+ah/awXeQqKdNlpLf2EjvYg=="],
5276+
5277+ "posthog-js/@opentelemetry/sdk-logs": ["@opentelemetry/sdk-logs@0.208.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.208.0", "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, "sha512-QlAyL1jRpOeaqx7/leG1vJMp84g0xKP6gJmfELBpnI4O/9xPX+Hu5m1POk9Kl+veNkyth5t19hRlN6tNY1sjbA=="],
5278+
52565279 "postject/commander": ["commander@9.5.0", "", {}, "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ=="],
52575280
52585281 "prop-types/react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="],
@@ -5713,6 +5736,16 @@ · 454 unmodified lines
57135736
57145737 "pkg-dir/find-up/locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="],
57155738
5739+ "posthog-js/@opentelemetry/exporter-logs-otlp-http/@opentelemetry/core": ["@opentelemetry/core@2.2.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw=="],
5740+
5741+ "posthog-js/@opentelemetry/exporter-logs-otlp-http/@opentelemetry/otlp-exporter-base": ["@opentelemetry/otlp-exporter-base@0.208.0", "", { "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/otlp-transformer": "0.208.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-gMd39gIfVb2OgxldxUtOwGJYSH8P1kVFFlJLuut32L6KgUC4gl1dMhn+YC2mGn0bDOiQYSk/uHOdSjuKp58vvA=="],
5742+
5743+ "posthog-js/@opentelemetry/exporter-logs-otlp-http/@opentelemetry/otlp-transformer": ["@opentelemetry/otlp-transformer@0.208.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.208.0", "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0", "@opentelemetry/sdk-logs": "0.208.0", "@opentelemetry/sdk-metrics": "2.2.0", "@opentelemetry/sdk-trace-base": "2.2.0", "protobufjs": "^7.3.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-DCFPY8C6lAQHUNkzcNT9R+qYExvsk6C5Bto2pbNxgicpcSWbe2WHShLxkOxIdNcBiYPdVHv/e7vH7K6TI+C+fQ=="],
5744+
5745+ "posthog-js/@opentelemetry/sdk-logs/@opentelemetry/core": ["@opentelemetry/core@2.2.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw=="],
5746+
5747+ "posthog-js/@opentelemetry/sdk-logs/@opentelemetry/resources": ["@opentelemetry/resources@2.2.0", "", { "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A=="],
5748+
57165749 "protobufjs/@types/node/undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="],
57175750
57185751 "read-yaml-file/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="],
@@ -5981,6 +6014,12 @@ · 262 unmodified lines
59816014
59826015 "pkg-dir/find-up/locate-path/p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="],
59836016
6017+ "posthog-js/@opentelemetry/exporter-logs-otlp-http/@opentelemetry/otlp-transformer/@opentelemetry/resources": ["@opentelemetry/resources@2.2.0", "", { "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A=="],
6018+
6019+ "posthog-js/@opentelemetry/exporter-logs-otlp-http/@opentelemetry/otlp-transformer/@opentelemetry/sdk-metrics": ["@opentelemetry/sdk-metrics@2.2.0", "", { "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, "sha512-G5KYP6+VJMZzpGipQw7Giif48h6SGQ2PFKEYCybeXJsOCB4fp8azqMAAzE5lnnHK3ZVwYQrgmFbsUJO/zOnwGw=="],
6020+
6021+ "posthog-js/@opentelemetry/exporter-logs-otlp-http/@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.2.0", "", { "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw=="],
6022+
59846023 "read-yaml-file/js-yaml/argparse/sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="],
59856024
59866025 "ripemd160/hash-base/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="],