Commit Graph
1081 Commits
Author SHA1 Message Date
openhands 2e87e5bf09 chore: remove test-cf.ts (puppeteer no longer used)
CI / check (push) Successful in 25s
CI / release (push) Skipped
CI / deploy (push) Successful in 56s
2026-08-04 18:46:31 +02:00
openhands b87c9a5b8d chore: remove puppeteer CF bypass (not working for Leet/Hubbly/Habblet)
CI / check (push) Failing after 14s
CI / release (push) Skipped
CI / deploy (push) Skipped
Cloudflare has strengthened protection on these hotels.
Puppeteer-based bypass returns HTML instead of JSON.
cloudscraper has dependency issues with Node.js v26.

Reverted to simple HTTP fetch with clear error messages.
2026-08-04 18:45:10 +02:00
openhands 5c60ce364c chore: remove cf-fetch.ts (puppeteer CF bypass not working for Leet/Hubbly/Habblet)
Cloudflare has strengthened protection on these hotels.
Puppeteer-based bypass returns HTML instead of JSON.
cloudscraper has dependency issues with Node.js v26.

Reverting to simple HTTP fetch with clear error messages.
2026-08-04 18:42:20 +02:00
openhands cef068ff3c fix: remove stealth plugin to eliminate rimraf crash, use plain puppeteer
CI / check (push) Successful in 26s
CI / release (push) Skipped
CI / deploy (push) Successful in 45s
2026-08-04 18:36:52 +02:00
openhands 7137b046d7 fix: improve error handling in CF bypass to prevent server crashes
CI / check (push) Successful in 24s
CI / deploy (push) Successful in 43s
CI / release (push) Skipped
2026-08-04 18:28:35 +02:00
openhands c565351c2f fix: improve CF challenge detection and add timeout in cf-fetch
CI / check (push) Successful in 24s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m1s
2026-08-04 18:17:20 +02:00
openhands 847febbe64 fix: handle cleanup errors gracefully in cf-fetch
CI / check (push) Successful in 25s
CI / release (push) Skipped
CI / deploy (push) Successful in 46s
2026-08-04 18:13:41 +02:00
openhands 0bf6133775 fix: add puppeteer packages to serverExternalPackages to prevent Next.js build errors
CI / check (push) Successful in 25s
CI / release (push) Skipped
CI / deploy (push) Successful in 49s
2026-08-04 18:09:08 +02:00
openhands af8b59e024 fix: use dynamic imports for puppeteer to prevent Next.js build errors
CI / check (push) Successful in 24s
CI / release (push) Skipped
CI / deploy (push) Successful in 48s
puppeteer-extra cannot be statically imported in Next.js server bundles.
Using dynamic import() so puppeteer is only loaded at runtime, not at build time.
2026-08-04 18:05:01 +02:00
openhands a338f9cb72 feat: add Cloudflare bypass to fetchSourceFurnidata using puppeteer
CI / check (push) Successful in 23s
CI / release (push) Skipped
CI / deploy (push) Failing after 41s
- Add cf-fetch.ts with puppeteer-extra + stealth plugin for CF bypass
- Modify fetchSourceFurnidata to detect CF challenge and retry with puppeteer
- Restore Leet, Hubbly, and Habblet City to clone sources (now CF-protected)
2026-08-04 18:02:16 +02:00
openhands 624edf751a chore: restore Habbo, Wibbo, Hubba.cc, Hubbly, Soda Ho to clone sources
CI / check (push) Successful in 23s
CI / release (push) Skipped
CI / deploy (push) Successful in 40s
2026-08-04 17:49:33 +02:00
openhands 1258fd8e7b chore: only keep clone sources where all URLs (furnidata, nitro, icons) are verified working
CI / check (push) Successful in 25s
CI / release (push) Skipped
CI / deploy (push) Successful in 45s
Kept only:
- Leet (all 3 URLs working)
- Habblet City (all 3 URLs working)

