From 60e13dbf6f560fc954fad1cdc0fb7732e009ebfe Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Fri, 31 Jul 2026 16:39:49 +0300 Subject: [PATCH 001/131] feat(links): add deep link redirects --- .env.example | 2 + .../dashboard/app/(dby)/dby/l/[slug]/page.tsx | 112 +++-- apps/dashboard/app/(dby)/dby/og/route.tsx | 5 +- .../links/_components/deep-link-icons.tsx | 19 +- .../links/_components/deep-link-sheet.tsx | 66 +-- .../links/_components/link-constants.ts | 6 +- .../links/_components/link-form-schema.ts | 22 + .../(main)/links/_components/link-item.tsx | 4 +- .../(main)/links/_components/link-qr-code.tsx | 4 +- .../(main)/links/_components/link-sheet.tsx | 4 +- .../(main)/links/_components/link-utils.ts | 14 +- .../links/_components/links-search-bar.tsx | 64 ++- .../links/_components/use-og-metadata.ts | 5 +- apps/dashboard/app/(main)/links/page.tsx | 55 +-- apps/dashboard/app/api/auth/[...all]/route.ts | 2 +- apps/dashboard/app/api/image-proxy/route.ts | 16 +- .../ai-components/renderers/links/list.tsx | 9 +- .../ai-components/renderers/links/preview.tsx | 3 +- apps/dashboard/lib/ai-components/schemas.ts | 8 +- apps/dashboard/lib/links-url.ts | 26 ++ apps/links/src/index.ts | 6 +- apps/links/src/lib/deep-link-fallback.ts | 78 ++++ apps/links/src/lib/producer.ts | 208 ++++----- apps/links/src/routes/redirect.ts | 312 +++++++------ apps/links/src/utils/geo.ts | 26 +- dashboard.Dockerfile | 2 + docker-compose.selfhost.yml | 2 +- infra/railway-template.md | 9 +- packages/ai/src/ai/mcp/tools.ts | 58 ++- packages/ai/src/ai/tools/link-catalog.ts | 3 + packages/ai/src/ai/tools/links.ts | 93 ++-- packages/ai/src/query/builders/links.ts | 19 +- packages/env/src/app.ts | 7 + packages/env/src/public.ts | 1 + packages/redis/links-cache.ts | 328 +++++++++++-- packages/rpc/src/routers/link-access.ts | 27 ++ packages/rpc/src/routers/link-folders.ts | 25 +- packages/rpc/src/routers/links.schemas.ts | 31 +- packages/rpc/src/routers/links.ts | 438 ++++++++++++++---- packages/shared/package.json | 2 + .../shared/src/constants/deep-link-apps.ts | 81 ++-- packages/shared/src/constants/links.ts | 15 + .../shared/src/utils}/trusted-client-ip.ts | 12 +- packages/validation/package.json | 1 + packages/validation/src/schemas/index.ts | 1 + packages/validation/src/schemas/urls.ts | 6 + turbo.json | 1 + 47 files changed, 1542 insertions(+), 696 deletions(-) create mode 100644 apps/dashboard/lib/links-url.ts create mode 100644 apps/links/src/lib/deep-link-fallback.ts create mode 100644 packages/rpc/src/routers/link-access.ts create mode 100644 packages/shared/src/constants/links.ts rename {apps/dashboard/lib => packages/shared/src/utils}/trusted-client-ip.ts (70%) create mode 100644 packages/validation/src/schemas/urls.ts diff --git a/.env.example b/.env.example index 44cee2c2f7..b9dc1a81ff 100644 --- a/.env.example +++ b/.env.example @@ -17,11 +17,13 @@ REDIS_PASSWORD="" DASHBOARD_URL="" API_URL="" BASKET_URL="" +LINKS_URL="" # Baked into the dashboard browser bundle. Set these before production builds. NEXT_PUBLIC_APP_URL="" NEXT_PUBLIC_API_URL="" NEXT_PUBLIC_BASKET_URL="" +NEXT_PUBLIC_LINKS_URL="" NEXT_PUBLIC_STATUS_URL="" AI_GATEWAY_API_KEY="" diff --git a/apps/dashboard/app/(dby)/dby/l/[slug]/page.tsx b/apps/dashboard/app/(dby)/dby/l/[slug]/page.tsx index 3a606ff961..4f883c04d2 100644 --- a/apps/dashboard/app/(dby)/dby/l/[slug]/page.tsx +++ b/apps/dashboard/app/(dby)/dby/l/[slug]/page.tsx @@ -2,50 +2,79 @@ import { db } from "@databuddy/db"; import { type CachedLink, getCachedLink, - setCachedLink, - setCachedLinkNotFound, + ratelimit, + setCachedLinkIfAbsent, + setCachedLinkNotFoundIfAbsent, } from "@databuddy/redis"; +import { getTrustedClientIp } from "@databuddy/shared/utils/trusted-client-ip"; import type { Metadata } from "next"; +import { headers } from "next/headers"; import { notFound, redirect } from "next/navigation"; +import { cache } from "react"; import { APP_URL } from "@/lib/app-url"; +import { getSafeHttpUrl, isPublicLinkSlug } from "@/lib/links-url"; -async function getLinkBySlug(slug: string): Promise { - const cached = await getCachedLink(slug).catch(() => null); - if (cached) { - return cached; - } +const getLinkBySlug = cache( + async (slug: string): Promise => { + if (!isPublicLinkSlug(slug)) { + return null; + } - const dbLink = await db.query.links.findFirst({ - where: { slug, deletedAt: { isNull: true } }, - columns: { - id: true, - targetUrl: true, - expiresAt: true, - expiredRedirectUrl: true, - ogTitle: true, - ogDescription: true, - ogImageUrl: true, - ogVideoUrl: true, - iosUrl: true, - androidUrl: true, - deepLinkApp: true, - }, - }); + const cached = await getCachedLink(slug).catch(() => ({ + state: "miss" as const, + })); + if (cached.state === "hit") { + return cached.link; + } + if (cached.state === "not_found" || cached.state === "pending") { + // A pending cache lease represents an in-progress write. Do not read + // through it: serving a stale link is worse than a short-lived 404 here. + return null; + } - if (!dbLink) { - await setCachedLinkNotFound(slug).catch(() => {}); - return null; - } + const requestHeaders = await headers(); + const clientIp = getTrustedClientIp(requestHeaders) ?? "unverified"; + const cacheMissLimit = await ratelimit( + `link-proxy-cache-miss:${clientIp}`, + 60, + 60 + ).catch(() => null); + if (!cacheMissLimit?.success) { + return null; + } - const { expiresAt, ...rest } = dbLink; - const link: CachedLink = { - ...rest, - expiresAt: expiresAt?.toISOString() ?? null, - }; + const dbLink = await db.query.links.findFirst({ + where: { slug, deletedAt: { isNull: true } }, + columns: { + id: true, + targetUrl: true, + expiresAt: true, + expiredRedirectUrl: true, + ogTitle: true, + ogDescription: true, + ogImageUrl: true, + ogVideoUrl: true, + iosUrl: true, + androidUrl: true, + deepLinkApp: true, + }, + }); - await setCachedLink(slug, link).catch(() => {}); - return link; -} + if (!dbLink) { + await setCachedLinkNotFoundIfAbsent(slug).catch(() => undefined); + return null; + } + + const { expiresAt, ...rest } = dbLink; + const link: CachedLink = { + ...rest, + expiresAt: expiresAt?.toISOString() ?? null, + }; + + await setCachedLinkIfAbsent(slug, link).catch(() => undefined); + return link; + } +); export async function generateMetadata({ params, @@ -68,8 +97,9 @@ export async function generateMetadata({ title, ...(description && { description }), }); - const image = link.ogImageUrl ?? `${APP_URL}/dby/og?${ogParams}`; - const video = link.ogVideoUrl ?? undefined; + const image = + getSafeHttpUrl(link.ogImageUrl) ?? `${APP_URL}/dby/og?${ogParams}`; + const video = getSafeHttpUrl(link.ogVideoUrl) ?? undefined; return { title, @@ -107,8 +137,12 @@ export default async function LinkProxyPage({ } if (link.expiresAt && new Date(link.expiresAt) < new Date()) { - redirect(link.expiredRedirectUrl ?? "/dby/expired"); + redirect(getSafeHttpUrl(link.expiredRedirectUrl) ?? "/dby/expired"); } - redirect(link.targetUrl); + const targetUrl = getSafeHttpUrl(link.targetUrl); + if (!targetUrl) { + notFound(); + } + redirect(targetUrl); } diff --git a/apps/dashboard/app/(dby)/dby/og/route.tsx b/apps/dashboard/app/(dby)/dby/og/route.tsx index f1b72ff85f..7d5248ee4d 100644 --- a/apps/dashboard/app/(dby)/dby/og/route.tsx +++ b/apps/dashboard/app/(dby)/dby/og/route.tsx @@ -1,4 +1,5 @@ import { ImageResponse } from "next/og"; +import { LINKS_BASE_URL } from "@/lib/links-url"; import { loadOgFonts, OG_COLORS, OgLogo } from "./brand"; export async function GET(request: Request) { @@ -86,7 +87,7 @@ export async function GET(request: Request) { letterSpacing: "0.08em", }} > - dby.sh + {LINKS_BASE_URL} @@ -134,7 +135,7 @@ export async function GET(request: Request) { fontWeight: 500, }} > - databuddy.cc/links + {LINKS_BASE_URL} , diff --git a/apps/dashboard/app/(main)/links/_components/deep-link-icons.tsx b/apps/dashboard/app/(main)/links/_components/deep-link-icons.tsx index 128c26ced3..b18795e254 100644 --- a/apps/dashboard/app/(main)/links/_components/deep-link-icons.tsx +++ b/apps/dashboard/app/(main)/links/_components/deep-link-icons.tsx @@ -1,4 +1,11 @@ -const ICONS: Record = { +import type { DeepLinkAppId } from "@databuddy/shared/constants/deep-link-apps"; + +interface DeepLinkIcon { + hex: string; + path: string; +} + +const ICONS = { instagram: { hex: "#FF0069", path: "M7.0301.084c-1.2768.0602-2.1487.264-2.911.5634-.7888.3075-1.4575.72-2.1228 1.3877-.6652.6677-1.075 1.3368-1.3802 2.127-.2954.7638-.4956 1.6365-.552 2.914-.0564 1.2775-.0689 1.6882-.0626 4.947.0062 3.2586.0206 3.6671.0825 4.9473.061 1.2765.264 2.1482.5635 2.9107.308.7889.72 1.4573 1.388 2.1228.6679.6655 1.3365 1.0743 2.1285 1.38.7632.295 1.6361.4961 2.9134.552 1.2773.056 1.6884.069 4.9462.0627 3.2578-.0062 3.668-.0207 4.9478-.0814 1.28-.0607 2.147-.2652 2.9098-.5633.7889-.3086 1.4578-.72 2.1228-1.3881.665-.6682 1.0745-1.3378 1.3795-2.1284.2957-.7632.4966-1.636.552-2.9124.056-1.2809.0692-1.6898.063-4.948-.0063-3.2583-.021-3.6668-.0817-4.9465-.0607-1.2797-.264-2.1487-.5633-2.9117-.3084-.7889-.72-1.4568-1.3876-2.1228C21.2982 1.33 20.628.9208 19.8378.6165 19.074.321 18.2017.1197 16.9244.0645 15.6471.0093 15.236-.005 11.977.0014 8.718.0076 8.31.0215 7.0301.0839m.1402 21.6932c-1.17-.0509-1.8053-.2453-2.2287-.408-.5606-.216-.96-.4771-1.3819-.895-.422-.4178-.6811-.8186-.9-1.378-.1644-.4234-.3624-1.058-.4171-2.228-.0595-1.2645-.072-1.6442-.079-4.848-.007-3.2037.0053-3.583.0607-4.848.05-1.169.2456-1.805.408-2.2282.216-.5613.4762-.96.895-1.3816.4188-.4217.8184-.6814 1.3783-.9003.423-.1651 1.0575-.3614 2.227-.4171 1.2655-.06 1.6447-.072 4.848-.079 3.2033-.007 3.5835.005 4.8495.0608 1.169.0508 1.8053.2445 2.228.408.5608.216.96.4754 1.3816.895.4217.4194.6816.8176.9005 1.3787.1653.4217.3617 1.056.4169 2.2263.0602 1.2655.0739 1.645.0796 4.848.0058 3.203-.0055 3.5834-.061 4.848-.051 1.17-.245 1.8055-.408 2.2294-.216.5604-.4763.96-.8954 1.3814-.419.4215-.8181.6811-1.3783.9-.4224.1649-1.0577.3617-2.2262.4174-1.2656.0595-1.6448.072-4.8493.079-3.2045.007-3.5825-.006-4.848-.0608M16.953 5.5864A1.44 1.44 0 1 0 18.39 4.144a1.44 1.44 0 0 0-1.437 1.4424M5.8385 12.012c.0067 3.4032 2.7706 6.1557 6.173 6.1493 3.4026-.0065 6.157-2.7701 6.1506-6.1733-.0065-3.4032-2.771-6.1565-6.174-6.1498-3.403.0067-6.156 2.771-6.1496 6.1738M8 12.0077a4 4 0 1 1 4.008 3.9921A3.9996 3.9996 0 0 1 8 12.0077", @@ -35,7 +42,11 @@ const ICONS: Record = { hex: "#26A5E4", path: "M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z", }, -}; +} satisfies Record; + +function isDeepLinkAppId(appId: string): appId is DeepLinkAppId { + return Object.hasOwn(ICONS, appId); +} export function DeepLinkAppIcon({ appId, @@ -46,10 +57,10 @@ export function DeepLinkAppIcon({ className?: string; size?: number; }) { - const icon = ICONS[appId]; - if (!icon) { + if (!isDeepLinkAppId(appId)) { return null; } + const icon = ICONS[appId]; return ( ; - -function ensureProtocol(url: string): string { - const trimmed = url.trim(); - if (!trimmed) { - return trimmed; - } - if (trimmed.startsWith("http://") || trimmed.startsWith("https://")) { - return trimmed; - } - return `https://${trimmed}`; -} - -function validateUrlForApp(url: string, app: DeepLinkApp): string | null { - try { - const parsed = new URL(ensureProtocol(url)); - if (!app.hostnames.includes(parsed.hostname)) { - return `URL must be a ${app.name} link`; - } - return null; - } catch { - return "Invalid URL"; - } -} - interface DeepLinkSheetProps { onOpenChange: (open: boolean) => void; open: boolean; @@ -65,15 +37,16 @@ function AppPicker({ onSelect }: { onSelect: (app: DeepLinkApp) => void }) {
{DEEP_LINK_APPS.map((app) => ( - + ))}
@@ -93,21 +66,16 @@ function DeepLinkForm({ useOrganizationsContext(); const createLink = useCreateLink(); const { folders, isLoading: foldersLoading } = useLinkFolders(); + const schema = useMemo(() => createDeepLinkFormSchema(app), [app]); const form = useForm({ - resolver: zodResolver(deepLinkFormSchema), + resolver: zodResolver(schema), mode: "onChange", defaultValues: { name: "", targetUrl: "", slug: "", folderId: "" }, }); const handleSubmit: SubmitHandler = async (data) => { const targetUrl = ensureProtocol(data.targetUrl); - const validationError = validateUrlForApp(data.targetUrl, app); - if (validationError) { - form.setError("targetUrl", { message: validationError }); - return; - } - const organizationId = activeOrganization?.id ?? activeOrganizationId ?? null; @@ -135,14 +103,16 @@ function DeepLinkForm({ onSubmit={form.handleSubmit(handleSubmit)} > - +
diff --git a/apps/dashboard/app/(main)/links/_components/link-constants.ts b/apps/dashboard/app/(main)/links/_components/link-constants.ts index 3a0ea7a2e0..ed8bf31b43 100644 --- a/apps/dashboard/app/(main)/links/_components/link-constants.ts +++ b/apps/dashboard/app/(main)/links/_components/link-constants.ts @@ -1,4 +1,4 @@ -export const LINKS_BASE_URL = "dby.sh" as const; -export const LINKS_FULL_URL = `https://${LINKS_BASE_URL}` as const; -export const SLUG_REGEX = /^[a-zA-Z0-9_-]+$/; +import { LINK_SLUG_REGEX } from "@databuddy/shared/constants/links"; + +export const SLUG_REGEX = LINK_SLUG_REGEX; export const DOMAIN_REGEX = /^[a-z0-9][a-z0-9.-]*\.[a-z]{2,}/i; diff --git a/apps/dashboard/app/(main)/links/_components/link-form-schema.ts b/apps/dashboard/app/(main)/links/_components/link-form-schema.ts index a08e52d479..d93fae903b 100644 --- a/apps/dashboard/app/(main)/links/_components/link-form-schema.ts +++ b/apps/dashboard/app/(main)/links/_components/link-form-schema.ts @@ -1,5 +1,10 @@ +import { + type DeepLinkApp, + isDeepLinkTarget, +} from "@databuddy/shared/constants/deep-link-apps"; import { z } from "zod"; import { DOMAIN_REGEX, SLUG_REGEX } from "./link-constants"; +import { ensureProtocol } from "./link-utils"; export const linkFormSchema = z.object({ name: z @@ -65,6 +70,23 @@ export const linkFormSchema = z.object({ export type LinkFormData = z.infer; +export function createDeepLinkFormSchema(app: DeepLinkApp) { + return linkFormSchema + .pick({ folderId: true, name: true, slug: true }) + .extend({ + targetUrl: z + .string() + .min(1, "URL is required") + .refine((value) => isDeepLinkTarget(app.id, ensureProtocol(value)), { + message: `URL must be an HTTPS ${app.name} link`, + }), + }); +} + +export type DeepLinkFormData = z.infer< + ReturnType +>; + export type ExpandedSection = | "expiration" | "devices" diff --git a/apps/dashboard/app/(main)/links/_components/link-item.tsx b/apps/dashboard/app/(main)/links/_components/link-item.tsx index 1dce2eaeab..cf7929559a 100644 --- a/apps/dashboard/app/(main)/links/_components/link-item.tsx +++ b/apps/dashboard/app/(main)/links/_components/link-item.tsx @@ -2,12 +2,12 @@ import { FaviconImage } from "@/components/analytics/favicon-image"; import type { Link } from "@/hooks/use-links"; +import { LINKS_BASE_URL, getPublicLinkUrl } from "@/lib/links-url"; import { cn } from "@/lib/utils"; import { getDeepLinkApp } from "@databuddy/shared/constants/deep-link-apps"; import NextLink from "next/link"; import { toast } from "sonner"; import { DeepLinkAppIcon } from "./deep-link-icons"; -import { LINKS_BASE_URL, LINKS_FULL_URL } from "./link-constants"; import { ClockCountdownIcon, CopyIcon, @@ -28,7 +28,7 @@ import { function copyShortUrl(slug: string) { navigator.clipboard - .writeText(`${LINKS_FULL_URL}/${slug}`) + .writeText(getPublicLinkUrl(slug)) .then(() => toast.success("Copied to clipboard")) .catch(() => toast.error("Failed to copy")); } diff --git a/apps/dashboard/app/(main)/links/_components/link-qr-code.tsx b/apps/dashboard/app/(main)/links/_components/link-qr-code.tsx index 81a944cbde..8867436222 100644 --- a/apps/dashboard/app/(main)/links/_components/link-qr-code.tsx +++ b/apps/dashboard/app/(main)/links/_components/link-qr-code.tsx @@ -3,8 +3,8 @@ import { type ChangeEvent, useRef, useState } from "react"; import { QRCode } from "react-qrcode-logo"; import { toast } from "sonner"; +import { getPublicLinkUrl } from "@/lib/links-url"; import { cn } from "@/lib/utils"; -import { LINKS_FULL_URL } from "./link-constants"; import { CopyIcon, DownloadSimpleIcon, @@ -47,7 +47,7 @@ export function LinkQrCode({ const qrRef = useRef(null); const qrContainerRef = useRef(null); const fileInputRef = useRef(null); - const shortUrl = `${LINKS_FULL_URL}/${slug}`; + const shortUrl = getPublicLinkUrl(slug); const [qr, setQr] = useState({ color: "#000000", diff --git a/apps/dashboard/app/(main)/links/_components/link-sheet.tsx b/apps/dashboard/app/(main)/links/_components/link-sheet.tsx index 68b925372c..8dfb9f47a1 100644 --- a/apps/dashboard/app/(main)/links/_components/link-sheet.tsx +++ b/apps/dashboard/app/(main)/links/_components/link-sheet.tsx @@ -6,13 +6,13 @@ import { Controller, type SubmitHandler, useForm } from "react-hook-form"; import { toast } from "sonner"; import { useOrganizationsContext } from "@/components/providers/organizations-provider"; import { useCopyToClipboard } from "@/hooks/use-copy-to-clipboard"; +import { LINKS_BASE_URL, getPublicLinkUrl } from "@/lib/links-url"; import { type Link, useCreateLink, useLinkFolders, useUpdateLink, } from "@/hooks/use-links"; -import { LINKS_BASE_URL, LINKS_FULL_URL } from "./link-constants"; import type { LinkFormData } from "./link-form-schema"; import { linkFormSchema } from "./link-form-schema"; import { LinkQrCode } from "./link-qr-code"; @@ -212,7 +212,7 @@ function LinkSheetInner({ open, onOpenChange, link, onSave }: LinkSheetProps) {
- {deepLinksEnabled ? ( - - - - New Link - - - - - Short Link - - setActiveDialog({ type: "deep-link" })} - > - - Deep Link - - - - ) : ( - - )} + + + + + Short Link + + setActiveDialog({ type: "deep-link" })} + > + + Deep Link + + + @@ -261,7 +247,6 @@ function LinksPageContent() { toast.success("Link copied"), }); const handleCopy = useCallback(() => { - copyToClipboard(`https://${shortUrl}`); - }, [copyToClipboard, shortUrl]); + copyToClipboard(getPublicLinkUrl(link.slug)); + }, [copyToClipboard, link.slug]); return (
{link.slug === "(auto-generated)" ? "Will be auto-generated" - : `dby.sh/${link.slug}`} + : `${LINKS_BASE_URL}/${link.slug}`}
diff --git a/apps/dashboard/lib/ai-components/schemas.ts b/apps/dashboard/lib/ai-components/schemas.ts index 39fa6777bd..19f73f34c8 100644 --- a/apps/dashboard/lib/ai-components/schemas.ts +++ b/apps/dashboard/lib/ai-components/schemas.ts @@ -1,4 +1,10 @@ import { z } from "zod"; +import { isPublicLinkSlug } from "@/lib/links-url"; + +const linkSlugSchema = z.string().refine(isPublicLinkSlug, { + message: + "Slug must be 3-50 characters and use only letters, numbers, hyphens, or underscores", +}); export const timeSeriesSchema = z .object({ @@ -72,7 +78,7 @@ const linkItemSchema = z .object({ id: z.string(), name: z.string(), - slug: z.string(), + slug: linkSlugSchema, targetUrl: z.string(), expiresAt: z.string().nullable().optional(), createdAt: z.string().optional(), diff --git a/apps/dashboard/lib/links-url.ts b/apps/dashboard/lib/links-url.ts new file mode 100644 index 0000000000..fa8c699596 --- /dev/null +++ b/apps/dashboard/lib/links-url.ts @@ -0,0 +1,26 @@ +import { publicConfig } from "@databuddy/env/public"; +import { + isHttpUrl, + PUBLIC_LINK_SLUG_REGEX, +} from "@databuddy/shared/constants/links"; + +const linksUrl = new URL(publicConfig.urls.links); + +export const LINKS_BASE_URL = linksUrl.host; + +export function isPublicLinkSlug(slug: string): boolean { + return PUBLIC_LINK_SLUG_REGEX.test(slug); +} + +export function getPublicLinkUrl(slug: string): string { + return new URL(`/${encodeURIComponent(slug)}`, linksUrl).toString(); +} + +export function getSafeHttpUrl( + value: string | null | undefined +): string | null { + if (!value) { + return null; + } + return isHttpUrl(value) ? value : null; +} diff --git a/apps/links/src/index.ts b/apps/links/src/index.ts index 12ae8617b4..308ecdffad 100644 --- a/apps/links/src/index.ts +++ b/apps/links/src/index.ts @@ -68,7 +68,11 @@ const app = new Elysia() } const [postgres, cache] = await Promise.all([ - ping("postgres", () => db.execute(sql`SELECT 1`).then(() => {})), + ping("postgres", async () => { + await db + .execute(sql`SELECT "deep_link_app" FROM "links" LIMIT 0`) + .then(() => {}); + }), ping("redis", () => redis.ping().then(() => {})), ]); diff --git a/apps/links/src/lib/deep-link-fallback.ts b/apps/links/src/lib/deep-link-fallback.ts new file mode 100644 index 0000000000..0ce1c3eae2 --- /dev/null +++ b/apps/links/src/lib/deep-link-fallback.ts @@ -0,0 +1,78 @@ +const FALLBACK_DELAY_MS = 1500; + +const HTML_ESCAPES: Record = { + '"': """, + "&": "&", + "'": "'", + "<": "<", + ">": ">", +}; + +const SCRIPT_ESCAPES: Record = { + "&": "\\u0026", + "<": "\\u003c", + ">": "\\u003e", + "\u2028": "\\u2028", + "\u2029": "\\u2029", +}; + +function escapeHtml(value: string): string { + return value.replace(/[&<>"']/g, (character) => HTML_ESCAPES[character]); +} + +function serializeForScript(value: string): string { + return JSON.stringify(value).replace( + /[<>&\u2028\u2029]/g, + (character) => SCRIPT_ESCAPES[character] + ); +} + +export function renderDeepLinkFallbackPage( + deepUrl: string, + fallbackUrl: string +): string { + const appUrl = serializeForScript(deepUrl); + const fallback = serializeForScript(fallbackUrl); + const safeDeepUrl = escapeHtml(deepUrl); + const safeFallbackUrl = escapeHtml(fallbackUrl); + + return ` + + + + + + Opening app… + + +
+

Opening the app…

+

Open app

+

Continue in your browser

+
+ + +`; +} + +export function createDeepLinkFallbackResponse( + deepUrl: string, + fallbackUrl: string +): Response { + return new Response(renderDeepLinkFallbackPage(deepUrl, fallbackUrl), { + headers: { + "Cache-Control": "private, no-store", + "Content-Type": "text/html; charset=utf-8", + }, + }); +} diff --git a/apps/links/src/lib/producer.ts b/apps/links/src/lib/producer.ts index 976e5cd049..759a33b0d2 100644 --- a/apps/links/src/lib/producer.ts +++ b/apps/links/src/lib/producer.ts @@ -1,4 +1,3 @@ -import { clickHouse, TABLE_NAMES } from "@databuddy/db/clickhouse"; import { CompressionTypes, Kafka, type Producer } from "kafkajs"; import { captureError, setAttributes } from "./logging"; @@ -10,15 +9,20 @@ const reconnectCooldownMs = 60_000; const sendTimeoutMs = 3000; let producer: Producer | null = null; -let connected = false; let connectPromise: Promise | null = null; let nextReconnectAt = 0; +/** + * Immutable wire payload for a short-link click. The generated ID stays with + * the record through Kafka and consumer retries, letting downstream queries + * collapse pipeline replays without relying on a relational outbox. + */ export interface LinkVisitEvent { browser_name: string | null; city: string | null; country: string | null; device_type: string | null; + id: string; ip_hash: string; link_id: string; referrer: string | null; @@ -27,29 +31,45 @@ export interface LinkVisitEvent { user_agent: string | null; } -export interface LinkVisitSendResult { - clickhouse_fallback_success: boolean; - kafka_broker_configured: boolean; - kafka_connected: boolean; - kafka_send_ambiguous: boolean; - kafka_send_skipped: boolean; - kafka_send_success: boolean; +function withTimeout(promise: Promise, timeoutMs: number): Promise { + return new Promise((resolve, reject) => { + const timeout = setTimeout( + () => reject(new Error(`Operation timed out after ${timeoutMs}ms`)), + timeoutMs + ); + + promise.then( + (value) => { + clearTimeout(timeout); + resolve(value); + }, + (error) => { + clearTimeout(timeout); + reject(error); + } + ); + }); } -function withTimeout(promise: Promise, timeoutMs: number): Promise { - return Promise.race([ - promise, - new Promise((_, reject) => - setTimeout( - () => reject(new Error(`Operation timed out after ${timeoutMs}ms`)), - timeoutMs - ) - ), - ]); +function discardProducer( + candidate: Producer, + operation: "kafka_connect_disconnect" | "kafka_send_disconnect" +): void { + if (producer === candidate) { + producer = null; + } + + try { + withTimeout(candidate.disconnect(), sendTimeoutMs).catch((error) => { + captureError(error, { operation }); + }); + } catch (error) { + captureError(error, { operation }); + } } function connect(): Promise { - if (connected && producer) { + if (producer) { return Promise.resolve(true); } if (!broker) { @@ -68,32 +88,38 @@ function connect(): Promise { } connectPromise = (async () => { + let candidate: Producer | null = null; + try { const kafka = new Kafka({ brokers: [broker], clientId: "links-producer", + connectionTimeout: sendTimeoutMs, + authenticationTimeout: sendTimeoutMs, requestTimeout: sendTimeoutMs, - ...(username && - password && { - sasl: { mechanism: "scram-sha-256", username, password }, - ssl: process.env.REDPANDA_SSL === "true", - }), + enforceRequestTimeout: true, + ...(username && password + ? { sasl: { mechanism: "scram-sha-256", username, password } } + : {}), + ...(process.env.REDPANDA_SSL === "true" ? { ssl: true } : {}), }); - producer = kafka.producer({ + candidate = kafka.producer({ maxInFlightRequests: 5, idempotent: true, transactionTimeout: 30_000, }); - await withTimeout(producer.connect(), sendTimeoutMs); - connected = true; + await withTimeout(candidate.connect(), sendTimeoutMs); + producer = candidate; nextReconnectAt = 0; setAttributes({ kafka_connected: true }); return true; } catch (error) { captureError(error, { operation: "kafka_connect" }); - connected = false; + if (candidate) { + discardProducer(candidate, "kafka_connect_disconnect"); + } producer = null; nextReconnectAt = Date.now() + reconnectCooldownMs; setAttributes({ kafka_connected: false }); @@ -106,96 +132,61 @@ function connect(): Promise { return connectPromise; } -async function insertClickHouseFallback( - event: LinkVisitEvent -): Promise { - if (!process.env.CLICKHOUSE_URL) { - setAttributes({ clickhouse_fallback_configured: false }); - return false; - } - - try { - await clickHouse.insert({ - table: TABLE_NAMES.link_visits, - values: [event], - format: "JSONEachRow", - }); - setAttributes({ clickhouse_fallback_success: true }); - return true; - } catch (error) { - captureError(error, { - operation: "clickhouse_link_visit_fallback", - clickhouse_table: TABLE_NAMES.link_visits, - }); - setAttributes({ clickhouse_fallback_success: false }); - return false; - } -} - export async function sendLinkVisit( event: LinkVisitEvent, key?: string -): Promise { +): Promise { const eventKey = key ?? event.link_id; setAttributes({ + kafka_broker_configured: Boolean(broker), kafka_topic: TOPIC, kafka_message_key: eventKey ?? "unknown", }); - let kafkaSent = false; - let kafkaSkipped = false; - let kafkaAmbiguous = false; - - if ((await connect()) && producer) { - try { - await withTimeout( - producer.send({ - topic: TOPIC, - messages: [ - { - value: JSON.stringify(event, (_k, v) => - v === undefined ? null : v - ), - key: eventKey, - }, - ], - compression: CompressionTypes.GZIP, - }), - sendTimeoutMs - ); - kafkaSent = true; - setAttributes({ kafka_send_success: true }); - } catch (error) { - kafkaAmbiguous = true; - captureError(error, { - operation: "kafka_send", - kafka_topic: TOPIC, - }); - connected = false; - nextReconnectAt = Date.now() + reconnectCooldownMs; - setAttributes({ - kafka_send_success: false, - kafka_send_ambiguous: true, - }); - } - } else { - kafkaSkipped = true; - setAttributes({ kafka_send_skipped: true }); + const kafkaReady = await connect(); + const activeProducer = producer; + if (!(kafkaReady && activeProducer)) { + setAttributes({ + kafka_connected: false, + kafka_send_skipped: true, + }); + return false; } - const shouldFallback = !(kafkaSent || kafkaAmbiguous); - const fallbackSuccess = shouldFallback - ? await insertClickHouseFallback(event) - : false; - - return { - clickhouse_fallback_success: fallbackSuccess, - kafka_broker_configured: Boolean(broker), - kafka_connected: connected, - kafka_send_ambiguous: kafkaAmbiguous, - kafka_send_skipped: kafkaSkipped, - kafka_send_success: kafkaSent, - }; + setAttributes({ kafka_connected: true }); + try { + await withTimeout( + activeProducer.send({ + topic: TOPIC, + acks: -1, + messages: [ + { + value: JSON.stringify(event, (_k, v) => + v === undefined ? null : v + ), + key: eventKey, + }, + ], + compression: CompressionTypes.GZIP, + }), + sendTimeoutMs + ); + setAttributes({ kafka_send_success: true }); + return true; + } catch (error) { + captureError(error, { + operation: "kafka_send", + kafka_topic: TOPIC, + }); + discardProducer(activeProducer, "kafka_send_disconnect"); + nextReconnectAt = Date.now() + reconnectCooldownMs; + setAttributes({ + kafka_connected: false, + kafka_send_ambiguous: true, + kafka_send_success: false, + }); + return false; + } } export async function disconnectProducer(): Promise { @@ -208,5 +199,4 @@ export async function disconnectProducer(): Promise { captureError(error, { operation: "kafka_disconnect" }); } producer = null; - connected = false; } diff --git a/apps/links/src/routes/redirect.ts b/apps/links/src/routes/redirect.ts index f1ecfa1154..5d028b74b8 100644 --- a/apps/links/src/routes/redirect.ts +++ b/apps/links/src/routes/redirect.ts @@ -3,32 +3,32 @@ import { config } from "@databuddy/env/app"; import { type CachedLink, getCachedLink, - setCachedLink, - setCachedLinkNotFound, - shouldRecordClick, + getRateLimitHeaders, + ratelimit, + setCachedLinkIfAbsent, + setCachedLinkNotFoundIfAbsent, } from "@databuddy/redis"; import { links } from "@databuddy/db/schema"; import { BotCategory, detectBot } from "@databuddy/shared/bot-detection"; import { resolveDeepLink } from "@databuddy/shared/constants/deep-link-apps"; +import { + isHttpUrl, + PUBLIC_LINK_SLUG_REGEX, +} from "@databuddy/shared/constants/links"; import { Elysia, redirect, t } from "elysia"; import { LRUCache } from "lru-cache"; -import { createHash } from "node:crypto"; +import { createHash, randomUUID } from "node:crypto"; import { UAParser } from "ua-parser-js"; import { captureError, mergeWideEvent, record } from "../lib/logging"; -import { sendLinkVisit } from "../lib/producer"; +import { createDeepLinkFallbackResponse } from "../lib/deep-link-fallback"; +import { sendLinkVisit, type LinkVisitEvent } from "../lib/producer"; import { extractIp, getGeo } from "../utils/geo"; const EXPIRED_URL = `${config.urls.dashboard}/dby/expired`; const NOT_FOUND_URL = `${config.urls.dashboard}/dby/not-found`; const OG_PROXY_URL = `${config.urls.dashboard}/dby/l`; -const NULL_SENTINEL = Symbol("null"); -const linkCache = new LRUCache({ - max: 1000, - ttl: 5000, -}); const etagCache = new LRUCache({ max: 1000, ttl: 60_000 }); -const dedupCache = new LRUCache({ max: 10_000, ttl: 300_000 }); const botCache = new LRUCache({ max: 500, ttl: 300_000, @@ -106,17 +106,22 @@ function getTargetUrl(link: CachedLink, ua: string | null): string { const lower = ua.toLowerCase(); if ( link.iosUrl && + isHttpUrl(link.iosUrl) && (lower.includes("iphone") || lower.includes("ipad") || lower.includes("ipod")) ) { return link.iosUrl; } - if (link.androidUrl && lower.includes("android")) { + if ( + link.androidUrl && + isHttpUrl(link.androidUrl) && + lower.includes("android") + ) { return link.androidUrl; } } - return link.targetUrl; + return isHttpUrl(link.targetUrl) ? link.targetUrl : NOT_FOUND_URL; } function isMobile(ua: string | null): boolean { @@ -144,33 +149,56 @@ function generateETag(link: CachedLink, targetUrl: string): string { return etag; } -async function lookupLink(slug: string) { - const memHit = linkCache.get(slug); - if (memHit !== undefined) { - return { - link: memHit === NULL_SENTINEL ? null : memHit, - cacheHit: true, - lookup_source: "mem", - redis_ms: 0, - db_ms: 0, - }; - } - +async function lookupLink(slug: string, ipHash: string) { const t0 = performance.now(); const cached = await record("link.cache.get", () => getCachedLink(slug).catch((err) => { captureError(err, { error_step: "cache_get" }); - return null; + return { state: "miss" as const }; }) ); const redis_ms = ms(t0); - if (cached) { - linkCache.set(slug, cached); + if (cached.state === "hit") { return { - link: cached, + link: cached.link, cacheHit: true, lookup_source: "redis", + rateLimitHeaders: null, + redis_ms, + db_ms: 0, + }; + } + if (cached.state === "not_found") { + return { + link: null, + cacheHit: true, + lookup_source: "redis_not_found", + rateLimitHeaders: null, + redis_ms, + db_ms: 0, + }; + } + if (cached.state === "pending") { + return { + link: null, + cacheHit: true, + lookup_source: "redis_pending", + rateLimitHeaders: null, + redis_ms, + db_ms: 0, + }; + } + + const limit = await record("link.cache_miss.rate_limit", () => + ratelimit(`link-cache-miss:${ipHash}`, 60, 60) + ); + if (!limit.success) { + return { + link: null, + cacheHit: false, + lookup_source: "rate_limited", + rateLimitHeaders: getRateLimitHeaders(limit), redis_ms, db_ms: 0, }; @@ -200,9 +228,8 @@ async function lookupLink(slug: string) { const db_ms = ms(t1); if (!row) { - linkCache.set(slug, NULL_SENTINEL); await record("link.cache.set_not_found", () => - setCachedLinkNotFound(slug).catch((err) => + setCachedLinkNotFoundIfAbsent(slug).catch((err) => captureError(err, { error_step: "cache_set_not_found" }) ) ); @@ -210,6 +237,7 @@ async function lookupLink(slug: string) { link: null, cacheHit: false, lookup_source: "db_miss", + rateLimitHeaders: null, redis_ms, db_ms, }; @@ -229,92 +257,75 @@ async function lookupLink(slug: string) { deepLinkApp: row.deepLinkApp, }; - linkCache.set(slug, link); await record("link.cache.set", () => - setCachedLink(slug, link).catch((err) => + setCachedLinkIfAbsent(slug, link).catch((err) => captureError(err, { error_step: "cache_backfill" }) ) ); - return { link, cacheHit: false, lookup_source: "db", redis_ms, db_ms }; + return { + link, + cacheHit: false, + lookup_source: "db", + rateLimitHeaders: null, + redis_ms, + db_ms, + }; } async function recordClick( link: CachedLink, - _slug: string, ipHash: string, ip: string, request: Request ): Promise { const t0 = performance.now(); - const dedupKey = `${link.id}:${ipHash}`; - - if (dedupCache.has(dedupKey)) { - mergeWideEvent({ - click_recorded: false, - click_reason: "mem_deduplicated", - "timing.click": ms(t0), - }); - return; - } - - const t1 = performance.now(); - const shouldRecord = await record("link.click.dedup", () => - shouldRecordClick(link.id, ipHash).catch((err) => { - captureError(err, { error_step: "dedup_check" }); - return true; - }) - ); - const dedup_ms = ms(t1); - - if (!shouldRecord) { - dedupCache.set(dedupKey, true); - mergeWideEvent({ - click_recorded: false, - click_reason: "deduplicated", - "timing.click.dedup": dedup_ms, - "timing.click": ms(t0), - }); - return; - } const userAgent = request.headers.get("user-agent"); const ua = parseUA(userAgent); - const t2 = performance.now(); - const geo = await record("link.click.geo", () => getGeo(ip, request)); - const geo_ms = ms(t2); - - const t3 = performance.now(); - const kafkaResult = await record("link.click.analytics", () => - sendLinkVisit( - { - link_id: link.id, - timestamp: new Date().toISOString().replace("T", " ").replace("Z", ""), - referrer: request.headers.get("referer"), - user_agent: userAgent, - ip_hash: ipHash, - country: geo.country, - region: geo.region, - city: geo.city, - browser_name: ua.browser, - device_type: ua.device, - }, - link.id - ) + const tGeo = performance.now(); + const geo = await record("link.click.geo", () => getGeo(ip, request)).catch( + (error) => { + captureError(error, { error_step: "click_geo" }); + return { city: null, country: null, region: null }; + } + ); + const geo_ms = ms(tGeo); + + const event: LinkVisitEvent = { + browser_name: ua.browser, + city: geo.city, + country: geo.country, + device_type: ua.device, + id: randomUUID(), + ip_hash: ipHash, + link_id: link.id, + referrer: request.headers.get("referer"), + region: geo.region, + timestamp: new Date().toISOString().replace("T", " ").replace("Z", ""), + user_agent: userAgent, + }; + const tDelivery = performance.now(); + const acknowledged = await record("link.click.kafka", () => + sendLinkVisit(event, link.id) ); - const kafka_ms = ms(t3); + const delivery_ms = ms(tDelivery); + + // Kafka's full acknowledgement is the only success boundary. A timeout or + // disconnect is intentionally treated as ambiguous: returning a 503 lets + // the caller retry instead of claiming a click that might be lost. + if (!acknowledged) { + throw new Error("Link visit was not acknowledged by Redpanda"); + } mergeWideEvent({ click_recorded: true, + click_reason: "kafka_acknowledged", ...(ua.browser ? { click_browser: ua.browser } : {}), ...(ua.device ? { click_device: ua.device } : {}), ...(geo.country ? { click_country: geo.country } : {}), - kafka_send_success: kafkaResult.kafka_send_success, - kafka_connected: kafkaResult.kafka_connected, - clickhouse_fallback_success: kafkaResult.clickhouse_fallback_success, - "timing.click.dedup": dedup_ms, "timing.click.geo": geo_ms, - "timing.click.analytics": kafka_ms, + "timing.click.delivery": delivery_ms, "timing.click": ms(t0), }); } @@ -325,17 +336,17 @@ const IGNORED_SLUGS = new Set([ "sitemap.xml", ".well-known", ]); -const SLUG_RE = /^[a-zA-Z0-9_-]{3,50}$/; - -function trackClick( - link: CachedLink, - slug: string, - ipHash: string, - ip: string, - request: Request -): void { - recordClick(link, slug, ipHash, ip, request).catch((err) => - captureError(err, { error_step: "record_click", link_id: link.id }) +function retryResponse(error: string, retryAfter: string): Response { + // policy-ignore http/no-custom-json-error-response: These edge retry paths must preserve Retry-After when a cache mutation or click admission is unavailable. + return Response.json( + { error }, + { + status: 503, + headers: { + "Cache-Control": "private, no-store", + "Retry-After": retryAfter, + }, + } ); } @@ -349,7 +360,7 @@ export const redirectRoute = new Elysia().get( set.status = 404; return; } - if (!SLUG_RE.test(slug)) { + if (!PUBLIC_LINK_SLUG_REGEX.test(slug)) { set.headers = { "Cache-Control": "private, no-store" }; return redirect(NOT_FOUND_URL, 302); } @@ -365,16 +376,34 @@ export const redirectRoute = new Elysia().get( } const tLookup = performance.now(); - const { link, cacheHit, lookup_source, redis_ms, db_ms } = await record( - "redirect.lookup", - () => lookupLink(slug) - ); + const { link, cacheHit, lookup_source, rateLimitHeaders, redis_ms, db_ms } = + await record("redirect.lookup", () => lookupLink(slug, ipHash)); ev.lookup_ms = ms(tLookup); ev.lookup_source = lookup_source; ev.cache_hit = cacheHit; ev.redis_ms = redis_ms; ev.db_ms = db_ms; + if (rateLimitHeaders) { + emit("rate_limited"); + // policy-ignore http/no-custom-json-error-response: The cache-miss limiter returns per-request rate-limit headers that this edge route must preserve. + return Response.json( + { error: "Too many uncached links requested" }, + { + status: 429, + headers: { + "Cache-Control": "private, no-store", + ...rateLimitHeaders, + }, + } + ); + } + + if (lookup_source === "redis_pending") { + emit("mutation_pending"); + return retryResponse("This link is being updated. Please retry.", "1"); + } + if (!link) { emit("not_found"); set.headers = { "Cache-Control": "private, no-store" }; @@ -386,7 +415,12 @@ export const redirectRoute = new Elysia().get( if (link.expiresAt && new Date(link.expiresAt) < new Date()) { emit("expired"); set.headers = { "Cache-Control": "private, no-store" }; - return redirect(link.expiredRedirectUrl ?? EXPIRED_URL, 302); + return redirect( + link.expiredRedirectUrl && isHttpUrl(link.expiredRedirectUrl) + ? link.expiredRedirectUrl + : EXPIRED_URL, + 302 + ); } const userAgent = request.headers.get("user-agent"); @@ -406,36 +440,54 @@ export const redirectRoute = new Elysia().get( return redirect(targetUrl, 302); } - if (link.deepLinkApp && isMobile(userAgent)) { - const deepUri = resolveDeepLink(link.deepLinkApp, targetUrl); - if (deepUri) { - trackClick(link, slug, ipHash, ip, request); - emit("deep_link"); - set.headers = { "Cache-Control": "private, no-store" }; - return redirect(deepUri, 302); + const deepUri = + link.deepLinkApp && isMobile(userAgent) + ? resolveDeepLink(link.deepLinkApp, link.targetUrl) + : null; + let response: Response; + let result: "deep_link" | "success"; + let etag: string | undefined; + + if (deepUri) { + result = "deep_link"; + response = createDeepLinkFallbackResponse(deepUri, targetUrl); + } else { + etag = generateETag(link, targetUrl); + if (request.headers.get("if-none-match") === etag) { + emit("not_modified"); + set.status = 304; + set.headers = { + "Cache-Control": "private, no-cache", + ETag: etag, + }; + return; } + result = "success"; + response = redirect(targetUrl, 302); } - const etag = generateETag(link, targetUrl); + try { + await recordClick(link, ipHash, ip, request); + } catch (error) { + captureError(error, { + error_step: "click_admission", + link_id: link.id, + }); + emit("analytics_unavailable"); + return retryResponse( + "Click tracking is temporarily unavailable. Please retry.", + "5" + ); + } - if (request.headers.get("if-none-match") === etag) { - emit("not_modified"); - set.status = 304; + emit(result); + if (etag) { set.headers = { "Cache-Control": "private, no-cache", ETag: etag, }; - return; } - - trackClick(link, slug, ipHash, ip, request); - - emit("success"); - set.headers = { - "Cache-Control": "private, no-cache", - ETag: etag, - }; - return redirect(targetUrl, 302); + return response; }, { params: t.Object({ slug: t.String() }) } ); diff --git a/apps/links/src/utils/geo.ts b/apps/links/src/utils/geo.ts index febca3c27c..c31a12b27c 100644 --- a/apps/links/src/utils/geo.ts +++ b/apps/links/src/utils/geo.ts @@ -1,4 +1,5 @@ import { cacheable } from "@databuddy/redis"; +import { getTrustedClientIp } from "@databuddy/shared/utils/trusted-client-ip"; import type { City } from "@maxmind/geoip2-node"; import { AddressNotFoundError, @@ -7,6 +8,7 @@ import { } from "@maxmind/geoip2-node"; import { log } from "evlog"; import { LRUCache } from "lru-cache"; +import { isIP } from "node:net"; import { captureError, record, setAttributes } from "../lib/logging"; interface GeoIPReader extends Reader { @@ -75,13 +77,8 @@ function loadDatabase(): Promise { return loadPromise; } -const IPV4_RE = - /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/; -const IPV6_RE = - /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/; - function isValidIp(ip: string): boolean { - return Boolean(ip && (IPV4_RE.test(ip) || IPV6_RE.test(ip))); + return isIP(ip) !== 0; } const IGNORED_IPS = new Set(["127.0.0.1", "::1", "unknown"]); @@ -183,21 +180,6 @@ export async function getGeo( return geo; } -const TRUSTED_IP_HEADER = ( - process.env.TRUSTED_IP_HEADER ?? "cf-connecting-ip" -).toLowerCase(); - export function extractIp(request: Request): string { - const raw = request.headers.get(TRUSTED_IP_HEADER); - if (!raw) { - return "unknown"; - } - const candidate = - TRUSTED_IP_HEADER === "x-forwarded-for" - ? raw.split(",")[0]?.trim() - : raw.trim(); - if (!(candidate && isValidIp(candidate))) { - return "unknown"; - } - return candidate; + return getTrustedClientIp(request.headers) ?? "unknown"; } diff --git a/dashboard.Dockerfile b/dashboard.Dockerfile index 8da1ed835d..18bdbdf713 100644 --- a/dashboard.Dockerfile +++ b/dashboard.Dockerfile @@ -24,11 +24,13 @@ ENV NEXT_TELEMETRY_DISABLED=1 ARG NEXT_PUBLIC_API_URL=https://api.databuddy.cc ARG NEXT_PUBLIC_APP_URL=https://app.databuddy.cc ARG NEXT_PUBLIC_BASKET_URL=https://basket.databuddy.cc +ARG NEXT_PUBLIC_LINKS_URL=https://dby.sh ARG NEXT_PUBLIC_STATUS_URL=https://status.databuddy.cc ENV NEXT_PUBLIC_API_URL=$NEXT_PUBLIC_API_URL ENV NEXT_PUBLIC_APP_URL=$NEXT_PUBLIC_APP_URL ENV NEXT_PUBLIC_BASKET_URL=$NEXT_PUBLIC_BASKET_URL +ENV NEXT_PUBLIC_LINKS_URL=$NEXT_PUBLIC_LINKS_URL ENV NEXT_PUBLIC_STATUS_URL=$NEXT_PUBLIC_STATUS_URL RUN DATABASE_URL=postgres://databuddy:databuddy@localhost:5432/databuddy \ diff --git a/docker-compose.selfhost.yml b/docker-compose.selfhost.yml index f192de2fc9..0746d3af9f 100644 --- a/docker-compose.selfhost.yml +++ b/docker-compose.selfhost.yml @@ -213,7 +213,7 @@ services: LINKS_ROOT_REDIRECT_URL: ${LINKS_ROOT_REDIRECT_URL:-https://databuddy.cc} GEOIP_DB_URL: ${GEOIP_DB_URL:-https://cdn.databuddy.cc/mmdb/GeoLite2-City.mmdb} healthcheck: - test: [ "CMD", "bun", "-e", "fetch('http://localhost:2500/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))" ] + test: [ "CMD", "bun", "-e", "fetch('http://localhost:2500/health/status').then(async r=>process.exit(r.ok&&(await r.json()).status==='ok'?0:1)).catch(()=>process.exit(1))" ] interval: 30s timeout: 3s start_period: 10s diff --git a/infra/railway-template.md b/infra/railway-template.md index 5591f2dd52..0d0fd56a2c 100644 --- a/infra/railway-template.md +++ b/infra/railway-template.md @@ -76,6 +76,8 @@ NEXT_PUBLIC_APP_URL=https://${{Dashboard.RAILWAY_PUBLIC_DOMAIN}} NEXT_PUBLIC_API_URL=https://${{API.RAILWAY_PUBLIC_DOMAIN}} NEXT_PUBLIC_BASKET_URL=https://${{Events.RAILWAY_PUBLIC_DOMAIN}} NEXT_PUBLIC_STATUS_URL=https://${{Status.RAILWAY_PUBLIC_DOMAIN}} +# When Links is enabled and has a public domain, set this before rebuilding Dashboard: +# NEXT_PUBLIC_LINKS_URL=https://${{Links.RAILWAY_PUBLIC_DOMAIN}} ``` ### Status @@ -170,6 +172,11 @@ DASHBOARD_URL=https://${{Dashboard.RAILWAY_PUBLIC_DOMAIN}} LINKS_ROOT_REDIRECT_URL=https://${{Dashboard.RAILWAY_PUBLIC_DOMAIN}} ``` +Run the `Init` job after any Links schema change before deploying the Links +service. Its `/health/status` readiness check verifies that the +`links.deep_link_app` column is available, so a stale database cannot serve +deep links. + ## Health checks - `Dashboard`: `/login` @@ -177,7 +184,7 @@ LINKS_ROOT_REDIRECT_URL=https://${{Dashboard.RAILWAY_PUBLIC_DOMAIN}} - `API`: `/health` - `Events`: `/health` - `Insights`: `/health/status` -- `Links`: `/health` +- `Links`: `/health/status` - `ClickHouse`: `/ping` ## First-run schema setup diff --git a/packages/ai/src/ai/mcp/tools.ts b/packages/ai/src/ai/mcp/tools.ts index 1a2cee149d..fd9aa3537d 100644 --- a/packages/ai/src/ai/mcp/tools.ts +++ b/packages/ai/src/ai/mcp/tools.ts @@ -6,6 +6,11 @@ import { insightTimelineItemSchema, insightTimelineReplySchema, } from "@databuddy/shared/insights"; +import { + DEEP_LINK_APP_IDS, + isDeepLinkTarget, +} from "@databuddy/shared/constants/deep-link-apps"; +import { httpUrlSchema } from "@databuddy/validation"; import { userRuleSchema, variantSchema } from "@databuddy/shared/flags"; import { executeBatch } from "../../query"; import { runInvestigationAction } from "../tools/investigations"; @@ -1090,6 +1095,7 @@ const searchLinksTool = defineMcpTool( name: z.string(), slug: z.string(), targetUrl: z.string(), + deepLinkApp: z.string().nullable(), folderId: z.string().nullable(), folder: LinkRowOutputSchema.shape.folder, externalId: z.string().nullable(), @@ -1117,6 +1123,7 @@ const searchLinksTool = defineMcpTool( name: link.name, slug: link.slug, targetUrl: link.targetUrl, + deepLinkApp: link.deepLinkApp ?? null, folderId: link.folderId ?? null, folder: summarizeLink(link, folders).folder, externalId: link.externalId, @@ -1132,26 +1139,37 @@ const createLinkTool = defineMcpTool( name: "create_link", description: "Create a short link for the website organization. Call with confirmed=false for preview first.", - inputSchema: z.object({ - ...WebsiteSelectorSchema, - name: z.string().min(1).max(255), - targetUrl: z.string().url(), - slug: z - .string() - .min(3) - .max(50) - .regex(/^[a-zA-Z0-9_-]+$/) - .optional(), - expiresAt: z.string().optional(), - expiredRedirectUrl: z.string().url().optional(), - ogTitle: z.string().max(200).optional(), - ogDescription: z.string().max(500).optional(), - ogImageUrl: z.string().url().optional(), - externalId: z.string().max(255).optional(), - ...LinkFolderSelectorSchema.shape, - deepLinkApp: z.string().optional(), - confirmed: ConfirmedSchema, - }), + inputSchema: z + .object({ + ...WebsiteSelectorSchema, + name: z.string().min(1).max(255), + targetUrl: httpUrlSchema, + slug: z + .string() + .min(3) + .max(50) + .regex(/^[a-zA-Z0-9_-]+$/) + .optional(), + expiresAt: z.string().optional(), + expiredRedirectUrl: httpUrlSchema.optional(), + ogTitle: z.string().max(200).optional(), + ogDescription: z.string().max(500).optional(), + ogImageUrl: httpUrlSchema.optional(), + externalId: z.string().max(255).optional(), + ...LinkFolderSelectorSchema.shape, + deepLinkApp: z.enum(DEEP_LINK_APP_IDS).optional(), + confirmed: ConfirmedSchema, + }) + .superRefine(({ deepLinkApp, targetUrl }, context) => { + if (deepLinkApp && !isDeepLinkTarget(deepLinkApp, targetUrl)) { + context.addIssue({ + code: "custom", + message: + "Deep link URLs must use HTTPS and match the selected app.", + path: ["targetUrl"], + }); + } + }), outputSchema: MutationResultSchema, resolveWebsite: true, metadata: writeMetadata(["write:links"]), diff --git a/packages/ai/src/ai/tools/link-catalog.ts b/packages/ai/src/ai/tools/link-catalog.ts index 82de6f27dc..fd658420f8 100644 --- a/packages/ai/src/ai/tools/link-catalog.ts +++ b/packages/ai/src/ai/tools/link-catalog.ts @@ -22,6 +22,7 @@ export const LinkRowOutputSchema = z.object({ name: z.string(), slug: z.string(), targetUrl: z.string(), + deepLinkApp: z.string().nullable(), folderId: z.string().nullable(), folder: LinkFolderSummarySchema.nullable().optional(), externalId: z.string().nullable(), @@ -49,6 +50,7 @@ const LinkRowSchema = z.object({ name: z.string(), slug: z.string(), targetUrl: z.string(), + deepLinkApp: z.string().nullable().optional(), folderId: z.string().nullable().optional(), externalId: z.string().nullable().optional(), expiresAt: DateStringSchema.nullable().optional(), @@ -282,6 +284,7 @@ export function summarizeLink(link: LinkRow, folders: LinkFolder[]) { name: link.name, slug: link.slug, targetUrl: link.targetUrl, + deepLinkApp: link.deepLinkApp ?? null, folderId: link.folderId ?? null, folder: folder ? summarizeLinkFolder(folder) : null, externalId: link.externalId ?? null, diff --git a/packages/ai/src/ai/tools/links.ts b/packages/ai/src/ai/tools/links.ts index 3acac6c789..964d358341 100644 --- a/packages/ai/src/ai/tools/links.ts +++ b/packages/ai/src/ai/tools/links.ts @@ -1,6 +1,12 @@ import { tool } from "ai"; import dayjs from "dayjs"; import { z } from "zod"; +import { + DEEP_LINK_APP_IDS, + isDeepLinkTarget, +} from "@databuddy/shared/constants/deep-link-apps"; +import { LINK_SLUG_REGEX } from "@databuddy/shared/constants/links"; +import { httpUrlSchema } from "@databuddy/validation"; import { getCachedWebsite } from "../../lib/website-utils"; import { LinkFolderSelectorSchema, @@ -20,8 +26,6 @@ import { callRPCProcedure, createToolLogger, getAppContext } from "./utils"; const logger = createToolLogger("Links Tools"); -const SLUG_REGEX = /^[a-zA-Z0-9_-]+$/; - async function getOrganizationIdFromWebsite( websiteId: string ): Promise { @@ -116,26 +120,37 @@ export function createLinksTools() { const createLinkTool = tool({ description: "Create a short link. slug auto-generated if omitted. expiresAt is ISO date.", - inputSchema: z.object({ - websiteId: z.string(), - name: z.string().min(1).max(255), - targetUrl: z.string().url(), - slug: z.string().min(3).max(50).regex(SLUG_REGEX).optional(), - expiresAt: z.string().optional(), - expiredRedirectUrl: z.string().url().optional(), - ogTitle: z.string().max(200).optional(), - ogDescription: z.string().max(500).optional(), - ogImageUrl: z.string().url().optional(), - externalId: z.string().max(255).optional(), - ...LinkFolderSelectorSchema.shape, - deepLinkApp: z - .string() - .optional() - .describe( - "App ID for deep linking (instagram, tiktok, youtube, x, spotify, linkedin, facebook, whatsapp, telegram). On mobile, opens the native app." - ), - confirmed: z.boolean().describe("false=preview, true=apply"), - }), + inputSchema: z + .object({ + websiteId: z.string(), + name: z.string().min(1).max(255), + targetUrl: httpUrlSchema, + slug: z.string().min(3).max(50).regex(LINK_SLUG_REGEX).optional(), + expiresAt: z.string().optional(), + expiredRedirectUrl: httpUrlSchema.optional(), + ogTitle: z.string().max(200).optional(), + ogDescription: z.string().max(500).optional(), + ogImageUrl: httpUrlSchema.optional(), + externalId: z.string().max(255).optional(), + ...LinkFolderSelectorSchema.shape, + deepLinkApp: z + .enum(DEEP_LINK_APP_IDS) + .optional() + .describe( + "App ID for deep linking (instagram, tiktok, youtube, x, spotify, linkedin, facebook, whatsapp, telegram). On mobile, opens the native app." + ), + confirmed: z.boolean().describe("false=preview, true=apply"), + }) + .superRefine(({ deepLinkApp, targetUrl }, context) => { + if (deepLinkApp && !isDeepLinkTarget(deepLinkApp, targetUrl)) { + context.addIssue({ + code: "custom", + message: + "Deep link URLs must use HTTPS and match the selected app.", + path: ["targetUrl"], + }); + } + }), execute: async ( { websiteId, @@ -240,16 +255,16 @@ export function createLinksTools() { id: z.string(), websiteId: z.string(), name: z.string().min(1).max(255).optional(), - targetUrl: z.string().url().optional(), - slug: z.string().min(3).max(50).regex(SLUG_REGEX).optional(), + targetUrl: httpUrlSchema.optional(), + slug: z.string().min(3).max(50).regex(LINK_SLUG_REGEX).optional(), expiresAt: z.string().datetime().nullable().optional(), - expiredRedirectUrl: z.string().url().nullable().optional(), + expiredRedirectUrl: httpUrlSchema.nullable().optional(), ogTitle: z.string().max(200).nullable().optional(), ogDescription: z.string().max(500).nullable().optional(), - ogImageUrl: z.string().url().nullable().optional(), + ogImageUrl: httpUrlSchema.nullable().optional(), externalId: z.string().max(255).nullable().optional(), ...LinkFolderSelectorSchema.shape, - deepLinkApp: z.string().nullable().optional(), + deepLinkApp: z.enum(DEEP_LINK_APP_IDS).nullable().optional(), confirmed: z.boolean().describe("false=preview, true=apply"), }), execute: async ( @@ -287,6 +302,21 @@ export function createLinksTools() { const currentFolder = folders.find((folder) => folder.id === currentLink.folderId) ?? null; + const effectiveDeepLinkApp = + updates.deepLinkApp === undefined + ? currentLink.deepLinkApp + : updates.deepLinkApp; + const effectiveTargetUrl = updates.targetUrl ?? currentLink.targetUrl; + if ( + effectiveDeepLinkApp && + !isDeepLinkTarget(effectiveDeepLinkApp, effectiveTargetUrl) + ) { + return { + success: false, + message: + "Deep link URLs must use HTTPS and match the selected app.", + }; + } const changes: string[] = []; if (updates.name && updates.name !== currentLink.name) { @@ -300,6 +330,14 @@ export function createLinksTools() { if (updates.slug && updates.slug !== currentLink.slug) { changes.push(`Slug: /${currentLink.slug} → /${updates.slug}`); } + if ( + updates.deepLinkApp !== undefined && + updates.deepLinkApp !== currentLink.deepLinkApp + ) { + changes.push( + `Deep link app: ${currentLink.deepLinkApp ?? "None"} → ${updates.deepLinkApp ?? "None"}` + ); + } if (updates.expiresAt !== undefined) { const oldExpires = currentLink.expiresAt ? dayjs(currentLink.expiresAt).format("MMM D, YYYY") @@ -336,6 +374,7 @@ export function createLinksTools() { name: currentLink.name, slug: currentLink.slug, targetUrl: currentLink.targetUrl, + deepLinkApp: currentLink.deepLinkApp ?? null, folder: currentFolder ? summarizeLinkFolder(currentFolder) : "Unfiled", diff --git a/packages/ai/src/query/builders/links.ts b/packages/ai/src/query/builders/links.ts index 155b64925f..0fa8549104 100644 --- a/packages/ai/src/query/builders/links.ts +++ b/packages/ai/src/query/builders/links.ts @@ -87,7 +87,10 @@ export const LinkShortenerBuilders: Record = { version: "1.0", }, table: Analytics.link_visits, - fields: ["count() as total"], + // A broker retry can replay an event after an ambiguous Kafka + // acknowledgement. Count its immutable id so at-least-once delivery does + // not overstate click analytics. + fields: ["uniqExact(id) as total"], timeField: "timestamp", idField: "link_id", customizable: false, @@ -118,7 +121,7 @@ export const LinkShortenerBuilders: Record = { version: "1.0", }, table: Analytics.link_visits, - fields: ["count() as clicks"], + fields: ["uniqExact(id) as clicks"], groupBy: ["date"], orderBy: "date ASC", timeField: "timestamp", @@ -242,7 +245,7 @@ export const LinkShortenerBuilders: Record = { fields: [ "coalesce(nullIf(referrer, ''), 'Direct') as name", "coalesce(nullIf(referrer, ''), 'Direct') as referrer", - "count() as clicks", + "uniqExact(id) as clicks", ], groupBy: ["referrer"], orderBy: "clicks DESC", @@ -288,7 +291,7 @@ export const LinkShortenerBuilders: Record = { fields: [ "coalesce(nullIf(country, ''), 'Unknown') as name", "coalesce(nullIf(country, ''), 'Unknown') as country", - "count() as clicks", + "uniqExact(id) as clicks", ], groupBy: ["country"], orderBy: "clicks DESC", @@ -334,7 +337,7 @@ export const LinkShortenerBuilders: Record = { fields: [ "coalesce(nullIf(region, ''), 'Unknown') as name", "coalesce(nullIf(country, ''), 'Unknown') as country", - "count() as clicks", + "uniqExact(id) as clicks", ], groupBy: ["region", "country"], orderBy: "clicks DESC", @@ -380,7 +383,7 @@ export const LinkShortenerBuilders: Record = { fields: [ "coalesce(nullIf(city, ''), 'Unknown') as name", "coalesce(nullIf(country, ''), 'Unknown') as country", - "count() as clicks", + "uniqExact(id) as clicks", ], groupBy: ["city", "country"], orderBy: "clicks DESC", @@ -419,7 +422,7 @@ export const LinkShortenerBuilders: Record = { table: Analytics.link_visits, fields: [ "coalesce(nullIf(device_type, ''), 'Unknown') as name", - "count() as clicks", + "uniqExact(id) as clicks", ], groupBy: ["device_type"], orderBy: "clicks DESC", @@ -455,7 +458,7 @@ export const LinkShortenerBuilders: Record = { table: Analytics.link_visits, fields: [ "coalesce(nullIf(browser_name, ''), 'Unknown') as name", - "count() as clicks", + "uniqExact(id) as clicks", ], groupBy: ["browser_name"], orderBy: "clicks DESC", diff --git a/packages/env/src/app.ts b/packages/env/src/app.ts index 841af86c14..dd1ea64886 100644 --- a/packages/env/src/app.ts +++ b/packages/env/src/app.ts @@ -23,6 +23,11 @@ const URLS = { local: "http://localhost:3000", env: ["DASHBOARD_URL", "NEXT_PUBLIC_APP_URL", "BETTER_AUTH_URL"], }, + links: { + cloud: "https://dby.sh", + local: "http://localhost:2500", + env: ["LINKS_URL", "NEXT_PUBLIC_LINKS_URL"], + }, status: { cloud: "https://status.databuddy.cc", local: "http://localhost:3002", @@ -64,6 +69,7 @@ export interface Config { api: string; basket: string; dashboard: string; + links: string; status: string; }; } @@ -142,6 +148,7 @@ export function createConfig(env: Env = process.env): Config { api: readUrl(env, URLS.api), basket: readUrl(env, URLS.basket), dashboard: dashboardUrl, + links: readUrl(env, URLS.links), status: readUrl(env, URLS.status), }, }; diff --git a/packages/env/src/public.ts b/packages/env/src/public.ts index 28ae6f700f..26b79baf91 100644 --- a/packages/env/src/public.ts +++ b/packages/env/src/public.ts @@ -4,6 +4,7 @@ export const publicConfig = createConfig({ NEXT_PUBLIC_API_URL: process.env.NEXT_PUBLIC_API_URL, NEXT_PUBLIC_APP_URL: process.env.NEXT_PUBLIC_APP_URL, NEXT_PUBLIC_BASKET_URL: process.env.NEXT_PUBLIC_BASKET_URL, + NEXT_PUBLIC_LINKS_URL: process.env.NEXT_PUBLIC_LINKS_URL, NEXT_PUBLIC_OPENAI_ADS_PIXEL_ID: process.env.NEXT_PUBLIC_OPENAI_ADS_PIXEL_ID, NEXT_PUBLIC_STATUS_URL: process.env.NEXT_PUBLIC_STATUS_URL, NODE_ENV: process.env.NODE_ENV, diff --git a/packages/redis/links-cache.ts b/packages/redis/links-cache.ts index 4c5b92ac48..a99a042882 100644 --- a/packages/redis/links-cache.ts +++ b/packages/redis/links-cache.ts @@ -1,7 +1,109 @@ +import { randomUUID } from "node:crypto"; import { getRedisCache } from "./redis"; const LINKS_CACHE_PREFIX = "link:slug"; -const LINKS_CACHE_TTL = 604_800; // 7 days - long TTL with manual invalidation on update/delete +const LINKS_CACHE_TTL = 604_800; +const LINKS_NEGATIVE_CACHE_TTL = 60; +const LINKS_MUTATION_LEASE_TTL = 30; + +const BEGIN_CACHED_LINK_MUTATION_SCRIPT = ` +-- begin-cached-link-mutation +local current = redis.call("GET", KEYS[1]) +local id = ARGV[1] +local token = ARGV[2] +local mode = ARGV[3] +local lease_ttl = tonumber(ARGV[4]) + +if current ~= false and current ~= "null" then + local ok, decoded = pcall(cjson.decode, current) + if not ok or type(decoded) ~= "table" then + return "conflict" + end + + if decoded.state == "pending" then + return "busy" + end + + if decoded.state == "tombstone" then + if mode == "existing" and decoded.id ~= id then + return "conflict" + end + elseif type(decoded.id) ~= "string" or type(decoded.targetUrl) ~= "string" then + return "conflict" + elseif mode == "new" or decoded.id ~= id then + return "conflict" + end +end + +redis.call( + "SET", + KEYS[1], + cjson.encode({ state = "pending", id = id, token = token }), + "EX", + lease_ttl +) +return "acquired" +`; + +const FINISH_CACHED_LINK_MUTATION_SCRIPT = ` +-- finish-cached-link-mutation +local current = redis.call("GET", KEYS[1]) +if current == false then + return 0 +end + +local current_ok, pending = pcall(cjson.decode, current) +if not current_ok or type(pending) ~= "table" then + return 0 +end +if pending.state ~= "pending" or pending.token ~= ARGV[1] then + return 0 +end +if type(pending.id) ~= "string" then + return 0 +end + +local next_ok, next = pcall(cjson.decode, ARGV[2]) +if not next_ok or type(next) ~= "table" or next.id ~= pending.id then + return 0 +end +if next.state == "tombstone" then + if type(next.id) ~= "string" then + return 0 + end +elseif type(next.targetUrl) ~= "string" then + return 0 +end + +redis.call("SET", KEYS[1], ARGV[2], "EX", tonumber(ARGV[3])) +return 1 +`; + +const ABANDON_CACHED_LINK_MUTATION_SCRIPT = ` +-- abandon-cached-link-mutation +local current = redis.call("GET", KEYS[1]) +if current == false then + return 0 +end + +local ok, pending = pcall(cjson.decode, current) +if not ok or type(pending) ~= "table" then + return 0 +end +if pending.state ~= "pending" or pending.token ~= ARGV[1] then + return 0 +end + +return redis.call("DEL", KEYS[1]) +`; + +const DELETE_CACHED_LINK_IF_CURRENT_SCRIPT = ` +-- delete-cached-link-if-current +if redis.call("GET", KEYS[1]) ~= ARGV[1] then + return 0 +end +return redis.call("DEL", KEYS[1]) +`; export interface CachedLink { androidUrl: string | null; @@ -17,76 +119,242 @@ export interface CachedLink { targetUrl: string; } +interface CachedLinkPending { + id: string; + state: "pending"; + token: string; +} + +interface CachedLinkTombstone { + id: string; + state: "tombstone"; +} + +export type CachedLinkLookup = + | { state: "hit"; link: CachedLink } + | { state: "miss" } + | { state: "not_found" } + | { state: "pending" }; + +export type CachedLinkMutationStart = + | { state: "acquired"; token: string } + | { state: "busy" } + | { state: "conflict" }; + +export type CachedLinkMutationNext = + | { state: "link"; link: CachedLink } + | { id: string; state: "tombstone" }; + +function isCachedLink(value: unknown): value is CachedLink { + if (!value || typeof value !== "object") { + return false; + } + + const link = value as Record; + return ( + typeof link.id === "string" && + typeof link.targetUrl === "string" && + [ + "androidUrl", + "deepLinkApp", + "expiredRedirectUrl", + "expiresAt", + "iosUrl", + ].every((key) => link[key] === null || typeof link[key] === "string") && + ["ogDescription", "ogImageUrl", "ogTitle", "ogVideoUrl"].every( + (key) => link[key] === null || typeof link[key] === "string" + ) + ); +} + +function isCachedLinkPending(value: unknown): value is CachedLinkPending { + if (!value || typeof value !== "object") { + return false; + } + + const marker = value as Record; + return ( + marker.state === "pending" && + typeof marker.id === "string" && + typeof marker.token === "string" + ); +} + +function isCachedLinkTombstone(value: unknown): value is CachedLinkTombstone { + if (!value || typeof value !== "object") { + return false; + } + + const marker = value as Record; + return marker.state === "tombstone" && typeof marker.id === "string"; +} + +function serializeMutationNext(next: CachedLinkMutationNext): string { + return JSON.stringify( + next.state === "link" ? next.link : { id: next.id, state: "tombstone" } + ); +} + +async function evictInvalidCachedLinkIfCurrent( + key: string, + cached: string +): Promise { + try { + await getRedisCache().eval( + DELETE_CACHED_LINK_IF_CURRENT_SCRIPT, + 1, + key, + cached + ); + } catch { + // A corrupt cache value is still a miss when best-effort eviction fails. + } +} + /** - * Generates a consistent cache key for a link by slug + * Generates a consistent cache key for a link by slug. */ export function getLinkCacheKey(slug: string): string { return `${LINKS_CACHE_PREFIX}:${slug}`; } /** - * Get a link from cache by slug + * Get a link from cache by slug. Pending mutations deliberately do not fall + * through to a read-through database lookup. */ -export async function getCachedLink(slug: string): Promise { +export async function getCachedLink(slug: string): Promise { const redis = getRedisCache(); const key = getLinkCacheKey(slug); const cached = await redis.get(key); if (!cached) { - return null; + return { state: "miss" }; } if (cached === "null") { - return null; + return { state: "not_found" }; } + let value: unknown; try { - return JSON.parse(cached) as CachedLink; + value = JSON.parse(cached); } catch { - return null; + await evictInvalidCachedLinkIfCurrent(key, cached); + return { state: "miss" }; + } + + if (isCachedLinkPending(value)) { + return { state: "pending" }; } + if (isCachedLinkTombstone(value)) { + return { state: "not_found" }; + } + if (isCachedLink(value)) { + return { state: "hit", link: value }; + } + + await evictInvalidCachedLinkIfCurrent(key, cached); + return { state: "miss" }; } /** - * Set a link in cache by slug + * Start an id-aware cache mutation lease. A lease replaces the prior value so + * readers return `pending` instead of querying the database mid-mutation. */ -export async function setCachedLink( +export async function beginCachedLinkMutation( slug: string, - link: CachedLink -): Promise { + mutation: { id: string; mode: "existing" | "new" } +): Promise { const redis = getRedisCache(); - const key = getLinkCacheKey(slug); - await redis.setex(key, LINKS_CACHE_TTL, JSON.stringify(link)); + const token = randomUUID(); + const result = (await redis.eval( + BEGIN_CACHED_LINK_MUTATION_SCRIPT, + 1, + getLinkCacheKey(slug), + mutation.id, + token, + mutation.mode, + String(LINKS_MUTATION_LEASE_TTL) + )) as string; + + if (result === "acquired") { + return { state: "acquired", token }; + } + if (result === "busy") { + return { state: "busy" }; + } + return { state: "conflict" }; } /** - * Set a negative cache entry for a slug that doesn't exist - * Uses shorter TTL (60s) since new links invalidate the cache on creation anyway + * Finish a mutation only while this caller still owns its pending marker. */ -export async function setCachedLinkNotFound(slug: string): Promise { +export async function finishCachedLinkMutation( + slug: string, + token: string, + next: CachedLinkMutationNext +): Promise { const redis = getRedisCache(); - const key = getLinkCacheKey(slug); - await redis.setex(key, 60, "null"); + const result = (await redis.eval( + FINISH_CACHED_LINK_MUTATION_SCRIPT, + 1, + getLinkCacheKey(slug), + token, + serializeMutationNext(next), + String(LINKS_CACHE_TTL) + )) as number; + return result === 1; } /** - * Invalidate a link cache by slug + * Clear a matching pending marker only when the database change certainly did + * not persist. This intentionally never restores a possibly stale live value. */ -export async function invalidateLinkCache(slug: string): Promise { +export async function abandonCachedLinkMutation( + slug: string, + token: string +): Promise { const redis = getRedisCache(); - const key = getLinkCacheKey(slug); - await redis.del(key); + const result = (await redis.eval( + ABANDON_CACHED_LINK_MUTATION_SCRIPT, + 1, + getLinkCacheKey(slug), + token + )) as number; + return result === 1; } /** - * Invalidate multiple link caches by slugs + * Backfill a cache miss without overwriting a newer mutation or tombstone. */ -export async function invalidateLinkCaches(slugs: string[]): Promise { - if (slugs.length === 0) { - return; - } +export async function setCachedLinkIfAbsent( + slug: string, + link: CachedLink +): Promise { + const redis = getRedisCache(); + const result = await redis.set( + getLinkCacheKey(slug), + JSON.stringify(link), + "EX", + LINKS_CACHE_TTL, + "NX" + ); + return result === "OK"; +} +/** + * Backfill a negative cache miss without replacing a concurrent mutation. + */ +export async function setCachedLinkNotFoundIfAbsent( + slug: string +): Promise { const redis = getRedisCache(); - const keys = slugs.map(getLinkCacheKey); - await redis.del(...keys); + const result = await redis.set( + getLinkCacheKey(slug), + "null", + "EX", + LINKS_NEGATIVE_CACHE_TTL, + "NX" + ); + return result === "OK"; } diff --git a/packages/rpc/src/routers/link-access.ts b/packages/rpc/src/routers/link-access.ts new file mode 100644 index 0000000000..f21da7f9a4 --- /dev/null +++ b/packages/rpc/src/routers/link-access.ts @@ -0,0 +1,27 @@ +import { rpcError } from "../errors"; +import type { Context } from "../orpc"; +import { withWorkspace } from "../procedures/with-workspace"; + +export type LinkPermission = "read" | "create" | "update" | "delete"; + +export function requireOrganizationId( + organizationId: string | null | undefined +): string { + if (!organizationId) { + throw rpcError.badRequest("Organization ID is required"); + } + return organizationId; +} + +export function requireLinkAccess( + context: Context, + organizationId: string, + permission: LinkPermission +) { + const permissions: [LinkPermission] = [permission]; + return withWorkspace(context, { + organizationId, + resource: "link", + permissions, + }); +} diff --git a/packages/rpc/src/routers/link-folders.ts b/packages/rpc/src/routers/link-folders.ts index d3e43b963a..a5dcfe263e 100644 --- a/packages/rpc/src/routers/link-folders.ts +++ b/packages/rpc/src/routers/link-folders.ts @@ -14,7 +14,7 @@ import { customAlphabet } from "nanoid"; import { z } from "zod"; import { rpcError } from "../errors"; import { type Context, protectedProcedure, trackedProcedure } from "../orpc"; -import { withWorkspace } from "../procedures/with-workspace"; +import { requireLinkAccess, requireOrganizationId } from "./link-access"; import { createLinkFolderSchema, deleteLinkFolderSchema, @@ -25,7 +25,6 @@ import { updateLinkFolderSchema, } from "./links.schemas"; -type LinkPermission = "read" | "create" | "update" | "delete"; type LinkFolderRow = typeof linkFolders.$inferSelect; const generateFolderSuffix = customAlphabet( @@ -33,28 +32,6 @@ const generateFolderSuffix = customAlphabet( 4 ); -function requireOrganizationId( - organizationId: string | null | undefined -): string { - if (!organizationId) { - throw rpcError.badRequest("Organization ID is required"); - } - return organizationId; -} - -function requireLinkAccess( - context: Context, - organizationId: string, - permission: LinkPermission -) { - const permissions: [LinkPermission] = [permission]; - return withWorkspace(context, { - organizationId, - resource: "link", - permissions, - }); -} - async function getFolderOrThrow( context: Context, id: string diff --git a/packages/rpc/src/routers/links.schemas.ts b/packages/rpc/src/routers/links.schemas.ts index f3a3a15c74..e377c3694e 100644 --- a/packages/rpc/src/routers/links.schemas.ts +++ b/packages/rpc/src/routers/links.schemas.ts @@ -4,6 +4,9 @@ import { createSelectSchema, createUpdateSchema, } from "drizzle-orm/zod"; +import { DEEP_LINK_APP_IDS } from "@databuddy/shared/constants/deep-link-apps"; +import { LINK_SLUG_REGEX } from "@databuddy/shared/constants/links"; +import { httpUrlSchema } from "@databuddy/validation"; import { z } from "zod"; const linkSelectSchema = createSelectSchema(links, { @@ -67,7 +70,7 @@ const slugSchema = z .min(3) .max(50) .regex( - /^[a-zA-Z0-9_-]+$/, + LINK_SLUG_REGEX, "Slug can only contain letters, numbers, hyphens, and underscores" ); @@ -105,20 +108,21 @@ export const createLinkSchema = linkInsertSchema .extend({ organizationId: z.string().optional(), name: z.string().min(1).max(255), - targetUrl: z.url(), + targetUrl: httpUrlSchema, slug: slugSchema.optional(), - expiredRedirectUrl: z.url().nullable().optional(), + expiredRedirectUrl: httpUrlSchema.nullable().optional(), ogTitle: z.string().max(200).nullable().optional(), ogDescription: z.string().max(500).nullable().optional(), - ogImageUrl: z.url().nullable().optional(), - ogVideoUrl: z.url().nullable().optional(), - iosUrl: z.url().nullable().optional(), - androidUrl: z.url().nullable().optional(), + ogImageUrl: httpUrlSchema.nullable().optional(), + ogVideoUrl: httpUrlSchema.nullable().optional(), + iosUrl: httpUrlSchema.nullable().optional(), + androidUrl: httpUrlSchema.nullable().optional(), externalId: z.string().max(255).nullable().optional(), sourceType: z.string().max(64).nullable().optional(), sourceId: z.string().max(255).nullable().optional(), sourceOwnerId: z.string().max(255).nullable().optional(), targetDomain: z.string().max(255).nullable().optional(), + deepLinkApp: z.enum(DEEP_LINK_APP_IDS).nullable().optional(), }); export const createLinkFolderSchema = linkFolderInsertSchema @@ -158,21 +162,22 @@ export const updateLinkSchema = linkUpdateSchema .extend({ id: z.string(), name: z.string().min(1).max(255).optional(), - targetUrl: z.url().optional(), + targetUrl: httpUrlSchema.optional(), slug: slugSchema.optional(), expiresAt: z.string().datetime().nullable().optional(), - expiredRedirectUrl: z.url().nullable().optional(), + expiredRedirectUrl: httpUrlSchema.nullable().optional(), ogTitle: z.string().max(200).nullable().optional(), ogDescription: z.string().max(500).nullable().optional(), - ogImageUrl: z.url().nullable().optional(), - ogVideoUrl: z.url().nullable().optional(), - iosUrl: z.url().nullable().optional(), - androidUrl: z.url().nullable().optional(), + ogImageUrl: httpUrlSchema.nullable().optional(), + ogVideoUrl: httpUrlSchema.nullable().optional(), + iosUrl: httpUrlSchema.nullable().optional(), + androidUrl: httpUrlSchema.nullable().optional(), externalId: z.string().max(255).nullable().optional(), sourceType: z.string().max(64).nullable().optional(), sourceId: z.string().max(255).nullable().optional(), sourceOwnerId: z.string().max(255).nullable().optional(), targetDomain: z.string().max(255).nullable().optional(), + deepLinkApp: z.enum(DEEP_LINK_APP_IDS).nullable().optional(), }); export const updateLinkFolderSchema = linkFolderUpdateSchema diff --git a/packages/rpc/src/routers/links.ts b/packages/rpc/src/routers/links.ts index 0f099a25a0..9db256ca3e 100644 --- a/packages/rpc/src/routers/links.ts +++ b/packages/rpc/src/routers/links.ts @@ -12,11 +12,14 @@ import { } from "@databuddy/db"; import { linkFolders, links } from "@databuddy/db/schema"; import { + abandonCachedLinkMutation, + beginCachedLinkMutation, type CachedLink, + type CachedLinkMutationNext, + finishCachedLinkMutation, invalidateAgentContextSnapshotsForOwner, - invalidateLinkCache, - setCachedLink, } from "@databuddy/redis"; +import { isDeepLinkTarget } from "@databuddy/shared/constants/deep-link-apps"; import { randomUUIDv7 } from "bun"; import { customAlphabet } from "nanoid"; import { z } from "zod"; @@ -24,7 +27,7 @@ import { rpcError } from "../errors"; import { logger } from "../lib/logger"; import { setTrackProperties } from "../middleware/track-mutation"; import { type Context, protectedProcedure, trackedProcedure } from "../orpc"; -import { withWorkspace } from "../procedures/with-workspace"; +import { requireLinkAccess, requireOrganizationId } from "./link-access"; import { createLinkSchema, deleteLinkSchema, @@ -36,7 +39,6 @@ import { updateLinkSchema, } from "./links.schemas"; -type LinkPermission = "read" | "create" | "update" | "delete"; type LinkRow = typeof links.$inferSelect; type CacheableLink = Pick< LinkRow, @@ -52,17 +54,33 @@ type CacheableLink = Pick< | "androidUrl" | "deepLinkApp" >; +interface LinkCacheMutation { + id: string; + slug: string; + token: string; +} +type LinkCacheMutationRequest = Pick & { + mode: "existing" | "new"; +}; const generateLinkSlug = customAlphabet( "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 8 ); -function validateHttpUrl(url: string): void { - const parsed = new URL(url); - if (parsed.protocol !== "http:" && parsed.protocol !== "https:") { - throw rpcError.badRequest("URL must be an absolute HTTP or HTTPS URL"); +function validateDeepLinkConfiguration( + deepLinkApp: string | null | undefined, + targetUrl: string +): void { + if (!deepLinkApp) { + return; } + if (isDeepLinkTarget(deepLinkApp, targetUrl)) { + return; + } + throw rpcError.badRequest( + "Deep link URLs must use HTTPS and match the selected app" + ); } function normalizeNullableText( @@ -145,28 +163,147 @@ function toCachedLink(link: CacheableLink): CachedLink { }; } -function requireOrganizationId( - organizationId: string | null | undefined -): string { - if (!organizationId) { - throw rpcError.badRequest("Organization ID is required"); +function getErrorLogFields(error: unknown): { + error_message: string; + error_stack?: string; +} { + if (error instanceof Error) { + return { + error_message: error.message, + ...(error.stack ? { error_stack: error.stack } : {}), + }; } - return organizationId; + + return { error_message: String(error) }; } -function requireLinkAccess( - context: Context, - organizationId: string, - permission: LinkPermission -) { - const permissions: [LinkPermission] = [permission]; - return withWorkspace(context, { - organizationId, - resource: "link", - permissions, +function invalidateLinkAgentContext(organizationId: string): void { + // The helper absorbs expected Redis failures; retain this guard for future errors. + invalidateAgentContextSnapshotsForOwner(organizationId).catch((error) => { + logger.error( + { organizationId, ...getErrorLogFields(error) }, + "Unexpected link agent-context invalidation failure" + ); }); } +async function abandonLinkCacheMutations( + mutations: LinkCacheMutation[], + reason: string +): Promise { + await Promise.all( + mutations.map(async ({ id, slug, token }) => { + try { + if (await abandonCachedLinkMutation(slug, token)) { + return; + } + logger.warn( + { linkId: id, slug }, + "Lost link cache mutation lease while abandoning mutation" + ); + } catch (error) { + logger.error( + { linkId: id, slug, reason, ...getErrorLogFields(error) }, + "Failed to abandon link cache mutation" + ); + } + }) + ); +} + +async function finishLinkCacheMutation( + mutation: LinkCacheMutation, + next: CachedLinkMutationNext, + reason: string +): Promise { + const { id, slug, token } = mutation; + try { + if (await finishCachedLinkMutation(slug, token, next)) { + return; + } + logger.warn( + { linkId: id, slug, reason }, + "Lost link cache mutation lease before cache finalization" + ); + } catch (error) { + logger.error( + { linkId: id, slug, reason, ...getErrorLogFields(error) }, + "Failed to finalize link cache mutation" + ); + } + + if (next.state === "tombstone") { + return; + } + + try { + if ( + await finishCachedLinkMutation(slug, token, { + id, + state: "tombstone", + }) + ) { + return; + } + logger.warn( + { linkId: id, slug, reason }, + "Lost link cache mutation lease before fail-closed finalization" + ); + } catch (error) { + logger.error( + { linkId: id, slug, reason, ...getErrorLogFields(error) }, + "Failed to fail closed after link cache finalization error" + ); + } +} + +async function tombstoneLinkCacheMutations( + mutations: LinkCacheMutation[], + reason: string +): Promise { + await Promise.all( + mutations.map((mutation) => + finishLinkCacheMutation( + mutation, + { id: mutation.id, state: "tombstone" }, + reason + ) + ) + ); +} + +async function beginLinkCacheMutations( + requests: LinkCacheMutationRequest[] +): Promise { + const mutations: LinkCacheMutation[] = []; + try { + for (const request of [...requests].sort((left, right) => + left.slug.localeCompare(right.slug) + )) { + const started = await beginCachedLinkMutation(request.slug, request); + if (started.state !== "acquired") { + await abandonLinkCacheMutations( + mutations, + "another mutation already owns this slug" + ); + return null; + } + mutations.push({ + id: request.id, + slug: request.slug, + token: started.token, + }); + } + return mutations; + } catch (error) { + await abandonLinkCacheMutations( + mutations, + "failed before the database mutation started" + ); + throw error; + } +} + const LINKS_LIST_MAX = 1000; const ILIKE_PATTERN_CHARACTER_REGEX = /[\\%_]/g; @@ -389,10 +526,7 @@ export const linksRouter = { "create" ); - validateHttpUrl(input.targetUrl); - if (input.expiredRedirectUrl) { - validateHttpUrl(input.expiredRedirectUrl); - } + validateDeepLinkConfiguration(input.deepLinkApp, input.targetUrl); const createdBy = await workspace.getCreatedBy(); const resolvedFolderId = await validateFolderId( context.db, @@ -408,11 +542,40 @@ export const linksRouter = { : Array.from({ length: 10 }, () => generateLinkSlug()); for (const slug of slugsToTry) { + const linkId = randomUUIDv7(); + let cacheMutations: LinkCacheMutation[] | null; + try { + cacheMutations = await beginLinkCacheMutations([ + { id: linkId, mode: "new", slug }, + ]); + } catch (error) { + logger.error( + { slug, linkId, ...getErrorLogFields(error) }, + "Failed to begin link cache mutation before create" + ); + throw rpcError.internal("Failed to update cache. Link not created."); + } + + if (!cacheMutations) { + if (input.slug) { + throw rpcError.conflict( + "This slug is already taken or is being updated" + ); + } + continue; + } + + const [cacheMutation] = cacheMutations; + if (!cacheMutation) { + throw rpcError.internal("Failed to begin link cache mutation"); + } + + let finalizedFailure = false; try { const [newLink] = await context.db .insert(links) .values({ - id: randomUUIDv7(), + id: linkId, slug, organizationId, createdBy, @@ -437,30 +600,40 @@ export const linksRouter = { .returning(); if (!newLink) { + await tombstoneLinkCacheMutations( + cacheMutations, + "create did not return a persisted link" + ); + finalizedFailure = true; throw rpcError.internal("Failed to create link"); } - setCachedLink(slug, toCachedLink(newLink)).catch((err) => - logger.error( - { slug, linkId: newLink.id, error: String(err) }, - "Failed to cache link after create" - ) - ); - invalidateAgentContextSnapshotsForOwner(organizationId).catch((err) => - logger.error( - { organizationId, error: String(err) }, - "Failed to invalidate agent context snapshots after link create" - ) + await finishLinkCacheMutation( + cacheMutation, + { link: toCachedLink(newLink), state: "link" }, + "create persisted" ); + invalidateLinkAgentContext(organizationId); return newLink; } catch (error) { - if (!isUniqueViolationFor(error, "links_slug_unique")) { - throw error; + if (isUniqueViolationFor(error, "links_slug_unique")) { + await abandonLinkCacheMutations( + cacheMutations, + "create failed because the slug already exists" + ); + if (input.slug) { + throw rpcError.conflict("This slug is already taken"); + } + continue; } - if (input.slug) { - throw rpcError.conflict("This slug is already taken"); + if (!finalizedFailure) { + await tombstoneLinkCacheMutations( + cacheMutations, + "create may have persisted before failing" + ); } + throw error; } } @@ -482,11 +655,13 @@ export const linksRouter = { const link = await getLinkOrThrow(context, input.id); await requireLinkAccess(context, link.organizationId, "update"); - if (input.targetUrl) { - validateHttpUrl(input.targetUrl); - } - if (input.expiredRedirectUrl) { - validateHttpUrl(input.expiredRedirectUrl); + if (input.targetUrl !== undefined || input.deepLinkApp !== undefined) { + validateDeepLinkConfiguration( + input.deepLinkApp === undefined + ? link.deepLinkApp + : input.deepLinkApp, + input.targetUrl ?? link.targetUrl + ); } let resolvedFolderId: string | null | undefined; @@ -509,6 +684,7 @@ export const linksRouter = { ...updates } = input; const oldSlug = link.slug; + const nextSlug = updates.slug ?? oldSlug; const nextTargetDomain = targetDomain === undefined ? input.targetUrl @@ -516,6 +692,50 @@ export const linksRouter = { : undefined : normalizeTargetDomain(targetDomain); + const cacheMutationRequests: LinkCacheMutationRequest[] = [ + { id: link.id, mode: "existing", slug: oldSlug }, + ]; + if (nextSlug !== oldSlug) { + cacheMutationRequests.push({ + id: link.id, + mode: "new", + slug: nextSlug, + }); + } + + let cacheMutations: LinkCacheMutation[] | null; + try { + cacheMutations = await beginLinkCacheMutations(cacheMutationRequests); + } catch (error) { + logger.error( + { slug: oldSlug, linkId: link.id, ...getErrorLogFields(error) }, + "Failed to begin link cache mutation before update" + ); + throw rpcError.internal("Failed to update cache. Link not updated."); + } + + if (!cacheMutations) { + logger.warn( + { linkId: link.id, oldSlug, nextSlug }, + "Link cache mutation conflicts with an in-progress or stale cache entry" + ); + throw rpcError.conflict( + "This link is currently being updated. Retry the request." + ); + } + + const oldCacheMutation = cacheMutations.find( + (mutation) => mutation.slug === oldSlug + ); + if (!oldCacheMutation) { + await abandonLinkCacheMutations( + cacheMutations, + "missing old-slug cache mutation before update" + ); + throw rpcError.internal("Failed to begin link cache mutation"); + } + + let finalizedFailure = false; try { const [updatedLink] = await context.db .update(links) @@ -548,32 +768,63 @@ export const linksRouter = { .returning(); if (!updatedLink) { + await tombstoneLinkCacheMutations( + cacheMutations, + "update did not return a persisted link" + ); + finalizedFailure = true; throw rpcError.notFound("link", input.id); } - Promise.all([ - oldSlug === updatedLink.slug - ? Promise.resolve() - : invalidateLinkCache(oldSlug), - setCachedLink(updatedLink.slug, toCachedLink(updatedLink)), - invalidateAgentContextSnapshotsForOwner(link.organizationId), - ]).catch((err) => - logger.error( - { - linkId: updatedLink.id, - oldSlug, - newSlug: updatedLink.slug, - error: String(err), - }, - "Failed to update link cache" - ) - ); + const cachedLink = toCachedLink(updatedLink); + if (nextSlug === oldSlug) { + await finishLinkCacheMutation( + oldCacheMutation, + { link: cachedLink, state: "link" }, + "update persisted" + ); + } else { + const newCacheMutation = cacheMutations.find( + (mutation) => mutation.slug === nextSlug + ); + if (newCacheMutation) { + await Promise.all([ + finishLinkCacheMutation( + oldCacheMutation, + { id: link.id, state: "tombstone" }, + "update renamed link" + ), + finishLinkCacheMutation( + newCacheMutation, + { link: cachedLink, state: "link" }, + "update renamed link" + ), + ]); + } else { + await tombstoneLinkCacheMutations( + cacheMutations, + "update persisted without a new-slug cache mutation" + ); + } + } + + invalidateLinkAgentContext(link.organizationId); return updatedLink; } catch (error) { if (isUniqueViolationFor(error, "links_slug_unique")) { + await abandonLinkCacheMutations( + cacheMutations, + "update failed because the new slug already exists" + ); throw rpcError.conflict("This slug is already taken"); } + if (!finalizedFailure) { + await tombstoneLinkCacheMutations( + cacheMutations, + "update may have persisted before failing" + ); + } throw error; } }), @@ -593,26 +844,55 @@ export const linksRouter = { const link = await getLinkOrThrow(context, input.id); await requireLinkAccess(context, link.organizationId, "delete"); + let cacheMutations: LinkCacheMutation[] | null; try { - await invalidateLinkCache(link.slug); + cacheMutations = await beginLinkCacheMutations([ + { id: link.id, mode: "existing", slug: link.slug }, + ]); } catch (error) { logger.error( - { slug: link.slug, linkId: input.id, error: String(error) }, - "Failed to invalidate link cache before delete" + { slug: link.slug, linkId: input.id, ...getErrorLogFields(error) }, + "Failed to begin link cache mutation before delete" ); - throw rpcError.internal( - "Failed to invalidate cache. Link not deleted." + throw rpcError.internal("Failed to update cache. Link not deleted."); + } + + if (!cacheMutations) { + logger.warn( + { slug: link.slug, linkId: link.id }, + "Link cache mutation conflicts with an in-progress or stale cache entry" + ); + throw rpcError.conflict( + "This link is currently being updated. Retry the request." ); } - await context.db.delete(links).where(eq(links.id, input.id)); - invalidateAgentContextSnapshotsForOwner(link.organizationId).catch( - (err) => - logger.error( - { organizationId: link.organizationId, error: String(err) }, - "Failed to invalidate agent context snapshots after link delete" - ) - ); + let finalizedFailure = false; + try { + const deleted = await context.db + .delete(links) + .where(eq(links.id, input.id)) + .returning({ id: links.id }); + if (deleted.length === 0) { + await tombstoneLinkCacheMutations( + cacheMutations, + "delete did not remove a persisted link" + ); + finalizedFailure = true; + throw rpcError.notFound("link", input.id); + } + + await tombstoneLinkCacheMutations(cacheMutations, "delete persisted"); + } catch (error) { + if (!finalizedFailure) { + await tombstoneLinkCacheMutations( + cacheMutations, + "delete may have persisted before failing" + ); + } + throw error; + } + invalidateLinkAgentContext(link.organizationId); return { success: true }; }), diff --git a/packages/shared/package.json b/packages/shared/package.json index b40f94060a..502c31778e 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -10,6 +10,7 @@ "./types/features": "./src/types/features.ts", "./flags": "./src/flags/index.ts", "./utils/referrer": "./src/utils/referrer.ts", + "./utils/trusted-client-ip": "./src/utils/trusted-client-ip.ts", "./bot-detection": "./src/utils/bot-detection/index.ts", "./bot-detection/detector": "./src/utils/bot-detection/detector.ts", "./bot-detection/types": "./src/utils/bot-detection/types.ts", @@ -17,6 +18,7 @@ "./json-ld": "./src/json-ld.ts", "./ssrf-guard": "./src/ssrf-guard.ts", "./constants/deep-link-apps": "./src/constants/deep-link-apps.ts", + "./constants/links": "./src/constants/links.ts", "./custom-events": "./src/custom-events.ts", "./analytics-filters": "./src/analytics-filters.ts", "./agent-credits": "./src/agent-credits.ts", diff --git a/packages/shared/src/constants/deep-link-apps.ts b/packages/shared/src/constants/deep-link-apps.ts index d24a737390..60c3b0676b 100644 --- a/packages/shared/src/constants/deep-link-apps.ts +++ b/packages/shared/src/constants/deep-link-apps.ts @@ -1,23 +1,33 @@ +export const DEEP_LINK_APP_IDS = [ + "instagram", + "tiktok", + "youtube", + "x", + "spotify", + "linkedin", + "facebook", + "whatsapp", + "telegram", +] as const; + +export type DeepLinkAppId = (typeof DEEP_LINK_APP_IDS)[number]; + export interface DeepLinkApp { - color: string; hostnames: string[]; - id: string; + id: DeepLinkAppId; name: string; placeholder: string; resolveUri: (url: URL) => string | null; - simpleIconSlug: string; } const TRAILING_SLASH = /\/$/; const NON_DIGITS = /\D/g; const DIGITS_ONLY = /^\d+$/; -export const DEEP_LINK_APPS: DeepLinkApp[] = [ +export const DEEP_LINK_APPS: readonly DeepLinkApp[] = [ { id: "instagram", name: "Instagram", - simpleIconSlug: "instagram", - color: "#E4405F", hostnames: ["instagram.com", "www.instagram.com", "instagr.am"], placeholder: "https://instagram.com/username", resolveUri: (url) => { @@ -41,8 +51,6 @@ export const DEEP_LINK_APPS: DeepLinkApp[] = [ { id: "tiktok", name: "TikTok", - simpleIconSlug: "tiktok", - color: "#000000", hostnames: ["tiktok.com", "www.tiktok.com", "vm.tiktok.com"], placeholder: "https://tiktok.com/@username", resolveUri: (url) => { @@ -60,8 +68,6 @@ export const DEEP_LINK_APPS: DeepLinkApp[] = [ { id: "youtube", name: "YouTube", - simpleIconSlug: "youtube", - color: "#FF0000", hostnames: ["youtube.com", "www.youtube.com", "youtu.be", "m.youtube.com"], placeholder: "https://youtube.com/watch?v=VIDEO_ID", resolveUri: (url) => { @@ -90,8 +96,6 @@ export const DEEP_LINK_APPS: DeepLinkApp[] = [ { id: "x", name: "X", - simpleIconSlug: "x", - color: "#000000", hostnames: ["x.com", "www.x.com", "twitter.com", "www.twitter.com"], placeholder: "https://x.com/username", resolveUri: (url) => { @@ -109,8 +113,6 @@ export const DEEP_LINK_APPS: DeepLinkApp[] = [ { id: "spotify", name: "Spotify", - simpleIconSlug: "spotify", - color: "#1DB954", hostnames: ["open.spotify.com"], placeholder: "https://open.spotify.com/track/TRACK_ID", resolveUri: (url) => { @@ -125,8 +127,6 @@ export const DEEP_LINK_APPS: DeepLinkApp[] = [ { id: "linkedin", name: "LinkedIn", - simpleIconSlug: "linkedin", - color: "#0A66C2", hostnames: ["linkedin.com", "www.linkedin.com"], placeholder: "https://linkedin.com/in/username", resolveUri: (url) => { @@ -147,8 +147,6 @@ export const DEEP_LINK_APPS: DeepLinkApp[] = [ { id: "facebook", name: "Facebook", - simpleIconSlug: "facebook", - color: "#0866FF", hostnames: [ "facebook.com", "www.facebook.com", @@ -169,8 +167,6 @@ export const DEEP_LINK_APPS: DeepLinkApp[] = [ { id: "whatsapp", name: "WhatsApp", - simpleIconSlug: "whatsapp", - color: "#25D366", hostnames: ["wa.me", "api.whatsapp.com", "chat.whatsapp.com"], placeholder: "https://wa.me/1234567890", resolveUri: (url) => { @@ -191,8 +187,6 @@ export const DEEP_LINK_APPS: DeepLinkApp[] = [ { id: "telegram", name: "Telegram", - simpleIconSlug: "telegram", - color: "#26A5E4", hostnames: ["t.me", "telegram.me"], placeholder: "https://t.me/username", resolveUri: (url) => { @@ -212,9 +206,13 @@ export const DEEP_LINK_APPS: DeepLinkApp[] = [ }, ]; -const APP_MAP = new Map(DEEP_LINK_APPS.map((app) => [app.id, app])); +const APP_MAP = new Map( + DEEP_LINK_APPS.map((app) => [app.id, app] as const) +); const HOST_MAP = new Map( - DEEP_LINK_APPS.flatMap((app) => app.hostnames.map((h) => [h, app])) + DEEP_LINK_APPS.flatMap((app) => + app.hostnames.map((hostname) => [hostname.toLowerCase(), app] as const) + ) ); export function getDeepLinkApp(id: string): DeepLinkApp | undefined { @@ -224,19 +222,46 @@ export function getDeepLinkApp(id: string): DeepLinkApp | undefined { export function getDeepLinkAppByHostname( hostname: string ): DeepLinkApp | undefined { - return HOST_MAP.get(hostname); + return HOST_MAP.get(hostname.toLowerCase()); +} + +function parseDeepLinkTarget( + appId: string, + targetUrl: string +): { app: DeepLinkApp; url: URL } | null { + const app = getDeepLinkApp(appId); + if (!app) { + return null; + } + + try { + const url = new URL(targetUrl); + if ( + url.protocol === "https:" && + getDeepLinkAppByHostname(url.hostname)?.id === app.id + ) { + return { app, url }; + } + return null; + } catch { + return null; + } +} + +export function isDeepLinkTarget(appId: string, targetUrl: string): boolean { + return parseDeepLinkTarget(appId, targetUrl) !== null; } export function resolveDeepLink( appId: string, targetUrl: string ): string | null { - const app = APP_MAP.get(appId); - if (!app) { + const target = parseDeepLinkTarget(appId, targetUrl); + if (!target) { return null; } try { - return app.resolveUri(new URL(targetUrl)); + return target.app.resolveUri(target.url); } catch { return null; } diff --git a/packages/shared/src/constants/links.ts b/packages/shared/src/constants/links.ts new file mode 100644 index 0000000000..af7e5e0a38 --- /dev/null +++ b/packages/shared/src/constants/links.ts @@ -0,0 +1,15 @@ +export const LINK_SLUG_REGEX = /^[A-Za-z0-9_-]+$/; +export const PUBLIC_LINK_SLUG_REGEX = /^[A-Za-z0-9_-]{3,50}$/; + +export function isHttpUrl(value: string | null | undefined): value is string { + if (!value) { + return false; + } + + try { + const url = new URL(value); + return url.protocol === "http:" || url.protocol === "https:"; + } catch { + return false; + } +} diff --git a/apps/dashboard/lib/trusted-client-ip.ts b/packages/shared/src/utils/trusted-client-ip.ts similarity index 70% rename from apps/dashboard/lib/trusted-client-ip.ts rename to packages/shared/src/utils/trusted-client-ip.ts index 174b3086f5..e3fbed335b 100644 --- a/apps/dashboard/lib/trusted-client-ip.ts +++ b/packages/shared/src/utils/trusted-client-ip.ts @@ -5,9 +5,12 @@ const DEFAULT_TRUSTED_IP_HEADER = "cf-connecting-ip"; /** * Returns a client IP only when deployment traffic is forced through a proxy * that overwrites the configured header. Without that explicit boundary, all - * forwarding headers are client-controlled and must not enter audit records. + * forwarding headers are client-controlled and must not enter rate limits or + * audit records. */ -export function getTrustedClientIp(headers: Headers): string | undefined { +export function getTrustedClientIp( + headers: Pick +): string | undefined { if (process.env.IP_HEADER_VERIFIED?.toLowerCase() !== "true") { return; } @@ -26,6 +29,9 @@ export function getTrustedClientIp(headers: Headers): string | undefined { headerName === "x-forwarded-for" ? value.split(",")[0]?.trim() : value.trim(); + if (!candidate || isIP(candidate) === 0) { + return; + } - return candidate && isIP(candidate) ? candidate : undefined; + return candidate; } diff --git a/packages/validation/package.json b/packages/validation/package.json index e34182a50d..9039bb4e51 100644 --- a/packages/validation/package.json +++ b/packages/validation/package.json @@ -13,6 +13,7 @@ "test": "bun test src" }, "dependencies": { + "@databuddy/shared": "workspace:*", "zod": "catalog:" }, "devDependencies": { diff --git a/packages/validation/src/schemas/index.ts b/packages/validation/src/schemas/index.ts index 86e8bb016a..177dbcbec6 100644 --- a/packages/validation/src/schemas/index.ts +++ b/packages/validation/src/schemas/index.ts @@ -5,5 +5,6 @@ export * from "./custom-events"; export * from "./errors"; export * from "./identity"; export * from "./organizations"; +export * from "./urls"; export * from "./web-vitals"; export * from "./websites"; diff --git a/packages/validation/src/schemas/urls.ts b/packages/validation/src/schemas/urls.ts new file mode 100644 index 0000000000..e7a2aa6b84 --- /dev/null +++ b/packages/validation/src/schemas/urls.ts @@ -0,0 +1,6 @@ +import { isHttpUrl } from "@databuddy/shared/constants/links"; +import z from "zod"; + +export const httpUrlSchema = z + .url() + .refine(isHttpUrl, { message: "URL must be an absolute HTTP or HTTPS URL" }); diff --git a/turbo.json b/turbo.json index f6750e41c0..6b674f02ac 100644 --- a/turbo.json +++ b/turbo.json @@ -32,6 +32,7 @@ "NEXT_PUBLIC_API_URL", "NEXT_PUBLIC_APP_URL", "NEXT_PUBLIC_BASKET_URL", + "NEXT_PUBLIC_LINKS_URL", "NEXT_PUBLIC_OPENAI_ADS_PIXEL_ID", "NEXT_PUBLIC_STATUS_URL", "NODE_ENV", From 00c89f85817f66e4361f27edb8c2eba3b27a9e0e Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Fri, 31 Jul 2026 16:40:11 +0300 Subject: [PATCH 002/131] test(links): cover deep link delivery --- .../_components/link-form-schema.test.ts | 45 ++ .../links/_components/use-og-metadata.test.ts | 13 + .../lib/ai-components/schemas.test.ts | 25 + apps/dashboard/lib/links-url.test.ts | 31 ++ .../test/e2e/specs/core/links.spec.ts | 39 ++ apps/dashboard/test/e2e/utils/dashboard.ts | 1 + apps/links/src/lib/deep-link-fallback.test.ts | 43 ++ apps/links/src/lib/producer.test.ts | 157 +++++-- apps/links/src/routes/redirect.route.test.ts | 256 ++++++++++ apps/links/src/routes/redirect.test.ts | 213 --------- apps/links/src/utils/geo.test.ts | 105 ----- packages/ai/src/ai/mcp/tools.test.ts | 43 ++ packages/ai/src/ai/tools/link-catalog.test.ts | 2 + packages/ai/src/query/builders/links.test.ts | 21 + packages/db/src/drizzle/schema/links.test.ts | 9 + packages/env/src/app.test.ts | 22 + packages/redis/links-cache.test.ts | 443 ++++++++++++++++++ packages/rpc/src/routers/links.test.ts | 73 ++- .../src/constants/deep-link-apps.test.ts | 42 ++ packages/shared/src/constants/links.test.ts | 25 + .../src/utils}/trusted-client-ip.test.ts | 2 +- packages/validation/src/schemas/urls.test.ts | 24 + 22 files changed, 1279 insertions(+), 355 deletions(-) create mode 100644 apps/dashboard/app/(main)/links/_components/link-form-schema.test.ts create mode 100644 apps/dashboard/app/(main)/links/_components/use-og-metadata.test.ts create mode 100644 apps/dashboard/lib/ai-components/schemas.test.ts create mode 100644 apps/dashboard/lib/links-url.test.ts create mode 100644 apps/links/src/lib/deep-link-fallback.test.ts create mode 100644 apps/links/src/routes/redirect.route.test.ts delete mode 100644 apps/links/src/routes/redirect.test.ts delete mode 100644 apps/links/src/utils/geo.test.ts create mode 100644 packages/ai/src/query/builders/links.test.ts create mode 100644 packages/redis/links-cache.test.ts create mode 100644 packages/shared/src/constants/deep-link-apps.test.ts create mode 100644 packages/shared/src/constants/links.test.ts rename {apps/dashboard/lib => packages/shared/src/utils}/trusted-client-ip.test.ts (96%) create mode 100644 packages/validation/src/schemas/urls.test.ts diff --git a/apps/dashboard/app/(main)/links/_components/link-form-schema.test.ts b/apps/dashboard/app/(main)/links/_components/link-form-schema.test.ts new file mode 100644 index 0000000000..0ad1dfe25e --- /dev/null +++ b/apps/dashboard/app/(main)/links/_components/link-form-schema.test.ts @@ -0,0 +1,45 @@ +import { describe, expect, test } from "bun:test"; +import { DEEP_LINK_APPS } from "@databuddy/shared/constants/deep-link-apps"; +import { createDeepLinkFormSchema } from "./link-form-schema"; + +const instagram = DEEP_LINK_APPS.find((app) => app.id === "instagram"); +if (!instagram) { + throw new Error("Instagram deep-link configuration is missing"); +} + +const instagramSchema = createDeepLinkFormSchema(instagram); +const validInput = { + folderId: "", + name: "Instagram profile", + slug: "instagram-profile", + targetUrl: "instagram.com/databuddy", +}; + +describe("createDeepLinkFormSchema", () => { + test("accepts an app-specific deep-link target", () => { + expect(instagramSchema.safeParse(validInput).success).toBe(true); + }); + + test("rejects an HTTPS URL for a different app", () => { + const result = instagramSchema.safeParse({ + ...validInput, + targetUrl: "x.com/databuddy", + }); + + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.issues).toContainEqual( + expect.objectContaining({ + message: "URL must be an HTTPS Instagram link", + path: ["targetUrl"], + }) + ); + } + }); + + test.each(["ab", "bad/slug"])("rejects invalid slug %s", (slug) => { + expect( + instagramSchema.safeParse({ ...validInput, slug }).success + ).toBe(false); + }); +}); diff --git a/apps/dashboard/app/(main)/links/_components/use-og-metadata.test.ts b/apps/dashboard/app/(main)/links/_components/use-og-metadata.test.ts new file mode 100644 index 0000000000..080da8ceb6 --- /dev/null +++ b/apps/dashboard/app/(main)/links/_components/use-og-metadata.test.ts @@ -0,0 +1,13 @@ +import { describe, expect, test } from "bun:test"; +import { getProxiedImageUrl } from "./use-og-metadata"; + +describe("getProxiedImageUrl", () => { + test("keeps local paths local but proxies protocol-relative URLs", () => { + expect(getProxiedImageUrl("/images/preview.png")).toBe( + "/images/preview.png" + ); + expect(getProxiedImageUrl("//untrusted.example/image.png")).toBe( + "/api/image-proxy?url=%2F%2Funtrusted.example%2Fimage.png" + ); + }); +}); diff --git a/apps/dashboard/lib/ai-components/schemas.test.ts b/apps/dashboard/lib/ai-components/schemas.test.ts new file mode 100644 index 0000000000..bd3201f591 --- /dev/null +++ b/apps/dashboard/lib/ai-components/schemas.test.ts @@ -0,0 +1,25 @@ +import { describe, expect, test } from "bun:test"; +import { linksListSchema } from "./schemas"; + +const baseLink = { + id: "link-1", + name: "Example link", + targetUrl: "https://example.com", +}; + +describe("linksListSchema", () => { + test("accepts persisted link slugs and rejects unsafe display slugs", () => { + expect( + linksListSchema.safeParse({ + type: "links-list", + links: [{ ...baseLink, slug: "launch_2026" }], + }).success + ).toBe(true); + expect( + linksListSchema.safeParse({ + type: "links-list", + links: [{ ...baseLink, slug: "/evil.example" }], + }).success + ).toBe(false); + }); +}); diff --git a/apps/dashboard/lib/links-url.test.ts b/apps/dashboard/lib/links-url.test.ts new file mode 100644 index 0000000000..13c3891b27 --- /dev/null +++ b/apps/dashboard/lib/links-url.test.ts @@ -0,0 +1,31 @@ +import { describe, expect, test } from "bun:test"; +import { + getPublicLinkUrl, + getSafeHttpUrl, + isPublicLinkSlug, + LINKS_BASE_URL, +} from "./links-url"; + +describe("public link URLs", () => { + test("keeps a malicious slug on the configured link host", () => { + const url = new URL(getPublicLinkUrl("/evil.example")); + + expect(url.host).toBe(LINKS_BASE_URL); + expect(url.pathname).toBe("/%2Fevil.example"); + }); + + test("recognizes the public link slug contract", () => { + expect(isPublicLinkSlug("launch_2026")).toBe(true); + expect(isPublicLinkSlug("ab")).toBe(false); + expect(isPublicLinkSlug("launch/path")).toBe(false); + }); + + test("permits only absolute HTTP(S) redirect and metadata URLs", () => { + expect(getSafeHttpUrl("https://example.com/image.png")).toBe( + "https://example.com/image.png" + ); + expect(getSafeHttpUrl("javascript:alert(1)")).toBeNull(); + expect(getSafeHttpUrl("data:text/plain,unsafe")).toBeNull(); + expect(getSafeHttpUrl("relative/path")).toBeNull(); + }); +}); diff --git a/apps/dashboard/test/e2e/specs/core/links.spec.ts b/apps/dashboard/test/e2e/specs/core/links.spec.ts index 2e3cc5ff20..412e4c9dd0 100644 --- a/apps/dashboard/test/e2e/specs/core/links.spec.ts +++ b/apps/dashboard/test/e2e/specs/core/links.spec.ts @@ -115,6 +115,7 @@ test( await authenticatedPage.goto("/links"); await authenticatedPage.getByRole("button", { name: "New Link" }).click(); + await authenticatedPage.getByRole("menuitem", { name: "Short Link" }).click(); const dialog = authenticatedPage.getByRole("dialog", { name: "Create Link" }); await dialog.getByRole("textbox", { name: "Destination URL" }).fill(targetUrl); await dialog.getByRole("textbox", { name: "Name" }).fill(name); @@ -136,6 +137,7 @@ test( await expect(linkRow(authenticatedPage, name)).toBeVisible(); await authenticatedPage.getByRole("button", { name: "New Link" }).click(); + await authenticatedPage.getByRole("menuitem", { name: "Short Link" }).click(); const duplicateDialog = authenticatedPage.getByRole("dialog", { name: "Create Link", }); @@ -155,3 +157,40 @@ test( await expect(linkRow(authenticatedPage, `${name} duplicate`)).toBeHidden(); } ); + +test( + "creates deep links without a feature flag", + { tag: "@core" }, + async ({ authenticatedPage, e2eSession }) => { + const suffix = scopeSuffix(e2eSession); + const name = `E2E Instagram ${suffix}`; + const slug = `e2e-instagram-${suffix}`; + + await authenticatedPage.goto("/links"); + await authenticatedPage.getByRole("button", { name: "New Link" }).click(); + await expect( + authenticatedPage.getByRole("menuitem", { name: "Short Link" }) + ).toBeVisible(); + await authenticatedPage.getByRole("menuitem", { name: "Deep Link" }).click(); + await expect( + authenticatedPage.getByRole("heading", { name: "Create Deep Link" }) + ).toBeVisible(); + await authenticatedPage + .getByRole("button", { name: /Instagram/ }) + .click(); + await authenticatedPage + .getByRole("textbox", { name: "Instagram URL" }) + .fill(`instagram.com/e2e-${suffix}`); + await authenticatedPage.getByRole("textbox", { name: "Name" }).fill(name); + await authenticatedPage + .getByRole("textbox", { name: SHORT_LINK_LABEL_RE }) + .fill(slug); + await authenticatedPage + .getByRole("button", { name: "Create Deep Link" }) + .click(); + + const row = linkRow(authenticatedPage, name); + await expect(row).toBeVisible(); + await expect(row.getByText("Instagram", { exact: true })).toBeVisible(); + } +); diff --git a/apps/dashboard/test/e2e/utils/dashboard.ts b/apps/dashboard/test/e2e/utils/dashboard.ts index 888e516f4d..cc0a63df3b 100644 --- a/apps/dashboard/test/e2e/utils/dashboard.ts +++ b/apps/dashboard/test/e2e/utils/dashboard.ts @@ -142,6 +142,7 @@ export async function createShortLink( } ): Promise { await page.getByRole("button", { name: "New Link" }).click(); + await page.getByRole("menuitem", { name: "Short Link" }).click(); const dialog = page.getByRole("dialog", { name: "Create Link" }); await dialog.waitFor(); await dialog diff --git a/apps/links/src/lib/deep-link-fallback.test.ts b/apps/links/src/lib/deep-link-fallback.test.ts new file mode 100644 index 0000000000..954d79a6ba --- /dev/null +++ b/apps/links/src/lib/deep-link-fallback.test.ts @@ -0,0 +1,43 @@ +import { describe, expect, test } from "bun:test"; +import { + createDeepLinkFallbackResponse, + renderDeepLinkFallbackPage, +} from "./deep-link-fallback"; + +describe("deep-link fallback page", () => { + test("tries the native app and keeps an HTTPS browser fallback", () => { + const page = renderDeepLinkFallbackPage( + "instagram://user?username=databuddy", + "https://www.instagram.com/databuddy" + ); + + expect(page).toContain('const appUrl = "instagram://user?username=databuddy"'); + expect(page).toContain( + 'const fallbackUrl = "https://www.instagram.com/databuddy"' + ); + expect(page).toContain('href="https://www.instagram.com/databuddy"'); + expect(page).toContain("window.location.replace(fallbackUrl)"); + }); + + test("serializes URLs safely in HTML and JavaScript", () => { + const page = renderDeepLinkFallbackPage( + "app://open?value=", + "https://example.com/?value=" + ); + + expect(page).not.toContain(""); + expect(page).toContain("\\u003c/script\\u003e"); + expect(page).toContain("<unsafe>"); + }); + + test("returns a no-store HTML response", async () => { + const response = createDeepLinkFallbackResponse( + "spotify://track/example", + "https://open.spotify.com/track/example" + ); + + expect(response.status).toBe(200); + expect(response.headers.get("cache-control")).toBe("private, no-store"); + expect(response.headers.get("content-type")).toContain("text/html"); + }); +}); diff --git a/apps/links/src/lib/producer.test.ts b/apps/links/src/lib/producer.test.ts index 998096748b..0e9000491a 100644 --- a/apps/links/src/lib/producer.test.ts +++ b/apps/links/src/lib/producer.test.ts @@ -1,29 +1,70 @@ -import { beforeEach, describe, expect, mock, test } from "bun:test"; +import { beforeEach, describe, expect, mock, spyOn, test } from "bun:test"; -process.env.CLICKHOUSE_URL = "http://clickhouse.test"; -delete process.env.REDPANDA_BROKER; - -const insert = mock(() => Promise.resolve()); const setAttributes = mock(() => {}); const captureError = mock(() => {}); +const mergeWideEvent = mock(() => {}); +const kafkaConfigs: Array> = []; -mock.module("@databuddy/db/clickhouse", () => ({ - clickHouse: { insert }, - TABLE_NAMES: { link_visits: "analytics.link_visits" }, -})); +type FakeProducer = { + connect: () => Promise; + disconnect: () => Promise; + send: () => Promise; +}; + +let nextProducer: FakeProducer | null = null; +const createProducer = mock(() => { + if (!nextProducer) { + throw new Error("No Kafka producer configured for test"); + } + return nextProducer; +}); + +class MockKafka { + constructor(config: Record) { + kafkaConfigs.push(config); + } + + producer(options: Record) { + return createProducer(options); + } +} mock.module("./logging", () => ({ captureError, + mergeWideEvent, + record: async (_name: string, run: () => Promise | T) => run(), setAttributes, })); -const { sendLinkVisit } = await import("./producer"); +mock.module("kafkajs", () => ({ + CompressionTypes: { GZIP: 1 }, + Kafka: MockKafka, +})); + +function makeProducer({ + connect = () => Promise.resolve(), + disconnect = () => Promise.resolve(), + send = () => Promise.resolve(), +}: Partial = {}): FakeProducer { + return { + connect: mock(connect), + disconnect: mock(disconnect), + send: mock(send), + }; +} + +let moduleId = 0; + +async function loadProducer() { + return import(`./producer.ts?test=${moduleId++}`); +} const event = { browser_name: "Chrome", city: null, country: "US", device_type: "desktop", + id: "1b0a8d41-1d8a-4c31-91e0-4b4fcb2d8b0d", ip_hash: "hash_123", link_id: "link_123", referrer: null, @@ -33,46 +74,96 @@ const event = { }; beforeEach(() => { - insert.mockClear(); + delete process.env.REDPANDA_BROKER; + delete process.env.REDPANDA_PASSWORD; + delete process.env.REDPANDA_SSL; + delete process.env.REDPANDA_USER; setAttributes.mockClear(); captureError.mockClear(); + createProducer.mockClear(); + kafkaConfigs.length = 0; + nextProducer = null; }); describe("sendLinkVisit", () => { - test("falls back to ClickHouse when Kafka is not configured", async () => { + test("reports an unavailable broker when Kafka is not configured", async () => { + const { sendLinkVisit } = await loadProducer(); + const result = await sendLinkVisit(event, event.link_id); - expect(result).toEqual({ - clickhouse_fallback_success: true, - kafka_broker_configured: false, + expect(result).toBe(false); + expect(setAttributes).toHaveBeenLastCalledWith({ kafka_connected: false, - kafka_send_ambiguous: false, kafka_send_skipped: true, - kafka_send_success: false, }); - expect(insert).toHaveBeenCalledWith({ - table: "analytics.link_visits", - values: [event], - format: "JSONEachRow", + }); + + test("uses bounded native Kafka timeouts and enables TLS without SASL", async () => { + process.env.REDPANDA_BROKER = "redpanda.test:9092"; + process.env.REDPANDA_SSL = "true"; + nextProducer = makeProducer(); + const { disconnectProducer, sendLinkVisit } = await loadProducer(); + const clearTimeoutSpy = spyOn(globalThis, "clearTimeout"); + + try { + const result = await sendLinkVisit(event, event.link_id); + + expect(result).toBe(true); + expect(clearTimeoutSpy).toHaveBeenCalledTimes(2); + expect(kafkaConfigs).toEqual([ + expect.objectContaining({ + authenticationTimeout: 3000, + brokers: ["redpanda.test:9092"], + connectionTimeout: 3000, + enforceRequestTimeout: true, + requestTimeout: 3000, + ssl: true, + }), + ]); + expect(nextProducer.send).toHaveBeenCalledWith( + expect.objectContaining({ acks: -1 }) + ); + expect(kafkaConfigs[0]).not.toHaveProperty("sasl"); + } finally { + clearTimeoutSpy.mockRestore(); + } + + await disconnectProducer(); + expect(nextProducer.disconnect).toHaveBeenCalledTimes(1); + }); + + test("disposes a producer whose connection fails before retry", async () => { + process.env.REDPANDA_BROKER = "redpanda.test:9092"; + const connectionError = new Error("connection failed"); + nextProducer = makeProducer({ + connect: () => Promise.reject(connectionError), }); - expect(setAttributes).toHaveBeenCalledWith({ kafka_send_skipped: true }); - expect(setAttributes).toHaveBeenCalledWith({ - clickhouse_fallback_success: true, + const { sendLinkVisit } = await loadProducer(); + + const result = await sendLinkVisit(event, event.link_id); + + expect(nextProducer.disconnect).toHaveBeenCalledTimes(1); + expect(result).toBe(false); + expect(captureError).toHaveBeenCalledWith(connectionError, { + operation: "kafka_connect", }); }); - test("reports ClickHouse fallback failures", async () => { - insert.mockImplementationOnce(() => Promise.reject(new Error("insert failed"))); + test("disposes a failed producer without falling back after an ambiguous send", async () => { + process.env.REDPANDA_BROKER = "redpanda.test:9092"; + const sendError = new Error("send failed"); + nextProducer = makeProducer({ + send: () => Promise.reject(sendError), + }); + const { sendLinkVisit } = await loadProducer(); const result = await sendLinkVisit(event, event.link_id); - expect(result.clickhouse_fallback_success).toBe(false); - expect(captureError).toHaveBeenCalledWith(expect.any(Error), { - operation: "clickhouse_link_visit_fallback", - clickhouse_table: "analytics.link_visits", - }); - expect(setAttributes).toHaveBeenCalledWith({ - clickhouse_fallback_success: false, + expect(nextProducer.disconnect).toHaveBeenCalledTimes(1); + expect(result).toBe(false); + expect(captureError).toHaveBeenCalledWith(sendError, { + kafka_topic: "analytics-link-visits", + operation: "kafka_send", }); }); }); diff --git a/apps/links/src/routes/redirect.route.test.ts b/apps/links/src/routes/redirect.route.test.ts new file mode 100644 index 0000000000..8c73b101f3 --- /dev/null +++ b/apps/links/src/routes/redirect.route.test.ts @@ -0,0 +1,256 @@ +import { beforeEach, describe, expect, mock, test } from "bun:test"; +import { Elysia } from "elysia"; + +const dbSelect = mock(() => ({ + from: () => ({ + where: () => ({ + limit: async () => [], + }), + }), +})); +const getCachedLink = mock(); +const ratelimit = mock(); +const resolveDeepLink = mock(); +const sendLinkVisit = mock(); + +mock.module("@databuddy/env/app", () => ({ + config: { urls: { dashboard: "https://dashboard.test" } }, +})); + +mock.module("@databuddy/db", () => ({ + and: (...conditions: unknown[]) => conditions, + db: { select: dbSelect }, + eq: (left: unknown, right: unknown) => [left, right], + isNull: (value: unknown) => value, +})); + +mock.module("@databuddy/db/schema", () => ({ + links: { + androidUrl: "androidUrl", + deepLinkApp: "deepLinkApp", + deletedAt: "deletedAt", + expiredRedirectUrl: "expiredRedirectUrl", + expiresAt: "expiresAt", + id: "id", + iosUrl: "iosUrl", + ogDescription: "ogDescription", + ogImageUrl: "ogImageUrl", + ogTitle: "ogTitle", + ogVideoUrl: "ogVideoUrl", + slug: "slug", + targetUrl: "targetUrl", + }, +})); + +mock.module("@databuddy/redis", () => ({ + getCachedLink, + getRateLimitHeaders: (result: { + limit: number; + remaining: number; + reset: number; + success: boolean; + }) => ({ + "X-RateLimit-Limit": String(result.limit), + "X-RateLimit-Remaining": String(result.remaining), + }), + ratelimit, + setCachedLinkIfAbsent: mock(async () => true), + setCachedLinkNotFoundIfAbsent: mock(async () => true), +})); + +mock.module("@databuddy/shared/bot-detection", () => ({ + BotCategory: { + SEARCH_ENGINE: "search_engine", + SOCIAL_MEDIA: "social_media", + }, + detectBot: () => ({ category: "other", isBot: false }), +})); + +mock.module("@databuddy/shared/constants/deep-link-apps", () => ({ + resolveDeepLink, +})); + +mock.module("../lib/logging", () => ({ + captureError: mock(() => {}), + mergeWideEvent: mock(() => {}), + record: async (_name: string, run: () => Promise | T) => run(), +})); + +mock.module("../lib/producer", () => ({ + sendLinkVisit, +})); + +mock.module("../utils/geo", () => ({ + extractIp: () => "127.0.0.1", + getGeo: mock(async () => ({ city: null, country: null, region: null })), +})); + +const { redirectRoute } = await import("./redirect"); +const app = new Elysia().use(redirectRoute); + +const baseLink = { + androidUrl: null, + deepLinkApp: null, + expiredRedirectUrl: null, + expiresAt: null, + id: "link-1", + iosUrl: null, + ogDescription: null, + ogImageUrl: null, + ogTitle: null, + ogVideoUrl: null, + targetUrl: "https://example.com", +}; + +beforeEach(() => { + dbSelect.mockClear(); + getCachedLink.mockClear(); + ratelimit.mockClear(); + resolveDeepLink.mockClear(); + sendLinkVisit.mockClear(); + getCachedLink.mockResolvedValue({ state: "miss" }); + ratelimit.mockResolvedValue({ + limit: 60, + remaining: 59, + reset: Date.now() + 60_000, + success: true, + }); + resolveDeepLink.mockReturnValue(null); + sendLinkVisit.mockResolvedValue(true); +}); + +describe("redirect route", () => { + test("uses a negative cache hit without querying Postgres", async () => { + getCachedLink.mockResolvedValue({ state: "not_found" }); + + const response = await app.handle( + new Request("http://links.test/missing-link") + ); + + expect(response.status).toBe(302); + expect(response.headers.get("location")).toBe( + "https://dashboard.test/dby/not-found" + ); + expect(dbSelect).not.toHaveBeenCalled(); + }); + + test("retries a pending cache mutation without querying Postgres", async () => { + getCachedLink.mockResolvedValue({ state: "pending" }); + + const response = await app.handle( + new Request("http://links.test/updating-link") + ); + + expect(response.status).toBe(503); + expect(response.headers.get("retry-after")).toBe("1"); + expect(dbSelect).not.toHaveBeenCalled(); + expect(ratelimit).not.toHaveBeenCalled(); + }); + + test("limits cache misses before querying Postgres", async () => { + ratelimit.mockResolvedValue({ + limit: 60, + remaining: 0, + reset: Date.now() + 60_000, + success: false, + }); + + const response = await app.handle( + new Request("http://links.test/uncached-link") + ); + + expect(response.status).toBe(429); + expect(dbSelect).not.toHaveBeenCalled(); + }); + + test("serves a mobile deep-link launcher with a safe HTTPS fallback", async () => { + getCachedLink.mockResolvedValue({ + link: { + ...baseLink, + id: "deep-link-1", + deepLinkApp: "instagram", + iosUrl: "javascript:alert(1)", + targetUrl: "https://www.instagram.com/databuddy", + }, + state: "hit", + }); + resolveDeepLink.mockReturnValue("instagram://user?username=databuddy"); + + const response = await app.handle( + new Request("http://links.test/databuddy", { + headers: { + "user-agent": + "Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X)", + }, + }) + ); + + expect(response.status).toBe(200); + expect(response.headers.get("cache-control")).toBe("private, no-store"); + const body = await response.text(); + expect(body).toContain("instagram://user?username=databuddy"); + expect(body).toContain("https://www.instagram.com/databuddy"); + expect(body).not.toContain("javascript:alert(1)"); + expect(sendLinkVisit).toHaveBeenCalledWith( + expect.objectContaining({ link_id: "deep-link-1" }), + "deep-link-1" + ); + }); + + test("ignores an unsafe legacy expiry redirect", async () => { + getCachedLink.mockResolvedValue({ + link: { + ...baseLink, + expiredRedirectUrl: "javascript:alert(1)", + expiresAt: "2000-01-01T00:00:00.000Z", + }, + state: "hit", + }); + + const response = await app.handle( + new Request("http://links.test/expired-link") + ); + + expect(response.status).toBe(302); + expect(response.headers.get("location")).toBe( + "https://dashboard.test/dby/expired" + ); + expect(sendLinkVisit).not.toHaveBeenCalled(); + }); + + test("does not redirect when Redpanda does not acknowledge a click", async () => { + getCachedLink.mockResolvedValue({ + link: { ...baseLink, id: "durable-link-1" }, + state: "hit", + }); + sendLinkVisit.mockResolvedValueOnce(false); + + const response = await app.handle( + new Request("http://links.test/durable-link") + ); + + expect(response.status).toBe(503); + expect(response.headers.get("retry-after")).toBe("5"); + expect(response.headers.get("location")).toBeNull(); + }); + + test("waits for a Redpanda acknowledgement before redirecting", async () => { + getCachedLink.mockResolvedValue({ + link: { ...baseLink, id: "durable-link-2" }, + state: "hit", + }); + + const response = await app.handle( + new Request("http://links.test/durable-link-two") + ); + + expect(response.status).toBe(302); + expect(sendLinkVisit).toHaveBeenCalledWith( + expect.objectContaining({ + id: expect.any(String), + link_id: "durable-link-2", + }), + "durable-link-2" + ); + }); +}); diff --git a/apps/links/src/routes/redirect.test.ts b/apps/links/src/routes/redirect.test.ts deleted file mode 100644 index c1deb02789..0000000000 --- a/apps/links/src/routes/redirect.test.ts +++ /dev/null @@ -1,213 +0,0 @@ -import { createHash } from "node:crypto"; -import { describe, expect, test } from "bun:test"; -import { LRUCache } from "lru-cache"; -import { UAParser } from "ua-parser-js"; - -let dailySalt = new Date().toISOString().slice(0, 10); -let saltUpdatedAt = Date.now(); - -function hashIp(ip: string): string { - const now = Date.now(); - if (now - saltUpdatedAt > 60_000) { - dailySalt = new Date().toISOString().slice(0, 10); - saltUpdatedAt = now; - } - return createHash("sha256") - .update(ip + dailySalt) - .digest("hex"); -} - -const uaCache = new LRUCache< - string, - { browser: string | null; device: string | null } ->({ max: 500, ttl: 300_000 }); - -function parseUA(ua: string | null): { - browser: string | null; - device: string | null; -} { - if (!ua) return { browser: null, device: null }; - const cached = uaCache.get(ua); - if (cached) return cached; - try { - const r = new UAParser(ua).getResult(); - const parsed = { - browser: r.browser.name || null, - device: r.device.type || "desktop", - }; - uaCache.set(ua, parsed); - return parsed; - } catch { - return { browser: null, device: null }; - } -} - -describe("hashIp", () => { - test("returns a 64-char hex string (SHA256)", () => { - expect(hashIp("192.168.1.1")).toMatch(/^[a-f0-9]{64}$/); - }); - - test("is deterministic for the same IP", () => { - expect(hashIp("8.8.8.8")).toBe(hashIp("8.8.8.8")); - }); - - test("produces different hashes for different IPs", () => { - expect(hashIp("8.8.8.8")).not.toBe(hashIp("1.1.1.1")); - }); - - test("handles empty string", () => { - expect(hashIp("")).toMatch(/^[a-f0-9]{64}$/); - }); - - test("handles IPv6", () => { - expect(hashIp("2001:0db8:85a3::8a2e:0370:7334")).toMatch(/^[a-f0-9]{64}$/); - }); - - test("produces unique hashes for 100 IPs", () => { - const hashes = new Set(); - for (let i = 0; i < 100; i++) { - const ip = `${Math.floor(i / 27) + 1}.${(i * 7) % 256}.${(i * 13) % 256}.${(i * 17) % 256}`; - hashes.add(hashIp(ip)); - } - expect(hashes.size).toBe(100); - }); -}); - -describe("parseUA", () => { - test("null / empty → null values", () => { - expect(parseUA(null)).toEqual({ browser: null, device: null }); - expect(parseUA("")).toEqual({ browser: null, device: null }); - }); - - test("Chrome on Windows → desktop", () => { - const r = parseUA( - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", - ); - expect(r.browser).toBe("Chrome"); - expect(r.device).toBe("desktop"); - }); - - test("Firefox on Windows → desktop", () => { - const r = parseUA( - "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0", - ); - expect(r.browser).toBe("Firefox"); - expect(r.device).toBe("desktop"); - }); - - test("Safari on macOS → desktop", () => { - const r = parseUA( - "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15", - ); - expect(r.browser).toBe("Safari"); - expect(r.device).toBe("desktop"); - }); - - test("Safari on iPhone → mobile", () => { - const r = parseUA( - "Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1", - ); - expect(r.browser).toBe("Mobile Safari"); - expect(r.device).toBe("mobile"); - }); - - test("Chrome on Android → mobile", () => { - const r = parseUA( - "Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.144 Mobile Safari/537.36", - ); - expect(r.browser).toBe("Mobile Chrome"); - expect(r.device).toBe("mobile"); - }); - - test("iPad → tablet", () => { - const r = parseUA( - "Mozilla/5.0 (iPad; CPU OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1", - ); - expect(r.browser).toBe("Mobile Safari"); - expect(r.device).toBe("tablet"); - }); - - test("Googlebot → defaults to desktop", () => { - const r = parseUA( - "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)", - ); - expect(r.browser).toBeNull(); - expect(r.device).toBe("desktop"); - }); - - test("curl → defaults to desktop", () => { - const r = parseUA("curl/8.4.0"); - expect(r.browser).toBeNull(); - expect(r.device).toBe("desktop"); - }); - - test("malformed UA → does not throw", () => { - expect(parseUA("not a real user agent!!!")).toBeDefined(); - }); - - test("very long UA → does not throw", () => { - expect(parseUA("Mozilla/5.0 ".repeat(100))).toBeDefined(); - }); -}); - -describe("redirect route logic", () => { - describe("lookupLink pattern", () => { - async function lookupPattern(opts: { - cacheResult: { id: string; targetUrl: string } | null; - dbResult: { id: string; targetUrl: string } | null; - cacheError?: boolean; - }) { - if (!opts.cacheError && opts.cacheResult) return opts.cacheResult; - return opts.dbResult; - } - - test("returns cache hit when available", async () => { - const r = await lookupPattern({ - cacheResult: { id: "cached-123", targetUrl: "https://cached.com" }, - dbResult: { id: "db-123", targetUrl: "https://db.com" }, - }); - expect(r?.id).toBe("cached-123"); - }); - - test("falls back to DB when cache empty", async () => { - const r = await lookupPattern({ - cacheResult: null, - dbResult: { id: "db-123", targetUrl: "https://db.com" }, - }); - expect(r?.id).toBe("db-123"); - }); - - test("returns null when not in cache or DB", async () => { - expect( - await lookupPattern({ cacheResult: null, dbResult: null }), - ).toBeNull(); - }); - - test("falls back to DB on cache error", async () => { - const r = await lookupPattern({ - cacheResult: { id: "cached", targetUrl: "https://cached.com" }, - dbResult: { id: "db-123", targetUrl: "https://db.com" }, - cacheError: true, - }); - expect(r?.id).toBe("db-123"); - }); - }); - - test("timestamp formatting for analytics", () => { - const formatted = new Date("2025-01-16T10:30:45.123Z") - .toISOString() - .replace("T", " ") - .replace("Z", ""); - expect(formatted).toBe("2025-01-16 10:30:45.123"); - }); - - test("302 redirect preserves the target URL without adding attribution parameters", () => { - for (const url of [ - "https://example.com/path?query=value#hash", - "https://example.com/path?utm_source=test&utm_medium=link", - "https://example.com/path?ref=publisher", - ]) { - expect(Response.redirect(url, 302).headers.get("location")).toBe(url); - } - }); -}); diff --git a/apps/links/src/utils/geo.test.ts b/apps/links/src/utils/geo.test.ts deleted file mode 100644 index 2fd458a1d7..0000000000 --- a/apps/links/src/utils/geo.test.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { describe, expect, test } from "bun:test"; - -// extractIp is a pure function that doesn't need Redis -// Import it directly since it doesn't trigger Redis initialization -function extractIp(request: Request): string { - const cfIp = request.headers.get("cf-connecting-ip"); - if (cfIp) { - return cfIp.trim(); - } - - const forwardedFor = request.headers.get("x-forwarded-for"); - const firstIp = forwardedFor?.split(",")[0]?.trim(); - if (firstIp) { - return firstIp; - } - - const realIp = request.headers.get("x-real-ip"); - if (realIp) { - return realIp.trim(); - } - - return "unknown"; -} - -describe("extractIp", () => { - describe("header priority", () => { - test("should extract IP from cf-connecting-ip header", () => { - const request = new Request("https://example.com", { - headers: { "cf-connecting-ip": "1.2.3.4" }, - }); - expect(extractIp(request)).toBe("1.2.3.4"); - }); - - test("should extract first IP from x-forwarded-for header", () => { - const request = new Request("https://example.com", { - headers: { "x-forwarded-for": "5.6.7.8, 9.10.11.12, 13.14.15.16" }, - }); - expect(extractIp(request)).toBe("5.6.7.8"); - }); - - test("should extract IP from x-real-ip header", () => { - const request = new Request("https://example.com", { - headers: { "x-real-ip": "17.18.19.20" }, - }); - expect(extractIp(request)).toBe("17.18.19.20"); - }); - - test("should prioritize cf-connecting-ip over x-forwarded-for", () => { - const request = new Request("https://example.com", { - headers: { - "cf-connecting-ip": "1.1.1.1", - "x-forwarded-for": "2.2.2.2", - "x-real-ip": "3.3.3.3", - }, - }); - expect(extractIp(request)).toBe("1.1.1.1"); - }); - - test("should prioritize x-forwarded-for over x-real-ip", () => { - const request = new Request("https://example.com", { - headers: { - "x-forwarded-for": "2.2.2.2", - "x-real-ip": "3.3.3.3", - }, - }); - expect(extractIp(request)).toBe("2.2.2.2"); - }); - }); - - describe("edge cases", () => { - test("should return 'unknown' when no IP headers present", () => { - const request = new Request("https://example.com"); - expect(extractIp(request)).toBe("unknown"); - }); - - test("should trim whitespace from cf-connecting-ip", () => { - const request = new Request("https://example.com", { - headers: { "cf-connecting-ip": " 1.2.3.4 " }, - }); - expect(extractIp(request)).toBe("1.2.3.4"); - }); - - test("should trim whitespace from x-forwarded-for", () => { - const request = new Request("https://example.com", { - headers: { "x-forwarded-for": " 5.6.7.8 , 9.10.11.12" }, - }); - expect(extractIp(request)).toBe("5.6.7.8"); - }); - - test("should handle IPv6 addresses", () => { - const request = new Request("https://example.com", { - headers: { - "cf-connecting-ip": "2001:0db8:85a3:0000:0000:8a2e:0370:7334", - }, - }); - expect(extractIp(request)).toBe( - "2001:0db8:85a3:0000:0000:8a2e:0370:7334" - ); - }); - }); -}); - -// getGeo tests require REDIS_URL and network access to load GeoIP database -// They are in a separate test file: geo.integration.test.ts -// Run with: REDIS_URL=redis://localhost:6379 bun test geo.integration.test.ts diff --git a/packages/ai/src/ai/mcp/tools.test.ts b/packages/ai/src/ai/mcp/tools.test.ts index 24dd45b067..066483b541 100644 --- a/packages/ai/src/ai/mcp/tools.test.ts +++ b/packages/ai/src/ai/mcp/tools.test.ts @@ -43,6 +43,49 @@ describe("MCP tools/list JSON Schema rendering", () => { }); describe("MCP tool invariants", () => { + test("create_link matches the HTTP(S) and deep-link app contract", () => { + const createLink = tools.find((tool) => tool.name === "create_link"); + if (!createLink) { + throw new Error("create_link tool is not registered"); + } + + expect( + createLink.inputSchema.safeParse({ + confirmed: false, + name: "Unsafe link", + targetUrl: "javascript:alert(1)", + websiteId: "website-1", + }).success + ).toBe(false); + expect( + createLink.inputSchema.safeParse({ + confirmed: false, + deepLinkApp: "instagram", + name: "Mismatched app", + targetUrl: "https://example.com", + websiteId: "website-1", + }).success + ).toBe(false); + expect( + createLink.inputSchema.safeParse({ + confirmed: false, + deepLinkApp: "unknown", + name: "Unknown app", + targetUrl: "https://example.com", + websiteId: "website-1", + }).success + ).toBe(false); + expect( + createLink.inputSchema.safeParse({ + confirmed: false, + deepLinkApp: "instagram", + name: "Instagram profile", + targetUrl: "https://instagram.com/databuddy", + websiteId: "website-1", + }).success + ).toBe(true); + }); + test("tool names are unique snake_case", () => { const names = tools.map((tool) => tool.name); expect(new Set(names).size).toBe(names.length); diff --git a/packages/ai/src/ai/tools/link-catalog.test.ts b/packages/ai/src/ai/tools/link-catalog.test.ts index 2ab8644a00..c247898b44 100644 --- a/packages/ai/src/ai/tools/link-catalog.test.ts +++ b/packages/ai/src/ai/tools/link-catalog.test.ts @@ -90,6 +90,7 @@ describe("paginated link catalog", () => { name: `Example ${index}`, slug: `example-${index}`, targetUrl: `https://example.com/${index}`, + deepLinkApp: index === 1000 ? "instagram" : null, })); const calls: Array<{ limit: number; offset: number; search?: string }> = []; @@ -107,6 +108,7 @@ describe("paginated link catalog", () => { expect(page.items).toHaveLength(1); expect(page.items[0]?.id).toBe("link-1000"); + expect(page.items[0]?.deepLinkApp).toBe("instagram"); expect(page.total).toBeUndefined(); expect(calls).toEqual([ { limit: 50, offset: 0, search: "Example 1000" }, diff --git a/packages/ai/src/query/builders/links.test.ts b/packages/ai/src/query/builders/links.test.ts new file mode 100644 index 0000000000..860ccc57ea --- /dev/null +++ b/packages/ai/src/query/builders/links.test.ts @@ -0,0 +1,21 @@ +import { describe, expect, it } from "vitest"; +import { LinkShortenerBuilders } from "./links"; + +describe("LinkShortenerBuilders", () => { + it("counts immutable visit ids so replayed deliveries do not inflate analytics", () => { + const clickBuilders = [ + LinkShortenerBuilders.link_total_clicks, + LinkShortenerBuilders.link_clicks_by_day, + LinkShortenerBuilders.link_top_referrers, + LinkShortenerBuilders.link_top_countries, + LinkShortenerBuilders.link_top_regions, + LinkShortenerBuilders.link_top_cities, + LinkShortenerBuilders.link_top_devices, + LinkShortenerBuilders.link_top_browsers, + ]; + + for (const builder of clickBuilders) { + expect(builder?.fields.join(" ")).toContain("uniqExact(id)"); + } + }); +}); diff --git a/packages/db/src/drizzle/schema/links.test.ts b/packages/db/src/drizzle/schema/links.test.ts index 538aa7e316..0a0ce2fc65 100644 --- a/packages/db/src/drizzle/schema/links.test.ts +++ b/packages/db/src/drizzle/schema/links.test.ts @@ -3,6 +3,15 @@ import { getTableConfig } from "drizzle-orm/pg-core"; import { links } from "./links"; describe("links schema", () => { + test("keeps deep-link app optional for existing links", () => { + const column = getTableConfig(links).columns.find( + (candidate) => candidate.name === "deep_link_app" + ); + + expect(column?.notNull).toBe(false); + expect(column?.dataType).toBe("string"); + }); + test("indexes stable newest pagination within an organization", () => { const index = getTableConfig(links).indexes.find( (candidate) => candidate.config.name === "links_org_created_at_id_idx" diff --git a/packages/env/src/app.test.ts b/packages/env/src/app.test.ts index 5ee28bfb87..ca9179019a 100644 --- a/packages/env/src/app.test.ts +++ b/packages/env/src/app.test.ts @@ -8,6 +8,7 @@ describe("createConfig", () => { api: "http://localhost:3001", basket: "http://localhost:4000", dashboard: "http://localhost:3000", + links: "http://localhost:2500", status: "http://localhost:3002", }, }); @@ -19,6 +20,7 @@ describe("createConfig", () => { api: "https://api.databuddy.cc", basket: "https://basket.databuddy.cc", dashboard: "https://app.databuddy.cc", + links: "https://dby.sh", status: "https://status.databuddy.cc", }, }); @@ -71,6 +73,26 @@ describe("createConfig", () => { }); }); + it("uses configured public links URLs and removes trailing slashes", () => { + expect( + createConfig({ + LINKS_URL: "https://links.example.com/", + NODE_ENV: "production", + }) + ).toMatchObject({ + urls: { links: "https://links.example.com" }, + }); + + expect( + createConfig({ + NEXT_PUBLIC_LINKS_URL: "https://public-links.example.com/", + NODE_ENV: "production", + }) + ).toMatchObject({ + urls: { links: "https://public-links.example.com" }, + }); + }); + it("exposes the OpenAI Ads pixel ID through public config", () => { expect( createConfig({ diff --git a/packages/redis/links-cache.test.ts b/packages/redis/links-cache.test.ts new file mode 100644 index 0000000000..97ee3e8b96 --- /dev/null +++ b/packages/redis/links-cache.test.ts @@ -0,0 +1,443 @@ +import { afterAll, beforeEach, describe, expect, mock, test } from "bun:test"; + +const store = new Map(); +let replacementBeforeConditionalDelete: string | null = null; + +function parseCacheValue(value: string | undefined): Record | null { + if (!value || value === "null") { + return null; + } + + try { + const parsed: unknown = JSON.parse(value); + return parsed && typeof parsed === "object" + ? (parsed as Record) + : null; + } catch { + return null; + } +} + +const redis = { + eval: mock( + async ( + script: string, + _keyCount: number, + key: string, + ...args: string[] + ) => { + if (script.includes("begin-cached-link-mutation")) { + const [id, token, mode] = args; + const current = store.get(key); + if (current && current !== "null") { + const decoded = parseCacheValue(current); + if (!decoded) { + return "conflict"; + } + if (decoded.state === "pending") { + return "busy"; + } + if (decoded.state === "tombstone") { + if (mode === "existing" && decoded.id !== id) { + return "conflict"; + } + } else if ( + typeof decoded.id !== "string" || + typeof decoded.targetUrl !== "string" || + mode === "new" || + decoded.id !== id + ) { + return "conflict"; + } + } + store.set(key, JSON.stringify({ id, state: "pending", token })); + return "acquired"; + } + + if (script.includes("finish-cached-link-mutation")) { + const [token, next] = args; + const pending = parseCacheValue(store.get(key)); + const nextValue = parseCacheValue(next); + if ( + pending?.state !== "pending" || + pending.token !== token || + !nextValue || + nextValue.id !== pending.id + ) { + return 0; + } + store.set(key, next); + return 1; + } + + if (script.includes("abandon-cached-link-mutation")) { + const [token] = args; + const pending = parseCacheValue(store.get(key)); + if (pending?.state !== "pending" || pending.token !== token) { + return 0; + } + store.delete(key); + return 1; + } + + if (script.includes("delete-cached-link-if-current")) { + const [current] = args; + if (replacementBeforeConditionalDelete) { + store.set(key, replacementBeforeConditionalDelete); + replacementBeforeConditionalDelete = null; + } + if (store.get(key) !== current) { + return 0; + } + store.delete(key); + return 1; + } + + throw new Error("Unexpected Redis script"); + } + ), + get: mock(async (key: string) => store.get(key) ?? null), + set: mock( + async ( + key: string, + value: string, + _mode: "EX", + _ttl: number, + condition: "NX" + ) => { + if (condition === "NX" && store.has(key)) { + return null; + } + store.set(key, value); + return "OK"; + } + ), +}; + +mock.module("./redis", () => ({ + getRedisCache: () => redis, +})); + +const { + abandonCachedLinkMutation, + beginCachedLinkMutation, + finishCachedLinkMutation, + getCachedLink, + getLinkCacheKey, + setCachedLinkIfAbsent, + setCachedLinkNotFoundIfAbsent, +} = await import("./links-cache"); + +const link = { + androidUrl: null, + deepLinkApp: null, + expiredRedirectUrl: null, + expiresAt: null, + id: "link-1", + iosUrl: null, + ogDescription: null, + ogImageUrl: null, + ogTitle: null, + ogVideoUrl: null, + targetUrl: "https://example.com", +}; + +function getMutationToken( + result: Awaited> +): string { + if (result.state !== "acquired") { + throw new Error(`Expected mutation lease, received ${result.state}`); + } + return result.token; +} + +beforeEach(() => { + store.clear(); + replacementBeforeConditionalDelete = null; + redis.eval.mockClear(); + redis.get.mockClear(); + redis.set.mockClear(); +}); + +afterAll(() => { + mock.restore(); +}); + +describe("links cache", () => { + test("keeps legacy raw null negative entries backward compatible", async () => { + store.set(getLinkCacheKey("missing-link"), "null"); + + expect(await getCachedLink("missing-link")).toEqual({ + state: "not_found", + }); + }); + + test("returns a positive cache hit", async () => { + store.set(getLinkCacheKey("known-link"), JSON.stringify(link)); + + expect(await getCachedLink("known-link")).toEqual({ + state: "hit", + link, + }); + }); + + test("clears malformed cache values without deleting a newer value", async () => { + const key = getLinkCacheKey("broken-link"); + store.set(key, "{"); + replacementBeforeConditionalDelete = JSON.stringify(link); + + expect(await getCachedLink("broken-link")).toEqual({ state: "miss" }); + expect(store.get(key)).toBe(JSON.stringify(link)); + expect(await getCachedLink("broken-link")).toEqual({ + state: "hit", + link, + }); + }); + + test("treats malformed cache values as a miss when eviction fails", async () => { + store.set(getLinkCacheKey("broken-link"), "{"); + redis.eval.mockRejectedValueOnce(new Error("Redis unavailable")); + + expect(await getCachedLink("broken-link")).toEqual({ state: "miss" }); + }); + + test("treats invalid cache payload shapes as a miss", async () => { + const key = getLinkCacheKey("invalid-link"); + store.set(key, JSON.stringify({ id: link.id })); + + expect(await getCachedLink("invalid-link")).toEqual({ state: "miss" }); + expect(store.has(key)).toBe(false); + }); + + test("returns pending and blocks read-through backfills during a mutation", async () => { + const token = getMutationToken( + await beginCachedLinkMutation("updating-link", { + id: link.id, + mode: "existing", + }) + ); + + expect(await getCachedLink("updating-link")).toEqual({ + state: "pending", + }); + expect(await setCachedLinkIfAbsent("updating-link", link)).toBe(false); + expect(await setCachedLinkNotFoundIfAbsent("updating-link")).toBe(false); + expect( + await finishCachedLinkMutation("updating-link", token, { + link, + state: "link", + }) + ).toBe(true); + + expect(await getCachedLink("updating-link")).toEqual({ + state: "hit", + link, + }); + }); + + test("rejects a second mutation while a pending lease exists", async () => { + getMutationToken( + await beginCachedLinkMutation("busy-link", { + id: link.id, + mode: "existing", + }) + ); + + expect( + await beginCachedLinkMutation("busy-link", { + id: link.id, + mode: "existing", + }) + ).toEqual({ state: "busy" }); + }); + + test("requires an existing mutation to own a live cache entry", async () => { + store.set(getLinkCacheKey("existing-link"), JSON.stringify(link)); + + expect( + await beginCachedLinkMutation("existing-link", { + id: "different-link", + mode: "existing", + }) + ).toEqual({ state: "conflict" }); + expect( + await beginCachedLinkMutation("existing-link", { + id: link.id, + mode: "existing", + }) + ).toMatchObject({ state: "acquired" }); + }); + + test("allows a new link only over a miss, negative entry, or tombstone", async () => { + store.set(getLinkCacheKey("live-link"), JSON.stringify(link)); + expect( + await beginCachedLinkMutation("live-link", { + id: "new-link", + mode: "new", + }) + ).toEqual({ state: "conflict" }); + + store.set(getLinkCacheKey("negative-link"), "null"); + expect( + await beginCachedLinkMutation("negative-link", { + id: "new-link", + mode: "new", + }) + ).toMatchObject({ state: "acquired" }); + + store.set( + getLinkCacheKey("tombstoned-link"), + JSON.stringify({ id: "deleted-link", state: "tombstone" }) + ); + expect( + await beginCachedLinkMutation("tombstoned-link", { + id: "new-link", + mode: "new", + }) + ).toMatchObject({ state: "acquired" }); + }); + + test("requires an existing mutation to match an id-aware tombstone", async () => { + store.set( + getLinkCacheKey("deleted-link"), + JSON.stringify({ id: "deleted-link", state: "tombstone" }) + ); + + expect( + await beginCachedLinkMutation("deleted-link", { + id: link.id, + mode: "existing", + }) + ).toEqual({ state: "conflict" }); + expect( + await beginCachedLinkMutation("deleted-link", { + id: "deleted-link", + mode: "existing", + }) + ).toMatchObject({ state: "acquired" }); + }); + + test("only lets the owning token finalize or abandon a mutation", async () => { + const token = getMutationToken( + await beginCachedLinkMutation("owned-link", { + id: link.id, + mode: "existing", + }) + ); + + expect( + await finishCachedLinkMutation("owned-link", "other-token", { + id: link.id, + state: "tombstone", + }) + ).toBe(false); + expect( + await finishCachedLinkMutation("owned-link", token, { + link: { ...link, id: "different-link" }, + state: "link", + }) + ).toBe(false); + expect(await abandonCachedLinkMutation("owned-link", "other-token")).toBe( + false + ); + expect(await getCachedLink("owned-link")).toEqual({ state: "pending" }); + + expect(await abandonCachedLinkMutation("owned-link", token)).toBe(true); + expect(await getCachedLink("owned-link")).toEqual({ state: "miss" }); + }); + + test("does not let a stale read-through overwrite an id-aware tombstone", async () => { + const token = getMutationToken( + await beginCachedLinkMutation("deleted-link", { + id: link.id, + mode: "existing", + }) + ); + expect( + await finishCachedLinkMutation("deleted-link", token, { + id: link.id, + state: "tombstone", + }) + ).toBe(true); + + expect(await setCachedLinkIfAbsent("deleted-link", link)).toBe(false); + expect(await getCachedLink("deleted-link")).toEqual({ + state: "not_found", + }); + }); + + test("serializes update and delete mutations without reviving a stale link", async () => { + const updateToken = getMutationToken( + await beginCachedLinkMutation("race-link", { + id: link.id, + mode: "existing", + }) + ); + + expect( + await beginCachedLinkMutation("race-link", { + id: link.id, + mode: "existing", + }) + ).toEqual({ state: "busy" }); + expect( + await finishCachedLinkMutation("race-link", updateToken, { + link, + state: "link", + }) + ).toBe(true); + + const deleteToken = getMutationToken( + await beginCachedLinkMutation("race-link", { + id: link.id, + mode: "existing", + }) + ); + expect( + await finishCachedLinkMutation("race-link", deleteToken, { + id: link.id, + state: "tombstone", + }) + ).toBe(true); + expect( + await finishCachedLinkMutation("race-link", updateToken, { + link, + state: "link", + }) + ).toBe(false); + expect(await getCachedLink("race-link")).toEqual({ + state: "not_found", + }); + }); + + test("allows a recreated slug to replace a completed deletion tombstone", async () => { + const deleteToken = getMutationToken( + await beginCachedLinkMutation("recreated-link", { + id: link.id, + mode: "existing", + }) + ); + await finishCachedLinkMutation("recreated-link", deleteToken, { + id: link.id, + state: "tombstone", + }); + + const recreatedLink = { ...link, id: "link-2" }; + const createToken = getMutationToken( + await beginCachedLinkMutation("recreated-link", { + id: recreatedLink.id, + mode: "new", + }) + ); + expect( + await finishCachedLinkMutation("recreated-link", createToken, { + link: recreatedLink, + state: "link", + }) + ).toBe(true); + expect(await getCachedLink("recreated-link")).toEqual({ + state: "hit", + link: recreatedLink, + }); + }); +}); diff --git a/packages/rpc/src/routers/links.test.ts b/packages/rpc/src/routers/links.test.ts index 01eccd3312..4ee24121d2 100644 --- a/packages/rpc/src/routers/links.test.ts +++ b/packages/rpc/src/routers/links.test.ts @@ -24,7 +24,7 @@ describe("createLinkSchema validation", () => { const result = createLinkSchema.safeParse({ organizationId: "org-123", name: "My Link", - targetUrl: "https://example.com/path?query=value", + targetUrl: "https://instagram.com/example?query=value", slug: "my-custom-slug", folderId: "folder-posts", expiresAt: new Date("2025-12-31"), @@ -39,8 +39,8 @@ describe("createLinkSchema validation", () => { sourceType: "post", sourceId: "post_123", sourceOwnerId: "user_456", - targetDomain: "example.com", - deepLinkApp: "example", + targetDomain: "instagram.com", + deepLinkApp: "instagram", }); expect(result.success).toBe(true); @@ -70,6 +70,55 @@ describe("createLinkSchema validation", () => { ).toBe(false); }); + it("rejects unsafe URL schemes and unknown deep-link apps", () => { + const httpUrlFields = [ + "targetUrl", + "expiredRedirectUrl", + "iosUrl", + "androidUrl", + "ogImageUrl", + "ogVideoUrl", + ] as const; + + for (const url of [ + "javascript:alert(1)", + "data:text/html,hello", + "file:///etc/passwd", + "exampleapp://open/profile", + ]) { + for (const field of httpUrlFields) { + expect( + createLinkSchema.safeParse({ + name: "My Link", + targetUrl: "https://example.com", + [field]: url, + }).success + ).toBe(false); + } + } + + expect( + createLinkSchema.safeParse({ + name: "My Link", + targetUrl: "https://example.com", + deepLinkApp: "example", + }).success + ).toBe(false); + }); + + it("accepts HTTPS device fallbacks for known deep-link apps", () => { + expect( + createLinkSchema.safeParse({ + name: "Instagram profile", + targetUrl: "https://instagram.com/databuddy", + iosUrl: "https://apps.apple.com/app/instagram/id389801252", + androidUrl: + "https://play.google.com/store/apps/details?id=com.instagram.android", + deepLinkApp: "instagram", + }).success + ).toBe(true); + }); + it("validates slug length and characters", () => { const validSlugs = [ "my-slug", @@ -171,6 +220,24 @@ describe("updateLinkSchema validation", () => { }).success ).toBe(false); }); + + it("rejects unsafe URL schemes in partial updates", () => { + for (const field of [ + "targetUrl", + "expiredRedirectUrl", + "iosUrl", + "androidUrl", + "ogImageUrl", + "ogVideoUrl", + ] as const) { + expect( + updateLinkSchema.safeParse({ + id: "link-123", + [field]: "javascript:alert(1)", + }).success + ).toBe(false); + } + }); }); describe("listLinksSchema validation", () => { diff --git a/packages/shared/src/constants/deep-link-apps.test.ts b/packages/shared/src/constants/deep-link-apps.test.ts new file mode 100644 index 0000000000..93b64115f6 --- /dev/null +++ b/packages/shared/src/constants/deep-link-apps.test.ts @@ -0,0 +1,42 @@ +import { describe, expect, test } from "bun:test"; +import { + DEEP_LINK_APP_IDS, + DEEP_LINK_APPS, + getDeepLinkAppByHostname, + isDeepLinkTarget, + resolveDeepLink, +} from "./deep-link-apps"; + +describe("deep-link app targets", () => { + test("keeps the public ID tuple aligned with the app registry", () => { + expect(DEEP_LINK_APPS.map((app) => app.id)).toEqual(DEEP_LINK_APP_IDS); + }); + + test("resolves a registered HTTPS target", () => { + expect( + resolveDeepLink("instagram", "https://www.instagram.com/databuddy") + ).toBe("instagram://user?username=databuddy"); + }); + + test("requires the selected app hostname", () => { + expect( + resolveDeepLink("facebook", "https://not-facebook.example/promo") + ).toBeNull(); + expect( + resolveDeepLink("instagram", "https://instagram.com.attacker.example/promo") + ).toBeNull(); + }); + + test("rejects unknown, malformed, and non-HTTPS targets", () => { + expect(resolveDeepLink("unknown", "https://example.com")).toBeNull(); + expect(resolveDeepLink("instagram", "http://instagram.com/databuddy")).toBeNull(); + expect(resolveDeepLink("instagram", "not a URL")).toBeNull(); + expect(isDeepLinkTarget("instagram", "javascript:alert(1)")).toBe(false); + }); + + test("normalizes hostname lookup", () => { + expect(getDeepLinkAppByHostname("WWW.Instagram.COM")?.id).toBe( + "instagram" + ); + }); +}); diff --git a/packages/shared/src/constants/links.test.ts b/packages/shared/src/constants/links.test.ts new file mode 100644 index 0000000000..e7cdb305eb --- /dev/null +++ b/packages/shared/src/constants/links.test.ts @@ -0,0 +1,25 @@ +import { describe, expect, test } from "bun:test"; +import { + isHttpUrl, + LINK_SLUG_REGEX, + PUBLIC_LINK_SLUG_REGEX, +} from "./links"; + +describe("link constants", () => { + test("accepts only absolute HTTP(S) URLs", () => { + for (const value of ["https://example.com", "http://example.com/path"]) { + expect(isHttpUrl(value)).toBe(true); + } + for (const value of [null, "", "//example.com", "javascript:alert(1)"]) { + expect(isHttpUrl(value)).toBe(false); + } + }); + + test("keeps public link slug constraints aligned", () => { + expect(LINK_SLUG_REGEX.test("link_123-A")).toBe(true); + expect(LINK_SLUG_REGEX.test("bad/slug")).toBe(false); + expect(PUBLIC_LINK_SLUG_REGEX.test("abc")).toBe(true); + expect(PUBLIC_LINK_SLUG_REGEX.test("ab")).toBe(false); + expect(PUBLIC_LINK_SLUG_REGEX.test("a".repeat(51))).toBe(false); + }); +}); diff --git a/apps/dashboard/lib/trusted-client-ip.test.ts b/packages/shared/src/utils/trusted-client-ip.test.ts similarity index 96% rename from apps/dashboard/lib/trusted-client-ip.test.ts rename to packages/shared/src/utils/trusted-client-ip.test.ts index 38634e5530..cdf7063c10 100644 --- a/apps/dashboard/lib/trusted-client-ip.test.ts +++ b/packages/shared/src/utils/trusted-client-ip.test.ts @@ -54,7 +54,7 @@ describe("getTrustedClientIp", () => { ).toBe("203.0.113.10"); }); - test("does not persist malformed values", () => { + test("rejects malformed trusted header values", () => { process.env.IP_HEADER_VERIFIED = "true"; process.env.TRUSTED_IP_HEADER = "cf-connecting-ip"; diff --git a/packages/validation/src/schemas/urls.test.ts b/packages/validation/src/schemas/urls.test.ts new file mode 100644 index 0000000000..aa951b4ee3 --- /dev/null +++ b/packages/validation/src/schemas/urls.test.ts @@ -0,0 +1,24 @@ +import { describe, expect, test } from "bun:test"; +import { httpUrlSchema } from "./urls"; + +describe("httpUrlSchema", () => { + test("accepts absolute HTTP(S) URLs", () => { + for (const url of [ + "https://example.com/path?query=value", + "http://localhost:3000/path", + ]) { + expect(httpUrlSchema.safeParse(url).success).toBe(true); + } + }); + + test("rejects non-HTTP(S) URL schemes", () => { + for (const url of [ + "javascript:alert(1)", + "data:text/html,hello", + "file:///etc/passwd", + "exampleapp://open/profile", + ]) { + expect(httpUrlSchema.safeParse(url).success).toBe(false); + } + }); +}); From 682110b4db786da5fac980db4eaa870ab6ae4bca Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Fri, 31 Jul 2026 16:40:28 +0300 Subject: [PATCH 003/131] chore(deps): sync link validation dependency --- bun.lock | 1 + 1 file changed, 1 insertion(+) diff --git a/bun.lock b/bun.lock index d3e24a2e26..0dff8b7121 100644 --- a/bun.lock +++ b/bun.lock @@ -798,6 +798,7 @@ "name": "@databuddy/validation", "version": "0.1.0", "dependencies": { + "@databuddy/shared": "workspace:*", "zod": "catalog:", }, "devDependencies": { From fedd3e6d29e91b02fc3b0f40f26ccdbfee7e60dd Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 13:48:51 +0300 Subject: [PATCH 004/131] fix(db): restore elastic postgres pool --- packages/db/src/client.ts | 69 ++++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/packages/db/src/client.ts b/packages/db/src/client.ts index 55c0f5443e..4998bb8fa1 100644 --- a/packages/db/src/client.ts +++ b/packages/db/src/client.ts @@ -1,11 +1,14 @@ /** biome-ignore-all lint/performance/noNamespaceImport: "Required" */ import { drizzle, type NodePgDatabase } from "drizzle-orm/node-postgres"; -import { Client } from "pg"; +import { Pool } from "pg"; import { relations } from "./drizzle/schema/relations"; type DB = NodePgDatabase; +const DEFAULT_POOL_MAX = 20; +const DEFAULT_CONNECTION_TIMEOUT_MS = 10_000; + let _pgErrorFn: ((error: Error) => void) | null = null; export function setPgErrorFn(fn: (error: Error) => void) { @@ -18,20 +21,23 @@ export function setPgTimingFn(fn: (durationMs: number) => void) { _pgTimingFn = fn; } -function timeClientQueries(client: Client, ready: () => Promise): void { - const originalQuery = client.query.bind(client) as ( +function timePoolQueries(pool: Pool): void { + const originalQuery = pool.query.bind(pool) as ( ...args: unknown[] ) => unknown; - client.query = ((...args: unknown[]) => { + pool.query = ((...args: unknown[]) => { const timingFn = _pgTimingFn; + if (!timingFn) { + return originalQuery(...args); + } const startedAt = performance.now(); - const result = ready().then(() => originalQuery(...args)); - if (timingFn) { + const result = originalQuery(...args); + if (result instanceof Promise) { const record = () => timingFn(performance.now() - startedAt); result.then(record, record); } return result; - }) as Client["query"]; + }) as Pool["query"]; } function connectionStringForNodePg(connectionString: string): string { @@ -46,22 +52,17 @@ function connectionStringForNodePg(connectionString: string): string { } } -let _db: DB | null = null; -let _client: Client | null = null; -let _connection: Promise | null = null; - -function connectClient(client: Client): Promise { - if (_connection) { - return _connection; +function parsePositiveInt(value: string | undefined, fallback: number): number { + const parsed = Number.parseInt(value ?? "", 10); + if (Number.isFinite(parsed) && parsed > 0) { + return parsed; } - const connection = client.connect().then(() => undefined); - _connection = connection.catch((error: unknown) => { - _connection = null; - throw error; - }); - return _connection; + return fallback; } +let _db: DB | null = null; +let _pool: Pool | null = null; + function getDb(): DB { if (!_db) { const databaseUrl = process.env.DATABASE_URL; @@ -69,42 +70,44 @@ function getDb(): DB { throw new Error("DATABASE_URL is not set"); } - const client = new Client({ + _pool = new Pool({ connectionString: connectionStringForNodePg(databaseUrl), + max: parsePositiveInt(process.env.DB_POOL_MAX, DEFAULT_POOL_MAX), + idleTimeoutMillis: 30_000, + connectionTimeoutMillis: DEFAULT_CONNECTION_TIMEOUT_MS, application_name: process.env.SERVICE_NAME || "databuddy", }); - _client = client; - timeClientQueries(client, () => connectClient(client)); - client.on("error", (error) => { + timePoolQueries(_pool); + _pool.on("error", (error) => { if (_pgErrorFn) { _pgErrorFn(error); return; } - console.error("[db] postgres client error", error); + console.error("[db] postgres pool error", error); }); - _db = drizzle({ client, relations, jit: true }); + _db = drizzle({ client: _pool, relations, jit: true }); } return _db; } export async function warmPostgres(): Promise { getDb(); - if (!_client) { + if (!_pool) { return; } - await connectClient(_client); + const client = await _pool.connect(); + client.release(); } export async function shutdownPostgres(): Promise { - const client = _client; + const pool = _pool; _db = null; - _client = null; - _connection = null; - if (!client) { + _pool = null; + if (!pool) { return; } - await client.end(); + await pool.end(); } export const db = new Proxy({} as DB, { From f5d43b6c6055fb9a5af137120ffc2d7006aab6fb Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 13:59:50 +0300 Subject: [PATCH 005/131] fix(db): raise postgres pool ceiling --- packages/db/src/client.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/db/src/client.ts b/packages/db/src/client.ts index 4998bb8fa1..09d8ca6959 100644 --- a/packages/db/src/client.ts +++ b/packages/db/src/client.ts @@ -6,7 +6,7 @@ import { relations } from "./drizzle/schema/relations"; type DB = NodePgDatabase; -const DEFAULT_POOL_MAX = 20; +const DEFAULT_POOL_MAX = 50; const DEFAULT_CONNECTION_TIMEOUT_MS = 10_000; let _pgErrorFn: ((error: Error) => void) | null = null; From e8777fc9b306619703114ddf6cb35d717e6592da Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 14:01:02 +0300 Subject: [PATCH 006/131] docs(agents): document postgres pooling --- .agents/skills/databuddy-internal/SKILL.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.agents/skills/databuddy-internal/SKILL.md b/.agents/skills/databuddy-internal/SKILL.md index 48709518b5..8a849b000d 100644 --- a/.agents/skills/databuddy-internal/SKILL.md +++ b/.agents/skills/databuddy-internal/SKILL.md @@ -177,6 +177,8 @@ Read [codebase-map.md](./references/codebase-map.md) when you need deeper routin - Postgres schema: `packages/db/src/drizzle/schema.ts` - Relations: `packages/db/src/drizzle/relations.ts` - Drizzle client: `packages/db/src/client.ts` +- Production `DATABASE_URL` may already target PgBouncer; inspect both the process pool and PgBouncer queues before attributing API timeouts to PostgreSQL. +- `pg.Pool` already grows lazily from zero to its configured `max`; do not replace it with one `Client` to address acquisition timeouts, because that serializes queries. Keep a bounded pool, tune its acquisition timeout, and monitor `waitingCount`. - ClickHouse helpers and schema: `packages/db/src/clickhouse/*` - After schema changes, use the repo db scripts rather than ad hoc commands From afd45049e74592f3f12dd6316decf0c8eb25380d Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:43:59 +0300 Subject: [PATCH 007/131] fix(dashboard): preserve onboarding ad attribution --- apps/dashboard/app/(auth)/register/page.tsx | 2 + .../_components/step-create-website.tsx | 14 +++- apps/dashboard/app/(main)/onboarding/page.tsx | 26 +++++- apps/dashboard/lib/app-events.test.ts | 49 ++++++++++++ apps/dashboard/lib/app-events.ts | 80 ++++++++++++++++--- packages/shared/src/custom-events.ts | 15 ++-- 6 files changed, 163 insertions(+), 23 deletions(-) diff --git a/apps/dashboard/app/(auth)/register/page.tsx b/apps/dashboard/app/(auth)/register/page.tsx index cf1029c61b..2350952247 100644 --- a/apps/dashboard/app/(auth)/register/page.tsx +++ b/apps/dashboard/app/(auth)/register/page.tsx @@ -11,6 +11,7 @@ import VisuallyHidden from "@/components/ui/visuallyhidden"; import { APP_EVENTS, readMarketingProperties, + storeOnboardingAttribution, storePendingSocialSignup, type SignupEventProperties, type SignupMethod, @@ -111,6 +112,7 @@ function RegisterPageContent() { callbackURL: getCallbackUrl(), fetchOptions: { onSuccess: () => { + storeOnboardingAttribution(signupProperties); trackSignup(APP_EVENTS.signupCompleted, signupProperties); trackOpenAiRegistrationCompleted(); toast.success( diff --git a/apps/dashboard/app/(main)/onboarding/_components/step-create-website.tsx b/apps/dashboard/app/(main)/onboarding/_components/step-create-website.tsx index 80aa155176..858479a4da 100644 --- a/apps/dashboard/app/(main)/onboarding/_components/step-create-website.tsx +++ b/apps/dashboard/app/(main)/onboarding/_components/step-create-website.tsx @@ -6,7 +6,11 @@ import { toast } from "sonner"; import { z } from "zod"; import { useOrganizationsContext } from "@/components/providers/organizations-provider"; import { useCreateWebsite } from "@/hooks/use-websites"; -import { APP_EVENTS, trackAppEvent } from "@/lib/app-events"; +import { + APP_EVENTS, + type OnboardingAttributionProperties, + trackAppEvent, +} from "@/lib/app-events"; import { GlobeIcon } from "@databuddy/ui/icons"; import { Button, Field, Input } from "@databuddy/ui"; @@ -29,10 +33,14 @@ const formSchema = z.object({ type FormData = z.infer; interface StepCreateWebsiteProps { + attribution: OnboardingAttributionProperties; onComplete: (websiteId: string) => void; } -export function StepCreateWebsite({ onComplete }: StepCreateWebsiteProps) { +export function StepCreateWebsite({ + attribution, + onComplete, +}: StepCreateWebsiteProps) { const { activeOrganization } = useOrganizationsContext(); const createWebsiteMutation = useCreateWebsite(); @@ -62,7 +70,7 @@ export function StepCreateWebsite({ onComplete }: StepCreateWebsiteProps) { organizationId: activeOrganization?.id, }); toast.success("Website created!"); - trackAppEvent(APP_EVENTS.onboardingWebsiteCreated); + trackAppEvent(APP_EVENTS.onboardingWebsiteCreated, attribution); onComplete(result.id); } catch (error: unknown) { const rpcError = error as { diff --git a/apps/dashboard/app/(main)/onboarding/page.tsx b/apps/dashboard/app/(main)/onboarding/page.tsx index b07e2d17ac..313beadd21 100644 --- a/apps/dashboard/app/(main)/onboarding/page.tsx +++ b/apps/dashboard/app/(main)/onboarding/page.tsx @@ -6,7 +6,11 @@ import { trackOpenAiRegistrationCompleted } from "@/components/openai-ads-pixel" import { useWebsitesLight } from "@/hooks/use-websites"; import { APP_EVENTS, + clearOnboardingAttribution, consumePendingSocialSignup, + readOnboardingAttribution, + storeOnboardingAttribution, + type OnboardingAttributionProperties, trackAppEvent, } from "@/lib/app-events"; import { OnboardingStepIndicator } from "./_components/onboarding-step-indicator"; @@ -51,6 +55,10 @@ export default function OnboardingPage() { const [currentStep, setCurrentStep] = useState(0); const [completedSteps, setCompletedSteps] = useState>(new Set()); const [createdWebsiteId, setCreatedWebsiteId] = useState(null); + const [attribution, setAttribution] = + useState(() => + readOnboardingAttribution() + ); const hasWebsite = websites && websites.length > 0; const websiteId = createdWebsiteId ?? websites?.[0]?.id ?? null; @@ -81,13 +89,17 @@ export default function OnboardingPage() { // Track onboarding start once useEffect(() => { const signupProperties = consumePendingSocialSignup(); + const onboardingAttribution = + signupProperties ?? readOnboardingAttribution(); if (signupProperties) { + storeOnboardingAttribution(signupProperties); trackAppEvent(APP_EVENTS.signupCompleted, signupProperties, { flush: true, }); trackOpenAiRegistrationCompleted(); } - trackAppEvent(APP_EVENTS.onboardingStarted); + setAttribution(onboardingAttribution); + trackAppEvent(APP_EVENTS.onboardingStarted, onboardingAttribution); }, []); const markComplete = useCallback((stepId: StepId) => { @@ -133,8 +145,9 @@ export default function OnboardingPage() { } onboardingCompletedRef.current = true; markComplete("explore"); - trackAppEvent(APP_EVENTS.onboardingCompleted); - }, [markComplete]); + trackAppEvent(APP_EVENTS.onboardingCompleted, attribution); + clearOnboardingAttribution(); + }, [attribution, markComplete]); const handleExploreComplete = useCallback(() => { recordExploreComplete(); @@ -207,7 +220,12 @@ export default function OnboardingPage() { const renderStep = () => { switch (STEPS[currentStep].id) { case "website": - return ; + return ( + + ); case "tracking": return ( { }); expect(consumePendingSocialSignup()).toBeNull(); }); + + it("preserves marketing attribution for onboarding activation events", () => { + installSessionStorageMock(); + + storeOnboardingAttribution({ + oppref: " openai-reference ", + plan: " scale ", + utm_campaign: "competitors", + utm_content: "ai_analytics_for_startups", + utm_medium: "paid", + utm_source: "openai_ads", + wolref: "w".repeat(200), + }); + + expect(readOnboardingAttribution()).toEqual({ + oppref: "openai-reference", + plan: "scale", + utm_campaign: "competitors", + utm_content: "ai_analytics_for_startups", + utm_medium: "paid", + utm_source: "openai_ads", + wolref: "w".repeat(160), + }); + + clearOnboardingAttribution(); + expect(readOnboardingAttribution()).toEqual({}); + }); + + it("also stores onboarding attribution when preserving social signup state", () => { + installSessionStorageMock(); + + storePendingSocialSignup({ + method: "social_github", + utm_campaign: "competitors", + utm_content: "analytics_you_can_ask", + utm_medium: "paid", + utm_source: "openai_ads", + }); + + expect(readOnboardingAttribution()).toEqual({ + utm_campaign: "competitors", + utm_content: "analytics_you_can_ask", + utm_medium: "paid", + utm_source: "openai_ads", + }); + }); }); diff --git a/apps/dashboard/lib/app-events.ts b/apps/dashboard/lib/app-events.ts index 5dff760680..b3c513c28f 100644 --- a/apps/dashboard/lib/app-events.ts +++ b/apps/dashboard/lib/app-events.ts @@ -6,6 +6,7 @@ import type { AppEventNameWithProperties, AppEventProperties, EmptyAppEventName, + OnboardingAttributionProperties, SignupEventProperties, SignupMethod, } from "@databuddy/shared/custom-events"; @@ -21,10 +22,12 @@ export { readUtmProperties, } from "@databuddy/shared/custom-events"; export type { + OnboardingAttributionProperties, SignupEventProperties, SignupMethod, } from "@databuddy/shared/custom-events"; +const ONBOARDING_ATTRIBUTION_KEY = "databuddy.onboardingAttribution"; const PENDING_SOCIAL_SIGNUP_KEY = "databuddy.pendingSocialSignup"; interface TrackOptions { @@ -79,20 +82,15 @@ function trimStoredString(value: unknown, maxLength = 160): string | undefined { return trimmed ? trimmed.slice(0, maxLength) : undefined; } -function readStoredSignupProperties( +function readStoredOnboardingAttribution( value: unknown -): SignupEventProperties | null { +): OnboardingAttributionProperties { if (!value || typeof value !== "object") { - return null; + return {}; } const source = value as Record; - const method = source.method; - if (!(isSignupMethod(method) && SOCIAL_SIGNUP_METHODS.has(method))) { - return null; - } - - const properties: SignupEventProperties = { method }; + const properties: OnboardingAttributionProperties = {}; const plan = trimStoredString(source.plan); if (plan) { properties.plan = plan; @@ -108,6 +106,68 @@ function readStoredSignupProperties( return properties; } +function hasOnboardingAttribution( + properties: OnboardingAttributionProperties +): boolean { + return Boolean( + properties.plan || MARKETING_PARAM_KEYS.some((key) => properties[key]) + ); +} + +function readStoredSignupProperties( + value: unknown +): SignupEventProperties | null { + if (!value || typeof value !== "object") { + return null; + } + + const source = value as Record; + const method = source.method; + if (!(isSignupMethod(method) && SOCIAL_SIGNUP_METHODS.has(method))) { + return null; + } + + return { ...readStoredOnboardingAttribution(source), method }; +} + +export function storeOnboardingAttribution( + properties: OnboardingAttributionProperties +): void { + const attribution = readStoredOnboardingAttribution(properties); + if (!hasOnboardingAttribution(attribution)) { + return; + } + + try { + sessionStorage.setItem( + ONBOARDING_ATTRIBUTION_KEY, + JSON.stringify(attribution) + ); + } catch { + // Session storage can be unavailable in hardened browser contexts. + } +} + +export function readOnboardingAttribution(): OnboardingAttributionProperties { + try { + const raw = sessionStorage.getItem(ONBOARDING_ATTRIBUTION_KEY); + if (!raw) { + return {}; + } + return readStoredOnboardingAttribution(JSON.parse(raw)); + } catch { + return {}; + } +} + +export function clearOnboardingAttribution(): void { + try { + sessionStorage.removeItem(ONBOARDING_ATTRIBUTION_KEY); + } catch { + // Session storage can be unavailable in hardened browser contexts. + } +} + export function storePendingSocialSignup( properties: SignupEventProperties ): void { @@ -115,6 +175,8 @@ export function storePendingSocialSignup( return; } + storeOnboardingAttribution(properties); + try { sessionStorage.setItem( PENDING_SOCIAL_SIGNUP_KEY, diff --git a/packages/shared/src/custom-events.ts b/packages/shared/src/custom-events.ts index 7071ce5cfe..167a447807 100644 --- a/packages/shared/src/custom-events.ts +++ b/packages/shared/src/custom-events.ts @@ -41,11 +41,8 @@ export const SIGNUP_METHODS = [ export type AppEventName = (typeof APP_EVENTS)[keyof typeof APP_EVENTS]; export type EmptyAppEventName = - | typeof APP_EVENTS.onboardingCompleted - | typeof APP_EVENTS.onboardingStarted | typeof APP_EVENTS.onboardingTrackingCheckStatus - | typeof APP_EVENTS.onboardingTrackingVerified - | typeof APP_EVENTS.onboardingWebsiteCreated; + | typeof APP_EVENTS.onboardingTrackingVerified; export type AppEventNameWithProperties = Exclude< AppEventName, EmptyAppEventName @@ -64,8 +61,12 @@ export interface SignupEventProperties extends MarketingProperties { plan?: string; } +export interface OnboardingAttributionProperties extends MarketingProperties { + plan?: string; +} + export interface AppEventProperties { - [APP_EVENTS.onboardingCompleted]: EmptyProperties; + [APP_EVENTS.onboardingCompleted]: OnboardingAttributionProperties; [APP_EVENTS.onboardingInviteSent]: { invite_count: number; role: "admin" | "member"; @@ -74,7 +75,7 @@ export interface AppEventProperties { skipped_at_step: OnboardingStepId; step_number: number; }; - [APP_EVENTS.onboardingStarted]: EmptyProperties; + [APP_EVENTS.onboardingStarted]: OnboardingAttributionProperties; [APP_EVENTS.onboardingStepCompleted]: { step: OnboardingStepId; verified?: boolean; @@ -89,7 +90,7 @@ export interface AppEventProperties { method: "ai" | "script" | "sdk"; }; [APP_EVENTS.onboardingTrackingVerified]: EmptyProperties; - [APP_EVENTS.onboardingWebsiteCreated]: EmptyProperties; + [APP_EVENTS.onboardingWebsiteCreated]: OnboardingAttributionProperties; [APP_EVENTS.signupCompleted]: SignupEventProperties; [APP_EVENTS.signupStarted]: SignupEventProperties; } From a52fc9f2a595db2425114378e03f5490e3faf29f Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:44:06 +0300 Subject: [PATCH 008/131] fix(basket): harden ingestion error handling --- apps/basket/src/lib/billing.test.ts | 33 ++++++- apps/basket/src/lib/billing.ts | 3 +- apps/basket/src/lib/blocked-traffic.ts | 6 +- .../src/lib/request-validation-logic.test.ts | 9 +- apps/basket/src/lib/request-validation.ts | 4 +- apps/basket/src/lib/structured-errors.test.ts | 5 + apps/basket/src/lib/structured-errors.ts | 35 +++++++ apps/basket/src/routes/basket.ts | 18 +--- apps/basket/src/routes/integration.test.ts | 95 ++++++++++++++++++- apps/basket/src/routes/track-event-schema.ts | 2 +- apps/basket/src/routes/webhooks/paddle.ts | 18 ++-- apps/basket/src/routes/webhooks/stripe.ts | 15 ++- packages/validation/src/schemas/identity.ts | 2 +- 13 files changed, 196 insertions(+), 49 deletions(-) diff --git a/apps/basket/src/lib/billing.test.ts b/apps/basket/src/lib/billing.test.ts index f9bbdd7949..851876762f 100644 --- a/apps/basket/src/lib/billing.test.ts +++ b/apps/basket/src/lib/billing.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, test, vi } from "vitest"; import { EvlogError } from "evlog"; -const { mockCheck, mockLoggerSet } = vi.hoisted(() => ({ +const { mockCheck, mockLoggerSet, mockLoggerWarn } = vi.hoisted(() => ({ mockCheck: vi.fn(() => Promise.resolve({ allowed: true, @@ -10,6 +10,7 @@ const { mockCheck, mockLoggerSet } = vi.hoisted(() => ({ }) ), mockLoggerSet: vi.fn(() => {}), + mockLoggerWarn: vi.fn(() => {}), })); vi.mock("@databuddy/rpc/autumn", () => ({ @@ -19,7 +20,7 @@ vi.mock("@databuddy/rpc/autumn", () => ({ vi.mock("evlog/elysia", () => ({ useLogger: () => ({ set: mockLoggerSet, - warn: vi.fn(), + warn: mockLoggerWarn, error: vi.fn(), }), })); @@ -35,6 +36,7 @@ describe("checkAutumnUsage", () => { beforeEach(() => { mockCheck.mockReset(); mockLoggerSet.mockReset(); + mockLoggerWarn.mockReset(); }); // ── Enforcement ── @@ -125,6 +127,33 @@ describe("checkAutumnUsage", () => { ); }); + test("quota denial logging excludes customer and website metadata", async () => { + mockCheck.mockResolvedValue({ + allowed: false, + customerId: "cust_1", + balance: { usage: 10_001, granted: 10_000, unlimited: false }, + }); + + await expect( + checkAutumnUsage( + "cust_sensitive", + "events", + { + website_id: "website_sensitive", + domain: "customer.example", + name: "Sensitive website name", + }, + 25 + ) + ).rejects.toMatchObject({ status: 402 }); + + expect(mockLoggerWarn).toHaveBeenCalledWith("Event quota exceeded", { + featureId: "events", + quantity: 25, + billing: { usage: 10_001, granted: 10_000, unlimited: false }, + }); + }); + test("logs checkFailed on API error", async () => { mockCheck.mockRejectedValue(new Error("timeout")); await expect(checkAutumnUsage("cust_1", "events")).rejects.toThrow( diff --git a/apps/basket/src/lib/billing.ts b/apps/basket/src/lib/billing.ts index 9941f7ad18..dfc42d25bd 100644 --- a/apps/basket/src/lib/billing.ts +++ b/apps/basket/src/lib/billing.ts @@ -40,9 +40,8 @@ export function checkAutumnUsage( if (!response.allowed) { log.warn("Event quota exceeded", { - customerId, featureId, - properties, + quantity, billing: { usage: b?.usage, granted: b?.granted, diff --git a/apps/basket/src/lib/blocked-traffic.ts b/apps/basket/src/lib/blocked-traffic.ts index 62ca47d3dd..bc1523d175 100644 --- a/apps/basket/src/lib/blocked-traffic.ts +++ b/apps/basket/src/lib/blocked-traffic.ts @@ -3,7 +3,7 @@ import { queueBlockedTrafficAlert, type BlockedTrafficAlertContext, } from "@lib/blocked-traffic-alerts"; -import { runFork, send } from "@lib/producer"; +import { runFork, sendBuffered } from "@lib/producer"; import { captureError } from "@lib/tracing"; import { extractIpFromRequest, getGeo } from "@utils/ip-geo"; import { parseUserAgent } from "@utils/user-agent"; @@ -91,7 +91,9 @@ async function _logBlockedTrafficAsync( created_at: now, }; - runFork(send("analytics-blocked-traffic", blockedEvent)); + // Security telemetry must never delay the rejection path. It is explicitly + // buffered and drained on shutdown; core customer events use durable send. + runFork(sendBuffered("analytics-blocked-traffic", blockedEvent)); queueBlockedTrafficAlert(blockedEvent, context); } catch (error) { captureError(error, { message: "Failed to log blocked traffic" }); diff --git a/apps/basket/src/lib/request-validation-logic.test.ts b/apps/basket/src/lib/request-validation-logic.test.ts index 0ad8828988..05ea1539ce 100644 --- a/apps/basket/src/lib/request-validation-logic.test.ts +++ b/apps/basket/src/lib/request-validation-logic.test.ts @@ -10,6 +10,7 @@ const { mockLogBlockedTraffic, mockRunFork, mockSend, + mockSendBuffered, mockDetectBot, mockLoggerSet, mockLoggerWarn, @@ -32,6 +33,7 @@ const { mockLogBlockedTraffic: vi.fn(() => {}), mockRunFork: vi.fn(() => {}), mockSend: vi.fn(() => ({})), + mockSendBuffered: vi.fn(() => ({})), mockDetectBot: vi.fn(() => ({ isBot: false })), mockLoggerSet: vi.fn(() => {}), mockLoggerWarn: vi.fn(() => {}), @@ -55,6 +57,7 @@ vi.mock("@lib/blocked-traffic", () => ({ vi.mock("@lib/producer", () => ({ runFork: mockRunFork, send: mockSend, + sendBuffered: mockSendBuffered, })); vi.mock("ua-parser-js/bot-detection", () => ({ @@ -417,7 +420,7 @@ describe("checkForBot", () => { expect(result).toBeDefined(); expect(result!.error).toBeDefined(); expect(result!.error!.status).toBe(204); - expect(mockSend).toHaveBeenCalledWith( + expect(mockSendBuffered).toHaveBeenCalledWith( "analytics-ai-traffic-spans", expect.objectContaining({ client_id: "ws_1", @@ -437,7 +440,7 @@ describe("checkForBot", () => { result: { category: "ai_crawler" }, }); await checkForBot(makeReq(), { url: "/from-url" }, {}, "ws_1", "ClaudeBot"); - expect(mockSend).toHaveBeenCalledWith( + expect(mockSendBuffered).toHaveBeenCalledWith( "analytics-ai-traffic-spans", expect.objectContaining({ path: "/from-url" }) ); @@ -457,7 +460,7 @@ describe("checkForBot", () => { "ws_1", "Bot" ); - expect(mockSend).toHaveBeenCalledWith( + expect(mockSendBuffered).toHaveBeenCalledWith( "analytics-ai-traffic-spans", expect.objectContaining({ path: "https://ref.com/page" }) ); diff --git a/apps/basket/src/lib/request-validation.ts b/apps/basket/src/lib/request-validation.ts index f6fd33bf07..298de5536b 100644 --- a/apps/basket/src/lib/request-validation.ts +++ b/apps/basket/src/lib/request-validation.ts @@ -5,7 +5,7 @@ import { } from "@hooks/auth"; import { checkAutumnUsage } from "@lib/billing"; import { logBlockedTraffic } from "@lib/blocked-traffic"; -import { runFork, send } from "@lib/producer"; +import { runFork, sendBuffered } from "@lib/producer"; import { basketErrors } from "@lib/structured-errors"; import { record } from "@lib/tracing"; import { extractIpFromRequest, extractTrustedClientIp } from "@utils/ip-geo"; @@ -286,7 +286,7 @@ export function checkForBot( undefined; runFork( - send("analytics-ai-traffic-spans", { + sendBuffered("analytics-ai-traffic-spans", { client_id: clientId, timestamp: Date.now(), bot_type: result?.category || "unknown", diff --git a/apps/basket/src/lib/structured-errors.test.ts b/apps/basket/src/lib/structured-errors.test.ts index f68c883fad..2b87c36ba7 100644 --- a/apps/basket/src/lib/structured-errors.test.ts +++ b/apps/basket/src/lib/structured-errors.test.ts @@ -33,6 +33,11 @@ describe("basketErrors", () => { ["ingestBatchTooLarge", 400], ["billingLimitExceeded", 402], ["billingCheckUnavailable", 503], + ["webhookEndpointNotFound", 404], + ["webhookMissingSignature", 400], + ["webhookInvalidSignature", 401], + ["webhookInvalidPayload", 400], + ["webhookProcessingFailed", 500], ]; for (const [key, expectedStatus] of errorTable) { diff --git a/apps/basket/src/lib/structured-errors.ts b/apps/basket/src/lib/structured-errors.ts index c6dcdd2e23..c6bc3e819c 100644 --- a/apps/basket/src/lib/structured-errors.ts +++ b/apps/basket/src/lib/structured-errors.ts @@ -140,6 +140,36 @@ export const basketErrorCatalog = defineErrorCatalog("basket", { why: "The event quota could not be verified before ingestion.", fix: "Retry after the billing provider is reachable.", }, + WEBHOOK_ENDPOINT_NOT_FOUND: { + message: "Webhook endpoint not found", + status: 404, + why: "The webhook URL does not match an active revenue configuration.", + fix: "Use the webhook URL configured in Databuddy.", + }, + WEBHOOK_MISSING_SIGNATURE: { + message: "Webhook signature header is required", + status: 400, + why: "The provider did not send its signature header.", + fix: "Send the event through the configured payment provider.", + }, + WEBHOOK_INVALID_SIGNATURE: { + message: "Invalid webhook signature", + status: 401, + why: "The payload could not be verified with the configured webhook secret.", + fix: "Confirm that the webhook secret matches the provider configuration.", + }, + WEBHOOK_INVALID_PAYLOAD: { + message: "Invalid webhook payload", + status: 400, + why: "The verified webhook body was not valid JSON.", + fix: "Send the unmodified JSON payload from the payment provider.", + }, + WEBHOOK_PROCESSING_FAILED: { + message: "Failed to process webhook event", + status: 500, + why: "Databuddy could not persist the provider event.", + fix: "Retry delivery after the service is available.", + }, INVALID_EVENT_SCHEMA: { message: "Invalid event schema", status: 400, @@ -179,6 +209,11 @@ export const basketErrors = { ingestBatchTooLarge: basketErrorCatalog.INGEST_BATCH_TOO_LARGE, billingLimitExceeded: basketErrorCatalog.BILLING_LIMIT_EXCEEDED, billingCheckUnavailable: basketErrorCatalog.BILLING_CHECK_UNAVAILABLE, + webhookEndpointNotFound: basketErrorCatalog.WEBHOOK_ENDPOINT_NOT_FOUND, + webhookMissingSignature: basketErrorCatalog.WEBHOOK_MISSING_SIGNATURE, + webhookInvalidSignature: basketErrorCatalog.WEBHOOK_INVALID_SIGNATURE, + webhookInvalidPayload: basketErrorCatalog.WEBHOOK_INVALID_PAYLOAD, + webhookProcessingFailed: basketErrorCatalog.WEBHOOK_PROCESSING_FAILED, }; export type IngestSchemaValidationError = EvlogError & { diff --git a/apps/basket/src/routes/basket.ts b/apps/basket/src/routes/basket.ts index 5c73b25ca9..fc530490c6 100644 --- a/apps/basket/src/routes/basket.ts +++ b/apps/basket/src/routes/basket.ts @@ -38,7 +38,6 @@ import { } from "@lib/security"; import { basketErrors, - buildBasketErrorPayload, createIngestSchemaValidationError, rethrowOrWrap, } from "@lib/structured-errors"; @@ -468,18 +467,11 @@ const app = new Elysia() throw basketErrors.ingestBatchTooLarge(); } - let validation: ValidatedRequest; - try { - validation = await validateRequest(body, query, request); - } catch (error) { - if (error instanceof EvlogError) { - const { status, payload } = buildBasketErrorPayload(error, { - extra: { batch: true }, - }); - return Response.json(payload, { status }); - } - throw error; - } + const validation: ValidatedRequest = await validateRequest( + body, + query, + request + ); const { clientId, userAgent, ip } = validation; log.set({ clientId }); diff --git a/apps/basket/src/routes/integration.test.ts b/apps/basket/src/routes/integration.test.ts index 8a08c6bea3..365cafd145 100644 --- a/apps/basket/src/routes/integration.test.ts +++ b/apps/basket/src/routes/integration.test.ts @@ -178,13 +178,18 @@ vi.mock("@lib/producer", () => ({ // ── Import routes after mocks ── -const { buildBasketErrorPayload } = await import("@lib/structured-errors"); +const { basketErrors, buildBasketErrorPayload } = await import( + "@lib/structured-errors" +); +const { createError } = await import("evlog"); const { Elysia } = await import("elysia"); +const mockGlobalErrorHandler = vi.fn(); // Wrap basket routes with the same onError handler as index.ts const rawBasket = (await import("./basket")).default; const basketApp = new Elysia() .onError(({ error, code }) => { + mockGlobalErrorHandler(error); if (code === "NOT_FOUND") { return new Response(null, { status: 404 }); } @@ -273,6 +278,30 @@ describe("POST /", () => { expect(body.type).toBe("outgoing_link"); }); + test("durable core delivery failure → retryable 503", async () => { + mockInsertTrackEvent.mockRejectedValueOnce( + createError({ + code: "basket.DELIVERY_UNAVAILABLE", + message: "Analytics delivery temporarily unavailable", + status: 503, + }) + ); + + const res = await post(basketApp, "/", { + type: "track", + eventId: "evt_delivery_failure", + name: "pageview", + path: "https://example.com/page", + }); + + expect(res.status).toBe(503); + const body = await json(res); + expect(body).toMatchObject({ + code: "basket.DELIVERY_UNAVAILABLE", + retryable: true, + }); + }); + test("unknown event type → 400", async () => { const res = await post(basketApp, "/", { type: "bogus" }); expect(res.status).toBe(400); @@ -443,6 +472,24 @@ describe("POST /events", () => { // ── POST /batch ── describe("POST /batch", () => { + test("validation quota errors reach the global error handler", async () => { + mockGlobalErrorHandler.mockClear(); + const quotaError = basketErrors.billingLimitExceeded(); + mockValidateRequest.mockRejectedValueOnce(quotaError); + + const res = await post(basketApp, "/batch", [ + { + type: "track", + eventId: "evt_1", + name: "pageview", + path: "https://example.com/a", + }, + ]); + + expect(res.status).toBe(402); + expect(mockGlobalErrorHandler).toHaveBeenCalledWith(quotaError); + }); + test("batch of track events → 200", async () => { const res = await post(basketApp, "/batch", [ { @@ -529,11 +576,53 @@ describe("GET /px.jpg", () => { expect(res.headers.get("Content-Type")).toBe("image/gif"); }); - test("always returns pixel even on error", async () => { + test("returns a retryable GIF when an unexpected delivery path fails", async () => { mockValidateRequest.mockRejectedValueOnce(new Error("boom")); const res = await get(basketApp, "/px.jpg?name=test"); - expect(res.status).toBe(200); + expect(res.status).toBe(503); + expect(res.headers.get("Content-Type")).toBe("image/gif"); + expect(res.headers.get("Retry-After")).toBe("5"); + }); + + test("returns a retryable GIF when core delivery rejects", async () => { + mockInsertTrackEvent.mockClear(); + mockLogger.error.mockClear(); + mockInsertTrackEvent.mockRejectedValueOnce( + createError({ + code: "basket.DELIVERY_UNAVAILABLE", + message: "Analytics delivery temporarily unavailable", + status: 503, + }) + ); + + const res = await get(basketApp, "/px.jpg?type=track&name=pageview"); + + expect(res.status).toBe(503); + expect(res.headers.get("Content-Type")).toBe("image/gif"); + expect(res.headers.get("Retry-After")).toBe("5"); + expect(mockLogger.error).toHaveBeenCalledWith(expect.any(Error)); + }); + + test("returns a retryable GIF when outgoing-link delivery rejects", async () => { + mockInsertOutgoingLink.mockClear(); + mockLogger.error.mockClear(); + mockInsertOutgoingLink.mockRejectedValueOnce( + createError({ + code: "basket.DELIVERY_UNAVAILABLE", + message: "Analytics delivery temporarily unavailable", + status: 503, + }) + ); + + const res = await get( + basketApp, + "/px.jpg?type=outgoing_link&href=https%3A%2F%2Fexample.com" + ); + + expect(res.status).toBe(503); expect(res.headers.get("Content-Type")).toBe("image/gif"); + expect(res.headers.get("Retry-After")).toBe("5"); + expect(mockLogger.error).toHaveBeenCalledWith(expect.any(Error)); }); }); diff --git a/apps/basket/src/routes/track-event-schema.ts b/apps/basket/src/routes/track-event-schema.ts index d42ede91e8..41be66d4cd 100644 --- a/apps/basket/src/routes/track-event-schema.ts +++ b/apps/basket/src/routes/track-event-schema.ts @@ -4,7 +4,7 @@ import { profileIdSchema, } from "@databuddy/validation"; import { VALIDATION_LIMITS } from "@utils/validation"; -import { z } from "zod"; +import z from "zod"; const boundedProperties = z .record(z.string().max(128), z.unknown()) diff --git a/apps/basket/src/routes/webhooks/paddle.ts b/apps/basket/src/routes/webhooks/paddle.ts index b39ed3288c..d121086193 100644 --- a/apps/basket/src/routes/webhooks/paddle.ts +++ b/apps/basket/src/routes/webhooks/paddle.ts @@ -3,6 +3,7 @@ import { clickHouse } from "@databuddy/db/clickhouse"; import { Elysia } from "elysia"; import { evlog, useLogger } from "evlog/elysia"; import { getDailySalt, saltAnonymousId } from "@lib/security"; +import { basketErrors } from "@lib/structured-errors"; import { sanitizeString, VALIDATION_LIMITS } from "@utils/validation"; import { formatDate, getWebhookConfig, resolveWebsiteId } from "./shared"; @@ -195,7 +196,7 @@ async function handleTransaction( export const paddleWebhook = new Elysia().use(evlog()).post( "/webhooks/paddle/:hash", - async ({ params, request, set }) => { + async ({ params, request }) => { const log = useLogger(); log.set({ provider: "paddle", webhookHash: params.hash }); @@ -203,8 +204,7 @@ export const paddleWebhook = new Elysia().use(evlog()).post( if ("error" in result) { log.set({ configError: result.error }); - set.status = 404; - return { error: "Webhook endpoint not found" }; + throw basketErrors.webhookEndpointNotFound(); } log.set({ ownerId: result.ownerId, websiteId: result.websiteId }); @@ -212,8 +212,7 @@ export const paddleWebhook = new Elysia().use(evlog()).post( const signature = request.headers.get("paddle-signature"); if (!signature) { log.set({ signatureError: "missing_header" }); - set.status = 400; - return { error: "Missing paddle-signature header" }; + throw basketErrors.webhookMissingSignature(); } const body = await request.text(); @@ -226,8 +225,7 @@ export const paddleWebhook = new Elysia().use(evlog()).post( if (!verification.valid) { log.warn("Paddle signature verification failed"); log.set({ signatureError: verification.error }); - set.status = 401; - return { error: "Invalid webhook signature" }; + throw basketErrors.webhookInvalidSignature(); } let event: PaddleEvent; @@ -235,8 +233,7 @@ export const paddleWebhook = new Elysia().use(evlog()).post( event = JSON.parse(body); } catch { log.set({ parseError: "invalid_json" }); - set.status = 400; - return { error: "Invalid JSON payload" }; + throw basketErrors.webhookInvalidPayload(); } log.set({ eventType: event.event_type }); @@ -251,8 +248,7 @@ export const paddleWebhook = new Elysia().use(evlog()).post( return { received: true, type: event.event_type }; } catch (error) { log.error(error instanceof Error ? error : new Error(String(error))); - set.status = 500; - return { error: "Failed to process webhook event" }; + throw basketErrors.webhookProcessingFailed(); } }, { parse: "none" } diff --git a/apps/basket/src/routes/webhooks/stripe.ts b/apps/basket/src/routes/webhooks/stripe.ts index 9ee247de83..5877c36fdc 100644 --- a/apps/basket/src/routes/webhooks/stripe.ts +++ b/apps/basket/src/routes/webhooks/stripe.ts @@ -3,6 +3,7 @@ import { clickHouse } from "@databuddy/db/clickhouse"; import { Elysia } from "elysia"; import { evlog, useLogger } from "evlog/elysia"; import { getDailySalt, saltAnonymousId } from "@lib/security"; +import { basketErrors } from "@lib/structured-errors"; import { sanitizeString, VALIDATION_LIMITS } from "@utils/validation"; import { type NormalizedStripeRecord, @@ -215,21 +216,19 @@ async function persistStripeRecords( export const stripeWebhook = new Elysia().use(evlog()).post( "/webhooks/stripe/:hash", - async ({ params, request, set }) => { + async ({ params, request }) => { const log = useLogger(); log.set({ provider: "stripe", webhookHash: params.hash }); const config = await getConfig(params.hash); if ("error" in config) { log.set({ configError: config.error }); - set.status = 404; - return { error: "Webhook endpoint not found" }; + throw basketErrors.webhookEndpointNotFound(); } const signature = request.headers.get("stripe-signature"); if (!signature) { - set.status = 400; - return { error: "Missing stripe-signature header" }; + throw basketErrors.webhookMissingSignature(); } const verification = verifyStripeSignature( await request.text(), @@ -239,8 +238,7 @@ export const stripeWebhook = new Elysia().use(evlog()).post( if (!verification.valid) { log.warn("Stripe signature verification failed"); log.set({ signatureError: verification.error }); - set.status = 401; - return { error: "Invalid webhook signature" }; + throw basketErrors.webhookInvalidSignature(); } const event = verification.event; @@ -264,8 +262,7 @@ export const stripeWebhook = new Elysia().use(evlog()).post( return { received: true, type: event.type }; } catch (error) { log.error(error instanceof Error ? error : new Error(String(error))); - set.status = 500; - return { error: "Failed to process webhook event" }; + throw basketErrors.webhookProcessingFailed(); } }, { parse: "none" } diff --git a/packages/validation/src/schemas/identity.ts b/packages/validation/src/schemas/identity.ts index 678a0f11e3..d94a8da17d 100644 --- a/packages/validation/src/schemas/identity.ts +++ b/packages/validation/src/schemas/identity.ts @@ -1,4 +1,4 @@ -import { z } from "zod"; +import z from "zod"; import { VALIDATION_LIMITS } from "../constants"; export const profileIdSchema = z From 95368481eec4daec20cb8e993754005304ef3643 Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:44:28 +0300 Subject: [PATCH 009/131] feat(insights): recommend measurement drafts --- .../app/(main)/insights/[id]/page.tsx | 31 +- .../conversion-draft-recommendation.tsx | 321 +++++++ .../_components/investigation-row.tsx | 11 +- .../_components/investigation-settings.tsx | 81 +- .../_components/recommendation-guards.ts | 47 + apps/dashboard/app/(main)/insights/page.tsx | 131 ++- .../_components/edit-funnel-dialog.tsx | 57 +- .../[id]/funnels/_components/funnel-item.tsx | 5 +- .../goals/_components/edit-goal-dialog.tsx | 45 +- .../[id]/goals/_components/goal-item.tsx | 2 +- .../measurement-recommendations.spec.ts | 118 +++ apps/insights/src/agent.ts | 194 +++- apps/insights/src/batch-shadow.ts | 23 + apps/insights/src/coverage-planner.test.ts | 209 +++++ apps/insights/src/coverage-planner.ts | 192 ++++ apps/insights/src/delivery.ts | 5 +- apps/insights/src/detection.ts | 78 +- apps/insights/src/effects.ts | 48 +- apps/insights/src/funnel-detection.test.ts | 256 ++++- apps/insights/src/funnel-detection.ts | 314 +++++-- apps/insights/src/generation-sources.test.ts | 371 +++++++- apps/insights/src/generation.ts | 883 ++++++++++++------ .../src/idempotency.integration.test.ts | 100 +- apps/insights/src/investigation-flow.test.ts | 210 ++++- apps/insights/src/investigation.ts | 35 +- ...asurement-recommendation-detection.test.ts | 152 +++ .../measurement-recommendation-detection.ts | 454 +++++++++ apps/insights/src/observations.ts | 27 +- apps/insights/src/persistence.ts | 10 +- apps/insights/src/production-shadow.test.ts | 153 +++ apps/insights/src/production-shadow.ts | 733 ++++++++++++--- .../src/route-health-detection.test.ts | 233 +++++ apps/insights/src/route-health-detection.ts | 585 ++++++++++++ apps/insights/src/run-candidate-plan.test.ts | 94 ++ apps/insights/src/run-candidate-plan.ts | 161 ++++ apps/insights/src/worker-fanout-shadow.ts | 58 ++ .../db/src/drizzle/schema/insights.test.ts | 10 +- packages/db/src/drizzle/schema/insights.ts | 15 +- .../rpc/src/routers/insight-generation.ts | 54 +- packages/shared/src/insights.test.ts | 265 ++++++ packages/shared/src/insights.ts | 210 ++++- 41 files changed, 6315 insertions(+), 666 deletions(-) create mode 100644 apps/dashboard/app/(main)/insights/_components/conversion-draft-recommendation.tsx create mode 100644 apps/dashboard/app/(main)/insights/_components/recommendation-guards.ts create mode 100644 apps/dashboard/test/e2e/specs/regressions/measurement-recommendations.spec.ts create mode 100644 apps/insights/src/batch-shadow.ts create mode 100644 apps/insights/src/coverage-planner.test.ts create mode 100644 apps/insights/src/coverage-planner.ts create mode 100644 apps/insights/src/measurement-recommendation-detection.test.ts create mode 100644 apps/insights/src/measurement-recommendation-detection.ts create mode 100644 apps/insights/src/production-shadow.test.ts create mode 100644 apps/insights/src/route-health-detection.test.ts create mode 100644 apps/insights/src/route-health-detection.ts create mode 100644 apps/insights/src/run-candidate-plan.test.ts create mode 100644 apps/insights/src/run-candidate-plan.ts create mode 100644 apps/insights/src/worker-fanout-shadow.ts diff --git a/apps/dashboard/app/(main)/insights/[id]/page.tsx b/apps/dashboard/app/(main)/insights/[id]/page.tsx index def6cf9a75..24a57aef7b 100644 --- a/apps/dashboard/app/(main)/insights/[id]/page.tsx +++ b/apps/dashboard/app/(main)/insights/[id]/page.tsx @@ -34,6 +34,15 @@ import { ExecuteGoalAction, GoalRecommendationAction, } from "../_components/investigation-row"; +import { + ConversionDraftRecommendationAction, + InstrumentationRecommendationDetails, +} from "../_components/conversion-draft-recommendation"; +import { + isConversionDraftRecommendation, + isGoalRecommendation, + isInstrumentationRecommendation, +} from "../_components/recommendation-guards"; type TimelineItem = InsightByIdResponse["timeline"][number]; type InvestigationItem = Extract; @@ -409,6 +418,7 @@ function InvestigationActivity({ }) { const { outcome } = item; const sourceHref = investigationSourceHref(item, websiteId); + const recommendation = outcome.recommendation; const execution = outcome.next.type === "act" ? outcome.next.execution : undefined; @@ -430,19 +440,32 @@ function InvestigationActivity({

- {outcome.recommendation ? ( + {recommendation ? (

Recommended

- {outcome.recommendation.action} + {recommendation.action}

- {item.entity.type === "goal" && outcome.recommendation.operation ? ( + {isInstrumentationRecommendation(recommendation) ? ( + + ) : null} + {isConversionDraftRecommendation(recommendation) ? ( +
+ +
+ ) : item.entity.type === "goal" && + isGoalRecommendation(recommendation) ? (
diff --git a/apps/dashboard/app/(main)/insights/_components/conversion-draft-recommendation.tsx b/apps/dashboard/app/(main)/insights/_components/conversion-draft-recommendation.tsx new file mode 100644 index 0000000000..57962d927b --- /dev/null +++ b/apps/dashboard/app/(main)/insights/_components/conversion-draft-recommendation.tsx @@ -0,0 +1,321 @@ +"use client"; + +import { authClient } from "@databuddy/auth/client"; +import type { InsightMeasurementRecommendation } from "@databuddy/shared/insights"; +import { + GATED_FEATURES, + type GatedFeatureId, +} from "@databuddy/shared/types/features"; +import { Button } from "@databuddy/ui"; +import { CheckCircleIcon } from "@databuddy/ui/icons"; +import dynamic from "next/dynamic"; +import Link from "next/link"; +import { useState } from "react"; +import { toast } from "sonner"; +import { useFeatureGate } from "@/components/feature-gate"; +import { useAutocompleteData } from "@/hooks/use-autocomplete"; +import { type CreateGoalData, type Goal, useGoals } from "@/hooks/use-goals"; +import { useFunnels } from "@/hooks/use-funnels"; +import type { CreateFunnelData } from "@/types/funnels"; + +const EditGoalDialog = dynamic( + () => + import( + "@/app/(main)/websites/[id]/goals/_components/edit-goal-dialog" + ).then((module) => module.EditGoalDialog), + { ssr: false } +); + +const EditFunnelDialog = dynamic( + () => + import( + "@/app/(main)/websites/[id]/funnels/_components/edit-funnel-dialog" + ).then((module) => module.EditFunnelDialog), + { ssr: false } +); + +type GoalDraftRecommendation = Extract< + InsightMeasurementRecommendation, + { kind: "goal_draft" } +>; +type FunnelDraftRecommendation = Extract< + InsightMeasurementRecommendation, + { kind: "funnel_draft" } +>; +type ConversionDraftRecommendation = + | GoalDraftRecommendation + | FunnelDraftRecommendation; +type InstrumentationRecommendation = Extract< + InsightMeasurementRecommendation, + { kind: "instrumentation" } +>; + +interface DraftCreationAccess { + canCreate: boolean; + reason: string | null; +} + +interface CreatedDraft { + id: string; + name: string; +} + +export function ConversionDraftRecommendationAction({ + recommendation, + websiteId, +}: { + recommendation: ConversionDraftRecommendation; + websiteId: string; +}) { + const feature = + recommendation.kind === "goal_draft" + ? GATED_FEATURES.GOALS + : GATED_FEATURES.FUNNELS; + const creationAccess = useDraftCreationAccess(feature); + + if (recommendation.kind === "goal_draft") { + return ( + + ); + } + + return ( + + ); +} + +export function InstrumentationRecommendationDetails({ + recommendation, +}: { + recommendation: InstrumentationRecommendation; +}) { + return ( +
    + {recommendation.events.map((event) => ( +
  • + {event.name} + + {event.description} +
  • + ))} +
+ ); +} + +function GoalDraftAction({ + creationAccess, + recommendation, + websiteId, +}: { + creationAccess: DraftCreationAccess; + recommendation: GoalDraftRecommendation; + websiteId: string; +}) { + const [createdGoal, setCreatedGoal] = useState(null); + const [isOpen, setIsOpen] = useState(false); + const autocomplete = useAutocompleteData(websiteId, isOpen); + const { createGoal, isCreating } = useGoals(websiteId, isOpen); + + const handleSave = async (data: Goal | Omit) => { + try { + const goal = await createGoal({ + description: data.description ?? null, + filters: data.filters, + ignoreHistoricData: data.ignoreHistoricData, + name: data.name, + target: data.target, + type: data.type, + websiteId, + } as CreateGoalData); + setIsOpen(false); + setCreatedGoal({ id: goal.id, name: goal.name }); + } catch (error) { + toast.error( + error instanceof Error ? error.message : "Could not create the goal" + ); + } + }; + + if (createdGoal) { + return ( + + ); + } + + return ( + <> + setIsOpen(true)} + /> + {isOpen ? ( + setIsOpen(false)} + onSave={handleSave} + /> + ) : null} + + ); +} + +function FunnelDraftAction({ + creationAccess, + recommendation, + websiteId, +}: { + creationAccess: DraftCreationAccess; + recommendation: FunnelDraftRecommendation; + websiteId: string; +}) { + const [createdFunnel, setCreatedFunnel] = useState(null); + const [isOpen, setIsOpen] = useState(false); + const autocomplete = useAutocompleteData(websiteId, isOpen); + const { createAction, isCreating } = useFunnels(websiteId, { + enabled: isOpen, + }); + + const handleCreate = async (data: CreateFunnelData) => { + try { + const funnel = await createAction(data); + setIsOpen(false); + setCreatedFunnel({ id: funnel.id, name: funnel.name }); + } catch (error) { + toast.error( + error instanceof Error ? error.message : "Could not create the funnel" + ); + throw error; + } + }; + + if (createdFunnel) { + return ( + + ); + } + + return ( + <> + setIsOpen(true)} + /> + {isOpen ? ( + setIsOpen(false)} + onCreate={handleCreate} + onSubmit={() => Promise.resolve()} + /> + ) : null} + + ); +} + +function DraftReviewButton({ + access, + label, + onClick, +}: { + access: DraftCreationAccess; + label: "funnel" | "goal"; + onClick: () => void; +}) { + return ( +
+ + {access.reason ? ( +

{access.reason}

+ ) : null} +
+ ); +} + +function CreatedDraftLink({ + href, + label, + name, +}: { + href: string; + label: "Funnel" | "Goal"; + name: string; +}) { + return ( +
+ + + {name} created + + +
+ ); +} + +function useDraftCreationAccess(feature: GatedFeatureId): DraftCreationAccess { + const featureGate = useFeatureGate(feature); + const memberRole = authClient.useActiveMemberRole(); + + if (featureGate.isLoading || memberRole.isPending) { + return { canCreate: false, reason: "Checking access…" }; + } + if (!featureGate.isEnabled) { + return { + canCreate: false, + reason: + featureGate.upgradeMessage ?? + `${featureGate.featureName} are not available on this plan.`, + }; + } + if (memberRole.data?.role === "viewer") { + return { + canCreate: false, + reason: "You have view-only access to this website.", + }; + } + if (!memberRole.data) { + return { + canCreate: false, + reason: "You need edit access to create this.", + }; + } + + return { canCreate: true, reason: null }; +} diff --git a/apps/dashboard/app/(main)/insights/_components/investigation-row.tsx b/apps/dashboard/app/(main)/insights/_components/investigation-row.tsx index 5a70e65499..a3d0d58608 100644 --- a/apps/dashboard/app/(main)/insights/_components/investigation-row.tsx +++ b/apps/dashboard/app/(main)/insights/_components/investigation-row.tsx @@ -1,10 +1,7 @@ "use client"; import { useMutation, useQueryClient } from "@tanstack/react-query"; -import type { - InsightBriefItem, - InvestigationOutcome, -} from "@databuddy/shared/insights"; +import type { InvestigationOutcome } from "@databuddy/shared/insights"; import { Button, Skeleton } from "@databuddy/ui"; import Link from "next/link"; import { toast } from "sonner"; @@ -18,11 +15,7 @@ import { LightbulbIcon, WarningCircleIcon, } from "@databuddy/ui/icons"; - -type GoalRecommendation = Extract< - NonNullable, - { operation: "delete" | "edit" } ->; +import type { GoalRecommendation } from "./recommendation-guards"; type GoalExecution = Extract< NonNullable< diff --git a/apps/dashboard/app/(main)/insights/_components/investigation-settings.tsx b/apps/dashboard/app/(main)/insights/_components/investigation-settings.tsx index 6f41dc99e4..81457fc054 100644 --- a/apps/dashboard/app/(main)/insights/_components/investigation-settings.tsx +++ b/apps/dashboard/app/(main)/insights/_components/investigation-settings.tsx @@ -3,9 +3,8 @@ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { useCallback, useEffect, useState } from "react"; import { toast } from "sonner"; -import { insightQueries } from "@/lib/insight-api"; import { orpc } from "@/lib/orpc"; -import { Button, Field, Skeleton, guessTimezone } from "@databuddy/ui"; +import { Button, Field, Skeleton, Spinner, guessTimezone } from "@databuddy/ui"; import { CaretUpDownIcon, FloppyDiskIcon, @@ -22,6 +21,7 @@ interface ConfigFormState { } interface InvestigationSettingsProps { + isAnalyzing: boolean; organizationId?: string; } @@ -39,12 +39,12 @@ const SCHEDULE_OPTIONS: { label: string; value: Schedule }[] = [ const TIMEZONES = Intl.supportedValuesOf("timeZone"); export function InvestigationSettings({ + isAnalyzing, organizationId, }: InvestigationSettingsProps) { const queryClient = useQueryClient(); const [open, setOpen] = useState(false); const [form, setForm] = useState(DEFAULT_FORM); - const [runId, setRunId] = useState(); const refreshConfig = useCallback( () => queryClient.invalidateQueries({ @@ -52,10 +52,6 @@ export function InvestigationSettings({ }), [queryClient] ); - const refreshInvestigations = useCallback( - () => queryClient.invalidateQueries({ queryKey: insightQueries.all() }), - [queryClient] - ); const configQuery = useQuery({ ...orpc.insightGeneration.getConfig.queryOptions({ input: { organizationId }, @@ -78,43 +74,6 @@ export function InvestigationSettings({ }); }, [configQuery.data]); - const runQuery = useQuery({ - ...orpc.insightGeneration.getRun.queryOptions({ - input: { runId: runId ?? "" }, - }), - enabled: Boolean(runId), - refetchInterval: (query) => { - if (query.state.error) { - return false; - } - const status = query.state.data?.status; - return !status || status === "queued" || status === "running" - ? 2000 - : false; - }, - }); - - useEffect(() => { - if (runId && runQuery.isError) { - setRunId(undefined); - return; - } - const status = runQuery.data?.status; - if (!(runId && status) || status === "queued" || status === "running") { - return; - } - setRunId(undefined); - Promise.all([refreshConfig(), refreshInvestigations()]).catch(() => { - toast.error("Analysis finished, but results could not be refreshed"); - }); - }, [ - refreshConfig, - refreshInvestigations, - runId, - runQuery.data?.status, - runQuery.isError, - ]); - const saveMutation = useMutation({ ...orpc.insightGeneration.upsertConfig.mutationOptions(), onError: (error) => @@ -134,29 +93,19 @@ export function InvestigationSettings({ if (data.reusedRun) { toast.info("Analysis is already running"); } else if (data.status === "queued") { - toast.success( - `Queued ${data.queuedItems} website${data.queuedItems === 1 ? "" : "s"}` - ); + toast.success("Analysis started"); } else if (data.status === "disabled") { toast.info("Scheduled analysis is disabled"); } else { toast.info("No websites available"); } - if (data.runId && data.status === "queued") { - setRunId(data.runId); - } else { - await refreshInvestigations(); - } await refreshConfig(); setOpen(false); }, }); - const isBusy = - configQuery.isLoading || - saveMutation.isPending || - triggerMutation.isPending || - Boolean(runId); + const analysisPending = isAnalyzing || triggerMutation.isPending; + const isBusy = configQuery.isLoading || saveMutation.isPending || analysisPending; return ( @@ -168,8 +117,14 @@ export function InvestigationSettings({ type="button" variant="secondary" > - - Analysis + {analysisPending ? ( + + ) : ( + + )} + + {analysisPending ? "Analyzing…" : "Analysis"} + } /> @@ -241,8 +196,12 @@ export function InvestigationSettings({ type="button" variant="secondary" > - - Run now + {analysisPending ? ( + + ) : ( + + )} + {analysisPending ? "Analyzing…" : "Run now"} - + {hasNoWebsites ? ( @@ -90,6 +180,7 @@ export default function InsightsPage() { ) : null} Investigations + + Questions and fixes waiting for your input. + @@ -139,6 +233,7 @@ function InvestigationsPanel({ } function InsightBrief({ + description, hasNextPage, insights, isFetchingNextPage, @@ -146,6 +241,7 @@ function InsightBrief({ onRetryAction, state, }: { + description: string; hasNextPage: boolean; insights: BriefInsight[]; isFetchingNextPage: boolean; @@ -221,8 +317,8 @@ function InsightBrief({ Latest insights - - What changed, why it matters, and what to do next. + + {description} {content} @@ -242,6 +338,7 @@ function InsightBriefRow({ insight }: { insight: BriefInsight }) { ? TrendDownIcon : LightbulbIcon; const metric = insight.signal.metric; + const recommendation = insight.recommendation; const entityType = insight.signal.entity.type.replaceAll("_", " "); @@ -285,20 +382,32 @@ function InsightBriefRow({ insight }: { insight: BriefInsight }) {

{insight.summary}

- {insight.recommendation ? ( + {recommendation ? (

Next step - {insight.recommendation.action} + {recommendation.action}

- {insight.signal.entity.type === "goal" && - insight.recommendation.operation ? ( + {isInstrumentationRecommendation(recommendation) ? ( + + ) : null} + {isConversionDraftRecommendation(recommendation) ? ( +
+ +
+ ) : insight.signal.entity.type === "goal" && + isGoalRecommendation(recommendation) ? (
diff --git a/apps/dashboard/app/(main)/websites/[id]/funnels/_components/edit-funnel-dialog.tsx b/apps/dashboard/app/(main)/websites/[id]/funnels/_components/edit-funnel-dialog.tsx index 6a0c6f55b0..d08d1bf7a9 100644 --- a/apps/dashboard/app/(main)/websites/[id]/funnels/_components/edit-funnel-dialog.tsx +++ b/apps/dashboard/app/(main)/websites/[id]/funnels/_components/edit-funnel-dialog.tsx @@ -2,6 +2,7 @@ import { AutocompleteInput } from "@/components/ui/autocomplete-input"; import { FilterRow } from "@/components/ui/filter-row"; +import type { InsightMeasurementRecommendation } from "@databuddy/shared/insights"; import type { AutocompleteData } from "@/hooks/use-autocomplete"; import { goalFunnelOperatorOptions, useFilters } from "@/hooks/use-filters"; import { cn } from "@/lib/utils"; @@ -18,7 +19,7 @@ import { Droppable, type DropResult, } from "@hello-pangea/dnd"; -import { useCallback, useEffect, useMemo, useState } from "react"; +import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { DotsNineIcon, FunnelIcon as FunnelSimpleIcon, @@ -36,9 +37,15 @@ const defaultFilter: FunnelFilter = { value: "", } as const; +export type FunnelDraft = Extract< + InsightMeasurementRecommendation, + { kind: "funnel_draft" } +>["draft"]; + interface EditFunnelDialogProps { autocompleteData?: AutocompleteData; funnel: Funnel | null; + initialDraft?: FunnelDraft; isCreating?: boolean; isOpen: boolean; isUpdating: boolean; @@ -53,14 +60,26 @@ export function EditFunnelDialog({ onSubmit, onCreate, funnel, + initialDraft, isUpdating, isCreating = false, autocompleteData, }: EditFunnelDialogProps) { const [formData, setFormData] = useState(null); + const wasOpen = useRef(false); const isCreateMode = !funnel; + const isSuggestedDraft = isCreateMode && Boolean(initialDraft); useEffect(() => { + if (!isOpen) { + wasOpen.current = false; + return; + } + if (wasOpen.current) { + return; + } + wasOpen.current = true; + if (funnel) { const sanitizedFilters = (funnel.filters || []).map((f) => ({ ...f, @@ -71,6 +90,21 @@ export function EditFunnelDialog({ filters: sanitizedFilters, ignoreHistoricData: funnel.ignoreHistoricData ?? false, }); + } else if (initialDraft) { + setFormData({ + id: "", + name: initialDraft.name, + description: initialDraft.description, + steps: initialDraft.steps.map((step) => ({ ...step })), + filters: initialDraft.filters.map((filter) => ({ + ...filter, + operator: filter.operator || "equals", + })), + ignoreHistoricData: initialDraft.ignoreHistoricData, + isActive: true, + createdAt: "", + updatedAt: "", + }); } else { setFormData({ id: "", @@ -91,7 +125,7 @@ export function EditFunnelDialog({ updatedAt: "", }); } - }, [funnel]); + }, [funnel, initialDraft, isOpen]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); @@ -112,8 +146,13 @@ export function EditFunnelDialog({ filters: sanitizedFilters, ignoreHistoricData: formData.ignoreHistoricData, }; - await onCreate(createData); - resetForm(); + try { + await onCreate(createData); + resetForm(); + } catch { + // The caller surfaces the error; retain the user's draft for correction. + return; + } } else { await onSubmit({ ...formData, @@ -302,11 +341,17 @@ export function EditFunnelDialog({
- {isCreateMode ? "New Funnel" : formData.name || "Edit Funnel"} + {isCreateMode + ? isSuggestedDraft + ? "Review Funnel Draft" + : "New Funnel" + : formData.name || "Edit Funnel"} {isCreateMode - ? "Track user conversion journeys" + ? isSuggestedDraft + ? "Review and adjust this proposed journey before creating it" + : "Track user conversion journeys" : `${formData.steps.length} steps configured`}
diff --git a/apps/dashboard/app/(main)/websites/[id]/funnels/_components/funnel-item.tsx b/apps/dashboard/app/(main)/websites/[id]/funnels/_components/funnel-item.tsx index 391f748409..d64094df2b 100644 --- a/apps/dashboard/app/(main)/websites/[id]/funnels/_components/funnel-item.tsx +++ b/apps/dashboard/app/(main)/websites/[id]/funnels/_components/funnel-item.tsx @@ -104,7 +104,10 @@ export function FunnelItem({ const stepsData = analytics?.steps_analytics ?? []; return ( -
+
["draft"]; + interface EditGoalDialogProps { autocompleteData?: AutocompleteData; goal: Goal | null; + initialDraft?: GoalDraft; isOpen: boolean; isSaving: boolean; onClose: () => void; @@ -47,13 +54,25 @@ export function EditGoalDialog({ onClose, onSave, goal, + initialDraft, isSaving, autocompleteData, }: EditGoalDialogProps) { const [formData, setFormData] = useState(null); + const wasOpen = useRef(false); const isCreateMode = !goal; + const isSuggestedDraft = isCreateMode && Boolean(initialDraft); useEffect(() => { + if (!isOpen) { + wasOpen.current = false; + return; + } + if (wasOpen.current) { + return; + } + wasOpen.current = true; + if (goal) { const sanitizedFilters = ((goal.filters as GoalFilter[]) || []).map( (f) => ({ @@ -70,6 +89,18 @@ export function EditGoalDialog({ filters: sanitizedFilters, ignoreHistoricData: goal.ignoreHistoricData ?? false, }); + } else if (initialDraft) { + setFormData({ + name: initialDraft.name, + description: initialDraft.description, + type: initialDraft.type, + target: initialDraft.target, + filters: initialDraft.filters.map((filter) => ({ + ...filter, + operator: filter.operator || "equals", + })), + ignoreHistoricData: initialDraft.ignoreHistoricData, + }); } else { setFormData({ name: "", @@ -80,7 +111,7 @@ export function EditGoalDialog({ ignoreHistoricData: false, }); } - }, [goal]); + }, [goal, initialDraft, isOpen]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); @@ -198,11 +229,17 @@ export function EditGoalDialog({
- {isCreateMode ? "New Goal" : formData.name || "Edit Goal"} + {isCreateMode + ? isSuggestedDraft + ? "Review Goal Draft" + : "New Goal" + : formData.name || "Edit Goal"} {isCreateMode - ? "Track single-step conversions" + ? isSuggestedDraft + ? "Review and adjust this proposed conversion before creating it" + : "Track single-step conversions" : "Update goal settings"}
diff --git a/apps/dashboard/app/(main)/websites/[id]/goals/_components/goal-item.tsx b/apps/dashboard/app/(main)/websites/[id]/goals/_components/goal-item.tsx index fb2622c7e3..51e487e406 100644 --- a/apps/dashboard/app/(main)/websites/[id]/goals/_components/goal-item.tsx +++ b/apps/dashboard/app/(main)/websites/[id]/goals/_components/goal-item.tsx @@ -90,7 +90,7 @@ export function GoalItem({
- +

{goal.name} diff --git a/apps/dashboard/test/e2e/specs/regressions/measurement-recommendations.spec.ts b/apps/dashboard/test/e2e/specs/regressions/measurement-recommendations.spec.ts new file mode 100644 index 0000000000..74124af7fd --- /dev/null +++ b/apps/dashboard/test/e2e/specs/regressions/measurement-recommendations.spec.ts @@ -0,0 +1,118 @@ +import { randomUUID } from "node:crypto"; +import { db } from "@databuddy/db"; +import { analyticsInsights, insightObservations } from "@databuddy/db/schema"; +import type { + InvestigationOutcome, + InvestigationSignal, +} from "@databuddy/shared/insights"; +import { expect, test } from "@/test/e2e/fixtures"; + +test( + "opens an editable goal draft from an insight recommendation", + { tag: ["@regression"] }, + async ({ authenticatedPage, e2eSession }) => { + expect(e2eSession.websiteId).toBeTruthy(); + if (!e2eSession.websiteId) { + throw new Error("Expected the E2E session to include a website"); + } + + const insightId = randomUUID(); + const signalKey = "measurement:conversion-coverage"; + const createdAt = new Date(); + const signal: InvestigationSignal = { + signalKey, + entity: { + type: "website", + id: e2eSession.websiteId, + label: "E2E Website", + }, + metric: { + label: "Conversion measurement coverage", + current: 0, + format: "number", + }, + changePercent: null, + severity: "info", + sentiment: "neutral", + period: { + current: { from: "2026-07-25", to: "2026-07-31" }, + previous: { from: "2026-07-18", to: "2026-07-24" }, + }, + }; + const outcome: InvestigationOutcome = { + title: "Checkout completion needs a measurable goal", + summary: + "The site has active traffic but no configured conversion measurement.", + impact: + "The team cannot see whether people complete checkout from the current analytics setup.", + rootCause: null, + evidence: [ + "The completed period recorded 68 sessions and 142 pageviews without an active goal or funnel.", + ], + publish: true, + recommendation: { + kind: "goal_draft", + action: "Review a goal for completed checkout.", + draft: { + name: "Checkout completed", + description: "Measure completed checkout events.", + type: "EVENT", + target: "checkout_completed", + filters: [], + ignoreHistoricData: false, + }, + }, + next: { + type: "resolve", + reason: "This proposed goal is ready for teammate review.", + }, + }; + + await db.insert(analyticsInsights).values({ + id: insightId, + organizationId: e2eSession.organizationId, + websiteId: e2eSession.websiteId, + title: outcome.title, + description: outcome.summary, + severity: "info", + sentiment: "neutral", + changePercent: null, + dedupeKey: `${e2eSession.websiteId}|${signalKey}`, + subjectKey: signalKey, + timezone: "UTC", + status: "resolved", + createdAt, + }); + await db.insert(insightObservations).values({ + id: randomUUID(), + organizationId: e2eSession.organizationId, + websiteId: e2eSession.websiteId, + insightId, + signalKey, + asOf: createdAt, + signal, + evidence: outcome.evidence, + outcome, + recheckAt: createdAt, + createdAt, + }); + + await authenticatedPage.goto("/insights"); + + await expect( + authenticatedPage.getByText(outcome.title, { exact: true }) + ).toBeVisible(); + await authenticatedPage + .getByRole("button", { name: "Review goal draft" }) + .click(); + await expect( + authenticatedPage.getByText("Review Goal Draft", { exact: true }) + ).toBeVisible(); + await expect( + authenticatedPage.getByDisplayValue("Checkout completed") + ).toBeVisible(); + await expect( + authenticatedPage.getByDisplayValue("checkout_completed") + ).toBeVisible(); + } +); diff --git a/apps/insights/src/agent.ts b/apps/insights/src/agent.ts index 04f0a3e808..02e01d0173 100644 --- a/apps/insights/src/agent.ts +++ b/apps/insights/src/agent.ts @@ -7,8 +7,12 @@ import { import { getAILogger } from "@databuddy/ai/lib/ai-logger"; import { agentInvestigationOutcomeSchema, + investigationOutcomeSchema, + type AgentInvestigationOutcome, type InvestigationOutcome, type InvestigationSignal, + type InsightMeasurementRecommendation, + type InsightWatchThreshold, } from "@databuddy/shared/insights"; import { type LanguageModel, @@ -19,6 +23,7 @@ import { type ToolSet, ToolLoopAgent, } from "ai"; +import type { MeasurementCandidate } from "./detection"; const MAX_STEPS = 8; const TIMEOUT_MS = 2 * 60_000; @@ -49,6 +54,7 @@ export interface InsightAgentInput { kind: "reply"; } )[]; + measurementCandidate?: MeasurementCandidate; otherOpenWork: { asOf: string; next: InterruptingNext; @@ -90,7 +96,9 @@ Return one next outcome: Act and ask interrupt people. Use either only when the result is worth interrupting a teammate now. A missing description or unclear name alone is not an alert. When an action changes the named goal's title or description, set next.execution to the exact goal edit so Databuddy can apply it transactionally on click. When an action removes a duplicated or useless named goal, set next.execution to the exact delete. Omit execution for code, tracking, external, or any other action that Databuddy cannot safely apply itself. Never provide an execution for a different entity. For every act or watch, set next.recheckAt to the earliest exact ISO 8601 time after asOf when its verification or escalation condition can be measured. Use the actual measurement window or sample window, not a generic tomorrow. Never schedule a recheck before the window can answer the condition; when no defensible time exists, resolve or ask instead. +For every evidence item, return one evidenceRefs item in the same order. Use source=provided with the zero-based supplied-evidence index for supplied facts, or source=tool with the exact name of a read tool you used. Never cite a tool you did not use. For every watch, return next.threshold with the exact native-unit value, comparison, defensible anchor, and evidenceRef. The system writes the customer-facing escalation sentence from this structured condition. A recommendation is one concrete, non-interrupting next step on a published insight; otherwise use null. Name the exact object and evidence-backed change, never generic narrowing or an invented target. Code, hosting, browser, or integration recommendations require inspected source or configuration; an error message, stack, route, or common implementation pattern is not enough. If source access is the next move, use ask and recommendation null rather than proposing a speculative repair. Goal edits put the proposed name and business description in changes, with null for an unchanged field, and action names the proposed value. Goal deletes and non-goal recommendations use null changes. operation is null unless the exact goal editor action is edit or delete. Never combine a recommendation with act or ask, confuse an event with a goal, or claim a proposal was applied, fixed, or verified. +When supplied or inspected evidence establishes an exact measurement candidate, you may return a typed goal_draft or funnel_draft recommendation. measurementCandidate is a backend-verified candidate: copy its target exactly, and never turn a page_navigation_proxy into a goal or funnel draft. Copy only the exact PAGE_VIEW path or EVENT name that evidence establishes; never infer a target, invent an event, use CUSTOM, add conditions, or widen the 24-hour funnel window. A goal draft has one target; a funnel draft has two to ten ordered steps. These drafts are review-only: set next to resolve, omit next.execution, and explain that the teammate can edit the normal setup form before saving. Route-only evidence proves navigation, not a business conversion. Label a route-only funnel as a navigation proxy and prefer an instrumentation recommendation when the missing product event is the real limitation. An instrumentation recommendation is display-only, names the behavior that needs measurement, and must never claim a goal or funnel already exists. Measured reliability or performance harm to a named cohort is impact even when revenue is unknown. A goal or funnel that contradicts its configured purpose or inspected source is broken tracking: act on the exact definition and verification, with no recommendation. Without a configured purpose, do not invent or ask for one. If an undescribed goal combines unrelated behaviors, explain what it measures, put the exact target and filters in rootCause, state what the number cannot tell the teammate in impact, and resolve because no isolated failure is proven. Recommend renaming and describing the broad goal, or creating a narrower goal from an existing purpose-specific event; delete only a duplicate or useless goal. Publish this limitation once. If its description already defines broad engagement, keep it and investigate the change. An improvement from a failing value to another failing value is not recovery. For performance regressions, identify the worst meaningful route and affected traffic before deciding; if the metric remains unhealthy and code ownership is missing, ask for that ownership instead of inventing a fix or waiting on a noise-sensitive threshold. The same rule applies to ongoing reliability harm: when a current failure affects a material named cohort and repair needs source access, ask for the owning repository now; do not watch it merely because the exact code mechanism is not yet inspected. An event name does not prove whether more or less is good. Never resolve an unexplained event change from its name alone; inspect its definition, emission code, related workflow, and revenue evidence. If its meaning remains unknown, do not open a case for ambiguity alone; ask only when an external fact gates an already-material fix. @@ -129,6 +137,174 @@ function promptSignal(signal: InvestigationSignal) { }; } +const watchAnchorCopy: Record = { + configured_target: "configured target", + healthy_range: "healthy range", + measured_severity: "measured severity", + prior_baseline: "prior baseline", +}; + +const watchComparisonCopy: Record = + { + at_or_above: "at or above", + at_or_below: "at or below", + above: "above", + below: "below", + }; + +function formatWatchValue( + value: number, + format: InvestigationSignal["metric"]["format"] +): string { + if (format === "percent") { + return new Intl.NumberFormat("en", { + maximumFractionDigits: 1, + style: "percent", + }).format(value); + } + if (format === "duration_ms") { + return `${value.toLocaleString("en-US")} ms`; + } + if (format === "duration_s") { + return `${value.toLocaleString("en-US")} seconds`; + } + return value.toLocaleString("en-US", { maximumFractionDigits: 2 }); +} + +function formatWatchEscalation( + signal: InvestigationSignal, + threshold: InsightWatchThreshold +): string { + return `Escalate when ${signal.metric.label} is ${watchComparisonCopy[threshold.comparison]} ${formatWatchValue(threshold.value, signal.metric.format)} (${watchAnchorCopy[threshold.anchor]}).`; +} + +function measurementRecommendation( + recommendation: AgentInvestigationOutcome["recommendation"] +): InsightMeasurementRecommendation | null { + return recommendation && "kind" in recommendation ? recommendation : null; +} + +function validateMeasurementRecommendation( + outcome: AgentInvestigationOutcome, + input: Pick, + usedToolNames: ReadonlySet +) { + const recommendation = measurementRecommendation(outcome.recommendation); + if (!recommendation) { + return; + } + if (outcome.next.type !== "resolve") { + throw new Error( + "Insights measurement recommendations must resolve without an executable action" + ); + } + + const hasInspectedEvidence = usedToolNames.size > 0; + const candidate = input.measurementCandidate; + if (recommendation.kind === "goal_draft") { + if ( + candidate?.kind === "page_navigation_proxy" && + recommendation.draft.type === candidate.type && + recommendation.draft.target === candidate.target + ) { + throw new Error("Insights navigation proxies cannot become goal drafts"); + } + const matchesObservedEvent = + candidate?.kind === "event_goal_candidate" && + candidate.target === recommendation.draft.target && + candidate.type === recommendation.draft.type; + if (!(matchesObservedEvent || hasInspectedEvidence)) { + throw new Error( + "Insights goal drafts require an observed event candidate or inspected evidence" + ); + } + return; + } + if ( + recommendation.kind === "funnel_draft" && + candidate?.kind === "page_navigation_proxy" && + recommendation.draft.steps.some( + (step) => step.type === candidate.type && step.target === candidate.target + ) + ) { + throw new Error( + "Insights navigation proxies cannot become funnel draft steps" + ); + } + if (recommendation.kind === "funnel_draft" && !hasInspectedEvidence) { + throw new Error( + "Insights funnel drafts require inspected evidence for every ordered step" + ); + } + if ( + recommendation.kind === "instrumentation" && + !(candidate || hasInspectedEvidence) + ) { + throw new Error( + "Insights instrumentation recommendations require an observed coverage gap or inspected evidence" + ); + } +} + +function validateAgentOutcome( + outcome: AgentInvestigationOutcome, + input: Pick< + InsightAgentInput, + "appContext" | "evidence" | "measurementCandidate" | "signal" + >, + usedToolNames: ReadonlySet +): InvestigationOutcome { + const asOf = new Date(input.appContext.currentDateTime); + function validateEvidenceRef( + evidenceRef: AgentInvestigationOutcome["evidenceRefs"][number] + ) { + if ( + evidenceRef.source === "provided" && + evidenceRef.index >= input.evidence.length + ) { + throw new Error( + "Insights agent cited supplied evidence that was not available in this investigation" + ); + } + if (evidenceRef.source === "tool" && !usedToolNames.has(evidenceRef.name)) { + throw new Error( + "Insights agent cited a read tool that was not used in this investigation" + ); + } + } + for (const evidenceRef of outcome.evidenceRefs) { + validateEvidenceRef(evidenceRef); + } + validateMeasurementRecommendation(outcome, input, usedToolNames); + if (outcome.next.type === "act" || outcome.next.type === "watch") { + const recheckAt = outcome.next.recheckAt; + if (!recheckAt || new Date(recheckAt).getTime() <= asOf.getTime()) { + throw new Error( + "Insights agent scheduled a recheck before this investigation" + ); + } + } + + let next: InvestigationOutcome["next"] = outcome.next; + if (outcome.next.type === "watch") { + const threshold = outcome.next.threshold; + if (!threshold) { + throw new Error("Insights agent returned a watch without a threshold"); + } + if (!threshold.evidenceRef) { + throw new Error( + "Insights agent returned a watch threshold without evidence" + ); + } + validateEvidenceRef(threshold.evidenceRef); + next = { + ...outcome.next, + escalation: formatWatchEscalation(input.signal, threshold), + }; + } + return investigationOutcomeSchema.parse({ ...outcome, next }); +} + export async function runInsightAgent( input: InsightAgentInput, options: { @@ -206,6 +382,7 @@ export async function runInsightAgent( : item ), otherOpenWork: input.otherOpenWork, + measurementCandidate: input.measurementCandidate ?? null, ...(input.request ? { request: { @@ -219,13 +396,22 @@ export async function runInsightAgent( }), timeout: { totalMs: TIMEOUT_MS }, }); + const toolCallCount = result.steps.reduce( + (count, step) => count + step.toolCalls.length, + 0 + ); return { modelId: result.response.modelId, - outcome: result.output, - toolCallCount: result.steps.reduce( - (count, step) => count + step.toolCalls.length, - 0 + outcome: validateAgentOutcome( + result.output, + input, + new Set( + result.steps.flatMap((step) => + step.toolCalls.map((toolCall) => toolCall.toolName) + ) + ) ), + toolCallCount, usage: result.totalUsage, }; } diff --git a/apps/insights/src/batch-shadow.ts b/apps/insights/src/batch-shadow.ts new file mode 100644 index 0000000000..5de78f2c09 --- /dev/null +++ b/apps/insights/src/batch-shadow.ts @@ -0,0 +1,23 @@ +import type { WebsiteInvestigationArtifact } from "./generation"; + +export async function runDistinctSignalBatch( + batchSize: number, + runCandidate: ( + excludedSignalKeys: ReadonlySet + ) => Promise, + onSelected?: (artifact: WebsiteInvestigationArtifact) => Promise | void +): Promise { + const artifacts: WebsiteInvestigationArtifact[] = []; + const selectedSignalKeys = new Set(); + for (let index = 0; index < batchSize; index += 1) { + const artifact = await runCandidate(selectedSignalKeys); + artifacts.push(artifact); + const signalKey = artifact.signal?.signalKey; + if (!signalKey || selectedSignalKeys.has(signalKey)) { + break; + } + selectedSignalKeys.add(signalKey); + await onSelected?.(artifact); + } + return artifacts; +} diff --git a/apps/insights/src/coverage-planner.test.ts b/apps/insights/src/coverage-planner.test.ts new file mode 100644 index 0000000000..1f2ad67175 --- /dev/null +++ b/apps/insights/src/coverage-planner.test.ts @@ -0,0 +1,209 @@ +import { describe, expect, it } from "bun:test"; +import type { DetectedSignal } from "./detection"; +import { + coveragePortfolioLimit, + planCoveragePortfolio, +} from "./coverage-planner"; +import { signalKeyForDetectedSignal } from "./investigation"; + +function signal( + overrides: Partial & Pick +): DetectedSignal { + return { + baseline: 100, + current: 50, + deltaPercent: -50, + detectedAt: "2026-08-01", + direction: "down", + label: overrides.metric, + method: "wow", + severity: "warning", + ...overrides, + }; +} + +function keys(signals: DetectedSignal[]): string[] { + return signals.map(signalKeyForDetectedSignal); +} + +describe("planCoveragePortfolio", () => { + it("caps manual runs at three signals and scheduled runs at two", () => { + const candidates = [ + signal({ metric: "error_count", subjectKey: "error:checkout" }), + signal({ metric: "goal:signup", subjectKey: "goal:signup" }), + signal({ metric: "visitors" }), + signal({ metric: "bounce_rate", direction: "up" }), + ]; + + expect(coveragePortfolioLimit("manual")).toBe(3); + expect(coveragePortfolioLimit("scheduled")).toBe(2); + expect( + planCoveragePortfolio(candidates, { reason: "manual" }) + ).toHaveLength(3); + expect( + planCoveragePortfolio(candidates, { reason: "scheduled" }) + ).toHaveLength(2); + }); + + it("reserves a due recheck before higher-ranked newly detected signals", () => { + const due = signal({ + metric: "visitors", + subjectKey: "traffic:weekly-visitors", + }); + const criticalError = signal({ + baseline: 50, + current: 100, + deltaPercent: 100, + direction: "up", + metric: "error_count", + severity: "critical", + subjectKey: "error:checkout", + }); + + const plan = planCoveragePortfolio([criticalError, due], { + dueSignalKey: signalKeyForDetectedSignal(due), + reason: "scheduled", + }); + + expect(keys(plan)).toEqual([ + signalKeyForDetectedSignal(due), + signalKeyForDetectedSignal(criticalError), + ]); + }); + + it("deduplicates identities and diversifies correlated traffic and exact error subjects", () => { + const primaryError = signal({ + baseline: 50, + current: 100, + deltaPercent: 100, + direction: "up", + entityId: "checkout-fingerprint", + metric: "error_count", + severity: "critical", + subjectKey: "error:checkout:count", + }); + const sameErrorSubject = signal({ + baseline: 50, + current: 100, + deltaPercent: 100, + direction: "up", + entityId: "checkout-fingerprint", + metric: "error_count", + subjectKey: "error:checkout:rate", + }); + const duplicateWeakError = signal({ + baseline: 50, + current: 100, + deltaPercent: 100, + direction: "up", + metric: "error_count", + severity: "info", + subjectKey: "error:checkout:count", + }); + const goal = signal({ metric: "goal:signup", subjectKey: "goal:signup" }); + const visitors = signal({ metric: "visitors", severity: "critical" }); + const plan = planCoveragePortfolio( + [ + primaryError, + sameErrorSubject, + duplicateWeakError, + visitors, + signal({ metric: "sessions", severity: "info" }), + signal({ metric: "pageviews", severity: "info" }), + goal, + ], + { reason: "manual" } + ); + + expect(keys(plan)).toEqual([ + signalKeyForDetectedSignal(primaryError), + signalKeyForDetectedSignal(goal), + signalKeyForDetectedSignal(visitors), + ]); + expect(plan.filter((item) => item.metric === "error_count")).toHaveLength(1); + expect( + plan.filter((item) => ["visitors", "sessions", "pageviews"].includes(item.metric)) + ).toHaveLength(1); + }); + + it("keeps direct regressions ahead of generic changes and limits positive signals", () => { + const error = signal({ + baseline: 50, + current: 100, + deltaPercent: 100, + direction: "up", + metric: "error_count", + subjectKey: "error:checkout", + }); + const traffic = signal({ metric: "visitors" }); + const recovery = signal({ + metric: "error_count", + subjectKey: "error:search", + }); + const anotherRecovery = signal({ + baseline: 50, + current: 100, + deltaPercent: 100, + direction: "up", + metric: "custom_event_count", + subjectKey: "custom_event:signup", + }); + + const plan = planCoveragePortfolio( + [traffic, recovery, anotherRecovery, error], + { reason: "manual" } + ); + + expect(keys(plan).slice(0, 2)).toEqual([ + signalKeyForDetectedSignal(error), + signalKeyForDetectedSignal(traffic), + ]); + expect( + plan.filter( + (item) => item === recovery || item === anotherRecovery + ) + ).toHaveLength(1); + }); + + it("allows a full diverse portfolio when every candidate is positive", () => { + const candidates = [ + signal({ + metric: "error_count", + subjectKey: "error:checkout", + }), + signal({ + baseline: 50, + current: 100, + deltaPercent: 100, + direction: "up", + metric: "custom_event_count", + subjectKey: "custom_event:signup", + }), + signal({ + baseline: 50, + current: 100, + deltaPercent: 100, + direction: "up", + metric: "revenue", + }), + ]; + + expect( + planCoveragePortfolio(candidates, { reason: "manual" }) + ).toHaveLength(3); + }); + + it("returns the same portfolio order regardless of detector input order", () => { + const candidates = [ + signal({ metric: "error_count", subjectKey: "error:checkout" }), + signal({ metric: "goal:signup", subjectKey: "goal:signup" }), + signal({ metric: "visitors" }), + ]; + + expect( + keys(planCoveragePortfolio(candidates, { reason: "manual" })) + ).toEqual( + keys(planCoveragePortfolio([...candidates].reverse(), { reason: "manual" })) + ); + }); +}); diff --git a/apps/insights/src/coverage-planner.ts b/apps/insights/src/coverage-planner.ts new file mode 100644 index 0000000000..f37662a328 --- /dev/null +++ b/apps/insights/src/coverage-planner.ts @@ -0,0 +1,192 @@ +import type { DetectedSignal } from "./detection"; +import { + isDirectSignal, + isRegression, + rankSignals, + signalKeyForDetectedSignal, +} from "./investigation"; + +const PORTFOLIO_LIMIT = { manual: 3, scheduled: 2 } as const; +const TRAFFIC_METRICS = new Set(["visitors", "sessions", "pageviews"]); + +export type CoveragePortfolioReason = keyof typeof PORTFOLIO_LIMIT; + +export interface CoveragePortfolioOptions { + /** An exact open investigation to remeasure before newly detected work. */ + dueSignalKey?: string | null; + reason: CoveragePortfolioReason; +} + +type SignalFamily = + | "conversion" + | "engagement" + | "error" + | "event" + | "measurement" + | "other" + | "revenue" + | "traffic" + | "vital"; + +interface Candidate { + family: SignalFamily; + group: string; + key: string; + signal: DetectedSignal; +} + +export function coveragePortfolioLimit( + reason: CoveragePortfolioReason +): number { + return PORTFOLIO_LIMIT[reason]; +} + +function signalFamily(signal: DetectedSignal): SignalFamily { + if (TRAFFIC_METRICS.has(signal.metric)) { + return "traffic"; + } + if (signal.metric === "error_count") { + return "error"; + } + if (signal.metric === "lcp" || signal.metric === "inp") { + return "vital"; + } + if (signal.metric === "revenue") { + return "revenue"; + } + if (signal.metric === "custom_event_count") { + return "event"; + } + if ( + signal.metric.startsWith("funnel:") || + signal.metric.startsWith("goal:") + ) { + return "conversion"; + } + if (signal.metric === "measurement_coverage") { + return "measurement"; + } + if (signal.metric === "bounce_rate" || signal.metric === "session_duration") { + return "engagement"; + } + return "other"; +} + +function signalGroup(signal: DetectedSignal, family: SignalFamily): string { + if (family === "traffic") { + return "traffic:top-level"; + } + if (family === "conversion") { + const [kind, id] = (signal.subjectKey ?? signal.metric).split(":"); + return `conversion:${id ? `${kind}:${id}` : kind}`; + } + if (family === "error" || family === "vital") { + return `${family}:${signal.entityId ?? signal.subjectKey ?? signal.metric}`; + } + if (family === "engagement") { + return `engagement:${signal.metric}`; + } + return `${family}:${signal.subjectKey ?? signal.entityId ?? signal.metric}`; +} + +function stableIdentity(signal: DetectedSignal): string { + return [ + signalKeyForDetectedSignal(signal), + signal.metric, + signal.entityId ?? "", + signal.entityLabel ?? "", + signal.label, + signal.method, + signal.direction, + signal.severity, + String(signal.current), + String(signal.baseline), + String(signal.deltaPercent), + signal.detectedAt, + ].join("\u0000"); +} + +function priority(signal: DetectedSignal): number { + return (isRegression(signal) ? 0 : 2) + (isDirectSignal(signal) ? 0 : 1); +} + +function isPositive(signal: DetectedSignal): boolean { + return signal.current !== signal.baseline && !isRegression(signal); +} + +function rankedCandidates(signals: DetectedSignal[]): Candidate[] { + const stable = [...signals].sort((a, b) => { + const left = stableIdentity(a); + const right = stableIdentity(b); + return left < right ? -1 : left > right ? 1 : 0; + }); + const seen = new Set(); + const candidates: Candidate[] = []; + for (const signal of rankSignals(stable)) { + const key = signalKeyForDetectedSignal(signal); + if (seen.has(key)) { + continue; + } + seen.add(key); + const family = signalFamily(signal); + candidates.push({ + family, + group: signalGroup(signal, family), + key, + signal, + }); + } + return candidates; +} + +/** Selects a small deterministic portfolio without mutating detector output. */ +export function planCoveragePortfolio( + signals: DetectedSignal[], + options: CoveragePortfolioOptions +): DetectedSignal[] { + const candidates = rankedCandidates(signals); + const selected: Candidate[] = []; + const usedFamilies = new Set(); + const usedGroups = new Set(); + const usedKeys = new Set(); + const allowMultiplePositive = candidates.every((item) => + isPositive(item.signal) + ); + let hasPositive = false; + + const add = (candidate: Candidate) => { + selected.push(candidate); + usedFamilies.add(candidate.family); + usedGroups.add(candidate.group); + usedKeys.add(candidate.key); + hasPositive ||= isPositive(candidate.signal); + }; + const due = candidates.find( + (candidate) => candidate.key === options.dueSignalKey + ); + if (due) { + add(due); + } + + while (selected.length < coveragePortfolioLimit(options.reason)) { + const available = candidates.filter( + (candidate) => + !(usedKeys.has(candidate.key) || usedGroups.has(candidate.group)) && + (allowMultiplePositive || !hasPositive || !isPositive(candidate.signal)) + ); + const top = available[0]; + if (!top) { + break; + } + const topPriority = priority(top.signal); + add( + available.find( + (candidate) => + priority(candidate.signal) === topPriority && + !usedFamilies.has(candidate.family) + ) ?? top + ); + } + + return selected.map((candidate) => candidate.signal); +} diff --git a/apps/insights/src/delivery.ts b/apps/insights/src/delivery.ts index c955236ce8..e90134050e 100644 --- a/apps/insights/src/delivery.ts +++ b/apps/insights/src/delivery.ts @@ -48,6 +48,8 @@ const slackBlockSchema = z export const insightSlackEffectPayloadSchema = z.object({ blocks: z.array(slackBlockSchema).max(50), + /** The effect key may include an insight identity; delivery still needs the channel. */ + channelId: z.string().min(1).optional(), insightId: z.string().min(1).optional(), text: z.string().min(1), }); @@ -307,9 +309,10 @@ export async function prepareInsightSlackEffects(params: { insight ); return channelIds.map((channelId) => ({ - effectKey: channelId, + effectKey: `${channelId}:${insight.id}`, payload: { blocks, + channelId, insightId: insight.id, text, } satisfies InsightSlackEffectPayload, diff --git a/apps/insights/src/detection.ts b/apps/insights/src/detection.ts index b213841da3..930e2dafc3 100644 --- a/apps/insights/src/detection.ts +++ b/apps/insights/src/detection.ts @@ -8,6 +8,25 @@ import { emitInsightsEvent } from "./lib/evlog-insights"; dayjs.extend(utcPlugin); dayjs.extend(timezonePlugin); +/** + * A bounded, canonical telemetry target that an investigation agent may use + * when proposing measurement setup. It deliberately excludes raw paths, + * query strings, and dynamic identifiers. + */ +export type MeasurementCandidate = + | { + basis: "observed_custom_event"; + kind: "event_goal_candidate"; + target: string; + type: "EVENT"; + } + | { + basis: "observed_navigation_proxy"; + kind: "page_navigation_proxy"; + target: string; + type: "PAGE_VIEW"; + }; + export interface DetectedSignal { baseline: number; baselineDates?: string[]; @@ -19,6 +38,7 @@ export interface DetectedSignal { entityId?: string; entityLabel?: string; label: string; + measurementCandidate?: MeasurementCandidate; method: "zscore" | "wow"; metric: string; severity: "critical" | "warning" | "info"; @@ -900,34 +920,36 @@ async function detectWow( ); } - const summary = await readDetectorPair({ - abortSignal, - current: () => query("summary_metrics", currentFrom, currentTo), - family: "summary", - previous: () => query("summary_metrics", previousFrom, previousTo), - websiteId, - }); - const errors = await readDetectorPair({ - abortSignal, - current: () => query("error_fingerprints", currentFrom, currentTo), - family: "errors", - previous: () => query("error_fingerprints", previousFrom, previousTo), - websiteId, - }); - const revenue = await readDetectorPair({ - abortSignal, - current: () => query("revenue_overview", currentFrom, currentTo), - family: "revenue", - previous: () => query("revenue_overview", previousFrom, previousTo), - websiteId, - }); - const vitals = await readDetectorPair({ - abortSignal, - current: () => query("vitals_overview", currentFrom, currentTo), - family: "vitals", - previous: () => query("vitals_overview", previousFrom, previousTo), - websiteId, - }); + const [summary, errors, revenue, vitals] = await Promise.all([ + readDetectorPair({ + abortSignal, + current: () => query("summary_metrics", currentFrom, currentTo), + family: "summary", + previous: () => query("summary_metrics", previousFrom, previousTo), + websiteId, + }), + readDetectorPair({ + abortSignal, + current: () => query("error_fingerprints", currentFrom, currentTo), + family: "errors", + previous: () => query("error_fingerprints", previousFrom, previousTo), + websiteId, + }), + readDetectorPair({ + abortSignal, + current: () => query("revenue_overview", currentFrom, currentTo), + family: "revenue", + previous: () => query("revenue_overview", previousFrom, previousTo), + websiteId, + }), + readDetectorPair({ + abortSignal, + current: () => query("vitals_overview", currentFrom, currentTo), + family: "vitals", + previous: () => query("vitals_overview", previousFrom, previousTo), + websiteId, + }), + ]); const [currentSummary, previousSummary] = summary.value ?? [[], []]; const [currentErrors, previousErrors] = errors.value ?? [[], []]; const [currentRevenue, previousRevenue] = revenue.value ?? [[], []]; diff --git a/apps/insights/src/effects.ts b/apps/insights/src/effects.ts index 959cd14534..e0959e1927 100644 --- a/apps/insights/src/effects.ts +++ b/apps/insights/src/effects.ts @@ -20,7 +20,7 @@ import { type InsightSlackEffectPayload, } from "./delivery"; -interface InsightRunEffectInput { +export interface InsightRunEffectInput { effectKey: string; payload: InsightSlackEffectPayload; } @@ -185,6 +185,49 @@ export function prepareInsightRun( }); } +/** + * Persist effects as soon as an individual portfolio candidate is durable. + * This intentionally does not prepare the whole run: retries still need to + * finish the remaining frozen candidates before the run receives a terminal + * result. + */ +export function enqueueInsightRunEffects( + params: InsightRunIdentity & { effects: InsightRunEffectInput[] } +): Promise { + const effects = params.effects.map((effect) => ({ + ...effect, + id: randomUUIDv7(), + payload: insightSlackEffectPayloadSchema.parse(effect.payload), + })); + if (effects.length === 0) { + return Promise.resolve(); + } + return db.transaction(async (tx) => { + const [item] = await tx + .select({ id: insightRunItems.id }) + .from(insightRunItems) + .where(runIdentityCondition(params)) + .limit(1) + .for("update"); + if (!item) { + throw new Error("Insight run item not found while queuing effects"); + } + await tx + .insert(insightRunEffects) + .values( + effects.map((effect) => ({ + id: effect.id, + runItemId: params.itemId, + effectKey: effect.effectKey, + payload: effect.payload, + })) + ) + .onConflictDoNothing({ + target: [insightRunEffects.runItemId, insightRunEffects.effectKey], + }); + }); +} + function errorMessage(error: unknown): string { return (error instanceof Error ? error.message : String(error)).slice(0, 500); } @@ -301,6 +344,7 @@ export async function drainInsightRunEffects( let externalId: string | null; try { const payload = insightSlackEffectPayloadSchema.parse(effect.payload); + const channelId = payload.channelId ?? effect.effectKey; const [root] = payload.insightId ? await db .select({ externalId: insightRunEffects.externalId }) @@ -325,7 +369,7 @@ export async function drainInsightRunEffects( externalId = await (handlers.slack ?? deliverInsightSlackEffect)( payload, { - channelId: effect.effectKey, + channelId, organizationId: identity.organizationId, websiteId: identity.websiteId, }, diff --git a/apps/insights/src/funnel-detection.test.ts b/apps/insights/src/funnel-detection.test.ts index efbafced15..39ac5a16e0 100644 --- a/apps/insights/src/funnel-detection.test.ts +++ b/apps/insights/src/funnel-detection.test.ts @@ -345,9 +345,9 @@ describe("detectFunnelGoalSignals", () => { expected: undefined, }, { - name: "ignores dramatic funnel deltas caused by only a few completions", - current: funnelResult(0, 18_245), - previous: funnelResult(0.01, 19_516), + name: "ignores low-volume funnel completions without a zero-completion state", + current: funnelResult(0.01, 18_245, 1), + previous: funnelResult(0.01, 19_516, 2), expected: undefined, }, ] as const) { @@ -473,6 +473,256 @@ describe("detectFunnelGoalSignals", () => { ); const investigation = prepareInvestigation(signals[0], 7); expect(investigation.evidence[0]).toBe(signals[0]?.definitionEvidence); + expect(signals[0]?.subjectKey).toBeUndefined(); + }); + + it("reports a persistent zero-completion goal with its own stable subject", async () => { + let call = 0; + const [signal] = await detectFunnelGoalSignals( + PARAMS, + TODAY, + makeDeps({ + fetchGoals: async () => [GOAL], + goalConversion: async () => { + call += 1; + return call === 1 + ? goalResult(0, 0, 100) + : goalResult(0, 0, 120); + }, + }) + ); + + expect(signal).toMatchObject({ + current: 0, + baseline: 0, + direction: "down", + metric: "goal:g1", + severity: "warning", + subjectKey: "goal:g1:zero-completions", + }); + expect(signal?.definitionEvidence).toContain( + "completed for 0 of 100 observed website visitors, compared with 0 of 120 previously" + ); + const investigation = prepareInvestigation(signal, 7).signal; + expect(investigation).toMatchObject({ + entity: { id: "g1", type: "goal" }, + signalKey: "goal:g1:zero-completions", + sentiment: "negative", + }); + }); + + it("reports zero current goal completions below the usual WoW completion floor", async () => { + let call = 0; + const [signal] = await detectFunnelGoalSignals( + PARAMS, + TODAY, + makeDeps({ + fetchGoals: async () => [GOAL], + goalConversion: async () => { + call += 1; + return call === 1 + ? goalResult(0, 0, 100) + : goalResult(1.67, 2, 120); + }, + }) + ); + + expect(signal).toMatchObject({ + baseline: 1.67, + current: 0, + direction: "down", + subjectKey: "goal:g1:zero-completions", + }); + }); + + it("reports a persistent zero-completion funnel with its own stable subject", async () => { + let call = 0; + const [signal] = await detectFunnelGoalSignals( + PARAMS, + TODAY, + makeDeps({ + fetchFunnels: async () => [FUNNEL], + funnelConversion: async () => { + call += 1; + return call === 1 + ? funnelResult(0, 100, 0) + : funnelResult(0, 120, 0); + }, + }) + ); + + expect(signal).toMatchObject({ + direction: "down", + metric: "funnel:f1", + severity: "warning", + subjectKey: "funnel:f1:zero-completions", + }); + expect(signal?.definitionEvidence).toContain( + 'Funnel "Checkout" completed 0 of 100 entrants, compared with 0 of 120 previously' + ); + const investigation = prepareInvestigation(signal, 7).signal; + expect(investigation).toMatchObject({ + entity: { id: "f1", type: "funnel" }, + signalKey: "funnel:f1:zero-completions", + sentiment: "negative", + }); + }); + + it("does not report persistent zero completions below the conservative traffic floor", async () => { + let call = 0; + const signals = await detectFunnelGoalSignals( + PARAMS, + TODAY, + makeDeps({ + fetchGoals: async () => [GOAL], + goalConversion: async () => { + call += 1; + return call === 1 + ? goalResult(0, 0, 49) + : goalResult(0, 0, 120); + }, + }) + ); + + expect(signals).toEqual([]); + }); + + it("does not report persistent zero completions for a changed definition", async () => { + const changedGoal = { + ...GOAL, + updatedAt: new Date("2026-05-20T00:00:00.000Z"), + }; + const signals = await detectFunnelGoalSignals( + PARAMS, + TODAY, + makeDeps({ + fetchGoals: async () => [changedGoal], + goalConversion: async () => goalResult(0, 0, 100), + }) + ); + + expect(signals).toEqual([]); + }); + + it("remeasures persistent zero-completion goals without losing their state subject", async () => { + const prior = prepareInvestigation( + { + baseline: 0, + current: 0, + deltaPercent: 0, + detectedAt: "2026-05-21", + direction: "down", + entityLabel: "Signup", + label: 'Goal "Signup" has no completions', + method: "wow", + metric: "goal:g1", + severity: "warning", + subjectKey: "goal:g1:zero-completions", + }, + 7 + ).signal; + let call = 0; + const signal = await remeasureFunnelGoalSignal( + PARAMS, + prior, + TODAY, + makeDeps({ + fetchGoals: async () => [GOAL], + goalConversion: async () => { + call += 1; + return call === 1 + ? goalResult(0, 0, 100) + : goalResult(0, 0, 120); + }, + }) + ); + + expect(signal).toMatchObject({ + direction: "down", + metric: "goal:g1", + subjectKey: "goal:g1:zero-completions", + }); + }); + + it("remeasures a recovered zero-completion goal as positive", async () => { + const prior = prepareInvestigation( + { + baseline: 0, + current: 0, + deltaPercent: 0, + detectedAt: "2026-05-21", + direction: "down", + entityLabel: "Signup", + label: 'Goal "Signup" has no completions', + method: "wow", + metric: "goal:g1", + severity: "warning", + subjectKey: "goal:g1:zero-completions", + }, + 7 + ).signal; + let call = 0; + const signal = await remeasureFunnelGoalSignal( + PARAMS, + prior, + TODAY, + makeDeps({ + fetchGoals: async () => [GOAL], + goalConversion: async () => { + call += 1; + return call === 1 + ? goalResult(5, 5, 100) + : goalResult(0, 0, 120); + }, + }) + ); + + expect(signal).toMatchObject({ + current: 5, + direction: "up", + subjectKey: "goal:g1:zero-completions", + }); + expect(prepareInvestigation(signal!, 7).signal.sentiment).toBe("positive"); + }); + + it("remeasures persistent zero-completion funnels without losing their state subject", async () => { + const prior = prepareInvestigation( + { + baseline: 0, + current: 0, + deltaPercent: 0, + detectedAt: "2026-05-21", + direction: "down", + entityLabel: "Checkout", + label: 'Funnel "Checkout" has no completions', + method: "wow", + metric: "funnel:f1", + severity: "warning", + subjectKey: "funnel:f1:zero-completions", + }, + 7 + ).signal; + let call = 0; + const signal = await remeasureFunnelGoalSignal( + PARAMS, + prior, + TODAY, + makeDeps({ + fetchFunnels: async () => [FUNNEL], + funnelConversion: async () => { + call += 1; + return call === 1 + ? funnelResult(0, 100, 0) + : funnelResult(0, 120, 0); + }, + }) + ); + + expect(signal).toMatchObject({ + direction: "down", + metric: "funnel:f1", + subjectKey: "funnel:f1:zero-completions", + }); }); it("reports partial regressions without pre-classifying an action", async () => { diff --git a/apps/insights/src/funnel-detection.ts b/apps/insights/src/funnel-detection.ts index 7fbbcc668c..ae2d21270f 100644 --- a/apps/insights/src/funnel-detection.ts +++ b/apps/insights/src/funnel-detection.ts @@ -33,10 +33,18 @@ dayjs.extend(timezonePlugin); const CONVERSION_WOW_THRESHOLD = 20; const MIN_ENTRANTS = 30; const MIN_COMPLETIONS = 10; +/** + * A zero-completion condition is stronger than an ordinary rate movement, but + * it must still have enough traffic in both windows to distinguish a real + * configured-conversion failure from a sparse goal or funnel. + */ +const ZERO_COMPLETION_MIN_ENTRANTS = 50; const DEFINITION_QUERY_CONCURRENCY = 2; const DEFINITION_DETECTION_TIMEOUT_MS = 45_000; -const FUNNEL_SIGNAL_KEY = /^funnel:([^:]+)(?::step:(\d+))?$/; -const GOAL_SIGNAL_KEY = /^goal:([^:]+)$/; +const ZERO_COMPLETION_SUFFIX = "zero-completions"; +const FUNNEL_SIGNAL_KEY = + /^funnel:([^:]+)(?::step:(\d+)|:(zero-completions))?$/; +const GOAL_SIGNAL_KEY = /^goal:([^:]+)(?::(zero-completions))?$/; export interface FunnelDef { createdAt: Date; @@ -359,6 +367,83 @@ function definitionHistory( return `Definition history: created ${createdAt}; last updated ${updatedAt}; comparison started ${comparisonStart}.`; } +function hasZeroCompletionFailure( + current: ConversionResult, + previous: ConversionResult +): boolean { + return ( + current.completions === 0 && + current.entrants >= ZERO_COMPLETION_MIN_ENTRANTS && + previous.entrants >= ZERO_COMPLETION_MIN_ENTRANTS + ); +} + +function hasMeaningfulConversionChange( + current: ConversionResult, + previous: ConversionResult +): boolean { + return ( + current.entrants >= MIN_ENTRANTS && + previous.entrants >= MIN_ENTRANTS && + Math.max(current.completions, previous.completions) >= MIN_COMPLETIONS && + previous.rate > 0 && + Math.abs(safeDeltaPercent(current.rate, previous.rate)) >= + CONVERSION_WOW_THRESHOLD + ); +} + +function goalZeroCompletionSignal(params: { + current: ConversionResult; + currentTo: string; + goal: GoalDef; + previous: ConversionResult; + previousFrom: string; + timezone: string; +}): DetectedSignal { + const signal = makeWowSignal( + `goal:${params.goal.id}`, + `Goal "${params.goal.name}" has no completions`, + params.current.rate, + params.previous.rate, + params.currentTo, + { round: true } + ); + // A persistent zero has no percentage movement, but remains a negative + // configured-conversion condition while there are eligible visitors. + signal.direction = "down"; + signal.severity = "warning"; + signal.subjectKey = `goal:${params.goal.id}:${ZERO_COMPLETION_SUFFIX}`; + signal.entityLabel = params.goal.name; + signal.definitionEvidence = `Goal "${params.goal.name}" tracks the ${params.goal.type} target "${params.goal.target}". It completed for 0 of ${params.current.entrants} observed website visitors, compared with ${params.previous.completions} of ${params.previous.entrants} previously. ${definitionHistory(params.goal, params.previousFrom, params.timezone)} ${definitionDescription(params.goal.description)} ${definitionFilters(params.goal.filters)}`; + return signal; +} + +function funnelZeroCompletionSignal(params: { + current: ConversionResult; + currentTo: string; + funnel: FunnelDef; + previous: ConversionResult; + previousFrom: string; + timezone: string; +}): DetectedSignal { + const signal = makeWowSignal( + `funnel:${params.funnel.id}`, + `Funnel "${params.funnel.name}" has no completions`, + params.current.rate, + params.previous.rate, + params.currentTo, + { round: true } + ); + // A persistent zero has no percentage movement, but remains a negative + // configured-conversion condition while there are eligible entrants. + signal.direction = "down"; + signal.severity = "warning"; + signal.subjectKey = `funnel:${params.funnel.id}:${ZERO_COMPLETION_SUFFIX}`; + signal.entityLabel = params.funnel.name; + signal.definitionEvidence = `Funnel "${params.funnel.name}" completed 0 of ${params.current.entrants} entrants, compared with ${params.previous.completions} of ${params.previous.entrants} previously. ${definitionHistory(params.funnel, params.previousFrom, params.timezone)} ${definitionDescription(params.funnel.description)} ${definitionFilters(params.funnel.filters)}`; + return signal; +} + function handleDefinitionFailure( error: unknown, signal: AbortSignal, @@ -402,6 +487,8 @@ export async function remeasureFunnelGoalSignal( } const definitionId = goalMatch?.[1] ?? funnelMatch?.[1] ?? "unknown"; const definitionType = goalMatch ? "goal" : "funnel"; + const isZeroCompletionGoal = goalMatch?.[2] === ZERO_COMPLETION_SUFFIX; + const isZeroCompletionFunnel = funnelMatch?.[3] === ZERO_COMPLETION_SUFFIX; const activeDeps = deps ?? defaultFunnelGoalDeps(params.websiteId, today.toDate()); const window = wowWindow(today, params.lookbackDays); @@ -425,18 +512,32 @@ export async function remeasureFunnelGoalSignal( activeDeps.goalConversion(goal, current, abortSignal), activeDeps.goalConversion(goal, previous, abortSignal), ]); - const signal = makeWowSignal( - `goal:${goal.id}`, - `Goal "${goal.name}" completion rate`, - cur.rate, - prev.rate, - current.to, - { round: true } - ); + const signal = + isZeroCompletionGoal && cur.completions === 0 && cur.entrants > 0 + ? goalZeroCompletionSignal({ + current: cur, + currentTo: current.to, + goal, + previous: prev, + previousFrom: previous.from, + timezone: params.timezone, + }) + : makeWowSignal( + `goal:${goal.id}`, + `Goal "${goal.name}" completion rate`, + cur.rate, + prev.rate, + current.to, + { round: true } + ); signal.subjectKey = prior.signalKey; signal.entityLabel = goal.name; const state = inactiveDefinitionEvidence(goal, "goal"); - signal.definitionEvidence = `${state ? `${state} ` : ""}Goal "${goal.name}" tracks the ${goal.type} target "${goal.target}". It completed for ${cur.completions} of ${cur.entrants} observed website visitors, compared with ${prev.completions} previously. ${definitionHistory(goal, previous.from, params.timezone)} ${definitionDescription(goal.description)} ${definitionFilters(goal.filters)}`; + if (isZeroCompletionGoal && cur.completions === 0 && cur.entrants > 0) { + signal.definitionEvidence = `${state ? `${state} ` : ""}${signal.definitionEvidence}`; + } else { + signal.definitionEvidence = `${state ? `${state} ` : ""}Goal "${goal.name}" tracks the ${goal.type} target "${goal.target}". It completed for ${cur.completions} of ${cur.entrants} observed website visitors, compared with ${prev.completions} previously. ${definitionHistory(goal, previous.from, params.timezone)} ${definitionDescription(goal.description)} ${definitionFilters(goal.filters)}`; + } return signal; } @@ -478,23 +579,37 @@ export async function remeasureFunnelGoalSignal( const label = currentStep ? `Funnel "${funnel.name}" step "${currentStep.name}" conversion` : `Funnel "${funnel.name}" conversion`; - const signal = makeWowSignal( - `funnel:${funnel.id}`, - label, - currentStep?.rate ?? cur.rate, - previousStep?.rate ?? prev.rate, - current.to, - { round: true } - ); + const signal = + isZeroCompletionFunnel && cur.completions === 0 && cur.entrants > 0 + ? funnelZeroCompletionSignal({ + current: cur, + currentTo: current.to, + funnel, + previous: prev, + previousFrom: previous.from, + timezone: params.timezone, + }) + : makeWowSignal( + `funnel:${funnel.id}`, + label, + currentStep?.rate ?? cur.rate, + previousStep?.rate ?? prev.rate, + current.to, + { round: true } + ); signal.subjectKey = prior.signalKey; signal.entityLabel = currentStep ? `${funnel.name} → ${currentStep.name}` : funnel.name; const state = inactiveDefinitionEvidence(funnel, "funnel"); - const measurementEvidence = currentStep - ? `Step ${currentStep.number} "${currentStep.name}" converted ${currentStep.rate}% of visitors reaching it, compared with ${previousStep?.rate}% previously. Funnel "${funnel.name}" converted ${cur.completions} of ${cur.entrants} entrants, compared with ${prev.completions} previously. ${definitionHistory(funnel, previous.from, params.timezone)} ${definitionDescription(funnel.description)} ${definitionFilters(funnel.filters)}` - : `Funnel "${funnel.name}" converted ${cur.completions} of ${cur.entrants} entrants, compared with ${prev.completions} previously. ${definitionHistory(funnel, previous.from, params.timezone)} ${definitionDescription(funnel.description)} ${definitionFilters(funnel.filters)}`; - signal.definitionEvidence = `${state ? `${state} ` : ""}${measurementEvidence}`; + if (isZeroCompletionFunnel && cur.completions === 0 && cur.entrants > 0) { + signal.definitionEvidence = `${state ? `${state} ` : ""}${signal.definitionEvidence}`; + } else { + const measurementEvidence = currentStep + ? `Step ${currentStep.number} "${currentStep.name}" converted ${currentStep.rate}% of visitors reaching it, compared with ${previousStep?.rate}% previously. Funnel "${funnel.name}" converted ${cur.completions} of ${cur.entrants} entrants, compared with ${prev.completions} previously. ${definitionHistory(funnel, previous.from, params.timezone)} ${definitionDescription(funnel.description)} ${definitionFilters(funnel.filters)}` + : `Funnel "${funnel.name}" converted ${cur.completions} of ${cur.entrants} entrants, compared with ${prev.completions} previously. ${definitionHistory(funnel, previous.from, params.timezone)} ${definitionDescription(funnel.description)} ${definitionFilters(funnel.filters)}`; + signal.definitionEvidence = `${state ? `${state} ` : ""}${measurementEvidence}`; + } return signal; } catch (error) { return handleDefinitionFailure( @@ -541,11 +656,73 @@ export function detectFunnelGoalSignals( activeDeps.fetchGoals(), ]); - const funnelSignals = await mapWithConcurrency( - funnels, + const definitions: Array< + | { definition: FunnelDef; type: "funnel" } + | { definition: GoalDef; type: "goal" } + > = []; + for ( + let index = 0; + index < Math.max(funnels.length, goalDefs.length); + index += 1 + ) { + const funnel = funnels[index]; + const goal = goalDefs[index]; + if (funnel) { + definitions.push({ definition: funnel, type: "funnel" }); + } + if (goal) { + definitions.push({ definition: goal, type: "goal" }); + } + } + + const signals = await mapWithConcurrency( + definitions, DEFINITION_QUERY_CONCURRENCY, - async (funnel) => { + async ({ definition, type }) => { try { + if (type === "goal") { + const goal = definition; + if ( + !definitionPredatesComparison( + goal, + previous.from, + params.timezone + ) + ) { + return null; + } + const [cur, prev] = await Promise.all([ + activeDeps.goalConversion(goal, current, deadlineSignal), + activeDeps.goalConversion(goal, previous, deadlineSignal), + ]); + if (!hasMeaningfulConversionChange(cur, prev)) { + return hasZeroCompletionFailure(cur, prev) + ? goalZeroCompletionSignal({ + current: cur, + currentTo: current.to, + goal, + previous: prev, + previousFrom: previous.from, + timezone: params.timezone, + }) + : null; + } + const signal = makeWowSignal( + `goal:${goal.id}`, + `Goal "${goal.name}" completion rate`, + cur.rate, + prev.rate, + current.to, + { round: true } + ); + signal.entityLabel = goal.name; + return { + ...signal, + definitionEvidence: `Goal "${goal.name}" tracks the ${goal.type} target "${goal.target}". It completed for ${cur.completions} of ${cur.entrants} observed website visitors, compared with ${prev.completions} previously. ${definitionHistory(goal, previous.from, params.timezone)} ${definitionDescription(goal.description)} ${definitionFilters(goal.filters)}`, + }; + } + + const funnel = definition; if ( !definitionPredatesComparison( funnel, @@ -559,19 +736,17 @@ export function detectFunnelGoalSignals( activeDeps.funnelConversion(funnel, current, deadlineSignal), activeDeps.funnelConversion(funnel, previous, deadlineSignal), ]); - if ( - cur.entrants < MIN_ENTRANTS || - prev.entrants < MIN_ENTRANTS || - Math.max(cur.completions, prev.completions) < MIN_COMPLETIONS || - prev.rate <= 0 - ) { - return null; - } - if ( - Math.abs(safeDeltaPercent(cur.rate, prev.rate)) < - CONVERSION_WOW_THRESHOLD - ) { - return null; + if (!hasMeaningfulConversionChange(cur, prev)) { + return hasZeroCompletionFailure(cur, prev) + ? funnelZeroCompletionSignal({ + current: cur, + currentTo: current.to, + funnel, + previous: prev, + previousFrom: previous.from, + timezone: params.timezone, + }) + : null; } const signal = makeWowSignal( `funnel:${funnel.id}`, @@ -611,61 +786,8 @@ export function detectFunnelGoalSignals( return signal; } catch (error) { return handleDefinitionFailure(error, deadlineSignal, { - definitionId: funnel.id, - definitionType: "funnel", - diagnostics: options.diagnostics, - websiteId: params.websiteId, - }); - } - }, - deadlineSignal - ); - - const goalSignals = await mapWithConcurrency( - goalDefs, - DEFINITION_QUERY_CONCURRENCY, - async (goal) => { - try { - if ( - !definitionPredatesComparison(goal, previous.from, params.timezone) - ) { - return null; - } - const [cur, prev] = await Promise.all([ - activeDeps.goalConversion(goal, current, deadlineSignal), - activeDeps.goalConversion(goal, previous, deadlineSignal), - ]); - if ( - cur.entrants < MIN_ENTRANTS || - prev.entrants < MIN_ENTRANTS || - Math.max(cur.completions, prev.completions) < MIN_COMPLETIONS || - prev.rate <= 0 - ) { - return null; - } - if ( - Math.abs(safeDeltaPercent(cur.rate, prev.rate)) < - CONVERSION_WOW_THRESHOLD - ) { - return null; - } - const signal = makeWowSignal( - `goal:${goal.id}`, - `Goal "${goal.name}" completion rate`, - cur.rate, - prev.rate, - current.to, - { round: true } - ); - signal.entityLabel = goal.name; - return { - ...signal, - definitionEvidence: `Goal "${goal.name}" tracks the ${goal.type} target "${goal.target}". It completed for ${cur.completions} of ${cur.entrants} observed website visitors, compared with ${prev.completions} previously. ${definitionHistory(goal, previous.from, params.timezone)} ${definitionDescription(goal.description)} ${definitionFilters(goal.filters)}`, - }; - } catch (error) { - return handleDefinitionFailure(error, deadlineSignal, { - definitionId: goal.id, - definitionType: "goal", + definitionId: definition.id, + definitionType: type, diagnostics: options.diagnostics, websiteId: params.websiteId, }); @@ -674,8 +796,6 @@ export function detectFunnelGoalSignals( deadlineSignal ); - return [...funnelSignals, ...goalSignals].filter( - (signal) => signal !== null - ); + return signals.filter((signal) => signal !== null); }, options.timeoutMs ?? DEFINITION_DETECTION_TIMEOUT_MS); } diff --git a/apps/insights/src/generation-sources.test.ts b/apps/insights/src/generation-sources.test.ts index 7b4c941a85..19cb0f74be 100644 --- a/apps/insights/src/generation-sources.test.ts +++ b/apps/insights/src/generation-sources.test.ts @@ -4,6 +4,7 @@ import type { InvestigationOutcome } from "@databuddy/shared/insights"; import type { DetectedSignal } from "./detection"; import { type InvestigationSources, + investigateWebsitePortfolioWithSources, investigateWebsiteWithSources, resolveInvestigationAsOf, } from "./generation"; @@ -32,6 +33,25 @@ const revenueIncrease: DetectedSignal = { severity: "info", }; +const measurementCoverage: DetectedSignal = { + baseline: 0, + current: 0, + deltaPercent: 0, + detectedAt: "2026-07-11", + direction: "up", + label: "Conversion measurement coverage is missing", + measurementCandidate: { + basis: "observed_custom_event", + kind: "event_goal_candidate", + target: "signup_completed", + type: "EVENT", + }, + method: "wow", + metric: "measurement_coverage", + severity: "info", + subjectKey: "measurement:conversion-coverage", +}; + const fixtureInput: Parameters[0] = { asOf: "2026-07-12", domain: "example.com", @@ -48,7 +68,9 @@ function fixtureSources( }; return { detectDefinitionSignals: unexpected, + detectMeasurementRecommendationSignals: async () => [], detectMetricSignals: unexpected, + detectRouteHealthSignals: async () => [], fetchAnnotations: unexpected, investigateSignal: unexpected, loadDueInvestigation: unexpected, @@ -73,6 +95,164 @@ function investigateFixture( } describe("fixture investigation sources", () => { + it("turns a manual full scan into a bounded portfolio of distinct exact-signal investigations", async () => { + const seen: Array<{ related: string[]; signal: string }> = []; + const routeError: DetectedSignal = { + ...trafficDrop, + baseline: 23, + current: 36, + deltaPercent: 56.52, + direction: "up", + entityId: "/explore", + entityLabel: "Route /explore", + label: "Errors on /explore", + metric: "error_count", + severity: "warning", + subjectKey: "route:error:/explore", + }; + const checkoutGoal: DetectedSignal = { + ...trafficDrop, + label: "Checkout completion rate", + metric: "goal:checkout", + severity: "warning", + subjectKey: "goal:checkout", + }; + const outcome: InvestigationOutcome = { + evidence: ["The selected signal was measured in the comparison window."], + impact: null, + next: { reason: "No action is required in this fixture.", type: "resolve" }, + rootCause: null, + summary: "The selected signal changed in the comparison window.", + title: "Measured signal", + }; + const sources = fixtureSources({ + detectDefinitionSignals: async () => [checkoutGoal], + detectMetricSignals: async () => [routeError, trafficDrop], + fetchAnnotations: async () => [], + investigateSignal: async (input) => { + seen.push({ + related: input.relatedSignals?.map((signal) => signal.signalKey) ?? [], + signal: input.signal.signalKey, + }); + return { outcome, toolCallCount: 1 }; + }, + loadDueInvestigation: async () => null, + loadHistory: async () => [], + loadObservations: async () => new Map(), + }); + + const artifacts = await investigateWebsitePortfolioWithSources( + { ...fixtureInput, forceRecheck: true }, + sources, + "manual" + ); + + expect(artifacts).toHaveLength(3); + expect(seen.map((item) => item.signal)).toEqual([ + "goal:checkout", + "route:error:/explore", + "visitors", + ]); + expect(seen.every((item) => item.related.length === 2)).toBe(true); + }); + + it("finishes sibling candidates before retrying a failed agent candidate", async () => { + const attempted: string[] = []; + const failedGoal: DetectedSignal = { + ...trafficDrop, + label: "Checkout completion rate", + metric: "goal:checkout", + severity: "critical", + subjectKey: "goal:checkout", + }; + const routeError: DetectedSignal = { + ...trafficDrop, + baseline: 10, + current: 30, + deltaPercent: 200, + direction: "up", + entityId: "/explore", + entityLabel: "Route /explore", + label: "Errors on /explore", + metric: "error_count", + severity: "warning", + subjectKey: "route:error:/explore", + }; + const outcome: InvestigationOutcome = { + evidence: ["The selected signal was measured in the comparison window."], + impact: null, + next: { reason: "No action is required in this fixture.", type: "resolve" }, + rootCause: null, + summary: "The selected signal changed in the comparison window.", + title: "Measured signal", + }; + const sources = fixtureSources({ + detectDefinitionSignals: async () => [failedGoal], + detectMetricSignals: async () => [routeError, trafficDrop], + fetchAnnotations: async () => [], + investigateSignal: async (input) => { + attempted.push(input.signal.signalKey); + if (input.signal.signalKey === failedGoal.subjectKey) { + throw new Error("Model returned malformed structured output"); + } + return { outcome, toolCallCount: 1 }; + }, + loadDueInvestigation: async () => null, + loadHistory: async () => [], + loadObservations: async () => new Map(), + }); + + await expect( + investigateWebsitePortfolioWithSources( + { ...fixtureInput, forceRecheck: true }, + sources, + "manual" + ) + ).rejects.toThrow("Model returned malformed structured output"); + expect(attempted).toEqual([ + "goal:checkout", + "route:error:/explore", + "visitors", + ]); + }); + + it("stops a portfolio immediately when a durable context dependency fails", async () => { + const attempted: string[] = []; + const annotationCalls: string[] = []; + const failedGoal: DetectedSignal = { + ...trafficDrop, + label: "Checkout completion rate", + metric: "goal:checkout", + severity: "critical", + subjectKey: "goal:checkout", + }; + const sources = fixtureSources({ + detectDefinitionSignals: async () => [failedGoal], + detectMetricSignals: async () => [trafficDrop], + fetchAnnotations: async (_websiteId, signal) => { + annotationCalls.push(signal.signalKey); + throw new Error("Annotation storage unavailable"); + }, + investigateSignal: async (input) => { + attempted.push(input.signal.signalKey); + throw new Error("This agent should not run"); + }, + loadDueInvestigation: async () => null, + loadHistory: async () => [], + loadObservations: async () => new Map(), + }); + + await expect( + investigateWebsitePortfolioWithSources( + { ...fixtureInput, forceRecheck: true }, + sources, + "manual" + ) + ).rejects.toThrow("Annotation storage unavailable"); + expect(annotationCalls).toEqual(["goal:checkout"]); + expect(attempted).toEqual([]); + }); + it("resolves a date-only run to one exact instant in the website timezone", () => { expect(resolveInvestigationAsOf("2026-07-12", "Asia/Hebron")).toEqual( new Date("2026-07-11T21:00:00.000Z") @@ -110,6 +290,10 @@ describe("fixture investigation sources", () => { calls.push("definition detection"); return []; }, + detectMeasurementRecommendationSignals: async () => { + calls.push("measurement recommendation detection"); + return [measurementCoverage]; + }, loadObservations: async () => { calls.push("observations"); return new Map(); @@ -175,7 +359,10 @@ describe("fixture investigation sources", () => { owner: "databuddy-analytics", repo: "app", }); - expect(receivedRelatedMetrics).toEqual(["revenue"]); + expect(receivedRelatedMetrics).toEqual([ + "revenue", + "measurement:conversion-coverage", + ]); expect(calls.sort()).toEqual( [ "agent:visitors", @@ -183,6 +370,7 @@ describe("fixture investigation sources", () => { "definition detection", "due investigation", "history", + "measurement recommendation detection", "metric detection", "observations", "other open work", @@ -190,7 +378,61 @@ describe("fixture investigation sources", () => { ); }); - it("defers an incomplete scan without retrying or reading evidence", async () => { + it("pins a worker to its planned signal while preserving sibling context", async () => { + let selectedSignal: string | undefined; + let relatedSignals: string[] = []; + const sources = fixtureSources({ + loadDueInvestigation: async () => null, + detectDefinitionSignals: async () => [], + detectMetricSignals: async () => [trafficDrop, revenueIncrease], + fetchAnnotations: async () => [], + investigateSignal: async (input) => { + selectedSignal = input.signal.signalKey; + relatedSignals = input.relatedSignals?.map((signal) => signal.signalKey) ?? []; + return { + outcome: { + evidence: ["Revenue increased in the comparison window."], + impact: null, + next: { + reason: "The change does not require corrective work.", + type: "resolve", + }, + publish: true, + rootCause: null, + summary: "Revenue increased from 100 to 140.", + title: "Revenue improved", + }, + toolCallCount: 1, + }; + }, + loadHistory: async () => [], + loadObservations: async () => new Map(), + }); + + const artifact = await investigateFixture(sources, { + forceRecheck: true, + selectedSignalKey: "revenue", + }); + + expect(selectedSignal).toBe("revenue"); + expect(relatedSignals).toEqual(["visitors"]); + expect(artifact.signal?.signalKey).toBe("revenue"); + }); + + it("does not silently fall back when a planned signal is no longer eligible", async () => { + const sources = fixtureSources({ + loadDueInvestigation: async () => null, + detectDefinitionSignals: async () => [], + detectMetricSignals: async () => [trafficDrop], + loadObservations: async () => new Map(), + }); + + await expect( + investigateFixture(sources, { selectedSignalKey: "revenue" }) + ).rejects.toThrow("Selected investigation signal is no longer eligible"); + }); + + it("retries an incomplete scan before reading evidence", async () => { const calls: string[] = []; const sources = fixtureSources({ loadDueInvestigation: async () => null, @@ -216,18 +458,67 @@ describe("fixture investigation sources", () => { }, }); - const artifact = await investigateFixture(sources); - - expect(artifact).toMatchObject({ - outcome: null, - signal: null, - status: "deferred", - }); + await expect(investigateFixture(sources)).rejects.toThrow( + "Insight detection was incomplete" + ); expect(calls.sort()).toEqual( ["definition detection", "metric detection"].sort() ); }); + it("propagates a failed measurement recommendation scan", async () => { + const sources = fixtureSources({ + detectDefinitionSignals: async () => [], + detectMeasurementRecommendationSignals: async () => { + throw new Error("Measurement telemetry unavailable"); + }, + detectMetricSignals: async () => [], + loadDueInvestigation: async () => null, + }); + + await expect(investigateFixture(sources)).rejects.toThrow( + "Measurement telemetry unavailable" + ); + }); + + it("passes the detector's safe measurement candidate to the agent", async () => { + let candidate: unknown; + const sources = fixtureSources({ + detectDefinitionSignals: async () => [], + detectMeasurementRecommendationSignals: async () => [measurementCoverage], + detectMetricSignals: async () => [], + fetchAnnotations: async () => [], + investigateSignal: async (input) => { + candidate = input.measurementCandidate; + return { + outcome: { + evidence: ["A completion event was observed."], + impact: null, + next: { + reason: "The measurement draft is ready for review.", + type: "resolve", + }, + publish: true, + rootCause: null, + summary: "Conversion measurement is not configured.", + title: "Conversion measurement is missing", + }, + toolCallCount: 0, + }; + }, + loadDueInvestigation: async () => null, + loadHistory: async () => [], + loadObservations: async () => new Map(), + }); + + const artifact = await investigateFixture(sources); + + expect(artifact.signal?.signalKey).toBe( + "measurement:conversion-coverage" + ); + expect(candidate).toEqual(measurementCoverage.measurementCandidate); + }); + it("investigates an informational change for the brief", async () => { let investigated: string | undefined; const sources = fixtureSources({ @@ -303,7 +594,7 @@ describe("fixture investigation sources", () => { }); }); - it("keeps definition work when metric detection fails", async () => { + it("retries instead of freezing definition work from a partial scan", async () => { const goalDrop = { ...trafficDrop, label: "Checkout goal", @@ -336,10 +627,48 @@ describe("fixture investigation sources", () => { loadObservations: async () => new Map(), }); - const artifact = await investigateFixture(sources); + await expect(investigateFixture(sources)).rejects.toThrow( + "Metric detection unavailable" + ); + expect(investigated).toBeUndefined(); + }); - expect(artifact.status).toBe("completed"); - expect(investigated).toBe("goal:checkout"); + it("does not run a pinned signal from a partial scan", async () => { + const nonPriority = { + ...trafficDrop, + metric: "bounce_rate", + severity: "info" as const, + }; + let investigated: string | undefined; + const sources = fixtureSources({ + detectDefinitionSignals: async () => [nonPriority], + detectMetricSignals: async () => { + throw new Error("Metric detection unavailable"); + }, + fetchAnnotations: async () => [], + investigateSignal: async (input) => { + investigated = input.signal.signalKey; + return { + outcome: { + evidence: ["Bounce rate changed."], + impact: null, + next: { reason: "No action is needed.", type: "resolve" }, + rootCause: null, + summary: "Bounce rate changed.", + title: "Bounce rate changed", + }, + toolCallCount: 1, + }; + }, + loadDueInvestigation: async () => null, + loadHistory: async () => [], + loadObservations: async () => new Map(), + }); + + await expect( + investigateFixture(sources, { selectedSignalKey: "bounce_rate" }) + ).rejects.toThrow("Metric detection unavailable"); + expect(investigated).toBeUndefined(); }); it("investigates informational direct regressions and still-bad vitals", async () => { @@ -505,9 +834,7 @@ describe("fixture investigation sources", () => { }, ], detectDefinitionSignals: async () => [], - detectMetricSignals: async () => { - throw new Error("Fresh metric scan unavailable"); - }, + detectMetricSignals: async () => [], loadObservations: async () => new Map(), remeasureSignal: async (_params, signal) => { expect(signal.signalKey).toBe(prior.signal.signalKey); @@ -525,7 +852,7 @@ describe("fixture investigation sources", () => { expect(historicalWindow?.to).toBe("2026-07-11"); }); - it("does not let failed due remeasurement starve new work", async () => { + it("retries when due remeasurement makes the scan incomplete", async () => { const prior = prepareInvestigation(trafficDrop, 7); const outcome: InvestigationOutcome = { evidence: ["Revenue fell in the newest complete week."], @@ -562,12 +889,10 @@ describe("fixture investigation sources", () => { }, }); - const artifact = await investigateFixture(sources, { - asOf: "2026-07-19", - }); - - expect(artifact.status).toBe("completed"); - expect(investigated).toBe("revenue"); + await expect( + investigateFixture(sources, { asOf: "2026-07-19" }) + ).rejects.toThrow("Due remeasurement unavailable"); + expect(investigated).toBeUndefined(); }); it("retries when a failed due recheck leaves no actionable work", async () => { diff --git a/apps/insights/src/generation.ts b/apps/insights/src/generation.ts index 29aed43c19..b9bac30f58 100644 --- a/apps/insights/src/generation.ts +++ b/apps/insights/src/generation.ts @@ -29,6 +29,12 @@ import { type FunnelGoalDetectionDiagnostics, remeasureFunnelGoalSignal, } from "./funnel-detection"; +import { detectMeasurementRecommendationSignals } from "./measurement-recommendation-detection"; +import { + detectRouteHealthSignals, + remeasureRouteHealthSignal, + type RouteHealthDetectionDeps, +} from "./route-health-detection"; import { type InvestigationAnnotation, isDirectSignal, @@ -40,7 +46,7 @@ import { } from "./investigation"; import { eligibleSignalsForInvestigation, - findRunObservation, + findRunObservations, type DueOpenInvestigation, type LatestInsightObservation, loadDueOpenInvestigation, @@ -51,11 +57,18 @@ import { } from "./observations"; import { drainInsightRunEffects, + enqueueInsightRunEffects, loadPreparedInsightRun, prepareInsightRun, } from "./effects"; import type { InsightAgentInput, InsightAgentResult } from "./agent"; import { runInsightAgent } from "./agent"; +import { + freezeInsightRunCandidatePlan, + loadInsightRunCandidatePlan, + type PlannedInvestigationCandidate, +} from "./run-candidate-plan"; +import { planCoveragePortfolio } from "./coverage-planner"; import type { WebsiteInvestigation } from "./persistence"; import { isVisibleInvestigation, persistInvestigation } from "./persistence"; import { @@ -90,6 +103,8 @@ interface InvestigateWebsiteInput { githubRepository?: { owner: string; repo: string } | null; name?: string | null; organizationId: string; + /** Pins a worker to a preplanned eligible signal without hiding its sibling context. */ + selectedSignalKey?: string; timezone: string; userId?: string; websiteId: string; @@ -120,7 +135,9 @@ interface InvestigationRuntime { export interface InvestigationSources { detectDefinitionSignals: typeof detectFunnelGoalSignals; + detectMeasurementRecommendationSignals: typeof detectMeasurementRecommendationSignals; detectMetricSignals: typeof detectSignals; + detectRouteHealthSignals: typeof detectRouteHealthSignals; fetchAnnotations: ( websiteId: string, signal: InvestigationSignal, @@ -157,6 +174,7 @@ export function remeasureStoredSignal( dependencies: { funnelGoal?: FunnelGoalDeps; query?: Parameters[2]; + routeHealth?: RouteHealthDetectionDeps; } = {} ): Promise { return prior.signalKey.startsWith("goal:") || @@ -168,13 +186,21 @@ export function remeasureStoredSignal( dependencies.funnelGoal, abortSignal ) - : remeasureMetricSignal( - params, - prior, - dependencies.query, - today, - abortSignal - ); + : prior.signalKey.startsWith("route:") + ? remeasureRouteHealthSignal( + params, + prior, + today, + dependencies.routeHealth, + abortSignal + ) + : remeasureMetricSignal( + params, + prior, + dependencies.query, + today, + abortSignal + ); } function normalizeAsOf(asOf: Date | string, timezone: string): dayjs.Dayjs { @@ -273,7 +299,9 @@ export async function refreshInvestigationSignal(params: { const productionInvestigationSources: InvestigationSources = { detectDefinitionSignals: detectFunnelGoalSignals, + detectMeasurementRecommendationSignals, detectMetricSignals: detectSignals, + detectRouteHealthSignals, fetchAnnotations: fetchSignalAnnotations, investigateSignal: runInsightAgent, loadDueInvestigation: loadDueOpenInvestigation, @@ -283,10 +311,60 @@ const productionInvestigationSources: InvestigationSources = { remeasureSignal: remeasureStoredSignal, }; -async function investigateWebsiteCore( +interface WebsiteSignalDiscovery { + asOf: dayjs.Dayjs; + detectedSignals: DetectedSignal[]; + dueSignalKey: string | null; + eligibleSignals: DetectedSignal[]; + prioritySignal: DetectedSignal | null; +} + +type WebsiteDiscoveryResult = + | { artifact: WebsiteInvestigationArtifact; kind: "empty" } + | { kind: "signals"; value: WebsiteSignalDiscovery }; + +/** + * Only a model investigation is safe to defer to the rest of a frozen + * portfolio. Context, persistence, and billing failures still stop the run: + * continuing after one of those could make its durable state inconsistent. + */ +class CandidateInvestigationError extends Error { + constructor(error: unknown) { + super(error instanceof Error ? error.message : String(error)); + this.name = "CandidateInvestigationError"; + } +} + +function toPlannedCandidate( + detectedSignal: DetectedSignal +): PlannedInvestigationCandidate { + const investigation = prepareInvestigation( + detectedSignal, + INSIGHT_LOOKBACK_DAYS + ); + return { + evidence: investigation.evidence, + ...(investigation.measurementCandidate + ? { measurementCandidate: investigation.measurementCandidate } + : {}), + signal: investigation.signal, + }; +} + +function annotationEvidence(rows: InvestigationAnnotation[]): string | null { + if (rows.length === 0) { + return null; + } + const value = `Annotation: ${rows + .map((annotation) => `${annotation.date}: ${annotation.title}`) + .join("; ")}`; + return value.length <= 500 ? value : `${value.slice(0, 499).trimEnd()}…`; +} + +async function discoverWebsiteSignals( input: InvestigateWebsiteInput, runtime: InvestigationRuntime -): Promise { +): Promise { const startedAt = performance.now(); const asOf = normalizeAsOf(input.asOf, input.timezone); const detectParams = { @@ -304,66 +382,71 @@ async function investigateWebsiteCore( const definitionDiagnostics: FunnelGoalDetectionDiagnostics = { failedDefinitions: 0, }; - const [dueResult, metricResult, definitionResult] = await Promise.allSettled([ + async function detectSource( + family: string, + work: () => Promise + ): Promise { + try { + return await work(); + } catch (error) { + if (runtime.mode === "production") { + captureInsightsError(error, "generation.detection.source_failed", { + family, + organization_id: input.organizationId, + website_id: input.websiteId, + }); + } + throw error; + } + } + const [ + remeasuredDue, + metricSignals, + funnelGoalSignals, + measurementRecommendationSignals, + routeHealthSignals, + ] = await Promise.all([ due - ? runtime.sources.remeasureSignal( - detectParams, - due.signal, - asOf, - detectionAbortSignal + ? detectSource("recheck", () => + runtime.sources.remeasureSignal( + detectParams, + due.signal, + asOf, + detectionAbortSignal + ) ) : Promise.resolve(null), - runtime.sources.detectMetricSignals( - detectParams, - undefined, - asOf, - detectionAbortSignal, - metricDiagnostics + detectSource("metrics", () => + runtime.sources.detectMetricSignals( + detectParams, + undefined, + asOf, + detectionAbortSignal, + metricDiagnostics + ) + ), + detectSource("definitions", () => + runtime.sources.detectDefinitionSignals(detectParams, asOf, undefined, { + diagnostics: definitionDiagnostics, + }) + ), + detectSource("measurement_recommendations", () => + runtime.sources.detectMeasurementRecommendationSignals( + detectParams, + asOf, + undefined, + detectionAbortSignal + ) + ), + detectSource("route_health", () => + runtime.sources.detectRouteHealthSignals( + detectParams, + asOf, + undefined, + detectionAbortSignal + ) ), - runtime.sources.detectDefinitionSignals(detectParams, asOf, undefined, { - diagnostics: definitionDiagnostics, - }), ]); - const remeasuredDue = - dueResult.status === "fulfilled" ? dueResult.value : null; - const metricSignals = - metricResult.status === "fulfilled" ? metricResult.value : []; - const funnelGoalSignals = - definitionResult.status === "fulfilled" ? definitionResult.value : []; - const failedSources: Array<{ family: string; reason: unknown }> = []; - if (dueResult.status === "rejected") { - failedSources.push({ family: "recheck", reason: dueResult.reason }); - } - if (metricResult.status === "rejected") { - metricDiagnostics.failedFamilies = Math.max( - 1, - metricDiagnostics.failedFamilies - ); - failedSources.push({ family: "metrics", reason: metricResult.reason }); - } - if (definitionResult.status === "rejected") { - definitionDiagnostics.failedDefinitions = Math.max( - 1, - definitionDiagnostics.failedDefinitions - ); - failedSources.push({ - family: "definitions", - reason: definitionResult.reason, - }); - } - if (runtime.mode === "production") { - for (const failure of failedSources) { - captureInsightsError( - failure.reason, - "generation.detection.source_failed", - { - family: failure.family, - organization_id: input.organizationId, - website_id: input.websiteId, - } - ); - } - } if ( due && remeasuredDue && @@ -371,14 +454,21 @@ async function investigateWebsiteCore( ) { throw new Error("Remeasurement changed the investigation subject"); } - const detectionComplete = - metricDiagnostics.failedFamilies === 0 && - definitionDiagnostics.failedDefinitions === 0; + if ( + metricDiagnostics.failedFamilies > 0 || + definitionDiagnostics.failedDefinitions > 0 + ) { + throw new Error( + `Insight detection was incomplete (${metricDiagnostics.failedFamilies} metric families and ${definitionDiagnostics.failedDefinitions} conversion definitions failed)` + ); + } const signalsByKey = new Map(); for (const signal of [ ...(remeasuredDue ? [remeasuredDue] : []), ...metricSignals, ...funnelGoalSignals, + ...measurementRecommendationSignals, + ...routeHealthSignals, ]) { const key = signalKeyForDetectedSignal(signal); if (!signalsByKey.has(key)) { @@ -386,12 +476,8 @@ async function investigateWebsiteCore( } } const detectedSignals = rankSignals([...signalsByKey.values()]); - if (detectedSignals.length === 0) { - if (failedSources.length > 0) { - throw failedSources[0]?.reason; - } - if (!detectionComplete || due) { + if (due) { if (runtime.mode === "production") { emitInsightsEvent( "info", @@ -403,7 +489,10 @@ async function investigateWebsiteCore( } ); } - return emptyInvestigationArtifact({ asOf, status: "deferred" }); + return { + artifact: emptyInvestigationArtifact({ asOf, status: "deferred" }), + kind: "empty", + }; } if (runtime.mode === "production") { emitInsightsEvent("info", "generation.investigation.skipped_no_signals", { @@ -412,7 +501,10 @@ async function investigateWebsiteCore( duration_ms: Math.round(performance.now() - startedAt), }); } - return emptyInvestigationArtifact({ asOf, status: "no_signals" }); + return { + artifact: emptyInvestigationArtifact({ asOf, status: "no_signals" }), + kind: "empty", + }; } const observations = await runtime.sources.loadObservations({ @@ -431,15 +523,19 @@ async function investigateWebsiteCore( const dueSignalKey = remeasuredDue ? signalKeyForDetectedSignal(remeasuredDue) : null; - const prioritySignal = eligibleSignals.find( - (signal) => - signalKeyForDetectedSignal(signal) === dueSignalKey || - (isRegression(signal) && - (signal.severity !== "info" || isDirectSignal(signal))) - ); - if (!prioritySignal && failedSources.length > 0) { - throw failedSources[0]?.reason; - } + const prioritySignal = + eligibleSignals.find( + (signal) => + signalKeyForDetectedSignal(signal) === dueSignalKey || + (isRegression(signal) && + (signal.severity !== "info" || isDirectSignal(signal))) + ) ?? null; + const selectedSignal = input.selectedSignalKey + ? eligibleSignals.find( + (signal) => + signalKeyForDetectedSignal(signal) === input.selectedSignalKey + ) + : null; if (eligibleSignals.length === 0) { if (runtime.mode === "production") { emitInsightsEvent("info", "generation.investigation.deferred_recheck", { @@ -449,9 +545,34 @@ async function investigateWebsiteCore( duration_ms: Math.round(performance.now() - startedAt), }); } - return emptyInvestigationArtifact({ asOf, status: "deferred" }); + return { + artifact: emptyInvestigationArtifact({ asOf, status: "deferred" }), + kind: "empty", + }; + } + if (input.selectedSignalKey && !selectedSignal) { + throw new Error("Selected investigation signal is no longer eligible"); } - const detectedSignal = prioritySignal ?? eligibleSignals[0]; + return { + kind: "signals", + value: { + asOf, + detectedSignals, + dueSignalKey, + eligibleSignals, + prioritySignal, + }, + }; +} + +async function investigatePlannedCandidate( + input: InvestigateWebsiteInput, + candidate: PlannedInvestigationCandidate, + relatedSignals: InvestigationSignal[], + runtime: InvestigationRuntime +): Promise { + const startedAt = performance.now(); + const asOf = normalizeAsOf(input.asOf, input.timezone); if (runtime.canRunAgent && !(await runtime.canRunAgent())) { if (runtime.mode === "production") { emitInsightsEvent( @@ -460,40 +581,24 @@ async function investigateWebsiteCore( { organization_id: input.organizationId, website_id: input.websiteId, - detected_signal_count: detectedSignals.length, + detected_signal_count: relatedSignals.length + 1, duration_ms: Math.round(performance.now() - startedAt), } ); } - return emptyInvestigationArtifact({ - asOf, - status: "deferred", - }); + return emptyInvestigationArtifact({ asOf, status: "deferred" }); } - - const base = prepareInvestigation(detectedSignal, INSIGHT_LOOKBACK_DAYS); - const relatedSignals = detectedSignals - .filter( - (signal) => signalKeyForDetectedSignal(signal) !== base.signal.signalKey - ) - .slice(0, RELATED_SIGNAL_LIMIT) - .map( - (signal) => prepareInvestigation(signal, INSIGHT_LOOKBACK_DAYS).signal - ); + let evidence = [...candidate.evidence]; const annotationRows = await runtime.sources.fetchAnnotations( input.websiteId, - base.signal, + candidate.signal, asOf.toDate(), input.timezone ); - const investigation = - annotationRows.length === 0 - ? base - : prepareInvestigation( - detectedSignal, - INSIGHT_LOOKBACK_DAYS, - annotationRows - ); + const annotation = annotationEvidence(annotationRows); + if (annotation) { + evidence = [...evidence, annotation]; + } const appContext: AppContext = { userId: input.userId ?? "system", organizationId: input.organizationId, @@ -502,42 +607,37 @@ async function investigateWebsiteCore( websiteDomain: input.domain, timezone: input.timezone, currentDateTime: asOf.toISOString(), - chatId: `insights:${input.organizationId}:${input.websiteId}:${investigation.signal.signalKey}`, + chatId: `insights:${input.organizationId}:${input.websiteId}:${candidate.signal.signalKey}`, mutationMode: "dry-run", serviceAuth: createServiceAuth(input.organizationId, ["read:data"]), websiteName: input.name ?? null, }; + const [history, otherOpenWork] = await Promise.all([ + runtime.sources.loadHistory({ + organizationId: input.organizationId, + signalKey: candidate.signal.signalKey, + through: asOf.toDate(), + websiteId: input.websiteId, + }), + runtime.sources.loadOtherOpenWork({ + organizationId: input.organizationId, + signalKey: candidate.signal.signalKey, + through: asOf.toDate(), + websiteId: input.websiteId, + }), + ]); let investigationResult: InsightAgentResult; try { - const [history, otherOpenWork] = await Promise.all([ - runtime.sources.loadHistory({ - organizationId: input.organizationId, - signalKey: investigation.signal.signalKey, - through: asOf.toDate(), - websiteId: input.websiteId, - }), - runtime.sources.loadOtherOpenWork({ - organizationId: input.organizationId, - signalKey: investigation.signal.signalKey, - through: asOf.toDate(), - websiteId: input.websiteId, - }), - ]); investigationResult = await runtime.sources.investigateSignal({ appContext, - evidence: investigation.evidence, + evidence, githubRepository: input.githubRepository ?? null, history, + measurementCandidate: candidate.measurementCandidate, otherOpenWork, relatedSignals, - signal: investigation.signal, + signal: candidate.signal, }); - if (investigationResult.modelId && investigationResult.usage) { - await runtime.onUsage?.({ - modelId: investigationResult.modelId, - usage: investigationResult.usage, - }); - } } catch (error) { if (runtime.mode === "production") { captureInsightsError(error, "generation.agent.failed", { @@ -548,7 +648,13 @@ async function investigateWebsiteCore( error instanceof Error ? error.constructor.name : typeof error, }); } - throw error; + throw new CandidateInvestigationError(error); + } + if (investigationResult.modelId && investigationResult.usage) { + await runtime.onUsage?.({ + modelId: investigationResult.modelId, + usage: investigationResult.usage, + }); } if (runtime.mode === "production") { emitInsightsEvent("info", "generation.agent.completed", { @@ -557,7 +663,7 @@ async function investigateWebsiteCore( duration_ms: Math.round(performance.now() - startedAt), next: investigationResult.outcome.next.type, output_count: 1, - evidence_count: investigation.evidence.length, + evidence_count: evidence.length, tool_call_count: investigationResult.toolCallCount, }); setInsightsLog({ @@ -566,16 +672,99 @@ async function investigateWebsiteCore( tool_call_count: investigationResult.toolCallCount, }); } - return { asOf: asOf.toISOString(), - evidence: investigation.evidence, + evidence, outcome: investigationResult.outcome, - signal: investigation.signal, + signal: candidate.signal, status: "completed", }; } +async function investigateWebsiteCore( + input: InvestigateWebsiteInput, + runtime: InvestigationRuntime +): Promise { + const discovered = await discoverWebsiteSignals(input, runtime); + if (discovered.kind === "empty") { + return discovered.artifact; + } + const value = discovered.value; + const { detectedSignals, prioritySignal } = value; + const selectedSignal = input.selectedSignalKey + ? value.eligibleSignals.find( + (signal) => + signalKeyForDetectedSignal(signal) === input.selectedSignalKey + ) + : null; + const detectedSignal = + selectedSignal ?? prioritySignal ?? value.eligibleSignals[0]; + if (!detectedSignal) { + throw new Error("No eligible investigation signal was selected"); + } + const candidate = toPlannedCandidate(detectedSignal); + const relatedSignals = detectedSignals + .filter( + (signal) => + signalKeyForDetectedSignal(signal) !== candidate.signal.signalKey + ) + .slice(0, RELATED_SIGNAL_LIMIT) + .map( + (signal) => prepareInvestigation(signal, INSIGHT_LOOKBACK_DAYS).signal + ); + return investigatePlannedCandidate(input, candidate, relatedSignals, runtime); +} + +function plannedPortfolio( + discovery: WebsiteSignalDiscovery, + reason: InsightGenerationReason +): PlannedInvestigationCandidate[] { + return planCoveragePortfolio(discovery.eligibleSignals, { + dueSignalKey: discovery.dueSignalKey, + reason, + }).map(toPlannedCandidate); +} + +/** + * A frozen portfolio is retryable per signal because successful candidates + * persist observations independently. A malformed or unavailable model result + * therefore should not suppress unrelated candidates in the same run. Other + * failures remain fail-fast because they can indicate a broken durable seam. + */ +async function runPlannedCandidatePortfolio(params: { + candidates: PlannedInvestigationCandidate[]; + completedSignalKeys: ReadonlySet; + runCandidate: ( + candidate: PlannedInvestigationCandidate, + relatedSignals: InvestigationSignal[] + ) => Promise; +}): Promise { + let firstCandidateFailure: CandidateInvestigationError | null = null; + for (const candidate of params.candidates) { + if (params.completedSignalKeys.has(candidate.signal.signalKey)) { + continue; + } + try { + await params.runCandidate( + candidate, + params.candidates + .filter( + (sibling) => sibling.signal.signalKey !== candidate.signal.signalKey + ) + .map((sibling) => sibling.signal) + ); + } catch (error) { + if (!(error instanceof CandidateInvestigationError)) { + throw error; + } + firstCandidateFailure ??= error; + } + } + if (firstCandidateFailure) { + throw firstCandidateFailure; + } +} + /** * Runs the production investigation path against explicit read-only sources. * Every source is required so fixtures and shadows cannot fall through to live data. @@ -592,6 +781,45 @@ export function investigateWebsiteWithSources( }); } +/** + * Read-only harness for proving a full run selects distinct signals before it + * reaches durable production persistence. Each artifact remains one exact + * signal and one agent turn. + */ +export async function investigateWebsitePortfolioWithSources( + input: InvestigateWebsiteInput, + sources: InvestigationSources, + reason: InsightGenerationReason, + canRunAgent?: () => Promise +): Promise { + const runtime: InvestigationRuntime = { + canRunAgent, + mode: "shadow", + sources, + }; + const discovered = await discoverWebsiteSignals(input, runtime); + if (discovered.kind === "empty") { + return [discovered.artifact]; + } + const candidates = plannedPortfolio(discovered.value, reason); + const artifacts: WebsiteInvestigationArtifact[] = []; + await runPlannedCandidatePortfolio({ + candidates, + completedSignalKeys: new Set(), + runCandidate: async (candidate, relatedSignals) => { + artifacts.push( + await investigatePlannedCandidate( + input, + candidate, + relatedSignals, + runtime + ) + ); + }, + }); + return artifacts; +} + export async function generateWebsiteInsights( input: GenerateWebsiteInsightsInput ): Promise { @@ -643,162 +871,283 @@ export async function generateWebsiteInsights( }); } - const replay = await findRunObservation({ + const existingObservations = await findRunObservations({ organizationId: input.organizationId, runId: input.runId, websiteId: site.id, }); - if (replay) { - emitInsightsEvent("info", "generation.website.replayed_observation", { - organization_id: input.organizationId, - website_id: site.id, - run_id: input.runId, - next: replay.outcome.next.type, - }); - const replayed: WebsiteInvestigation | null = - replay.insightId && isVisibleInvestigation(replay) - ? { - id: replay.insightId, - outcome: replay.outcome, - signal: replay.signal, - websiteDomain: site.domain, - websiteId: site.id, - websiteName: site.name, - } - : null; - const effects = await prepareInsightSlackEffects({ - insight: replayed, - organizationId: input.organizationId, + const investigationInput: InvestigateWebsiteInput = { + asOf: new Date(), + domain: site.domain, + forceRecheck: input.reason === "manual", + githubRepository: site.integrations?.github ?? null, + name: site.name, + organizationId: input.organizationId, + timezone: input.timezone, + userId: input.requestedByUserId ?? undefined, + websiteId: site.id, + }; + let plan = await loadInsightRunCandidatePlan(runIdentity, input.reason); + let emptyStatus: "deferred" | "no_signals" | null = plan?.emptyStatus ?? null; + if (!plan && existingObservations.length > 0) { + // A run created before candidate portfolios existed can contain at most + // one observation. Freeze that completed legacy work explicitly rather + // than silently treating a missing plan as a completed new portfolio. + plan = await freezeInsightRunCandidatePlan(runIdentity, input.reason, { + asOf: new Date().toISOString(), + candidates: existingObservations.map((observation) => ({ + evidence: [], + signal: observation.signal, + })), + reason: input.reason, }); - const published = replay.outcome.publish === true; - const replayedResult = await prepareInsightRun({ - ...runIdentity, - effects, - result: { - status: "succeeded", - resultCount: published ? 1 : 0, - }, + emitInsightsEvent( + "info", + "generation.candidate_portfolio.legacy_reconciled", + { + organization_id: input.organizationId, + website_id: site.id, + run_id: input.runId, + candidate_count: plan.candidates.length, + } + ); + } + if (!plan) { + const discovered = await discoverWebsiteSignals(investigationInput, { + mode: "production", + sources: productionInvestigationSources, }); - await drainInsightRunEffects(runIdentity, input.finalAttempt); - return replayedResult; + if (discovered.kind === "empty") { + if ( + discovered.artifact.status !== "deferred" && + discovered.artifact.status !== "no_signals" + ) { + throw new Error( + "An empty investigation discovery had an invalid status" + ); + } + emptyStatus = discovered.artifact.status; + plan = await freezeInsightRunCandidatePlan(runIdentity, input.reason, { + asOf: discovered.artifact.asOf, + candidates: [], + emptyStatus, + reason: input.reason, + }); + emptyStatus = plan.emptyStatus ?? emptyStatus; + } else { + const selectedCandidates = plannedPortfolio( + discovered.value, + input.reason + ); + plan = await freezeInsightRunCandidatePlan(runIdentity, input.reason, { + asOf: discovered.value.asOf.toISOString(), + candidates: selectedCandidates, + reason: input.reason, + }); + emitInsightsEvent("info", "generation.candidate_portfolio.frozen", { + organization_id: input.organizationId, + website_id: site.id, + run_id: input.runId, + candidate_count: plan.candidates.length, + detected_signal_count: discovered.value.detectedSignals.length, + }); + } } let billingCheckError: unknown; let billingCustomerId: string | null = null; - const agentUsage: { - value: Required> | null; - } = { value: null }; let noCredits = false; - const userId = input.requestedByUserId ?? undefined; - const analysis = await investigateWebsiteCore( - { - asOf: new Date(), - domain: site.domain, - forceRecheck: input.reason === "manual", - githubRepository: site.integrations?.github ?? null, - name: site.name, - organizationId: input.organizationId, - timezone: input.timezone, - userId, - websiteId: site.id, - }, - { - canRunAgent: async () => { - if (!isAgentBillingConfigured()) { - return true; - } - try { - billingCustomerId = await resolveAgentBillingCustomerId({ - organizationId: input.organizationId, - userId: input.requestedByUserId, - }); - noCredits = !(await ensureAgentCreditsAvailable(billingCustomerId)); - return !noCredits; - } catch (error) { - billingCheckError = error; - captureInsightsError(error, "generation.billing_check.failed", { - organization_id: input.organizationId, - website_id: site.id, - run_id: input.runId, - }); - return false; - } - }, - mode: "production", - sources: productionInvestigationSources, - onUsage: (usage) => { - agentUsage.value = usage; - }, - } + const completedSignalKeys = new Set( + existingObservations.map((observation) => observation.signal.signalKey) ); - const candidate: WebsiteInvestigation | null = - analysis.outcome && analysis.signal - ? { - id: randomUUIDv7(), - outcome: analysis.outcome, - signal: analysis.signal, - websiteId: site.id, - websiteName: site.name, - websiteDomain: site.domain, - } - : null; - - const asOf = new Date(analysis.asOf); - const saved = candidate - ? await persistInvestigation({ - evidence: analysis.evidence, - investigation: candidate, - notNewerThan: asOf, - organizationId: input.organizationId, - recheckAt: nextRecheckAt(asOf, candidate.outcome.next), - runId: input.runId, - timezone: input.timezone, - }) - : null; - - if (billingCheckError) { - throw billingCheckError; - } - if (candidate && agentUsage.value) { + const outcomes = existingObservations.map( + (observation) => observation.outcome + ); + const visibleInvestigations: WebsiteInvestigation[] = + existingObservations.flatMap((observation) => + observation.insightId && isVisibleInvestigation(observation) + ? [ + { + id: observation.insightId, + outcome: observation.outcome, + signal: observation.signal, + websiteDomain: site.domain, + websiteId: site.id, + websiteName: site.name, + }, + ] + : [] + ); + const enqueueVisibleEffects = async ( + investigations: WebsiteInvestigation[] + ): Promise => { + const effects = ( + await Promise.all( + investigations.map((insight) => + prepareInsightSlackEffects({ + insight, + organizationId: input.organizationId, + }) + ) + ) + ).flat(); + await enqueueInsightRunEffects({ ...runIdentity, effects }); + }; + const drainPendingEffectsAfterFailure = async (): Promise => { try { - await trackAgentUsageAndBill({ - billingCustomerId, - chatId: `insights:${input.organizationId}:${site.id}`, - idempotencyKey: `insights:${input.runId}:${site.id}`, - modelId: agentUsage.value.modelId, - organizationId: input.organizationId, - source: "insights", - usage: agentUsage.value.usage, - userId: input.requestedByUserId, - websiteId: site.id, - }); + await drainInsightRunEffects(runIdentity, input.finalAttempt); } catch (error) { - captureInsightsError(error, "generation.billing.failed", { + captureInsightsError(error, "generation.partial_effects.failed", { organization_id: input.organizationId, - run_id: input.runId, website_id: site.id, + run_id: input.runId, }); } - } + }; - const effects = await prepareInsightSlackEffects({ - insight: saved, - organizationId: input.organizationId, - }); + await enqueueVisibleEffects(visibleInvestigations); + try { + if (plan) { + const frozenInput = { ...investigationInput, asOf: plan.asOf }; + await runPlannedCandidatePortfolio({ + candidates: plan.candidates, + completedSignalKeys, + runCandidate: async (plannedCandidate, relatedSignals) => { + const agentUsage: { + value: Required< + Pick + > | null; + } = { value: null }; + const analysis = await investigatePlannedCandidate( + frozenInput, + plannedCandidate, + relatedSignals, + { + canRunAgent: async () => { + if (!isAgentBillingConfigured()) { + return true; + } + try { + billingCustomerId = await resolveAgentBillingCustomerId({ + organizationId: input.organizationId, + userId: input.requestedByUserId, + }); + noCredits = + !(await ensureAgentCreditsAvailable(billingCustomerId)); + return !noCredits; + } catch (error) { + billingCheckError = error; + captureInsightsError( + error, + "generation.billing_check.failed", + { + organization_id: input.organizationId, + website_id: site.id, + run_id: input.runId, + } + ); + return false; + } + }, + mode: "production", + sources: productionInvestigationSources, + onUsage: (usage) => { + agentUsage.value = usage; + }, + } + ); + if (!(analysis.outcome && analysis.signal)) { + throw ( + billingCheckError ?? + new Error( + noCredits + ? "AI usage allowance is empty" + : "Insight agent access is unavailable before the candidate portfolio is complete" + ) + ); + } + const candidate: WebsiteInvestigation = { + id: randomUUIDv7(), + outcome: analysis.outcome, + signal: analysis.signal, + websiteDomain: site.domain, + websiteId: site.id, + websiteName: site.name, + }; + const asOf = new Date(analysis.asOf); + const saved = await persistInvestigation({ + evidence: analysis.evidence, + investigation: candidate, + notNewerThan: asOf, + organizationId: input.organizationId, + recheckAt: nextRecheckAt(asOf, candidate.outcome.next), + runId: input.runId, + timezone: input.timezone, + }); + completedSignalKeys.add(candidate.signal.signalKey); + outcomes.push(candidate.outcome); + if (saved) { + visibleInvestigations.push(saved); + await enqueueVisibleEffects([saved]); + } + const billableUsage = agentUsage.value; + if (billableUsage) { + try { + await trackAgentUsageAndBill({ + billingCustomerId, + chatId: `insights:${input.organizationId}:${site.id}:${candidate.signal.signalKey}`, + idempotencyKey: `insights:${input.runId}:${site.id}:${candidate.signal.signalKey}`, + modelId: billableUsage.modelId, + organizationId: input.organizationId, + source: "insights", + usage: billableUsage.usage, + userId: input.requestedByUserId, + websiteId: site.id, + }); + } catch (error) { + captureInsightsError(error, "generation.billing.failed", { + organization_id: input.organizationId, + run_id: input.runId, + website_id: site.id, + }); + } + } + }, + }); + } + } catch (error) { + await drainPendingEffectsAfterFailure(); + throw error; + } - const succeeded = saved !== null || analysis.status === "completed"; - const published = candidate?.outcome.publish === true; + if (billingCheckError) { + throw billingCheckError; + } + const effects = ( + await Promise.all( + visibleInvestigations.map((insight) => + prepareInsightSlackEffects({ + insight, + organizationId: input.organizationId, + }) + ) + ) + ).flat(); + const succeeded = outcomes.length > 0; + const published = outcomes.filter( + (outcome) => outcome.publish === true + ).length; const result: GenerateWebsiteInsightsResult = succeeded ? { status: "succeeded", - resultCount: published ? 1 : 0, + resultCount: published, } : { status: "skipped", resultCount: 0, message: noCredits ? "AI usage allowance is empty" - : analysis.status === "deferred" + : emptyStatus === "deferred" ? "Detected signals are waiting for recheck" : "No noteworthy change was found", }; @@ -822,11 +1171,11 @@ export async function generateWebsiteInsights( website_id: input.websiteId, run_id: input.runId, duration_ms: Math.round(performance.now() - startedAt), - result_count: published ? 1 : 0, + result_count: published, reason: input.reason, }); setInsightsLog({ - generation_result_count: published ? 1 : 0, + generation_result_count: published, generation_status: succeeded ? "succeeded" : "skipped", }); return preparedResult; diff --git a/apps/insights/src/idempotency.integration.test.ts b/apps/insights/src/idempotency.integration.test.ts index e82238dd5e..f16165f823 100644 --- a/apps/insights/src/idempotency.integration.test.ts +++ b/apps/insights/src/idempotency.integration.test.ts @@ -39,6 +39,7 @@ import { import { recordInsightReplyFailure, resumeInsightReply } from "./resume"; import { findRunObservation, + findRunObservations, loadDueOpenInvestigation, loadInvestigationHistory, loadLatestSignalObservations, @@ -46,6 +47,7 @@ import { } from "./observations"; import { drainInsightRunEffects, + enqueueInsightRunEffects, loadPreparedInsightRun, prepareInsightRun, } from "./effects"; @@ -264,6 +266,66 @@ describeIntegration("insights idempotency integration", () => { expect(stored.title).toBe(observation.outcome.title); }); + it("persists and replays distinct signal observations from one website run", async () => { + const organization = await insertOrganization(); + const website = await insertWebsite({ organizationId: organization.id }); + const runId = randomUUIDv7(); + const asOf = new Date("2026-07-10T10:00:00.000Z"); + await db().insert(insightRuns).values({ + id: runId, + organizationId: organization.id, + status: "running", + }); + const checkout = websiteInvestigation({ + title: "Checkout completion fell", + website, + }); + const revenue = { + ...websiteInvestigation({ title: "Revenue declined", website }), + signal: prepareInvestigation( + { + baseline: 500, + current: 250, + deltaPercent: -50, + detectedAt: "2026-07-10", + direction: "down", + label: "Revenue", + method: "wow", + metric: "revenue", + severity: "warning", + }, + 7 + ).signal, + }; + + await persistInvestigation({ + investigation: checkout, + notNewerThan: asOf, + organizationId: organization.id, + recheckAt: new Date("2026-07-17T10:00:00.000Z"), + runId, + timezone: "UTC", + }); + await persistInvestigation({ + investigation: revenue, + notNewerThan: asOf, + organizationId: organization.id, + recheckAt: new Date("2026-07-17T10:00:00.000Z"), + runId, + timezone: "UTC", + }); + + const replay = await findRunObservations({ + organizationId: organization.id, + runId, + websiteId: website.id, + }); + expect(replay.map((observation) => observation.signal.signalKey)).toEqual([ + "checkout", + "revenue", + ]); + }); + it("loads only unresolved sibling work available at the investigation clock", async () => { const organization = await insertOrganization(); const website = await insertWebsite({ @@ -1500,7 +1562,11 @@ describeIntegration("insights idempotency integration", () => { }, ]) .onConflictDoNothing({ - target: [insightObservations.runId, insightObservations.websiteId], + target: [ + insightObservations.runId, + insightObservations.websiteId, + insightObservations.signalKey, + ], }); const rows = await db() @@ -1715,6 +1781,38 @@ describeIntegration("insights idempotency integration", () => { expect(replayCalls).toBe(0); }); + it("queues a persisted portfolio candidate effect without completing its run", async () => { + const { identity } = await runItemFixture(); + const effects = [ + { + effectKey: "channel-a:insight-a", + payload: { + blocks: [], + channelId: "channel-a", + insightId: "insight-a", + text: "A completed candidate", + }, + }, + ]; + + await enqueueInsightRunEffects({ ...identity, effects }); + await enqueueInsightRunEffects({ ...identity, effects }); + + const [[item], rows] = await Promise.all([ + db() + .select({ preparedAt: insightRunItems.preparedAt }) + .from(insightRunItems) + .where(eq(insightRunItems.id, identity.itemId)), + db() + .select({ effectKey: insightRunEffects.effectKey }) + .from(insightRunEffects) + .where(eq(insightRunEffects.runItemId, identity.itemId)), + ]); + + expect(item.preparedAt).toBeNull(); + expect(rows).toEqual([{ effectKey: "channel-a:insight-a" }]); + }); + it("reuses the original Slack thread for recurring case delivery", async () => { const org = await insertOrganization(); const website = await insertWebsite({ organizationId: org.id }); diff --git a/apps/insights/src/investigation-flow.test.ts b/apps/insights/src/investigation-flow.test.ts index 9c568c36b5..fe2ea6d7b0 100644 --- a/apps/insights/src/investigation-flow.test.ts +++ b/apps/insights/src/investigation-flow.test.ts @@ -52,6 +52,34 @@ const outcome: InvestigationOutcome = { }, }; +const agentOutcome = { + ...outcome, + evidenceRefs: [ + { index: 0, source: "provided" as const }, + { index: 1, source: "provided" as const }, + ], +}; + +const goalDraftOutcome = { + ...agentOutcome, + next: { + reason: "The observed completion event can be reviewed as a goal draft.", + type: "resolve" as const, + }, + recommendation: { + action: "Review a goal for completed signup.", + draft: { + description: "Counts visitors who complete signup.", + filters: [], + ignoreHistoricData: false, + name: "Signup completed", + target: "signup_completed", + type: "EVENT" as const, + }, + kind: "goal_draft" as const, + }, +}; + const usage = { inputTokens: { total: 1, noCache: 1, cacheRead: 0, cacheWrite: 0 }, outputTokens: { total: 1, text: 1, reasoning: 0 }, @@ -81,7 +109,7 @@ function outputResponse(value: unknown) { }; } -function outputModel(value: unknown = outcome) { +function outputModel(value: unknown = agentOutcome) { return new MockLanguageModelV3({ doGenerate: mockValues(outputResponse(value)), }); @@ -137,6 +165,66 @@ describe("intelligence agent", () => { ); }); + it("accepts an observed event as a review-only goal draft", async () => { + const result = await runInsightAgent( + { + appContext: appContext(), + evidence, + githubRepository: null, + history: [], + measurementCandidate: { + basis: "observed_custom_event", + kind: "event_goal_candidate", + target: "signup_completed", + type: "EVENT", + }, + otherOpenWork: [], + signal, + }, + { model: outputModel(goalDraftOutcome), tools: {} } + ); + + expect(result.outcome.recommendation).toEqual( + goalDraftOutcome.recommendation + ); + expect(result.outcome.next.type).toBe("resolve"); + }); + + it("rejects a navigation proxy as a goal draft without inspected evidence", async () => { + await expect( + runInsightAgent( + { + appContext: appContext(), + evidence, + githubRepository: null, + history: [], + measurementCandidate: { + basis: "observed_navigation_proxy", + kind: "page_navigation_proxy", + target: "/signup", + type: "PAGE_VIEW", + }, + otherOpenWork: [], + signal, + }, + { + model: outputModel({ + ...goalDraftOutcome, + recommendation: { + ...goalDraftOutcome.recommendation, + draft: { + ...goalDraftOutcome.recommendation.draft, + target: "/signup", + type: "PAGE_VIEW", + }, + }, + }), + tools: {}, + } + ) + ).rejects.toThrow("navigation proxies cannot become goal drafts"); + }); + it("can inspect evidence before returning structured output", async () => { const model = new MockLanguageModelV3({ doGenerate: mockValues( @@ -153,7 +241,7 @@ describe("intelligence agent", () => { usage, warnings: [], }, - outputResponse(outcome) + outputResponse(agentOutcome) ), }); const result = await runInsightAgent( @@ -198,6 +286,124 @@ describe("intelligence agent", () => { ).rejects.toThrow(); }); + it("rejects evidence references that were not available to the agent", async () => { + await expect( + runInsightAgent( + { + appContext: appContext(), + evidence, + githubRepository: null, + history: [], + otherOpenWork: [], + signal, + }, + { + model: outputModel({ + ...agentOutcome, + evidenceRefs: [ + { index: 2, source: "provided" }, + { index: 1, source: "provided" }, + ], + }), + tools: {}, + } + ) + ).rejects.toThrow("cited supplied evidence"); + }); + + it("rejects evidence references to tools the agent did not use", async () => { + await expect( + runInsightAgent( + { + appContext: appContext(), + evidence, + githubRepository: null, + history: [], + otherOpenWork: [], + signal, + }, + { + model: outputModel({ + ...agentOutcome, + evidenceRefs: [ + { name: "get_data", source: "tool" }, + { index: 1, source: "provided" }, + ], + }), + tools: {}, + } + ) + ).rejects.toThrow("cited a read tool"); + }); + + it("rejects rechecks scheduled before the investigation", async () => { + await expect( + runInsightAgent( + { + appContext: appContext(), + evidence, + githubRepository: null, + history: [], + otherOpenWork: [], + signal, + }, + { + model: outputModel({ + ...agentOutcome, + next: { + ...agentOutcome.next, + recheckAt: "2026-07-11T00:00:00.000Z", + }, + }), + tools: {}, + } + ) + ).rejects.toThrow("scheduled a recheck"); + }); + + it("renders watch copy from its structured threshold", async () => { + const result = await runInsightAgent( + { + appContext: appContext(), + evidence, + githubRepository: null, + history: [], + otherOpenWork: [], + signal, + }, + { + model: outputModel({ + ...agentOutcome, + impact: null, + next: { + escalation: "Ignore this generated copy.", + recheckAt: "2026-07-15T00:00:00.000Z", + threshold: { + anchor: "prior_baseline", + comparison: "below", + evidenceRef: { index: 0, source: "provided" }, + value: 800, + }, + type: "watch", + }, + }), + tools: {}, + } + ); + + expect(result.outcome.next).toEqual({ + escalation: "Escalate when Visitors is below 800 (prior baseline).", + recheckAt: "2026-07-15T00:00:00.000Z", + threshold: { + anchor: "prior_baseline", + comparison: "below", + evidenceRef: { index: 0, source: "provided" }, + value: 800, + }, + type: "watch", + }); + }); + it("replays prior outcomes and new human context", async () => { const model = outputModel(); const priorEvidence = [ diff --git a/apps/insights/src/investigation.ts b/apps/insights/src/investigation.ts index 4c21556018..950391e3df 100644 --- a/apps/insights/src/investigation.ts +++ b/apps/insights/src/investigation.ts @@ -7,13 +7,14 @@ import type { import dayjs from "dayjs"; import timezonePlugin from "dayjs/plugin/timezone"; import utcPlugin from "dayjs/plugin/utc"; -import type { DetectedSignal } from "./detection"; +import type { DetectedSignal, MeasurementCandidate } from "./detection"; dayjs.extend(utcPlugin); dayjs.extend(timezonePlugin); interface InvestigationInput { evidence: string[]; + measurementCandidate?: MeasurementCandidate; signal: InvestigationSignal; } @@ -74,6 +75,16 @@ function isLowerBetter(metric: string): boolean { } const SEVERITY_RANK = { critical: 2, warning: 1, info: 0 } as const; +const ZERO_COMPLETION_SUBJECT_SUFFIX = ":zero-completions"; + +function isPersistentZeroCompletionSignal(signal: DetectedSignal): boolean { + return ( + signal.current === 0 && + (signal.metric.startsWith("goal:") || + signal.metric.startsWith("funnel:")) && + signal.subjectKey?.endsWith(ZERO_COMPLETION_SUBJECT_SUFFIX) === true + ); +} export function isDirectSignal(signal: DetectedSignal): boolean { return ( @@ -157,7 +168,10 @@ function entity(signal: DetectedSignal): InvestigationSignal["entity"] { if (prefix === "funnel" || prefix === "goal") { return { type: prefix, - id, + // State-qualified conversion signals remain distinct investigations, but + // their entity must stay the configured definition so goal actions and + // funnel links continue to resolve the real ID. + id: boundedKey(idParts[0]?.trim() || rawId), label: (signal.entityLabel ?? signal.label).slice(0, 120), }; } @@ -168,6 +182,13 @@ function entity(signal: DetectedSignal): InvestigationSignal["entity"] { type: "event", }; } + if (prefix === "route") { + return { + type: "page", + id: signal.entityId ?? rawId, + label: (signal.entityLabel ?? signal.label).slice(0, 120), + }; + } if (signal.metric === "error_count") { return { type: "error", @@ -192,8 +213,9 @@ export function prepareInvestigation( ): InvestigationInput { const subject = entity(candidate); const window = signalWindow(candidate, lookbackDays); - const sentiment = - candidate.current === candidate.baseline + const sentiment = isPersistentZeroCompletionSignal(candidate) + ? "negative" + : candidate.current === candidate.baseline ? "neutral" : isRegression(candidate) ? "negative" @@ -233,7 +255,10 @@ export function prepareInvestigation( } return { - signal: investigationSignalSchema.parse(signal), evidence, + ...(candidate.measurementCandidate + ? { measurementCandidate: candidate.measurementCandidate } + : {}), + signal: investigationSignalSchema.parse(signal), }; } diff --git a/apps/insights/src/measurement-recommendation-detection.test.ts b/apps/insights/src/measurement-recommendation-detection.test.ts new file mode 100644 index 0000000000..53fdb53d3a --- /dev/null +++ b/apps/insights/src/measurement-recommendation-detection.test.ts @@ -0,0 +1,152 @@ +import { describe, expect, it } from "bun:test"; +import dayjs from "dayjs"; +import type { DetectSignalsParams } from "./detection"; +import { + detectMeasurementRecommendationSignals, + type MeasurementRecommendationDeps, +} from "./measurement-recommendation-detection"; + +const TODAY = dayjs("2026-08-01"); + +const PARAMS: DetectSignalsParams = { + lookbackDays: 7, + timezone: "UTC", + websiteId: "test-site", +}; + +function makeDeps( + overrides: Partial = {} +): MeasurementRecommendationDeps { + return { + fetchDefinitionCounts: async () => ({ activeFunnels: 0, activeGoals: 0 }), + fetchTelemetry: async () => ({ + customEventNames: [], + pageviews: 60, + routes: ["/explore"], + sessions: 40, + }), + ...overrides, + }; +} + +describe("detectMeasurementRecommendationSignals", () => { + it("emits one sanitized navigation-coverage signal without definitions or custom events", async () => { + const signals = await detectMeasurementRecommendationSignals( + PARAMS, + TODAY, + makeDeps({ + fetchTelemetry: async () => ({ + customEventNames: [], + pageviews: 72, + routes: ["https://example.com/signup?email=ari@example.com&token=abc123"], + sessions: 48, + }), + }) + ); + + expect(signals).toHaveLength(1); + expect(signals[0]).toMatchObject({ + current: 0, + metric: "measurement_coverage", + measurementCandidate: { + basis: "observed_navigation_proxy", + kind: "page_navigation_proxy", + target: "/signup", + type: "PAGE_VIEW", + }, + severity: "info", + subjectKey: "measurement:conversion-coverage", + }); + expect(signals[0]?.definitionEvidence).toContain("navigation proxy"); + expect(JSON.stringify(signals[0])).not.toContain("ari@example.com"); + expect(JSON.stringify(signals[0])).not.toContain("abc123"); + }); + + it("uses an observed canonical conversion event as a bounded goal candidate", async () => { + const [signal] = await detectMeasurementRecommendationSignals( + PARAMS, + TODAY, + makeDeps({ + fetchTelemetry: async () => ({ + customEventNames: ["signup_completed", "button_click"], + pageviews: 60, + routes: [], + sessions: 40, + }), + }) + ); + + expect(signal?.measurementCandidate).toEqual({ + basis: "observed_custom_event", + kind: "event_goal_candidate", + target: "signup_completed", + type: "EVENT", + }); + expect(signal?.definitionEvidence).toContain("not that the event is a business conversion"); + }); + + it("withholds dynamic route and event identifiers from candidates", async () => { + const [signal] = await detectMeasurementRecommendationSignals( + PARAMS, + TODAY, + makeDeps({ + fetchTelemetry: async () => ({ + customEventNames: ["purchase_ari"], + pageviews: 60, + routes: ["/checkout/ari?token=private"], + sessions: 40, + }), + }) + ); + + expect(signal?.measurementCandidate).toBeUndefined(); + expect(JSON.stringify(signal)).not.toContain("ari"); + expect(JSON.stringify(signal)).not.toContain("private"); + }); + + it("suppresses the signal when usable measurement definitions already exist", async () => { + const signals = await detectMeasurementRecommendationSignals( + PARAMS, + TODAY, + makeDeps({ + fetchDefinitionCounts: async () => ({ + activeFunnels: 0, + activeGoals: 1, + }), + }) + ); + + expect(signals).toEqual([]); + }); + + it("suppresses the signal for insufficient current activity", async () => { + const signals = await detectMeasurementRecommendationSignals( + PARAMS, + TODAY, + makeDeps({ + fetchTelemetry: async () => ({ + customEventNames: [], + pageviews: 29, + routes: ["/signup"], + sessions: 29, + }), + }) + ); + + expect(signals).toEqual([]); + }); + + it("does not hide telemetry failures", async () => { + await expect( + detectMeasurementRecommendationSignals( + PARAMS, + TODAY, + makeDeps({ + fetchTelemetry: async () => { + throw new Error("telemetry unavailable"); + }, + }) + ) + ).rejects.toThrow("telemetry unavailable"); + }); +}); diff --git a/apps/insights/src/measurement-recommendation-detection.ts b/apps/insights/src/measurement-recommendation-detection.ts new file mode 100644 index 0000000000..44ad2fbde7 --- /dev/null +++ b/apps/insights/src/measurement-recommendation-detection.ts @@ -0,0 +1,454 @@ +import { executeQuery } from "@databuddy/ai/query"; +import { and, count, db, eq, isNull, lte, sql } from "@databuddy/db"; +import { funnelDefinitions, goals } from "@databuddy/db/schema"; +import dayjs from "dayjs"; +import { + type DetectedSignal, + type DetectSignalsParams, + type MeasurementCandidate, + wowWindow, +} from "./detection"; + +const MIN_ACTIVE_PAGEVIEWS = 30; +const MIN_ACTIVE_SESSIONS = 30; +const MAX_CANONICAL_EVENT_LENGTH = 64; +const MAX_CANONICAL_ROUTE_LENGTH = 120; +const ABSOLUTE_URL_PATTERN = /^[a-z][a-z\d.+-]*:\/\//i; +const CANONICAL_EVENT_PATTERN = /^[a-z][a-z_]{0,63}$/; +const QUERY_OR_FRAGMENT_PATTERN = /[?#]/; +const STATIC_ROUTE_SEGMENT_PATTERN = /^[a-z][a-z-]{0,47}$/; +const TARGET_SEGMENT_DELIMITER_PATTERN = /[/_-]/; +const TRAILING_SLASH_PATTERN = /\/+$/; +const SAFE_EVENT_SEGMENTS = new Set([ + "account", + "activated", + "application", + "book", + "booking", + "button", + "checkout", + "click", + "clicked", + "complete", + "completed", + "confirmation", + "contact", + "created", + "demo", + "download", + "form", + "lead", + "login", + "logged", + "order", + "paid", + "payment", + "plan", + "purchase", + "purchased", + "register", + "registered", + "registration", + "request", + "requested", + "screen", + "sign", + "signed", + "signup", + "started", + "submit", + "submitted", + "subscribe", + "subscribed", + "subscription", + "success", + "succeeded", + "trial", + "up", + "upgrade", + "user", + "view", + "welcome", +]); +const SAFE_ROUTE_SEGMENTS = new Set([ + "account", + "accounts", + "app", + "auth", + "billing", + "book", + "booking", + "cart", + "checkout", + "complete", + "confirmation", + "contact", + "demo", + "home", + "login", + "onboarding", + "order", + "payment", + "plans", + "pricing", + "purchase", + "register", + "registration", + "settings", + "sign-in", + "sign-up", + "signin", + "signup", + "shop", + "store", + "subscribe", + "subscription", + "success", + "thank-you", + "trial", + "upgrade", + "welcome", +]); +const CONVERSION_TERMS = new Set([ + "book", + "booking", + "checkout", + "complete", + "completed", + "confirmation", + "contact", + "demo", + "lead", + "order", + "ordered", + "paid", + "payment", + "purchase", + "purchased", + "register", + "registration", + "sign-up", + "signup", + "submit", + "submitted", + "subscribe", + "subscribed", + "subscription", + "success", + "trial", +]); + +export const MEASUREMENT_RECOMMENDATION_SUBJECT_KEY = + "measurement:conversion-coverage"; + +export interface MeasurementDefinitionCounts { + activeFunnels: number; + activeGoals: number; +} + +export interface MeasurementTelemetry { + customEventNames: string[]; + pageviews: number; + routes: string[]; + sessions: number; +} + +export interface MeasurementRecommendationDeps { + fetchDefinitionCounts: () => Promise; + fetchTelemetry: ( + range: { from: string; to: string }, + abortSignal?: AbortSignal + ) => Promise; +} + +function asNonNegativeNumber(value: unknown): number { + const number = Number(value); + return Number.isFinite(number) && number > 0 ? number : 0; +} + +function rows(value: unknown): Record[] { + return Array.isArray(value) + ? value.filter( + (item): item is Record => + typeof item === "object" && item !== null + ) + : []; +} + +function stringField( + value: Record, + field: string +): string | null { + const candidate = value[field]; + return typeof candidate === "string" && candidate.trim().length > 0 + ? candidate.trim() + : null; +} + +/** + * Retain only exact, canonical event identifiers. This rejects identifiers + * with values embedded in them instead of attempting to redact and then + * accidentally turning the redacted value into a target that cannot match. + */ +function canonicalEventName(value: string): string | null { + return CANONICAL_EVENT_PATTERN.test(value) && + value.length <= MAX_CANONICAL_EVENT_LENGTH && + value.split("_").every((segment) => SAFE_EVENT_SEGMENTS.has(segment)) + ? value + : null; +} + +/** + * Return an exact target only when every segment is static. Dynamic, encoded, + * numeric, or otherwise noncanonical segments are omitted entirely rather + * than exposing a raw path or a nonmatching placeholder. + */ +function canonicalRoute(value: string): string | null { + let pathname = value; + if (ABSOLUTE_URL_PATTERN.test(value)) { + try { + pathname = new URL(value).pathname; + } catch { + return null; + } + } + pathname = pathname.split(QUERY_OR_FRAGMENT_PATTERN, 1)[0] ?? ""; + pathname = pathname.replace(TRAILING_SLASH_PATTERN, ""); + if ( + !pathname || + pathname === "/" || + !pathname.startsWith("/") || + pathname.length > MAX_CANONICAL_ROUTE_LENGTH + ) { + return null; + } + const segments = pathname.split("/").filter(Boolean); + if ( + segments.length === 0 || + segments.some( + (segment) => + !( + STATIC_ROUTE_SEGMENT_PATTERN.test(segment) && + SAFE_ROUTE_SEGMENTS.has(segment) + ) + ) + ) { + return null; + } + return `/${segments.join("/")}`; +} + +function hasConversionTerm(target: string): boolean { + if (target.includes("sign_up") || target.includes("sign-up")) { + return true; + } + return target + .split(TARGET_SEGMENT_DELIMITER_PATTERN) + .some((term) => CONVERSION_TERMS.has(term)); +} + +function eventCandidate( + eventNames: string[] +): MeasurementCandidate | undefined { + const target = eventNames + .map(canonicalEventName) + .find((eventName) => eventName !== null && hasConversionTerm(eventName)); + return target + ? { + basis: "observed_custom_event", + kind: "event_goal_candidate", + target, + type: "EVENT", + } + : undefined; +} + +function routeCandidate(routes: string[]): MeasurementCandidate | undefined { + const target = routes + .map(canonicalRoute) + .find((route) => route !== null && hasConversionTerm(route)); + return target + ? { + basis: "observed_navigation_proxy", + kind: "page_navigation_proxy", + target, + type: "PAGE_VIEW", + } + : undefined; +} + +function readableEvidence(params: { + candidate: MeasurementCandidate | undefined; + canonicalEventCount: number; + pageviews: number; + sessions: number; +}): string { + const baseline = `No active goals or funnels are configured. The completed period recorded ${params.sessions} sessions and ${params.pageviews} pageviews.`; + if (params.candidate?.kind === "event_goal_candidate") { + return `${baseline} A safely canonical custom event provides an evidence-backed candidate for measurement setup. Its occurrence establishes telemetry coverage, not that the event is a business conversion.`; + } + if (params.candidate?.kind === "page_navigation_proxy") { + return `${baseline} Only page-navigation evidence is available for the candidate route. It is a navigation proxy and coverage-gap signal, not evidence of a completed conversion; prefer instrumentation before treating it as a conversion.`; + } + if (params.canonicalEventCount > 0) { + return `${baseline} ${params.canonicalEventCount} safely canonical custom event types were observed, but none can be conservatively identified as a conversion target. This is measurement coverage only, not a completed conversion.`; + } + return `${baseline} Only page-navigation coverage is available; no safely canonical custom event can support a conversion target. This is a coverage-gap signal, not a completed conversion.`; +} + +export function defaultMeasurementRecommendationDeps( + websiteId: string, + asOf: Date, + timezone: string +): MeasurementRecommendationDeps { + return { + fetchDefinitionCounts: async () => { + const [goalRows, funnelRows] = await Promise.all([ + db + .select({ value: count() }) + .from(goals) + .where( + and( + eq(goals.websiteId, websiteId), + eq(goals.isActive, true), + isNull(goals.deletedAt), + lte(goals.createdAt, asOf), + lte(goals.updatedAt, asOf) + ) + ), + db + .select({ value: count() }) + .from(funnelDefinitions) + .where( + and( + eq(funnelDefinitions.websiteId, websiteId), + eq(funnelDefinitions.isActive, true), + isNull(funnelDefinitions.deletedAt), + lte(funnelDefinitions.createdAt, asOf), + lte(funnelDefinitions.updatedAt, asOf), + sql`jsonb_array_length(${funnelDefinitions.steps}) > 1` + ) + ), + ]); + return { + activeFunnels: asNonNegativeNumber(funnelRows[0]?.value), + activeGoals: asNonNegativeNumber(goalRows[0]?.value), + }; + }, + fetchTelemetry: async (range, abortSignal) => { + const [summaryResult, customEventsResult, pagesResult] = + await Promise.all([ + executeQuery( + { + from: range.from, + projectId: websiteId, + to: range.to, + type: "summary_metrics", + }, + undefined, + timezone, + abortSignal + ), + executeQuery( + { + from: range.from, + limit: 100, + projectId: websiteId, + to: range.to, + type: "custom_events", + }, + undefined, + timezone, + abortSignal + ), + executeQuery( + { + from: range.from, + limit: 50, + projectId: websiteId, + to: range.to, + type: "top_pages", + }, + undefined, + timezone, + abortSignal + ), + ]); + const summary = rows(summaryResult)[0] ?? {}; + return { + customEventNames: rows(customEventsResult) + .map((row) => stringField(row, "name")) + .filter((value): value is string => value !== null), + pageviews: asNonNegativeNumber(summary.pageviews), + routes: rows(pagesResult) + .map((row) => stringField(row, "name")) + .filter((value): value is string => value !== null), + sessions: asNonNegativeNumber(summary.sessions), + }; + }, + }; +} + +/** + * Detect active websites where conversion measurement is absent. This emits a + * stable informational signal rather than an anomaly: it deliberately makes + * no claim about product intent or a completed conversion. + */ +export async function detectMeasurementRecommendationSignals( + params: DetectSignalsParams, + today: dayjs.Dayjs = dayjs(), + dependencies: MeasurementRecommendationDeps = defaultMeasurementRecommendationDeps( + params.websiteId, + today.toDate(), + params.timezone + ), + abortSignal?: AbortSignal +): Promise { + const window = wowWindow(today, params.lookbackDays); + const [definitions, telemetry] = await Promise.all([ + dependencies.fetchDefinitionCounts(), + dependencies.fetchTelemetry( + { from: window.currentFrom, to: window.currentTo }, + abortSignal + ), + ]); + if ( + definitions.activeGoals > 0 || + definitions.activeFunnels > 0 || + telemetry.sessions < MIN_ACTIVE_SESSIONS || + telemetry.pageviews < MIN_ACTIVE_PAGEVIEWS + ) { + return []; + } + + const canonicalEvents = [ + ...new Set( + telemetry.customEventNames + .map(canonicalEventName) + .filter((eventName): eventName is string => eventName !== null) + ), + ]; + const candidate = + eventCandidate(canonicalEvents) ?? routeCandidate(telemetry.routes); + return [ + { + baseline: 0, + current: 0, + definitionEvidence: readableEvidence({ + candidate, + canonicalEventCount: canonicalEvents.length, + pageviews: telemetry.pageviews, + sessions: telemetry.sessions, + }), + deltaPercent: 0, + detectedAt: window.currentTo, + direction: "up", + label: "Conversion measurement coverage is missing", + measurementCandidate: candidate, + method: "wow", + metric: "measurement_coverage", + severity: "info", + subjectKey: MEASUREMENT_RECOMMENDATION_SUBJECT_KEY, + }, + ]; +} diff --git a/apps/insights/src/observations.ts b/apps/insights/src/observations.ts index d0a6144ba6..78493c626d 100644 --- a/apps/insights/src/observations.ts +++ b/apps/insights/src/observations.ts @@ -387,16 +387,17 @@ export async function loadOtherOpenWork(params: { })); } -export async function findRunObservation(params: { +export async function findRunObservations(params: { organizationId: string; runId: string; websiteId: string; }) { - const [observation] = await db + const observations = await db .select({ insightId: insightObservations.insightId, outcome: insightObservations.outcome, signal: insightObservations.signal, + signalKey: insightObservations.signalKey, }) .from(insightObservations) .where( @@ -406,11 +407,19 @@ export async function findRunObservation(params: { eq(insightObservations.websiteId, params.websiteId) ) ) - .limit(1); - if (!observation) { - return; - } - const outcome = parseInvestigationOutcome(observation.outcome); - const signal = parseInvestigationSignal(observation.signal); - return outcome && signal ? { ...observation, outcome, signal } : undefined; + .orderBy(insightObservations.signalKey, insightObservations.id); + return observations.flatMap((observation) => { + const outcome = parseInvestigationOutcome(observation.outcome); + const signal = parseInvestigationSignal(observation.signal); + return outcome && signal ? [{ ...observation, outcome, signal }] : []; + }); +} + +/** @deprecated Use findRunObservations so callers preserve all work in a run. */ +export async function findRunObservation(params: { + organizationId: string; + runId: string; + websiteId: string; +}) { + return (await findRunObservations(params))[0]; } diff --git a/apps/insights/src/persistence.ts b/apps/insights/src/persistence.ts index 2ec5d0e6bf..de4b2e1662 100644 --- a/apps/insights/src/persistence.ts +++ b/apps/insights/src/persistence.ts @@ -216,11 +216,17 @@ export async function persistInvestigation(params: { websiteId: investigation.websiteId, }) .onConflictDoNothing({ - target: [insightObservations.runId, insightObservations.websiteId], + target: [ + insightObservations.runId, + insightObservations.websiteId, + insightObservations.signalKey, + ], }) .returning({ id: insightObservations.id }); if (observations.length === 0) { - throw new Error("This website run already has an investigation outcome"); + throw new Error( + "This website run already has an outcome for this signal" + ); } return rows[0] ?? null; }); diff --git a/apps/insights/src/production-shadow.test.ts b/apps/insights/src/production-shadow.test.ts new file mode 100644 index 0000000000..7e5f68f07d --- /dev/null +++ b/apps/insights/src/production-shadow.test.ts @@ -0,0 +1,153 @@ +import { describe, expect, it } from "bun:test"; +import type { WebsiteInvestigationArtifact } from "./generation"; +import { runDistinctSignalBatch } from "./batch-shadow"; +import { metricFamily, resolveShadowAsOf } from "./production-shadow"; +import { + runBoundedWorkerFanout, + selectDistinctWorkerCandidates, +} from "./worker-fanout-shadow"; + +function artifact(signalKey: string | null): WebsiteInvestigationArtifact { + return { + asOf: "2026-07-31T00:00:00.000Z", + evidence: [], + outcome: null, + signal: signalKey + ? { + changePercent: 20, + entity: { id: signalKey, label: signalKey, type: "error" }, + metric: { current: 12, format: "number", label: signalKey, previous: 10 }, + period: { + current: { from: "2026-07-24", to: "2026-07-30" }, + previous: { from: "2026-07-17", to: "2026-07-23" }, + }, + severity: "warning", + sentiment: "negative", + signalKey, + } + : null, + status: signalKey ? "completed" : "no_signals", + }; +} + +describe("runDistinctSignalBatch", () => { + it("passes selected signals to each later candidate and stops at no signal", async () => { + const candidates = [artifact("first"), artifact("second"), artifact(null)]; + const exclusions: string[][] = []; + const selected: string[] = []; + + const results = await runDistinctSignalBatch( + 3, + (excludedSignalKeys) => { + exclusions.push([...excludedSignalKeys]); + return Promise.resolve(candidates[exclusions.length - 1]!); + }, + (item) => { + if (item.signal) { + selected.push(item.signal.signalKey); + } + } + ); + + expect(exclusions).toEqual([[], ["first"], ["first", "second"]]); + expect(selected).toEqual(["first", "second"]); + expect(results.map((item) => item.signal?.signalKey ?? null)).toEqual([ + "first", + "second", + null, + ]); + }); + + it("does not continue after a repeated signal", async () => { + const candidates = [artifact("first"), artifact("first"), artifact("second")]; + let calls = 0; + + const results = await runDistinctSignalBatch(3, () => { + const result = candidates[calls]!; + calls += 1; + return Promise.resolve(result); + }); + + expect(calls).toBe(2); + expect(results.map((item) => item.signal?.signalKey)).toEqual([ + "first", + "first", + ]); + }); +}); + +describe("resolveShadowAsOf", () => { + it("uses the frozen instant when replaying a manual run", () => { + const referenceTime = new Date("2026-07-31T13:42:00.000Z"); + + expect( + resolveShadowAsOf(referenceTime, 0, "UTC", "instant").toISOString() + ).toBe("2026-07-31T13:42:00.000Z"); + }); + + it("preserves the existing calendar-day replay mode", () => { + const referenceTime = new Date("2026-07-31T13:42:00.000Z"); + + expect( + resolveShadowAsOf(referenceTime, 0, "UTC", "day").toISOString() + ).toBe("2026-07-31T00:00:00.000Z"); + }); +}); + +describe("shadow signal projection", () => { + it("never exposes a route or error subject in the report metric family", () => { + expect(metricFamily("route:lcp:/settings/billing")).toBe("route_health"); + expect( + metricFamily( + "error:[nuxt] Received malformed app manifest with a customer path" + ) + ).toBe("error"); + }); +}); + +describe("worker fan-out shadow", () => { + it("plans distinct worker candidates in detector rank order", () => { + expect( + selectDistinctWorkerCandidates( + [ + { key: "first", rank: 1 }, + { key: "first", rank: 2 }, + { key: "second", rank: 3 }, + { key: "third", rank: 4 }, + ], + 3, + (candidate) => candidate.key + ) + ).toEqual([ + { key: "first", rank: 1 }, + { key: "second", rank: 3 }, + { key: "third", rank: 4 }, + ]); + }); + + it("continues independent workers after one fails", async () => { + const started: number[] = []; + const results = await runBoundedWorkerFanout( + [1, 2, 3], + 2, + async (candidate) => { + started.push(candidate); + if (candidate === 1) { + throw new Error("first worker failed"); + } + return candidate * 10; + } + ); + + expect(started.sort()).toEqual([1, 2, 3]); + expect(results).toEqual([ + { + candidate: 1, + reason: expect.any(Error), + status: "rejected", + }, + { candidate: 2, status: "fulfilled", value: 20 }, + { candidate: 3, status: "fulfilled", value: 30 }, + ]); + }); +}); diff --git a/apps/insights/src/production-shadow.ts b/apps/insights/src/production-shadow.ts index 3b477a32e5..d9dc8c5cde 100644 --- a/apps/insights/src/production-shadow.ts +++ b/apps/insights/src/production-shadow.ts @@ -3,6 +3,9 @@ import { resolve } from "node:path"; import { parseArgs } from "node:util"; import { Pool, type PoolClient } from "pg"; import type { StepResult, ToolSet } from "ai"; +import dayjs from "dayjs"; +import timezonePlugin from "dayjs/plugin/timezone"; +import utcPlugin from "dayjs/plugin/utc"; import { summarizeAgentUsage, type UsageTelemetry, @@ -11,19 +14,35 @@ import type { InvestigationSources, WebsiteInvestigationArtifact, } from "./generation"; +import { resolveInvestigationAsOf } from "./generation"; import type { InsightAgentInput, InsightAgentResult } from "./agent"; -import type { FunnelDef, GoalDef } from "./funnel-detection"; +import type { DetectedSignal, DetectionDiagnostics } from "./detection"; +import type { + FunnelDef, + FunnelGoalDetectionDiagnostics, + GoalDef, +} from "./funnel-detection"; import type { InvestigationAnnotation } from "./investigation"; import type { LatestInsightObservation } from "./observations"; +import { runDistinctSignalBatch } from "./batch-shadow"; +import { runBoundedWorkerFanout } from "./worker-fanout-shadow"; + +dayjs.extend(utcPlugin); +dayjs.extend(timezonePlugin); const REQUIRED_CONFIRMATION = "--confirm-read-only-production"; const DEFAULT_OFFSETS = [60, 30, 7, 0]; const DEFAULT_MIN_EVENTS = 25_000; const DEFAULT_CONCURRENCY = 2; const DEFAULT_MODEL = "openai/gpt-5.6-terra"; +const MAX_BATCH_SIZE = 3; const STATEMENT_TIMEOUT_MS = 60_000; const CASE_ATTEMPT_TIMEOUT_MS = 150_000; +type AsOfMode = "day" | "instant"; + interface CliOptions { + asOfMode: AsOfMode; + batchSize: number; concurrency: number; limit: number | null; minEvents: number; @@ -31,6 +50,9 @@ interface CliOptions { offsets: number[]; output: string | null; referenceTime: Date; + websiteId: string | null; + workerConcurrency: number; + workerFanout: boolean; } interface RankedWebsite { @@ -126,6 +148,8 @@ interface ShadowReport { }; cases: ShadowCase[]; meta: { + asOfMode: AsOfMode; + batchSize: number; concurrency: number; dataAccess: { clickhouse: "read_only"; @@ -142,6 +166,8 @@ interface ShadowReport { offsets: number[]; referenceTime: string; sites: number; + workerConcurrency: number; + workerFanout: boolean; }; } @@ -198,6 +224,21 @@ function integerOption(value: string, name: string, minimum: number): number { return parsed; } +function batchSizeOption(value: string): number { + const batchSize = integerOption(value, "batch-size", 1); + if (batchSize > MAX_BATCH_SIZE) { + throw new Error(`batch-size must be at most ${MAX_BATCH_SIZE}`); + } + return batchSize; +} + +function asOfModeOption(value: string): AsOfMode { + if (value === "day" || value === "instant") { + return value; + } + throw new Error("as-of-mode must be either day or instant"); +} + function modelOption(value: string | undefined): string { const model = value?.trim(); if (model) { @@ -221,6 +262,8 @@ function parseOptions(args: string[]): CliOptions { const { values } = parseArgs({ args, options: { + "as-of-mode": { default: "day", type: "string" }, + "batch-size": { default: "1", type: "string" }, concurrency: { default: String(DEFAULT_CONCURRENCY), type: "string" }, "confirm-read-only-production": { default: false, type: "boolean" }, limit: { type: "string" }, @@ -229,6 +272,9 @@ function parseOptions(args: string[]): CliOptions { offsets: { type: "string" }, output: { type: "string" }, "reference-time": { type: "string" }, + "website-id": { type: "string" }, + "worker-concurrency": { default: "1", type: "string" }, + "worker-fanout": { default: false, type: "boolean" }, }, strict: true, }); @@ -243,7 +289,13 @@ function parseOptions(args: string[]): CliOptions { if (new Set(offsets).size !== offsets.length) { throw new Error("Offsets must be unique"); } + const asOfMode = asOfModeOption(values["as-of-mode"]); + if (asOfMode === "instant" && offsets.some((offset) => offset !== 0)) { + throw new Error("as-of-mode=instant only supports offsets=0"); + } return { + asOfMode, + batchSize: batchSizeOption(values["batch-size"]), concurrency: integerOption(values.concurrency, "concurrency", 1), limit: values.limit ? integerOption(values.limit, "limit", 1) : null, minEvents: integerOption(values["min-events"], "min-events", 1), @@ -251,6 +303,13 @@ function parseOptions(args: string[]): CliOptions { offsets, output: values.output ?? null, referenceTime: resolveReferenceTime(values["reference-time"]), + websiteId: values["website-id"]?.trim() || null, + workerConcurrency: integerOption( + values["worker-concurrency"], + "worker-concurrency", + 1 + ), + workerFanout: values["worker-fanout"], }; } @@ -517,6 +576,21 @@ function dateAtOffset( return date.toISOString().slice(0, 10); } +export function resolveShadowAsOf( + referenceTime: Date, + offsetDays: number, + timezone: string, + asOfMode: AsOfMode +): Date { + if (asOfMode === "instant") { + return new Date(referenceTime); + } + return resolveInvestigationAsOf( + dateAtOffset(referenceTime, offsetDays, timezone), + timezone + ); +} + function definitionsAt( rows: T[], asOf: Date @@ -529,6 +603,7 @@ function definitionsAt( async function createSources(params: { annotations: AnnotationRow[]; asOf: Date; + excludedSignalKeys: ReadonlySet; funnels: FunnelRow[]; goals: GoalRow[]; historical: boolean; @@ -543,17 +618,24 @@ async function createSources(params: { { createModelFromId }, { detectSignals }, { defaultFunnelGoalDeps, detectFunnelGoalSignals }, - { signalAnnotationWindow }, + { + defaultMeasurementRecommendationDeps, + detectMeasurementRecommendationSignals, + }, + { signalAnnotationWindow, signalKeyForDetectedSignal }, { createToolkit }, { remeasureStoredSignal }, + { detectRouteHealthSignals }, { runInsightAgent }, ] = await Promise.all([ import("@databuddy/ai/config/models"), import("./detection"), import("./funnel-detection"), + import("./measurement-recommendation-detection"), import("./investigation"), import("@databuddy/ai/tools/toolkit"), import("./generation"), + import("./route-health-detection"), import("./agent"), ]); const siteFunnels = definitionsAt( @@ -572,6 +654,8 @@ async function createSources(params: { signal ? AbortSignal.any([params.attemptSignal, signal]) : params.attemptSignal; + const isExcluded = (signal: DetectedSignal) => + params.excludedSignalKeys.has(signalKeyForDetectedSignal(signal)); let historicalTools: ToolSet | undefined; if (params.historical) { const getData = createToolkit({ capabilities: ["analytics"] }).get_data; @@ -598,22 +682,73 @@ async function createSources(params: { ) => base.goalConversion(goal, range, withAttemptSignal(signal)), }; }; + const measurementRecommendationDependencies = () => { + const base = defaultMeasurementRecommendationDeps( + params.site.id, + params.asOf, + params.site.timezone + ); + return { + ...base, + fetchDefinitionCounts: async () => ({ + activeFunnels: siteFunnels.length, + activeGoals: siteGoals.length, + }), + fetchTelemetry: ( + range: { from: string; to: string }, + signal?: AbortSignal + ) => base.fetchTelemetry(range, withAttemptSignal(signal)), + }; + }; return { - detectDefinitionSignals: (detectParams, today, _deps, options) => - detectFunnelGoalSignals( - detectParams, - today, - funnelGoalDependencies(), - options - ), - detectMetricSignals: (detectParams, queryFn, today, signal, diagnostics) => - detectSignals( - detectParams, - queryFn, - today, - withAttemptSignal(signal), - diagnostics - ), + detectDefinitionSignals: async (detectParams, today, _deps, options) => + ( + await detectFunnelGoalSignals( + detectParams, + today, + funnelGoalDependencies(), + options + ) + ).filter((signal) => !isExcluded(signal)), + detectMeasurementRecommendationSignals: async ( + detectParams, + today, + _deps, + signal + ) => + ( + await detectMeasurementRecommendationSignals( + detectParams, + today, + measurementRecommendationDependencies(), + withAttemptSignal(signal) + ) + ).filter((candidate) => !isExcluded(candidate)), + detectMetricSignals: async ( + detectParams, + queryFn, + today, + signal, + diagnostics + ) => + ( + await detectSignals( + detectParams, + queryFn, + today, + withAttemptSignal(signal), + diagnostics + ) + ).filter((candidate) => !isExcluded(candidate)), + detectRouteHealthSignals: async (detectParams, today, _deps, signal) => + ( + await detectRouteHealthSignals( + detectParams, + today, + undefined, + withAttemptSignal(signal) + ) + ).filter((candidate) => !isExcluded(candidate)), fetchAnnotations: (_websiteId, signal, _asOf, timezone) => { const window = signalAnnotationWindow(signal, timezone); return Promise.resolve( @@ -654,7 +789,8 @@ async function createSources(params: { .filter( (observation) => observation.outcome.next.type !== "resolve" && - observation.recheckAt <= params.asOf + observation.recheckAt <= params.asOf && + !params.excludedSignalKeys.has(observation.signal.signalKey) ) .sort( (a, b) => @@ -701,6 +837,119 @@ async function createSources(params: { }; } +interface PlannedWorkerSignal { + signal: DetectedSignal; + signalKey: string; +} + +async function planWorkerSignals(params: { + asOf: Date; + batchSize: number; + site: RankedWebsite; + sources: InvestigationSources; + attemptSignal: AbortSignal; +}): Promise { + const [{ planCoveragePortfolio }, { signalKeyForDetectedSignal }] = + await Promise.all([ + import("./coverage-planner"), + import("./investigation"), + ]); + const detectParams = { + lookbackDays: 7, + timezone: params.site.timezone, + websiteId: params.site.id, + }; + const today = dayjs(params.asOf).tz(params.site.timezone); + const metricDiagnostics: DetectionDiagnostics = { failedFamilies: 0 }; + const definitionDiagnostics: FunnelGoalDetectionDiagnostics = { + failedDefinitions: 0, + }; + const due = await params.sources.loadDueInvestigation({ + asOf: params.asOf, + organizationId: params.site.organizationId, + websiteId: params.site.id, + }); + const [ + dueResult, + metricResult, + definitionResult, + measurementResult, + routeHealthResult, + ] = await Promise.allSettled([ + due + ? params.sources.remeasureSignal( + detectParams, + due.signal, + today, + params.attemptSignal + ) + : Promise.resolve(null), + params.sources.detectMetricSignals( + detectParams, + undefined, + today, + params.attemptSignal, + metricDiagnostics + ), + params.sources.detectDefinitionSignals(detectParams, today, undefined, { + diagnostics: definitionDiagnostics, + }), + params.sources.detectMeasurementRecommendationSignals( + detectParams, + today, + undefined, + params.attemptSignal + ), + params.sources.detectRouteHealthSignals( + detectParams, + today, + undefined, + params.attemptSignal + ), + ]); + const failed = [ + dueResult, + metricResult, + definitionResult, + measurementResult, + routeHealthResult, + ].find((result) => result.status === "rejected"); + const signalsByKey = new Map(); + for (const signal of [ + ...(dueResult.status === "fulfilled" && dueResult.value + ? [dueResult.value] + : []), + ...(metricResult.status === "fulfilled" ? metricResult.value : []), + ...(definitionResult.status === "fulfilled" ? definitionResult.value : []), + ...(measurementResult.status === "fulfilled" + ? measurementResult.value + : []), + ...(routeHealthResult.status === "fulfilled" + ? routeHealthResult.value + : []), + ]) { + const key = signalKeyForDetectedSignal(signal); + if (!signalsByKey.has(key)) { + signalsByKey.set(key, signal); + } + } + if (signalsByKey.size === 0 && failed?.status === "rejected") { + throw failed.reason; + } + return planCoveragePortfolio([...signalsByKey.values()], { + dueSignalKey: + dueResult.status === "fulfilled" && dueResult.value + ? signalKeyForDetectedSignal(dueResult.value) + : null, + reason: "manual", + }) + .slice(0, params.batchSize) + .map((signal) => ({ + signal, + signalKey: signalKeyForDetectedSignal(signal), + })); +} + async function runCancellableAttempt( work: (signal: AbortSignal) => Promise, timeoutMs = CASE_ATTEMPT_TIMEOUT_MS @@ -856,7 +1105,7 @@ function sanitizeOutcome( : null; } -function metricFamily(key: string): string { +export function metricFamily(key: string): string { if (key.startsWith("goal:")) { return "goal"; } @@ -866,6 +1115,15 @@ function metricFamily(key: string): string { if (key.startsWith("custom_event:")) { return "custom_event"; } + if (key.startsWith("error:")) { + return "error"; + } + if (key.startsWith("route:")) { + return "route_health"; + } + if (key.startsWith("measurement:")) { + return "measurement"; + } return key; } @@ -935,6 +1193,49 @@ function projectTraceUsage( }; } +function subjectAliasForSignal( + signal: NonNullable, + subjectAliases: Map +): string | null { + const subjectKey = `${signal.entity.type}:${signal.entity.id}`; + const existing = subjectAliases.get(subjectKey); + if (existing) { + return existing; + } + const normalized = signal.entity.type.replaceAll("_", " "); + const entity = `${normalized[0]?.toUpperCase() ?? ""}${normalized.slice(1)}`; + const alias = `${entity} ${subjectAliases.size + 1}`; + subjectAliases.set(subjectKey, alias); + return alias; +} + +function subjectAliasFor( + artifact: WebsiteInvestigationArtifact, + subjectAliases: Map +): string | null { + return artifact.signal + ? subjectAliasForSignal(artifact.signal, subjectAliases) + : null; +} + +function projectSelectedSignal( + signal: WebsiteInvestigationArtifact["signal"], + subjectAlias: string | null +): ShadowCase["selectedSignal"] { + return signal + ? { + changePercent: signal.changePercent, + current: signal.metric.current, + entityType: signal.entity.type, + metric: metricFamily(signal.signalKey), + period: signal.period, + previous: signal.metric.previous ?? null, + severity: signal.severity, + subject: subjectAlias ?? "[entity]", + } + : null; +} + function projectCase(params: { agent: ShadowAgentUsage | null; artifact: WebsiteInvestigationArtifact; @@ -962,18 +1263,7 @@ function projectCase(params: { } : undefined ), - selectedSignal: artifact.signal - ? { - changePercent: artifact.signal.changePercent, - current: artifact.signal.metric.current, - entityType: artifact.signal.entity.type, - metric: metricFamily(artifact.signal.signalKey), - period: artifact.signal.period, - previous: artifact.signal.metric.previous ?? null, - severity: artifact.signal.severity, - subject: params.subjectAlias ?? "[entity]", - } - : null, + selectedSignal: projectSelectedSignal(artifact.signal, params.subjectAlias), status: artifact.status, trace: params.trace.map(({ tools }) => ({ tools })), toolCallCount: params.trace.reduce( @@ -989,7 +1279,9 @@ function failedCase(params: { caseId: string; durationMs: number; error: unknown; + selectedSignal?: WebsiteInvestigationArtifact["signal"]; secrets: string[]; + subjectAlias?: string | null; trace: InsightAgentStepTrace[]; }): ShadowCase { const cause = @@ -1015,7 +1307,10 @@ function failedCase(params: { ? params.error.constructor.name : typeof params.error, outcome: null, - selectedSignal: null, + selectedSignal: projectSelectedSignal( + params.selectedSignal ?? null, + params.subjectAlias ?? null + ), status: "error", trace: params.trace.map(({ tools }) => ({ tools })), toolCallCount: params.trace.reduce( @@ -1105,16 +1400,19 @@ async function runProductionShadow(options: CliOptions): Promise { const referenceTime = options.referenceTime; const restoreConsole = silenceLibraryConsole(); try { - const ranked = await loadCohort( - options.minEvents, - options.limit, - referenceTime - ); + const ranked = options.websiteId + ? [options.websiteId] + : await loadCohort(options.minEvents, options.limit, referenceTime); const metadata = await loadMetadata(ranked); const [ - { investigateWebsiteWithSources, resolveInvestigationAsOf }, + { investigateWebsiteWithSources }, + { prepareInvestigation }, { nextRecheckAt }, - ] = await Promise.all([import("./generation"), import("./observations")]); + ] = await Promise.all([ + import("./generation"), + import("./investigation"), + import("./observations"), + ]); const siteCases = await mapConcurrent( metadata.sites, options.concurrency, @@ -1145,94 +1443,317 @@ async function runProductionShadow(options: CliOptions): Promise { .map((row) => row.text), ]; for (const offsetDays of [...options.offsets].sort((a, b) => b - a)) { - const caseId = `site-${String(siteIndex + 1).padStart(2, "0")}@d-${offsetDays}`; - const asOf = resolveInvestigationAsOf( - dateAtOffset(referenceTime, offsetDays, site.timezone), - site.timezone + const caseIdPrefix = `site-${String(siteIndex + 1).padStart(2, "0")}@d-${offsetDays}`; + const asOf = resolveShadowAsOf( + referenceTime, + offsetDays, + site.timezone, + options.asOfMode ); - const startedAt = Date.now(); - const trace: InsightAgentStepTrace[] = []; - let agent: ShadowAgentUsage | null = null; - try { - const input = { - asOf, - domain: site.domain, - githubRepository: offsetDays === 0 ? site.githubRepository : null, - name: site.name, - organizationId: site.organizationId, - timezone: site.timezone, - websiteId: site.id, - }; - const artifact = await runCancellableAttempt( - async (attemptSignal) => { + const offsetStartedAt = Date.now(); + const input = { + asOf, + domain: site.domain, + forceRecheck: true, + githubRepository: offsetDays === 0 ? site.githubRepository : null, + name: site.name, + organizationId: site.organizationId, + timezone: site.timezone, + websiteId: site.id, + }; + if (options.workerFanout) { + const preRunObservations = [...observations]; + let planned: PlannedWorkerSignal[]; + try { + planned = await runCancellableAttempt(async (attemptSignal) => { const sources = await createSources({ annotations: metadata.annotations, asOf, attemptSignal, + excludedSignalKeys: new Set(), funnels: metadata.funnels, goals: metadata.goals, historical: offsetDays > 0, model: options.model, - observations, - onAgentResult: (result) => { - agent = projectAgentUsage(result); - }, + observations: preRunObservations, + onAgentResult: () => undefined, site, - trace, + trace: [], + }); + return planWorkerSignals({ + asOf, + attemptSignal, + batchSize: options.batchSize, + site, + sources, }); - return investigateWebsiteWithSources(input, sources); - } - ); - if (artifact.outcome && artifact.signal) { - observations.push({ - asOf, - evidence: artifact.evidence, - outcome: artifact.outcome, - recheckAt: nextRecheckAt(asOf, artifact.outcome.next), - signal: artifact.signal, }); + } catch (error) { + cases.push( + failedCase({ + agent: null, + asOf, + caseId: `${caseIdPrefix}#plan-error`, + durationMs: Date.now() - offsetStartedAt, + error, + secrets: siteSecrets, + trace: [], + }) + ); + continue; + } + if (planned.length === 0) { + cases.push( + projectCase({ + agent: null, + artifact: { + asOf: asOf.toISOString(), + evidence: [], + outcome: null, + signal: null, + status: "no_signals", + }, + caseId: `${caseIdPrefix}#worker-0`, + durationMs: Date.now() - offsetStartedAt, + secrets: siteSecrets, + subjectAlias: null, + trace: [], + }) + ); + continue; } - const secrets = [ - ...siteSecrets, - artifact.signal?.entity.id ?? "", - artifact.signal?.entity.label ?? "", - ]; - let subjectAlias: string | null = null; - if (artifact.signal) { - const subjectKey = `${artifact.signal.entity.type}:${artifact.signal.entity.id}`; - subjectAlias = subjectAliases.get(subjectKey) ?? null; - if (!subjectAlias) { - const normalized = artifact.signal.entity.type.replaceAll( - "_", - " " + const attemptsBySignal = new Map< + string, + { + agent: ShadowAgentUsage | null; + durationMs: number; + trace: InsightAgentStepTrace[]; + } + >(); + const workerResults = await runBoundedWorkerFanout( + planned, + options.workerConcurrency, + async (worker) => { + const startedAt = Date.now(); + const trace: InsightAgentStepTrace[] = []; + let agent: ShadowAgentUsage | null = null; + try { + const artifact = await runCancellableAttempt( + async (attemptSignal) => { + const sources = await createSources({ + annotations: metadata.annotations, + asOf, + attemptSignal, + excludedSignalKeys: new Set(), + funnels: metadata.funnels, + goals: metadata.goals, + historical: offsetDays > 0, + model: options.model, + observations: preRunObservations, + onAgentResult: (result) => { + agent = projectAgentUsage(result); + }, + site, + trace, + }); + return investigateWebsiteWithSources( + { ...input, selectedSignalKey: worker.signalKey }, + sources + ); + } + ); + attemptsBySignal.set(worker.signalKey, { + agent, + durationMs: Date.now() - startedAt, + trace, + }); + return artifact; + } catch (error) { + attemptsBySignal.set(worker.signalKey, { + agent: agent ?? projectTraceUsage(trace), + durationMs: Date.now() - startedAt, + trace, + }); + throw error; + } + } + ); + for (const [workerIndex, result] of workerResults.entries()) { + const attempt = attemptsBySignal.get( + result.candidate.signalKey + ) ?? { + agent: null, + durationMs: 0, + trace: [], + }; + if (result.status === "rejected") { + const selectedSignal = prepareInvestigation( + result.candidate.signal, + 7 + ).signal; + const subjectAlias = subjectAliasForSignal( + selectedSignal, + subjectAliases + ); + cases.push( + failedCase({ + agent: attempt.agent, + asOf, + caseId: `${caseIdPrefix}#worker-${workerIndex + 1}`, + durationMs: attempt.durationMs, + error: result.reason, + selectedSignal, + secrets: [ + ...siteSecrets, + selectedSignal.entity.id, + selectedSignal.entity.label, + ], + subjectAlias, + trace: attempt.trace, + }) ); - const entity = `${normalized[0]?.toUpperCase() ?? ""}${normalized.slice(1)}`; - subjectAlias = `${entity} ${subjectAliases.size + 1}`; - subjectAliases.set(subjectKey, subjectAlias); + continue; } + const artifact = result.value; + const secrets = [ + ...siteSecrets, + artifact.signal?.entity.id ?? "", + artifact.signal?.entity.label ?? "", + ]; + cases.push( + projectCase({ + agent: attempt.agent, + artifact, + caseId: `${caseIdPrefix}#worker-${workerIndex + 1}`, + durationMs: attempt.durationMs, + secrets, + subjectAlias: subjectAliasFor(artifact, subjectAliases), + trace: attempt.trace, + }) + ); } - cases.push( - projectCase({ - agent, - artifact, - caseId, - durationMs: Date.now() - startedAt, - secrets, - subjectAlias, - trace, - }) + continue; + } + const attempts = new WeakMap< + WebsiteInvestigationArtifact, + { + agent: ShadowAgentUsage | null; + durationMs: number; + trace: InsightAgentStepTrace[]; + } + >(); + let failedAttempt: + | { + agent: ShadowAgentUsage | null; + durationMs: number; + trace: InsightAgentStepTrace[]; + } + | undefined; + try { + const artifacts = await runDistinctSignalBatch( + options.batchSize, + async (excludedSignalKeys) => { + const startedAt = Date.now(); + const trace: InsightAgentStepTrace[] = []; + let agent: ShadowAgentUsage | null = null; + let artifact: WebsiteInvestigationArtifact; + try { + artifact = await runCancellableAttempt( + async (attemptSignal) => { + const sources = await createSources({ + annotations: metadata.annotations, + asOf, + attemptSignal, + excludedSignalKeys, + funnels: metadata.funnels, + goals: metadata.goals, + historical: offsetDays > 0, + model: options.model, + observations, + onAgentResult: (result) => { + agent = projectAgentUsage(result); + }, + site, + trace, + }); + return investigateWebsiteWithSources(input, sources); + } + ); + } catch (error) { + failedAttempt = { + agent: agent ?? projectTraceUsage(trace), + durationMs: Date.now() - startedAt, + trace, + }; + throw error; + } + attempts.set(artifact, { + agent, + durationMs: Date.now() - startedAt, + trace, + }); + return artifact; + }, + (artifact) => { + if (artifact.outcome && artifact.signal) { + observations.push({ + asOf, + evidence: artifact.evidence, + outcome: artifact.outcome, + recheckAt: nextRecheckAt(asOf, artifact.outcome.next), + signal: artifact.signal, + }); + } + } ); + for (const [batchIndex, artifact] of artifacts.entries()) { + const attempt = attempts.get(artifact) ?? { + agent: failedAttempt?.agent ?? null, + durationMs: 0, + trace: [], + }; + const secrets = [ + ...siteSecrets, + artifact.signal?.entity.id ?? "", + artifact.signal?.entity.label ?? "", + ]; + let subjectAlias: string | null = null; + if (artifact.signal) { + const subjectKey = `${artifact.signal.entity.type}:${artifact.signal.entity.id}`; + subjectAlias = subjectAliases.get(subjectKey) ?? null; + if (!subjectAlias) { + const normalized = artifact.signal.entity.type.replaceAll( + "_", + " " + ); + const entity = `${normalized[0]?.toUpperCase() ?? ""}${normalized.slice(1)}`; + subjectAlias = `${entity} ${subjectAliases.size + 1}`; + subjectAliases.set(subjectKey, subjectAlias); + } + } + cases.push( + projectCase({ + agent: attempt.agent, + artifact, + caseId: `${caseIdPrefix}#${batchIndex + 1}`, + durationMs: attempt.durationMs, + secrets, + subjectAlias, + trace: attempt.trace, + }) + ); + } } catch (error) { - agent ??= projectTraceUsage(trace); cases.push( failedCase({ - agent, + agent: failedAttempt?.agent ?? null, asOf, - caseId, - durationMs: Date.now() - startedAt, + caseId: `${caseIdPrefix}#error`, + durationMs: + failedAttempt?.durationMs ?? Date.now() - offsetStartedAt, error, secrets: siteSecrets, - trace, + trace: failedAttempt?.trace ?? [], }) ); } @@ -1245,6 +1766,8 @@ async function runProductionShadow(options: CliOptions): Promise { aggregate: aggregateCases(cases), cases, meta: { + asOfMode: options.asOfMode, + batchSize: options.batchSize, concurrency: options.concurrency, dataAccess: { clickhouse: "read_only", @@ -1261,6 +1784,8 @@ async function runProductionShadow(options: CliOptions): Promise { offsets: options.offsets, referenceTime: referenceTime.toISOString(), sites: metadata.sites.length, + workerConcurrency: options.workerConcurrency, + workerFanout: options.workerFanout, }, }; } finally { diff --git a/apps/insights/src/route-health-detection.test.ts b/apps/insights/src/route-health-detection.test.ts new file mode 100644 index 0000000000..c547a66df4 --- /dev/null +++ b/apps/insights/src/route-health-detection.test.ts @@ -0,0 +1,233 @@ +import { describe, expect, it } from "bun:test"; +import type { InvestigationSignal } from "@databuddy/shared/insights"; +import dayjs from "dayjs"; +import type { DetectSignalsParams } from "./detection"; +import { + canonicalStaticRoute, + detectRouteHealthSignals, + remeasureRouteHealthSignal, + type RouteHealthDetectionDeps, + type RouteHealthQueryInput, +} from "./route-health-detection"; + +const TODAY = dayjs("2026-08-01"); +const PARAMS: DetectSignalsParams = { + lookbackDays: 7, + timezone: "UTC", + websiteId: "test-site", +}; + +function queryDeps( + rows: (input: RouteHealthQueryInput) => Record[] +): RouteHealthDetectionDeps { + return { query: async (input) => rows(input) }; +} + +function routeSignal(signalKey: string): InvestigationSignal { + return { + changePercent: 56.52, + entity: { id: "/explore", label: "Route /explore", type: "error" }, + metric: { + current: 36, + format: "number", + label: "Errors on /explore", + previous: 23, + }, + period: { + current: { from: "2026-07-25", to: "2026-07-31" }, + previous: { from: "2026-07-18", to: "2026-07-24" }, + }, + severity: "warning", + sentiment: "negative", + signalKey, + }; +} + +describe("canonicalStaticRoute", () => { + it("retains only a conservative fixed vocabulary of static routes", () => { + expect(canonicalStaticRoute("/explore")).toBe("/explore"); + expect(canonicalStaticRoute("/sign-in/")).toBe("/sign-in"); + expect(canonicalStaticRoute("/creations")).toBe("/creations"); + expect( + canonicalStaticRoute( + "https://quiver.example/explore?email=ari@example.com&token=private" + ) + ).toBe("/explore"); + }); + + it("rejects identifiers, emails, slugs, encoded values, and non-path inputs", () => { + expect(canonicalStaticRoute("/users/ari")).toBeNull(); + expect(canonicalStaticRoute("/creations/019fb864-acd8-7000-8186-24934df81e46")).toBeNull(); + expect(canonicalStaticRoute("/explore/12345")).toBeNull(); + expect(canonicalStaticRoute("/explore/ari@example.com")).toBeNull(); + expect(canonicalStaticRoute("/explore/%61ri")).toBeNull(); + expect(canonicalStaticRoute("explore")).toBeNull(); + }); +}); + +describe("detectRouteHealthSignals", () => { + it("finds high-reach route regressions and omits raw dynamic paths", async () => { + const requests: RouteHealthQueryInput[] = []; + const signals = await detectRouteHealthSignals( + PARAMS, + TODAY, + { + query: async (input) => { + requests.push(input); + if (input.type === "errors_by_page" && input.from === "2026-07-25") { + return [ + { errors: 36, name: "/explore", users: 35 }, + { + errors: 120, + name: "/users/ari@example.com?token=private", + users: 90, + }, + ]; + } + if (input.type === "errors_by_page") { + return [{ errors: 23, name: "/explore", users: 19 }]; + } + if (input.from === "2026-07-25") { + return [ + { metric_name: "LCP", p75: 4_000, page: "/creations", samples: 48 }, + { + metric_name: "INP", + p75: 600, + page: "/explore/019fb864-acd8-7000-8186-24934df81e46", + samples: 80, + }, + ]; + } + return [{ metric_name: "LCP", p75: 2_500, page: "/creations", samples: 50 }]; + }, + } + ); + + expect(requests).toHaveLength(4); + expect(requests.map((request) => request.type).sort()).toEqual([ + "errors_by_page", + "errors_by_page", + "vitals_by_page", + "vitals_by_page", + ]); + expect(requests.every((request) => request.limit === 500)).toBe(true); + expect(signals).toHaveLength(2); + expect(signals).toContainEqual( + expect.objectContaining({ + current: 36, + entityId: "/explore", + entityLabel: "Route /explore", + metric: "error_count", + severity: "warning", + subjectKey: "route:error:/explore", + }) + ); + expect(signals).toContainEqual( + expect.objectContaining({ + current: 4_000, + entityId: "/creations", + metric: "lcp", + severity: "warning", + subjectKey: "route:lcp:/creations", + }) + ); + const serialized = JSON.stringify(signals); + expect(serialized).not.toContain("ari@example.com"); + expect(serialized).not.toContain("private"); + expect(serialized).not.toContain("019fb864"); + }); + + it("suppresses low-reach errors and non-regressing or healthy vital rows", async () => { + const signals = await detectRouteHealthSignals( + PARAMS, + TODAY, + queryDeps((input) => { + if (input.type === "errors_by_page" && input.from === "2026-07-25") { + return [{ errors: 30, name: "/sign-in", users: 4 }]; + } + if (input.type === "errors_by_page") { + return [{ errors: 10, name: "/sign-in", users: 4 }]; + } + if (input.from === "2026-07-25") { + return [ + { metric_name: "LCP", p75: 2_400, page: "/explore", samples: 60 }, + { metric_name: "INP", p75: 220, page: "/sign-in", samples: 19 }, + ]; + } + return [ + { metric_name: "LCP", p75: 1_500, page: "/explore", samples: 60 }, + { metric_name: "INP", p75: 120, page: "/sign-in", samples: 30 }, + ]; + }) + ); + + expect(signals).toEqual([]); + }); + + it("requires a material relative error increase as well as an absolute increase", async () => { + const signals = await detectRouteHealthSignals( + PARAMS, + TODAY, + queryDeps((input) => { + if (input.type === "errors_by_page") { + return [ + { + errors: input.from === "2026-07-25" ? 30 : 25, + name: "/explore", + users: 12, + }, + ]; + } + return []; + }) + ); + + expect(signals).toEqual([]); + }); +}); + +describe("remeasureRouteHealthSignal", () => { + it("returns a route recovery without applying the discovery impact threshold", async () => { + const requests: RouteHealthQueryInput[] = []; + const signal = await remeasureRouteHealthSignal( + PARAMS, + routeSignal("route:error:/explore"), + TODAY, + queryDeps((input) => { + requests.push(input); + return input.from === "2026-07-25" + ? [{ errors: 3, name: "/explore", users: 2 }] + : [{ errors: 36, name: "/explore", users: 35 }]; + }) + ); + + expect(signal).toMatchObject({ + baseline: 36, + current: 3, + direction: "down", + subjectKey: "route:error:/explore", + }); + expect(requests.map((request) => request.filters)).toEqual([ + [{ field: "path", op: "eq", value: "/explore" }], + [{ field: "path", op: "eq", value: "/explore" }], + ]); + }); + + it("refuses a stored route key that is not already canonical and static", async () => { + let calls = 0; + const signal = await remeasureRouteHealthSignal( + PARAMS, + routeSignal("route:error:/users/ari@example.com?token=private"), + TODAY, + { + query: async () => { + calls += 1; + return []; + }, + } + ); + + expect(signal).toBeNull(); + expect(calls).toBe(0); + }); +}); diff --git a/apps/insights/src/route-health-detection.ts b/apps/insights/src/route-health-detection.ts new file mode 100644 index 0000000000..51c16f9c44 --- /dev/null +++ b/apps/insights/src/route-health-detection.ts @@ -0,0 +1,585 @@ +import { executeQuery } from "@databuddy/ai/query"; +import type { InvestigationSignal } from "@databuddy/shared/insights"; +import dayjs from "dayjs"; +import { + type DetectedSignal, + type DetectSignalsParams, + makeWowSignal, + wowWindow, +} from "./detection"; + +const ROUTE_QUERY_LIMIT = 500; +const MIN_ERROR_COUNT = 10; +const MIN_ERROR_DELTA = 5; +const MIN_ERROR_USERS = 5; +const MIN_ERROR_DELTA_PERCENT = 40; +const MIN_VITAL_SAMPLES = 20; +const MIN_VITAL_DELTA_PERCENT = 30; +const MAX_ROUTE_LENGTH = 120; +const MAX_RAW_ROUTE_LENGTH = 2048; + +const ABSOLUTE_URL_PATTERN = /^[a-z][a-z\d.+-]*:\/\//i; +const QUERY_OR_FRAGMENT_PATTERN = /[?#]/; +const STATIC_ROUTE_SEGMENT_PATTERN = /^[a-z][a-z-]{0,47}$/; + +const STATIC_ROUTE_SEGMENTS = new Set([ + "about", + "account", + "accounts", + "analytics", + "app", + "auth", + "billing", + "blog", + "checkout", + "contact", + "creations", + "dashboard", + "docs", + "download", + "explore", + "features", + "feed", + "help", + "home", + "integrations", + "login", + "onboarding", + "plans", + "pricing", + "privacy", + "profile", + "register", + "reports", + "search", + "security", + "settings", + "sign-in", + "sign-up", + "signin", + "signup", + "status", + "support", + "team", + "terms", + "upgrade", + "welcome", +]); + +const VITALS = { + INP: { + badThreshold: 200, + label: "Interaction speed (INP)", + maxPlausible: 10_000, + }, + LCP: { + badThreshold: 2500, + label: "Page load time (LCP)", + maxPlausible: 60_000, + }, +} as const; + +type RouteVital = keyof typeof VITALS; +type RouteHealthQueryType = "errors_by_page" | "vitals_by_page"; + +export interface RouteHealthQueryInput { + filters?: Array<{ field: "path"; op: "eq"; value: string }>; + from: string; + limit: number; + projectId: string; + timezone: string; + to: string; + type: RouteHealthQueryType; +} + +export type RouteHealthQuery = ( + input: RouteHealthQueryInput, + abortSignal?: AbortSignal +) => Promise[]>; + +export interface RouteHealthDetectionDeps { + query?: RouteHealthQuery; +} + +interface RouteErrors { + errors: number; + users: number; +} + +interface RouteVitalValue { + p75: number; + samples: number; +} + +interface RouteSignalSpec { + kind: "error" | "vital"; + metric?: RouteVital; + route: string; +} + +function defaultQuery( + input: RouteHealthQueryInput, + abortSignal?: AbortSignal +): Promise[]> { + return executeQuery(input, undefined, input.timezone, abortSignal); +} + +function finiteNumber(value: unknown): number { + const number = Number(value); + return Number.isFinite(number) ? number : 0; +} + +function positiveNumber(value: unknown): number { + const number = finiteNumber(value); + return number > 0 ? number : 0; +} + +function stringValue(value: unknown): string | null { + return typeof value === "string" && value.length > 0 ? value : null; +} + +/** + * Keep a route only when every segment belongs to a fixed static vocabulary. + * Dynamic values are rejected rather than redacted so neither signal identity + * nor evidence can accidentally retain a user, identifier, or query value. + */ +export function canonicalStaticRoute(value: string): string | null { + if (value.length === 0 || value.length > MAX_RAW_ROUTE_LENGTH) { + return null; + } + + let pathname = value.trim(); + if (!pathname) { + return null; + } + + if (ABSOLUTE_URL_PATTERN.test(pathname)) { + try { + pathname = new URL(pathname).pathname; + } catch { + return null; + } + } + + pathname = pathname.split(QUERY_OR_FRAGMENT_PATTERN, 1)[0] ?? ""; + if (pathname === "/") { + return pathname; + } + if ( + !pathname.startsWith("/") || + pathname.startsWith("//") || + pathname.length > MAX_ROUTE_LENGTH + ) { + return null; + } + + const segments = pathname.split("/").filter(Boolean); + if ( + segments.length === 0 || + segments.some((segment) => { + const normalized = segment.toLowerCase(); + return !( + STATIC_ROUTE_SEGMENT_PATTERN.test(normalized) && + STATIC_ROUTE_SEGMENTS.has(normalized) + ); + }) + ) { + return null; + } + + return `/${segments.map((segment) => segment.toLowerCase()).join("/")}`; +} + +function routeFromRow(row: Record): string | null { + return canonicalStaticRoute( + stringValue(row.page) ?? stringValue(row.name) ?? "" + ); +} + +function groupErrors( + rows: Record[] +): Map { + const grouped = new Map(); + for (const row of rows) { + const route = routeFromRow(row); + if (!route) { + continue; + } + const current = grouped.get(route) ?? { errors: 0, users: 0 }; + grouped.set(route, { + errors: current.errors + positiveNumber(row.errors), + users: Math.max(current.users, positiveNumber(row.users)), + }); + } + return grouped; +} + +function vitalFromRow(row: Record): RouteVital | null { + const value = stringValue(row.metric_name)?.toUpperCase(); + return value === "LCP" || value === "INP" ? value : null; +} + +function groupVitals( + rows: Record[] +): Map { + const grouped = new Map(); + for (const row of rows) { + const route = routeFromRow(row); + const metric = vitalFromRow(row); + const p75 = positiveNumber(row.p75); + const samples = positiveNumber(row.samples); + if (!(route && metric) || p75 === 0 || samples === 0) { + continue; + } + const key = `${metric}:${route}`; + const previous = grouped.get(key); + if (previous && previous.samples >= samples) { + continue; + } + grouped.set(key, { p75, samples }); + } + return grouped; +} + +function routeEntityLabel(route: string): string { + return `Route ${route}`; +} + +function routeErrorSignal(params: { + applyThreshold: boolean; + baseline: RouteErrors; + current: RouteErrors; + detectedAt: string; + route: string; +}): DetectedSignal | null { + const delta = + params.baseline.errors === 0 + ? params.current.errors === 0 + ? 0 + : 100 + : ((params.current.errors - params.baseline.errors) / + params.baseline.errors) * + 100; + if ( + params.applyThreshold && + (params.current.errors <= params.baseline.errors || + params.current.errors < MIN_ERROR_COUNT || + params.current.errors - params.baseline.errors < MIN_ERROR_DELTA || + params.current.users < MIN_ERROR_USERS || + delta < MIN_ERROR_DELTA_PERCENT) + ) { + return null; + } + + const signal = makeWowSignal( + "error_count", + `Errors on ${params.route}`, + params.current.errors, + params.baseline.errors, + params.detectedAt + ); + const isCritical = + params.current.users >= 20 && + params.current.errors >= 20 && + signal.deltaPercent >= 60; + return { + ...signal, + definitionEvidence: `Route ${params.route} logged ${params.current.errors} errors affecting ${params.current.users} people, compared with ${params.baseline.errors} errors affecting ${params.baseline.users} people in the preceding period.`, + entityId: params.route, + entityLabel: routeEntityLabel(params.route), + severity: params.applyThreshold + ? isCritical + ? "critical" + : "warning" + : signal.severity, + subjectKey: `route:error:${params.route}`, + }; +} + +function routeVitalSignal(params: { + applyThreshold: boolean; + baseline: RouteVitalValue; + current: RouteVitalValue; + detectedAt: string; + metric: RouteVital; + route: string; +}): DetectedSignal | null { + const vital = VITALS[params.metric]; + if ( + params.current.samples < MIN_VITAL_SAMPLES || + params.baseline.samples < MIN_VITAL_SAMPLES || + params.current.p75 > vital.maxPlausible || + params.baseline.p75 > vital.maxPlausible + ) { + return null; + } + const delta = + ((params.current.p75 - params.baseline.p75) / params.baseline.p75) * 100; + if ( + params.applyThreshold && + (params.current.p75 <= params.baseline.p75 || + params.current.p75 <= vital.badThreshold || + delta < MIN_VITAL_DELTA_PERCENT) + ) { + return null; + } + + const metric = params.metric.toLowerCase(); + const signal = makeWowSignal( + metric, + `${vital.label} on ${params.route}`, + params.current.p75, + params.baseline.p75, + params.detectedAt, + { round: true } + ); + const isCritical = params.current.samples >= 100 && signal.deltaPercent >= 60; + return { + ...signal, + definitionEvidence: `Route ${params.route} recorded p75 ${params.metric} of ${signal.current} ms across ${params.current.samples} samples, compared with ${signal.baseline} ms across ${params.baseline.samples} samples in the preceding period.`, + entityId: params.route, + entityLabel: routeEntityLabel(params.route), + severity: params.applyThreshold + ? isCritical + ? "critical" + : "warning" + : signal.severity, + subjectKey: `route:${metric}:${params.route}`, + }; +} + +function compareSignals(left: DetectedSignal, right: DetectedSignal): number { + const severity = { critical: 2, warning: 1, info: 0 } as const; + return ( + severity[right.severity] - severity[left.severity] || + Math.abs(right.deltaPercent) - Math.abs(left.deltaPercent) || + (left.subjectKey ?? left.metric).localeCompare( + right.subjectKey ?? right.metric + ) + ); +} + +function routeSignalSpec(prior: InvestigationSignal): RouteSignalSpec | null { + const specs: { + kind: RouteSignalSpec["kind"]; + metric?: RouteVital; + prefix: string; + }[] = [ + { kind: "error", prefix: "route:error:" }, + { kind: "vital", metric: "LCP", prefix: "route:lcp:" }, + { kind: "vital", metric: "INP", prefix: "route:inp:" }, + ]; + for (const spec of specs) { + if (!prior.signalKey.startsWith(spec.prefix)) { + continue; + } + const route = canonicalStaticRoute( + prior.signalKey.slice(spec.prefix.length) + ); + if (!route || `${spec.prefix}${route}` !== prior.signalKey) { + return null; + } + return { ...spec, route }; + } + return null; +} + +function queryInput(params: { + from: string; + route?: string; + to: string; + type: RouteHealthQueryType; + values: DetectSignalsParams; +}): RouteHealthQueryInput { + return { + ...(params.route + ? { + filters: [ + { field: "path" as const, op: "eq" as const, value: params.route }, + ], + } + : {}), + from: params.from, + limit: ROUTE_QUERY_LIMIT, + projectId: params.values.websiteId, + to: params.to, + timezone: params.values.timezone, + type: params.type, + }; +} + +/** + * Detect high-confidence route regressions from aggregate error and web-vital + * queries. It deliberately omits arbitrary routes rather than leaking a + * potentially user-specific path into an investigation subject or evidence. + */ +export async function detectRouteHealthSignals( + params: DetectSignalsParams, + today: dayjs.Dayjs = dayjs(), + dependencies: RouteHealthDetectionDeps = {}, + abortSignal?: AbortSignal +): Promise { + const query = dependencies.query ?? defaultQuery; + const window = wowWindow(today, params.lookbackDays); + const [currentErrors, previousErrors, currentVitals, previousVitals] = + await Promise.all([ + query( + queryInput({ + from: window.currentFrom, + to: window.currentTo, + type: "errors_by_page", + values: params, + }), + abortSignal + ), + query( + queryInput({ + from: window.previousFrom, + to: window.previousTo, + type: "errors_by_page", + values: params, + }), + abortSignal + ), + query( + queryInput({ + from: window.currentFrom, + to: window.currentTo, + type: "vitals_by_page", + values: params, + }), + abortSignal + ), + query( + queryInput({ + from: window.previousFrom, + to: window.previousTo, + type: "vitals_by_page", + values: params, + }), + abortSignal + ), + ]); + + const errorCurrent = groupErrors(currentErrors); + const errorPrevious = groupErrors(previousErrors); + const errorRoutes = new Set([ + ...errorCurrent.keys(), + ...errorPrevious.keys(), + ]); + const vitalCurrent = groupVitals(currentVitals); + const vitalPrevious = groupVitals(previousVitals); + const vitalKeys = new Set([...vitalCurrent.keys(), ...vitalPrevious.keys()]); + const signals: DetectedSignal[] = []; + + for (const route of errorRoutes) { + const signal = routeErrorSignal({ + applyThreshold: true, + baseline: errorPrevious.get(route) ?? { errors: 0, users: 0 }, + current: errorCurrent.get(route) ?? { errors: 0, users: 0 }, + detectedAt: window.currentTo, + route, + }); + if (signal) { + signals.push(signal); + } + } + + for (const key of vitalKeys) { + const [metric, route] = key.split(":", 2) as [RouteVital, string]; + const current = vitalCurrent.get(key); + const baseline = vitalPrevious.get(key); + if (!(current && baseline)) { + continue; + } + const signal = routeVitalSignal({ + applyThreshold: true, + baseline, + current, + detectedAt: window.currentTo, + metric, + route, + }); + if (signal) { + signals.push(signal); + } + } + + return signals.sort(compareSignals); +} + +/** + * Re-read a stored static-route signal without its discovery thresholds so a + * route case can record recovery. Sample plausibility floors still apply. + */ +export async function remeasureRouteHealthSignal( + params: DetectSignalsParams, + prior: InvestigationSignal, + today: dayjs.Dayjs = dayjs(), + dependencies: RouteHealthDetectionDeps = {}, + abortSignal?: AbortSignal +): Promise { + const spec = routeSignalSpec(prior); + if (!spec) { + return null; + } + const query = dependencies.query ?? defaultQuery; + const window = wowWindow(today, params.lookbackDays); + const type: RouteHealthQueryType = + spec.kind === "error" ? "errors_by_page" : "vitals_by_page"; + const [currentRows, previousRows] = await Promise.all([ + query( + queryInput({ + from: window.currentFrom, + route: spec.route, + to: window.currentTo, + type, + values: params, + }), + abortSignal + ), + query( + queryInput({ + from: window.previousFrom, + route: spec.route, + to: window.previousTo, + type, + values: params, + }), + abortSignal + ), + ]); + + if (spec.kind === "error") { + const current = groupErrors(currentRows).get(spec.route) ?? { + errors: 0, + users: 0, + }; + const baseline = groupErrors(previousRows).get(spec.route) ?? { + errors: 0, + users: 0, + }; + return routeErrorSignal({ + applyThreshold: false, + baseline, + current, + detectedAt: window.currentTo, + route: spec.route, + }); + } + + const key = `${spec.metric}:${spec.route}`; + const current = groupVitals(currentRows).get(key); + const baseline = groupVitals(previousRows).get(key); + if (!(current && baseline && spec.metric)) { + return null; + } + return routeVitalSignal({ + applyThreshold: false, + baseline, + current, + detectedAt: window.currentTo, + metric: spec.metric, + route: spec.route, + }); +} diff --git a/apps/insights/src/run-candidate-plan.test.ts b/apps/insights/src/run-candidate-plan.test.ts new file mode 100644 index 0000000000..2592867876 --- /dev/null +++ b/apps/insights/src/run-candidate-plan.test.ts @@ -0,0 +1,94 @@ +import { describe, expect, it } from "bun:test"; +import { + parseFrozenInvestigationPlan, +} from "./run-candidate-plan"; + +const candidate = { + evidence: ["The route recorded a materially higher error count."], + signal: { + changePercent: 56.52, + entity: { id: "/explore", label: "Route /explore", type: "page" }, + metric: { + current: 36, + format: "number", + label: "Errors on /explore", + previous: 23, + }, + period: { + current: { from: "2026-07-25", to: "2026-07-31" }, + previous: { from: "2026-07-18", to: "2026-07-24" }, + }, + severity: "warning", + sentiment: "negative", + signalKey: "route:error:/explore", + }, +}; + +describe("parseFrozenInvestigationPlan", () => { + it("accepts a bounded safe candidate snapshot", () => { + expect( + parseFrozenInvestigationPlan({ + asOf: "2026-08-01T12:00:00.000Z", + candidates: [candidate], + reason: "manual", + }) + ).toEqual({ + asOf: "2026-08-01T12:00:00.000Z", + candidates: [candidate], + reason: "manual", + }); + }); + + it("rejects a plan that repeats one signal", () => { + expect(() => + parseFrozenInvestigationPlan({ + asOf: "2026-08-01T12:00:00.000Z", + candidates: [candidate, candidate], + }) + ).toThrow("cannot repeat a signal"); + }); + + it("rejects a scheduled snapshot that exceeds the scheduled portfolio cap", () => { + const candidates = [ + candidate, + { + ...candidate, + signal: { ...candidate.signal, signalKey: "route:lcp:/explore" }, + }, + { + ...candidate, + signal: { ...candidate.signal, signalKey: "route:inp:/explore" }, + }, + ]; + expect(() => + parseFrozenInvestigationPlan({ + asOf: "2026-08-01T12:00:00.000Z", + candidates, + reason: "scheduled", + }) + ).toThrow("exceeds its portfolio limit"); + }); + + it("rejects a snapshot if its trigger reason changes before execution", () => { + const plan = parseFrozenInvestigationPlan({ + asOf: "2026-08-01T12:00:00.000Z", + candidates: [candidate], + reason: "manual", + }); + + expect(() => parseFrozenInvestigationPlan(plan, "scheduled")).toThrow( + "does not match its run" + ); + }); + + it("allows legacy empty plans while preserving an explicit empty disposition", () => { + expect( + parseFrozenInvestigationPlan({ + asOf: "2026-08-01T12:00:00.000Z", + candidates: [], + emptyStatus: "deferred", + reason: "scheduled", + }) + ).toMatchObject({ emptyStatus: "deferred", reason: "scheduled" }); + }); +}); diff --git a/apps/insights/src/run-candidate-plan.ts b/apps/insights/src/run-candidate-plan.ts new file mode 100644 index 0000000000..09648227e2 --- /dev/null +++ b/apps/insights/src/run-candidate-plan.ts @@ -0,0 +1,161 @@ +import { and, db, eq, isNull } from "@databuddy/db"; +import { insightRunItems } from "@databuddy/db/schema"; +import { investigationSignalSchema } from "@databuddy/shared/insights"; +import { z } from "zod"; +import { + coveragePortfolioLimit, + type CoveragePortfolioReason, +} from "./coverage-planner"; + +const frozenPlanReasonSchema = z.enum(["manual", "scheduled"]); +const emptyPlanStatusSchema = z.enum(["deferred", "no_signals"]); + +export interface InsightRunIdentity { + itemId: string; + organizationId: string; + queueJobId: string | null; + runId: string; + websiteId: string; +} + +const measurementCandidateSchema = z.discriminatedUnion("kind", [ + z + .object({ + basis: z.literal("observed_custom_event"), + kind: z.literal("event_goal_candidate"), + target: z.string().trim().min(1).max(64), + type: z.literal("EVENT"), + }) + .strict(), + z + .object({ + basis: z.literal("observed_navigation_proxy"), + kind: z.literal("page_navigation_proxy"), + target: z.string().trim().min(1).max(120), + type: z.literal("PAGE_VIEW"), + }) + .strict(), +]); + +const plannedCandidateSchema = z + .object({ + evidence: z.array(z.string().max(500)).max(20), + measurementCandidate: measurementCandidateSchema.optional(), + signal: investigationSignalSchema, + }) + .strict(); + +const frozenInvestigationPlanSchema = z + .object({ + asOf: z.string().datetime({ offset: true }), + candidates: z.array(plannedCandidateSchema).max(3), + /** Optional only to parse plans written before this field was introduced. */ + emptyStatus: emptyPlanStatusSchema.optional(), + /** Optional only to parse plans written before this field was introduced. */ + reason: frozenPlanReasonSchema.optional(), + }) + .strict() + .superRefine((plan, context) => { + const keys = plan.candidates.map((candidate) => candidate.signal.signalKey); + if (new Set(keys).size !== keys.length) { + context.addIssue({ + code: "custom", + message: "A run candidate plan cannot repeat a signal", + path: ["candidates"], + }); + } + if (plan.candidates.length > 0 && plan.emptyStatus) { + context.addIssue({ + code: "custom", + message: "Only an empty candidate plan may have an empty status", + path: ["emptyStatus"], + }); + } + }); + +export type PlannedInvestigationCandidate = z.infer< + typeof plannedCandidateSchema +>; +export type FrozenInvestigationPlan = z.infer< + typeof frozenInvestigationPlanSchema +>; + +function condition(identity: InsightRunIdentity) { + return and( + eq(insightRunItems.id, identity.itemId), + eq(insightRunItems.runId, identity.runId), + eq(insightRunItems.organizationId, identity.organizationId), + eq(insightRunItems.websiteId, identity.websiteId), + identity.queueJobId === null + ? isNull(insightRunItems.queueJobId) + : eq(insightRunItems.queueJobId, identity.queueJobId) + ); +} + +export function parseFrozenInvestigationPlan( + value: unknown, + expectedReason?: CoveragePortfolioReason +): FrozenInvestigationPlan { + const plan = frozenInvestigationPlanSchema.parse(value); + if (expectedReason && plan.reason && plan.reason !== expectedReason) { + throw new Error("Frozen candidate plan reason does not match its run"); + } + const reason = expectedReason ?? plan.reason; + if (reason && plan.candidates.length > coveragePortfolioLimit(reason)) { + throw new Error( + `Frozen ${reason} candidate plan exceeds its portfolio limit` + ); + } + return plan; +} + +export async function loadInsightRunCandidatePlan( + identity: InsightRunIdentity, + reason: CoveragePortfolioReason +): Promise { + const [item] = await db + .select({ plan: insightRunItems.candidatePlan }) + .from(insightRunItems) + .where(condition(identity)) + .limit(1); + if (!item?.plan) { + return null; + } + return parseFrozenInvestigationPlan(item.plan, reason); +} + +/** + * The first worker freezes a small deterministic portfolio. Retries load this + * exact snapshot so a changing warehouse cannot replace unfinished work with a + * different candidate halfway through a run. + */ +export function freezeInsightRunCandidatePlan( + identity: InsightRunIdentity, + reason: CoveragePortfolioReason, + proposed: FrozenInvestigationPlan +): Promise { + const parsedProposed = parseFrozenInvestigationPlan(proposed, reason); + return db.transaction(async (tx) => { + const [item] = await tx + .select({ plan: insightRunItems.candidatePlan }) + .from(insightRunItems) + .where(condition(identity)) + .limit(1) + .for("update"); + if (!item) { + throw new Error("Insight run item not found while freezing candidates"); + } + if (item.plan) { + return parseFrozenInvestigationPlan(item.plan, reason); + } + await tx + .update(insightRunItems) + .set({ + candidatePlan: parsedProposed, + candidatePlanAsOf: new Date(parsedProposed.asOf), + updatedAt: new Date(), + }) + .where(condition(identity)); + return parsedProposed; + }); +} diff --git a/apps/insights/src/worker-fanout-shadow.ts b/apps/insights/src/worker-fanout-shadow.ts new file mode 100644 index 0000000000..e5cf375956 --- /dev/null +++ b/apps/insights/src/worker-fanout-shadow.ts @@ -0,0 +1,58 @@ +export function selectDistinctWorkerCandidates( + candidates: readonly T[], + limit: number, + keyFor: (candidate: T) => string +): T[] { + const selected: T[] = []; + const keys = new Set(); + for (const candidate of candidates) { + const key = keyFor(candidate); + if (keys.has(key)) { + continue; + } + keys.add(key); + selected.push(candidate); + if (selected.length === limit) { + break; + } + } + return selected; +} + +export type WorkerFanoutResult = + | { candidate: T; status: "fulfilled"; value: R } + | { candidate: T; reason: unknown; status: "rejected" }; + +export async function runBoundedWorkerFanout( + candidates: readonly T[], + concurrency: number, + runWorker: (candidate: T) => Promise +): Promise[]> { + const results = new Array>(candidates.length); + let next = 0; + await Promise.all( + Array.from( + { length: Math.min(concurrency, candidates.length) }, + async () => { + while (next < candidates.length) { + const index = next; + next += 1; + const candidate = candidates[index]; + if (candidate === undefined) { + continue; + } + try { + results[index] = { + candidate, + status: "fulfilled", + value: await runWorker(candidate), + }; + } catch (reason) { + results[index] = { candidate, reason, status: "rejected" }; + } + } + } + ) + ); + return results; +} diff --git a/packages/db/src/drizzle/schema/insights.test.ts b/packages/db/src/drizzle/schema/insights.test.ts index 29f072d34b..4249469fd9 100644 --- a/packages/db/src/drizzle/schema/insights.test.ts +++ b/packages/db/src/drizzle/schema/insights.test.ts @@ -45,7 +45,7 @@ describe("insight generation config schema", () => { }); describe("insight observations schema", () => { - test("stores one investigation outcome per website run", () => { + test("stores one investigation outcome per distinct signal in a website run", () => { const config = getTableConfig(insightObservations); expect(config.columns.map((column) => column.name)).toEqual( expect.arrayContaining([ @@ -66,12 +66,14 @@ describe("insight observations schema", () => { expect(insightObservations).not.toHaveProperty("decision"); const unique = config.indexes.find( - (index) => index.config.name === "insight_observations_run_website_uidx" + (index) => + index.config.name === "insight_observations_run_website_signal_uidx" ); expect(unique?.config.unique).toBe(true); expect(unique?.config.columns.map((column) => column.name)).toEqual([ "run_id", "website_id", + "signal_key", ]); const history = config.indexes.find( @@ -131,11 +133,13 @@ describe("insight runs schema", () => { expect(INSIGHT_RUN_ACTIVE_STATUSES).toEqual(["queued", "running"]); }); - test("stores prepared state and one durable effect per provider target", () => { + test("stores prepared state and one durable effect per insight delivery", () => { expect( getTableConfig(insightRunItems).columns.map((column) => column.name) ).toEqual( expect.arrayContaining([ + "candidate_plan", + "candidate_plan_as_of", "prepared_at", "prepared_status", "prepared_message", diff --git a/packages/db/src/drizzle/schema/insights.ts b/packages/db/src/drizzle/schema/insights.ts index 4bdf497241..ef06cd16d3 100644 --- a/packages/db/src/drizzle/schema/insights.ts +++ b/packages/db/src/drizzle/schema/insights.ts @@ -147,6 +147,16 @@ export const insightRunItems = pgTable( status: text().$type().default("queued").notNull(), attempts: integer().default(0).notNull(), resultCount: integer("result_count").default(0).notNull(), + /** + * The deterministic, read-only portfolio chosen before agents run. Keeping + * it on the run item lets retries complete the same work instead of + * rediscovering a different set of signals after telemetry changes. + */ + candidatePlan: jsonb("candidate_plan").$type(), + candidatePlanAsOf: timestamp("candidate_plan_as_of", { + precision: 3, + withTimezone: true, + }), preparedAt: timestamp("prepared_at", { precision: 3, withTimezone: true, @@ -274,9 +284,10 @@ export const insightObservations = pgTable( .notNull(), }, (table) => [ - uniqueIndex("insight_observations_run_website_uidx").on( + uniqueIndex("insight_observations_run_website_signal_uidx").on( table.runId, - table.websiteId + table.websiteId, + table.signalKey ), index("insight_observations_site_signal_asof_idx").on( table.organizationId, diff --git a/packages/rpc/src/routers/insight-generation.ts b/packages/rpc/src/routers/insight-generation.ts index 1aea64390b..c297fa3d26 100644 --- a/packages/rpc/src/routers/insight-generation.ts +++ b/packages/rpc/src/routers/insight-generation.ts @@ -6,6 +6,7 @@ import { inArray, isNull, isUniqueViolationFor, + sql, withTransaction, } from "@databuddy/db"; import { @@ -632,34 +633,57 @@ export const insightGenerationRouter = { }); }), - getRun: protectedProcedure + getLatestRun: protectedProcedure .route({ method: "POST", - path: "/insights/generation/getRun", - summary: "Get insight generation run", + path: "/insights/generation/getLatestRun", + summary: "Get the latest insight generation run", tags: ["Insights"], }) - .input(z.object({ runId: z.string() })) - .output(z.object({ status: runStatusSchema })) + .input(organizationScopeSchema) + .output( + z + .object({ + completedItems: z.number(), + failedItems: z.number(), + id: z.string(), + insightCount: z.number(), + skippedItems: z.number(), + status: runStatusSchema, + totalItems: z.number(), + }) + .nullable() + ) .handler(async ({ context, input }) => { + const organizationId = await resolveOrganization(context, input, "read"); const [run] = await db .select({ - organizationId: insightRuns.organizationId, + completedItems: insightRuns.completedItems, + failedItems: insightRuns.failedItems, + id: insightRuns.id, + skippedItems: insightRuns.skippedItems, status: insightRuns.status, + totalItems: insightRuns.totalItems, }) .from(insightRuns) - .where(eq(insightRuns.id, input.runId)) + .where(eq(insightRuns.organizationId, organizationId)) + .orderBy(desc(insightRuns.createdAt)) .limit(1); if (!run) { - throw rpcError.notFound("InsightRun", input.runId); + return null; } + const [count] = await db + .select({ + insightCount: sql`coalesce(sum(${insightRunItems.resultCount}), 0)::integer`, + }) + .from(insightRunItems) + .where( + and( + eq(insightRunItems.runId, run.id), + eq(insightRunItems.organizationId, organizationId) + ) + ); - await withWorkspace(context, { - organizationId: run.organizationId, - resource: "organization", - permissions: ["read"], - }); - - return { status: run.status }; + return { ...run, insightCount: count?.insightCount ?? 0 }; }), }; diff --git a/packages/shared/src/insights.test.ts b/packages/shared/src/insights.test.ts index 9788ca64e0..9fdbca9550 100644 --- a/packages/shared/src/insights.test.ts +++ b/packages/shared/src/insights.test.ts @@ -2,6 +2,8 @@ import { describe, expect, it } from "bun:test"; import { agentInvestigationOutcomeSchema, insightBriefItemSchema, + insightMeasurementRecommendationSchema, + insightRecommendationSchema, investigationOutcomeSchema, investigationSignalSchema, parseInvestigationOutcome, @@ -110,6 +112,145 @@ const outcomeBase = { }, }; +const agentFields = { + evidenceRefs: [{ index: 0, source: "provided" as const }], +}; + +const goalDraftRecommendation = { + action: "Create a goal for completed signup pages.", + draft: { + description: "Counts visitors who reach the completed signup page.", + filters: [], + ignoreHistoricData: false, + name: "Signup completed", + target: "/sign-up/complete", + type: "PAGE_VIEW" as const, + }, + kind: "goal_draft" as const, +}; + +const funnelDraftRecommendation = { + action: "Create a signup journey funnel.", + draft: { + description: "Measures progression from signup to onboarding.", + filters: [], + ignoreHistoricData: false, + name: "Signup journey", + steps: [ + { name: "Sign up", target: "/sign-up", type: "PAGE_VIEW" as const }, + { + name: "Onboarding complete", + target: "onboarding_completed", + type: "EVENT" as const, + }, + ], + }, + kind: "funnel_draft" as const, +}; + +const instrumentationRecommendation = { + action: "Instrument the activation milestones before creating a funnel.", + events: [ + { + description: "Emit when a visitor completes signup.", + name: "signup_completed", + }, + { + description: "Emit when a visitor completes onboarding.", + name: "onboarding_completed", + }, + ], + kind: "instrumentation" as const, +}; + +describe("insightMeasurementRecommendationSchema", () => { + it("accepts strict goal, funnel, and instrumentation recommendations", () => { + for (const recommendation of [ + goalDraftRecommendation, + funnelDraftRecommendation, + instrumentationRecommendation, + ]) { + expect( + insightMeasurementRecommendationSchema.safeParse(recommendation).success + ).toBe(true); + } + }); + + it("keeps draft targets executable without widening goal actions", () => { + for (const invalid of [ + { + ...goalDraftRecommendation, + draft: { ...goalDraftRecommendation.draft, type: "CUSTOM" }, + }, + { + ...goalDraftRecommendation, + draft: { + ...goalDraftRecommendation.draft, + filters: [ + { field: "country", operator: "equals", value: "US" }, + ], + }, + }, + { + ...funnelDraftRecommendation, + draft: { + ...funnelDraftRecommendation.draft, + steps: [funnelDraftRecommendation.draft.steps[0]], + }, + }, + { + ...funnelDraftRecommendation, + draft: { + ...funnelDraftRecommendation.draft, + filters: [ + { field: "country", operator: "equals", value: "US" }, + ], + }, + }, + { + ...funnelDraftRecommendation, + draft: { + ...funnelDraftRecommendation.draft, + steps: [ + { + ...funnelDraftRecommendation.draft.steps[0], + conditions: { plan: "pro" }, + }, + funnelDraftRecommendation.draft.steps[1], + ], + }, + }, + { + ...instrumentationRecommendation, + events: [{ name: "signup_completed" }], + }, + { + ...instrumentationRecommendation, + events: [ + instrumentationRecommendation.events[0], + instrumentationRecommendation.events[0], + ], + }, + { ...goalDraftRecommendation, operation: "edit" }, + ]) { + expect( + insightMeasurementRecommendationSchema.safeParse(invalid).success + ).toBe(false); + } + }); + + it("preserves legacy generic and null recommendations", () => { + expect( + insightRecommendationSchema.safeParse({ + action: "Review the pricing-page CTA.", + changes: null, + operation: null, + }).success + ).toBe(true); + expect(insightRecommendationSchema.safeParse(null).success).toBe(true); + }); +}); + describe("insightBriefItemSchema", () => { it("keeps readable context and measured signal data without case mechanics", () => { const recommendation = { @@ -152,6 +293,27 @@ describe("insightBriefItemSchema", () => { }).success ).toBe(false); }); + + it("returns a typed measurement recommendation", () => { + const parsed = insightBriefItemSchema.parse({ + asOf: "2026-07-07T00:00:00.000Z", + createdAt: "2026-07-07T01:00:00.000Z", + evidence: outcomeBase.evidence, + id: "observation-2", + impact: outcomeBase.impact, + investigationId: null, + recommendation: funnelDraftRecommendation, + rootCause: outcomeBase.rootCause, + signal, + summary: outcomeBase.summary, + title: outcomeBase.title, + websiteDomain: "example.com", + websiteId: "site-1", + websiteName: "Example", + }); + + expect(parsed.recommendation).toEqual(funnelDraftRecommendation); + }); }); describe("investigationOutcomeSchema", () => { @@ -162,6 +324,7 @@ describe("investigationOutcomeSchema", () => { expect( agentInvestigationOutcomeSchema.safeParse({ ...outcomeBase, + ...agentFields, publish: true, recommendation: null, }).success @@ -201,6 +364,58 @@ describe("investigationOutcomeSchema", () => { ).toBe(false); }); + it("accepts a published measurement recommendation without an executable action", () => { + const outcome = { + ...outcomeBase, + publish: true, + recommendation: instrumentationRecommendation, + }; + + expect(investigationOutcomeSchema.safeParse(outcome).success).toBe(true); + expect( + agentInvestigationOutcomeSchema.safeParse({ + ...outcome, + ...agentFields, + }).success + ).toBe(true); + }); + + it("keeps measurement drafts separate from actions and execution", () => { + const action = { + action: "Rename Signup completed to Signup completion.", + execution: { + action: "Rename Signup completed to Signup completion.", + changes: { description: null, name: "Signup completion" }, + operation: "edit" as const, + }, + recheckAt: "2026-07-20T12:00:00.000Z", + target: "Signup completed goal", + type: "act" as const, + verification: "The goal name reflects its configured target.", + }; + + expect( + investigationOutcomeSchema.safeParse({ + ...outcomeBase, + next: action, + publish: true, + recommendation: goalDraftRecommendation, + rootCause: "The goal name no longer reflects its configured target.", + }).success + ).toBe(false); + expect( + investigationOutcomeSchema.safeParse({ + ...outcomeBase, + next: { + question: "Which event marks completed signup?", + type: "ask", + }, + publish: true, + recommendation: funnelDraftRecommendation, + }).success + ).toBe(false); + }); + it("requires an exact future measurement window from the agent", () => { const action = { action: "Roll back the checkout handler.", @@ -212,6 +427,7 @@ describe("investigationOutcomeSchema", () => { expect( agentInvestigationOutcomeSchema.safeParse({ ...outcomeBase, + ...agentFields, next: action, publish: true, recommendation: null, @@ -221,6 +437,7 @@ describe("investigationOutcomeSchema", () => { expect( agentInvestigationOutcomeSchema.safeParse({ ...outcomeBase, + ...agentFields, next: { ...action, recheckAt: "2026-07-20T12:00:00.000Z" }, publish: true, recommendation: null, @@ -244,6 +461,7 @@ describe("investigationOutcomeSchema", () => { }; const candidate = { ...outcomeBase, + ...agentFields, next: action, publish: true, recommendation: null, @@ -298,6 +516,7 @@ describe("investigationOutcomeSchema", () => { const accepts = (candidate: unknown) => agentInvestigationOutcomeSchema.safeParse({ ...outcomeBase, + ...agentFields, publish: true, recommendation: candidate, }).success; @@ -324,6 +543,52 @@ describe("investigationOutcomeSchema", () => { } }); + it("requires a structured, evidence-backed watch condition from the agent", () => { + const watch = { + escalation: "Escalate if visitors fall below the baseline.", + recheckAt: "2026-07-20T12:00:00.000Z", + threshold: { + anchor: "prior_baseline" as const, + comparison: "below" as const, + evidenceRef: { index: 0, source: "provided" as const }, + value: 800, + }, + type: "watch" as const, + }; + const candidate = { + ...outcomeBase, + ...agentFields, + next: watch, + publish: false, + recommendation: null, + }; + + expect(agentInvestigationOutcomeSchema.safeParse(candidate).success).toBe( + true + ); + expect( + agentInvestigationOutcomeSchema.safeParse({ + ...candidate, + next: { ...watch, threshold: undefined }, + }).success + ).toBe(false); + expect( + agentInvestigationOutcomeSchema.safeParse({ + ...candidate, + next: { + ...watch, + threshold: { ...watch.threshold, evidenceRef: undefined }, + }, + }).success + ).toBe(false); + expect( + agentInvestigationOutcomeSchema.safeParse({ + ...candidate, + evidenceRefs: [], + }).success + ).toBe(false); + }); + it("accepts concise output with measured or unknown impact", () => { expect(investigationOutcomeSchema.safeParse(outcomeBase).success).toBe(true); expect( diff --git a/packages/shared/src/insights.ts b/packages/shared/src/insights.ts index 8e43e89c0e..41bb0721c3 100644 --- a/packages/shared/src/insights.ts +++ b/packages/shared/src/insights.ts @@ -173,6 +173,172 @@ export const insightGoalOperationSchema = z.discriminatedUnion("operation", [ .strict(), ]); +const measurementRecommendationActionSchema = z + .string() + .trim() + .min(1) + .max(320) + .describe("One short, concrete measurement recommendation for a teammate."); + +const measurementGoalFilterSchema = z + .object({ + field: z.string().trim().min(1), + operator: z.enum([ + "equals", + "contains", + "not_contains", + "starts_with", + "ends_with", + "not_equals", + "in", + "not_in", + ]), + value: z.union([ + z.string().trim().min(1), + z.array(z.string().trim().min(1)).min(1), + ]), + }) + .strict(); + +const measurementFunnelFilterSchema = z + .object({ + field: z.string().trim().min(1), + operator: z.enum(["equals", "contains", "not_equals", "in", "not_in"]), + value: z.union([ + z.string().trim().min(1), + z.array(z.string().trim().min(1)).min(1), + ]), + }) + .strict(); + +const measurementDraftTypeSchema = z.enum(["PAGE_VIEW", "EVENT"]); + +export const insightGoalDraftSchema = z + .object({ + description: z.string().trim().min(1).max(500).nullable(), + filters: z + .array(measurementGoalFilterSchema) + .length(0, "Measurement goal drafts cannot include filters."), + ignoreHistoricData: z.boolean(), + name: z.string().trim().min(1).max(100), + target: z.string().trim().min(1).max(500), + type: measurementDraftTypeSchema, + }) + .strict(); + +const insightFunnelDraftStepSchema = z + .object({ + name: z.string().trim().min(1).max(100), + target: z.string().trim().min(1).max(500), + type: measurementDraftTypeSchema, + }) + .strict(); + +export const insightFunnelDraftSchema = z + .object({ + description: z.string().trim().min(1).max(500).nullable(), + filters: z + .array(measurementFunnelFilterSchema) + .length(0, "Measurement funnel drafts cannot include filters."), + ignoreHistoricData: z.boolean(), + name: z.string().trim().min(1).max(100), + steps: z.array(insightFunnelDraftStepSchema).min(2).max(10), + }) + .strict(); + +const insightInstrumentationEventAdviceSchema = z + .object({ + description: z.string().trim().min(1).max(500), + name: z.string().trim().min(1).max(100), + }) + .strict(); + +export const insightMeasurementRecommendationSchema = z.discriminatedUnion( + "kind", + [ + z + .object({ + action: measurementRecommendationActionSchema, + draft: insightGoalDraftSchema, + kind: z.literal("goal_draft"), + }) + .strict(), + z + .object({ + action: measurementRecommendationActionSchema, + draft: insightFunnelDraftSchema, + kind: z.literal("funnel_draft"), + }) + .strict(), + z + .object({ + action: measurementRecommendationActionSchema, + events: z + .array(insightInstrumentationEventAdviceSchema) + .min(1) + .max(10) + .refine( + (events) => + new Set(events.map((event) => event.name)).size === events.length, + "Instrumentation recommendations cannot repeat an event name." + ), + kind: z.literal("instrumentation"), + }) + .strict(), + ] +); + +const agentEvidenceReferenceSchema = z.discriminatedUnion("source", [ + z + .object({ + index: z + .number() + .int() + .nonnegative() + .describe("Zero-based index in the supplied evidence array."), + source: z.literal("provided"), + }) + .strict(), + z + .object({ + name: z + .string() + .trim() + .min(1) + .max(100) + .describe("Exact name of a read tool used during this investigation."), + source: z.literal("tool"), + }) + .strict(), +]); + +export const insightWatchThresholdSchema = z + .object({ + anchor: z + .enum([ + "configured_target", + "healthy_range", + "prior_baseline", + "measured_severity", + ]) + .describe( + "Why this threshold is defensible; never use an invented round-number target." + ), + comparison: z + .enum(["above", "at_or_above", "below", "at_or_below"]) + .describe("How the next measurement must compare with the threshold."), + evidenceRef: agentEvidenceReferenceSchema + .optional() + .describe( + "Source that establishes the threshold. Required from the investigation agent; optional only to preserve historical outcomes." + ), + value: z + .number() + .finite() + .describe("Exact threshold in the signal metric's native unit."), + }) + .strict(); + const investigationNextSchema = z.discriminatedUnion("type", [ z.object({ type: z.literal("act"), @@ -230,6 +396,11 @@ const investigationNextSchema = z.discriminatedUnion("type", [ .describe( "Exact ISO 8601 time to remeasure the escalation condition. Required from the investigation agent; optional only to preserve historical outcomes." ), + threshold: insightWatchThresholdSchema + .optional() + .describe( + "Machine-readable watch condition. Required from the investigation agent; optional only to preserve historical outcomes." + ), }), z.object({ type: z.literal("resolve"), @@ -243,7 +414,8 @@ const investigationNextSchema = z.discriminatedUnion("type", [ }), ]); -const insightRecommendationSchema = insightGoalOperationSchema +export const insightRecommendationSchema = z + .union([insightGoalOperationSchema, insightMeasurementRecommendationSchema]) .nullable() .describe( "Concrete evidence-backed next step worth suggesting without opening an investigation. Name the exact object and change; use null when there is no useful next step." @@ -360,6 +532,13 @@ export const investigationOutcomeSchema = z export const agentInvestigationOutcomeSchema = investigationOutcomeSchema .safeExtend({ + evidenceRefs: z + .array(agentEvidenceReferenceSchema) + .min(1) + .max(2) + .describe( + "One source reference for each evidence item, in the same order." + ), publish: z .boolean() .describe( @@ -378,6 +557,27 @@ export const agentInvestigationOutcomeSchema = investigationOutcomeSchema path: ["next", "recheckAt"], }); } + if (outcome.next.type === "watch" && !outcome.next.threshold) { + context.addIssue({ + code: "custom", + message: "Watches require a machine-readable threshold", + path: ["next", "threshold"], + }); + } + if (outcome.next.type === "watch" && !outcome.next.threshold?.evidenceRef) { + context.addIssue({ + code: "custom", + message: "Watch thresholds require a source reference", + path: ["next", "threshold", "evidenceRef"], + }); + } + if (outcome.evidenceRefs.length !== outcome.evidence.length) { + context.addIssue({ + code: "custom", + message: "Every evidence item requires one source reference", + path: ["evidenceRefs"], + }); + } }); const insightStatusSchema = z.enum(["open", "resolved"]); @@ -459,6 +659,14 @@ export type InsightMetric = z.infer; export type InsightBriefItem = z.infer; export type InvestigationSignal = z.infer; export type InvestigationOutcome = z.infer; +export type AgentInvestigationOutcome = z.infer< + typeof agentInvestigationOutcomeSchema +>; +export type InsightMeasurementRecommendation = z.infer< + typeof insightMeasurementRecommendationSchema +>; +export type InsightRecommendation = z.infer; +export type InsightWatchThreshold = z.infer; export type InsightReplySlackDelivery = z.infer< typeof insightReplySlackDeliverySchema >; From e96a4c00f6b4a903a433a8fe7faa1c38478e13f2 Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:44:53 +0300 Subject: [PATCH 010/131] chore(lint): enforce dashboard and error policies --- .github/workflows/ci.yml | 2 + apps/api/src/rpc/handlers.ts | 34 +- apps/dashboard/app/global-error.tsx | 10 +- .../components/chart-error-boundary.tsx | 8 +- apps/dashboard/components/empty-state.tsx | 16 +- apps/dashboard/components/feedback-prompt.tsx | 9 +- .../monitors/collapsible-section.tsx | 8 +- lefthook.yml | 3 + package.json | 3 +- scripts/lint-policy.test.ts | 86 ++++ scripts/lint-policy.ts | 463 ++++++++++++++++++ scripts/tsconfig.json | 8 + 12 files changed, 606 insertions(+), 44 deletions(-) create mode 100644 scripts/lint-policy.test.ts create mode 100644 scripts/lint-policy.ts create mode 100644 scripts/tsconfig.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cc513f3ae1..573caa7086 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,6 +28,8 @@ jobs: timeout-minutes: 10 steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + with: + fetch-depth: 0 - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2 with: bun-version: "1.3.14" diff --git a/apps/api/src/rpc/handlers.ts b/apps/api/src/rpc/handlers.ts index fa3ec8aef4..be66948604 100644 --- a/apps/api/src/rpc/handlers.ts +++ b/apps/api/src/rpc/handlers.ts @@ -6,7 +6,9 @@ import { } from "@databuddy/rpc"; import { ORPCError, onError } from "@orpc/server"; import { RPCHandler } from "@orpc/server/fetch"; +import { createError } from "evlog"; import { useLogger } from "evlog/elysia"; +import { handleAppError } from "@/http/errors"; import { getResolvedAuth } from "@/lib/auth-wide-event"; import { getRequestId } from "@/http/request-id"; import { logOrpcHandlerError } from "./interceptors"; @@ -58,15 +60,15 @@ async function handleOrpcRequest( const result = await handle(request, context); return ( result.response ?? - Response.json( - { - success: false, - error: "Not found", + handleAppError({ + error: createError({ code: "NOT_FOUND", - requestId, - }, - { status: 404, headers: { "X-Request-ID": requestId } } - ) + message: "Not found", + status: 404, + }), + request, + requestId, + }) ); } catch (error) { if (error instanceof ORPCError) { @@ -76,15 +78,15 @@ async function handleOrpcRequest( error instanceof Error ? error : new Error(String(error)), { rpc: "handler" } ); - return Response.json( - { - success: false, - error: "An internal server error occurred", + return handleAppError({ + error: createError({ code: "INTERNAL_SERVER_ERROR", - requestId, - }, - { status: 500, headers: { "X-Request-ID": requestId } } - ); + message: "An internal server error occurred", + status: 500, + }), + request, + requestId, + }); } } diff --git a/apps/dashboard/app/global-error.tsx b/apps/dashboard/app/global-error.tsx index fff360c202..ae5d65df79 100644 --- a/apps/dashboard/app/global-error.tsx +++ b/apps/dashboard/app/global-error.tsx @@ -1,5 +1,7 @@ "use client"; +import { Button } from "@databuddy/ui"; + /** * Root error boundary — must define its own and and cannot rely on * the root layout. Avoid `next/error` here: it expects Pages Router context and @@ -23,13 +25,9 @@ export default function GlobalError({ {error.digest}

) : null} - + ); diff --git a/apps/dashboard/components/chart-error-boundary.tsx b/apps/dashboard/components/chart-error-boundary.tsx index 636208bad1..50fbbddeb7 100644 --- a/apps/dashboard/components/chart-error-boundary.tsx +++ b/apps/dashboard/components/chart-error-boundary.tsx @@ -1,5 +1,6 @@ "use client"; +import { Button } from "@databuddy/ui"; import { Component, type ErrorInfo, type ReactNode } from "react"; interface ChartErrorBoundaryProps { @@ -34,13 +35,14 @@ export class ChartErrorBoundary extends Component<
- +
); } diff --git a/apps/dashboard/components/empty-state.tsx b/apps/dashboard/components/empty-state.tsx index af5bf35f09..f2390a266b 100644 --- a/apps/dashboard/components/empty-state.tsx +++ b/apps/dashboard/components/empty-state.tsx @@ -123,24 +123,18 @@ export const EmptyState = memo(function EmptyState({ })}
{showPlusBadge && ( - + )}
); diff --git a/apps/dashboard/components/feedback-prompt.tsx b/apps/dashboard/components/feedback-prompt.tsx index 2fdafe7ef2..9d54a90236 100644 --- a/apps/dashboard/components/feedback-prompt.tsx +++ b/apps/dashboard/components/feedback-prompt.tsx @@ -135,14 +135,15 @@ export function FeedbackPrompt() { weight="duotone" /> - +

{prompt.heading}

diff --git a/apps/dashboard/components/monitors/collapsible-section.tsx b/apps/dashboard/components/monitors/collapsible-section.tsx index 78769feaed..ebd16af857 100644 --- a/apps/dashboard/components/monitors/collapsible-section.tsx +++ b/apps/dashboard/components/monitors/collapsible-section.tsx @@ -3,6 +3,7 @@ import { AnimatePresence, motion } from "motion/react"; import { cn } from "@/lib/utils"; import { CaretDownIcon } from "@databuddy/ui/icons"; +import { Button } from "@databuddy/ui"; interface CollapsibleSectionProps { badge?: number; @@ -23,10 +24,11 @@ export function CollapsibleSection({ }: CollapsibleSectionProps) { return (

- + {isExpanded && ( diff --git a/lefthook.yml b/lefthook.yml index 1d20a3e742..dbe3e869be 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -35,6 +35,9 @@ pre-commit: git add packages/db/src/clickhouse/schema/tables.generated.ts fi bun run check-types + policy-lint: + glob: "**/*.{css,ts,tsx}" + run: bun run lint:policies lockfile-check: glob: - "**/package.json" diff --git a/package.json b/package.json index 8aac207f6c..bce2d7289c 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,8 @@ "test": "dotenv -- turbo run test", "test:watch": "dotenv -- bun test --watch ./apps", "test:coverage": "dotenv -- bun test --coverage ./apps", - "lint": "bunx ultracite check", + "lint": "bunx ultracite check && bun run lint:policies", + "lint:policies": "bunx tsc --project scripts/tsconfig.json && bun test scripts/lint-policy.test.ts && bun scripts/lint-policy.ts", "format": "bunx ultracite fix", "check-types": "dotenv -- turbo run check-types", "generate-db": "turbo run generate --filter=@databuddy/db", diff --git a/scripts/lint-policy.test.ts b/scripts/lint-policy.test.ts new file mode 100644 index 0000000000..55d2046fcc --- /dev/null +++ b/scripts/lint-policy.test.ts @@ -0,0 +1,86 @@ +import { describe, expect, it } from "bun:test"; +import { findPolicyViolations } from "./lint-policy"; + +describe("policy lint", () => { + it("blocks direct dashboard controls outside the component library", () => { + const violations = findPolicyViolations( + "apps/dashboard/app/example.tsx", + "export function Example() { return ; }" + ); + + expect(violations.map((violation) => violation.rule)).toContain( + "dashboard/no-raw-interactive-html" + ); + }); + + it("allows native controls inside the component library", () => { + expect( + findPolicyViolations( + "apps/dashboard/components/ui/button.tsx", + "export function Button() { return ; }" + ) + ).toEqual([]); + }); + + it("requires a reasoned policy ignore for an intentional exception", () => { + expect( + findPolicyViolations( + "apps/dashboard/app/example.tsx", + "// policy-ignore dashboard/no-raw-interactive-html: Native button is required by the embedded vendor SDK.\nexport function Example() { return ; }" + ) + ).toEqual([]); + }); + + it("blocks direct Radix and Base UI imports", () => { + const violations = findPolicyViolations( + "apps/dashboard/app/example.tsx", + ' import { Dialog } from "@radix-ui/react-dialog";' + ); + + expect(violations.map((violation) => violation.rule)).toContain( + "dashboard/no-raw-interactive-html" + ); + }); + + it("blocks Tailwind palette classes and literal colors", () => { + const violations = findPolicyViolations( + "apps/dashboard/app/example.tsx", + 'export const className = "bg-red-500 text-[#abcd12]";' + ); + + expect(violations.map((violation) => violation.rule)).toContain( + "dashboard/no-custom-color" + ); + }); + + it("allows semantic design tokens", () => { + expect( + findPolicyViolations( + "apps/dashboard/app/example.tsx", + 'export const className = "bg-primary text-destructive";' + ) + ).toEqual([]); + }); + + it("blocks JSON error payloads in HTTP handlers", () => { + const violations = findPolicyViolations( + "apps/api/src/routes/example.ts", + 'Response.json({ error: "Not found" }, { status: 404 });' + ); + + expect(violations.map((violation) => violation.rule)).toContain( + "http/no-custom-json-error-response" + ); + }); + + it("blocks Elysia handlers that return error objects", () => { + const violations = findPolicyViolations( + "apps/api/src/routes/example.ts", + "const handler = ({ set }: { set: unknown }) => { return { error: 'Not found' }; };" + ); + + expect(violations.map((violation) => violation.rule)).toContain( + "http/no-custom-json-error-response" + ); + }); +}); diff --git a/scripts/lint-policy.ts b/scripts/lint-policy.ts new file mode 100644 index 0000000000..ca3b73ed74 --- /dev/null +++ b/scripts/lint-policy.ts @@ -0,0 +1,463 @@ +import { execFileSync } from "node:child_process"; +import { readFileSync } from "node:fs"; +import { resolve } from "node:path"; +import ts from "typescript"; + +/** + * Existing code is intentionally grandfathered from the commit immediately + * before this policy shipped. Every changed line after this point is checked. + * Keeping the rollout boundary in code makes new violations fail without + * requiring a noisy, hand-maintained list of legacy exceptions. + */ +const POLICY_ROLLOUT_BASE = "941dc1344"; + +const RULE = { + noCustomJsonErrorResponse: "http/no-custom-json-error-response", + noRawInteractiveHtml: "dashboard/no-raw-interactive-html", + noCustomColor: "dashboard/no-custom-color", +} as const; + +type RuleId = (typeof RULE)[keyof typeof RULE]; + +export interface PolicyViolation { + column: number; + endLine: number; + line: number; + message: string; + path: string; + rule: RuleId; +} + +const NATIVE_INTERACTIVE_TAGS = new Set([ + "button", + "dialog", + "input", + "select", + "textarea", +]); + +const COMPONENT_IMPLEMENTATION_PATHS = [ + "apps/dashboard/components/ds/", + "apps/dashboard/components/ui/", +]; + +const APPROVED_ERROR_RESPONSE_PATHS = new Set([ + "apps/api/src/http/errors.ts", + "apps/basket/src/index.ts", + "apps/basket/src/lib/structured-errors.ts", + "packages/shared/src/http-error-response.ts", +]); + +const TAILWIND_PALETTE_UTILITY = + /(?:^|\s)(?:[\w-]+:)*(?:accent|bg|border(?:-[trblxy])?|caret|decoration|divide|fill|from|outline|ring|shadow|stroke|text|to|via)-(?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-\d{2,3}(?:\/\d{1,3})?(?=\s|$)/u; +const ARBITRARY_COLOR_UTILITY = + /(?:^|\s)(?:[\w-]+:)*(?:accent|bg|border(?:-[trblxy])?|caret|decoration|divide|fill|from|outline|ring|shadow|stroke|text|to|via)-\[[^\]]*(?:#[\da-f]{3,8}\b|(?:rgba?|hsla?|oklch)\()[^\]]*\]/iu; +const RAW_COLOR_VALUE = /#[\da-f]{3,8}\b|(?:rgba?|hsla?|oklch)\(/iu; +const DASHBOARD_SOURCE_EXTENSION = /\.(?:css|ts|tsx)$/u; +const HTTP_SOURCE_EXTENSION = /\.(?:ts|tsx)$/u; +const NEWLINE = /\r?\n/u; +const DIFF_HUNK = /^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@/u; + +export function findPolicyViolations( + path: string, + text: string +): PolicyViolation[] { + if (!isPolicySource(path)) { + return []; + } + + if (path.endsWith(".css")) { + return findCustomCssColors(path, text); + } + + const sourceFile = ts.createSourceFile( + path, + text, + ts.ScriptTarget.Latest, + true, + path.endsWith(".tsx") ? ts.ScriptKind.TSX : ts.ScriptKind.TS + ); + const violations: PolicyViolation[] = []; + + const report = (node: ts.Node, rule: RuleId, message: string) => { + if (!hasPolicyIgnore(sourceFile, node, rule)) { + const location = sourceFile.getLineAndCharacterOfPosition( + node.getStart() + ); + const endLocation = sourceFile.getLineAndCharacterOfPosition( + node.getEnd() + ); + violations.push({ + column: location.character + 1, + endLine: endLocation.line + 1, + line: location.line + 1, + message, + path, + rule, + }); + } + }; + + const visit = (node: ts.Node) => { + if (isDashboardFeatureSource(path)) { + if ( + (ts.isJsxOpeningElement(node) || ts.isJsxSelfClosingElement(node)) && + NATIVE_INTERACTIVE_TAGS.has(node.tagName.getText(sourceFile)) + ) { + report( + node, + RULE.noRawInteractiveHtml, + "Use a component from @databuddy/ui instead of a native interactive element." + ); + } + + if (ts.isImportDeclaration(node) && isDirectPrimitiveImport(node)) { + report( + node, + RULE.noRawInteractiveHtml, + "Import interactive primitives through @databuddy/ui, not Radix or Base UI directly." + ); + } + + if ( + (ts.isStringLiteral(node) || + ts.isNoSubstitutionTemplateLiteral(node)) && + isCustomColor(node.text) + ) { + report( + node, + RULE.noCustomColor, + "Use a semantic design token instead of a Tailwind palette or custom color value." + ); + } + } + + if ( + isHttpSource(path) && + !APPROVED_ERROR_RESPONSE_PATHS.has(path) && + isCustomJsonErrorResponse(node) + ) { + report( + node, + RULE.noCustomJsonErrorResponse, + "Use the service's shared error handler or error catalog instead of returning a JSON error payload." + ); + } + + ts.forEachChild(node, visit); + }; + + visit(sourceFile); + return violations; +} + +function isPolicySource(path: string) { + if (path.endsWith(".test.ts") || path.endsWith(".spec.ts")) { + return false; + } + if (path.endsWith(".test.tsx") || path.endsWith(".spec.tsx")) { + return false; + } + + return ( + (isDashboardSource(path) && DASHBOARD_SOURCE_EXTENSION.test(path)) || + (isHttpSource(path) && HTTP_SOURCE_EXTENSION.test(path)) + ); +} + +function isDashboardSource(path: string) { + return path.startsWith("apps/dashboard/"); +} + +function isDashboardFeatureSource(path: string) { + return ( + path.startsWith("apps/dashboard/") && + path.endsWith(".tsx") && + !COMPONENT_IMPLEMENTATION_PATHS.some((prefix) => path.startsWith(prefix)) + ); +} + +function isHttpSource(path: string) { + return ["apps/api/", "apps/basket/", "apps/links/", "apps/uptime/"].some( + (prefix) => path.startsWith(prefix) + ); +} + +function isDirectPrimitiveImport(node: ts.ImportDeclaration) { + if (!ts.isStringLiteral(node.moduleSpecifier)) { + return false; + } + + const moduleName = node.moduleSpecifier.text; + return ( + moduleName === "radix-ui" || + moduleName.startsWith("@base-ui-components/") || + moduleName.startsWith("@radix-ui/") + ); +} + +function isCustomColor(value: string) { + return ( + TAILWIND_PALETTE_UTILITY.test(value) || + ARBITRARY_COLOR_UTILITY.test(value) || + RAW_COLOR_VALUE.test(value) + ); +} + +function isCustomJsonErrorResponse(node: ts.Node) { + if (ts.isCallExpression(node) && isResponseJsonErrorCall(node)) { + return true; + } + if (ts.isNewExpression(node) && isJsonErrorResponse(node)) { + return true; + } + return ts.isReturnStatement(node) && isElysiaErrorObjectReturn(node); +} + +function isResponseJsonErrorCall(node: ts.CallExpression) { + if ( + !ts.isPropertyAccessExpression(node.expression) || + node.expression.expression.getText() !== "Response" || + node.expression.name.text !== "json" + ) { + return false; + } + + return objectHasErrorProperty(node.arguments[0]); +} + +function isJsonErrorResponse(node: ts.NewExpression) { + if (node.expression.getText() !== "Response") { + return false; + } + + const body = node.arguments?.[0]; + return ( + body != null && + ts.isCallExpression(body) && + isJsonStringifyCall(body) && + objectHasErrorProperty(body.arguments[0]) + ); +} + +function isJsonStringifyCall(node: ts.CallExpression) { + return ( + ts.isPropertyAccessExpression(node.expression) && + node.expression.expression.getText() === "JSON" && + node.expression.name.text === "stringify" + ); +} + +function isElysiaErrorObjectReturn(node: ts.ReturnStatement) { + return ( + objectHasErrorProperty(node.expression) && + functionAcceptsElysiaSet(node.parent) + ); +} + +function functionAcceptsElysiaSet(node: ts.Node | undefined) { + let current = node; + while (current) { + if (isFunctionLike(current)) { + return current.parameters.some((parameter) => { + if (ts.isIdentifier(parameter.name)) { + return parameter.name.text === "set"; + } + return parameter.name.elements.some( + (element) => + ts.isBindingElement(element) && + ts.isIdentifier(element.name) && + element.name.text === "set" + ); + }); + } + current = current.parent; + } + return false; +} + +function isFunctionLike(node: ts.Node): node is ts.FunctionLikeDeclaration { + return ( + ts.isArrowFunction(node) || + ts.isFunctionDeclaration(node) || + ts.isFunctionExpression(node) || + ts.isMethodDeclaration(node) + ); +} + +function objectHasErrorProperty(node: ts.Node | undefined) { + if (!(node && ts.isObjectLiteralExpression(node))) { + return false; + } + + return node.properties.some((property) => { + if ( + !( + ts.isPropertyAssignment(property) || + ts.isShorthandPropertyAssignment(property) + ) + ) { + return false; + } + return property.name.getText() === "error"; + }); +} + +function hasPolicyIgnore( + sourceFile: ts.SourceFile, + node: ts.Node, + rule: RuleId +) { + const location = sourceFile.getLineAndCharacterOfPosition(node.getStart()); + if (location.line === 0) { + return false; + } + const previousLine = sourceFile.text.split(NEWLINE)[location.line - 1]; + const escapedRule = rule.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&"); + const ignorePattern = new RegExp( + `policy-ignore\\s+${escapedRule}\\s*:\\s*\\S`, + "u" + ); + return ignorePattern.test(previousLine); +} + +function findCustomCssColors(path: string, text: string): PolicyViolation[] { + if ( + path === "apps/dashboard/app/globals.css" || + COMPONENT_IMPLEMENTATION_PATHS.some((prefix) => path.startsWith(prefix)) + ) { + return []; + } + + const lines = text.split(NEWLINE); + return lines.flatMap((line, index) => { + if (!RAW_COLOR_VALUE.test(line)) { + return []; + } + const rule = RULE.noCustomColor; + const previousLine = index === 0 ? "" : lines[index - 1]; + const escapedRule = rule.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&"); + if ( + new RegExp(`policy-ignore\\s+${escapedRule}\\s*:\\s*\\S`, "u").test( + previousLine + ) + ) { + return []; + } + return [ + { + column: 1, + endLine: index + 1, + line: index + 1, + message: + "Use a semantic design token instead of a custom CSS color value.", + path, + rule, + }, + ]; + }); +} + +function getChangedLines() { + const diff = runGit([ + "diff", + "--unified=0", + "--no-ext-diff", + POLICY_ROLLOUT_BASE, + ]); + const changedLines = parseChangedLines(diff); + for (const path of runGit(["ls-files", "--others", "--exclude-standard"]) + .split("\n") + .filter(Boolean)) { + if (!isPolicySource(path)) { + continue; + } + const lineCount = readFileSync(resolve(path), "utf8").split(NEWLINE).length; + changedLines.set( + path, + new Set(Array.from({ length: lineCount }, (_, i) => i + 1)) + ); + } + return changedLines; +} + +function parseChangedLines(diff: string) { + const changedLines = new Map>(); + let path: string | undefined; + for (const line of diff.split("\n")) { + if (line.startsWith("+++ b/")) { + path = line.slice("+++ b/".length); + continue; + } + const hunk = DIFF_HUNK.exec(line); + if (!(hunk && path)) { + continue; + } + const start = Number(hunk[1]); + const count = Number(hunk[2] ?? "1"); + if (count === 0) { + continue; + } + const lines = changedLines.get(path) ?? new Set(); + for (let offset = 0; offset < count; offset += 1) { + lines.add(start + offset); + } + changedLines.set(path, lines); + } + return changedLines; +} + +function runGit(args: string[]) { + try { + return execFileSync("git", args, { + cwd: process.cwd(), + encoding: "utf8", + stdio: ["ignore", "pipe", "pipe"], + }); + } catch { + throw new Error( + `Policy lint needs the ${POLICY_ROLLOUT_BASE} rollout commit. Fetch full git history and retry.` + ); + } +} + +function intersectsChangedLines( + node: PolicyViolation, + changedLines: Map> +) { + const lines = changedLines.get(node.path); + if (!lines) { + return false; + } + for (let line = node.line; line <= node.endLine; line += 1) { + if (lines.has(line)) { + return true; + } + } + return false; +} + +function formatViolation(violation: PolicyViolation) { + return `${violation.path}:${violation.line}:${violation.column} [${violation.rule}] ${violation.message}\n Add // policy-ignore ${violation.rule}: immediately above only when the exception is intentional.`; +} + +function main() { + const changedLines = getChangedLines(); + const violations = [...changedLines.keys()].flatMap((path) => { + const text = readFileSync(resolve(path), "utf8"); + return findPolicyViolations(path, text).filter((violation) => + intersectsChangedLines(violation, changedLines) + ); + }); + + if (violations.length === 0) { + return; + } + + console.error(violations.map(formatViolation).join("\n\n")); + process.exitCode = 1; +} + +if (import.meta.main) { + main(); +} diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json new file mode 100644 index 0000000000..56c45d8e50 --- /dev/null +++ b/scripts/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig/base.json", + "compilerOptions": { + "noEmit": true, + "types": ["bun"] + }, + "include": ["./*.ts"] +} From a9cb88d2fcefef88cc91900ccc36b3ad54cc67cd Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:45:00 +0300 Subject: [PATCH 011/131] ci(links): add readiness health coverage --- .github/workflows/health-check.yml | 101 +++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/.github/workflows/health-check.yml b/.github/workflows/health-check.yml index 458b0b731c..36c6a4cd6d 100644 --- a/.github/workflows/health-check.yml +++ b/.github/workflows/health-check.yml @@ -9,6 +9,7 @@ on: - "apps/api/**" - "apps/basket/**" - "apps/insights/**" + - "apps/links/**" - "packages/**" - "bun.lock" - "package.json" @@ -22,6 +23,7 @@ on: - "apps/api/**" - "apps/basket/**" - "apps/insights/**" + - "apps/links/**" - "packages/**" - "bun.lock" - "package.json" @@ -401,3 +403,102 @@ jobs: fi echo "Insights health check passed!" + + links-health-check: + name: Links Health Check + runs-on: blacksmith-4vcpu-ubuntu-2404 + timeout-minutes: 20 + + services: + redis: + image: redis:7-alpine + ports: + - 6379:6379 + options: >- + --health-cmd "redis-cli ping" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + postgres: + image: postgres:17-alpine + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: databuddy_test + ports: + - 5432:5432 + options: >- + --health-cmd "pg_isready -U postgres -d databuddy_test" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + steps: + - name: Checkout repository + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 + + - name: Set up Bun + uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2 + with: + bun-version: "1.3.14" + + - name: Install workspace dependencies + run: bun install --frozen-lockfile --ignore-scripts + + - name: Push test schema + env: + DATABASE_URL: postgresql://postgres:postgres@localhost:5432/databuddy_test + run: cd packages/db && bunx drizzle-kit push + + - name: Mount Docker build cache + uses: useblacksmith/stickydisk@4c034ba57b706cf0e3b4b0ce098c2a3b1071580c # v1 + with: + key: ${{ github.repository }}-docker-build-cache + path: /tmp/docker-build-cache + + - name: Set up Docker Builder + uses: useblacksmith/setup-docker-builder@722e97d12b1d06a961800dd6c05d79d951ad3c80 # v1 + + - name: Build Links Docker image + uses: useblacksmith/build-push-action@fb9e3e6a9299c78462bfadd0d93352c316adc9b8 # v2 + with: + context: . + file: ./links.Dockerfile + push: false + load: true + tags: links:test + + - name: Run Links health check + run: | + set -euo pipefail + trap 'docker rm -f links-health-check >/dev/null 2>&1 || true' EXIT + + docker run -d \ + --name links-health-check \ + --network host \ + -e NODE_ENV=production \ + -e DATABASE_URL=postgresql://postgres:postgres@localhost:5432/databuddy_test \ + -e REDIS_URL=redis://localhost:6379 \ + -e DASHBOARD_URL=http://localhost:3000 \ + -e CLICKHOUSE_URL=http://default:@localhost:8123/databuddy_analytics \ + links:test + + for i in {1..30}; do + if curl -sf http://localhost:2500/health > /dev/null 2>&1; then + break + fi + if [ $i -eq 30 ]; then + docker logs links-health-check + exit 1 + fi + sleep 1 + done + + STATUS_BODY=$(curl -sS http://localhost:2500/health/status) + echo "Links /health/status: $STATUS_BODY" + if echo "$STATUS_BODY" | jq -e '.status == "ok"' > /dev/null; then + echo "Links dependency health is valid" + else + docker logs links-health-check + exit 1 + fi From 6ccf38e6fe18f9801e500e689891bfef3a03c188 Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:45:07 +0300 Subject: [PATCH 012/131] feat(video): add intelligence launch composition --- apps/video/.gitignore | 7 + apps/video/README.md | 36 ++ apps/video/package.json | 31 ++ apps/video/public/bunny-off-white.svg | 11 + apps/video/public/cta-bg.webp | Bin 0 -> 51962 bytes apps/video/public/dashboard-home-insights.png | Bin 0 -> 565746 bytes apps/video/public/gradient-bg-1.webp | Bin 0 -> 307164 bytes apps/video/public/gradient-bg-2.webp | Bin 0 -> 152136 bytes apps/video/public/intelligence-launch.m4a | Bin 0 -> 317071 bytes apps/video/public/lt-superior-bold.woff2 | Bin 0 -> 15612 bytes apps/video/public/lt-superior-medium.woff2 | Bin 0 -> 15520 bytes apps/video/public/lt-superior-regular.woff2 | Bin 0 -> 14824 bytes apps/video/public/lt-superior-semibold.woff2 | Bin 0 -> 15460 bytes apps/video/public/primary-logo-white.svg | 23 + apps/video/remotion.config.ts | 11 + apps/video/src/Root.tsx | 94 ++++ .../src/compositions/IntelligencePlatform.tsx | 54 +++ .../bubbly-intelligence/ArrivalScene.tsx | 57 +++ .../bubbly-intelligence/InsightScene.tsx | 105 +++++ .../InvestigationScene.tsx | 100 +++++ .../bubbly-intelligence/MovementScene.tsx | 67 +++ .../bubbly-intelligence/OutroScene.tsx | 57 +++ .../bubbly-intelligence/PromiseScene.tsx | 54 +++ .../bubbly-intelligence/ProofScene.tsx | 79 ++++ .../bubbly-intelligence/SignalScene.tsx | 62 +++ .../bubbly-intelligence/shared.tsx | 288 ++++++++++++ apps/video/src/fonts.ts | 27 ++ apps/video/src/index.css | 9 + apps/video/src/index.ts | 4 + apps/video/tsconfig.json | 7 + bun.lock | 419 ++++++++++++++++++ 31 files changed, 1602 insertions(+) create mode 100644 apps/video/.gitignore create mode 100644 apps/video/README.md create mode 100644 apps/video/package.json create mode 100644 apps/video/public/bunny-off-white.svg create mode 100644 apps/video/public/cta-bg.webp create mode 100644 apps/video/public/dashboard-home-insights.png create mode 100644 apps/video/public/gradient-bg-1.webp create mode 100644 apps/video/public/gradient-bg-2.webp create mode 100644 apps/video/public/intelligence-launch.m4a create mode 100644 apps/video/public/lt-superior-bold.woff2 create mode 100644 apps/video/public/lt-superior-medium.woff2 create mode 100644 apps/video/public/lt-superior-regular.woff2 create mode 100644 apps/video/public/lt-superior-semibold.woff2 create mode 100644 apps/video/public/primary-logo-white.svg create mode 100644 apps/video/remotion.config.ts create mode 100644 apps/video/src/Root.tsx create mode 100644 apps/video/src/compositions/IntelligencePlatform.tsx create mode 100644 apps/video/src/compositions/bubbly-intelligence/ArrivalScene.tsx create mode 100644 apps/video/src/compositions/bubbly-intelligence/InsightScene.tsx create mode 100644 apps/video/src/compositions/bubbly-intelligence/InvestigationScene.tsx create mode 100644 apps/video/src/compositions/bubbly-intelligence/MovementScene.tsx create mode 100644 apps/video/src/compositions/bubbly-intelligence/OutroScene.tsx create mode 100644 apps/video/src/compositions/bubbly-intelligence/PromiseScene.tsx create mode 100644 apps/video/src/compositions/bubbly-intelligence/ProofScene.tsx create mode 100644 apps/video/src/compositions/bubbly-intelligence/SignalScene.tsx create mode 100644 apps/video/src/compositions/bubbly-intelligence/shared.tsx create mode 100644 apps/video/src/fonts.ts create mode 100644 apps/video/src/index.css create mode 100644 apps/video/src/index.ts create mode 100644 apps/video/tsconfig.json diff --git a/apps/video/.gitignore b/apps/video/.gitignore new file mode 100644 index 0000000000..b62197ba2f --- /dev/null +++ b/apps/video/.gitignore @@ -0,0 +1,7 @@ +node_modules +dist +.DS_Store +.env + +# Ignore the output video from Git but not videos you import into src/. +out diff --git a/apps/video/README.md b/apps/video/README.md new file mode 100644 index 0000000000..059c57537b --- /dev/null +++ b/apps/video/README.md @@ -0,0 +1,36 @@ +# Databuddy product video + +This workspace renders a 16-second, 16:9 Databuddy Intelligence release video. +It is an energetic launch sting: bright signal bubbles, elastic product cards, +and a single short crop of the real Insights screen as product proof. It does +not make up a voiceover, customer metric, or product screen. + +## Render + +```sh +bun run --cwd apps/video studio +bun run --cwd apps/video video:render +``` + +The finished file is written to `apps/video/out/intelligence-platform.mp4`. + +## Story + +1. **Arrival** — meet Databuddy Intelligence with a bouncing signal / bunny + motif. +2. **Movement** — traffic, funnels, errors, and goals enter as signal bubbles. +3. **Signal** — filter noise and find meaningful change. +4. **Insight** — show impact, evidence, and a known cause only when one exists. +5. **Investigation** — promote material work into a persistent case with its + evidence and recheck history. +6. **Proof** — use a short circular crop of the genuine Insights dashboard. +7. **Promise + close** — land the product promise, the brand, and `databuddy.cc`. + +## Source assets + +All source visuals are copied from the existing Databuddy brand library into +`public/` to keep Remotion rendering self-contained. The dashboard capture is +an existing marketing asset; it is not a fabricated product screen. + +`public/intelligence-launch.m4a` is an original, generated sound bed. It is +not stock music and does not carry a third-party sync license. diff --git a/apps/video/package.json b/apps/video/package.json new file mode 100644 index 0000000000..f5be515049 --- /dev/null +++ b/apps/video/package.json @@ -0,0 +1,31 @@ +{ + "name": "@databuddy/video", + "version": "1.0.0", + "description": "Databuddy product videos rendered with Remotion", + "license": "UNLICENSED", + "private": true, + "type": "module", + "packageManager": "bun@1.3.14", + "dependencies": { + "@remotion/cli": "4.0.502", + "@remotion/fonts": "4.0.502", + "@remotion/media": "4.0.502", + "react": "catalog:", + "react-dom": "catalog:", + "remotion": "4.0.502" + }, + "devDependencies": { + "@types/react": "catalog:", + "@types/react-dom": "catalog:", + "typescript": "catalog:" + }, + "scripts": { + "studio": "remotion studio", + "video:bundle": "remotion bundle src/index.ts", + "video:render": "remotion render src/index.ts IntelligencePlatform out/intelligence-platform.mp4", + "check-types": "tsc --noEmit" + }, + "sideEffects": [ + "*.css" + ] +} diff --git a/apps/video/public/bunny-off-white.svg b/apps/video/public/bunny-off-white.svg new file mode 100644 index 0000000000..9f264b0ae0 --- /dev/null +++ b/apps/video/public/bunny-off-white.svg @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/apps/video/public/cta-bg.webp b/apps/video/public/cta-bg.webp new file mode 100644 index 0000000000000000000000000000000000000000..972b5d7377ca7b6992e51cd1d82795ae64fef111 GIT binary patch literal 51962 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 NcNOza? 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�@lSU`LgYQ8(F$4@g~ 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

( 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

;~nT*Me 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

TxSKrK>O@+aFliK)J9<1Zy*O5%>^_LX|Lbj2 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 z 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 literal 0 HcmV?d00001 diff --git a/apps/video/public/gradient-bg-1.webp b/apps/video/public/gradient-bg-1.webp new file mode 100644 index 0000000000000000000000000000000000000000..4036108fe991e1a99ba126e350ab993c10191d19 GIT binary patch literal 307164 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∓#6 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

3!h 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 _j1?&YsxN3xoI32OAs*1$-UVhATOs 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%0D7l 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 z�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%0Ae-j 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 z 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%0DRyb@lq4!&+JN-o)y6Zu_?t-I9i5V}i98Y5AL4 zf*5zM0m9a7Sp&d01 z$3b4~f##j-<7bQ$vPNV?{nFeM|Dz3Fn360Qg09olBAY~O0SyY|!NFW6Z>P~qv&qc^%;esDEW)LvmD*3eSVpr!yFr_`n^Vwj`zv^iT zdX@7Mh`E%-2&1OT1rCGG@?(;G-nC58>UQ86{y}a{ydra>Fe@b!KK0n;Oczw~8A8+6 z+mP5DmXovSudF31BlAnebPjl@%VK4!PzWUu2Rg4T2vG=$xd=GE$Gv_%T!HA%KYI`x!&y^6Kz$Fx@MFI4fKN_;bQ*K>L70?#9mP*KyW z7uoA`3s?`7cU-hNPCW5*`8XUO^%={zG@$&_q4#2FNTGEx` zRa2^B7ryq1x%Jg^Ph#_Xd|F}0J$3Kf3E#e;2mDvE3F4NV64wZiq28@2fc?5!jx>KDqtD%Ms#g8 z8Kt1-Hq-{w5VUGTdyqGXAkj$Ife;e}EW+l3Lld?Obf_7}&fAQO{Y^{`VhjlNBvCoo z*`k_DGsJQQIJ+t9PK?G;8$^1nQh6v^D1+&D*90;#)-ZCWkVzC$V-11TQFMGukQH`s zsD^qWHx%g{!^@LbV)w>n zP407~p?7a~vRz}K9O{*ntwLtrf8e?g1NAsvYE}PiU_qfk{1(cXu_fD~Lx2Lbl3hW# z3_MnsR{>8VU-BDS=t5i|^<2$2_ z+1U{we|7e^#PE=q>I4Jp@d*YQR)u(NmAS@Disz9~P>26AQS!+8W-F?Hom>4vfe4+M zw9xDTl|FDsBF~bNO7u0p3an{|RTSv`#3sC0jM7}iXer!za}u;OU^Ji(^Ga%J z>9XD_dIDE%$;h|Ys1%0O-V5ELH>s7d#O&sC>YACqx3}%8??DFH%ZTJ@G!vtUBm7`8 z@#ecV)Z)na_+jV8s&UWb483{VHf$&L1;ZKYY(A=3T5RFhkwg6{Q(WWkri zg!BrIesL@50tFSF)e!g+neITXUJvgap7;3-7q?|{!!s>sta)n)h=N*enAT<&URQ>G z-b=Y3$mYhyFm^=CWU6*FdYyYP;9>{7wqYKU`c0mzF5f+UC06X7Qyt^f*iy@Vf_Osm z$>EUk9%!EwYa3xvZ1M7Nfz+S7t+T4Zbq_zJgQkI7uU3urL`cj=-a_DFRdf-GG*Ha?2mHQ0Tg87(Tz83;(3H;Mr#3DXVzXu;NSmm=1_ zy)h~qP|ak15wxBjQ6T9+eXsoR-icy!71kl|n{y*LSe5lS;5UR-pgojHZN90H%5x%u zM$O>S08s)|5Cl(H{=t&;r2#0lGxs(U#3nH~QUbv()4#mQ7`)me)J$N5k6DhzBaHYU zi}HPm7l|wb{sX^}5-6+gx;!`Juj0*d!gB%$k_^g{>eO!k2H@!?(*!_Z7!=C68&0Ve zj7H$Ix}g6^wRzqkgnk^%v82SS`1x2JzRtOIqAuPiED4ES z93Kg7E+TVidveG@`y-FzyafY3-SD-ty(72KL5e!pA^<$dOxJUkS{?TUjhBrfjy&C6 zKZ=X)L;BZb4vrSKoi!p!X%m zGHd;NN00i-F|C;$69kX&xQgL)&?CsVG%HqzeOGSH%){#+;_Et0lkpdf-?&RG#?&f4QrR`(+%O#}->W=rJ^F#LHuZkBR(97u<<0{ z5ZlaLI9SJdU6&mV0bJm5R6=EXD~ri4+UGQ2@M#H|$8m(ugK8CWkZ#nip*@OJ%W zw>!2@(d7lya$;v6hT@}#C(W5^UP=c88)xmnkiN#q!!QMU+;;!r1pnGA)7ZdqB@q4@ z$Qjx%`n8>G!x`~BAgqWf!8@5)Jo1E&kquI503P0aJclW*u9arIm zII&`L5QRDHA3^sierGO^w5nuKDtyeXPP;)U5BDX){CmHhN5F(KT9#PQbA6!Af2)1} zWIIhNi}+KuN@#e4{-S$G9ZX!j)dalX1xYe&pH{=SV4#>U6PQILQtSn!Nwr3AyiBIZ z8BgMf!y^b6G=F#TD#1wuI;}k*6OxE0c<-`1QrdfarMh;b=P)6yCWQq^$reN&F<$9) zXxc+HLcTuJgdk}Zn=LU&_6Xn<+wa?~w&B+;c}=garH&I}>;QU4{nyt)Q~)6~Zjdn$ z<{*eTfGL(H!8byOKtggL?|y{jl`dTJD)qr+2V1rxUYNkC!vqpPh`0JhXG;E827wx}ZTB)-?azvd3OsRAbB8Wh-q85ixPDEhJO4->*7H zX9J_hP7mYhe~&eNJZhmTK7{uTX>nKllFpl^{JoOk4@9rcV3H+lLX^7(rD`+xqewEP zUZfW=m+T%csy0~^HNxM7Ykr)HRNI9)hXOlS&oo&y2>tpsk}XR(pmm}$SAcC5JEtK< zE)Kq>*dXw~L0s53vNWv@K8fYP$rWl6@}+$Fzxj)mLS)$z(XjueEKdjLEg8V@a#5jA zk7=wT*^lDnb1kU|Sb8=i6@}PFsbDj_oD`&Ta({}N;7oy+1y`>2E%|{f`C-jRl3zY0 z<%&MkbJvamF3ih#J`$}{25dPE4t<(ri8UdmM5mKq3hhaJYQ==9RODf{KP9{h-(@$l zNp@!$1dVgRVo_MW4RR^@w7Y6X(GbeIzM`}#XF1h zzY7%^ekDD!5>$J7|B~COG^6@mPZ6BUc*{=92(w2c*8lNMYy0G5 zg1{G+kf^u3Tdekk`(XH&-G(AK74Id1|A?IKY6XWZ#J|q_q?O6cYIj+Cy96XWfC}0q zV4;whCh);l*;DK$J-6S6^#JN_D?KJ9PhxwPrSM{}ap>{7o!a6lSJNHOaePhH6HlVVZx| znIuU?mQMNcR>0YGPi4FzM=2?MU4D#f90HwW0SR5UtREw2yJQNc$hReKa@C%(0Wg!2 zCd#mi_KC2c8T*y>@c@O)VLjGBLG^@Haq%c9ZHyfM--(_CmF#D0eBiPAei_r#y<=>d z7G}_+N%~$?cp6S`jzw1c8vJO(MgObqa9?f}fbtmigo;{Tk^qal60gVU{NyAh6qjlG~e5w&bB;Gk|U8yx%hLXTB6?xb( z?6%Ap6x=Y%QmJAqp^=efZ$7S?EHH=zekr&l@$!7=DKCNjY0$fru=U0d1n*Ycqoyst zAXyD0)oFk*!?{i@-!OypW}d9s{-^IU=IXWWE2A6e3@rMm9gDQI1H1oK3`I*w;?ZPc z=N${(Zg!8{28npw_PwL$;gAL5*apCaUk`S!VvyvYwWt^5%5U{icBl~^@+O|vs$opc?tx5(W-*X z^ZLh)mc(}wU!dzMzb{02&qDJgQ_vy;aV$A}S6&lMY$GXw1P#j+eBysD^Xexc M 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 literal 0 HcmV?d00001 diff --git a/apps/video/public/gradient-bg-2.webp b/apps/video/public/gradient-bg-2.webp new file mode 100644 index 0000000000000000000000000000000000000000..5ffda5b68592c34105b1840c71ff5fa6a67d9f77 GIT binary patch literal 152136 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 iZ@eAqJd5o*Sjv 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%0Dx91_xc9%+%0e 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⪙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%0DM4J3WzQy*3&P9ycdB(A+ zK()0_j1ZJS3c-jq)iD~ql#ePal$qK3f31n`_N^59_%w4a&|+<%$ z?X7A&9K0KW(Nq(p5S){s4cKuj8KE@B{=% z^Rs}>(`>p2_IlIm&?;ju$Wm>@j#uZF0?fn3!G?&@uFWPllgIc?cN@C=P`df`wm^W< zW}?#?+WtVN_3nMkpfNUH%m9@)_Mq$viD<^@AS>HoA04sNa+r!|Y)XT0na`Xt4lD)- zykn%9NHWDssNw|9;Yo7cTco{`^gN+ELO(}aeuVshGsdW1CfY-Bol?@xIVMGJ=tL$I z8=!4sbn|5VwH3ePOA-iQTwtvh$oPB%q-l)yJsE#F#qXGsa_l_!$iaOn$k#_Ws?2R- zIp4sB`{h*m#0`S+*srtX_cq9^Dg%v+F}^J_Ga*XV9A##NiOaAyGmtcby+x-P$lpCY zeX8$uiJk*b$rk)}$}W<|j#bxJG?j0)Myo?H{VMxSzZaZ-Tw(OMTlooi8DILx%hQj` z4~D;cz6Y0+@_#x18+q%m>+f&-`Y*@zp9X~RW=<{aH(c7_+A6;Fd%8cp>?dtskdEv) zOnqdbUbt=MqQ1*If^~;M`|ZpO!{z2Tw-u0aN{ZjbEG=vfz(r#a&hZ6+rK681%`G*WwnYQ*%q1xnKX%;r|;H3x9ZhXh9)cZ zj7qzR84Q^G7Q!aQ{wP#X>ylXf*`W44hp6KeIXoPMmL$WhzMFMHTQwhvJ%B_)!XzL# zmH2^{XpWByt|3M{T1qhOA`)F3944GrTgyWQwDg)nM`N5?#>DY_+PFN9HbZX9IT?H% zNeC-E&TX<~_maGLBwa|BJE{4Ev$)5w!@Kn{WzL{BElx2{(&5=U7hYF!WV{3MIjiC! zaZ0>mRi-)wN`T|{baLBmxj&s4F1moPgV{l4BiXlo99KRv#YA9{q_7a%@^>kRzJpKg z0GEqO(xR>xM$yEtaj`}LuOOtBSlLO|$~wa*5?euji`W!lw1ZguqV_`=clOR8fCl4$ zvu&H(!zV?vNx}ejyjDD?`ij~6%$)XMG1;-YKnD;T^Hwr)8L9!iwJWJ~#l_gCfv+FC zN3u0~1!#1y*YrBb7>K)ft1k}A-EMj@2k;ZiG*{Pi@iAV!FMb-8B&e&6Q$_D@h+4Gv z=CmtLX4}i`>y>J+?{71L!*}kHKg@Drpz>;d|5w5DU3Au9 zPz$tm(OY2IUaqQEwdt#K(`^$#!EBQN_Bu0lEG$oSUJnET!QRMH?f7MhPg4$#JO&A3Tpf|3!jzsMJo&Y_zv_bccKVi!?#4zriD^z}3(ow|V?Iku< z%s+{5VtiVkUmr?Y{ZKA&)Nfvf?K*Bd@~yhHV<4>`6(d^uJvnmmQ+)8Y1z8L8#-}&m z*f&1@SfX}0s`07GlS`D*T>rg~XRL7Xy80QH`U|CBt0@D5`DxI(&P1m^JRu~HI}K`4 zF1-K=prZPr1wdm{GSV}mU3#S{qxs-B^ig8k03jQ%3!)Lw?G9QlXMlhT%o7VfFEU(Y z>py|ccl0Z8o9aICc3n?_Z@c*YMKg|lrw5O|=es>);jY2QnEOC@iH|W*6m_P#UWT4( z;r9jwF@|Ud^b%2w5+jG=QQ!5E4FwmAWDG4rV*!Jm!{(I%4$jWHZMkM0!@>*^Rgcer zmVA9K;UV(U=kK$bkCrR(^Cd76sS%@vg7{Mx)L%}$?C#e{Ur)RQel%?_A&W@Z7y8!!wZ9*PR|20SH^Zy5d7x=N8zTTZ=Lv|9 z-KNY(IV;nZsLt4u>-htpqXJpCOfV8`;@mE5hg{?1R8(}~lD1F8`+Tf&;M;0j>dDxX zoVa7i_()YU9Fo?qCf-MhAoGh(p@t;MC$&{nO;aDhtT>Nfd(P$@8JnPu+Ho?hYfq!y zw&$i&M|6@CS9i*;1+J{|NG{VYm~6C*Ss;)L``(C?gyFRIUCKVdCDw%AXA(iEm)}tJ zJ4db4JFATr-`SHbJ8VsAF(Mi6K+36W;v|cSQ51Zm7#sN(XHuOmKWr;pvgC(+T%;(A ztR!^5d|WV$pd_x9*m>N|F_f(HL{jzlc<3=8{;M6J z-{>}b`w4UfflzXjz*W7%9Q%PCm3(i9YSuVHc`v+4P7^=-{t=AjYNB_A!tI{mgiH20 z+@c;R&ZAn0*R2oki7h0{#<#0INvPRdRLpp?aC7%Q@08>N{v*nU-`}Vq02y5+_oB~> zbnhc&adB(a&wn&+_44wNlT&qT;=b(U*Z8%*Y^!{@aP+8UD#}cfjDX6sVO+1x z-w^mZir%U&!nU_cXnEq9^W52)tKUXvL646i0>cFj72N^817))T&#qqb%GmrumJOZ$ zaqec%^Nu}nF5U40mZ|*HKc{chEftpaRCVmR)E_A>4g`s$U+TQo3rGSSwuf(RyvL+!c5z+D>FhffAL zfn%7MYxf_4^C(0d=VEc-C~lewapugTB#lbjp(KeU+!F+#K!DcMC~cGwx;(-h`wihh z27=F<>^84}SL7Gsmvwf>Bsv>O{#chyhSInsX_dZ6CuYwFlYc&$_X zHB5G<=yC4^tzanjhOBzY32me7@VlQ*A!WAWwK+X7+7J3&|s%7LuZBK)FT)Kd!bL^|uvth52E zD(DN&lTRSvGfJ^ih{*N9LHfOEjhidA>^(&RJM?m@?VRv&EGn~Hv*Ed z%*?C|WfPO30Nfa4)dhd$Xh+)!`DZFF;rX|MrW)XNzh9u>O!5}i?){~YRjPWd=Q95zUAWz1;yTZ{Njr%Jo4&-dvCF-I?AKkqCy<)BQ@{O^!?$QUd zlh)PWjl`>H3IDwJ0nshN@$*&;vlP=YG!|9$g|S>qyWxMG?(bi#k{*N=zLqIBj9Kha zvx#yvn9BQB?Z_TyR;sxD+;i+BgbvIPcEFu^?#68c6mTs9GZTS=0zq1EY-mturc=V!8tFCGATHq*BXhAWBQD~acqcgv5BI&?aW3?u7q z2N4p{gK^{5_BOXK>czSc-QW6%C=>wb)Lt^tnymXF#M~jSO!y9ga=C%lI~!pAWpnOy zI+1?#8eplM_@8Xoe*n9(Ktm@%UCWO~S9}v=%ec(wz0qqs**mcK>@S62U|Rv$8OgEs z_I)JdYC64kXx%g5^Nm2;p*a|1ilMrjV@iNRih{lqWuxHPBMd8+c*xOp{reWjM z@6FdtLqddUpB7AN{)p+lMqBUuNMERh2d=OZ{z*PkM!#}gLAp`2geQh zqcEYB&owJ6RE=FjyC-t0r=CAkd-=5>wf&T)k;PW{-FJ{z<5-gvqm5TWx};peFab!L z9o8OAO6kXQ%uL{>j*gG$NbqnSD^Afj-f3d(!%l&#KiiSmY+Iwvj+I- zYw-wpBtfk-w+~4j(~%IdQ(A0kjxmy9yL_l@AV|!N=?#95lzupj5GID~-|rT0KztQp zgb8sU<0G=9#%YCrg>oo{DN>NlaB(G0H_pSKTCBrTGK~1`J@D~y!T@vC z+`)OIxM$CY>%eqa^``@j!;Kz{dfPawW*BDZi5LroN}O{X+LnCe9_Kz3f9Z}>?1>`0 z+LtzF5x|-WmBM34p?;c7P=BO}0DTQ&%^afMkEH@DC*9&9M1tam#xb)#QLc0rO;#~T zpu;EsFU&qW}X%}HQAJgDS*6fg1%fcGjbM;QdI*rhu>|Q1ULODP3?d`B?}J|)nBW?_?d-tdmb&=r>gr1; zK-i(@%{0(y( zNYH{|PlHh&0S{|j@J=JDhI6Nll7vTh{|Gy5Av<|Y)l^6FDx6Nk-aj@eUB?4S_UPb zj|0+BBRj!I$fO2nV_#(sELJlC19itq;*DUZ9m$qHZN!1qBI4XZXQZ^2P>FgSR+?V< zIiPzHRlWyd>6`P2J8FUffev=r#43&&<7H2){b4d;Zo57WY?g++nu!`>uq zCE-&-4e=uS6M}cBsBjp9=|IU1lC`vO)qzyl6MZwy5;DnB!J1^D?)WoT$H z-A`*4{cbvEX8rR;5Ul-`=!|NT4x-XB{imeA7rbq+JP5LT*f`X#t@3Hy?{_yKmPj$# zXe&VzY-c^R$-_hN&<=9PMXvMv$?3u%n0RB)Wu5u9CY;|=N6AR09YYIIbqgckiDO3Y#%uQd(KOnLHsm#y) zWjXmzqW#}~^tWb!zsvvs_QxQp$<)S4Z2p5F-N{UqX^uW{br{UE|Ob6db z%s0Lqqd2vaD+ByACF5niz4N(yr%%ML@IIsI^w1o7nlByY`1x^k&sjS)kw@W?Cyljo z;nl3=;b)-TRd8Lt^{ z<|@rP)cuVM73jS*jSqLu|G9raJPYi-vy<)ZAVWZ;wds%G8gtcFHrBamZJj|i`hcQZ zv6Z04vDKm>Z#!1b;7-1W;fPmfVHN6Upj@GAO7C}Lm7fmuR%D#b_qmteLIk!C zuZmbAw;i&y+Cl;|ef5vWnrD^G>~57{0-7)ET=#Eed|C_ z1nev09PA*O0U-Gj+e@Fbx$HM@O%Blb7`SSzwYI0}fLwR=R_!akDMB(ECP!A^?@=1v z_bNB7t*qs1n3i*9hcm1`x2o5{cdqD$v4W$L`BBOPlRKwMfY%A28{&TBoBblw-of{q zpSWY%jd3HjoWB=W_X-^pqPxLnk)gMP`z{PBEDW=hM7bU2IxnJ2C7!z$&y2KwpMTpZ zC}{5Zr%$T++ZGAKB@-Mc!e40-Y;UYFB}w+YMLuV$8CU#kuY7SjQW}0OH670a~Pe}z@!#!c?bha2O@&2&+T&(HJJ zqZ^6SCHPd%aCUJWy&`y7KdEmD>+Fe` zRH4I!q-Mh$aj})O#?PH1?rRT1)}vrWquQ3X^HVq7ut&2N?Rt0}}N6Q2ez7 zF-GI>l(Xk9l+YSzXl+rG@#3_tLIFK6ajvn}H8oJwX>h}}qp3QOE;BD1~FJ zC7Gn}s zWtJCV7pY^{emA_F*eQW(AX{_&&OH}%qh5d0Q7o)2&F5O7& z;~zh#pcG)if(g%2Ic;e5U}?S}LvyzTyb z+s`N{Ot6L95~41Bv^d~7<{RPx)C8NBc+oTFdrLh^4p8R=bHYVmnpjQ#%+W+3g`kll zp%V_aUMLLAnyAhyQ56rvW{noUN5JB=2?d#7sE6ch@mB!^WvYfYHK5c09aMY$@#T|- zDg(#2ME6QZFY}m(cQU-^9@CxX{C7*8S*rIsRI_@p;tqh6w0ouJ^6kNPS{6K!ZqVbG ziB9Ar7B~Jvlw`P^6bH$ZoR<1Mc&4aL0uavJj{+VE9_aW%vG*@Z|35nefZ(6WA^F7z z{S!(88X;c~4f00SIlW__A=FcCYh#CI=$>z_hg1WNYscpIcW8)IUH@e0szgSd{QC*$ zFYnxdc6{Gp*oJ>CU~L&rsLyJ+(li(!T4q)Ng>m;=HbjC>a8fuP73_9r=lg9*Vc)&t zaC^88Tx>b_Knvsc5D3fooeV&Wu3K$p$%^LBKo84dFU#w7ob{i^$q0%=pMKbgJyAq! zmnfS;#3fFTugcY4)Xy(1y5ne8qD`@tujlR@&3M=4>!8#}a`E1U{C>kUIwL@N z3n__xpf+ZHOq0b4A6Cm!BMI1~#! zGdpgQSLcDT3;ok#0ia4SXz$|>nlZGMZaEabJ56MfPGxubM7NR&d;NiBQy#55KE+%-J3uZ!Mp` zabQ3pkF$YwEH@@Y<%TriOgvFID(7PQp(XDWha?-JE(BH7J2$svTl;gJ5x55a!(q7i zhh4+rG;k^^GT$(FH>q{~@??yrz!0g?G(1hTx=$*GUFX8RzYCDu_vOR)a$u?2g2L`Q zDw{C#Gn7wfN;3?Io z#Tj#6#_lx|wSDm;gWMTidv6>L%g@_cxO$s?G)HOo9{B638}g_5upJu9w(cv|XZkN3 zmIo7RU#8mF>lwHBiSz0dvD>b_^r7`7*9NCu`!<{2yM^qU(2H7{!zc8nE`$)UNKf~6IzK5uWWqu!z6 zh~&q6eppA1y752mA0NTk(YtJa!`| zM-R!yDkH!V9Wh?qXMgM}xxg}dJ4Z^V^eL1WF-l+F9=PuXvqYvD80R9h-of5pzB7|Y#2o@#=0O$yQNzFd@OlP$ARqxfEka>N@`Y5onXOht1U&S^wcsssS zkDV!ERIE^2mTY#_XaKBxM__DkZ{^T5c)dZT(JE?c7|xo%kI%m^x50f(9cRP!*ymPr zGYWVrtQsFKI0T@`LE*ih@Bz^qJji~Zc@ecb?859%<1KnTs1|&QwS54~Fy5__v(a7n zPUn$5dazRc9Q~KCEUv;z3=^7jijPc*$L+v2Cg~}pB2(T#n??u&S-O{=gpwmw?_9T84xZxMc9B{FPa>P+qRysV#?tITQo`&xg_(2ROP^AA`aY`~sHnD%1U-MziO%0&I5`&=>@iUO_!L-9YBw`+ zVBF5gqX0dsA1%Ulx8O`3YB*ZXWnlOw^{c3;(Cylq;Q9Ha-`{M)34SFQO6F#DBBlOmAjqxq_#w_lJ)<7sF?3~;6kRr9#U5n+)W2=^P?KbceCZl z1|j2|KV;kw&=q4=1PpFOAfHiSUkB{fcrO}cPGc9}`W*BuK)$_>FRN&tn1a1EMJ7Kq zIE0Nk6DLyuQ&Q%rn!OmirwukHn=+U9t)*<{!q@oxXvXIX)O! zzT!UJwW*6*cWv@>z30md=Cjv3&UzT5f6eY9Xv&p>|J~!?911V~Rr~ZWuaVm({_Pn3 z=TQaKrw@*UF>rvS8e+6wIZ#!qP&BIgQO?>=(xS+(>!c}YD*Ela``MJ*4@-3dLrn=V9Z_cV$OsZdRJEri)^F-P8 zH%ROwQnpS;S^K_l+U|E7EA4B?$dmbHcT3yPyiq8*Z1Mr~2zLtRFC_UwILe4qe>XdF zTM#*5BXT9@b^<~s4vxp(7Q+for^dAOwWUV2eY7xeKFf5!zT@-DmhIo4d&Q93hW}~n z{<<#!YzyQc2)CH~ZIMxKHj(z`!*|AB`Vp1Xk3qT?@y))sUttdB6Vh~TFN!-W0l~_G zswI$WJ^d(@!X?61YWX$H{Rr;-g}BPYcbqX7bkO2ldrY{Dqjd4wCikGeI0X(%4}Dp| zA~ZC|?r_4cxS(t!oIqAQuUE+Iwxz&=-xjfY!8=$5IABt66gOa^jUwz|hp|}zc_zU` zo`qoRk>adUyvTi&`-)NK0erBUM-qbaAG?&{ECt&PX*h-WDPeP_H!KQYDh5`GZrJtZn*A$c4yl4!QM_ zLyR}(wS?1ljR7_jm#l;SV2#0aur7ht0{X3o#OtZA{`ww>}wbV!{9ck%$Xw(pL{Sja6 z)(*3G+S>`*_))%ZkWm}S@Wl%{r^)bBcU~-bx4l;rY0jYf8oO6YRCL9My%Fvi#_k(O zw!o$BxH_9bi{$o4K|WUU@~NYIabjr~DWmn`_fOd`zhcL2tA}qD;w)}f%MmzNHSK{{ zk}ppaM15XxwUUec_)}Mtm5o2xP;0B0*4f}DAyFE>PR^0pkHNn3k~iEhn1#R$WSfGh zlwdTiRw5`V4Cv1e(=v5NGMPIQ3K1+BR-YHc1-deh75kDXkzrgGmt|I;|=d$KlYt`z+l zsJE(GKpTStGsqwNPP1m)~$(<`$gaq5vl%FSQ}(vHIL=J!D44Dc=OrTePdCg#s4(8{yq}_ ze5d%Q;k#MS#71^Fz2+M{KyKF4w|gp{P@k*;rYhpR~DTFvR%42<)QK zs>W_P`f{AxyF)p&A~#8XSKfmsEir=CD*rI?<%$MFGfMTj1QOyjk2j-2pqFrBId)a? zcLDg;Bkm@bEXu?~PfE}Y$F%W_=l>n9MKLrvE-@8ATNBOmox2RYzas|B-zuo6?E$j? zf?zNeOS+f}^|-N1zh`ZoU0<=yDPui?n1gSrPbT0XYn|3!*Camq_9lMY&KgE>z53DW zkY@4-1S4gKZ_DR5#g;-eL{FV7Pq=(JKSWd}EjfNY*;L3!e0}yS6P1>a;Po;SI#&1@x>bU)F9|F5IncioGReFvzc&0x0@_{5 zsqLs8;%25I7TSpo8TaE5Zi&4`)#x6K$z}eM)fuZoo!B>$>>{w!J3r%o96L{aBe&=p zHZ4tdiE zhKNE!S&tMG_i^akW8hG3;_KMRpqN=MzWg{7%xx5c%!v&WWdtTJ4W*Z9(Oh59o=n_q zCSb8_?e|*h7{=eKt*dVCx1YX(Ec5b;ers8HU`oAWP_3cy#g%lR$xHq=urmU*eW*CM zm!+ADw=s`$N{U=JI60pXQcyu7z>0iOa`o7H*Mdn`fW@y_2-|X{y$&+?&v7et2DB>K27!C2sn1+Q2Xo| zU|dK>vnrjjKWEtmt7}5zau!r6k%E|5L}(mdhQ;zHN}K0EgO`g!0zUcJb@%J?`S%3} zlx`m$E$(j;!jHgIaF{ggw&ojHijf*r=za4mXZ|EYz2S4CWMF_(T2-xg`m}(Eu|#~! zfEXy#jka;j&W>(vYis7+GY`2Hh8S9bP&pNBH!{ z>aob4H8+fVA538a$8q5`8a;j)ht`%7A`!7Zf?TK%n~{d8Jx&V7NqU75L$N?*Tc8}6 zwCNUs^|j8Eo@LLP4c@~FF*i)xI8^6~G%_=*S17foHx3QcQ-9Wm05K69^wEZEBjNC< z2ndc7;Yn6vO4aODFGrBagfX!KBb2Jl9Y~6|)9o z0$?o&YOn*BTpGRBU)sFZb(OJbyPGarsa|99w?v>DQ{Ueo&eT#Z1-@OJ8H+gUBS)rW%v9ps|IB25z4cJZn22BuyJrB;VEMf?Z`Ryh1{f%j3OKC z7K@Qqk}>p9Bv6Xy@&D8<@joMd7FI#Ef7{02#}>2Wc2ijv<}=T*ZJP35oDrY=w$YPo zTWdS@z4G~^13WB7S36G=PP}WGP~;MZH&1_SMrmQf7xH8ZRb#d$@4t)vki%4!(G7ZW zsBt3`oGf2LTsS5KWfv#Ow6x_-S<6_M6OEV_Id~DlrMPHtpuRLYt*Pj}7R z@_hzAp*CIfXUCX^p*CHBG#JY!!nVK4;v&(hc-%9|#OeiHxSjK^Et}qfAarvjhd2F0 zqHurQm{ z9qJlWt2Ead|C~XZM#_h&l_{FP`HI<}`wHwVreV0eE^Ob@0+lwCIFsYOtX5qs9TAl@ z2q5ZOq%7EkNsHxk9T9}GKdb6B#1$<$j&$dou~!n=P4UkTHic;(go`+D=f^UAj<8zi zSZo*KuVr7G=6iN6V8U`@mSMx?WKj? zv!sfX!A)QH%&Cx)J5RVsz=RZcif7X_JRn>IbeQm{pbRU>avDbm$#qF7!f@|^3pv>< zpD#}}E$OJwWIf468|DPLkG&<0lE8`m>|tM9xL~I!%hecTq-yUr%xCwg*f*HHI7~1M z=(R*-IZ4>VKQ(W@NQRwwhkHdZLdm)9IdS}_x}Vq)(rK(_kT!d>5}xM}clVkqrY*$z zlmaUGO>9%?LZcxUYf|t#%}Fu4vHE%LmH1bNx#D5*`dmp#f=|y`GSRan*=9k?c9r5i z*;M+PEO+vDP~AMtu-*4Q(^QNVA_TzWx!zcaIzV;&WOOVCT)thW*flGf4^EY7@5MCN zfCqUOL!*DKP?TlNxGJD*Et9oTRAf~Hbixj-tAD1)D^830tfV_g`WdG$Yv}z9D7sUG zOLOnQP%M$0B1RpN4INE)k+?QpM7^Nqf|nog3m37BmXH-uSITz;rdhtFIvr(As$XDH zrEjF(^{Un}#ac|w)~}|A-xj+rZfdqb(*qL*JE*EQsL5Wn{AoB!^w~cSE6u-*z`wr) z_do#S@hh3@m@|x~`J32ZSkG?YOk6FjXxbh42l0w_`*-5i&y4+y+@{6##Fc=wX)diO z_ovStZnJ?_gUt!obgz3Hg{wd1a5M*}7$?28O~Hy&cG5d6LH`viARC9cq3oNQmYR)H z4Ec#icX1uglGed#m`i_&0V zME17y*OEJ?ORGwTr4O%vsN&uD&f<5VkoP;Zf+akP!bw(^BgqUDP#jZNd+-PMKO)}6 zJ~W+9iHldf`rr&ge9aVbuqDBU4VQ%}x$??%{vj6j5ho%GQ;lXNr*lRL_J7>@$l6kU ztcJM7>cg61G6$;RHXOxU??IEK1l{w@gYPrvd=y9W0x~E_{q;`xht*FAK zjP!0lGYJED9&s)`C7IVm%u+UKX;Nk8ZC0|`)siz)pU!7xv9NRFLPimFbapg(3%m!8>IhCkP7nes1S62@V|7|>P8XLEp$R0t zbR7o5JP-Or@s1GYLQ`4#g~G-Y5gtdr!;&?lh+)|+XlW_IA4E)$E+0|TZuh~52lSPj z%?KB>{N{TL9x2P(1pk66xj}Um z(B&LkSi*>Q_z0?TFntl}`wQF~hQPR+8kpShQ)d4)3dlG{X1LHJNP zJlr`OLUh?VJK-X8C9PE+3g6=HDMmfxI8!R61Xvfxy+Vt9#G!4r9;h&w5)tAJQQ3a^ z{37oLNMs)xcfbi%iU1A4B^MKMccu2z#B>vODXDMYCK^Pf?$#KK!*(#k$>wu(`qzP>&sS$+NPDn_U6 zOgyEg&G+xJHx-WE_tW;}s>l;7_j4bsci;Ctwx>kkmy09cTo!Lsz50*fxDr7Phr*8P z1HA_GjjJY==<-BmvU`C$P4cfh`me7yQ+=NxR9bD*5~FBpedWuLm96tehei}Na36(j z@VV~JQke+deGA8KjE^U!nqc{H%FomhWK(gg{#NqK&j`r$8PD&Cj|h|{#&8sTS<>RR zV?t*OokwR@ht~ zc$nV|iE21?oil@AiX?P6H~GF(mq-#5>}O634a^k7H!TsQEEf$qr-Wst|CKwPgnSlK zi~FWR9m6MwBE_SC*B%{L7Oyd^7UH;Rs;mk@+#ao496CTJM}6sC@cwTf)ELfEvNtK& zrIfK9b6j+l>MVJL;`v+FF^Uj1Kd>BGqahB2xd4Usy=jlNTCu8Bk38@J!uObQ@_cyR3 zniQ>B61sG+6a{If`I_;b^4HXlMVK%Qn`9l5FxGsG&g)L-c59kmj##p6YPrZP14FZA zp8>vtl4lSedCW&@IPUA+7k0}X2M*s+N>`#jXBd&3E+bmL2^@%zlDnl;cXU+O;bMHT zZbYL6BL6b`^kGc4$D*R@et);@h_^h()hA=JRVOA%`#v{bP!`ebpfEHB1#MYrPOG-n z@T1oK3!;kNO@Q_hRXK zpD}j>@7z6YQ!f2LmEQ8Tpdw{quDcJPUEs!?i@X+G?3sPBV2MZ9NLxoO(Xb^qF0OcCU5iSA1elY!-nV^QJ29oEpu)Y_qql z*^P4q^-4eJ+UW9YnfuF?%Z?=hC61RXFW(oJvZ%tR6QuR;$#7l%zJnv;@XkkN6VWbn z8C9bigy*t&Wr+wy8?O>GE>X<1T#Ri*ie%dxvrhu?b`zwA7kH);A74nQg{+_pe~NF^ zzE13yNDWVH1D0oV+}u0D^$bezg#;YeuPCM^B$eKEw4a^7ap(BOm4onZr9-@H+9N$_ zp_0}Ca@JP-!`m+#Nr9i=9xtjyU-C#|>fuzsW_v98x;A!e4Wxk7rcyv_!lj39@$qT9 z8hjr2$Em7W#IUrIuaX)?r?KpI{a4mF=$sqy@F=C#w*RJ}VHs5y2oNaWS1l)^ z1!o(Ln(v|?K8}IVq1BkoZ6j#R`;8@9(3AjCjoy;v_#zU}{Ln?L>-+YAp(op2=;R}; z5Ra&ciPs#bSH9Abd-R!Jl@*@f-q}9;VbgQd_tkXI;MM&HSOJ?P1N5@_zUs-d&pw4R z5UDBm%IyFhBA{O=U}hINX0pOzm5vxH|46+yoWS!WI&u@AMsW=A2lgZn0>C{*?0+skolR9#4D z_crMIr$|y8nNNZZJ|~lTQ!}pZ4Lk_T%aARR()U#CT^P6DILU4&>;><_H04 z1}`Ms7lCCNO=X7}hRETxcq0ER6p`J{anY;(^SR&Q$*;)e_q+a&p3l`l zkOeeYXzE;wyOB9eo3(Eu`^|jTrDH+CFN@!sD|Q*8ngn(KYlH!$R~!dwqMX!KC`%hV zA*yy8*@rShmniK~_WT>`6k@f(=_q$8=fzv-TT{7Xz=g+NhWF|kCr8qpx0#x-1>+(2 zgO~LH%;Fq3#wyi3(YAHSHM`jY616|qXUGbFgne{N{5az+7@q0Qndg!(V=jJB!j=lh zh}3}5q)UAe?%xp7q|pl=m;DLPbc>lsRwyH5Yj47P7iE-wY#ni3j4k%nx2O<$I>4~o zHVI}QSolLXiQxObh}eF&O?8tpQ&${EB!-ekf8D5d_vu~KIRw}z%JFT|*3?WEC6uh% zbxfsdc@y|IOW91ymK1%e^Eb#~+@tw9XYtw2XKk;}W6sYkkq>U&_vyM-S5hwZ@qSTm z9)YSZtGvA7PjD#NC&G&?LbKLb$;ccB-L>b>yK)MHhoG!DA;~=ESwwD^kRV=URd?Rs z^oTv9P~K>6*$yN&C5+IqfcxebQA#WZsJ>-jIb(VgU>{>(_EGC|QbY4O-zsott*#pA*FD=W! z@(N*-#w4d}oU9=MXJhS1RfOi%eKSX&%~LXmw%jqiH8s9B08*-J_E;lRgJXsb&m3WX zB}!HUEg7I>f$e=}Jd!nzo{y7GSlD@$EPh?{)n?i4WRj%jJZq0Hzd1P{cm=P-1DSRB z^RX~RVHvKyM81AIq?ZCiB)*sRBdR)+9zNh?+j-XV7rV{#4t%tP6z$eaKj#x zxOZTKw4Y2Ld;Q4@6`O$5dAra-;ve09uUwY)`|DFviQHTMt-OJ9(=|tNRO)Ce{rP z)Yl}Nsx>!?oqBRpOVHBXQcW7}!fa7B*aE>sf;2AP+2tdO6Uwz8*$sEcsHy_%3=PqJOV`P# zQPms|-3VBdU2HM~QtW#EXL*2KbC$Nj zLm~8e)#C}g^gx6Lq|V@~)?y8eJVyz>DGs)md&!}D^9GuRW10zPcq(2kbT^iKJe$p_+^B30a847zFH_o zQM{|MzEDIP9fs4+z4rir;=E9Hsy-rGNQhG{F<;5qNml@Cc`{rcvmv~Gf9ycE>c10R=)xcLFzFA>|Ipbvds*dfCf|3M}B`+nyKXnE$$(5L=` zD_3>w0^0Y6^V711fxo?pt84&{F zZ|>dSD)nm#%U@c0^Z2LVr#UO)@)_InjN|THgL7wWNte=sL*@pJyRW9VT%Id_KY!BJ zoie{(wWr74Le!$0>K(IacRt@I0R=Z-op*gzV0h z(q{X>)md>$;)7Y9U4{hTJI&kj{SP{NJwt558IhEOuW`Ajz2DkiBC*S!Gy6emv0)NUk2>K*){^0{~m-g^j8`-`=^Kfg{B&l3W;* zF5}h&4)(R{$4V`~$g;PzzXQax6LgYyg=qXYH#hlB1v?1}p{;9&%2coS^+){SpT$Q~ z5hA0ym6&8-5m6ylvVGys#uwchAN2ERbF40sZN?<@-de7M94Jah0kY$W=Q8)sHs*(|kww%;V zB&J?0jBjAg%Z_WMwOOA440F^)h`8IYR5;-ihXqm?`Us8Q@Y8ef2=|>j(-hR>sfgTG zwClz#T<}kj$@3aIo*Ag;&G;VYCcQ9i%_tprt`-!` z+3{&25*8kA%Aw7J)lla`qZsNOxDq~T)uFgCPPw4%IMUaoO&b=a@5rr>LSdXm60hK6 z!_OR*)QNDxdV8huG2&6xK9hcZ<907`upi2DDK2A}KvqUnuRnsXyc+9gB%t%kyVI`p z7VHNvZ;H!kZXmD|>h+tv-m{v_BF)QTX2liZ4TIW8YOe~Oc7#>#{i!t&{c7F)`$Yfa z(z~wd^~dhmh;ZnNNPe>v~?tIv|!aPj{;v{~C!i4>43UDyzhyQKSuxTX^9dU^ocFZLfb=ijGzbhmzJ zZmvMwAS++qz-_l){&1St^@-BF>^qlBikPr0jgF(Yl&h1Kpt6ig252eg=}n(PzNwuTc+BRh z>spd4-KW9nY8Bh)hTf~LSO)EUY|MTOXxNlso^rvo^ddJM*lt2@UC$M1M!?F{B}>?y z1%0O2)8wd-h+5$Z;z>6;Mn}dP1RMd0$Ei8e-NyNCNwI+%qCT1ldR!vyV^467nzlev zyr-^u7%(kzym~t{0UGtlxv%qrqg*zBg5zS#H<>-^47uSZYLfz8pJ~df4O-B2+zKzE z>Tv*I_B8WSEriCIIh@IK5AsHH7^B0*w^?v!Y1xbn1>{hT8^87H7;Q#)y842^2Ah*E z$4SSZll9?VKF6!kw37o5&L6a1{XokVZmC`*(8Fe<;`Hkv1&W#$*2x!*R6aBsp*NQMYwnkPdl!j4KRY3hx zLq-Ta`S7V2D^7Ij61lj0{SD7*vcbf&kgierhKBd7fULGa;s<0kYPGRmKANr$m`i$2 z1lYyAK+E2J2+RSf6y2i-Rd;KP`+2x%WG@W9wDekKmU5>W0&G!M+HsUHnmWf_YTCzN z@U-6xz)<^b5MUR!3tPKJL-lbcQQ~+><0_?R7A+dM^V(jwELhvNnF{>pt>>Rx0Jqz> z8w7&P@$0)V``)!3ioxqIue%#4w@1b{(l?I-L!C=Y6HB4IM4#Z}ly%im`-y?8)8c^) zCEh{iw^mn-l>4i&q6(`F56hx%otFh}nx*pt$C)C3SY?%$^*yvb_QL3ytaA5@4D;_R z79bw+a_&fO1(N@kI@1rXR~rs!%e>KQHD`h*9!`jYajB4O4Bw!Qr7q5P)Qw{su{*4VFl-Y?gsgWI zKBTnY_MkLOpb4U|%3qIGx-ZazPP|DipA5!u!Q@U>+Zom%8OWMt`J z3<=j0m^>WXrQ9TV_U(1|_?{&RIxeK9B`gO7)@^PGyB(9!Jz_Q*g)#j2Gq|WlT-)lN=%s=`Z(h;xc94((GlF+1epBtYsFMq#pQ~-(F>Snkn z5;Y2!#oa}QpP3WH1_0%o3C0!0MYv(5K{`KCA0@B+-Ik+$JnG>rGk86veYlGZratntNC#h)~ectV~dy0R)Jzq z!#G)SeSG^8<$DOZs-bMY#d7_h*ZjZN6{xhUHi)ic2jtws$lTW4tD=!hZx%l371}kY ze97>%*fK##-se}X$#aJZTo^j?T2RInhUdazzhcg73PB@`BrBbN_6;Yc78XgiSS1rC zE{<=f6e~SBDU_+JbySGQhi6kp@rWo_8O~7}Q`7`nb?fa>mX0FDNJ7Z=Gv9HfRgHu- zM`{%9?9r5~CsRuglyhb%9XnxHB++T!E%q$0^{`t>GxF9aw)e8=kr7SMEeXnxAmTfu zTJ;JV%T(yh*X0nxVGNq z@PBLta953cb00o=c#p%s(D|IRc{xpY;DJo5CneFbxB(9|^mV6_W0|J&A zKeZUTO1~4dhxmCC zTYNlYf=*_10yaK6Jo)R%2kHG4F(;xUryTJ2S3xudvOB(*CZ zW|}>Jc%@-jw(CsuCHgg0Cn9T8P^=~6c4#+=e>S8nQ8&V|7R3Ss;#v(*HE;56UE(|N z236z7;IHyIWlukBG=2HZJ}aFtj}Xu45b^O4@wb7^&%F!KOf|n}!vBsTcl#)RbyNPD zhf$$d!`q-~u_{h^D{hbyM^U{y2a=B?p_0}AIB?)-akzY?i{K|`U)ssYop`Uhqq^R_ zK0zuaZm-GEnYqH3XrGE5HpiCb)3FVoFI0mw%lPAv9u~sq2(bidV?TK7ff)XwzG_ly z4C~O&%iK||H`wzmA32|WewifnbhdpD+T7XLB#!pR`C^SxgA~p8<@-@QRoNvRH(4TU z@4r9NebNGq)(R;vlfLQ~>coX1!h}tUvb~u;=y_c_EG^0ZNT^oMx!kHmDaQ1OJTf+c zO<(J_(EVC?`GTHi^2XA}(&jYMQX^lcG@kSBHhm6TdoAKdrdad+7;J{aZN+a$VVxW#TLW8~8+*-E z)VC{jD{12aEtPT^X>>+q0jYJY3=!!JVipLSJmv$P2cE>oeqv*oosRmksjed42wgs_ zVPqce!)Hjh6DY^vRh`GA=7>H&lY2?Y6^4y#w zXPgx%yl_VtnD$ETBd~ndkJ`>LAu5xI6IOpvNB#i4O#(H=!|MjH*zlV zbz%>H&76w(^QtQ)uyMAqIOoC|Lt`|Pw4w~Qfr=dSkZ9ZI&A?Q`hG4tR7I84%NtajI zw9C29$<126>>iil`G$${cQ8^79XD+}@MBOTel!gxXP<}weF_>4V}I~q((wXIqajNI zW|T{9qrmF{;`7VboEh1Z%H#=15pSkQ~p9u=>Sbtk|(x1Q; zGvQXJ&8D20?U@~CX%&M+qj^LWIWNro-{HZo1E}*aE*O=$J492H5#&I+6chAx!a;`9xm$? z92Rf!tDWGwPE7gF5R{C&h)6*Urbw_JA3jnZ)E)qEKRy@VwfEg^HR}2zP&iJA;!Wtj zffmUA1^GJfHlz)}s&m&a3SEZi2;C74*R4Iir2Z_pD}h1M2strQJU z3z`j@JdNQ-x|;~GQG!r=O+{q_n_mayNBh6g{`UPetg^`Fdgi@{T+PR%hu$TmyQaw3 z@5ZmUKpjl3)*yyoEl!VR4`@*)0QchX+X<*;p%-#uJSUNq^kX1RcLKOi#s|xW? z`H`LTpBL}nTi_Vn4TJUAxUL*k-h2)Z>3ryS4gM_`bqmvcHM*ver4MJ47L3r>i_5! zUIII(Ud5liL<*s7*?&zl%~IJ?C9YB82I<9zP&Z!d6)-=O5xXfH-8=`Gyn7e@bO`^+ z;hO`#$c9@^jVy6ffc=oSX3tb2qg~`R#%J?|my?UL^Iv?gIGJ*;q;JdGuE$VJ?kP@? z#R8D}Ec6Y^ns-N&#ACTweNKI$D53aTLc^Hugtzmn%exv zuDxq~19_&3MB%4g3)}sL!LKW7eq=eKRzu~)t_ou(JG*XAdl6;CzBfBWvEZ^rIW66J z?Bey@MM6}%HBXRQ2Ci;>@WJ&Rdr$L@CQRj#Lr2)6ZX%wI)+zWgBbZ=}Pb1H>i zXO&}9v)Vn3FTFv(>Sgb6jhgUck7S+|xD`XoEUz4CEU0-X266k9M$8?2a$)|ycFVj`l8dJo8>2jq9yim z_pZNJ?OuMveX$^|zN5?q7QO!$AdJs8Z=bMGL&LG?x9{yGtr0WXu>ns%_PZpXy5CQA zgfdO)$Iw2T{zdW!y_C0a7l9TN@0Fk9G>4lj78pc!+G7DtG<1Z5o>`*3JYTiZyEZct z>&e@FLGAao`}cwtsM}irF$_#QTIo;gsJO7x1Bj#R^Zj;nD=X{4?e#l5fiEdzWMG>` zDO%OrD&|}0T_X;ZZoWPs{e)fd`d-}OQ=~J``i0s=t`~{53K8(cuZ7(eSr*klsHCv; zYgd7(HE4?K&leJ?{s8V9f6aF{5C{bth+CGi&^_U6?9nm}ICVB%_r(a2&j@)0qufn4 zwMPPK@iY(ziTFGdfX_wg3w&hLfC$t<%-E6fcX=b+oCRtSdnS3txs~0SEhQqwnKbv@ zM1;TA7_QmFO&b$dqlN%j*)7WLRn@4i_Qqh%-V>)dDnz5k{lnD-B8(0j*ISs%)1DHj z6_Q(*!nNk8(F+sT9x0C+Lhox};>%S07k}T8CjcoWWPIrI%1=d6>ysk*Wao=htFDjVAQq(w{*?1OM1vz%Tzr zLx4oy!*HjIBq;reaE4Byr9=ExxZF>8ioxAO$VZ(*JdPr!jqkaI)dU|CG#X>-A~X=3 z*H{c0cix?U_2xFn&=IKCnPB=V$oTvmwKOJ9+c6=ip$#_<1TVHqQk;B*K~7q#^&rm~3)yrWN`VX%X(x6{XPe#jgwsL~Ba=(? zO~sR5U=Q92 zmys-jWDQ5c2%=5AlQ@YW{yV|*Bb_rQFo@4LRnMj4-yf|nY{6-y7gaB`8s{B+6*>VD zpbI|&9ub8u9~`ZEw7t;e^JFHAu_I(-;d-0d_C2M!uXi`T-hHWxYFx9|T0L8u`2KaN zQ)yxT0p7epTS+v#<6YEV15hD#%hi&h`by=<|CYr&{M^3_BdJkQk!20_*J-GC1i7oA zAXkvjV*H;Qkj+i6^BWPWiw+B~U^mxP{_9x_`_J?IdyDZa9gTtGwR7?^k}?XC(o#}1 z8sbmImEb+<)ZRHt-1=NnFvuOwP&SCH8{j+lHH7m%-yZ*1GfVZVtBcCdd?kxlpSIvX z>$Uta$caEsb|H=MCm2{1idV}$;A+xb579XtFa|-z(`3nGs1ex+1sUw*1lx;)Z`Xy< z^14fqL-_YYr%X;=4|Hx#kT>Wz%1yj2a>tDM0aTaa^lRk1yaV5{vQ}E@1cOezYea%< zSG)3}rr*d9iv1?#V&3WQdCJdFO6YS+=qiPnv%50~Cf>`qca>5# zxU~=$w-Y+E5;9UnWEzAR^E+g^#6NK2n(a<{VAJV)l#=W7ym9cpM9lNR*5LyK&h$8> zHA6XHy0A_T zoS2~SZ|#h{Tp(A2--qQl;mesy_!8)|4}D3tB?5V6?>tF$h@Bql_7MKQ#$=X|{{+E? zk?J`YuA6S`)W`gmHkxDQ!J9-aS;&voT=R_aWq~mcQ?J(SQn`?rj%`_;4@@)G94l2KW?W}1}}^j@OKvbj1c4An-XN_ zD10^H3Z1t@LIPLDadzEuPKY4Hk=Yd!X)LUXh(_E3VF%VZx2DDi#h$I3sTVQ(87(QT zC^?2vGeq#XGg;uQo@>0*;6SlO{P}VD~CSKp2=b z=okltS`U(zfu&GP>a80$FWH}&;t$wq9|+oO@&cp}=5{WL$N3VPGA?jJKQgj>4FP0D z>rpAH*EHjX$cQigSgaw?ndv=ZIM+ zACumCS9w)j%J}s4Uw2X9DxFRS`46fP?ZJ(Yq)__;`(oAE!cdYifQuEUZCU~`WOnFD zvZ{T1MGjaEBv!HMZNML?EIZ7R#)NIAt+R2SckpzvnB<{3Dz}vc?5C?8DWVdsFNw4C(a3NRa3WoYI`~ zNsxsW1p8fNzR{xg@LkXXDO7TNiFMpB65lp1tkF0As>Gp@BlH#es|38G5j}382r)z@ zG+8Q@STPXXA*m-6!t@7_`fRw``O0WCJF%+YSMKqXhljoOIF1~;aNdD}NtQR2hyY-$ zC7v&hc?>aTLNI}_Bz??zGnB9+7rrrG(W3@QqhynAQz7qISC|fwm4ZB~!|ZcS&pKZ` z8^ZY0-c$&d2IW?8zW;%2cN!oWTGo_7&;4%KKQZNtZUq$1aECT2Ix_<6mUaFqwe|y^ z4zw)~6fg0mOyiX#J_jEchjxAekM0-XyRb#^PCo@NxVLuNOo%^sG9zMdViTx}BpoaF zYCqMo#`PhmYMNZ3vuP&4h^$k6o4ELpN$R0`PNCruLkXHX+DHV;n{h_Q0cQHbW$`{*l| z2hWs?$wQ{sh+&buQFs2vi2>IV0iX>hA?smgQ3wVjUoBBM`_2fE4o!wU8pw^55rhdu z;AkluTY>o{{%@SVeXpf#0Ob?u(oEF}s*_`je0S*pKttOeq&g|4p3j@!4=QDLh6@qnrxz$yseB(tnCmzSix%5nx6AS6P)q=b&NgemOcc+2A=@(G!S=}q^L%+ViyWGE9iUqvTXdM3y|Frb76#K|)Qb3g| zn-gXe6IWM#A4Ib(pc7s)Dqr9EdWqR2AFw~;fgFn0RU=5MmXY1dr-4&vH{U@`jDWPq zzZPY`NbA5HlB#b4zL7ecoByPNj)528fnQ_{|Epkf?bb|)%h95%V$PMPEv_aGV6gw& zDgN~wBZBLT%UpOQg0*UJ0SN!yQ%+}`t>UYkercZuQ!@_lK&_2r5ysomNaSWVi%_w} zJz24`7_r;{bzH+u$!B*yv^Hx#tap)8?Ks~PyVnl*9d8krebA9xBhf4ac&l`9H@)PNg0a!L?- zwDgdPNS z+rERGvKlhA!Edvc{d@f6)rZx+pw0^KdGuH04FUCK)JJQt9?(6~>H>=F{}0nY!CNu> z@gSlCyo7v%*KfzyHrLvZz20fO^Y0VHLOm_hcW!~#?uyLBD!kFQRlOsH+rt)q$HUk| z^C6xm;d=byLJ6&~krk%^9K!}z5KpXStTDYw3~Iqic~C~*(K}Y&QG&r&A#L)xEM$&_~;ny zW5F7NHKa2}FUCwx5T3~#-G;3f?1DS$K95M&kRs?Y>3&cbfe5Y;0vZ=dSV`{3LN!-% zU#Z~Y7(Nq56~|>A2x&AiFA0guG8uaMx)WaT`qM&pp6Roj#0sWKoCHpunCFSQZQ*)e zbh3PU=YZZ<)JRA)H@D*Bo|t_coKmU)x-~?e-%!0XJ)Bv1wW7Rdpx4&Z?n1?n!HdJY zv!eNdpYQHAob%~9bilRTy3o>-%4YxdXfJLr{%5u7AFy_y#HLRB0Wjl#8PDpaLUcfU zsk#J`OZn&NuD&4!Z;upqpT6w>?^Ct=2?D3;>c|d-znHw`>(V;ZP3HA)Z#}IrOrvxB zw$M^9r_LjRi0wKlJMW|@hLXO1f0+yd_A}x0xm-bo^t$IMxQ;BnD>d?B@I1A<*PWjk z3!TM_CEz-e^{x=4GW6&n?=Ya7icjy5?gvMaeM0+lbDqcSAza7BBXM*>dsSfUG582f z4blX!(8P-|5Y&Pm%uR^bdV;LQJ4Q*=IZ7m=@Zk?k;99fDRoIAI)5TQ=KgDs|ps~Y` z-IAN7bR3gWMW3khH;)qJRc<;PFCV^B)mYyPOME(SQH_2W|Mj7iLxZr16EbIPophiE z$t-x@18^%Iq&It$eU|p>_-R*sCM5A2#`ObA9?BgL)eqCQZPE+iHbS9>23rS@pZ6NR zuzT+QI%mJnUf&R4r8&N^^0EY{uI!(rv|pvcf6q;RWzwW8|4`EYxnd#l;^wl_0vTX6 zDM6Jo(?2~ZEXwDn^D{1n{rjAOE=vxVX~-=Y>lP($i_(8}GbB4S&~APrt}AQq*~>%` zw!STq*yy^5Nf+qYx8@!H$fps?^P_Z!PbCG90&S(HDvcxSK0g`Wno8x!FWCa~3_E@k zG9j|dimEIdoxusk3EQR1LD|)+=h;`z(;;dV-C0^^1o_^tF0pD8Ic}E+b87C#A#P=< z>j|19j0T1WUbHcOe3>rjTpIg_E;L+Sk!~_-nVTsAqV-f`4Gt5Ie@HLJ;-aYFAuP%; z-;AbnSL$d=n*7FN#c70ves1K!GA-+3iZu628W@xcWF%piqL#@t#`~(FD~Br;6(0n_ zyQBP*qa`)-eBc}bv@C1QIET$VmUq=q-47FOe1;!h8W^3ra4aGD^>=?V$14@RQpUc% z#UXed>R5Ny?c8fS=u4HCj@J?;70YvrD-Wp`-`n^`S`S!DS-b1W)1zvA(dgYh-wWgR zWn!N#Gm*b;6g&3!(g4z{I$^0Tog}nZzw}Jo3$!?2FBL7oE2&!?r{g4#Os>_`F(fOZ* zLti>>guL%n$iMz(g7SUGk2pWD`K7Xo@{&jfJ4C~*58T%LX{;hD>bx;N+NvBk&&wZDl zoM4Mku>O)e_IeHh*)Pa;Ssf9bO<9`IEwenl|EiL=IXiByp8+9rUtK{gGhTfbsqU*n z$Ku>jL&~1}sdMVlm)WZlg%Z7phN(o_IH+jk0&?@v^WdqpfR{DbIIRa?!a&bDXeawz zX>?yG1D_FvJ$f82B3rRoFax*8>~RU7 zg|-H_kN~bxmzHvO;GRN~NQf0KQFm|C!%x-72)t+%bA*PV$X=Br11A)a1~nKgEHz$N z_nY7;puogA8}SC6Ves?T&2+v)Kq?|Q;x&K_pSV+1wDTjKbv}6JhrR4qjE069=T#OX zpjk28I0`&Hz1L6kY)}h&Z5@^Qi>kic3x$5HJ{N3_u10-y^1XK;@}pzc#M?mkfzpgq zpt%CH1bj*Ybyqp($DmQdqp>L`9!w7IF4PPgIwL#pshJ*H*q!h#%IKIA+_W8YGn63R zSQ(LXykMb-ESv-S z<`I0%&MjGpNsq&c`=^Y)x=A7qnP_G?b z`NX{r!1R;FJqAji&Ip2lI|I=6^;|nob+z8*6Xz^_QD_i-Zh9r)t*}llEBYdw9%R#G z>EClX{0xnYsT~yrmw&fRjnwfuUZGvNN{o{1~YxS1_ zQG}Lf=xp!AT3UNrNENxAQk!)&ZYgwRu^x7*79TexZi*&G127F=SyXAgUSs1KbH7L zIm~Qd-hNbXwe$@0*{O{q(>mwpu;IPSSLXw~4&Qoyjq}#$ug%}THV+Lq57k|fi8?<8 zYimMf5Oj_UB)cjeP7<_bLS9|PdY;F3x1pY8=$OhSXSsgpvpJ~gX1D+T75PG*GLMdY z?LxRAvXeUgi&PxL;ILIld14>eb6&*-myL@G!V##KT zm%jUbUx*{CF83J6E!j5|ZRN1p?-i={SLa=q_iJXiKPLE!!NGvNt4TLkUp#Ii7nzo8 z%!SXv3t{(TFriA*aEvtIzeHjXNSaV0C1uIS%QF4(HThu5^uByS5eDDBPT|8sM_8|a z?Kb*EWsNWgW=kJIiYL9^xgBl(p*Q7bi=xZP-7@1vY<~RQ@3A?aXa@7`F^FN9wm=RM>+25X`*wPa2UU5oJ2Tr5<2{k++tmr>R+*41T#MRl2@1Ew8PIJA zNo%N7qeN%5OaS!$*9PB@Kv}wjCL9r>5q0{Ny z{#eF?GHf(BNG?Q%mW77T?XG|O++;NzluU0fkSyPmTjvBq1=@zQs-4Tz7 zdeEy~z&^FUG;hLw#)ho|d3}GxT@hT44PC+Lr&YPkJ7 zf>xp!ca4In=6J}b0zHlgW<1(VN3Pi93N~WmYYap=Ab9mSElv8MA4g;`IN$(HQ{oLh zcL`t9kGg*U5c|(rc`sX~{dYQ#OGV_{329e~mPMUP)eZ_b8^_~W>Miu{q;^L^nlkj{ z9!O0PZn7m>F*qtD?uGeANh8g#|6+F?|NK@idX(VVSeQ#FL1Tpkc5#eScsA)ppKtQ( z!`(Jdj=FRTA_Q2TrguFF_wLQ}=o7GlTJ%cRLfIeiw;5tA z@Sg`!u?UgCnQ72%8E7jFYpHKn>-ml^{$M?z{iN*)s?z} z^kI#QyOB*rf`JH&)X>mS4Wg;t5@s;{#DvuUzVYvP>~~nUyI`dTZeQ7Vb_<_C$e*V2 zSN#*xwCI>Ubd$1|g%}o84Z%2&a#Ut&im&EQPjA-~0Am-g_UAbLdu3NOUJ~c50lty8 zDL@_lKH$sH+O(k(r7*Oi-NCjSI+?5ARa$Wn;REfr9%vFv!)791ZfjU6?M!NvU7s9I zDsgqv7aTLy;IUVJWqrmsry?u0E11(Z{u=%hS*)coW4o>p{zs^%%F ztSsyOa?gsMKAXEkoy8>wl}=?#Y&la!UH>^8mOvG-mz>Q{T4{ScQ!L}&OY$VE1pe7^ zaK{7)uiW_B7x6&jMWTS*7H}W%!mOaluPN&bdo{!L5AySyqSc+3t;FSL4?l!d*WjUz zQzkmbNjc{eMw=08YYJB%^w*;PK(OW|Oa3tsbV~{cbydcW4+;=5!)_5n_Z2H;*kv%& z&bs=I>?v^wab6?KV}FCNsQ=BwU1k?$osvy@IU+9@kU+5uCHjT^`lVSA=tP%shMUx= z0hDe>wwCAfHc77wea?>XSL|G>=G>{_aAYfYi}dB@HHyioV}D_ik?bsx5bF^usvt%l z2}r2!LUWsS>4N^EL|xMy&0`6OJMT4e@4=jFc{5`W%4Zd_H2I9hW6_bXjbaqf2(zDuBMCwed>kQB8M@=p~kCooLnfDnx3EX^O`qqHEdSs71&cJw@mJf9$8~lp0DbuuzKF zsDe@jq(gF^plh$S_gZ_u@3(V4oMg;Q27U;cCzEIH`?~(uAateruvmw3joO9R`1yO{ zCWLY^U@2UDPzXb!d73!Ppa%pwT`m9xbv^^&o(8f<{G)k;o2RZHY(=tt`MzE^bKPy* z-o1M{xE!OS^SvP3_6Q1oh=Eunah{$AlqF_NI2Z;h47D>?)rG20-aGVRWN9E_{fjlXB`54_$0 z_KOyJeSq=^X9Y6qwN0}qNB0v7uehp4X2nvfmcjP-TB;Y=4fe`^I_k;!$k&6f6T@ zm7+_y04N9ve7t7iP+>Q>-%bO!8#rOEs(v=%klVJ(P#@d5KqtIng`^kpys+E1c+SV* zcm2i&a*wLdb{`IcqRaj`*M23{b(!cuL@p#=2XTov_KxZD7n{+V{Oza~Mf4LwM9l2k zs`P8|q~kdT65*(rhx(iHN5>JZv+YAyi|@O&zoSvQRTCYll?kZu(}t-)mYD^n@63vS zwxcXtDCtP@8`G{NUHpWI6G9Fa1HJbSWgI58`;DR`wqQ~m zt_5D%qV0l&=Ud2_2C^{TaJ<5cJNQ{Gtm$5|^yKR+_~vzEPVR zj4E3!v2Pb%-`}vb>~=M=>G#@mYL%xq@+H5h-UQTYRd&-XHH9@d0lced-Kgg-yKC)!juIG3OdIz@?HNeNCHREL5xx;Qxx@#j-eyy=>>Y_lVrA zgE=#L?sls4hp2~bw%cg!4M+xVud>{KdSXsoc2OW-F2N5t;?B?fIiu z?N^@e3$@y~pCHAT{W5pScK8O~LJ)5iB!MhfSIK4->&-KVHr-l9p-ZEu#yyAkq5oRdD9( zrUa@3hd)7)A&fct8Y6I|XL4yXm>{(J-kT9Z=o=TeI*QZD(L9Q~xP(3Ic<&qW?%w#A zq2yP|u}0=vi+Q~bnj0QthYdSzqW3+%Sg6b6-Wr(aaWlO~PW&_K07Nfi-bbPM>h6I9 zYX>?F&VSmQdg=VNygVQ{IIP-IROw!RU~fyM-D$R_m?>ZEqyF&YuSyS}GEDqU#K0&C zb;72Mq;YA18A1^QB1oLnQf~K6T=CG;zyF+tX?yD}4J4StL z1V-UX*%2H^?#b@qVl<%7d9 zM7X-p9Altwb2??NK9|t8X$4|iFV8N#>^pl*hke-lXs=lI`;-PRf&3e_rh3Uf^Fd+} z+`!W1lCpYpP9eWJDYTd_6|`Gy>b@@byj2+fM<|6P$D%a^jO7OmBUo7(cV8aelFrO!ksg#FI?&()iObmJ$DM_>3wca z^d$EcEgx6zG^rdKdbn9kbcgye0@v|&H3>F(n8j_a;$iquve%4V9>qV%Lp91J?>Y$e zrHCaqa2E<>9Mat5`!U9!&;dQ+Jn1BOe@TwhJuo@?oqZ`JXP5r7yAJeOOi&oOZ5$lcYP9#6ot#Tq-OznLAwwUyXFs8)x&>(t zP?PQi>JxfBp>M9!o{&E`ko1@pKJc(|F)s{-I5}<}clzpHi){XhlMdRYq^}C`ZkzVm z6Xj1woyT$yM(UWNX7Z%Fo;=>xN((nD@XFD!)8y;#yJ zDved5@^JbOpf|czBm=~ZsG>B5*5cx>Js$%~M75L8;)rHC7fsMtXacBeZt5G`tju*8E{I$!KSAugO9{C+@=6I*Aqa@Qv#3P>34s zTkx?Kwb`!&dslq^-)4JZh7GU|YE#jN!%ybxXrPLS27HisjgfJ9L6NzsE+0vic;$(R z&7EQ&MK-50=Qo4ewc2iw#9P7!+Ht5G&4?F+F(b2xmeVMBF_3v~NBH0#j;3GEnw6d# zyLY(%opY4D5x^^TG$lI^B3D9$@;ir*&YBUHHhmaob0bXE)GuZjV{x5cpBT8l!ART) zu3)~T|9JCa+O3w7n^2JTg@*djG+|td&n4$n3afu-BDE&^mHC;M4K6hd5e#(|DOKm0 zevHdtcLXNCn|r>i{Zot)W_GDTCGu~Q#ZY67n?!x_VgiS`qKuwueVnFna`rXaTqt`AhZGZCo!omP$ zajJXRXPha%y0>gBIpphPck%sz`Aj+3JA5K#D_QwYHv7WQ7?+3$FS_Bf;n_~D7-KUG}kak@Z+{qA>MmQznziWt=60dW6ANz9B$ zdGEK0N+a@s55TK*!}$+V0Pv?VQB{AUq|~kL;MGC<2K{6- zzUG+Ri~lLb0?4Boj-Obm&AO><E4vLyhXl?OH-!0zr-BZ6xbbZ zRR*udrjbT37-G!L_~qG5<8_OREQ{fVys0b2KJUzJ1Uv-Jys@4no@>I$v+g zU=9{L%ch=WYCPVd&uL%|kGiU+X245%(v*rluox{qelC(pxL(RM&Bv%vP`e7#c6HRh zw<3eL2Y!bq4M+57#^}TOWl5&tx)04yI>Adh(v)00v@rT?{IYn{P`!wAcrVpP!R_go z2Ki#Ye)-eS$On5h(nkdKIF-`*Jp|BitnoxIADY8WcmoX+O3~d2w;Hwi?LqXp#MZsB zhj>qkmpfV)Rz|GYH;3&1QfD<%cML3z&-OQNrORBuG(Bxm_Q<#lw0KV6>z#b`box^5 z&kg1z`PcI3@xR~y^@abj@mF5Ke{7SWsGZ|XJp)!_tnrjbNmeYfQyA^ zs;4F&uT+j_wwBohIRTq$Q|zRV5%l1FL()ms6>u^wf=9qoVbHU~#vc1BKpvV0NJ*2! z^SJ1%!uGqXKiV|MA$d5+t=M7oTc&KN_>{Rmk|#cWKtb<92Bzu-`JD^xLKXCC=CI92 zK7r4$bT^2eoPWCQH-WoVHY!-3Q*17W$Zfrt#4^1DhUpARz3VBM+II5C5!%H$>a{0L zrwwfmCZf}0R}bzUw%tYa?WMV0gm>6rZdB+UIs5A{mN{C2&m;4wlHK}(`lEUJqq)zk zuPuH0@ZoQ`i2n-+*?%06e|#z%Vz#oeL0Iz+VQ`fXGi<%>OBi_c+~1Fn7xVCpfx`pp zGE5sG8}#nkdTzp{<+{;PNc!a)DXWL$(jKMBVK^?QAZT9mHi-v5yOj4}j!Wxfw6VY( zjLB>ww|~II-PU8%NLwXdY{vxJ9581)6|0*ge{uv~%9X~8b!)&J9d&(}nhsB_GE3DJ z!D}RtwL@1EH`a8SAsfG)Rc0#3~C465)kUPGk7d32pf8MsX*J=iDBhv=BRvJj&S{WBOQo7X^9aHP@@L zb`M{)+!OPCMZs-dG$OXu{G5bpqH3PxkaER@b8=8P_jGc#XJl=$bRSa921a{_ZsE%1 zFP^d&i)i4k_RJ+whpKFm+Z2crM2T*sap|sJm}$0_*4j>Fd5#Bm%v{X2@OTfYC)1dH z+J{RdMop8Q2WMKMZEypbKuvD!D1;fxlRh_bH@o1+s;F}-^Zrw8#}OER=mB2hOBdOd za9&Rvju3&!muShBLYC9&YQ-Ph-1q3>y6cDPqI+CPq74i)F!uE^;y8Sc{k>$j!mGhAjkidIg7u z5;ai5nuMX1sFt=()jU?`{i}@o55B3S#H-UbIXBb_-?3BdFKiMv7~}N1q~aN4S$gz0 z_3vxZ4ysz~Nt2B6#kz%(fw?HtY2(3-DC+B7w~m{5uQ3KT&sv$d45}^ksC)D%ws8m6 zAKI*wIdthcG0HpUy%=hbpSs)o@sZc*C^i~fYwRAK+JL3$mr|Pi3hoY6+zrJ6dcb$i z2_Y^ALTB?hxV{4L#Njb*g+8FUc_v_3~UUlpBdW+e`S^fpJf!K$+%J)=C zjlO`s_1^~G&mDtEqc_aU3vhwqT2>wfs9~#6g9-0@4`hzYFp?I!RzR{uXEn%#*{mPi zSlKkGVJy=DzkhSmVzMniKUr%n;Fh50K(Vix>>Z^8$4EG(_yY;n&Z&=%K63ikqwCjC zR_9-MnpM7bbIX35cfP;$H&K$jd%N{eeEif*$2;a~3T$)?y!-_OHrqK*w|}_`A;^qE zxXo5?=T&ff^Cjca#EbE{Ht4fedZHRF$!!8Lnj21jUd3^TCQfu~nW_oID?xLBhXIwD zcT5)lgu=(`(%K}hERxLRwukD88+%Fi!x_siq40nP_!Ud2be~N=RN%@yx9&2 zmUh(um#n=h;W~HGEo5^N1~?vcK@Ou z8lt=szbKyyAL5komUe@1W_5rTtoJD9WWJU{&S_|ID6v0Po7PxrgYz&=8JQ_u4FH4o}Oi(DCf z5NPi2LVooP=U{3elvnwk>RmID0yWr`Sx`as3W#lk>5mzv3t%sfwh!U-?`b4EPWAg9 zAyOchGW;JM74L4r@v4pDeQ}Xj&^31G+m7vR<(h>ZgXnjo77%he)_r;pXL%J3G64$G4#Y)^fF#WJ(9`Q@$ES+)gUyeKQ&JS-J+MVM6uX3QPRy=cQi@(mWSVwv z7!b9G>;zaaDibMj>o)lT}1)_|Btyf9MeCVV>hN}{u{-ZsO?cE0X??#j2|<4t%Q z^ev%nOYgW;VDkd&9~ECeFl=!uE3@$H0}WzWapFD2#rum0Ha0~*sn0uKd1e(GAYR$G zt}oyB{6@0T`JmdV&Y*=pRvL+u<*u!bIdJ5Nuu5$$3G6t6{3F->-$LHOlkXs!5@^8w z+H(YoFyN>7s@~S@v84qAhKnt1*sU!E*#VRKXJR1i@@F>uFJ}h$4yJVf7iBT6)|7_OE zW>dYI@${Aj-ETc`gIe&HA;>Hg(u2IyorGc9E-W$bpo~gi-RRjzSD(xu*$h*<{^ksK z1ZD6E!r{^`->k`NP0y^;z82p#o}0B9w{Y}8U)L|i=wj{-p-VNo?G0~zNb-#2wK(;m z833+yzJBP`jo%9)7RYfke-pw{o%*D;@fC&x`2V*wYeVd7tBko-hB3i*oYX1QHqrZN zeVuTL?x!Jg(PK{l1(|p8-7uGV;mZQkEE)&hy=u04lGC*qUmpx5V|n zR@4ovilzMyOM7EE2SS#Y?MWME0%y#v%ZT1QG{CIX{JrFWc8_oZ^mjR00n+iYHTCgKmrth^`)^F|(1w!fyVN zPySPR@4WN={d|T{{*Up+d;U3d8zFZu*w$q)I3Ibl zn``QfXSDISi}L<$$h;!M6-pqT*M#D09=!86?ysL9`3j@NA?aJ_71o{JFz*Th1y|MzA@N}_z|)mwSO@^HmnbBK zi$(sk4f5NIIU)pNY0%fb3YzRLUgXLbQjI2$?MIH=<`TK`;#y|ifn;4`j_ z-OM0lNZrzYpt{guCjL@*X%GT&lKs92reeP^t~pF_7t2RA*^rEZzSWe)&g#|4Huc~Q zU&Q8}&M)S7t{w__{pWc5%NDcQ{R%X@w`OA0(cQp`d)t1we6jUW&>6;uSwd{Rn(AVw zP(G;ZZJu0Tpw@eCs?%jwt0&gmI|*ddgqA}Z1h1+{kwS)b9LbF}-Dk@7LbkUnS~~rf zfoW63HYH$4Il|2R`||;81FaDAro#NfpHIP#+W()j_5W?k7Hz5hwAsNZh19R3PMW}< z$Xh>;I^QUHq@9+mkCvAS5S2>2tYCm4qvEKPCWrQ+@6-w<)?m z{FH}LR~(~L9&6tcVCutyWE(&3-XefW7O}G*KSr0CD2d#@{iwV6AvxwsX2aBatDP!b zP*Tp$?$M}eWX;2K?L9LffUmM`pMzL42ioggn}AJdK8Gy1<%WQFRw&a!>wVrE?1a4p zIRjZrD1gyWFdJktSkJo*W+~<+db-cK`2x>CMeCEJnAnc0a!YUg)($Gzakk~6%_&Kx z;+oANKD7gT)|=#m6b~*7Ga3LrgDE(Aw|=LTI>2!`{zkn@U3D-%u#bD?FK3p&Zf=D~ z-y=I076P!t7TdnwaB?8w<(SF9##Kh!vvFa`1EaEOFszAy;Wqf_pg3ph6gz;xQG7wdXIgYIV2xq$ZDMcW&9kMyS#VlD|17zv zGr7O~Y-M1}&sC?}lJWSA@%W@xz&Gd-3ftI7@~bwnj706jy!j&3#=UAjO8f1~ZK&EM{MSYH$A75Gemy-rvJ!71f*+|{n<62-4n;PkTW^j&egOVKL_v!hu>YC_;ERXa`?@Dhb7WIOK+kd(N znex^&fzpm%O8wqg3?xy_YhA|T*?Pdoy{A)dKX{r5e|VCjVqoF`qrGU^v-%Jdy&m1Mhb z!NbPsYK+B>O-5T>CS{y%|BbO+@pB|9{gl{85jsIRlhDuj5^{X46S}^>seXfgs89K7 z*6H_Q4`>dC1|DIhw_lh&hO0y7oq`|S<7^Fe&%(xh@Hnn1DI>K#v3>_>ClX z3;IXd3uv?15qb}iQoMZ{y{7%+$8D=EGz$6gm%h8)j^?K$rHf}QHa%D z3NRg$kN7gA@)gp;9xs!e1)rcc3iq%|Q=p-o*zL$ywB6AVWYbF49+?)L7o9`<>TTrg ztRneqwtR@}VwXBGUl_mfVs+4De7v)X;G;(6UOTw}&8OO%Atthh1rIHeIpgwWU_tb? zbJ`R6-NORhf!c1rA(N}Eo5T)5Oi%@4<^A06r%B%)Lg(K#`HdUWgx^DDhH)-FqelX& z_~NrT05>D7*2^nJlJsbFP(zG`+8ZBYm{z1#nhV*2S2<_P^n>OpXerMJ_r*P}aWI7XH=#nqANT_EbPha|vpMCISU2S{>08>6NzB7ROfzTI-3F`YEQeVE* zabzjne#gxvT+fqcwCtN7wLkIn|M94lsg0cv5a>Trkzl0Li2;(R~!9jobl;$q4sx(ME7il`eAD=DbpT zfY!TjhD*Gi!(|7cK0zWFog3!8k%rZ5o}NquZa-(GExP5)($?t zTa`rJi>wg7V*__3##!Bs*b(T+!i6VdLn9MCu{cem&#cz_D7j&n7)O2#QW1YlHWf>` zqGf`|)U_Hpso(OyOc%14if`4&%A2_$NRU+Vv}CnoEj40QM-En=po9;b3RAA*mDfH< zf0-2Zk7(ql9d*fkV_=4nqEPUXnI*gr6$QSzU%=&x_!!z?Dk$A}19UM(zpx|2;--hI z$d!l~pd2K}1Hy$l1Rphit;R zFBQABg3mQ^4h)*&9d=3ML>@Bqtw`sg@g6Q2ti3m-nnj`zd@-Q`)`$l;E%lqzG;}IR z5>(?N?1=>Sn->kssH+M>6C0c#Zwvd$oW4rqicj7Sl<_iO>FiZ|5uCRIIivmWyUaaq zd1Die=&|uTXrpM^1Wfb@A7*+l@b$VEPVoX+dx8B}$^ARMA^C0}H!gR!)e`7JBXsrI zwOQ=_Y&vJ(VqSl1$nXC!{ij^zKJ0sRq+_f&15Fk# z&~QW1XxDDXMC95xtOmYc-=`iA01qusbDS&Xr|rm5l4>v>;mWiMb%F5{>hf--0~M{{D-md--}BB`0SVW5TNU~ zMDCz~gxazjGJ#&eXDA=U>$WV+l(%zjMt_)D8S_;g^Ic-(t>nD+U#KYs#iRe3G08ax zRK7VtF~S6UZqh^UElf@Wl6uG&`&B^ks?>V;VpKKcq~i_?r2Sca8#dST-t?>Yw0C7; zY|q_PH3b$3LtDqP2j`zz)YCZ6;&x&pULnG9D^bQ_N2s~nwsH1OirouxI*uI~pjdG7 z*L~>Aua8ec8vp574y&SJoKaCg$Bz zyZH4fH0Rr9`(Pe#%iJ2sXG9cl^*jWh^n69*`B0q=Yz$PlH$Fba{opvnOlMoCD(!}- zXI4k=mjmWkOP5}4ItAZ1v$}mjm%TwtgDZid4w7^UAu|SR;8ZAMFJ!+K3dZFYPfW?{ zl-JQ1AWQz;{{A;c_1s3^ETe4!0Mhn8uhOl+N46`K->6P`d1<)XG6-B~3CQ`7#;L6ZDz**Q5H2>kMws3p99?J3ZGhNb4G6>wDaLd7b2u@0 zGo(JLrIxP#D$Vxg3L%kkY4fY#q{eBat@18;oTJpsCAJ~wlt8v2d8pSTwuvj20#5KL zt|sRgm&#GO%p$m;rkl0o0E>K1Hjj~qXmN@XIBBo@Ns8lgxT|qF?mV_JZ0LjNNJ$roQ!@!9qU5o;6Jq_oa}zJ&#L>|aU10pW z)BxG8D=0Vvfy}6`*X%&*CDq^Wn_H+WQEwIXe+jdk^uvr4W^-cp=3|fjaN6 z2Y1&9ZE%JXUeAC*uW0aGsyH(^^VFJ1a}n)A z3hcM0)tM=K;S1!QaGC)->wqSj?}%)6Ti><8b^$88N?!+~Z+=FGi!SExAuuE2ayao& zoG3?_-gE$9C+isTL zyyJXMK)=5r;s_+x4y*ClqjW5go-r8mWf39AmrPEH(iaf=(&K;kC+G@Lq?nzPnqX|4 z16deXz-L|a4x3II3k+{8sJL7M8Y;C`RkdO=bPw*L*E`?(ROB882&}`W4>*03YRGJ;{wER#;mhLmfp4`jsY))^P1>AvG}d!UMBj}2 zz{&ubR=6oA_1QB~ThL&46e@5|k{kCTQC~`4R!}#WV&MTN%cd%g{-%p!hl@Rn<7Lvc zMg|GP*ftP~!bO9i6MZle$oQDZRhcu>muU2)!Mc%2Y-W?B8Csasfx9W91tR(C^EQ&Y zYb}}1FJ`l(dV%^+)GfdRnm#)`m8S?QNCOMty9RRK^+(H{J8-`LXLJp2OlCZIb|6sZ zH-KsH@wU$T)(?UeYqyXBo^Kz#`-8{T0XlJ0-+wZ>?Bhm~7^Of)wz#0q4k!S=v*Yz` zldDVJ%uRyD;wP^(@b>sGw=FDJZ)%f>oV$bCc+TVzyVds-XDat5(3B{~M+*!Ne`MQC zoGUzXp}n!liQOuP;o%Bhmy zx1C1Rac+`zKp+8Muzf~+MVww z+$1cvHwIRZ)nEK>=dmj7yP7}4@LPJmeQ8%xVD&ve;j+$eku-sZ z>qUa#Nub-piM|85F2ohbs6C?HBk`{i0Zoh1)_m!oRxbbgu0Oy3pSB{;@;XLrb(VyG zP7lQSUHYqj(+h9CcJ10#oOBl6#6(ZhM=DWF`GvP!$r;55PL-!bJDhjUuq>;N+hmV- z^qEh`lwZPADc*Pg%i#vQ_iPDIV0uD7r9_MOYS@PtgRMGM#!Rm8u#G>zV(?zA8FQmr zgP0@|d1#t6UjV-mF6>MGc(MJPyn;AB%0@&s@z_2CPS1oamognxRFMITY~o8^gOgFH z-x?4dA5rFPk}{|h#U)blHxbDcxkP=5m}UuaEDGw9CnCd#fyP1b4sCZD(n3pSbYf5Q zrb|dVlKt_jP&++AE@hzfI*V*N@n z(=O7}*+V)Am4sSy-G-ZLzEj!dFm*Vh;_;rS4&|3OI>r`ip3PiVxzX{uBaUCny|SqF zf35ye|ML$!g@18qfNtyGU+ljfBPArCrRzlemR@gRee(=?ddPRSt+Q`B>*OrzNdYSL zdp{>7Xez3>MsBp?L^&}4EAB!%-jC!+zosdTsje)8XN%z31hzY!k{~yH#`w?#jCsN%!h?zfZ2KJsK78N>!eLohG>r~$@P8Dbydw|LUTiSEr9E%=tmPxlJK z!T~4cA~3fEsfI1qFHrc?NpIp0Ig|yelXT zGmij$rOmz>!qpY~^ohJOu#A1a^r4oi&8w|`a`r&v(4P;Fm{=$#(F^dQ6u)@a{8QnF znH=-ai{<~0Dso84IZtK6rZ$Q{aTS6~(;T6RSUWU}L!2B5NDONrph zv8I0Q6qA%w($8vi=LjFfOHMSbbvb9o-4Xb=H+zFi9_WAZ? z{f^z?1k>D>6Bd1Ko0j{tC{|~rd}dA!bXZe#Wch>!E6f81hv_A1Ntwfix$x&SP7jLe zaEF2LLgFiPXU@fm+L3i4LWm<-t1th=!jBc1rQ4XmK+rjJ zOLMwmtG)FBly3kZp2?fN3+BfV$aY&n!CDC9U~}iaM#!F_xrk*>PiNJSAt|*( z8I>ya;`q+6g37Q5ULqSt^4++R1`Yfz5z{fgugQ&@6g?z7yg!d*MA21{KP3UrKg1Yl zM1&4Y0U8kiuVT$*2NBm{ch$|N?#5-3oMee!$MB~sbRWsv+NaJI}ml!NP@OM1c2Hi5Vb2GkdK_SL7xI z0vqz8mRX8GLY~Bvz%_(OFGU}hNsZA`DmRl7@abYYQmFP ziX>$fdXKWYSK;&+12Tl?eC^h+ooPv&z3zRIqgzbt z)lRurbDOkYCM=|2UWXPmT@BC3C zn8|W=_9%J(i>efk`~`SCXM07raZa{;TC1^42@J$v9msA zk0vrXhKNHlQ{Nc^P;0JBzY|W+s-F|lM)2Wch~e_Wd#JFcL($n@?#sz_J0+<6(d`D(*_Ls4_py8i8!VZ~FU=WocJ@v~vo6dtk}y}>93T^QNqW<#-4a5e)m7*!Xc%?95l z1dV_iL2B8YVi=QW!_FV4G3I=bE)G||>?aB5Vms7T}WTo=*@)23L-WS1Px% zt#F&QJ%1i8OaCBqZ0uumrbo){-0nGHXfhF}*%1C7y=Kkj{{);S9O-@c-6uS{Z&K9Vt|a6;vIp_xHzMtIZP$)zA|tK^GAYbuV%Rf#r0g zQkUztO-?z5yOxD!Em^+i*rVT-t$`L(zV{}*Eb3G*L*`h5$f~l>gQQCK!nboXL+_r z7_SJQw5S23$acL_MF)y%!i1z&NyJJrGYObMBzL9ynHaOYa&J)Sq#>E!0}bUqiaGE9pUeE2BMYmMrEQOi!6 zEXa+^*iobx{(Hi2*8OYrkotUParM`tu@%GgPrvdX$7Tz*I!|oWf`RtzMH2ETG2c!i{*ELNFDCv=`)aMDua-`=ojA}_~B)- zs$PFg&=6=&b_7FjtkBeI2Ae{{e|V^Cul~r-env5&9vsZ?yc}J;G4cX-;hCX!kKiJ* z#eZ&(UR%5OrG46ja%5VADFWYAX0kI$EU`VMeUxpaf;u%gErFg~@k$cO(d=JV1 zaKGBNFRUROE00Y^^Irp1SxTi{E}lC4I6~S`bEhs+F$^XfqZO)2684%f@e|cfF<`5q zzIzrT6PL6&-UEZ6SrM!|=TuluH80jTGV*5`$Fj$&#bkq zeZg3%XY}QsXWa4zk#=iKs|+E|Cmeaz5-{&PSPi)pqY$%AXa7CC>M3zHSpK(-Q;!}* zE>ZOG@Ra2N1g@|_dr_L!RP^l3Z+NQ;-AIJ_O>!J>>R$4BHgvHeNOFdgIZ}_2ud`_p zbvglpU!TOK^uwA2ADX67sc z8p#MsMF|JEP)~3;lX<$eCj2{u2mPY#Tw?MKDBw72(j@90Cuu3~ zOQl5VUa2y7CdYB4ibL(@4IFvUkxh~vYC3ruh>1ZRxZwq?g8 zyAZcBwYRF4KnT8;aejF}kdhwA25x=Y*nB`m8;94{wEO3j`{owXV#f~GPoFjhA*sA= zY!lnedkQLu?m1~ub zU^M!p?jU!l&T>&m)*66W$7KwSw_c&wu)W2HlSP{fMY)G>Ab2|vy1kTh{mJjfNFU!L z3iD9Kjwf^>QM-;~`&q3YbG_&ha}&i`zfr;!&&$QwHJ@4mo6EXh%P()^HVly_4avaE*MkB*iK^^M%OFHQLZ?c>0CsfWWA@a>?=I>1ear&v7k>?H=Ay zh)+!_bT2(&KFYL8nHvE*TbplFr9-ina88>?dKO;r$l@j3%nx9-Isi+BpD8Ko9D`zW$`RI2p`LA}Utf@6olk)l$)bQ9 z|MER-iu8`b8jke0u~lVjy&7tPCib9L$T%>a5M)Ai*slz{30#!&W0NE0*C4- zWRMS8#`NUq#}^%O?(cYDJlS@;*0}MvWuTimf=#VG3F>Fk|PF-V*ytT zV73Qd0*x&yOZ7(ns=5T5vcg+JE4>_apqZCOGoTf1AlX_6G(_Ay$PHyNDIH`9h2{`ffj`x*dGx?LZ~w*J)ZO{p>b<`&OyW?`uLGv7xDo_3=-m24`vVXJ^ZoE-=fEJ$fo~eNi)Ab2(IW! zv#!)@rj5=A$nI+s@NP*43cE(?2cWQHZjq_)#3gQPYTCs7S{Eo;FH<>uPiAS7jQ- z1f;r@B{=lwAFzixZM>KAGq`h;@NJo~?0UH~Xg!c(Qcr)& znCjG&c-xV3%aL4UuIw)Ve1p?ahw~{!H}{RgXitqjm%d@R%-)=*=m)Zo6SLFw4zZuy zndMq@wWRxzPf!2FvbX2|Zhrp#lGTB<)=|CivzUfU!Q;a5Wld%e}w~c!6R+~7m@v1Fk`d-^umDJ=i-!E#zV&Xkv~)+ zJCPFIu4_?0=Zv40>-(OquiiO2-m>ne^u4UC?DM7AgSFR&MXjlY3aLh)eh=qN*1X&C zhU9%04+|2AoFqzjB4KY{7hUm2kDH5`7b2Lj%2lA&wx32VP&lm`!6Kt3ln>+fT}G^ z<%vj;TT;r%hFw0#Aarpx+|OZ@9gV~z)k=5mgISepr8dFOILREkor5o)uogStuX2?( zdky_VDTkmCahR)py#4%RqU`?mGmo{Nv%)_~ab=z|7O1*%p1bBs?g#X@*J6BmqZ&X{ zXv6lS{oDhzd<}wGCiWh){tG*&;H77h*T)=WgQj0!ZdAANT~ zY$uCcPIkJHr|82J*(op0x@6F{cj1zY;mQ1dw&B}KP#(gWPcAvLg^_=<@uSMUR6?q$spn{lMCQ>s*Korz@|=Zc_gNZk{X1__-5F zJu9CNZ+1s{KfG#G)KI{uqShDJ(soCaIEI2d#0&59@qax1Iz2R=SpAWj8fce;f!k7ze*Sg9T*#*mRmrll z>KjGB#{AEb|LYN;#h5g^0gwc+_p4MSpxGr?99vw#bM2p9u@@{`?*-T2UsmeX2!@v? z8GC1exTEjGDeq3kd&cDzz$>2X3#j|bz2m$co`XkF*uae4RjOq-ibqlQvE{L8yZ5@j zG!4Bt*N?VYB4Hy#uZ*+LOJc(sBKBPQI&~^L4_8neD#LC56=-%P8pCxs-^`sujON zvD+k4^MlTjQHm}SzHR37k-Enu@!cX1M@PPxJ2Y+@zEZY4nA?jkH9<+^#k*ilVfgg_ zhrKtChq7 zjZ#^YedhU&uB+?1ulu@xuh;L7=lSb7oiB6Fpk_H|&f`3e&*%L~23)#rtA4LKCnsB# zRX_Q$N8i4E7UJikOr9xr&rX(4J55P+D|j_X2wa)K&{=43_EZIa(w(;O&1z1ox&ihG zHAGSl5ywcIsS|^OidKkJV>vq0GhzC0ZHF*>*`e+?Wfq)2=HEK(3L7L})XbUchM+dQ zXoWu>x=b?|SUY8tuPoUW=}vu4P$rx~G!w}xnq3n2AfO~5!zI@x!*ap$v$lNQli-88 zj#Hu$vku2a_Q^1@=X)MeJ9{IS)BWHw_N6UzR@rQp)&@~*&_Lq)xYQ~g#fu5ESakl&sX)fykm)ibFtG9hbPjo7%P(wZ^^u&Rc6@< zaynUa_V8$vB^HYagK{avXm1ssNCgGX2M<<<3QD7m1n-RXLvT zPPP}2laqau%6*1Hj5QQAqp0YFn7S$*H9~=;|5pH(Im6c%Ogt*Lc`iBpVV(rNCcQuD zDwJdVa~vh{>VMfQ!&q=0e0&FZNfQA9v}H76K@@fhJw zxO=WjDK$lu@M_w7eLbixMKdjIPQG$tU*0{J_6eyWtTO}2iQ_vd2<;<`5+Ezx$$MAuE6Qoy2*h*Bac zaAA$4^ntuU15Z#3VU9R)2-^Q#Tk3(O+Wk)YkGYz3cINC)ti=aSW1}6G2RrnR$=_HW z?75Y#+cJqgFqcU1fg&RVT$A``AVJy>15W=w^h@@F!#}Fro5j{s@3bfO1g~;J7_YWm zfgA~JbkoAh4!63 zWXZdf+63-Q@}T$PKo9}S=DlDsbHTUOd1)(T=BsN?d2=xiV6v+utL4; zl~DIoEjzqL2kQ%adixcG^jRuc-8FU!}Ae zA{1s2q9iiq4l|6`>wY4538uvKvCF)gImQ|u?I5TFlfcrK zVf3O@Su^t3(l9yx;fo(p9#e(@kJ5UjGeDA4fKGP%}73j12rh?6pv06bP|2`1C$M>72fp?#p^EX%`jT4 zI~3~W#1{7@o0v**HsTd#c&8XuXu@>7GsU^GIM2lihNXxtEIBD`rqC!y@Y}P>V3@4m z6i9wFr520JJV-H!29~6B^BM6|v$A$FnJpcg*txgsx`iW?=eC2c;(D`NHdsCfc@9ge z+0hkjC(h%}FVtVGVeQXpc~5aQMkM-;+i#OKzxu8%a(5X00CQe0<<*UbQjxZfbOfN& z;j^9HzR!VWh{BfW=go|E9RIYk<`7GC0!iShz#FT2WG-VLWKWk*Q9Oe783zaweMh~n zXw9~zOv}290(P1UeUe~66|3&{b2#C$vAKD6n)09T&c9!Ro;Kh~{7L|KygPGj{UoW$ ztZ8xTYQpJ9h6)Qp3R=#6GiF5Ktg|);zWP2v zmTN6n@X-D%m!HAkPzjpVpnnz=5t7*}^e@=8=8Y)mi8&u<*xwZ?_`X&UO8K=bm*Ly3 z4?7>Zq@;^dnTzcMqCiI1&>MmWk7P*k2Us$PO%cO(hnJfysCMpt4?Nta1V{zxTS;^y z3a1J;?vL#rooZs%OV)+O=Ic6$oDPq;k>gA29)-N=$2D}1zI6#g|0d;zA(NQ!kqkd-Y_1|9GGz{5ch%a*Z$Fg%+UF~N3Tgoid(RXLa!;%~$hgoxcn-Ji zDHn7g6v@Y#8DT%ept1C^=ARXAVCmp0$-kL%6=o~a0Wgta`r$|Fc8H|uK^rtuBZQmK zg-Os5)qY~)hVx&~*UwA#k3Jo4ln;XRZqvs-puJlgrvVMGFn`p=Q>c@!bVQRQ8X55% z(mX-mdRa(YfEt}mI3a_~NI!Z|bAJf(=9i=1(WWIDkF_pk#Q^-KYk#2T{Kew2iz)lP zWH0Kb7p9eTzk7D{*Ps=Q)FUVp_T*eK{{wplLy}k^8W9brk+w#&ZgqXHFxR!x zHqJyPrfS)KDu>Xj3JycR9;;7dbjX*cOq)8I$!EVdDSREh*#1b@Yy^a4UhZ}g)^|iI zD9FDnFzf8=t1`sCkZ>8PD6A^ou^uw#Ad9U1(NECcPmbLxx?@clM14H`Yb*pNOBD24 z)Bkb6bY`)s{?tyuUvs9vhFO5l_QxNCoK4D{3upl;thPU386Yh}(Z<2Y|Tl=<}T-S%mmP@o} z6>kZw6b~2p)F8u>9&BdG2tOCNdQ(HkLqSAVQzkaeQm<(aqgRhE$Eu#z>N3AjbN(&o zm7D2EMqWp%=L`rHe9U~zV#oF}X~(@iaeaDs zgFL6}GsR=tcElxe)4n+_XQP#%pCMLzkcL+N@E zdV`g^y>e3D(*2y$Z$5bF`)6#8*bOC${fwluMv_^K&RGi@Uo0inP5kkY!G{zDUk4Cb zYvlX8sHl9x+hR7B_A(^y*OP4eNw$fJ&vo+MPs#q=zl6J<1>lXW9GDWs_R#h{6 zuFK73l9w(EsmpytKiVKvBb?^^1SEUKOokF(YJ-F{38j5OT*n}n{9mGj4*I#=YAzLq zZ0wsEu-aTX&gbj9ajOHT1=;xUdCHn=mq~M~pNI|6TP^3qe{@AIt@qLf9oY=NCHfZf z$s*s9sH;i%676vU#;cN#?0ACkoefAWNG1>ftWuQ$qrx?Zpiyw%WPbPLh1!coU_mwtc@__4i_yLHY71_b8Gm_h68Kh#5kkU&l|>(3XD3e0)!+ zs}i{Ctkw52{&5UKC@Ehxnz3Jg^>r9X_a@iukd+eq2j#}IW4FkB{p67!zwZ4n!QYKD zK=Ajm_Y`7#IPtQ!(c7AbU(cR*c{zfhUFAIo`_%VbjUxo+?Z<>UnV-}$fw3x6?PE%C zHPmEt&dO&?k;*xUSmp}#wPcX5Ah2 zTp)mf2^ugMbgBibM9gW8()Q(F3)W?ayV$^p1qYhl+j?{Eh=8Oq0Lcrr=7EkWOinx&eSKe3%@|p1rRC7 zFCF?yx#b;*Z7!Ob)IbShWguN`q314Twp^zQF`+QQrjoSi*>BmD9KlD-^JY9$;>sTd_MX`QSF!xhsNqFHXGkUlpbbIjCI7@5##bsM+}N z_*PfAL${&(UA9=NtXRp=QED2|aC$VX6?TN1{t$nKSCmhR1h#x;QdKZDMa4~Q*;)c{ z$;3O4(LzJ_^HPbtI5Fpz0>NgJ$z;B)8JWrqr8^|O9VOU1mQFq(>)RopU)y<0#yj=B zSxfBn(Qr0${i1kwi}+?2ce-hcd-bh?{mQY|SsX{V^fE~IDcA~sFc|HSEi|y<_gC~8 z`dMG1;LpG`?fhOG5-vxq{O-B>hoMEC4n9^-zSWa@B3DsSW)_)lWmyq!+%Nx0U+5YC z>Jk-|IG69uZ@*a<6t89(6*d0Fi(wn8z0zRkG z?)r6WI~=*btC@JZ^mG%MWiwgv@%QB>BDs8h8`rzJyhZdRFYW^UYU%Sp-%p?IdvE_p zxFX1YPII=zs^UhRqjzjp$y5-EJYEF3*~OC+k>xuq4xv|yk2rtk<=PtWe5~xnb7E$a z+9qu;O?svJ`o4XSl(tV`Q{;N)2ND@1fy=Y9vKsW8m;g2R+ujc&r2%_v!#+%o@(X8E zS}3mPk&%%Pdn3nSAnGIeGJK^z3+XA#m7Qe>g+;*RY7Ny>DXg(fgUiseGv`r9F7vm; zq{e+v2e2?@7-BR5NJFV+c;zc}V!B#jH}$r#oh4d~orbYy!MV6FLeB)|+7Hfas(vS0 zM6*}8E>yJIfzEF+d&INTh)|Cu@6)POEJ6n;iM*>bXP4sCW1`Pai)U|_N#9dxf0GQ7}`YJ zda`qJC9sH_O)^+^5nkZq>oa+dGZ=S5nG|lHyyTYYqmhT9etL20&09W;0|rGgNn(MW zN&F+Uu`I&r;bGkl?RwIE?VYe82od{<#_(Hmtb8g1tvT~3&jO#xm(kqYd1ZUigz zSA-FS`{~t8V5|6eb6Rqg7ViN+&L4;0-&C~_)P44tAM#7<{UHH~=;M-@_EarIs8~Me z3kKJ{%arnyHa9x`4!23Rido{l+1E@?{L!>;;}m#;PAKROzK%oIkGY;TYN{F8Y_$4X zcTXdYGc%Ij#-i5pSoQF=6l24|6L7-u{Z}l~?-g(2PJP-57N7$-F+L*hjqj?(>IL8& z&SabaIDT}Kyv_HYKrz`J)Nq1T@IQC;zg^$6zH~7evph|1Hx6v59mbjK$^a~WG6EA~ zc>^9WUJ9v85Kz51Y!kPZEEb4}30Ku;;F?MBP~)U!iK$3k<~{w5xD(V0kIG267a|n-jz(4LPEI8=pWN!PJNqzFLLkSuaHs6QN?Ldc#yGt|9*>u2PaiD zuK`-c;Z^IE&^znv;bgu;_xC)TXNY?ZD}WK31jI0ksRT5vKvFy9H=ZpnGXAfN`{SdD zd-Sn?je7^WC_odV$f&?S3}jTG1-78JH}gu`V~@=!DuSedmUTnv?$Vl?Ba2^;cSv9n z1Vl9J-=4I8Y*N}>j$;R4fdS-kC1TSTRBI^_m@ZeIHjOWmU5N*2KTme~elXNd9}tvC z4pWSkkwI_njYA|2a$nKFJYe`M8219@{)#DL`J_N$74!PnsEZ*T%38eR znr}x4=MR)7i5J*(BB?gkZs-^4dmR>@7yaOG^(5^=_h|8x>V*6^@{hagA3yOE2n?!$OFyT!TQpp-OH43MW8Vgbbf`H z3i5;Z;*Va_+I(MIB?pj#$OS}bBW{_z*ga3iHSIPA{MJYFzyLt)VZ4Y=ibqlX?X|bs2wdE$-e~=7x5m<20l^^d~_O zJ^zf3p*lAQ58)ts24R~l6wS)@!?UIPPr}fy^8(5F+I;8)*$`2OsWW#7 zl}zz?ba9J-1%q%I{Tn}FkbcSe>yH5yw|%<2MkKy_+M{;#k6=kK1o*WI|4R*r*I)tO zUvjKnoL2l3qs3p+1hH75O_?B>DWGt+=@0MZrn-}8hb`%#ohz*vix*&b) z2mzsUTQo9}#oi?H9SB-K15!eq?56+vg0ve`c(`nsba*t60*%?_8DCC^Thu+tzLK^rPEPw?~^X#zWi+d z^_b{j!bSi&7Dai<6Ng;X1M8P@vBQdT!%{tC#!g~+Fp&UV!K9pk5m~Q_L%7Y9jh1Bx zVq=4gUO!0|HFL61@2gK|MbP{T!%4n}u#p`rwULix*plXi3X8wLZ`9*}pK8x;5P0-p zY0Kg3Jif%UpB=VL^-%9+yAN^q7T#NHWl$CWds^G9?e;87xF*)at>jFW~zyvycF zhkb7lgSY(@i#ogJza@nYF|zcL=W?2L_(@7_ zFJ=;@cj$l-W4BOf$8&VI<2|XVZS(Q9I=uV+D?y&KQuZq-;;!pFE@h!1cl!EeW}B@j zqiN3labLHs`Q|q-#?_eUOgp#Q3DEQE9gc15??|6l^@PYs=Y@=P_4n79++;eUOL1Rx zTpxQ{>6B+1rnhl`4pjccN<2xKI#%rk#dqej=4___!$-6KV~_yqvMex)+^fqn>^qNck$~eO=yb`(&{vE9&2?Je zwJu(C3fzgd*tZ>#dg^;S*0(bJX?kkYED)Fcx%O`+Qf7xF+^-GdDpTM+n8~-w7ucyK z^!GuOjQJpq+R-~OVrNn%R}4Y7YRcyXTM;WESG5lv=`W$iW@k(-A#~gFTtro>3KRo^ zKmuZ5;q5EF+0pWmOxaUOJX434!o^I*r%yTnQIEQw5Xuj2_I_ z)h4e@vpn!ri?ZGtKRw<_N242f+~Ca_aDG5&oH~>2oqp-|$>0p_Vg|LRTHynRFT5-C z9KJ~y-+zrQk2VXt=aYUOZscWBbOg<5i< z3wsb{tC?&y%hqfkEeD%C(hchH-ANiQdS%dqO^?@!RRR5&<@ARB*1~hh{T#{ov{thL zu?s&-L4?B>5aBRfw+*Q)dVe#Vqu$U!fN--6F~hcg>&B`nCy>A4M~6Wn)7yI8mVU+^ z?Zm0$Cz4@j`i;Pa!Ee?t802cif(`(;1Oqx!eG#y6Lk)Gf*`xTl{*y6Q z1Z|Rzk46`D2qbq9+Uzisz>aaab2MA4zCvmSN@V{p^4KIHnJUf{8aW_lg8d=@ml1l6 zX^s44KZIgYSyjSMIji z0sk)|TfDIMcF>bsq*FT=8CmrWJ^&e08Bi_Z(#SE4hyRXt1>jamxql8AL3@!>(fyJc zQQX1+1skzfhW+~_^8fNTC{-aSAGtt2M8F9@1Cz&HbGOrPA+T^P|9?Gazi-$}tsFa` zic{*?)B60FYEpdPh7a+Ew^eKPm+m0n`(L^i#JU6b*$yVG+c(^a4~Y*Y z-WQO5E*U2-ug2DT(my3*W6*u!P)998HSE9(!A=Km`mBj0OQ>)CB$KXlu7HFZ_1Pp1Q<%wV~cwj0*%OV(M3`cV(F)%2uuvo0S(4BV6nmy+oEjND0_!3k{gRP=~a)^=v=)!n9X z(m0MR|Mp9I5rW(_PAHB;O}T?UEPA&kp(_2q064Jlw{_^~6fC z;ssQW!FsX)i3t0MH5=t3?1mcJz8s);P}V7!KgyJ1{`uqS>Q82)UXfMiM)wT=to42u zeZM!JWqOzNUCb($F%iaIK_w6BA`7xKHO0~+&5zOMn}0!gRwz^{&l|~u z`^#rWa*A4R5so-CCod?8ka!iJYLVz~zCyAVRYPI1)lYFn&@S;+UqGX-2 z?m8#3aspjEbMgsW<&!+uq)#UFi5%C5V4*Jvd; z>4pHhtvt<0uFb(Xd4&loDkIy;xgReB8c}ce+e85Z-fmOVbkEMB$zs3cMX&At@BMKL z`hUF8lncPmI`aoVi=(|6q)H8~snaK&+Fn`SShT?L{TmHQ$r>PSrV|su35yL(NQzzr z!}-}osBQFl|Lls_1n8;!TAKfVc-H^>@T^O(+B%cNGt=@C(OQpFE>C=?w>Wa?u(C<< z`9C;X2l7yKa4#s;hN=F&97gg0QiVT7Fzm;`%DsV}mU-@X1iZ{qk7O6PmOI;nWEOkX zq6_DR%M}Wqq1Vbq3~u(jyO$8A9y8u4?_CQR7&!i~bggH;{W#B)q%jEz;FEPJ(gNv| z4ym>p>|9)2h?(K*VaTfNvLKC;s`9zJ)Tv5o#Z;Fq8G%z=mM%fBOjr-)dMPzzvDz zjrx9C$Lr^}Z%`EojE;t`*Ib_{1MW)`iF~-;C9~ax8kUj#3QLEuvr(NdIyHj{Myo<$ z%nEcP9$!7<8pp_|cAAjA=b<@0qe=!Kq3YX6#QxrwR#j`KtVRZ*GBucWmMd$Pg;ETn zUlYBq6|?Ug?Y#v!hJ8iUscE-Cev}b+Cilq5yFvaV*C^x6*Nc%r_Z)UULHcF$+GHeD zTGBp2v<2j0gH)(9xILTO$S$Rw6Xx`ffg|NMFlp5LJ+lN?SeBRA7W4R~#p3uLlYn<> zMXxC#=+qpJ*!Xn%Lfw#2x5sEQ|9`%uzpwECd5_~A28Vnz{HbjcaU18l`n?J2K7{)~ z_RAbz-5_s-XEXA0D;#8)ux0D8uDk}BTBV@nPJxINxEBJ2KX|vX@}Q|>QdV&}G4A^7+Xw8J`KRPCIf#)IC*?p_ zGI4Fy_4I?{w^fgYtK;QvrajY`zjLD>9QxyqHZ20`)oxRN^$xbfnC!Yc>tx+OO`h7j z_n<`NNZbG%_hA0Wb`|P(#PwaJg=t|Nk<_%lMj~&sC?VXStxw_tsET192(^`bE(jiAcbohwSN%fQJ}F43eQ( z-qS$DM6IPx#{)o!1eD>R=3=y`$6^ebJ_Um+>Hau!5TYL zE}d-s=aI28j4H4SP?&vywbm3!OXB?&t69JBFq?CWi{?&;rc4Hi<@$)}!SJZ|nu66~ z&vJ}bncDtnSbPVN2jOj9S&K!(p;~ak&ogu9Q6}XICH1+tCG^-V?gy(w@ZW@Id8p9r z`3y2N``S**m(bWBm*mNIE})Rf)x$hk8Sti0)%JzLLK{^-*|FWVZ%YxR&5iQa!>`Z; z+`q;4X*7?>GugUX!-jfLqP$6Sv_wiR^M>Iu?c$`ZwY7k#f$`g|igNxtQQ2G63Mf2w zt8$V-DUp0Cdgs&TPhE$6_bIlUSH-VX~ItxDnV`G=G*Hf{1>P=6_vVRjB}_YMS0XRht~%wQ+0*d$k&5z8=~=)x4`+ zbyYxLU4TZMEyZqD)Z{$^0-^FOQ|i_TP*wJWAyP-Y%Wf{ldY`cc)1oIB2RMvCj|t`@ z<5J_eT6HBvIK5T)lTt=p`p>^y;|L3SwxpE1mH61Zq?qI(?D$@|RYp3=Oo{_A&T5~b z;;T;*UMj61l-~t(qwRlWrz8arWC}YJ5elmxQxMvBxug!;yL{>G8Ixo@FvSiIlD67= zNiZ6mWr8hLHnN}fuTQC*owz>fJnr-2FXkA58EwD4euM1u72pzJET!(Q9|At7aH$I+ z>>*s_mF-0e8EilK)WB{hfq67=|BnRk54q+~<^0FboGL6^lgZ*r8!iR`9>@lQ&}ia1Uat z3eqc%V-Y;jfIAAehaSfOd6Wbk!XN(IrN6k@v`ap_ya%=b%(%z5uZ-m0&zxsGkhYf? z6C|58h4e}!-y`3eS{qu+uOsg&ZThVSUfD{?A@7p6me*u+u3*dldQ1G*)~~+6R9uUI zH~`rwF1lJj_V?fRp1K=88uMtBpo_@XyGi?#Hw?LU_BEoeaVg!NSIz!)wA)LpaJi@( zgqQ>yT17v4h4=w&?n6xYazohTiyf|+Q54Mr7UyE>xn_v$shEPhfZD-;5=!&)WxF<* z9LA5QL94>~C-~trM)~hsgRS>+EWbbN?ml1V;Y=TnMg#EK`>#f~&bkNotd1Kliq@B& zSuVY@t6Ak+o$2cn=)Yx6#@+t*L1qoU$})Qd~^@dKkDJy z#lq)L_F!h!#n3wr6efAMi^#=2k5iginjFBJ$>|DuX&w3%Sver;1QrWG9~~Tg-5rBA zIbl&Hp|$Ub%ZNc<@=XdA{YbWZTL#FMPS@KjBt(gP2l^Km%oP<6fl{L)AmFG{Q=P-F zilYn2qyogAYaVa`f5Kb;&nDj$oPV@#@C}qWV_^fgA<^Q zKLyS(2y!LBTST7FH)92}W0SCv0uqqpV)PyELXQNlTo!@ihmy3i?SQb3NFVo(_FjFQ zIy90XmZZhd*{UK`EI>Pxmk~!p@Wa%GXURSBcKi0)>^X?Z%VUqDf%5vR?-9@~sxS9@7(+z=}n=_*+um-=g&X^5OqB zw2%E{QH&qy#WMWhuIwq58K&7=zz|88~4?6 zWA#Ed%Br6HX_)+E(}?!8{L93ygm0Rc`SCoux2_7DG2ppwNjP*NJ2eh=@^s^!VAV_3 zsQwm~tpIpR!_nIxyq|uvbg{g&7dZ7W%UJ5cz+J6)VX6Au9{Y-S-;%NH$y&4X;Oldo zsDY4lzL+~A2M^y77o5ZlPoRt3pi;He!u|u2H3j#tu>K=IA(@Z6W9|O7%5>3{E&~h)&(O%XYJ?HA54YA=vHEM}v-3U62aV zQJw{vd#ugxU>;uYc1rTyFQwcw%DFi+{~C2hMOrxTg#{I$c`aeoB30RGm<{&PJz^kW z<+$wpn9Ak*oU@p9?pC%We1D$gA^{a-&5;g$qq4twf0>k(DfJoY+Y@ZTQ!ZFZy68`d z3#{~=tduSZ^?}^r{e?7_KsO}1HAdGc)SW-&aszRWo*R9PHeA|)GoRs%JZJNmpFE<| z&Pheu4cid@O0n|G^L;Y3WnsB0z5K1L{IV}H0hg-}aJf!Dpm4d$)-K(E&~O3tHXXn1 zSn#W?Q?Ou=++8SWm%@cB^&96a0E%jEdL{>2mI^DtNG+t69>Dfw=(<#ZIxIMgiGzwB z*~;Gr16(^ur+V17j(gOuWd>TuUQi{4UUA)cfauZ}%nxIQ(K9Lec5vZ_x`NTI684-* zEFb5eN`41)E*kg&ahk-fEH-s=Kn7kX;@AIdJkB=?{%63xXgzpp-uc|&-4#2S1bZe% z$ClJ!8h~>Prd19HDK*)z`7t{k8%nF>xt~Di-7FKf!1szYwt&^L!gCfb) z-AV%6M873&wds#OpGl=lfvyz5*L-gDkaSy!J#eyhY&DwNi)stHcZhT0pVOtZO)Yy% zue2sr*r8DDta37&n;UCRpk(yy=r|o$-)Mc(8~`hRE5AoF_Hq73dV!hJLBLM{g(O7) z?nXr={Avj#+yL3n|JdVx@02}%-9;Hh zelnLLU9ppi^~107PQtm#^B;5p1)*Q>v`a_4qjWLT*GrG%xuq`MJY8w>I4(=dfgdy{ zoS594E_r(gxOE(G19JjG3GiTp@hn?PczAdi$iJaY^I-rBIN5PRQMRNth0IfLuDU_$sZflHkT5*d<$`mx4u%Th0pU84`58~WHT5US3zE#ADugaj7htAF zmBkFM@piwf!vliVaZswj7%rA+G)NdZL2d)n3;EPrl5ZTK-(duxFd;E46IzuifMv&t zQmBwmeWlb`CdJ8*b<%`soqCZH2HX;o50pOb@(l<1%%dGaTCNONIaV!FgO*0ur_{UD z(Ob9u-QyG3^T>1Mo}845wusMx#qpD_l_Nl$6qKkF>v;p}AZn zhr5C=`k(XP)w?U0Z>q{4(pQ6>eq?hCV^{1T*Sc(kVP0mE+Gqh%pQyR%<+{tpH=97V z#&n*uNy!q_zUGlj%(0*$*JmEi*bDo zY|v{Pl^Dqg)!{z}FTZf+B!`+O$Y+5{eA>@GQ5P^ehpxZRcYO~thv z*?$teE_4nld409AE|7lj*VUOB(YQO8bD4+T2vfnT#AjgjB=u_hNaXw6!28wYm|>l* zox)x@#Bj)fKik$lBot7ll&*mXWJmJ64SV&@^WK}u-1`~bj0Zy3&%J5=APDem6h@mO zHelHMU0+{lUtj-hO?5w`Tf=@@D(al<=6#b38~(xca|kE6p>}WUYRcMayMy!yW!VwA znsR4VTtodZ@~!sU=-Vp1=e!DJGiql;ST0=1`{Be|;K-E zW}Kn9Q0wiC3qVIB1R&IsWqBp{wI3wV_=$MZ0}Nc8owVp>ky?*4Vu**99eL!QjizdW zGu+4ZF&%zF@d6AEc|!3=Y3~~eoD4b6Mv;K=BsP+?hXehe`ag(?!6M-91TlOnB9i7r zC^ivZNYLucLC3`(&8TEP;qu`EID%ivDw%sau~hxc20U=Eqh|^c9$tAc08T%^(~#2# z-td5n#l<}~N`Y@#g^bqNVk@XcjaHz{8V;K|9MvMHZ4UiV^!x#3=Ezk&&!r(uW*E9T z$cUsynAu@rYzJ+kp7J>0d2Wi*^NsvSw4aZ^uGI!Vje_10jq5tcLc0D!W2nGdBWaIw`%O`zeGiTR3oX6v22Bu&A3{62ExxPQlO>xTwuRoBiN zINr6BTCja7UHo(ZmvIDUAHtCk#!s+G$&rflg7DK<(PH@KSM_S&q6vM~kBT{X9xMYB zKmLf~p#Ucn|7oQF z`Zh|d5_BhRDc#A5p7mEO%TxQ#ffIwMQLDper~C3VArb~l`9=}G0m2>v*c}nRBGC5kvq}klCU?K zr(9mS_TTThT(K3q zgq&bsk!4uLN~Qd@R$l78eTGKt#x}_BCG#Z`d4mMO;EX(N91sLrH>H2-LnswAi0(WH zenmy2-p^=+iN23M&X*9)!(tOcQ z^=Z!G&MLsWU}>oTMuUbyy48#l$j(H-tM5a&CyPb1BQQ`kYRJBy<8758Cq-aF>9n~* zQ^A(C>9!OX)2Rx1`hE5r{&v786<3yG>RMZ zbMD{4jdu)fZUuS%L^uDn3xIcz&>P2DN+=}A+S>Lb>ecLyyX=t2R<*=0@=kNZjSU)pjO1+@oxK$l$u8B8gS zl$(WiqctkIzCcYT14d{|+EEW2g8fjN3Sm)MQVmq<3*YTuW+!&)rJzaY0+Lb7A10R- zIciXMo_D{-Xf(4n+tJ%sgiCDNaf_NC7EK7MImUM`r6~**`GW1aP4sw~Ui^~8&A0=q z1T~g>Fs*XNv-B6As6Gb%#pzbPBGkzuxePzc!lO*@~@!1AV3t;UcF%O7BU zeHp{wdVp_KCO`*N-;R_bdU>OKzIN^*&U2gi<||iMos#L!_$rCzPDgyUM`HaCz2I&> zx|F`vhSJ0KqL+aJ9$zNK@9nwzQ|9Mn-hf&MD0E~0D0FlEX77SQDVq9m@BtoQzjZ1q z+m0xr8`S|`v9*R~@O|AUjxQNBrO6*&ZUr_iY&*@ZZ>_bGvC~TO!29~wPVj3Byh{MW zflMB!=-KD->ej5u4EsRR1Nc1l+t_)yT|}mU!K}x&WS)|@l>+?($ca&-N+j|}+}ECI ztkpIxtlbwrtMLTjw_;9N5_})&LjZs4T#nc_XD_ML&%9*^i(tYxt9K(pcZ58NBI&ph+5$AFE_pZxOdclRlTRHnD`xuPYBDWnf?5n>e6;2~`#5## zk>ubr-J$5VBNEPC`JntQc%3=&`EBn7aGekWt^qRV5@OY!gkIQ0TIoFffs51_~s>+%(_~p#5nQRNGkpy z`ksyer?`+9zQaIB6FxxD|7Js)8+b+=n~QaUhZDp*v!ypO=u0M6y?cAjN`|jhJp?If zs`O#!jn5nP=sf8{r&8*YzeiANEs*;+C#cvG)rvbYDWUo8*DwTkxY41ED;2Eveaj3& zY2h>=r;Bz1)0UX{H7Q3b<2cks7;39{yc`xciMV!I@LJ}f1m~RIJHp&kvKnk}Z0Kz& z3(h4WV{Mrp8+v;M+^!TP;mfru| zt0+lfK&(*P8)KHG@rLGzBqZH++I37imrX|4sD|NuyMVI8eN}-2XS_po4&&wP-i5!r zdYDsNL?;2os%0hURic7zj!){h(?DWcul6H39}h}}u&E!pb5b73K^rGUusnKiQ{U%N z0-MqgqRAI&?dqETAJxKNTWtV70#vAg;S{7K+&GV;0K!bygA%Sck^0B2#+9Zg*ICF- z>%^^8MK;BksXoA(l_RW8EO zWn7?Duwuwhz<6wO-N27MPj0otPnFX;parOXf7BE*LD4cuu@p{ig$!hTGohF_R`4KH z(124aHcJBmJ!wK?ne0WC^im7qVK5DiWlDL2Y3>WkLhpmCCX3@!9ndtVPHj6mKwY2) z1%wp-)Deff%7}_(`G*q1eq8#Utug8c;3`2V-q8dVsaDLFPV>gR)?$?iNjYceaK zN^Gp@45|nAp!Sg$$&Evm+3pFG-*Sf*a$?0wqU|iNwT-1^-7i=e)wEkKiEpzlE~y?r zTQzq5VPv1~T;1q*tj9THV`C}(=RKztKc!4h)&%bMp!Tenpn*v}j`QeR&H#0VxuPT; zHr258Kr=Z^kK38Fglmy_5B5rXUIQ~nqLD|4U-oa=8@ra*U2r~DM*$|Eg;PMuUxR) zsbAqTH`!)TdjYwvL+DdiMZyqvsi}j>sj3Dq675F%$}gNhS#Hc8L;C|#X!x=<4J*QY zk%QejDKGY9j1}UkjIT%M-OoQ26K~4hy(yP>lQGZP#=F1HKhfXkQPshS2sM>EHu|ql zn7(@R-NL)-Bs7sx^$qcAe-%o9)ft;A-(_c6bJ8qLEk9hHIR?Tm^I7fH+?_+u)-NrN z-EK0x5{NBY6HHXO`^x#p5rqSZD%R$IeeoiElczMJ!A0u-U4M{ENnr6Om^n6)#)EvH zBGy++uk&oo7XNdewU>AeB=zCyIB<9e#2}@WpyQ^ur_WmkZEkyhE#p!!G`>QZysgS} zH8iQyQG9K{{1(JYI>u33u0mL<;zDE87p29g_=nucS}+i4gBw8k-9InEg4UO(+|`a}{lWeaUp5r_)aK17wkF;kWx5b7?IZR5f>fAm-X=M%u85$J&JVDpCwed! zrmjr;{Wk6t1}AZYOx&$oYLX?pu9DZ4!3P!ygfwzop%AnzJ;}IjTtCT6ZfYD?(YWId zh7(`9FG&W(a3SE5h!699bAk=!TzLWyd)a!Ouev!oBPz{Tn9W&2cyGg|bt}}O7U{37 zv`Sjo9ocnf%#h#;5I)QCj3@e32-wqu@wQsg4-ue)|foh)Fp2MNWWtSCQI~lfW>R6w9 z+40JOkjH59F-$<%ria?>dXFKW6RCl9D|*E(s-iwzGi_}uXlUbx-t_t_8r%iN>XfaV zH9S#&4!tpc5LMHrH_&NYH6u;rg>}{?Gvj*kYT>FhB`sGCZD1g-kP9)Pf?{YLz}Xv) z6PNlzK>w0Tsi>0gS>g;RTgdz9W;PqnaIdp8<0i>b-zC-Nly;N=NNcyr`t6teqih)p zo)yv+Ld)D!fwx8ihcmv~B3hk}opj9uCZ1+?rnCcg1| z>h;MHN_Id9XlGLjuD!&72f#f@MYZoeFE3~)^1fPH1G^su#cGeX+3AxZHvzvbSvF_c zwQ0mUNP25{?#Cxd?nZU6JN#n-t;7NH9yV*o@iR(!oGButsq}#=agoH*@uhFgkJQvO zMcN+zJT^=c87BpemsUTTCX%lMrp&H&>4y&=pS74V7*;r36^cAtbgrfVY0V%bATyIE z&{pv+n>X+mEGv6WYbg!k9uIB}!25US1;ALSUbmT$Y zmc6OzU0_O})A&5b#T@_osTeC2?XA4DP;_ReOP{bB%_-lW$&cZ=`GTllfGip-si$yb z=j7WW=d4Z}g<>%PA<5r~m!2;I?<`GmXi`!u8ukl{_23U8mJ&GcR|C$p8NO~9lLl=x z4F(0zM2|Lh3q-U+Z=dh;fpDlJoN3W7zY)Ylp^g$l*_evXk`aU{+`=J3Ir;?QP~2Bj z5yKYe3xmbxDL;xd)V+9pVujGe$v3RUzNZTq&;6W^4vnVj7vyf;FO@ONil}f%Rj%-O zDsg9}ZpF63ufo=|&hrk#3sgd~1&-IH)3(2Ig}&l&W;a{K@rl%I)`I{+PIo>y`VJJjT2xWiX+_X2kYKaWmBkEqK<|bNNK78*s4BFs5L8OuxIQ*} zDs>6RKGRV5uoFKMYRJ#)&3TU5gtlv$k-w3JF|4|)o4<@{U(r2{loMC@0KGTElG_)b!?$}D|&pV_$YI+jY%CHmyCJfv3gaicEfAsZH0NTXKo zbE5}@$@5s%BrUX^{si<&v_+woi-(Cb;TC)9>F(z(IvPwBr^^uTnI6KI4>yDGg2Te) z`_XW{46V091S>7k=f-Zd<#j9ib8OE?1T45YG7`4+HBaFMJfgW-1WMYCDj7~*7C9X4 zS~F8~+ssh_?j0Xr6R2IJpQ8PnM;> zN2_axU@3U2ASXwk)Cs~rRi-B3);+aV7lN)9`nvemx!*)~U z=M&~{zOQ~<^ySS3CVSlvQZJ1Q3Q<0{duNw2`Ir|`DGd9|DKlLF+B(+!;qN?mU^;XP z-0l1YcmL}OFdKqi4hzmrQITr>)h|Mg&)|n>qRVz5NGKaTy=FAoUDw;i|JN)2w=Ig? zjN@HsAW&~_*356s#RI?y`NrF;yJSA{4M$7cLsea==nw2Uap?-T%#sZGr!1L1nck z^-M8*5(}3wqw(Di7f%N+IsVAG56jEs+d-uzzQg2E^7^?;P24|P|}7LN(N1uL6{kYY)Q!;5|TCBl%e69D)I@){{p`)sLqtOD8Q!PxT#i&4umJ%WCQVRp-AS1mxF|JMf<)(r>Dm`X)AtU^s19Hx_ZEYD(&5tgxgL|A0hxmXqKaS$bPtF zoMSTcs+9AomopOl@r}kI!J$am6LI!gDC1<@edZnF9ieunnVZelXYLQ5U3>Pk78GQ6 zJjhtKD_V!#8Zl*XvfWV}V6A^od0QY%{9z=^CS&u{r0os9>!;zH6}?Z~qN%t(`JEvt zDf89$g2|h&$udJYW7d>I9D82$1$Dk+lT1>wj(7*nN4=GNi2fsR$NX%b;H_q&XU}XD9urEjOl~Wyv4`}*45=E87P8my57yC+Lo#b3N(ofOt`Qj& zL;Wbb>oIwv1LfU_RQJkT{HYreWf)|qp+kCry#E^3M24IghJ_-$HKj}*%ue{pPC#)o zKK4mb&%;b=%V9F(G9Bb4w->at8pb;BaeNTpqx14Q1N@DFk_zSK5p&BwyKWVg@#s|B zrCjryGilT;m-&hAj>XX_qR=_JD$HWqF`3uiC5PmD;8O(Ea3y5x!EwP)pCMkyPw245 z&9{9)3J`cND3T{joqTtN2=&HOlTf|nISQ|I{w(e?Y$s894Jg#Z2WpQeW0A5zndG#L0WdQu~Qj z52R!MT$P>B;H;+YrpGXysigCq!z*abGRd@|GQUHKdnfH;ePYA(S6kUXpFmhs_Xj9z z09Do5K0QwYgMu8%bJMuFWv^+wo`n?#fXZ`xG!ADqESMuWB&86>k^ERQg* zA|AZKbRgzkRKT`N21<6a@JA_6(_(r=KF4>eJPAQylo&je{)M+_nUlB!EQz)A6e(^{ zp~bCsr|B2)$r#m0v!!X5dmEZQB5Iu=Jzumx`~l9IKt=0sJYyZX4MJ2fRNCKGrAQ_B zK^;$97c(ylYV}Ad3*C>c+LwBEkbQF3vDj8`aRInt+I;M++A00B!E%vPg$2wkTHHJH z7r7}{qaQ3qgKAD!xRDQ2aT9yf@IArvBEutzeCtE5fS&!q7P zF`3pc0a=lRfhtz+^yY1T=N=8`s&&;oC!GrAXO1i|y^A6mKEzI_XkYP>W{srY531e1 zf$ojDR|!D+_aUKJGnr(nzC3ET<4&`N`hefeET(_{u0z2GV1;iQ*r&L=I!@}ae%YKC-=Q$AUp2q-Y6#zD{){8ns?)a z5*LOrv3!1fX3T;U-i|v`z9;uP*Y|Ul)ia{b86F&eo9jG2f8w9b`u93WngbG7PQ=Zf z{zKD8vYy#DeIE8ADUcAr;P`+a7Cn2vhR-J_Ijm?m!41-qq1%+NDq$nhz8%S4cq1RC z6=jnO(me&h0F)U_tnAAQS#X%+EG{`5>)n%{^)-9;>+QPx!CP`jC$9qS|BYlDquZEos+;OweDqXK_py5gH(Z07H^psJ6_M54)pI@M!|MF_+D7htH8bOC z=3SrCKWAX+=$>7e^Ys0*PqxEne=Qb|oKxQx2FL}!7ycq)15E$_|M|`TQPrlqxfv7@ z>TzaMAJWP-)h5Qrg03|H^3H!u{M>9{KWG4pl<`?0_4SiH{xdzZJ>ka+MVZtC6YA(9 z`7RG&iiJ*l9a9s$^XwZl{a!T9K<^gTFHH@WmW!q~Afzt9nKi9wYK;C=;Qkaue_XZ3 zEq#NKleC|otK>$}O4J9kp;TsczOtqMK}fBdY!DifnjE>RGkk)HL+ujO)a3Prw7YqL z;*KueQbSTNs+)O=_Jk0F*aek!;cguPw)R)vBQBSTRw6%m6q?FpGL=mY_LzoQ#mYZG zsqMt%3qyJbnHdxNB=qmnTHSW;Mr%_aDTYony=l)0@hAnTG&Mwvl#HrG(C~^4`r?pk zaakQSgq%zZg(Lh?ifi+q8fUZ}%(NWJw#X5~`PUNzvJp2p=T`tM z&f)xv;jdfvU7alJY#AVF;Qx6_R{d?i({%T(0P*n5+tInGow-NT=ayBMDwK_1CmXJK zAxkF`Ja*AwRknHQHtocq0P#8ep@(!~p$1a!2K_^=s`5Vaf?~Ia`?5PY^>a06%&}G; zTg}-f5xVjDmSlK>SY!j$sW?&>4vfgmb8!02O5qDLo z-^mz))RZYt3lKimnY$|O6^`XIw%nN@hNNk#LEjNAGVmDGW=Fp8?1R2BjYjg)gFwAMaDK8)=8TQQJ=|2chPpPfwU40V(@43;XSac zvOMRNL4FVu_ufcf`iAqk$DucXM*C3eB8(2X@lhKyY@8&mB4kIe^fzA1E+jN66m`eG zCJO{Y&DLQ8UiojtpL`Bb{7QS1V;c?cOPfw7`N7sekOYxx0UN&ffHjZz`6vp+ni}cL zh{&m)mrhx9cnw1l4?-cP4Fsz8s1);3nh6U9&93RHl7^i)G50Jdax#4Gq?U6fMd&%2 zIM&QD;c!6F*g%OOVF2VNb>@;H25$9jj#(L8;7qP`0#uq%3~tTx<_SNYILQc2=f$Mq zm9(!u*(-ejgF7r~`Xlsp*ZCgb^B*~s_Y*}k;`JxMAn{NvzGl8ta_V~SuJGf4gu6;b z12r@s$GwYJ^^r;<5TKV#s-5>O!4LNK_P$k;FI_4>o^|ic$oP1Rl6?L|erxV zJNS!E`~gDy?RvW9AH+1^ek%BEak+f>Rf2mW=lbOM^9uF0s}H7b=cQ9SqkO-&D}f#i0& z)-9vz0FFFz=EYe!%;P66WWL8!=H#gw?8fN}Ru7}IUWC}~eSbytjTJAW^`WpUaQMuw zcRYPlC7l^6+YHtKw$-`hX-^m>l=)CUcBk9GCcqIt=1}Z5cWC>#ph)z?NVbLD-glFS z4xi}IpltD9&uDNQ=T^b!$CxEQKDEojz{23@xU$~RT;}ARwAR^tvzuaOH^m>MKTx)0 zTllRt^mABV(Fs0O5yb}BvpzBE86%8mV-^SP0{3e%hdw){wrl0gH$-k_|n${|wV4k*GLxrX;r7<;&Ip zSr6h}K9bZ@)I*8yTmPMS#?8hi@ils@9@Jtw!uLWq@!^k)7f$Y*ob_93o2}Xf#+Gvs zcP&HX#GyXx#33Dg(F^W6CcP|PeU)m(K16_U$UQQ$>t0pBLekOxu=>G3;5Veg6d`;E zkThg@?N8jMPtR)`)g3y$9iYeCJGf;!ce*I+W+n9d(*Q+8iCT0wdtm6!e8sEz+{T5X zjE=0QZXI&M+@pV>>GSL=_>B2>xAI##^oHmM>8Dp5UV$zluVQiw!B%bsu6)APjCqfL zLc>&FhX$CwVQ6S-vSO$x;u@ro5FIFuL_uiPM5$jQy`06dz9;9LYR_i6#sLl8ugRhg zI14S|aQ_#r_s{F#KNo)WAeyMwJHD1LkH<~+qvr@J%ac7cH1RC_Pze(c(Xf|c9 za%0{-CbgQR=b^}yQk1eV#(14oKQm)oyOL8#y*z_WeR5g8$8$XF$QmKpkREsx@%D4I zE!72kn1Kexd||j@FU#6{_Y?O`C$f9KY%?q-IGw(sonU0K>Iy_VP+#XbHkRz`%k3Jh zHwh0I8~Xuz66-;IEXWgxFE7`D_kIV~;EDMH+*Z!(%0UL0KjSK#z{DmuX z19dNgs~`FQS^?l*AZe=vZk3=gW_4hBbp^LN)+{;Ki01$C??>Z558of}sB$YKK2leS zVw9rE*$ieBXQpD=CYv(qFg`PCDs)r{d%vHY@1qglqg^`8r>HKUHK8NETR7j^_Ks&m zJ`}A&3nOCK$(*B0lqS%ttZ<*nsT#^I%`XUh_hTMXMw|Goq;Mn%&HkBMA}t(_tVZ z0$a|NjsldH0pHD^$iRn~6eq`gt zRz;i=h9@8Hb8>`u3|(#+ghUc(2w5bWM%M|aPvV3L$@Mk$DU~Xj|2oP2zS} zLt<6PBv=?_W7J_{WA`i3rbgN7+lFr~oAxO-ItYy)yYT_c4rR-;W58BEsTSUM4Pk%F zUN77o>QP48p_GQLy_o7b!*)3fe`$?n<>+Cpqw(ny*YVavSKIB}kDblF^t7ss(P}yoQH(CgO zk|kDA^{Jf&`=danc7W+7{pZZ$J;(d0FF88hmL<#~zP^_FZ_-%tAYR930<*M!}ni5x`}^evg2PmCFJIgv_uP0Nfqk8gMkR=2-?I38J?m_!wdi? z1D>7qK9AI&?esRr;fJ5a*J)5yYcNFQ4mrqq{3xYF9OOUK3+48I}Piu0^p+}^#_+V2V|qvUXAS6)!+w*$+93CjGkaURKG zgfh6ojqSc&7~6hhQu6a+i~mdHj>!tWY08aZAKR%|5UUxd*U4`b@0cmawM~?YyUEAa zy?NpS4-sMyUOV0%5-v{?(0xOz(S>Ow?hy^i1GWY?S@7Q8xVqyGd+xkq?zo<)Hjr`@ z7#SGf0#2ZDbX^;lNMv@bKVaH&i&%cYfLfN-5$GK|fT7}#9oN4C2{4!J*&=Dbk{UeM zo_o&w7)d`P<3N~`|DTu3-xs*S+J4T9U%}eLE-Z-GEMw@D&b#HR?>N0YH8kosZT)3s8dWn-gd2Gr50%ou^YP*g*EiQJ~544-8o2y&?Hz@Vl<4E%w=%qG$(?`nV`#^^UmPTIr%wU&0$tD5TdsY{z2Bj>)Xx!#eD& zmkkYAaNVEDH`uJkP^WAe2X{pESvi+&F`?;vt~HBmq%s#eeHM>4PKArRe_qljx0;&S zh|%p2-$t*iI6a>TZ81$)|vG|i2|E21mLX&|sPf7$wK0|+)#@FDw@ zK9{lLT<`3!1K}l@LBX}k3q$rygPrB`V18xNJK`%dQPGii^2c+E)-f7FaelFS@9hht ziJ=bjX2_pE;#x3gt+Bd3TjjAxzFRPwy{=)P8Ip00twcT%$y$FHSzp)8W2jWu;j zoCaB>idu)H9lo16C9}&%7AI@&Cjnc~(e|OFTZ0MzmVx@+_$9cR-2BkGodNYxR+(X* z?g9y3p6vi;OUHt4$QBqQ{Eyi;aO(ccM}Ua-cWMc+Qvgm2 zfP2d&nf&b^{@qdhS5(HeU62Lk#Jw*wkJPK}3ouH@Go2U3mFW`K%@2vH;0JgDoK3Y0ZXfKXMbB?iAV-x<$tq2| zU1;~w{9p*n;2*VbYI&}H@mmg~clWj296NBu?H|;$uH;B%k_J4RvrSVD~xIFkZJ^laQ~``Xea^Fw7#U+mHIP z>h2yq^S$6<^Kb0_qd%eg{=ABpS2bI6i=5H=`tqDy&A0R4ImaoZ<=_6;S+Jv)E-B*9 zNL(kl+jHEgkvv_hnoXr?9#9fnuUGRCAM9^akF4hGXI9JbN9?w}Ps!wFHskX3QsuTJ z*T%e)?FGARrq8^5@=M95D<}zk4Ld=J38yF=cW`<)md(jc;spDz9%k_4BV*~(P1OPN z(3PZ_Wk1~8i6z5V*{bcmhrFlno_Nv=i>?MC$Q_=*dUt^&J0A)A6j`6`@gsMGt6myg zWK9UABH)VD^~!uoYhnI%I->r_1amd5S z8_)4i<%7JWbk>F-{Zq6b%M;11o=(BWg$PeKR;h`4P|LRRk1Ns;-gP2|f{me)w=Zba zdyOnmHcB_QNG!-dwmBAQ49SdJ6i&j$+#U5Gb$nO@gM{t?(H_TS(XT@C`@EmD%lmlu z@x

oBl#+06eo*ZpjKTSLFUKo2@C24FJFIUzf&h&vRZZQRWErmZKCb0)kuOyjYN|SsLuq zyf>VX9&9IEGp+%EB6u0WwBDVM?((EZI5Og{i4k01ORZsDUuaFdAWeOJ4@I<A{X6I*!fJ zK~LzdG5~#L2i;AG%-1JjGPn$5t7vl>qUsH%5=pEk*!-{@P*p>o+$U(|F;>gg5I`8kjY2cTZALhXigF*;Y6dsO*L{N!%3_y4Uf!|-*d~P#_%3cG` zj-Q{N6|kp^kz#EjQ-q9;{fUCFZ{B<8cyZn7Lgig1QxCkOlTY(r@RTu=+I;iU2AkIv z%P30(RQVLnXwS}L^3QkNOQ6f%U=+!TRAbWM2kEdGm7P(A%9%nR4W5|TAqqvaW<|Gt zSJ?Ub**1yJqfNU}3<#UY=AGokN_bZ$(oAaMO7h&5;KicQ*;(bW(bl#CD?_85=EY1p zH&`$Q<-si0vC@m6EO0A;4~~A0r;C9#d+-9fMz|^f9IqWNvcCJ5VDYJ zGwJx?U}A5n_Tu^crS?C(%YVC;a~%bwZgtOH=LLfP|7CNmT)p7`?P*OV(#LZ54{8+} zToCUaiuSD>@*b>k2rp|1n=7;08~>SUden;ap%R`Kic-ULlN+9-UO3S3{-JIi@#a}^ z*?iJ&OlB)q(-9-V&|A)#!0r=YFDFzSYC}F{iFSIkB`Y|BklZ9{N<#MCe~mr4Uf*!y zNG{?SG&a`?tcnQz!)`38O$|J3_b*q971Ut3}j0vK{vzYPz6S(fVuDm+02I ze9FoX7*SH8))?Ds!YcPY4;^EHn^5n}Y$gh4c7jmVC?_3tsf zOgvpFH74H_;3F0;_oH~>cv>FSI$!Ao!|@yJ;y4P!+M&;fFx^4Qz?>M_{gy=_1fjeb zYP1N4wz7*yUr-DKmXWF{i%af$_AEytTyDdP;ICo76!iUdSk|&7HFXP5$7M>Ly z;{X=??0bhrP7&vem@3IJ!r&Os?JaP&R@4un_FI1aI`Ha#$d~)f%LJdngbl2XCA&f( zNn`yMj8dH+d*U`D@H}jP$u*OoUM_zee)#Mdx6LJ#radbz3Mno+32$^Fxje4%j8V4H zfJ)r%v0kKlyeB#DsuecV3Fg7K|LeC{{r14aFq~6-!Rn&y`Z~TmF8*umn(EFCdV1ylX)Hnj!H#Hu@#g zOisb_R;q6P6YfLzou`#Eya4nxQqLU59!G8+hg#j@ljosT2FeVBn?3IB%60M`2g(wq zeTmWsz7F7sy>l6&0-M65$r;YX@}B7<$4JYRn$m@(OPq7%9Z}EwOplqTt$Swtx%$da zFKmirTzF2Ornj#(^2s9|h81$(B^v2_v5h9Fi8T4u*CfFU<*OIK>No}M8hlMcZha%5 zOAI=BQ0GuQGW116g*CN7s%A-g|Jb<6^YRcYK`B=o}%FA!&;D;@&$&9eLB*;^Vf?}P!EV1Q7=MAl!m*g+Sjsm)rMtB04FF zh44A9Wp|8wmn<>7#>dCM$J8BL0d_I_fG3fe>?ypVxGj1@2qtmNUp!1+lr zDVd;wVLHkGdT#!CJ#=wP=>Vw5pR-ulhsPfm6Z{VA0p19=>Nt6v`jyViPq>~waB+bW zX8-`Ku&-#Jmb{<1W_$nqDQba@M5D>R$9<)R70+Him^;^Xw?Y50{?^@UUirk7qwNhb zsxYrdoVF8M4fX!|8yYHUq_DO-9q=2x{G)!21YXXaVZVOJ`A3Ji=m+)Hr%K+h+GFh% zE_!>$ww+=%UA~pPjV#g#NqxMJ*ciZaJiM5uhwvmO=hAaI6**YEjW~SghefA>U9KN7 zsc$CDqUs61_tRzyZ7oC}y;po1i$fDT&J3m=3zvBV zw1o{TyfSY~eB?zpA>Uo~5iIx!@p|rdP&~!g;DONh_%m^9r7={|h->{i{T?hs-g5`; zeOWK{Btq@HgF46IRq=D3xrFXiuVQ+{Q`H>#7|?)!Y`>KZ#6DG(OUsi$7@a2l5 zPbszRMZW@YKN{zZ`;|~~hj4lt|2%&{zxI*Conp)7bS(VLD^69k6dWf%FR9=Zu6*|C zwJk5Sso<2(&a`j$$ZRdyqA>(Hdi}IBXGl1D@AX}A$Ly<6UH5;)xwO^U%q}YEM!uVJ z`n)vp^7K`u@$-T!V)FrQGVmI8gI{^5&?F-bl~a zZtlk?RbCNksLd0LCCii-MHJKZ9`UZ#!Y0-!ZS`KhnW*F1AoI;j>>k_ZYp)tnzv6KG zP5Iqox>TPouHuTxtlx8zKFXQ0Z9+{2_YhMD*N2ML=;D^j7pE24P-`f!rYbytCkAwJ z?S6XgrD+FmEI0%#GSKmKeWEi837A{g?D8r1foILa8(A2nq$Z|%rx`{Hlo|1GW|um% zmuCBjq0~T>l;CClB}%G3AFqOkv|{jk0284icyP;HSVGRycX&iZ5SPO?Xi8~dKnTtN zo(3WDNUqEjU7P_V`LiMOoh1N+R(dqQqHMWykaA$GeD+P5=;@lCy!~<=-@j(oKTXI~ zt93f_A zi);8hXpyN@6pDX_RtTgY(n=^;umJHsN~*UD?nU2CHV@QQ5|&`l2sbcN3@^G8aFir! zgExW+sTd_dc>`N8f#OY!p-&jVI59v-NgyD!*N8k}zCWywp#p&%VDUNW%7GGzIszU8 zW5|JPO&3I$Flq!3fd}|C)`LT}I6LgOJl~nl-OsfARa9O6Q-!)WB_Tq=35f||r$1iy z$#l(*jEe;bxcQaqag*5oCJr#*?rquHHk|<$J1d?R58pl>)$q?|{@3*`ZYHEBq8g=i zN@r}wxcKu-`PI(2PKnP^3e3!HOb<-_MQG<7-oS1=`HtmCO-T_9`{^-Z?-`69yH+YD z^{UJkvuPudE6#%P+aETUYfa2=WcQMg_+!(Sz|Z9bc-)`Z_2i1y67`I zyvL4Afz(X8k!$Z4yG)NvL~2Qk*7%dDIOhjJ5(28!wrU=30;>iXhIGTZ-py8pf`h!l%- z=?_~q$(&r#oO*ivAj{s@?^AA(63RcUH;}PFzYxArO>7T3YLq(sQYNs8$%?}?^c9np z?Y#nQK798=yVs*1LgksnFQlC>(TB+o_Vra7^YCstgxR3xKasaR(^`S^UQ%^l0lVF4b zB#?=ZXfZ4Pa5m;WBS|ard*4Z8?0z?K7SteG?|cdN$!B=SDE-W3>ZL`5?U#V<$BU!W ztO;bG7lyGRfTyDkhtVPq&q|hDuOD(So6fZX^XR#Ky{q$wPXJ_j3=53aR%fS?|NS(Y z|0ne9(hfyGrPUh6-Z2B0-t>L-^`p-gy%7J@^Qa=lgh9^ZFf1If(G~#N{n%+{#_{4M zhtZa-QDMHFS0%#bCQHP)87@gJg3LlrjPNOI{DjVOUdy9+7T*T2SX(6^&iJ2YLP zBdIihk~AuisoD@@J?9O1EcNAHL4fOx+0L@O0H+(X4ka^t9A^~LKYh9aM%>DZF3%K> zpWiZ+L+Z;REgg94moU{CHnmN4#%;ve`eEK}^T=o?8;K_=Ha2{oo>20AMnfGoEm_Y% zBbw>4UAWa&oO%&KKluRO%uc?c6%@FRcLPKiB7NeTLQu2XE7ieWbra9e@2c0$-umS9 zn@rvG)Hu@WtPcu4{>yy(EH=%X zPM@Q*iL{CwVquQNjTIKxN`PQ5BYx5-st^dAZ zvf(iK8N%67)sxhmYM+%a#iRRnITwAjopcF|omhj?2q3 zffy=@AoC9CR0T%!%wzEAQ@nkXtTX0bGOT;V_zprZUV3uo`YFT)4~P zZ$TZ~KeaW*-EqG>;LWk)X9IWy0!+2_r6OT!5XHAr7d(X2NiTwpRXjb>Lez;fd(@Y@ z*JjswnRykC}?x zaX*Ee&o!!V3lFA=Jq8TUUSQ4Be_6TJW^Y*fFESiXa%kDXJujNcj=yAd|5T`Tvx)o1 zxvvU!*3pK#Z`8#8YCq)ttKy;m6-HxG!>dUb4GMxT?kiASzkBoMb38m;#nb11vf&Pa zE&wnl0$qS29^gOp;>Y64ii(eE)dTjT4qM_~4ltfIo6G;LUH)waUN{HLlwi3?w70$(l?7ej-ISw;(aSQfMgW)S>SC)oz_N5QX{wBkDav5zt z5c_IUeMO}V$la2VxyuEMB?A%`Ffzgun zYMCy3-{yfh2O`pBC!Tow%)2)%JawaMc3j5ZL+TQ31s1wS;$q;lePVV0{B@ zcihv{j~b@{T`rDWdeqCk{VDrAPZR?;LiJL>m?G*0h4ZRtIaJXyZvug0Ntd?P!`mBr4cl`CJDeyGL}XhRAy5$3Auglr46v71~zq=BZ7K`7dj zUZDk{vVy1qgcGfh9GxPkjS-`RJUlnXs$HDz^Lr5EC9>4_#s(r8u2US?{c4wV zbRVoSrMdd8X948kZbZsizazrW5ZXIB^WyNB%tCT^O({+LHPJu%5gqoWouyp~iQ((k zuCJ0BWbi;ss6ob{!ve#=zUAvv@n4v7G~+MIz)!XiA%E-x%GALvA~<{{G^5(n(bfRD zb=~P|kGtyfR9%GHA%`8|HBe#Pa^>NMsF$SY6HXA-f(24>bRbdj$_1a3v$&bOfclDE zuitRT&o;MA*%`dgZsC~BE~d4)CGN#7aEfZ$TL;c-P^O0~29J4Uo2Y61t#$u>1*Gml z;Mf#qvH9$wYuC#sH65tBshTPB zfpTp5eBUt{%k(~WdK%)kdR=F3T8=|OQT1s2Hcdz2w($WU0 z54~aXl`AVh!^6X=i;JMx;kV|ATPd-&mn&)FR!^+|V`WzS*NRMiWy@GH&@hQFPYJ9_ zo{E7c3RnktjIScSx;b2FlosWWe*l2LzgJX!eFatkpI2b(>}#ND`uD@~_ha~%HIPUH zuFdRqPRPv*E0m?>6;1EB-Z_vvi!Qpu!F}hXE?KrjF_T!oQmOF0;RzBSBj_?i|?9X^7u4)`tI)U&T3CUn|e+t}l`Hf84 z8fb{Lmy7m^{zq$DSJpI;9~t;OdoXp@5a@39?3@?XI;$z$K~{PP?cEtsYb!&4rn50X zhFTp_*-iRdv%;ZNeA?kNc%OgmN<|U}M+r}qE?&Wna{9CTIV}s6VWshI2HpU9Fcw+$fOg((q7EmcAuaJAvQ-S#O`KcG8Im#)W7E zTL=<;0HFut;kUu);nF0T)Fy0ch0G&WgL7CR3 zZc{LSs=vk4-Z`9^zAXS26x${aiG4@#7r454sUjalo~BG$NQBs2%oI5SB@0JW>D9za zlqtfep|~dAX}6qoWC%n*%V{5qnFhNpOMdhMjfcx$4^$oM%PXYy3^8jh(e#G~aAMew zFwOmk6!`4P9EO`ks%J^k@VwMA#?7{1&4oM;eu+F~B1e?$&g21V)X{~m(; zi#53Pe+h{~C2wYPnpP?@C&zQoQ(DG3nMZSq=SPPn{QuHixJ-NCZ(l`s;sU(plX8a* zW3O<+7njRQk``BRD}5P!UvjbR{e4eGAnieV&X>~~SRb*=om3Oy&<16=m}7l&fr&HX z!4^Zo^no8|2S)G4rN;*E5_#yB;p+6Nc-ZztiD3q6-vz2Uf3wVX!inbQ58x-^cVK+@ z4CVpDoQ)-zrw~corIVvW4E3}hU=!aknorSPpYVB!PuTc=TO}X;@w9KaJ@^c?UzbFm$*z`yQ^IE zeidsy!W#MTir$lQdf+MzcBH+_*Cg=vOi+GA48F9Ab0nPf**MRr?;aeU8}Org7c z@uqzZ1etc^6<$2S6Bu$|r3oY0q^Q2$78&!rgKhM8iN==Z=fyDsQP+KtW=KJ8s1jG+ z{k@WZ#{6`U@e#zOOxC+0()R-L_#FOHw^c1tqy+kob|fF)7Pv(=A{G{S;~e#FpHPBz zLMe6hlZJMhPinBl*$;qfU50m!s=#u2<^xTkgFOBOEvI__#ac$%GG&=ujc}1u4q3dW zP`S8$gO&LG0U;Yyx+hEGtuI4uJ{z5N{LrHV1|c9PwnZ-4yb z?PdUN7X^gkMex#1%uZe+&>Ps(UI|Ix9OrPbxIaB+e2RVw$qWc8W$j5-_CC7 z8SHI~UK7L=x-HBTvVU^)(_Q&BTY;NoRm0u=ohv@$l0P-2YACqPxIg9V>(QGxgSu4# z-Blq}rXJ_Ug6oY#x{hKv_pzBp)_Ar@3!~kx>{YbGfs%q<*Yr*QdMW*F8Dwy|V2&iN zbp6>`LO{9rhIJH&2>Xh$otMgnn~riE7FQ~A!*f;|D}dyry{Khw?t1+v&X4OHhnhJCAbNby>F&5!didnpG2H1U zYomRNGjo@Fnp=WYjWCTPBY;oFQCb2*8@}GxLlX#0*Q30<=9qY5)LPfASyZvf=Xiar zBTu3vkG3j8$+>r-PsT`k1L5ulYK%$n8KSc)X`3zSuB(o7oQ&5g{UGl!26b8tRE~TX zB14@%=t}&6T4BYhB~CzCcAFZ5t@#`#HF92x&pVMn4e^%YniU3?VUB81g*_C z3#*p#`;%dBVge9)y5`DFOYX{|TNsAv9sAJI7g%(>^>K{{Hnm({S*(y`8>dCy zZ!R9o+F`}xz^w1RW3Wf?*ydR4;(QxhvWIG*`S`vNcdV6c%I$-1q`YiiJbPuWja7_< zJd(P$$Lmt=F}Q!VZh&d-VtiTsGtuqNcXy^oq{Noqy|QHzc91(DT>S0zo0+or(OoD= zsF&n2OyZQ6lK}{1MH#qj2XeI})10(U&iS_6gZ5w3C>5RI z!^5BXUPwhJ(&Z%#zXu|B1tDn6qZy6wGBm{HBz&XCbU$JmtmH0ekTyJqHqf-+K4pU zW>rYsoU0krMTRGvY}X3fAD}^=5G&~$-%E3n5vnnY)g;fe22B2V(O4Zn1y7BCh`WJ< zV+K#?j*7t*T<5YMXT^Bf#Nty?k?2Z0r)K((umJ2b5MxEUbo$nJw0-nN8;motz8fug9C0<6$^R}X3j?C(7uXm z*KVK9aJ?GbXl8wJ{~w}m2B@nB)B4~?8NtOrdtZca*dd&^-tLCHR&h|E>?K~MIJqi10o z8t@T#a*t3NtkC)co3azaadU=XIyq`L==yYwj3_Jmmsh^ayIq3R!$z0W9VNb@DUOdY_-Hfn7|A{;jyp;_nSYt4nR5%&=OnpfP^ zgrRLuj7M96-Ep=?{FTQ3mo(&hZEl(0Bm4t|5E&L!5^=x=`V_7@L2rsP(N2)LQ^%?_ zFX)EJdv3XaQSw2E8|Dc-B?j$TuOoVTB-pS3`n8tz@+9=z6Y`W=t52wh#wPXh?XOV~ z4~Pd%FJd*Kg4tYCE?ToU>u$FY9d`G#5nbAJvLX})C1S~9t($E4l6DB4xG(`~1Eu03 zjY!g-U5+2F-Is;{kBDzlHzH>5q0FV^bhr8Jt~lzujkiVu^nW0t223&yR?90!su; zow5_KMEE#Vy0&j`GK3Gea((i#BomjgvU!O!xQG+20DrT1YgltK%Vnd`;Pvn~%aYl> z?T;HSnGhD6^CIO<5@v9EQ+`F^$6s(=4QP*n%sU|o$h?c>by+c?hXWM@`bOrSAG=-R zq!M2P5>?nclsm85mQT4gje15aIU7-A-7)g-1BSx(J8_&?M0?tJq=##S5-3FG(6XN z3Q+cww?u7vZ+Y&1rqaWSCuJ+r^as+5O$bvrGdHoCNRT@s8ouQNX{08_7`{rq#?DlP z+5-9B{T-pKcK`zG1cyP7r0AYWu{zDTuNql`aVCJ_MQyfNDp4a7403_-JBxz1_mD_c zlYUqbnwJoO&FoI~9`mO!L1*457}Y}-GTT$1@99I}4*E4A<|vb|!z)|vV#mjXo2v4}%y_F%5pjw>eld(`Y)#$aD~QJ4B($?h1y zGav6|XvkC5Y|rGIi^&lNR6^~jcNCgS&0iw#J~P>BD88rIUsmC@= z$2sxQr-iqB`d{sl4%xMKvBGLzGWV)z&~!UybkzKwZFPgfE7$xMA{(cfVV-W70c<3k zS%v^jwpcVm6J5i1=mrRCUQDi-7v3p5>eoK|-nX;aog-N~y~u76pTTjxr~N7HMH{8ahAfRD3$xwzOQ~&1CAKz$cU;oBVXqQ`ypN_{uw`4N7J<8PsOE~ zA$cbUFCR<$Whr%LIPYpv)upU-bGtp;ms&>s_|M*SNw~a67Yr+g+1IP}mL1I)-H)*0 zinDg+>8Xk6ty)*Ay1wNaONDO%p}o5W3S_EO^ACAD1_@HaLxCV1pgaDTFF?N~&RR9j z-up}8Lsdc@g&4D~9Je6=RdVpTaJIUpmh5r3HY#Z0C$Dh9#r# zZr_l>)E3w~aQgCoD}F`B2}sY`kN4_R3qqt`ge6`mzJGMmSQhkFc8#nuDaZ3sn!(PE6PQJlG>T-S8T%b(>d32D!=6#KmD9+w1_NWrQf@LNcd6vdIfEI_Pfkls83pvi7L!-Mswz14 zTgvEUt#Tk-ai||Q8J(S+Uzl9>TmHO62_NKq`h2Xiw2=Dq0%>5*O)b{&8sv7d9x-@+ zlOQdcC94Z3@k!P$&E|yevM?$%Y%v3BP^$+~4`PG&J)L+e#uPD7s;8ewxz>5|vg+R7 z^s#3N3TX!Et-y$ai6Ay4lOvR6;0oe7=;}ghvF4-jb?*>eSDiHYi3Zp2qo2RdmjCqt zcX=wcN>GwA$I0!TPMcYrUs?tjOTQm}xcW)X={D-ih%s|-pt*8TiLh-zm^P1kQIrdnq-_TSEZl{lF($|*E zniZpKjY+w_>-EQ^k==XbA|_kz)2^Dl?$hY*M{U2K64Cp~TzryMbp|>vXl@ceg`hzF z1Xy!xMxFeUCZV`Z7d=fY@zJtDS1ff-79+n=a1oP7Sv2q5O1^_ZIirEP6?$k2!uYzm zPkf0+w0z=*Dz)1y@bzq@K6_(PgQuXX4*jR+w%bU7V*+;}2_v!U-YD--GYubEI@2Q9{Wm=R%QG&WEUw^O^1c zn%<|+>HGU%*LAzDm&@F2*REaHbI<4Fd4H&Uwj1O(^KT+9|Y5=r>Zf)^(0CNdvfrEnAG4w5ml*SDESbeBfhB`Khe$m0Rf)5DJ-U%ZL?_)O?55 z#7A3)B$X(NEdL=z{x~>KHXcPBD70DnSSjFH%Po_0Qb-BOb)2dae`>4 zKVsX!2{bbti;aCrQ23>>Q4O$UnrJG$VAJ;I+|1I3&+^3FO33D9qj9FU+JC){ss2qQ zuv#CdQJn@m2K;;Wg_;B7`;}GyIfpOB9`to8{?WpxLZNg3@xvF6CV1I?FEE;|*v_9`;C07!Awf*hhXU*hB1DR50;!gz$DCy1diVL)g%2ZPd|xzmnV4xwu|47L8?=gX znytn|c75~1H@$c=Cvi();pn`ww!)JHsMI#Qbj?a;foaM2K1YH8-iD zUN|S;+|8+9#Z!x#JZe_(VKlkN<)r zYNX#bS0rk3A0S}ZTa2Uy{AACMJ$0G3upt~#Yep!mpVP8hUG47*JofEsk2y?=K8NUZ z?Q|DEpnppPFx--?zJH^p$L~JcEcDeA?`%>Xue-S zQj&y9$%>DWUD)r}=T*k@!$O+N5ovzXipbk>#@LxY73e14>a57d#Ulm zi(`BZ#eiIK7qBUialb7<7amu>97&*Wp{Z|5;+EUI%;?=4TaG#9svkQ<>8@L7VK2K; z%S*N3MEYM78zb|Slh!B`!G#nIN>?BM_81E@NEU-dT_`m`UF~ zO(MQ7nTksUm6|u5SOX6U9#OXO^07_shg&lPo7{p=ibF;R5>^JEPuf}xyZZupm2(0D z1U_x4LdSW4p{AD@qkLD!!!YTN`dzfE+`qkNV?I@&!n$QQLRh(V{=G1WVUG`J~#Ca{GCbM7% z@<{zT)ig<>@Cge|cdZZtGzt7ajmx8Cn zbL4hp+%bUwsVV2rcZ#mrM3%7)xVS7>$q z?B2Y<;)#%fzgPanWB;hG{b#-HKll8v3f#Yll@!9S(Q>#d= z9J>8qP6u!z072a_K~EHz?rwp^Z^ov{54F*RQ2&j$o*;PvM#@FJJ=X_fnhMBvbT_7Kb`zRVPCqfqgg3A=XAx^dzmnUGK5XzX5m4p}r zad8Nli9Ks9{`ZB671Tc!$N~loqyvHjw5nZwTOIsxdT-zUXZ${L@9{QqdRTGsYcMT? zEJPxU!bwBs=2}J6tsAY_28on1Ba~C3UX|Q+3)S`L(r3+c2btwXb0pqe##K7tlGxvp zht^y)_DLFD8!P>(ATflhO^V3)b>yp8Wxr*MJq0YF@;T7^GUT_+>;GQ=4*}Tk{23vi ziCF+G0BkLKX6U~{dq%vm9l~CtCB4*6?B{jscz8uV#;p(E|5o%+gf;0CCA zUR*$9QRh!e+?X!VgwNf0daOIT+$>#@g2G6g=G9`ANP3$bzcD8)Uz_GGug?>j2CLft z5o>!(f6u8j7UF&i)+R--$nR8sa_wz~tg&9blGQM@m_5}7;i-i*Wfm!{C0^ND6G?xC>^!O)B0qE!^EG*517pA7 zq6g)`zy%OUR-6-O3UhK0QN!9pZp5~rl<1P!cmRBq{G}c``$^zr8I?C0t6Xc?cyeS3JDjQJ%H zb4*!BCkI~GMf%{z?tGAxA@1yX)`7Iy=WfO=Jt z&Dh(oxOCoY8o-A%U+ZML5WzP!&5MIAtCP*qo3Yv?cj?uBm2c;-(!@Q7=r3m3*MXbQ`fW$OR?nC?pmVtxwWE&wM54 zw4kzB1}{j5x{S`dQbV|O>zh34F2SBw}W9_GPaGEnyd_=o87SPhP z@w1a$hwEyA%d91%@AYiVXrpgoR`}CjqKbDA>^YX}xy9?WrZ&$Rn;6oxY4b>{^Xg3I zvS!l;t)$}S;q#-p%%9a8uFYlRA1#HI>^rmf<2TCrdKV!%m5zPxtrMdi{%|-U>xmS@ z&1!DCJLg&qG(ku}OtH7(XR8mxCAix~>8)Jhj7B1rwOZ2+&6)P+@!(>*;UC0PT9GF%ng{%gPw;5a53AjJzN;A*9KVX$Wu zdUOnSXwW==yrhI)u`)A*-@mZ>_B6edF4{v28J)2@+JW9ecdg?)dIk)O20?XwJU^t? zr2Y^3m}vR0hmm|(o*S2;s!#=2%fsCe&v0PEeoMuS&Fm_|)c>jVKneAV-eo(tl7%l} z%?ulOugzr#Rt@!gcDUO&YPq={+3*AJShBAJBQz`Ri|B<+v);A4wLl;mrPgHLDY=B~~# zAGlI>lIINR21zTZ)6TwBHK6&sUo@Y6nhwl_#NPKrYX)hWtRkEsgAh|ry{bEslHjE) zMoL+)2*n)!`GrKp-Z@+^As+vLGX>lEk>yabd^JVF{3QG1Bd$zjaTw?EO!;#@>4AE; zv9s)npIE&e)-@jN{vW6?6)1DHMel~lCc+&mgk`Pzc;=4LnCH>P6+KZy*qsaUtUK+Ucz(ej0@r+8h`p3@t*Y&U4 zC@RKZfR51{{!FzagsOZA6>`uE-SW*Z&@4SqMvFr3jlC0doXF_MV4&DI>@O864Mlg-_*c zvn`cB-T!>|BZ*Lz06_@^#R>KRmpTQN(^O77b8J%g{u!D|B2ok{C6A~lt6{MOLzWg{ ze9imLLq1zg3pFnX)K!EeUW7zx-)_U+i00+xdmTyrc3}VJeJR=Y$3Uv<{J_{kUZ#aa7 zvV0rQ{nhsR$Ie~2FHhZ0h)Aau+odChGtJD*^kp=xL9(mZIO{i<41kVNgMFf-3T8Fe z1keT><#Pk8lh3K6YYUf;jrLxCd=X_~dSvY%2lekE8+_kKw*dkJMYa--=E+QBh~Z}1 z<>{SxQ@m0DGvA!wftQ{-QAXlvZda+v;uT$=vRJGS*Ov(hHM8QhkkERUS|mq-9%rby zBvhQ07;TUzuH`zMtlA>1Yb>tE!NZh%Eh48~$BkaX9;Hap)qAdWqkat)Q1C;5U}JEO z-n0yGG}b_nX7nt;XX=AZU9CwV|1>hoNI5`Zme)zY)+|tH`beLJMy9S&@_F{T%{lp_ zSrUzxbt|7cC86Gv$1+$nV%3e3&Na`y`yj7)3pmKsSKhM#!Z4W>D+SM!pR|j#ZFf9g z`t`Es#f-z`tE<=lWR^*h|A3eMHIVtQA)a`==(Uv%eE;gE>7_FaMI%-9B^|q^w%PJ8 zft@g%pBvDy-STd@GLed0#OWJhR7Z_(y?95^8W1=Q0&sf86O4Rll3h=7B6s6Uski3x zzkJ4=y?!tA(&E~r~T=zO( z{_f9w_hp^JxIaK|BqMo5^!Qa%G<*eYI#2rIoJLx-8oURo;aejLPRu+v>AlnIYZLOl z>!3gQCDnUjgTD1DV*3OT-p0_eMu&m7zIx_sZ(DfI*Pp(0N5{pS6v1QX%m@?2(R`R8 z)@7Y}w*tZSio**--g$e~`cjo&DNfoiwcE}pCu=9^8H@mNqL?CZ;5wT(CGRm_oO#_+ zx%=>)XWskWZMK9?^kR-s!Y_g}Dw@_mRuqM=yKG%RZ8*FGo~{ z-%8rs2^+Q(*O1UMeCBe*h5UdwK{fh;j)bA0i~`|()NdrpA7qqF_4AA>oq++igj*Ny(7zg(IK|1{vWxZGozw7yO+SiHUcq8Te6ki~Udj(LO8oav_fQ_m6;hR7=m|(Nt#D01iKUbGiC_A3HO2qrqsrUbLT|Bu}bxCcoLB=5^G_z*Bc`_6t?o z+`EFBW0N;ibeh9e;Uj2f(j$dv@nkFU;I=hQ#TMc`?Yvp~e12$PEM?#acI4cr_XN9o zQtL#s$Fnh&t1LoAbDW9n*V%0y9ECsg^t?sknaq%hC_)`ixoQ@(4~AKqRW8a-$MPOL z?=7Uh53anb!E*T*rTaq5ucHMky^$eX(i-i;*?c4}M9kY5(wOl3Snco8>TDYDca>}0 zB=inK2+0>?N1FURYtjqKx$PZ!thAafYt*9II1!zcvxfSXb3uo1xKrfCs;189 z>9-hB^_mdKxJG5H}Ix3NI=D z+(X2*tKTyx#ES)MI2_vNnso5ve~`*1q*559vY4ug98aVmqk8@P98*KycJ=xZ2<3oI zuQKRrWdxh=^vgN{w9cmP$Z5hx&xJNWtj z%;X#)bBW{AQ;Sg*TFqd~`a-ep1h_+nUJX+v=2X#Vw`i#0k~k`N^MfbR;@DxnjZjXJ zLx@Xz1v%X(HbUlbmlQeP_Ks3@JWkI0`@7|7N1{8@m`+}G;^e;YZ!9rk(d##}pM{qg z!oplE#$3ODlEE#u*C91cSUsB^_rI_5l1`RUe`MELrYPJfm8jD2N-QOWHDByT99Bo% zXN-5K;l&AWrj(#c*wHUA*^!rQz5M#wQtNk*%Nb!O%cN#cY>*MV_gKwO0d4JmS z?$=))p3W}LE~|xj0a``%6)vR>GVVcQj=DnrHvI65=9fL5Hg)IB@y z6f>P3(-Wl{-*PTT-3uIGse zfyEx5`O-4>S*Nh*c$;Y8H8D=MYkm?<7DsVu$_L1sh*)!hrr0OsloRZr+fPbyb{2ZJ zwpokD-Cd*myPX)uZV(|#$Df{YbXzMS&K!za$Z;7x+fcB*_vR9#o%r3#%_|F_C3w1_ z;PSEr(f$>s^trstJGD4KTTA~b%O8J7;Ba~0^mG#gU4qNd3kYxr)3!0}=6b|^1kYoP zg=IiA1)_Vcscz$kbQz%`#&8FrRF~w3goEtxNrQ253s~{V1R2&s6A5{&ln!5m<^zMY*_|Kw?ZZm_3! z4ej86Ka0KvB&6Pj(8E1wnkcn?^T^!k;r||9{P9T;h6ks(y^ep40=j7Gmld=?+7U~+ z{+0*w+B%XaB+4W8_cFzwJVUwn?kDC@ymE}Cp^TR>DF_1YhKa3=|px_h^7oC;)lradXnedC7EIWb6;OnEY$2t zKp!icIA+?F(q4?&ZaGcmB^24UgZ5YEbd`nRQWwyg%E^elnv}M^B}RX{PsG0&9Ml4> z6WiVrbF;uff;)*png!U|KU*-aZhRLN1ytFZYoNE{@WyxU%|ALQ_RZWDdCK%2BpCt$ z?tDXYVieZ+&@Hp-2(tOVec9XQpgv3mQaI6tjc__}7U+#%Eo#S6W(H{v_|*=>-9P8l ztcXJk(X+*<*j$_LaxrLnj`*r>P}|7SpGGLu`CCk~K9@WL4lWLiuR0?8!)uc74jl3! z&5{@rxIM{KOn zZ|2etcSihqIRx27pn`i$afMR{LATBpb%xewHKBBGdKx`X-8%kV(?0EdebqA!{$YXB zQyxYf-mzVb!tgb-lBK(1N*#F&jDMM?~J+ocbmdL0=n?9 zzh`88q&^>08gk5+3mNMne3;{$bMiYKWLl)YENhx6voNIvXRj~T?Pj$-+x;U5B-C|n z(MvY)08TaC;BZ;y(m)pwmv#;O`HEEGC}0j79R=0g1f8(>wylYowCKm>D+5~_fiIle z7ySyzTp1XiX5Hq`9Vji_=-0<@v*F~1NrSWZG2Kc$5|G{>1h-OF1uJ#~56+*&ca1zv z=UToW9$Wa*8GON3OCvNpX=!1IA#ksqom~-QVgiPf z1GSv*JLWsXoWSRSZ7>%&jjd6ux8~oceyZ6Rq+VJv{`34`Y=O$_Gkt-~VxZ<9K9gQcRNIWrn>2@dwB=;DE4AZ@ffG0Br zy>;mOII|LN)E<0eWj?r?AzDA+jp=&YRa^-A8yT8Y7>u!I zY+(vacm>GlEtaFuOV~QI^~e24E)V{CWKsw8wQGypVzh6SpN+Be{z~!-Du7>o0LBOSUo!YZSv1cZu)jRay?N!5Eh3^TM!~JwJ{UU|&B+}@naV+O> zy{bD4ym}BaaFN~XIqQ*iKcVAr&P&2EJiB%FM8E^)_Ix6oE~UpVqKRuA&0#t{$1HiD zOA|+eA_0L-X9zwES>_DK7xswqt+kaikSDfHqP?FgN=Dbh>2|cu=}qiP#eiPe^M9T# ze~!VGAk-yn3!NEm#-mssxEvLsDdd_l%7Gq6RpZFY8=ShqhtK~`|fT}oOSLG!?}Z6A6bXS zO!KuwcmL#lnulN4y^nz5-iK#6oO)p!bX?~c%$!Z)lEuMjtf{y^3_f+E7G5wY6O)$~~9HHtMw?@rg2ZE?*q|5f4OEw4N9U z2|t7Bd#gjcOp)5Ub59L)v;~k&O_IK6BP1x#jCN`yc(C4kjk5OOfO5PlfW@;qe%d(H z7T{1{|Ksg5(dS_7p@GTGQ7d#m-v>b8?-|yP2~mvL$=TU}0bq3nwxtsj?7qNBORJiO zpV2%Xrnh23)A;Dq(4Xhmf7uQJ=o=pc`bHJKIXFoW99#x6hHnjL z+h&9p{G`yFX7PvFT9do`;VF&e7i3+whVbf`$F>ItZl%c&%Uz5#KXEcEp1mGtAR!{S zPc+L9ij`-U^5xKt#75n(J+VOOYk<~`8hm>?cI9iC`WA7&HT%cRBxl&pU;|da&0C4P zhyo@OnN7)W93)(bg2{xrUl4t_9ErFmdWxuTuq2JtGpt3Qk#@<_og6N|U>Ps^a87R} z46F8A6TUvyE0|XjOFrp83>Qn?U0-|#dFg}9N1|~YHmVbc@so?t()fTm zC1oitMD_hSJCN%vN9-5=GY!_U?fCVl81T2S@Nd;1qai~An0%ot1vQxhwIW5+S2t_u z_FC=qioqqSyv#4}poz?6t^auUz~zE3X_Y=}?E>M9a?}2tTk?aBuNXznfo?^rT+aqQ zIcgMZ&;X1fQjZlpsd~-Jq;v3SklXpOU$zoTlKJBn-yJH~Uk9FhiqIfRilw<1z}~&< zAA|i+KK|;?StFTN>J_>&IK#V466YFj;%qN7A5$Qljy5fV@ec9i&+`nJdJ&ATKyL4n z4W|}v(FWshHldqnn@=5QXxq;fxQ8aqs`{q+9EoSY_Jley4W1luRrl^%0o~4mHsZ)F-gzLT?19Z`tt#G8{+~(U?;gwrey+>a# z?>Z}CdL7~i(UBkJ=x5eABJStR6aDj(;<3*be*N0R2B%seonFlsRiYIuBL!r2*|~Y| z8=D@11$gt+4iQIu>StAmACi*3NU}ycL2igeS4GQN!%c%Z6xesm-BaRx{juv{nUB2* zvFY1Ng_eP!uFyQhiIgf9ZG#Z-K0oh=!>X2Xw5FNblYR4eJib4%+bOnMFL@Gfn!fvr zfhk!h#m7bPN5Rk-@t10;=9v!cVq%6_qOV`*(QvafH&Oltdu(Ek>FT&v!)rnLYfmlv zr6bXYEA#na#+Qjh^U;gyWmga6DUoiy*$NFb40{ssM-pO@t*Hk6lb*Rnt(%?!!Y`G7 z6@H-<1&EE&;ul{AOt-~ci`gqArGTd4CnxIhVt;DhLDm3VJ-CL4e~oY+OS(9~4qwf> zyh3dnraBT&Z{n3^93P`E1+@K&VEX68xQ%V|*XV%1_Av4_;IDx$<%cx26)(EkR^jAy z$9g{)^&DE-(*F+V3uwE|@aJePj&o&dw{pCkTX1(T_&?t*?=otT8`Nt*WAfEx8v4n0 zc!#Ig!f~S5YC1r16_ZY|8fUN`n%I0jL~{}?32#kwtmEU*=s6$4TroAzw)}F}+5u>E zo^sp=5t9oQ!!nBo?G&=>FWG7i;Q|9C%&y}s4@{?ZNC_s68c1^qoxEt z-X3z|^L*I8Cf3cQA@Q(dH_3HAod@&_Nt4HK#~y2>o+5;La_<$k7R8MS2@+`O?o zR;d>np9L2nu`h?mV-CLNt4cmZr1N8gD+*u>gANkohn$jU*?c8_a3f*G?JX{=zK7sJ zvp3m`j3P}XI*)mX?5~k{zxqHUA{ za(6TxAGkIc(p?5fWd0WmJ==Y4a%b>I*9Nby48-9+z*%^=k!2yzyUH)B7GWuR+g_GG zKDC8ZSbYUtGZ^DB5V+Yk7~`o!@w4eOrm{S7PhK87#snHgEv9JRsLYl`fnm>D|M$21 zdxB(&LQM}otIHw8(;tr)oi4b%LZ@16tX!c7PSzV*Xmig|B`7-UE>hZn*`-ZS8m!6J z)kQGln-=TsIDU4hSS@ET;%hbjFx1MqrEm!y~pB9>O5o4ndexn_o#2=5V?=bB! zZ94MxauImp=dyD)2K5#l^?m{v%Gc85?Ce}lpN22JE#vdxXt?U=TrqAND6keS4?HJy z!VRH-6Wb*6WhKXE$I{3MeogKlH7`!=LYOB5@2JC1@Ld31m+V4BjG0=T5QIYrCqTgw zCTETm0|dARgc6jU$fWj>)j&xH3S}i}Cu!4fZc-VzyDg(~g9iwpF9h&1hQ1JdC)$3f z=sf+<8XoB2I>PmTo-OV>p8Dn3ewSsleHYFqY=cK!tlP>>J1pNV?R@a?0jL>!+_Q5l z&=s6xSe34=^$2xNp3VhsnU{`Nj;v>$3j_ylX6fT-v3l$OLAPgQ=z)~)71@eOz5S@l z3zPN=`0=$!01+52$?Q1J)L*P0)Af?4|zwdvU*V9!z>>_{;K(n4u^YY#N~h-bbU~Sq;Ys zsBTO80DhyAf#KMe_GO0tgF+u<_Lq1M_>lfVw+9G&2IT(#-v+?$xAl52|9!);t=nV# z10d`J@eYG*{~L}!^ZQqR@uHPXld64Re;ifsOREB?|NoOm1%AH_zs2#pJf>hKsBVCq7JOsugRW#V&9-c9Jts-2yI=1xQNWqAzEf zUwJkq>ihAXnFzHV57(Y%F1sD&z0m-7c6RpbN(**R^LYZMDt9n!*tFeVY)tR6@P6mH zt9o6!{yT7L@i<=dET-4a%;N#PtefYH2jPP9*iwdz(3ZUIw;bDVS#tlcX}64=(;~iy zmW!v$6)jNTEgZ|iJ5Kb{N2YiGeTfu?3!ZZOxjRM_U$KFok(RW7M18Q{G5YEB1KF!5 zS)YiYQL|B%lvbG=k!EqOzQ0~r-TY4Nmbj6qZ<2D`i9CJ_b4(6?&_N;bD$Iz_ClOXB zyTtxA-*5?|a-UqRnxGc_s6)cSL&k#8K{DJ=sB@OuBfbPnV2VFYju}zNFqCbs_m#RR z!4aJiDW`_K6&KH7o7$r8-yj<*vnVKGFSqqmkAHAb-Z(Ky+(;)$BDV?F z?MC>i6#eXrlDY=*AiqXpl#o#m%|l`muLxTTOlw}xY{k9O9_!S+HLrHab?sTw6ODI9 zJ(^AulZOt%mQJU#uP3z>yiyw@Yo^U}$n8~9-K|^lK_Y}G`;5IW$FOf+r4Xh{$kL4$ zm*kLOC1OBj_9Q@KlSDt!N|vZsH)g80CTGwg8yyXyW?%^h2FL;2+Y6V9{Qs|6j$uyl zS0&ElA2zJNi*kRh4Q>A{&HYuQ`?FHF7CSgi8{BBc-jtd78UA#2DfOq}z{kJe-9JZc z+W<9XoT?`MK5+CKdz(7#=N;$fl|czUGp@^W)!~!T=K%;(huK9>qWC*v*0QClzSDts zl@_deQL>X#|DlMa-AS-0!o2e1J5Nd%i0TNiL~+e&BnIW=+L*LSHt?v@@s^ONyQJcv z7;a9Tz1QK_DltW`AsrKl4yLT&=BciU?m{xcC zVC{LMrK6?4!ml#vKx5%iFBtz&AC;0Ni2Lyc<+rAxCy=viSiP*J+Txl4CJmEK-seqv zb>;fQXpsz3XrghPGp5!?8y;)hC8~)C>>k3BoVwiM$ z1E#w(_wL{n!q+MQYowkI0!@qghR&N_08akb&2Nk{qh0kS6BF<7@T3p$Cc3t=r4KUt zlJ+HDlu%1q`;VEegGyq5o}&M`1wmUQL&CK!;*u_DmGTD5#K30%M1to`65V@YbA5vf z>A;K9_ifS2d{@>sPrn?bmkds?Z*|Qwn>#7C2k*j?cIi3!FZV0-o@zbSqIaR&9Kbm;A|Y^A(9*=9pfNTK5}JX5 z(ZBx4*a3clttF92Hv_Mh!xZ`CNKE>BVvrVjkR3}PJ%QW}1>9E)z?a298(fG^v$#w4 zNC%KeAX+`tOMqFPOHP$a2^w>0KynERKseMu$Yo>;f+&dY1SpCzp=tC(lhiY7KfZwY z53t)9NlY^~QwI*=&`wJbuSX-J?(1o=n3?kzkaz3tC#vC2Me0inUlK^;U)#TowSB;d zQ0Brn_2Ne??LR%~_@9902rQs(su2aMVijGUcRw|8@wLh1om!mo0ni@B zgV9^{X1s|H;KcMi-!Yc+Wd{26!9#dbdU7Bsa_C(>f)M)S;7fI$U$4C0E?(Pn8zpiL zt{JECoO?Na7@{lfjC)tad&-~;f)+J*c$VVjl@gJRA>6|LsGeN<{^Nu%@s-SEXeS)g0_r<+b2>1dV}RE+n61*H6=ZSZ<0n*-(SR?70SdU-Zg< zn?l6tnrgV{FsxV!xM7XtqzRmsNF_pXL6cA6oh7H;{?usgU#)i}mwI1|)ze3xa#>OYX!u)*2J%V$SY7T~KU#e3Ndb;eVlM;bxdy z`(ualM>Hf0k7|{uv@b?gY77HAbBr~BL}>BgA;e>nL;Yk9*|*qV1a<%)K6Wer)bO;< zmRRch2}7WLw)7XM+2RzN{9J+|A3k3~=ae1}hGKk&D@7P95#(+H{l=X2iJd#;At$YLd3h_fwXGnhCr$R! zPGib|G|MM4^8U$_mM0@4AA$$J-o5+I1(1GX37M_y+ty0yfF1AVzJmT*(ihcxCxqE{xgkmq+oa7mQn9nDqQwYTj=1 zh0#kwOz^=cMdadrfPl-4S}7_Ru@bGv{Ym7j;m6Uzj>Uy0>(&mnz)$u+zfIavNB*m_ z0K5f547L6UQ0oK0J9TDe>P2qT7M0#{G-PYjy*K?Q=n*#1=*!g|MSQkBu5125Hpu_6 zknet&Gsn3(dLhz`UoVH1WT49eDii{~9NLj5W{^VC0#ArK5qdntBM2KmV?};Q3QKZ? zM%b>>*!?4vRjkhNvI2+M0J*GkGscyYTv~vPu1l^pM{!JNXO!;7K0lQ#f0`uGGB;N0(>#(# zu752N8)>wcDUqL9PNI1z%P_gQQ%y!vLaV+oC4Qcqg*lA{cRXxAn#stxM(w~+LP;Rxkp#FG>_9uXd5pV*6D@x-da;@&YO`>$Er;7VFjd~ z^F-WrTWw)NioTq<;(=C?%U{k?3V;)ACKN!_zXQ)*H(M)v-Jo|-q6XMCaiz!yXQQx| z3O`E!)~WG+>2f#8UO*oKzHS4@$MmHM$mBQ4P0mDDg#uq23!5xKVNK4oeXNYj>|X7K zpt?5z9|d?%=?i##*C;5u&b*|eO91As`u7Kz3%)PK?dz@+K>fG2;We3ae0>t11W@q~ zUsvgZbiT>5les~Pd#&GJ-;cZJj6GM0-O~(jQC4_uR7)937nk(@S#}|Qnya6$n)7G; z)S0xLg`AO52Neb>ygvFsX3dzNWXZIY6=lj^ znw|y@@}>`8S_Xpm%Q zKgY;SH8I2EAfh91U?psZvHInGEHit1&cgl!ko^Oe+orM}OmJl*jBcAeo$>Mh#!6QXBo!DEzWc`16eH0- ztLv-!+9k{MG+)zmf}IGH60g-J%f%Sei%NcXDd}?A90lL>Q5*&DHSjEb+B>!3{MsB! z2G~SQF$*jYaxxIBqK8sRR{zBDxyZENpoMB^Cvk=n+^x#G^_%qkvKzfr@RQG`SK-6|wq*9*R`ftuat#URb5EWA;R1le%`-O;htw1lQEh8ACKV*Z{RypruIWwXLSo&4N58~-fLU26BH7$g=x;w;_GxyAijd>o1_2R6$9|#X2rRyAo68FrZk0?-eCLBg zhW^8oV|K-72iNdi)H3J=piU|se`=R18oqw{HSB?vm2KATf1G{)I^1TTY|um*ab%^( zPUh-&$gQvsk#00iS&f-P7W8#Gy+pm6ZaP8l+nDT~*bLPiou;p7(n|>=EcXrLd`| z+77@~9;3I~Jv&O%ro-^3tDnmw^Kgeor+xg2-CeqsK8P;|p0U4JY-MC=hbUPcoV)hN zlwHRdWcP1x(gPU>Hn$QmHt6W%wXi6G;p1AKcF*`B2|VN{orhtDMJ$H}45L|;>H{}fDo2;ym0}dG7EI$6jp1Kqw?DmB>R-`DAKmt~`NQ~#r5Ic%RPc9U1AN`}C z&Vb^4lEN`(LgaMkknqADzR-N(vhJ^o949-VoeDX3m~?h#i(j}VcZS`~lk${;kn<2m zSOg2y%R4^`m6j=Gcg``bVfkK{oQKHajF#)U|7Ox+2)%HhdG>iF`o7*r7NNrsaf9!z zT2C)kK-0WOZAq1n^CfM?(=E$9^^AvKq@E{aemhBcDQWJ*A$bk<7oQCgRBte^yvy(k z(8Rl+SIN8Rw2`=u;B&Ve8^J*+{KCntn)2idDhFD9w{*Ru*{ zh_36cY2YX>PQn+jp#gLFyimSE7|U^1ka=EREn294WkjE()2b&=Zyn18K(`X_+_~9} zqzZ8E(5P3#&Wt~;{nxYa@1HfPdvcu@b_UB^AMc{YM$?TEW@jaczJl3Y7BLazDIi4a zYB$~9kpEgfsSZpI65MPp@^HZS;AizYq*`^r*zVBeP8hFTACRAWdC3km93zO3+kYRhe;a`U z54hp>C2jx{LmIkw3(aDg`Lc%E1xh&tX7iy*qtA-i)>~!=3M4M*UiN9O`;;6T1833KlM6Bh(>Zf z|4HSchm0P%{b>2*Rfme_c^_>nj-Ko5my5C6xqG(&uhcQmw!Y83Ave8jFMK}`UtDrK z_}#0vN>lfP3mlZ2Cqo|>d{aTAdS%wjN**y*|081hv)fes_k9&uA`Jdmg=O{kFVV8_ zbDLWKI0Re_@2Xkfv_=8``t3s?N*~QR`f%+f=!_Db%fEuV6p|{__*XXhI)ro|kHJ1Q&jqzLyxcq4d$(1gx;Hb-uS}(VsZLCdT4HU) za|2=Fm$1k!dJ~At;(s44E+9}pvL5{!Q@Md>knw1r*68>r5Aej5khw`d%Zn38W<)Kj zG0kj$Xim%zjf^LpQ0|9RK7-I*i~e6UlGvJ)>s+P}^DKKm=2$QMh@)|CvZ8)Dx=@z5 zvpLpw)D_HLK`ujPk3J@ZYOYD@jGMKOh@v(9A>TDV#v+CbRBZkDwM^w%b55I@xxYYF z4^a9q5PvM-=AJ)ZE!ZPzr%7b!tu$ZBeP=s2Z z5}85=V_%Ld%>ncsKw)&A zYHqZjb<>{;Z`dr;>8JA&LNnHCbiR9kfQh2R{UB@pbGKt_xs6G4{Pnr}=cLhk8}D-K zy%P~MozQgD&;ZTs*^*M|Xe>`#BV1NbhcG{KfV&7XwRJn@j-d`Z1s?MRqs5V?t^U~} zShz~#)0Lb+B{K=4WWFDr4DJYuV`6o1<}u;?UHjxORWrN_fIR)3apcpw;6c&vVo(zN zH)72}0N)D`YxUx;{AjkXW2&R=Xe@nVO>?acT9EV(pSy*hqoXqVE}6jlL{BcYe{T@x z3Nwn+x%E; zE?|HsdI<)HR=KGkNZ;0|;~4CJ1}+wCc0bcN9>Bx|ytG$*LCJZdzg{4a%8AwiS9JUm z@Q3xzUD?=ub2T@xM5NS;fvEY%C-Sc$$W*P%3&*x%nD?aOu?B zOOtfI89Lg#r`OuI1KcNogkXJQVR^DiEw>lw`L;F(C$qTQ4?&ALNbV*a?D!M#BIOfcT_lXdf=GJd_c|N^(+)cdu<^4(g45e+% z-Q8JxAy}ioXlm-alo)`?3Jif7vtu*&w@oUEZJwY5y(SL4Dx2?_A3an?81`ko_i-V+ z{)9PJh#7kL7$SZTYr1h93MN-3`y9*HoR$thDQ<*|a#inc{rJR=fAQxh+?I@a@>%`t zkya>b)t^;nV6O*DS6JnUQ@+;WmKa}V6G^pb4!LwBL@w+9%|^4`^X?nRmyp6ktB`^s z&M~t+a4zdixs;gQ=4uHN{KLq%Pal6QBOvw#(S4_In4&EENYQTN=5+mUefgM0vOk=Z z(dpZ%SEHH=Di}9842q0c^Hod@lMUWUK6|^Y+cb~f+gsgGUv3)HblkjR>7L`;GzSxY zYqpi};(4^g;-S5hfH3g&E~flC>1oCo40c!rPuwb=Bai(w z`q(2{&Sv_V!d|B>EZ%J21|z#z-G{|>+U_HzHekg*L$DB0&$1Ny3tb%#kIf|IVL6fP z>}Z2RL@EpzQU&^WqoLxw(9lTbS=*2EX<{krNg^w(yCQYSabgzrM zBuh0DMBREUd>o2b2E(>4mD`EDZ3@UP1bG|In=TtOHLLPR?DhiM+0>+^n9#-J$Av%N zX>jR&WQE9r-ZPFx{9>*j2N10RN3d^{a&mGm z++S8XTj=rC?^X|I(U(u#K2U*!eSk^}bnSICO{SIiY>j^qrMGB($EhWwwjh_i(CrXB zE*pxgQYSARX`0sh*Ej0#pFrpWKweolyu<*=i?*<|PJ2-!Dhh&+O~r?F>L7hOh?O~B zBDo1#=3*~lXvAUq(iOaiGz^uf1+vIYyjIVN=Sa5WQTnsva zr_t9>;IWh$cfEmgkgta59(cqsVrCY{zD-d(3S6ac$8u9Q@zq=5)W;>U0B|iz=k%lk z*6N1C@0SE3S@3cIe_mVE8;Jd8Mzj52ZQ*~=sfjZ9l?D3pE6!})oW@O9|l$2!3ht4!HmqDyBDMxDrw+7fXQMzDF+K-j1%Ov91MD9%x${t|h3#bCA< zS80{6A>Pp%ZaJTu(gsvytg4!WOSvV3P3n_ZK{=O>7d}Ow0c}Gezh4Sq%L2mM4MrLY zv<^@wWv812?Zd;Xs_+}3_)YE9@8mb9keX_H8#%AHJUjIz=tOcXB1xo3|7h&iJr*NX zN8;+;)Iy_&&Y;1jP1Z;jYk5GUtO(VQWwAZ3TxD(Fu(^u;6RifCPD^=s0i@_IfFQv+ zAkkhuNV`&@a_p)5df7^+9zgFHr0y02`p)g?y-w^PO_RQ|sDx1{NbMz41JBd#C z{j>o}Ed`*|u7`oX#F>d1@{2DyeH}eL8y!oRtrXMGjIp>D2b@K@iksc8LmCNSn40}B zk#)#EulFZ7b0$i~-VM#sd42YLYy;H-GGk+Ll`Gt=VpT4eRGnznG$4oSdr_z9+rY7; z$!Tb69LqCNuTBquzpe7+vT7#yI2h!R=BxY5P~6^J zas+Rp>B6(>JCSd%pGI21*O5h0 z;X$PJGfNS%gWN9>nq6BL;fs!AdE8;a7m|3svu;6WHFBG%S*)~_FkMva8_H`(ltZxU z{k0L!M9g&;{>LOLr~}qZHH(d0eQ-nvB^j)qO8f+j1Ln^kH04Z4W!)}5da+9*I1d>l zhCen&NLunJ5>tW%LP|_mS(u>ABw%aAyb@oP^+-;=5yo`?7U-XRD;o z2|0t6ykqKgN&Xnhf%fp(I?-8kjTZ@PEmujOt#Vs%YZ21co0G#cx~X<-MP!grL*B9> zqL5|hn7e9Q;KSs8AFJFg$vjned)qx;D-;)!4NSuF-&4Mj+IW(zh;clQ&)P-8<& zTyYf5oD~}{NHB7j3f4U@D^A@#FD+uJ>ZMDocO z?7^&wJTfi#iS8ZGDlLHyy13=wp2ekBhgNVo&O(F`x(3C<&VWRi^X%xHGrqTFl2|yJ z9$A>+RdR!mZ6_yJUR9Gh8w^XL@BS2J;#meXJ2G*=q@pJK+N#E)a5XZX$cxkuFvQ|a zs4Z|C;hL9R(g!Pt8@tY=vw%ETPhUa=2UN)z%5xEOI;b+CwkA3II=dF1zHM#E4xth$ z7{)kgX~k*KlERp3G9n~CrvCpM!CAtt$lKf6x)0rm6x?-b0|6^5J+)0G*Mg}#)*-IV zB4dIc#f4L!6&F6y+o%Y(FvUyxC@0Ajeys&q0%}(ixZH?S)m=g515nyCLwPBb5D~C3 zMKvIRrX*gB7+V3iN<9(rQdpj*eRsk=ck)a>MNcq52w{|iR+* z=!A`w=jx&?X(V$h@8*kw1P0`PzFjXkupV@F_ z3C|l`uhapl+*M4HVOr^H{0iEp6N7hFDv5Z}*xEG{G4BHp-9MUX*LP<2n~dupukYCY zGBq@|!tdNA-z)NhrFZweh}7H;1C^CT?g%FAhi%wNxw5hnOm}x9|Hr1Nval&GQNG*w zIMDI`MRSIZR%S@je({@i&&Xut+c7u`Zk{J%C6vkToVNx0wXVai<9l_elMj8~;z-p|sZFV{~3WvW*tq~d;aS39!{BJoGFhn70a zZ&AK|u}by(<#=PoorEhbb}uu|C#zlEXZ+IN((7`It>K0Ku46TyJ1RbR+(_;r^>>$dc9-|}EQ8<9?%n4jbWVndy;MxvszBd@m-s5HPT3b6pD&VtwI;_d!5b&? zo!=DvRyH?f(@~v-Zd<9cnxvHqa(j)>Cm&M_t$CXG4=aa1>92lH==}b&Y_7Q0zZLwq z3Q{LY#Df-=fiS9ZHkCJ&mztxe`4SNwsEizvbMjCSN&X(Pq_UqRD7ojhyjrw9UvyEd zR3kamZXdIfv%Ff~eSx6~@uZNP(VP=x^EhJ3SNFL5TGUX|EQjc^jGJaM`#hE2mb{BI zjPhE2k&sD@7B9*yl36FB$fmvYS6nVb%1Bp^+7`!5Qxi8-D|v3Fz>=BEcYzos8W&=x zzO(rjhuLt6kpD_1$ZY9b+Sh$?&&p&%5{!5#(W8{CO)}d>l-RU)!G@fYH~vcVWSYOE z7?n&a#ITPju83SSprI^jr>>B3OO^IQQQ^6aSVkH3{aw7`$_3x?{B~UDIxOh zodCn}gJ7${y|qU;Mh({U4m3WcCx8A;#qL)-b15TgB6X!lrs{!CqCflTz=n$*liA3< zZUy1;emm`XN7|$$7x9HTyuV&+5|{bSL6OqAm)6pIPlegAd8c9G=4G=TkL#{EwvF$| z^HXuoqE!Z0Ot&t$C~K^hjS}X)6MU{xW(1>9^aJKyjNfs8EXr3$qI5GZpRBE(f3|`p z(l2D0WfFaY#Oi!Jkg@z}er5278)3!U8ApS!8bB`FtZ0K8- zXjM|@q)6dgm1`njGoHL|g!Lwh&M7UH(7Y*puD!W^k8JQuLeW;@qwLodKC-x`gy5`# zh1Z4CiD9dTuBcMZG>XO$&mL}WERbul?;q-)6|U#2x4;d?b>Z_y=UC8azBn~oGj;PB z^POFsYno@nUws|FfRzlf)V)F4o{aCO=~_HezG?0fW}=zq^-VO9c-E5ganII={JQS2 z)Dy3U+Z3fIQzCBN*413(bP(_@Xj%d!e58JPOf*ZB?QhqQ_gJ zL7lzCdeF;Ob+yWwMJ8fcSF=@fBF8*{pi7xJ!gi*q^5N$BJj^$~DvuRWH^V;<+uSJ^ zJCy1ttVCN@G&AisOKABK4V9$RA2;8W8|Ikf;};91;&2)B(gba>>|?wmQD4)hZW_zL z+dyJznDo);o|v~zI&AS0$!0-*qESx|N3#O~eMOwY`NT;_<1%KLp&S*Jd}q62e8 zrbW|&Sy7!6Kn@mg^TjSBInNJkqS93DH8x~9HywT=VP|5uhE?*MZ(fCoN#NtVulK(7 zE-qdjm6L0;d?%?j^`!shA}+PWAA}M>5jJh36NA0+Ph*~7d{6pNao!jG+7&5r>6HOS zj#a3Q*#DsJD?r-3W@g;$__D00qg(h)J4a;2qk(2e_c3_4KM)iUl=&H^_kh2yqc?Sr z#!=)4qaGN4CT(KQxodoszs^^ub3R#D0c#;JI8d$ZG+e3e&THc;E)-BFkn8fI?e5}O0}%t^UnE}|`?eFFoRkfc+m>OFL)fC~aNFnLA_wJQ^umQrthC=IcdoNJY)t8|ynYCd3G8ZE1&s+ts)RD?0#azRuaR}iAt6|(Dw zzviltbib^qi z*aG$`>tn>inmgZ|@QFSL`GOZ;{IYDb?a+D0MM+n91wON|bJ?_8{a5zWG%p!D3`BLh zgh-i545n<6U0y1Fw^WC{k=^yI;_Hyxxze`Bc&pG%ylk_{osGI8XD($YGMwvLZ?4>s zPm3Uv<8URxR^z~Jk?vU?x96;3p!rILIL<0q@0&)GnXO1X%batL#o5F;eoB9L1d=-R zJ&ULHdZ*A21eP9zjGvVCdiTC-gLr{edDVcg(Rg6$nU?M+r!BzXMAF{yS=Wv~`{e3Z zvwGVywYTv8Zu`Y62Y12Z<0%^qR^@ypwU_i^haamsdSR^}t?Ap|9VO=^7+a=m+danFfv7uwPQ#9?t!O|0QVA@^HS=8

>!%Oa-}*=4okf?Pg3Od7q|y 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 Wx)7ySky=@l&Fmo&@6;Y%&@KQ_4lbSm literal 0 HcmV?d00001 diff --git a/apps/video/public/lt-superior-medium.woff2 b/apps/video/public/lt-superior-medium.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..018f710685db7e0005630a8c0dc1e8082fad04a0 GIT binary patch literal 15520 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 literal 0 HcmV?d00001 diff --git a/apps/video/public/lt-superior-regular.woff2 b/apps/video/public/lt-superior-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..910e8efa45a75ff8665d960d9e7f04ae05fd15e6 GIT binary patch literal 14824 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 OKRJvQ@BiD|md*gnkk70D literal 0 HcmV?d00001 diff --git a/apps/video/public/lt-superior-semibold.woff2 b/apps/video/public/lt-superior-semibold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..1c9e8ba09b94c866ed267fa37012a6e56fcff772 GIT binary patch literal 15460 zcmV-qJe$LJPew9NR8&s@06b&>3;+NC092#^06Y``0s%(=00000000000000000000 z0000DfrA(ta2tv=9ES=9U;u>-0X7081BYM)1_gsY2Ot~IQw6G9v!jsRz~f(St-8aD zsN(Dt{C_IoWJE#@RR6Y_WGEH3UG3^>-@Pr5E~!xTRBKy|?n(7lc}A;S?Qet;Mi@DW zu2%Omgb-5|tVXd|8iaP@B-0v)Q6fZiqlzjS60IsY`7+(leiAJ@>stBtQ{e9KgjPTAbMEMlDsS{;hwUX%uJq1D=Ky@SSyxR z85>}y*MNjR(wZhDSTIN|bzT0BfBye()7EI|rC(w*=f1c8RS}O1#F~&G9vDJYtCBQ$ z1mcxg&1}tvE~aQsy4NYG&B{8E5fByrfBaOd_D7@byzZQ{n#jAccceH>1`2`$z;5l3 z9po}OB~%bqa5fIHLsrlUxAqk&4mC{-ExSCx-@0?C6-T7*zJss##cMp=Dq$f0T z=#(HMo$gWhBt7e%@cagV$Pq<$M3IBUc}^TUNF0QjZOO6$nqc}PU2%_dvn_H(y-2nS zBTu8PY0pkST=VI)IS)q#WrP1PWy_QMz0u zsx)fXYr0R(x6~S&?Q+l&r(JTzZI8V6oxfYB*wV}Y&{7W$>SwapBwJlRWV6;Oq4%Dj1QP8Uy+*qG2063 z9CpejH$C*$4}Le6i%2BOAzj{Y|D#h-d3Ckd*YxJMv0WYNMCZHOogVe7(SD8czbGbv z99kqJ5^0b@4+|=A4%gv}CkRChEO?907$Xg5;}SYhM+1Wy&WY61!fqxphZQujNo>NP zAXyZqc*$f?k*aiAehOBsQkAVDRm-e;eYA^9z0E$3bG~c*JzTmzVTnyrWGTv)_$DIh zDUC6fpj?J?eQIfFQ>rP~%3kT;^>08Un$Y*7o}tlI@a&Kl{YQ-$l{4zMXYH)k&>s52 zYPbwOkOYO&L@kwFMg2s>MH581qD7*QMQI}2bF$~^|F^^Fk)vmfUNPEtblm8Q=M+9T z3Xa_!$2qz?Zg4!{c-ry4W1?e;qs0+7yF8wLLpOb;D_{Lq?S;LyAse@OYuu0f^>DuA z^cQ?_7kARjy`rnUYxm$HFZ~Lx`s(lNef;GJ{sgXqKtZG+xr8#)WO+V_+?54-P#Jh7 z9|F0THA3xnq+CmE`QCXwj`oQXtS}aq8Ce1!_sHjaqFjKz?Kz;9Oo4L*T=GW%qX0=+ z>AfeEyL^lAe@2;1H7#-d_v&Y@{oRD}KV=3YcDbk;xVHV!z`>TQ*XWbwvSMWB!uiXC zROSmK-Y^i#(y~9s9_(X>`C)WmAfx|pcuGDqKbj!s(efHncEua~T2&f<&n?rX2?EQp z>Sgng9%*dk*TzS=)$7RhhJbWR#UCM)f~M9PbvZ0;sr+lKKk$$C72Fjhh0;saj*dX; zTJa8UXTZNn&*MPGGBdvZUomawwwi<#0Kp0-d^8+wQ@4)s1U?PvDN8vPMoot7^!SPm zb)EM-kxKR)zmpY_v5rt}h8kj&YpE+_2Obc4B0x?g4v5(2@wfw5;;Q1loM@uK?Ww0} zqTTtupQdOirxTNG{#tRu-;Vc4S#^3O-RfVaNeS{4gLKjv-Td_0MT!IgLkls==eIR6 zv!U$9jv1T{al*xXmhXBN=KB@}q9`MXXbARjSEXkYdd09sz1bqXFHUyU9lxZei-Gd- z35mS&8^E&hWYOzc8)PdODxcXat?Xl4&$k23M|v#jzNqb#H%XkqH42E%uV6O1Sx|LIsh?#1PhM~oA#|Gn~c;Nc#k=MOi8+`UotMSDUqpIaWI{tX%|f|6F+Tk7mA=sWM3 zb+iee*vAr->Ao_f-9_33*^#cDC;FDh!6K%OvyH;b zXTDDoKljealgJ|2r2YlNe}DalIX5XgypdLHmRB?9oF`raxz=P*zYyj7qAE-dt|aGv zt;JuV09pSXqsA-(xo0#tWCKHiekRFuVl=nKW9ervKl|E<%c7p;Mjk3ctM)h3~~)I)8?q;IPBo3tRQf8mIhz% zPDvnd9wRQKH9}X5+v=L6&qBA?Ul-=E|LFMzEi7xvo`Z=UWIIUW0>B{f=vH5@K1%S$ z(M&Q0evM%n9erI;y<)w}lzE|r88o^p8S`AruR5JiFD1K;MrSk&1~CRR}Lfz|%@Y8~CR zAsOVi&2ipfwx7FBl1a(=`H3pku5Z{SK8x%oF}gi#<7ZC^ws>OSa4VGXiHG+{sA?cE zsGQ=s^NdL!;WNGyk_(Q}A&usckV>dHXiO|qNj{^aJmZ(|$OsIQWUQh*kQ(Ax@vh!RQrVlGDYE?kL{=k7=_Pce(g>JfODB$a}z0iDYRy(WPYnp_A%3qaj zN(^PF#zXHcPNE2BGY1-~$LM1X-NbL@ym`#?j36@#qtRm7*ySJPhDI%<`R&&@tTh-I zwC_XVUQx?`Ug`i5L(;-HR1u&@Py1_VSu z+d=uhurgs-HhEbhI8|S23SWw6+A_Ul`CB1gXR1CJ9=xfc&Ull$}9 zD{xIg{2*Y;;^_-BlIV)gK<`=V>8omHPsMkg%9+xQ`bg_E2F5We$mf zx9*X2J~U%IfK(ib5-) zLOm=;A62({80?5c*`D0Ab^AV!pomB0`u43F1*4ojJ%qx~jlKs{vFaV8OYWn4fyifT zV^xtaZph>_hkjC#)AaS;@cDbKT>y5dpTR5^R8){Lh2GnA^P)9Ow^^A>ns-k9c@wEI zkz>L4KuK^*fF3ZPVmPvF6T_?N+TRYcom1~m?7CZ$xo(w%{IOqbx!<24SpvaLg1ih% z8&DLimL#_Qy-bWl4i6wh9#Am(w7`J0-GB=m47&(bE&^GL>0M}#FUb=Ou^1D>**Uv6 z?arineqWzXS?coCxLEMlzcvO@G}_ZbxL~bIvXdpfOb9gk&H+P08}lz5+tNwu3T?|~ z5&RBdMq4%P?d3ft?ArvEG^?<$0mJp5c08<@J$GHGV!uEzmdMNOnZS7`V2JSHsWr_n zOnJWeKk^_WKG)6+KF0*GocBLv;>q|X+gQ!+@$4~zR5jQbeBWGPFjs1^c+%3OK?TG1 zG3R2VpjxpSf7nE^b>wAcD)Z5+OVxjRs1a{`llGRZURK2+`hYDjwab=GK_t%`Nxe2aGF6HABfUp86X|Yzzj4RHzy=O zGWcj8Nu0nj_SNg*5F|hveFgWBZH4O?%o&MKGi!S+%mVB=Pn(%V2%h#Ndd80oZ_Zcg zjApr1Ftselr4uVUe(ecSGU zyald7RYw>A`InGMpP8;B8boLNCK9A0tPxLajShjJS(|V zwOj)u@k}P}6NN#$8jPh*A5it)*1y`*k^TKeY0Ts`+Sp);_ryU$*c9`a!ItjM`MUBR z*}SLQevI7{mL<{|Jmo90nAc;qr-02X^eStx#>VFQ7mcphkebT&33jwL*!-h zn}5TgN`TKj;Lt+ZynKAckaER1PQnv`!a)X)uWkmmMG2JgWN!lL+NJSn?i7dxtn5@P zyM!FnawXWRD+NLU5fUlnM4@)~qX=L&qT*#{gD+;U_xQf1x~djp02Ho4TOp|mz(v6C zC~;XCu+!e~3vuzHrv67)C^aSd1@xCoE{~V}{F6f6c3O>WR~$0IvHVghVLO{2)zt|; z;3JXqgoJ`g4reC9y(|!llkATLSsw1YdG<%(eu3^AA%N_bh@5U=`cAP}P~eA#(B94? zVU%_UhXKDD0M$WpH2sck0F9{!$rl2?HGx=94t84rt%*P&7s%xCssSltJ&lzEWUWC?SGIvr>u#V^rQo-z>e)&4!rA`Iu> z^uGz+g~_)_-XvV$`;gwV%*>qD2kG45?3Gn5@k-5Zv~%kYQVB*dM7Gi1vR3{?U=x2d z{WY2kzTbz{lT?Y|P~j9)W?KDJ`~43CN&x@t3DXbXZ>oMBqK~x7rc^e0z?`@&N?%L> zTNEL{i#tYnaDy}=JVm;SvXdZSM@qm3yYmyp$Z}u&__`tZ11jtOG#+fL6R|~Zgba_) zJCWC|g%0qhGiAATl}?yhce$yQU*8EWVQ&a@ zh4wk%ki(9;WW;q(y!5R<{ar3yuDR!(Z{e9sE2DynDygR#eb!Lx+S>lU8R3XWI+fEf zO*3hx&C=O9$L8kzjtyeNxPwbqwZ5CY&AW6D?#n|Ebi(Pl9`}=ePM)jh&LQ)`avGPW zv#Y)AZC_8Y)p3?uX|=0-(YJlqzRqx_pS#|_LZkEO!TCJrav^^wBRL(=)J9a?vfgPx z^ZHKe%$7~ zyxq0g*X~Mg-#xu=zbgnbvS#5VY~~eCFWn19WE4D!>iAdrZ#vx;rJg8u5x40R;sfz- z$upAwRBm0lLFLvh+qP`qvSZ86EpuAFRr%}6yDRUle5&Q&(u6?6K;uAr)l}77)tbQi zz{a?O*8lp?xYiYlHC6syrGML3s=QVuTxDO|YwFJG-!y|XXa30fW6S@}{c(#0O?Nhx ztu$YlHPs%Ed_F%7oBp&GidPnSSW(k{dPFZ!)=b{P1-LnGp~>9@$9)@q=l_s(&G83@}agOi>ca*Ly%_~%x7LkPQs65p8dy=yfg|P=L+tzv&tK--ZWP;5dy= zgB1t$QSjg!gu-2-3c@OhWkIG%7ai0(D zXzBx{4yRQblU3HtDbiHhzkII=#9fwqml+M!dR8s4hT%Acngy>|qd+Ay&+lO37MV^9 z25)->@@F3|^ru{&tprNrvy*W~Jp9oqUJ)LClk#7uaw&JsIqz4`Owa#Q z>XiB!x_KL#L;rrr7c2xlEF}8qNE1<2u?PmtgJhUTlFQe`@H(n(H32e6PLiqY_zyQT zv5V;eOz%JZ7jM$y;hTH764&DKsOX)~)Y(NjS=qR?c1G4P+Qt=B5eD{&N3G&9eQ4Bq zEiFfGk(k!HVyErE5f(n~tk|^rY4b>YMQ!`png^uX^0(GBFUi^EvG6?VUC!Gm_kuJ-mV{$}mxER^DH#?FSI^?A-SUqzaP;JUz_T0kkXdalstK3j>HAJ!*53VL(hIPC?(eUo4IA6rM z5zCFOCq27EYYX!y3#u9ZhO$10=r{EXJUDfDwl@V)_Pr&Y0 z2%*uB2pRjq@7E4Lx!m5oUMt50xqd1PUQoVO+E3qyGnzih$m)G1>Vjfau4kfb?`TVf zgxZF$nHGhaQq_ywM(Rp&OI?#(vu5b0>T(sJKqWbn+h}+bV6r(GnO)Hj*g>Riy=BGN zfvXx_Qa55_O$CrF#Mu=2Dp#SO_F^uFSm2$k$v$%aGBOcWQ?b$a0G&^xS^;b5z^;}?UXG{T;%<4pN}Tx+nqABGULk4Z(9$(M z^AcFgYp~eZ{bxYgsvY>6oE?EbNnrNE*Njg;)s8xR{$w}B_v3C)EN;k6dv%5^F5_mT z$|W+Y!~H>x!D&qOD|_e0**X4R8P(N2Trx0u8j!xHGmltaHx1_2*3-r1iR%NxC0T1p zZojXEcrTj0c=d|3l*O|TY}{g?dU#)-zPGBewZ_51@sb6CBCmT}{SeZh90>HBHmJdC zQcc+s=m|CcOZv$cyLjpo7H!2#D2fI z)NFl>gOx}}>y!WD)pm(?czVKU+fxgk<<;{7<@5PsYks*|7TzZ8H-LjA;vJj_sk2>F zL*l)jn$@e1>)f^F`7cPD*`0%l#p7eEVm1#+d$|ErG|$2rvK)+bjYrrcdk#%( zSs6|o#-TOYiCeU(e>{iK(1T{ZXIg1O=x^`q>$7`sD4TlsY8+DYty7E#C&_TE-1KR=mxM{^`GGi*&l zVr&fM1^Sr?^UHrlXPK2f(`+COz| zTo1bYbzq$tb7h;aL;BIki=AhR)WDmVNW=2_9opw<0cQw~d~_oAw&p}!Mp$TS=IT!D zca9IbBUyvbEeX=Gq&*Bis*N5R*9veDNCe$z=xeP?_wl=^TvGWaTAgS>dRr!C|1ddt zV=+SqX0EgtWHbPy1gGkDjd7!Y-|4x;sDtk7npa7a7r88&FnffX{{D7d$4wTt|JYC1 z-GEP1mI?v8sBnbAM|JKUNq2Ntr{qxRZ_lv2 z)nq1Y2zOFitFbWU>W$T@bCwL8GkuxMtba_}_Qm!L&FbCY7P7A7tW zk4VV~q~h1{8@d+6{1Hqq8irq!S-!Ajd=L?BX@Om5bJf6lnnUR?+9P{y(rn6GcTNdzg7bK3*=?Q z?>Bzuf`bS8&Z`UDQxF)z4`yz=IvuGwuK_TlZqTt#lKUQb17yp76)es5v~#JZdL z-rH43r^?W!sasvWKe8#Lhk2>Ap*?xyIIi}W7-E9UdtUTD2$FZYNJLPbl$OnXyswOj z2ZEZK+B+D-qLkUrGZqAt67xYWe;`teQ)`XoV*`Fg0Oh zxNm_%$63@;wX3I!_TSGI3V6aiEAd|m6*A1N{ZXmoEo|LcS!$s^`5ZzDG}Wx8 z6^r+Cet%o{y4jF>T6qqqk;}Eto+>)vAUEO0Wp}g2sxK`rT9`LXC(uyWU66%26|$%= zpBr7g;Q{1&yY~dKz1#+pD3dqVYRNXdEVVLnM2NrD(|W+9$jLKkl$@)J2(<1Ij?XVR zMIl^wgkmvDn2Fv*>?8T*!Od;*W45Ode*WEDv}Du%?M4bTKY#CizPZvV$~xlB>$fA` zi8f?#2ex@PI-Lg^ovx;QgTa!oUz2<5PvxlG@;&Na<>~XHc6qa`M6?C??RR>Z9QTwZ z!`&A|DEAv$&0DDQ;%BTy9dZi5bTy8>>k$7|HT~WxuL6xV&jQg%>VLfkPoK4Td^7u3&3Sn52(BdC+YPt68xt!R!+S%X67;mp;1S6T5N!xA z&=5-tko+l7P!+9(+i`-wx#h%XJuPgouU01G)H1ow)qT}}t)?Nhw4{(5PW$pY%!1c0 z_CM8++#nbuWxg!Q)3!D$v$^iRZO4ik+2pdN?MP@m7ZPV2`}L9h)xiHoSb2Z?Z5n4I zzOB7Xwk1-*<#8A3tQu_#L5`MOFzueJgMX#ji^t_Twzhe@NX~S5yGXg>7tb8R2Y{LY z2gMsPc&$+2TL5PT<39Bve9KY<;=8YMUhE>vxsFut1O05BpQ69=Cx<2AX@8XbgE<(I z!SVwCkkBgfd^(*(vCQwr_dN%~8VZ0t@FSlJ=7WA5Ed5=44>o22^zTNLtZzT!A$vER zjCrL7YWRW_EUJ~kcpd?sBe?kS$(Wm(;`r=1v09a;q6565)4z__f7&PWq}5GR&gmhZ z?=yh#>%l6j$g8FI9vkL7Fg<5P2dOGeNd~TrTR$hB(VcWCAbRwe_*aDS?*v2l)VZu> zyDsfM$u&8!{YX1akIanwsh%#4|BgxDDeA`HjlZ06PB^k$WO6y`3JPAla4i@(z}0oh zumaatI)Q@Q1;OWfN#=lj`wl(I=MMn6h?*}*o%6n85Ahsu`5y2MqxG+dnSvHc9n!sS8*i}B(3rAr|zqCEIKQ7U((s`gB*B2OWiiGZhcmH%1EAMlgDT?!`R0~_UD zv{XJ*a;kvLtTN$Kjoi8p@`q?8z+UytWd^z&neYIulCvH1LTfvutMrkaT%Y5Fa*iCU zmM)a%OCUd7c#{r+M)5Kb=#pj>WFZK55u-CURD_0P@aDOqtcZq~pA#_`=H#Wn{DiU{ zp^g9QlEo-?y2MDK>|5L!-x2qWKO1Tk?MEc^E@YYS&$BIZ`}q2&$Nr&x(9m0q)42wz zz2GIeUA^R%wVS9ldhC>t0?**A-G#C-w^s_*X>>~-<-ZT|~1nE*UlRXbz~uXM00-kGs{mrQY= zokHTwZ?fo@@?6gQ8E{+3nG(&Q9%#C^Uys>s$B|!C*Ii40BI+#`&Y0K0v3bt-zMC!% zybSgX?Fy4B6mHygiMjl^v%eC>OOluKcirGC9Dn!!DSyZHd(E^-6d{*0OJ3R>?(7d! zAXDe#THsLyBfN?DUUQZZs+(QL^D^jH{Tpw60L@OXi+k;t_l+-;!wfd~h~;!mrHR+* zGELO9EUx9B+;lFZ1kzuP89HWuAXuKUFn1KoCF%?>G_jE`@I*Nq2~4w&3Se%!l4Tazb@-=6G=Wr^3LJ$YQE6V2p#RYeD|HR*@6 zpI@rd6a=}=IHo(jQ83`x(ug2-)T;AehSS2`qd!U8t4`r);q?Rj*Yo}21=1}0yXw40 zMRGy9zdb{i$&O1oc1LZRlGC@_xao5yKAUlmBNxsHMBATJ-GgSRiTn~mmj%T^smDqA zU~@(fVByd2y*OiPOSkkWM$PTNloOF~Hckh#=F6%zDaII9G)|W`BJ82PtJ9X7Q%BCO z%++P>l)mXB zu$PhN1!rPdn?!Xd1Mu#kA&y)R;9@oQDz5^(xMIxO5}Dmf#qyMg?T3#u#q-kqZNJw} z42-uQXM#dq11DnF$L=9OzTBHVeaZ;fb^|B7%zPs4)=<&9V4FH4ftiq&z_-~?Tf8yN zn82)GXOKinIxp_m66VeI^tFuuL$gsj2=UFwB>|=!X4O_MtCk$USh=Zclkm^@O|~v3 z;<2@NGr4klTkY0bp>VL~Z5amteOE0DsI|V6NV9{azDk8M_U8naaEa#rwM;#=pLQtK z#mtQ5>6&KbuRO3}ViesyHhxs+f{(oSmhi79q zA`x}+fpC?iFS|KPbqVr|&`YSlm0zHvAit)c-H(1p*e^X3nXr}fdFTFe(+CaH!hrAb zhYZr$;8!A{;1J$450k7kdp2g*3i%)7Ie^7`P8La)7eM9p0xRJ1#{6(9+6qN7fG!(> zmfFFKAXp>|eg|H?15)i^)D=88*0>f795~5!>Ci&gI$dqEHCvrMT`p&5hue@N)fwbe z2vX2P^aVX8w&0CL!u|g*i~%5$3KaR&F5ljF!QR)u1=ySgkK=C_p;<{tqnrWY(5n8a zo>8ObT?hoP{mnpVAxJ*;FQ80j6Wu)xvT# ztH;vH`rTv7zS<8Bh#yHeXhy=}Uapg5JeyE5d$vHV_FtE|E0q-!maH%3lytUX!i1A^ zxZP_?GE@dg98E2OWqpG}C_W%W?Q?BZhgXPkf7uD*VTMsHJz)wS^n zcPrwSEEw#$WaY}V{^wd@;Z4rPeOeTJUIk`u=?9PwSiFj=^sOAMYmH^#sG(9k?$0Rg znX?-<)KQdq2}gV7I|F&y(>A+)^!=&#&F1yv`taQj4x7?WP0V+T>(**%z*}%PqrdDK zF}AjONMdcwr#;OP!5qw3A&aUcsP(e8N9!UP>SI0PAGmvV5{mFv`x%^v83D%pCkPfb z)3qwXIbX6~HcU%ihYq9_*=$jj`EHT5573KL_m6&se1@Ye#` z479mx6)6%VUvmhN?*3w1I_)nP9-QM{wyjLAl>7oGY#=WtpamKLuOq0t5xqz8-90g( z4;Z}YT_5DCtc_36J!PTw@QLm7D#NEyA0e#~mS`!hFuN}jDeBe-w_sJIR8C!)QtSy^ z8l;9*yv+piq`Re@Sc$o@|1E$_<(eS-Z4%m0PSD}^=OnX~kd8nvSI`EBKfL}5Q=$=+aSXY4T-0m`KG6y15; zS7*Jil>Eg@MO-K~d>jLp0f}z0ji(2s_<+vR$lHr_fe1^^y~5|+=3bGh!c^i0sU`N1 z7{+u1gx%P26NsMR(EKEd{(BG=9)m$KrSSe?6D1R+n^1#b4sFfX~)UQ#jEc@eY!(1bW)i*EBABqy%}$PqN7*s zHU9mNHzsgyd;&Lt`@c;y{>Q-Q>9Cc8u`whzF$E15?);Rh^wY|v)nvUsHP=GJmf7I2 zW6m0Jlaw)B5F!x=2@`z^%$T`}6SDu|Ro2vswzjK-o$prnd)&Kz>Ni9bVGbM20gmuM zAVOh5IAS0HhZ5A|CLSOL$;d)6Dq%qbK7okiJX}sky0eZY+{!zQV=^uLC7HBxRj{J8 zMxjbjs$|m1tP<7ezM_<%|Fgj<-eq4$I@Lvy(}gjoG4;8byNO9gDpH@OVhlk&I-%)J zsH8b9?#>1^sc9{$xu5#)JfvdWCU{~dbmC_HXoj2Osh;!WGY=+o;{LG>sKP0R>M48< zVw4ei&Md<6PDWsvbOm=LHN8~0UADPUNVX-u(&y(%QX|0wBfW}Pi7tJHoB_~EKjDn{90HrHJ(xwF93}I1(wl}f35=Ao;5u*;}wJrTn}DP2G(B#%EA>uNUhH@ z^+YurRYPhl9mIVq3PiQl>6VTs5c{wvs(Uxo+oXR&}?7B2* zP~ni4Xr?pJ0eRFcN`lr&+xa#ZvRKw$pz?jcg$|aIbaH@3V=F^(dZ~=| z=6q3ACIw??wY}O|Ofgy@MBi5(N5L0M2+nd6C@{ zxPY1*4D45U7nN-RVjQ`NU-qPe&m<7_goX-j^gw-YDyXJxkV1Jbf`!d@fRf|wv-Raq zKA!g1qw4LWm8JG?Wb~-+k{6PG+usX7sJUVMS? z7Au`{zYH@5OpoN%D(6dLO-j*)4_i&>kiPH1I zC#P>Dl!Dh<^dX|}sWo6{o&w4hBoc<6m$~5N@#HL?tF6O~{&U;>zocpleLxlO96Fb^ za40w^SsWEPEWVnKG}~gfwYD}}-L7U%qcNNGRKeFS62e4HJ6TI2y$q&{ovay<9uriu z{qADEcTFEh@>J=#M@b4qezU??alOQp z)IWtGi@^|j1B5i9$Gj*8>RS-njg-RodrGX8eO7>94-BnD+Nk#z0~mVEbbEVoC%Z4P z?TDA^U9Xt7aQ|p@iSr-IZG*4P>!f{ zbH|MrrnG>ss}7vBFmp&zMXOxTjx1Jq7U&qg4N>+NwFdYyKFlB+RWp_8@vL%`TItsU zzBPbY-)@>dHJxmm6ypkDC)krQXie*p{)4Svpy?OQUlz0^e#0?+%JTO@yxw012DGNF zuctu@S^`e@W9`!ioku?|^!V@9>;D?Ok32Fna0!B(zpGCpe@Y1@UA zVtd{+H8^l2sn|Q7eYUdl$@qprutg0RM?eLSc(`wa`iXs$pyCJiJXOY?KLT91m4tmA zj46hKMd0b;QYjf9^N^T@A3r2mr97XuK=d?ob%Qp31IUdQp=uquhfK{pbv=(>Jn1`p z#Fe=ueY#gF?Pga8$knpyx5{Y5#1|oc9~P8>J^pX;@v)5*PAdhh%*AX79OqL|X5+&j zqH*9%=h56{08?VN%7`r(c5%8vSu|bV2$b4s;!g9QXppD7M2Vk6MwV(yt`V}2+*tE00kRb3L4CI@ zdEx_0`v>2DwPkl>BkglauT-!zy!W}wX*rvd*jRE5cISa{L>0v<~TO*58{e5Gvn4mHgi}T+H`tu$(Gi`g@X!ygk*2a!+f}nn zl#5(HO38+RC+)V1)c#p-dsENn)m;HVZ0%oHSG2c(Z=2lWxN6wrra=IJKa-i|_@cc9 zNHE(00b}Tel`6iUJ$)S#sd6v6{95X1YCC!|k_nyIX_+tQ+`O6(_>?to_BQNiyKE2a zrMRf|(B5-i=3CYN5QJm;`^W!f-AS07dVIr8t zOOPx>mO{nK*wky%tW~Ej-Fo!9#m-Cz}MKA^vTNI!zqWnt8>fBMg{k(aghU-179(a9NZWRE=F3dXUze za%lC@S6in?z?h(iAroX>fk#T@Pmv)RY}kgdlTk5)z)`@-F&Ln5oLBBt3T?|K4-pTT zD&XV@p%_-XBjQleWrJ?$fqusHARChy&4!5r$&d*)Xm(?vscyisF<($Zfz_+^uT?dg=Mux>PmCr4;zZ5iOx6n)OrfMf+>hG1({BTxfoj8!Fe zXXI*{ChhtUxQ?a-=^b^HWS6Oj9AKX$g+mnT2S5AuWjAU}A*!PN{ZhQ26Vf~YB5l2Y7TZ0j6wH_M7- zIVs0i?nw!QqoHFUY5w&Fg!7o}8HwZW-Lnoh|1p=!XAuA2Nz_7$*ZUyLdvWsFdoS(p z*{J$zyJ)z&5Ro=ACUpVk*sji~MvPT?oF{lDPv>cj@m-R{EDm%b9{8h8!}3}h=*R#z zA9HIY9TiuEr*bqc`STTd)ltVFcWc+uGqWmWbKD8I`jv^Y1d9sAl|cX_vsg(oVCGu^ zv%pH2g;v2VvKnTwH88{0!Yr{4W~ucs%WQyIZlhCrSA`K#xL41cW(F(65<_s0;1hKZ zG(;q$2iJqe9gd>OD@*`(VL9xo6pDD&WwjA)tQN<73oNwAV#AhLYMJFh&5XfJ_c?g+ zu+-BdJrsypW&lIVYNq3v3wO{=^EjK`N6*mQB+Lx6-0(UuAD}#CO9C8Ym#@|FVT)#PSfPn)X@2)`)aao2W8PK3ays)&R-l z&{jY??+4d(1-Alx9x1IA&H(4@IQ8EMh*{@M>6gGi_SsfN1sLThnGBIcRF4sgatl>* zE?*{7eMJ6QFW8TBX`alpyDcdhrJ}TyGv!M8QK3{M6-!N~_GF!%7G;NXqK_ZBACTfF z)P{yxAofyF4it5ACV%6Hvy6SeRu}N$UdPaRRb@x9C9zByE5PV<(+oO8Q(kNw}Fi%-eaaS>wU09>FDNeyuWPQJ)C@D zobs(rc6#i&Cti5qmS5dA)n(uL${l~ZXVfaI{q6@h?eUM5rWrBMTtjvvkGm2J6v&Y)Pm*%gDpaaf z<&7GXP13GIuLgY#>RfcmS?67F&O?vvg#chl_~QQ8hBSWoSJK750|2l8nh*X40B<)d zTt28fv0^-h0B{&cwwiP=ZAp<5`a1uI&SMS1hv{DcqX7G*e5`SQBAafOdd~P6PosxE z2D*u0A^d|SCyLq0@_#;*d(9gcj`>}h4qd>a(D^qHi~#}yxqi6PVQef^E+eRZzkB&i z7u~EAUb;V~+~>!e-S{<#b3tX(4GZ+%ZI|w0{D)Eq!ocHX0!CI$EsJ(y^qjv?PC~q+ zSOPU(&09vHk?589hE1{zu}S>L;XE1Xi}p(-n}E^KHxYg0{R2)D&R8q;IPjrp7t&>c zOj<}r>Yx!C2mP3+`)fa4-*lKN?l1-7Apl(6J_HsnaE4ePH**R%@*d6=;W^x*Nsm_g zrr@Ur{n(eWURw5YbIP%$ivy9Clk2OA4gh~KdPU92_u@RQHU?Otl3Yq^)dD59o}udw zsbU{3`=H30NLzqUJVT?H$ukDYYD7w6WFcCrQA>a9uevbE)$f zh-a*!p7SgU@e@=s%Q$lun6t>hUBl~wzjd4&s;sg?K#Y%+CHSD8`YtvZuY z+*R_(m{Lc#YSAJ46>d|_@H7MXodew7#UI2+{T5B(vQ#_PF^kn1s + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apps/video/remotion.config.ts b/apps/video/remotion.config.ts new file mode 100644 index 0000000000..6fd1b558e1 --- /dev/null +++ b/apps/video/remotion.config.ts @@ -0,0 +1,11 @@ +/** + * Note: When using the Node.JS APIs, the config file + * doesn't apply. Instead, pass options directly to the APIs. + * + * All configuration options: https://remotion.dev/docs/config + */ + +import { Config } from "@remotion/cli/config"; + +Config.setVideoImageFormat("jpeg"); +Config.setOverwriteOutput(true); diff --git a/apps/video/src/Root.tsx b/apps/video/src/Root.tsx new file mode 100644 index 0000000000..3850849cf2 --- /dev/null +++ b/apps/video/src/Root.tsx @@ -0,0 +1,94 @@ +import "./index.css"; +import "./fonts"; +import { Composition, Folder } from "remotion"; +import { + intelligencePlatformDurationInFrames, + IntelligencePlatform, +} from "./compositions/IntelligencePlatform"; +import { ArrivalScene } from "./compositions/bubbly-intelligence/ArrivalScene"; +import { InsightScene } from "./compositions/bubbly-intelligence/InsightScene"; +import { InvestigationScene } from "./compositions/bubbly-intelligence/InvestigationScene"; +import { MovementScene } from "./compositions/bubbly-intelligence/MovementScene"; +import { OutroScene } from "./compositions/bubbly-intelligence/OutroScene"; +import { PromiseScene } from "./compositions/bubbly-intelligence/PromiseScene"; +import { ProofScene } from "./compositions/bubbly-intelligence/ProofScene"; +import { SignalScene } from "./compositions/bubbly-intelligence/SignalScene"; + +export const RemotionRoot: React.FC = () => ( + <> + + + + + + + + + + + + +); diff --git a/apps/video/src/compositions/IntelligencePlatform.tsx b/apps/video/src/compositions/IntelligencePlatform.tsx new file mode 100644 index 0000000000..cf7519d404 --- /dev/null +++ b/apps/video/src/compositions/IntelligencePlatform.tsx @@ -0,0 +1,54 @@ +import { Audio } from "@remotion/media"; +import { interpolate, Series, staticFile } from "remotion"; +import { ArrivalScene } from "./bubbly-intelligence/ArrivalScene"; +import { InsightScene } from "./bubbly-intelligence/InsightScene"; +import { InvestigationScene } from "./bubbly-intelligence/InvestigationScene"; +import { MovementScene } from "./bubbly-intelligence/MovementScene"; +import { OutroScene } from "./bubbly-intelligence/OutroScene"; +import { PromiseScene } from "./bubbly-intelligence/PromiseScene"; +import { ProofScene } from "./bubbly-intelligence/ProofScene"; +import { SignalScene } from "./bubbly-intelligence/SignalScene"; + +export const intelligencePlatformDurationInFrames = 480; + +export function IntelligencePlatform() { + return ( + <> +

+ + + *when there is one + + + ); +} diff --git a/apps/video/src/compositions/bubbly-intelligence/InvestigationScene.tsx b/apps/video/src/compositions/bubbly-intelligence/InvestigationScene.tsx new file mode 100644 index 0000000000..d8814a37cd --- /dev/null +++ b/apps/video/src/compositions/bubbly-intelligence/InvestigationScene.tsx @@ -0,0 +1,100 @@ +import { interpolate, useCurrentFrame } from "remotion"; +import { + Bubble, + BubblePill, + BubblyCanvas, + bubbleColors, + KineticText, + PixelBunny, +} from "./shared"; + +const milestones = ["new evidence", "reply", "recheck", "resolved"]; + +export function InvestigationScene() { + const frame = useCurrentFrame(); + + return ( + + + + WORTH ACTING ON? + + + MAKE IT AN + + + INVESTIGATION. + +
+ {milestones.map((milestone, index) => ( +
+ + {milestone} + + {index < milestones.length - 1 ? ( +
+ ) : null} +
+ ))} +
+ + + ); +} diff --git a/apps/video/src/compositions/bubbly-intelligence/MovementScene.tsx b/apps/video/src/compositions/bubbly-intelligence/MovementScene.tsx new file mode 100644 index 0000000000..84003dd518 --- /dev/null +++ b/apps/video/src/compositions/bubbly-intelligence/MovementScene.tsx @@ -0,0 +1,67 @@ +import { + Bubble, + BubblePill, + BubblyCanvas, + bubbleColors, + KineticText, +} from "./shared"; + +export function MovementScene() { + return ( + + + YOUR PRODUCT + + + MOVES. + + + Traffic + + + Funnels + + + Errors + + + Goals + + + + + ); +} diff --git a/apps/video/src/compositions/bubbly-intelligence/OutroScene.tsx b/apps/video/src/compositions/bubbly-intelligence/OutroScene.tsx new file mode 100644 index 0000000000..5856e95115 --- /dev/null +++ b/apps/video/src/compositions/bubbly-intelligence/OutroScene.tsx @@ -0,0 +1,57 @@ +import { + BrandLockup, + Bubble, + BubblePill, + BubblyCanvas, + bubbleColors, + KineticText, + PixelBunny, +} from "./shared"; + +export function OutroScene() { + return ( + + + + + + DATABUDDY + + + INTELLIGENCE. + + + powered by Databunny + + + databuddy.cc + + + + ); +} diff --git a/apps/video/src/compositions/bubbly-intelligence/PromiseScene.tsx b/apps/video/src/compositions/bubbly-intelligence/PromiseScene.tsx new file mode 100644 index 0000000000..ec10006c06 --- /dev/null +++ b/apps/video/src/compositions/bubbly-intelligence/PromiseScene.tsx @@ -0,0 +1,54 @@ +import { interpolate, useCurrentFrame } from "remotion"; +import { Bubble, BubblyCanvas, bubbleColors, KineticText } from "./shared"; + +const promises = [ + { color: bubbleColors.cream, from: 0, text: "WHAT CHANGED." }, + { color: bubbleColors.amber, from: 17, text: "WHY IT MATTERS." }, + { color: bubbleColors.mint, from: 34, text: "WHAT NEXT." }, +]; + +export function PromiseScene() { + const frame = useCurrentFrame(); + + return ( + + {promises.map((promise, index) => ( + + {promise.text} + + ))} + + + + ); +} diff --git a/apps/video/src/compositions/bubbly-intelligence/ProofScene.tsx b/apps/video/src/compositions/bubbly-intelligence/ProofScene.tsx new file mode 100644 index 0000000000..6406460a36 --- /dev/null +++ b/apps/video/src/compositions/bubbly-intelligence/ProofScene.tsx @@ -0,0 +1,79 @@ +import { Img, interpolate, staticFile, useCurrentFrame } from "remotion"; +import { + Bubble, + BubblePill, + BubblyCanvas, + bubbleColors, + KineticText, +} from "./shared"; + +export function ProofScene() { + const frame = useCurrentFrame(); + + return ( + + + + THE RECEIPTS. + +
+ +
+
+ + Evidence-backed + + + ); +} diff --git a/apps/video/src/compositions/bubbly-intelligence/SignalScene.tsx b/apps/video/src/compositions/bubbly-intelligence/SignalScene.tsx new file mode 100644 index 0000000000..e573de3895 --- /dev/null +++ b/apps/video/src/compositions/bubbly-intelligence/SignalScene.tsx @@ -0,0 +1,62 @@ +import { + Bubble, + BubblePill, + BubblyCanvas, + bubbleColors, + KineticText, +} from "./shared"; + +export function SignalScene() { + return ( + + SIGNAL} + phase={1} + size={570} + style={{ left: 1014, top: 250 }} + textColor={bubbleColors.ink} + /> + + + + NOISE OUT + + + FIND THE + + + SIGNAL. + + + meaningful change + + + ); +} diff --git a/apps/video/src/compositions/bubbly-intelligence/shared.tsx b/apps/video/src/compositions/bubbly-intelligence/shared.tsx new file mode 100644 index 0000000000..89e901e68d --- /dev/null +++ b/apps/video/src/compositions/bubbly-intelligence/shared.tsx @@ -0,0 +1,288 @@ +import type { CSSProperties, PropsWithChildren, ReactNode } from "react"; +import { + AbsoluteFill, + Easing, + Img, + interpolate, + spring, + staticFile, + useCurrentFrame, + useVideoConfig, +} from "remotion"; +import { databuddyFontFamily } from "../../fonts"; + +export const bubbleColors = { + amber: "#E3A514", + coral: "#B74677", + cream: "#F4EEDC", + ink: "#18181C", + mint: "#38D996", + offWhite: "#E7E8EB", + purple: "#453C7C", + softInk: "#27282D", +} as const; + +const popConfig = { + damping: 12, + mass: 0.62, + stiffness: 220, +}; + +export const easeSnap = Easing.bezier(0.16, 1, 0.3, 1); + +export function popIn(frame: number, fps: number, from = 0) { + return spring({ + config: popConfig, + fps, + frame: Math.max(0, frame - from), + }); +} + +export function BubblyCanvas({ + background, + children, + gradient = "none", + grid = true, +}: PropsWithChildren<{ + background: string; + gradient?: "one" | "two" | "none"; + grid?: boolean; +}>) { + const frame = useCurrentFrame(); + + return ( + + {gradient === "none" ? null : ( + + )} + {grid ? ( + + ) : null} + {children} + + ); +} + +export function Bubble({ + color, + from = 0, + label, + phase = 0, + size, + style, + textColor = bubbleColors.ink, +}: { + color: string; + from?: number; + label?: ReactNode; + phase?: number; + size: number; + style: CSSProperties; + textColor?: string; +}) { + const frame = useCurrentFrame(); + const { fps } = useVideoConfig(); + const progress = popIn(frame, fps, from); + const wobble = Math.sin((frame + phase) / 7) * 3; + + return ( +
+ {label} +
+ ); +} + +export function BubblePill({ + accent, + children, + from = 0, + style, +}: PropsWithChildren<{ + accent: string; + from?: number; + style?: CSSProperties; +}>) { + const frame = useCurrentFrame(); + const { fps } = useVideoConfig(); + const progress = popIn(frame, fps, from); + + return ( +
+ {children} +
+ ); +} + +export function KineticText({ + children, + color = bubbleColors.offWhite, + from = 0, + fontSize, + style, +}: PropsWithChildren<{ + color?: string; + from?: number; + fontSize: number; + style?: CSSProperties; +}>) { + const frame = useCurrentFrame(); + const { fps } = useVideoConfig(); + const progress = popIn(frame, fps, from); + + return ( +
+ {children} +
+ ); +} + +export function PixelBunny({ + from = 0, + style, +}: { + from?: number; + style?: CSSProperties; +}) { + const frame = useCurrentFrame(); + const { fps } = useVideoConfig(); + const progress = popIn(frame, fps, from); + + return ( + + ); +} + +export function BrandLockup({ style }: { style?: CSSProperties }) { + return ( + + ); +} diff --git a/apps/video/src/fonts.ts b/apps/video/src/fonts.ts new file mode 100644 index 0000000000..1bb8126494 --- /dev/null +++ b/apps/video/src/fonts.ts @@ -0,0 +1,27 @@ +import { loadFont } from "@remotion/fonts"; +import { staticFile } from "remotion"; + +export const databuddyFontFamily = "LT Superior"; + +export const fontsReady = Promise.all([ + loadFont({ + family: databuddyFontFamily, + url: staticFile("lt-superior-regular.woff2"), + weight: "400", + }), + loadFont({ + family: databuddyFontFamily, + url: staticFile("lt-superior-medium.woff2"), + weight: "500", + }), + loadFont({ + family: databuddyFontFamily, + url: staticFile("lt-superior-semibold.woff2"), + weight: "600", + }), + loadFont({ + family: databuddyFontFamily, + url: staticFile("lt-superior-bold.woff2"), + weight: "700", + }), +]); diff --git a/apps/video/src/index.css b/apps/video/src/index.css new file mode 100644 index 0000000000..9b3069263f --- /dev/null +++ b/apps/video/src/index.css @@ -0,0 +1,9 @@ +:root { + font-family: "LT Superior", Arial, Helvetica, sans-serif; + color: #e7e8eb; + background: #18181c; +} + +* { + box-sizing: border-box; +} diff --git a/apps/video/src/index.ts b/apps/video/src/index.ts new file mode 100644 index 0000000000..f31c790edb --- /dev/null +++ b/apps/video/src/index.ts @@ -0,0 +1,4 @@ +import { registerRoot } from "remotion"; +import { RemotionRoot } from "./Root"; + +registerRoot(RemotionRoot); diff --git a/apps/video/tsconfig.json b/apps/video/tsconfig.json new file mode 100644 index 0000000000..bd7d684bb0 --- /dev/null +++ b/apps/video/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig/default.json", + "compilerOptions": { + "noEmit": true + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "remotion.config.ts"] +} diff --git a/bun.lock b/bun.lock index 0dff8b7121..6901076da5 100644 --- a/bun.lock +++ b/bun.lock @@ -435,6 +435,23 @@ "kafkajs": "^2.2.4", }, }, + "apps/video": { + "name": "@databuddy/video", + "version": "1.0.0", + "dependencies": { + "@remotion/cli": "4.0.502", + "@remotion/fonts": "4.0.502", + "@remotion/media": "4.0.502", + "react": "catalog:", + "react-dom": "catalog:", + "remotion": "4.0.502", + }, + "devDependencies": { + "@types/react": "catalog:", + "@types/react-dom": "catalog:", + "typescript": "catalog:", + }, + }, "packages/ai": { "name": "@databuddy/ai", "version": "0.1.0", @@ -1175,6 +1192,8 @@ "@databuddy/validation": ["@databuddy/validation@workspace:packages/validation"], + "@databuddy/video": ["@databuddy/video@workspace:apps/video"], + "@date-fns/tz": ["@date-fns/tz@1.4.1", "", {}, "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA=="], "@dqbd/tiktoken": ["@dqbd/tiktoken@1.0.22", "", {}, "sha512-RYhO8xeHkMNX5Ixqf4M1Ve3siCYJY/dI0yLnlX4M4oIEDOvjMIQ+E+3OUpAaZcWTaMtQJzGcDAghYfllpx3i/w=="], @@ -1431,6 +1450,12 @@ "@mdx-js/mdx": ["@mdx-js/mdx@3.1.1", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", "acorn": "^8.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", "recma-build-jsx": "^1.0.0", "recma-jsx": "^1.0.0", "recma-stringify": "^1.0.0", "rehype-recma": "^1.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "source-map": "^0.7.0", "unified": "^11.0.0", "unist-util-position-from-estree": "^2.0.0", "unist-util-stringify-position": "^4.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ=="], + "@mediabunny/aac-encoder": ["@mediabunny/aac-encoder@1.50.8", "", { "peerDependencies": { "mediabunny": "^1.0.0" } }, "sha512-A5Se/LZd6RmYq/h36lBMSEsHvsyW8d0toR7FrAwpsFYbK+DVQYf90KiBT1Aw/mzLXx8/ypIOORJnd1sVZqOvJQ=="], + + "@mediabunny/flac-encoder": ["@mediabunny/flac-encoder@1.50.8", "", { "peerDependencies": { "mediabunny": "^1.0.0" } }, "sha512-4cfN03SbEoQaG+eBeYFUAb1R1ALaAHzf43dXFzQTr/oO5ueqzTgBoG3coKrIvBaAMU7Vv36mrBKLX8bvTppdAQ=="], + + "@mediabunny/mp3-encoder": ["@mediabunny/mp3-encoder@1.50.8", "", { "peerDependencies": { "mediabunny": "^1.0.0" } }, "sha512-eBT/H30tTu8AmZXqZ5RTpJ9VmwVlwednajuOrrWp0GS6cbGXsGMQ60Qvr3ZMIE0QDiadlEzb8/ozR+doP+MC1g=="], + "@mermaid-js/parser": ["@mermaid-js/parser@1.1.1", "", { "dependencies": { "@chevrotain/types": "~11.1.1" } }, "sha512-VuHdsYMK1bT6X2JbcAaWAhugTRvRBRyuZgd+c22swUeI9g/ntaxF7CY7dYarhZovofCbUNO0G7JesfmNtjYOCw=="], "@mishieck/ink-titled-box": ["@mishieck/ink-titled-box@0.3.0", "", { "peerDependencies": { "ink": "^6.0.0", "react": "^19.1.0", "typescript": "^5" } }, "sha512-ugzVH9hixp3hwKfQ8On/qnsrdAxS3y9rTu/aGOFed4zVUvtZyGZNIR4rxAwXult8HKI4vJEh0OM8wib9NPrwUg=="], @@ -1439,6 +1464,18 @@ "@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.29.0", "", { "dependencies": { "@hono/node-server": "^1.19.9", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", "express": "^5.2.1", "express-rate-limit": "^8.2.1", "hono": "^4.11.4", "jose": "^6.1.3", "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.25 || ^4.0", "zod-to-json-schema": "^3.25.1" }, "peerDependencies": { "@cfworker/json-schema": "^4.1.1" }, "optionalPeers": ["@cfworker/json-schema"] }, "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ=="], + "@module-federation/error-codes": ["@module-federation/error-codes@0.22.0", "", {}, "sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug=="], + + "@module-federation/runtime": ["@module-federation/runtime@0.22.0", "", { "dependencies": { "@module-federation/error-codes": "0.22.0", "@module-federation/runtime-core": "0.22.0", "@module-federation/sdk": "0.22.0" } }, "sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA=="], + + "@module-federation/runtime-core": ["@module-federation/runtime-core@0.22.0", "", { "dependencies": { "@module-federation/error-codes": "0.22.0", "@module-federation/sdk": "0.22.0" } }, "sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA=="], + + "@module-federation/runtime-tools": ["@module-federation/runtime-tools@0.22.0", "", { "dependencies": { "@module-federation/runtime": "0.22.0", "@module-federation/webpack-bundler-runtime": "0.22.0" } }, "sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA=="], + + "@module-federation/sdk": ["@module-federation/sdk@0.22.0", "", {}, "sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g=="], + + "@module-federation/webpack-bundler-runtime": ["@module-federation/webpack-bundler-runtime@0.22.0", "", { "dependencies": { "@module-federation/runtime": "0.22.0", "@module-federation/sdk": "0.22.0" } }, "sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA=="], + "@msgpackr-extract/msgpackr-extract-darwin-arm64": ["@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-LCkGo6JDfaBhgST7UpPWgNgLINpcpabaHfyz5OBx75nUYxBsaEPxjnyNjWpeb/xBup/682QnBfRBy2/LvPutZQ=="], "@msgpackr-extract/msgpackr-extract-darwin-x64": ["@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-zExlW9zUJKZH/tOtVMttwjKa4Xm/3KcNjnE3dPN92uCktwavMxpgCA3MoJK/DOnTWsQgo224OaST27/mPNAf+w=="], @@ -1953,6 +1990,60 @@ "@reduxjs/toolkit": ["@reduxjs/toolkit@2.12.0", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@standard-schema/utils": "^0.3.0", "immer": "^11.0.0", "redux": "^5.0.1", "redux-thunk": "^3.1.0", "reselect": "^5.1.0" }, "peerDependencies": { "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" }, "optionalPeers": ["react", "react-redux"] }, "sha512-KiT+RzZbp6mQET+Mg+h2c97+9j1sNflUxQkIHI7Yuzf6Peu+OYpmkn6nbHWmLLWj+1ZODUJFwGZ7gx3L9R9EOw=="], + "@remotion/bundler": ["@remotion/bundler@4.0.502", "", { "dependencies": { "@remotion/media-parser": "4.0.502", "@remotion/studio": "4.0.502", "@remotion/studio-shared": "4.0.502", "@remotion/timeline-utils": "4.0.502", "@rspack/core": "1.7.11", "@rspack/plugin-react-refresh": "1.6.1", "css-loader": "7.1.4", "esbuild": "0.28.1", "react-refresh": "0.18.0", "remotion": "4.0.502", "style-loader": "4.0.0", "webpack": "5.105.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-i7n4w1yATpfzAfWD1Rd4414L45vTgqW221CEXBvy0jU0K9wW2EaHTOiRcmv9uNTL0wvBQ4qHgTem115rt1bDYg=="], + + "@remotion/canvas-capture": ["@remotion/canvas-capture@4.0.502", "", { "dependencies": { "mediabunny": "1.50.8", "remotion": "4.0.502" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-2Rc+9nKLc3v89QSq5wha64NXccybw1+g+vzspMQfgeX8D4dYXlPV+CSfy1sZobjSHD2NFPxC1lYX58thJUiRtw=="], + + "@remotion/captions": ["@remotion/captions@4.0.502", "", {}, "sha512-TR8uUHT7RqpvX2xdzDxD4e/zHP+gzrLTe2xX6TcK7fl2Kf434N4k6U5u6aCrTokESrRzdv4/guJDKzH9M5fHxw=="], + + "@remotion/cli": ["@remotion/cli@4.0.502", "", { "dependencies": { "@remotion/bundler": "4.0.502", "@remotion/media-utils": "4.0.502", "@remotion/player": "4.0.502", "@remotion/renderer": "4.0.502", "@remotion/studio": "4.0.502", "@remotion/studio-server": "4.0.502", "@remotion/studio-shared": "4.0.502", "dotenv": "17.3.1", "minimist": "1.2.6", "prompts": "2.4.2", "remotion": "4.0.502" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" }, "bin": { "remotion": "remotion-cli.js", "remotionb": "remotionb-cli.js", "remotiond": "remotiond-cli.js" } }, "sha512-22ocr7eVgWeLVEUyutY33S/OZjW9KOuPPDMd9fGg2wFAct96u1VAajbstjAk/Kjo6wE4vXDE0GGg9wHY9MRbGw=="], + + "@remotion/compositor-darwin-arm64": ["@remotion/compositor-darwin-arm64@4.0.502", "", { "os": "darwin", "cpu": "arm64" }, "sha512-i0p+NZopaOz02e8aEfSkgYoAZFQX3dUCrkeOCu6iltbyA0hIv0Dtn8kzupkLwcp5Nu7k36UvxaiDDEB+oY6/qg=="], + + "@remotion/compositor-darwin-x64": ["@remotion/compositor-darwin-x64@4.0.502", "", { "os": "darwin", "cpu": "x64" }, "sha512-vEgA2gUl/rGaoUPPrwtb+4MgH+kn/YFNMDdRxuh8nWRELc8uG7GkIEg0quVrELXVCRQ9XtygmE2BioDzVq6jwQ=="], + + "@remotion/compositor-linux-arm64-gnu": ["@remotion/compositor-linux-arm64-gnu@4.0.502", "", { "os": "linux", "cpu": "arm64" }, "sha512-6LTjSwbsuc79eLPLjPQ9X22aKifJJUdTb3p3wZbQvE89ZGFd6ugMuKFKILgf7kgt3ZWhccIGmX97n2GPmq95iw=="], + + "@remotion/compositor-linux-arm64-musl": ["@remotion/compositor-linux-arm64-musl@4.0.502", "", { "os": "linux", "cpu": "arm64" }, "sha512-rG32IsA3WmvCVBNwl0k3dYR78BiuuvRWfYgwfxyyBZb6Qc9E1pmNlsAb8fWk59aj1uF0uIxuyuISEOlgD51Nog=="], + + "@remotion/compositor-linux-x64-gnu": ["@remotion/compositor-linux-x64-gnu@4.0.502", "", { "os": "linux", "cpu": "x64" }, "sha512-5plH/9dNyzkjpu3R3xkpUKsj/Lq/gvMm79AJgGyK+GcU09/SVydKcmQRSoXI7l4NpxG33Ts4PHm+EYheF8duQw=="], + + "@remotion/compositor-linux-x64-musl": ["@remotion/compositor-linux-x64-musl@4.0.502", "", { "os": "linux", "cpu": "x64" }, "sha512-v9pZcmGssjRx9jTfIe34NazuQ5wEMkh8nx0YB9Q+oxraeh+uxZYg27tWhXeiq3YXQ7pFpXNShEoOVh53UKqHUg=="], + + "@remotion/compositor-win32-x64-msvc": ["@remotion/compositor-win32-x64-msvc@4.0.502", "", { "os": "win32", "cpu": "x64" }, "sha512-EkjffLigHmJJS7Zo1ychvq/GOeIhEg1gejiWdiZK2nnYnTJrcbnyYy7dOT8nR4us6vJOH82ikbxaClkYdUfnZw=="], + + "@remotion/fonts": ["@remotion/fonts@4.0.502", "", { "dependencies": { "remotion": "4.0.502" } }, "sha512-6f88GaMLTD3sfiaU8roe7FriC5BHlleYOLeMlDMXNxwKGvDmXhspVTbM/Snxqh0tZRWdG0I1RQTXPSkoMl5BTg=="], + + "@remotion/licensing": ["@remotion/licensing@4.0.502", "", {}, "sha512-BaeD7ZkFfp2TAltg+cSW6HpY7urNojZTlkxISSgETrSw4HcrlqTFIjsa2bw6ZI9nDINahHS0S7/5uT5VOUM9dA=="], + + "@remotion/media": ["@remotion/media@4.0.502", "", { "dependencies": { "mediabunny": "1.50.8", "remotion": "4.0.502", "zod": "4.4.3" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-D3nGdeAfdfP66codDfIp5YhYsNfUEPBA6acgb34mTpTOQHChiKy8LastJoKgNL4TmVxglcuDqg3drssI0Y2OFQ=="], + + "@remotion/media-parser": ["@remotion/media-parser@4.0.502", "", {}, "sha512-b/7E2SzENAdF+j5EOLecZm9r7segPLPGwSwbnAFK9aq50lyftb2r3wtVJimX/7mRp1Ce2zDdjIFLt8zj7PfHhQ=="], + + "@remotion/media-utils": ["@remotion/media-utils@4.0.502", "", { "dependencies": { "mediabunny": "1.50.8", "remotion": "4.0.502" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-nSFEa/ASRyw9EtFv4rVXBcpOga3uK9m0VEtkVG4LKouJiLxsKw8R2wO+CHhTLN+wIx8dro6M4XUpMIoAZpZRqw=="], + + "@remotion/player": ["@remotion/player@4.0.502", "", { "dependencies": { "remotion": "4.0.502" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-deuxNV/e5tyaBZ7PH+68Vs4rgjpifZe4+Ryzj4feICKDpDsrgVFQIIYgiKt3DEAs60daY+ExqlcH/86abjX1GQ=="], + + "@remotion/renderer": ["@remotion/renderer@4.0.502", "", { "dependencies": { "@remotion/licensing": "4.0.502", "@remotion/streaming": "4.0.502", "execa": "5.1.1", "remotion": "4.0.502", "source-map": "0.8.0", "ws": "8.21.0" }, "optionalDependencies": { "@remotion/compositor-darwin-arm64": "4.0.502", "@remotion/compositor-darwin-x64": "4.0.502", "@remotion/compositor-linux-arm64-gnu": "4.0.502", "@remotion/compositor-linux-arm64-musl": "4.0.502", "@remotion/compositor-linux-x64-gnu": "4.0.502", "@remotion/compositor-linux-x64-musl": "4.0.502", "@remotion/compositor-win32-x64-msvc": "4.0.502" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-nrmITwcUJJFjVhM2XCytEnvvPQcRe5Y7mXEAODfXHC7OGZii/cIQs9b0M8Bv1UY6K1SO0NGyxyvy3glS6fhbTA=="], + + "@remotion/streaming": ["@remotion/streaming@4.0.502", "", {}, "sha512-VCh59T6tOfeuVwP1D5KB/KlQUSpXHfqh2V1AhonczhfLvtuvtbeEjg4cUJrGJS5qtkT+K4nnUdvW9sn1xS8wBA=="], + + "@remotion/studio": ["@remotion/studio@4.0.502", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.31", "@remotion/canvas-capture": "4.0.502", "@remotion/captions": "4.0.502", "@remotion/media-utils": "4.0.502", "@remotion/player": "4.0.502", "@remotion/renderer": "4.0.502", "@remotion/studio-protocol": "4.0.502", "@remotion/studio-shared": "4.0.502", "@remotion/timeline-utils": "4.0.502", "@remotion/web-renderer": "4.0.502", "@remotion/zod-types": "4.0.502", "mediabunny": "1.50.8", "memfs": "3.4.3", "open": "8.4.2", "remotion": "4.0.502", "semver": "7.5.3", "zod": "4.4.3" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-2GhPXaPwdIKahpKP7t1bnejADzJpQU9A8qqc3+6e0GD2JM9Me8OZO/K73Z5mVFML+FKLymU/GHcodUVczlzyNw=="], + + "@remotion/studio-codemods": ["@remotion/studio-codemods@4.0.502", "", { "dependencies": { "@babel/parser": "7.24.1", "@babel/types": "7.24.0", "@remotion/studio-shared": "4.0.502", "ast-types": "0.16.1", "recast": "0.23.11", "remotion": "4.0.502" } }, "sha512-f588okuILPkv9Y75RduuQXQnODG43eHAzR4v2qnkqqPZk9/eygCu3MiEJUSznZYnVWC0LAJkz206bEUQ03EYsw=="], + + "@remotion/studio-protocol": ["@remotion/studio-protocol@4.0.502", "", {}, "sha512-mGO3Iswp+6WSHFSw0ZvpRj8HE7JZMhEO0IDeoGtZHbpFRd7PQk1UYE2Kme/WHi9JeBTIHhAETOvC7mnGzJBBCQ=="], + + "@remotion/studio-server": ["@remotion/studio-server@4.0.502", "", { "dependencies": { "@babel/parser": "7.24.1", "@babel/types": "7.24.0", "@remotion/bundler": "4.0.502", "@remotion/renderer": "4.0.502", "@remotion/studio-codemods": "4.0.502", "@remotion/studio-protocol": "4.0.502", "@remotion/studio-shared": "4.0.502", "@svgr/core": "8.1.0", "@svgr/plugin-jsx": "8.1.0", "kiwi-schema": "0.5.0", "memfs": "3.4.3", "open": "8.4.2", "prettier": "3.8.1", "recast": "0.23.11", "remotion": "4.0.502", "semver": "7.5.3", "zod": "4.4.3" } }, "sha512-F3vDzxvDv++e2IKY0nO+jN3LTKzLNGg598a9o+TGGMa5DnKPVrbmb/k5Uwt602TJjzuzSVb9+YN5y71T08a75w=="], + + "@remotion/studio-shared": ["@remotion/studio-shared@4.0.502", "", { "dependencies": { "@remotion/studio-protocol": "4.0.502", "remotion": "4.0.502" } }, "sha512-kh7gqvlMOBDoJIYuJhRVXtynosm+a3Yw3f60FIT9Oni463BG7LuF0OIaE97cTB24vphklq96vd6B/6708TjygA=="], + + "@remotion/timeline-utils": ["@remotion/timeline-utils@4.0.502", "", { "dependencies": { "mediabunny": "1.50.8" } }, "sha512-FKeS/Dg+yHadf/PqY2aYMVSHN/BQ0yMu0ma/gG2NF1xH3n8SE//2/1GkJZ5uNBoeaj9XVbU/axFyPLb8XEYZ3w=="], + + "@remotion/web-renderer": ["@remotion/web-renderer@4.0.502", "", { "dependencies": { "@mediabunny/aac-encoder": "1.50.8", "@mediabunny/flac-encoder": "1.50.8", "@mediabunny/mp3-encoder": "1.50.8", "@remotion/licensing": "4.0.502", "mediabunny": "1.50.8", "remotion": "4.0.502" }, "peerDependencies": { "react": ">=18.0.0", "react-dom": ">=18.0.0" } }, "sha512-VnUz7vP/YnaoC01NFRkc/DAPluGNMF42aA7Nv4yH7oHfzepUS7WY3KOyIv3XSWE1xrp8GkEfqOmUugIS4jvvAA=="], + + "@remotion/zod-types": ["@remotion/zod-types@4.0.502", "", { "dependencies": { "remotion": "4.0.502" } }, "sha512-EQTvFP1/CDwGti8gvCVoCoUczHr/grnwY7vzMCD2o4tyQ4AR8IEOjpDGzgQpUFfGOrwc6uGfELPFlu41ifhd4Q=="], + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.1", "", { "os": "android", "cpu": "arm64" }, "sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg=="], "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg=="], @@ -2051,6 +2142,34 @@ "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.60.4", "", { "os": "win32", "cpu": "x64" }, "sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw=="], + "@rspack/binding": ["@rspack/binding@1.7.11", "", { "optionalDependencies": { "@rspack/binding-darwin-arm64": "1.7.11", "@rspack/binding-darwin-x64": "1.7.11", "@rspack/binding-linux-arm64-gnu": "1.7.11", "@rspack/binding-linux-arm64-musl": "1.7.11", "@rspack/binding-linux-x64-gnu": "1.7.11", "@rspack/binding-linux-x64-musl": "1.7.11", "@rspack/binding-wasm32-wasi": "1.7.11", "@rspack/binding-win32-arm64-msvc": "1.7.11", "@rspack/binding-win32-ia32-msvc": "1.7.11", "@rspack/binding-win32-x64-msvc": "1.7.11" } }, "sha512-2MGdy2s2HimsDT444Bp5XnALzNRxuBNc7y0JzyuqKbHBywd4x2NeXyhWXXoxufaCFu5PBc9Qq9jyfjW2Aeh06Q=="], + + "@rspack/binding-darwin-arm64": ["@rspack/binding-darwin-arm64@1.7.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-oduECiZVqbO5zlVw+q7Vy65sJFth99fWPTyucwvLJJtJkPL5n17Uiql2cYP6Ijn0pkqtf1SXgK8WjiKLG5bIig=="], + + "@rspack/binding-darwin-x64": ["@rspack/binding-darwin-x64@1.7.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-a1+TtTE9ap6RalgFi7FGIgkJP6O4Vy6ctv+9WGJy53E4kuqHR0RygzaiVxCI/GMc/vBT9vY23hyrpWb3d1vtXA=="], + + "@rspack/binding-linux-arm64-gnu": ["@rspack/binding-linux-arm64-gnu@1.7.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-P0QrGRPbTWu6RKWfN0bDtbnEps3rXH0MWIMreZABoUrVmNQKtXR6e73J3ub6a+di5s2+K0M2LJ9Bh2/H4UsDUA=="], + + "@rspack/binding-linux-arm64-musl": ["@rspack/binding-linux-arm64-musl@1.7.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-6ky7R43VMjWwmx3Yx7Jl7faLBBMAgMDt+/bN35RgwjiPgsIByz65EwytUVuW9rikB43BGHvA/eqlnjLrUzNBqw=="], + + "@rspack/binding-linux-x64-gnu": ["@rspack/binding-linux-x64-gnu@1.7.11", "", { "os": "linux", "cpu": "x64" }, "sha512-cuOJMfCOvb2Wgsry5enXJ3iT1FGUjdPqtGUBVupQlEG4ntSYsQ2PtF4wIDVasR3wdxC5nQbipOrDiN/u6fYsdQ=="], + + "@rspack/binding-linux-x64-musl": ["@rspack/binding-linux-x64-musl@1.7.11", "", { "os": "linux", "cpu": "x64" }, "sha512-CoK37hva4AmHGh3VCsQXmGr40L36m1/AdnN5LEjUX6kx5rEH7/1nEBN6Ii72pejqDVvk9anEROmPDiPw10tpFg=="], + + "@rspack/binding-wasm32-wasi": ["@rspack/binding-wasm32-wasi@1.7.11", "", { "dependencies": { "@napi-rs/wasm-runtime": "1.0.7" }, "cpu": "none" }, "sha512-OtrmnPUVJMxjNa3eDMfHyPdtlLRmmp/aIm0fQHlAOATbZvlGm12q7rhPW5BXTu1yh+1rQ1/uqvz+SzKEZXuJaQ=="], + + "@rspack/binding-win32-arm64-msvc": ["@rspack/binding-win32-arm64-msvc@1.7.11", "", { "os": "win32", "cpu": "arm64" }, "sha512-lObFW6e5lCWNgTBNwT//yiEDbsxm9QG4BYUojqeXxothuzJ/L6ibXz6+gLMvbOvLGV3nKgkXmx8GvT9WDKR0mA=="], + + "@rspack/binding-win32-ia32-msvc": ["@rspack/binding-win32-ia32-msvc@1.7.11", "", { "os": "win32", "cpu": "ia32" }, "sha512-0pYGnZd8PPqNR68zQ8skamqNAXEA1sUfXuAdYcknIIRq2wsbiwFzIc0Pov1cIfHYab37G7sSIPBiOUdOWF5Ivw=="], + + "@rspack/binding-win32-x64-msvc": ["@rspack/binding-win32-x64-msvc@1.7.11", "", { "os": "win32", "cpu": "x64" }, "sha512-EeQXayoQk/uBkI3pdoXfQBXNIUrADq56L3s/DFyM2pJeUDrWmhfIw2UFIGkYPTMSCo8F2JcdcGM32FGJrSnU0Q=="], + + "@rspack/core": ["@rspack/core@1.7.11", "", { "dependencies": { "@module-federation/runtime-tools": "0.22.0", "@rspack/binding": "1.7.11", "@rspack/lite-tapable": "1.1.0" }, "peerDependencies": { "@swc/helpers": ">=0.5.1" }, "optionalPeers": ["@swc/helpers"] }, "sha512-rsD9b+Khmot5DwCMiB3cqTQo53ioPG3M/A7BySu8+0+RS7GCxKm+Z+mtsjtG/vsu4Tn2tcqCdZtA3pgLoJB+ew=="], + + "@rspack/lite-tapable": ["@rspack/lite-tapable@1.1.0", "", {}, "sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw=="], + + "@rspack/plugin-react-refresh": ["@rspack/plugin-react-refresh@1.6.1", "", { "dependencies": { "error-stack-parser": "^2.1.4", "html-entities": "^2.6.0" }, "peerDependencies": { "react-refresh": ">=0.10.0 <1.0.0", "webpack-hot-middleware": "2.x" }, "optionalPeers": ["webpack-hot-middleware"] }, "sha512-eqqW5645VG3CzGzFgNg5HqNdHVXY+567PGjtDhhrM8t67caxmsSzRmT5qfoEIfBcGgFkH9vEg7kzXwmCYQdQDw=="], + "@sec-ant/readable-stream": ["@sec-ant/readable-stream@0.4.1", "", {}, "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg=="], "@selderee/plugin-htmlparser2": ["@selderee/plugin-htmlparser2@0.11.0", "", { "dependencies": { "domhandler": "^5.0.3", "selderee": "^0.11.0" } }, "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ=="], @@ -2125,6 +2244,30 @@ "@standard-schema/utils": ["@standard-schema/utils@0.3.0", "", {}, "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g=="], + "@svgr/babel-plugin-add-jsx-attribute": ["@svgr/babel-plugin-add-jsx-attribute@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g=="], + + "@svgr/babel-plugin-remove-jsx-attribute": ["@svgr/babel-plugin-remove-jsx-attribute@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA=="], + + "@svgr/babel-plugin-remove-jsx-empty-expression": ["@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA=="], + + "@svgr/babel-plugin-replace-jsx-attribute-value": ["@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ=="], + + "@svgr/babel-plugin-svg-dynamic-title": ["@svgr/babel-plugin-svg-dynamic-title@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og=="], + + "@svgr/babel-plugin-svg-em-dimensions": ["@svgr/babel-plugin-svg-em-dimensions@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g=="], + + "@svgr/babel-plugin-transform-react-native-svg": ["@svgr/babel-plugin-transform-react-native-svg@8.1.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q=="], + + "@svgr/babel-plugin-transform-svg-component": ["@svgr/babel-plugin-transform-svg-component@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw=="], + + "@svgr/babel-preset": ["@svgr/babel-preset@8.1.0", "", { "dependencies": { "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", "@svgr/babel-plugin-transform-svg-component": "8.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug=="], + + "@svgr/core": ["@svgr/core@8.1.0", "", { "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", "camelcase": "^6.2.0", "cosmiconfig": "^8.1.3", "snake-case": "^3.0.4" } }, "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA=="], + + "@svgr/hast-util-to-babel-ast": ["@svgr/hast-util-to-babel-ast@8.0.0", "", { "dependencies": { "@babel/types": "^7.21.3", "entities": "^4.4.0" } }, "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q=="], + + "@svgr/plugin-jsx": ["@svgr/plugin-jsx@8.1.0", "", { "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", "@svgr/hast-util-to-babel-ast": "8.0.0", "svg-parser": "^2.0.4" }, "peerDependencies": { "@svgr/core": "*" } }, "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA=="], + "@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], "@tailwindcss/node": ["@tailwindcss/node@4.3.0", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.21.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.3.0" } }, "sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g=="], @@ -2307,6 +2450,14 @@ "@types/dockerode": ["@types/dockerode@3.3.47", "", { "dependencies": { "@types/docker-modem": "*", "@types/node": "*", "@types/ssh2": "*" } }, "sha512-ShM1mz7rCjdssXt7Xz0u1/R2BJC7piWa3SJpUBiVjCf2A3XNn4cP6pUVaD8bLanpPVVn4IKzJuw3dOvkJ8IbYw=="], + "@types/dom-mediacapture-transform": ["@types/dom-mediacapture-transform@0.1.12", "", { "dependencies": { "@types/dom-webcodecs": "*" } }, "sha512-d7/QsLRwF864A5mgIM/YrfiglHoYn7zgCcAoJgW404r+2DwnNr7EBbLnCWpmOMgH8y0te73L1AV6H1bmauaWFw=="], + + "@types/dom-webcodecs": ["@types/dom-webcodecs@0.1.13", "", {}, "sha512-O5hkiFIcjjszPIYyUSyvScyvrBoV3NOEEZx/pMlsu44TKzWNkLVBBxnxJz42in5n3QIolYOcBYFCPZZ0h8SkwQ=="], + + "@types/eslint": ["@types/eslint@9.6.1", "", { "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag=="], + + "@types/eslint-scope": ["@types/eslint-scope@3.7.7", "", { "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg=="], + "@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="], "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], @@ -2323,6 +2474,8 @@ "@types/jsesc": ["@types/jsesc@2.5.1", "", {}, "sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw=="], + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], + "@types/jsonwebtoken": ["@types/jsonwebtoken@9.0.10", "", { "dependencies": { "@types/ms": "*", "@types/node": "*" } }, "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA=="], "@types/leaflet": ["@types/leaflet@1.9.21", "", { "dependencies": { "@types/geojson": "*" } }, "sha512-TbAd9DaPGSnzp6QvtYngntMZgcRk+igFELwR2N99XZn7RXUdKgsXMR+28bUO0rPsWp8MIu/f47luLIQuSLYv/w=="], @@ -2445,10 +2598,44 @@ "@vue/shared": ["@vue/shared@3.5.34", "", {}, "sha512-24uqU4OIiX29ryC3MeWid/Xf2fa2EFRUVLb77nRhk+UrTVrh/XiGtFAFmJBAtBRbjwNdsPRP+jj/OL27Eg1NDA=="], + "@webassemblyjs/ast": ["@webassemblyjs/ast@1.14.1", "", { "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ=="], + + "@webassemblyjs/floating-point-hex-parser": ["@webassemblyjs/floating-point-hex-parser@1.13.2", "", {}, "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA=="], + + "@webassemblyjs/helper-api-error": ["@webassemblyjs/helper-api-error@1.13.2", "", {}, "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ=="], + + "@webassemblyjs/helper-buffer": ["@webassemblyjs/helper-buffer@1.14.1", "", {}, "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA=="], + + "@webassemblyjs/helper-numbers": ["@webassemblyjs/helper-numbers@1.13.2", "", { "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", "@webassemblyjs/helper-api-error": "1.13.2", "@xtuc/long": "4.2.2" } }, "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA=="], + + "@webassemblyjs/helper-wasm-bytecode": ["@webassemblyjs/helper-wasm-bytecode@1.13.2", "", {}, "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA=="], + + "@webassemblyjs/helper-wasm-section": ["@webassemblyjs/helper-wasm-section@1.14.1", "", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", "@webassemblyjs/wasm-gen": "1.14.1" } }, "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw=="], + + "@webassemblyjs/ieee754": ["@webassemblyjs/ieee754@1.13.2", "", { "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw=="], + + "@webassemblyjs/leb128": ["@webassemblyjs/leb128@1.13.2", "", { "dependencies": { "@xtuc/long": "4.2.2" } }, "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw=="], + + "@webassemblyjs/utf8": ["@webassemblyjs/utf8@1.13.2", "", {}, "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ=="], + + "@webassemblyjs/wasm-edit": ["@webassemblyjs/wasm-edit@1.14.1", "", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", "@webassemblyjs/helper-wasm-section": "1.14.1", "@webassemblyjs/wasm-gen": "1.14.1", "@webassemblyjs/wasm-opt": "1.14.1", "@webassemblyjs/wasm-parser": "1.14.1", "@webassemblyjs/wast-printer": "1.14.1" } }, "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ=="], + + "@webassemblyjs/wasm-gen": ["@webassemblyjs/wasm-gen@1.14.1", "", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", "@webassemblyjs/ieee754": "1.13.2", "@webassemblyjs/leb128": "1.13.2", "@webassemblyjs/utf8": "1.13.2" } }, "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg=="], + + "@webassemblyjs/wasm-opt": ["@webassemblyjs/wasm-opt@1.14.1", "", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", "@webassemblyjs/wasm-gen": "1.14.1", "@webassemblyjs/wasm-parser": "1.14.1" } }, "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw=="], + + "@webassemblyjs/wasm-parser": ["@webassemblyjs/wasm-parser@1.14.1", "", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-api-error": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", "@webassemblyjs/ieee754": "1.13.2", "@webassemblyjs/leb128": "1.13.2", "@webassemblyjs/utf8": "1.13.2" } }, "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ=="], + + "@webassemblyjs/wast-printer": ["@webassemblyjs/wast-printer@1.14.1", "", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw=="], + "@xmldom/is-dom-node": ["@xmldom/is-dom-node@1.0.1", "", {}, "sha512-CJDxIgE5I0FH+ttq/Fxy6nRpxP70+e2O048EPe85J2use3XKdatVM7dDVvFNjQudd9B49NPoZ+8PG49zj4Er8Q=="], "@xmldom/xmldom": ["@xmldom/xmldom@0.8.13", "", {}, "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw=="], + "@xtuc/ieee754": ["@xtuc/ieee754@1.2.0", "", {}, "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="], + + "@xtuc/long": ["@xtuc/long@4.2.2", "", {}, "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="], + "@xyflow/react": ["@xyflow/react@12.10.2", "", { "dependencies": { "@xyflow/system": "0.0.76", "classcat": "^5.0.3", "zustand": "^4.4.0" }, "peerDependencies": { "react": ">=17", "react-dom": ">=17" } }, "sha512-CgIi6HwlcHXwlkTpr0fxLv/0sRVNZ8IdwKLzzeCscaYBwpvfcH1QFOCeaTCuEn1FQEs/B8CjnTSjhs8udgmBgQ=="], "@xyflow/system": ["@xyflow/system@0.0.76", "", { "dependencies": { "@types/d3-drag": "^3.0.7", "@types/d3-interpolate": "^3.0.4", "@types/d3-selection": "^3.0.10", "@types/d3-transition": "^3.0.8", "@types/d3-zoom": "^3.0.8", "d3-drag": "^3.0.0", "d3-interpolate": "^3.0.1", "d3-selection": "^3.0.0", "d3-zoom": "^3.0.0" } }, "sha512-hvwvnRS1B3REwVDlWexsq7YQaPZeG3/mKo1jv38UmnpWmxihp14bW6VtEOuHEwJX2FvzFw8k77LyKSk/wiZVNA=="], @@ -2463,6 +2650,8 @@ "acorn-import-attributes": ["acorn-import-attributes@1.9.5", "", { "peerDependencies": { "acorn": "^8" } }, "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ=="], + "acorn-import-phases": ["acorn-import-phases@1.0.4", "", { "peerDependencies": { "acorn": "^8.14.0" } }, "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ=="], + "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], @@ -2473,6 +2662,8 @@ "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="], + "ajv-keywords": ["ajv-keywords@5.1.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="], + "ansi-colors": ["ansi-colors@4.1.3", "", {}, "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="], "ansi-escapes": ["ansi-escapes@7.3.0", "", { "dependencies": { "environment": "^1.0.0" } }, "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg=="], @@ -2503,6 +2694,8 @@ "ast-kit": ["ast-kit@2.2.0", "", { "dependencies": { "@babel/parser": "^7.28.5", "pathe": "^2.0.3" } }, "sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw=="], + "ast-types": ["ast-types@0.16.1", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg=="], + "ast-walker-scope": ["ast-walker-scope@0.8.3", "", { "dependencies": { "@babel/parser": "^7.28.4", "ast-kit": "^2.1.3" } }, "sha512-cbdCP0PGOBq0ASG+sjnKIoYkWMKhhz+F/h9pRexUdX2Hd38+WOlBkRKlqkGOSm0YQpcFMQBJeK4WspUAkwsEdg=="], "astring": ["astring@1.9.0", "", { "bin": { "astring": "bin/astring" } }, "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg=="], @@ -2613,6 +2806,8 @@ "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], + "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], + "camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], "caniuse-api": ["caniuse-api@3.0.0", "", { "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", "lodash.memoize": "^4.1.2", "lodash.uniq": "^4.5.0" } }, "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw=="], @@ -2641,6 +2836,8 @@ "chownr": ["chownr@1.1.4", "", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="], + "chrome-trace-event": ["chrome-trace-event@1.0.4", "", {}, "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ=="], + "citty": ["citty@0.1.6", "", { "dependencies": { "consola": "^3.2.3" } }, "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ=="], "cjs-module-lexer": ["cjs-module-lexer@2.2.0", "", {}, "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ=="], @@ -2731,6 +2928,8 @@ "cose-base": ["cose-base@1.0.3", "", { "dependencies": { "layout-base": "^1.0.0" } }, "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg=="], + "cosmiconfig": ["cosmiconfig@8.3.6", "", { "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA=="], + "country-flag-icons": ["country-flag-icons@1.6.17", "", {}, "sha512-Nmik0289ZVZSI3c7mJR/amg6DyY7Z59b0sTFSKayeX72mHfPzCPJygwJs2pYgQULzuAyWeCUgwAJ+Dq8OR+JFw=="], "cpu-features": ["cpu-features@0.0.10", "", { "dependencies": { "buildcheck": "~0.0.6", "nan": "^2.19.0" } }, "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA=="], @@ -2753,6 +2952,8 @@ "css-declaration-sorter": ["css-declaration-sorter@7.4.0", "", { "peerDependencies": { "postcss": "^8.0.9" } }, "sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw=="], + "css-loader": ["css-loader@7.1.4", "", { "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.40", "postcss-modules-extract-imports": "^3.1.0", "postcss-modules-local-by-default": "^4.0.5", "postcss-modules-scope": "^3.2.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", "semver": "^7.6.3" }, "peerDependencies": { "@rspack/core": "0.x || ^1.0.0 || ^2.0.0-0", "webpack": "^5.27.0" }, "optionalPeers": ["@rspack/core", "webpack"] }, "sha512-vv3J9tlOl04WjiMvHQI/9tmIrCxVrj6PFbHemBB1iihpeRbi/I4h033eoFIhwxBBqLhI0KYFS7yvynBFhIZfTw=="], + "css-select": ["css-select@5.2.2", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw=="], "css-tree": ["css-tree@3.2.1", "", { "dependencies": { "mdn-data": "2.27.1", "source-map-js": "^1.2.1" } }, "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA=="], @@ -2925,6 +3126,8 @@ "domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], + "dot-case": ["dot-case@3.0.4", "", { "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w=="], + "dot-prop": ["dot-prop@10.1.0", "", { "dependencies": { "type-fest": "^5.0.0" } }, "sha512-MVUtAugQMOff5RnBy2d9N31iG0lNwg1qAoAOn7pOK5wf94WIaE3My2p3uwTQuvS2AcqchkcR3bHByjaM0mmi7Q=="], "dotenv": ["dotenv@17.4.2", "", {}, "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw=="], @@ -2981,6 +3184,10 @@ "environment": ["environment@1.1.0", "", {}, "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q=="], + "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], + + "error-stack-parser": ["error-stack-parser@2.1.4", "", { "dependencies": { "stackframe": "^1.3.4" } }, "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ=="], + "error-stack-parser-es": ["error-stack-parser-es@1.0.5", "", {}, "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA=="], "errx": ["errx@0.1.0", "", {}, "sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q=="], @@ -3011,8 +3218,14 @@ "escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], + "eslint-scope": ["eslint-scope@5.1.1", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="], + "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], + "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], + + "estraverse": ["estraverse@4.3.0", "", {}, "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="], + "estree-util-attach-comments": ["estree-util-attach-comments@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw=="], "estree-util-build-jsx": ["estree-util-build-jsx@3.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-walker": "^3.0.0" } }, "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ=="], @@ -3139,6 +3352,8 @@ "fs-extra": ["fs-extra@7.0.1", "", { "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw=="], + "fs-monkey": ["fs-monkey@1.0.3", "", {}, "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q=="], + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], "fumadocs-core": ["fumadocs-core@15.5.0", "", { "dependencies": { "@formatjs/intl-localematcher": "^0.6.1", "@orama/orama": "^3.1.6", "@shikijs/rehype": "^3.4.2", "@shikijs/transformers": "^3.4.2", "github-slugger": "^2.0.0", "hast-util-to-estree": "^3.1.3", "hast-util-to-jsx-runtime": "^2.3.6", "image-size": "^2.0.2", "negotiator": "^1.0.0", "react-remove-scroll": "^2.6.3", "remark": "^15.0.0", "remark-gfm": "^4.0.1", "remark-rehype": "^11.1.2", "scroll-into-view-if-needed": "^3.1.0", "shiki": "^3.4.2", "unist-util-visit": "^5.0.0" }, "peerDependencies": { "@oramacloud/client": "1.x.x || 2.x.x", "algoliasearch": "5.x.x", "next": "14.x.x || 15.x.x", "react": "18.x.x || 19.x.x", "react-dom": "18.x.x || 19.x.x" }, "optionalPeers": ["@oramacloud/client", "algoliasearch", "next", "react", "react-dom"] }, "sha512-om0rmaYG8MidItR1dGuiNYX1MbSGUM1xEFfWpBCcJ9yI52FPGOJtZajWgAqqjvOVJk9Wl4m03sZdBjb4S8ra3g=="], @@ -3189,6 +3404,8 @@ "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "glob-to-regexp": ["glob-to-regexp@0.4.1", "", {}, "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="], + "global-directory": ["global-directory@4.0.1", "", { "dependencies": { "ini": "4.1.1" } }, "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q=="], "globals": ["globals@11.12.0", "", {}, "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="], @@ -3253,6 +3470,8 @@ "html-encoding-sniffer": ["html-encoding-sniffer@6.0.0", "", { "dependencies": { "@exodus/bytes": "^1.6.0" } }, "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg=="], + "html-entities": ["html-entities@2.6.0", "", {}, "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ=="], + "html-to-text": ["html-to-text@9.0.5", "", { "dependencies": { "@selderee/plugin-htmlparser2": "^0.11.0", "deepmerge": "^4.3.1", "dom-serializer": "^2.0.0", "htmlparser2": "^8.0.2", "selderee": "^0.11.0" } }, "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg=="], "html-url-attributes": ["html-url-attributes@3.0.1", "", {}, "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ=="], @@ -3279,6 +3498,8 @@ "iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], + "icss-utils": ["icss-utils@5.1.0", "", { "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA=="], + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], "ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], @@ -3291,6 +3512,8 @@ "immer": ["immer@11.1.8", "", {}, "sha512-/tbkHMW7y10Lx6i1crLjD4/OhNkRG+Fo7byZHtah0547nIeXYcpIXaUh0IAQY6gO5459qpGGYapcEOHtFXkIuA=="], + "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], + "import-in-the-middle": ["import-in-the-middle@3.0.1", "", { "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" } }, "sha512-pYkiyXVL2Mf3pozdlDGV6NAObxQx13Ae8knZk1UJRJ6uRW/ZRmTGHlQYtrsSl7ubuE5F8CD1z+s1n4RHNuTtuA=="], "import-meta-resolve": ["import-meta-resolve@4.2.0", "", {}, "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg=="], @@ -3347,6 +3570,8 @@ "is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="], + "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], + "is-buffer": ["is-buffer@1.1.6", "", {}, "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="], "is-core-module": ["is-core-module@2.16.2", "", { "dependencies": { "hasown": "^2.0.3" } }, "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA=="], @@ -3419,6 +3644,8 @@ "jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], + "jest-worker": ["jest-worker@27.5.1", "", { "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg=="], + "jiti": ["jiti@2.7.0", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="], "jose": ["jose@6.2.3", "", {}, "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw=="], @@ -3437,6 +3664,8 @@ "json-bigint": ["json-bigint@1.0.0", "", { "dependencies": { "bignumber.js": "^9.0.0" } }, "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ=="], + "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], + "json-schema": ["json-schema@0.4.0", "", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="], "json-schema-to-ts": ["json-schema-to-ts@3.1.1", "", { "dependencies": { "@babel/runtime": "^7.18.3", "ts-algebra": "^2.0.0" } }, "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g=="], @@ -3473,6 +3702,8 @@ "kind-of": ["kind-of@6.0.3", "", {}, "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="], + "kiwi-schema": ["kiwi-schema@0.5.0", "", { "bin": { "kiwic": "cli.js" } }, "sha512-X+FpfU0yTEtc6aTHS7VwbOpvQwRt70+pXXWRI5fd6CvWhe7pSVC854TVo4Zo0x5/wwcWj+/9KUlXpdcP0dY9AA=="], + "kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], "klona": ["klona@2.0.6", "", {}, "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA=="], @@ -3525,6 +3756,8 @@ "lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], + "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + "lint-staged": ["lint-staged@16.4.0", "", { "dependencies": { "commander": "^14.0.3", "listr2": "^9.0.5", "picomatch": "^4.0.3", "string-argv": "^0.3.2", "tinyexec": "^1.0.4", "yaml": "^2.8.2" }, "bin": { "lint-staged": "bin/lint-staged.js" } }, "sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw=="], "listhen": ["listhen@1.10.0", "", { "dependencies": { "@parcel/watcher": "^2.5.6", "@parcel/watcher-wasm": "^2.5.6", "citty": "^0.2.2", "consola": "^3.4.2", "crossws": ">=0.2.0 <0.5.0", "defu": "^6.1.7", "get-port-please": "^3.2.0", "h3": "^1.15.11", "http-shutdown": "^1.2.2", "jiti": "^2.6.1", "mlly": "^1.8.2", "node-forge": "^1.4.0", "pathe": "^2.0.3", "std-env": "^4.1.0", "tinyclip": "^0.1.12", "ufo": "^1.6.4", "untun": "^0.1.3", "uqr": "^0.1.3" }, "bin": { "listen": "bin/listhen.mjs", "listhen": "bin/listhen.mjs" } }, "sha512-kfz4C0OrC6IpaVMtYDJtf6PFjurxe9NBBoDAh/o2p587INryFOO4DQ9OetbCdDrWFt1m1CJKvYrzkGsuPHw8nQ=="], @@ -3533,6 +3766,8 @@ "llama-tokenizer-js": ["llama-tokenizer-js@1.2.2", "", {}, "sha512-Wmth393dc3odWU3IzARJ3r2oIfWgw9GdJ5Gm+hGhfECNO18UHLRqEFSf511jn4E9KcQGzuuKw4Wl08pHAemLAw=="], + "loader-runner": ["loader-runner@4.3.2", "", {}, "sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w=="], + "local-pkg": ["local-pkg@1.1.2", "", { "dependencies": { "mlly": "^1.7.4", "pkg-types": "^2.3.0", "quansync": "^0.2.11" } }, "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A=="], "locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], @@ -3579,6 +3814,8 @@ "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], + "lower-case": ["lower-case@2.0.2", "", { "dependencies": { "tslib": "^2.0.3" } }, "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg=="], + "lru-cache": ["lru-cache@11.3.6", "", {}, "sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A=="], "luxon": ["luxon@3.7.2", "", {}, "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew=="], @@ -3641,6 +3878,10 @@ "media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="], + "mediabunny": ["mediabunny@1.50.8", "", { "dependencies": { "@types/dom-mediacapture-transform": "^0.1.11", "@types/dom-webcodecs": "0.1.13" } }, "sha512-LgykLyQzhdpo0V2yw3UXmOpj+b4JAGdpHBwsPE6kjSt8Za0d1VllD+FV7EGHBcdV4+oHUAo+yrqbVAWxNSDCPQ=="], + + "memfs": ["memfs@3.4.3", "", { "dependencies": { "fs-monkey": "1.0.3" } }, "sha512-eivjfi7Ahr6eQTn44nvTnR60e4a1Fs1Via2kCR5lHo/kyNoiMWaXCNJ/GpSd0ilXas2JSOl9B5FTIhflXu0hlg=="], + "memoirist": ["memoirist@0.4.0", "", {}, "sha512-zxTgA0mSYELa66DimuNQDvyLq36AwDlTuVRbnQtB+VuTcKWm5Qc4z3WkSpgsFWHNhexqkIooqpv4hdcqrX5Nmg=="], "merge-descriptors": ["merge-descriptors@2.0.0", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="], @@ -3791,6 +4032,8 @@ "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], + "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], + "next": ["next@16.2.6", "", { "dependencies": { "@next/env": "16.2.6", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.2.6", "@next/swc-darwin-x64": "16.2.6", "@next/swc-linux-arm64-gnu": "16.2.6", "@next/swc-linux-arm64-musl": "16.2.6", "@next/swc-linux-x64-gnu": "16.2.6", "@next/swc-linux-x64-musl": "16.2.6", "@next/swc-win32-arm64-msvc": "16.2.6", "@next/swc-win32-x64-msvc": "16.2.6", "sharp": "^0.34.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-qOVgKJg1+At15NpeUP+eJgCHvTCgXsogweq87Ri/Ix7PkqQHg4sdaXmSFqKlgaIXE4kW0g25LE68W87UANlHtw=="], "next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="], @@ -3799,6 +4042,8 @@ "nitropack": ["nitropack@2.13.4", "", { "dependencies": { "@cloudflare/kv-asset-handler": "^0.4.2", "@rollup/plugin-alias": "^6.0.0", "@rollup/plugin-commonjs": "^29.0.2", "@rollup/plugin-inject": "^5.0.5", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^16.0.3", "@rollup/plugin-replace": "^6.0.3", "@rollup/plugin-terser": "^1.0.0", "@vercel/nft": "^1.5.0", "archiver": "^7.0.1", "c12": "^3.3.4", "chokidar": "^5.0.0", "citty": "^0.2.2", "compatx": "^0.2.0", "confbox": "^0.2.4", "consola": "^3.4.2", "cookie-es": "^2.0.1", "croner": "^10.0.1", "crossws": "^0.3.5", "db0": "^0.3.4", "defu": "^6.1.7", "destr": "^2.0.5", "dot-prop": "^10.1.0", "esbuild": "^0.28.0", "escape-string-regexp": "^5.0.0", "etag": "^1.8.1", "exsolve": "^1.0.8", "globby": "^16.2.0", "gzip-size": "^7.0.0", "h3": "^1.15.11", "hookable": "^5.5.3", "httpxy": "^0.5.1", "ioredis": "^5.10.1", "jiti": "^2.6.1", "klona": "^2.0.6", "knitwork": "^1.3.0", "listhen": "^1.9.1", "magic-string": "^0.30.21", "magicast": "^0.5.2", "mime": "^4.1.0", "mlly": "^1.8.2", "node-fetch-native": "^1.6.7", "node-mock-http": "^1.0.4", "ofetch": "^1.5.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.1.0", "pkg-types": "^2.3.1", "pretty-bytes": "^7.1.0", "radix3": "^1.1.2", "rollup": "^4.60.2", "rollup-plugin-visualizer": "^7.0.1", "scule": "^1.3.0", "semver": "^7.7.4", "serve-placeholder": "^2.0.2", "serve-static": "^2.2.1", "source-map": "^0.7.6", "std-env": "^4.1.0", "ufo": "^1.6.4", "ultrahtml": "^1.6.0", "uncrypto": "^0.1.3", "unctx": "^2.5.0", "unenv": "2.0.0-rc.24", "unimport": "^6.2.0", "unplugin-utils": "^0.3.1", "unstorage": "^1.17.5", "untyped": "^2.0.0", "unwasm": "^0.5.3", "youch": "^4.1.1", "youch-core": "^0.3.3" }, "peerDependencies": { "xml2js": "^0.6.2" }, "optionalPeers": ["xml2js"], "bin": { "nitro": "dist/cli/index.mjs", "nitropack": "dist/cli/index.mjs" } }, "sha512-tX7bT6zxNeMwkc6hxHiZeUoTOjVrcjoh1Z3cmxOlodIqjl4HISgqfGOmkWSayky3Nv9Z5+KQH52F8nmXJY5AAA=="], + "no-case": ["no-case@3.0.4", "", { "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg=="], + "node-abort-controller": ["node-abort-controller@3.1.1", "", {}, "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ=="], "node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="], @@ -3907,8 +4152,12 @@ "pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], + "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], + "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], + "parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], + "parse-ms": ["parse-ms@4.0.0", "", {}, "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw=="], "parse5": ["parse5@8.0.1", "", { "dependencies": { "entities": "^8.0.0" } }, "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw=="], @@ -4011,6 +4260,14 @@ "postcss-minify-selectors": ["postcss-minify-selectors@7.1.2", "", { "dependencies": { "browserslist": "^4.28.1", "caniuse-api": "^3.0.0", "cssesc": "^3.0.0", "postcss-selector-parser": "^7.1.1" }, "peerDependencies": { "postcss": "^8.5.13" } }, "sha512-aQtrEWKwqafNlExcKHQvPGsXR2+vlUqqJtf5XsCQcgsSb5PL4wlujWBYDJuWsP4UnQX1YHDHU8qRlD+1PzTQ+Q=="], + "postcss-modules-extract-imports": ["postcss-modules-extract-imports@3.1.0", "", { "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q=="], + + "postcss-modules-local-by-default": ["postcss-modules-local-by-default@4.2.0", "", { "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.1.0" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw=="], + + "postcss-modules-scope": ["postcss-modules-scope@3.2.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA=="], + + "postcss-modules-values": ["postcss-modules-values@4.0.0", "", { "dependencies": { "icss-utils": "^5.0.0" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ=="], + "postcss-nested": ["postcss-nested@7.0.2", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.2.14" } }, "sha512-5osppouFc0VR9/VYzYxO03VaDa3e8F23Kfd6/9qcZTUI8P58GIYlArOET2Wq0ywSl2o2PjELhYOFI4W7l5QHKw=="], "postcss-normalize-charset": ["postcss-normalize-charset@7.0.3", "", { "peerDependencies": { "postcss": "^8.5.13" } }, "sha512-NoBfZu8PR4c2NlmjvrqQTzCzLY79hwcSRgNQ3ZiNK0ABzf9kYKloE/jNj+/8GQY1wsm8pRRgANk6ydLH8cwo0Q=="], @@ -4171,6 +4428,8 @@ "readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], + "recast": ["recast@0.23.11", "", { "dependencies": { "ast-types": "^0.16.1", "esprima": "~4.0.0", "source-map": "~0.6.1", "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" } }, "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA=="], + "recharts": ["recharts@3.9.1", "", { "dependencies": { "@reduxjs/toolkit": "^1.9.0 || 2.x.x", "clsx": "^2.1.1", "decimal.js-light": "^2.5.1", "es-toolkit": "^1.39.3", "eventemitter3": "^5.0.1", "immer": "^11.1.8", "react-redux": "8.x.x || 9.x.x", "reselect": "5.2.0", "tiny-invariant": "^1.3.3", "use-sync-external-store": "^1.2.2", "victory-vendor": "^37.0.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-WMcwlXcB7l+BbxiEdyClkG+1sxrMHNZpzT577LEvU4+rXPd8oTAy1wXk72hnk2KOOmxuLvw3z5DtXT7HEAydtg=="], "recma-build-jsx": ["recma-build-jsx@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-build-jsx": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew=="], @@ -4219,6 +4478,8 @@ "remend": ["remend@1.3.0", "", {}, "sha512-iIhggPkhW3hFImKtB10w0dz4EZbs28mV/dmbcYVonWEJ6UGHHpP+bFZnTh6GNWJONg5m+U56JrL+8IxZRdgWjw=="], + "remotion": ["remotion@4.0.502", "", { "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-6pIVS9HAsCKbbXFa3+1RFZJHCZl65C15+p4pFlqFPkvxqCkeZCjOwBpxLa5TtCsShlh309YghL0JCmXS/87urw=="], + "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], @@ -4287,6 +4548,8 @@ "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], + "schema-utils": ["schema-utils@4.3.3", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA=="], + "scroll-into-view-if-needed": ["scroll-into-view-if-needed@3.1.0", "", { "dependencies": { "compute-scroll-into-view": "^3.0.2" } }, "sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ=="], "scule": ["scule@1.3.0", "", {}, "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g=="], @@ -4349,6 +4612,8 @@ "smol-toml": ["smol-toml@1.6.1", "", {}, "sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg=="], + "snake-case": ["snake-case@3.0.4", "", { "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg=="], + "socket.io": ["socket.io@4.8.3", "", { "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.4.1", "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" } }, "sha512-2Dd78bqzzjE6KPkD5fHZmDAKRNe3J15q+YHDrIsy9WEkqttc7GY+kT9OBLSMaPbQaEd0x1BjcmtMtXkfpc+T5A=="], "socket.io-adapter": ["socket.io-adapter@2.5.6", "", { "dependencies": { "debug": "~4.4.1", "ws": "~8.18.3" } }, "sha512-DkkO/dz7MGln0dHn5bmN3pPy+JmywNICWrJqVWiVOyvXjWQFIv9c2h24JrQLLFJ2aQVQf/Cvl1vblnd4r2apLQ=="], @@ -4383,6 +4648,8 @@ "stackback": ["stackback@0.0.2", "", {}, "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="], + "stackframe": ["stackframe@1.3.4", "", {}, "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw=="], + "standard-as-callback": ["standard-as-callback@2.1.0", "", {}, "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A=="], "standardwebhooks": ["standardwebhooks@1.0.0", "", { "dependencies": { "@stablelib/base64": "^1.0.0", "fast-sha256": "^1.3.0" } }, "sha512-BbHGOQK9olHPMvQNHWul6MYlrRTAOKn03rOe4A8O3CLWhNf4YHBqq2HJKKC+sfqpxiBY52pNeesD6jIiLDz8jg=="], @@ -4431,6 +4698,8 @@ "stubborn-utils": ["stubborn-utils@1.0.2", "", {}, "sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg=="], + "style-loader": ["style-loader@4.0.0", "", { "peerDependencies": { "webpack": "^5.27.0" } }, "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA=="], + "style-to-js": ["style-to-js@1.1.21", "", { "dependencies": { "style-to-object": "1.0.14" } }, "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ=="], "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], @@ -4451,6 +4720,8 @@ "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], + "svg-parser": ["svg-parser@2.0.4", "", {}, "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ=="], + "svgo": ["svgo@4.0.1", "", { "dependencies": { "commander": "^11.1.0", "css-select": "^5.1.0", "css-tree": "^3.0.1", "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.1.1", "sax": "^1.5.0" }, "bin": "./bin/svgo.js" }, "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w=="], "svix": ["svix@1.93.0", "", { "dependencies": { "standardwebhooks": "1.0.0" } }, "sha512-AeCcSs+CrHNejZytBuvD4hw2B14rB7+Sq7ggwYgF22TgXh0uJJ3T4uVJSbSYKFSbO1AA4o470XoGgOYqu2fbSA=="], @@ -4485,6 +4756,8 @@ "terser": ["terser@5.47.1", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-tPbLXTI6ohPASb/1YViL428oEHu6/qv1OxqYnfaonVCFHqx4+wCd95pHrQWsL5X4pl90CTyW9piSAsS2L0VoMw=="], + "terser-webpack-plugin": ["terser-webpack-plugin@5.6.1", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", "terser": "^5.31.1" }, "peerDependencies": { "@minify-html/node": "*", "@swc/core": "*", "@swc/css": "*", "@swc/html": "*", "clean-css": "*", "cssnano": "*", "csso": "*", "esbuild": "*", "html-minifier-terser": "*", "lightningcss": "*", "postcss": "*", "uglify-js": "*", "webpack": "^5.1.0" }, "optionalPeers": ["@minify-html/node", "@swc/core", "@swc/css", "@swc/html", "clean-css", "cssnano", "csso", "esbuild", "html-minifier-terser", "lightningcss", "postcss", "uglify-js"] }, "sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ=="], + "text-decoder": ["text-decoder@1.2.7", "", { "dependencies": { "b4a": "^1.6.4" } }, "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ=="], "throttleit": ["throttleit@2.1.0", "", {}, "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw=="], @@ -4511,6 +4784,8 @@ "tldts-core": ["tldts-core@6.1.86", "", {}, "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA=="], + "to-fast-properties": ["to-fast-properties@2.0.0", "", {}, "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="], + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], "to-rotated": ["to-rotated@1.0.0", "", {}, "sha512-KsEID8AfgUy+pxVRLsWp0VzCa69wxzUDZnzGbyIST/bcgcrMvTYoFBX/QORH4YApoD89EDuUovx4BTdpOn319Q=="], @@ -4705,6 +4980,8 @@ "walk-up-path": ["walk-up-path@4.0.0", "", {}, "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A=="], + "watchpack": ["watchpack@2.5.2", "", { "dependencies": { "graceful-fs": "^4.1.2" } }, "sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg=="], + "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], "web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="], @@ -4713,6 +4990,10 @@ "webidl-conversions": ["webidl-conversions@8.0.1", "", {}, "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ=="], + "webpack": ["webpack@5.105.0", "", { "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.15.0", "acorn-import-phases": "^1.0.3", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.19.0", "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.3.1", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", "terser-webpack-plugin": "^5.3.16", "watchpack": "^2.5.1", "webpack-sources": "^3.3.3" }, "peerDependencies": { "webpack-cli": "*" }, "optionalPeers": ["webpack-cli"], "bin": { "webpack": "bin/webpack.js" } }, "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw=="], + + "webpack-sources": ["webpack-sources@3.5.1", "", {}, "sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw=="], + "webpack-virtual-modules": ["webpack-virtual-modules@0.6.2", "", {}, "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="], "whatwg-mimetype": ["whatwg-mimetype@5.0.0", "", {}, "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw=="], @@ -5155,6 +5436,42 @@ "@react-email/ui/esbuild": ["esbuild@0.28.0", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.0", "@esbuild/android-arm": "0.28.0", "@esbuild/android-arm64": "0.28.0", "@esbuild/android-x64": "0.28.0", "@esbuild/darwin-arm64": "0.28.0", "@esbuild/darwin-x64": "0.28.0", "@esbuild/freebsd-arm64": "0.28.0", "@esbuild/freebsd-x64": "0.28.0", "@esbuild/linux-arm": "0.28.0", "@esbuild/linux-arm64": "0.28.0", "@esbuild/linux-ia32": "0.28.0", "@esbuild/linux-loong64": "0.28.0", "@esbuild/linux-mips64el": "0.28.0", "@esbuild/linux-ppc64": "0.28.0", "@esbuild/linux-riscv64": "0.28.0", "@esbuild/linux-s390x": "0.28.0", "@esbuild/linux-x64": "0.28.0", "@esbuild/netbsd-arm64": "0.28.0", "@esbuild/netbsd-x64": "0.28.0", "@esbuild/openbsd-arm64": "0.28.0", "@esbuild/openbsd-x64": "0.28.0", "@esbuild/openharmony-arm64": "0.28.0", "@esbuild/sunos-x64": "0.28.0", "@esbuild/win32-arm64": "0.28.0", "@esbuild/win32-ia32": "0.28.0", "@esbuild/win32-x64": "0.28.0" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw=="], + "@remotion/bundler/esbuild": ["esbuild@0.28.1", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.1", "@esbuild/android-arm": "0.28.1", "@esbuild/android-arm64": "0.28.1", "@esbuild/android-x64": "0.28.1", "@esbuild/darwin-arm64": "0.28.1", "@esbuild/darwin-x64": "0.28.1", "@esbuild/freebsd-arm64": "0.28.1", "@esbuild/freebsd-x64": "0.28.1", "@esbuild/linux-arm": "0.28.1", "@esbuild/linux-arm64": "0.28.1", "@esbuild/linux-ia32": "0.28.1", "@esbuild/linux-loong64": "0.28.1", "@esbuild/linux-mips64el": "0.28.1", "@esbuild/linux-ppc64": "0.28.1", "@esbuild/linux-riscv64": "0.28.1", "@esbuild/linux-s390x": "0.28.1", "@esbuild/linux-x64": "0.28.1", "@esbuild/netbsd-arm64": "0.28.1", "@esbuild/netbsd-x64": "0.28.1", "@esbuild/openbsd-arm64": "0.28.1", "@esbuild/openbsd-x64": "0.28.1", "@esbuild/openharmony-arm64": "0.28.1", "@esbuild/sunos-x64": "0.28.1", "@esbuild/win32-arm64": "0.28.1", "@esbuild/win32-ia32": "0.28.1", "@esbuild/win32-x64": "0.28.1" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw=="], + + "@remotion/cli/dotenv": ["dotenv@17.3.1", "", {}, "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA=="], + + "@remotion/cli/minimist": ["minimist@1.2.6", "", {}, "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="], + + "@remotion/media/zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="], + + "@remotion/renderer/execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], + + "@remotion/renderer/source-map": ["source-map@0.8.0", "", {}, "sha512-d8EqvL+k/SOXCreS/SUzg2ciyHqBBLcN/yuRjFsbvVhHTE2pgei7oAhmPM7kWFbkX6OSMQfUq4KbkF3au9lhYQ=="], + + "@remotion/renderer/ws": ["ws@8.21.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g=="], + + "@remotion/studio/open": ["open@8.4.2", "", { "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" } }, "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ=="], + + "@remotion/studio/semver": ["semver@7.5.3", "", { "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" } }, "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ=="], + + "@remotion/studio/zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="], + + "@remotion/studio-codemods/@babel/parser": ["@babel/parser@7.24.1", "", { "bin": "./bin/babel-parser.js" }, "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg=="], + + "@remotion/studio-codemods/@babel/types": ["@babel/types@7.24.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w=="], + + "@remotion/studio-server/@babel/parser": ["@babel/parser@7.24.1", "", { "bin": "./bin/babel-parser.js" }, "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg=="], + + "@remotion/studio-server/@babel/types": ["@babel/types@7.24.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w=="], + + "@remotion/studio-server/open": ["open@8.4.2", "", { "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" } }, "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ=="], + + "@remotion/studio-server/prettier": ["prettier@3.8.1", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg=="], + + "@remotion/studio-server/semver": ["semver@7.5.3", "", { "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" } }, "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ=="], + + "@remotion/studio-server/zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="], + "@rolldown/binding-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], "@rolldown/binding-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], @@ -5167,6 +5484,8 @@ "@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + "@rspack/binding-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.0.7", "", { "dependencies": { "@emnapi/core": "^1.5.0", "@emnapi/runtime": "^1.5.0", "@tybys/wasm-util": "^0.10.1" } }, "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw=="], + "@shikijs/rehype/@shikijs/types": ["@shikijs/types@3.23.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ=="], "@shikijs/rehype/shiki": ["shiki@3.23.0", "", { "dependencies": { "@shikijs/core": "3.23.0", "@shikijs/engine-javascript": "3.23.0", "@shikijs/engine-oniguruma": "3.23.0", "@shikijs/langs": "3.23.0", "@shikijs/themes": "3.23.0", "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA=="], @@ -5181,6 +5500,8 @@ "@slack/web-api/@types/node": ["@types/node@24.12.4", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA=="], + "@svgr/hast-util-to-babel-ast/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" }, "bundled": true }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], @@ -5339,6 +5660,8 @@ "engine.io/ws": ["ws@8.18.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="], + "esrecurse/estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], + "execa/is-stream": ["is-stream@4.0.1", "", {}, "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A=="], "express/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], @@ -5373,6 +5696,8 @@ "htmlparser2/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + "import-fresh/resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], + "ink/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], "ink-confirm-input/ink-text-input": ["ink-text-input@3.3.0", "", { "dependencies": { "chalk": "^3.0.0", "prop-types": "^15.5.10" }, "peerDependencies": { "ink": "^2.0.0", "react": "^16.5.2" } }, "sha512-gO4wrOf2ie3YuEARTIwGlw37lMjFn3Gk6CKIDrMlHb46WFMagZU7DplohjM24zynlqfnXA5UDEIfC2NBcvD8kg=="], @@ -5507,6 +5832,8 @@ "readdir-glob/minimatch": ["minimatch@5.1.9", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw=="], + "recast/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "restore-cursor/onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], "restore-cursor/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], @@ -5529,6 +5856,8 @@ "samlify/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], + "schema-utils/ajv-formats": ["ajv-formats@2.1.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="], + "socket.io/accepts": ["accepts@1.3.8", "", { "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" } }, "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw=="], "socket.io-adapter/ws": ["ws@8.18.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="], @@ -5597,6 +5926,8 @@ "vue-sfc-transformer/@babel/parser": ["@babel/parser@7.29.3", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA=="], + "webpack/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + "wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], "wrap-ansi/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], @@ -5887,6 +6218,86 @@ "@react-email/ui/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.0", "", { "os": "win32", "cpu": "x64" }, "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw=="], + "@remotion/bundler/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.1", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ=="], + + "@remotion/bundler/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.28.1", "", { "os": "android", "cpu": "arm" }, "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ=="], + + "@remotion/bundler/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.28.1", "", { "os": "android", "cpu": "arm64" }, "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg=="], + + "@remotion/bundler/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.28.1", "", { "os": "android", "cpu": "x64" }, "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng=="], + + "@remotion/bundler/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.28.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q=="], + + "@remotion/bundler/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.28.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ=="], + + "@remotion/bundler/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.28.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw=="], + + "@remotion/bundler/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.28.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ=="], + + "@remotion/bundler/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.28.1", "", { "os": "linux", "cpu": "arm" }, "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ=="], + + "@remotion/bundler/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.28.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g=="], + + "@remotion/bundler/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.28.1", "", { "os": "linux", "cpu": "ia32" }, "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w=="], + + "@remotion/bundler/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.28.1", "", { "os": "linux", "cpu": "none" }, "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg=="], + + "@remotion/bundler/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.28.1", "", { "os": "linux", "cpu": "none" }, "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ=="], + + "@remotion/bundler/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.28.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ=="], + + "@remotion/bundler/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.28.1", "", { "os": "linux", "cpu": "none" }, "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ=="], + + "@remotion/bundler/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.28.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag=="], + + "@remotion/bundler/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.28.1", "", { "os": "linux", "cpu": "x64" }, "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA=="], + + "@remotion/bundler/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.28.1", "", { "os": "none", "cpu": "arm64" }, "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw=="], + + "@remotion/bundler/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.28.1", "", { "os": "none", "cpu": "x64" }, "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg=="], + + "@remotion/bundler/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.28.1", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q=="], + + "@remotion/bundler/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.28.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw=="], + + "@remotion/bundler/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.28.1", "", { "os": "none", "cpu": "arm64" }, "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg=="], + + "@remotion/bundler/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.28.1", "", { "os": "sunos", "cpu": "x64" }, "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ=="], + + "@remotion/bundler/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.28.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA=="], + + "@remotion/bundler/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.28.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg=="], + + "@remotion/bundler/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.1", "", { "os": "win32", "cpu": "x64" }, "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A=="], + + "@remotion/renderer/execa/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], + + "@remotion/renderer/execa/human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], + + "@remotion/renderer/execa/npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], + + "@remotion/renderer/execa/onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], + + "@remotion/renderer/execa/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + + "@remotion/renderer/execa/strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], + + "@remotion/studio-server/open/define-lazy-prop": ["define-lazy-prop@2.0.0", "", {}, "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="], + + "@remotion/studio-server/open/is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], + + "@remotion/studio-server/open/is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], + + "@remotion/studio-server/semver/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], + + "@remotion/studio/open/define-lazy-prop": ["define-lazy-prop@2.0.0", "", {}, "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="], + + "@remotion/studio/open/is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], + + "@remotion/studio/open/is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], + + "@remotion/studio/semver/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], + "@rolldown/binding-wasm32-wasi/@emnapi/core/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], "@rolldown/binding-wasm32-wasi/@napi-rs/wasm-runtime/@tybys/wasm-util": ["@tybys/wasm-util@0.10.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg=="], @@ -6449,6 +6860,8 @@ "vue-router/@babel/generator/@babel/types": ["@babel/types@8.0.0-rc.5", "", { "dependencies": { "@babel/helper-string-parser": "^8.0.0-rc.5", "@babel/helper-validator-identifier": "^8.0.0-rc.5" } }, "sha512-JeSVu/m8x/zpp4CLjYHVNXuhEyOkhPXuxM8YOXjh6L4LlvQNKuUNOTo5KdBuKAcTDHw8DquToTaEkhsBqPXOaA=="], + "webpack/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + "wrap-ansi-cjs/string-width/is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], "wrap-ansi/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], @@ -6529,6 +6942,12 @@ "@oxc-transform/binding-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/core/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], + "@remotion/renderer/execa/onetime/mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], + + "@remotion/studio-server/semver/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + + "@remotion/studio/semver/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + "archiver-utils/glob/minimatch/brace-expansion": ["brace-expansion@2.1.0", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w=="], "archiver-utils/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], From 63a7f01fa84c6e69ed28273d74905d39b6b7c681 Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:45:16 +0300 Subject: [PATCH 013/131] docs(agents): capture insights and lint guardrails --- .agents/skills/databuddy-internal/SKILL.md | 3 +++ AGENTS.md | 4 ++-- SPEC.md | 9 ++++++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/.agents/skills/databuddy-internal/SKILL.md b/.agents/skills/databuddy-internal/SKILL.md index 8a849b000d..84da4dc65c 100644 --- a/.agents/skills/databuddy-internal/SKILL.md +++ b/.agents/skills/databuddy-internal/SKILL.md @@ -42,6 +42,7 @@ Keep additions **minimal**: one bullet, a new `rg` hint, or a routing note—eno - `SPEC.md` is the intelligence product contract. `insight_observations` is the readable Insights history; `analytics_insights` is the durable investigation projection. The agent outcome owns brief publication and `act`/`ask` promotion; do not replace either with frontend heuristics or collapse the feed into cases. Do not add a parallel agent, evidence API, fixed query choreography, or action-specific lifecycle. - Insights RPC helpers that take `{ context, ...input }` must strip `context` before parsing a `.strict()` Zod input schema (same pattern as `appendInvestigationReply` / `applyInsightGoalAction`); otherwise CI fails with `Unrecognized key: "context"`. - `insights.history` / MCP `list_investigations` hide cases while a reply is `queued`/`running` (action-inbox verification); tests must list before reply or expect an empty list while verifying. +- When reporting what an organization can see in Insights, follow the `insights.brief`/`history` visibility rules instead of counting `analytics_insights`; the projection can contain legacy rows without a readable or published `insight_observations` turn. - Production insight shadows must freeze `--reference-time`, retain a tool-name trace, and pass available GitHub context before supporting quality claims. Postgres and ClickHouse are read-only, but connector token refreshes or cache writes can still occur; never describe the whole run as zero-write. - Automatic investigations have one organization-wide schedule (`off`, `daily`, or `weekly`) and one organization-wide delivery set; website selection is only for manual runs. Do not reintroduce per-website overrides, hourly/custom cadence, or cron input. - A manual insight run is a deliberate recheck: it bypasses automatic cooldown only for currently detected signals, while retaining detector thresholds and normal signal ranking. Otherwise “Run now” can complete without producing an evaluable result. @@ -155,6 +156,8 @@ Read [codebase-map.md](./references/codebase-map.md) when you need deeper routin - Start in `apps/basket/src` - Request validation, billing checks, geo/IP parsing, producer logic, and structured errors are important here +- For analytics delivery, success means a durable, replayable handoff with a stable event identity. Do not treat an in-memory buffer, a pre-persistence Redis dedupe key, or a logged producer error as lossless delivery. +- When a durability task excludes PostgreSQL and migrations, use acknowledged Redpanda handoff plus a durable Redis/BullMQ checkpoint where needed; never introduce SQL outbox tables. ## Billing (Autumn) diff --git a/AGENTS.md b/AGENTS.md index 4162162ac2..0c5b2303cb 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -119,12 +119,12 @@ Dashboard (Next.js) ←→ ORPC (rpc package) ←→ API (Elysia) → PostgreSQL **State management in Dashboard**: Jotai for local UI state, TanStack Query for server state. -**Dashboard design system (`apps/dashboard/components/ds`)**: Dashboard UI must be built from DS primitives. Feature code should not use raw form/control primitives (`button`, `input`, `select`, `textarea`, native dialogs), Base UI, Radix, or one-off styled controls directly. If a needed primitive or variant does not exist, add or extend a DS component first, then consume it from the feature. Raw control elements belong inside `components/ds` implementations only. +**Dashboard design system (`@databuddy/ui`)**: `bun run lint` enforces component-library use, semantic color tokens, and shared HTTP error responses for new code. Dashboard feature code should use `@databuddy/ui`; native controls and direct Radix/Base UI imports are limited to dashboard component implementations. Intentional exceptions require an adjacent `policy-ignore` comment with a specific reason. For picker controls, use the component that matches the interaction: - Use `DropdownMenu` for menu-style folder/status/filter/sort/action pickers. - Use `Select` only when the established UI pattern is explicitly a select/combobox. -- Use `Field` with DS inputs for form labeling, descriptions, errors, ids, and accessibility wiring. +- Use `Field` with shared inputs for form labeling, descriptions, errors, ids, and accessibility wiring. ### Tech Stack diff --git a/SPEC.md b/SPEC.md index d149d15f1b..8a6f5b775e 100644 --- a/SPEC.md +++ b/SPEC.md @@ -51,6 +51,13 @@ detect signal One exact signal starts an agent turn. The Insights brief aggregates useful turns across websites and time. +A run may first freeze a small, deterministic portfolio of distinct signals. +Scheduled runs investigate at most two; a deliberate manual full scan investigates at +most three. The portfolio is diversified across correlated subjects and survives a +retry unchanged. Each selected signal still gets its own exact agent turn, durable +observation, and investigation history; a model does not manufacture a broad report +from ungrounded raw data. + ## Agent context The agent receives: @@ -73,7 +80,7 @@ Every completed turn reports: - **root cause:** the known mechanism, or `unknown`; - **evidence:** the few facts that support or contradict it; - **publish:** whether this turn adds a new customer-relevant fact to Insights; -- **recommendation:** an optional useful next step that does not create a case; goal edits include the exact proposed name or description so the existing editor can review and apply them; +- **recommendation:** an optional useful next step that does not create a case; goal edits include the exact proposed name or description so the existing editor can review and apply them. A recommendation may also carry an evidence-backed goal or funnel draft, or explain the tracking needed before one is useful. Drafts open in the normal editable setup flow and are never created automatically; - **next:** exactly one outcome. The next outcome is one of: From 3960cf0cd539bebeb2682b959e78afdb1c356d8a Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:45:30 +0300 Subject: [PATCH 014/131] fix(insights): diversify coverage planning --- apps/insights/src/coverage-planner.test.ts | 67 +++++++++++++++++++++- apps/insights/src/coverage-planner.ts | 15 ++--- 2 files changed, 70 insertions(+), 12 deletions(-) diff --git a/apps/insights/src/coverage-planner.test.ts b/apps/insights/src/coverage-planner.test.ts index 1f2ad67175..bca2e47d30 100644 --- a/apps/insights/src/coverage-planner.test.ts +++ b/apps/insights/src/coverage-planner.test.ts @@ -126,7 +126,7 @@ describe("planCoveragePortfolio", () => { ).toHaveLength(1); }); - it("keeps direct regressions ahead of generic changes and limits positive signals", () => { + it("keeps direct regressions ahead of generic changes", () => { const error = signal({ baseline: 50, current: 100, @@ -165,6 +165,71 @@ describe("planCoveragePortfolio", () => { ).toHaveLength(1); }); + it("does not let a neutral measurement gap suppress useful improvements", () => { + const candidates = [ + signal({ + baseline: 50, + current: 100, + deltaPercent: 100, + direction: "up", + metric: "revenue", + }), + signal({ + metric: "error_count", + subjectKey: "error:checkout", + }), + signal({ + baseline: 0, + current: 0, + deltaPercent: 0, + direction: "up", + metric: "measurement_coverage", + subjectKey: "measurement:conversion-coverage", + }), + ]; + + expect( + planCoveragePortfolio(candidates, { reason: "manual" }) + ).toHaveLength(3); + }); + + it("treats errors and slow vitals on one route as one health cluster", () => { + const routeError = signal({ + baseline: 10, + current: 30, + deltaPercent: 200, + direction: "up", + entityId: "/explore", + metric: "error_count", + severity: "critical", + subjectKey: "route:error:/explore", + }); + const routeLcp = signal({ + baseline: 2000, + current: 4000, + deltaPercent: 100, + direction: "up", + entityId: "/explore", + metric: "lcp", + severity: "warning", + subjectKey: "route:lcp:/explore", + }); + const plan = planCoveragePortfolio( + [ + routeError, + routeLcp, + signal({ metric: "goal:signup", subjectKey: "goal:signup" }), + signal({ metric: "visitors" }), + ], + { reason: "manual" } + ); + + expect(plan).toHaveLength(3); + expect( + plan.filter((item) => item.entityId === "/explore") + ).toHaveLength(1); + }); + it("allows a full diverse portfolio when every candidate is positive", () => { const candidates = [ signal({ diff --git a/apps/insights/src/coverage-planner.ts b/apps/insights/src/coverage-planner.ts index f37662a328..60fe54bda1 100644 --- a/apps/insights/src/coverage-planner.ts +++ b/apps/insights/src/coverage-planner.ts @@ -73,6 +73,9 @@ function signalFamily(signal: DetectedSignal): SignalFamily { } function signalGroup(signal: DetectedSignal, family: SignalFamily): string { + if (signal.subjectKey?.startsWith("route:") && signal.entityId) { + return `route-health:${signal.entityId}`; + } if (family === "traffic") { return "traffic:top-level"; } @@ -110,10 +113,6 @@ function priority(signal: DetectedSignal): number { return (isRegression(signal) ? 0 : 2) + (isDirectSignal(signal) ? 0 : 1); } -function isPositive(signal: DetectedSignal): boolean { - return signal.current !== signal.baseline && !isRegression(signal); -} - function rankedCandidates(signals: DetectedSignal[]): Candidate[] { const stable = [...signals].sort((a, b) => { const left = stableIdentity(a); @@ -149,17 +148,12 @@ export function planCoveragePortfolio( const usedFamilies = new Set(); const usedGroups = new Set(); const usedKeys = new Set(); - const allowMultiplePositive = candidates.every((item) => - isPositive(item.signal) - ); - let hasPositive = false; const add = (candidate: Candidate) => { selected.push(candidate); usedFamilies.add(candidate.family); usedGroups.add(candidate.group); usedKeys.add(candidate.key); - hasPositive ||= isPositive(candidate.signal); }; const due = candidates.find( (candidate) => candidate.key === options.dueSignalKey @@ -171,8 +165,7 @@ export function planCoveragePortfolio( while (selected.length < coveragePortfolioLimit(options.reason)) { const available = candidates.filter( (candidate) => - !(usedKeys.has(candidate.key) || usedGroups.has(candidate.group)) && - (allowMultiplePositive || !hasPositive || !isPositive(candidate.signal)) + !(usedKeys.has(candidate.key) || usedGroups.has(candidate.group)) ); const top = available[0]; if (!top) { From b63efa6f5a80df269fa9a5beb23916d409940df5 Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:45:47 +0300 Subject: [PATCH 015/131] style(insights): format analysis settings state --- .../app/(main)/insights/_components/investigation-settings.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/dashboard/app/(main)/insights/_components/investigation-settings.tsx b/apps/dashboard/app/(main)/insights/_components/investigation-settings.tsx index 81457fc054..ec91b660fe 100644 --- a/apps/dashboard/app/(main)/insights/_components/investigation-settings.tsx +++ b/apps/dashboard/app/(main)/insights/_components/investigation-settings.tsx @@ -105,7 +105,8 @@ export function InvestigationSettings({ }); const analysisPending = isAnalyzing || triggerMutation.isPending; - const isBusy = configQuery.isLoading || saveMutation.isPending || analysisPending; + const isBusy = + configQuery.isLoading || saveMutation.isPending || analysisPending; return ( From 03c476460eda0bbfa341dfaf311ad97d7e0e9dc3 Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:47:28 +0300 Subject: [PATCH 016/131] refactor(insights): reuse run identity condition --- apps/insights/src/effects.ts | 3 +-- apps/insights/src/generation.ts | 12 +--------- apps/insights/src/run-candidate-plan.ts | 32 +++++++------------------ 3 files changed, 10 insertions(+), 37 deletions(-) diff --git a/apps/insights/src/effects.ts b/apps/insights/src/effects.ts index e0959e1927..5944780dd5 100644 --- a/apps/insights/src/effects.ts +++ b/apps/insights/src/effects.ts @@ -207,8 +207,7 @@ export function enqueueInsightRunEffects( .select({ id: insightRunItems.id }) .from(insightRunItems) .where(runIdentityCondition(params)) - .limit(1) - .for("update"); + .limit(1); if (!item) { throw new Error("Insight run item not found while queuing effects"); } diff --git a/apps/insights/src/generation.ts b/apps/insights/src/generation.ts index b9bac30f58..7712a68bbb 100644 --- a/apps/insights/src/generation.ts +++ b/apps/insights/src/generation.ts @@ -1122,16 +1122,6 @@ export async function generateWebsiteInsights( if (billingCheckError) { throw billingCheckError; } - const effects = ( - await Promise.all( - visibleInvestigations.map((insight) => - prepareInsightSlackEffects({ - insight, - organizationId: input.organizationId, - }) - ) - ) - ).flat(); const succeeded = outcomes.length > 0; const published = outcomes.filter( (outcome) => outcome.publish === true @@ -1153,7 +1143,7 @@ export async function generateWebsiteInsights( }; const preparedResult = await prepareInsightRun({ ...runIdentity, - effects, + effects: [], result, }); try { diff --git a/apps/insights/src/run-candidate-plan.ts b/apps/insights/src/run-candidate-plan.ts index 09648227e2..e4d72cf66e 100644 --- a/apps/insights/src/run-candidate-plan.ts +++ b/apps/insights/src/run-candidate-plan.ts @@ -1,4 +1,4 @@ -import { and, db, eq, isNull } from "@databuddy/db"; +import { db } from "@databuddy/db"; import { insightRunItems } from "@databuddy/db/schema"; import { investigationSignalSchema } from "@databuddy/shared/insights"; import { z } from "zod"; @@ -6,18 +6,14 @@ import { coveragePortfolioLimit, type CoveragePortfolioReason, } from "./coverage-planner"; +import { + type InsightRunIdentity, + runIdentityCondition, +} from "./effects"; const frozenPlanReasonSchema = z.enum(["manual", "scheduled"]); const emptyPlanStatusSchema = z.enum(["deferred", "no_signals"]); -export interface InsightRunIdentity { - itemId: string; - organizationId: string; - queueJobId: string | null; - runId: string; - websiteId: string; -} - const measurementCandidateSchema = z.discriminatedUnion("kind", [ z .object({ @@ -80,18 +76,6 @@ export type FrozenInvestigationPlan = z.infer< typeof frozenInvestigationPlanSchema >; -function condition(identity: InsightRunIdentity) { - return and( - eq(insightRunItems.id, identity.itemId), - eq(insightRunItems.runId, identity.runId), - eq(insightRunItems.organizationId, identity.organizationId), - eq(insightRunItems.websiteId, identity.websiteId), - identity.queueJobId === null - ? isNull(insightRunItems.queueJobId) - : eq(insightRunItems.queueJobId, identity.queueJobId) - ); -} - export function parseFrozenInvestigationPlan( value: unknown, expectedReason?: CoveragePortfolioReason @@ -116,7 +100,7 @@ export async function loadInsightRunCandidatePlan( const [item] = await db .select({ plan: insightRunItems.candidatePlan }) .from(insightRunItems) - .where(condition(identity)) + .where(runIdentityCondition(identity)) .limit(1); if (!item?.plan) { return null; @@ -139,7 +123,7 @@ export function freezeInsightRunCandidatePlan( const [item] = await tx .select({ plan: insightRunItems.candidatePlan }) .from(insightRunItems) - .where(condition(identity)) + .where(runIdentityCondition(identity)) .limit(1) .for("update"); if (!item) { @@ -155,7 +139,7 @@ export function freezeInsightRunCandidatePlan( candidatePlanAsOf: new Date(parsedProposed.asOf), updatedAt: new Date(), }) - .where(condition(identity)); + .where(runIdentityCondition(identity)); return parsedProposed; }); } From e1608e436f8b181617f80e94325c246137cef6fd Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:46:29 +0300 Subject: [PATCH 017/131] refactor(insights): simplify frozen candidate plans --- apps/insights/src/generation.ts | 9 +-------- apps/insights/src/run-candidate-plan.test.ts | 8 ++++---- apps/insights/src/run-candidate-plan.ts | 20 ++++--------------- .../db/src/drizzle/schema/insights.test.ts | 1 - packages/db/src/drizzle/schema/insights.ts | 4 ---- 5 files changed, 9 insertions(+), 33 deletions(-) diff --git a/apps/insights/src/generation.ts b/apps/insights/src/generation.ts index 7712a68bbb..f2721b1071 100644 --- a/apps/insights/src/generation.ts +++ b/apps/insights/src/generation.ts @@ -888,7 +888,7 @@ export async function generateWebsiteInsights( websiteId: site.id, }; let plan = await loadInsightRunCandidatePlan(runIdentity, input.reason); - let emptyStatus: "deferred" | "no_signals" | null = plan?.emptyStatus ?? null; + let emptyStatus: "deferred" | "no_signals" | null = null; if (!plan && existingObservations.length > 0) { // A run created before candidate portfolios existed can contain at most // one observation. Freeze that completed legacy work explicitly rather @@ -927,13 +927,6 @@ export async function generateWebsiteInsights( ); } emptyStatus = discovered.artifact.status; - plan = await freezeInsightRunCandidatePlan(runIdentity, input.reason, { - asOf: discovered.artifact.asOf, - candidates: [], - emptyStatus, - reason: input.reason, - }); - emptyStatus = plan.emptyStatus ?? emptyStatus; } else { const selectedCandidates = plannedPortfolio( discovered.value, diff --git a/apps/insights/src/run-candidate-plan.test.ts b/apps/insights/src/run-candidate-plan.test.ts index 2592867876..a132395e43 100644 --- a/apps/insights/src/run-candidate-plan.test.ts +++ b/apps/insights/src/run-candidate-plan.test.ts @@ -44,6 +44,7 @@ describe("parseFrozenInvestigationPlan", () => { parseFrozenInvestigationPlan({ asOf: "2026-08-01T12:00:00.000Z", candidates: [candidate, candidate], + reason: "manual", }) ).toThrow("cannot repeat a signal"); }); @@ -81,14 +82,13 @@ describe("parseFrozenInvestigationPlan", () => { ); }); - it("allows legacy empty plans while preserving an explicit empty disposition", () => { - expect( + it("rejects empty snapshots because there is no agent work to retry", () => { + expect(() => parseFrozenInvestigationPlan({ asOf: "2026-08-01T12:00:00.000Z", candidates: [], - emptyStatus: "deferred", reason: "scheduled", }) - ).toMatchObject({ emptyStatus: "deferred", reason: "scheduled" }); + ).toThrow(); }); }); diff --git a/apps/insights/src/run-candidate-plan.ts b/apps/insights/src/run-candidate-plan.ts index e4d72cf66e..13570232d7 100644 --- a/apps/insights/src/run-candidate-plan.ts +++ b/apps/insights/src/run-candidate-plan.ts @@ -12,7 +12,6 @@ import { } from "./effects"; const frozenPlanReasonSchema = z.enum(["manual", "scheduled"]); -const emptyPlanStatusSchema = z.enum(["deferred", "no_signals"]); const measurementCandidateSchema = z.discriminatedUnion("kind", [ z @@ -44,11 +43,8 @@ const plannedCandidateSchema = z const frozenInvestigationPlanSchema = z .object({ asOf: z.string().datetime({ offset: true }), - candidates: z.array(plannedCandidateSchema).max(3), - /** Optional only to parse plans written before this field was introduced. */ - emptyStatus: emptyPlanStatusSchema.optional(), - /** Optional only to parse plans written before this field was introduced. */ - reason: frozenPlanReasonSchema.optional(), + candidates: z.array(plannedCandidateSchema).min(1).max(3), + reason: frozenPlanReasonSchema, }) .strict() .superRefine((plan, context) => { @@ -60,13 +56,6 @@ const frozenInvestigationPlanSchema = z path: ["candidates"], }); } - if (plan.candidates.length > 0 && plan.emptyStatus) { - context.addIssue({ - code: "custom", - message: "Only an empty candidate plan may have an empty status", - path: ["emptyStatus"], - }); - } }); export type PlannedInvestigationCandidate = z.infer< @@ -81,11 +70,11 @@ export function parseFrozenInvestigationPlan( expectedReason?: CoveragePortfolioReason ): FrozenInvestigationPlan { const plan = frozenInvestigationPlanSchema.parse(value); - if (expectedReason && plan.reason && plan.reason !== expectedReason) { + if (expectedReason && plan.reason !== expectedReason) { throw new Error("Frozen candidate plan reason does not match its run"); } const reason = expectedReason ?? plan.reason; - if (reason && plan.candidates.length > coveragePortfolioLimit(reason)) { + if (plan.candidates.length > coveragePortfolioLimit(reason)) { throw new Error( `Frozen ${reason} candidate plan exceeds its portfolio limit` ); @@ -136,7 +125,6 @@ export function freezeInsightRunCandidatePlan( .update(insightRunItems) .set({ candidatePlan: parsedProposed, - candidatePlanAsOf: new Date(parsedProposed.asOf), updatedAt: new Date(), }) .where(runIdentityCondition(identity)); diff --git a/packages/db/src/drizzle/schema/insights.test.ts b/packages/db/src/drizzle/schema/insights.test.ts index 4249469fd9..464539b9c7 100644 --- a/packages/db/src/drizzle/schema/insights.test.ts +++ b/packages/db/src/drizzle/schema/insights.test.ts @@ -139,7 +139,6 @@ describe("insight runs schema", () => { ).toEqual( expect.arrayContaining([ "candidate_plan", - "candidate_plan_as_of", "prepared_at", "prepared_status", "prepared_message", diff --git a/packages/db/src/drizzle/schema/insights.ts b/packages/db/src/drizzle/schema/insights.ts index ef06cd16d3..48d8a075ee 100644 --- a/packages/db/src/drizzle/schema/insights.ts +++ b/packages/db/src/drizzle/schema/insights.ts @@ -153,10 +153,6 @@ export const insightRunItems = pgTable( * rediscovering a different set of signals after telemetry changes. */ candidatePlan: jsonb("candidate_plan").$type(), - candidatePlanAsOf: timestamp("candidate_plan_as_of", { - precision: 3, - withTimezone: true, - }), preparedAt: timestamp("prepared_at", { precision: 3, withTimezone: true, From a01b49e366020bbcd1d4f1c06b6d4971c542b2a6 Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:47:44 +0300 Subject: [PATCH 018/131] refactor(insights): require valid run observations --- .../src/idempotency.integration.test.ts | 3 +-- apps/insights/src/observations.ts | 18 +++++++----------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/apps/insights/src/idempotency.integration.test.ts b/apps/insights/src/idempotency.integration.test.ts index f16165f823..dc4855db07 100644 --- a/apps/insights/src/idempotency.integration.test.ts +++ b/apps/insights/src/idempotency.integration.test.ts @@ -38,7 +38,6 @@ import { } from "./persistence"; import { recordInsightReplyFailure, resumeInsightReply } from "./resume"; import { - findRunObservation, findRunObservations, loadDueOpenInvestigation, loadInvestigationHistory, @@ -1573,7 +1572,7 @@ describeIntegration("insights idempotency integration", () => { .select({ outcome: insightObservations.outcome }) .from(insightObservations) .where(eq(insightObservations.websiteId, website.id)); - const replay = await findRunObservation({ + const [replay] = await findRunObservations({ organizationId: org.id, runId: firstRunId, websiteId: website.id, diff --git a/apps/insights/src/observations.ts b/apps/insights/src/observations.ts index 78493c626d..ee63c12641 100644 --- a/apps/insights/src/observations.ts +++ b/apps/insights/src/observations.ts @@ -408,18 +408,14 @@ export async function findRunObservations(params: { ) ) .orderBy(insightObservations.signalKey, insightObservations.id); - return observations.flatMap((observation) => { + return observations.map((observation) => { const outcome = parseInvestigationOutcome(observation.outcome); const signal = parseInvestigationSignal(observation.signal); - return outcome && signal ? [{ ...observation, outcome, signal }] : []; + if (!(outcome && signal)) { + throw new Error( + `Persisted run observation ${observation.signalKey} is invalid` + ); + } + return { ...observation, outcome, signal }; }); } - -/** @deprecated Use findRunObservations so callers preserve all work in a run. */ -export async function findRunObservation(params: { - organizationId: string; - runId: string; - websiteId: string; -}) { - return (await findRunObservations(params))[0]; -} From 9f37f674995694d731e4510580c6f9aa17de2394 Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:48:05 +0300 Subject: [PATCH 019/131] style(insights): format candidate plan import --- apps/insights/src/run-candidate-plan.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/apps/insights/src/run-candidate-plan.ts b/apps/insights/src/run-candidate-plan.ts index 13570232d7..277290a26d 100644 --- a/apps/insights/src/run-candidate-plan.ts +++ b/apps/insights/src/run-candidate-plan.ts @@ -6,10 +6,7 @@ import { coveragePortfolioLimit, type CoveragePortfolioReason, } from "./coverage-planner"; -import { - type InsightRunIdentity, - runIdentityCondition, -} from "./effects"; +import { type InsightRunIdentity, runIdentityCondition } from "./effects"; const frozenPlanReasonSchema = z.enum(["manual", "scheduled"]); From 9ec5bf3cacba69490097d4ea26bbdcf2274d4cb5 Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:51:26 +0300 Subject: [PATCH 020/131] fix(basket): use current producer send api --- apps/basket/src/lib/blocked-traffic.ts | 4 ++-- apps/basket/src/lib/request-validation-logic.test.ts | 9 +++------ apps/basket/src/lib/request-validation.ts | 4 ++-- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/apps/basket/src/lib/blocked-traffic.ts b/apps/basket/src/lib/blocked-traffic.ts index bc1523d175..abf4f9367c 100644 --- a/apps/basket/src/lib/blocked-traffic.ts +++ b/apps/basket/src/lib/blocked-traffic.ts @@ -3,7 +3,7 @@ import { queueBlockedTrafficAlert, type BlockedTrafficAlertContext, } from "@lib/blocked-traffic-alerts"; -import { runFork, sendBuffered } from "@lib/producer"; +import { runFork, send } from "@lib/producer"; import { captureError } from "@lib/tracing"; import { extractIpFromRequest, getGeo } from "@utils/ip-geo"; import { parseUserAgent } from "@utils/user-agent"; @@ -93,7 +93,7 @@ async function _logBlockedTrafficAsync( // Security telemetry must never delay the rejection path. It is explicitly // buffered and drained on shutdown; core customer events use durable send. - runFork(sendBuffered("analytics-blocked-traffic", blockedEvent)); + runFork(send("analytics-blocked-traffic", blockedEvent)); queueBlockedTrafficAlert(blockedEvent, context); } catch (error) { captureError(error, { message: "Failed to log blocked traffic" }); diff --git a/apps/basket/src/lib/request-validation-logic.test.ts b/apps/basket/src/lib/request-validation-logic.test.ts index 05ea1539ce..0ad8828988 100644 --- a/apps/basket/src/lib/request-validation-logic.test.ts +++ b/apps/basket/src/lib/request-validation-logic.test.ts @@ -10,7 +10,6 @@ const { mockLogBlockedTraffic, mockRunFork, mockSend, - mockSendBuffered, mockDetectBot, mockLoggerSet, mockLoggerWarn, @@ -33,7 +32,6 @@ const { mockLogBlockedTraffic: vi.fn(() => {}), mockRunFork: vi.fn(() => {}), mockSend: vi.fn(() => ({})), - mockSendBuffered: vi.fn(() => ({})), mockDetectBot: vi.fn(() => ({ isBot: false })), mockLoggerSet: vi.fn(() => {}), mockLoggerWarn: vi.fn(() => {}), @@ -57,7 +55,6 @@ vi.mock("@lib/blocked-traffic", () => ({ vi.mock("@lib/producer", () => ({ runFork: mockRunFork, send: mockSend, - sendBuffered: mockSendBuffered, })); vi.mock("ua-parser-js/bot-detection", () => ({ @@ -420,7 +417,7 @@ describe("checkForBot", () => { expect(result).toBeDefined(); expect(result!.error).toBeDefined(); expect(result!.error!.status).toBe(204); - expect(mockSendBuffered).toHaveBeenCalledWith( + expect(mockSend).toHaveBeenCalledWith( "analytics-ai-traffic-spans", expect.objectContaining({ client_id: "ws_1", @@ -440,7 +437,7 @@ describe("checkForBot", () => { result: { category: "ai_crawler" }, }); await checkForBot(makeReq(), { url: "/from-url" }, {}, "ws_1", "ClaudeBot"); - expect(mockSendBuffered).toHaveBeenCalledWith( + expect(mockSend).toHaveBeenCalledWith( "analytics-ai-traffic-spans", expect.objectContaining({ path: "/from-url" }) ); @@ -460,7 +457,7 @@ describe("checkForBot", () => { "ws_1", "Bot" ); - expect(mockSendBuffered).toHaveBeenCalledWith( + expect(mockSend).toHaveBeenCalledWith( "analytics-ai-traffic-spans", expect.objectContaining({ path: "https://ref.com/page" }) ); diff --git a/apps/basket/src/lib/request-validation.ts b/apps/basket/src/lib/request-validation.ts index 298de5536b..f6fd33bf07 100644 --- a/apps/basket/src/lib/request-validation.ts +++ b/apps/basket/src/lib/request-validation.ts @@ -5,7 +5,7 @@ import { } from "@hooks/auth"; import { checkAutumnUsage } from "@lib/billing"; import { logBlockedTraffic } from "@lib/blocked-traffic"; -import { runFork, sendBuffered } from "@lib/producer"; +import { runFork, send } from "@lib/producer"; import { basketErrors } from "@lib/structured-errors"; import { record } from "@lib/tracing"; import { extractIpFromRequest, extractTrustedClientIp } from "@utils/ip-geo"; @@ -286,7 +286,7 @@ export function checkForBot( undefined; runFork( - sendBuffered("analytics-ai-traffic-spans", { + send("analytics-ai-traffic-spans", { client_id: clientId, timestamp: Date.now(), bot_type: result?.category || "unknown", From 12af33a45ba5539e06378018a0affe98b1be27f4 Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:51:37 +0300 Subject: [PATCH 021/131] fix(insights): retry malformed structured output --- apps/insights/src/agent.ts | 177 +++++++++++++------ apps/insights/src/investigation-flow.test.ts | 34 ++++ 2 files changed, 158 insertions(+), 53 deletions(-) diff --git a/apps/insights/src/agent.ts b/apps/insights/src/agent.ts index 02e01d0173..0061bba63d 100644 --- a/apps/insights/src/agent.ts +++ b/apps/insights/src/agent.ts @@ -17,6 +17,7 @@ import { import { type LanguageModel, type LanguageModelUsage, + NoObjectGeneratedError, Output, stepCountIs, type ToolLoopAgentOnStepFinishCallback, @@ -27,9 +28,41 @@ import type { MeasurementCandidate } from "./detection"; const MAX_STEPS = 8; const TIMEOUT_MS = 2 * 60_000; +const STRUCTURED_OUTPUT_ATTEMPTS = 2; const INSIGHTS_MODEL_ID = "openai/gpt-5.6-terra"; const INSIGHTS_MODEL = createModelFromId(INSIGHTS_MODEL_ID); +function aggregateUsage(usages: LanguageModelUsage[]): LanguageModelUsage { + const sum = (values: Array) => + values.reduce((total, value) => total + (value ?? 0), 0); + return { + cachedInputTokens: sum(usages.map((usage) => usage.cachedInputTokens)), + inputTokenDetails: { + cacheReadTokens: sum( + usages.map((usage) => usage.inputTokenDetails.cacheReadTokens) + ), + cacheWriteTokens: sum( + usages.map((usage) => usage.inputTokenDetails.cacheWriteTokens) + ), + noCacheTokens: sum( + usages.map((usage) => usage.inputTokenDetails.noCacheTokens) + ), + }, + inputTokens: sum(usages.map((usage) => usage.inputTokens)), + outputTokenDetails: { + reasoningTokens: sum( + usages.map((usage) => usage.outputTokenDetails.reasoningTokens) + ), + textTokens: sum( + usages.map((usage) => usage.outputTokenDetails.textTokens) + ), + }, + outputTokens: sum(usages.map((usage) => usage.outputTokens)), + reasoningTokens: sum(usages.map((usage) => usage.reasoningTokens)), + totalTokens: sum(usages.map((usage) => usage.totalTokens)), + }; +} + type InterruptingNext = Extract< InvestigationOutcome["next"], { type: "act" | "ask" } @@ -346,7 +379,11 @@ export async function runInsightAgent( ? `${INSTRUCTIONS}\n\n${REPLY_INSTRUCTIONS}` : INSTRUCTIONS, tools: investigationTools, - output: Output.object({ schema: agentInvestigationOutcomeSchema }), + output: Output.object({ + description: "One complete, evidence-backed investigation outcome.", + name: "investigation_outcome", + schema: agentInvestigationOutcomeSchema, + }), stopWhen: stepCountIs(MAX_STEPS), maxRetries: AI_MODEL_MAX_RETRIES, maxOutputTokens: 1800, @@ -358,60 +395,94 @@ export async function runInsightAgent( functionId: "databuddy.insights.investigate", }, }); - const result = await agent.generate({ - abortSignal: options.abortSignal, - onStepFinish: options.onStepFinish, - prompt: JSON.stringify({ - asOf: input.appContext.currentDateTime, - website: { - domain: input.appContext.websiteDomain ?? null, - id: input.appContext.websiteId ?? null, - name: input.appContext.websiteName ?? null, - }, - repository: input.githubRepository, - evidence: input.evidence, - history: input.history.map((item) => - item.kind === "investigation" - ? { - asOf: item.asOf, - evidence: item.evidence, - kind: item.kind, - outcome: item.outcome, - signal: promptSignal(item.signal), - } - : item - ), - otherOpenWork: input.otherOpenWork, - measurementCandidate: input.measurementCandidate ?? null, - ...(input.request + const prompt = { + asOf: input.appContext.currentDateTime, + website: { + domain: input.appContext.websiteDomain ?? null, + id: input.appContext.websiteId ?? null, + name: input.appContext.websiteName ?? null, + }, + repository: input.githubRepository, + evidence: input.evidence, + history: input.history.map((item) => + item.kind === "investigation" ? { - request: { - body: input.request.body, - createdAt: input.request.createdAt, - }, + asOf: item.asOf, + evidence: item.evidence, + kind: item.kind, + outcome: item.outcome, + signal: promptSignal(item.signal), } - : {}), - relatedSignals: (input.relatedSignals ?? []).map(promptSignal), - signal: promptSignal(input.signal), - }), - timeout: { totalMs: TIMEOUT_MS }, - }); - const toolCallCount = result.steps.reduce( - (count, step) => count + step.toolCalls.length, - 0 - ); - return { - modelId: result.response.modelId, - outcome: validateAgentOutcome( - result.output, - input, - new Set( - result.steps.flatMap((step) => - step.toolCalls.map((toolCall) => toolCall.toolName) - ) - ) + : item ), - toolCallCount, - usage: result.totalUsage, + otherOpenWork: input.otherOpenWork, + measurementCandidate: input.measurementCandidate ?? null, + ...(input.request + ? { + request: { + body: input.request.body, + createdAt: input.request.createdAt, + }, + } + : {}), + relatedSignals: (input.relatedSignals ?? []).map(promptSignal), + signal: promptSignal(input.signal), }; + const deadline = Date.now() + TIMEOUT_MS; + const usages: LanguageModelUsage[] = []; + let toolCallCount = 0; + let lastOutputError: unknown; + for (let attempt = 0; attempt < STRUCTURED_OUTPUT_ATTEMPTS; attempt += 1) { + const usageCount = usages.length; + try { + const result = await agent.generate({ + abortSignal: options.abortSignal, + onStepFinish: async (step) => { + usages.push(step.usage); + toolCallCount += step.toolCalls.length; + await options.onStepFinish?.(step); + }, + prompt: JSON.stringify({ + ...prompt, + ...(attempt > 0 + ? { + outputRetry: + "The prior final response was not valid structured output. Return exactly one complete object matching the required schema.", + } + : {}), + }), + timeout: { totalMs: Math.max(1, deadline - Date.now()) }, + }); + return { + modelId: result.response.modelId, + outcome: validateAgentOutcome( + result.output, + input, + new Set( + result.steps.flatMap((step) => + step.toolCalls.map((toolCall) => toolCall.toolName) + ) + ) + ), + toolCallCount, + usage: aggregateUsage(usages), + }; + } catch (error) { + if (!NoObjectGeneratedError.isInstance(error)) { + throw error; + } + if (usages.length === usageCount && error.usage) { + usages.push(error.usage); + } + lastOutputError = error; + if ( + attempt === STRUCTURED_OUTPUT_ATTEMPTS - 1 || + error.finishReason === "content-filter" || + Date.now() >= deadline + ) { + throw error; + } + } + } + throw lastOutputError; } diff --git a/apps/insights/src/investigation-flow.test.ts b/apps/insights/src/investigation-flow.test.ts index fe2ea6d7b0..73187cb80b 100644 --- a/apps/insights/src/investigation-flow.test.ts +++ b/apps/insights/src/investigation-flow.test.ts @@ -165,6 +165,40 @@ describe("intelligence agent", () => { ); }); + it("retries one malformed final object without losing its usage", async () => { + const model = new MockLanguageModelV3({ + doGenerate: mockValues( + { + content: [{ type: "text" as const, text: "not-json" }], + finishReason: { unified: "stop" as const, raw: undefined }, + usage, + warnings: [], + }, + outputResponse(agentOutcome) + ), + }); + + const result = await runInsightAgent( + { + appContext: appContext(), + evidence, + githubRepository: null, + history: [], + otherOpenWork: [], + signal, + }, + { model, tools: {} } + ); + + expect(result.outcome).toEqual(outcome); + expect(result.usage?.inputTokens).toBe(2); + expect(result.usage?.outputTokens).toBe(2); + expect(model.doGenerateCalls).toHaveLength(2); + expect(JSON.stringify(model.doGenerateCalls[1]?.prompt)).toContain( + "prior final response was not valid structured output" + ); + }); + it("accepts an observed event as a review-only goal draft", async () => { const result = await runInsightAgent( { From addd88c13264e04723ae8a68f869770ca5bda10f Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:54:26 +0300 Subject: [PATCH 022/131] fix(insights): respect cooldowns on manual scans --- apps/insights/src/coverage-planner.test.ts | 64 +++++++++++++++++++- apps/insights/src/generation-sources.test.ts | 14 ++--- apps/insights/src/generation.ts | 15 ++--- apps/insights/src/production-shadow.ts | 1 - 4 files changed, 74 insertions(+), 20 deletions(-) diff --git a/apps/insights/src/coverage-planner.test.ts b/apps/insights/src/coverage-planner.test.ts index bca2e47d30..d1defd2173 100644 --- a/apps/insights/src/coverage-planner.test.ts +++ b/apps/insights/src/coverage-planner.test.ts @@ -4,7 +4,11 @@ import { coveragePortfolioLimit, planCoveragePortfolio, } from "./coverage-planner"; -import { signalKeyForDetectedSignal } from "./investigation"; +import { + prepareInvestigation, + signalKeyForDetectedSignal, +} from "./investigation"; +import { eligibleSignalsForInvestigation } from "./observations"; function signal( overrides: Partial & Pick @@ -271,4 +275,62 @@ describe("planCoveragePortfolio", () => { keys(planCoveragePortfolio([...candidates].reverse(), { reason: "manual" })) ); }); + + it("rotates a repeated scan to unseen signals instead of repeating the first portfolio", () => { + const candidates = [ + signal({ metric: "error_count", subjectKey: "error:manifest" }), + signal({ + baseline: 2000, + current: 4000, + direction: "up", + entityId: "/billing", + metric: "lcp", + subjectKey: "route:lcp:/billing", + }), + signal({ metric: "goal:signup", subjectKey: "goal:signup" }), + signal({ metric: "custom_event_count", subjectKey: "custom_event:share" }), + signal({ metric: "pageviews" }), + signal({ + baseline: 0, + current: 0, + deltaPercent: 0, + direction: "up", + metric: "measurement_coverage", + subjectKey: "measurement:conversion-coverage", + }), + ]; + const first = planCoveragePortfolio(candidates, { reason: "manual" }); + const observations = new Map( + first.map((candidate) => { + const prepared = prepareInvestigation(candidate, 7).signal; + return [ + prepared.signalKey, + { + outcome: { + evidence: ["The signal was investigated."], + impact: null, + next: { reason: "No immediate action.", type: "resolve" as const }, + rootCause: null, + summary: "The signal was investigated.", + title: "Investigated signal", + }, + recheckAt: new Date("2026-08-08T00:00:00.000Z"), + signal: prepared, + }, + ] as const; + }) + ); + const second = planCoveragePortfolio( + eligibleSignalsForInvestigation( + candidates, + observations, + new Date("2026-08-01T00:00:00.000Z") + ), + { reason: "manual" } + ); + + expect(first).toHaveLength(3); + expect(second).toHaveLength(3); + expect(keys(second).some((key) => keys(first).includes(key))).toBe(false); + }); }); diff --git a/apps/insights/src/generation-sources.test.ts b/apps/insights/src/generation-sources.test.ts index 19cb0f74be..f065d42bc4 100644 --- a/apps/insights/src/generation-sources.test.ts +++ b/apps/insights/src/generation-sources.test.ts @@ -142,7 +142,7 @@ describe("fixture investigation sources", () => { }); const artifacts = await investigateWebsitePortfolioWithSources( - { ...fixtureInput, forceRecheck: true }, + fixtureInput, sources, "manual" ); @@ -204,7 +204,7 @@ describe("fixture investigation sources", () => { await expect( investigateWebsitePortfolioWithSources( - { ...fixtureInput, forceRecheck: true }, + fixtureInput, sources, "manual" ) @@ -244,7 +244,7 @@ describe("fixture investigation sources", () => { await expect( investigateWebsitePortfolioWithSources( - { ...fixtureInput, forceRecheck: true }, + fixtureInput, sources, "manual" ) @@ -410,7 +410,6 @@ describe("fixture investigation sources", () => { }); const artifact = await investigateFixture(sources, { - forceRecheck: true, selectedSignalKey: "revenue", }); @@ -925,7 +924,7 @@ describe("fixture investigation sources", () => { ).rejects.toThrow("Due remeasurement unavailable"); }); - it("rechecks a detected signal when the run was requested manually", async () => { + it("keeps an unchanged signal in cooldown during another full scan", async () => { const prior = prepareInvestigation(trafficDrop, 7); const priorOutcome: InvestigationOutcome = { evidence: ["Visitors fell in the previous complete week."], @@ -963,12 +962,11 @@ describe("fixture investigation sources", () => { }); const artifact = await investigateFixture(sources, { - forceRecheck: true, asOf: "2026-07-19", }); - expect(investigated).toBe("visitors"); - expect(artifact.status).toBe("completed"); + expect(investigated).toBeUndefined(); + expect(artifact.status).toBe("deferred"); }); it("retries when the only fresh regression is still in cooldown", async () => { diff --git a/apps/insights/src/generation.ts b/apps/insights/src/generation.ts index f2721b1071..521211472f 100644 --- a/apps/insights/src/generation.ts +++ b/apps/insights/src/generation.ts @@ -98,8 +98,6 @@ export interface GenerateWebsiteInsightsResult { interface InvestigateWebsiteInput { asOf: Date | string; domain: string; - /** A deliberate user request may revisit a detected signal before its scheduled recheck. */ - forceRecheck?: boolean; githubRepository?: { owner: string; repo: string } | null; name?: string | null; organizationId: string; @@ -513,13 +511,11 @@ async function discoverWebsiteSignals( signalKeys: detectedSignals.map(signalKeyForDetectedSignal), websiteId: input.websiteId, }); - const eligibleSignals = input.forceRecheck - ? detectedSignals - : eligibleSignalsForInvestigation( - detectedSignals, - observations, - asOf.toDate() - ); + const eligibleSignals = eligibleSignalsForInvestigation( + detectedSignals, + observations, + asOf.toDate() + ); const dueSignalKey = remeasuredDue ? signalKeyForDetectedSignal(remeasuredDue) : null; @@ -879,7 +875,6 @@ export async function generateWebsiteInsights( const investigationInput: InvestigateWebsiteInput = { asOf: new Date(), domain: site.domain, - forceRecheck: input.reason === "manual", githubRepository: site.integrations?.github ?? null, name: site.name, organizationId: input.organizationId, diff --git a/apps/insights/src/production-shadow.ts b/apps/insights/src/production-shadow.ts index d9dc8c5cde..033b6fcb95 100644 --- a/apps/insights/src/production-shadow.ts +++ b/apps/insights/src/production-shadow.ts @@ -1454,7 +1454,6 @@ async function runProductionShadow(options: CliOptions): Promise { const input = { asOf, domain: site.domain, - forceRecheck: true, githubRepository: offsetDays === 0 ? site.githubRepository : null, name: site.name, organizationId: site.organizationId, From 91e2fb565e6d73b664694a6aa206bb7c1526c2cb Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:54:33 +0300 Subject: [PATCH 023/131] fix(insights): restore detector probe backpressure --- apps/insights/src/detection.ts | 58 ++++++++++++++++------------------ 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/apps/insights/src/detection.ts b/apps/insights/src/detection.ts index 930e2dafc3..a4552a6486 100644 --- a/apps/insights/src/detection.ts +++ b/apps/insights/src/detection.ts @@ -920,36 +920,34 @@ async function detectWow( ); } - const [summary, errors, revenue, vitals] = await Promise.all([ - readDetectorPair({ - abortSignal, - current: () => query("summary_metrics", currentFrom, currentTo), - family: "summary", - previous: () => query("summary_metrics", previousFrom, previousTo), - websiteId, - }), - readDetectorPair({ - abortSignal, - current: () => query("error_fingerprints", currentFrom, currentTo), - family: "errors", - previous: () => query("error_fingerprints", previousFrom, previousTo), - websiteId, - }), - readDetectorPair({ - abortSignal, - current: () => query("revenue_overview", currentFrom, currentTo), - family: "revenue", - previous: () => query("revenue_overview", previousFrom, previousTo), - websiteId, - }), - readDetectorPair({ - abortSignal, - current: () => query("vitals_overview", currentFrom, currentTo), - family: "vitals", - previous: () => query("vitals_overview", previousFrom, previousTo), - websiteId, - }), - ]); + const summary = await readDetectorPair({ + abortSignal, + current: () => query("summary_metrics", currentFrom, currentTo), + family: "summary", + previous: () => query("summary_metrics", previousFrom, previousTo), + websiteId, + }); + const errors = await readDetectorPair({ + abortSignal, + current: () => query("error_fingerprints", currentFrom, currentTo), + family: "errors", + previous: () => query("error_fingerprints", previousFrom, previousTo), + websiteId, + }); + const revenue = await readDetectorPair({ + abortSignal, + current: () => query("revenue_overview", currentFrom, currentTo), + family: "revenue", + previous: () => query("revenue_overview", previousFrom, previousTo), + websiteId, + }); + const vitals = await readDetectorPair({ + abortSignal, + current: () => query("vitals_overview", currentFrom, currentTo), + family: "vitals", + previous: () => query("vitals_overview", previousFrom, previousTo), + websiteId, + }); const [currentSummary, previousSummary] = summary.value ?? [[], []]; const [currentErrors, previousErrors] = errors.value ?? [[], []]; const [currentRevenue, previousRevenue] = revenue.value ?? [[], []]; From 899bbd80fc47252b4719049cf7ae7599ec5e0e9a Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 15:54:37 +0300 Subject: [PATCH 024/131] fix(basket): return retryable pixel on delivery failure --- apps/basket/src/routes/basket.ts | 31 ++++++++++++++++++++++--------- apps/basket/src/utils/pixel.ts | 22 ++++++++++++++-------- 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/apps/basket/src/routes/basket.ts b/apps/basket/src/routes/basket.ts index fc530490c6..11d0615ec5 100644 --- a/apps/basket/src/routes/basket.ts +++ b/apps/basket/src/routes/basket.ts @@ -141,6 +141,19 @@ const app = new Elysia() .get("/px.jpg", async ({ query, request }) => { const log = useLogger(); log.set({ route: "pixel" }); + const retryablePixelResponse = (error: unknown) => { + const status = + error instanceof EvlogError && error.status >= 400 && error.status < 600 + ? error.status + : 503; + const retryable = + status === 408 || status === 425 || status === 429 || status >= 500; + if (!retryable) { + return createPixelResponse(); + } + log.error(error instanceof Error ? error : new Error(String(error))); + return createPixelResponse({ retryAfterSeconds: 5, status }); + }; try { const { eventData, eventType } = parsePixelQuery( @@ -168,9 +181,9 @@ const app = new Elysia() } if (eventType === "track") { - insertTrackEvent(eventData, clientId, userAgent, ip, request); + await insertTrackEvent(eventData, clientId, userAgent, ip, request); } else if (eventType === "outgoing_link") { - insertOutgoingLink(eventData, clientId, request); + await insertOutgoingLink(eventData, clientId, request); } else if (eventType === "web_vitals") { const vitalParse = individualVitalSchema.safeParse(eventData); if (!vitalParse.success) { @@ -181,7 +194,11 @@ const app = new Elysia() [vitalParse.data], request ); - insertIndividualVitals([vitalParse.data], clientId, visitorCountry); + await insertIndividualVitals( + [vitalParse.data], + clientId, + visitorCountry + ); } else if (eventType === "error") { const errorParse = errorSpanSchema.safeParse(eventData); if (!errorParse.success) { @@ -192,16 +209,12 @@ const app = new Elysia() [errorParse.data], request ); - insertErrorSpans([errorParse.data], clientId, visitorCountry); + await insertErrorSpans([errorParse.data], clientId, visitorCountry); } return createPixelResponse(); } catch (error) { - if (error instanceof EvlogError) { - return createPixelResponse(); - } - log.error(error instanceof Error ? error : new Error(String(error))); - return createPixelResponse(); + return retryablePixelResponse(error); } }) .post("/vitals", async ({ body, query, request }) => { diff --git a/apps/basket/src/utils/pixel.ts b/apps/basket/src/utils/pixel.ts index f0cf9e9b10..4b3f5b7186 100644 --- a/apps/basket/src/utils/pixel.ts +++ b/apps/basket/src/utils/pixel.ts @@ -13,15 +13,21 @@ const TRANSPARENT_PIXEL = Buffer.from( /** * Returns a 1x1 transparent GIF response */ -export function createPixelResponse(): Response { +export function createPixelResponse( + options: { retryAfterSeconds?: number; status?: number } = {} +): Response { + const headers = new Headers({ + "Content-Type": "image/gif", + "Cache-Control": "no-cache, no-store, must-revalidate", + Pragma: "no-cache", + Expires: "0", + }); + if (options.retryAfterSeconds !== undefined) { + headers.set("Retry-After", String(options.retryAfterSeconds)); + } return new Response(TRANSPARENT_PIXEL, { - status: 200, - headers: { - "Content-Type": "image/gif", - "Cache-Control": "no-cache, no-store, must-revalidate", - Pragma: "no-cache", - Expires: "0", - }, + status: options.status ?? 200, + headers, }); } From 0899710d8ab8ea37b9299648d4557bc4e2f1a5f1 Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 16:03:39 +0300 Subject: [PATCH 025/131] test(ai): keep redis mock exports in sync --- .agents/skills/databuddy-internal/SKILL.md | 1 + packages/ai/src/ai/agents/cache.test.ts | 6 ++++++ packages/ai/src/ai/mcp/conversation-store.test.ts | 6 ++++++ 3 files changed, 13 insertions(+) diff --git a/.agents/skills/databuddy-internal/SKILL.md b/.agents/skills/databuddy-internal/SKILL.md index 84da4dc65c..d504c4a132 100644 --- a/.agents/skills/databuddy-internal/SKILL.md +++ b/.agents/skills/databuddy-internal/SKILL.md @@ -100,6 +100,7 @@ Read [codebase-map.md](./references/codebase-map.md) when you need deeper routin - Root dev orchestration: `bun run dev` - Dashboard + API together: `bun run dev:dashboard` - Tests at root currently target `./apps`: `bun run test` +- Package test mocks can leak across files in one Bun process; when `packages/ai` broadly mocks `@databuddy/redis`, keep the mock export surface in sync with runtime imports from shared RPC/tool code. - Database scripts are routed from root into `packages/db` - Runtime environment reads stay in the owning service; shared URL/public helpers live in `packages/env` - BullMQ queues use `BULLMQ_REDIS_URL`; generic Redis cache/pubsub code uses `REDIS_URL`. diff --git a/packages/ai/src/ai/agents/cache.test.ts b/packages/ai/src/ai/agents/cache.test.ts index 51227ffc0c..2c65db066e 100644 --- a/packages/ai/src/ai/agents/cache.test.ts +++ b/packages/ai/src/ai/agents/cache.test.ts @@ -102,6 +102,11 @@ vi.mock("@databuddy/redis", () => ({ website: (websiteId: string) => `website:${websiteId}`, }, cacheable: passthroughCacheable, + abandonCachedLinkMutation: vi.fn(async () => true), + beginCachedLinkMutation: vi.fn(async () => ({ + state: "acquired", + token: "test-token", + })), clearActiveStream: vi.fn(async () => undefined), closeInsightsQueue: vi.fn(async () => undefined), closeUptimeQueue: vi.fn(async () => undefined), @@ -119,6 +124,7 @@ vi.mock("@databuddy/redis", () => ({ getInsightsQueue: vi.fn(() => ({})), getRedisCache: () => mockRedisClient, getUptimeQueue: vi.fn(() => ({})), + finishCachedLinkMutation: vi.fn(async () => true), invalidateAgentContextSnapshot: vi.fn(async () => 0), invalidateAgentContextSnapshotsForOwner: vi.fn(async () => 0), invalidateAgentContextSnapshotsForWebsite: vi.fn(async () => 0), diff --git a/packages/ai/src/ai/mcp/conversation-store.test.ts b/packages/ai/src/ai/mcp/conversation-store.test.ts index db6f8614f0..4150344016 100644 --- a/packages/ai/src/ai/mcp/conversation-store.test.ts +++ b/packages/ai/src/ai/mcp/conversation-store.test.ts @@ -69,6 +69,11 @@ vi.mock("@databuddy/redis", () => ({ website: (websiteId: string) => `website:${websiteId}`, }, cacheable: unknown>(fn: T) => fn, + abandonCachedLinkMutation: vi.fn(async () => true), + beginCachedLinkMutation: vi.fn(async () => ({ + state: "acquired", + token: "test-token", + })), clearActiveStream: vi.fn(async () => undefined), closeInsightsQueue: vi.fn(async () => undefined), closeUptimeQueue: vi.fn(async () => undefined), @@ -93,6 +98,7 @@ vi.mock("@databuddy/redis", () => ({ } return mockRedisClient; }, + finishCachedLinkMutation: vi.fn(async () => true), getInsightsQueue: vi.fn(() => ({})), getUptimeQueue: vi.fn(() => ({})), invalidateAgentContextSnapshot: vi.fn(async () => 0), From 6f2e56f1e87e8c2a2fe53e606c642b4d12697059 Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 16:08:11 +0300 Subject: [PATCH 026/131] test(dashboard): use playwright goal draft locators --- .../measurement-recommendations.spec.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/apps/dashboard/test/e2e/specs/regressions/measurement-recommendations.spec.ts b/apps/dashboard/test/e2e/specs/regressions/measurement-recommendations.spec.ts index 74124af7fd..7aca586b8a 100644 --- a/apps/dashboard/test/e2e/specs/regressions/measurement-recommendations.spec.ts +++ b/apps/dashboard/test/e2e/specs/regressions/measurement-recommendations.spec.ts @@ -105,14 +105,15 @@ test( await authenticatedPage .getByRole("button", { name: "Review goal draft" }) .click(); - await expect( - authenticatedPage.getByText("Review Goal Draft", { exact: true }) - ).toBeVisible(); - await expect( - authenticatedPage.getByDisplayValue("Checkout completed") - ).toBeVisible(); - await expect( - authenticatedPage.getByDisplayValue("checkout_completed") - ).toBeVisible(); + const dialog = authenticatedPage.getByRole("dialog", { + name: "Review Goal Draft", + }); + await expect(dialog).toBeVisible(); + await expect(dialog.getByRole("textbox", { name: "Name" })).toHaveValue( + "Checkout completed" + ); + await expect(dialog.locator('input[placeholder="event_name"]')).toHaveValue( + "checkout_completed" + ); } ); From 988384b5fe7cf849511a4e7cfb0358161b3b02a0 Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 17:03:26 +0300 Subject: [PATCH 027/131] chore(deps): sync links and video dependencies --- apps/links/package.json | 1 + apps/video/package.json | 10 +++++----- bun.lock | 13 +++++++++---- package.json | 6 +++++- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/apps/links/package.json b/apps/links/package.json index d074a19186..5fb3ed2667 100644 --- a/apps/links/package.json +++ b/apps/links/package.json @@ -16,6 +16,7 @@ "@databuddy/redis": "workspace:*", "@databuddy/shared": "workspace:*", "@maxmind/geoip2-node": "^6.3.4", + "bullmq": "^5.78.0", "elysia": "catalog:", "evlog": "catalog:", "kafkajs": "^2.2.4", diff --git a/apps/video/package.json b/apps/video/package.json index f5be515049..208f6b9304 100644 --- a/apps/video/package.json +++ b/apps/video/package.json @@ -7,12 +7,12 @@ "type": "module", "packageManager": "bun@1.3.14", "dependencies": { - "@remotion/cli": "4.0.502", - "@remotion/fonts": "4.0.502", - "@remotion/media": "4.0.502", + "@remotion/cli": "catalog:", + "@remotion/fonts": "catalog:", + "@remotion/media": "catalog:", "react": "catalog:", "react-dom": "catalog:", - "remotion": "4.0.502" + "remotion": "catalog:" }, "devDependencies": { "@types/react": "catalog:", @@ -22,7 +22,7 @@ "scripts": { "studio": "remotion studio", "video:bundle": "remotion bundle src/index.ts", - "video:render": "remotion render src/index.ts IntelligencePlatform out/intelligence-platform.mp4", + "video:render": "bun src/render.ts", "check-types": "tsc --noEmit" }, "sideEffects": [ diff --git a/bun.lock b/bun.lock index 6901076da5..eb18a8b59a 100644 --- a/bun.lock +++ b/bun.lock @@ -365,6 +365,7 @@ "@databuddy/redis": "workspace:*", "@databuddy/shared": "workspace:*", "@maxmind/geoip2-node": "^6.3.4", + "bullmq": "^5.78.0", "elysia": "catalog:", "evlog": "catalog:", "kafkajs": "^2.2.4", @@ -439,12 +440,12 @@ "name": "@databuddy/video", "version": "1.0.0", "dependencies": { - "@remotion/cli": "4.0.502", - "@remotion/fonts": "4.0.502", - "@remotion/media": "4.0.502", + "@remotion/cli": "catalog:", + "@remotion/fonts": "catalog:", + "@remotion/media": "catalog:", "react": "catalog:", "react-dom": "catalog:", - "remotion": "4.0.502", + "remotion": "catalog:", }, "devDependencies": { "@types/react": "catalog:", @@ -839,6 +840,9 @@ "@radix-ui/react-popover": "^1.1.14", "@radix-ui/react-slot": "^1.2.3", "@radix-ui/react-switch": "^1.2.5", + "@remotion/cli": "4.0.502", + "@remotion/fonts": "4.0.502", + "@remotion/media": "4.0.502", "@tanstack/react-query": "^5.82.0", "@tokenlens/models": "1.3.0", "@types/bun": "1.3.14", @@ -859,6 +863,7 @@ "pino": "^9.7.0", "react": "19.2.6", "react-dom": "19.2.6", + "remotion": "4.0.502", "sonner": "^2.0.6", "stripe": "^18.2.1", "superjson": "^2.2.2", diff --git a/package.json b/package.json index bce2d7289c..85a9b6f52e 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,11 @@ "ua-parser-js": "^2.0.8", "evlog": "^2.11.1", "tokenlens": "^2.0.0-alpha.3", - "@tokenlens/models": "1.3.0" + "@tokenlens/models": "1.3.0", + "@remotion/cli": "4.0.502", + "@remotion/fonts": "4.0.502", + "@remotion/media": "4.0.502", + "remotion": "4.0.502" } }, "dependencies": { From 162c4e2115f7b24b9823f87792599b1a5f7961df Mon Sep 17 00:00:00 2001 From: iza <59828082+izadoesdev@users.noreply.github.com> Date: Sat, 1 Aug 2026 17:03:36 +0300 Subject: [PATCH 028/131] fix(basket): make ingest handoff durable --- apps/basket/src/index.ts | 37 +- apps/basket/src/lib/blocked-traffic.ts | 4 +- apps/basket/src/lib/event-service.test.ts | 496 +++++---------- apps/basket/src/lib/event-service.ts | 334 +++++++--- apps/basket/src/lib/producer.delivery.test.ts | 256 ++++++++ apps/basket/src/lib/producer.kafka.test.ts | 5 +- apps/basket/src/lib/producer.test.ts | 39 +- apps/basket/src/lib/producer.ts | 583 +++++++++--------- apps/basket/src/lib/security.test.ts | 238 +++++-- apps/basket/src/lib/security.ts | 165 ++++- apps/basket/src/routes/basket.ts | 56 +- apps/basket/src/routes/integration.test.ts | 13 +- 12 files changed, 1395 insertions(+), 831 deletions(-) create mode 100644 apps/basket/src/lib/producer.delivery.test.ts diff --git a/apps/basket/src/index.ts b/apps/basket/src/index.ts index 2de440da5c..c1601750ae 100644 --- a/apps/basket/src/index.ts +++ b/apps/basket/src/index.ts @@ -8,7 +8,12 @@ import { import { shutdownPostgres } from "@databuddy/db"; import { clickHouse } from "@databuddy/db/clickhouse"; import { getRedisCache } from "@databuddy/redis/redis"; -import { disconnect, disposeRuntime, runPromise } from "@lib/producer"; +import { + disconnect, + disposeRuntime, + runPromise, + ShutdownDrainError, +} from "@lib/producer"; import { Kafka } from "kafkajs"; import { databuddyEvlogRedaction } from "@databuddy/shared/evlog-redaction"; import { @@ -79,13 +84,35 @@ async function gracefulShutdown(signal: string, exitCode = 0) { error_message: error instanceof Error ? error.message : String(error), }); const { shutdownRedis } = await import("@databuddy/redis"); + // Wait for acknowledged delivery before tearing down its dependencies. + try { + await runPromise(disconnect); + } catch (error) { + finalExitCode = 1; + if (error instanceof ShutdownDrainError) { + log.error({ + lifecycle: "producerDrain", + error_message: + "Basket producer drain timed out waiting for in-flight delivery", + in_flight: error.inFlight, + drain_timeout_ms: error.deadlineMs, + }); + } else { + logErr("producerDrain")(error); + } + } finally { + try { + await disposeRuntime(); + } catch (error) { + finalExitCode = 1; + logErr("runtimeDispose")(error); + } + } await Promise.all([ shutdownRedis().catch(logErr("redisShutdown")), shutdownPostgres().catch(logErr("postgresShutdown")), - flushBatchedAxiomDrain().catch(logErr("drainFlush")), - runPromise(disconnect).catch(logErr("shutdown")), - disposeRuntime().catch(logErr("runtimeDispose")), ]); + await flushBatchedAxiomDrain().catch(logErr("drainFlush")); closeGeoIPReader(); } catch (error) { finalExitCode = 1; @@ -209,8 +236,8 @@ const app = new Elysia() username: process.env.REDPANDA_USER, password: process.env.REDPANDA_PASSWORD, }, - ssl: false, }), + ...(process.env.REDPANDA_SSL === "true" ? { ssl: true } : {}), }); const admin = kafka.admin(); try { diff --git a/apps/basket/src/lib/blocked-traffic.ts b/apps/basket/src/lib/blocked-traffic.ts index abf4f9367c..57ae97dd8a 100644 --- a/apps/basket/src/lib/blocked-traffic.ts +++ b/apps/basket/src/lib/blocked-traffic.ts @@ -91,8 +91,8 @@ async function _logBlockedTrafficAsync( created_at: now, }; - // Security telemetry must never delay the rejection path. It is explicitly - // buffered and drained on shutdown; core customer events use durable send. + // Security telemetry must never delay the rejection path; producer + // failures are captured by the shared fire-and-forget send path. runFork(send("analytics-blocked-traffic", blockedEvent)); queueBlockedTrafficAlert(blockedEvent, context); } catch (error) { diff --git a/apps/basket/src/lib/event-service.test.ts b/apps/basket/src/lib/event-service.test.ts index 353fe536cd..b34120dd2f 100644 --- a/apps/basket/src/lib/event-service.test.ts +++ b/apps/basket/src/lib/event-service.test.ts @@ -1,352 +1,182 @@ -import { describe, expect, test } from "vitest"; -import { CONTROL_CHARS, longString, XSS_PAYLOADS } from "../test-helpers"; -import { buildTrackEvent, type TrackEventContext } from "./event-service"; - -// ── Fixtures ── - -const NOW = 1_700_000_000_000; - -const fullTrackData = { - name: "pageview", - timestamp: 1_700_000_001_000, - sessionStartTime: 1_700_000_000_500, - sessionId: "sess_abc123", - anonymousId: "anon_1", - referrer: "https://google.com", - path: "/dashboard", - title: "Dashboard | App", - screen_resolution: "1920x1080", - viewport_size: "1024x768", - language: "en-US", - timezone: "America/New_York", - connection_type: "wifi", - rtt: 50, - downlink: 10.5, - time_on_page: 30_000, - scroll_depth: 75, - interaction_count: 12, - page_count: 3, - utm_source: "google", - utm_medium: "cpc", - utm_campaign: "summer", - utm_term: "analytics", - utm_content: "banner", - gclid: "gclid_abc", - load_time: 1500, - dom_ready_time: 800, - dom_interactive: 600, - ttfb: 200, - connection_time: 50, - render_time: 100, - redirect_time: 10, - domain_lookup_time: 30, - properties: { plan: "pro", color: "blue" }, -}; - -const fullCtx: TrackEventContext = { - clientId: "ws_test", - eventId: "evt_123", - anonymousId: "salted_anon_1", - geo: { - anonymizedIP: "abc123def456", - country: "United States", - region: "California", - city: "San Francisco", +import { beforeEach, describe, expect, test, vi } from "vitest"; + +const { + mockApplyVisitorIdPrivacy, + mockGetDailySalt, + mockGetGeo, + mockMarkDuplicateReservationDelivered, + mockParseUserAgent, + mockReleaseDuplicateReservation, + mockReserveDuplicate, + mockRunPromise, + mockSend, + mockShouldAnonymizeVisitorIds, + mockUseLogger, +} = vi.hoisted(() => ({ + mockApplyVisitorIdPrivacy: vi.fn((id: unknown) => + typeof id === "string" ? id : "" + ), + mockGetDailySalt: vi.fn(() => Promise.resolve("daily-salt")), + mockGetGeo: vi.fn(() => + Promise.resolve({ + anonymizedIP: "1.2.3.0", + city: "San Francisco", + country: "US", + region: "CA", + }) + ), + mockParseUserAgent: vi.fn(() => + Promise.resolve({ + browserName: "Chrome", + browserVersion: "120", + deviceType: "desktop", + osName: "macOS", + osVersion: "14", + }) + ), + mockMarkDuplicateReservationDelivered: vi.fn(() => Promise.resolve()), + mockReleaseDuplicateReservation: vi.fn(() => Promise.resolve()), + mockReserveDuplicate: vi.fn(() => + Promise.resolve({ + duplicate: false, + key: "dedup:track:stable-id", + token: "pending:test", + ttl: 86_400, + }) + ), + mockRunPromise: vi.fn(() => Promise.resolve()), + mockSend: vi.fn(() => ({ type: "producer-effect" })), + mockShouldAnonymizeVisitorIds: vi.fn(() => false), + mockUseLogger: { + set: vi.fn(), }, - ua: { - browserName: "Chrome", - browserVersion: "120.0", - osName: "Windows", - osVersion: "10", - deviceType: "desktop", - deviceBrand: "Dell", - deviceModel: "XPS", - }, - now: NOW, -}; - -// ── Field mapping snapshot ── - -describe("buildTrackEvent — field mapping", () => { - test("full input → every field mapped correctly", () => { - const result = buildTrackEvent(fullTrackData, fullCtx); - - // Identity - expect(result.id).toBeTruthy(); // randomUUIDv7 - expect(result.client_id).toBe("ws_test"); - - // Names & content - expect(result.event_name).toBe("pageview"); - expect(result.title).toBe("Dashboard | App"); - expect(result.referrer).toBe("https://google.com"); - expect(result.path).toBe("/dashboard"); - expect(result.url).toBe("/dashboard"); // url === path - - // User identity - expect(result.anonymous_id).toBe("salted_anon_1"); - expect(result.session_id).toBe("sess_abc123"); - - // Timestamps — uses trackData values when numeric - expect(result.timestamp).toBe(1_700_000_001_000); - expect(result.time).toBe(1_700_000_001_000); - expect(result.created_at).toBe(NOW); - - // Geo - expect(result.ip).toBe("abc123def456"); - expect(result.country).toBe("United States"); - expect(result.region).toBe("California"); - expect(result.city).toBe("San Francisco"); - - // UA - expect(result.user_agent).toBe(""); // always empty (privacy) - expect(result.browser_name).toBe("Chrome"); - expect(result.browser_version).toBe("120.0"); - expect(result.os_name).toBe("Windows"); - expect(result.os_version).toBe("10"); - expect(result.device_type).toBe("desktop"); - expect(result.device_brand).toBe("Dell"); - expect(result.device_model).toBe("XPS"); - - // Client context — passthrough - expect(result.viewport_size).toBe("1024x768"); - expect(result.language).toBe("en-US"); - expect(result.timezone).toBe("America/New_York"); - - // Engagement - expect(result.time_on_page).toBe(30_000); - expect(result.scroll_depth).toBe(75); - expect(result.interaction_count).toBe(12); - expect(result.page_count).toBe(3); - - // UTM - expect(result.utm_source).toBe("google"); - expect(result.utm_medium).toBe("cpc"); - expect(result.utm_campaign).toBe("summer"); - expect(result.utm_term).toBe("analytics"); - expect(result.utm_content).toBe("banner"); - expect(result.gclid).toBe("gclid_abc"); - - // Performance — validated through validatePerformanceMetric - expect(result.dom_ready_time).toBe(800); - expect(result.ttfb).toBe(200); - expect(result.render_time).toBe(100); - - // Properties - expect(result.properties).toBe('{"plan":"pro","color":"blue"}'); - }); - - test("minimal input → defaults applied", () => { - const result = buildTrackEvent({ name: "click" }, fullCtx); - - expect(result.event_name).toBe("click"); - expect(result.timestamp).toBe(NOW); // falls back to ctx.now - expect(result.time).toBe(NOW); - expect(result.page_count).toBe(1); // default - expect(result.properties).toBe("{}"); // empty - expect(result.referrer).toBe(""); - expect(result.path).toBe(""); - expect(result.url).toBe(""); - expect(result.title).toBe(""); - expect(result.session_id).toBe(""); +})); + +vi.mock("@lib/producer", () => ({ + runPromise: mockRunPromise, + send: mockSend, + sendBatch: vi.fn(), +})); + +vi.mock("@lib/security", () => ({ + applyVisitorIdPrivacy: mockApplyVisitorIdPrivacy, + getDailySalt: mockGetDailySalt, + markDuplicateReservationDelivered: mockMarkDuplicateReservationDelivered, + releaseDuplicateReservation: mockReleaseDuplicateReservation, + reserveDuplicate: mockReserveDuplicate, + shouldAnonymizeVisitorIds: mockShouldAnonymizeVisitorIds, +})); + +vi.mock("@lib/tracing", () => ({ + record: (_name: string, fn: () => Promise) => fn(), +})); + +vi.mock("@utils/ip-geo", () => ({ + extractTrustedClientIp: vi.fn(() => "1.2.3.4"), + getGeo: mockGetGeo, +})); + +vi.mock("@utils/user-agent", () => ({ + parseUserAgent: mockParseUserAgent, +})); + +vi.mock("evlog/elysia", () => ({ + useLogger: () => mockUseLogger, +})); + +const { insertOutgoingLink, insertTrackEvent, stableAnalyticsEventId } = + await import("./event-service"); + +describe("event-service producer handoff", () => { + beforeEach(() => { + mockApplyVisitorIdPrivacy.mockClear(); + mockGetDailySalt.mockClear(); + mockGetGeo.mockClear(); + mockMarkDuplicateReservationDelivered.mockClear(); + mockParseUserAgent.mockClear(); + mockReleaseDuplicateReservation.mockClear(); + mockReserveDuplicate.mockClear(); + mockRunPromise.mockClear(); + mockSend.mockClear(); + mockShouldAnonymizeVisitorIds.mockClear(); + mockUseLogger.set.mockClear(); }); - test("missing geo fields → empty strings", () => { - const ctx = { ...fullCtx, geo: { anonymizedIP: "" } }; - const result = buildTrackEvent({ name: "x" }, ctx); - expect(result.ip).toBe(""); - expect(result.country).toBe(""); - expect(result.region).toBe(""); - expect(result.city).toBe(""); - }); - - test("missing UA fields → empty strings", () => { - const ctx = { ...fullCtx, ua: {} }; - const result = buildTrackEvent({ name: "x" }, ctx); - expect(result.browser_name).toBe(""); - expect(result.os_name).toBe(""); - expect(result.device_type).toBe(""); - }); - - test("non-numeric timestamp → uses ctx.now", () => { - const result = buildTrackEvent( - { name: "x", timestamp: "not-a-number", sessionStartTime: null }, - fullCtx - ); - expect(result.timestamp).toBe(NOW); - }); + test("awaits track event producer admission", async () => { + const effect = { type: "track-effect" }; + mockSend.mockReturnValueOnce(effect); - test("performance metrics validated (negative → undefined)", () => { - const result = buildTrackEvent({ name: "x", ttfb: 999_999 }, fullCtx); - expect(result.ttfb).toBeUndefined(); // >300000 - }); - - test("event_name sanitized (truncated to 255)", () => { - const result = buildTrackEvent({ name: longString(300) }, fullCtx); - expect(result.event_name.length).toBeLessThanOrEqual(255); - }); - - test("referrer/path/title sanitized (truncated to 2048)", () => { - const result = buildTrackEvent( - { - name: "x", - referrer: longString(3000), - path: longString(3000), - title: longString(3000), - }, - fullCtx - ); - expect(result.referrer.length).toBeLessThanOrEqual(2048); - expect(result.path.length).toBeLessThanOrEqual(2048); - expect(result.title.length).toBeLessThanOrEqual(2048); - }); -}); - -// ── Sanitization boundary ── - -describe("buildTrackEvent — sanitization boundary", () => { - for (const payload of XSS_PAYLOADS) { - test(`XSS in name: ${payload.slice(0, 30)}…`, () => { - const result = buildTrackEvent({ name: payload }, fullCtx); - expect(result.event_name).not.toContain("<"); - expect(result.event_name).not.toContain(">"); - }); - } - - test("XSS in all text fields stripped", () => { - const xss = ''; - const result = buildTrackEvent( + await insertTrackEvent( { - name: xss, - referrer: xss, - path: xss, - title: xss, + anonymousId: "anon_1", + eventId: "evt_1", + name: "pageview", + path: "https://example.com/page", + sessionId: "session_1", }, - fullCtx + "ws_1", + "Mozilla/5.0", + "1.2.3.4", + new Request("https://basket.example/px.jpg") ); - for (const field of [ - result.event_name, - result.referrer, - result.path, - result.title, - ]) { - expect(field).not.toContain("" } }, - fullCtx - ); - // Properties are JSON-stringified, not HTML-sanitized (they're stored as JSON in CH) - expect(result.properties).toContain("script"); - expect(typeof result.properties).toBe("string"); - // But it's valid JSON - expect(() => JSON.parse(result.properties as string)).not.toThrow(); + test("propagates outgoing-link producer admission failures", async () => { + const error = new Error("buffer full"); + mockRunPromise.mockRejectedValueOnce(error); + + await expect( + insertOutgoingLink( + { + anonymousId: "anon_1", + eventId: "evt_link_1", + href: "https://external.example", + sessionId: "session_1", + }, + "ws_1", + new Request("https://basket.example/px.jpg") + ) + ).rejects.toThrow("Analytics delivery temporarily unavailable"); + expect(mockReleaseDuplicateReservation).toHaveBeenCalledOnce(); + expect(mockMarkDuplicateReservationDelivered).not.toHaveBeenCalled(); }); - test("passthrough fields (language, timezone, etc.) are NOT sanitized", () => { - const result = buildTrackEvent( - { - name: "x", - language: "", - timezone: "America/New_York", - }, - fullCtx - ); - expect(result.language).toBe(""); - expect(result.timezone).toBe("America/New_York"); - }); + test("returns a retryable failure while another request owns the event", async () => { + mockReserveDuplicate.mockResolvedValueOnce({ + duplicate: false, + retryable: true, + }); - test("session_id validated (rejects special chars)", () => { - const result = buildTrackEvent( - { name: "x", sessionId: "sess'; + const result = buildTrackEvent( + { + name: xss, + referrer: xss, + path: xss, + title: xss, + }, + fullCtx ); - expect(mockRunPromise).toHaveBeenCalledWith(effect); - expect(mockMarkDuplicateReservationDelivered).toHaveBeenCalledOnce(); + for (const field of [ + result.event_name, + result.referrer, + result.path, + result.title, + ]) { + expect(field).not.toContain("" } }, + fullCtx + ); + // Properties are JSON-stringified, not HTML-sanitized (they're stored as JSON in CH) + expect(result.properties).toContain("script"); + expect(typeof result.properties).toBe("string"); + // But it's valid JSON + expect(() => JSON.parse(result.properties as string)).not.toThrow(); }); - test("uses a stable UUID for a retried source event", () => { - const first = stableAnalyticsEventId("ws_1", "track", "evt_1"); - const retry = stableAnalyticsEventId("ws_1", "track", "evt_1"); + test("passthrough fields (language, timezone, etc.) are NOT sanitized", () => { + const result = buildTrackEvent( + { + name: "x", + language: "", + timezone: "America/New_York", + }, + fullCtx + ); + expect(result.language).toBe(""); + expect(result.timezone).toBe("America/New_York"); + }); - expect(first).toBe(retry); - expect(first).toMatch( - /^[0-9a-f]{8}-[0-9a-f]{4}-5[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/ + test("session_id validated (rejects special chars)", () => { + const result = buildTrackEvent( + { name: "x", sessionId: "sess

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