Skip to content

chore(deps)(deps): bump the production-dependencies group across 1 directory with 13 updates - #140

Open
dependabot[bot] wants to merge 548 commits into
mainfrom
dependabot/npm_and_yarn/production-dependencies-073a4e1f74
Open

dependabot[bot] wants to merge 548 commits into
mainfrom
dependabot/npm_and_yarn/production-dependencies-073a4e1f74

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Sep 30, 2026

Copy link
Copy Markdown

Bumps the production-dependencies group with 13 updates in the / directory:

Package From To
@aws-sdk/client-s3 3.1127.0 3.1141.0
@aws-sdk/lib-storage 3.1127.0 3.1141.0
@lingui/core 6.7.0 6.8.0
@xterm/addon-fit 0.10.0 0.11.0
@xterm/addon-web-links 0.11.0 0.12.0
adm-zip 0.6.0 0.6.1
compression 1.8.1 1.8.2
cron-parser 5.10.0 5.10.1
lucide 1.41.0 1.48.0
monaco-editor 0.56.0 0.57.0
multer 2.3.0 2.4.0
ws 8.21.3 8.22.0
zod 4.5.4 4.6.5

Updates @aws-sdk/client-s3 from 3.1127.0 to 3.1141.0

Release notes

Sourced from @​aws-sdk/client-s3's releases.

v3.1141.0

3.1141.0(2026-09-25)

