From de6734e38442f9f2283d4e255c782315241d4d31 Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Wed, 28 Dec 2022 08:21:00 -0800 Subject: [PATCH 01/10] Prevented hostname from being changed when using emulator --- packages/database/src/api/Database.ts | 3 ++- packages/database/src/core/RepoInfo.ts | 3 ++- packages/database/src/realtime/Connection.ts | 11 ++++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/database/src/api/Database.ts b/packages/database/src/api/Database.ts index f1a27492442..c15436a1052 100644 --- a/packages/database/src/api/Database.ts +++ b/packages/database/src/api/Database.ts @@ -95,7 +95,8 @@ function repoManagerApplyEmulatorSettings( repo.repoInfo_.webSocketOnly, repo.repoInfo_.nodeAdmin, repo.repoInfo_.persistenceKey, - repo.repoInfo_.includeNamespaceInQueryParams + repo.repoInfo_.includeNamespaceInQueryParams, + true ); if (tokenProvider) { diff --git a/packages/database/src/core/RepoInfo.ts b/packages/database/src/core/RepoInfo.ts index de0e4603be1..322870d1b08 100644 --- a/packages/database/src/core/RepoInfo.ts +++ b/packages/database/src/core/RepoInfo.ts @@ -45,7 +45,8 @@ export class RepoInfo { public readonly webSocketOnly: boolean, public readonly nodeAdmin: boolean = false, public readonly persistenceKey: string = '', - public readonly includeNamespaceInQueryParams: boolean = false + public readonly includeNamespaceInQueryParams: boolean = false, + public readonly isUsingEmulator = false, ) { this._host = host.toLowerCase(); this._domain = this._host.substr(this._host.indexOf('.') + 1); diff --git a/packages/database/src/realtime/Connection.ts b/packages/database/src/realtime/Connection.ts index 430d68ec9b0..b33ceb26e93 100644 --- a/packages/database/src/realtime/Connection.ts +++ b/packages/database/src/realtime/Connection.ts @@ -337,13 +337,18 @@ export class Connection { if (MESSAGE_DATA in controlData) { const payload = controlData[MESSAGE_DATA]; if (cmd === SERVER_HELLO) { - this.onHandshake_( - payload as { + const handshakePayload = {...payload as { ts: number; v: string; h: string; s: string; - } + }, + }; + if(this.repoInfo_.isUsingEmulator) { + handshakePayload.h = this.repoInfo_.host; + } + this.onHandshake_( + handshakePayload ); } else if (cmd === END_TRANSMISSION) { this.log_('recvd end transmission on primary'); From 117d33bdd82f8acdff47031a4cf74f6d5db7f497 Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Wed, 28 Dec 2022 08:27:45 -0800 Subject: [PATCH 02/10] Ran yarn format --- packages/database/src/core/RepoInfo.ts | 2 +- packages/database/src/realtime/Connection.ts | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/database/src/core/RepoInfo.ts b/packages/database/src/core/RepoInfo.ts index 322870d1b08..a1222f8bbd8 100644 --- a/packages/database/src/core/RepoInfo.ts +++ b/packages/database/src/core/RepoInfo.ts @@ -46,7 +46,7 @@ export class RepoInfo { public readonly nodeAdmin: boolean = false, public readonly persistenceKey: string = '', public readonly includeNamespaceInQueryParams: boolean = false, - public readonly isUsingEmulator = false, + public readonly isUsingEmulator = false ) { this._host = host.toLowerCase(); this._domain = this._host.substr(this._host.indexOf('.') + 1); diff --git a/packages/database/src/realtime/Connection.ts b/packages/database/src/realtime/Connection.ts index b33ceb26e93..cb3212a1b33 100644 --- a/packages/database/src/realtime/Connection.ts +++ b/packages/database/src/realtime/Connection.ts @@ -337,19 +337,18 @@ export class Connection { if (MESSAGE_DATA in controlData) { const payload = controlData[MESSAGE_DATA]; if (cmd === SERVER_HELLO) { - const handshakePayload = {...payload as { + const handshakePayload = { + ...(payload as { ts: number; v: string; h: string; s: string; - }, + }) }; - if(this.repoInfo_.isUsingEmulator) { + if (this.repoInfo_.isUsingEmulator) { handshakePayload.h = this.repoInfo_.host; } - this.onHandshake_( - handshakePayload - ); + this.onHandshake_(handshakePayload); } else if (cmd === END_TRANSMISSION) { this.log_('recvd end transmission on primary'); this.rx_ = this.secondaryConn_; From dc1294867afabdaf7c9e907e3f7b30845fe26d25 Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Wed, 28 Dec 2022 08:53:52 -0800 Subject: [PATCH 03/10] Added tests --- packages/database-compat/test/database.test.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/database-compat/test/database.test.ts b/packages/database-compat/test/database.test.ts index e72d7e53c34..0506dc3a5f5 100644 --- a/packages/database-compat/test/database.test.ts +++ b/packages/database-compat/test/database.test.ts @@ -272,6 +272,7 @@ describe('Database Tests', () => { }); it('refFromURL() validates argument', () => { + // TODO: Remove all any references const db = (firebase as any).database(); expect(() => { const ref = (db as any).refFromURL(); @@ -279,11 +280,19 @@ describe('Database Tests', () => { }); it('can call useEmulator before use', () => { - const db = (firebase as any).database(); + const db = firebase.database(); + // Cast as any as _delegate isn't a public property db.useEmulator('localhost', 1234); + // Cast as any as _delegate isn't a public property + expect((db as any)._delegate._repo.repoInfo_.isUsingEmulator).to.be.true; expect(db.ref().toString()).to.equal('http://localhost:1234/'); }); + it('initializes usingEmulator to false before use', () => { + const db = firebase.database(); + expect((db as any)._delegate._repo.repoInfo_.isUsingEmulator).to.be.false; + }); + it('cannot call useEmulator after use', () => { const db = (firebase as any).database(); From 2946fec03949207089e48c6f33be22ef7c51b34d Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Wed, 28 Dec 2022 08:55:38 -0800 Subject: [PATCH 04/10] Create fresh-experts-mix.md --- .changeset/fresh-experts-mix.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/fresh-experts-mix.md diff --git a/.changeset/fresh-experts-mix.md b/.changeset/fresh-experts-mix.md new file mode 100644 index 00000000000..a0b8c46de4e --- /dev/null +++ b/.changeset/fresh-experts-mix.md @@ -0,0 +1,6 @@ +--- +"@firebase/database-compat": patch +"@firebase/database": patch +--- + +Fixed issue where hostname set by `useEmulator` was being overridden by longpolling response From bd031d5054c5529b86860a3c1d223ac5b8fa1748 Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Tue, 10 Jan 2023 13:22:21 -0800 Subject: [PATCH 05/10] Removed comment --- packages/database-compat/test/database.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/database-compat/test/database.test.ts b/packages/database-compat/test/database.test.ts index 0506dc3a5f5..8e984e211a6 100644 --- a/packages/database-compat/test/database.test.ts +++ b/packages/database-compat/test/database.test.ts @@ -281,7 +281,6 @@ describe('Database Tests', () => { it('can call useEmulator before use', () => { const db = firebase.database(); - // Cast as any as _delegate isn't a public property db.useEmulator('localhost', 1234); // Cast as any as _delegate isn't a public property expect((db as any)._delegate._repo.repoInfo_.isUsingEmulator).to.be.true; From a7551bef9bd6d9ec5e9f55985deac5575d6a9b2f Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Tue, 10 Jan 2023 14:31:25 -0800 Subject: [PATCH 06/10] Addressed comment --- packages/database/src/api/Database.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/database/src/api/Database.ts b/packages/database/src/api/Database.ts index c15436a1052..e5e24d20474 100644 --- a/packages/database/src/api/Database.ts +++ b/packages/database/src/api/Database.ts @@ -96,7 +96,7 @@ function repoManagerApplyEmulatorSettings( repo.repoInfo_.nodeAdmin, repo.repoInfo_.persistenceKey, repo.repoInfo_.includeNamespaceInQueryParams, - true + /*isUsingEmulator=*/true ); if (tokenProvider) { From 2045401b254939248b875a74cd9f75095e53f400 Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Tue, 10 Jan 2023 14:32:12 -0800 Subject: [PATCH 07/10] Fixed formatting --- packages/database/src/api/Database.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/database/src/api/Database.ts b/packages/database/src/api/Database.ts index e5e24d20474..6cf60d5fbd6 100644 --- a/packages/database/src/api/Database.ts +++ b/packages/database/src/api/Database.ts @@ -96,7 +96,7 @@ function repoManagerApplyEmulatorSettings( repo.repoInfo_.nodeAdmin, repo.repoInfo_.persistenceKey, repo.repoInfo_.includeNamespaceInQueryParams, - /*isUsingEmulator=*/true + /*isUsingEmulator=*/ true ); if (tokenProvider) { From 6c07e9b5da012470cf20f238d77fadbd2eda0cc0 Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Tue, 10 Jan 2023 15:55:26 -0800 Subject: [PATCH 08/10] Adddressed comment --- packages/database/src/core/RepoInfo.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/database/src/core/RepoInfo.ts b/packages/database/src/core/RepoInfo.ts index a1222f8bbd8..9d4c1abe36b 100644 --- a/packages/database/src/core/RepoInfo.ts +++ b/packages/database/src/core/RepoInfo.ts @@ -46,7 +46,7 @@ export class RepoInfo { public readonly nodeAdmin: boolean = false, public readonly persistenceKey: string = '', public readonly includeNamespaceInQueryParams: boolean = false, - public readonly isUsingEmulator = false + public readonly isUsingEmulator: boolean = false ) { this._host = host.toLowerCase(); this._domain = this._host.substr(this._host.indexOf('.') + 1); From 4d18650b87253694ab8e799832adc781c6f070a9 Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Tue, 17 Jan 2023 11:51:18 -0800 Subject: [PATCH 09/10] Addressed comment --- packages/database/src/realtime/Connection.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/database/src/realtime/Connection.ts b/packages/database/src/realtime/Connection.ts index cb3212a1b33..80fb9520fb1 100644 --- a/packages/database/src/realtime/Connection.ts +++ b/packages/database/src/realtime/Connection.ts @@ -346,6 +346,7 @@ export class Connection { }) }; if (this.repoInfo_.isUsingEmulator) { + // Upon connecting, the emulator will pass the hostname that it's aware of, but we prefer the user's set hostname via `connectDatabaseEmulator` over what the emulator passes. handshakePayload.h = this.repoInfo_.host; } this.onHandshake_(handshakePayload); From ef130655d8ee38ec49a448aa2396500e0117b19a Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Tue, 17 Jan 2023 11:53:41 -0800 Subject: [PATCH 10/10] Updaetd release notes --- .changeset/fresh-experts-mix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/fresh-experts-mix.md b/.changeset/fresh-experts-mix.md index a0b8c46de4e..00a6bb1c16d 100644 --- a/.changeset/fresh-experts-mix.md +++ b/.changeset/fresh-experts-mix.md @@ -3,4 +3,4 @@ "@firebase/database": patch --- -Fixed issue where hostname set by `useEmulator` was being overridden by longpolling response +Fixed issue where hostname set by `connectDatabaseEmulator` was being overridden by longpolling response