Skip to content

Commit 500c9e1

Browse files
author
Brian Chen
committed
Merge branch 'master' into bc/tx-backoff
2 parents 487fcaa + 4ebedd0 commit 500c9e1

File tree

37 files changed

+281
-102
lines changed

37 files changed

+281
-102
lines changed

.github/CODEOWNERS

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ packages/storage @schmidt-sebastian @firebase/jssdk-global-approvers
5454
packages/storage-types @schmidt-sebastian @firebase/jssdk-global-approvers
5555

5656
# Messaging Code
57-
packages/messaging @pinarx @mmermerkaya @dwoffinden @firebase/jssdk-global-approvers
58-
packages/messaging-types @pinarx @mmermerkaya @dwoffinden @firebase/jssdk-global-approvers
59-
integration/messaging @pinarx @mmermerkaya @dwoffinden @firebase/jssdk-global-approvers
57+
packages/messaging @mmermerkaya @dwoffinden @firebase/jssdk-global-approvers
58+
packages/messaging-types @mmermerkaya @dwoffinden @firebase/jssdk-global-approvers
59+
integration/messaging @mmermerkaya @dwoffinden @firebase/jssdk-global-approvers
6060

6161
# Auth Code
6262
packages/auth @bojeil-google @wti806 @firebase/jssdk-global-approvers

