Compare commits
13 Commits
feature/re
...
fix/ssr
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d9f5f291d6 | ||
|
|
4b150dd987 | ||
|
|
baedf4343b | ||
|
|
22fb4acf12 | ||
|
|
cb3f8016df | ||
|
|
d9afeffbf1 | ||
|
|
4b9852b36f | ||
|
|
00e94ecb66 | ||
|
|
3d84e4e77b | ||
|
|
791668526c | ||
|
|
02ddcf9a3d | ||
|
|
55bd5c4614 | ||
|
|
aa81bbfe77 |
75
.github/workflows/docker-build.yml
vendored
75
.github/workflows/docker-build.yml
vendored
@@ -3,55 +3,37 @@ name: Docker Build and Push
|
|||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
# branches: [ "main" ]
|
paths-ignore:
|
||||||
paths:
|
# README and docs
|
||||||
- "apps/api/**"
|
- "**/README*"
|
||||||
- "apps/worker/**"
|
- "**/readme*"
|
||||||
|
- "**/*.md"
|
||||||
|
- "**/docs/**"
|
||||||
|
- "**/CHANGELOG*"
|
||||||
|
- "**/LICENSE*"
|
||||||
|
# Test files
|
||||||
|
- "**/*.test.*"
|
||||||
|
- "**/*.spec.*"
|
||||||
|
- "**/__tests__/**"
|
||||||
|
- "**/tests/**"
|
||||||
|
# SDKs (published separately)
|
||||||
|
- "packages/sdks/**"
|
||||||
|
# Public app (docs/marketing, not part of Docker deploy)
|
||||||
- "apps/public/**"
|
- "apps/public/**"
|
||||||
- "apps/start/**"
|
# Dev / tooling
|
||||||
- "packages/**"
|
- "**/.vscode/**"
|
||||||
- "!packages/sdks/**"
|
- "**/.cursor/**"
|
||||||
- "**Dockerfile"
|
- "**/.env.example"
|
||||||
- ".github/workflows/**"
|
- "**/.env.*.example"
|
||||||
|
- "**/.gitignore"
|
||||||
|
- "**/.eslintignore"
|
||||||
|
- "**/.prettierignore"
|
||||||
|
|
||||||
env:
|
env:
|
||||||
repo_owner: "openpanel-dev"
|
repo_owner: "openpanel-dev"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
changes:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
outputs:
|
|
||||||
api: ${{ steps.filter.outputs.api }}
|
|
||||||
worker: ${{ steps.filter.outputs.worker }}
|
|
||||||
public: ${{ steps.filter.outputs.public }}
|
|
||||||
dashboard: ${{ steps.filter.outputs.dashboard }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: dorny/paths-filter@v2
|
|
||||||
id: filter
|
|
||||||
with:
|
|
||||||
base: "main"
|
|
||||||
filters: |
|
|
||||||
api:
|
|
||||||
- 'apps/api/**'
|
|
||||||
- 'packages/**'
|
|
||||||
- '.github/workflows/**'
|
|
||||||
worker:
|
|
||||||
- 'apps/worker/**'
|
|
||||||
- 'packages/**'
|
|
||||||
- '.github/workflows/**'
|
|
||||||
public:
|
|
||||||
- 'apps/public/**'
|
|
||||||
- 'packages/**'
|
|
||||||
- '.github/workflows/**'
|
|
||||||
dashboard:
|
|
||||||
- 'apps/start/**'
|
|
||||||
- 'packages/**'
|
|
||||||
- '.github/workflows/**'
|
|
||||||
|
|
||||||
lint-and-test:
|
lint-and-test:
|
||||||
needs: changes
|
|
||||||
if: ${{ needs.changes.outputs.api == 'true' || needs.changes.outputs.worker == 'true' || needs.changes.outputs.public == 'true' || needs.changes.outputs.dashboard == 'true' }}
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
services:
|
services:
|
||||||
redis:
|
redis:
|
||||||
@@ -106,8 +88,7 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
packages: write
|
packages: write
|
||||||
contents: write
|
contents: write
|
||||||
needs: [changes, lint-and-test]
|
needs: lint-and-test
|
||||||
if: ${{ needs.changes.outputs.api == 'true' }}
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
@@ -167,8 +148,7 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
packages: write
|
packages: write
|
||||||
contents: write
|
contents: write
|
||||||
needs: [changes, lint-and-test]
|
needs: lint-and-test
|
||||||
if: ${{ needs.changes.outputs.worker == 'true' }}
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
@@ -228,8 +208,7 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
packages: write
|
packages: write
|
||||||
contents: write
|
contents: write
|
||||||
needs: [changes, lint-and-test]
|
needs: lint-and-test
|
||||||
if: ${{ needs.changes.outputs.dashboard == 'true' }}
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
|
|||||||
@@ -14,14 +14,15 @@ export async function duplicateHook(
|
|||||||
const ip = req.clientIp;
|
const ip = req.clientIp;
|
||||||
const origin = req.headers.origin;
|
const origin = req.headers.origin;
|
||||||
const clientId = req.headers['openpanel-client-id'];
|
const clientId = req.headers['openpanel-client-id'];
|
||||||
const isReplay = 'type' in req.body && req.body.type === 'replay';
|
const body = req?.body;
|
||||||
|
const isTrackPayload = getIsTrackPayload(req);
|
||||||
|
const isReplay = isTrackPayload && req.body.type === 'replay';
|
||||||
const shouldCheck = ip && origin && clientId && !isReplay;
|
const shouldCheck = ip && origin && clientId && !isReplay;
|
||||||
|
|
||||||
const isDuplicate = shouldCheck
|
const isDuplicate = shouldCheck
|
||||||
? await isDuplicatedEvent({
|
? await isDuplicatedEvent({
|
||||||
ip,
|
ip,
|
||||||
origin,
|
origin,
|
||||||
payload: req.body,
|
payload: body,
|
||||||
projectId: clientId as string,
|
projectId: clientId as string,
|
||||||
})
|
})
|
||||||
: false;
|
: false;
|
||||||
@@ -30,3 +31,25 @@ export async function duplicateHook(
|
|||||||
return reply.status(200).send('Duplicate event');
|
return reply.status(200).send('Duplicate event');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getIsTrackPayload(
|
||||||
|
req: FastifyRequest<{
|
||||||
|
Body: ITrackHandlerPayload | DeprecatedPostEventPayload;
|
||||||
|
}>
|
||||||
|
): req is FastifyRequest<{
|
||||||
|
Body: ITrackHandlerPayload;
|
||||||
|
}> {
|
||||||
|
if (req.method !== 'POST') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!req.body) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof req.body !== 'object' || Array.isArray(req.body)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'type' in req.body;
|
||||||
|
}
|
||||||
|
|||||||
@@ -61,7 +61,7 @@
|
|||||||
"notes": "OpenPanel's SDK is over 20x smaller than PostHog's core library, resulting in faster page loads and better Core Web Vitals."
|
"notes": "OpenPanel's SDK is over 20x smaller than PostHog's core library, resulting in faster page loads and better Core Web Vitals."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Cookie-Free by Default",
|
"label": "Cookie-Free",
|
||||||
"openpanel": "Yes",
|
"openpanel": "Yes",
|
||||||
"competitor": "Requires Configuration",
|
"competitor": "Requires Configuration",
|
||||||
"notes": "OpenPanel is truly cookie-free out of the box. PostHog requires specific configuration for cookieless tracking with reduced functionality."
|
"notes": "OpenPanel is truly cookie-free out of the box. PostHog requires specific configuration for cookieless tracking with reduced functionality."
|
||||||
|
|||||||
@@ -32,7 +32,9 @@ npx expo install expo-application expo-constants
|
|||||||
On native we use a clientSecret to authenticate the app.
|
On native we use a clientSecret to authenticate the app.
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
const op = new Openpanel({
|
import { OpenPanel } from '@openpanel/react-native';
|
||||||
|
|
||||||
|
const op = new OpenPanel({
|
||||||
clientId: '{YOUR_CLIENT_ID}',
|
clientId: '{YOUR_CLIENT_ID}',
|
||||||
clientSecret: '{YOUR_CLIENT_SECRET}',
|
clientSecret: '{YOUR_CLIENT_SECRET}',
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
"@opennextjs/cloudflare": "^1.16.5",
|
"@opennextjs/cloudflare": "^1.16.5",
|
||||||
"@openpanel/common": "workspace:*",
|
"@openpanel/common": "workspace:*",
|
||||||
"@openpanel/geo": "workspace:*",
|
"@openpanel/geo": "workspace:*",
|
||||||
"@openpanel/nextjs": "^1.1.1",
|
"@openpanel/nextjs": "^1.2.0",
|
||||||
"@openpanel/payments": "workspace:^",
|
"@openpanel/payments": "workspace:^",
|
||||||
"@openpanel/sdk-info": "workspace:^",
|
"@openpanel/sdk-info": "workspace:^",
|
||||||
"@openstatus/react": "0.0.3",
|
"@openstatus/react": "0.0.3",
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -6,6 +6,7 @@ import { getRootMetadata } from '@/lib/metadata';
|
|||||||
import { cn } from '@/lib/utils';
|
import { cn } from '@/lib/utils';
|
||||||
import './global.css';
|
import './global.css';
|
||||||
import { OpenPanelComponent } from '@openpanel/nextjs';
|
import { OpenPanelComponent } from '@openpanel/nextjs';
|
||||||
|
import { ScrollTracker } from '@/components/scroll-tracker';
|
||||||
|
|
||||||
const font = Geist({
|
const font = Geist({
|
||||||
subsets: ['latin'],
|
subsets: ['latin'],
|
||||||
@@ -39,9 +40,13 @@ export default function Layout({ children }: { children: React.ReactNode }) {
|
|||||||
<RootProvider>
|
<RootProvider>
|
||||||
<TooltipProvider>{children}</TooltipProvider>
|
<TooltipProvider>{children}</TooltipProvider>
|
||||||
</RootProvider>
|
</RootProvider>
|
||||||
|
<ScrollTracker />
|
||||||
{process.env.NEXT_PUBLIC_OP_CLIENT_ID && (
|
{process.env.NEXT_PUBLIC_OP_CLIENT_ID && (
|
||||||
<OpenPanelComponent
|
<OpenPanelComponent
|
||||||
clientId={process.env.NEXT_PUBLIC_OP_CLIENT_ID}
|
clientId={process.env.NEXT_PUBLIC_OP_CLIENT_ID}
|
||||||
|
sessionReplay={{
|
||||||
|
enabled: true,
|
||||||
|
}}
|
||||||
trackAttributes
|
trackAttributes
|
||||||
trackOutgoingLinks
|
trackOutgoingLinks
|
||||||
trackScreenViews
|
trackScreenViews
|
||||||
|
|||||||
43
apps/public/src/components/feature-card-hover-track.tsx
Normal file
43
apps/public/src/components/feature-card-hover-track.tsx
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
'use client';
|
||||||
|
|
||||||
|
import { useOpenPanel } from '@openpanel/nextjs';
|
||||||
|
import { useRef } from 'react';
|
||||||
|
|
||||||
|
interface FeatureCardHoverTrackProps {
|
||||||
|
title: string;
|
||||||
|
children: React.ReactNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function FeatureCardHoverTrack({
|
||||||
|
title,
|
||||||
|
children,
|
||||||
|
}: FeatureCardHoverTrackProps) {
|
||||||
|
const { track } = useOpenPanel();
|
||||||
|
const hoverTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
||||||
|
|
||||||
|
const handleMouseEnter = () => {
|
||||||
|
hoverTimerRef.current = setTimeout(() => {
|
||||||
|
track('feature_card_hover', { title });
|
||||||
|
hoverTimerRef.current = null;
|
||||||
|
}, 1500);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleMouseLeave = () => {
|
||||||
|
if (hoverTimerRef.current) {
|
||||||
|
clearTimeout(hoverTimerRef.current);
|
||||||
|
hoverTimerRef.current = null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
// Hover handlers for analytics only; no keyboard interaction needed
|
||||||
|
// biome-ignore lint/a11y/noNoninteractiveElementInteractions: analytics hover tracking
|
||||||
|
<div
|
||||||
|
onMouseEnter={handleMouseEnter}
|
||||||
|
onMouseLeave={handleMouseLeave}
|
||||||
|
role="group"
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
|
|
||||||
import type { LucideIcon } from 'lucide-react';
|
import type { LucideIcon } from 'lucide-react';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
import { cn } from '@/lib/utils';
|
import { cn } from '@/lib/utils';
|
||||||
|
import { FeatureCardHoverTrack } from '@/components/feature-card-hover-track';
|
||||||
|
|
||||||
interface FeatureCardProps {
|
interface FeatureCardProps {
|
||||||
link?: {
|
link?: {
|
||||||
@@ -64,41 +66,45 @@ export function FeatureCard({
|
|||||||
}: FeatureCardProps) {
|
}: FeatureCardProps) {
|
||||||
if (illustration) {
|
if (illustration) {
|
||||||
return (
|
return (
|
||||||
|
<FeatureCardHoverTrack title={title}>
|
||||||
|
<FeatureCardContainer className={className}>
|
||||||
|
{illustration}
|
||||||
|
<div className="col gap-2" data-content>
|
||||||
|
<h3 className="font-semibold text-xl">{title}</h3>
|
||||||
|
<p className="text-muted-foreground">{description}</p>
|
||||||
|
</div>
|
||||||
|
{children}
|
||||||
|
{link && (
|
||||||
|
<Link
|
||||||
|
className="mx-6 text-muted-foreground text-sm transition-colors hover:text-primary"
|
||||||
|
href={link.href}
|
||||||
|
>
|
||||||
|
{link.children}
|
||||||
|
</Link>
|
||||||
|
)}
|
||||||
|
</FeatureCardContainer>
|
||||||
|
</FeatureCardHoverTrack>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<FeatureCardHoverTrack title={title}>
|
||||||
<FeatureCardContainer className={className}>
|
<FeatureCardContainer className={className}>
|
||||||
{illustration}
|
{Icon && <Icon className="size-6" />}
|
||||||
<div className="col gap-2" data-content>
|
<div className="col gap-2">
|
||||||
<h3 className="font-semibold text-xl">{title}</h3>
|
<h3 className="font-semibold text-lg">{title}</h3>
|
||||||
<p className="text-muted-foreground">{description}</p>
|
<p className="text-muted-foreground text-sm">{description}</p>
|
||||||
</div>
|
</div>
|
||||||
{children}
|
{children}
|
||||||
{link && (
|
{link && (
|
||||||
<Link
|
<Link
|
||||||
className="mx-6 text-muted-foreground text-sm transition-colors hover:text-primary"
|
className="text-muted-foreground text-sm transition-colors hover:text-primary"
|
||||||
href={link.href}
|
href={link.href}
|
||||||
>
|
>
|
||||||
{link.children}
|
{link.children}
|
||||||
</Link>
|
</Link>
|
||||||
)}
|
)}
|
||||||
</FeatureCardContainer>
|
</FeatureCardContainer>
|
||||||
);
|
</FeatureCardHoverTrack>
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<FeatureCardContainer className={className}>
|
|
||||||
{Icon && <Icon className="size-6" />}
|
|
||||||
<div className="col gap-2">
|
|
||||||
<h3 className="font-semibold text-lg">{title}</h3>
|
|
||||||
<p className="text-muted-foreground text-sm">{description}</p>
|
|
||||||
</div>
|
|
||||||
{children}
|
|
||||||
{link && (
|
|
||||||
<Link
|
|
||||||
className="text-muted-foreground text-sm transition-colors hover:text-primary"
|
|
||||||
href={link.href}
|
|
||||||
>
|
|
||||||
{link.children}
|
|
||||||
</Link>
|
|
||||||
)}
|
|
||||||
</FeatureCardContainer>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
37
apps/public/src/components/scroll-tracker.tsx
Normal file
37
apps/public/src/components/scroll-tracker.tsx
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
'use client';
|
||||||
|
|
||||||
|
import { useOpenPanel } from '@openpanel/nextjs';
|
||||||
|
import { usePathname } from 'next/navigation';
|
||||||
|
import { useEffect, useRef } from 'react';
|
||||||
|
|
||||||
|
export function ScrollTracker() {
|
||||||
|
const { track } = useOpenPanel();
|
||||||
|
const pathname = usePathname();
|
||||||
|
const hasFired = useRef(false);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
hasFired.current = false;
|
||||||
|
|
||||||
|
const handleScroll = () => {
|
||||||
|
if (hasFired.current) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const scrollTop = window.scrollY;
|
||||||
|
const docHeight =
|
||||||
|
document.documentElement.scrollHeight - window.innerHeight;
|
||||||
|
const percent =
|
||||||
|
docHeight > 0 ? (scrollTop / docHeight) * 100 : 0;
|
||||||
|
|
||||||
|
if (percent >= 50) {
|
||||||
|
hasFired.current = true;
|
||||||
|
track('scroll_half_way', { percent: Math.round(percent) });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
window.addEventListener('scroll', handleScroll, { passive: true });
|
||||||
|
return () => window.removeEventListener('scroll', handleScroll);
|
||||||
|
}, [track, pathname]);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
@@ -38,10 +38,9 @@
|
|||||||
"@openpanel/integrations": "workspace:^",
|
"@openpanel/integrations": "workspace:^",
|
||||||
"@openpanel/json": "workspace:*",
|
"@openpanel/json": "workspace:*",
|
||||||
"@openpanel/payments": "workspace:*",
|
"@openpanel/payments": "workspace:*",
|
||||||
"@openpanel/sdk": "^1.0.8",
|
|
||||||
"@openpanel/sdk-info": "workspace:^",
|
"@openpanel/sdk-info": "workspace:^",
|
||||||
"@openpanel/validation": "workspace:^",
|
"@openpanel/validation": "workspace:^",
|
||||||
"@openpanel/web": "^1.0.12",
|
"@openpanel/web": "^1.0.1",
|
||||||
"@radix-ui/react-accordion": "^1.2.12",
|
"@radix-ui/react-accordion": "^1.2.12",
|
||||||
"@radix-ui/react-alert-dialog": "^1.1.15",
|
"@radix-ui/react-alert-dialog": "^1.1.15",
|
||||||
"@radix-ui/react-aspect-ratio": "^1.1.7",
|
"@radix-ui/react-aspect-ratio": "^1.1.7",
|
||||||
|
|||||||
@@ -102,7 +102,18 @@ export function KeyValueGrid({
|
|||||||
<button
|
<button
|
||||||
onClick={(e) => {
|
onClick={(e) => {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
clipboard(item.value);
|
if (typeof item.value === 'object') {
|
||||||
|
try {
|
||||||
|
const value = JSON.stringify(item.value);
|
||||||
|
clipboard(value);
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
clipboard(item.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
clipboard(item.value);
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
type="button"
|
type="button"
|
||||||
className="absolute left-2 top-1/2 -translate-y-1/2 -translate-x-full opacity-0 group-hover:translate-x-0 group-hover:opacity-100 transition-all duration-200 ease-out bg-background border border-border rounded p-1 shadow-sm z-10"
|
className="absolute left-2 top-1/2 -translate-y-1/2 -translate-x-full opacity-0 group-hover:translate-x-0 group-hover:opacity-100 transition-all duration-200 ease-out bg-background border border-border rounded p-1 shadow-sm z-10"
|
||||||
|
|||||||
@@ -1,17 +1,26 @@
|
|||||||
import { QueryClient } from '@tanstack/react-query';
|
|
||||||
import { createTRPCClient, httpLink } from '@trpc/client';
|
|
||||||
import { createTRPCOptionsProxy } from '@trpc/tanstack-react-query';
|
|
||||||
import superjson from 'superjson';
|
|
||||||
|
|
||||||
import { TRPCProvider } from '@/integrations/trpc/react';
|
|
||||||
import type { AppRouter } from '@openpanel/trpc';
|
import type { AppRouter } from '@openpanel/trpc';
|
||||||
|
import { QueryClient } from '@tanstack/react-query';
|
||||||
import { createIsomorphicFn } from '@tanstack/react-start';
|
import { createIsomorphicFn } from '@tanstack/react-start';
|
||||||
import { getRequestHeaders } from '@tanstack/react-start/server';
|
import { getRequestHeaders } from '@tanstack/react-start/server';
|
||||||
|
import { createTRPCClient, httpLink } from '@trpc/client';
|
||||||
|
import { createTRPCOptionsProxy } from '@trpc/tanstack-react-query';
|
||||||
import { useMemo } from 'react';
|
import { useMemo } from 'react';
|
||||||
|
import superjson from 'superjson';
|
||||||
|
import { TRPCProvider } from '@/integrations/trpc/react';
|
||||||
|
|
||||||
export const getIsomorphicHeaders = createIsomorphicFn()
|
export const getIsomorphicHeaders = createIsomorphicFn()
|
||||||
.server(() => {
|
.server(() => {
|
||||||
return getRequestHeaders();
|
const headers = getRequestHeaders();
|
||||||
|
const result: Record<string, string> = {};
|
||||||
|
// Only forward the cookie header so the API can validate the session.
|
||||||
|
// Forwarding all headers causes problems with hop-by-hop headers like
|
||||||
|
// `Connection: upgrade` (common in NGINX WebSocket configs) which makes
|
||||||
|
// Node.js undici throw UND_ERR_INVALID_ARG ("fetch failed").
|
||||||
|
const cookie = headers.get('Cookie');
|
||||||
|
if (cookie) {
|
||||||
|
result.cookie = cookie;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
})
|
})
|
||||||
.client(() => {
|
.client(() => {
|
||||||
return {};
|
return {};
|
||||||
@@ -27,7 +36,6 @@ export function createTRPCClientWithHeaders(apiUrl: string) {
|
|||||||
headers: () => getIsomorphicHeaders(),
|
headers: () => getIsomorphicHeaders(),
|
||||||
fetch: async (url, options) => {
|
fetch: async (url, options) => {
|
||||||
try {
|
try {
|
||||||
console.log('fetching', url, options);
|
|
||||||
const response = await fetch(url, {
|
const response = await fetch(url, {
|
||||||
...options,
|
...options,
|
||||||
mode: 'cors',
|
mode: 'cors',
|
||||||
@@ -82,8 +90,8 @@ export function getContext(apiUrl: string) {
|
|||||||
const client = createTRPCClientWithHeaders(apiUrl);
|
const client = createTRPCClientWithHeaders(apiUrl);
|
||||||
|
|
||||||
const serverHelpers = createTRPCOptionsProxy({
|
const serverHelpers = createTRPCOptionsProxy({
|
||||||
client: client,
|
client,
|
||||||
queryClient: queryClient,
|
queryClient,
|
||||||
});
|
});
|
||||||
return {
|
return {
|
||||||
queryClient,
|
queryClient,
|
||||||
@@ -102,10 +110,10 @@ export function Provider({
|
|||||||
}) {
|
}) {
|
||||||
const trpcClient = useMemo(
|
const trpcClient = useMemo(
|
||||||
() => createTRPCClientWithHeaders(apiUrl),
|
() => createTRPCClientWithHeaders(apiUrl),
|
||||||
[apiUrl],
|
[apiUrl]
|
||||||
);
|
);
|
||||||
return (
|
return (
|
||||||
<TRPCProvider trpcClient={trpcClient} queryClient={queryClient}>
|
<TRPCProvider queryClient={queryClient} trpcClient={trpcClient}>
|
||||||
{children}
|
{children}
|
||||||
</TRPCProvider>
|
</TRPCProvider>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import fs from 'node:fs';
|
|||||||
import path from 'node:path';
|
import path from 'node:path';
|
||||||
import { TABLE_NAMES } from '../src/clickhouse/client';
|
import { TABLE_NAMES } from '../src/clickhouse/client';
|
||||||
import {
|
import {
|
||||||
addColumns,
|
|
||||||
createTable,
|
createTable,
|
||||||
modifyTTL,
|
modifyTTL,
|
||||||
runClickhouseMigrationCommands,
|
runClickhouseMigrationCommands,
|
||||||
@@ -25,8 +24,8 @@ export async function up() {
|
|||||||
'`is_full_snapshot` Bool',
|
'`is_full_snapshot` Bool',
|
||||||
'`payload` String CODEC(ZSTD(6))',
|
'`payload` String CODEC(ZSTD(6))',
|
||||||
],
|
],
|
||||||
orderBy: ['project_id', 'session_id', 'chunk_index'],
|
orderBy: ['project_id', 'session_id', 'started_at', 'chunk_index'],
|
||||||
partitionBy: 'toYYYYMM(started_at)',
|
partitionBy: 'toYYYYMMDD(started_at)',
|
||||||
settings: {
|
settings: {
|
||||||
index_granularity: 8192,
|
index_granularity: 8192,
|
||||||
},
|
},
|
||||||
@@ -42,16 +41,16 @@ export async function up() {
|
|||||||
];
|
];
|
||||||
|
|
||||||
fs.writeFileSync(
|
fs.writeFileSync(
|
||||||
path.join(__filename.replace('.ts', '.sql')),
|
path.join(import.meta.filename.replace('.ts', '.sql')),
|
||||||
sqls
|
sqls
|
||||||
.map((sql) =>
|
.map((sql) =>
|
||||||
sql
|
sql
|
||||||
.trim()
|
.trim()
|
||||||
.replace(/;$/, '')
|
.replace(/;$/, '')
|
||||||
.replace(/\n{2,}/g, '\n')
|
.replace(/\n{2,}/g, '\n')
|
||||||
.concat(';'),
|
.concat(';')
|
||||||
)
|
)
|
||||||
.join('\n\n---\n\n'),
|
.join('\n\n---\n\n')
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!process.argv.includes('--dry')) {
|
if (!process.argv.includes('--dry')) {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@openpanel/astro",
|
"name": "@openpanel/astro",
|
||||||
"version": "1.0.7-local",
|
"version": "1.1.0-local",
|
||||||
"config": {
|
"config": {
|
||||||
"transformPackageJson": false,
|
"transformPackageJson": false,
|
||||||
"transformEnvs": true,
|
"transformEnvs": true,
|
||||||
@@ -12,10 +12,15 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"typecheck": "tsc --noEmit"
|
"typecheck": "tsc --noEmit"
|
||||||
},
|
},
|
||||||
"files": ["src", "index.ts"],
|
"files": [
|
||||||
"keywords": ["astro-component"],
|
"src",
|
||||||
|
"index.ts"
|
||||||
|
],
|
||||||
|
"keywords": [
|
||||||
|
"astro-component"
|
||||||
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@openpanel/web": "workspace:1.0.7-local"
|
"@openpanel/web": "workspace:1.1.0-local"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"astro": "^5.7.7"
|
"astro": "^5.7.7"
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ const methods: { name: OpenPanelMethodNames; value: unknown }[] = [
|
|||||||
value: {
|
value: {
|
||||||
...options,
|
...options,
|
||||||
sdk: 'astro',
|
sdk: 'astro',
|
||||||
sdkVersion: '1.0.7',
|
sdkVersion: '1.1.0',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@openpanel/express",
|
"name": "@openpanel/express",
|
||||||
"version": "1.0.5-local",
|
"version": "1.1.0-local",
|
||||||
"module": "index.ts",
|
"module": "index.ts",
|
||||||
"config": {
|
"config": {
|
||||||
"docPath": "apps/public/content/docs/(tracking)/sdks/express.mdx"
|
"docPath": "apps/public/content/docs/(tracking)/sdks/express.mdx"
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
"typecheck": "tsc --noEmit"
|
"typecheck": "tsc --noEmit"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@openpanel/sdk": "workspace:1.0.4-local",
|
"@openpanel/sdk": "workspace:1.1.0-local",
|
||||||
"@openpanel/common": "workspace:*"
|
"@openpanel/common": "workspace:*"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@openpanel/nextjs",
|
"name": "@openpanel/nextjs",
|
||||||
"version": "1.1.4-local",
|
"version": "1.2.0-local",
|
||||||
"module": "index.ts",
|
"module": "index.ts",
|
||||||
"config": {
|
"config": {
|
||||||
"docPath": "apps/public/content/docs/(tracking)/sdks/nextjs.mdx"
|
"docPath": "apps/public/content/docs/(tracking)/sdks/nextjs.mdx"
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
"typecheck": "tsc --noEmit"
|
"typecheck": "tsc --noEmit"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@openpanel/web": "workspace:1.0.7-local"
|
"@openpanel/web": "workspace:1.1.0-local"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"next": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0",
|
"next": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@openpanel/nuxt",
|
"name": "@openpanel/nuxt",
|
||||||
"version": "0.0.4-local",
|
"version": "0.1.0-local",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./dist/module.mjs",
|
"main": "./dist/module.mjs",
|
||||||
"exports": {
|
"exports": {
|
||||||
@@ -9,7 +9,9 @@
|
|||||||
"import": "./dist/module.mjs"
|
"import": "./dist/module.mjs"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"files": ["dist"],
|
"files": [
|
||||||
|
"dist"
|
||||||
|
],
|
||||||
"config": {
|
"config": {
|
||||||
"transformPackageJson": false,
|
"transformPackageJson": false,
|
||||||
"transformEnvs": false,
|
"transformEnvs": false,
|
||||||
@@ -22,7 +24,7 @@
|
|||||||
"typecheck": "tsc --noEmit"
|
"typecheck": "tsc --noEmit"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@openpanel/web": "workspace:1.0.7-local"
|
"@openpanel/web": "workspace:1.1.0-local"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"h3": "^1.0.0",
|
"h3": "^1.0.0",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@openpanel/react-native",
|
"name": "@openpanel/react-native",
|
||||||
"version": "1.0.6-local",
|
"version": "1.1.0-local",
|
||||||
"module": "index.ts",
|
"module": "index.ts",
|
||||||
"config": {
|
"config": {
|
||||||
"docPath": "apps/public/content/docs/(tracking)/sdks/react-native.mdx"
|
"docPath": "apps/public/content/docs/(tracking)/sdks/react-native.mdx"
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
"typecheck": "tsc --noEmit"
|
"typecheck": "tsc --noEmit"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@openpanel/sdk": "workspace:1.0.4-local"
|
"@openpanel/sdk": "workspace:1.1.0-local"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@openpanel/tsconfig": "workspace:*",
|
"@openpanel/tsconfig": "workspace:*",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@openpanel/sdk",
|
"name": "@openpanel/sdk",
|
||||||
"version": "1.0.4-local",
|
"version": "1.1.0-local",
|
||||||
"module": "index.ts",
|
"module": "index.ts",
|
||||||
"config": {
|
"config": {
|
||||||
"docPath": "apps/public/content/docs/(tracking)/sdks/javascript.mdx"
|
"docPath": "apps/public/content/docs/(tracking)/sdks/javascript.mdx"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@openpanel/web",
|
"name": "@openpanel/web",
|
||||||
"version": "1.0.7-local",
|
"version": "1.1.0-local",
|
||||||
"module": "index.ts",
|
"module": "index.ts",
|
||||||
"config": {
|
"config": {
|
||||||
"docPath": "apps/public/content/docs/(tracking)/sdks/web.mdx"
|
"docPath": "apps/public/content/docs/(tracking)/sdks/web.mdx"
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
"typecheck": "tsc --noEmit"
|
"typecheck": "tsc --noEmit"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@openpanel/sdk": "workspace:1.0.4-local",
|
"@openpanel/sdk": "workspace:1.1.0-local",
|
||||||
"@rrweb/types": "2.0.0-alpha.20",
|
"@rrweb/types": "2.0.0-alpha.20",
|
||||||
"rrweb": "2.0.0-alpha.20"
|
"rrweb": "2.0.0-alpha.20"
|
||||||
},
|
},
|
||||||
|
|||||||
55
pnpm-lock.yaml
generated
55
pnpm-lock.yaml
generated
@@ -285,8 +285,8 @@ importers:
|
|||||||
specifier: workspace:*
|
specifier: workspace:*
|
||||||
version: link:../../packages/geo
|
version: link:../../packages/geo
|
||||||
'@openpanel/nextjs':
|
'@openpanel/nextjs':
|
||||||
specifier: ^1.1.1
|
specifier: ^1.2.0
|
||||||
version: 1.1.1(next@16.0.7(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
version: 1.2.0(next@16.0.7(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||||
'@openpanel/payments':
|
'@openpanel/payments':
|
||||||
specifier: workspace:^
|
specifier: workspace:^
|
||||||
version: link:../../packages/payments
|
version: link:../../packages/payments
|
||||||
@@ -465,9 +465,6 @@ importers:
|
|||||||
'@openpanel/payments':
|
'@openpanel/payments':
|
||||||
specifier: workspace:*
|
specifier: workspace:*
|
||||||
version: link:../../packages/payments
|
version: link:../../packages/payments
|
||||||
'@openpanel/sdk':
|
|
||||||
specifier: ^1.0.8
|
|
||||||
version: 1.0.8
|
|
||||||
'@openpanel/sdk-info':
|
'@openpanel/sdk-info':
|
||||||
specifier: workspace:^
|
specifier: workspace:^
|
||||||
version: link:../../packages/sdks/_info
|
version: link:../../packages/sdks/_info
|
||||||
@@ -475,8 +472,8 @@ importers:
|
|||||||
specifier: workspace:^
|
specifier: workspace:^
|
||||||
version: link:../../packages/validation
|
version: link:../../packages/validation
|
||||||
'@openpanel/web':
|
'@openpanel/web':
|
||||||
specifier: ^1.0.12
|
specifier: ^1.0.1
|
||||||
version: 1.0.12
|
version: 1.0.5
|
||||||
'@radix-ui/react-accordion':
|
'@radix-ui/react-accordion':
|
||||||
specifier: ^1.2.12
|
specifier: ^1.2.12
|
||||||
version: 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
version: 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||||
@@ -1484,7 +1481,7 @@ importers:
|
|||||||
packages/sdks/astro:
|
packages/sdks/astro:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@openpanel/web':
|
'@openpanel/web':
|
||||||
specifier: workspace:1.0.12-local
|
specifier: workspace:1.1.0-local
|
||||||
version: link:../web
|
version: link:../web
|
||||||
devDependencies:
|
devDependencies:
|
||||||
astro:
|
astro:
|
||||||
@@ -1497,7 +1494,7 @@ importers:
|
|||||||
specifier: workspace:*
|
specifier: workspace:*
|
||||||
version: link:../../common
|
version: link:../../common
|
||||||
'@openpanel/sdk':
|
'@openpanel/sdk':
|
||||||
specifier: workspace:1.0.8-local
|
specifier: workspace:1.1.0-local
|
||||||
version: link:../sdk
|
version: link:../sdk
|
||||||
express:
|
express:
|
||||||
specifier: ^4.17.0 || ^5.0.0
|
specifier: ^4.17.0 || ^5.0.0
|
||||||
@@ -1522,7 +1519,7 @@ importers:
|
|||||||
packages/sdks/nextjs:
|
packages/sdks/nextjs:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@openpanel/web':
|
'@openpanel/web':
|
||||||
specifier: workspace:1.0.12-local
|
specifier: workspace:1.1.0-local
|
||||||
version: link:../web
|
version: link:../web
|
||||||
next:
|
next:
|
||||||
specifier: ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
|
specifier: ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
|
||||||
@@ -1550,7 +1547,7 @@ importers:
|
|||||||
packages/sdks/nuxt:
|
packages/sdks/nuxt:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@openpanel/web':
|
'@openpanel/web':
|
||||||
specifier: workspace:1.0.12-local
|
specifier: workspace:1.1.0-local
|
||||||
version: link:../web
|
version: link:../web
|
||||||
h3:
|
h3:
|
||||||
specifier: ^1.0.0
|
specifier: ^1.0.0
|
||||||
@@ -1587,7 +1584,7 @@ importers:
|
|||||||
packages/sdks/react-native:
|
packages/sdks/react-native:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@openpanel/sdk':
|
'@openpanel/sdk':
|
||||||
specifier: workspace:1.0.8-local
|
specifier: workspace:1.1.0-local
|
||||||
version: link:../sdk
|
version: link:../sdk
|
||||||
expo-application:
|
expo-application:
|
||||||
specifier: 5 - 7
|
specifier: 5 - 7
|
||||||
@@ -1633,7 +1630,7 @@ importers:
|
|||||||
packages/sdks/web:
|
packages/sdks/web:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@openpanel/sdk':
|
'@openpanel/sdk':
|
||||||
specifier: workspace:1.0.8-local
|
specifier: workspace:1.1.0-local
|
||||||
version: link:../sdk
|
version: link:../sdk
|
||||||
'@rrweb/types':
|
'@rrweb/types':
|
||||||
specifier: 2.0.0-alpha.20
|
specifier: 2.0.0-alpha.20
|
||||||
@@ -5869,8 +5866,8 @@ packages:
|
|||||||
next: ~15.0.8 || ~15.1.12 || ~15.2.9 || ~15.3.9 || ~15.4.11 || ~15.5.10 || ~16.0.11 || ^16.1.5
|
next: ~15.0.8 || ~15.1.12 || ~15.2.9 || ~15.3.9 || ~15.4.11 || ~15.5.10 || ~16.0.11 || ^16.1.5
|
||||||
wrangler: ^4.59.2
|
wrangler: ^4.59.2
|
||||||
|
|
||||||
'@openpanel/nextjs@1.1.1':
|
'@openpanel/nextjs@1.2.0':
|
||||||
resolution: {integrity: sha512-azJSB+SxL4ybj9MA1mDZkLBJ67jbZoDQB52SjaPS0lSBLVEQkcJVMO5x+sZFd9UgVVwWIvkTECdLLF+9eyXf8w==}
|
resolution: {integrity: sha512-APHnOj34aeOM0JZMqSPWPV1oMDiY9I21MBEm+ne3G00H/fNkE2RyG4F0yxoxripn1EqiZK65a07HZH8qfLgXdQ==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
next: ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.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: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
@@ -5879,15 +5876,15 @@ packages:
|
|||||||
'@openpanel/sdk@1.0.2':
|
'@openpanel/sdk@1.0.2':
|
||||||
resolution: {integrity: sha512-WvVWCBcJvJhM5MYKO5Hxjo4G/E0tnK5XK2UC+hKDHtoF+iKvtUWa5bz18pFAPQprq0u/Ev2YqirPsrMQJy5g2g==}
|
resolution: {integrity: sha512-WvVWCBcJvJhM5MYKO5Hxjo4G/E0tnK5XK2UC+hKDHtoF+iKvtUWa5bz18pFAPQprq0u/Ev2YqirPsrMQJy5g2g==}
|
||||||
|
|
||||||
'@openpanel/sdk@1.0.8':
|
'@openpanel/sdk@1.1.0':
|
||||||
resolution: {integrity: sha512-mr7HOZ/vqrJaATDFxcv3yyLjXcUXgsfboa0o0GlhiAYUh2B1Q0kgsm5qkfbtZhTqYP4BmNCWRkfRlpFp4pfpPQ==}
|
resolution: {integrity: sha512-KxFEbY+s0wP5I+su1+j1AOVn6Uvw0QMO+iXbEcmW2MkFAaIuIIPYkHFELxiLPuePLI54gYfbmTr2ZMlz9GJtZw==}
|
||||||
|
|
||||||
'@openpanel/web@1.0.12':
|
|
||||||
resolution: {integrity: sha512-39oL19HYrw4qAzlxbtFP/rfLOaciWJXCxPwL6bk+u4SUcrrOrwmjSg0CwQYyrd2p3wp1QnsCiyv2n0EtEpjQMA==}
|
|
||||||
|
|
||||||
'@openpanel/web@1.0.5':
|
'@openpanel/web@1.0.5':
|
||||||
resolution: {integrity: sha512-n/A9fKiHWcDTH2N6N8MM214ET7aoNJjgpLux0GRW+CD0KDEwI8UosQvvz3UOGHZ3jWqMMsUNdU2B7eYk2W87mg==}
|
resolution: {integrity: sha512-n/A9fKiHWcDTH2N6N8MM214ET7aoNJjgpLux0GRW+CD0KDEwI8UosQvvz3UOGHZ3jWqMMsUNdU2B7eYk2W87mg==}
|
||||||
|
|
||||||
|
'@openpanel/web@1.1.0':
|
||||||
|
resolution: {integrity: sha512-5AUG/uBZZaeMKFNsp5l21D3Lj0ddPLK4NS/XIol7Q0jp2n6Za2wO5UlJ9MUatMoSLyLHc4a1BK9t+gbBlN7cMg==}
|
||||||
|
|
||||||
'@openstatus/react@0.0.3':
|
'@openstatus/react@0.0.3':
|
||||||
resolution: {integrity: sha512-uDiegz7e3H67pG8lTT+op+6w5keTT7XpcENrREaqlWl5j53TYyO8nheOG1PeNw2/Qgd5KaGeRJJFn1crhTUSYw==}
|
resolution: {integrity: sha512-uDiegz7e3H67pG8lTT+op+6w5keTT7XpcENrREaqlWl5j53TYyO8nheOG1PeNw2/Qgd5KaGeRJJFn1crhTUSYw==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -25006,27 +25003,27 @@ snapshots:
|
|||||||
- encoding
|
- encoding
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@openpanel/nextjs@1.1.1(next@16.0.7(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
|
'@openpanel/nextjs@1.2.0(next@16.0.7(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@openpanel/web': 1.0.5
|
'@openpanel/web': 1.1.0
|
||||||
next: 16.0.7(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
next: 16.0.7(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||||
react: 19.2.3
|
react: 19.2.3
|
||||||
react-dom: 19.2.3(react@19.2.3)
|
react-dom: 19.2.3(react@19.2.3)
|
||||||
|
|
||||||
'@openpanel/sdk@1.0.2': {}
|
'@openpanel/sdk@1.0.2': {}
|
||||||
|
|
||||||
'@openpanel/sdk@1.0.8': {}
|
'@openpanel/sdk@1.1.0': {}
|
||||||
|
|
||||||
'@openpanel/web@1.0.12':
|
|
||||||
dependencies:
|
|
||||||
'@openpanel/sdk': 1.0.8
|
|
||||||
'@rrweb/types': 2.0.0-alpha.20
|
|
||||||
rrweb: 2.0.0-alpha.20
|
|
||||||
|
|
||||||
'@openpanel/web@1.0.5':
|
'@openpanel/web@1.0.5':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@openpanel/sdk': 1.0.2
|
'@openpanel/sdk': 1.0.2
|
||||||
|
|
||||||
|
'@openpanel/web@1.1.0':
|
||||||
|
dependencies:
|
||||||
|
'@openpanel/sdk': 1.1.0
|
||||||
|
'@rrweb/types': 2.0.0-alpha.20
|
||||||
|
rrweb: 2.0.0-alpha.20
|
||||||
|
|
||||||
'@openstatus/react@0.0.3(react@19.2.3)':
|
'@openstatus/react@0.0.3(react@19.2.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
react: 19.2.3
|
react: 19.2.3
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
NODE_ENV="production"
|
NODE_ENV="production"
|
||||||
VITE_SELF_HOSTED="true"
|
VITE_SELF_HOSTED="true"
|
||||||
|
SELF_HOSTED="true"
|
||||||
BATCH_SIZE="5000"
|
BATCH_SIZE="5000"
|
||||||
BATCH_INTERVAL="10000"
|
BATCH_INTERVAL="10000"
|
||||||
ALLOW_REGISTRATION="false"
|
ALLOW_REGISTRATION="false"
|
||||||
|
|||||||
Reference in New Issue
Block a user