Replace the "drop a session token in a file" workflow with a real Chrome-style email login. The Cloudflare worker already had Better Auth's `email-otp` plugin wired into `SEND_EMAIL`; this commit builds the renderer-side counterpart. Worker side: - Move the OTP sender from `auth@elydora.com` to `browser@elydora.com` (wrangler.toml `allowed_sender_addresses` + better_auth.ts `EMAIL_OTP_FROM_ADDRESS`). Worker must be redeployed to pick this up. Client side (`ely_sync_client::email_otp`): - `send_email_otp(config, email)` POSTs `/api/auth/email-otp/send-verification-otp` with `{ email, type: "sign-in" }`. - `verify_email_otp(config, email, otp)` POSTs `/api/auth/sign-in/email-otp`, reads the Better Auth session token from the JSON body's `token` field with the `Set-Cookie: better-auth.session_token=…` header as the documented fallback channel, and returns it as a `BearerToken`. Shell side (`shell/auth.rs` + `shell/internal_pages/sync.rs`): - New `AuthFlowPhase` (Idle / SendingCode / AwaitingOtp / Verifying / Error) tracks the in-flight form. Two off-thread workers run the HTTP exchanges so the GPUI render loop never blocks. - Successful verify saves the bearer via `SyncEngine::install_bearer` and triggers an immediate snapshot upload, so the user is signed in + initial-synced in one click. - Sync settings page replaces the bare "Sync now" button row with an account card: when SignedOut → email field + Send code → OTP field + Verify / Resend; when signed in → an account chip + Sign out. - `trigger_cloud_sync_upload` no longer takes a `Context` param so the post-auth path can fire it from the inbox-drain pass without needing a window context.
43 lines
920 B
TOML
43 lines
920 B
TOML
name = "ely-browser-cloud"
|
|
main = "src/index.ts"
|
|
compatibility_date = "2026-05-08"
|
|
compatibility_flags = ["nodejs_als"]
|
|
|
|
[[d1_databases]]
|
|
binding = "ELY_DB"
|
|
database_name = "elydora-browser-db"
|
|
database_id = "ef2b6080-cd3e-46ff-b1ba-1b143731519a"
|
|
migrations_dir = "migrations"
|
|
|
|
[[r2_buckets]]
|
|
binding = "ELY_STORAGE"
|
|
bucket_name = "ely-browser-storage"
|
|
|
|
[[kv_namespaces]]
|
|
binding = "ELY_KV"
|
|
id = "ba8f06dd5cc34bc4bc0f8a305c570cfb"
|
|
|
|
[[send_email]]
|
|
name = "SEND_EMAIL"
|
|
allowed_sender_addresses = ["browser@elydora.com"]
|
|
|
|
[vars]
|
|
ELY_ENVIRONMENT = "production"
|
|
ELY_AUTH_BASE_URL = "https://ely-browser-cloud.zhangyanghaha0407.workers.dev"
|
|
|
|
[[analytics_engine_datasets]]
|
|
binding = "ELY_API_AUDIT"
|
|
dataset = "ely_api_audit"
|
|
|
|
[[analytics_engine_datasets]]
|
|
binding = "ELY_DIAGNOSTICS"
|
|
dataset = "ely_diagnostics"
|
|
|
|
[[ratelimits]]
|
|
name = "ELY_RATE_LIMITER"
|
|
namespace_id = "1001"
|
|
|
|
[ratelimits.simple]
|
|
limit = 600
|
|
period = 60
|