integration/browserify/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"test": "karma start --single-run"
88
},
99
"dependencies": {
10-
"firebase": "6.3.4"
10+
"firebase": "6.3.5"
1111
},
1212
"devDependencies": {
1313
"@babel/core": "7.5.5",

integration/firebase-typings/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"test": "tsc"
77
},
88
"dependencies": {
9-
"firebase": "6.3.4"
9+
"firebase": "6.3.5"
1010
},
1111
"devDependencies": {
1212
"typescript": "3.5.3"

integration/messaging/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"test:manual": "mocha --exit"
99
},
1010
"dependencies": {
11-
"firebase": "6.3.4"
11+
"firebase": "6.3.5"
1212
},
1313
"devDependencies": {
1414
"chai": "4.2.0",

integration/typescript/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"test": "karma start --single-run"
77
},
88
"dependencies": {
9-
"firebase": "6.3.4"
9+
"firebase": "6.3.5"
1010
},
1111
"devDependencies": {
1212
"@babel/core": "7.5.5",

integration/webpack/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"test": "karma start --single-run"
88
},
99
"dependencies": {
10-
"firebase": "6.3.4"
10+
"firebase": "6.3.5"
1111
},
1212
"devDependencies": {
1313
"@babel/core": "7.5.5",

packages/app/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@firebase/app",
3-
"version": "0.4.13",
3+
"version": "0.4.14",
44
"description": "The primary entrypoint to the Firebase JS SDK",
55
"author": "Firebase <[email protected]> (https://firebase.google.com/)",
66
"main": "dist/index.node.cjs.js",
@@ -27,8 +27,8 @@
2727
"license": "Apache-2.0",
2828
"dependencies": {
2929
"@firebase/app-types": "0.4.3",
30-
"@firebase/util": "0.2.24",
31-
"@firebase/logger": "0.1.21",
30+
"@firebase/util": "0.2.25",
31+
"@firebase/logger": "0.1.22",
3232
"tslib": "1.10.0",
3333
"dom-storage": "2.1.0",
3434
"xmlhttprequest": "1.8.0"

packages/auth/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@firebase/auth",
3-
"version": "0.11.7",
3+
"version": "0.11.8",
44
"main": "dist/auth.js",
55
"module": "dist/auth.esm.js",
66
"description": "Javascript library for Firebase Auth SDK",

packages/database/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@firebase/database",
3-
"version": "0.4.11",
3+
"version": "0.4.12",
44
"description": "",
55
"author": "Firebase <[email protected]> (https://firebase.google.com/)",
66
"main": "dist/index.node.cjs.js",
@@ -27,8 +27,8 @@
2727
},
2828
"dependencies": {
2929
"@firebase/database-types": "0.4.2",
30-
"@firebase/logger": "0.1.21",
31-
"@firebase/util": "0.2.24",
30+
"@firebase/logger": "0.1.22",
31+
"@firebase/util": "0.2.25",
3232
"faye-websocket": "0.11.3",
3333
"tslib": "1.10.0"
3434
},

packages/database/src/core/AuthTokenProvider.ts

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,28 @@ import { FirebaseAuthTokenData } from '@firebase/app-types/private';
2020
import { log, warn } from './util/util';
2121

2222
/**
23-
* Abstraction around FirebaseApp's token fetching capabilities.
23+
* An interface for token fetchers.
2424
*/
25-
export class AuthTokenProvider {
26-
/**
27-
* @param {!FirebaseApp} app_
28-
*/
29-
constructor(private app_: FirebaseApp) {}
30-
25+
export interface AuthTokenProvider {
3126
/**
3227
* @param {boolean} forceRefresh
3328
* @return {!Promise<FirebaseAuthTokenData>}
3429
*/
30+
getToken(forceRefresh: boolean): Promise<FirebaseAuthTokenData>;
31+
32+
addTokenChangeListener(listener: (token: string | null) => void);
33+
34+
removeTokenChangeListener(listener: (token: string | null) => void);
35+
36+
notifyForInvalidToken();
37+
}
38+
39+
/**
40+
* Abstraction around FirebaseApp's token fetching capabilities.
41+
*/
42+
export class FirebaseAuthTokenProvider implements AuthTokenProvider {
43+
constructor(private app_: FirebaseApp) {}
44+
3545
getToken(forceRefresh: boolean): Promise<FirebaseAuthTokenData> {
3646
return this.app_['INTERNAL']['getToken'](forceRefresh).then(
3747
null,
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/**
2+
* @license
3+
* Copyright 2019 Google Inc.
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
import { FirebaseApp } from '@firebase/app-types';
19+
import { FirebaseAuthTokenData } from '@firebase/app-types/private';
20+
21+
import { AuthTokenProvider } from './AuthTokenProvider';
22+
import { log, warn } from './util/util';
23+
24+
class EmulatorAuthToken implements FirebaseAuthTokenData {
25+
constructor(public accessToken: string) {}
26+
}
27+
28+
export class EmulatorAuthTokenProvider implements AuthTokenProvider {
29+
constructor(private app_: FirebaseApp) {}
30+
31+
getToken(forceRefresh: boolean): Promise<FirebaseAuthTokenData> {
32+
return Promise.resolve(new EmulatorAuthToken('owner'));
33+
}
34+
35+
addTokenChangeListener(listener: (token: string | null) => void) {}
36+
37+
removeTokenChangeListener(listener: (token: string | null) => void) {}
38+
39+
notifyForInvalidToken() {
40+
let errorMessage =
41+
'Database emulator unexpectedly rejected fake "owner" credentials.';
42+
warn(errorMessage);
43+
}
44+
}

packages/database/src/core/ReadonlyRestClient.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@ import { safeGet } from '@firebase/util';
2222
import { querystring } from '@firebase/util';
2323
import { ServerActions } from './ServerActions';
2424
import { RepoInfo } from './RepoInfo';
25-
import { AuthTokenProvider } from './AuthTokenProvider';
25+
import {
26+
FirebaseAuthTokenProvider,
27+
AuthTokenProvider
28+
} from './AuthTokenProvider';
2629
import { Query } from '../api/Query';
2730

2831
/**

packages/database/src/core/Repo.ts

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,20 @@ import { SparseSnapshotTree } from './SparseSnapshotTree';
2626
import { SyncTree } from './SyncTree';
2727
import { SnapshotHolder } from './SnapshotHolder';
2828
import { stringify } from '@firebase/util';
29-
import { beingCrawled, each, exceptionGuard, warn, log } from './util/util';
29+
import {
30+
beingCrawled,
31+
each,
32+
exceptionGuard,
33+
warn,
34+
log,
35+
FIREBASE_DATABASE_EMULATOR_HOST_VAR
36+
} from './util/util';
3037
import { map, isEmpty } from '@firebase/util';
31-
import { AuthTokenProvider } from './AuthTokenProvider';
38+
import {
39+
FirebaseAuthTokenProvider,
40+
AuthTokenProvider
41+
} from './AuthTokenProvider';
42+
import { EmulatorAuthTokenProvider } from './EmulatorAuthTokenProvider';
3243
import { StatsManager } from './stats/StatsManager';
3344
import { StatsReporter } from './stats/StatsReporter';
3445
import { StatsListener } from './stats/StatsListener';
@@ -81,7 +92,15 @@ export class Repo {
8192
forceRestClient: boolean,
8293
public app: FirebaseApp
8394
) {
84-
const authTokenProvider = new AuthTokenProvider(app);
95+
let authTokenProvider: AuthTokenProvider;
96+
if (
97+
typeof process !== 'undefined' &&
98+
process.env[FIREBASE_DATABASE_EMULATOR_HOST_VAR]
99+
) {
100+
authTokenProvider = new EmulatorAuthTokenProvider(app);
101+
} else {
102+
authTokenProvider = new FirebaseAuthTokenProvider(app);
103+
}
85104

86105
this.stats_ = StatsManager.getCollection(repoInfo_);
87106

packages/database/src/core/RepoManager.ts

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import { FirebaseApp } from '@firebase/app-types';
1919
import { safeGet } from '@firebase/util';
2020
import { Repo } from './Repo';
21-
import { fatal } from './util/util';
21+
import { fatal, FIREBASE_DATABASE_EMULATOR_HOST_VAR } from './util/util';
2222
import { parseRepoInfo, parseURL } from './util/libs/parser';
2323
import { validateUrl } from './util/validation';
2424
import './Repo_transaction';
@@ -28,16 +28,6 @@ import { RepoInfo } from './RepoInfo';
2828
/** @const {string} */
2929
const DATABASE_URL_OPTION = 'databaseURL';
3030

31-
/**
32-
* This variable is also defined in the firebase node.js admin SDK. Before
33-
* modifying this definition, consult the definition in:
34-
*
35-
* https://github.com/firebase/firebase-admin-node
36-
*
37-
* and make sure the two are consistent.
38-
*/
39-
const FIREBASE_DATABASE_EMULATOR_HOST_VAR = 'FIREBASE_DATABASE_EMULATOR_HOST';
40-
4131
let _staticInstance: RepoManager;
4232

4333
/**
@@ -99,15 +89,17 @@ export class RepoManager {
9989
);
10090
}
10191

102-
const parsedUrl = parseRepoInfo(dbUrl);
103-
const repoInfo = parsedUrl.repoInfo;
92+
let parsedUrl = parseRepoInfo(dbUrl);
93+
let repoInfo = parsedUrl.repoInfo;
10494

10595
let dbEmulatorHost: string | undefined = undefined;
10696
if (typeof process !== 'undefined') {
10797
dbEmulatorHost = process.env[FIREBASE_DATABASE_EMULATOR_HOST_VAR];
10898
}
10999
if (dbEmulatorHost) {
110100
dbUrl = `http://${dbEmulatorHost}?ns=${repoInfo.namespace}`;
101+
parsedUrl = parseRepoInfo(dbUrl);
102+
repoInfo = parsedUrl.repoInfo;
111103
}
112104

113105
validateUrl('Invalid Firebase Database URL', 1, parsedUrl);

packages/database/src/core/util/util.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,17 @@ import { Logger, LogLevel } from '@firebase/logger';
3131

3232
const logClient = new Logger('@firebase/database');
3333

34+
/**
35+
* Environment variable for enabling interaction with the Firebase Realtime Database
36+
* emulator. If set, the module will present the endpoint with a fake "owner" credential
37+
* (see EmulatorAuthTokenProvider) instead of one belonging to a real account.
38+
*
39+
* The expected format for this variable is '<HOST>:<PORT>'. The transfer protocol must be
40+
* omitted and will default to 'http'.
41+
*/
42+
export const FIREBASE_DATABASE_EMULATOR_HOST_VAR =
43+
'FIREBASE_DATABASE_EMULATOR_HOST';
44+
3445
/**
3546
* Returns a locally-unique ID (generated by just incrementing up from 0 each time its called).
3647
* @type {function(): number} Generated ID.

packages/database/test/database.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,15 @@ describe('Database Tests', function() {
8888
expect(db.ref().toString()).to.equal('https://bar.firebaseio.com/');
8989
});
9090

91+
it('Interprets FIREBASE_DATABASE_EMULATOR_HOST var correctly', function() {
92+
process.env['FIREBASE_DATABASE_EMULATOR_HOST'] = 'localhost:9000';
93+
var db = defaultApp.database('https://bar.firebaseio.com');
94+
expect(db).to.be.ok;
95+
expect(db.repo_.repoInfo_.namespace).to.equal('bar');
96+
expect(db.repo_.repoInfo_.host).to.equal('localhost:9000');
97+
delete process.env['FIREBASE_DATABASE_EMULATOR_HOST'];
98+
});
99+
91100
it('Different instances for different URLs', function() {
92101
var db1 = defaultApp.database('http://foo1.bar.com');
93102
var db2 = defaultApp.database('http://foo2.bar.com');

packages/firebase/package.json

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "firebase",
3-
"version": "6.3.4",
3+
"version": "6.3.5",
44
"description": "Firebase JavaScript library for web and Node.js",
55
"author": "Firebase <[email protected]> (https://firebase.google.com/)",
66
"license": "Apache-2.0",
@@ -37,18 +37,18 @@
3737
"module": "dist/index.esm.js",
3838
"react-native": "dist/index.rn.cjs.js",
3939
"dependencies": {
40-
"@firebase/app": "0.4.13",
40+
"@firebase/app": "0.4.14",
4141
"@firebase/app-types": "0.4.3",
42-
"@firebase/auth": "0.11.7",
43-
"@firebase/database": "0.4.11",
44-
"@firebase/firestore": "1.4.8",
45-
"@firebase/functions": "0.4.14",
46-
"@firebase/installations": "0.2.3",
47-
"@firebase/messaging": "0.4.7",
48-
"@firebase/polyfill": "0.3.18",
49-
"@firebase/storage": "0.3.8",
50-
"@firebase/performance": "0.2.14",
51-
"@firebase/util": "0.2.24"
42+
"@firebase/auth": "0.11.8",
43+
"@firebase/database": "0.4.12",
44+
"@firebase/firestore": "1.4.9",
45+
"@firebase/functions": "0.4.15",
46+
"@firebase/installations": "0.2.4",
47+
"@firebase/messaging": "0.4.8",
48+
"@firebase/polyfill": "0.3.19",
49+
"@firebase/storage": "0.3.9",
50+
"@firebase/performance": "0.2.15",
51+
"@firebase/util": "0.2.25"
5252
},
5353
"devDependencies": {
5454
"git-rev-sync": "1.12.0",

packages/firestore/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@firebase/firestore",
3-
"version": "1.4.8",
3+
"version": "1.4.9",
44
"description": "",
55
"author": "Firebase <[email protected]> (https://firebase.google.com/)",
66
"scripts": {
@@ -31,10 +31,10 @@
3131
],
3232
"dependencies": {
3333
"@firebase/firestore-types": "1.4.4",
34-
"@firebase/logger": "0.1.21",
35-
"@firebase/webchannel-wrapper": "0.2.23",
34+
"@firebase/logger": "0.1.22",
35+
"@firebase/webchannel-wrapper": "0.2.24",
3636
"@grpc/proto-loader": "^0.5.0",
37-
"@firebase/util": "0.2.24",
37+
"@firebase/util": "0.2.25",
3838
"grpc": "1.22.2",
3939
"tslib": "1.10.0"
4040
},

packages/firestore/src/local/persistence_promise.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,10 +224,18 @@ export class PersistencePromise<T> {
224224
* to resolve.
225225
*/
226226
static forEach<R, S>(
227-
collection: { forEach: (cb: (r: R, s?: S) => void) => void },
227+
collection: { forEach: (cb: (r: R, s: S) => void) => void },
228228
f:
229229
| ((r: R, s: S) => PersistencePromise<void>)
230230
| ((r: R) => PersistencePromise<void>)
231+
): PersistencePromise<void>;
232+
static forEach<R>(
233+
collection: { forEach: (cb: (r: R) => void) => void },
234+
f: (r: R) => PersistencePromise<void>
235+
): PersistencePromise<void>;
236+
static forEach<R, S>(
237+
collection: { forEach: (cb: (r: R, s?: S) => void) => void },
238+
f: (r: R, s?: S) => PersistencePromise<void>
231239
): PersistencePromise<void> {
232240
const promises: Array<PersistencePromise<void>> = [];
233241
collection.forEach((r, s) => {

0 commit comments

Comments
 (0)