From 7b0bb8b1aac1a9d42a586379b717d3639a0540e2 Mon Sep 17 00:00:00 2001 From: amalej Date: Sun, 30 Nov 2025 00:04:03 +0800 Subject: [PATCH 1/2] fix(rtdb): Apply fake credentials when getting rules for rtdb emulator --- src/database/database.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/database/database.ts b/src/database/database.ts index 355c43b33a..6d6214f927 100644 --- a/src/database/database.ts +++ b/src/database/database.ts @@ -196,7 +196,7 @@ const RULES_URL_PATH = '.settings/rules.json'; class DatabaseRulesClient { private readonly dbUrl: string; - private readonly httpClient: AuthorizedHttpClient; + private readonly httpClient: DatabaseHttpClient; constructor(app: App, dbUrl: string) { let parsedUrl = new URL(dbUrl); @@ -208,7 +208,7 @@ class DatabaseRulesClient { parsedUrl.pathname = path.join(parsedUrl.pathname, RULES_URL_PATH); this.dbUrl = parsedUrl.toString(); - this.httpClient = new AuthorizedHttpClient(app as FirebaseApp); + this.httpClient = new DatabaseHttpClient(app as FirebaseApp); } /** @@ -316,6 +316,16 @@ class DatabaseRulesClient { } } +class DatabaseHttpClient extends AuthorizedHttpClient { + protected getToken(): Promise { + const emulatorHost = process.env.FIREBASE_DATABASE_EMULATOR_HOST; + if (emulatorHost) { + return Promise.resolve('owner'); + } + return super.getToken(); + } +} + function extractNamespace(parsedUrl: URL): string { const ns = parsedUrl.searchParams.get('ns'); if (ns) { From f773ed117f3ee68df9995bfb5a0021d428ddb088 Mon Sep 17 00:00:00 2001 From: amalej Date: Sun, 30 Nov 2025 00:05:53 +0800 Subject: [PATCH 2/2] rename DatabaseHttpClient to DatabaseRulesHttpClient --- src/database/database.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/database/database.ts b/src/database/database.ts index 6d6214f927..cee5c280fa 100644 --- a/src/database/database.ts +++ b/src/database/database.ts @@ -196,7 +196,7 @@ const RULES_URL_PATH = '.settings/rules.json'; class DatabaseRulesClient { private readonly dbUrl: string; - private readonly httpClient: DatabaseHttpClient; + private readonly httpClient: DatabaseRulesHttpClient; constructor(app: App, dbUrl: string) { let parsedUrl = new URL(dbUrl); @@ -208,7 +208,7 @@ class DatabaseRulesClient { parsedUrl.pathname = path.join(parsedUrl.pathname, RULES_URL_PATH); this.dbUrl = parsedUrl.toString(); - this.httpClient = new DatabaseHttpClient(app as FirebaseApp); + this.httpClient = new DatabaseRulesHttpClient(app as FirebaseApp); } /** @@ -316,7 +316,7 @@ class DatabaseRulesClient { } } -class DatabaseHttpClient extends AuthorizedHttpClient { +class DatabaseRulesHttpClient extends AuthorizedHttpClient { protected getToken(): Promise { const emulatorHost = process.env.FIREBASE_DATABASE_EMULATOR_HOST; if (emulatorHost) {