Skip to content

Commit 766c7fb

Browse files
authored
feat(drizzle): added ods for analytics from drizzle (#1956)
* feat(drizzle): added ods for analytics from drizzle * clean
1 parent 675c421 commit 766c7fb

File tree

6 files changed

+37
-2
lines changed

6 files changed

+37
-2
lines changed

apps/sim/app/layout.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { generateBrandedMetadata, generateStructuredData } from '@/lib/branding/
66
import { PostHogProvider } from '@/lib/posthog/provider'
77
import '@/app/globals.css'
88

9+
import { OneDollarStats } from '@/components/analytics/onedollarstats'
910
import { SessionProvider } from '@/lib/session/session-context'
1011
import { season } from '@/app/fonts/season/season'
1112
import { HydrationErrorHandler } from '@/app/hydration-error-handler'
@@ -55,6 +56,9 @@ export default function RootLayout({ children }: { children: React.ReactNode })
5556
<meta name='format-detection' content='telephone=no' />
5657
<meta httpEquiv='x-ua-compatible' content='ie=edge' />
5758

59+
{/* OneDollarStats Analytics */}
60+
<script defer src='https://assets.onedollarstats.com/stonks.js' />
61+
5862
{/* Blocking script to prevent sidebar dimensions flash on page load */}
5963
<script
6064
dangerouslySetInnerHTML={{
@@ -166,6 +170,7 @@ export default function RootLayout({ children }: { children: React.ReactNode })
166170
</head>
167171
<body className={`${season.variable} font-season`} suppressHydrationWarning>
168172
<HydrationErrorHandler />
173+
<OneDollarStats />
169174
<PostHogProvider>
170175
<ThemeProvider>
171176
<SessionProvider>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
'use client'
2+
3+
import { useEffect } from 'react'
4+
import { configure } from 'onedollarstats'
5+
import { env } from '@/lib/env'
6+
7+
export function OneDollarStats() {
8+
useEffect(() => {
9+
const shouldInitialize = !!env.DRIZZLE_ODS_API_KEY
10+
11+
if (!shouldInitialize) {
12+
return
13+
}
14+
15+
configure({
16+
collectorUrl: 'https://collector.onedollarstats.com/events',
17+
autocollect: true,
18+
hashRouting: true,
19+
})
20+
}, [])
21+
22+
return null
23+
}

apps/sim/lib/env.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ export const env = createEnv({
9696
TELEMETRY_ENDPOINT: z.string().url().optional(), // Custom telemetry/analytics endpoint
9797
COST_MULTIPLIER: z.number().optional(), // Multiplier for cost calculations
9898
LOG_LEVEL: z.enum(['DEBUG', 'INFO', 'WARN', 'ERROR']).optional(), // Minimum log level to display (defaults to ERROR in production, DEBUG in development)
99+
DRIZZLE_ODS_API_KEY: z.string().min(1).optional(), // OneDollarStats API key for analytics tracking
99100

100101
// External Services
101102
BROWSERBASE_API_KEY: z.string().min(1).optional(), // Browserbase API key for browser automation

apps/sim/lib/security/csp.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export const buildTimeCSPDirectives: CSPDirectives = {
3838
"'unsafe-eval'",
3939
'https://*.google.com',
4040
'https://apis.google.com',
41+
'https://assets.onedollarstats.com',
4142
],
4243

4344
'style-src': ["'self'", "'unsafe-inline'", 'https://fonts.googleapis.com'],
@@ -92,6 +93,7 @@ export const buildTimeCSPDirectives: CSPDirectives = {
9293
'https://*.supabase.co',
9394
'https://api.github.com',
9495
'https://github.com/*',
96+
'https://collector.onedollarstats.com',
9597
...getHostnameFromUrl(env.NEXT_PUBLIC_BRAND_LOGO_URL),
9698
...getHostnameFromUrl(env.NEXT_PUBLIC_PRIVACY_URL),
9799
...getHostnameFromUrl(env.NEXT_PUBLIC_TERMS_URL),
@@ -149,12 +151,12 @@ export function generateRuntimeCSP(): string {
149151

150152
return `
151153
default-src 'self';
152-
script-src 'self' 'unsafe-inline' 'unsafe-eval' https://*.google.com https://apis.google.com;
154+
script-src 'self' 'unsafe-inline' 'unsafe-eval' https://*.google.com https://apis.google.com https://assets.onedollarstats.com;
153155
style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;
154156
img-src 'self' data: blob: https://*.googleusercontent.com https://*.google.com https://*.atlassian.com https://cdn.discordapp.com https://*.githubusercontent.com ${brandLogoDomain} ${brandFaviconDomain};
155157
media-src 'self' blob:;
156158
font-src 'self' https://fonts.gstatic.com;
157-
connect-src 'self' ${appUrl} ${ollamaUrl} ${socketUrl} ${socketWsUrl} https://api.browser-use.com https://api.exa.ai https://api.firecrawl.dev https://*.googleapis.com https://*.amazonaws.com https://*.s3.amazonaws.com https://*.blob.core.windows.net https://api.github.com https://github.com/* https://*.atlassian.com https://*.supabase.co ${dynamicDomainsStr};
159+
connect-src 'self' ${appUrl} ${ollamaUrl} ${socketUrl} ${socketWsUrl} https://api.browser-use.com https://api.exa.ai https://api.firecrawl.dev https://*.googleapis.com https://*.amazonaws.com https://*.s3.amazonaws.com https://*.blob.core.windows.net https://api.github.com https://github.com/* https://*.atlassian.com https://*.supabase.co https://collector.onedollarstats.com ${dynamicDomainsStr};
158160
frame-src https://drive.google.com https://docs.google.com https://*.google.com;
159161
frame-ancestors 'self';
160162
form-action 'self';

bun.lock

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"cronstrue": "3.3.0",
1111
"drizzle-orm": "^0.44.5",
1212
"mongodb": "6.19.0",
13+
"onedollarstats": "0.0.10",
1314
"postgres": "^3.4.5",
1415
"remark-gfm": "4.0.1",
1516
"socket.io-client": "4.8.1",
@@ -2494,6 +2495,8 @@
24942495

24952496
"once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="],
24962497

2498+
"onedollarstats": ["onedollarstats@0.0.10", "", {}, "sha512-+s2o5qBuKej2BrbJDqVRZr9U7F0ERBsNjXIJs1DSy2yK4yNk8z5iM0nHuwhelbNgqyVEwckCV7BJ9MsP/c8kQw=="],
2499+
24972500
"onetime": ["onetime@6.0.0", "", { "dependencies": { "mimic-fn": "^4.0.0" } }, "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ=="],
24982501

24992502
"oniguruma-parser": ["oniguruma-parser@0.12.1", "", {}, "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w=="],

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
"cronstrue": "3.3.0",
4141
"drizzle-orm": "^0.44.5",
4242
"mongodb": "6.19.0",
43+
"onedollarstats": "0.0.10",
4344
"postgres": "^3.4.5",
4445
"remark-gfm": "4.0.1",
4546
"socket.io-client": "4.8.1",

0 commit comments

Comments
 (0)