From 1539353a15c9ca8f65ffbcc8301a923073372bb3 Mon Sep 17 00:00:00 2001 From: Victor Elias Date: Tue, 23 Apr 2024 15:15:33 -0300 Subject: [PATCH] api: Query isHealthy field as a string to handle JSOnull (#2143) * api: Query isHealthy field as a string to handle JSOnull * api: Add check on boolean fields filter value --- packages/api/src/controllers/helpers.ts | 7 +++++++ packages/api/src/controllers/stream.ts | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/api/src/controllers/helpers.ts b/packages/api/src/controllers/helpers.ts index bccaf859ef..1f77d676bc 100644 --- a/packages/api/src/controllers/helpers.ts +++ b/packages/api/src/controllers/helpers.ts @@ -523,6 +523,13 @@ function parseFiltersRaw(fieldsMap: FieldsMap, val: string): SQLStatement[] { q.push(sql``.append(fv).append(sql` = ${filter.value}`)); } else if (fv.val) { if (fv.type === "boolean") { + if (typeof filter.value !== "boolean") { + throw new Error( + `expected boolean value for field "${ + filter.id + }", got: ${JSON.stringify(filter.value)}` + ); + } q.push( sql``.append( `coalesce((${fv.val})::boolean, FALSE) IS ${ diff --git a/packages/api/src/controllers/stream.ts b/packages/api/src/controllers/stream.ts index 3a37c91f60..2bcd8a7aa1 100644 --- a/packages/api/src/controllers/stream.ts +++ b/packages/api/src/controllers/stream.ts @@ -389,7 +389,8 @@ const fieldsMap: FieldsMap = { val: `stream.data->'transcodedSegmentsDuration'`, type: "real", }, - isHealthy: { val: `stream.data->'isHealthy'`, type: "boolean" }, + // isHealthy field is sometimes JSON-`null` so we query it as a string (->>) + isHealthy: { val: `stream.data->>'isHealthy'`, type: "boolean" }, }; app.get("/", authorizer({}), async (req, res) => {