From 3167008989f1fc8b7e703f8fbca9e5119bbb23f6 Mon Sep 17 00:00:00 2001 From: Michael Lip <51033404+theluckystrike@users.noreply.github.com> Date: Tue, 6 Oct 2026 13:24:47 +0700 Subject: [PATCH] fix(importers): keep Better Stack follow_redirects on imported monitors (#2851) A Better Stack monitor with follow_redirects set to false was imported as a monitor that follows redirects, because the schema did not parse the field and mapMonitor never returned it. The monitor row then fell back to the column default of true. Parse follow_redirects (defaulting to true like Better Stack does) and return it from mapMonitor so writeMonitorsPhase stores it, the same way the Checkly importer does since #2834. --- packages/importers/src/providers/betterstack/api-types.ts | 4 ++++ packages/importers/src/providers/betterstack/fixtures.ts | 3 +++ packages/importers/src/providers/betterstack/mapper.test.ts | 5 +++++ packages/importers/src/providers/betterstack/mapper.ts | 1 + 4 files changed, 13 insertions(+) diff --git a/packages/importers/src/providers/betterstack/api-types.ts b/packages/importers/src/providers/betterstack/api-types.ts index e8e8aa6bb..363466e2a 100644 --- a/packages/importers/src/providers/betterstack/api-types.ts +++ b/packages/importers/src/providers/betterstack/api-types.ts @@ -32,6 +32,10 @@ export const BetterstackMonitorSchema = z.object({ .nullish() .transform((v) => v ?? []), required_keyword: z.string().nullable().default(null), + follow_redirects: z + .boolean() + .nullish() + .transform((v) => v ?? true), verify_ssl: z.boolean().default(true), regions: z .array(z.string()) diff --git a/packages/importers/src/providers/betterstack/fixtures.ts b/packages/importers/src/providers/betterstack/fixtures.ts index 0a947a79b..5db3e81aa 100644 --- a/packages/importers/src/providers/betterstack/fixtures.ts +++ b/packages/importers/src/providers/betterstack/fixtures.ts @@ -27,6 +27,7 @@ export const MOCK_MONITORS: BetterstackMonitor[] = [ request_body: "", expected_status_codes: [200], required_keyword: null, + follow_redirects: true, verify_ssl: true, regions: ["us", "eu"], status: "up", @@ -50,6 +51,7 @@ export const MOCK_MONITORS: BetterstackMonitor[] = [ request_body: "", expected_status_codes: [], required_keyword: "Welcome", + follow_redirects: true, verify_ssl: true, regions: ["us", "eu", "as"], status: "up", @@ -73,6 +75,7 @@ export const MOCK_MONITORS: BetterstackMonitor[] = [ request_body: "", expected_status_codes: [200, 301], required_keyword: null, + follow_redirects: false, verify_ssl: false, regions: ["us", "eu", "as", "au"], status: "paused", diff --git a/packages/importers/src/providers/betterstack/mapper.test.ts b/packages/importers/src/providers/betterstack/mapper.test.ts index 028d01bcf..f514fe93b 100644 --- a/packages/importers/src/providers/betterstack/mapper.test.ts +++ b/packages/importers/src/providers/betterstack/mapper.test.ts @@ -131,6 +131,11 @@ describe("mapMonitor", () => { const result = mapMonitor(MOCK_MONITORS[1], 42); expect(result.headers).toBe(""); }); + + test("carries over the monitor's follow_redirects setting", () => { + expect(mapMonitor(MOCK_MONITORS[0], 42).followRedirects).toBe(true); + expect(mapMonitor(MOCK_MONITORS[2], 42).followRedirects).toBe(false); + }); }); describe("mapMonitorGroup", () => { diff --git a/packages/importers/src/providers/betterstack/mapper.ts b/packages/importers/src/providers/betterstack/mapper.ts index 4c14bfad0..82e18d22a 100644 --- a/packages/importers/src/providers/betterstack/mapper.ts +++ b/packages/importers/src/providers/betterstack/mapper.ts @@ -109,6 +109,7 @@ export function mapMonitor(monitor: BetterstackMonitor, workspaceId: number) { headers, body: attrs.request_body, method: mapMethod(attrs.http_method), + followRedirects: attrs.follow_redirects, timeout: attrs.request_timeout * 1000, }; } -- 2.51.2