diff --git a/.dev.vars.example b/.dev.vars.example index 0fe4fcf3..fdf5c66d 100644 --- a/.dev.vars.example +++ b/.dev.vars.example @@ -3,3 +3,6 @@ # Required: better-auth signing secret. Generate with: openssl rand -base64 32 BETTER_AUTH_SECRET= + +# Optional: point local development at a non-production ZPan Cloud. +ZPAN_CLOUD_URL=https://zpan-cloud-staging.saltbo.workers.dev diff --git a/server/licensing/public-keys.ts b/server/licensing/public-keys.ts index d569de74..7f4f1eac 100644 --- a/server/licensing/public-keys.ts +++ b/server/licensing/public-keys.ts @@ -8,6 +8,8 @@ // // Keys are PASERK k4.public.* strings (Ed25519, 32 raw bytes, base64url-encoded). export const PUBLIC_KEYS: string[] = [ + // zpan-cloud staging key — provisioned 2026-05-09 + 'k4.public.CCpUZ1yRWkFQy4fPZAblCYfzeJn4vDwPQrjtfiySwFc', // cloud.zpan.space production key — provisioned 2026-04-24 'k4.public.N_r-lhhAfhR8sOk0pl8zlzU5dNRl2tvpUT94uODPZ1w', ] diff --git a/src/components/billing/BoundStatusCard.tsx b/src/components/billing/BoundStatusCard.tsx index 90315d80..e1292aec 100644 --- a/src/components/billing/BoundStatusCard.tsx +++ b/src/components/billing/BoundStatusCard.tsx @@ -52,6 +52,8 @@ const LOCAL_PRO_FEATURES = FEATURE_REGISTRY.filter( 'gateKey' in item && item.gateKey != null && !('comingSoon' in item && item.comingSoon), ).map((item) => item.gateKey) +const cloudDashboardUrl = `${(import.meta.env.VITE_ZPAN_CLOUD_URL || 'https://cloud.zpan.space').replace(/\/$/, '')}/dashboard` + interface BoundStatusCardProps { state: BindingState } @@ -115,7 +117,7 @@ export function BoundStatusCard({ state }: BoundStatusCardProps) {