@hexclave/cli 1.0.20 → 1.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dashboard/apps/dashboard/.next/BUILD_ID +1 -1
- package/dist/dashboard/apps/dashboard/.next/build-manifest.json +5 -5
- package/dist/dashboard/apps/dashboard/.next/prerender-manifest.json +3 -3
- package/dist/dashboard/apps/dashboard/.next/required-server-files.json +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/(outside-dashboard)/new-project/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/(outside-dashboard)/new-project/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/(outside-dashboard)/playground/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/(outside-dashboard)/playground/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/(outside-dashboard)/projects/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/(outside-dashboard)/projects/page/server-reference-manifest.json +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/(outside-dashboard)/projects/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/-selector-/[...path]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/-selector-/[...path]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/(overview)/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/(overview)/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/@modal/(.)apps/[appId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/@modal/(.)apps/[appId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/clickmaps/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/clickmaps/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/overview/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/overview/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/queries/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/queries/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/tables/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/analytics/tables/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/api-keys/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/api-keys/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/api-keys-app/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/api-keys-app/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/apps/[appId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/apps/[appId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/apps/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/apps/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/auth-methods/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/auth-methods/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/conversations/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/conversations/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/convex/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/convex/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/dashboards/[dashboardId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/dashboards/[dashboardId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/dashboards/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/dashboards/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/data-vault/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/data-vault/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/data-vault/stores/[storeId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/data-vault/stores/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/chart-demo/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/chart-demo/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/datagrid-demo/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/datagrid-demo/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/realistic-demo/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/design-language/realistic-demo/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/domains/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/domains/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-drafts/[draftId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-drafts/[draftId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-drafts/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-drafts/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-outbox/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-outbox/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-sent/no-source/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-sent/no-source/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-sent/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-sent/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-settings/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-settings/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-templates/[templateId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-templates/[templateId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-templates/[templateId]/sent/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-templates/[templateId]/sent/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-templates/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-templates/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-themes/[themeId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-themes/[themeId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-themes/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-themes/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-viewer/[emailId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/email-viewer/[emailId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/emails/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/emails/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/expert-mode/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/expert-mode/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/external-db-sync/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/external-db-sync/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/launch-checklist/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/launch-checklist/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/onboarding/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/onboarding/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/customers/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/customers/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/payouts/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/payouts/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/product-lines/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/product-lines/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/edit/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/edit/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/[productId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/new/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/new/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/products/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/settings/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/settings/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/transactions/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/payments/transactions/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/project-keys/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/project-keys/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/project-permissions/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/project-permissions/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/project-settings/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/project-settings/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/query-analytics/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/query-analytics/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/session-replays/[replayId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/session-replays/[replayId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/session-replays/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/session-replays/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/sign-up-rules/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/sign-up-rules/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/support/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/support/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/team-permissions/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/team-permissions/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/team-settings/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/team-settings/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/teams/[teamId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/teams/[teamId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/teams/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/teams/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/users/[userId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/users/[userId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/users/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/users/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/vercel/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/vercel/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/webhooks/[endpointId]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/webhooks/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/webhooks/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/widget-playground/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/(protected)/projects/[projectId]/widget-playground/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/handler/[...hexclave]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/handler/[...hexclave]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/custom/confirm/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/custom/confirm/page/server-reference-manifest.json +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/custom/confirm/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/custom/projects/transfer/confirm/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/custom/projects/transfer/confirm/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/featurebase/sso/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/featurebase/sso/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/neon/confirm/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/neon/confirm/page/server-reference-manifest.json +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/neon/confirm/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/neon/projects/transfer/confirm/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/integrations/neon/projects/transfer/confirm/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/purchase/[code]/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/purchase/[code]/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/purchase/return/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/purchase/return/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/wizard-congrats/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/(main)/wizard-congrats/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/_global-error/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/_global-error.html +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/_global-error.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.rsc +16 -16
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +16 -16
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.rsc +16 -16
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.segments/_full.segment.rsc +16 -16
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.segments/_head.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.segments/_index.segment.rsc +10 -10
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.segments/_tree.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.segments/development-environment/browser-secret/__PAGE__.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.segments/development-environment/browser-secret.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/development-environment/browser-secret.segments/development-environment.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.rsc +17 -17
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/_full.segment.rsc +17 -17
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/_head.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/_index.segment.rsc +10 -10
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/_tree.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/health/error-handler-debug/__PAGE__.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/health/error-handler-debug.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/health/error-handler-debug.segments/health.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/index.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/index.rsc +15 -15
- package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/!KG1haW4p/__PAGE__.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/!KG1haW4p.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/_full.segment.rsc +15 -15
- package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/_index.segment.rsc +10 -10
- package/dist/dashboard/apps/dashboard/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.rsc +19 -19
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/new-project/__PAGE__.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/new-project.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ.segment.rsc +5 -5
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/!KG1haW4p/!KHByb3RlY3RlZCk.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/!KG1haW4p.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/_full.segment.rsc +19 -19
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/_head.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/_index.segment.rsc +10 -10
- package/dist/dashboard/apps/dashboard/.next/server/app/new-project.segments/_tree.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.rsc +19 -19
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/playground/__PAGE__.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/playground.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ.segment.rsc +5 -5
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/!KG1haW4p/!KHByb3RlY3RlZCk.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/!KG1haW4p.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/_full.segment.rsc +19 -19
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/_head.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/_index.segment.rsc +10 -10
- package/dist/dashboard/apps/dashboard/.next/server/app/playground.segments/_tree.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.rsc +19 -19
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/projects/__PAGE__.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ/projects.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/!KG1haW4p/!KHByb3RlY3RlZCk/!KG91dHNpZGUtZGFzaGJvYXJkKQ.segment.rsc +5 -5
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/!KG1haW4p/!KHByb3RlY3RlZCk.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/!KG1haW4p.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/_full.segment.rsc +19 -19
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/_head.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/_index.segment.rsc +10 -10
- package/dist/dashboard/apps/dashboard/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/rde-debug/page/build-manifest.json +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/rde-debug/page_client-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.rsc +20 -20
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/!KG1haW4p/wizard-congrats/__PAGE__.segment.rsc +6 -6
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/!KG1haW4p/wizard-congrats.segment.rsc +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/!KG1haW4p.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/_full.segment.rsc +20 -20
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/_head.segment.rsc +4 -4
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/_index.segment.rsc +10 -10
- package/dist/dashboard/apps/dashboard/.next/server/app/wizard-congrats.segments/_tree.segment.rsc +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/chunks/[root-of-the-server]__1m-q0b3._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/_04as7p-._.js +22 -22
- package/dist/dashboard/apps/dashboard/.next/server/chunks/_0tnctfw._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/node_modules__pnpm_1_a837b._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/packages_0rk1u8f._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/packages_1eprmn6._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/044u_dashboard_src_app_(main)_(protected)_projects_[projectId]_email-sent_06e1zir._.js +9 -0
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/044u_dashboard_src_app_(main)_(protected)_projects_[projectId]_email-sent_18ofnte._.js +9 -0
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/15dq_(main)_(protected)_projects_[projectId]_users_[userId]_page-client_tsx_0ptfo2h._.js +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/[root-of-the-server]__0fiuqqk._.js +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_05oib0d._.js +3 -0
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_0s_ag9o._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_0xl4mrg._.js +3 -3
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_1-axnoc._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_132pp19._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_1gqr2d9._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_1jp05wg._.js +3 -0
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_1q7j2d7._.js +5 -5
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_1wwwu_3._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_1z655xf._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/apps_dashboard_src_components_dashboard-user-button_tsx_1m9znfy._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/node_modules__pnpm_0cfdzin._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/packages_0kveln1._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/packages_1r7flhi._.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/middleware-build-manifest.js +5 -5
- package/dist/dashboard/apps/dashboard/.next/server/pages/404.html +2 -2
- package/dist/dashboard/apps/dashboard/.next/server/pages/500.html +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/server-reference-manifest.js +1 -1
- package/dist/dashboard/apps/dashboard/.next/server/server-reference-manifest.json +5 -5
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{2djrn7poti_fw.js → 0-cvg3igufvd6.js} +2 -2
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{4079rt6gkozmp.js → 0n_amwdwnr5qv.js} +1 -1
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{1c9um9pw7riw0.js → 0n_xejiuv6hi3.js} +2 -2
- package/dist/dashboard/apps/dashboard/.next/static/chunks/0nwiy21paqdxk.js +9 -0
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{41e2zx2dgkq1w.js → 0x24ip8d8uywa.js} +2 -2
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{2zkv3tg8lrss9.js → 1_3_bf5h-idt6.js} +1 -1
- package/dist/dashboard/apps/dashboard/.next/static/chunks/1fvvqk0r2b0xi.css +1 -0
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{1g7ocjd1h6op9.js → 1iz1z3p9tjgbd.js} +2 -2
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{1yis25nn36osv.js → 1l5uzgfyrdupp.js} +5 -5
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{2qgng6gut-lpo.js → 2-bdllt91-l80.js} +1 -1
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{3bo2ua_y4q43v.js → 2envmrg1f61w5.js} +3 -3
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{0_k8aohi1d6c5.js → 2rtuock2-guiu.js} +1 -1
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{3d-5wrlqx-xi5.js → 2vif9i05n-kbh.js} +2 -2
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{0al4rf0wulms6.js → 2xzp981upsrrz.js} +4 -4
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{3yr78v6baa_dn.js → 3kqlh2r279xvm.js} +1 -1
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{0nd-d9_e0czkl.js → 3x2nrm-cfkt_s.js} +1 -1
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{2u4zmrk36sq5y.js → 3xy61pxy24_4d.js} +1 -1
- package/dist/dashboard/apps/dashboard/.next/static/chunks/{turbopack-425k_ofsbf1gw.js → turbopack-2t16bx-7bi0_i.js} +1 -1
- package/dist/dashboard/apps/dashboard/package.json +1 -1
- package/dist/dashboard/apps/dashboard/server.js +1 -1
- package/dist/index.js +39 -15
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/commands/dev.ts +49 -10
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/044u_dashboard_src_app_(main)_(protected)_projects_[projectId]_email-sent_07k2db_._.js +0 -9
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_0lvurax._.js +0 -9
- package/dist/dashboard/apps/dashboard/.next/server/chunks/ssr/_1_40imk._.js +0 -3
- package/dist/dashboard/apps/dashboard/.next/static/chunks/0z4wcrkw_j19e.js +0 -9
- package/dist/dashboard/apps/dashboard/.next/static/chunks/3kqudwiyy5y1a.css +0 -1
- /package/dist/dashboard/apps/dashboard/.next/static/{B9KRozRzmPbGbXUg8svB2 → dLM871duwxsKII1or2IEw}/_buildManifest.js +0 -0
- /package/dist/dashboard/apps/dashboard/.next/static/{B9KRozRzmPbGbXUg8svB2 → dLM871duwxsKII1or2IEw}/_clientMiddlewareManifest.js +0 -0
- /package/dist/dashboard/apps/dashboard/.next/static/{B9KRozRzmPbGbXUg8svB2 → dLM871duwxsKII1or2IEw}/_ssgManifest.js +0 -0
|
@@ -1520,6 +1520,6 @@ module.exports=[402713,685588,e=>{"use strict";var t=e.i(649434),r=e.i(238717),s
|
|
|
1520
1520
|
}
|
|
1521
1521
|
`,notes:t.deindent`
|
|
1522
1522
|
- Treat onboarding as a state machine based on restricted reason; avoid mixing unrelated onboarding states into one branch.
|
|
1523
|
-
`,versions:{}})}}e.s(["getCustomPagePrompts",0,n,"getLatestPageVersions",0,function(){return Object.fromEntries(Object.entries(n()).map(([e,t])=>{let r=Object.keys(t.versions).map(Number),s=r.length>0?Math.max(...r):0,a={};for(let e of r)t.versions[e].changelog&&(a[e]=t.versions[e].changelog);return[e,{version:s,changelogs:a}]}))}],668388),e.s([],684935);var o=e.i(517930),i=e.i(498898);let c="{projectId}",l="{hostedPath}",d=new Map([["https:","443"],["http:","80"]]),u="00000000-0000-4000-8000-000000000000";function p(e,t){if(null!=e)return t?e.replace(/\$\{NEXT_PUBLIC_HEXCLAVE_PORT_PREFIX:-81\}/g,t):e}function E(e,t,r){return e.replaceAll(c,t).replaceAll(l,r)}function h(e){let t=e.port||d.get(e.protocol)||"";return t?`${e.hostname}:${t}`:e.hostname}function _(e){let t=e.indexOf("://");if(-1===t)return null;let r=`${e.slice(0,t)}:`,s=e.slice(t+3),a=s.indexOf("/"),n=-1===a?s:s.slice(0,a);return""===n?null:{protocol:r,hostPattern:n}}function m(e){let t=e.lastIndexOf(":");if(-1===t)return!1;let r=e.slice(t+1);return"*"===r||""!==r&&[...r].every(e=>e>="0"&&e<="9")}e.s(["getHostedHandlerUrlFromConfig",0,function(e){let t=p(e.hostedHandlerUrlTemplate,e.hexclavePortPrefix);return null==t?(()=>{let t=p(e.hostedHandlerDomainSuffix,e.hexclavePortPrefix)??".built-with-stack-auth.com";if(!t.startsWith("."))throw new o.HexclaveAssertionError("The hosted handler domain suffix must start with a dot.",{domainSuffix:t,hint:"Set NEXT_PUBLIC_STACK_HOSTED_HANDLER_DOMAIN_SUFFIX to a value like '.built-with-stack-auth.com'."});return`https://${e.projectId}${t}/${e.hostedPath}`})():(()=>{if(!t.includes(c)||!t.includes(l))throw new o.HexclaveAssertionError("The hosted handler URL template must contain {projectId} and {hostedPath}.",{hostedHandlerUrlTemplate:t,hint:"Set NEXT_PUBLIC_STACK_HOSTED_HANDLER_URL_TEMPLATE to a value like 'https://{projectId}.built-with-stack-auth.com/{hostedPath}'."});let r=new URL(E(t,u,"handler")),s=new URL(E(t,"11111111-1111-4111-8111-111111111111","handler"));if(r.origin===s.origin||!r.hostname.includes(u))throw new o.HexclaveAssertionError("The hosted handler URL template must put {projectId} in the hostname.",{hostedHandlerUrlTemplate:t,hint:"Use a project-specific origin like 'https://{projectId}.built-with-stack-auth.com/{hostedPath}', not a shared-origin path like 'https://example.com/{projectId}/{hostedPath}'."});return E(t,e.projectId,e.hostedPath)})()},"getTrustedParentDomain",0,function(e,t){let r=t.filter(e=>null!=e).map(e=>{let t=(0,i.createUrlIfValid)(e);if(null!=t&&!e.includes("*"))return t.hostname.toLowerCase();let r=_(e);return null==r?null:(function(e){if(!m(e))return e;let t=e.lastIndexOf(":");return e.slice(0,t)})(r.hostPattern).toLowerCase()}).filter(e=>null!=e),s=e.toLowerCase().split(".");for(let e=s.length-2;e>=0;e--){let t=s.slice(e).join(".");if(r.includes(t)&&r.includes(`**.${t}`))return t}return null},"validateRedirectUrl",0,function(e,t){let r=(0,i.createUrlIfValid)(e);return!!r&&(!!(!0===t.allowLocalhost&&(0,i.isLocalhost)(r))||t.trustedDomains.some(e=>null!=e&&function(e,t){let r=(0,i.createUrlIfValid)(t);if(null!=r&&!t.includes("*"))return r.protocol===e.protocol&&r.hostname===e.hostname&&h(r)===h(e);let s=_(t);return null==s?((0,o.captureError)("invalid-redirect-domain",new o.HexclaveAssertionError("Invalid domain pattern",{pattern:t})),!1):e.protocol===s.protocol&&(m(s.hostPattern)?(0,i.matchHostnamePattern)(s.hostPattern,h(e)):(0,i.matchHostnamePattern)(s.hostPattern,e.hostname)&&(!e.port||"https:"===e.protocol&&"443"===e.port||"http:"===e.protocol&&"80"===e.port))}(r,e)))}],578472)},352901,e=>{"use strict";var t=e.i(517930);e.i(684935);var r=e.i(668388),s=e.i(578472),a=e.i(866137);let n=/^[a-zA-Z][a-zA-Z\d+\-.]*:/,o=(0,r.getCustomPagePrompts)(),i=(e,t)=>{let r=e.endsWith("/")&&e.length>1?e.slice(0,-1):e;return 0===t.length?r:"/"===r?`/${t}`:`${r}/${t}`},c=e=>{let t=e.handlerName;if(t in o){let r=o[t];if(0===e.target.version||e.target.version in r.versions)return e.target.url;throw Error(`Unsupported custom page version ${e.target.version} for ${e.handlerName} page at ${e.target.url}. The latest supported version of this page is ${Math.max(0,...Object.keys(r.versions).map(Number))}. Please upgrade your Hexclave SDK to a version that supports this version.`)}throw Error(`URL target ${e.handlerName} cannot be a custom page. Please specify the URL as a string instead.`)},l=e=>{let t=e.pagePath.replace(/^\/+/,""),r=t.length>0?`handler/${t}`:"handler";return(0,s.getHostedHandlerUrlFromConfig)({projectId:e.projectId,hostedPath:r,hostedHandlerDomainSuffix:a.envVars.HEXCLAVE_HOSTED_HANDLER_DOMAIN_SUFFIX,hostedHandlerUrlTemplate:a.envVars.HEXCLAVE_HOSTED_HANDLER_URL_TEMPLATE,hexclavePortPrefix:a.envVars.HEXCLAVE_PORT_PREFIX})},d=new Set(["home","afterSignIn","afterSignUp","afterSignOut"]),u=e=>{if("string"==typeof e.target)return e.target;switch(e.target.type){case"handler-component":return e.fallbackPath;case"hosted":if(d.has(e.handlerName))return e.fallbackPath;return l({projectId:e.projectId,pagePath:(e=>{switch(e){case"handler":case"home":case"afterSignIn":case"afterSignUp":case"afterSignOut":return"";case"signIn":return"sign-in";case"signUp":return"sign-up";case"signOut":return"sign-out";case"emailVerification":return"email-verification";case"passwordReset":return"password-reset";case"forgotPassword":return"forgot-password";case"oauthCallback":return"oauth-callback";case"magicLinkCallback":return"magic-link-callback";case"accountSettings":return"account-settings";case"teamInvitation":return"team-invitation";case"cliAuthConfirm":return"cli-auth-confirm";case"mfa":return"mfa";case"error":return"error";case"onboarding":return"onboarding"}})(e.handlerName)});case"custom":return c({target:e.target,handlerName:e.handlerName})}};e.s(["buildCliAuthConfirmUrl",0,e=>{let t=new URL(e.cliAuthConfirmUrl,e.appUrl);return t.searchParams.set("login_code",e.loginCode),t.toString()},"getHostedHandlerUrl",0,l,"getPagePrompt",0,function(e,t){if(!(e in o))return null;let r=o[e],s=Object.keys(r.versions).map(Number),a=s.length>0?Math.max(...s):0,n=null;if(null!=t){let e=s.filter(e=>e>t).sort((e,t)=>e-t).map(e=>r.versions[e].upgradePrompt).filter(e=>e.length>0);n=e.length>0?e.join("\n\n"):null}else n=(a>0?r.versions[a]:void 0)?.upgradePrompt??null;return{title:r.title,fullPrompt:r.fullPrompt,upgradePrompt:n,latestVersion:a}},"isHostedHandlerUrlForProject",0,e=>{let t;try{t=new URL(e.url)}catch{return!1}let r=new URL(l({projectId:e.projectId,pagePath:""}));return t.origin===r.origin&&(t.pathname===r.pathname||t.pathname.startsWith(`${r.pathname}/`))},"resolveHandlerUrls",0,e=>{let r=e.urls,s=r?.default??{type:"handler-component"},a=r?.oauthCallback??("hosted"===s.type?s:{type:"handler-component"}),o="string"==typeof a?a:"custom"===a.type?a.url:null;if(null!=o&&!(!o.startsWith("//")&&!n.test(o)))throw new t.HexclaveAssertionError("OAuth callback URLs must be relative.",{oauthCallbackUrl:o,hint:"Use a relative URL like '/handler/oauth-callback', or use { type: 'hosted' } to let Stack use the current page for hosted callbacks."});let l="/handler";"string"==typeof r?.handler?l=r.handler:r?.handler!=null&&"custom"===r.handler.type&&(l=c({target:r.handler,handlerName:"handler"}));let d=r?.home??s,p=u({target:"string"!=typeof d&&"hosted"===d.type?{type:"handler-component"}:d,fallbackPath:"/",handlerName:"home",projectId:e.projectId}),E=u({target:d,fallbackPath:"/",handlerName:"home",projectId:e.projectId}),h=u({target:r?.afterSignIn??s,fallbackPath:p,handlerName:"afterSignIn",projectId:e.projectId});return{handler:u({target:r?.handler??s,fallbackPath:l,handlerName:"handler",projectId:e.projectId}),signIn:u({target:r?.signIn??s,fallbackPath:i(l,"sign-in"),handlerName:"signIn",projectId:e.projectId}),signUp:u({target:r?.signUp??s,fallbackPath:i(l,"sign-up"),handlerName:"signUp",projectId:e.projectId}),afterSignIn:h,afterSignUp:u({target:r?.afterSignUp??s,fallbackPath:h,handlerName:"afterSignUp",projectId:e.projectId}),signOut:u({target:r?.signOut??s,fallbackPath:i(l,"sign-out"),handlerName:"signOut",projectId:e.projectId}),afterSignOut:u({target:r?.afterSignOut??s,fallbackPath:p,handlerName:"afterSignOut",projectId:e.projectId}),emailVerification:u({target:r?.emailVerification??s,fallbackPath:i(l,"email-verification"),handlerName:"emailVerification",projectId:e.projectId}),passwordReset:u({target:r?.passwordReset??s,fallbackPath:i(l,"password-reset"),handlerName:"passwordReset",projectId:e.projectId}),forgotPassword:u({target:r?.forgotPassword??s,fallbackPath:i(l,"forgot-password"),handlerName:"forgotPassword",projectId:e.projectId}),home:E,oauthCallback:u({target:a,fallbackPath:i(l,"oauth-callback"),handlerName:"oauthCallback",projectId:e.projectId}),magicLinkCallback:u({target:r?.magicLinkCallback??s,fallbackPath:i(l,"magic-link-callback"),handlerName:"magicLinkCallback",projectId:e.projectId}),accountSettings:u({target:r?.accountSettings??s,fallbackPath:i(l,"account-settings"),handlerName:"accountSettings",projectId:e.projectId}),teamInvitation:u({target:r?.teamInvitation??s,fallbackPath:i(l,"team-invitation"),handlerName:"teamInvitation",projectId:e.projectId}),cliAuthConfirm:u({target:r?.cliAuthConfirm??s,fallbackPath:i(l,"cli-auth-confirm"),handlerName:"cliAuthConfirm",projectId:e.projectId}),mfa:u({target:r?.mfa??s,fallbackPath:i(l,"mfa"),handlerName:"mfa",projectId:e.projectId}),error:u({target:r?.error??s,fallbackPath:i(l,"error"),handlerName:"error",projectId:e.projectId}),onboarding:u({target:r?.onboarding??s,fallbackPath:i(l,"onboarding"),handlerName:"onboarding",projectId:e.projectId})}}])},181199,e=>{"use strict";var t=e.i(357063),r=e.i(517930),s=e.i(649434),a=e.i(402713),n=e.i(538022),o=e.i(498898),i=e.i(685588),c=e.i(830561),l=e.i(238717),d=e.i(517762),u=e.i(525694),p=e.i(519327),E=e.i(866137),h=e.i(352901);let _="js @hexclave/next@1.0.20";if(_.startsWith("STACK_COMPILE_TIME"))throw new r.HexclaveAssertionError("Client version was not replaced. Something went wrong during build!");function m(e){let t;var r=(t=e?"string"==typeof e?e:(0,l.isBrowserLike)()?e.browser:e.server:(t=(0,l.isBrowserLike)()?E.envVars.HEXCLAVE_API_URL_BROWSER:E.envVars.HEXCLAVE_API_URL_SERVER)||E.envVars.HEXCLAVE_API_URL||v).endsWith("/")?t.slice(0,-1):t;if(!r)return r;let s=E.envVars.HEXCLAVE_PORT_PREFIX;return s?r.replace(/\$\{NEXT_PUBLIC_HEXCLAVE_PORT_PREFIX:-81\}/g,s):r}let v="https://api.hexclave.com",y=new Map([[v,"https://r.hexclave.com"],["https://api.stack-auth.com","https://r.stack-auth.com"]]),f=new Map;e.s(["clientVersion",0,_,"createCache",0,e=>new i.AsyncCache(async t=>await c.Result.fromThrowingAsync(async()=>await e(t)),{}),"createCacheBySession",0,e=>new i.AsyncCache(async([t,...r])=>await c.Result.fromThrowingAsync(async()=>await e(t,r)),{onSubscribe:([e],t)=>{let r=e.onInvalidate(()=>t());return()=>r.unsubscribe()}}),"createEmptyTokenStore",0,function(){return new p.Store({refreshToken:null,accessToken:null})},"getAnalyticsBaseUrl",0,function(e){return y.get(e)??e},"getBaseUrl",0,m,"getDefaultExtraRequestHeaders",0,function(){return JSON.parse(E.envVars.HEXCLAVE_EXTRA_REQUEST_HEADERS||"{}")},"getDefaultProjectId",0,function(){let e;return E.envVars.HEXCLAVE_PROJECT_ID||((e=>{if(!(0,l.isBrowserLike)())return;let t=globalThis,r="__hexclave_missing_config_alert_already_shown";if(t[r])return;t[r]=!0;let s=t.alert;"function"==typeof s&&s(e)})(e="Welcome to Hexclave! It seems that you haven't provided a project ID. Please create a project on the Hexclave dashboard at https://app.hexclave.com and put it in the HEXCLAVE_PROJECT_ID environment variable."),(0,r.throwErr)(Error(e)))},"getDefaultPublishableClientKey",0,function(){return E.envVars.HEXCLAVE_PUBLISHABLE_CLIENT_KEY},"getDefaultSecretServerKey",0,function(){return E.envVars.HEXCLAVE_SECRET_SERVER_KEY||(0,r.throwErr)(Error("No secret server key provided. Please copy your key from the Hexclave dashboard and put it in the HEXCLAVE_SECRET_SERVER_KEY environment variable."))},"getDefaultSuperSecretAdminKey",0,function(){return E.envVars.HEXCLAVE_SUPER_SECRET_ADMIN_KEY||(0,r.throwErr)(Error("No super secret admin key provided. Please copy your key from the Hexclave dashboard and put it in the HEXCLAVE_SUPER_SECRET_ADMIN_KEY environment variable."))},"getUrls",0,function(e,t){return(0,h.resolveHandlerUrls)({urls:e,projectId:t.projectId})},"resolveApiUrls",0,function(e){return()=>{if(null!=e)return[m(e)];let s=m(void 0);return(0,d.createGlobal)("__stack-fetch-backend-urls-started",()=>((0,t.runAsynchronously)(async()=>{try{let e=await fetch(`${s}/api/v1/internal/backend-urls`);if(!e.ok)return;let t=await e.json();if(!Array.isArray(t.urls)||!t.urls.every(e=>"string"==typeof e))return;(0,d.createGlobal)("__stack-fetched-backend-urls",()=>t.urls)}catch(e){(0,r.captureError)("fetch-backend-urls-in-background",e)}}),!0)),(0,d.getGlobal)("__stack-fetched-backend-urls")??(0,o.getDefaultApiUrls)(s)}},"resolveConstructorOptions",0,function(e){return{...e.inheritsFrom?.[u.hexclaveAppInternalsSymbol].getConstructorOptions()??{},...(0,n.filterUndefined)((0,n.omit)(e,["inheritsFrom"]))}},"useAsyncCache",0,function(e,t,n){for(let r of((0,a.suspendIfSsr)(n),(0,d.getGlobal)("use-async-cache-execution-hooks")??[]))r({cache:e,caller:n,dependencies:t});let o=s.default.useId();s.default.useEffect(()=>{f.delete(o)},[...t,o]);let i=(0,s.useCallback)(r=>{let{unsubscribe:s}=e.onStateChange(t,()=>{f.delete(o),r()});return s},[e,...t]),c=(0,s.useCallback)(()=>(f.has(o)||f.set(o,e.getOrWait(t,"read-write")),f.get(o)),[e,...t]),l=(0,a.use)(s.default.useSyncExternalStore(i,c,c));if("error"===l.status){let e=l.error;throw e instanceof Error&&!e.__stackHasConcatenatedStacktraces&&((0,r.concatStacktraces)(e,Error()),e.__stackHasConcatenatedStacktraces=!0),e}return l.data}])}];
|
|
1523
|
+
`,versions:{}})}}e.s(["getCustomPagePrompts",0,n,"getLatestPageVersions",0,function(){return Object.fromEntries(Object.entries(n()).map(([e,t])=>{let r=Object.keys(t.versions).map(Number),s=r.length>0?Math.max(...r):0,a={};for(let e of r)t.versions[e].changelog&&(a[e]=t.versions[e].changelog);return[e,{version:s,changelogs:a}]}))}],668388),e.s([],684935);var o=e.i(517930),i=e.i(498898);let c="{projectId}",l="{hostedPath}",d=new Map([["https:","443"],["http:","80"]]),u="00000000-0000-4000-8000-000000000000";function p(e,t){if(null!=e)return t?e.replace(/\$\{NEXT_PUBLIC_HEXCLAVE_PORT_PREFIX:-81\}/g,t):e}function E(e,t,r){return e.replaceAll(c,t).replaceAll(l,r)}function h(e){let t=e.port||d.get(e.protocol)||"";return t?`${e.hostname}:${t}`:e.hostname}function _(e){let t=e.indexOf("://");if(-1===t)return null;let r=`${e.slice(0,t)}:`,s=e.slice(t+3),a=s.indexOf("/"),n=-1===a?s:s.slice(0,a);return""===n?null:{protocol:r,hostPattern:n}}function m(e){let t=e.lastIndexOf(":");if(-1===t)return!1;let r=e.slice(t+1);return"*"===r||""!==r&&[...r].every(e=>e>="0"&&e<="9")}e.s(["getHostedHandlerUrlFromConfig",0,function(e){let t=p(e.hostedHandlerUrlTemplate,e.hexclavePortPrefix);return null==t?(()=>{let t=p(e.hostedHandlerDomainSuffix,e.hexclavePortPrefix)??".built-with-stack-auth.com";if(!t.startsWith("."))throw new o.HexclaveAssertionError("The hosted handler domain suffix must start with a dot.",{domainSuffix:t,hint:"Set NEXT_PUBLIC_STACK_HOSTED_HANDLER_DOMAIN_SUFFIX to a value like '.built-with-stack-auth.com'."});return`https://${e.projectId}${t}/${e.hostedPath}`})():(()=>{if(!t.includes(c)||!t.includes(l))throw new o.HexclaveAssertionError("The hosted handler URL template must contain {projectId} and {hostedPath}.",{hostedHandlerUrlTemplate:t,hint:"Set NEXT_PUBLIC_STACK_HOSTED_HANDLER_URL_TEMPLATE to a value like 'https://{projectId}.built-with-stack-auth.com/{hostedPath}'."});let r=new URL(E(t,u,"handler")),s=new URL(E(t,"11111111-1111-4111-8111-111111111111","handler"));if(r.origin===s.origin||!r.hostname.includes(u))throw new o.HexclaveAssertionError("The hosted handler URL template must put {projectId} in the hostname.",{hostedHandlerUrlTemplate:t,hint:"Use a project-specific origin like 'https://{projectId}.built-with-stack-auth.com/{hostedPath}', not a shared-origin path like 'https://example.com/{projectId}/{hostedPath}'."});return E(t,e.projectId,e.hostedPath)})()},"getTrustedParentDomain",0,function(e,t){let r=t.filter(e=>null!=e).map(e=>{let t=(0,i.createUrlIfValid)(e);if(null!=t&&!e.includes("*"))return t.hostname.toLowerCase();let r=_(e);return null==r?null:(function(e){if(!m(e))return e;let t=e.lastIndexOf(":");return e.slice(0,t)})(r.hostPattern).toLowerCase()}).filter(e=>null!=e),s=e.toLowerCase().split(".");for(let e=s.length-2;e>=0;e--){let t=s.slice(e).join(".");if(r.includes(t)&&r.includes(`**.${t}`))return t}return null},"validateRedirectUrl",0,function(e,t){let r=(0,i.createUrlIfValid)(e);return!!r&&(!!(!0===t.allowLocalhost&&(0,i.isLocalhost)(r))||t.trustedDomains.some(e=>null!=e&&function(e,t){let r=(0,i.createUrlIfValid)(t);if(null!=r&&!t.includes("*"))return r.protocol===e.protocol&&r.hostname===e.hostname&&h(r)===h(e);let s=_(t);return null==s?((0,o.captureError)("invalid-redirect-domain",new o.HexclaveAssertionError("Invalid domain pattern",{pattern:t})),!1):e.protocol===s.protocol&&(m(s.hostPattern)?(0,i.matchHostnamePattern)(s.hostPattern,h(e)):(0,i.matchHostnamePattern)(s.hostPattern,e.hostname)&&(!e.port||"https:"===e.protocol&&"443"===e.port||"http:"===e.protocol&&"80"===e.port))}(r,e)))}],578472)},352901,e=>{"use strict";var t=e.i(517930);e.i(684935);var r=e.i(668388),s=e.i(578472),a=e.i(866137);let n=/^[a-zA-Z][a-zA-Z\d+\-.]*:/,o=(0,r.getCustomPagePrompts)(),i=(e,t)=>{let r=e.endsWith("/")&&e.length>1?e.slice(0,-1):e;return 0===t.length?r:"/"===r?`/${t}`:`${r}/${t}`},c=e=>{let t=e.handlerName;if(t in o){let r=o[t];if(0===e.target.version||e.target.version in r.versions)return e.target.url;throw Error(`Unsupported custom page version ${e.target.version} for ${e.handlerName} page at ${e.target.url}. The latest supported version of this page is ${Math.max(0,...Object.keys(r.versions).map(Number))}. Please upgrade your Hexclave SDK to a version that supports this version.`)}throw Error(`URL target ${e.handlerName} cannot be a custom page. Please specify the URL as a string instead.`)},l=e=>{let t=e.pagePath.replace(/^\/+/,""),r=t.length>0?`handler/${t}`:"handler";return(0,s.getHostedHandlerUrlFromConfig)({projectId:e.projectId,hostedPath:r,hostedHandlerDomainSuffix:a.envVars.HEXCLAVE_HOSTED_HANDLER_DOMAIN_SUFFIX,hostedHandlerUrlTemplate:a.envVars.HEXCLAVE_HOSTED_HANDLER_URL_TEMPLATE,hexclavePortPrefix:a.envVars.HEXCLAVE_PORT_PREFIX})},d=new Set(["home","afterSignIn","afterSignUp","afterSignOut"]),u=e=>{if("string"==typeof e.target)return e.target;switch(e.target.type){case"handler-component":return e.fallbackPath;case"hosted":if(d.has(e.handlerName))return e.fallbackPath;return l({projectId:e.projectId,pagePath:(e=>{switch(e){case"handler":case"home":case"afterSignIn":case"afterSignUp":case"afterSignOut":return"";case"signIn":return"sign-in";case"signUp":return"sign-up";case"signOut":return"sign-out";case"emailVerification":return"email-verification";case"passwordReset":return"password-reset";case"forgotPassword":return"forgot-password";case"oauthCallback":return"oauth-callback";case"magicLinkCallback":return"magic-link-callback";case"accountSettings":return"account-settings";case"teamInvitation":return"team-invitation";case"cliAuthConfirm":return"cli-auth-confirm";case"mfa":return"mfa";case"error":return"error";case"onboarding":return"onboarding"}})(e.handlerName)});case"custom":return c({target:e.target,handlerName:e.handlerName})}};e.s(["buildCliAuthConfirmUrl",0,e=>{let t=new URL(e.cliAuthConfirmUrl,e.appUrl);return t.searchParams.set("login_code",e.loginCode),t.toString()},"getHostedHandlerUrl",0,l,"getPagePrompt",0,function(e,t){if(!(e in o))return null;let r=o[e],s=Object.keys(r.versions).map(Number),a=s.length>0?Math.max(...s):0,n=null;if(null!=t){let e=s.filter(e=>e>t).sort((e,t)=>e-t).map(e=>r.versions[e].upgradePrompt).filter(e=>e.length>0);n=e.length>0?e.join("\n\n"):null}else n=(a>0?r.versions[a]:void 0)?.upgradePrompt??null;return{title:r.title,fullPrompt:r.fullPrompt,upgradePrompt:n,latestVersion:a}},"isHostedHandlerUrlForProject",0,e=>{let t;try{t=new URL(e.url)}catch{return!1}let r=new URL(l({projectId:e.projectId,pagePath:""}));return t.origin===r.origin&&(t.pathname===r.pathname||t.pathname.startsWith(`${r.pathname}/`))},"resolveHandlerUrls",0,e=>{let r=e.urls,s=r?.default??{type:"handler-component"},a=r?.oauthCallback??("hosted"===s.type?s:{type:"handler-component"}),o="string"==typeof a?a:"custom"===a.type?a.url:null;if(null!=o&&!(!o.startsWith("//")&&!n.test(o)))throw new t.HexclaveAssertionError("OAuth callback URLs must be relative.",{oauthCallbackUrl:o,hint:"Use a relative URL like '/handler/oauth-callback', or use { type: 'hosted' } to let Stack use the current page for hosted callbacks."});let l="/handler";"string"==typeof r?.handler?l=r.handler:r?.handler!=null&&"custom"===r.handler.type&&(l=c({target:r.handler,handlerName:"handler"}));let d=r?.home??s,p=u({target:"string"!=typeof d&&"hosted"===d.type?{type:"handler-component"}:d,fallbackPath:"/",handlerName:"home",projectId:e.projectId}),E=u({target:d,fallbackPath:"/",handlerName:"home",projectId:e.projectId}),h=u({target:r?.afterSignIn??s,fallbackPath:p,handlerName:"afterSignIn",projectId:e.projectId});return{handler:u({target:r?.handler??s,fallbackPath:l,handlerName:"handler",projectId:e.projectId}),signIn:u({target:r?.signIn??s,fallbackPath:i(l,"sign-in"),handlerName:"signIn",projectId:e.projectId}),signUp:u({target:r?.signUp??s,fallbackPath:i(l,"sign-up"),handlerName:"signUp",projectId:e.projectId}),afterSignIn:h,afterSignUp:u({target:r?.afterSignUp??s,fallbackPath:h,handlerName:"afterSignUp",projectId:e.projectId}),signOut:u({target:r?.signOut??s,fallbackPath:i(l,"sign-out"),handlerName:"signOut",projectId:e.projectId}),afterSignOut:u({target:r?.afterSignOut??s,fallbackPath:p,handlerName:"afterSignOut",projectId:e.projectId}),emailVerification:u({target:r?.emailVerification??s,fallbackPath:i(l,"email-verification"),handlerName:"emailVerification",projectId:e.projectId}),passwordReset:u({target:r?.passwordReset??s,fallbackPath:i(l,"password-reset"),handlerName:"passwordReset",projectId:e.projectId}),forgotPassword:u({target:r?.forgotPassword??s,fallbackPath:i(l,"forgot-password"),handlerName:"forgotPassword",projectId:e.projectId}),home:E,oauthCallback:u({target:a,fallbackPath:i(l,"oauth-callback"),handlerName:"oauthCallback",projectId:e.projectId}),magicLinkCallback:u({target:r?.magicLinkCallback??s,fallbackPath:i(l,"magic-link-callback"),handlerName:"magicLinkCallback",projectId:e.projectId}),accountSettings:u({target:r?.accountSettings??s,fallbackPath:i(l,"account-settings"),handlerName:"accountSettings",projectId:e.projectId}),teamInvitation:u({target:r?.teamInvitation??s,fallbackPath:i(l,"team-invitation"),handlerName:"teamInvitation",projectId:e.projectId}),cliAuthConfirm:u({target:r?.cliAuthConfirm??s,fallbackPath:i(l,"cli-auth-confirm"),handlerName:"cliAuthConfirm",projectId:e.projectId}),mfa:u({target:r?.mfa??s,fallbackPath:i(l,"mfa"),handlerName:"mfa",projectId:e.projectId}),error:u({target:r?.error??s,fallbackPath:i(l,"error"),handlerName:"error",projectId:e.projectId}),onboarding:u({target:r?.onboarding??s,fallbackPath:i(l,"onboarding"),handlerName:"onboarding",projectId:e.projectId})}}])},181199,e=>{"use strict";var t=e.i(357063),r=e.i(517930),s=e.i(649434),a=e.i(402713),n=e.i(538022),o=e.i(498898),i=e.i(685588),c=e.i(830561),l=e.i(238717),d=e.i(517762),u=e.i(525694),p=e.i(519327),E=e.i(866137),h=e.i(352901);let _="js @hexclave/next@1.0.21";if(_.startsWith("STACK_COMPILE_TIME"))throw new r.HexclaveAssertionError("Client version was not replaced. Something went wrong during build!");function m(e){let t;var r=(t=e?"string"==typeof e?e:(0,l.isBrowserLike)()?e.browser:e.server:(t=(0,l.isBrowserLike)()?E.envVars.HEXCLAVE_API_URL_BROWSER:E.envVars.HEXCLAVE_API_URL_SERVER)||E.envVars.HEXCLAVE_API_URL||v).endsWith("/")?t.slice(0,-1):t;if(!r)return r;let s=E.envVars.HEXCLAVE_PORT_PREFIX;return s?r.replace(/\$\{NEXT_PUBLIC_HEXCLAVE_PORT_PREFIX:-81\}/g,s):r}let v="https://api.hexclave.com",y=new Map([[v,"https://r.hexclave.com"],["https://api.stack-auth.com","https://r.stack-auth.com"]]),f=new Map;e.s(["clientVersion",0,_,"createCache",0,e=>new i.AsyncCache(async t=>await c.Result.fromThrowingAsync(async()=>await e(t)),{}),"createCacheBySession",0,e=>new i.AsyncCache(async([t,...r])=>await c.Result.fromThrowingAsync(async()=>await e(t,r)),{onSubscribe:([e],t)=>{let r=e.onInvalidate(()=>t());return()=>r.unsubscribe()}}),"createEmptyTokenStore",0,function(){return new p.Store({refreshToken:null,accessToken:null})},"getAnalyticsBaseUrl",0,function(e){return y.get(e)??e},"getBaseUrl",0,m,"getDefaultExtraRequestHeaders",0,function(){return JSON.parse(E.envVars.HEXCLAVE_EXTRA_REQUEST_HEADERS||"{}")},"getDefaultProjectId",0,function(){let e;return E.envVars.HEXCLAVE_PROJECT_ID||((e=>{if(!(0,l.isBrowserLike)())return;let t=globalThis,r="__hexclave_missing_config_alert_already_shown";if(t[r])return;t[r]=!0;let s=t.alert;"function"==typeof s&&s(e)})(e="Welcome to Hexclave! It seems that you haven't provided a project ID. Please create a project on the Hexclave dashboard at https://app.hexclave.com and put it in the HEXCLAVE_PROJECT_ID environment variable."),(0,r.throwErr)(Error(e)))},"getDefaultPublishableClientKey",0,function(){return E.envVars.HEXCLAVE_PUBLISHABLE_CLIENT_KEY},"getDefaultSecretServerKey",0,function(){return E.envVars.HEXCLAVE_SECRET_SERVER_KEY||(0,r.throwErr)(Error("No secret server key provided. Please copy your key from the Hexclave dashboard and put it in the HEXCLAVE_SECRET_SERVER_KEY environment variable."))},"getDefaultSuperSecretAdminKey",0,function(){return E.envVars.HEXCLAVE_SUPER_SECRET_ADMIN_KEY||(0,r.throwErr)(Error("No super secret admin key provided. Please copy your key from the Hexclave dashboard and put it in the HEXCLAVE_SUPER_SECRET_ADMIN_KEY environment variable."))},"getUrls",0,function(e,t){return(0,h.resolveHandlerUrls)({urls:e,projectId:t.projectId})},"resolveApiUrls",0,function(e){return()=>{if(null!=e)return[m(e)];let s=m(void 0);return(0,d.createGlobal)("__stack-fetch-backend-urls-started",()=>((0,t.runAsynchronously)(async()=>{try{let e=await fetch(`${s}/api/v1/internal/backend-urls`);if(!e.ok)return;let t=await e.json();if(!Array.isArray(t.urls)||!t.urls.every(e=>"string"==typeof e))return;(0,d.createGlobal)("__stack-fetched-backend-urls",()=>t.urls)}catch(e){(0,r.captureError)("fetch-backend-urls-in-background",e)}}),!0)),(0,d.getGlobal)("__stack-fetched-backend-urls")??(0,o.getDefaultApiUrls)(s)}},"resolveConstructorOptions",0,function(e){return{...e.inheritsFrom?.[u.hexclaveAppInternalsSymbol].getConstructorOptions()??{},...(0,n.filterUndefined)((0,n.omit)(e,["inheritsFrom"]))}},"useAsyncCache",0,function(e,t,n){for(let r of((0,a.suspendIfSsr)(n),(0,d.getGlobal)("use-async-cache-execution-hooks")??[]))r({cache:e,caller:n,dependencies:t});let o=s.default.useId();s.default.useEffect(()=>{f.delete(o)},[...t,o]);let i=(0,s.useCallback)(r=>{let{unsubscribe:s}=e.onStateChange(t,()=>{f.delete(o),r()});return s},[e,...t]),c=(0,s.useCallback)(()=>(f.has(o)||f.set(o,e.getOrWait(t,"read-write")),f.get(o)),[e,...t]),l=(0,a.use)(s.default.useSyncExternalStore(i,c,c));if("error"===l.status){let e=l.error;throw e instanceof Error&&!e.__stackHasConcatenatedStacktraces&&((0,r.concatStacktraces)(e,Error()),e.__stackHasConcatenatedStacktraces=!0),e}return l.data}])}];
|
|
1524
1524
|
|
|
1525
1525
|
//# sourceMappingURL=packages_0rk1u8f._.js.map
|
|
@@ -1520,6 +1520,6 @@ module.exports=[684935,668388,578472,e=>{"use strict";var t=e.i(478129),r=e.i(16
|
|
|
1520
1520
|
See: https://nextjs.org/docs/messages/missing-suspense-with-csr-bailout
|
|
1521
1521
|
|
|
1522
1522
|
More information on SSR and Suspense boundaries: https://react.dev/reference/react/Suspense#providing-a-fallback-for-server-errors-and-client-only-content
|
|
1523
|
-
`),this.__noSuspenseBoundarySentinel=o,this.name="NoSuspenseBoundaryError",this.reason=e.caller??"suspendIfSsr()",this.digest="BAILOUT_TO_CLIENT_SIDE_RENDERING"}};e.s(["suspend",0,function(){throw c((0,s.neverResolve)()),Error("Somehow a Promise that never resolves was resolved?")},"suspendIfSsr",0,function(e){if(!(0,r.isBrowserLike)())throw new l({caller:e})},"use",0,c],402713);var d=e.i(347306),u=e.i(538022),p=e.i(519327),E=class{constructor(e,t={}){this._fetcher=e,this._options=t,this._map=new d.DependenciesMap,this.isCacheAvailable=this._createKeyed("isCacheAvailable"),this.getIfCached=this._createKeyed("getIfCached"),this.getOrWait=this._createKeyed("getOrWait"),this.forceSetCachedValue=this._createKeyed("forceSetCachedValue"),this.forceSetCachedValueAsync=this._createKeyed("forceSetCachedValueAsync"),this.refresh=this._createKeyed("refresh"),this.invalidate=this._createKeyed("invalidate"),this.onStateChange=this._createKeyed("onStateChange"),this.isDirty=this._createKeyed("isDirty")}_createKeyed(e){return(t,...r)=>{let s=this.getValueCache(t);return s[e].apply(s,r)}}getValueCache(e){let t=this._map.get(e);return t||(t=new h(async()=>await this._fetcher(e),{...this._options,onSubscribe:this._options.onSubscribe?t=>this._options.onSubscribe(e,t):void 0}),this._map.set(e,t)),t}async refreshWhere(e){let t=[];for(let[r,s]of this._map)e(r)&&t.push(s.refresh());await Promise.all(t)}async invalidateWhere(e){let t=[];for(let[r,s]of this._map)e(r)&&t.push(s.invalidate().catch(()=>void 0));await Promise.all(t)}},h=class{constructor(e,t={}){this._options=t,this._subscriptionsCount=0,this._unsubscribers=[],this._mostRecentRefreshPromiseIndex=0,this._store=new p.AsyncStore,this._rateLimitOptions={concurrency:1,throttleMs:300,...(0,u.filterUndefined)(t.rateLimiter??{})},this._fetcher=(0,s.rateLimited)(e,{...this._rateLimitOptions,batchCalls:!0})}isCacheAvailable(){return this._store.isAvailable()}getIfCached(){return this._store.get()}getOrWait(e){let t=this.getIfCached();return"read-write"===e&&"ok"===t.status?(0,s.resolved)(t.data):this._refetch(e)}_set(e){this._store.set(e)}_setAsync(e){0!==this._subscriptionsCount||(0,r.isBrowserLike)()||this._invalidateCacheSoon();let t=(0,s.pending)(e);return this._pendingPromise=t,(0,s.pending)(this._store.setAsync(t).then(()=>void 0))}_refetch(e){if("read-write"===e&&this._pendingPromise)return this._pendingPromise;let t=(0,s.pending)(this._fetcher());return"never"===e?t:(0,s.pending)(this._setAsync(t).then(()=>t))}forceSetCachedValue(e){this._set(e)}forceSetCachedValueAsync(e){return this._setAsync(e)}async refresh(){this._subscriptionsCount>0&&await this.getOrWait("write-only")}async invalidate(){this._store.setUnavailable(),this._pendingPromise=void 0,await this.refresh()}isDirty(){return void 0===this._pendingPromise}_invalidateCacheSoon(){let e=++this._mostRecentRefreshPromiseIndex;(0,s.runAsynchronously)(async()=>{await (0,s.wait)(5e3),0===this._subscriptionsCount&&e===this._mostRecentRefreshPromiseIndex&&await this.invalidate()})}onStateChange(e){let t=this._store.onChange(e);if((0,s.runAsynchronously)(this.getOrWait("read-write")),0==this._subscriptionsCount++&&this._options.onSubscribe){let e=this._options.onSubscribe(()=>{(0,s.runAsynchronously)(this.refresh())});this._unsubscribers.push(e)}let r=!1;return{unsubscribe:()=>{if(!r&&(r=!0,t.unsubscribe(),0==--this._subscriptionsCount))for(let e of(this._invalidateCacheSoon(),this._unsubscribers))e()}}}};e.s(["AsyncCache",0,E],685588)},181199,e=>{"use strict";var t=e.i(357063),r=e.i(517930),s=e.i(649434),a=e.i(402713),n=e.i(538022),o=e.i(498898),i=e.i(685588),c=e.i(830561),l=e.i(238717),d=e.i(517762),u=e.i(525694),p=e.i(519327),E=e.i(866137),h=e.i(352901);let _="js @hexclave/next@1.0.
|
|
1523
|
+
`),this.__noSuspenseBoundarySentinel=o,this.name="NoSuspenseBoundaryError",this.reason=e.caller??"suspendIfSsr()",this.digest="BAILOUT_TO_CLIENT_SIDE_RENDERING"}};e.s(["suspend",0,function(){throw c((0,s.neverResolve)()),Error("Somehow a Promise that never resolves was resolved?")},"suspendIfSsr",0,function(e){if(!(0,r.isBrowserLike)())throw new l({caller:e})},"use",0,c],402713);var d=e.i(347306),u=e.i(538022),p=e.i(519327),E=class{constructor(e,t={}){this._fetcher=e,this._options=t,this._map=new d.DependenciesMap,this.isCacheAvailable=this._createKeyed("isCacheAvailable"),this.getIfCached=this._createKeyed("getIfCached"),this.getOrWait=this._createKeyed("getOrWait"),this.forceSetCachedValue=this._createKeyed("forceSetCachedValue"),this.forceSetCachedValueAsync=this._createKeyed("forceSetCachedValueAsync"),this.refresh=this._createKeyed("refresh"),this.invalidate=this._createKeyed("invalidate"),this.onStateChange=this._createKeyed("onStateChange"),this.isDirty=this._createKeyed("isDirty")}_createKeyed(e){return(t,...r)=>{let s=this.getValueCache(t);return s[e].apply(s,r)}}getValueCache(e){let t=this._map.get(e);return t||(t=new h(async()=>await this._fetcher(e),{...this._options,onSubscribe:this._options.onSubscribe?t=>this._options.onSubscribe(e,t):void 0}),this._map.set(e,t)),t}async refreshWhere(e){let t=[];for(let[r,s]of this._map)e(r)&&t.push(s.refresh());await Promise.all(t)}async invalidateWhere(e){let t=[];for(let[r,s]of this._map)e(r)&&t.push(s.invalidate().catch(()=>void 0));await Promise.all(t)}},h=class{constructor(e,t={}){this._options=t,this._subscriptionsCount=0,this._unsubscribers=[],this._mostRecentRefreshPromiseIndex=0,this._store=new p.AsyncStore,this._rateLimitOptions={concurrency:1,throttleMs:300,...(0,u.filterUndefined)(t.rateLimiter??{})},this._fetcher=(0,s.rateLimited)(e,{...this._rateLimitOptions,batchCalls:!0})}isCacheAvailable(){return this._store.isAvailable()}getIfCached(){return this._store.get()}getOrWait(e){let t=this.getIfCached();return"read-write"===e&&"ok"===t.status?(0,s.resolved)(t.data):this._refetch(e)}_set(e){this._store.set(e)}_setAsync(e){0!==this._subscriptionsCount||(0,r.isBrowserLike)()||this._invalidateCacheSoon();let t=(0,s.pending)(e);return this._pendingPromise=t,(0,s.pending)(this._store.setAsync(t).then(()=>void 0))}_refetch(e){if("read-write"===e&&this._pendingPromise)return this._pendingPromise;let t=(0,s.pending)(this._fetcher());return"never"===e?t:(0,s.pending)(this._setAsync(t).then(()=>t))}forceSetCachedValue(e){this._set(e)}forceSetCachedValueAsync(e){return this._setAsync(e)}async refresh(){this._subscriptionsCount>0&&await this.getOrWait("write-only")}async invalidate(){this._store.setUnavailable(),this._pendingPromise=void 0,await this.refresh()}isDirty(){return void 0===this._pendingPromise}_invalidateCacheSoon(){let e=++this._mostRecentRefreshPromiseIndex;(0,s.runAsynchronously)(async()=>{await (0,s.wait)(5e3),0===this._subscriptionsCount&&e===this._mostRecentRefreshPromiseIndex&&await this.invalidate()})}onStateChange(e){let t=this._store.onChange(e);if((0,s.runAsynchronously)(this.getOrWait("read-write")),0==this._subscriptionsCount++&&this._options.onSubscribe){let e=this._options.onSubscribe(()=>{(0,s.runAsynchronously)(this.refresh())});this._unsubscribers.push(e)}let r=!1;return{unsubscribe:()=>{if(!r&&(r=!0,t.unsubscribe(),0==--this._subscriptionsCount))for(let e of(this._invalidateCacheSoon(),this._unsubscribers))e()}}}};e.s(["AsyncCache",0,E],685588)},181199,e=>{"use strict";var t=e.i(357063),r=e.i(517930),s=e.i(649434),a=e.i(402713),n=e.i(538022),o=e.i(498898),i=e.i(685588),c=e.i(830561),l=e.i(238717),d=e.i(517762),u=e.i(525694),p=e.i(519327),E=e.i(866137),h=e.i(352901);let _="js @hexclave/next@1.0.21";if(_.startsWith("STACK_COMPILE_TIME"))throw new r.HexclaveAssertionError("Client version was not replaced. Something went wrong during build!");function m(e){let t;var r=(t=e?"string"==typeof e?e:(0,l.isBrowserLike)()?e.browser:e.server:(t=(0,l.isBrowserLike)()?E.envVars.HEXCLAVE_API_URL_BROWSER:E.envVars.HEXCLAVE_API_URL_SERVER)||E.envVars.HEXCLAVE_API_URL||v).endsWith("/")?t.slice(0,-1):t;if(!r)return r;let s=E.envVars.HEXCLAVE_PORT_PREFIX;return s?r.replace(/\$\{NEXT_PUBLIC_HEXCLAVE_PORT_PREFIX:-81\}/g,s):r}let v="https://api.hexclave.com",y=new Map([[v,"https://r.hexclave.com"],["https://api.stack-auth.com","https://r.stack-auth.com"]]),f=new Map;e.s(["clientVersion",0,_,"createCache",0,e=>new i.AsyncCache(async t=>await c.Result.fromThrowingAsync(async()=>await e(t)),{}),"createCacheBySession",0,e=>new i.AsyncCache(async([t,...r])=>await c.Result.fromThrowingAsync(async()=>await e(t,r)),{onSubscribe:([e],t)=>{let r=e.onInvalidate(()=>t());return()=>r.unsubscribe()}}),"createEmptyTokenStore",0,function(){return new p.Store({refreshToken:null,accessToken:null})},"getAnalyticsBaseUrl",0,function(e){return y.get(e)??e},"getBaseUrl",0,m,"getDefaultExtraRequestHeaders",0,function(){return JSON.parse(E.envVars.HEXCLAVE_EXTRA_REQUEST_HEADERS||"{}")},"getDefaultProjectId",0,function(){let e;return E.envVars.HEXCLAVE_PROJECT_ID||((e=>{if(!(0,l.isBrowserLike)())return;let t=globalThis,r="__hexclave_missing_config_alert_already_shown";if(t[r])return;t[r]=!0;let s=t.alert;"function"==typeof s&&s(e)})(e="Welcome to Hexclave! It seems that you haven't provided a project ID. Please create a project on the Hexclave dashboard at https://app.hexclave.com and put it in the HEXCLAVE_PROJECT_ID environment variable."),(0,r.throwErr)(Error(e)))},"getDefaultPublishableClientKey",0,function(){return E.envVars.HEXCLAVE_PUBLISHABLE_CLIENT_KEY},"getDefaultSecretServerKey",0,function(){return E.envVars.HEXCLAVE_SECRET_SERVER_KEY||(0,r.throwErr)(Error("No secret server key provided. Please copy your key from the Hexclave dashboard and put it in the HEXCLAVE_SECRET_SERVER_KEY environment variable."))},"getDefaultSuperSecretAdminKey",0,function(){return E.envVars.HEXCLAVE_SUPER_SECRET_ADMIN_KEY||(0,r.throwErr)(Error("No super secret admin key provided. Please copy your key from the Hexclave dashboard and put it in the HEXCLAVE_SUPER_SECRET_ADMIN_KEY environment variable."))},"getUrls",0,function(e,t){return(0,h.resolveHandlerUrls)({urls:e,projectId:t.projectId})},"resolveApiUrls",0,function(e){return()=>{if(null!=e)return[m(e)];let s=m(void 0);return(0,d.createGlobal)("__stack-fetch-backend-urls-started",()=>((0,t.runAsynchronously)(async()=>{try{let e=await fetch(`${s}/api/v1/internal/backend-urls`);if(!e.ok)return;let t=await e.json();if(!Array.isArray(t.urls)||!t.urls.every(e=>"string"==typeof e))return;(0,d.createGlobal)("__stack-fetched-backend-urls",()=>t.urls)}catch(e){(0,r.captureError)("fetch-backend-urls-in-background",e)}}),!0)),(0,d.getGlobal)("__stack-fetched-backend-urls")??(0,o.getDefaultApiUrls)(s)}},"resolveConstructorOptions",0,function(e){return{...e.inheritsFrom?.[u.hexclaveAppInternalsSymbol].getConstructorOptions()??{},...(0,n.filterUndefined)((0,n.omit)(e,["inheritsFrom"]))}},"useAsyncCache",0,function(e,t,n){for(let r of((0,a.suspendIfSsr)(n),(0,d.getGlobal)("use-async-cache-execution-hooks")??[]))r({cache:e,caller:n,dependencies:t});let o=s.default.useId();s.default.useEffect(()=>{f.delete(o)},[...t,o]);let i=(0,s.useCallback)(r=>{let{unsubscribe:s}=e.onStateChange(t,()=>{f.delete(o),r()});return s},[e,...t]),c=(0,s.useCallback)(()=>(f.has(o)||f.set(o,e.getOrWait(t,"read-write")),f.get(o)),[e,...t]),l=(0,a.use)(s.default.useSyncExternalStore(i,c,c));if("error"===l.status){let e=l.error;throw e instanceof Error&&!e.__stackHasConcatenatedStacktraces&&((0,r.concatStacktraces)(e,Error()),e.__stackHasConcatenatedStacktraces=!0),e}return l.data}])}];
|
|
1524
1524
|
|
|
1525
1525
|
//# sourceMappingURL=packages_1eprmn6._.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module.exports=[234328,a=>{"use strict";var b=a.i(152795),c=a.i(729856);a.i(245902);var d=a.i(254837),e=a.i(83920);a.i(990559);var f=a.i(45624),g=a.i(975539),h=a.i(766850),i=a.i(484154),j=a.i(873615);let k=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M209.88,69.83A115.19,115.19,0,0,0,128,36h-.41C63.85,36.22,12,88.76,12,153.13V176a20,20,0,0,0,20,20H224a20,20,0,0,0,20-20V152A115.25,115.25,0,0,0,209.88,69.83ZM220,172H127.32l46.44-65A12,12,0,1,0,154.24,93L97.82,172H36V153.13c0-1.72,0-3.43.14-5.13H56a12,12,0,0,0,0-24H40.62c10.91-33.39,40-58.52,75.38-63.21V80a12,12,0,0,0,24,0V60.8A92,92,0,0,1,215.66,124H200a12,12,0,0,0,0,24h19.9c.06,1.33.1,2.66.1,4Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M232,152v24a8,8,0,0,1-8,8H32a8,8,0,0,1-8-8V153.13C24,95.65,70.15,48.2,127.63,48A104,104,0,0,1,232,152Z",opacity:"0.2"}),i.createElement("path",{d:"M207.06,72.67A111.24,111.24,0,0,0,128,40h-.4C66.07,40.21,16,91,16,153.13V176a16,16,0,0,0,16,16H224a16,16,0,0,0,16-16V152A111.25,111.25,0,0,0,207.06,72.67ZM224,176H119.71l54.76-75.3a8,8,0,0,0-12.94-9.42L99.92,176H32V153.13c0-3.08.15-6.12.43-9.13H56a8,8,0,0,0,0-16H35.27c10.32-38.86,44-68.24,84.73-71.66V80a8,8,0,0,0,16,0V56.33A96.14,96.14,0,0,1,221,128H200a8,8,0,0,0,0,16h23.67c.21,2.65.33,5.31.33,8Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M240,152v24a16,16,0,0,1-16,16H115.93a4,4,0,0,1-3.24-6.35L174.27,101a8.21,8.21,0,0,0-1.37-11.3,8,8,0,0,0-11.37,1.61l-72,99.06A4,4,0,0,1,86.25,192H32a16,16,0,0,1-16-16V153.13c0-1.79,0-3.57.13-5.33a4,4,0,0,1,4-3.8H48a8,8,0,0,0,8-8.53A8.17,8.17,0,0,0,47.73,128H23.92a4,4,0,0,1-3.87-5c12-43.84,49.66-77.13,95.52-82.28a4,4,0,0,1,4.43,4V72a8,8,0,0,0,8.53,8A8.17,8.17,0,0,0,136,71.73V44.67a4,4,0,0,1,4.43-4A112.18,112.18,0,0,1,236.23,123a4,4,0,0,1-3.88,5H208.27a8.17,8.17,0,0,0-8.25,7.47,8,8,0,0,0,8,8.53h27.92a4,4,0,0,1,4,3.86C240,149.23,240,150.61,240,152Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M205.65,74.08A109.26,109.26,0,0,0,128,42h-.39C67.17,42.21,18,92.06,18,153.13V176a14,14,0,0,0,14,14H224a14,14,0,0,0,14-14V152A109.3,109.3,0,0,0,205.65,74.08ZM226,176a2,2,0,0,1-2,2H115.78l57.07-78.47a6,6,0,0,0-9.7-7.06L100.94,178H32a2,2,0,0,1-2-2V153.13A102.36,102.36,0,0,1,30.62,142H56a6,6,0,0,0,0-12H32.71C42.6,88.4,78.53,56.86,122,54.19V80a6,6,0,0,0,12,0V54.19A98.05,98.05,0,0,1,223.53,130H200a6,6,0,0,0,0,12h25.5c.33,3.3.5,6.64.5,10Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M207.06,72.67A111.24,111.24,0,0,0,128,40h-.4C66.07,40.21,16,91,16,153.13V176a16,16,0,0,0,16,16H224a16,16,0,0,0,16-16V152A111.25,111.25,0,0,0,207.06,72.67ZM224,176H119.71l54.76-75.3a8,8,0,0,0-12.94-9.42L99.92,176H32V153.13c0-3.08.15-6.12.43-9.13H56a8,8,0,0,0,0-16H35.27c10.32-38.86,44-68.24,84.73-71.66V80a8,8,0,0,0,16,0V56.33A96.14,96.14,0,0,1,221,128H200a8,8,0,0,0,0,16h23.67c.21,2.65.33,5.31.33,8Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M204.23,75.5A107.37,107.37,0,0,0,127.62,44C68.28,44.21,20,93.16,20,153.13V176a12,12,0,0,0,12,12H224a12,12,0,0,0,12-12V152A107.25,107.25,0,0,0,204.23,75.5ZM228,176a4,4,0,0,1-4,4H111.85l59.38-81.65a4,4,0,1,0-6.46-4.7L102,180H32a4,4,0,0,1-4-4V153.13A103.42,103.42,0,0,1,28.84,140H56a4,4,0,0,0,0-8H30.21C39.59,87.66,77.84,53.93,124,52.09V80a4,4,0,0,0,8,0V52.08A100.08,100.08,0,0,1,226,132H200a4,4,0,0,0,0,8h27.29a101.6,101.6,0,0,1,.71,12Z"}))]]),l=i.forwardRef((a,b)=>i.createElement(j.default,{ref:b,...a,weights:k}));l.displayName="GaugeIcon";var m=a.i(591888),n=a.i(594585);function o({value:a,max:d,color:e,label:f,boosted:i}){let j=d>0?Math.min(a/d*100,100):0,k="striped-red"===e;return(0,b.jsxs)("div",{className:"jsx-9ff0a765857ff0b9 space-y-1.5",children:[(0,b.jsx)("div",{className:"jsx-9ff0a765857ff0b9 h-3 w-full rounded-full bg-gray-300 dark:bg-zinc-600 border border-border overflow-hidden",children:(0,b.jsx)("div",{style:{width:`${j}%`,...i?{background:"repeating-linear-gradient(45deg, #3b82f6, #3b82f6 10px, #2563eb 10px, #2563eb 20px)",backgroundSize:"28.28px 28.28px",animation:"stripe-move 1s linear infinite",boxShadow:"0 0 10px rgba(59, 130, 246, 0.5)"}:k?{background:"repeating-linear-gradient(45deg, #ef4444, #ef4444 4px, #fca5a5 4px, #fca5a5 8px)"}:{}},className:"jsx-9ff0a765857ff0b9 "+((0,h.cn)("h-full rounded-full transition-all duration-300",i||k?"":({black:"bg-black dark:bg-white",red:"bg-red-500",yellow:"bg-yellow-400"})[e])||"")})}),(0,b.jsx)(g.Typography,{variant:"secondary",className:"text-xs",children:f}),(0,b.jsx)(c.default,{id:"9ff0a765857ff0b9",children:"@keyframes stripe-move{0%{background-position:0 0}to{background-position:28.28px 0}}"})]})}function p(a){let b=new Date,c=a.getTime()-b.getTime();if(c<=0)return"00:00:00";let d=Math.floor(c/36e5),e=Math.floor(c%36e5/6e4),f=Math.floor(c%6e4/1e3);return`${d.toString().padStart(2,"0")}:${e.toString().padStart(2,"0")}:${f.toString().padStart(2,"0")}`}let q=["#ff6b6b","#ffd93d","#6bcb77","#4d96ff","#9b59b6","#ff85a2","#00d2d3"],r=function(){let a="";for(let b=0;b<24;b++){let c=b/24*2*Math.PI,d=50+b%5*12,e=Math.cos(c)*d,f=.7*d*Math.sin(c),g=47*b%360;a+=`
|
|
2
|
+
@keyframes boost-confetti-${b} {
|
|
3
|
+
0% { opacity: 0; transform: translate(-50%, -50%) rotate(0deg); }
|
|
4
|
+
8% { opacity: 0.8; }
|
|
5
|
+
100% { opacity: 0; transform: translate(calc(-50% + ${e.toFixed(1)}px), calc(-50% + ${f.toFixed(1)}px)) rotate(${g}deg); }
|
|
6
|
+
}
|
|
7
|
+
`}return a}();function s(){return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("style",{dangerouslySetInnerHTML:{__html:r}}),Array.from({length:24},(a,c)=>{let d=q[c%q.length],e=3+c%3,f=c%3==0,g=2.5+c%4*.5,h=.25*c%g;return(0,b.jsx)("div",{className:"absolute pointer-events-none",style:{width:e,height:f?e:.6*e,backgroundColor:d,borderRadius:f?1:e,left:"50%",top:"50%",opacity:0,animation:`boost-confetti-${c} ${g}s ease-out ${h}s infinite`}},c)})]})}function t({expiresAt:a,onExpire:d}){let[e,f]=(0,i.useState)(p(a));return(0,i.useEffect)(()=>{let b=setInterval(()=>{if(a<=new Date){clearInterval(b),d();return}f(p(a))},1e3);return()=>clearInterval(b)},[a,d]),(0,b.jsxs)("div",{className:"jsx-97cf494cde42730 flex justify-center mt-3",children:[(0,b.jsxs)("div",{className:"jsx-97cf494cde42730 boost-timer-wrapper relative rounded-lg",children:[(0,b.jsx)(s,{}),(0,b.jsxs)("div",{className:"jsx-97cf494cde42730 relative z-10 rounded-md px-3 py-2 border border-white/10 min-w-[200px] overflow-hidden",children:[(0,b.jsx)("div",{style:{background:"linear-gradient(135deg, #ff6b6b, #ffd93d, #6bcb77, #4d96ff, #9b59b6, #ff85a2, #ff6b6b)"},className:"jsx-97cf494cde42730 absolute inset-0 rounded-md"}),(0,b.jsx)("div",{className:"jsx-97cf494cde42730 absolute inset-0 rounded-md bg-zinc-900/[0.82]"}),(0,b.jsxs)("div",{className:"jsx-97cf494cde42730 relative flex flex-col items-center justify-center gap-0.5",children:[(0,b.jsx)("span",{className:"jsx-97cf494cde42730 text-[9px] font-semibold uppercase tracking-[0.15em] text-white/50",children:"Capacity boosted for"}),(0,b.jsx)(g.Typography,{className:"text-white font-mono text-sm font-bold drop-shadow-[0_0_4px_rgba(255,255,255,0.3)]",children:e})]})]})]}),(0,b.jsx)(c.default,{id:"97cf494cde42730",children:'.boost-timer-wrapper.jsx-97cf494cde42730{--border-angle:0deg;position:relative;overflow:visible}.boost-timer-wrapper.jsx-97cf494cde42730:before,.boost-timer-wrapper.jsx-97cf494cde42730:after{content:"";background:conic-gradient(from var(--border-angle), #ff6b6b, #ffd93d, #6bcb77, #4d96ff, #9b59b6, #ff85a2, #ff6b6b);border-radius:9px;animation:3s linear infinite rotate-glow;position:absolute;inset:-2px}.boost-timer-wrapper.jsx-97cf494cde42730:after{filter:blur(12px);opacity:.7}@property --border-angle{syntax:"<angle>";inherits:false;initial-value:0deg}@keyframes rotate-glow{0%{--border-angle:0deg}to{--border-angle:360deg}}'})]})}a.s(["DomainReputationCard",0,function(){let a=(0,n.useAdminApp)(),c=a.useEmailDeliveryStats(),h=c.capacity.is_boost_active,i=c.capacity.boost_expires_at?new Date(c.capacity.boost_expires_at):null,j=3600*c.capacity.rate_per_second,k=j/c.capacity.boost_multiplier,p=c.stats.hour.sent,q=c.stats.hour.sent,r=c.stats.hour.bounced,s=q>0?r/q*100:0,u=c.stats.hour.marked_as_spam,v=q>0?u/q*100:0,w=async()=>{await a.activateEmailCapacityBoost()},x=h?(0,b.jsxs)("span",{children:[p," of"," ",(0,b.jsx)("span",{className:"text-red-500 line-through",title:"Base hourly capacity (replaced by active boost)",children:Math.round(k)})," → ",(0,b.jsx)("span",{className:"text-blue-500 font-medium",title:"Boosted hourly capacity",children:Math.round(j)}),"/h max ",(0,b.jsx)("span",{className:"text-blue-500 font-medium",children:"(boosted)"})]}):`${p} of ${Math.round(j)}/h max`;return(0,b.jsxs)(e.DesignCard,{gradient:"default",glassmorphic:!0,className:"w-full xl:w-72",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 mb-3",children:[(0,b.jsx)("div",{className:"p-1 rounded-md bg-foreground/[0.06] dark:bg-foreground/[0.04]",children:(0,b.jsx)(l,{className:"h-3 w-3 text-foreground/70 dark:text-muted-foreground"})}),(0,b.jsx)("span",{className:"text-xs font-semibold text-foreground uppercase tracking-wider",children:"Domain Reputation"})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)(g.Typography,{className:"text-sm font-medium mb-1",children:"Email Capacity"}),(0,b.jsx)(g.Typography,{variant:"secondary",className:"text-[11px] mb-1.5",children:"Hexclave automatically buffers your emails as your domain warms up."}),(0,b.jsx)(o,{value:p,max:j,color:"black",label:x,boosted:h}),h&&i?(0,b.jsx)(t,{expiresAt:i,onExpire:()=>(0,m.runAsynchronouslyWithAlert)(a.getEmailDeliveryStats())}):(0,b.jsx)("div",{className:"flex justify-center mt-3",children:(0,b.jsx)(d.DesignButton,{variant:"default",size:"sm",className:"min-w-[200px]",onClick:w,children:"Temporarily increase capacity"})})]}),(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"flex items-center gap-1 mb-1.5",children:[(0,b.jsx)(g.Typography,{className:"text-sm font-medium",children:"Bounce Rate"}),(0,b.jsx)(f.SimpleTooltip,{type:"info",tooltip:"Percentage of emails that couldn't be delivered. High bounce rates can hurt your sender reputation and deliverability."})]}),(0,b.jsx)(o,{value:s,max:5,color:"striped-red",label:`${s.toFixed(2)}% of 5% max`})]}),(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"flex items-center gap-1 mb-1.5",children:[(0,b.jsx)(g.Typography,{className:"text-sm font-medium",children:"Spam Complaint"}),(0,b.jsx)(f.SimpleTooltip,{type:"info",tooltip:"Percentage of recipients who marked your emails as spam. Keep this low to maintain good deliverability."})]}),(0,b.jsx)(o,{value:v,max:.1,color:"yellow",label:`${v.toFixed(2)}% of 0.1% max`})]})]})]})}],234328)},550435,a=>{"use strict";a.s(["STATUS_LABELS",0,{paused:"Paused",preparing:"Preparing",rendering:"Rendering","render-error":"Render Error",scheduled:"Scheduled",queued:"Queued",sending:"Sending","server-error":"Server Error",skipped:"Skipped",bounced:"Bounced","delivery-delayed":"Delivery Delayed",sent:"Sent",opened:"Opened",clicked:"Clicked","marked-as-spam":"Marked as Spam"},"computeEmailStats",0,function(a){let b=0,c=0,d=0,e=0,f=0,g=0;for(let h of a)switch(h.status){case"sent":case"opened":case"clicked":case"delivery-delayed":b++;break;case"skipped":f++;break;case"bounced":c++;break;case"marked-as-spam":d++;break;case"server-error":case"render-error":e++;break;default:g++}return{sent:b,bounced:c,spam:d,errors:e,cancelled:f,inProgress:g}},"getStatusBadgeColor",0,function(a){switch(a){case"sent":return"green";case"opened":return"blue";case"clicked":return"purple";case"bounced":case"server-error":case"render-error":return"red";case"marked-as-spam":return"orange";default:return"cyan"}}])},836678,a=>{"use strict";var b=a.i(152795),c=a.i(766850);a.i(990559);var d=a.i(260322),e=a.i(85457);a.s(["StatsBar",0,function({data:a,className:f}){let g=a.sent+a.bounced+a.spam+a.errors+a.cancelled+a.inProgress;if(0===g)return(0,b.jsx)("div",{className:(0,c.cn)("w-full",f),children:(0,b.jsx)("div",{className:"h-3 w-full rounded bg-gray-200"})});let h=a.sent/g*100,i=a.bounced/g*100,j=a.spam/g*100,k=a.errors/g*100,l=a.cancelled/g*100,m=a.inProgress/g*100,n=[{label:"Sent",count:a.sent,color:"bg-green-500"},{label:"Bounced",count:a.bounced,color:"bg-red-400"},{label:"Spam",count:a.spam,color:"bg-yellow-400"},{label:"Errors",count:a.errors,color:"bg-red-500"},{label:"Cancelled",count:a.cancelled,color:"bg-muted-foreground/50"},{label:"Pending",count:a.inProgress,color:"bg-gray-400"}].filter(a=>a.count>0);return(0,b.jsx)("div",{className:(0,c.cn)("w-full",f),children:(0,b.jsxs)(d.Tooltip,{children:[(0,b.jsx)(d.TooltipTrigger,{asChild:!0,children:(0,b.jsxs)("div",{className:"h-3 w-full rounded overflow-hidden flex cursor-default",children:[h>0&&(0,b.jsx)("div",{className:"bg-green-500 h-full",style:{width:`${h}%`}}),i>0&&(0,b.jsx)("div",{className:"h-full",style:{width:`${i}%`,background:"repeating-linear-gradient(45deg, #ef4444, #ef4444 4px, #fca5a5 4px, #fca5a5 8px)"}}),j>0&&(0,b.jsx)("div",{className:"bg-yellow-400 h-full",style:{width:`${j}%`}}),k>0&&(0,b.jsx)("div",{className:"bg-red-500 h-full",style:{width:`${k}%`}}),l>0&&(0,b.jsx)("div",{className:"bg-muted-foreground/50 h-full",style:{width:`${l}%`}}),m>0&&(0,b.jsx)("div",{className:"bg-gray-400 h-full",style:{width:`${m}%`}})]})}),(0,b.jsx)(e.TooltipPortal,{children:(0,b.jsx)(d.TooltipContent,{side:"bottom",className:"text-xs",children:(0,b.jsxs)("div",{className:"space-y-1",children:[n.map(({label:a,count:d,color:e})=>(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:(0,c.cn)("w-2 h-2 rounded-full shrink-0",e)}),(0,b.jsxs)("span",{children:[a,": ",d]})]},a)),(0,b.jsxs)("div",{className:"text-muted-foreground pt-0.5 border-t border-border/40",children:["Total: ",g]})]})})})]})})}])},120229,a=>{"use strict";a.s(["getEmailTimestamp",0,function(a){let b="deliveredAt"in a?a.deliveredAt:void 0;return null!=b?new Date(b):a.scheduledAt},"getRecipientDisplay",0,function(a){let b=a.to;return"user-primary-email"===b.type?`User: ${b.userId.slice(0,8)}...`:"user-custom-emails"===b.type?b.emails[0]??`User: ${b.userId.slice(0,8)}...`:b.emails[0]??"No recipients"}])},779438,a=>{"use strict";var b=a.i(152795);a.i(245902);var c=a.i(768458),d=a.i(83920),e=a.i(564581);a.i(990559);var f=a.i(919747),g=a.i(975539),h=a.i(40620),i=a.i(591888),j=a.i(320020),k=a.i(457250),l=a.i(876671),m=a.i(484154),n=a.i(594585),o=a.i(234328),p=a.i(550435),q=a.i(120229),r=a.i(836678);let s=[{id:"recipient",header:"Recipient",width:200,type:"string",accessor:a=>(0,q.getRecipientDisplay)(a)},{id:"scheduledAt",header:"Time",accessor:a=>(0,q.getEmailTimestamp)(a),width:180,type:"dateTime"},{id:"status",header:"Status",width:120,renderCell:({row:a})=>(0,b.jsx)(c.DesignBadge,{label:p.STATUS_LABELS[a.status],color:(0,p.getStatusBadgeColor)(a.status),size:"sm"})}];a.s(["SentEmailsView",0,function({filterFn:a,renderActions:c}){let q=(0,n.useAdminApp)(),t=(0,n.useProjectId)(),u=(0,e.useRouter)(),[v,w]=(0,m.useState)([]),[x,y]=(0,m.useState)(!0),z=(0,m.useCallback)(async()=>{y(!0);try{let a=await q.listOutboxEmails();w(a.items)}finally{y(!1)}},[q]);(0,m.useEffect)(()=>{let a=!1;return(0,i.runAsynchronouslyWithAlert)(async()=>{if(await z(),a)return}),()=>{a=!0}},[z]);let A=(0,m.useMemo)(()=>v.filter(a),[v,a]),B=(0,m.useMemo)(()=>(0,p.computeEmailStats)(A),[A]),[C,D]=(0,k.useDataGridUrlState)(s,{paramPrefix:"sentview",initial:{sorting:[{columnId:"scheduledAt",direction:"desc"}]}}),E=(0,l.useDataSource)({data:A,columns:s,getRowId:a=>a.id,sorting:C.sorting,quickSearch:C.quickSearch,pagination:C.pagination,paginationMode:"client"});return(0,b.jsxs)("div",{className:"flex gap-4",children:[(0,b.jsxs)("div",{className:"flex-1 flex flex-col gap-4",children:[c&&!x&&A.length>0&&c(A,z),(0,b.jsx)(d.DesignCard,{gradient:"default",glassmorphic:!0,contentClassName:"p-3",children:(0,b.jsxs)("div",{className:"py-1",children:[(0,b.jsx)("div",{className:"mb-2 text-sm text-center",children:(0,b.jsxs)("span",{className:"font-medium",children:[A.length," email",1!==A.length?"s":""]})}),(0,b.jsx)(r.StatsBar,{data:B})]})}),(0,b.jsxs)(d.DesignCard,{gradient:"default",glassmorphic:!0,contentClassName:"p-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 mb-2",children:[(0,b.jsx)("div",{className:"p-1 rounded-md bg-foreground/[0.06] dark:bg-foreground/[0.04]",children:(0,b.jsx)(h.Envelope,{className:"h-3 w-3 text-foreground/70 dark:text-muted-foreground"})}),(0,b.jsx)("span",{className:"text-xs font-semibold text-foreground uppercase tracking-wider",children:"Recipients"})]}),x?(0,b.jsxs)("div",{className:"flex items-center justify-center gap-2 py-8",children:[(0,b.jsx)(f.Spinner,{size:16}),(0,b.jsx)(g.Typography,{variant:"secondary",children:"Loading..."})]}):(0,b.jsx)(j.DataGrid,{columns:s,rows:E.rows,getRowId:a=>a.id,totalRowCount:E.totalRowCount,isLoading:E.isLoading,state:C,onChange:D,fillHeight:!1,onRowClick:a=>{u.push(`/projects/${t}/email-viewer/${a.id}`)}})]})]}),(0,b.jsx)("div",{className:"flex-shrink-0",children:(0,b.jsx)(o.DomainReputationCard,{})})]})}])}];
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=044u_dashboard_src_app_%28main%29_%28protected%29_projects_%5BprojectId%5D_email-sent_06e1zir._.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module.exports=[550435,a=>{"use strict";a.s(["STATUS_LABELS",0,{paused:"Paused",preparing:"Preparing",rendering:"Rendering","render-error":"Render Error",scheduled:"Scheduled",queued:"Queued",sending:"Sending","server-error":"Server Error",skipped:"Skipped",bounced:"Bounced","delivery-delayed":"Delivery Delayed",sent:"Sent",opened:"Opened",clicked:"Clicked","marked-as-spam":"Marked as Spam"},"computeEmailStats",0,function(a){let b=0,c=0,d=0,e=0,f=0,g=0;for(let h of a)switch(h.status){case"sent":case"opened":case"clicked":case"delivery-delayed":b++;break;case"skipped":f++;break;case"bounced":c++;break;case"marked-as-spam":d++;break;case"server-error":case"render-error":e++;break;default:g++}return{sent:b,bounced:c,spam:d,errors:e,cancelled:f,inProgress:g}},"getStatusBadgeColor",0,function(a){switch(a){case"sent":return"green";case"opened":return"blue";case"clicked":return"purple";case"bounced":case"server-error":case"render-error":return"red";case"marked-as-spam":return"orange";default:return"cyan"}}])},836678,a=>{"use strict";var b=a.i(152795),c=a.i(766850);a.i(990559);var d=a.i(260322),e=a.i(85457);a.s(["StatsBar",0,function({data:a,className:f}){let g=a.sent+a.bounced+a.spam+a.errors+a.cancelled+a.inProgress;if(0===g)return(0,b.jsx)("div",{className:(0,c.cn)("w-full",f),children:(0,b.jsx)("div",{className:"h-3 w-full rounded bg-gray-200"})});let h=a.sent/g*100,i=a.bounced/g*100,j=a.spam/g*100,k=a.errors/g*100,l=a.cancelled/g*100,m=a.inProgress/g*100,n=[{label:"Sent",count:a.sent,color:"bg-green-500"},{label:"Bounced",count:a.bounced,color:"bg-red-400"},{label:"Spam",count:a.spam,color:"bg-yellow-400"},{label:"Errors",count:a.errors,color:"bg-red-500"},{label:"Cancelled",count:a.cancelled,color:"bg-muted-foreground/50"},{label:"Pending",count:a.inProgress,color:"bg-gray-400"}].filter(a=>a.count>0);return(0,b.jsx)("div",{className:(0,c.cn)("w-full",f),children:(0,b.jsxs)(d.Tooltip,{children:[(0,b.jsx)(d.TooltipTrigger,{asChild:!0,children:(0,b.jsxs)("div",{className:"h-3 w-full rounded overflow-hidden flex cursor-default",children:[h>0&&(0,b.jsx)("div",{className:"bg-green-500 h-full",style:{width:`${h}%`}}),i>0&&(0,b.jsx)("div",{className:"h-full",style:{width:`${i}%`,background:"repeating-linear-gradient(45deg, #ef4444, #ef4444 4px, #fca5a5 4px, #fca5a5 8px)"}}),j>0&&(0,b.jsx)("div",{className:"bg-yellow-400 h-full",style:{width:`${j}%`}}),k>0&&(0,b.jsx)("div",{className:"bg-red-500 h-full",style:{width:`${k}%`}}),l>0&&(0,b.jsx)("div",{className:"bg-muted-foreground/50 h-full",style:{width:`${l}%`}}),m>0&&(0,b.jsx)("div",{className:"bg-gray-400 h-full",style:{width:`${m}%`}})]})}),(0,b.jsx)(e.TooltipPortal,{children:(0,b.jsx)(d.TooltipContent,{side:"bottom",className:"text-xs",children:(0,b.jsxs)("div",{className:"space-y-1",children:[n.map(({label:a,count:d,color:e})=>(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:(0,c.cn)("w-2 h-2 rounded-full shrink-0",e)}),(0,b.jsxs)("span",{children:[a,": ",d]})]},a)),(0,b.jsxs)("div",{className:"text-muted-foreground pt-0.5 border-t border-border/40",children:["Total: ",g]})]})})})]})})}])},234328,a=>{"use strict";var b=a.i(152795),c=a.i(729856);a.i(245902);var d=a.i(254837),e=a.i(83920);a.i(990559);var f=a.i(45624),g=a.i(975539),h=a.i(766850),i=a.i(484154),j=a.i(873615);let k=new Map([["bold",i.createElement(i.Fragment,null,i.createElement("path",{d:"M209.88,69.83A115.19,115.19,0,0,0,128,36h-.41C63.85,36.22,12,88.76,12,153.13V176a20,20,0,0,0,20,20H224a20,20,0,0,0,20-20V152A115.25,115.25,0,0,0,209.88,69.83ZM220,172H127.32l46.44-65A12,12,0,1,0,154.24,93L97.82,172H36V153.13c0-1.72,0-3.43.14-5.13H56a12,12,0,0,0,0-24H40.62c10.91-33.39,40-58.52,75.38-63.21V80a12,12,0,0,0,24,0V60.8A92,92,0,0,1,215.66,124H200a12,12,0,0,0,0,24h19.9c.06,1.33.1,2.66.1,4Z"}))],["duotone",i.createElement(i.Fragment,null,i.createElement("path",{d:"M232,152v24a8,8,0,0,1-8,8H32a8,8,0,0,1-8-8V153.13C24,95.65,70.15,48.2,127.63,48A104,104,0,0,1,232,152Z",opacity:"0.2"}),i.createElement("path",{d:"M207.06,72.67A111.24,111.24,0,0,0,128,40h-.4C66.07,40.21,16,91,16,153.13V176a16,16,0,0,0,16,16H224a16,16,0,0,0,16-16V152A111.25,111.25,0,0,0,207.06,72.67ZM224,176H119.71l54.76-75.3a8,8,0,0,0-12.94-9.42L99.92,176H32V153.13c0-3.08.15-6.12.43-9.13H56a8,8,0,0,0,0-16H35.27c10.32-38.86,44-68.24,84.73-71.66V80a8,8,0,0,0,16,0V56.33A96.14,96.14,0,0,1,221,128H200a8,8,0,0,0,0,16h23.67c.21,2.65.33,5.31.33,8Z"}))],["fill",i.createElement(i.Fragment,null,i.createElement("path",{d:"M240,152v24a16,16,0,0,1-16,16H115.93a4,4,0,0,1-3.24-6.35L174.27,101a8.21,8.21,0,0,0-1.37-11.3,8,8,0,0,0-11.37,1.61l-72,99.06A4,4,0,0,1,86.25,192H32a16,16,0,0,1-16-16V153.13c0-1.79,0-3.57.13-5.33a4,4,0,0,1,4-3.8H48a8,8,0,0,0,8-8.53A8.17,8.17,0,0,0,47.73,128H23.92a4,4,0,0,1-3.87-5c12-43.84,49.66-77.13,95.52-82.28a4,4,0,0,1,4.43,4V72a8,8,0,0,0,8.53,8A8.17,8.17,0,0,0,136,71.73V44.67a4,4,0,0,1,4.43-4A112.18,112.18,0,0,1,236.23,123a4,4,0,0,1-3.88,5H208.27a8.17,8.17,0,0,0-8.25,7.47,8,8,0,0,0,8,8.53h27.92a4,4,0,0,1,4,3.86C240,149.23,240,150.61,240,152Z"}))],["light",i.createElement(i.Fragment,null,i.createElement("path",{d:"M205.65,74.08A109.26,109.26,0,0,0,128,42h-.39C67.17,42.21,18,92.06,18,153.13V176a14,14,0,0,0,14,14H224a14,14,0,0,0,14-14V152A109.3,109.3,0,0,0,205.65,74.08ZM226,176a2,2,0,0,1-2,2H115.78l57.07-78.47a6,6,0,0,0-9.7-7.06L100.94,178H32a2,2,0,0,1-2-2V153.13A102.36,102.36,0,0,1,30.62,142H56a6,6,0,0,0,0-12H32.71C42.6,88.4,78.53,56.86,122,54.19V80a6,6,0,0,0,12,0V54.19A98.05,98.05,0,0,1,223.53,130H200a6,6,0,0,0,0,12h25.5c.33,3.3.5,6.64.5,10Z"}))],["regular",i.createElement(i.Fragment,null,i.createElement("path",{d:"M207.06,72.67A111.24,111.24,0,0,0,128,40h-.4C66.07,40.21,16,91,16,153.13V176a16,16,0,0,0,16,16H224a16,16,0,0,0,16-16V152A111.25,111.25,0,0,0,207.06,72.67ZM224,176H119.71l54.76-75.3a8,8,0,0,0-12.94-9.42L99.92,176H32V153.13c0-3.08.15-6.12.43-9.13H56a8,8,0,0,0,0-16H35.27c10.32-38.86,44-68.24,84.73-71.66V80a8,8,0,0,0,16,0V56.33A96.14,96.14,0,0,1,221,128H200a8,8,0,0,0,0,16h23.67c.21,2.65.33,5.31.33,8Z"}))],["thin",i.createElement(i.Fragment,null,i.createElement("path",{d:"M204.23,75.5A107.37,107.37,0,0,0,127.62,44C68.28,44.21,20,93.16,20,153.13V176a12,12,0,0,0,12,12H224a12,12,0,0,0,12-12V152A107.25,107.25,0,0,0,204.23,75.5ZM228,176a4,4,0,0,1-4,4H111.85l59.38-81.65a4,4,0,1,0-6.46-4.7L102,180H32a4,4,0,0,1-4-4V153.13A103.42,103.42,0,0,1,28.84,140H56a4,4,0,0,0,0-8H30.21C39.59,87.66,77.84,53.93,124,52.09V80a4,4,0,0,0,8,0V52.08A100.08,100.08,0,0,1,226,132H200a4,4,0,0,0,0,8h27.29a101.6,101.6,0,0,1,.71,12Z"}))]]),l=i.forwardRef((a,b)=>i.createElement(j.default,{ref:b,...a,weights:k}));l.displayName="GaugeIcon";var m=a.i(591888),n=a.i(594585);function o({value:a,max:d,color:e,label:f,boosted:i}){let j=d>0?Math.min(a/d*100,100):0,k="striped-red"===e;return(0,b.jsxs)("div",{className:"jsx-9ff0a765857ff0b9 space-y-1.5",children:[(0,b.jsx)("div",{className:"jsx-9ff0a765857ff0b9 h-3 w-full rounded-full bg-gray-300 dark:bg-zinc-600 border border-border overflow-hidden",children:(0,b.jsx)("div",{style:{width:`${j}%`,...i?{background:"repeating-linear-gradient(45deg, #3b82f6, #3b82f6 10px, #2563eb 10px, #2563eb 20px)",backgroundSize:"28.28px 28.28px",animation:"stripe-move 1s linear infinite",boxShadow:"0 0 10px rgba(59, 130, 246, 0.5)"}:k?{background:"repeating-linear-gradient(45deg, #ef4444, #ef4444 4px, #fca5a5 4px, #fca5a5 8px)"}:{}},className:"jsx-9ff0a765857ff0b9 "+((0,h.cn)("h-full rounded-full transition-all duration-300",i||k?"":({black:"bg-black dark:bg-white",red:"bg-red-500",yellow:"bg-yellow-400"})[e])||"")})}),(0,b.jsx)(g.Typography,{variant:"secondary",className:"text-xs",children:f}),(0,b.jsx)(c.default,{id:"9ff0a765857ff0b9",children:"@keyframes stripe-move{0%{background-position:0 0}to{background-position:28.28px 0}}"})]})}function p(a){let b=new Date,c=a.getTime()-b.getTime();if(c<=0)return"00:00:00";let d=Math.floor(c/36e5),e=Math.floor(c%36e5/6e4),f=Math.floor(c%6e4/1e3);return`${d.toString().padStart(2,"0")}:${e.toString().padStart(2,"0")}:${f.toString().padStart(2,"0")}`}let q=["#ff6b6b","#ffd93d","#6bcb77","#4d96ff","#9b59b6","#ff85a2","#00d2d3"],r=function(){let a="";for(let b=0;b<24;b++){let c=b/24*2*Math.PI,d=50+b%5*12,e=Math.cos(c)*d,f=.7*d*Math.sin(c),g=47*b%360;a+=`
|
|
2
|
+
@keyframes boost-confetti-${b} {
|
|
3
|
+
0% { opacity: 0; transform: translate(-50%, -50%) rotate(0deg); }
|
|
4
|
+
8% { opacity: 0.8; }
|
|
5
|
+
100% { opacity: 0; transform: translate(calc(-50% + ${e.toFixed(1)}px), calc(-50% + ${f.toFixed(1)}px)) rotate(${g}deg); }
|
|
6
|
+
}
|
|
7
|
+
`}return a}();function s(){return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("style",{dangerouslySetInnerHTML:{__html:r}}),Array.from({length:24},(a,c)=>{let d=q[c%q.length],e=3+c%3,f=c%3==0,g=2.5+c%4*.5,h=.25*c%g;return(0,b.jsx)("div",{className:"absolute pointer-events-none",style:{width:e,height:f?e:.6*e,backgroundColor:d,borderRadius:f?1:e,left:"50%",top:"50%",opacity:0,animation:`boost-confetti-${c} ${g}s ease-out ${h}s infinite`}},c)})]})}function t({expiresAt:a,onExpire:d}){let[e,f]=(0,i.useState)(p(a));return(0,i.useEffect)(()=>{let b=setInterval(()=>{if(a<=new Date){clearInterval(b),d();return}f(p(a))},1e3);return()=>clearInterval(b)},[a,d]),(0,b.jsxs)("div",{className:"jsx-97cf494cde42730 flex justify-center mt-3",children:[(0,b.jsxs)("div",{className:"jsx-97cf494cde42730 boost-timer-wrapper relative rounded-lg",children:[(0,b.jsx)(s,{}),(0,b.jsxs)("div",{className:"jsx-97cf494cde42730 relative z-10 rounded-md px-3 py-2 border border-white/10 min-w-[200px] overflow-hidden",children:[(0,b.jsx)("div",{style:{background:"linear-gradient(135deg, #ff6b6b, #ffd93d, #6bcb77, #4d96ff, #9b59b6, #ff85a2, #ff6b6b)"},className:"jsx-97cf494cde42730 absolute inset-0 rounded-md"}),(0,b.jsx)("div",{className:"jsx-97cf494cde42730 absolute inset-0 rounded-md bg-zinc-900/[0.82]"}),(0,b.jsxs)("div",{className:"jsx-97cf494cde42730 relative flex flex-col items-center justify-center gap-0.5",children:[(0,b.jsx)("span",{className:"jsx-97cf494cde42730 text-[9px] font-semibold uppercase tracking-[0.15em] text-white/50",children:"Capacity boosted for"}),(0,b.jsx)(g.Typography,{className:"text-white font-mono text-sm font-bold drop-shadow-[0_0_4px_rgba(255,255,255,0.3)]",children:e})]})]})]}),(0,b.jsx)(c.default,{id:"97cf494cde42730",children:'.boost-timer-wrapper.jsx-97cf494cde42730{--border-angle:0deg;position:relative;overflow:visible}.boost-timer-wrapper.jsx-97cf494cde42730:before,.boost-timer-wrapper.jsx-97cf494cde42730:after{content:"";background:conic-gradient(from var(--border-angle), #ff6b6b, #ffd93d, #6bcb77, #4d96ff, #9b59b6, #ff85a2, #ff6b6b);border-radius:9px;animation:3s linear infinite rotate-glow;position:absolute;inset:-2px}.boost-timer-wrapper.jsx-97cf494cde42730:after{filter:blur(12px);opacity:.7}@property --border-angle{syntax:"<angle>";inherits:false;initial-value:0deg}@keyframes rotate-glow{0%{--border-angle:0deg}to{--border-angle:360deg}}'})]})}a.s(["DomainReputationCard",0,function(){let a=(0,n.useAdminApp)(),c=a.useEmailDeliveryStats(),h=c.capacity.is_boost_active,i=c.capacity.boost_expires_at?new Date(c.capacity.boost_expires_at):null,j=3600*c.capacity.rate_per_second,k=j/c.capacity.boost_multiplier,p=c.stats.hour.sent,q=c.stats.hour.sent,r=c.stats.hour.bounced,s=q>0?r/q*100:0,u=c.stats.hour.marked_as_spam,v=q>0?u/q*100:0,w=async()=>{await a.activateEmailCapacityBoost()},x=h?(0,b.jsxs)("span",{children:[p," of"," ",(0,b.jsx)("span",{className:"text-red-500 line-through",title:"Base hourly capacity (replaced by active boost)",children:Math.round(k)})," → ",(0,b.jsx)("span",{className:"text-blue-500 font-medium",title:"Boosted hourly capacity",children:Math.round(j)}),"/h max ",(0,b.jsx)("span",{className:"text-blue-500 font-medium",children:"(boosted)"})]}):`${p} of ${Math.round(j)}/h max`;return(0,b.jsxs)(e.DesignCard,{gradient:"default",glassmorphic:!0,className:"w-full xl:w-72",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 mb-3",children:[(0,b.jsx)("div",{className:"p-1 rounded-md bg-foreground/[0.06] dark:bg-foreground/[0.04]",children:(0,b.jsx)(l,{className:"h-3 w-3 text-foreground/70 dark:text-muted-foreground"})}),(0,b.jsx)("span",{className:"text-xs font-semibold text-foreground uppercase tracking-wider",children:"Domain Reputation"})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)(g.Typography,{className:"text-sm font-medium mb-1",children:"Email Capacity"}),(0,b.jsx)(g.Typography,{variant:"secondary",className:"text-[11px] mb-1.5",children:"Hexclave automatically buffers your emails as your domain warms up."}),(0,b.jsx)(o,{value:p,max:j,color:"black",label:x,boosted:h}),h&&i?(0,b.jsx)(t,{expiresAt:i,onExpire:()=>(0,m.runAsynchronouslyWithAlert)(a.getEmailDeliveryStats())}):(0,b.jsx)("div",{className:"flex justify-center mt-3",children:(0,b.jsx)(d.DesignButton,{variant:"default",size:"sm",className:"min-w-[200px]",onClick:w,children:"Temporarily increase capacity"})})]}),(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"flex items-center gap-1 mb-1.5",children:[(0,b.jsx)(g.Typography,{className:"text-sm font-medium",children:"Bounce Rate"}),(0,b.jsx)(f.SimpleTooltip,{type:"info",tooltip:"Percentage of emails that couldn't be delivered. High bounce rates can hurt your sender reputation and deliverability."})]}),(0,b.jsx)(o,{value:s,max:5,color:"striped-red",label:`${s.toFixed(2)}% of 5% max`})]}),(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"flex items-center gap-1 mb-1.5",children:[(0,b.jsx)(g.Typography,{className:"text-sm font-medium",children:"Spam Complaint"}),(0,b.jsx)(f.SimpleTooltip,{type:"info",tooltip:"Percentage of recipients who marked your emails as spam. Keep this low to maintain good deliverability."})]}),(0,b.jsx)(o,{value:v,max:.1,color:"yellow",label:`${v.toFixed(2)}% of 0.1% max`})]})]})]})}],234328)}];
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=044u_dashboard_src_app_%28main%29_%28protected%29_projects_%5BprojectId%5D_email-sent_18ofnte._.js.map
|
|
@@ -107,9 +107,9 @@ module.exports=[152743,a=>{"use strict";var b=a.i(152795),c=a.i(613572);a.i(2459
|
|
|
107
107
|
ORDER BY event_at DESC
|
|
108
108
|
LIMIT {limit:UInt32}
|
|
109
109
|
OFFSET {offset:UInt32}
|
|
110
|
-
`;function aD(a){return a.map(a=>({event_type:String(a.event_type??""),event_at:String(a.event_at_str??""),path:ax(a.path),url:ax(a.url),click_text:ax(a.click_text),tag_name:ax(a.tag_name)}))}function aE(a){return a>=1e6?`${(a/1e6).toFixed(1)}M`:a>=1e4?`${(a/1e3).toFixed(1)}k`:a.toLocaleString()}let aF=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",timeZone:"UTC"}),aG=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",year:"numeric",timeZone:"UTC"});function aH(a){let b=a.split("-").map(Number);return 3!==b.length||b.some(a=>!Number.isFinite(a))?null:new Date(Date.UTC(b[0],b[1]-1,b[2]))}function aI(a){let b=aH(a);return b?aF.format(b):a}function aJ(a){let b=aH(a);return b?aG.format(b):a}let aK=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});function aL(a,b){let c=new Map(a.map(a=>[a.day,a])),d=[],e=new Date(Date.UTC(b.startUtc.getUTCFullYear(),b.startUtc.getUTCMonth(),b.startUtc.getUTCDate())),f=Date.UTC(b.endUtcInclusive.getUTCFullYear(),b.endUtcInclusive.getUTCMonth(),b.endUtcInclusive.getUTCDate());for(;e.getTime()<=f;){let a=e.toISOString().slice(0,10),b=c.get(a);d.push({day:a,total_events:b?.total_events??0,page_views:b?.page_views??0,clicks:b?.clicks??0,sessions:b?.sessions??0}),e.setUTCDate(e.getUTCDate()+1)}return d}function aM(a){let b=a.split("-").map(Number);if(3!==b.length||b.some(a=>!Number.isFinite(a)))return null;let c=new Date(Date.UTC(b[0],b[1]-1,b[2])),d=new Date(c);return d.setUTCDate(d.getUTCDate()+1),{since:c,until:d}}function aN({user:a,dayFilter:c,onClearDayFilter:d}){let e=(0,ad.useAdminApp)(),[f,g]=(0,F.useState)({status:"loading"}),[h,i]=(0,F.useState)({rows:[],hasMore:!1,isLoadingMore:!1}),j=(0,F.useRef)(null),k=(0,F.useMemo)(()=>c?aM(c):null,[c]);(0,F.useEffect)(()=>{let b={cancelled:!1};g({status:"loading"}),i({rows:[],hasMore:!1,isLoadingMore:!1}),j.current=null;let c=new Date,d=k?k.since:new Date(c.getTime()-2592e6),f=k?k.until:c,h={userId:a.id,since:av(d),until:av(f)},l=k?k.since:new Date(c.getTime()-6048e5),m=k?k.until:c,n=k?l:new Date(l.getTime()-6048e5),o={userId:a.id,since:av(l),until:av(m),prevSince:av(n)},p=k?{since:new Date(k.since.getTime()-1296e6),until:new Date(Math.min(k.until.getTime()+1296e6,c.getTime()))}:{since:d,until:f},q={userId:a.id,since:av(p.since),until:av(p.until)},r=(a,b)=>e.queryAnalytics({query:a,params:b,timeout_ms:3e4,include_all_branches:!1});return(0,Y.runAsynchronously)(async()=>{let a,[c,d,e,f,k]=await Promise.all([r(ay,o),r(az,q),r(aA,{...h,limit:10}),r(aB,{...h,limit:10}),r(aC,{...h,limit:50,offset:0})]);if(b.cancelled)return;let l=aD(k.result);j.current={params:h,token:b},i({rows:l,hasMore:l.length>=50,isLoadingMore:!1}),g({status:"ready",data:{summary:{total_events:aw((a=c.result[0]??(0,X.throwErr)("SUMMARY_QUERY returned zero rows; expected exactly one aggregate row")).total_events),page_views:aw(a.page_views),clicks:aw(a.clicks),sessions:aw(a.sessions),prev_total_events:aw(a.prev_total_events),prev_page_views:aw(a.prev_page_views),prev_clicks:aw(a.prev_clicks),prev_sessions:aw(a.prev_sessions),last_event_at:ax(a.last_event_at)},daily:d.result.map(a=>({day:String(a.day??""),total_events:aw(a.total_events),page_views:aw(a.page_views),clicks:aw(a.clicks),sessions:aw(a.sessions)})).filter(a=>a.day.length>0),topPages:function(a){let b=[];for(let c of a){let a=ax(c.path);null!=a&&b.push({path:a,views:aw(c.views)})}return b}(e.result),topReferrers:function(a){let b=[];for(let c of a){let a=ax(c.referrer);null!=a&&b.push({referrer:a,views:aw(c.views)})}return b}(f.result)}})},{noErrorLogging:!0,onError:a=>{b.cancelled||((0,X.captureError)("user-analytics-query",a),g({status:"error"}))}}),()=>{b.cancelled=!0}},[e,a.id,k]);let l=(0,F.useCallback)(()=>{if(h.isLoadingMore||!h.hasMore)return;let a=j.current;if(!a)return;let b=h.rows.length;i(a=>({...a,isLoadingMore:!0})),(0,Y.runAsynchronously)(async()=>{let c=await e.queryAnalytics({query:aC,params:{...a.params,limit:50,offset:b},timeout_ms:3e4,include_all_branches:!1});if(a.token.cancelled)return;let d=aD(c.result);i(a=>({rows:[...a.rows,...d],hasMore:d.length>=50,isLoadingMore:!1}))},{noErrorLogging:!0,onError:b=>{a.token.cancelled||((0,X.captureError)("user-analytics-recent-load-more",b),i(a=>({...a,isLoadingMore:!1,hasMore:!1})))}})},[e,h]);return(0,b.jsxs)("div",{className:"flex flex-col gap-4",children:[c&&(0,b.jsx)(aO,{dayFilter:c,onClear:d}),"loading"===f.status?(0,b.jsx)(aP,{}):"error"===f.status?(0,b.jsx)(aQ,{}):(0,b.jsx)(aR,{data:f.data,dayFilter:c??null,recent:h,onLoadMoreRecent:l})]})}function aO({dayFilter:a,onClear:c}){return(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-2xl border border-foreground/[0.06] bg-foreground/[0.03] px-4 py-2.5",children:[(0,b.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,b.jsx)("span",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:"Filtered by day"}),(0,b.jsx)("span",{className:"text-sm font-medium text-foreground",children:aJ(a)})]}),c&&(0,b.jsxs)(r.Button,{variant:"outline",size:"sm",onClick:c,className:"gap-1.5",children:[(0,b.jsx)(al,{size:14}),"Remove filter"]})]})}function aP(){return(0,b.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,b.jsx)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-3",children:Array.from({length:4}).map((a,c)=>(0,b.jsx)(v.Skeleton,{className:"h-[64px] rounded-2xl"},c))}),(0,b.jsx)(v.Skeleton,{className:"h-[280px] rounded-2xl"}),(0,b.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,b.jsx)(v.Skeleton,{className:"h-[180px] rounded-2xl"}),(0,b.jsx)(v.Skeleton,{className:"h-[180px] rounded-2xl"}),(0,b.jsx)(v.Skeleton,{className:"h-[220px] rounded-2xl"})]})]})}function aQ(){return(0,b.jsx)(af.DesignCard,{title:"Analytics unavailable",icon:am.WarningCircleIcon,children:(0,b.jsxs)("div",{className:"flex flex-col items-center gap-1 py-8 text-center",children:[(0,b.jsx)("p",{className:"text-sm text-muted-foreground",children:"We couldn't load analytics for this user."}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground/70",children:"Please try again in a moment."})]})})}function aR({data:a,dayFilter:c,recent:d,onLoadMoreRecent:e}){let f=a.summary.total_events>0,g=(0,F.useMemo)(()=>{let b=a.summary.last_event_at;if(null==b)return null;let c=new Date(b.includes("T")?b:b.replace(" ","T")+"Z");return Number.isNaN(c.getTime())?null:c},[a.summary.last_event_at]),h=(0,F.useMemo)(()=>{let b=new Date;if(c){let d=aM(c);if(!d)return a.daily;let e=new Date(d.since.getTime()-1296e6),f=new Date(new Date(d.until.getTime()-1).getTime()+1296e6),g=f.getTime()<b.getTime()?f:b;return aL(a.daily,{startUtc:e,endUtcInclusive:g})}let d=new Date(b.getTime()-25056e5);return aL(a.daily,{startUtc:d,endUtcInclusive:b})},[a.daily,c]),i=c?aJ(c):"Last 7 days",j=c?`Page views and clicks around ${aJ(c)}`:"Page views and clicks over the last 30 days",k=(0,F.useMemo)(()=>{if(c)return null;let a=h.slice(-7);return{total_events:a.map(a=>a.total_events),page_views:a.map(a=>a.page_views),clicks:a.map(a=>a.clicks),sessions:a.map(a=>a.sessions)}},[h,c]),l=(a,b,d)=>c?void 0:{current:a,previous:b,comparisonLabel:d},m="vs. previous 7 days";return(0,b.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,b.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-3",children:[(0,b.jsx)(at.UserPageMetricCard,{label:"Total Events",value:aE(a.summary.total_events),description:i,gradient:"blue",delta:l(a.summary.total_events,a.summary.prev_total_events,m),spark:k?{values:k.total_events}:void 0}),(0,b.jsx)(at.UserPageMetricCard,{label:"Page Views",value:aE(a.summary.page_views),description:g?`Last seen ${g.toLocaleDateString()}`:i,gradient:"cyan",delta:l(a.summary.page_views,a.summary.prev_page_views,m),spark:k?{values:k.page_views}:void 0}),(0,b.jsx)(at.UserPageMetricCard,{label:"Clicks",value:aE(a.summary.clicks),description:c?"On selected day":i,gradient:"green",delta:l(a.summary.clicks,a.summary.prev_clicks,m),spark:k?{values:k.clicks}:void 0}),(0,b.jsx)(at.UserPageMetricCard,{label:"Sessions",value:aE(a.summary.sessions),description:"Recorded replays",gradient:"purple",delta:l(a.summary.sessions,a.summary.prev_sessions,m),spark:k?{values:k.sessions}:void 0})]}),(0,b.jsx)("div",{className:"xl:hidden",children:(0,b.jsx)(aS,{daily:h,hasAnyEvent:f,description:j})}),(0,b.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,b.jsx)(aT,{title:"Top Pages",rows:a.topPages.map(a=>({label:a.path,count:a.views})),emptyMessage:"No page views yet"}),(0,b.jsx)(aT,{title:"Top Referrers",rows:a.topReferrers.map(a=>({label:a.referrer,count:a.views})),emptyMessage:"No referrer data yet"}),(0,b.jsx)(aU,{events:d.rows,hasMore:d.hasMore,isLoadingMore:d.isLoadingMore,onLoadMore:e})]})]})}function aS({daily:a,hasAnyEvent:c,description:d}){let e=(0,aj.getDesignChartColor)(0),f=(0,aj.getDesignChartColor)(1);return(0,b.jsx)(ag.DesignChartCard,{gradient:"blue",title:"Daily activity",description:d,children:c?(0,b.jsx)(ah.DesignChartContainer,{config:{page_views:{label:"Page views",color:e},clicks:{label:"Clicks",color:f}},maxHeight:240,className:"h-[240px] w-full",children:(0,b.jsxs)(ao.AreaChart,{data:a,margin:{top:8,right:12,bottom:0,left:0},children:[(0,b.jsxs)("defs",{children:[(0,b.jsxs)("linearGradient",{id:"user-analytics-pv-fill",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,b.jsx)("stop",{offset:"0%",stopColor:e,stopOpacity:.35}),(0,b.jsx)("stop",{offset:"100%",stopColor:e,stopOpacity:.02})]}),(0,b.jsxs)("linearGradient",{id:"user-analytics-click-fill",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,b.jsx)("stop",{offset:"0%",stopColor:f,stopOpacity:.3}),(0,b.jsx)("stop",{offset:"100%",stopColor:f,stopOpacity:.02})]})]}),(0,b.jsx)(ap.CartesianGrid,{strokeDasharray:"3 3",stroke:"hsl(var(--border))",vertical:!1}),(0,b.jsx)(ar.XAxis,{dataKey:"day",tick:{fill:"hsl(var(--muted-foreground))",fontSize:11},tickLine:!1,axisLine:!1,minTickGap:32,tickFormatter:aI}),(0,b.jsx)(as.YAxis,{tick:{fill:"hsl(var(--muted-foreground))",fontSize:11},tickLine:!1,axisLine:!1,allowDecimals:!1,width:28}),(0,b.jsx)(aq.Tooltip,{cursor:{stroke:"hsl(var(--border))"},content:(0,b.jsx)(ai.DesignChartTooltipContent,{labelFormatter:(a,b)=>{let c=function(a){for(let b of a){if("object"!=typeof b||null===b||!("payload"in b))continue;let a=b.payload;if("object"==typeof a&&null!==a&&"day"in a&&"string"==typeof a.day)return a.day}return null}(b);return null===c?"":aJ(c)},indicator:"dot"})}),(0,b.jsx)(an.Area,{type:"monotone",dataKey:"page_views",stroke:e,strokeWidth:1.5,fill:"url(#user-analytics-pv-fill)",isAnimationActive:!1}),(0,b.jsx)(an.Area,{type:"monotone",dataKey:"clicks",stroke:f,strokeWidth:1.5,fill:"url(#user-analytics-click-fill)",isAnimationActive:!1})]})}):(0,b.jsx)("div",{className:"flex items-center justify-center py-16 text-sm text-muted-foreground",children:"No events recorded for this user yet."})})}function aT({title:a,rows:c,emptyMessage:d}){let e=c[0]?.count??0,f=(0,F.useMemo)(()=>[{id:"label",accessor:"label",header:"Path",width:280,flex:1,sortable:!1,renderCell:({row:a})=>{let c=e>0?a.count/e*100:0;return(0,b.jsxs)("div",{className:"relative -mx-2 flex w-[calc(100%+1rem)] items-center overflow-hidden rounded-lg px-2 py-1.5",children:[(0,b.jsx)("div",{className:"absolute inset-y-0 left-0 rounded-lg bg-blue-500/10 dark:bg-blue-400/10",style:{width:`${c}%`},"aria-hidden":!0}),(0,b.jsxs)(x.Tooltip,{delayDuration:150,children:[(0,b.jsx)(x.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("span",{className:"relative truncate text-xs text-foreground",children:a.label})}),(0,b.jsx)(x.TooltipContent,{side:"top",className:"text-xs max-w-[360px] break-all",children:a.label})]})]})}},{id:"count",accessor:"count",header:"Views",width:110,align:"right",sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"text-sm font-medium tabular-nums text-foreground",children:a.count.toLocaleString()})}],[e]);return(0,b.jsx)(au.UserPageTableSection,{title:a,urlStateKey:a.toLowerCase().replace(/[^a-z0-9]/g,"").slice(0,12),columns:f,rows:c,getRowId:a=>a.label,emptyLabel:d})}function aU({events:a,hasMore:c,isLoadingMore:d,onLoadMore:e}){let f=(0,F.useMemo)(()=>a.map((a,b)=>({...a,id:`${a.event_at}-${b}`})),[a]),g=(0,F.useMemo)(()=>[{id:"event_type",accessor:"event_type",header:"Event",width:140,sortable:!1,renderCell:({row:a})=>{let c=function(a){switch(a){case"$page-view":return{label:"Page view",color:"blue"};case"$click":return{label:"Click",color:"green"};case"$token-refresh":return{label:"Refresh",color:"purple"};default:{let b=a.replace(/^\$/,"");return{label:b.length>0?b:"Event",color:"blue"}}}}(a.event_type);return(0,b.jsx)(ae.DesignBadge,{label:c.label,color:c.color,size:"sm"})}},{id:"label",header:"Detail",width:280,flex:1,sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"truncate text-sm text-foreground",children:function(a){switch(a.event_type){case"$page-view":return a.path??a.url??"Page view";case"$click":{let b=a.click_text?.trim();if(null!=b&&b.length>0)return b.length>60?b.slice(0,60)+"...":b;if(null!=a.tag_name)return`<${a.tag_name.toLowerCase()}>`;return"Click"}case"$token-refresh":return"Session refresh";default:return a.event_type.replace(/^\$/,"")}}(a)})},{id:"event_at",accessor:"event_at",header:"Time",width:150,sortable:!1,renderCell:({row:a})=>{var c;let d;return(0,b.jsx)("span",{className:"text-sm tabular-nums text-muted-foreground",children:Number.isNaN((d=new Date((c=a.event_at).includes("T")?c:c.replace(" ","T")+"Z")).getTime())?c:aK.format(d)})}}],[]);return(0,b.jsx)(au.UserPageTableSection,{title:"Recent activity",urlStateKey:"userevents",columns:g,rows:f,getRowId:a=>a.id,emptyLabel:"No recent events for this user.",hasMore:c,isLoadingMore:d,onLoadMore:e})}var aV=a.i(180701),aW=a.i(903066),aX=a.i(542042),aY=a.i(423980),aZ=a.i(999597),a$=a.i(665870),a_=a.i(385420);let a0=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",year:"numeric"}),a1=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit"});function a2(a){return"money_transfer"===a.type}function a3(a){return"product_grant"===a.type}function a4(a){return"product_revocation"===a.type}function a5(a){return Number.isFinite(a)?a.toLocaleString(void 0,{style:"currency",currency:"USD",minimumFractionDigits:2,maximumFractionDigits:2}):((0,X.captureError)("user-payments-format-usd-non-finite",Error(`formatUsd received non-finite amount: ${String(a)}`)),"—")}function a6({user:a}){return(0,b.jsx)(F.Suspense,{fallback:(0,b.jsx)(a7,{}),children:(0,b.jsx)(a8,{user:a})})}function a7(){return(0,b.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,b.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3",children:Array.from({length:3}).map((a,c)=>(0,b.jsx)(v.Skeleton,{className:"h-[64px] rounded-2xl"},c))}),(0,b.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,b.jsx)(v.Skeleton,{className:"h-[180px] rounded-2xl"}),(0,b.jsx)(v.Skeleton,{className:"h-[180px] rounded-2xl"})]})]})}function a8({user:a}){let c=(0,ad.useAdminApp)(),d=c.useProject().useConfig(),{transactions:e}=c.useTransactions({limit:100,customerType:"user",customerId:a.id}),f=(0,F.useMemo)(()=>Object.entries(d.payments.items).filter(([,a])=>"user"===a.customerType).map(([a])=>a),[d.payments.items]);return(0,b.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,b.jsx)(ba,{userId:a.id,transactions:e}),(0,b.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,b.jsx)(bb,{userId:a.id,transactions:e}),(0,b.jsx)(bc,{userId:a.id,transactions:e})]}),(0,b.jsx)(bd,{userId:a.id,itemIds:f})]})}function a9(a,b){let c=new Set;for(let b of a)for(let a of b.entries)a4(a)&&c.add(`${a.adjusted_transaction_id}:${a.adjusted_entry_index}`);let d=new Set;for(let b of a)if("subscription-cancellation"===b.type){for(let c of b.entries)if(a4(c)){let b=a.find(a=>a.id===c.adjusted_transaction_id),e=b?.entries[c.adjusted_entry_index];e&&a3(e)&&e.subscription_id&&d.add(e.subscription_id)}}let e=[];for(let f of a)f.entries.forEach((a,g)=>{!a3(a)||"user"!==a.customer_type||a.customer_id!==b||c.has(`${f.id}:${g}`)||a.subscription_id&&d.has(a.subscription_id)||e.push({key:`${f.id}:${g}`,productDisplayName:a.product.display_name,quantity:a.quantity,subscriptionId:a.subscription_id,grantedAt:new Date(f.effective_at_millis),stackable:a.product.stackable})});let f=new Set,g=[];for(let a of e.sort((a,b)=>b.grantedAt.getTime()-a.grantedAt.getTime())){if(a.subscriptionId){if(f.has(a.subscriptionId))continue;f.add(a.subscriptionId)}g.push(a)}return g}function ba({userId:a,transactions:c}){let d=(0,F.useMemo)(()=>a9(c,a),[c,a]),e=(0,F.useMemo)(()=>d.filter(a=>null!=a.subscriptionId).length,[d]),f=(0,F.useMemo)(()=>d.reduce((a,b)=>a+(b.stackable?b.quantity:1),0),[d]),g=(0,F.useMemo)(()=>{let b=0;for(let d of c)if(!d.test_mode)for(let c of d.entries){if(!a2(c)||"user"!==c.customer_type||c.customer_id!==a)continue;let d=c.net_amount.USD;if("string"!=typeof d)continue;let e=Number.parseFloat(d);Number.isFinite(e)&&(b+=e)}return b},[c,a]),h=c.length;return(0,b.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3",children:[(0,b.jsx)(at.UserPageMetricCard,{label:"Active subscriptions",value:e,description:0===e?"None":`${e} running`,gradient:"blue"}),(0,b.jsx)(at.UserPageMetricCard,{label:"Products owned",value:f,description:0===f?"None":`${d.length} distinct`,gradient:"purple"}),(0,b.jsx)(at.UserPageMetricCard,{label:"Lifetime spend",value:a5(g),description:0===h?"No transactions":`Across ${h} transaction${1===h?"":"s"}`,gradient:"green"})]})}function bb({userId:a,transactions:c}){let d=(0,F.useMemo)(()=>a9(c,a),[c,a]),e=(0,F.useMemo)(()=>[{id:"productDisplayName",accessor:"productDisplayName",header:"Product",width:240,flex:1,sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"truncate text-sm font-medium text-foreground",children:a.productDisplayName})},{id:"type",header:"Type",width:130,sortable:!1,renderCell:({row:a})=>(0,b.jsx)(ae.DesignBadge,{label:a.subscriptionId?"Subscription":"One-time",color:a.subscriptionId?"blue":"purple",size:"sm"})},{id:"quantity",accessor:"quantity",header:"Quantity",width:100,align:"right",sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"font-medium tabular-nums text-foreground",children:a.stackable?a.quantity:1})},{id:"grantedAt",accessor:"grantedAt",header:"Granted",width:140,sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"text-sm text-muted-foreground",children:a0.format(a.grantedAt)})}],[]);return(0,b.jsx)(au.UserPageTableSection,{title:"Products & subscriptions",urlStateKey:"usersubs",columns:e,rows:d,getRowId:a=>a.key,emptyLabel:"This user has no active products or subscriptions."})}function bc({userId:a,transactions:c}){let d=(0,F.useMemo)(()=>[...c].sort((a,b)=>b.created_at_millis-a.created_at_millis),[c]),e=(0,F.useMemo)(()=>[{id:"type",header:"Type",width:190,sortable:!1,renderCell:({row:a})=>{let{label:c,Icon:d}=function(a){switch(a){case"purchase":return{label:"Purchase",Icon:a$.ShoppingCartIcon};case"subscription-renewal":return{label:"Subscription renewal",Icon:aV.ArrowClockwiseIcon};case"subscription-cancellation":return{label:"Subscription cancellation",Icon:Q.ProhibitIcon};case"chargeback":return{label:"Chargeback",Icon:aW.ArrowCounterClockwiseIcon};case"manual-item-quantity-change":return{label:"Item quantity change",Icon:aY.GearIcon};case"product-change":return{label:"Product change",Icon:a_.ShuffleIcon};default:return{label:"-",Icon:aZ.QuestionIcon}}}(a.type);return(0,b.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,b.jsx)("div",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-md bg-foreground/[0.06]",children:(0,b.jsx)(d,{className:"h-4 w-4 text-foreground/70","aria-hidden":!0})}),(0,b.jsx)("span",{className:"truncate text-sm font-medium text-foreground",children:c})]})}},{id:"detail",header:"Detail",width:240,flex:1,sortable:!1,renderCell:({row:c})=>(0,b.jsx)("span",{className:"truncate text-sm text-muted-foreground",children:function(a,b){let c=a.entries.find(a=>a3(a)&&"user"===a.customer_type&&a.customer_id===b);if(c){let a=c.product.display_name;return c.quantity>1?`${a} x${c.quantity}`:a}let d=a.entries.find(a=>"item_quantity_change"===a.type&&"user"===a.customer_type&&a.customer_id===b);if(d){let a=d.quantity;return`${d.item_id} (${a>0?"+":""}${a})`}return"-"}(c,a)})},{id:"createdAt",accessor:a=>a.created_at_millis,header:"Date",width:140,sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"text-sm text-muted-foreground tabular-nums",title:a1.format(new Date(a.created_at_millis)),children:a0.format(new Date(a.created_at_millis))})},{id:"amount",header:"Amount",width:120,align:"right",sortable:!1,renderCell:({row:c})=>{if(c.test_mode)return(0,b.jsx)("span",{className:"text-xs font-medium text-muted-foreground",children:"Test"});let d=function(a,b){let c=0,d=!1;for(let e of a.entries){if(!a2(e)||"user"!==e.customer_type||e.customer_id!==b)continue;let a=e.net_amount.USD;if("string"!=typeof a)continue;let f=Number.parseFloat(a);Number.isFinite(f)&&(c+=f,d=!0)}return d?c:null}(c,a);return null==d?(0,b.jsx)("span",{className:"text-xs text-muted-foreground",children:"-"}):(0,b.jsxs)("span",{className:(0,s.cn)("text-sm font-medium tabular-nums",d<0?"text-muted-foreground":"text-foreground"),children:[d<0?"-":"",a5(Math.abs(d))]})}},{id:"status",header:"Status",width:110,sortable:!1,renderCell:({row:a})=>{var c;let d=(c=a,a.adjusted_by.length>0?{label:"Refunded",color:"orange"}:c.test_mode?{label:"Test",color:"purple"}:null);return d?(0,b.jsx)(ae.DesignBadge,{label:d.label,color:d.color,size:"sm"}):(0,b.jsx)("span",{className:"text-sm text-muted-foreground",children:"-"})}}],[a]);return(0,b.jsx)(au.UserPageTableSection,{title:"Transaction history",urlStateKey:"usertxns",columns:e,rows:d,getRowId:a=>a.id,emptyLabel:"This user has no transactions.",paginated:!0})}function bd({userId:a,itemIds:c}){return 0===c.length?null:(0,b.jsx)(af.DesignCard,{title:"Item balances",subtitle:`${c.length} user-scoped item${1===c.length?"":"s"}`,icon:aX.CoinsIcon,children:(0,b.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-x-4 gap-y-1",children:c.map(c=>(0,b.jsx)(F.Suspense,{fallback:(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3 py-1.5",children:[(0,b.jsx)(v.Skeleton,{className:"h-4 w-32"}),(0,b.jsx)(v.Skeleton,{className:"h-4 w-8"})]}),children:(0,b.jsx)(be,{userId:a,itemId:c})},c))})})}function be({userId:a,itemId:c}){let d=(0,ad.useAdminApp)().useItem({userId:a,itemId:c}),e=d.quantity<0;return(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3 py-1.5",title:c,children:[(0,b.jsx)("span",{className:"truncate text-sm text-foreground",children:d.displayName}),(0,b.jsx)("span",{className:`shrink-0 text-sm font-semibold tabular-nums ${e?"text-destructive":"text-foreground"}`,children:d.quantity})]})}let bf=(0,a.i(549244).default)(async()=>{},{loadableGenerated:{modules:[611973]},ssr:!1,loading:()=>(0,b.jsx)("div",{className:"flex items-center justify-center py-16 text-sm text-muted-foreground",children:"Loading session replays…"})});function bg({user:a}){let c=a.primaryEmail??a.id,d=a.displayName??c,[e,h]=(0,F.useState)(!1),[i,j]=(0,F.useState)(!1),[k,l]=(0,F.useState)(null),m=(0,ad.useAdminApp)();return(0,b.jsxs)("div",{className:"flex min-w-0 gap-4 items-center",children:[(0,b.jsxs)(q.Avatar,{className:"w-20 h-20 shrink-0",children:[(0,b.jsx)(q.AvatarImage,{src:a.profileImageUrl??void 0,alt:d}),(0,b.jsx)(q.AvatarFallback,{children:d.slice(0,2)})]}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)(g.EditableInput,{value:d,initialEditValue:a.displayName??"",placeholder:c,shiftTextToLeft:!0,inputClassName:"font-semibold text-3xl",onUpdate:async b=>{await a.setDisplayName(b)}}),(0,b.jsxs)("p",{children:["Last active ",(0,W.fromNow)(a.lastActiveAt)]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(f.DesignMenu,{variant:"actions",trigger:"icon",triggerLabel:"User actions",align:"end",items:[{id:"impersonate",label:"Impersonate",onClick:()=>{(0,Y.runAsynchronouslyWithAlert)(async()=>{let b=new Date(Date.now()+72e5),c=await a.createSession({expiresInMillis:72e5}),d=await c.getTokens();l(Z.deindent`
|
|
110
|
+
`;function aD(a){return a.map(a=>({event_type:String(a.event_type??""),event_at:String(a.event_at_str??""),path:ax(a.path),url:ax(a.url),click_text:ax(a.click_text),tag_name:ax(a.tag_name)}))}function aE(a){return a>=1e6?`${(a/1e6).toFixed(1)}M`:a>=1e4?`${(a/1e3).toFixed(1)}k`:a.toLocaleString()}let aF=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",timeZone:"UTC"}),aG=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",year:"numeric",timeZone:"UTC"});function aH(a){let b=a.split("-").map(Number);return 3!==b.length||b.some(a=>!Number.isFinite(a))?null:new Date(Date.UTC(b[0],b[1]-1,b[2]))}function aI(a){let b=aH(a);return b?aF.format(b):a}function aJ(a){let b=aH(a);return b?aG.format(b):a}let aK=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});function aL(a,b){let c=new Map(a.map(a=>[a.day,a])),d=[],e=new Date(Date.UTC(b.startUtc.getUTCFullYear(),b.startUtc.getUTCMonth(),b.startUtc.getUTCDate())),f=Date.UTC(b.endUtcInclusive.getUTCFullYear(),b.endUtcInclusive.getUTCMonth(),b.endUtcInclusive.getUTCDate());for(;e.getTime()<=f;){let a=e.toISOString().slice(0,10),b=c.get(a);d.push({day:a,total_events:b?.total_events??0,page_views:b?.page_views??0,clicks:b?.clicks??0,sessions:b?.sessions??0}),e.setUTCDate(e.getUTCDate()+1)}return d}function aM(a){let b=a.split("-").map(Number);if(3!==b.length||b.some(a=>!Number.isFinite(a)))return null;let c=new Date(Date.UTC(b[0],b[1]-1,b[2])),d=new Date(c);return d.setUTCDate(d.getUTCDate()+1),{since:c,until:d}}function aN({user:a,dayFilter:c,onClearDayFilter:d}){let e=(0,ad.useAdminApp)(),[f,g]=(0,F.useState)({status:"loading"}),[h,i]=(0,F.useState)({rows:[],hasMore:!1,isLoadingMore:!1}),j=(0,F.useRef)(null),k=(0,F.useMemo)(()=>c?aM(c):null,[c]);(0,F.useEffect)(()=>{let b={cancelled:!1};g({status:"loading"}),i({rows:[],hasMore:!1,isLoadingMore:!1}),j.current=null;let c=new Date,d=k?k.since:new Date(c.getTime()-2592e6),f=k?k.until:c,h={userId:a.id,since:av(d),until:av(f)},l=k?k.since:new Date(c.getTime()-6048e5),m=k?k.until:c,n=k?l:new Date(l.getTime()-6048e5),o={userId:a.id,since:av(l),until:av(m),prevSince:av(n)},p=k?{since:new Date(k.since.getTime()-1296e6),until:new Date(Math.min(k.until.getTime()+1296e6,c.getTime()))}:{since:d,until:f},q={userId:a.id,since:av(p.since),until:av(p.until)},r=(a,b)=>e.queryAnalytics({query:a,params:b,timeout_ms:3e4,include_all_branches:!1});return(0,Y.runAsynchronously)(async()=>{let a,[c,d,e,f,k]=await Promise.all([r(ay,o),r(az,q),r(aA,{...h,limit:10}),r(aB,{...h,limit:10}),r(aC,{...h,limit:50,offset:0})]);if(b.cancelled)return;let l=aD(k.result);j.current={params:h,token:b},i({rows:l,hasMore:l.length>=50,isLoadingMore:!1}),g({status:"ready",data:{summary:{total_events:aw((a=c.result[0]??(0,X.throwErr)("SUMMARY_QUERY returned zero rows; expected exactly one aggregate row")).total_events),page_views:aw(a.page_views),clicks:aw(a.clicks),sessions:aw(a.sessions),prev_total_events:aw(a.prev_total_events),prev_page_views:aw(a.prev_page_views),prev_clicks:aw(a.prev_clicks),prev_sessions:aw(a.prev_sessions),last_event_at:ax(a.last_event_at)},daily:d.result.map(a=>({day:String(a.day??""),total_events:aw(a.total_events),page_views:aw(a.page_views),clicks:aw(a.clicks),sessions:aw(a.sessions)})).filter(a=>a.day.length>0),topPages:function(a){let b=[];for(let c of a){let a=ax(c.path);null!=a&&b.push({path:a,views:aw(c.views)})}return b}(e.result),topReferrers:function(a){let b=[];for(let c of a){let a=ax(c.referrer);null!=a&&b.push({referrer:a,views:aw(c.views)})}return b}(f.result)}})},{noErrorLogging:!0,onError:a=>{b.cancelled||((0,X.captureError)("user-analytics-query",a),g({status:"error"}))}}),()=>{b.cancelled=!0}},[e,a.id,k]);let l=(0,F.useCallback)(()=>{if(h.isLoadingMore||!h.hasMore)return;let a=j.current;if(!a)return;let b=h.rows.length;i(a=>({...a,isLoadingMore:!0})),(0,Y.runAsynchronously)(async()=>{let c=await e.queryAnalytics({query:aC,params:{...a.params,limit:50,offset:b},timeout_ms:3e4,include_all_branches:!1});if(a.token.cancelled)return;let d=aD(c.result);i(a=>({rows:[...a.rows,...d],hasMore:d.length>=50,isLoadingMore:!1}))},{noErrorLogging:!0,onError:b=>{a.token.cancelled||((0,X.captureError)("user-analytics-recent-load-more",b),i(a=>({...a,isLoadingMore:!1,hasMore:!1})))}})},[e,h]);return(0,b.jsxs)("div",{className:"flex flex-col gap-4",children:[c&&(0,b.jsx)(aO,{dayFilter:c,onClear:d}),"loading"===f.status?(0,b.jsx)(aP,{}):"error"===f.status?(0,b.jsx)(aQ,{}):(0,b.jsx)(aR,{data:f.data,dayFilter:c??null,recent:h,onLoadMoreRecent:l})]})}function aO({dayFilter:a,onClear:c}){return(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-2xl border border-foreground/[0.06] bg-foreground/[0.03] px-4 py-2.5",children:[(0,b.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,b.jsx)("span",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:"Filtered by day"}),(0,b.jsx)("span",{className:"text-sm font-medium text-foreground",children:aJ(a)})]}),c&&(0,b.jsxs)(r.Button,{variant:"outline",size:"sm",onClick:c,className:"gap-1.5",children:[(0,b.jsx)(al,{size:14}),"Remove filter"]})]})}function aP(){return(0,b.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,b.jsx)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-3",children:Array.from({length:4}).map((a,c)=>(0,b.jsx)(v.Skeleton,{className:"h-[64px] rounded-2xl"},c))}),(0,b.jsx)(v.Skeleton,{className:"h-[280px] rounded-2xl"}),(0,b.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,b.jsx)(v.Skeleton,{className:"h-[180px] rounded-2xl"}),(0,b.jsx)(v.Skeleton,{className:"h-[180px] rounded-2xl"}),(0,b.jsx)(v.Skeleton,{className:"h-[220px] rounded-2xl"})]})]})}function aQ(){return(0,b.jsx)(af.DesignCard,{title:"Analytics unavailable",icon:am.WarningCircleIcon,children:(0,b.jsxs)("div",{className:"flex flex-col items-center gap-1 py-8 text-center",children:[(0,b.jsx)("p",{className:"text-sm text-muted-foreground",children:"We couldn't load analytics for this user."}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground/70",children:"Please try again in a moment."})]})})}function aR({data:a,dayFilter:c,recent:d,onLoadMoreRecent:e}){let f=a.summary.total_events>0,g=(0,F.useMemo)(()=>{let b=a.summary.last_event_at;if(null==b)return null;let c=new Date(b.includes("T")?b:b.replace(" ","T")+"Z");return Number.isNaN(c.getTime())?null:c},[a.summary.last_event_at]),h=(0,F.useMemo)(()=>{let b=new Date;if(c){let d=aM(c);if(!d)return a.daily;let e=new Date(d.since.getTime()-1296e6),f=new Date(new Date(d.until.getTime()-1).getTime()+1296e6),g=f.getTime()<b.getTime()?f:b;return aL(a.daily,{startUtc:e,endUtcInclusive:g})}let d=new Date(b.getTime()-25056e5);return aL(a.daily,{startUtc:d,endUtcInclusive:b})},[a.daily,c]),i=c?aJ(c):"Last 7 days",j=c?`Page views and clicks around ${aJ(c)}`:"Page views and clicks over the last 30 days",k=(0,F.useMemo)(()=>{if(c)return null;let a=h.slice(-7);return{total_events:a.map(a=>a.total_events),page_views:a.map(a=>a.page_views),clicks:a.map(a=>a.clicks),sessions:a.map(a=>a.sessions)}},[h,c]),l=(a,b,d)=>c?void 0:{current:a,previous:b,comparisonLabel:d},m="vs. previous 7 days";return(0,b.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,b.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-3",children:[(0,b.jsx)(at.UserPageMetricCard,{label:"Total Events",value:aE(a.summary.total_events),description:i,gradient:"blue",delta:l(a.summary.total_events,a.summary.prev_total_events,m),spark:k?{values:k.total_events}:void 0}),(0,b.jsx)(at.UserPageMetricCard,{label:"Page Views",value:aE(a.summary.page_views),description:g?`Last seen ${g.toLocaleDateString()}`:i,gradient:"cyan",delta:l(a.summary.page_views,a.summary.prev_page_views,m),spark:k?{values:k.page_views}:void 0}),(0,b.jsx)(at.UserPageMetricCard,{label:"Clicks",value:aE(a.summary.clicks),description:c?"On selected day":i,gradient:"green",delta:l(a.summary.clicks,a.summary.prev_clicks,m),spark:k?{values:k.clicks}:void 0}),(0,b.jsx)(at.UserPageMetricCard,{label:"Sessions",value:aE(a.summary.sessions),description:"Recorded replays",gradient:"purple",delta:l(a.summary.sessions,a.summary.prev_sessions,m),spark:k?{values:k.sessions}:void 0})]}),(0,b.jsx)("div",{className:"xl:hidden",children:(0,b.jsx)(aS,{daily:h,hasAnyEvent:f,description:j})}),(0,b.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,b.jsx)(aT,{title:"Top Pages",rows:a.topPages.map(a=>({label:a.path,count:a.views})),emptyMessage:"No page views yet"}),(0,b.jsx)(aT,{title:"Top Referrers",rows:a.topReferrers.map(a=>({label:a.referrer,count:a.views})),emptyMessage:"No referrer data yet"}),(0,b.jsx)(aU,{events:d.rows,hasMore:d.hasMore,isLoadingMore:d.isLoadingMore,onLoadMore:e})]})]})}function aS({daily:a,hasAnyEvent:c,description:d}){let e=(0,aj.getDesignChartColor)(0),f=(0,aj.getDesignChartColor)(1);return(0,b.jsx)(ag.DesignChartCard,{gradient:"blue",title:"Daily activity",description:d,children:c?(0,b.jsx)(ah.DesignChartContainer,{config:{page_views:{label:"Page views",color:e},clicks:{label:"Clicks",color:f}},maxHeight:240,className:"h-[240px] w-full",children:(0,b.jsxs)(ao.AreaChart,{data:a,margin:{top:8,right:12,bottom:0,left:0},children:[(0,b.jsxs)("defs",{children:[(0,b.jsxs)("linearGradient",{id:"user-analytics-pv-fill",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,b.jsx)("stop",{offset:"0%",stopColor:e,stopOpacity:.35}),(0,b.jsx)("stop",{offset:"100%",stopColor:e,stopOpacity:.02})]}),(0,b.jsxs)("linearGradient",{id:"user-analytics-click-fill",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,b.jsx)("stop",{offset:"0%",stopColor:f,stopOpacity:.3}),(0,b.jsx)("stop",{offset:"100%",stopColor:f,stopOpacity:.02})]})]}),(0,b.jsx)(ap.CartesianGrid,{strokeDasharray:"3 3",stroke:"hsl(var(--border))",vertical:!1}),(0,b.jsx)(ar.XAxis,{dataKey:"day",tick:{fill:"hsl(var(--muted-foreground))",fontSize:11},tickLine:!1,axisLine:!1,minTickGap:32,tickFormatter:aI}),(0,b.jsx)(as.YAxis,{tick:{fill:"hsl(var(--muted-foreground))",fontSize:11},tickLine:!1,axisLine:!1,allowDecimals:!1,width:28}),(0,b.jsx)(aq.Tooltip,{cursor:{stroke:"hsl(var(--border))"},content:(0,b.jsx)(ai.DesignChartTooltipContent,{labelFormatter:(a,b)=>{let c=function(a){for(let b of a){if("object"!=typeof b||null===b||!("payload"in b))continue;let a=b.payload;if("object"==typeof a&&null!==a&&"day"in a&&"string"==typeof a.day)return a.day}return null}(b);return null===c?"":aJ(c)},indicator:"dot"})}),(0,b.jsx)(an.Area,{type:"monotone",dataKey:"page_views",stroke:e,strokeWidth:1.5,fill:"url(#user-analytics-pv-fill)",isAnimationActive:!1}),(0,b.jsx)(an.Area,{type:"monotone",dataKey:"clicks",stroke:f,strokeWidth:1.5,fill:"url(#user-analytics-click-fill)",isAnimationActive:!1})]})}):(0,b.jsx)("div",{className:"flex items-center justify-center py-16 text-sm text-muted-foreground",children:"No events recorded for this user yet."})})}function aT({title:a,rows:c,emptyMessage:d}){let e=c[0]?.count??0,f=(0,F.useMemo)(()=>[{id:"label",accessor:"label",header:"Path",width:280,flex:1,sortable:!1,renderCell:({row:a})=>{let c=e>0?a.count/e*100:0;return(0,b.jsxs)("div",{className:"relative -mx-2 flex w-[calc(100%+1rem)] items-center overflow-hidden rounded-lg px-2 py-1.5",children:[(0,b.jsx)("div",{className:"absolute inset-y-0 left-0 rounded-lg bg-blue-500/10 dark:bg-blue-400/10",style:{width:`${c}%`},"aria-hidden":!0}),(0,b.jsxs)(x.Tooltip,{delayDuration:150,children:[(0,b.jsx)(x.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("span",{className:"relative truncate text-xs text-foreground",children:a.label})}),(0,b.jsx)(x.TooltipContent,{side:"top",className:"text-xs max-w-[360px] break-all",children:a.label})]})]})}},{id:"count",accessor:"count",header:"Views",width:110,align:"right",sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"text-sm font-medium tabular-nums text-foreground",children:a.count.toLocaleString()})}],[e]);return(0,b.jsx)(au.UserPageTableSection,{title:a,urlStateKey:a.toLowerCase().replace(/[^a-z0-9]/g,"").slice(0,12),columns:f,rows:c,getRowId:a=>a.label,emptyLabel:d})}function aU({events:a,hasMore:c,isLoadingMore:d,onLoadMore:e}){let f=(0,F.useMemo)(()=>a.map((a,b)=>({...a,id:`${a.event_at}-${b}`})),[a]),g=(0,F.useMemo)(()=>[{id:"event_type",accessor:"event_type",header:"Event",width:140,sortable:!1,renderCell:({row:a})=>{let c=function(a){switch(a){case"$page-view":return{label:"Page view",color:"blue"};case"$click":return{label:"Click",color:"green"};case"$token-refresh":return{label:"Refresh",color:"purple"};default:{let b=a.replace(/^\$/,"");return{label:b.length>0?b:"Event",color:"blue"}}}}(a.event_type);return(0,b.jsx)(ae.DesignBadge,{label:c.label,color:c.color,size:"sm"})}},{id:"label",header:"Detail",width:280,flex:1,sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"truncate text-sm text-foreground",children:function(a){switch(a.event_type){case"$page-view":return a.path??a.url??"Page view";case"$click":{let b=a.click_text?.trim();if(null!=b&&b.length>0)return b.length>60?b.slice(0,60)+"...":b;if(null!=a.tag_name)return`<${a.tag_name.toLowerCase()}>`;return"Click"}case"$token-refresh":return"Session refresh";default:return a.event_type.replace(/^\$/,"")}}(a)})},{id:"event_at",accessor:"event_at",header:"Time",width:150,sortable:!1,renderCell:({row:a})=>{var c;let d;return(0,b.jsx)("span",{className:"text-sm tabular-nums text-muted-foreground",children:Number.isNaN((d=new Date((c=a.event_at).includes("T")?c:c.replace(" ","T")+"Z")).getTime())?c:aK.format(d)})}}],[]);return(0,b.jsx)(au.UserPageTableSection,{title:"Recent activity",urlStateKey:"userevents",columns:g,rows:f,getRowId:a=>a.id,emptyLabel:"No recent events for this user.",hasMore:c,isLoadingMore:d,onLoadMore:e})}var aV=a.i(180701),aW=a.i(903066),aX=a.i(542042),aY=a.i(423980),aZ=a.i(999597),a$=a.i(665870),a_=a.i(385420);let a0=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",year:"numeric"}),a1=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit"});function a2(a){return"money_transfer"===a.type}function a3(a){return"product_grant"===a.type}function a4(a){return"product_revocation"===a.type}function a5(a){return Number.isFinite(a)?a.toLocaleString(void 0,{style:"currency",currency:"USD",minimumFractionDigits:2,maximumFractionDigits:2}):((0,X.captureError)("user-payments-format-usd-non-finite",Error(`formatUsd received non-finite amount: ${String(a)}`)),"—")}function a6({user:a}){return(0,b.jsx)(F.Suspense,{fallback:(0,b.jsx)(a7,{}),children:(0,b.jsx)(a8,{user:a})})}function a7(){return(0,b.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,b.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3",children:Array.from({length:3}).map((a,c)=>(0,b.jsx)(v.Skeleton,{className:"h-[64px] rounded-2xl"},c))}),(0,b.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,b.jsx)(v.Skeleton,{className:"h-[180px] rounded-2xl"}),(0,b.jsx)(v.Skeleton,{className:"h-[180px] rounded-2xl"})]})]})}function a8({user:a}){let c=(0,ad.useAdminApp)(),d=c.useProject().useConfig(),{transactions:e}=c.useTransactions({limit:100,customerType:"user",customerId:a.id}),f=(0,F.useMemo)(()=>Object.entries(d.payments.items).filter(([,a])=>"user"===a.customerType).map(([a])=>a),[d.payments.items]);return(0,b.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,b.jsx)(ba,{userId:a.id,transactions:e}),(0,b.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,b.jsx)(bb,{userId:a.id,transactions:e}),(0,b.jsx)(bc,{userId:a.id,transactions:e})]}),(0,b.jsx)(bd,{userId:a.id,itemIds:f})]})}function a9(a,b){let c=new Set;for(let b of a)for(let a of b.entries)a4(a)&&c.add(`${a.adjusted_transaction_id}:${a.adjusted_entry_index}`);let d=new Set;for(let b of a)if("subscription-cancellation"===b.type){for(let c of b.entries)if(a4(c)){let b=a.find(a=>a.id===c.adjusted_transaction_id),e=b?.entries[c.adjusted_entry_index];e&&a3(e)&&e.subscription_id&&d.add(e.subscription_id)}}let e=[];for(let f of a)f.entries.forEach((a,g)=>{!a3(a)||"user"!==a.customer_type||a.customer_id!==b||c.has(`${f.id}:${g}`)||a.subscription_id&&d.has(a.subscription_id)||e.push({key:`${f.id}:${g}`,productDisplayName:a.product.display_name,quantity:a.quantity,subscriptionId:a.subscription_id,grantedAt:new Date(f.effective_at_millis),stackable:a.product.stackable})});let f=new Set,g=[];for(let a of e.sort((a,b)=>b.grantedAt.getTime()-a.grantedAt.getTime())){if(a.subscriptionId){if(f.has(a.subscriptionId))continue;f.add(a.subscriptionId)}g.push(a)}return g}function ba({userId:a,transactions:c}){let d=(0,F.useMemo)(()=>a9(c,a),[c,a]),e=(0,F.useMemo)(()=>d.filter(a=>null!=a.subscriptionId).length,[d]),f=(0,F.useMemo)(()=>d.reduce((a,b)=>a+(b.stackable?b.quantity:1),0),[d]),g=(0,F.useMemo)(()=>{let b=0;for(let d of c)if(!d.test_mode)for(let c of d.entries){if(!a2(c)||"user"!==c.customer_type||c.customer_id!==a)continue;let d=c.net_amount.USD;if("string"!=typeof d)continue;let e=Number.parseFloat(d);Number.isFinite(e)&&(b+=e)}return b},[c,a]),h=c.length;return(0,b.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3",children:[(0,b.jsx)(at.UserPageMetricCard,{label:"Active subscriptions",value:e,description:0===e?"None":`${e} running`,gradient:"blue"}),(0,b.jsx)(at.UserPageMetricCard,{label:"Products owned",value:f,description:0===f?"None":`${d.length} distinct`,gradient:"purple"}),(0,b.jsx)(at.UserPageMetricCard,{label:"Lifetime spend",value:a5(g),description:0===h?"No transactions":`Across ${h} transaction${1===h?"":"s"}`,gradient:"green"})]})}function bb({userId:a,transactions:c}){let d=(0,F.useMemo)(()=>a9(c,a),[c,a]),e=(0,F.useMemo)(()=>[{id:"productDisplayName",accessor:"productDisplayName",header:"Product",width:240,flex:1,sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"truncate text-sm font-medium text-foreground",children:a.productDisplayName})},{id:"type",header:"Type",width:130,sortable:!1,renderCell:({row:a})=>(0,b.jsx)(ae.DesignBadge,{label:a.subscriptionId?"Subscription":"One-time",color:a.subscriptionId?"blue":"purple",size:"sm"})},{id:"quantity",accessor:"quantity",header:"Quantity",width:100,align:"right",sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"font-medium tabular-nums text-foreground",children:a.stackable?a.quantity:1})},{id:"grantedAt",accessor:"grantedAt",header:"Granted",width:140,sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"text-sm text-muted-foreground",children:a0.format(a.grantedAt)})}],[]);return(0,b.jsx)(au.UserPageTableSection,{title:"Products & subscriptions",urlStateKey:"usersubs",columns:e,rows:d,getRowId:a=>a.key,emptyLabel:"This user has no active products or subscriptions."})}function bc({userId:a,transactions:c}){let d=(0,F.useMemo)(()=>[...c].sort((a,b)=>b.created_at_millis-a.created_at_millis),[c]),e=(0,F.useMemo)(()=>[{id:"type",header:"Type",width:190,sortable:!1,renderCell:({row:a})=>{let{label:c,Icon:d}=function(a){switch(a){case"purchase":return{label:"Purchase",Icon:a$.ShoppingCartIcon};case"subscription-renewal":return{label:"Subscription renewal",Icon:aV.ArrowClockwiseIcon};case"subscription-cancellation":return{label:"Subscription cancellation",Icon:Q.ProhibitIcon};case"chargeback":return{label:"Chargeback",Icon:aW.ArrowCounterClockwiseIcon};case"manual-item-quantity-change":return{label:"Item quantity change",Icon:aY.GearIcon};case"product-change":return{label:"Product change",Icon:a_.ShuffleIcon};default:return{label:"-",Icon:aZ.QuestionIcon}}}(a.type);return(0,b.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,b.jsx)("div",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-md bg-foreground/[0.06]",children:(0,b.jsx)(d,{className:"h-4 w-4 text-foreground/70","aria-hidden":!0})}),(0,b.jsx)("span",{className:"truncate text-sm font-medium text-foreground",children:c})]})}},{id:"detail",header:"Detail",width:240,flex:1,sortable:!1,renderCell:({row:c})=>(0,b.jsx)("span",{className:"truncate text-sm text-muted-foreground",children:function(a,b){let c=a.entries.find(a=>a3(a)&&"user"===a.customer_type&&a.customer_id===b);if(c){let a=c.product.display_name;return c.quantity>1?`${a} x${c.quantity}`:a}let d=a.entries.find(a=>"item_quantity_change"===a.type&&"user"===a.customer_type&&a.customer_id===b);if(d){let a=d.quantity;return`${d.item_id} (${a>0?"+":""}${a})`}return"-"}(c,a)})},{id:"createdAt",accessor:a=>a.created_at_millis,header:"Date",width:140,sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"text-sm text-muted-foreground tabular-nums",title:a1.format(new Date(a.created_at_millis)),children:a0.format(new Date(a.created_at_millis))})},{id:"amount",header:"Amount",width:120,align:"right",sortable:!1,renderCell:({row:c})=>{if(c.test_mode)return(0,b.jsx)("span",{className:"text-xs font-medium text-muted-foreground",children:"Test"});let d=function(a,b){let c=0,d=!1;for(let e of a.entries){if(!a2(e)||"user"!==e.customer_type||e.customer_id!==b)continue;let a=e.net_amount.USD;if("string"!=typeof a)continue;let f=Number.parseFloat(a);Number.isFinite(f)&&(c+=f,d=!0)}return d?c:null}(c,a);return null==d?(0,b.jsx)("span",{className:"text-xs text-muted-foreground",children:"-"}):(0,b.jsxs)("span",{className:(0,s.cn)("text-sm font-medium tabular-nums",d<0?"text-muted-foreground":"text-foreground"),children:[d<0?"-":"",a5(Math.abs(d))]})}},{id:"status",header:"Status",width:110,sortable:!1,renderCell:({row:a})=>{var c;let d=(c=a,a.adjusted_by.length>0?{label:"Refunded",color:"orange"}:c.test_mode?{label:"Test",color:"purple"}:null);return d?(0,b.jsx)(ae.DesignBadge,{label:d.label,color:d.color,size:"sm"}):(0,b.jsx)("span",{className:"text-sm text-muted-foreground",children:"-"})}}],[a]);return(0,b.jsx)(au.UserPageTableSection,{title:"Transaction history",urlStateKey:"usertxns",columns:e,rows:d,getRowId:a=>a.id,emptyLabel:"This user has no transactions.",paginated:!0})}function bd({userId:a,itemIds:c}){return 0===c.length?null:(0,b.jsx)(af.DesignCard,{title:"Item balances",subtitle:`${c.length} user-scoped item${1===c.length?"":"s"}`,icon:aX.CoinsIcon,children:(0,b.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-x-4 gap-y-1",children:c.map(c=>(0,b.jsx)(F.Suspense,{fallback:(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3 py-1.5",children:[(0,b.jsx)(v.Skeleton,{className:"h-4 w-32"}),(0,b.jsx)(v.Skeleton,{className:"h-4 w-8"})]}),children:(0,b.jsx)(be,{userId:a,itemId:c})},c))})})}function be({userId:a,itemId:c}){let d=(0,ad.useAdminApp)().useItem({userId:a,itemId:c}),e=d.quantity<0;return(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3 py-1.5",title:c,children:[(0,b.jsx)("span",{className:"truncate text-sm text-foreground",children:d.displayName}),(0,b.jsx)("span",{className:`shrink-0 text-sm font-semibold tabular-nums ${e?"text-destructive":"text-foreground"}`,children:d.quantity})]})}var bf=a.i(584120),bg=a.i(876722),bh=a.i(550435),bi=a.i(120229),bj=a.i(836678);let bk=[{id:"subject",header:"Subject",width:240,flex:1,sortable:!1,renderCell:({row:a})=>a.hasRendered?(0,b.jsx)("span",{className:"truncate",children:a.subject}):(0,b.jsx)("span",{className:"text-muted-foreground italic",children:"Not yet rendered"})},{id:"recipient",header:"Recipient",width:200,sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"truncate text-sm text-muted-foreground",children:(0,bi.getRecipientDisplay)(a)})},{id:"time",header:"Time",width:160,sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"text-sm text-muted-foreground",children:(0,bi.getEmailTimestamp)(a).toLocaleString()})},{id:"status",header:"Status",width:120,sortable:!1,renderCell:({row:a})=>(0,b.jsx)(ae.DesignBadge,{label:bh.STATUS_LABELS[a.status],color:(0,bh.getStatusBadgeColor)(a.status),size:"sm"})}];function bl({user:a}){let c=(0,ad.useAdminApp)(),d=(0,ad.useProjectId)(),e=(0,l.useRouter)(),[f,g]=(0,F.useState)([]),[h,i]=(0,F.useState)(!0),[j,k]=(0,F.useState)(null),m=(0,F.useCallback)(async()=>{i(!0),k(null);try{let a,b=[];do{let d=await c.listOutboxEmails(null!=a?{cursor:a}:void 0);b.push(...d.items),a=d.nextCursor??void 0}while(null!=a)g(b)}catch(a){k(a instanceof Error?a.message:"Failed to load emails")}finally{i(!1)}},[c]);(0,F.useEffect)(()=>{let a=!1;return(0,Y.runAsynchronouslyWithAlert)(async()=>{if(await m(),a)return}),()=>{a=!0}},[m]);let n=(0,F.useMemo)(()=>f.filter(b=>{var c;let d;return c=a.id,"user-primary-email"===(d=b.to).type&&d.userId===c||"user-custom-emails"===d.type&&d.userId===c}).sort((a,b)=>(0,bi.getEmailTimestamp)(b).getTime()-(0,bi.getEmailTimestamp)(a).getTime()),[f,a.id]),o=(0,F.useMemo)(()=>(0,bh.computeEmailStats)(n),[n]);return h?(0,b.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,b.jsx)(v.Skeleton,{className:"h-[40px] rounded-2xl"}),(0,b.jsx)(v.Skeleton,{className:"h-[180px] rounded-2xl"})]}):null!=j?(0,b.jsxs)("div",{className:"flex flex-col items-center gap-3 py-8 text-center",children:[(0,b.jsx)(bf.EnvelopeSimpleIcon,{className:"h-6 w-6 text-destructive"}),(0,b.jsx)(y.Typography,{className:"text-sm font-medium",children:"Failed to load emails"}),(0,b.jsx)(y.Typography,{variant:"secondary",className:"text-sm",children:j})]}):(0,b.jsxs)("div",{className:"flex flex-col gap-4",children:[n.length>0&&(0,b.jsxs)("div",{className:"py-1",children:[(0,b.jsx)("div",{className:"mb-2 text-sm text-center",children:(0,b.jsxs)("span",{className:"font-medium",children:[n.length," email",1!==n.length?"s":""]})}),(0,b.jsx)(bj.StatsBar,{data:o})]}),(0,b.jsx)(au.UserPageTableSection,{title:"Sent Emails",urlStateKey:"useremails",columns:bk,rows:n,getRowId:a=>a.id,emptyLabel:"No emails sent to this user",paginated:!0,onRowClick:a=>{e.push(bg.urlString`/projects/${d}/email-viewer/${a.id}`)}})]})}let bm=(0,a.i(549244).default)(async()=>{},{loadableGenerated:{modules:[611973]},ssr:!1,loading:()=>(0,b.jsx)("div",{className:"flex items-center justify-center py-16 text-sm text-muted-foreground",children:"Loading session replays…"})});function bn({user:a}){let c=a.primaryEmail??a.id,d=a.displayName??c,[e,h]=(0,F.useState)(!1),[i,j]=(0,F.useState)(!1),[k,l]=(0,F.useState)(null),m=(0,ad.useAdminApp)();return(0,b.jsxs)("div",{className:"flex min-w-0 gap-4 items-center",children:[(0,b.jsxs)(q.Avatar,{className:"w-20 h-20 shrink-0",children:[(0,b.jsx)(q.AvatarImage,{src:a.profileImageUrl??void 0,alt:d}),(0,b.jsx)(q.AvatarFallback,{children:d.slice(0,2)})]}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)(g.EditableInput,{value:d,initialEditValue:a.displayName??"",placeholder:c,shiftTextToLeft:!0,inputClassName:"font-semibold text-3xl",onUpdate:async b=>{await a.setDisplayName(b)}}),(0,b.jsxs)("p",{children:["Last active ",(0,W.fromNow)(a.lastActiveAt)]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(f.DesignMenu,{variant:"actions",trigger:"icon",triggerLabel:"User actions",align:"end",items:[{id:"impersonate",label:"Impersonate",onClick:()=>{(0,Y.runAsynchronouslyWithAlert)(async()=>{let b=new Date(Date.now()+72e5),c=await a.createSession({expiresInMillis:72e5}),d=await c.getTokens();l(Z.deindent`
|
|
111
111
|
document.cookie = 'stack-refresh-${m.projectId}=${d.refreshToken}; expires=${b.toUTCString()}; path=/';
|
|
112
112
|
window.location.reload();
|
|
113
|
-
`)})}},...a.isMultiFactorRequired?[{id:"remove-2fa",label:"Remove 2FA",onClick:()=>{(0,Y.runAsynchronouslyWithAlert)(async()=>{await a.update({totpMultiFactorSecret:null})})}}]:[],{id:"restriction",label:bi(a),onClick:()=>{j(!0)}},{id:"delete",label:"Delete",itemVariant:"destructive",onClick:()=>h(!0)}]}),(0,b.jsx)(bj,{user:a,open:i,onOpenChange:j}),(0,b.jsx)(A.DeleteUserDialog,{user:a,open:e,onOpenChange:h,redirectTo:`/projects/${m.projectId}/users`}),(0,b.jsx)(A.ImpersonateUserDialog,{user:a,impersonateSnippet:k,onClose:()=>l(null)})]})]})}function bh(a){let b=a.restrictedReason;if(!b)return"";switch(b.type){case"anonymous":return"Anonymous user";case"email_not_verified":return"Unverified email";case"restricted_by_administrator":return"Manually restricted";default:return"Restricted"}}function bi(a){return a.restrictedByAdmin?"Edit or remove manual restriction":a.isRestricted?"Add manual restriction":"Restrict user"}function bj({user:a,open:c,onOpenChange:d}){let[e,f]=(0,F.useState)(a.restrictedByAdminReason??""),[g,h]=(0,F.useState)(a.restrictedByAdminPrivateDetails??""),[i,j]=(0,F.useState)(!1),[k,l]=(0,F.useState)(null),{toast:m}=(0,z.useToast)(),n=async()=>{let b=e.trim(),c=g.trim();j(!0),l(null);try{await a.update({restrictedByAdmin:!0,restrictedByAdminReason:b.length>0?b:null,restrictedByAdminPrivateDetails:c.length>0?c:null}),m({title:"User restricted",variant:"success"}),d(!1)}catch(b){(0,X.captureError)("user-restriction-save-and-restrict-error",new X.HexclaveAssertionError(`Failed to save and restrict user ${a.id}`,{cause:b})),l(b instanceof Error&&b.message?b.message:"Failed to save the restriction. Please try again.")}finally{j(!1)}},o=async()=>{j(!0),l(null);try{await a.update({restrictedByAdmin:!1,restrictedByAdminReason:null,restrictedByAdminPrivateDetails:null}),m({title:"Restriction removed",variant:"success"}),d(!1)}catch(b){(0,X.captureError)("user-restriction-remove-error",new X.HexclaveAssertionError(`Failed to remove restriction for user ${a.id}`,{cause:b})),l(b instanceof Error&&b.message?b.message:"Failed to remove the restriction. Please try again.")}finally{j(!1)}};return(0,b.jsx)(t.Dialog,{open:c,onOpenChange:b=>{b&&(f(a.restrictedByAdminReason??""),h(a.restrictedByAdminPrivateDetails??""),l(null)),d(b)},children:(0,b.jsxs)(t.DialogContent,{className:"sm:max-w-[500px]",children:[(0,b.jsxs)(t.DialogHeader,{children:[(0,b.jsx)(t.DialogTitle,{children:"User Restriction"}),(0,b.jsx)(t.DialogDescription,{children:a.restrictedByAdmin?"This user is manually restricted. You can update the notes or remove the manual restriction.":"Use a manual restriction to block this user from accessing your app by default. You can optionally provide a public reason shown to the user."})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-4 py-4",children:[(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)("label",{className:"text-sm font-medium",children:"Public reason (shown to user)"}),(0,b.jsx)(u.Input,{value:e,onChange:a=>f(a.target.value),placeholder:"Optional message visible to the user",disabled:i})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)("label",{className:"text-sm font-medium",children:"Private details (internal only, optional)"}),(0,b.jsx)(w.Textarea,{value:g,onChange:a=>h(a.target.value),placeholder:"Internal notes, e.g., which sign-up rule triggered",className:"min-h-[80px]",disabled:i})]})]}),k&&(0,b.jsx)("div",{className:"rounded border border-destructive/40 bg-destructive/10 px-3 py-2 text-sm text-destructive",children:k}),(0,b.jsxs)(t.DialogFooter,{className:"flex-col sm:flex-row gap-2",children:[a.restrictedByAdmin&&(0,b.jsx)(r.Button,{variant:"outline",onClick:o,disabled:i,className:"sm:mr-auto",children:"Remove manual restriction"}),(0,b.jsx)(r.Button,{variant:"outline",onClick:()=>d(!1),disabled:i,children:"Cancel"}),(0,b.jsx)(r.Button,{onClick:n,disabled:i,children:"Save & restrict user"})]})]})})}function bk({user:a}){let[c,d]=(0,F.useState)(!1);if(!a.isRestricted)return null;let e=bh(a);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)(p.Alert,{variant:"destructive",className:"mb-4",children:[(0,b.jsx)(Q.ProhibitIcon,{size:16}),(0,b.jsx)(p.AlertTitle,{children:"This user is currently restricted"}),(0,b.jsxs)(p.AlertDescription,{className:"mt-2",children:[(0,b.jsxs)("p",{className:"mb-2",children:["Restricted users cannot access your app by default. This user is restricted because: ",(0,b.jsx)("strong",{children:e}),"."]}),a.restrictedReason?.type==="email_not_verified"&&(0,b.jsx)("p",{className:"text-sm opacity-80",children:"The user needs to verify their email address to remove this restriction."}),a.restrictedReason?.type==="anonymous"&&(0,b.jsx)("p",{className:"text-sm opacity-80",children:"Anonymous users must sign up with credentials to remove this restriction."}),a.restrictedReason?.type==="restricted_by_administrator"&&(0,b.jsxs)("div",{className:"text-sm opacity-80",children:[(0,b.jsx)("p",{children:"This user was manually restricted by an administrator."}),a.restrictedByAdminReason&&(0,b.jsxs)("p",{className:"mt-1",children:[(0,b.jsx)("strong",{children:"Public reason:"})," ",a.restrictedByAdminReason]}),a.restrictedByAdminPrivateDetails&&(0,b.jsxs)("p",{className:"mt-1",children:[(0,b.jsx)("strong",{children:"Private details:"})," ",a.restrictedByAdminPrivateDetails]})]}),(0,b.jsx)(r.Button,{variant:"outline",size:"sm",onClick:()=>d(!0),className:"mt-3",children:bi(a)})]})]}),(0,b.jsx)(bj,{user:a,open:c,onOpenChange:d})]})}function bl({user:a}){let c=(0,F.useMemo)(()=>[{type:"text",icon:(0,b.jsx)(O.HashIcon,{size:14}),name:"User ID",value:a.id,readOnly:!0},{type:"text",icon:(0,b.jsx)(M.EnvelopeIcon,{size:14}),name:"Primary email",value:a.primaryEmail??"",placeholder:"-",readOnly:!0},{type:"text",icon:(0,b.jsx)(I,{size:14}),name:"Display name",value:a.displayName??"",placeholder:"-",onUpdate:async b=>{await a.setDisplayName(b)}},{type:"text",icon:(0,b.jsx)(S.SquareIcon,{size:14}),name:"Password",value:"",placeholder:a.hasPassword?"************":"-",onUpdate:async b=>{await a.setPassword({password:b})}},{type:"text",icon:(0,b.jsx)(R.ShieldIcon,{size:14}),name:"2-factor auth",value:a.isMultiFactorRequired?"Enabled":"",placeholder:"Disabled",readOnly:!0},{type:"text",icon:(0,b.jsx)(J.CalendarIcon,{size:14}),name:"Signed up at",value:a.signedUpAt.toDateString(),readOnly:!0}],[a]);return(0,b.jsx)(e.DesignEditableGrid,{items:c,columns:2,size:"sm",deferredSave:!1})}function bm({user:a}){let[c,d]=(0,F.useState)(!1),f=(0,F.useMemo)(()=>[{type:"custom",icon:(0,b.jsx)(Q.ProhibitIcon,{size:14}),name:"Manual restriction",children:(0,b.jsx)("span",{className:(0,s.cn)("text-sm",a.restrictedByAdmin?"font-medium text-destructive":"text-muted-foreground"),children:a.restrictedByAdmin?"Restricted by admin":a.isRestricted?`Not manually restricted (${bh(a)})`:"Not restricted"})},{type:"text",icon:(0,b.jsx)(R.ShieldIcon,{size:14}),name:"Risk score: bot",value:String(a.riskScores.signUp.bot),onUpdate:async b=>{await a.update({riskScores:{signUp:{bot:(0,D.parseRiskScore)(b),freeTrialAbuse:a.riskScores.signUp.freeTrialAbuse}}})}},{type:"text",icon:(0,b.jsx)(R.ShieldIcon,{size:14}),name:"Risk score: free trial abuse",value:String(a.riskScores.signUp.freeTrialAbuse),onUpdate:async b=>{await a.update({riskScores:{signUp:{bot:a.riskScores.signUp.bot,freeTrialAbuse:(0,D.parseRiskScore)(b)}}})}},{type:"text",icon:(0,b.jsx)(N.GlobeIcon,{size:14}),name:"Sign-up country code",value:a.countryCode??"",placeholder:"-",normalizeInput:a=>a.toUpperCase().replace(/[^A-Z]/g,"").slice(0,2),onUpdate:async b=>{await a.update({countryCode:b.length>0?(0,V.normalizeCountryCode)(b):null})}}],[a]);return(0,b.jsxs)("section",{className:"flex flex-col gap-3",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,b.jsx)("h2",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"Fraud"}),(0,b.jsx)(r.Button,{variant:a.restrictedByAdmin?"outline":"destructive",size:"sm",onClick:()=>d(!0),children:bi(a)})]}),(0,b.jsx)(e.DesignEditableGrid,{items:f,columns:2,size:"sm",deferredSave:!1}),(0,b.jsx)(bj,{user:a,open:c,onOpenChange:d})]})}function bn({value:a,showFalseIcon:c=!0}){return(0,b.jsxs)("div",{className:"flex justify-center",children:[(0,b.jsx)("span",{className:"sr-only",children:a?"Yes":"No"}),a?(0,b.jsx)(K.CheckIcon,{"aria-hidden":!0,className:"mx-auto h-4 w-4 text-green-500"}):c?(0,b.jsx)(T.XIcon,{"aria-hidden":!0,className:"mx-auto h-4 w-4 text-muted-foreground"}):null]})}function bo({user:a,open:c,onOpenChange:d}){let e=aa.object({email:aa.string().email("Please enter a valid e-mail address").defined("E-mail is required").label("E-mail").meta({stackFormFieldPlaceholder:"Enter e-mail address"}),isVerified:aa.boolean().default(!1).label("Set as verified").meta({description:"E-mails verified by verification emails. Can be used for OTP/magic links"}),isPrimary:aa.boolean().default(!1).label("Set as primary").meta({description:"Make this the primary e-mail for the user"}),isUsedForAuth:aa.boolean().default(!1).label("Used for sign-in").meta({description:"Allow this e-mail to be used for password sign-in. Also enables OTP/magic links if the e-mail is verified."})});return(0,b.jsx)(h.SmartFormDialog,{title:"Add E-mail",description:"Add a new e-mail address to this user account.",open:c,onOpenChange:d,formSchema:e,onSubmit:async b=>{b.email.trim()&&await a.createContactChannel({type:"email",value:b.email.trim(),isVerified:b.isVerified,isPrimary:b.isPrimary,usedForAuth:b.isUsedForAuth})}})}function bp({control:a,watch:c,domains:d,allowLocalhost:e}){return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(i.SelectField,{control:a,name:"selected",label:"Domain",options:[...d.map((a,b)=>({value:b.toString(),label:a.domain})),...e?[{value:"localhost",label:"localhost"}]:[]]}),"localhost"===c("selected")&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(i.InputField,{control:a,name:"localhostPort",label:"Localhost Port",placeholder:"3000",type:"number"}),(0,b.jsx)(m.Accordion,{type:"single",collapsible:!0,className:"w-full",children:(0,b.jsxs)(m.AccordionItem,{value:"item-1",children:[(0,b.jsx)(m.AccordionTrigger,{children:"Advanced"}),(0,b.jsx)(m.AccordionContent,{className:"flex flex-col gap-8",children:(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)(i.InputField,{label:"Handler path",name:"handlerPath",control:a,placeholder:"/handler"}),(0,b.jsx)(y.Typography,{variant:"secondary",type:"footnote",children:"Only modify this if you changed the default handler path in your app"})]})})]})})]})]})}function bq({title:a,description:c,open:d,onOpenChange:e,endpointPath:f,onSubmit:g}){let i=(0,ad.useAdminApp)().useProject(),j=i.config.domains;return(0,b.jsx)(h.FormDialog,{title:a,description:c,open:d,onOpenChange:e,formSchema:aa.object({selected:aa.string().defined(),localhostPort:aa.number().test("required-if-localhost","Required if localhost is selected",(a,b)=>"localhost"!==b.parent.selected||void 0!==a),handlerPath:aa.string().optional()}),okButton:{label:"Send"},render:({control:a,watch:c})=>(0,b.jsx)(bp,{control:a,watch:c,domains:j,allowLocalhost:i.config.allowLocalhost}),onSubmit:async a=>{let b,c;if("localhost"===a.selected)b=`http://localhost:${a.localhostPort}`,c=a.handlerPath||"/handler";else{let d=j[parseInt(a.selected)];b=d.domain,c=d.handlerPath}let d=new URL(c.replace(/\/?$/,"/")+f.replace(/^\//,""),b).toString();await g(d)}})}function br({channel:a,open:c,onOpenChange:d}){return(0,b.jsx)(bq,{title:"Send Verification Email",description:`Send a verification email to ${a.value}? The email will contain a callback link to your domain.`,open:c,onOpenChange:d,endpointPath:"/email-verification",onSubmit:async b=>{await a.sendVerificationEmail({callbackUrl:b})}})}function bs({channel:a,open:c,onOpenChange:d}){let e=(0,ad.useAdminApp)();return(0,b.jsx)(bq,{title:"Send Reset Password Email",description:`Send a password reset email to ${a.value}? The email will contain a callback link to your domain.`,open:c,onOpenChange:d,endpointPath:"/password-reset",onSubmit:async b=>{await e.sendForgotPasswordEmail(a.value,{callbackUrl:b})}})}function bt({channel:a,open:c,onOpenChange:d}){let e=(0,ad.useAdminApp)();return(0,b.jsx)(bq,{title:"Send Sign-In Invitation",description:`Send a sign-in invitation email to ${a.value}? The email will contain a callback link to your domain.`,open:c,onOpenChange:d,endpointPath:"/sign-in",onSubmit:async b=>{await e.sendSignInInvitationEmail(a.value,b)}})}function bu({user:a}){let c=(0,ad.useAdminApp)().useProject(),d=a.useContactChannels(),[e,f]=(0,F.useState)(!1),[g,h]=(0,F.useState)(null),[i,j]=(0,F.useState)(null),[k,l]=(0,F.useState)(null),m=async a=>{await a.update({usedForAuth:!a.usedForAuth})},o=async a=>{await a.update({isVerified:!a.isVerified})},p=async a=>{await a.update({isPrimary:!0})},q=(0,F.useMemo)(()=>[{id:"value",accessor:"value",header:"E-Mail",width:220,flex:1,sortable:!1},{id:"isPrimary",header:"Primary",width:90,align:"center",sortable:!1,renderCell:({row:a})=>(0,b.jsx)(bn,{value:a.isPrimary,showFalseIcon:!1})},{id:"isVerified",header:"Verified",width:90,align:"center",sortable:!1,renderCell:({row:a})=>(0,b.jsx)(bn,{value:a.isVerified})},{id:"usedForAuth",header:"Used for sign-in",width:140,align:"center",sortable:!1,renderCell:({row:a})=>(0,b.jsx)(bn,{value:a.usedForAuth})},{id:"actions",header:"",width:56,minWidth:56,maxWidth:56,sortable:!1,hideable:!1,resizable:!1,align:"right",renderCell:({row:a})=>(0,b.jsx)("div",{className:"flex justify-end",children:(0,b.jsx)(n.ActionCell,{items:[{item:"Send sign-in invitation",onClick:async()=>{l({channel:a,isOpen:!0})}},...a.isVerified?[]:[{item:"Send verification email",onClick:async()=>{h({channel:a,isOpen:!0})}}],...c.config.credentialEnabled?[{item:"Send reset password email",onClick:async()=>{j({channel:a,isOpen:!0})}}]:[],{item:a.isVerified?"Mark as unverified":"Mark as verified",onClick:()=>{(0,Y.runAsynchronouslyWithAlert)(()=>o(a))}},...a.isPrimary?[]:[{item:"Set as primary",onClick:()=>{(0,Y.runAsynchronouslyWithAlert)(()=>p(a))}}],{item:a.usedForAuth?"Disable for sign-in":"Enable for sign-in",onClick:()=>{(0,Y.runAsynchronouslyWithAlert)(()=>m(a))}},{item:"Delete",danger:!0,onClick:()=>{(0,Y.runAsynchronouslyWithAlert)(()=>a.delete())}}]})})}],[c.config.credentialEnabled]);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(bo,{user:a,open:e,onOpenChange:f}),g&&(0,b.jsx)(br,{channel:g.channel,open:g.isOpen,onOpenChange:a=>{a||h(null)}}),i&&(0,b.jsx)(bs,{channel:i.channel,open:i.isOpen,onOpenChange:a=>{a||j(null)}}),k&&(0,b.jsx)(bt,{channel:k.channel,open:k.isOpen,onOpenChange:a=>{a||l(null)}}),(0,b.jsx)(au.UserPageTableSection,{title:"Contact Channels",urlStateKey:"contactch",columns:q,rows:d,getRowId:a=>a.id,emptyLabel:"No contact channels",actions:(0,b.jsx)(r.Button,{variant:"outline",size:"sm",onClick:()=>f(!0),children:"Add E-mail"})})]})}function bv(){return(0,b.jsx)("div",{className:"flex items-center",children:Array.from({length:3}).map((a,c)=>(0,b.jsx)(v.Skeleton,{className:"h-7 w-7 rounded-full border-2 border-background",style:{marginLeft:0===c?0:-10}},c))})}function bw({team:a,onMemberClick:c}){let d=a.useUsers();if(0===d.length)return(0,b.jsx)("span",{className:"text-xs text-muted-foreground",children:"No members"});let e=d.slice(0,3),f=d.length-e.length;return(0,b.jsxs)("div",{className:"group/avatars flex items-center",onClick:a=>a.stopPropagation(),children:[e.map((a,d)=>{let f=a.displayName??a.primaryEmail??a.id;return(0,b.jsxs)(x.Tooltip,{delayDuration:0,children:[(0,b.jsx)(x.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button","aria-label":`View ${f}`,onClick:b=>{b.stopPropagation(),c(a.id)},className:(0,s.cn)("relative rounded-full transition-[margin,transform] duration-200 ease-out hover:z-20 hover:scale-110 focus:z-20 focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",0===d?"ml-0":"-ml-2.5 group-hover/avatars:ml-1"),style:{zIndex:e.length-d},children:(0,b.jsxs)(q.Avatar,{className:"h-7 w-7 border-2 border-background",children:[(0,b.jsx)(q.AvatarImage,{src:a.profileImageUrl??void 0,alt:f}),(0,b.jsx)(q.AvatarFallback,{className:"text-[10px]",children:f.slice(0,2).toUpperCase()})]})})}),(0,b.jsx)(x.TooltipContent,{side:"top",className:"text-xs",children:f})]},a.id)}),f>0&&(0,b.jsxs)("div",{className:"-ml-2.5 group-hover/avatars:ml-1 transition-[margin] duration-200 ease-out flex h-7 min-w-7 items-center justify-center rounded-full border-2 border-background bg-muted px-1.5 text-[10px] font-medium text-muted-foreground","aria-label":`${f} more members`,children:["+",f]})]})}function bx({user:a}){let d=(0,ad.useAdminApp)(),e=(0,l.useRouter)(),[f,g]=(0,F.useState)(void 0),h=a.useTeams(void 0===f?void 0:{orderBy:"createdAt",desc:f}),[i,j]=(0,F.useState)(!1),[k,m]=(0,F.useState)(null),p=(0,F.useCallback)(a=>{e.push(`/projects/${encodeURIComponent(d.projectId)}/teams/${encodeURIComponent(a)}`)},[e,d.projectId]),q=(0,F.useCallback)(a=>{e.push(`/projects/${encodeURIComponent(d.projectId)}/users/${encodeURIComponent(a)}`)},[e,d.projectId]),s=(0,F.useMemo)(()=>[{id:"id",accessor:"id",header:"Team ID",width:180,sortable:!1,renderCell:({row:a})=>(0,b.jsx)("div",{className:"font-mono text-xs bg-muted px-2 py-1 rounded max-w-[180px] truncate",children:a.id})},{id:"displayName",accessor:"displayName",header:"Display Name",width:220,flex:1,sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"font-medium",children:a.displayName||"-"})},{id:"members",header:"Members",width:160,sortable:!1,renderCell:({row:a})=>(0,b.jsx)(F.Suspense,{fallback:(0,b.jsx)(bv,{}),children:(0,b.jsx)(bw,{team:a,onMemberClick:q})})},{id:"createdAt",accessor:"createdAt",header:"Created At",width:140,sortable:!0,renderCell:({row:a})=>(0,b.jsx)("span",{className:"text-sm text-muted-foreground",children:a.createdAt.toLocaleDateString()})},{id:"actions",header:"",width:56,minWidth:56,maxWidth:56,sortable:!1,hideable:!1,resizable:!1,align:"right",renderCell:({row:a})=>(0,b.jsx)("div",{className:"flex justify-end",children:(0,b.jsx)(n.ActionCell,{items:[{item:"View Team",onClick:()=>{p(a.id)}},{item:"Remove from team",danger:!0,onClick:()=>{m(a)}}]})})}],[p,q]);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(au.UserPageTableSection,{title:"Teams",urlStateKey:"userteams",columns:s,rows:h,getRowId:a=>a.id,emptyLabel:"No teams found",onRowClick:a=>p(a.id),onSortChange:a=>{let b=a.find(a=>"createdAt"===a.columnId);g(b?"desc"===b.direction:void 0)},actions:(0,b.jsx)(r.Button,{variant:"outline",size:"sm",onClick:()=>j(!0),children:"Add to team"})}),(0,b.jsx)(t.Dialog,{open:i,onOpenChange:j,children:(0,b.jsxs)(t.DialogContent,{className:"sm:max-w-2xl",children:[(0,b.jsx)(t.DialogHeader,{className:"mb-4",children:(0,b.jsx)(t.DialogTitle,{children:"Add to team"})}),(0,b.jsx)(c.TeamSearchTable,{action:c=>{let d=void 0!==h.find(a=>a.id===c.id);return(0,b.jsx)(r.Button,{variant:"outline",size:"sm",disabled:d,onClick:()=>{(0,Y.runAsynchronouslyWithAlert)(async()=>{await c.addUser(a.id),j(!1)})},children:d?"Added":"Add"})}})]})}),(0,b.jsx)(o.ActionDialog,{title:!0,danger:!0,open:null!==k,onOpenChange:a=>{a||m(null)},okButton:{label:"Remove user from team",onClick:async()=>{(0,Y.runAsynchronouslyWithAlert)(async()=>{k&&await k.removeUser(a.id)})}},cancelButton:!0,confirmText:"I understand this will cause the user to lose access to the team.",children:k&&`Are you sure you want to remove "${a.displayName??a.id}" from the team "${k.displayName}"?`})]})}function by(a){let c=(0,ad.useAdminApp)(),d=c.useProject(),{toast:e}=(0,z.useToast)(),f=d.config.oauthProviders,g="edit"===a.mode,j=g?a.provider:null,k=aa.object({providerId:aa.string().defined("Provider is required").nonEmpty("Provider is required").label("OAuth Provider").meta({stackFormFieldRender:a=>(0,b.jsx)(i.SelectField,{control:a.control,name:a.name,label:a.label,disabled:a.disabled||g,options:f.map(a=>({value:a.id,label:a.id.charAt(0).toUpperCase()+a.id.slice(1)})),placeholder:"Select OAuth provider"})}),email:aa.string().email("Please enter a valid e-mail address").optional().label("Email").meta({stackFormFieldPlaceholder:"Enter email address (optional)"}),accountId:aa.string().defined("Account ID is required").label("Account ID").meta({stackFormFieldPlaceholder:"Enter OAuth account ID",description:"The unique account identifier from the OAuth provider",stackFormFieldExtraProps:{disabled:g}}),allowSignIn:aa.boolean().default(!0).label("Used for sign-in").meta({description:"Allow this OAuth provider to be used for authentication"}),allowConnectedAccounts:aa.boolean().default(!0).label("Used for connected accounts").meta({description:"Allow this OAuth provider to be used for connected account features"})}),l=g&&j?{providerId:j.type,email:j.email,accountId:j.accountId,allowSignIn:j.allowSignIn,allowConnectedAccounts:j.allowConnectedAccounts}:{providerId:"",email:"",accountId:"",allowSignIn:!0,allowConnectedAccounts:!0},m=async b=>{let d;if(g&&j)d=await j.update({email:b.email?.trim()||j.email,allowSignIn:b.allowSignIn,allowConnectedAccounts:b.allowConnectedAccounts});else{if(!b.accountId.trim())return;let e=f.find(a=>a.id===b.providerId);if(!e)throw new X.HexclaveAssertionError(`Provider config not found for ${b.providerId}`);d=await c.createOAuthProvider({userId:a.user.id,providerConfigId:e.id,accountId:b.accountId.trim(),email:b.email?.trim()||"",allowSignIn:b.allowSignIn,allowConnectedAccounts:b.allowConnectedAccounts})}if("error"===d.status){let a=g&&j?j.type:b.providerId,c=g&&j?j.accountId:b.accountId,f=g?"updating":"adding";return U.KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn.isInstance(d.error)?e({title:"Account Already Connected",description:`A ${a} provider with account ID "${c}" already exists (possibly for a different user)`,variant:"destructive"}):(console.error(d.error),e({title:"Error",description:`An unexpected error occurred while ${f} the OAuth provider.`,variant:"destructive"})),"prevent-close"}},n=k.default(l);return(0,b.jsx)(h.SmartFormDialog,{title:g?"Edit OAuth Provider":"Add OAuth Provider",description:g?"Update the OAuth provider settings.":"Connect a new OAuth provider to this user account.",open:a.open,onOpenChange:a.onOpenChange,formSchema:n,onSubmit:m})}function bz({user:a}){let c=a.useOAuthProviders(),[d,e]=(0,F.useState)(!1),[f,g]=(0,F.useState)(null),{toast:h}=(0,z.useToast)(),i=(0,F.useCallback)(async(a,b)=>{let c=await a.update(b);if("error"===c.status)if(U.KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn.isInstance(c.error))h({title:"Account Already Connected",description:`A ${a.type} provider with account ID "${a.accountId}" is already connected for this user.`,variant:"destructive"});else{let a=void 0!==b.allowSignIn?"sign-in":"connected accounts";h({title:"Error",description:`Failed to update ${a} setting.`,variant:"destructive"})}else{let c="";void 0!==b.allowSignIn?c=`Sign-in ${b.allowSignIn?"enabled":"disabled"} for ${a.type} provider.`:void 0!==b.allowConnectedAccounts&&(c=`Connected accounts ${b.allowConnectedAccounts?"enabled":"disabled"} for ${a.type} provider.`),h({title:"Success",description:c,variant:"success"})}},[h]),j=(0,F.useMemo)(()=>[{id:"type",accessor:"type",header:"Provider",width:110,sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"capitalize font-medium",children:a.type})},{id:"email",accessor:"email",header:"Email",width:160,flex:1,sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"block max-w-full truncate text-sm text-muted-foreground",title:a.email,children:a.email??"No email"})},{id:"accountId",accessor:"accountId",header:"Account ID",width:160,flex:1,sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"font-mono text-xs truncate block max-w-[160px]",children:a.accountId})},{id:"allowSignIn",header:"Sign-in",width:90,align:"center",sortable:!1,renderCell:({row:a})=>(0,b.jsx)(bn,{value:a.allowSignIn})},{id:"allowConnectedAccounts",header:"Connected",width:110,align:"center",sortable:!1,renderCell:({row:a})=>(0,b.jsx)(bn,{value:a.allowConnectedAccounts})},{id:"actions",header:"",width:56,minWidth:56,maxWidth:56,sortable:!1,hideable:!1,resizable:!1,align:"right",renderCell:({row:a})=>(0,b.jsx)("div",{className:"flex justify-end",children:(0,b.jsx)(n.ActionCell,{items:[{item:"Edit",onClick:()=>g(a)},{item:a.allowSignIn?"Disable sign-in":"Enable sign-in",onClick:async()=>{await i(a,{allowSignIn:!a.allowSignIn})}},{item:a.allowConnectedAccounts?"Disable connected accounts":"Enable connected accounts",onClick:async()=>{await i(a,{allowConnectedAccounts:!a.allowConnectedAccounts})}},{item:"Delete",danger:!0,onClick:async()=>{await a.delete()}}]})})}],[i]);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(by,{user:a,open:d,onOpenChange:e,mode:"create"}),f&&(0,b.jsx)(by,{user:a,open:!!f,onOpenChange:()=>g(null),mode:"edit",provider:f}),(0,b.jsx)(au.UserPageTableSection,{title:"OAuth Providers",urlStateKey:"useroauth",columns:j,rows:c,getRowId:a=>a.id,emptyLabel:"No OAuth providers connected",actions:(0,b.jsx)(r.Button,{variant:"outline",size:"sm",onClick:()=>e(!0),children:"Add Provider"})})]})}let bA=[{label:"",ariaLabel:null},{label:"M",ariaLabel:"Monday"},{label:"",ariaLabel:null},{label:"W",ariaLabel:"Wednesday"},{label:"",ariaLabel:null},{label:"F",ariaLabel:"Friday"},{label:"",ariaLabel:null}],bB=["bg-foreground/[0.08] dark:bg-foreground/[0.12]","bg-emerald-500/30 dark:bg-emerald-400/30","bg-emerald-500/55 dark:bg-emerald-400/55","bg-emerald-500/80 dark:bg-emerald-400/80","bg-emerald-500 dark:bg-emerald-400"],bC=new Intl.DateTimeFormat(void 0,{weekday:"short",month:"short",day:"numeric",year:"numeric",timeZone:"UTC"});function bD(a){let[b,c,d]=a.split("-").map(Number),e=new Date(Date.UTC(b,c-1,d));return bC.format(e)}function bE({children:a}){return(0,b.jsxs)("div",{className:"flex flex-col items-center gap-2 shrink-0",children:[(0,b.jsx)("span",{className:"text-[11px] font-medium text-muted-foreground tracking-[0.14em] uppercase",children:"Activity"}),(0,b.jsx)("div",{className:"grid text-[9px] leading-none text-muted-foreground/70",style:{gap:2,gridTemplateColumns:"repeat(7, 11px)"},children:bA.map((a,c)=>(0,b.jsx)("span",{className:"flex justify-center","aria-label":a.ariaLabel??void 0,"aria-hidden":null==a.ariaLabel,style:{width:11},children:a.label},`${a.ariaLabel??"spacer"}-${c}`))}),(0,b.jsx)("div",{className:"grid",style:{gap:2,gridTemplateColumns:"repeat(7, 11px)",gridTemplateRows:"repeat(53, 11px)",gridAutoFlow:"row"},children:a})]})}function bF(){let a=(0,F.useMemo)(()=>Array.from({length:371}),[]);return(0,b.jsx)(bE,{children:a.map((a,c)=>(0,b.jsx)("div",{className:(0,s.cn)("rounded-[2px]",bB[0]),style:{width:11,height:11},"aria-hidden":!0},c))})}function bG({userId:a,onCellClick:c}){let d=(0,ad.useAdminApp)(),{data_points:e}=(0,E.useUserActivityOrThrow)(d,a),f=(0,F.useMemo)(()=>new Map(e.map(a=>[a.date,a.activity])),[e]),g=(0,F.useMemo)(()=>{let a,b,c=((a=new Date(e.length>0?function(a){let[b,c,d]=a.split("-").map(Number);return new Date(Date.UTC(b,c-1,d))}(e[e.length-1].date):new Date)).setUTCHours(0,0,0,0),b=a.getUTCDay(),a.setUTCDate(a.getUTCDate()-b),a);return Array.from({length:371},(a,b)=>{let d=Math.floor(b/7),e=new Date(c);e.setUTCDate(c.getUTCDate()-7*d+b%7);let g=e.toISOString().slice(0,10);return{date:g,activity:f.get(g)??0}})},[f,e]),h=(0,F.useMemo)(()=>g.reduce((a,b)=>Math.max(a,b.activity),0),[g]);return(0,b.jsx)(bE,{children:g.map(a=>{let d=function(a,b){if(a<=0||b<=0)return 0;let c=Math.log1p(a)/Math.log1p(b);return c<=.25?1:c<=.5?2:c<=.75?3:4}(a.activity,h);return(0,b.jsxs)(x.Tooltip,{delayDuration:0,children:[(0,b.jsx)(x.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button","aria-label":`View analytics for ${bD(a.date)} (${a.activity} ${1===a.activity?"event":"events"})`,onClick:()=>c(a.date),className:(0,s.cn)("relative rounded-[2px] transition-none hover:z-10 hover:ring-2 hover:ring-foreground focus:z-10 focus:outline-none focus-visible:ring-2 focus-visible:ring-foreground cursor-pointer",bB[d]),style:{width:11,height:11}})}),(0,b.jsxs)(x.TooltipContent,{side:"left",sideOffset:8,collisionPadding:8,className:"z-[100] whitespace-nowrap text-xs",children:[(0,b.jsxs)("div",{className:"font-medium",children:[a.activity," ",1===a.activity?"event":"events"]}),(0,b.jsx)("div",{className:"opacity-70",children:bD(a.date)})]})]},a.date)})})}function bH({userId:a,onCellClick:c,anchorRef:d}){let[e,f]=(0,F.useState)(!1),[g,h]=(0,F.useState)(null);return((0,F.useEffect)(()=>{f(!0)},[]),(0,F.useEffect)(()=>{let a=()=>{let a=d.current;null===a||h(a.getBoundingClientRect().right-164+12)};a(),window.addEventListener("resize",a);let b=new ResizeObserver(a);return null!==d.current&&b.observe(d.current),()=>{window.removeEventListener("resize",a),b.disconnect()}},[d]),e&&null!==g)?(0,_.createPortal)((0,b.jsx)("aside",{className:"pointer-events-none fixed z-30 hidden -translate-y-1/2 xl:block",style:{left:g,width:140,top:`max(50vh, ${455.5}px)`},children:(0,b.jsx)("div",{className:"pointer-events-auto flex w-full items-center justify-center",children:(0,b.jsx)(F.Suspense,{fallback:(0,b.jsx)(bF,{}),children:(0,b.jsx)(bG,{userId:a,onCellClick:c})})})}),document.body):null}let bI=[{id:"authentication",label:"Authentication",appId:"authentication"},{id:"teams",label:"Teams",appId:"teams"},{id:"payments",label:"Payments",appId:"payments"},{id:"analytics",label:"Analytics",appId:"analytics"},{id:"session-replays",label:"Session Replays",appId:"session-replays"},{id:"metadata",label:"Metadata",appId:null,icon:L.DatabaseIcon}];function bJ(a){return bI.some(b=>b.id===a)}function bK({sections:a}){return(0,b.jsx)("div",{className:"flex flex-col gap-6",children:Array.from({length:a}).map((a,c)=>(0,b.jsxs)("section",{className:"flex flex-col gap-3",children:[(0,b.jsx)(v.Skeleton,{className:"h-4 w-32"}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)(v.Skeleton,{className:"h-11 w-full"}),(0,b.jsx)(v.Skeleton,{className:"h-11 w-full"}),(0,b.jsx)(v.Skeleton,{className:"h-11 w-full"})]})]},c))})}function bL({user:a}){let c=(0,ad.useAdminApp)(),e=c.useProject().useConfig(),f=(0,l.useRouter)(),g=(0,$.usePathname)(),h=(0,$.useSearchParams)(),i=(0,F.useRef)(null),m=(0,F.useMemo)(()=>bI.filter(a=>null===a.appId||(0,C.isAppEnabled)(e.apps.installed,a.appId)),[e.apps.installed]),n=h.get("tab"),o=m[0]?.id??(0,X.throwErr)("User page has no visible tabs; metadata tab should always be visible"),p=n&&bJ(n)&&m.some(a=>a.id===n)?n:o,q=(0,F.useCallback)(a=>{let b=new URLSearchParams(h.toString());b.set("tab",a);let c=b.toString();f.push(c?`${g}?${c}`:g)},[g,f,h]),[s,t]=(0,F.useState)(null),u=m.some(a=>"analytics"===a.id),v=(0,F.useCallback)(a=>{u&&(t(a),q("analytics"))},[u,q]);return(0,b.jsx)(ac.PageLayout,{children:(0,b.jsxs)("div",{className:"relative flex flex-col gap-6",children:[(0,b.jsx)(bk,{user:a}),(0,b.jsxs)("div",{ref:i,className:"flex min-w-0 flex-col gap-6 xl:pr-[164px]",children:[(0,b.jsxs)("div",{className:"flex min-w-0 flex-col gap-4",children:[(0,b.jsx)(bg,{user:a}),(0,b.jsx)(bl,{user:a})]}),m.length>0&&(0,b.jsx)(d.DesignCategoryTabs,{categories:m.map(a=>({id:a.id,label:a.label,icon:null===a.appId?a.icon:B.ALL_APPS_FRONTEND[a.appId].icon})),selectedCategory:p,onSelect:a=>{if(!bJ(a))throw new X.HexclaveAssertionError(`Unknown user page tab selected: ${a}`);q(a)},showBadge:!1,size:"sm",glassmorphic:!1,trailing:(0,b.jsx)(r.Button,{asChild:!0,variant:"ghost",size:"sm",className:"h-8 justify-center gap-1.5 rounded-lg bg-transparent px-1.5 text-[10px] font-semibold uppercase tracking-[0.14em] text-muted-foreground/75 transition-colors duration-150 hover:bg-transparent hover:text-foreground hover:transition-none",children:(0,b.jsxs)(j.Link,{href:`/projects/${encodeURIComponent(c.projectId)}/apps`,className:"inline-flex items-center justify-center",children:[(0,b.jsx)(P.PlusIcon,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{children:"Install apps"})]})})}),"authentication"===p&&(0,b.jsx)(F.Suspense,{fallback:(0,b.jsx)(bK,{sections:3}),children:(0,b.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,b.jsx)(bu,{user:a}),(0,b.jsx)(bz,{user:a}),(0,b.jsx)(bm,{user:a})]})}),"teams"===p&&(0,b.jsx)(F.Suspense,{fallback:(0,b.jsx)(bK,{sections:1}),children:(0,b.jsx)(bx,{user:a})}),"payments"===p&&(0,b.jsx)(F.Suspense,{fallback:(0,b.jsx)(bK,{sections:1}),children:(0,b.jsx)(a6,{user:a})}),"analytics"===p&&(0,b.jsx)(F.Suspense,{fallback:(0,b.jsx)(bK,{sections:1}),children:(0,b.jsx)(aN,{user:a,dayFilter:s,onClearDayFilter:()=>t(null)})}),"session-replays"===p&&(0,b.jsx)(F.Suspense,{fallback:(0,b.jsx)(bK,{sections:1}),children:(0,b.jsx)(bf,{lockedUserId:a.id})}),"metadata"===p&&(0,b.jsx)(k.MetadataSection,{entityName:"user",docsUrl:"https://docs.hexclave.com/guides/getting-started/user-fundamentals#custom-metadata",clientMetadata:a.clientMetadata,clientReadOnlyMetadata:a.clientReadOnlyMetadata,serverMetadata:a.serverMetadata,onUpdateClientMetadata:async b=>{await a.setClientMetadata(b)},onUpdateClientReadOnlyMetadata:async b=>{await a.setClientReadOnlyMetadata(b)},onUpdateServerMetadata:async b=>{await a.setServerMetadata(b)}})]}),(0,b.jsx)(bH,{userId:a.id,onCellClick:v,anchorRef:i})]})})}a.s(["default",0,function({userId:a}){let c=(0,ad.useAdminApp)().useUser(a);return null===c?(0,b.jsx)(ab.AppEnabledGuard,{appId:"authentication",children:(0,b.jsx)(ac.PageLayout,{title:"User Not Found",children:"User Not Found"})}):(0,b.jsx)(ab.AppEnabledGuard,{appId:"authentication",children:(0,b.jsx)(bL,{user:c})})}],152743)}];
|
|
113
|
+
`)})}},...a.isMultiFactorRequired?[{id:"remove-2fa",label:"Remove 2FA",onClick:()=>{(0,Y.runAsynchronouslyWithAlert)(async()=>{await a.update({totpMultiFactorSecret:null})})}}]:[],{id:"restriction",label:bp(a),onClick:()=>{j(!0)}},{id:"delete",label:"Delete",itemVariant:"destructive",onClick:()=>h(!0)}]}),(0,b.jsx)(bq,{user:a,open:i,onOpenChange:j}),(0,b.jsx)(A.DeleteUserDialog,{user:a,open:e,onOpenChange:h,redirectTo:`/projects/${m.projectId}/users`}),(0,b.jsx)(A.ImpersonateUserDialog,{user:a,impersonateSnippet:k,onClose:()=>l(null)})]})]})}function bo(a){let b=a.restrictedReason;if(!b)return"";switch(b.type){case"anonymous":return"Anonymous user";case"email_not_verified":return"Unverified email";case"restricted_by_administrator":return"Manually restricted";default:return"Restricted"}}function bp(a){return a.restrictedByAdmin?"Edit or remove manual restriction":a.isRestricted?"Add manual restriction":"Restrict user"}function bq({user:a,open:c,onOpenChange:d}){let[e,f]=(0,F.useState)(a.restrictedByAdminReason??""),[g,h]=(0,F.useState)(a.restrictedByAdminPrivateDetails??""),[i,j]=(0,F.useState)(!1),[k,l]=(0,F.useState)(null),{toast:m}=(0,z.useToast)(),n=async()=>{let b=e.trim(),c=g.trim();j(!0),l(null);try{await a.update({restrictedByAdmin:!0,restrictedByAdminReason:b.length>0?b:null,restrictedByAdminPrivateDetails:c.length>0?c:null}),m({title:"User restricted",variant:"success"}),d(!1)}catch(b){(0,X.captureError)("user-restriction-save-and-restrict-error",new X.HexclaveAssertionError(`Failed to save and restrict user ${a.id}`,{cause:b})),l(b instanceof Error&&b.message?b.message:"Failed to save the restriction. Please try again.")}finally{j(!1)}},o=async()=>{j(!0),l(null);try{await a.update({restrictedByAdmin:!1,restrictedByAdminReason:null,restrictedByAdminPrivateDetails:null}),m({title:"Restriction removed",variant:"success"}),d(!1)}catch(b){(0,X.captureError)("user-restriction-remove-error",new X.HexclaveAssertionError(`Failed to remove restriction for user ${a.id}`,{cause:b})),l(b instanceof Error&&b.message?b.message:"Failed to remove the restriction. Please try again.")}finally{j(!1)}};return(0,b.jsx)(t.Dialog,{open:c,onOpenChange:b=>{b&&(f(a.restrictedByAdminReason??""),h(a.restrictedByAdminPrivateDetails??""),l(null)),d(b)},children:(0,b.jsxs)(t.DialogContent,{className:"sm:max-w-[500px]",children:[(0,b.jsxs)(t.DialogHeader,{children:[(0,b.jsx)(t.DialogTitle,{children:"User Restriction"}),(0,b.jsx)(t.DialogDescription,{children:a.restrictedByAdmin?"This user is manually restricted. You can update the notes or remove the manual restriction.":"Use a manual restriction to block this user from accessing your app by default. You can optionally provide a public reason shown to the user."})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-4 py-4",children:[(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)("label",{className:"text-sm font-medium",children:"Public reason (shown to user)"}),(0,b.jsx)(u.Input,{value:e,onChange:a=>f(a.target.value),placeholder:"Optional message visible to the user",disabled:i})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)("label",{className:"text-sm font-medium",children:"Private details (internal only, optional)"}),(0,b.jsx)(w.Textarea,{value:g,onChange:a=>h(a.target.value),placeholder:"Internal notes, e.g., which sign-up rule triggered",className:"min-h-[80px]",disabled:i})]})]}),k&&(0,b.jsx)("div",{className:"rounded border border-destructive/40 bg-destructive/10 px-3 py-2 text-sm text-destructive",children:k}),(0,b.jsxs)(t.DialogFooter,{className:"flex-col sm:flex-row gap-2",children:[a.restrictedByAdmin&&(0,b.jsx)(r.Button,{variant:"outline",onClick:o,disabled:i,className:"sm:mr-auto",children:"Remove manual restriction"}),(0,b.jsx)(r.Button,{variant:"outline",onClick:()=>d(!1),disabled:i,children:"Cancel"}),(0,b.jsx)(r.Button,{onClick:n,disabled:i,children:"Save & restrict user"})]})]})})}function br({user:a}){let[c,d]=(0,F.useState)(!1);if(!a.isRestricted)return null;let e=bo(a);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)(p.Alert,{variant:"destructive",className:"mb-4",children:[(0,b.jsx)(Q.ProhibitIcon,{size:16}),(0,b.jsx)(p.AlertTitle,{children:"This user is currently restricted"}),(0,b.jsxs)(p.AlertDescription,{className:"mt-2",children:[(0,b.jsxs)("p",{className:"mb-2",children:["Restricted users cannot access your app by default. This user is restricted because: ",(0,b.jsx)("strong",{children:e}),"."]}),a.restrictedReason?.type==="email_not_verified"&&(0,b.jsx)("p",{className:"text-sm opacity-80",children:"The user needs to verify their email address to remove this restriction."}),a.restrictedReason?.type==="anonymous"&&(0,b.jsx)("p",{className:"text-sm opacity-80",children:"Anonymous users must sign up with credentials to remove this restriction."}),a.restrictedReason?.type==="restricted_by_administrator"&&(0,b.jsxs)("div",{className:"text-sm opacity-80",children:[(0,b.jsx)("p",{children:"This user was manually restricted by an administrator."}),a.restrictedByAdminReason&&(0,b.jsxs)("p",{className:"mt-1",children:[(0,b.jsx)("strong",{children:"Public reason:"})," ",a.restrictedByAdminReason]}),a.restrictedByAdminPrivateDetails&&(0,b.jsxs)("p",{className:"mt-1",children:[(0,b.jsx)("strong",{children:"Private details:"})," ",a.restrictedByAdminPrivateDetails]})]}),(0,b.jsx)(r.Button,{variant:"outline",size:"sm",onClick:()=>d(!0),className:"mt-3",children:bp(a)})]})]}),(0,b.jsx)(bq,{user:a,open:c,onOpenChange:d})]})}function bs({user:a}){let c=(0,F.useMemo)(()=>[{type:"text",icon:(0,b.jsx)(O.HashIcon,{size:14}),name:"User ID",value:a.id,readOnly:!0},{type:"text",icon:(0,b.jsx)(M.EnvelopeIcon,{size:14}),name:"Primary email",value:a.primaryEmail??"",placeholder:"-",readOnly:!0},{type:"text",icon:(0,b.jsx)(I,{size:14}),name:"Display name",value:a.displayName??"",placeholder:"-",onUpdate:async b=>{await a.setDisplayName(b)}},{type:"text",icon:(0,b.jsx)(S.SquareIcon,{size:14}),name:"Password",value:"",placeholder:a.hasPassword?"************":"-",onUpdate:async b=>{await a.setPassword({password:b})}},{type:"text",icon:(0,b.jsx)(R.ShieldIcon,{size:14}),name:"2-factor auth",value:a.isMultiFactorRequired?"Enabled":"",placeholder:"Disabled",readOnly:!0},{type:"text",icon:(0,b.jsx)(J.CalendarIcon,{size:14}),name:"Signed up at",value:a.signedUpAt.toDateString(),readOnly:!0}],[a]);return(0,b.jsx)(e.DesignEditableGrid,{items:c,columns:2,size:"sm",deferredSave:!1})}function bt({user:a}){let[c,d]=(0,F.useState)(!1),f=(0,F.useMemo)(()=>[{type:"custom",icon:(0,b.jsx)(Q.ProhibitIcon,{size:14}),name:"Manual restriction",children:(0,b.jsx)("span",{className:(0,s.cn)("text-sm",a.restrictedByAdmin?"font-medium text-destructive":"text-muted-foreground"),children:a.restrictedByAdmin?"Restricted by admin":a.isRestricted?`Not manually restricted (${bo(a)})`:"Not restricted"})},{type:"text",icon:(0,b.jsx)(R.ShieldIcon,{size:14}),name:"Risk score: bot",value:String(a.riskScores.signUp.bot),onUpdate:async b=>{await a.update({riskScores:{signUp:{bot:(0,D.parseRiskScore)(b),freeTrialAbuse:a.riskScores.signUp.freeTrialAbuse}}})}},{type:"text",icon:(0,b.jsx)(R.ShieldIcon,{size:14}),name:"Risk score: free trial abuse",value:String(a.riskScores.signUp.freeTrialAbuse),onUpdate:async b=>{await a.update({riskScores:{signUp:{bot:a.riskScores.signUp.bot,freeTrialAbuse:(0,D.parseRiskScore)(b)}}})}},{type:"text",icon:(0,b.jsx)(N.GlobeIcon,{size:14}),name:"Sign-up country code",value:a.countryCode??"",placeholder:"-",normalizeInput:a=>a.toUpperCase().replace(/[^A-Z]/g,"").slice(0,2),onUpdate:async b=>{await a.update({countryCode:b.length>0?(0,V.normalizeCountryCode)(b):null})}}],[a]);return(0,b.jsxs)("section",{className:"flex flex-col gap-3",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,b.jsx)("h2",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"Fraud"}),(0,b.jsx)(r.Button,{variant:a.restrictedByAdmin?"outline":"destructive",size:"sm",onClick:()=>d(!0),children:bp(a)})]}),(0,b.jsx)(e.DesignEditableGrid,{items:f,columns:2,size:"sm",deferredSave:!1}),(0,b.jsx)(bq,{user:a,open:c,onOpenChange:d})]})}function bu({value:a,showFalseIcon:c=!0}){return(0,b.jsxs)("div",{className:"flex justify-center",children:[(0,b.jsx)("span",{className:"sr-only",children:a?"Yes":"No"}),a?(0,b.jsx)(K.CheckIcon,{"aria-hidden":!0,className:"mx-auto h-4 w-4 text-green-500"}):c?(0,b.jsx)(T.XIcon,{"aria-hidden":!0,className:"mx-auto h-4 w-4 text-muted-foreground"}):null]})}function bv({user:a,open:c,onOpenChange:d}){let e=aa.object({email:aa.string().email("Please enter a valid e-mail address").defined("E-mail is required").label("E-mail").meta({stackFormFieldPlaceholder:"Enter e-mail address"}),isVerified:aa.boolean().default(!1).label("Set as verified").meta({description:"E-mails verified by verification emails. Can be used for OTP/magic links"}),isPrimary:aa.boolean().default(!1).label("Set as primary").meta({description:"Make this the primary e-mail for the user"}),isUsedForAuth:aa.boolean().default(!1).label("Used for sign-in").meta({description:"Allow this e-mail to be used for password sign-in. Also enables OTP/magic links if the e-mail is verified."})});return(0,b.jsx)(h.SmartFormDialog,{title:"Add E-mail",description:"Add a new e-mail address to this user account.",open:c,onOpenChange:d,formSchema:e,onSubmit:async b=>{b.email.trim()&&await a.createContactChannel({type:"email",value:b.email.trim(),isVerified:b.isVerified,isPrimary:b.isPrimary,usedForAuth:b.isUsedForAuth})}})}function bw({control:a,watch:c,domains:d,allowLocalhost:e}){return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(i.SelectField,{control:a,name:"selected",label:"Domain",options:[...d.map((a,b)=>({value:b.toString(),label:a.domain})),...e?[{value:"localhost",label:"localhost"}]:[]]}),"localhost"===c("selected")&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(i.InputField,{control:a,name:"localhostPort",label:"Localhost Port",placeholder:"3000",type:"number"}),(0,b.jsx)(m.Accordion,{type:"single",collapsible:!0,className:"w-full",children:(0,b.jsxs)(m.AccordionItem,{value:"item-1",children:[(0,b.jsx)(m.AccordionTrigger,{children:"Advanced"}),(0,b.jsx)(m.AccordionContent,{className:"flex flex-col gap-8",children:(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)(i.InputField,{label:"Handler path",name:"handlerPath",control:a,placeholder:"/handler"}),(0,b.jsx)(y.Typography,{variant:"secondary",type:"footnote",children:"Only modify this if you changed the default handler path in your app"})]})})]})})]})]})}function bx({title:a,description:c,open:d,onOpenChange:e,endpointPath:f,onSubmit:g}){let i=(0,ad.useAdminApp)().useProject(),j=i.config.domains;return(0,b.jsx)(h.FormDialog,{title:a,description:c,open:d,onOpenChange:e,formSchema:aa.object({selected:aa.string().defined(),localhostPort:aa.number().test("required-if-localhost","Required if localhost is selected",(a,b)=>"localhost"!==b.parent.selected||void 0!==a),handlerPath:aa.string().optional()}),okButton:{label:"Send"},render:({control:a,watch:c})=>(0,b.jsx)(bw,{control:a,watch:c,domains:j,allowLocalhost:i.config.allowLocalhost}),onSubmit:async a=>{let b,c;if("localhost"===a.selected)b=`http://localhost:${a.localhostPort}`,c=a.handlerPath||"/handler";else{let d=j[parseInt(a.selected)];b=d.domain,c=d.handlerPath}let d=new URL(c.replace(/\/?$/,"/")+f.replace(/^\//,""),b).toString();await g(d)}})}function by({channel:a,open:c,onOpenChange:d}){return(0,b.jsx)(bx,{title:"Send Verification Email",description:`Send a verification email to ${a.value}? The email will contain a callback link to your domain.`,open:c,onOpenChange:d,endpointPath:"/email-verification",onSubmit:async b=>{await a.sendVerificationEmail({callbackUrl:b})}})}function bz({channel:a,open:c,onOpenChange:d}){let e=(0,ad.useAdminApp)();return(0,b.jsx)(bx,{title:"Send Reset Password Email",description:`Send a password reset email to ${a.value}? The email will contain a callback link to your domain.`,open:c,onOpenChange:d,endpointPath:"/password-reset",onSubmit:async b=>{await e.sendForgotPasswordEmail(a.value,{callbackUrl:b})}})}function bA({channel:a,open:c,onOpenChange:d}){let e=(0,ad.useAdminApp)();return(0,b.jsx)(bx,{title:"Send Sign-In Invitation",description:`Send a sign-in invitation email to ${a.value}? The email will contain a callback link to your domain.`,open:c,onOpenChange:d,endpointPath:"/sign-in",onSubmit:async b=>{await e.sendSignInInvitationEmail(a.value,b)}})}function bB({user:a}){let c=(0,ad.useAdminApp)().useProject(),d=a.useContactChannels(),[e,f]=(0,F.useState)(!1),[g,h]=(0,F.useState)(null),[i,j]=(0,F.useState)(null),[k,l]=(0,F.useState)(null),m=async a=>{await a.update({usedForAuth:!a.usedForAuth})},o=async a=>{await a.update({isVerified:!a.isVerified})},p=async a=>{await a.update({isPrimary:!0})},q=(0,F.useMemo)(()=>[{id:"value",accessor:"value",header:"E-Mail",width:220,flex:1,sortable:!1},{id:"isPrimary",header:"Primary",width:90,align:"center",sortable:!1,renderCell:({row:a})=>(0,b.jsx)(bu,{value:a.isPrimary,showFalseIcon:!1})},{id:"isVerified",header:"Verified",width:90,align:"center",sortable:!1,renderCell:({row:a})=>(0,b.jsx)(bu,{value:a.isVerified})},{id:"usedForAuth",header:"Used for sign-in",width:140,align:"center",sortable:!1,renderCell:({row:a})=>(0,b.jsx)(bu,{value:a.usedForAuth})},{id:"actions",header:"",width:56,minWidth:56,maxWidth:56,sortable:!1,hideable:!1,resizable:!1,align:"right",renderCell:({row:a})=>(0,b.jsx)("div",{className:"flex justify-end",children:(0,b.jsx)(n.ActionCell,{items:[{item:"Send sign-in invitation",onClick:async()=>{l({channel:a,isOpen:!0})}},...a.isVerified?[]:[{item:"Send verification email",onClick:async()=>{h({channel:a,isOpen:!0})}}],...c.config.credentialEnabled?[{item:"Send reset password email",onClick:async()=>{j({channel:a,isOpen:!0})}}]:[],{item:a.isVerified?"Mark as unverified":"Mark as verified",onClick:()=>{(0,Y.runAsynchronouslyWithAlert)(()=>o(a))}},...a.isPrimary?[]:[{item:"Set as primary",onClick:()=>{(0,Y.runAsynchronouslyWithAlert)(()=>p(a))}}],{item:a.usedForAuth?"Disable for sign-in":"Enable for sign-in",onClick:()=>{(0,Y.runAsynchronouslyWithAlert)(()=>m(a))}},{item:"Delete",danger:!0,onClick:()=>{(0,Y.runAsynchronouslyWithAlert)(()=>a.delete())}}]})})}],[c.config.credentialEnabled]);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(bv,{user:a,open:e,onOpenChange:f}),g&&(0,b.jsx)(by,{channel:g.channel,open:g.isOpen,onOpenChange:a=>{a||h(null)}}),i&&(0,b.jsx)(bz,{channel:i.channel,open:i.isOpen,onOpenChange:a=>{a||j(null)}}),k&&(0,b.jsx)(bA,{channel:k.channel,open:k.isOpen,onOpenChange:a=>{a||l(null)}}),(0,b.jsx)(au.UserPageTableSection,{title:"Contact Channels",urlStateKey:"contactch",columns:q,rows:d,getRowId:a=>a.id,emptyLabel:"No contact channels",actions:(0,b.jsx)(r.Button,{variant:"outline",size:"sm",onClick:()=>f(!0),children:"Add E-mail"})})]})}function bC(){return(0,b.jsx)("div",{className:"flex items-center",children:Array.from({length:3}).map((a,c)=>(0,b.jsx)(v.Skeleton,{className:"h-7 w-7 rounded-full border-2 border-background",style:{marginLeft:0===c?0:-10}},c))})}function bD({team:a,onMemberClick:c}){let d=a.useUsers();if(0===d.length)return(0,b.jsx)("span",{className:"text-xs text-muted-foreground",children:"No members"});let e=d.slice(0,3),f=d.length-e.length;return(0,b.jsxs)("div",{className:"group/avatars flex items-center",onClick:a=>a.stopPropagation(),children:[e.map((a,d)=>{let f=a.displayName??a.primaryEmail??a.id;return(0,b.jsxs)(x.Tooltip,{delayDuration:0,children:[(0,b.jsx)(x.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button","aria-label":`View ${f}`,onClick:b=>{b.stopPropagation(),c(a.id)},className:(0,s.cn)("relative rounded-full transition-[margin,transform] duration-200 ease-out hover:z-20 hover:scale-110 focus:z-20 focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",0===d?"ml-0":"-ml-2.5 group-hover/avatars:ml-1"),style:{zIndex:e.length-d},children:(0,b.jsxs)(q.Avatar,{className:"h-7 w-7 border-2 border-background",children:[(0,b.jsx)(q.AvatarImage,{src:a.profileImageUrl??void 0,alt:f}),(0,b.jsx)(q.AvatarFallback,{className:"text-[10px]",children:f.slice(0,2).toUpperCase()})]})})}),(0,b.jsx)(x.TooltipContent,{side:"top",className:"text-xs",children:f})]},a.id)}),f>0&&(0,b.jsxs)("div",{className:"-ml-2.5 group-hover/avatars:ml-1 transition-[margin] duration-200 ease-out flex h-7 min-w-7 items-center justify-center rounded-full border-2 border-background bg-muted px-1.5 text-[10px] font-medium text-muted-foreground","aria-label":`${f} more members`,children:["+",f]})]})}function bE({user:a}){let d=(0,ad.useAdminApp)(),e=(0,l.useRouter)(),[f,g]=(0,F.useState)(void 0),h=a.useTeams(void 0===f?void 0:{orderBy:"createdAt",desc:f}),[i,j]=(0,F.useState)(!1),[k,m]=(0,F.useState)(null),p=(0,F.useCallback)(a=>{e.push(`/projects/${encodeURIComponent(d.projectId)}/teams/${encodeURIComponent(a)}`)},[e,d.projectId]),q=(0,F.useCallback)(a=>{e.push(`/projects/${encodeURIComponent(d.projectId)}/users/${encodeURIComponent(a)}`)},[e,d.projectId]),s=(0,F.useMemo)(()=>[{id:"id",accessor:"id",header:"Team ID",width:180,sortable:!1,renderCell:({row:a})=>(0,b.jsx)("div",{className:"font-mono text-xs bg-muted px-2 py-1 rounded max-w-[180px] truncate",children:a.id})},{id:"displayName",accessor:"displayName",header:"Display Name",width:220,flex:1,sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"font-medium",children:a.displayName||"-"})},{id:"members",header:"Members",width:160,sortable:!1,renderCell:({row:a})=>(0,b.jsx)(F.Suspense,{fallback:(0,b.jsx)(bC,{}),children:(0,b.jsx)(bD,{team:a,onMemberClick:q})})},{id:"createdAt",accessor:"createdAt",header:"Created At",width:140,sortable:!0,renderCell:({row:a})=>(0,b.jsx)("span",{className:"text-sm text-muted-foreground",children:a.createdAt.toLocaleDateString()})},{id:"actions",header:"",width:56,minWidth:56,maxWidth:56,sortable:!1,hideable:!1,resizable:!1,align:"right",renderCell:({row:a})=>(0,b.jsx)("div",{className:"flex justify-end",children:(0,b.jsx)(n.ActionCell,{items:[{item:"View Team",onClick:()=>{p(a.id)}},{item:"Remove from team",danger:!0,onClick:()=>{m(a)}}]})})}],[p,q]);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(au.UserPageTableSection,{title:"Teams",urlStateKey:"userteams",columns:s,rows:h,getRowId:a=>a.id,emptyLabel:"No teams found",onRowClick:a=>p(a.id),onSortChange:a=>{let b=a.find(a=>"createdAt"===a.columnId);g(b?"desc"===b.direction:void 0)},actions:(0,b.jsx)(r.Button,{variant:"outline",size:"sm",onClick:()=>j(!0),children:"Add to team"})}),(0,b.jsx)(t.Dialog,{open:i,onOpenChange:j,children:(0,b.jsxs)(t.DialogContent,{className:"sm:max-w-2xl",children:[(0,b.jsx)(t.DialogHeader,{className:"mb-4",children:(0,b.jsx)(t.DialogTitle,{children:"Add to team"})}),(0,b.jsx)(c.TeamSearchTable,{action:c=>{let d=void 0!==h.find(a=>a.id===c.id);return(0,b.jsx)(r.Button,{variant:"outline",size:"sm",disabled:d,onClick:()=>{(0,Y.runAsynchronouslyWithAlert)(async()=>{await c.addUser(a.id),j(!1)})},children:d?"Added":"Add"})}})]})}),(0,b.jsx)(o.ActionDialog,{title:!0,danger:!0,open:null!==k,onOpenChange:a=>{a||m(null)},okButton:{label:"Remove user from team",onClick:async()=>{(0,Y.runAsynchronouslyWithAlert)(async()=>{k&&await k.removeUser(a.id)})}},cancelButton:!0,confirmText:"I understand this will cause the user to lose access to the team.",children:k&&`Are you sure you want to remove "${a.displayName??a.id}" from the team "${k.displayName}"?`})]})}function bF(a){let c=(0,ad.useAdminApp)(),d=c.useProject(),{toast:e}=(0,z.useToast)(),f=d.config.oauthProviders,g="edit"===a.mode,j=g?a.provider:null,k=aa.object({providerId:aa.string().defined("Provider is required").nonEmpty("Provider is required").label("OAuth Provider").meta({stackFormFieldRender:a=>(0,b.jsx)(i.SelectField,{control:a.control,name:a.name,label:a.label,disabled:a.disabled||g,options:f.map(a=>({value:a.id,label:a.id.charAt(0).toUpperCase()+a.id.slice(1)})),placeholder:"Select OAuth provider"})}),email:aa.string().email("Please enter a valid e-mail address").optional().label("Email").meta({stackFormFieldPlaceholder:"Enter email address (optional)"}),accountId:aa.string().defined("Account ID is required").label("Account ID").meta({stackFormFieldPlaceholder:"Enter OAuth account ID",description:"The unique account identifier from the OAuth provider",stackFormFieldExtraProps:{disabled:g}}),allowSignIn:aa.boolean().default(!0).label("Used for sign-in").meta({description:"Allow this OAuth provider to be used for authentication"}),allowConnectedAccounts:aa.boolean().default(!0).label("Used for connected accounts").meta({description:"Allow this OAuth provider to be used for connected account features"})}),l=g&&j?{providerId:j.type,email:j.email,accountId:j.accountId,allowSignIn:j.allowSignIn,allowConnectedAccounts:j.allowConnectedAccounts}:{providerId:"",email:"",accountId:"",allowSignIn:!0,allowConnectedAccounts:!0},m=async b=>{let d;if(g&&j)d=await j.update({email:b.email?.trim()||j.email,allowSignIn:b.allowSignIn,allowConnectedAccounts:b.allowConnectedAccounts});else{if(!b.accountId.trim())return;let e=f.find(a=>a.id===b.providerId);if(!e)throw new X.HexclaveAssertionError(`Provider config not found for ${b.providerId}`);d=await c.createOAuthProvider({userId:a.user.id,providerConfigId:e.id,accountId:b.accountId.trim(),email:b.email?.trim()||"",allowSignIn:b.allowSignIn,allowConnectedAccounts:b.allowConnectedAccounts})}if("error"===d.status){let a=g&&j?j.type:b.providerId,c=g&&j?j.accountId:b.accountId,f=g?"updating":"adding";return U.KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn.isInstance(d.error)?e({title:"Account Already Connected",description:`A ${a} provider with account ID "${c}" already exists (possibly for a different user)`,variant:"destructive"}):(console.error(d.error),e({title:"Error",description:`An unexpected error occurred while ${f} the OAuth provider.`,variant:"destructive"})),"prevent-close"}},n=k.default(l);return(0,b.jsx)(h.SmartFormDialog,{title:g?"Edit OAuth Provider":"Add OAuth Provider",description:g?"Update the OAuth provider settings.":"Connect a new OAuth provider to this user account.",open:a.open,onOpenChange:a.onOpenChange,formSchema:n,onSubmit:m})}function bG({user:a}){let c=a.useOAuthProviders(),[d,e]=(0,F.useState)(!1),[f,g]=(0,F.useState)(null),{toast:h}=(0,z.useToast)(),i=(0,F.useCallback)(async(a,b)=>{let c=await a.update(b);if("error"===c.status)if(U.KnownErrors.OAuthProviderAccountIdAlreadyUsedForSignIn.isInstance(c.error))h({title:"Account Already Connected",description:`A ${a.type} provider with account ID "${a.accountId}" is already connected for this user.`,variant:"destructive"});else{let a=void 0!==b.allowSignIn?"sign-in":"connected accounts";h({title:"Error",description:`Failed to update ${a} setting.`,variant:"destructive"})}else{let c="";void 0!==b.allowSignIn?c=`Sign-in ${b.allowSignIn?"enabled":"disabled"} for ${a.type} provider.`:void 0!==b.allowConnectedAccounts&&(c=`Connected accounts ${b.allowConnectedAccounts?"enabled":"disabled"} for ${a.type} provider.`),h({title:"Success",description:c,variant:"success"})}},[h]),j=(0,F.useMemo)(()=>[{id:"type",accessor:"type",header:"Provider",width:110,sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"capitalize font-medium",children:a.type})},{id:"email",accessor:"email",header:"Email",width:160,flex:1,sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"block max-w-full truncate text-sm text-muted-foreground",title:a.email,children:a.email??"No email"})},{id:"accountId",accessor:"accountId",header:"Account ID",width:160,flex:1,sortable:!1,renderCell:({row:a})=>(0,b.jsx)("span",{className:"font-mono text-xs truncate block max-w-[160px]",children:a.accountId})},{id:"allowSignIn",header:"Sign-in",width:90,align:"center",sortable:!1,renderCell:({row:a})=>(0,b.jsx)(bu,{value:a.allowSignIn})},{id:"allowConnectedAccounts",header:"Connected",width:110,align:"center",sortable:!1,renderCell:({row:a})=>(0,b.jsx)(bu,{value:a.allowConnectedAccounts})},{id:"actions",header:"",width:56,minWidth:56,maxWidth:56,sortable:!1,hideable:!1,resizable:!1,align:"right",renderCell:({row:a})=>(0,b.jsx)("div",{className:"flex justify-end",children:(0,b.jsx)(n.ActionCell,{items:[{item:"Edit",onClick:()=>g(a)},{item:a.allowSignIn?"Disable sign-in":"Enable sign-in",onClick:async()=>{await i(a,{allowSignIn:!a.allowSignIn})}},{item:a.allowConnectedAccounts?"Disable connected accounts":"Enable connected accounts",onClick:async()=>{await i(a,{allowConnectedAccounts:!a.allowConnectedAccounts})}},{item:"Delete",danger:!0,onClick:async()=>{await a.delete()}}]})})}],[i]);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(bF,{user:a,open:d,onOpenChange:e,mode:"create"}),f&&(0,b.jsx)(bF,{user:a,open:!!f,onOpenChange:()=>g(null),mode:"edit",provider:f}),(0,b.jsx)(au.UserPageTableSection,{title:"OAuth Providers",urlStateKey:"useroauth",columns:j,rows:c,getRowId:a=>a.id,emptyLabel:"No OAuth providers connected",actions:(0,b.jsx)(r.Button,{variant:"outline",size:"sm",onClick:()=>e(!0),children:"Add Provider"})})]})}let bH=[{label:"",ariaLabel:null},{label:"M",ariaLabel:"Monday"},{label:"",ariaLabel:null},{label:"W",ariaLabel:"Wednesday"},{label:"",ariaLabel:null},{label:"F",ariaLabel:"Friday"},{label:"",ariaLabel:null}],bI=["bg-foreground/[0.08] dark:bg-foreground/[0.12]","bg-emerald-500/30 dark:bg-emerald-400/30","bg-emerald-500/55 dark:bg-emerald-400/55","bg-emerald-500/80 dark:bg-emerald-400/80","bg-emerald-500 dark:bg-emerald-400"],bJ=new Intl.DateTimeFormat(void 0,{weekday:"short",month:"short",day:"numeric",year:"numeric",timeZone:"UTC"});function bK(a){let[b,c,d]=a.split("-").map(Number),e=new Date(Date.UTC(b,c-1,d));return bJ.format(e)}function bL({children:a}){return(0,b.jsxs)("div",{className:"flex flex-col items-center gap-2 shrink-0",children:[(0,b.jsx)("span",{className:"text-[11px] font-medium text-muted-foreground tracking-[0.14em] uppercase",children:"Activity"}),(0,b.jsx)("div",{className:"grid text-[9px] leading-none text-muted-foreground/70",style:{gap:2,gridTemplateColumns:"repeat(7, 11px)"},children:bH.map((a,c)=>(0,b.jsx)("span",{className:"flex justify-center","aria-label":a.ariaLabel??void 0,"aria-hidden":null==a.ariaLabel,style:{width:11},children:a.label},`${a.ariaLabel??"spacer"}-${c}`))}),(0,b.jsx)("div",{className:"grid",style:{gap:2,gridTemplateColumns:"repeat(7, 11px)",gridTemplateRows:"repeat(53, 11px)",gridAutoFlow:"row"},children:a})]})}function bM(){let a=(0,F.useMemo)(()=>Array.from({length:371}),[]);return(0,b.jsx)(bL,{children:a.map((a,c)=>(0,b.jsx)("div",{className:(0,s.cn)("rounded-[2px]",bI[0]),style:{width:11,height:11},"aria-hidden":!0},c))})}function bN({userId:a,onCellClick:c}){let d=(0,ad.useAdminApp)(),{data_points:e}=(0,E.useUserActivityOrThrow)(d,a),f=(0,F.useMemo)(()=>new Map(e.map(a=>[a.date,a.activity])),[e]),g=(0,F.useMemo)(()=>{let a,b,c=((a=new Date(e.length>0?function(a){let[b,c,d]=a.split("-").map(Number);return new Date(Date.UTC(b,c-1,d))}(e[e.length-1].date):new Date)).setUTCHours(0,0,0,0),b=a.getUTCDay(),a.setUTCDate(a.getUTCDate()-b),a);return Array.from({length:371},(a,b)=>{let d=Math.floor(b/7),e=new Date(c);e.setUTCDate(c.getUTCDate()-7*d+b%7);let g=e.toISOString().slice(0,10);return{date:g,activity:f.get(g)??0}})},[f,e]),h=(0,F.useMemo)(()=>g.reduce((a,b)=>Math.max(a,b.activity),0),[g]);return(0,b.jsx)(bL,{children:g.map(a=>{let d=function(a,b){if(a<=0||b<=0)return 0;let c=Math.log1p(a)/Math.log1p(b);return c<=.25?1:c<=.5?2:c<=.75?3:4}(a.activity,h);return(0,b.jsxs)(x.Tooltip,{delayDuration:0,children:[(0,b.jsx)(x.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button","aria-label":`View analytics for ${bK(a.date)} (${a.activity} ${1===a.activity?"event":"events"})`,onClick:()=>c(a.date),className:(0,s.cn)("relative rounded-[2px] transition-none hover:z-10 hover:ring-2 hover:ring-foreground focus:z-10 focus:outline-none focus-visible:ring-2 focus-visible:ring-foreground cursor-pointer",bI[d]),style:{width:11,height:11}})}),(0,b.jsxs)(x.TooltipContent,{side:"left",sideOffset:8,collisionPadding:8,className:"z-[100] whitespace-nowrap text-xs",children:[(0,b.jsxs)("div",{className:"font-medium",children:[a.activity," ",1===a.activity?"event":"events"]}),(0,b.jsx)("div",{className:"opacity-70",children:bK(a.date)})]})]},a.date)})})}function bO({userId:a,onCellClick:c,anchorRef:d}){let[e,f]=(0,F.useState)(!1),[g,h]=(0,F.useState)(null);return((0,F.useEffect)(()=>{f(!0)},[]),(0,F.useEffect)(()=>{let a=()=>{let a=d.current;null===a||h(a.getBoundingClientRect().right-164+12)};a(),window.addEventListener("resize",a);let b=new ResizeObserver(a);return null!==d.current&&b.observe(d.current),()=>{window.removeEventListener("resize",a),b.disconnect()}},[d]),e&&null!==g)?(0,_.createPortal)((0,b.jsx)("aside",{className:"pointer-events-none fixed z-30 hidden -translate-y-1/2 xl:block",style:{left:g,width:140,top:`max(50vh, ${455.5}px)`},children:(0,b.jsx)("div",{className:"pointer-events-auto flex w-full items-center justify-center",children:(0,b.jsx)(F.Suspense,{fallback:(0,b.jsx)(bM,{}),children:(0,b.jsx)(bN,{userId:a,onCellClick:c})})})}),document.body):null}let bP=[{id:"authentication",label:"Authentication",appId:"authentication"},{id:"teams",label:"Teams",appId:"teams"},{id:"emails",label:"Emails",appId:"emails"},{id:"payments",label:"Payments",appId:"payments"},{id:"analytics",label:"Analytics",appId:"analytics"},{id:"session-replays",label:"Session Replays",appId:"session-replays"},{id:"metadata",label:"Metadata",appId:null,icon:L.DatabaseIcon}];function bQ(a){return bP.some(b=>b.id===a)}function bR({sections:a}){return(0,b.jsx)("div",{className:"flex flex-col gap-6",children:Array.from({length:a}).map((a,c)=>(0,b.jsxs)("section",{className:"flex flex-col gap-3",children:[(0,b.jsx)(v.Skeleton,{className:"h-4 w-32"}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)(v.Skeleton,{className:"h-11 w-full"}),(0,b.jsx)(v.Skeleton,{className:"h-11 w-full"}),(0,b.jsx)(v.Skeleton,{className:"h-11 w-full"})]})]},c))})}function bS({user:a}){let c=(0,ad.useAdminApp)(),e=c.useProject().useConfig(),f=(0,l.useRouter)(),g=(0,$.usePathname)(),h=(0,$.useSearchParams)(),i=(0,F.useRef)(null),m=(0,F.useMemo)(()=>bP.filter(a=>null===a.appId||(0,C.isAppEnabled)(e.apps.installed,a.appId)),[e.apps.installed]),n=h.get("tab"),o=m[0]?.id??(0,X.throwErr)("User page has no visible tabs; metadata tab should always be visible"),p=n&&bQ(n)&&m.some(a=>a.id===n)?n:o,q=(0,F.useCallback)(a=>{let b=new URLSearchParams(h.toString());b.set("tab",a);let c=b.toString();f.push(c?`${g}?${c}`:g)},[g,f,h]),[s,t]=(0,F.useState)(null),u=m.some(a=>"analytics"===a.id),v=(0,F.useCallback)(a=>{u&&(t(a),q("analytics"))},[u,q]);return(0,b.jsx)(ac.PageLayout,{children:(0,b.jsxs)("div",{className:"relative flex flex-col gap-6",children:[(0,b.jsx)(br,{user:a}),(0,b.jsxs)("div",{ref:i,className:"flex min-w-0 flex-col gap-6 xl:pr-[164px]",children:[(0,b.jsxs)("div",{className:"flex min-w-0 flex-col gap-4",children:[(0,b.jsx)(bn,{user:a}),(0,b.jsx)(bs,{user:a})]}),m.length>0&&(0,b.jsx)(d.DesignCategoryTabs,{categories:m.map(a=>({id:a.id,label:a.label,icon:null===a.appId?a.icon:B.ALL_APPS_FRONTEND[a.appId].icon})),selectedCategory:p,onSelect:a=>{if(!bQ(a))throw new X.HexclaveAssertionError(`Unknown user page tab selected: ${a}`);q(a)},showBadge:!1,size:"sm",glassmorphic:!1,trailing:(0,b.jsx)(r.Button,{asChild:!0,variant:"ghost",size:"sm",className:"h-8 justify-center gap-1.5 rounded-lg bg-transparent px-1.5 text-[10px] font-semibold uppercase tracking-[0.14em] text-muted-foreground/75 transition-colors duration-150 hover:bg-transparent hover:text-foreground hover:transition-none",children:(0,b.jsxs)(j.Link,{href:`/projects/${encodeURIComponent(c.projectId)}/apps`,className:"inline-flex items-center justify-center",children:[(0,b.jsx)(P.PlusIcon,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{children:"Install apps"})]})})}),"authentication"===p&&(0,b.jsx)(F.Suspense,{fallback:(0,b.jsx)(bR,{sections:3}),children:(0,b.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,b.jsx)(bB,{user:a}),(0,b.jsx)(bG,{user:a}),(0,b.jsx)(bt,{user:a})]})}),"teams"===p&&(0,b.jsx)(F.Suspense,{fallback:(0,b.jsx)(bR,{sections:1}),children:(0,b.jsx)(bE,{user:a})}),"emails"===p&&(0,b.jsx)(F.Suspense,{fallback:(0,b.jsx)(bR,{sections:1}),children:(0,b.jsx)(bl,{user:a})}),"payments"===p&&(0,b.jsx)(F.Suspense,{fallback:(0,b.jsx)(bR,{sections:1}),children:(0,b.jsx)(a6,{user:a})}),"analytics"===p&&(0,b.jsx)(F.Suspense,{fallback:(0,b.jsx)(bR,{sections:1}),children:(0,b.jsx)(aN,{user:a,dayFilter:s,onClearDayFilter:()=>t(null)})}),"session-replays"===p&&(0,b.jsx)(F.Suspense,{fallback:(0,b.jsx)(bR,{sections:1}),children:(0,b.jsx)(bm,{lockedUserId:a.id})}),"metadata"===p&&(0,b.jsx)(k.MetadataSection,{entityName:"user",docsUrl:"https://docs.hexclave.com/guides/getting-started/user-fundamentals#custom-metadata",clientMetadata:a.clientMetadata,clientReadOnlyMetadata:a.clientReadOnlyMetadata,serverMetadata:a.serverMetadata,onUpdateClientMetadata:async b=>{await a.setClientMetadata(b)},onUpdateClientReadOnlyMetadata:async b=>{await a.setClientReadOnlyMetadata(b)},onUpdateServerMetadata:async b=>{await a.setServerMetadata(b)}})]}),(0,b.jsx)(bO,{userId:a.id,onCellClick:v,anchorRef:i})]})})}a.s(["default",0,function({userId:a}){let c=(0,ad.useAdminApp)().useUser(a);return null===c?(0,b.jsx)(ab.AppEnabledGuard,{appId:"authentication",children:(0,b.jsx)(ac.PageLayout,{title:"User Not Found",children:"User Not Found"})}):(0,b.jsx)(ab.AppEnabledGuard,{appId:"authentication",children:(0,b.jsx)(bS,{user:c})})}],152743)}];
|
|
114
114
|
|
|
115
115
|
//# sourceMappingURL=15dq_%28main%29_%28protected%29_projects_%5BprojectId%5D_users_%5BuserId%5D_page-client_tsx_0ptfo2h._.js.map
|