openhands
1f9e8a0eec
feat: add default furni icon repair sources
...
Fall back to well-known public furni icon hosts (HabboAssets, Hubbly,
Leet) when no clone sources are configured, so Repair Icons can download
missing icons out of the box. Also handle variant classnames (base name
and '*' replaced with '_') and extract icons from remote .nitro bundles.
Send a browser User-Agent on downloads to avoid being blocked by hotels.
2026-08-02 16:44:24 +02:00
Simo
bac2f653af
feat: add manual recent furni resync action
2026-08-02 14:59:31 +02:00
Simo
88ac5ac1ba
feat: add recent furni resync client contract
2026-08-02 14:56:12 +02:00
Simo
ab43f5d63c
fix: use JSON FurnitureData from gamedata
2026-08-02 14:42:23 +02:00
Simo
c78f8812ad
fix: use configured furni source and catalog assets
2026-08-02 14:22:05 +02:00
Simo
86cd43def9
fix: mirror manual furni uploads to live assets
2026-08-02 13:24:15 +02:00
Simo
01570874a8
fix: map furni imports to production gamedata
2026-08-02 13:16:51 +02:00
Simo
b3245a18ea
fix: bootstrap admin CSRF tokens
2026-08-02 11:46:43 +02:00
Simo
a57c73055f
fix: retry login across deploy cutovers
2026-08-02 11:31:35 +02:00
Simo
bfc951cfd9
fix: minimize deploy cutover downtime
2026-08-02 11:25:03 +02:00
Simo
828fda63e7
fix: keep app online during deploy preparation
2026-08-02 11:19:53 +02:00
Simo
1f4aadb3d7
chore: remove Sentry integration
2026-08-01 22:12:31 +02:00
openhands
c7fb37356e
fix: remove nonce from style-src to allow unsafe-inline to work
2026-08-01 22:09:22 +02:00
openhands
95b1955218
fix: allow unsafe-inline for styles to fix CSP permanently
2026-08-01 21:58:13 +02:00
Simo
d173dd3194
fix: add automatic deployment skew protection
2026-08-01 21:52:28 +02:00
openhands
0dc16e832d
fix: add additional CSP hashes for inline styles
2026-08-01 21:51:32 +02:00
openhands
59f03827bc
fix: add CSP hashes for inline styles from Google Fonts/Tailwind
2026-08-01 21:46:00 +02:00
openhands
0d6032d444
chore: remove standalone output mode, fix Sentry DSN validation, add dev CSP unsafe-inline for styles
...
- Remove output: 'standalone' from next.config.ts to allow normal 'next start'
- Allow empty SENTRY_DSN/NEXT_PUBLIC_SENTRY_DSN in env validation (zod)
- Add 'unsafe-inline' to style-src CSP only in development for Turbopack HMR
- Clear placeholder Sentry DSN values from .env
2026-08-01 21:30:51 +02:00
openhands
cc02851be3
perf(html): fix Cache-Control on response headers (was on request)
2026-08-01 18:41:08 +02:00
openhands
7c1f8d709e
perf(html): replace proxyAuth with getToken to remove set-cookie; add Cache-Control per auth state
2026-08-01 18:37:19 +02:00
openhands
2799b63943
perf(client): drop unused Sentry session-replay SDK from the client bundle
2026-08-01 18:18:53 +02:00
openhands
fd8ab7db93
perf(imaging): add s-maxage so Cloudflare caches avatar images
...
Avatars are proxied from the slow Habbo upstream on every request
(~350ms each) and Cloudflare was serving them as DYNAMIC because the
Cache-Control had no s-maxage. Add s-maxage=86400 + stale-while-revalidate
so edge/CDN caches avatars and repeats are served instantly.
2026-08-01 18:00:43 +02:00
openhands
22d455da7a
fix(auth): drop nonexistent account_blocked column from login lookup
...
getLoginUser selected users.account_blocked, which does not exist in the
DB (nor the Drizzle schema). Every credentials authorize() call threw a
SQL error -> NextAuth CallbackRouteError -> 'error=Configuration', so no
login could ever succeed. Remove the phantom column from the query and
LoginUser interface.
Also fix all remaining biome noNonNullAssertion / noExplicitAny lint
warnings so CI's check job (biome:lint) passes and the push deploy runs.
2026-08-01 17:38:43 +02:00
openhands
c601ffbb76
feat(auth): switch password hashing to argon2id with legacy auto-upgrade
...
- hashPassword now emits argon2id (same params as the legacy AtomCMS
Laravel setup: memory 64MB, iterations 4, parallelism 1)
- legacy md5 and bcrypt hashes are verified and auto-upgraded to
argon2id on successful login (CONVERT_PASSWORDS=true)
- replace BCRYPT_ROUNDS env with ARGON2_MEMORY_KB / ARGON2_ITERATIONS /
ARGON2_PARALLELISM
- update README and add tests for argon2id and bcrypt upgrade paths
2026-08-01 17:09:29 +02:00
Simo and Cursor
d69e3f5da5
fix(test): mock db in admin-alerts suite for push hook
...
Co-authored-by: Cursor <[email protected] >
2026-08-01 15:58:17 +02:00
Simo and Cursor
811cf5719b
fix(admin): cast clothing-set hard-fail mock return type
...
Co-authored-by: Cursor <[email protected] >
2026-08-01 15:57:14 +02:00
Simo and Cursor
2194aa1239
fix(admin): type-fix clothing-set hard-fail test mock
...
Co-authored-by: Cursor <[email protected] >
2026-08-01 15:56:53 +02:00
Simo and Cursor
16191cef14
fix(admin): harden clothing/pets/effects/clone imports
...
Align grids on data.items, only treat SSE done as success, hard-fail
clothing sets when libs fail, and add Cancel via AbortController.
Co-authored-by: Cursor <[email protected] >
2026-08-01 15:56:38 +02:00
Simo and Cursor
9c4949186c
feat(admin): server-safe StatusCard and Import hub polish
...
Split OnlineUsersWidget from StatusCard, decouple ad delete button, sync badge import to ExternalTexts+WebsiteBadges, add Import section hub with cancelable SSE jobs and upload SQL option.
Co-authored-by: Cursor <[email protected] >
2026-08-01 15:48:21 +02:00
Simo and Cursor
725e1cb338
feat(ops): health-fail alerts, optional DB backup, admin UX polish
...
Wire jobs-worker health probes to Discord/email alerts with cooldown, optional mysqldump, rate-limit /api/health, mark-all-read alerts, ConfirmDialog on destructive admin actions, and raise coverage floors.
Co-authored-by: Cursor <[email protected] >
2026-08-01 15:25:47 +02:00
Simo and Cursor
3bd712e744
fix(admin): polish tickets, photos purge note, drizzle contracts
...
Add queue banners/counts on ticket detail pages, document local-only photo purge, and harden Drizzle Kit smoke contracts after Prisma removal.
Co-authored-by: Cursor <[email protected] >
2026-08-01 15:07:54 +02:00
Simo and Cursor
ba82789166
chore(db): finish Prisma cutover to Drizzle Kit tooling
...
Move CMS SQL to drizzle/migrations, drop prisma packages/schema, wire drizzle-kit scripts, and regenerate schema names from src/db/schema.ts.
Co-authored-by: Cursor <[email protected] >
2026-08-01 15:02:21 +02:00
Simo and Cursor
d8199ea1e4
feat(admin): unified ticket inbox over CMS and help-center queues
...
Merged read-model inbox at /admin/tickets and /mod/tickets with type badges and deep links; CMS-only lists moved to /desk. No DB schema merge.
Co-authored-by: Cursor <[email protected] >
2026-08-01 14:49:19 +02:00
Simo and Cursor
422567272c
chore(db): remove Prisma facade and drop prisma:generate from CI
...
Co-authored-by: Cursor <[email protected] >
2026-08-01 14:38:42 +02:00
Simo and Cursor
ca72966a37
refactor(db): migrate app pages and APIs from Prisma facade to Drizzle (6)
...
Co-authored-by: Cursor <[email protected] >
2026-08-01 14:15:43 +02:00
Simo and Cursor
30b54e99e7
refactor(db): migrate app pages and APIs from Prisma facade to Drizzle (5)
...
Co-authored-by: Cursor <[email protected] >
2026-08-01 14:15:39 +02:00
Simo and Cursor
9aa4f331bf
refactor(db): migrate app pages and APIs from Prisma facade to Drizzle (4)
...
Co-authored-by: Cursor <[email protected] >
2026-08-01 14:15:36 +02:00
Simo and Cursor
580972c0a0
refactor(db): migrate app pages and APIs from Prisma facade to Drizzle (3)
...
Co-authored-by: Cursor <[email protected] >
2026-08-01 14:15:32 +02:00
Simo and Cursor
2cd0863cb8
refactor(db): migrate app pages and APIs from Prisma facade to Drizzle (2)
...
Co-authored-by: Cursor <[email protected] >
2026-08-01 14:15:28 +02:00
Simo and Cursor
7c39aef5d9
refactor(db): migrate app pages and APIs from Prisma facade to Drizzle
...
Co-authored-by: Cursor <[email protected] >
2026-08-01 14:15:12 +02:00
Simo and Cursor
53b350057d
fix(test): mock @/lib/db in send-currency tests for pre-push
...
Co-authored-by: Cursor <[email protected] >
2026-08-01 13:30:16 +02:00
Simo and Cursor
65b2fbee6a
refactor(db): finish Drizzle migration for remaining actions and services
...
Co-authored-by: Cursor <[email protected] >
2026-08-01 13:27:59 +02:00
Simo and Cursor
22234fe102
fix(test): type drizzle mock callbacks for tsc
...
Co-authored-by: Cursor <[email protected] >
2026-08-01 13:18:10 +02:00
Simo and Cursor
096f55b394
test: align remaining action tests with Drizzle mocks
...
EOF
Co-authored-by: Cursor <[email protected] >
2026-08-01 13:17:35 +02:00
Simo and Cursor
ed9c23c702
refactor(db): migrate staff and app actions from Prisma facade to Drizzle
...
Co-authored-by: Cursor <[email protected] >
2026-07-31 21:35:05 +02:00
Simo and Cursor
9854719cfd
feat(admin): drizzle trade-lock + RCON sync and photo local purge
...
Co-authored-by: Cursor <[email protected] >
2026-07-31 21:14:03 +02:00
Simo and Cursor
67656a9aad
fix(ci): migrate on tag release and wire drizzle schema generate
...
Co-authored-by: Cursor <[email protected] >
2026-07-31 21:03:54 +02:00
Simo and Cursor
20b85381fe
fix(db): accumulate many-includes and nest relations in prisma facade
...
Co-authored-by: Cursor <[email protected] >
2026-07-31 20:57:52 +02:00
openhands
e5ff7ec9e5
chore: clean up biome lint warnings — all non- intentional resolved
...
- Remove 25 unused imports across 14 test files
- Remove 1 unused variable (rename with _ prefix)
- Fix 2 noBannedTypes (Function → (...args: unknown[]) => unknown)
- Fix 1 useTemplate lint (string concat → template literal in merge-config.cjs)
- Fix 1 useNodejsImportProtocol (merge-config.cjs)
- Fix 2 noTemplateCurlyInString (generate-drizzle-schema.mjs generator code)
- Auto-fix formatting + import sorting across modified files
- 221 remaining warnings: intentional noExplicitAny in prisma-facade.ts (Prisma compat layer)
- 0 tsc errors, 583 tests passing
2026-07-31 15:26:39 +02:00
openhands
7f7971f578
fix: resolve all biome lint errors and type issues
...
- Add file-level biome-ignore for noExplicitAny in prisma-facade.ts
(intentional any for Prisma API compatibility surface)
- Fix noNonNullAssertion errors in cached-db.ts (redis null-guard fixes)
- Auto-fix formatting + organizeImports across modified files
- 0 tsc errors, 0 biome errors, 583 tests passing
2026-07-31 15:15:15 +02:00