Spaces:
Running
Running
Commit History
-
fix(deploy): trust x-forwarded-for for per-IP rate limiting
HF Spaces sits behind one proxy layer, so adapter-node's default client address is the proxy's, which collapsed the per-IP login limiter into a single global bucket. Bake ADDRESS_HEADER=x-forwarded-for and XFF_DEPTH=1 into the runtime image, and raise the limiter to 30/min so users behind a shared NAT are not locked out.d0c44b2 -
fix(app): 503 on storage failures, validated currency, lock release on shutdown, per-IP login limit, unit-only npm test
Storage failures now surface as a 503 with a retry message instead of a bare 500: `guarded()` wraps every form action, passing redirects/HttpErrors/ActionFailures through and mapping anything else (including ReadOnlyError) to a 503 rendered by the new +error.svelte. - config: CURRENCY must be a 3-letter uppercase ISO 4217 code; reuse the validated session secret and compaction interval instead of recomputing them - app: release the writer lock on sveltekit:shutdown, with SIGTERM/SIGINT fallback - login: per-IP limiter (20/min) ahead of the per-username one; scrypt wait queue capped at 64 so a login flood is shed as a 503 rather than parked - npm test now runs unit tests only; integration tests move to vitest.integration.config.ts so the default run never touches the real bucket - nosniff/Referrer-Policy on every response, spelling fixes, drop unused splitParticipants, .git in .dockerignore, README env notese830ad4 -
fix(ui): split editor usable without JS, untrack prop snapshots, clean orphan photo on conflict
3b74a95 -
fix(ui): explicit payer choice, validated settle-up prefill, sticky delete confirm, degraded balances
2b4c12e -
fix(auth): gate admin routes on the decoded path and in the actions themselves
The hooks gate tested the raw `event.url.pathname`, but SvelteKit matches routes on the decoded path, so a logged-in member could reach /admin (and reset the admin's password) via /%61dmin. Decode the pathname the same way before every check, and stop relying on the route gate alone: each admin load and action now calls requireAdmin, and the mutating actions require a member target so the admin account can never be renamed, reset, or deactivated from /admin.857fbc2 -
fix(ui): shared safe-next validation, no lockout on success, logout origin check, tab/feed polish
b11153a -
feat(ui): add balances page with simplified debts and settle-up links
3327d9d -
feat(ui): add settlement create, detail, edit and delete
edcd76e -
feat(ui): add expense detail, edit with version check, delete, photo serving
5517d3b -
feat(ui): add expense form with live split editor and photo upload
4ae345a -
feat(ui): add admin user management and storage/compaction page
650ab40 -
fix(app): stop guard on boot failure, validate compaction interval, harden hooks
6d928e9 -
fix(photos,forms): own-property content types, dimension bounds, VP8L signature, trimmed inputs
fa363c5 -
fix(auth): bound scrypt params, cap concurrency, evict rate-limit keys, re-bootstrap admin
1c7b998 -
feat(ui): add expense feed grouped by month
8b1607e -
feat(ui): add profile page and forced password change
b721171 -
feat(ui): add layout, tab bar, login and logout
59d41c0 -
feat(app): wire config, singleton app bootstrap, and auth hooks
4bb4f90 -
fix(ledger): writer guard re-checks ownership and self-demotes on stale heartbeat
b0ccc27 -
feat(forms): parse and validate expense/settlement forms; photo sniffing
0545b15 -
feat(users): add UsersRepo with admin bootstrap and password management
1cf4d4c -
feat(auth): add scrypt hashing, signed session tokens and rate limiter
ef84ace -
test(ledger): prove compaction crash safety with fault injection and against the real bucket
8d2f1b6 -
feat(ledger): add heartbeat-based writer guard
ea1afde -
fix(ledger): heal truncated ledger, validate events on write, reconcile pending
664d562 -
feat(ledger): add Ledger service with event write path and compaction
3bfa0fc -
feat(ledger): add event schema, jsonl encoding and fold
a896df9 -
fix(storage): skip integration suite safely, tighten list contract, drop expand
d594446 -
feat(storage): add HfBucketStore with opt-in real-bucket integration test
9eafa48 -
fix(storage): atomic temp files, directory-safe get/delete, list contract docs
874bd3c -
feat(storage): add BucketStore interface, LocalFsStore and PrefixedStore
0d57d79 -
refactor(domain): move MAX_CENTS to money, deterministic shuffle in tests
ee86043 -
fix(domain): guard split allocation and balance invariants
5918e23 -
feat(domain): compute net balances and simplified debts
d180c31 -
feat(domain): add largest-remainder split allocation
3852523 -
fix(domain): harden schemas, ULID monotonicity and amount parsing
7f9220c -
feat(domain): add monotonic ULID generator and money parsing/formatting
3c22061 -
feat(domain): add core types and zod schemas
6ea96a3 -
chore: scaffold SvelteKit project with Tailwind, Vitest, adapter-node
52ec2ea