All checks were successful
CI / Format (push) Successful in 42s
CI / CUDA type-check (push) Successful in 1m41s
CI / Clippy (push) Successful in 3m9s
CI / Test (push) Successful in 6m30s
CI / Build cortex SRPM (push) Has been skipped
CI / Build neuron SRPM (push) Has been skipped
CI / Publish cortex to COPR (push) Has been skipped
CI / Publish neuron to COPR (push) Has been skipped
CI / Bump version in source (push) Has been skipped
The self-service account surface consuming helexa-upstream's /web/v1 (B4/B5), with a mock so it works before/independent of the live backend. - api/types.ts + api/account.ts: typed AccountApi over a same-origin `/api` prefix (vite-proxied in dev, nginx in prod) covering register/verify/ login/password-reset/keys(list,create,archive,limit)/account/redeem; ApiError carries the backend code. MockAccountApi behind VITE_USE_MOCK_ACCOUNT_API (in-memory account, raw-key-once, redeem). - auth/: context + useAuth, AuthProvider (JWT in localStorage, login fetches the account and runs claimAnonymousData → anon IndexedDB history is re-owned to the account, still client-side), RequireAuth guard (→ /login?next=). - pages/auth/: Login, Register (sends the FingerprintJS visitor id → triggers the silent abuse detection), VerifyEmail (?token), RequestReset, ResetPassword (?token, matches the backend /reset?token= link). - pages/account/: Dashboard (allocation balance + usage bar, redeem top-up, logout) and ApiKeys (list, create-modal showing the raw key ONCE with copy, per-key limit editor percent↔hardcap, archive). 401 → logout. - App wraps AuthProvider + routes (account guarded); Header auth cluster reflects useAuth (Account/Sign out vs Sign in/up). - `account` i18n namespace (53 keys) added + wired across all 32 langs. Validated: lint, typecheck, build, i18n:check, lang-labels all green. Explicit-path commit; no node_modules/dist. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F6o3ddqmYNh9kzdwq6eowh
70 lines
1.9 KiB
JSON
70 lines
1.9 KiB
JSON
{
|
|
"login": {
|
|
"title": "Sign in",
|
|
"email": "Email",
|
|
"password": "Password",
|
|
"submit": "Sign in",
|
|
"noAccount": "No account? Sign up"
|
|
},
|
|
"register": {
|
|
"title": "Create your account",
|
|
"email": "Email",
|
|
"password": "Password",
|
|
"submit": "Sign up",
|
|
"haveAccount": "Already have an account? Sign in",
|
|
"checkEmail": "Almost there — check your email to verify your account."
|
|
},
|
|
"verify": {
|
|
"verifying": "Verifying…",
|
|
"ok": "Email verified. You can now sign in.",
|
|
"failed": "This verification link is invalid or has expired.",
|
|
"toLogin": "Go to sign in"
|
|
},
|
|
"reset": {
|
|
"requestTitle": "Reset your password",
|
|
"email": "Email",
|
|
"requestSubmit": "Send reset link",
|
|
"requestDone": "If that email has an account, a reset link is on its way.",
|
|
"confirmTitle": "Choose a new password",
|
|
"newPassword": "New password",
|
|
"confirmSubmit": "Set password",
|
|
"ok": "Password updated. You can now sign in."
|
|
},
|
|
"dashboard": {
|
|
"title": "Account",
|
|
"balance": "Allocation",
|
|
"total": "Total",
|
|
"spent": "Spent",
|
|
"reserved": "Reserved",
|
|
"remaining": "Remaining",
|
|
"manageKeys": "Manage API keys",
|
|
"redeemTitle": "Redeem a top-up code",
|
|
"redeemPlaceholder": "helexa-topup-…",
|
|
"redeem": "Redeem",
|
|
"redeemed": "Code redeemed.",
|
|
"logout": "Sign out"
|
|
},
|
|
"keys": {
|
|
"title": "API keys",
|
|
"create": "Create key",
|
|
"label": "Label",
|
|
"limitKind": "Limit",
|
|
"percent": "% of allocation",
|
|
"hardcap": "Hard cap (tokens)",
|
|
"value": "Value",
|
|
"none": "No keys yet.",
|
|
"createdTitle": "Your new API key",
|
|
"createdWarn": "Copy it now — you won't see it again.",
|
|
"copy": "Copy",
|
|
"copied": "Copied",
|
|
"archive": "Archive",
|
|
"save": "Save",
|
|
"status": "Status",
|
|
"usage": "Used"
|
|
},
|
|
"error": {
|
|
"generic": "Something went wrong.",
|
|
"unauthorized": "Please sign in again."
|
|
}
|
|
}
|