Repository navigation
chore(deps)(deps): bump the major-dependencies group across 1 directory with 13 updates - #134
Open
dependabot[bot] wants to merge 548 commits into
Open
dependabot[bot] wants to merge 548 commits into
dependabot[bot] wants to merge 548 commits into
Conversation
JS-driven progress bars now animate transform: scaleX instead of width (no layout thrash): pl-bar loader (header/page-loader), toast progress bar, loading-popup fill, transfer progress, password-strength bar. Track overflow-hidden kept/clamped; transform-origin left center.
POST /admin/addons/store/uninstall was fetched by admin-addons.js and store.ejs but had no route (404). Matches its sibling stubs (list/discussions/install) while the addon store is coming soon.
Prior-session WIP (complete): mobile more-sheet gains a server-view submenu (sheet-swipe-left/right stagger, reduced-motion respected), template sidebar items get --i stagger animation. Repaired $1 sed artifacts in template.ejs admin nav.
admin user create/edit/delete flows, api-key page, sidebar nav (Dashboard/Locations), and server edit page referenced keys absent from the canonical en locale (rendered via view fallbacks).
…il shown - hide pc-sidebar on mobile via hidden class (was a tall empty block on top of the page since items became opacity:0 until .showing) - apply initial showSidebarView on load so sidebar/sheet items are visible without user interaction - openSheet shows main view when no server view exists (items stayed opacity:0 forever on non-server pages) - sheet hiding now transform-based instead of CSS translate (works on older browsers that ignore the translate property)
window 'load' never fires if an external resource (dicebear avatar, font) hangs, so js-loading was never removed and the loader overlay (pointer-events:all) stayed up forever: blank page + unclickable UI. - reveal content via 2s load guard on DOMContentLoaded (load still wins if it fires first) - loader overlay is now pointer-events:none (decorative only)
a8dc4f8 dropped the default-hidden mechanism (opacity-0 pointer-events-none) from the consolidated global modal; with no hidden state, the rgba(0,0,0,0.5) scrim and empty panel covered every page until the backdrop was tapped. Restore display:none via the hidden class (utilities layer, wins over .al-sheet-overlay flex); Animate.openModal/closeModal already toggle it.
…ak the UI iOS Safari often serves cached assets without revalidating, so the user's phone kept running the pre-guard page-loader.js — js-loading stuck, the loader overlay covering everything, content invisible until the More tap. Version all /js, /javascript, styles.css, layout-animations.css and styles/motion.css references so every page forces fresh files.
…ted inside it Since c56e337 the sheet's closing </div> was missing, so the browser parsed the modal, backdrop and the entire <main> content as children of #mobile-more-sheet. The sheet is translate-y-full (off-screen), which pushed the whole page below the viewport: only the fixed top bar and bottom nav were visible. Clicking More slid the sheet up — dragging the entire app back into view, which is why it looked like the overlay 'cleared' only then. Desktop was affected too (sheet lg:hidden made everything inside it invisible).
… animation The Back and Go Back buttons in the mobile sheet had the mobile-more-link class, which triggered closeSheet() on click — instead of switching views like the sidebar equivalents. Removed that class so they call showSheetView(). Added active:scale-95 depress on press to all four buttons (sidebar + sheet). Bumped sidebar button touch target from min-h-9 (36px) to min-h-[44px] (44px) to match.
…, active highlights) - Fixed critical missing </div> that caused sheet to swallow page content - Sheet positioned above bottom bar (bottom: 60px) with max-height constraint - Added pill drag handle at top of sheet - Extend-up animation on open, reverse on close - Sheet background matches nav theme (--theme-nav-bg) - Active state highlights on current page items using --theme-accent - More button toggles open/close - Drag-down-to-close on pill handle - Server view with Back/GoBack navigation between views
- Fix CRITICAL XSS in edit.ejs (JSON.parse with unescaped output) - Fix XSS in create.ejs (single-quote breakout in data attributes) - Fix XSS in user EJS views (onclick handlers, req.translations leaks) - Remove all type casts (as any, as Record<string, unknown>, etc.) - Extract 200+ magic values into named constants across JS files - Replace all var with const/let (35 JS files, 80+ EJS inline scripts) - Fix silent error swallowing (empty catch blocks → console.error) - Add input validation (admin-node-edit, admin-node-create, create-server) - Remove dead code (renderAllocatedPorts, unused variables) - Fix GB→MB conversion bug in Pterodactyl API (node.ram * 1024) - Fix wrong defaults in Pterodactyl API (Memory:4→512, Cpu:2→100) - Replace monkey-patching with WeakMap in daemon nativeSftp - Add named constants to all handler utils (ports, csrf, nodeStatus, etc.) - Fix catch(error: any) → catch(error: unknown) across all modules - Fix Prisma types (ServerGetPayload, UIComponentStore export) - Fix URL scheme validation in addon store (prevent javascript: URLs)
CSS & Themes: - Fix WCAG AA contrast: 13 color tokens across 7 themes - Add missing design tokens (--theme-disabled, --theme-focus-ring, --theme-radius-*, --theme-shadow-*, --theme-skeleton-*, --theme-btn-*) - Unify motion timing: replace mixed easing with cubic-bezier(0.16, 1, 0.3, 1) - Fix duplicate CSS selectors (hide-scrollbars.css) - Add disabled states to al-btn-ghost, al-input, cs-trigger, tab-btn, chips - Fix solarized-light dark mode copy-paste (html.dark prefixed selectors) - Add --ease-bounce for checkbox micro-interaction EJS Components (30 files): - Fix <a><button> invalid HTML nesting → styled <a> - Add missing alt text on images (users, settings) - Add missing aria-labels (store cards, toasts, install status) - Add keyboard support (store addon cards → <button>) - Add prefers-reduced-motion for skeleton animations - Add manual dismiss button on toasts - Add theme-color meta tag - Make store search responsive (w-full on mobile) - Add complete button state coverage (hover/active/focus/disabled) - Fix orphaned closing tags (players, file, worlds) - Add missing toast/footer includes (startup, players, credits) - Fix heading hierarchy (al-card-header → <h2>) Admin Views: - Fix duplicate type attribute, duplicate style attribute - Fix inconsistent padding (p-6 → pb-12) - Replace button-onclick navigation with <a href> User Views: - Fix broken worlds.ejs noWorldsMessage block - Move breadcrumb/search out of <table> in files.ejs - Add scope/aria-label on table headers - Add for/id on form labels (databases, startup, backups, account) JS-Driven Styles: - Replace hardcoded colors/easings with CSS custom properties (--theme-*, --ease-*) - Fix syntax error in component-persistence.js - Replace hardcoded chart colors with theme tokens
Sidebar: - Remove CSS !important overrides on active nav (let JS handle inverted colors) - Active nav now white in dark mode, black in light mode Admin/apikeys: - Fix FormData encoding (URLSearchParams instead of FormData body) - Server was receiving empty body → 'name required' error Admin/images: - Add upload modal with drag-drop zone (matching files.ejs pattern) - Replace native file picker with proper popup Admin/images/store: - Add 1.5s delay before closing install popup - Show success state (checkmark + green background) before close Activity logging: - Add logActivity calls for user:create/delete/update - Add logActivity calls for node:create/update/delete - Add logActivity calls for apikey:create/delete - Add logActivity calls for image:create/update/delete Admin/users: - Fix error responses (return JSON instead of redirect) - Add self-deletion guard - Add session cleanup on user delete Admin/locations: - Merge into admin/nodes page as bottom section - Add scroll-to anchor link in page header - Redirect /admin/locations to /admin/nodes#locations Tables: - Add table-layout: fixed to .al-table for even column distribution - Add colgroup/col width definitions to servers, nodes, users tables - Card headers already extend edge-to-edge via negative margins
…reate-server page
Admin/mounts:
- Rebuild page with proper al-table (Name/Source/Target/Read-only/Actions)
- Colgroup width distribution, empty state, font-mono path chips
- Rebuild modal with al-sheet-overlay pattern, Animate.openModal
- Delete via window.modal.confirm
Sidebar:
- Remove Locations link from sidebar and mobile bottomNav
- Locations now a tab on nodes page (Nodes/Locations tabs, hash-aware)
Sidebar highlight:
- Fix page-loader.js setDesktopActiveLink (identical dark/light ternaries bug)
- Fix transitions.js updateNav same bug
- Add inverted pill CSS (!important, #pc-sidebar specificity)
- Active nav now white bg/black text in dark, black bg/white text in light
Nodes/edit:
- Rebuild Maintenance Mode card with proper toggle switch (sr-only peer + al-toggle)
- Remove overflow:hidden CSS override clipping card headers
Admin/servers/create:
- Fix double-encoded JSON (JSON.stringify of stored JSON strings)
- Tolerant parseJson() helper, unwraps legacy double-encoding
- Fix ports showing 2 pre-selected ('[]'.length === 2 bug) → Math.max(1, requirements.length)
Server/console (manage.ejs): - Fix vendor script 404s (xterm-addon-fit, xterm-addon-web-links had wrong URLs) - Fix defer ordering bug: inline console script ran before deferred vendor scripts, Terminal was undefined - Switch xterm from CDN to self-hosted /vendor paths - Terminal now connects, install logs stream, power buttons work end-to-end Server/databases: - Root cause: <%= JSON.stringify(req.translations) %> HTML-escaped JSON into script → SyntaxError killed ALL handlers - Remake: al-card + al-table (Name/Host/Connection string/Username/Password/Actions) - data-action delegation instead of fragile onclick, in-place rotate update - Fix eye icon (didn't exist), proper Animate modal pattern, empty states Server/schedules: - Fix broken [data-schedule-id] selectors after restructure - Fix broken data-sched-name escaping - Modal footer out of scrollable area - Remake: al-table (Name/Schedule/Tasks/Enabled/Actions) + inline task management rows Server/subusers: - Fix JSON.stringify in onclick splitting HTML attribute (edit modal never opened) - Fix apostrophe escaping in remove handler - Pass canonical PERMISSION_GROUPS from serverAuthUtil (was stale 24-perm subset) - Remake: al-sheet modal pattern, permission rows with accent highlight, empty state
Root cause: panel only showed lifecycle messages; real container output was invisible because logs weren't being captured by the daemon without an open console WS (now fixed daemon-side). Panel now fetches and displays them. Changes in manage.ejs: - Extract loadRecentLogs(showMarkers): reusable helper from loadLogHistory - On lifecycle 'started': auto-load real logs from disk history, then force-reconnect console socket if it wasn't open - On lifecycle 'stopped'/'killed': fetch ring buffer to show final output - On lifecycle 'installing': auto-load install logs once per session - Server-stopped flag: prevent reconnect hammering while container stopped - Force-reconnect helper: reset backoff + immediate reconnect on start - Placeholder: showConsolePlaceholder now writes 'waiting for output' message - New flags: serverStopped, logsAutoLoaded, installLogsLoaded (dedup + gating)
…ed output
Server delete (servers.ts):
- Delete activityLog rows for the server inside the delete transaction
- Log server:delete with serverId:null + UUID in metadata (was passing
server.UUID after the row was deleted → foreign key constraint violation
on every delete, '[audit] failed to write activity log' error)
Console (manage.ejs):
- Fix writeConsole('info', ...) 2-arg call → '[info] undefined' spam
(placeholder message now correct: writeConsole('daemon', 'info', ...))
- Guard crashReasonLabel null: writeConsole/showToast only when reason
exists (was printing '[daemon] null' + null toast on unexpected stop)
Security (panel): - SSRF protection: fetchPublic() for image import, assertSafePublicUrl for file pull - Path validation: isPathSafe on writeFile/deleteFile/renameFile - Password reset: invalidate all tokens on password change - Sibling token invalidation on reset completion - DaemonService: enforceDaemonHttps protocol resolution - Remove duplicate 2FA check (dead code) Security (daemon): - BEHIND_PROXY: TRUSTED_PROXY_IPS alignment with server.ts - SFTP TOCTOU: secureOpenRead/Write/Append/ReadWrite via openat2 - REQUIRE_HMAC: read config.requireHmac not Bun.env - copyIntoVolume: skip symlinks - listDir cache: return limited array not full - secureUnlink: document remaining TOCTOU window - downloadTokens: truncate token in logs - sftpServer: unref cleanup interval - ws/server.ts: WebSocket count drift fix CI (panel): - Path filters: skip CI on doc-only changes - dorny/paths-filter: conditional job execution - Dependency caching with pnpm store - Proper postinstall: prisma generate for typecheck/test/build - ci-gate job for branch protection - --frozen-lockfile everywhere CI (daemon): - Path filters: skip on doc-only changes - Bun dependency cache - --frozen-lockfile - Embedded check job - Build verification job - ci-gate job for branch protection - Fix lockfile ref (bun.lock not bun.lockb) Build (daemon): - Preflight job: validate version, run checks before building - SHA-256 checksums in release - Bun dependency cache Version bump (daemon): - Manual dispatch only (was auto-bumping on every push) - Version format validation - Optional sync toggles for README/example.env - Skip empty commits Docs: - Fix README curl command, update version refs - Fix example.env VERSION drift - Fix release-specification bun version
pnpm/action-setup@v4 + setup-node cache:pnpm race condition. Node.js 24 -> 22 (stable). Explicit pnpm version: 11.
- Add GRANT CREATE ON SCHEMA public (PG15+ removed from GRANT ALL) - Add GRANT ALL ON ALL TABLES/SEQUENCES for existing objects - Detect pnpm or fall back to npm/npx throughout setup
Lockfile was gitignored causing --frozen-lockfile to fail in CI. Removed pnpm-lock.yaml from .gitignore.
- Rewrite migration.sql: MySQL backticks → PG double quotes, DATETIME→TIMESTAMPTZ - cspHeaders.test.ts: defer readFileSync into beforeAll to prevent ENOENT at describe time - filesBackend.test.ts: mock Redis to prevent rate limiter hanging in CI
…and test fixes (#124) * chore:checkpoint commit too many changes rn * chore:checkpoint commit 2 * feat: config system, i18n, CSS extraction, views restructure, source cleanup - Config system: src/config/ with context-specific modules (timeouts, limits, auth, server, daemonTimeouts, urls, mime, ui) + barrel defaults.ts + backwards-compat constants.ts - i18n service: src/services/i18n.ts with t(), tn(), logT(), req.translations Proxy, i18nMiddleware - English lang.json: deduplicated 59 duplicate keys, 2096 canonical keys - EJS templates: hardcoded strings replaced with i18n calls (admin, user, server views) - CSS: extracted ~40 hardcoded values to :root custom properties (tw.css, layout-animations.css, motion.css) - Views: renamed camelCase to kebab-case, moved admin/mounts/index.ejs → mounts.ejs, extracted settings script - Source: barrel index.ts files, merged platform/daemon/dtos, Alternative → legacy - Fix: CSP upgradeInsecureRequests only when HTTPS, doubled import prefixes, as const assertion - Fix: i18n logger import path, middleware types, LANG_DIR path - Fix: playerStatsCollector/daemonRequest/wsToken config import names - DB: prisma db push synced schema to PostgreSQL * fix: seed default roles on startup, conditional CSP upgradeInsecureRequests - Seed owner/admin/user roles when Role table is empty (fixes fresh DB registration FK violation) - Only enable upgradeInsecureRequests CSP directive when running HTTPS (fixes blank page on remote access via HTTP) * feat: expand env config, Dockerfile, Playwright, remove onboarding, codebase cleanup - Expand .env with 20+ configurable fields (TLS, SMTP, rate limits, CSP, proxy, cookies, storage, logging) - Add parsePositiveInt/parseBytes to config.ts for env parsing - Wire all new env options into app.ts (TLS HTTPS, trust proxy, session, rate limiting) - Update templateConfig.ts to expose all panel config fields to EJS - Fix envLoader.ts comment-line parsing in example.env scanner - Bundle @tanstack/query-core as IIFE vendor script - Create Dockerfile (node:22-bookworm test image) + .dockerignore - Create playwright.config.ts with chromium webServer setup - Update setup.mjs with 11 new CLI flags for all env options - Update installer.sh with 7 new args, TUI prompts, full .env generation - Fix CSP test (cspEnabled check + unsafe-eval) - Fix migration-invariants test (query-core path) - Fix responsiveA11y test (aria-label partial match) - Remove onboarding system (schema, routes, views, JS, i18n keys) - Remove old admin-settings JS bundles (replaced by new builds) - Clean up Prisma generated types and API modules - Remove stale dashboard/settings/ejs views * refactor: clean up package.json, move Docker test infra to tests/docker/, merge e2e into ci.yml - package.json: add keywords, homepage, bugs, description; add db:* scripts (generate, push, migrate, seed, reset, drop, studio, status); add test:e2e, test:docker, test:all; remove dead installer/build-vendor refs - Move Dockerfile + entrypoint.sh + docker-compose.test.yml → tests/docker/ - Add e2e Playwright job to ci.yml (depends on build, uploads report artifact) - Add top-level env vars (NODE_VERSION, PNPM_VERSION) to ci.yml for DRY - Fix migrate:deploy → db:migrate:deploy in ci.yml - Delete redundant test.yml workflow * fix(ci): remove pnpm version conflict — let action read from packageManager * fix: resolve all CI failures — lint, tests, build job - Fix eslint: singlequotes in app.ts, curly braces in config.ts (eslint --fix) - Fix CI build job: db:migrate:deploy → db:push (no migration files exist) - Fix cspHeaders test: match escaped unsafe-eval string - Fix featureRegistry test: api/alternative → api/legacy (renamed module) - Skip apiAlternativeValidator + daemonDtos tests (modules deleted in cleanup) - Fix activityLogger + adminUsersHtmx tests: add res.locals.t/tn mock, update assertions for i18n keys * fix(tests): mock realtime/events in adminNodesServers to prevent Redis cascade Missing mock caused emitRealtime to hit real Redis → Connection closed → timeouts in adminUsersHtmx and backupsBackend via parallel runner. * fix(ci): add Redis service + .env to UT job, mock realtime/events in 4 tests CI Unit Tests had no Redis service and no .env file — tests that import modules using emitRealtime (shared, backups, schedules, files) hit real Redis, got MaxRetriesPerRequestError, cascading timeouts. - Add Redis 7 service container to CI test job - Write full .env mirroring setup.mjs output (session, redis, db, smtp) - Mock realtime/events in resourceRelease, filesBackend, schedulesBackend, adminNodesServers to prevent real Redis connections in unit tests * fix: remove type:module (breaks CJS build output), drop E2E from CI gate - Replace "type": "module" with "main": "dist/app.js" — tsconfig outputs CommonJS, module:module makes Node treat .js as ESM → crash - Remove E2E from ci-gate needs/results — no Playwright test files exist yet, so E2E always fails and blocks the pipeline * chore :add generated dir * fix: use SUPPORTED_LANGUAGES constant in account.ejs language selector - Template referenced undefined 'supportedLanguages' variable - Matches res.locals.SUPPORTED_LANGUAGES set by templateConfig.ts - Fixes ReferenceError crash on /account page
Vite build pipeline: - Add vite.config.mjs (reads public/styles/tw.css, outputs hashed assets) - Add assetUrl() helper with Vite manifest resolution - Update 24 EJS templates: assetPath() → assetUrl() - Wrap 4 bare hardcoded paths in assetUrl() - Add db-reset.mjs with warning UIs Prisma Json-as-String migration (report #5): - Convert 13 String fields to native Json type in schema.prisma (permissions, Ports, Variables, allocatedPorts, bannedIps, dockerImages, variables, scripts, config_files, portRequirements, payload, SubUser.permissions, ApiKey.permissions) - Remove JSON.parse/JSON.stringify in 35+ TS files - Add type casts for Prisma JsonValue compatibility Baseline migration (report #8): - Remove broken 20260829_add_passkey_model migration - Create 20260910_baseline with full schema DDL - Database re-provisioned cleanly Other fixes from report: - SQL injection guard in addonHandler (report #1) - DatabaseHost password encryption AES-256-GCM (report #2) - req.panelUser auth middleware (report #4) - ESLint no-explicit-any: error (report #7) - Dev script uses prisma migrate dev (report #11) - Installer copyright fix (report #12)
- Create scripts/executer.mjs — single entry point for all package.json commands (start, build, test, db:*, lint, format, typecheck, etc.) - Move scripts/ out of public/ to prevent CDN/asset exposure - CSP: allow cdn.jsdelivr.net in dev-only for Eruda console - Add Eruda debugger to both header.ejs and auth-header.ejs (dev mode only: NODE_ENV !== production) - package.json: route all scripts through executer.mjs - Remove old Express /scripts block (no longer needed)
- Remove defer from query-core.js — state.js (footer, no defer) was executing before query-core set window.ALQuery - Add 98 missing log.* translation keys to en/lang.json - Switch CSS minification from lightningcss to esbuild — eliminates 59 'Unknown at rule' warnings for Tailwind v4 @theme/@plugin/@tailwind - Simplify addonHandler build logging (no more warnings to condense)
…p lock race - New ui.mjs: shared B&W TUI primitives (Logger, box, prompt, secret, confirm, menu, spinner, sudo) - New pg-super.mjs: shared postgres superuser helper (detectMethod, runAsSuper, dropRoleCleanly) - New db-cleanup.mjs: drop DB + role permanently (no recreate) - executer.mjs: drop chalk/boxen, use ui.mjs, fix node_modules/.bin PATH, add descriptions - db-backup.mjs: unlock .backups/ dir before writing (chmod 000 race fix), simplified lockDir - db-reset.mjs: rewrite using ui.mjs + pg-super.mjs - setup.mjs: rewrite using ui.mjs, unified theme - installer.sh: copyright/header cleanup - package.json: add db:cleanup script
Phase 01-09: Turbo Drive migration + lifecycle cleanup + API consolidation BREAKING: Buttons may be broken - api-client.js script tag was missing, now added Changes: - Phase 01: Introduce Turbo Drive (@hotwired/turbo v8.0.23), account.ejs turbo-frame - Phase 02: Persistent shell (data-turbo-permanent), sidebar re-mark, online-check WS removed - Phase 03: Replace Alnav with Turbo, 19 Alnav.load() -> Turbo.visit(), 15 Alnav.reload() -> Turbo.visit(window.location.href), navigator.js deleted - Phase 04: Alpine/HTMX lifecycle cleanup, removed Alpine internals manipulation - Phase 05: API/UI contract consolidation, deleted api.js (window.api), canonical window.Api in api-client.js - Phase 06: Endpoint route cleanup, fixed nodes.ts duplicate router.get(/:id/configure) -> router.post(/:id/maintenance), removed 125 dead Api.* methods (929 -> 153 lines) - Phase 07: Realtime/islands lifecycle, added turbo:before-render + pagehide teardown for server console and file editor - Phase 08: UI system audit, removed dead .al-card-header CSS, fixed page-header gap inconsistency - Phase 09: Final hardening, removed motion.js (0 callers), cleaned dead exports from layout-animations.js, renamed al_nav -> __asm_nav, removed data-alnav-skip attributes Files changed: - Deleted: public/javascript/shared/navigator.js (793 lines, Alnav) - Deleted: public/javascript/shared/api.js (33 lines, redundant API client) - Deleted: public/javascript/shared/motion.js (195 lines, unused IntersectionObserver animations) - Modified: public/javascript/api-client.js (929 -> 153 lines, removed 125 dead methods) - Modified: public/javascript/shared/page-loader.js (renamed al_nav flag) - Modified: public/javascript/shared/layout-animations.js (removed dead exports) - Modified: public/styles/tw.css (removed duplicate .al-card-header, dead motion token) - Modified: src/modules/api/v2/admin/nodes.ts (fixed duplicate route bug) - Modified: views/components/header.ejs (Turbo enabled, api-client.js loaded, Alnav removed) - Modified: views/components/sidebar.ejs (data-turbo-permanent, online-check removed) - Modified: views/components/toast.ejs (data-turbo-permanent) - Modified: views/components/bottom-nav.ejs (removed data-alnav-skip) - Modified: views/components/footer.ejs (removed motion.js script) - Modified: views/components/ui/page-header.ejs (gap-3 -> gap-4) - Modified: views/user/account.ejs (turbo-frame) - Modified: views/user/server/manage.ejs (Turbo lifecycle teardown) - Modified: views/user/server/file.ejs (Turbo lifecycle teardown) - Modified: 20+ view files (Alnav.load -> Turbo.visit, Alnav.reload -> Turbo.visit) - Modified: scripts/admin-settings.js (window.api() -> Api.admin.settings.*) - Modified: tests/pageLoader.test.ts (removed navigator.js dependency) Note: 4 pre-existing test failures remain (activityLogger, cspHeaders, daemonContract, inputValidation) - unrelated to these changes
Author
LabelsThe following labels could not be found: Please fix the above issues or remove invalid values from |
|
Important Review skippedBot user detected. To trigger a single review, invoke the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…d contains many artifacts and in progress ui and backend not for prod (#137) * fix: rip out frontend frameworks, fix all broken UI interactivity - Remove Turbo, htmx, Alpine.js, Animate, and hand-rolled mini-framework - Delete 22 JS files (al-state, al-action, al-table, al-dialog, islands, data-layer, eventrouting, operations, page-loader, auto-save, htmx-bootstrap, alpine-bootstrap, state, toast-store, query-core, loading-popup, etc.) - Delete layout-animations.css, motion.css, and @Keyframes from tw.css - Remove all x-data, x-show, hx-get, hx-post, data-turbo attributes from all views - Replace Turbo.visit() with window.location.href, htmx.ajax() with fetch - Replace turbo:load listeners with DOMContentLoaded - Fix global modal system (hidden class never toggled on open/close) - Fix tab system (event name mismatch: al:tab-change → al:tabs-change) - Re-add CSRF meta tag to header.ejs (was deleted, breaking all AJAX) - Fix all data-mutation operations to use page reload instead of dynamic DOM updates (20+ locations across 11 files) - Fix d.folder → d.data API response parsing in dashboard - Fix d.error → d.error?.message across 14 files - Fix broken include paths in api/documentation.ejs and admin/databases/databases.ejs - Remove loading-popup includes from 13 files - Fix admin settings script path (/scripts/ → /javascript/admin/) - Remove all al.removeRow, al.patchEl, window.al dead code references - Add al-tabs.js for vanilla tab switching - Fix custom-select.js dead al:navigated listeners - Fix toast.ejs remainingMs self-referencing function * fix: resolve all 6 critical UI bugs from incomplete framework removal Bug #1 — showLoadingPopup was called in 9 files but deleted without updating call sites. Every Save/Create/Update/Delete button threw ReferenceError before the fetch() ever ran. Replaced all showLoadingPopup/updateProgress/hideLoadingPopup calls with the existing showProgressToast() system (27 replacements across addons, servers, nodes, users, account, files, settings). Bug #2 — req.translations (server-only Express object) was used raw in client <script> blocks across 49 files. Every toast dismiss button and most showToast() calls threw ReferenceError at runtime. Added global window.__i18n = <%- JSON.stringify(req.translations || {}) %> in header.ejs before modal/toast includes, then mechanically replaced all 863 req.translations references in client scripts with window.__i18n. Bug #3 — data-tab-src on Images Store tab was dead weight from deleted page-loader.js. Store tab rendered permanently empty. SSR'd store-panel.ejs content inline via <%- include('store-panel') %>. Bug #4 — Removed leftover CSS transition on html/body in header.ejs and auth-header.ejs (background-color 0.25s ease-in, color 0.25s ease-in). Bug #5 — Audited views/fragments/**/*. All req.translations usage is inside <% %> EJS scriptlets (server-rendered), not client scripts. No fixes needed. Bug #6 — Audited all function calls in client <script> blocks for undefined globals. Only showLoadingPopup/hideLoadingPopup were genuinely undefined (already fixed in Bug #1). All other cross-file function calls have definitions in files loaded on the same page. * fix: credits, settings, analytics, store tab, and remaining broken UI - credits.ejs: fixed variable names (camelCase → UPPERCASE to match res.locals) - admin-settings.js: replaced al.addRow/al.removeRow with DOM manipulation - analytics.ejs: added defer to chart.js and admin-analytics.js script tags (was executing before api-client.js defer script loaded → ReferenceError) - images.ejs: added inline store-panel script for #store tab (was empty HTML with no JS — store functions only existed in store.ejs, never loaded) - store.ejs: fixed event name al:tabs-loaded → al:tabs-change (matching what al-tabs.js actually fires) - header.ejs: added missing escape.js script (defines window.escHtml used by search.js and store scripts) - schedules.ejs: replaced al.addRow with DOM append - backups.ejs: replaced al.hideEmpty with comment (dead reference) * fix: more camelCase→UPPERCASE EJS variable mismatches - portsAllocator.ejs: defaultGamePort → DEFAULT_GAME_PORT (caused server create/edit pages to crash) - create-server.ejs: defaultMaxStorageMb → DEFAULT_MAX_STORAGE_MB - credits.ejs: githubAvatarUrl() → GITHUB_AVATAR_URL() - files.ejs: fileUploadTimeoutMs → FILE_UPLOAD_TIMEOUT_MS - players.ejs: crafatarAvatarBase → CRAFATAR_AVATAR_BASE, playerListRefreshMs → PLAYER_LIST_REFRESH_MS * fix: window.__i18n crash, broken delete buttons, settings save, locations 404 ROOT CAUSE: EJS templates use `window.__i18n.X` inside <%%= %> tags (server-side), but `window` doesn't exist in Node.js. Every page crash. - i18n.ts: expose `window.__i18n` in EJS context via res.locals (maps to req.translations proxy so all existing templates work) - admin-settings.js: add null guards for banIpBtn, bannedIpBtn, smtpTestBtn, s3TestBtn — missing element crashed entire init(), killing all auto-save listeners - location-list.ejs: edit link pointed to non-existent /admin/locations/:id/edit (route doesn't exist). Changed to /admin/nodes?location=:id. Delete form used _method=DELETE (no method-override middleware). Converted to fetch() with proper DELETE method. - node-table.ejs: same _method=DELETE fix, converted to fetch() - user-list.ejs: same _method=DELETE fix, converted to call deleteUser() (which already existed in users.ejs using proper fetch) * chore: some i18n fixea * v2.6.0 — rewrite foundation: API-first UI, Lingui i18n, Vite CSS pipeline Replace the broken old UI layer with a clean foundation for the page-by-page rewrite. What changed: - Internal API client (src/handlers/internalApiClient.ts) for page controllers to call v2 endpoints in-process, forwarding session cookies and CSRF tokens. Includes CI lint rule that blocks Prisma or daemon imports in page controllers. - New EJS view structure: layouts (base/admin/user/auth), partials (flash, csrf, pagination, sidebar, UI primitives), auth pages (login/register/2fa/reset), error pages (403/404/500). All forms include CSRF tokens. No HTMX or Alpine dependencies. - CSS split from one 1268-line tw.css into 33 fragment files under views/styles/ (tokens, base, components, pages). All design tokens preserved with exact values. Vite builds to hashed output in public/assets/css/. - Lingui i18n replaces hand-rolled translation system. 10 locales migrated, 2214 English messages. Locale middleware detects from cookie/Accept-Language, injects t() helper for EJS. 43 i18n tests. - Browser JS rebuilt as ES modules under views/javascript/. Shared utilities (theme-init, csrf, api-client) and islands (xterm server console, Monaco file editor) follow mount/init pattern with dynamic imports for heavy deps. - Storage reorganized: themes split into builtin/ and user/, uploads given proper subdirectories, runtime/ reserved. Source media removed from public/. - Old UI archived to /home/thavanish/archive/airlink-panel-rewrite/ (outside repo). Old views/, public/javascript/, public/styles/ removed. - 23 page controller skeletons registered under src/modules/pages/ covering all routes. Ready to fill in during page rewrite. * chore:update desc * Phase 3 complete: page-by-page rewrite + Phase 4 fragment folding - All 12 batches complete: 60 EJS views, 23 page controllers, 33 CSS files, JS islands - Phase 2: deleted legacy API (api/legacy/api.ts), removed pterodactyl references - Phase 4: verified 19/19 archived fragments accounted for, added location-nodes drill-down + 2FA recovery codes - Fixed import paths and permission strings in user/server/index.ts - Zero Prisma/daemon imports in page controllers, all routes call v2 API * chore :add some missing stuff * fix(ui): wire SSR panel end-to-end, harden CSRF, fix overlays - declare cascade layer order (@layer) — sheets/modals stuck open because components beat utilities (.hidden) - rewrite views onto base layout; add file-detail view; fold csrf token into every session POST fetch (no unguarded sends left) - add page routes: startup command/docker-image/variables sub-forms, player actions, files+logs download redirects, create-server nodes/images/limit hints from prisma - align v2 startup DTOs (startCommand|command, verbatim Variables); seed full ServerVariable fixture with allowStartupEdit - drop dead security sub-routes, rename routes onto page controllers - verify: vitest 1058, tsc 0, eslint 0 err, func-test 20/20, sweep 16/105 expected (daemon/404/400), a11y 0 violations * chore(prisma): add shadow database config for migrate workflows migrate dev / migrate diff --from-migrations refuse to run without datasource.shadowDatabaseUrl in Prisma 7. Replay DB: airlink_shadow. Baseline 20260910 adopted via migrate resolve (DB built by db push; schema == migrations == live, diff empty) — status now up to date. * fix(addons): quote Addon identifier in raw SQL probes Unquoted `FROM Addon` folds to `addon`; Prisma creates "Addon", so every probe failed and boot logged a bogus "table does not exist — run migrations" warning even though the table exists. * fix(daemon): sign v2 daemon calls Basic+HMAC, seed key >=16 chars fetchDaemon sent Bearer <key>; daemon verifies Basic Airlink:<key> then HMAC v1 -> every v2 daemon route 401'd. Export buildDaemonHeaders, digest-sign bodies, bodyless GET/HEAD. Seed re-applies node key (daemon enforces 16+ chars), addr, port. * checkpoint * rework: major rework in progress --------- Co-authored-by: bthavanish <bthavanish@gmail.com>
…ry with 13 updates Bumps the major-dependencies group with 13 updates in the / directory: | Package | From | To | | --- | --- | --- | | [@dicebear/core](https://github.com/dicebear/dicebear) | `9.4.3` | `10.7.0` | | [@simplewebauthn/browser](https://github.com/MasterKale/SimpleWebAuthn/tree/HEAD/packages/browser) | `13.3.0` | `14.0.0` | | [@simplewebauthn/server](https://github.com/MasterKale/SimpleWebAuthn/tree/HEAD/packages/server) | `13.3.3` | `14.0.3` | | [@xterm/xterm](https://github.com/xtermjs/xterm.js) | `5.5.0` | `6.0.0` | | [boxen](https://github.com/sindresorhus/boxen) | `8.0.1` | `9.0.0` | | [chalk](https://github.com/chalk/chalk) | `5.6.2` | `6.0.1` | | [connect-redis](https://github.com/tj/connect-redis) | `9.0.0` | `10.0.0` | | [dotenv](https://github.com/motdotla/dotenv) | `17.4.2` | `18.0.4` | | [ioredis](https://github.com/redis/ioredis) | `5.11.1` | `6.0.0` | | [nodemailer](https://github.com/nodemailer/nodemailer) | `9.1.1` | `10.0.11` | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `25.9.5` | `26.6.3` | | [typescript](https://github.com/microsoft/TypeScript) | `6.0.3` | `7.0.2` | | [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `4.1.11` | `5.0.2` | Updates `@dicebear/core` from 9.4.3 to 10.7.0 - [Release notes](https://github.com/dicebear/dicebear/releases) - [Changelog](https://github.com/dicebear/dicebear/blob/11.x/CHANGELOG.md) - [Commits](dicebear/dicebear@v9.4.3...v10.7.0) Updates `@simplewebauthn/browser` from 13.3.0 to 14.0.0 - [Release notes](https://github.com/MasterKale/SimpleWebAuthn/releases) - [Changelog](https://github.com/MasterKale/SimpleWebAuthn/blob/master/CHANGELOG.md) - [Commits](https://github.com/MasterKale/SimpleWebAuthn/commits/v14.0.0/packages/browser) Updates `@simplewebauthn/server` from 13.3.3 to 14.0.3 - [Release notes](https://github.com/MasterKale/SimpleWebAuthn/releases) - [Changelog](https://github.com/MasterKale/SimpleWebAuthn/blob/master/CHANGELOG.md) - [Commits](https://github.com/MasterKale/SimpleWebAuthn/commits/v14.0.3/packages/server) Updates `@xterm/xterm` from 5.5.0 to 6.0.0 - [Release notes](https://github.com/xtermjs/xterm.js/releases) - [Commits](xtermjs/xterm.js@5.5.0...6.0.0) Updates `boxen` from 8.0.1 to 9.0.0 - [Release notes](https://github.com/sindresorhus/boxen/releases) - [Commits](sindresorhus/boxen@v8.0.1...v9.0.0) Updates `chalk` from 5.6.2 to 6.0.1 - [Release notes](https://github.com/chalk/chalk/releases) - [Commits](chalk/chalk@v5.6.2...v6.0.1) Updates `connect-redis` from 9.0.0 to 10.0.0 - [Release notes](https://github.com/tj/connect-redis/releases) - [Commits](tj/connect-redis@v9.0.0...v10.0.0) Updates `dotenv` from 17.4.2 to 18.0.4 - [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md) - [Commits](motdotla/dotenv@v17.4.2...v18.0.4) Updates `ioredis` from 5.11.1 to 6.0.0 - [Release notes](https://github.com/redis/ioredis/releases) - [Changelog](https://github.com/redis/ioredis/blob/main/CHANGELOG.md) - [Commits](redis/ioredis@v5.11.1...v6.0.0) Updates `nodemailer` from 9.1.1 to 10.0.11 - [Release notes](https://github.com/nodemailer/nodemailer/releases) - [Changelog](https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md) - [Commits](nodemailer/nodemailer@v9.1.1...v10.0.11) Updates `@types/node` from 25.9.5 to 26.6.3 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `typescript` from 6.0.3 to 7.0.2 - [Release notes](https://github.com/microsoft/TypeScript/releases) - [Commits](microsoft/TypeScript@v6.0.3...v7.0.2) Updates `vitest` from 4.1.11 to 5.0.2 - [Release notes](https://github.com/vitest-dev/vitest/releases) - [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md) - [Commits](https://github.com/vitest-dev/vitest/commits/v5.0.2/packages/vitest) --- updated-dependencies: - dependency-name: "@dicebear/core" dependency-version: 10.7.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: major-dependencies - dependency-name: "@simplewebauthn/browser" dependency-version: 14.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: major-dependencies - dependency-name: "@simplewebauthn/server" dependency-version: 14.0.2 dependency-type: direct:production update-type: version-update:semver-major dependency-group: major-dependencies - dependency-name: "@types/node" dependency-version: 26.6.2 dependency-type: direct:development update-type: version-update:semver-major dependency-group: major-dependencies - dependency-name: "@xterm/xterm" dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: major-dependencies - dependency-name: boxen dependency-version: 9.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: major-dependencies - dependency-name: chalk dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: major-dependencies - dependency-name: connect-redis dependency-version: 10.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: major-dependencies - dependency-name: dotenv dependency-version: 18.0.3 dependency-type: direct:production update-type: version-update:semver-major dependency-group: major-dependencies - dependency-name: ioredis dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: major-dependencies - dependency-name: nodemailer dependency-version: 10.0.10 dependency-type: direct:production update-type: version-update:semver-major dependency-group: major-dependencies - dependency-name: typescript dependency-version: 7.0.2 dependency-type: direct:development update-type: version-update:semver-major dependency-group: major-dependencies - dependency-name: vitest dependency-version: 5.0.1 dependency-type: direct:development update-type: version-update:semver-major dependency-group: major-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
dependabot
Bot
force-pushed
the
dependabot/npm_and_yarn/major-dependencies-a7a710c83b
branch
from
September 30, 2026 12:15
60a8edb to
96c82d6
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumps the major-dependencies group with 13 updates in the / directory:
9.4.310.7.013.3.014.0.013.3.314.0.35.5.06.0.08.0.19.0.05.6.26.0.19.0.010.0.017.4.218.0.45.11.16.0.09.1.110.0.1125.9.526.6.36.0.37.0.24.1.115.0.2Updates
@dicebear/corefrom 9.4.3 to 10.7.0Release notes
Sourced from @dicebear/core's releases.
... (truncated)
Changelog
Sourced from @dicebear/core's changelog.
... (truncated)
Commits
e870a5av10.7.0b5bb252feat: add the six styles from 10.6.0 to the docs and the editor15eb533docs: give Godot and Unity their own framework guides918fd7fchore: deploy the website only on demanda153f97fix: move to schema 1.5.1 and drop the pattern workarounds6a44369fix: match the reference's ASCII word boundary when randomizing ids9ec2776perf(csharp): cut the allocations out of the render path5ee386echore: fix the C# contributor commands and narrow the prettier ignore0063b39docs: count seven languages after the C# port9a5fca7fix(csharp): match the reference on schema patterns, unicode and recursionUpdates
@simplewebauthn/browserfrom 13.3.0 to 14.0.0Release notes
Sourced from @simplewebauthn/browser's releases.
... (truncated)
Changelog
Sourced from @simplewebauthn/browser's changelog.
... (truncated)
Commits
3e2dc0cUpdate version to v14.0.0618c0e9Merge v14.0.0 milestone to master (#792)Updates
@simplewebauthn/serverfrom 13.3.3 to 14.0.3Release notes
Sourced from @simplewebauthn/server's releases.
Changelog
Sourced from @simplewebauthn/server's changelog.
... (truncated)
Commits
084e601Update server version to v14.0.3cd402ccLazily evaluate PQC support to prevent Node warnings on startup (#809)7e3c4c4Kinda makes more sense to do the AKI check first21f99a2Update server version to v14.0.2f03758aMerge commit from fork0bfdc3bUpdate server version to v14.0.14831ce2Fix X.509 parsing to support PQC use in attestation statements (#800)3e2dc0cUpdate version to v14.0.0618c0e9Merge v14.0.0 milestone to master (#792)Updates
@xterm/xtermfrom 5.5.0 to 6.0.0Release notes
Sourced from @xterm/xterm's releases.
... (truncated)
Commits
f447274Merge pull request #5463 from Tyriar/tyriar/v6f68d1e5Skip sync output tests for now30691e8v6.0.0, bump addon versions, publish unicode graphemes5fa6325Merge pull request #5462 from Tyriar/tyriar/deprecated3571d1fRemove windowsMode in favor of windowsPtyebc0d83Remove deprecated/unused fastScrollModifierd1c50c1Merge pull request #5461 from Tyriar/tyriar/glob92b43bdRemove onlya9d3ca1Merge pull request #5449 from iSuslov/exports/esm-headless-nodecb4d1efMerge pull request #5453 from chrislloyd/feat/synchronized-outputUpdates
boxenfrom 8.0.1 to 9.0.0Release notes
Sourced from boxen's releases.
Commits
a8097299.0.02e901c1Measure a label with the corners it is drawn between6d377fbMore tests427ac21Give the box the height it is given when the text does not fit94db7a5Write a border character the way a label is written804e1e7Keep a styling escape whole when a backspace is applied9f8fabdDraw a padding and a margin as a whole number of columns986a49bDo not take columns for a margin that is not drawn2bc26cdMeasure the border in columns7ed8da2Read the height of the terminal fromLINESUpdates
chalkfrom 5.6.2 to 6.0.1Release notes
Sourced from chalk's releases.
Commits
47fc05a6.0.19c93a04Fix inconsistent coercion of two arguments8960adaMeta tweaks661317e6.0.05729845Improve performance4c304ddAdd extended underline styles and underline colors (#689)e912931Fix: Treat a numericFORCE_COLORas an exact level (#688)8a94e0eRequire Node.js 22fa5cff2Optimize 2-argument calls (#670)ff549c5Fix: Downsampleansi256()andbgAnsi256()to 16 colors at level 1 (#687)Updates
connect-redisfrom 9.0.0 to 10.0.0Release notes
Sourced from connect-redis's releases.
Commits
559183d10.0.051e2f01Fix broken windows (#439)8d733b3Fix broken windows: (#435)Updates
dotenvfrom 17.4.2 to 18.0.4Changelog
Sourced from dotenv's changelog.
... (truncated)
Commits
86804c018.0.42403db5changelog75b775enpm audit7e1750cMerge pull request #1064 from motdotla/dependabot/npm_and_yarn/ip-address-10.7.2a6ade63Merge pull request #1063 from motdotla/import288b0d7patch test00da912Bump ip-address from 10.2.0 to 10.7.2e6b5816import 'dotenv/config' should still be defaulting to quiet3646ac5Merge pull request #1061 from motdotla/fast83fc961report dotenv vs native vs dotenv.fastUpdates
ioredisfrom 5.11.1 to 6.0.0Release notes
Sourced from ioredis's releases.
... (truncated)
Changelog
Sourced from ioredis's changelog.