Chores
  • codegen: smithy-aws-typescript-codegen 0.54.0 (#8314) (ad80ce3e)
New Features
  • client-connect: Agent Privacy During Hold is a new privacy capability for Amazon Connect Voice that prevents agent audio from being captured in call recordings or Contact Lens conversational analytics during hold. When enabled, agents are automatically muted on entering hold and unmuted on resuming the contact (03527f9e)
  • client-qconnect: Release shapes for the proactive agentic recommendations and the multi-knowledge base search features. Increases the maximum length of QuickResponseContent. (e008332b)
  • client-bedrock-agent: Adds support for calling VPC configuration API's in Bedrock. These configurations allow the use of On Prem connectors in Bedrock Managed Knowledge bases (18524dc6)
  • client-mediaconnect: This release adds support for RTMP push router outputs in AWS Elemental MediaConnect. (5bd8d80b)
  • client-securityagent: This release adds the ListActorMessages operation, which returns the multi-factor authentication messages received at an actor's server-generated email address (10e53d50)
  • client-arc-region-switch: Adds a service quota checker to Region switch to verify quota parity between your primary and standby Region, and automatically submit quota limit increases. Adds an optional EC2 Auto Scaling and ECS setting that waits for instances or tasks in the scaled-up Region to be healthy in target groups. (cca33e38)
  • client-bedrock-agentcore-control: Amazon Bedrock AgentCore Payments now supports credential rotation for payment connectors, letting you rotate API and wallet secrets for Quick Create payment auths from the console. This release also adds Type and Creation type columns to the payment managers views. (adca591f)
  • client-neptune-graph: Add GraphIdentifier filter for ListImportTasks (9b9aea9b)
  • client-rekognition: This release adds support for Feedback and Metadata in the GetFaceLivenessSessionResults response. Feedback returns codes explaining why a Face Liveness check produced its result. Metadata includes the client SDK type. (0831c361)
  • client-glue: add support for table level federation (a44458b7)
  • client-wellarchitected: This change releases the Well-Architected Agent, a generative AI service that analyzes a customer's AWS environment and delivers personalized, prioritized recommendations across cost, security, performance, and resilience. (d0656586)

For list of updated packages, view updated-packages.md in assets-3.1141.0.zip

v3.1140.0

3.1140.0(2026-09-24)

Documentation Changes
  • client-route53resolver: Documentation updates for Route 53 Resolver. Clarifies which Outpost Resolver operations apply to first-generation AWS Outposts and that Resolver is managed automatically on second-generation Outposts. Adds Local Network Interface subnet compatibility notes for Resolver endpoints. (b4432aba)
  • client-iot: Fixed ListV2LoggingLevels and DeleteV2LoggingLevel documentation to include all supported target-types (4dcf76d5)
New Features
  • clients: update client endpoints as of 2026-09-24 (29a8566c)
  • client-eventbridgev2: Introducing Amazon EventBridge enhanced Custom event bus, a new shareable event bus for organizational-scale event-driven applications feature ordered delivery, deduplication, open event formats, and cross-account bus sharing. (69fbe6a2)
  • client-datazone: Amazon DataZone now supports the TOOLING blueprint category on CreateEnvironmentBlueprint, UpdateEnvironmentBlueprint, GetEnvironmentBlueprint, and ListEnvironmentBlueprints, for custom tooling blueprints. CreateConnection now accepts roleArn in iamProperties. (591cd6f5)
  • client-elasticache: Added tagging support for ElastiCache Global DataStore. (0fa9da59)
  • client-marketplace-discovery: AWS Marketplace Discovery API now supports localized responses and SigV4a request signing. It returns new fulfillment details, including AMI architecture, EBS volume and security group information, SaaS quick-launch status, and SageMaker input and output MIME types. (510673e3)
  • client-redshift-data: Updates to the ListDatabases and WorkgroupName validation (218c24e1)
  • client-securityagent: Added support for Confluence export, enabling customers to publish security findings to Confluence pages. (81408527)
  • client-cloudwatch: This release adds Create, Get, Update, and DeleteResourceMetricsConfiguration to enable detailed metric collection for an AWS resource, and adds UpdateOTelEnrichment plus include and exclude filters on StartOTelEnrichment so you can choose which metric namespaces CloudWatch enriches. (765cc1ce)
  • client-eventbridge: Adds a ManagedBy field to the DescribeEventBus and ListEventBuses responses, identifying the AWS service that created an event bus on your behalf. (28a639b2)
Tests
  • undici-http-handler: update bidi stream e2e test to nova-2-sonic model (#8313) (d9a37d9d)

... (truncated)

Changelog

Sourced from @​aws-sdk/client-s3's changelog.

3.1141.0 (2026-09-25)

Note: Version bump only for package @​aws-sdk/client-s3

3.1140.0 (2026-09-24)

Note: Version bump only for package @​aws-sdk/client-s3

3.1139.0 (2026-09-23)

Note: Version bump only for package @​aws-sdk/client-s3

3.1138.0 (2026-09-22)

Note: Version bump only for package @​aws-sdk/client-s3

3.1137.0 (2026-09-21)

Note: Version bump only for package @​aws-sdk/client-s3

3.1136.0 (2026-09-18)

Note: Version bump only for package @​aws-sdk/client-s3

3.1135.0 (2026-09-17)

... (truncated)

Commits

Updates @aws-sdk/lib-storage from 3.1127.0 to 3.1141.0

Release notes

Sourced from @​aws-sdk/lib-storage's releases.

v3.1141.0

3.1141.0(2026-09-25)

Chores
  • codegen: smithy-aws-typescript-codegen 0.54.0 (#8314) (ad80ce3e)
New Features
  • client-connect: Agent Privacy During Hold is a new privacy capability for Amazon Connect Voice that prevents agent audio from being captured in call recordings or Contact Lens conversational analytics during hold. When enabled, agents are automatically muted on entering hold and unmuted on resuming the contact (03527f9e)
  • client-qconnect: Release shapes for the proactive agentic recommendations and the multi-knowledge base search features. Increases the maximum length of QuickResponseContent. (e008332b)
  • client-bedrock-agent: Adds support for calling VPC configuration API's in Bedrock. These configurations allow the use of On Prem connectors in Bedrock Managed Knowledge bases (18524dc6)
  • client-mediaconnect: This release adds support for RTMP push router outputs in AWS Elemental MediaConnect. (5bd8d80b)
  • client-securityagent: This release adds the ListActorMessages operation, which returns the multi-factor authentication messages received at an actor's server-generated email address (10e53d50)
  • client-arc-region-switch: Adds a service quota checker to Region switch to verify quota parity between your primary and standby Region, and automatically submit quota limit increases. Adds an optional EC2 Auto Scaling and ECS setting that waits for instances or tasks in the scaled-up Region to be healthy in target groups. (cca33e38)
  • client-bedrock-agentcore-control: Amazon Bedrock AgentCore Payments now supports credential rotation for payment connectors, letting you rotate API and wallet secrets for Quick Create payment auths from the console. This release also adds Type and Creation type columns to the payment managers views. (adca591f)
  • client-neptune-graph: Add GraphIdentifier filter for ListImportTasks (9b9aea9b)
  • client-rekognition: This release adds support for Feedback and Metadata in the GetFaceLivenessSessionResults response. Feedback returns codes explaining why a Face Liveness check produced its result. Metadata includes the client SDK type. (0831c361)
  • client-glue: add support for table level federation (a44458b7)
  • client-wellarchitected: This change releases the Well-Architected Agent, a generative AI service that analyzes a customer's AWS environment and delivers personalized, prioritized recommendations across cost, security, performance, and resilience. (d0656586)

For list of updated packages, view updated-packages.md in assets-3.1141.0.zip

v3.1140.0

3.1140.0(2026-09-24)

Documentation Changes
  • client-route53resolver: Documentation updates for Route 53 Resolver. Clarifies which Outpost Resolver operations apply to first-generation AWS Outposts and that Resolver is managed automatically on second-generation Outposts. Adds Local Network Interface subnet compatibility notes for Resolver endpoints. (b4432aba)
  • client-iot: Fixed ListV2LoggingLevels and DeleteV2LoggingLevel documentation to include all supported target-types (4dcf76d5)
New Features
  • clients: update client endpoints as of 2026-09-24 (29a8566c)
  • client-eventbridgev2: Introducing Amazon EventBridge enhanced Custom event bus, a new shareable event bus for organizational-scale event-driven applications feature ordered delivery, deduplication, open event formats, and cross-account bus sharing. (69fbe6a2)
  • client-datazone: Amazon DataZone now supports the TOOLING blueprint category on CreateEnvironmentBlueprint, UpdateEnvironmentBlueprint, GetEnvironmentBlueprint, and ListEnvironmentBlueprints, for custom tooling blueprints. CreateConnection now accepts roleArn in iamProperties. (591cd6f5)
  • client-elasticache: Added tagging support for ElastiCache Global DataStore. (0fa9da59)
  • client-marketplace-discovery: AWS Marketplace Discovery API now supports localized responses and SigV4a request signing. It returns new fulfillment details, including AMI architecture, EBS volume and security group information, SaaS quick-launch status, and SageMaker input and output MIME types. (510673e3)
  • client-redshift-data: Updates to the ListDatabases and WorkgroupName validation (218c24e1)
  • client-securityagent: Added support for Confluence export, enabling customers to publish security findings to Confluence pages. (81408527)
  • client-cloudwatch: This release adds Create, Get, Update, and DeleteResourceMetricsConfiguration to enable detailed metric collection for an AWS resource, and adds UpdateOTelEnrichment plus include and exclude filters on StartOTelEnrichment so you can choose which metric namespaces CloudWatch enriches. (765cc1ce)
  • client-eventbridge: Adds a ManagedBy field to the DescribeEventBus and ListEventBuses responses, identifying the AWS service that created an event bus on your behalf. (28a639b2)
Tests
  • undici-http-handler: update bidi stream e2e test to nova-2-sonic model (#8313) (d9a37d9d)

... (truncated)

Changelog

Sourced from @​aws-sdk/lib-storage's changelog.

3.1141.0 (2026-09-25)

Note: Version bump only for package @​aws-sdk/lib-storage

3.1140.0 (2026-09-24)

Note: Version bump only for package @​aws-sdk/lib-storage

3.1139.0 (2026-09-23)

Note: Version bump only for package @​aws-sdk/lib-storage

3.1138.0 (2026-09-22)

Note: Version bump only for package @​aws-sdk/lib-storage

3.1137.0 (2026-09-21)

Note: Version bump only for package @​aws-sdk/lib-storage

3.1136.0 (2026-09-18)

Note: Version bump only for package @​aws-sdk/lib-storage

3.1135.0 (2026-09-17)

... (truncated)

Commits

Updates @lingui/core from 6.7.0 to 6.8.0

Release notes

Sourced from @​lingui/core's releases.

v6.8.0

6.8.0 (2026-09-23)

Features

Bug Fixes

  • babel-plugin-lingui-macro: restore @babel/types as a runtime dependency (#2634) (db5f57c)
  • cli: add translation as the last key of a new message (#2677) (202a5f0)
  • cli: export all types that are part of the public API (#2668) (279de2d)
  • react: substitute macro-accepted placeholder names in formatElements (#2680) (74089ab)

Reverts

Changelog

Sourced from @​lingui/core's changelog.

6.8.0 (2026-09-23)

Note: Version bump only for package @​lingui/core

Commits

Updates @xterm/addon-fit from 0.10.0 to 0.11.0

Commits

Updates @xterm/addon-web-links from 0.11.0 to 0.12.0

Commits

Updates adm-zip from 0.6.0 to 0.6.1

Release notes

Sourced from adm-zip's releases.

v0.6.1

Full Changelog: cthackers/adm-zip@v0.6.0...v0.6.1

  • Updated dev dependencies
  • Fixed uncaught crash in async decompression on malformed DEFLATE data
  • Fixed addLocalFolder following symlinks out of the archived folder
  • Stripped setuid/setgid/sticky bits from extracted file permissions
  • Enforced the decompression size cap on the async path and for size 0
  • Rejected archives with duplicate entry names
  • Blocked extraction from writing through symlinks inside the target
  • Routed malformed-header parse errors through the async callback
  • Rejected zip entries whose declared data extent runs past the buffer
  • Fixed addLocalFolderPromise hanging on empty folders and swallowing errors
  • Fixed addLocalFolderAsync2 mangling local paths on Windows
Commits
  • cb2cf9b Fixed addLocalFolderAsync2 mangling local paths on Windows
  • 54902b6 Fixed addLocalFolderPromise hanging on empty folders and swallowing errors
  • 73131bd Fixed CI
  • 758898d Rejected zip entries whose declared data extent runs past the buffer
  • 74b6e9f Routed malformed-header parse errors through the async callback
  • eaa35fa Blocked extraction from writing through symlinks inside the target
  • 1e015e3 Increment version
  • 05101d4 Rejected archives with duplicate entry names
  • 4916006 Enforced the decompression size cap on the async path and for size 0
  • 6a63c33 Stripped setuid/setgid/sticky bits from extracted file permissions
  • Additional commits viewable in compare view

Updates compression from 1.8.1 to 1.8.2

Release notes

Sourced from compression's releases.

v1.8.2

Important

What's Changed

New Contributors

Full Changelog: expressjs/compression@v1.8.1...v1.8.2

Changelog

Sourced from compression's changelog.

1.8.2

Commits
  • 0f97074 1.8.2 (#287)
  • 151f63e fix: destroy compression stream on response close
  • 0a76495 fix: match Cache-Control no-transform directive case-insensitively (#286)
  • c17b6e5 docs: update outdated Brotli note and fix npm install docs URL (#276)
  • 112911a chore(ci): npm-publish via reusable workflows (#269)
  • 1bf5eb0 build(deps): bump actions/upload-artifact from 5.0.0 to 6.0.0 (#267)
  • d8fe64d build(deps): bump actions/setup-node from 6.0.0 to 6.1.0 (#266)
  • b218ff5 build(deps): bump github/codeql-action from 4.31.5 to 4.31.9 (#265)
  • 8a1cf8e build(deps): bump actions/download-artifact from 6.0.0 to 7.0.0 (#268)
  • 4a19855 build(deps): bump ossf/scorecard-action from 2.4.2 to 2.4.3 (#257)
  • Additional commits viewable in compare view
Maintainer changes

This version was pushed to npm by GitHub Actions, a new releaser for compression since your current version.


Updates cron-parser from 5.10.0 to 5.10.1

Release notes

Sourced from cron-parser's releases.

v5.10.1

What's Changed

Full Changelog: harrisiirak/cron-parser@v5.10.0...v5.10.1

Changelog

Sourced from cron-parser's changelog.

v5.10.1 - 2026-09-12

What's Changed

Full Changelog: harrisiirak/cron-parser@v5.10.0...v5.10.1

Commits
  • 5b08cdf chore: bump version
  • 1d5867c chore: update dev deps
  • 95bac55 fix: bound field value expansion at parse time (#450)
  • 7b3a0ad chore: add more funding sources to FUNDING.yml
  • fc5ca7b chore: add Patreon username for funding support
  • 03444a8 chore: update dev deps
  • 4fd8809 fix: reject duplicate zero values in field validation (#445)
  • See full diff in compare view

Updates lucide from 1.41.0 to 1.48.0

Release notes

Sourced from lucide's releases.

Version 1.48.0

What's Changed

New Contributors

Full Changelog: lucide-icons/lucide@1.47.0...1.48.0

Version 1.47.0

What's Changed

New Contributors

... (truncated)

Commits

Updates monaco-editor from 0.56.0 to 0.57.0

Release notes

Sourced from monaco-editor's releases.

v0.57.0

Changes:

  • #5487: Prepare Monaco Editor 0.57.0 release
  • #5415: Bump uuid and webpack-dev-server in /website
  • #5476: Bump baseline-browser-mapping from 2.9.19 to 2.11.21 in /website
  • #5474: Bump svgo from 2.8.3 to 2.8.4 in /samples/browser-esm-parcel
  • #5479: Bump actions/deploy-pages from 5.0.0 to 5.0.1 in the github-actions group
  • #5468: Bump browserslist from 4.28.1 to 4.28.8 in /website
  • #5475: Bump js-yaml from 4.3.1 to 4.3.2
  • #5470: Bump fast-uri from 3.1.2 to 3.1.7 in /webpack-plugin
  • #5469: Bump nanoid from 3.3.11 to 3.3.18 in /webpack-plugin
  • #5467: Bump fast-uri from 3.1.5 to 3.1.7 in /samples/browser-esm-webpack-typescript-react
  • #5466: Bump fast-uri from 3.1.2 to 3.1.7 in /samples
  • #5465: Bump fast-uri from 3.1.4 to 3.1.7 in /website
  • #5463: Bump postcss-selector-parser from 7.1.0 to 7.1.5 in /website
  • #5416: Bump @​babel/core from 7.17.8 to 7.29.7 in /samples/browser-esm-vite-react
  • #5438: Bump electron from 39.8.5 to 39.8.10 in /samples
  • #5460: Bump the github-actions group with 7 updates
  • #5456: Pin GitHub Actions to full-length commit SHAs
  • #5450: Bump postcss from 8.5.12 to 8.5.26
  • #5449: Bump js-yaml from 4.2.0 to 4.3.1
  • #5439: Bump postcss from 8.5.13 to 8.5.26 in /samples
  • #5441: Bump postcss from 8.5.15 to 8.5.26 in /samples/browser-esm-vite-react
  • #5432: Bump undici from 7.28.0 to 7.29.0
  • #5440: Bump brace-expansion in /website
  • #5436: Bump fast-uri from 3.1.4 to 3.1.5 in /samples/browser-esm-webpack-typescript-react
  • #5437: Bump fast-uri from 3.1.2 to 3.1.5
  • #5413: Bump svgo from 2.8.2 to 2.8.3 in /samples/browser-esm-parcel
  • #5419: Bump launch-editor from 2.12.0 to 2.14.1 in /website
  • #5414: Bump fast-uri from 3.1.2 to 3.1.4 in /samples/browser-esm-webpack-typescript-react
  • #5417: Bump minimatch from 3.1.2 to 3.1.5 in /webpack-plugin
  • #5420: Bump ws from 8.18.0 to 8.21.1 in /samples
  • #5418: Bump http-proxy-middleware from 2.0.9 to 2.0.10 in /samples
  • #5412: Bump fast-uri from 3.1.2 to 3.1.4 in /website
  • #5411: Bump shell-quote from 1.8.4 to 1.10.0 in /website
  • #5409: Bump webpack-dev-server from 5.2.5 to 5.2.6 in /samples
  • #5410: Bump postcss from 8.5.14 to 8.5.23 in /website
  • #5407: Bump immutable from 5.1.5 to 5.1.9 in /website
  • #5401: Bump brace-expansion from 1.1.11 to 1.1.16 in /samples

This list of changes was auto generated.

v0.57.0-rc.2

... (truncated)

Changelog

Sourced from monaco-editor's changelog.

[0.57.0]

New Features and APIs

  • Adds editor.wordWrapIndicator to display an indicator at the wrapping column of soft-wrapped lines.
  • Adds editor.fullwidthCharacterWidth, with font and twoCells modes for rendering full-width characters.
  • Adds languages.score to score a language selector against a URI and language.
  • Exports the editor.DiffEditorViewMode type.
  • Adds isForAnotherDocument to the inline completion languages.LifetimeSummary type.

Updates

  • Updates the editor core to VS Code commit 6a598d4a13031703d483d103c1d934a36ad27971, validated in 0.57.0-rc.2.
  • Updates bundled DOMPurify from 3.4.8 to 3.4.15.
Description has been truncated

github-actions Bot and others added 30 commits August 4, 2026 16:46
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)
bthavanish and others added 26 commits August 30, 2026 14:58
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
…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>
…rectory with 13 updates

Bumps the production-dependencies group with 13 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@aws-sdk/client-s3](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3) | `3.1127.0` | `3.1141.0` |
| [@aws-sdk/lib-storage](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/lib/lib-storage) | `3.1127.0` | `3.1141.0` |
| [@lingui/core](https://github.com/lingui/js-lingui/tree/HEAD/packages/core) | `6.7.0` | `6.8.0` |
| [@xterm/addon-fit](https://github.com/xtermjs/xterm.js) | `0.10.0` | `0.11.0` |
| [@xterm/addon-web-links](https://github.com/xtermjs/xterm.js) | `0.11.0` | `0.12.0` |
| [adm-zip](https://github.com/cthackers/adm-zip) | `0.6.0` | `0.6.1` |
| [compression](https://github.com/expressjs/compression) | `1.8.1` | `1.8.2` |
| [cron-parser](https://github.com/harrisiirak/cron-parser) | `5.10.0` | `5.10.1` |
| [lucide](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide) | `1.41.0` | `1.48.0` |
| [monaco-editor](https://github.com/microsoft/monaco-editor) | `0.56.0` | `0.57.0` |
| [multer](https://github.com/expressjs/multer) | `2.3.0` | `2.4.0` |
| [ws](https://github.com/websockets/ws) | `8.21.3` | `8.22.0` |
| [zod](https://github.com/colinhacks/zod) | `4.5.4` | `4.6.5` |



Updates `@aws-sdk/client-s3` from 3.1127.0 to 3.1141.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1141.0/clients/client-s3)

Updates `@aws-sdk/lib-storage` from 3.1127.0 to 3.1141.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/lib/lib-storage/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1141.0/lib/lib-storage)

Updates `@lingui/core` from 6.7.0 to 6.8.0
- [Release notes](https://github.com/lingui/js-lingui/releases)
- [Changelog](https://github.com/lingui/js-lingui/blob/main/packages/core/CHANGELOG.md)
- [Commits](https://github.com/lingui/js-lingui/commits/v6.8.0/packages/core)

Updates `@xterm/addon-fit` from 0.10.0 to 0.11.0
- [Release notes](https://github.com/xtermjs/xterm.js/releases)
- [Commits](xtermjs/xterm.js@0.10...0.11)

Updates `@xterm/addon-web-links` from 0.11.0 to 0.12.0
- [Release notes](https://github.com/xtermjs/xterm.js/releases)
- [Commits](xtermjs/xterm.js@0.11...0.12)

Updates `adm-zip` from 0.6.0 to 0.6.1
- [Release notes](https://github.com/cthackers/adm-zip/releases)
- [Changelog](https://github.com/cthackers/adm-zip/blob/master/history.md)
- [Commits](cthackers/adm-zip@v0.6.0...v0.6.1)

Updates `compression` from 1.8.1 to 1.8.2
- [Release notes](https://github.com/expressjs/compression/releases)
- [Changelog](https://github.com/expressjs/compression/blob/master/HISTORY.md)
- [Commits](expressjs/compression@v1.8.1...v1.8.2)

Updates `cron-parser` from 5.10.0 to 5.10.1
- [Release notes](https://github.com/harrisiirak/cron-parser/releases)
- [Changelog](https://github.com/harrisiirak/cron-parser/blob/master/CHANGELOG.md)
- [Commits](harrisiirak/cron-parser@v5.10.0...v5.10.1)

Updates `lucide` from 1.41.0 to 1.48.0
- [Release notes](https://github.com/lucide-icons/lucide/releases)
- [Commits](https://github.com/lucide-icons/lucide/commits/1.48.0/packages/lucide)

Updates `monaco-editor` from 0.56.0 to 0.57.0
- [Release notes](https://github.com/microsoft/monaco-editor/releases)
- [Changelog](https://github.com/microsoft/monaco-editor/blob/main/CHANGELOG.md)
- [Commits](microsoft/monaco-editor@v0.56.0...v0.57.0)

Updates `multer` from 2.3.0 to 2.4.0
- [Release notes](https://github.com/expressjs/multer/releases)
- [Changelog](https://github.com/expressjs/multer/blob/main/CHANGELOG.md)
- [Commits](expressjs/multer@v2.3.0...v2.4.0)

Updates `ws` from 8.21.3 to 8.22.0
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](websockets/ws@8.21.3...8.22.0)

Updates `zod` from 4.5.4 to 4.6.5
- [Release notes](https://github.com/colinhacks/zod/releases)
- [Commits](colinhacks/zod@v4.5.4...v4.6.5)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-s3"
  dependency-version: 3.1141.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: "@aws-sdk/lib-storage"
  dependency-version: 3.1141.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: "@lingui/core"
  dependency-version: 6.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: "@xterm/addon-fit"
  dependency-version: 0.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: "@xterm/addon-web-links"
  dependency-version: 0.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: adm-zip
  dependency-version: 0.6.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: compression
  dependency-version: 1.8.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: cron-parser
  dependency-version: 5.10.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: lucide
  dependency-version: 1.48.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: monaco-editor
  dependency-version: 0.57.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: multer
  dependency-version: 2.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: ws
  dependency-version: 8.22.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: zod
  dependency-version: 4.6.5
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot @github

dependabot Bot commented on behalf of github Sep 30, 2026

Copy link
Copy Markdown
Author

Labels

The following labels could not be found: npm. Please create it before Dependabot can add it to a pull request.

Please fix the above issues or remove invalid values from dependabot.yml.

@dependabot dependabot Bot added the dependencies Pull requests that update a dependency file label Sep 30, 2026
@coderabbitai

coderabbitai Bot commented Sep 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: e128dd52-bad9-4804-acc5-1fd19e968466

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants