{
  "name": "@multideal/web",
  "version": "0.1.0",
  "private": true,
  "type": "module",
  "exports": {
    "./server/db/schema": "./src/server/db/schema.ts",
    "./server/db/schema-composed": "./src/server/db/schema-composed.ts",
    "./server/db/schema-composed.js": "./src/server/db/schema-composed.ts",
    "./server/db/client": "./src/server/db/client.ts",
    "./server/push/send": "./src/server/push/send.ts",
    "./server/push/types": "./src/server/push/types.ts",
    "./server/payments/index": "./src/server/payments/index.ts",
    "./server/payments/types": "./src/server/payments/types.ts",
    "./server/payments/get-provider": "./src/server/payments/get-provider.ts",
    "./server/payments/get-provider.js": "./src/server/payments/get-provider.ts",
    "./server/env": ".//server/env.ts",
    "./server/env.js": ".//server/env.ts",
    "./server/payments/provider": "./src/server/payments/provider.ts",
    "./server/payments/provider.js": "./src/server/payments/provider.ts",
    "./server/payments/stripe/reconcile": "./src/server/payments/stripe/reconcile.ts",
    "./server/payments/stripe/reconcile.js": "./src/server/payments/stripe/reconcile.ts",
    "./server/do-client": "./src/server/do-client.ts",
    "./server/do-client.js": "./src/server/do-client.ts",
    "./server/services/types": "./src/server/services/types.ts",
    "./server/services/types.js": "./src/server/services/types.ts",
    "./server/workflows/group-deal": "./src/server/workflows/group-deal.ts",
    "./server/db/schema.js": "./src/server/db/schema.ts",
    "./server/db/client.js": "./src/server/db/client.ts",
    "./server/ai/dispatch": "./src/server/ai/dispatch.ts",
    "./server/ai/dispatch.js": "./src/server/ai/dispatch.ts",
    "./server/workflows/outbox-dispatch": "./src/server/workflows/outbox-dispatch.ts",
    "./server/workflows/outbox-dispatch.js": "./src/server/workflows/outbox-dispatch.ts",
    "./server/workflows/outbox/dispatcher": "./src/server/workflows/outbox/dispatcher.ts",
    "./server/workflows/outbox/dispatcher.js": "./src/server/workflows/outbox/dispatcher.ts",
    "./server/db/queries/outbox": "./src/server/db/queries/outbox.ts",
    "./server/db/queries/outbox.js": "./src/server/db/queries/outbox.ts",
    "./server/cron": "./src/server/cron/index.ts",
    "./server/cron/index": "./src/server/cron/index.ts",
    "./server/cron/index.js": "./src/server/cron/index.ts",
    "./server/db/queries/notif-prefs": "./src/server/db/queries/notif-prefs.ts",
    "./server/db/queries/notif-prefs.js": "./src/server/db/queries/notif-prefs.ts",
    "./server/db/queries/live-notifications": "./src/server/db/queries/live-notifications.ts",
    "./server/db/queries/live-notifications.js": "./src/server/db/queries/live-notifications.ts",
    "./server/notifications/topics": "./src/server/notifications/topics.ts",
    "./server/notifications/topics.js": "./src/server/notifications/topics.ts"
  },
  "scripts": {
    "dev": "astro dev",
    "prebuild": "node scripts/write-build-info.mjs",
    "build": "astro build; rc=$?; node scripts/strip-session-kv.mjs; node scripts/minify-server-chunks.mjs; exit $rc",
    "build:check": "pnpm build && node scripts/check-bundle-size.mjs",
    "audit:instant-load-adoption": "node scripts/audit-instant-load-adoption.mjs",
    "preview": "astro preview",
    "astro": "astro",
    "lint": "eslint 'src/**/*.{ts,tsx,astro}' --max-warnings=0",
    "lint:rules:test": "node eslint-rules/no-bare-catch.test.cjs && node eslint-rules/no-raw-dashboard-loading.test.cjs",
    "lint:rules:test:session": "node eslint-rules/no-raw-locals-session.test.cjs",
    "lint:fix": "eslint 'src/**/*.{ts,tsx,astro}' --fix",
    "format": "prettier --write 'src/**/*.{ts,tsx,astro,css,md,json}'",
    "typecheck": "node scripts/write-build-info.mjs && astro check",
    "check:csp-hash": "node scripts/compute-bootstrap-hash.mjs | xargs -I {} grep -q '{}' src/server/middleware/security-headers.ts || (echo 'CSP hash drift: regenerate via scripts/compute-bootstrap-hash.mjs' && exit 1)",
    "typecheck:e2e": "tsc --noEmit -p tsconfig.e2e.json",
    "check:e2e-risk": "node tests/e2e/risk/update-inventory.mjs --check && node tests/e2e/risk/audit-patterns.mjs --check && node tests/e2e/risk/validator.test.mjs && node tests/e2e/risk/validate-coverage.mjs",
    "test": "vitest run --passWithNoTests",
    "test:integration": "vitest run tests/integration --passWithNoTests",
    "test:integration-db": "vitest run --config vitest.integration-db.config.ts",
    "test:integration-http": "vitest run --config vitest.integration-http.config.ts",
    "test:oracle": "vitest run --config vitest.oracle.config.ts",
    "test:coverage": "vitest run --coverage --passWithNoTests",
    "gate": "pnpm run typecheck && pnpm run test && pnpm run test:stock-concurrency",
    "gate:prepush": "node ../../scripts/pre-push.mjs",
    "test:watch": "vitest",
    "test:a11y": "node scripts/run-factory-e2e.mjs tests/a11y --project=chromium",
    "test:e2e:smoke": "node scripts/run-factory-e2e.mjs tests/e2e/smoke/navigation.smoke.spec.ts --project=chromium",
    "test:pr-browser": "node scripts/run-pr-browser.mjs",
    "test:factory-journeys": "node scripts/run-main-factory-journeys.mjs",
    "test:factory-journeys-direct": "node scripts/run-factory-e2e.mjs tests/e2e/journeys --project=chromium --retries=0 --reporter=line",
    "test:factory-journeys-certified": "node scripts/run-main-factory-journeys.mjs",
    "test:factory-ui-matrix": "node scripts/run-factory-e2e.mjs tests/e2e/ui-matrix --project=chromium --retries=0 --reporter=line",
    "sweep:full": "node scripts/run-factory-e2e.mjs --config=playwright.sweep.config.ts --workers=4 --retries=0 --reporter=json,./tests/e2e/sweep/sweep-run-reporter.ts && node tests/e2e/sweep/validate-zero-baseline.mjs",
    "test:e2e": "playwright test tests/e2e",
    "test:e2e:ui": "playwright test --config=playwright.ui.config.ts",
    "test:e2e:ui:smoke": "node --import tsx --test tests/e2e/ui-overhaul/helpers.smoke.test.ts",
    "test:live": "ALLOW_LIVE_E2E=1 pnpm run test:e2e",
    "test:e2e:vendor": "playwright test --config ../../tests/e2e/vendor/playwright.config.ts",
    "test:security": "playwright test tests/security",
    "sweep:changed": "node scripts/sweep-changed.mjs",
    "lane:stock-concurrency": "vitest run --config vitest.stock-concurrency.config.ts",
    "lane:cart-realpg": "vitest run --config vitest.cart-realpg.config.ts",
    "lane:realpg": "vitest run --config vitest.realpg.config.ts",
    "lane:regression": "vitest run --config vitest.regression.config.ts --passWithNoTests",
    "lane:locale-parity": "vitest run --config vitest.locale-pair.config.ts",
    "test:stock-concurrency": "pnpm run lane:stock-concurrency",
    "test:ssr-react-concurrency": "node tests/runtime/react-ssr-concurrency.mjs",
    "test:cart-realpg": "pnpm run lane:cart-realpg",
    "test:realpg": "pnpm run lane:realpg",
    "test:regression": "pnpm run lane:regression",
    "test:locale-parity": "pnpm run lane:locale-parity",
    "regression:capture": "bash regression/tooling/capture-baseline.sh",
    "regression:rebaseline": "UPDATE_SNAPSHOTS=1 vitest run --config vitest.regression.config.ts",
    "regression:check-baselines": "node regression/tooling/check-baselines.mjs",
    "lh": "lhci autorun",
    "db:generate": "drizzle-kit generate",
    "db:migrate": "node scripts/db-cli-gate.mjs migrate",
    "db:push": "node scripts/db-cli-gate.mjs push",
    "db:studio": "drizzle-kit studio",
    "db:seed": "tsx src/server/db/seed.ts",
    "db:reset-demo": "node scripts/db-cli-gate.mjs reset-demo",
    "audit:islands": "! grep -rln 'client:only=\"react\"' src/pages/ | grep -vE '/(admin|vendor|profile|settings|design-system)(/|$)' | grep -vE '/(login|register|verify|settings)\\.(astro|tsx?)$' | grep -q . || (echo 'ERROR: client:only=\"react\" in public pages' && exit 1)",
    "audit:main-id": "tsx scripts/audit-main-id.ts",
    "scan:quality": "pnpm --dir ../.. slop:full",
    "scan:quality:test": "pnpm --dir ../.. slop:self-test",
    "db:seed:pages": "tsx src/server/db/seeds/seed-static-pages.ts",
    "db:seed:app-pages": "tsx src/server/db/seeds/seed-app-pages.ts",
    "db:seed:test-users": "tsx src/server/db/seeds/seed-test-users.ts",
    "deploy:preview": "wrangler deploy --config dist/server/wrangler.json",
    "cf:secret": "wrangler secret put",
    "prepare": "simple-git-hooks || true",
    "scan:quality:staged": "pnpm --dir ../.. slop:staged"
  },
  "dependencies": {
    "@astrojs/cloudflare": "^14.1.2",
    "@astrojs/react": "^6.0.1",
    "@astrojs/sitemap": "^3.7.3",
    "@dnd-kit/core": "^6.3.1",
    "@dnd-kit/sortable": "^8.0.0",
    "@dnd-kit/utilities": "^3.2.2",
    "@fontsource-variable/heebo": "^5.1.0",
    "@fontsource-variable/inter": "^5.1.0",
    "@fontsource/concert-one": "^5.2.8",
    "@google/genai": "^1.52.0",
    "@hookform/resolvers": "^5.2.2",
    "@jsquash/avif": "^2.1.1",
    "@jsquash/jpeg": "^1.6.0",
    "@jsquash/webp": "^1.5.0",
    "@neondatabase/serverless": "^1.1.0",
    "@noble/hashes": "^2.2.0",
    "@platform-modules/affiliate": "0.1.2",
    "@platform-modules/commerce-cart": "0.0.0",
    "@platform-modules/commerce-catalog": "0.1.0",
    "@platform-modules/commerce-fulfillment": "0.0.3",
    "@platform-modules/commerce-inventory": "0.0.1",
    "@platform-modules/commerce-orders": "0.1.0",
    "@platform-modules/commerce-promotions": "0.0.2",
    "@platform-modules/commerce-reviews": "0.0.1",
    "@platform-modules/db": "^0.1.0",
    "@platform-modules/ledger": "0.2.0",
    "@platform-modules/mail": "0.0.1",
    "@platform-modules/perf-react": "^0.1.0",
    "@platform-modules/query-react": "^0.1.0",
    "@platform-modules/tax": "^0.0.2",
    "@platform-modules/ui-primitives": "^0.4.0",
    "@platform-modules/util": "0.3.0",
    "@radix-ui/react-alert-dialog": "^1.1.0",
    "@radix-ui/react-checkbox": "^1.1.0",
    "@radix-ui/react-dialog": "^1.1.0",
    "@radix-ui/react-direction": "^1.1.0",
    "@radix-ui/react-dropdown-menu": "^2.1.0",
    "@radix-ui/react-label": "^2.1.0",
    "@radix-ui/react-popover": "^1.1.0",
    "@radix-ui/react-radio-group": "^1.2.0",
    "@radix-ui/react-select": "^2.1.0",
    "@radix-ui/react-slider": "^1.2.0",
    "@radix-ui/react-slot": "^1.1.0",
    "@radix-ui/react-switch": "^1.1.0",
    "@radix-ui/react-tabs": "^1.1.0",
    "@radix-ui/react-toast": "^1.2.0",
    "@radix-ui/react-tooltip": "^1.1.0",
    "@radix-ui/react-visually-hidden": "^1.1.0",
    "@react-email/components": "^1.0.12",
    "@sentry/astro": "^10.53.1",
    "@sentry/cloudflare": "^10.53.1",
    "@stripe/connect-js": "^3.4.4",
    "@stripe/react-connect-js": "^3.4.2",
    "@stripe/react-stripe-js": "^6.4.0",
    "@stripe/stripe-js": "^9.6.0",
    "@tailwindcss/vite": "^4.3.0",
    "@tanstack/react-query": "^5.101.2",
    "@tanstack/react-virtual": "^3.0.0",
    "@tiptap/extension-bold": "^3.23.4",
    "@tiptap/extension-bullet-list": "^3.23.4",
    "@tiptap/extension-document": "^3.23.4",
    "@tiptap/extension-heading": "^3.23.4",
    "@tiptap/extension-history": "^3.23.4",
    "@tiptap/extension-italic": "^3.23.4",
    "@tiptap/extension-list-item": "^3.23.4",
    "@tiptap/extension-paragraph": "^3.23.4",
    "@tiptap/extension-text": "^3.23.4",
    "@tiptap/pm": "^3.23.4",
    "@tiptap/react": "^3.23.4",
    "@vite-pwa/astro": "^1.2.0",
    "astro": "^7.0.7",
    "canvas-confetti": "^1.9.0",
    "class-variance-authority": "^0.7.0",
    "clsx": "^2.1.0",
    "cmdk": "^1.1.1",
    "date-fns": "^4.1.0",
    "drizzle-orm": "^0.45.2",
    "firebase": "^12.13.0",
    "isomorphic-dompurify": "^3.12.0",
    "leaflet": "^1.9.4",
    "leaflet.markercluster": "^1.5.3",
    "lucide-react": "^1.14.0",
    "qrcode": "^1.5.0",
    "react": "^19.2.6",
    "react-dom": "^19.2.6",
    "react-hook-form": "^7.75.0",
    "react-image-crop": "^11.0.10",
    "react-leaflet": "^5.0.0",
    "recharts": "^3.8.1",
    "resend": "^6.12.4",
    "stripe": "^22.1.1",
    "tailwind-merge": "^3.6.0",
    "tailwindcss": "^4.3.0",
    "tiptap-text-direction": "^0.4.0",
    "vaul": "^1.1.2",
    "web-push": "^3.6.0",
    "web-vitals": "^4.0.0",
    "zod": "^4.4.3",
    "zustand": "^5.0.13"
  },
  "devDependencies": {
    "@anthropic-ai/sdk": "^0.96.0",
    "@astrojs/check": "^0.9.9",
    "@axe-core/playwright": "^4.11.3",
    "@cloudflare/workers-types": "^4.20260625.1",
    "@electric-sql/pglite": "^0.5.2",
    "@eslint/js": "^10.0.1",
    "@lhci/cli": "^0.15.1",
    "@playwright/test": "^1.60.0",
    "@testing-library/jest-dom": "^6.6.0",
    "@testing-library/react": "^16.1.0",
    "@types/canvas-confetti": "^1.9.0",
    "@types/dompurify": "^3.2.0",
    "@types/leaflet": "^1.9.21",
    "@types/leaflet.markercluster": "^1.5.6",
    "@types/node": "^24.12.4",
    "@types/pg": "^8.11.0",
    "@types/proper-lockfile": "^4.1.4",
    "@types/qrcode": "^1.5.0",
    "@types/react": "^19.0.0",
    "@types/react-dom": "^19.0.0",
    "@types/web-push": "^3.6.0",
    "@types/ws": "^8.18.1",
    "@vitest/coverage-v8": "4.1.10",
    "@vitest/ui": "4.1.10",
    "drizzle-kit": "^0.31.10",
    "embedded-postgres": "18.4.0-beta.17",
    "esbuild": "^0.28.1",
    "eslint": "^10.3.0",
    "eslint-plugin-astro": "^1.3.0",
    "eslint-plugin-jsx-a11y": "^6.10.0",
    "eslint-plugin-react": "^7.37.0",
    "eslint-plugin-react-hooks": "^7.1.1",
    "gray-matter": "^4.0.3",
    "jsdom": "^29.1.1",
    "lint-staged": "^16.4.0",
    "marked": "^18.0.3",
    "pg": "^8.22.0",
    "playwright": "^1.60.0",
    "prettier": "^3.8.3",
    "prettier-plugin-astro": "^0.14.0",
    "prettier-plugin-tailwindcss": "^0.8.0",
    "proper-lockfile": "^4.1.2",
    "simple-git-hooks": "^2.11.0",
    "ts-morph": "^28.0.0",
    "tsx": "^4.19.0",
    "typescript": "^6.0.3",
    "undici": "^7.28.0",
    "typescript-eslint": "^8.59.3",
    "vite-plugin-pwa": "^1.2.0",
    "vite-plugin-top-level-await": "^1.6.0",
    "vite-plugin-wasm": "^3.6.0",
    "vitest": "4.1.10",
    "workbox-build": "^7.4.1",
    "workbox-window": "^7.4.1",
    "wrangler": "^4.105.0",
    "ws": "^8.20.1"
  },
  "simple-git-hooks": {
    "pre-commit": "pnpm --dir apps/web exec lint-staged",
    "pre-push": "node scripts/pre-push.mjs"
  },
  "lint-staged": {
    "*.{ts,tsx,astro}": [
      "eslint --fix --no-warn-ignored",
      "prettier --write"
    ],
    "*.{css,md,json}": [
      "prettier --write"
    ]
  }
}
