@wopr-network/platform-ui-core 1.27.7 → 1.27.9
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/next.config.ts +1 -2
- package/package.json +17 -17
- package/src/__tests__/account-switcher.test.tsx +21 -20
- package/src/__tests__/activity-page.test.tsx +2 -6
- package/src/__tests__/add-payment-method-dialog.test.tsx +9 -32
- package/src/__tests__/admin-api.test.ts +1 -6
- package/src/__tests__/admin-gpu-api.test.ts +1 -3
- package/src/__tests__/admin-marketplace-api.test.ts +1 -4
- package/src/__tests__/admin-middleware.test.ts +76 -83
- package/src/__tests__/affiliate-dashboard.test.tsx +3 -3
- package/src/__tests__/api-401-redirect.test.ts +46 -9
- package/src/__tests__/api-client.test.ts +3 -5
- package/src/__tests__/api-config.test.ts +22 -42
- package/src/__tests__/api-fleet-resources.test.ts +1 -2
- package/src/__tests__/api-fleet-trpc.test.ts +2 -8
- package/src/__tests__/api-null-guards.test.ts +3 -1
- package/src/__tests__/audit-log-table-pagination.test.tsx +2 -6
- package/src/__tests__/auth-password-reset.test.tsx +7 -21
- package/src/__tests__/auth-redirect.test.tsx +8 -2
- package/src/__tests__/auth.test.tsx +25 -23
- package/src/__tests__/auto-topup-card.test.tsx +4 -12
- package/src/__tests__/backups-tab.test.tsx +3 -4
- package/src/__tests__/billing-layout-nav-hidden.test.tsx +5 -37
- package/src/__tests__/billing-payment-org-invoices.test.tsx +2 -18
- package/src/__tests__/billing.test.tsx +8 -39
- package/src/__tests__/bot-settings/resources-tab.test.tsx +1 -3
- package/src/__tests__/bot-settings/storage-tab.test.tsx +1 -3
- package/src/__tests__/bot-settings/vps-upgrade-card.test.tsx +1 -3
- package/src/__tests__/bot-settings-restart.test.tsx +1 -3
- package/src/__tests__/bot-settings.test.tsx +2 -6
- package/src/__tests__/brand.test.ts +6 -26
- package/src/__tests__/buy-credits-panel.test.tsx +1 -3
- package/src/__tests__/buy-crypto-credits-panel.test.tsx +101 -119
- package/src/__tests__/capability-conflicts.test.ts +2 -8
- package/src/__tests__/capability-resolver.test.tsx +2 -12
- package/src/__tests__/channel-wizard.test.tsx +4 -17
- package/src/__tests__/chat/chat-panel.test.tsx +1 -4
- package/src/__tests__/chat-store.test.ts +5 -15
- package/src/__tests__/command-center.test.tsx +10 -12
- package/src/__tests__/compliance-retention-edit.test.tsx +3 -6
- package/src/__tests__/confirmation-tracker.test.tsx +3 -18
- package/src/__tests__/coupon-input.test.tsx +1 -3
- package/src/__tests__/create-instance.test.tsx +1 -3
- package/src/__tests__/credit-balance.test.tsx +4 -12
- package/src/__tests__/credits.test.tsx +32 -85
- package/src/__tests__/email-verification-banner.test.tsx +2 -6
- package/src/__tests__/error-boundaries.test.tsx +0 -1
- package/src/__tests__/fetch-pricing.test.ts +2 -1
- package/src/__tests__/field-oauth.test.tsx +2 -6
- package/src/__tests__/fixtures/mock-manifests-data.js +1 -3
- package/src/__tests__/fixtures/mock-manifests.ts +2 -4
- package/src/__tests__/fleet-health-timestamp.test.tsx +1 -8
- package/src/__tests__/fleet-health-update.test.tsx +1 -8
- package/src/__tests__/gpu-dashboard.test.tsx +2 -6
- package/src/__tests__/instance-detail.test.tsx +3 -9
- package/src/__tests__/instance-list.test.tsx +1 -5
- package/src/__tests__/layout-snapshots.test.tsx +64 -11
- package/src/__tests__/marketplace-admin.test.tsx +2 -6
- package/src/__tests__/marketplace.test.tsx +11 -35
- package/src/__tests__/merge-api-rates.test.ts +1 -6
- package/src/__tests__/middleware.test.ts +32 -219
- package/src/__tests__/next-config-headers.test.ts +1 -3
- package/src/__tests__/notifications.test.tsx +4 -11
- package/src/__tests__/oauth-buttons.test.tsx +36 -59
- package/src/__tests__/oauth-error-mapping.test.tsx +2 -6
- package/src/__tests__/observability.test.tsx +23 -36
- package/src/__tests__/onboarding-page.test.tsx +4 -6
- package/src/__tests__/org-billing-api.test.tsx +1 -6
- package/src/__tests__/plugin-install-flow.test.tsx +28 -58
- package/src/__tests__/plugin-registry.test.tsx +3 -11
- package/src/__tests__/plugin-tool-sync.test.ts +1 -3
- package/src/__tests__/plugins-catalog-error.test.tsx +2 -6
- package/src/__tests__/plugins-toggle-race.test.tsx +3 -5
- package/src/__tests__/portfolio-chart.test.tsx +2 -6
- package/src/__tests__/promotion-form.test.tsx +2 -6
- package/src/__tests__/promotions-list.test.tsx +1 -3
- package/src/__tests__/provider-key-api.test.ts +2 -1
- package/src/__tests__/resend-verification-button.test.tsx +8 -24
- package/src/__tests__/secrets-audit-pagination.test.tsx +1 -3
- package/src/__tests__/settings.test.tsx +11 -21
- package/src/__tests__/setup-checklist.test.tsx +3 -9
- package/src/__tests__/setup.ts +25 -6
- package/src/__tests__/snapshot-api.test.ts +2 -1
- package/src/__tests__/step-superpowers.test.tsx +1 -3
- package/src/__tests__/tenant-context.test.tsx +1 -6
- package/src/__tests__/tenant-keys-api.test.ts +3 -4
- package/src/__tests__/tenant-table-pagination.test.tsx +2 -6
- package/src/__tests__/terminal-log-cleanup.test.tsx +0 -1
- package/src/__tests__/transaction-history.test.tsx +190 -238
- package/src/__tests__/trpc-types.test.ts +2 -6
- package/src/__tests__/use-chat.test.ts +1 -3
- package/src/__tests__/use-plugin-setup-chat-stale-closure.test.ts +1 -4
- package/src/__tests__/use-sidecar-bridge.test.tsx +105 -0
- package/src/__tests__/use-webmcp.test.ts +1 -3
- package/src/__tests__/validate-elevenlabs-key.test.ts +2 -1
- package/src/__tests__/verify-page.test.tsx +4 -13
- package/src/__tests__/verify-redirect.test.tsx +2 -6
- package/src/app/(auth)/error.tsx +1 -7
- package/src/app/(auth)/forgot-password/page.tsx +4 -18
- package/src/app/(auth)/login/page.tsx +5 -22
- package/src/app/(auth)/reset-password/page.tsx +2 -12
- package/src/app/(auth)/signup/page.tsx +10 -44
- package/src/app/(auth)/verify/page.tsx +47 -0
- package/src/app/(dashboard)/billing/credits/page.tsx +14 -67
- package/src/app/(dashboard)/billing/error.tsx +2 -10
- package/src/app/(dashboard)/billing/layout.tsx +12 -62
- package/src/app/(dashboard)/billing/payment/page.tsx +17 -68
- package/src/app/(dashboard)/billing/plans/page.tsx +3 -9
- package/src/app/(dashboard)/billing/usage/hosted/page.tsx +8 -25
- package/src/app/(dashboard)/billing/usage/page.tsx +63 -103
- package/src/app/(dashboard)/changesets/[id]/changeset-detail-client.tsx +9 -27
- package/src/app/(dashboard)/changesets/[id]/error.tsx +2 -6
- package/src/app/(dashboard)/changesets/error.tsx +1 -7
- package/src/app/(dashboard)/chat/page.tsx +2 -6
- package/src/app/(dashboard)/dashboard/network/page.tsx +5 -19
- package/src/app/(dashboard)/error.tsx +1 -7
- package/src/app/(dashboard)/layout.tsx +15 -36
- package/src/app/(dashboard)/marketplace/[plugin]/page.tsx +14 -51
- package/src/app/(dashboard)/marketplace/error.tsx +1 -7
- package/src/app/(dashboard)/marketplace/page.tsx +6 -27
- package/src/app/(dashboard)/not-found.tsx +2 -5
- package/src/app/(dashboard)/onboarding/page.tsx +5 -22
- package/src/app/(dashboard)/settings/account/page.tsx +1 -6
- package/src/app/(dashboard)/settings/activity/page.tsx +8 -34
- package/src/app/(dashboard)/settings/api-keys/page.tsx +15 -60
- package/src/app/(dashboard)/settings/brain/page.tsx +9 -31
- package/src/app/(dashboard)/settings/error.tsx +2 -10
- package/src/app/(dashboard)/settings/notifications/page.tsx +2 -6
- package/src/app/(dashboard)/settings/org/page.tsx +13 -56
- package/src/app/(dashboard)/settings/page.tsx +1 -0
- package/src/app/(dashboard)/settings/profile/page.tsx +126 -73
- package/src/app/(dashboard)/settings/providers/page.tsx +21 -78
- package/src/app/(dashboard)/settings/secrets/page.tsx +13 -58
- package/src/app/(dashboard)/settings/security/page.tsx +31 -111
- package/src/app/admin/email-templates/email-templates-client.tsx +15 -58
- package/src/app/admin/error.tsx +1 -7
- package/src/app/admin/fleet-updates/error.tsx +1 -7
- package/src/app/admin/fleet-updates/fleet-updates-client.tsx +10 -50
- package/src/app/admin/layout.tsx +4 -0
- package/src/app/admin/payment-methods/page.tsx +9 -38
- package/src/app/admin/products/error.tsx +2 -7
- package/src/app/admin/products/page.tsx +1 -4
- package/src/app/admin/promotions/[id]/page.tsx +9 -38
- package/src/app/admin/promotions/page.tsx +9 -36
- package/src/app/admin/rate-overrides/page.tsx +9 -45
- package/src/app/auth/callback/[provider]/page.tsx +1 -8
- package/src/app/auth/verify/page.tsx +9 -36
- package/src/app/channels/error.tsx +2 -10
- package/src/app/channels/layout.tsx +9 -0
- package/src/app/channels/page.tsx +8 -20
- package/src/app/channels/setup/[plugin]/page.tsx +3 -5
- package/src/app/error.tsx +1 -7
- package/src/app/fleet/error.tsx +1 -7
- package/src/app/fleet/layout.tsx +5 -0
- package/src/app/fleet/settings/page.tsx +1 -3
- package/src/app/global-error.tsx +2 -10
- package/src/app/globals.css +1 -4
- package/src/app/instances/[id]/instance-detail-client.tsx +51 -125
- package/src/app/instances/error.tsx +2 -10
- package/src/app/instances/instance-list-client.tsx +20 -69
- package/src/app/instances/layout.tsx +9 -0
- package/src/app/instances/new/create-instance-client.tsx +10 -31
- package/src/app/layout.tsx +2 -10
- package/src/app/not-found.tsx +1 -3
- package/src/app/page.tsx +1 -2
- package/src/app/plugins/error.tsx +2 -10
- package/src/app/plugins/layout.tsx +5 -0
- package/src/app/plugins/page.tsx +16 -48
- package/src/app/pricing/error.tsx +1 -7
- package/src/app/privacy/page.tsx +93 -150
- package/src/app/status/error.tsx +1 -7
- package/src/app/terms/page.tsx +89 -144
- package/src/components/account-switcher.tsx +25 -52
- package/src/components/admin/accounting-dashboard.tsx +1 -3
- package/src/components/admin/admin-guard.tsx +1 -3
- package/src/components/admin/admin-nav.tsx +1 -3
- package/src/components/admin/affiliate-dashboard.tsx +25 -94
- package/src/components/admin/audit-log-table.tsx +13 -49
- package/src/components/admin/billing-health-dashboard.tsx +7 -25
- package/src/components/admin/bulk-actions-bar.test.tsx +1 -7
- package/src/components/admin/bulk-actions-bar.tsx +1 -3
- package/src/components/admin/bulk-export-dialog.test.tsx +1 -7
- package/src/components/admin/bulk-export-dialog.tsx +6 -32
- package/src/components/admin/bulk-grant-dialog.test.tsx +2 -6
- package/src/components/admin/bulk-grant-dialog.tsx +4 -15
- package/src/components/admin/bulk-preview-dialog.tsx +3 -12
- package/src/components/admin/bulk-reactivate-dialog.tsx +1 -7
- package/src/components/admin/bulk-select-all-banner.tsx +1 -6
- package/src/components/admin/bulk-suspend-dialog.tsx +5 -12
- package/src/components/admin/bulk-undo-toast.tsx +1 -2
- package/src/components/admin/compliance-dashboard.tsx +31 -101
- package/src/components/admin/gpu-dashboard.tsx +21 -70
- package/src/components/admin/grant-credits-dialog.tsx +4 -17
- package/src/components/admin/incident-dashboard.tsx +10 -25
- package/src/components/admin/inference-dashboard.tsx +14 -54
- package/src/components/admin/marketplace-admin.tsx +18 -60
- package/src/components/admin/migrations-dashboard.tsx +9 -42
- package/src/components/admin/onboarding-dashboard.tsx +14 -64
- package/src/components/admin/pool-config-dashboard.tsx +4 -10
- package/src/components/admin/products/fleet-form.tsx +2 -11
- package/src/components/admin/products/nav-editor.tsx +3 -10
- package/src/components/admin/promotions/promotion-form.tsx +9 -42
- package/src/components/admin/roles-dashboard.tsx +7 -34
- package/src/components/admin/suspend-dialog.tsx +4 -11
- package/src/components/admin/tenant-notes-panel.tsx +1 -3
- package/src/components/admin/tenant-row-actions.tsx +4 -20
- package/src/components/admin/tenant-table.tsx +12 -49
- package/src/components/auth/auth-redirect.tsx +11 -3
- package/src/components/auth/email-verification-result-banner.tsx +1 -3
- package/src/components/auth/resend-verification-button.tsx +2 -10
- package/src/components/auth/wopr-wordmark.tsx +1 -3
- package/src/components/billing/add-payment-method-dialog.tsx +1 -2
- package/src/components/billing/affiliate-dashboard.tsx +4 -16
- package/src/components/billing/amount-selector.tsx +1 -3
- package/src/components/billing/auto-topup-card.tsx +2 -11
- package/src/components/billing/buy-credits-panel.tsx +14 -17
- package/src/components/billing/byok-callout.tsx +6 -8
- package/src/components/billing/confirmation-tracker.tsx +4 -14
- package/src/components/billing/credit-balance-badge.tsx +22 -0
- package/src/components/billing/credit-balance.tsx +3 -9
- package/src/components/billing/crypto-checkout.tsx +5 -24
- package/src/components/billing/degraded-state-banner.tsx +1 -3
- package/src/components/billing/deposit-view.tsx +301 -41
- package/src/components/billing/dividend-banner.tsx +1 -3
- package/src/components/billing/dividend-eligibility.tsx +3 -12
- package/src/components/billing/dividend-pool-stats.tsx +6 -20
- package/src/components/billing/first-dividend-dialog.tsx +2 -2
- package/src/components/billing/org-billing-page.tsx +8 -31
- package/src/components/billing/payment-method-picker.tsx +2 -10
- package/src/components/billing/suspension-banner.tsx +2 -7
- package/src/components/billing/transaction-history.tsx +10 -58
- package/src/components/billing/unified-checkout.tsx +547 -0
- package/src/components/bot-settings/backups-tab.tsx +9 -33
- package/src/components/bot-settings/bot-settings-client.tsx +32 -134
- package/src/components/bot-settings/resources-tab.tsx +2 -9
- package/src/components/bot-settings/storage-tab.tsx +19 -48
- package/src/components/bot-settings/vps-info-panel.tsx +3 -11
- package/src/components/bot-settings/vps-upgrade-card.tsx +3 -4
- package/src/components/brand-hydrator.tsx +13 -0
- package/src/components/channel-wizard/field-interactive.tsx +1 -3
- package/src/components/channel-wizard/field-qr.tsx +10 -39
- package/src/components/channel-wizard/step-renderer.tsx +5 -28
- package/src/components/channel-wizard/wizard.tsx +6 -31
- package/src/components/chat/chat-message.tsx +1 -4
- package/src/components/chat/chat-panel.tsx +4 -18
- package/src/components/chat/chat-widget.tsx +3 -14
- package/src/components/dashboard/command-center.tsx +15 -61
- package/src/components/fleet/update-settings-card.tsx +7 -23
- package/src/components/instance-update-banner.tsx +130 -0
- package/src/components/instances/friends-tab.test.tsx +2 -9
- package/src/components/instances/friends-tab.tsx +18 -74
- package/src/components/instances/update-available-badge.tsx +2 -11
- package/src/components/landing/hero.tsx +3 -9
- package/src/components/landing/landing-page.tsx +1 -3
- package/src/components/landing/portfolio-chart.tsx +4 -9
- package/src/components/landing/story-sections.tsx +1 -3
- package/src/components/landing/terminal-sequence.tsx +4 -17
- package/src/components/marketplace/empty-state.tsx +2 -6
- package/src/components/marketplace/first-visit-hero.tsx +1 -3
- package/src/components/marketplace/install-wizard.tsx +20 -77
- package/src/components/marketplace/marketplace-tabs.tsx +1 -4
- package/src/components/marketplace/plugin-card.tsx +2 -9
- package/src/components/marketplace/superpower-content.tsx +1 -3
- package/src/components/marketplace/terminal-search.tsx +2 -8
- package/src/components/oauth-buttons.tsx +29 -14
- package/src/components/observability/fleet-health.tsx +5 -18
- package/src/components/observability/health-overview.tsx +7 -20
- package/src/components/observability/logs-viewer.tsx +8 -32
- package/src/components/observability/metrics-dashboard.tsx +2 -15
- package/src/components/onboarding/fallback-setup.tsx +6 -25
- package/src/components/onboarding/setup-checklist.tsx +18 -51
- package/src/components/onboarding/step-superpowers.tsx +1 -4
- package/src/components/plugin-setup/setup-chat-panel.tsx +6 -22
- package/src/components/pricing/dividend-calculator.tsx +6 -12
- package/src/components/pricing/dividend-stats.tsx +5 -17
- package/src/components/pricing/pricing-page.tsx +17 -36
- package/src/components/settings/create-org-wizard.tsx +2 -5
- package/src/components/sidebar.tsx +7 -42
- package/src/components/sidecar-frame.tsx +78 -0
- package/src/components/status/status-page.tsx +6 -28
- package/src/components/ui/alert-dialog.tsx +8 -25
- package/src/components/ui/badge.tsx +2 -8
- package/src/components/ui/banner.tsx +1 -6
- package/src/components/ui/card.tsx +5 -24
- package/src/components/ui/checkbox.tsx +1 -5
- package/src/components/ui/collapsible.tsx +3 -8
- package/src/components/ui/dialog.tsx +4 -10
- package/src/components/ui/dropdown-menu.tsx +9 -18
- package/src/components/ui/form.tsx +2 -16
- package/src/components/ui/popover.tsx +3 -23
- package/src/components/ui/progress.tsx +1 -5
- package/src/components/ui/radio-group.tsx +3 -15
- package/src/components/ui/select.tsx +4 -17
- package/src/components/ui/sheet.tsx +5 -19
- package/src/components/ui/skeleton.tsx +1 -7
- package/src/components/ui/table.tsx +5 -22
- package/src/components/ui/tabs.tsx +3 -13
- package/src/components/ui/tooltip.tsx +1 -1
- package/src/components/unified-sidebar.tsx +493 -0
- package/src/hooks/__tests__/use-fleet-sse.test.ts +1 -4
- package/src/hooks/__tests__/use-save-queue.test.ts +2 -8
- package/src/hooks/use-credit-balance.ts +27 -0
- package/src/hooks/use-my-org-role.ts +1 -3
- package/src/hooks/use-plugin-registry.ts +8 -14
- package/src/hooks/use-plugin-setup-chat.ts +2 -5
- package/src/hooks/use-sidecar-bridge.tsx +148 -0
- package/src/hooks/use-webmcp.ts +1 -4
- package/src/lib/__tests__/admin-api.test.ts +1 -3
- package/src/lib/__tests__/api-bot-crud.test.ts +8 -18
- package/src/lib/__tests__/api-fetch.test.ts +4 -16
- package/src/lib/__tests__/org-billing-api.test.ts +1 -3
- package/src/lib/__tests__/pricing-data.test.ts +0 -8
- package/src/lib/__tests__/settings-api.test.ts +1 -3
- package/src/lib/admin-affiliate-api.ts +2 -7
- package/src/lib/admin-api.ts +6 -26
- package/src/lib/admin-incident-api.ts +11 -19
- package/src/lib/admin-marketplace-api.ts +1 -5
- package/src/lib/api-config.test.ts +5 -50
- package/src/lib/api.ts +143 -122
- package/src/lib/auth-client.ts +1 -2
- package/src/lib/bot-settings-data.ts +11 -36
- package/src/lib/brand-config.ts +56 -115
- package/src/lib/brand.ts +2 -15
- package/src/lib/chat/use-chat.ts +2 -7
- package/src/lib/cost-comparison-data.test.ts +1 -3
- package/src/lib/cost-comparison-data.ts +1 -4
- package/src/lib/errors.ts +1 -4
- package/src/lib/fetch-utils.test.ts +26 -9
- package/src/lib/fetch-utils.ts +40 -11
- package/src/lib/logger.ts +2 -0
- package/src/lib/marketplace-data.ts +3 -11
- package/src/lib/oauth-errors.ts +2 -4
- package/src/lib/onboarding-data.ts +3 -11
- package/src/lib/org-api.ts +2 -10
- package/src/lib/org-billing-api.ts +5 -19
- package/src/lib/plugin/tool-definitions.ts +1 -2
- package/src/lib/require-auth.ts +57 -0
- package/src/lib/settings-api.ts +1 -4
- package/src/lib/sidecar-routes.ts +43 -0
- package/src/lib/trpc-server.ts +49 -0
- package/src/lib/trpc-types.ts +4 -6
- package/src/lib/trpc.tsx +12 -4
- package/src/lib/validate-redirect-url.ts +1 -4
- package/src/lib/webmcp/marketplace-onboarding-tools.ts +6 -16
- package/src/lib/webmcp/register.ts +1 -4
- package/src/lib/webmcp/tools.ts +2 -9
- package/src/proxy.ts +35 -212
- package/src/types/missing-deps.d.ts +2 -8
- package/tsconfig.json +1 -8
- package/biome.json +0 -52
- package/src/__tests__/__snapshots__/layout-snapshots.test.tsx.snap +0 -741
- package/src/__tests__/billing-byok-callout.test.tsx +0 -76
- package/src/lib/__tests__/__snapshots__/pricing-data.test.ts.snap +0 -112
package/src/app/privacy/page.tsx
CHANGED
|
@@ -19,9 +19,7 @@ export default function PrivacyPage() {
|
|
|
19
19
|
<p className="mt-2 text-sm text-muted-foreground">Last updated: February 2026</p>
|
|
20
20
|
|
|
21
21
|
<nav className="mt-6 rounded-sm border border-border bg-card p-4">
|
|
22
|
-
<p className="mb-3 text-xs font-medium uppercase tracking-[0.15em] text-muted-foreground">
|
|
23
|
-
Contents
|
|
24
|
-
</p>
|
|
22
|
+
<p className="mb-3 text-xs font-medium uppercase tracking-[0.15em] text-muted-foreground">Contents</p>
|
|
25
23
|
<ol className="list-none space-y-1.5 text-sm text-muted-foreground">
|
|
26
24
|
<li>
|
|
27
25
|
<a href="#section-1" className="underline underline-offset-4 hover:text-foreground">
|
|
@@ -93,22 +91,16 @@ export default function PrivacyPage() {
|
|
|
93
91
|
|
|
94
92
|
<div className="mt-8 space-y-8 text-sm leading-relaxed text-muted-foreground">
|
|
95
93
|
<section id="section-1" className="scroll-mt-16">
|
|
96
|
-
<h2 className="mb-2 text-base font-semibold text-foreground">
|
|
97
|
-
1. Identity and Contact Details
|
|
98
|
-
</h2>
|
|
94
|
+
<h2 className="mb-2 text-base font-semibold text-foreground">1. Identity and Contact Details</h2>
|
|
99
95
|
<p>
|
|
100
|
-
{brand.companyLegalName} (“{brand.brandName},” “we,”
|
|
101
|
-
“
|
|
102
|
-
|
|
103
|
-
.
|
|
96
|
+
{brand.companyLegalName} (“{brand.brandName},” “we,” “us,” or
|
|
97
|
+
“our”) is the data controller responsible for your personal data. We operate the{" "}
|
|
98
|
+
{brand.productName} platform available at {brand.domain}.
|
|
104
99
|
</p>
|
|
105
100
|
<p className="mt-2">
|
|
106
|
-
If you have questions about how we handle your data, or if you wish to exercise any of
|
|
107
|
-
|
|
108
|
-
<a
|
|
109
|
-
href={`mailto:${brand.emails.privacy}`}
|
|
110
|
-
className="text-foreground underline underline-offset-4"
|
|
111
|
-
>
|
|
101
|
+
If you have questions about how we handle your data, or if you wish to exercise any of your rights
|
|
102
|
+
described below, contact us at{" "}
|
|
103
|
+
<a href={`mailto:${brand.emails.privacy}`} className="text-foreground underline underline-offset-4">
|
|
112
104
|
{brand.emails.privacy}
|
|
113
105
|
</a>
|
|
114
106
|
.
|
|
@@ -116,59 +108,52 @@ export default function PrivacyPage() {
|
|
|
116
108
|
</section>
|
|
117
109
|
|
|
118
110
|
<section id="section-2" className="scroll-mt-16">
|
|
119
|
-
<h2 className="mb-2 text-base font-semibold text-foreground">
|
|
120
|
-
2. What We Collect and Why
|
|
121
|
-
</h2>
|
|
111
|
+
<h2 className="mb-2 text-base font-semibold text-foreground">2. What We Collect and Why</h2>
|
|
122
112
|
<p>
|
|
123
|
-
We only collect information that is necessary to provide and improve{
|
|
124
|
-
|
|
125
|
-
services. We do not collect data for advertising or sell your information to third
|
|
126
|
-
parties.
|
|
113
|
+
We only collect information that is necessary to provide and improve {brand.productName}
|
|
114
|
+
services. We do not collect data for advertising or sell your information to third parties.
|
|
127
115
|
</p>
|
|
128
116
|
|
|
129
117
|
<h3 className="mb-1 mt-4 text-sm font-semibold text-foreground">Account information</h3>
|
|
130
118
|
<p>
|
|
131
|
-
Your name and email address, collected when you create an account. We use this to
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
contract with you.
|
|
119
|
+
Your name and email address, collected when you create an account. We use this to identify you,
|
|
120
|
+
communicate with you about your account, and send transactional emails such as password resets and billing
|
|
121
|
+
notifications. Legal basis: performance of our contract with you.
|
|
135
122
|
</p>
|
|
136
123
|
|
|
137
124
|
<h3 className="mb-1 mt-4 text-sm font-semibold text-foreground">Billing information</h3>
|
|
138
125
|
<p>
|
|
139
|
-
Payment card details are processed directly by Stripe and are never stored on{
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
history from Stripe. Legal basis: performance of our contract with you.
|
|
126
|
+
Payment card details are processed directly by Stripe and are never stored on {brand.brandName}
|
|
127
|
+
servers. We receive only a tokenized reference, your billing email, and transaction history from Stripe.
|
|
128
|
+
Legal basis: performance of our contract with you.
|
|
143
129
|
</p>
|
|
144
130
|
|
|
145
131
|
<h3 className="mb-1 mt-4 text-sm font-semibold text-foreground">API keys</h3>
|
|
146
132
|
<p>
|
|
147
|
-
You provide your own API keys for third-party AI providers (the “bring your own
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
interactions. Legal basis: performance of our contract with you.
|
|
133
|
+
You provide your own API keys for third-party AI providers (the “bring your own key” model).
|
|
134
|
+
These keys are encrypted at rest and used only to make requests to your chosen providers on your behalf.
|
|
135
|
+
We do not log or store the content of AI interactions. Legal basis: performance of our contract with you.
|
|
151
136
|
</p>
|
|
152
137
|
|
|
153
138
|
<h3 className="mb-1 mt-4 text-sm font-semibold text-foreground">Bot configuration</h3>
|
|
154
139
|
<p>
|
|
155
|
-
Plugin selections, channel configurations, provider settings, and other choices you
|
|
156
|
-
|
|
157
|
-
|
|
140
|
+
Plugin selections, channel configurations, provider settings, and other choices you make while setting up
|
|
141
|
+
and operating your bots. This data is necessary to deliver the service as you have configured it. Legal
|
|
142
|
+
basis: performance of our contract with you.
|
|
158
143
|
</p>
|
|
159
144
|
|
|
160
145
|
<h3 className="mb-1 mt-4 text-sm font-semibold text-foreground">Usage data</h3>
|
|
161
146
|
<p>
|
|
162
|
-
API call counts, feature usage metrics, and hosted capability credit consumption. We
|
|
163
|
-
|
|
164
|
-
|
|
147
|
+
API call counts, feature usage metrics, and hosted capability credit consumption. We use this data for
|
|
148
|
+
billing, capacity planning, and service improvement. Legal basis: legitimate interest in maintaining and
|
|
149
|
+
improving our service.
|
|
165
150
|
</p>
|
|
166
151
|
|
|
167
152
|
<h3 className="mb-1 mt-4 text-sm font-semibold text-foreground">Technical data</h3>
|
|
168
153
|
<p>
|
|
169
|
-
IP address, browser type, and operating system collected via web server logs. We use
|
|
170
|
-
|
|
171
|
-
|
|
154
|
+
IP address, browser type, and operating system collected via web server logs. We use this for security
|
|
155
|
+
monitoring, abuse prevention, and debugging. Server logs are retained for 90 days. Legal basis: legitimate
|
|
156
|
+
interest in securing our service.
|
|
172
157
|
</p>
|
|
173
158
|
</section>
|
|
174
159
|
|
|
@@ -177,76 +162,63 @@ export default function PrivacyPage() {
|
|
|
177
162
|
3. When We Access or Share Your Information
|
|
178
163
|
</h2>
|
|
179
164
|
<p>
|
|
180
|
-
We do not sell your personal data. We do not use third-party tracking or advertising
|
|
181
|
-
|
|
182
|
-
to provide the service:
|
|
165
|
+
We do not sell your personal data. We do not use third-party tracking or advertising cookies. We share
|
|
166
|
+
data with the following categories of sub-processors only as needed to provide the service:
|
|
183
167
|
</p>
|
|
184
168
|
<ul className="ml-4 mt-2 list-disc space-y-1">
|
|
185
169
|
<li>
|
|
186
|
-
<span className="text-foreground">Stripe</span> — payment processing. Stripe
|
|
187
|
-
|
|
188
|
-
|
|
170
|
+
<span className="text-foreground">Stripe</span> — payment processing. Stripe receives your billing
|
|
171
|
+
information to process subscription payments. Stripe's privacy policy governs their handling of
|
|
172
|
+
your payment data.
|
|
189
173
|
</li>
|
|
190
174
|
<li>
|
|
191
|
-
<span className="text-foreground">AI providers</span> (user-selected,
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
provider you use.
|
|
175
|
+
<span className="text-foreground">AI providers</span> (user-selected, bring-your-own-key model) —
|
|
176
|
+
request fulfillment. Your prompts and inputs are sent to the AI provider you have configured. We do not
|
|
177
|
+
choose or control which provider you use.
|
|
195
178
|
</li>
|
|
196
179
|
<li>
|
|
197
|
-
<span className="text-foreground">Hosting provider</span> — infrastructure.
|
|
198
|
-
|
|
199
|
-
|
|
180
|
+
<span className="text-foreground">Hosting provider</span> — infrastructure. Our servers and Docker
|
|
181
|
+
fleet are hosted by third-party infrastructure providers who may process data on our behalf under strict
|
|
182
|
+
data processing agreements.
|
|
200
183
|
</li>
|
|
201
184
|
<li>
|
|
202
|
-
<span className="text-foreground">Email service</span> — transactional emails.
|
|
203
|
-
|
|
204
|
-
|
|
185
|
+
<span className="text-foreground">Email service</span> — transactional emails. We use a
|
|
186
|
+
third-party email service to send password resets, billing notifications, and other operational
|
|
187
|
+
messages.
|
|
205
188
|
</li>
|
|
206
189
|
</ul>
|
|
207
190
|
<p className="mt-2">
|
|
208
|
-
We may also disclose information if required by law, to enforce our Terms of Service,
|
|
209
|
-
|
|
210
|
-
or the public.
|
|
191
|
+
We may also disclose information if required by law, to enforce our Terms of Service, or to protect the
|
|
192
|
+
rights, property, or safety of {brand.companyLegalName}, our users, or the public.
|
|
211
193
|
</p>
|
|
212
194
|
</section>
|
|
213
195
|
|
|
214
196
|
<section id="section-4" className="scroll-mt-16">
|
|
215
|
-
<h2 className="mb-2 text-base font-semibold text-foreground">
|
|
216
|
-
4. Your Rights Under GDPR
|
|
217
|
-
</h2>
|
|
197
|
+
<h2 className="mb-2 text-base font-semibold text-foreground">4. Your Rights Under GDPR</h2>
|
|
218
198
|
<p>
|
|
219
|
-
If you are located in the European Union or European Economic Area, you have the
|
|
220
|
-
|
|
199
|
+
If you are located in the European Union or European Economic Area, you have the following rights under
|
|
200
|
+
the General Data Protection Regulation:
|
|
221
201
|
</p>
|
|
222
202
|
<ul className="ml-4 mt-2 list-disc space-y-1">
|
|
223
203
|
<li>Right of access (Art. 15) — request a copy of your personal data</li>
|
|
204
|
+
<li>Right to rectification (Art. 16) — correct inaccurate or incomplete data</li>
|
|
224
205
|
<li>
|
|
225
|
-
Right to
|
|
206
|
+
Right to erasure (Art. 17) — request deletion of your personal data (“right to be
|
|
207
|
+
forgotten”)
|
|
226
208
|
</li>
|
|
227
209
|
<li>
|
|
228
|
-
Right to
|
|
229
|
-
(“right to be forgotten”)
|
|
210
|
+
Right to restrict processing (Art. 18) — limit how we use your data in certain circumstances
|
|
230
211
|
</li>
|
|
231
212
|
<li>
|
|
232
|
-
Right to
|
|
233
|
-
|
|
234
|
-
</li>
|
|
235
|
-
<li>
|
|
236
|
-
Right to data portability (Art. 20) — receive your data in a structured,
|
|
237
|
-
commonly used, machine-readable format
|
|
238
|
-
</li>
|
|
239
|
-
<li>
|
|
240
|
-
Right to object (Art. 21) — object to processing based on legitimate interest
|
|
213
|
+
Right to data portability (Art. 20) — receive your data in a structured, commonly used,
|
|
214
|
+
machine-readable format
|
|
241
215
|
</li>
|
|
216
|
+
<li>Right to object (Art. 21) — object to processing based on legitimate interest</li>
|
|
242
217
|
<li>Right to lodge a complaint with a supervisory authority in your member state</li>
|
|
243
218
|
</ul>
|
|
244
219
|
<p className="mt-2">
|
|
245
220
|
To exercise any of these rights, email{" "}
|
|
246
|
-
<a
|
|
247
|
-
href={`mailto:${brand.emails.privacy}`}
|
|
248
|
-
className="text-foreground underline underline-offset-4"
|
|
249
|
-
>
|
|
221
|
+
<a href={`mailto:${brand.emails.privacy}`} className="text-foreground underline underline-offset-4">
|
|
250
222
|
{brand.emails.privacy}
|
|
251
223
|
</a>
|
|
252
224
|
. We will respond within 30 days.
|
|
@@ -254,28 +226,20 @@ export default function PrivacyPage() {
|
|
|
254
226
|
</section>
|
|
255
227
|
|
|
256
228
|
<section id="section-5" className="scroll-mt-16">
|
|
257
|
-
<h2 className="mb-2 text-base font-semibold text-foreground">
|
|
258
|
-
5. Your Rights Under CCPA
|
|
259
|
-
</h2>
|
|
229
|
+
<h2 className="mb-2 text-base font-semibold text-foreground">5. Your Rights Under CCPA</h2>
|
|
260
230
|
<p>
|
|
261
|
-
If you are a California resident, the California Consumer Privacy Act provides you
|
|
262
|
-
|
|
231
|
+
If you are a California resident, the California Consumer Privacy Act provides you with the following
|
|
232
|
+
rights:
|
|
263
233
|
</p>
|
|
264
234
|
<ul className="ml-4 mt-2 list-disc space-y-1">
|
|
265
235
|
<li>Right to know what personal information is collected, used, shared, or sold</li>
|
|
266
236
|
<li>Right to delete personal information held by us</li>
|
|
267
|
-
<li>
|
|
268
|
-
Right to opt-out of the sale of personal information (note: we do not sell personal
|
|
269
|
-
information)
|
|
270
|
-
</li>
|
|
237
|
+
<li>Right to opt-out of the sale of personal information (note: we do not sell personal information)</li>
|
|
271
238
|
<li>Right to non-discrimination for exercising your privacy rights</li>
|
|
272
239
|
</ul>
|
|
273
240
|
<p className="mt-2">
|
|
274
241
|
To exercise these rights, email{" "}
|
|
275
|
-
<a
|
|
276
|
-
href={`mailto:${brand.emails.privacy}`}
|
|
277
|
-
className="text-foreground underline underline-offset-4"
|
|
278
|
-
>
|
|
242
|
+
<a href={`mailto:${brand.emails.privacy}`} className="text-foreground underline underline-offset-4">
|
|
279
243
|
{brand.emails.privacy}
|
|
280
244
|
</a>
|
|
281
245
|
.
|
|
@@ -285,14 +249,14 @@ export default function PrivacyPage() {
|
|
|
285
249
|
<section id="section-6" className="scroll-mt-16">
|
|
286
250
|
<h2 className="mb-2 text-base font-semibold text-foreground">6. Data Retention</h2>
|
|
287
251
|
<p>
|
|
288
|
-
We retain your account data for as long as your account is active. If you request
|
|
289
|
-
|
|
290
|
-
|
|
252
|
+
We retain your account data for as long as your account is active. If you request deletion of your
|
|
253
|
+
account, we will delete your personal data within 30 days. Some information may be retained longer where
|
|
254
|
+
required by law:
|
|
291
255
|
</p>
|
|
292
256
|
<ul className="ml-4 mt-2 list-disc space-y-1">
|
|
293
257
|
<li>
|
|
294
|
-
Billing and transaction records are retained for up to 7 years as required by tax
|
|
295
|
-
|
|
258
|
+
Billing and transaction records are retained for up to 7 years as required by tax and financial
|
|
259
|
+
regulations
|
|
296
260
|
</li>
|
|
297
261
|
<li>Server logs are retained for 90 days</li>
|
|
298
262
|
<li>Backups containing your data are purged within 60 days of account deletion</li>
|
|
@@ -300,65 +264,50 @@ export default function PrivacyPage() {
|
|
|
300
264
|
</section>
|
|
301
265
|
|
|
302
266
|
<section id="section-7" className="scroll-mt-16">
|
|
303
|
-
<h2 className="mb-2 text-base font-semibold text-foreground">
|
|
304
|
-
7. Cookies and Tracking
|
|
305
|
-
</h2>
|
|
267
|
+
<h2 className="mb-2 text-base font-semibold text-foreground">7. Cookies and Tracking</h2>
|
|
306
268
|
<p>
|
|
307
|
-
We use essential cookies only. These cookies are required for authentication and
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
consent to.
|
|
269
|
+
We use essential cookies only. These cookies are required for authentication and session management
|
|
270
|
+
(powered by better-auth) and cannot be disabled without breaking the service. We do not use marketing
|
|
271
|
+
cookies, analytics cookies, or third-party tracking pixels. There is no cookie banner because there is
|
|
272
|
+
nothing optional to consent to.
|
|
312
273
|
</p>
|
|
313
274
|
</section>
|
|
314
275
|
|
|
315
276
|
<section id="section-8" className="scroll-mt-16">
|
|
316
277
|
<h2 className="mb-2 text-base font-semibold text-foreground">8. Security</h2>
|
|
317
278
|
<p>
|
|
318
|
-
We take reasonable measures to protect your personal data. API keys are encrypted at
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
secure, and we cannot guarantee absolute security.
|
|
279
|
+
We take reasonable measures to protect your personal data. API keys are encrypted at rest. All data in
|
|
280
|
+
transit is protected via HTTPS. Access to production systems is restricted to authorized personnel. We
|
|
281
|
+
conduct regular security reviews of our infrastructure and codebase. However, no method of transmission or
|
|
282
|
+
storage is 100% secure, and we cannot guarantee absolute security.
|
|
323
283
|
</p>
|
|
324
284
|
</section>
|
|
325
285
|
|
|
326
286
|
<section id="section-9" className="scroll-mt-16">
|
|
327
|
-
<h2 className="mb-2 text-base font-semibold text-foreground">
|
|
328
|
-
9. International Data Transfers
|
|
329
|
-
</h2>
|
|
287
|
+
<h2 className="mb-2 text-base font-semibold text-foreground">9. International Data Transfers</h2>
|
|
330
288
|
<p>
|
|
331
|
-
Your data may be processed in the United States or other countries where our
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
equivalent safeguards as required by GDPR.
|
|
289
|
+
Your data may be processed in the United States or other countries where our infrastructure providers
|
|
290
|
+
operate. If you are located in the EU/EEA, transfers of your personal data outside the EU/EEA are governed
|
|
291
|
+
by Standard Contractual Clauses or equivalent safeguards as required by GDPR.
|
|
335
292
|
</p>
|
|
336
293
|
</section>
|
|
337
294
|
|
|
338
295
|
<section id="section-10" className="scroll-mt-16">
|
|
339
|
-
<h2 className="mb-2 text-base font-semibold text-foreground">
|
|
340
|
-
10. Data Breach Notification
|
|
341
|
-
</h2>
|
|
296
|
+
<h2 className="mb-2 text-base font-semibold text-foreground">10. Data Breach Notification</h2>
|
|
342
297
|
<p>
|
|
343
|
-
In the event of a data breach that is likely to result in a risk to your rights and
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
aware of the breach.
|
|
298
|
+
In the event of a data breach that is likely to result in a risk to your rights and freedoms, we will
|
|
299
|
+
notify affected users without undue delay. Where required by GDPR, we will also notify the relevant
|
|
300
|
+
supervisory authority within 72 hours of becoming aware of the breach.
|
|
347
301
|
</p>
|
|
348
302
|
</section>
|
|
349
303
|
|
|
350
304
|
<section id="section-11" className="scroll-mt-16">
|
|
351
|
-
<h2 className="mb-2 text-base font-semibold text-foreground">
|
|
352
|
-
11. Children's Privacy
|
|
353
|
-
</h2>
|
|
305
|
+
<h2 className="mb-2 text-base font-semibold text-foreground">11. Children's Privacy</h2>
|
|
354
306
|
<p>
|
|
355
|
-
{brand.productName} is not intended for use by children under the age of 13. We do not
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
<a
|
|
359
|
-
href={`mailto:${brand.emails.privacy}`}
|
|
360
|
-
className="text-foreground underline underline-offset-4"
|
|
361
|
-
>
|
|
307
|
+
{brand.productName} is not intended for use by children under the age of 13. We do not knowingly collect
|
|
308
|
+
personal data from children under 13. If you believe a child under 13 has provided us with personal data,
|
|
309
|
+
please contact us at{" "}
|
|
310
|
+
<a href={`mailto:${brand.emails.privacy}`} className="text-foreground underline underline-offset-4">
|
|
362
311
|
{brand.emails.privacy}
|
|
363
312
|
</a>{" "}
|
|
364
313
|
and we will delete the data promptly.
|
|
@@ -366,14 +315,11 @@ export default function PrivacyPage() {
|
|
|
366
315
|
</section>
|
|
367
316
|
|
|
368
317
|
<section id="section-12" className="scroll-mt-16">
|
|
369
|
-
<h2 className="mb-2 text-base font-semibold text-foreground">
|
|
370
|
-
12. Changes to This Policy
|
|
371
|
-
</h2>
|
|
318
|
+
<h2 className="mb-2 text-base font-semibold text-foreground">12. Changes to This Policy</h2>
|
|
372
319
|
<p>
|
|
373
|
-
We may update this Privacy Policy from time to time. If we make material changes, we
|
|
374
|
-
|
|
375
|
-
changes take effect
|
|
376
|
-
effect constitutes acceptance of the updated policy.
|
|
320
|
+
We may update this Privacy Policy from time to time. If we make material changes, we will notify you by
|
|
321
|
+
email or through a prominent notice on the service before the changes take effect. Your continued use of{" "}
|
|
322
|
+
{brand.productName} after the changes take effect constitutes acceptance of the updated policy.
|
|
377
323
|
</p>
|
|
378
324
|
</section>
|
|
379
325
|
|
|
@@ -381,10 +327,7 @@ export default function PrivacyPage() {
|
|
|
381
327
|
<h2 className="mb-2 text-base font-semibold text-foreground">13. Contact</h2>
|
|
382
328
|
<p>
|
|
383
329
|
Questions about this privacy policy? Email us at{" "}
|
|
384
|
-
<a
|
|
385
|
-
href={`mailto:${brand.emails.privacy}`}
|
|
386
|
-
className="text-foreground underline underline-offset-4"
|
|
387
|
-
>
|
|
330
|
+
<a href={`mailto:${brand.emails.privacy}`} className="text-foreground underline underline-offset-4">
|
|
388
331
|
{brand.emails.privacy}
|
|
389
332
|
</a>
|
|
390
333
|
.
|
package/src/app/status/error.tsx
CHANGED
|
@@ -8,13 +8,7 @@ import { logger } from "@/lib/logger";
|
|
|
8
8
|
|
|
9
9
|
const log = logger("error-boundary:status");
|
|
10
10
|
|
|
11
|
-
export default function StatusError({
|
|
12
|
-
error,
|
|
13
|
-
reset,
|
|
14
|
-
}: {
|
|
15
|
-
error: Error & { digest?: string };
|
|
16
|
-
reset: () => void;
|
|
17
|
-
}) {
|
|
11
|
+
export default function StatusError({ error, reset }: { error: Error & { digest?: string }; reset: () => void }) {
|
|
18
12
|
const [showDetails, setShowDetails] = useState(false);
|
|
19
13
|
const isDev = process.env.NODE_ENV === "development";
|
|
20
14
|
|