From 1e5f220c97b4cdda8ac43066f733988794ec6206 Mon Sep 17 00:00:00 2001 From: Chaim Date: Mon, 6 Apr 2026 07:11:32 +0000 Subject: [PATCH] fix: filter inactive extensions from dashboard API responses /api/extensions and customer extension list now only return is_active extensions, preventing deleted extensions from showing in the dashboard and causing deploy errors with null versions. Co-Authored-By: Claude Opus 4.6 (1M context) --- server.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server.py b/server.py index b435300..7515716 100644 --- a/server.py +++ b/server.py @@ -788,7 +788,7 @@ class APIHandler(BaseHTTPRequestHandler): self._respond(200, query(""" SELECT e.*, (SELECT COUNT(*) FROM extension_versions ev WHERE ev.extension_id = e.id) as version_count, (SELECT COUNT(*) FROM customer_extensions ce WHERE ce.extension_id = e.id AND ce.license_status = 'active') as customer_count - FROM extensions e ORDER BY e.name""")) + FROM extensions e WHERE e.is_active ORDER BY e.name""")) def _get_extension_versions(self, ext_id): self._respond(200, query("SELECT * FROM extension_versions WHERE extension_id = %s ORDER BY released_at DESC", (ext_id,))) @@ -808,7 +808,7 @@ class APIHandler(BaseHTTPRequestHandler): self._respond(404, {'error': 'Not found'}); return customer['extensions'] = query(""" SELECT e.id, e.name, e.composer_name, e.latest_version, ce.installed_version, ce.license_status, ce.auto_update, ce.installed_at - FROM customer_extensions ce JOIN extensions e ON ce.extension_id = e.id WHERE ce.customer_id = %s ORDER BY e.name""", (cid,)) + FROM customer_extensions ce JOIN extensions e ON ce.extension_id = e.id WHERE ce.customer_id = %s AND e.is_active ORDER BY e.name""", (cid,)) customer['dependencies'] = DEPENDENCIES customer['install_order'] = _compute_install_order() self._respond(200, customer)