From da66d47b86b91756fae93a3f958795c611a67482 Mon Sep 17 00:00:00 2001 From: cmorten Date: Sun, 16 Aug 2026 10:11:14 +0100 Subject: [PATCH 1/6] fix: add 5s retry/wait timeout for acquire TCC.db lock --- src/commands/setup/macOS/updateTccDb.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/commands/setup/macOS/updateTccDb.ts b/src/commands/setup/macOS/updateTccDb.ts index 0255102..c00042c 100644 --- a/src/commands/setup/macOS/updateTccDb.ts +++ b/src/commands/setup/macOS/updateTccDb.ts @@ -1,5 +1,5 @@ import { release } from "os"; -import { execSync } from "child_process"; +import { execSync, execFileSync } from "child_process"; import { ERR_SETUP_MACOS_UNABLE_TO_WRITE_USER_TCC_DB } from "../../../errors"; const epoch = Math.floor(Date.now() / 1000); @@ -186,19 +186,23 @@ export const USER_PATH = export const SYSTEM_PATH = "/Library/Application Support/com.apple.TCC/TCC.db"; export function updateTccDb(path: string): void { + const osRelease = release(); + const isSonomaOrNewer = parseInt(osRelease.split(".")[0], 10) >= 23; + for (const values of getEntries()) { - const osRelease = release(); - const isSonomaOrNewer = parseInt(osRelease.split(".").at(0)) >= 23; - const query = `INSERT OR IGNORE INTO access VALUES(${values}${ + const query = `.timeout 5000\nINSERT OR IGNORE INTO access VALUES(${values}${ isSonomaOrNewer ? `,NULL,NULL,'UNUSED',${epoch}` : "" });`; try { - execSync(`sqlite3 "${path}" "${query}" >/dev/null 2>&1`, { + execFileSync("sqlite3", [path, query], { encoding: "utf8", + stdio: "ignore", }); } catch (cause) { - throw new Error(ERR_SETUP_MACOS_UNABLE_TO_WRITE_USER_TCC_DB, { cause }); + throw new Error(ERR_SETUP_MACOS_UNABLE_TO_WRITE_USER_TCC_DB, { + cause, + }); } } } From 02aa0f35cc6697284fbfc035dd133fa9dc6eb49c Mon Sep 17 00:00:00 2001 From: cmorten Date: Sun, 16 Aug 2026 10:28:14 +0100 Subject: [PATCH 2/6] fix: separate args? --- src/commands/setup/macOS/updateTccDb.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/commands/setup/macOS/updateTccDb.ts b/src/commands/setup/macOS/updateTccDb.ts index c00042c..477d238 100644 --- a/src/commands/setup/macOS/updateTccDb.ts +++ b/src/commands/setup/macOS/updateTccDb.ts @@ -190,12 +190,12 @@ export function updateTccDb(path: string): void { const isSonomaOrNewer = parseInt(osRelease.split(".")[0], 10) >= 23; for (const values of getEntries()) { - const query = `.timeout 5000\nINSERT OR IGNORE INTO access VALUES(${values}${ + const query = `INSERT OR IGNORE INTO access VALUES(${values}${ isSonomaOrNewer ? `,NULL,NULL,'UNUSED',${epoch}` : "" });`; try { - execFileSync("sqlite3", [path, query], { + execFileSync("sqlite3", [path, ".timeout 5000", query], { encoding: "utf8", stdio: "ignore", }); From c6e5606be5138e725b5c64261abc462208fa7193 Mon Sep 17 00:00:00 2001 From: cmorten Date: Sun, 16 Aug 2026 10:29:34 +0100 Subject: [PATCH 3/6] tmp: logging --- src/commands/setup/macOS/updateTccDb.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/commands/setup/macOS/updateTccDb.ts b/src/commands/setup/macOS/updateTccDb.ts index 477d238..23e9bbd 100644 --- a/src/commands/setup/macOS/updateTccDb.ts +++ b/src/commands/setup/macOS/updateTccDb.ts @@ -190,14 +190,13 @@ export function updateTccDb(path: string): void { const isSonomaOrNewer = parseInt(osRelease.split(".")[0], 10) >= 23; for (const values of getEntries()) { - const query = `INSERT OR IGNORE INTO access VALUES(${values}${ + const query = `.timeout 5000\nINSERT OR IGNORE INTO access VALUES(${values}${ isSonomaOrNewer ? `,NULL,NULL,'UNUSED',${epoch}` : "" });`; try { - execFileSync("sqlite3", [path, ".timeout 5000", query], { + execFileSync("sqlite3", [path, query], { encoding: "utf8", - stdio: "ignore", }); } catch (cause) { throw new Error(ERR_SETUP_MACOS_UNABLE_TO_WRITE_USER_TCC_DB, { From f509bbef2f58a44b0ecd0463cc34da684389e9c1 Mon Sep 17 00:00:00 2001 From: cmorten Date: Sun, 16 Aug 2026 10:33:02 +0100 Subject: [PATCH 4/6] fix: home dir expansion --- src/commands/setup/macOS/updateTccDb.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/commands/setup/macOS/updateTccDb.ts b/src/commands/setup/macOS/updateTccDb.ts index 23e9bbd..d659b3e 100644 --- a/src/commands/setup/macOS/updateTccDb.ts +++ b/src/commands/setup/macOS/updateTccDb.ts @@ -1,4 +1,4 @@ -import { release } from "os"; +import { homedir, release } from "os"; import { execSync, execFileSync } from "child_process"; import { ERR_SETUP_MACOS_UNABLE_TO_WRITE_USER_TCC_DB } from "../../../errors"; @@ -181,8 +181,7 @@ const getEntries = (): string[] => { ]; }; -export const USER_PATH = - "$HOME/Library/Application Support/com.apple.TCC/TCC.db"; +export const USER_PATH = `${homedir()}/Library/Application Support/com.apple.TCC/TCC.db`; export const SYSTEM_PATH = "/Library/Application Support/com.apple.TCC/TCC.db"; export function updateTccDb(path: string): void { From fd7e13f1c53855294cac370398b8b65c5fe49538 Mon Sep 17 00:00:00 2001 From: cmorten Date: Sun, 16 Aug 2026 10:36:28 +0100 Subject: [PATCH 5/6] revert: swallow stdio --- src/commands/setup/macOS/updateTccDb.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/commands/setup/macOS/updateTccDb.ts b/src/commands/setup/macOS/updateTccDb.ts index d659b3e..3d448a6 100644 --- a/src/commands/setup/macOS/updateTccDb.ts +++ b/src/commands/setup/macOS/updateTccDb.ts @@ -196,6 +196,7 @@ export function updateTccDb(path: string): void { try { execFileSync("sqlite3", [path, query], { encoding: "utf8", + stdio: "ignore", }); } catch (cause) { throw new Error(ERR_SETUP_MACOS_UNABLE_TO_WRITE_USER_TCC_DB, { From c4b37ca6f489f13da7c44145f15c749e2ad08630 Mon Sep 17 00:00:00 2001 From: cmorten Date: Sun, 16 Aug 2026 10:36:57 +0100 Subject: [PATCH 6/6] chore: version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6995550..c63f822 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@guidepup/setup", - "version": "0.24.2", + "version": "0.24.3", "description": "CLI for configuring environments and install screen reader assets for Guidepup.", "main": "lib/index.js", "typings": "lib/index.d.ts",