Removed sources with broken or missing nitro/icon URLs:
- Habbo (no nitro/icons)
- Wibbo (nitro/icons return 403)
- Hubba.cc (nitro returns 404)
- Soda Ho (nitro/icons return 404)
2026-08-04 17:30:46 +02:00
openhands 9fbfd2f51a chore: verify clone sources with Cloudflare bypass test script; remove broken Hubbly URLs
CI / check (push) Successful in 26s
CI / release (push) Skipped
CI / deploy (push) Successful in 55s
Verified working sources via puppeteer Cloudflare bypass test:
- Habbo (GitHub) - 200
- Wibbo - 200 furnidata, 403/403 nitro/icons
- Hubba.cc - 200 furnidata, 404 nitro
- Leet - 200 304 304 (all working)
- Habblet City - 200 200 200 (all working)
- Soda Ho - 200 furnidata, 404 nitro/icons

Cloudflare-blocked sources removed (habba.io, habcrush.pw, fobba.net, etc)
Hubbly URLs removed (all 404) pending verification
Added test-cf.ts script for future source validation
2026-08-04 17:28:01 +02:00
openhands fa7fc75c9a feat: add leet.ws and hubbly.pw clone sources; add retro hotel prefixes to EVENT_PREFIXES
CI / check (push) Successful in 24s
CI / release (push) Skipped
CI / deploy (push) Successful in 46s
2026-08-04 16:50:05 +02:00
openhands 04b84e6055 feat: add organizeSql option for organized catalog_pages with English captions
CI / check (push) Successful in 24s
CI / release (push) Skipped
CI / deploy (push) Successful in 44s
2026-08-04 16:43:53 +02:00
openhands 2ee5ba5c4c feat: group unrepairable legacy items separately in catalog audit
CI / check (push) Successful in 25s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m2s
After a repair attempt, items whose nitro/icon assets cannot be restored
from any source are reclassified from hard errors into a dedicated
'Unrepairable (legacy)' group (info), so a fully repaired catalog can
reach 0 errors while still listing exactly what is not restorable. Adds
an unrepairable summary count and a dedicated tab in the audit UI.
2026-08-04 11:18:37 +02:00
openhands d587749b50 fix: precise item classification in catalog audit and repair
CI / check (push) Successful in 23s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m3s
Detect badges by items_base.type='b' (authoritative, album gifs as
fallback), recognize pet/animals (a0 pet<N>, pet<N> interaction) and
system items (effects, bots, sticky notes), and resolve asset names for
dot/star classname variants so the audit no longer floods with false
missing nitro/icon errors and repair skips non-furni items.
2026-08-04 11:07:04 +02:00
openhands b1a1e5125c fix: identify badge items by .gif presence in album1584 directory
CI / check (push) Successful in 30s
CI / release (push) Skipped
CI / deploy (push) Successful in 58s
Badge items like HC_Badge, BADGE_SHREK_03 have item_names that don't start
with 'badge_' and interaction_type='default'. Now loads known badge codes
from <gamedataRoot>/album1584/*.gif files and uses that set to exclude
badge items from .nitro and icon audit checks. Also removes incorrect
startsWith('badge_') check that would wrongly skip badge display cases
which DO have .nitro files.
2026-08-03 22:05:49 +02:00
openhands 750973de38 fix: correct badge item detection by checking classname prefix
CI / check (push) Successful in 30s
CI / release (push) Skipped
CI / deploy (push) Successful in 57s
Badge item_names already start with 'badge_' (e.g. badge_citycpa3),
so checking for badge_<item_name>_icon.png produces a double prefix
(badge_badge_citycpa3_icon.png). Now uses item_name.startsWith('badge_')
instead, which correctly identifies badge items without depending on
icon files existing in the directory.
2026-08-03 21:47:10 +02:00
openhands 1167a48344 fix: use badge icon file pattern to exclude badge items from audit and repair
CI / check (push) Successful in 28s
CI / release (push) Skipped
CI / deploy (push) Successful in 55s
Previously identified badge items by interaction_type='badge', but
clone-imported badges have interaction_type='default'. Now checks for
badge_<code>_icon.png file existence instead.
2026-08-03 21:39:27 +02:00
openhands 40da24bd8c Fix badge icon detection in catalog audit and repair
CI / check (push) Successful in 29s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m6s
Badge icons are stored as badge_<code>_icon.png (with badge_ prefix)
instead of <code>_icon.png like regular furni. Update the audit and
icon repair to check for both patterns so badge items are not falsely
flagged as missing icons.
2026-08-03 21:34:11 +02:00
openhands e97213e5d1 Exclude badge items from missing icon check in catalog audit
CI / check (push) Successful in 29s
CI / release (push) Skipped
CI / deploy (push) Successful in 57s
Badge items use .gif icons, not .png icons, so they should not
be flagged as missing icons in the catalog audit.
2026-08-03 21:28:30 +02:00
openhands 86d59195ec Exclude badge items from catalog audit and repair checks
CI / check (push) Successful in 24s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m5s
Badge items use .gif files, not .nitro bundles, so they should not
be flagged as missing .nitro or missing catalog entries. Also add
badge logicType handling in furni-import.ts so badges get the correct
interaction_type when imported.
2026-08-03 21:23:13 +02:00
openhands 1cbb33a4e2 perf: speed up catalog audit by batching file checks and parallelizing source fetches
CI / check (push) Successful in 38s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m13s
2026-08-03 19:52:09 +02:00
openhands 40a21ba767 fix: wrap SSE state updates in flushSync to resolve React error #418
CI / check (push) Successful in 24s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m3s
2026-08-03 19:42:20 +02:00
openhands cf89681576 fix: root-safe www-data chown after builds and config sync
CI / check (push) Successful in 29s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m0s
2026-08-03 19:12:22 +02:00
openhands 2fba923a3a feat: browser headers on audit fetches + verified clone furnidata sources
CI / check (push) Successful in 32s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m18s
2026-08-03 19:00:45 +02:00
openhands 080dc34e23 fix: never cache HTML so deploys always serve current chunks
CI / check (push) Successful in 30s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m2s
Anonymous HTML was sent with 'public, max-age=60, s-maxage=300,
stale-while-revalidate=300'. After a rebuild the old chunk URLs (keyed by
deploy id) are deleted, so any browser/CDN holding the stale HTML got 404s
for up to five minutes. Since the deploy id is the git commit, the HTML must
be re-fetched after every deploy; only content-hashed static assets should
be cached. Return no-store for all HTML documents.
2026-08-03 18:39:41 +02:00
openhands 450e7e8d00 fix: suppress hydration warning on html for theme-init class
CI / check (push) Successful in 25s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m6s
theme-init.js adds the 'dark' class to <html> before React hydrates,
causing a hydration mismatch (React #418) for users with a saved dark
theme. Mark the root element with suppressHydrationWarning.
2026-08-03 18:29:22 +02:00
openhands 30ed2b8ce2 refactor: switch password hashing from argon2 to bcrypt
CI / check (push) Successful in 23s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m0s
- hashPassword now emits bcrypt (cost 12) instead of argon2id
- checkLogin migrates legacy md5/argon2id hashes to bcrypt on sign-in
- keep argon2id verification only as a one-time migration path
- replace ARGON2_* env vars with BCRYPT_COST
2026-08-03 18:08:57 +02:00
openhands 6fc14b9b84 feat: catalog audit can repair orphaned refs and duplicate classnames
- add repairOrphanedCatalog: remove catalog_items rows whose item_ids only
  reference missing items_base entries, strip orphaned ids from mixed rows
- add repairDuplicateClassnames: merge items_base duplicates into one
  canonical row per classname, remap references, delete duplicate rows
- add 'repair structural issues' checkbox + result display in audit UI
2026-08-03 18:08:45 +02:00
openhands bee55e1fd4 fix: skip icon-repair integration test when no DB is configured
CI / check (push) Successful in 24s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m2s
2026-08-03 17:47:07 +02:00
openhands 613b7502e1 fix: repair updater and migrate configs to JSONC only
- fix emulator git path (repo root vs Maven submodule) and SQL/backup dirs
- auto-detect branch; track real parallel job exit status
- verify vite presence and clean+full install when node_modules is incomplete
- fix health-check label handling and skip jsonc/example files in JSON scan
- stop hardcoding the Nitro client path in chown
- drop JSON5: sync config URLs to .jsonc, remove legacy .json5 files
- bump to v8.0.2
2026-08-03 17:43:19 +02:00
openhands 44c34dbae6 fix: catalog-repair - allocate sequential ids in generateCatalogSql
CI / check (push) Successful in 45s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m13s
Previously allocateCatalogItemId was called per entry, but since generation
does not INSERT, MAX(id) never advanced and every entry got the same id.
Now MAX(id) is read once and a local counter hands out sequential ids.
2026-08-02 19:57:21 +02:00
openhands 5308ce6a12 feat: parallelize audit repair and add nitro/SQL repair options
CI / check (push) Successful in 48s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m55s
- Parallelize icon and nitro downloads in the audit repair with a
  sliding-window worker pool (6 concurrent) to speed up large catalogs
- Add repairMissingNitros: fetch missing .nitro bundles from configured
  nitro sources (Wibbo default), validating each bundle before writing
- Add catalog-repair service: generate/apply catalog_items SQL for furni
  missing a catalog entry and repair FurnitureData.json (add missing +
  dedupe classnames)
- Wire all options through the audit API and client UI with live progress
  and result stats (icons, nitros, SQL, furnidata)
- Add Wibbo as default nitro source alongside existing icon sources
- Ignore runtime furni assets downloaded into public/ during repair
2026-08-02 19:12:28 +02:00
Simo 0c8e62357f fix: preserve runtime furni assets during deploy
CI / check (push) Successful in 46s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m33s
2026-08-02 17:32:32 +02:00
openhands cde15ad022 fix: mirror repaired icons to gamedata
CI / check (push) Successful in 25s
CI / release (push) Skipped
CI / deploy (push) Failing after 1m18s
Repair Icons now resolves all furni asset write targets (webroot plus
the live gamedata like /var/www/Gamedata) and writes downloaded or
extracted icons to every missing location. Icons already present in one
target are copied across instead of re-downloaded, and local .nitro
bundles are searched in every target.
2026-08-02 16:56:22 +02:00
openhands 1f9e8a0eec feat: add default furni icon repair sources
CI / check (push) Successful in 26s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m1s
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
CI / check (push) Successful in 24s
CI / release (push) Skipped
CI / deploy (push) Successful in 44s
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 cf563f3550 docs: plan manual recent furni resync 2026-08-02 14:54:19 +02:00
Simo 6b6fc5dc64 docs: design manual recent furni resync 2026-08-02 14:51:46 +02:00
Simo ab43f5d63c fix: use JSON FurnitureData from gamedata
CI / check (push) Successful in 23s
CI / release (push) Skipped
CI / deploy (push) Successful in 42s
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 aed70db81f docs: plan configurable furni import source 2026-08-02 14:09:28 +02:00
Simo 1126a70d55 docs: design configurable furni import source 2026-08-02 14:04:58 +02:00
Simo 86cd43def9 fix: mirror manual furni uploads to live assets
CI / check (push) Successful in 24s
CI / release (push) Skipped
CI / deploy (push) Successful in 46s
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 a81af2d71a docs: plan production furni asset fix 2026-08-02 13:13:58 +02:00
Simo 44b4b3b45c docs: design production furni asset mapping 2026-08-02 13:12:10 +02:00