From e4fac81d271f6cb3b5853d3557157fe246f71579 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl-Gerhard=20Lindesva=CC=88rd?= Date: Fri, 14 Nov 2025 13:30:39 +0100 Subject: [PATCH] fix: use latest sdks and proxy both request and op1.js in public --- apps/public/app/api/[...op]/route.ts | 70 ++--------------------- apps/public/package.json | 2 +- pnpm-lock.yaml | 83 +++++++++++++++++++--------- 3 files changed, 64 insertions(+), 91 deletions(-) diff --git a/apps/public/app/api/[...op]/route.ts b/apps/public/app/api/[...op]/route.ts index 3660ba62..82945e54 100644 --- a/apps/public/app/api/[...op]/route.ts +++ b/apps/public/app/api/[...op]/route.ts @@ -1,67 +1,7 @@ -import { createHash } from 'node:crypto'; -import { getClientIpFromHeaders } from '@openpanel/common/server/get-client-ip'; -// adding .js next/script import fixes an issues -// with esm and nextjs (when using pages dir) -import { NextResponse } from 'next/server.js'; +import { + createNextRouteHandler, + createScriptHandler, +} from '@openpanel/nextjs/server'; -type CreateNextRouteHandlerOptions = { - apiUrl?: string; -}; - -function createNextRouteHandler(options: CreateNextRouteHandlerOptions) { - return async function POST(req: Request) { - const apiUrl = options.apiUrl ?? 'https://api.openpanel.dev'; - const headers = new Headers(req.headers); - const clientIp = getClientIpFromHeaders(headers); - console.log('debug', { - clientIp, - userAgent: req.headers.get('user-agent'), - }); - try { - const res = await fetch(`${apiUrl}/track`, { - method: 'POST', - headers, - body: JSON.stringify(await req.json()), - }); - return NextResponse.json(await res.text(), { status: res.status }); - } catch (e) { - return NextResponse.json(e); - } - }; -} - -function createScriptHandler() { - return async function GET(req: Request) { - if (!req.url.endsWith('op1.js')) { - return NextResponse.json({ error: 'Not found' }, { status: 404 }); - } - - const scriptUrl = 'https://openpanel.dev/op1.js'; - try { - const res = await fetch(scriptUrl, { - next: { revalidate: 86400 }, - }); - const text = await res.text(); - const etag = `"${createHash('md5').update(text).digest('hex')}"`; - return new NextResponse(text, { - headers: { - 'Content-Type': 'text/javascript', - 'Cache-Control': - 'public, max-age=86400, stale-while-revalidate=86400', - ETag: etag, - }, - }); - } catch (e) { - return NextResponse.json( - { - error: 'Failed to fetch script', - message: e instanceof Error ? e.message : String(e), - }, - { status: 500 }, - ); - } - }; -} - -export const POST = createNextRouteHandler({}); +export const POST = createNextRouteHandler(); export const GET = createScriptHandler(); diff --git a/apps/public/package.json b/apps/public/package.json index 72898888..174c3d3b 100644 --- a/apps/public/package.json +++ b/apps/public/package.json @@ -14,7 +14,7 @@ "@hyperdx/node-opentelemetry": "^0.8.1", "@number-flow/react": "0.3.5", "@openpanel/common": "workspace:*", - "@openpanel/nextjs": "^1.0.5", + "@openpanel/nextjs": "^1.0.12", "@openpanel/payments": "workspace:^", "@openpanel/sdk-info": "workspace:^", "@openstatus/react": "0.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c0e8c665..00214c30 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -275,8 +275,8 @@ importers: specifier: workspace:* version: link:../../packages/common '@openpanel/nextjs': - specifier: ^1.0.5 - version: 1.0.5(next@15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.0.12 + version: 1.0.12(next@15.0.3(@opentelemetry/api@1.8.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@openpanel/payments': specifier: workspace:^ version: link:../../packages/payments @@ -312,22 +312,22 @@ importers: version: 11.18.2(@emotion/is-prop-valid@0.8.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) fumadocs-core: specifier: 14.1.1 - version: 14.1.1(@types/react@19.1.11)(algoliasearch@4.24.0)(next@15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 14.1.1(@types/react@19.1.11)(algoliasearch@4.24.0)(next@15.0.3(@opentelemetry/api@1.8.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) fumadocs-mdx: specifier: 11.1.1 - version: 11.1.1(acorn@8.15.0)(fumadocs-core@14.1.1(@types/react@19.1.11)(algoliasearch@4.24.0)(next@15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(next@15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)) + version: 11.1.1(acorn@8.15.0)(fumadocs-core@14.1.1(@types/react@19.1.11)(algoliasearch@4.24.0)(next@15.0.3(@opentelemetry/api@1.8.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(next@15.0.3(@opentelemetry/api@1.8.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)) fumadocs-ui: specifier: 14.1.1 - version: 14.1.1(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(next@15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 14.1.1(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(next@15.0.3(@opentelemetry/api@1.8.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) geist: specifier: 1.3.1 - version: 1.3.1(next@15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)) + version: 1.3.1(next@15.0.3(@opentelemetry/api@1.8.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)) lucide-react: specifier: 0.454.0 version: 0.454.0(react@19.1.1) next: specifier: 15.0.3 - version: 15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 15.0.3(@opentelemetry/api@1.8.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: specifier: 'catalog:' version: 19.1.1 @@ -4797,12 +4797,12 @@ packages: resolution: {integrity: sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==} engines: {node: '>=8.0'} - '@openpanel/nextjs@1.0.5': - resolution: {integrity: sha512-+Zdrl5fC8Iczub/pVvX8Xp9q6mQvApNXGenCEkdiAZk9nT7xpaLfzkdHnwx7XHxp5H50zdwgqWDGiwLMqRWjKA==} + '@openpanel/nextjs@1.0.12': + resolution: {integrity: sha512-uGNTsjQ37/rN07tGd2joUkXXWIWRFTNlMYq7P7H1hyQ4xnifRC4kZqKS4ocFWoO4yg6qfoDjCHgx15C7j6BZZQ==} peerDependencies: - next: ^12.0.0 || ^13.0.0 || ^14.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + next: ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 '@openpanel/sdk@1.0.0': resolution: {integrity: sha512-FNmmfjdXoC/VHEjA+WkrQ4lyM5lxEmV7xDd57uj4E+lIS0sU3DLG2mV/dpS8AscnZbUvuMn3kPhiLCqYzuv/gg==} @@ -4810,6 +4810,9 @@ packages: '@openpanel/web@1.0.1': resolution: {integrity: sha512-cVZ7Kr9SicczJ/RDIfEtZs8+1iGDzwkabVA/j3NqSl8VSucsC8m1+LVbjmCDzCJNnK4yVn6tEcc9PJRi2rtllw==} + '@openpanel/web@1.0.2': + resolution: {integrity: sha512-vU9Z9Kc0dxyE4abTi9KAu2zDE2/z4RDcHDLk9NwNRgrZGDlYereOatwKNnvrwfU96066bjfOrSd+vbjmkmsOoA==} + '@openstatus/react@0.0.3': resolution: {integrity: sha512-uDiegz7e3H67pG8lTT+op+6w5keTT7XpcENrREaqlWl5j53TYyO8nheOG1PeNw2/Qgd5KaGeRJJFn1crhTUSYw==} peerDependencies: @@ -19907,10 +19910,10 @@ snapshots: '@oozcitak/util@8.3.8': {} - '@openpanel/nextjs@1.0.5(next@15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@openpanel/nextjs@1.0.12(next@15.0.3(@opentelemetry/api@1.8.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@openpanel/web': 1.0.1 - next: 15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@openpanel/web': 1.0.2 + next: 15.0.3(@opentelemetry/api@1.8.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) @@ -19920,6 +19923,10 @@ snapshots: dependencies: '@openpanel/sdk': 1.0.0 + '@openpanel/web@1.0.2': + dependencies: + '@openpanel/sdk': 1.0.0 + '@openstatus/react@0.0.3(react@19.1.1)': dependencies: react: 19.1.1 @@ -27760,7 +27767,7 @@ snapshots: fsevents@2.3.3: optional: true - fumadocs-core@14.1.1(@types/react@19.1.11)(algoliasearch@4.24.0)(next@15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + fumadocs-core@14.1.1(@types/react@19.1.11)(algoliasearch@4.24.0)(next@15.0.3(@opentelemetry/api@1.8.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: '@formatjs/intl-localematcher': 0.5.6 '@orama/orama': 3.0.1 @@ -27778,14 +27785,14 @@ snapshots: unist-util-visit: 5.0.0 optionalDependencies: algoliasearch: 4.24.0 - next: 15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + next: 15.0.3(@opentelemetry/api@1.8.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) transitivePeerDependencies: - '@types/react' - supports-color - fumadocs-mdx@11.1.1(acorn@8.15.0)(fumadocs-core@14.1.1(@types/react@19.1.11)(algoliasearch@4.24.0)(next@15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(next@15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)): + fumadocs-mdx@11.1.1(acorn@8.15.0)(fumadocs-core@14.1.1(@types/react@19.1.11)(algoliasearch@4.24.0)(next@15.0.3(@opentelemetry/api@1.8.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(next@15.0.3(@opentelemetry/api@1.8.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)): dependencies: '@mdx-js/mdx': 3.1.0(acorn@8.15.0) chokidar: 4.0.1 @@ -27793,16 +27800,16 @@ snapshots: esbuild: 0.24.0 estree-util-value-to-estree: 3.1.2 fast-glob: 3.3.2 - fumadocs-core: 14.1.1(@types/react@19.1.11)(algoliasearch@4.24.0)(next@15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + fumadocs-core: 14.1.1(@types/react@19.1.11)(algoliasearch@4.24.0)(next@15.0.3(@opentelemetry/api@1.8.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) gray-matter: 4.0.3 micromatch: 4.0.8 - next: 15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + next: 15.0.3(@opentelemetry/api@1.8.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) zod: 3.24.2 transitivePeerDependencies: - acorn - supports-color - fumadocs-ui@14.1.1(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(next@15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + fumadocs-ui@14.1.1(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(next@15.0.3(@opentelemetry/api@1.8.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: '@radix-ui/react-accordion': 1.2.3(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-collapsible': 1.1.1(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -27816,8 +27823,8 @@ snapshots: '@tailwindcss/typography': 0.5.15(tailwindcss@3.4.17) class-variance-authority: 0.7.1 cmdk: 1.0.0(@types/react-dom@19.1.8(@types/react@19.1.11))(@types/react@19.1.11)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - fumadocs-core: 14.1.1(@types/react@19.1.11)(algoliasearch@4.24.0)(next@15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - next: 15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + fumadocs-core: 14.1.1(@types/react@19.1.11)(algoliasearch@4.24.0)(next@15.0.3(@opentelemetry/api@1.8.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + next: 15.0.3(@opentelemetry/api@1.8.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) next-themes: 0.3.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) @@ -27865,9 +27872,9 @@ snapshots: - encoding - supports-color - geist@1.3.1(next@15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)): + geist@1.3.1(next@15.0.3(@opentelemetry/api@1.8.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)): dependencies: - next: 15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + next: 15.0.3(@opentelemetry/api@1.8.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) generic-pool@3.9.0: {} @@ -30292,6 +30299,32 @@ snapshots: - '@babel/core' - babel-plugin-macros + next@15.0.3(@opentelemetry/api@1.8.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + dependencies: + '@next/env': 15.0.3 + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.13 + busboy: 1.6.0 + caniuse-lite: 1.0.30001674 + postcss: 8.4.31 + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + styled-jsx: 5.1.6(react@19.1.1) + optionalDependencies: + '@next/swc-darwin-arm64': 15.0.3 + '@next/swc-darwin-x64': 15.0.3 + '@next/swc-linux-arm64-gnu': 15.0.3 + '@next/swc-linux-arm64-musl': 15.0.3 + '@next/swc-linux-x64-gnu': 15.0.3 + '@next/swc-linux-x64-musl': 15.0.3 + '@next/swc-win32-arm64-msvc': 15.0.3 + '@next/swc-win32-x64-msvc': 15.0.3 + '@opentelemetry/api': 1.8.0 + sharp: 0.33.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + next@15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: '@next/env': 15.0.3