Skip to content

Commit bc2db15

Browse files
Merge branch 'master' into mrschmidt/blobbytes
2 parents f2efa66 + d934f74 commit bc2db15

File tree

75 files changed

+845
-488
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+845
-488
lines changed

.changeset/curvy-planets-sneeze.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@firebase/firestore": patch
3+
---
4+
5+
Fixes a regression introduced in v8.0.2 that returned invalid values for `DocumentChange.newIndex`.

.changeset/many-snails-kneel.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@firebase/database": minor
3+
"firebase": minor
4+
---
5+
6+
Add a `get` method for database queries that returns server result when connected

config/functions/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"description": "Cloud Functions for Firebase",
44
"dependencies": {
55
"cors": "2.8.5",
6-
"firebase-admin": "9.3.0",
6+
"firebase-admin": "9.4.1",
77
"firebase-functions": "3.11.0"
88
},
99
"private": true,

integration/firestore/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@
2626
"karma-mocha": "2.0.1",
2727
"karma-spec-reporter": "0.0.32",
2828
"mocha": "7.2.0",
29-
"ts-loader": "8.0.9",
29+
"ts-loader": "8.0.11",
3030
"typescript": "4.0.5",
3131
"webpack": "4.44.2",
32-
"webpack-stream": "6.1.0"
32+
"webpack-stream": "6.1.1"
3333
}
3434
}

package.json

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -78,15 +78,15 @@
7878
"@types/long": "4.0.1",
7979
"@types/mocha": "7.0.2",
8080
"@types/mz": "2.7.2",
81-
"@types/node": "12.19.3",
81+
"@types/node": "12.19.4",
8282
"@types/sinon": "9.0.8",
8383
"@types/sinon-chai": "3.2.5",
8484
"@types/tmp": "0.2.0",
8585
"@types/yargs": "15.0.9",
86-
"@typescript-eslint/eslint-plugin": "4.6.1",
87-
"@typescript-eslint/eslint-plugin-tslint": "4.6.1",
88-
"@typescript-eslint/parser": "4.6.1",
89-
"babel-loader": "8.1.0",
86+
"@typescript-eslint/eslint-plugin": "4.8.1",
87+
"@typescript-eslint/eslint-plugin-tslint": "4.8.1",
88+
"@typescript-eslint/parser": "4.8.1",
89+
"babel-loader": "8.2.1",
9090
"@babel/core": "7.12.3",
9191
"@babel/preset-env": "7.12.1",
9292
"@babel/plugin-transform-modules-commonjs": "7.12.1",
@@ -98,12 +98,12 @@
9898
"coveralls": "3.1.0",
9999
"del": "6.0.0",
100100
"dependency-graph": "0.9.0",
101-
"eslint": "7.12.1",
101+
"eslint": "7.13.0",
102102
"eslint-plugin-import": "2.22.1",
103103
"express": "4.17.1",
104104
"find-free-port": "2.0.0",
105105
"firebase-functions": "3.11.0",
106-
"firebase-tools": "8.15.0",
106+
"firebase-tools": "8.16.2",
107107
"git-rev-sync": "3.0.1",
108108
"glob": "7.1.6",
109109
"http-server": "0.12.3",
@@ -142,19 +142,19 @@
142142
"protractor": "5.4.2",
143143
"rxjs": "6.6.3",
144144
"semver": "7.3.2",
145-
"simple-git": "2.21.0",
145+
"simple-git": "2.22.0",
146146
"sinon": "9.2.1",
147147
"sinon-chai": "3.5.0",
148148
"source-map-loader": "1.1.2",
149-
"terser": "5.3.8",
150-
"ts-loader": "8.0.9",
149+
"terser": "5.4.0",
150+
"ts-loader": "8.0.11",
151151
"ts-node": "9.0.0",
152152
"tslint": "6.1.3",
153153
"typedoc": "0.16.11",
154154
"typescript": "4.0.5",
155155
"watch": "1.0.2",
156156
"webpack": "4.44.2",
157-
"yargs": "16.1.0"
157+
"yargs": "16.1.1"
158158
},
159159
"husky": {
160160
"hooks": {

packages-exp/app-compat/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-compat",
3-
"version": "0.0.800",
3+
"version": "0.0.900",
44
"description": "The primary entrypoint to the Firebase JS SDK",
55
"author": "Firebase <[email protected]> (https://firebase.google.com/)",
66
"private": true,
@@ -28,7 +28,7 @@
2828
},
2929
"license": "Apache-2.0",
3030
"dependencies": {
31-
"@firebase/app-exp": "0.0.800",
31+
"@firebase/app-exp": "0.0.900",
3232
"@firebase/util": "0.3.4",
3333
"@firebase/logger": "0.2.6",
3434
"@firebase/component": "0.1.21",
@@ -37,7 +37,7 @@
3737
"xmlhttprequest": "1.8.0"
3838
},
3939
"devDependencies": {
40-
"rollup": "2.33.1",
40+
"rollup": "2.33.2",
4141
"@rollup/plugin-json": "4.1.0",
4242
"rollup-plugin-replace": "2.2.0",
4343
"rollup-plugin-typescript2": "0.29.0",

packages-exp/app-exp/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-exp",
3-
"version": "0.0.800",
3+
"version": "0.0.900",
44
"private": true,
55
"description": "FirebaseApp",
66
"author": "Firebase <[email protected]> (https://firebase.google.com/)",
@@ -30,15 +30,15 @@
3030
"typings:internal": "node ./use_typings.js"
3131
},
3232
"dependencies": {
33-
"@firebase/app-types-exp": "0.0.800",
33+
"@firebase/app-types-exp": "0.0.900",
3434
"@firebase/util": "0.3.4",
3535
"@firebase/logger": "0.2.6",
3636
"@firebase/component": "0.1.21",
3737
"tslib": "^1.11.1"
3838
},
3939
"license": "Apache-2.0",
4040
"devDependencies": {
41-
"rollup": "2.33.1",
41+
"rollup": "2.33.2",
4242
"@rollup/plugin-json": "4.1.0",
4343
"rollup-plugin-replace": "2.2.0",
4444
"rollup-plugin-typescript2": "0.29.0",

packages-exp/app-types-exp/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@firebase/app-types-exp",
3-
"version": "0.0.800",
3+
"version": "0.0.900",
44
"private": true,
55
"description": "@firebase/app Types",
66
"author": "Firebase <[email protected]> (https://firebase.google.com/)",

packages-exp/auth-compat-exp/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@firebase/auth-compat",
3-
"version": "0.0.800",
3+
"version": "0.0.900",
44
"private": true,
55
"description": "FirebaseAuth compatibility package that uses API style compatible with Firebase@7 and prior versions",
66
"author": "Firebase <[email protected]> (https://firebase.google.com/)",
@@ -28,16 +28,16 @@
2828
},
2929
"dependencies": {
3030
"@firebase/auth-types": "0.10.1",
31-
"@firebase/auth-exp": "0.0.800",
32-
"@firebase/auth-types-exp": "0.0.800",
31+
"@firebase/auth-exp": "0.0.900",
32+
"@firebase/auth-types-exp": "0.0.900",
3333
"@firebase/component": "0.1.21",
3434
"@firebase/util": "0.3.4",
3535
"tslib": "^1.11.1"
3636
},
3737
"license": "Apache-2.0",
3838
"devDependencies": {
3939
"@firebase/app-compat": "0.x",
40-
"rollup": "2.33.1",
40+
"rollup": "2.33.2",
4141
"@rollup/plugin-json": "4.1.0",
4242
"rollup-plugin-replace": "2.2.0",
4343
"rollup-plugin-typescript2": "0.29.0",

packages-exp/auth-exp/demo/package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,18 @@
1616
"dev": "rollup -c -w"
1717
},
1818
"dependencies": {
19-
"@firebase/app-exp": "0.0.800",
20-
"@firebase/app-types-exp": "0.0.800",
21-
"@firebase/auth-exp": "0.0.800",
22-
"@firebase/auth-types-exp": "0.0.800",
19+
"@firebase/app-exp": "0.0.900",
20+
"@firebase/app-types-exp": "0.0.900",
21+
"@firebase/auth-exp": "0.0.900",
22+
"@firebase/auth-types-exp": "0.0.900",
2323
"@firebase/logger": "0.2.6",
24-
"@firebase/util": "0.3.3",
24+
"@firebase/util": "0.3.4",
2525
"tslib": "^1.11.1"
2626
},
2727
"license": "Apache-2.0",
2828
"devDependencies": {
2929
"@rollup/plugin-strip": "2.0.0",
30-
"rollup": "2.33.1",
30+
"rollup": "2.33.2",
3131
"@rollup/plugin-json": "4.1.0",
3232
"rollup-plugin-replace": "2.2.0",
3333
"rollup-plugin-terser": "6.1.0",

packages-exp/auth-exp/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@firebase/auth-exp",
3-
"version": "0.0.800",
3+
"version": "0.0.900",
44
"private": true,
55
"description": "The Firebase Authenticaton component of the Firebase JS SDK.",
66
"author": "Firebase <[email protected]> (https://firebase.google.com/)",
@@ -41,14 +41,14 @@
4141
"@firebase/logger": "0.2.6",
4242
"@firebase/util": "0.3.4",
4343
"@firebase/component": "0.1.21",
44-
"@firebase/auth-types-exp": "0.0.800",
44+
"@firebase/auth-types-exp": "0.0.900",
4545
"node-fetch": "2.6.1",
4646
"tslib": "^1.11.1"
4747
},
4848
"license": "Apache-2.0",
4949
"devDependencies": {
50-
"@firebase/app-exp": "0.0.800",
51-
"rollup": "2.33.1",
50+
"@firebase/app-exp": "0.0.900",
51+
"rollup": "2.33.2",
5252
"@rollup/plugin-json": "4.1.0",
5353
"rollup-plugin-sourcemaps": "0.6.3",
5454
"rollup-plugin-typescript2": "0.29.0",

packages-exp/auth-exp/src/api/authentication/token.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,15 @@ export const enum Endpoint {
3333

3434
/** The server responses with snake_case; we convert to camelCase */
3535
interface RequestStsTokenServerResponse {
36-
access_token?: string;
37-
expires_in?: string;
38-
refresh_token?: string;
36+
access_token: string;
37+
expires_in: string;
38+
refresh_token: string;
3939
}
4040

4141
export interface RequestStsTokenResponse {
42-
accessToken?: string;
43-
expiresIn?: string;
44-
refreshToken?: string;
42+
accessToken: string;
43+
expiresIn: string;
44+
refreshToken: string;
4545
}
4646

4747
export async function requestStsToken(

packages-exp/auth-exp/src/core/auth/auth_impl.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ export class AuthImpl implements Auth, _FirebaseService {
171171
): Promise<void> {
172172
// First check to see if we have a pending redirect event.
173173
let storedUser = (await this.assertedPersistence.getCurrentUser()) as User | null;
174-
if (popupRedirectResolver) {
174+
if (popupRedirectResolver && this.config.authDomain) {
175175
await this.getOrInitRedirectPersistenceManager();
176176
const redirectUserEventId = this.redirectUser?._redirectEventId;
177177
const storedUserEventId = storedUser?._redirectEventId;

packages-exp/auth-exp/src/core/strategies/action_code_settings.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export function _setActionCodeSettingsOnRequest(
2727
actionCodeSettings: ActionCodeSettings
2828
): void {
2929
_assert(
30-
actionCodeSettings.url.length > 0,
30+
actionCodeSettings.url?.length > 0,
3131
auth,
3232
AuthErrorCode.INVALID_CONTINUE_URI
3333
);

packages-exp/auth-exp/src/core/user/id_token_result.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,3 +118,16 @@ export function _parseToken(token: string): externs.ParsedToken | null {
118118
return null;
119119
}
120120
}
121+
122+
/**
123+
* Extract expiresIn TTL from a token by subtracting the expiration from the issuance.
124+
*
125+
* @internal
126+
*/
127+
export function _tokenExpiresIn(token: string): number {
128+
const parsedToken = _parseToken(token);
129+
_assert(parsedToken, AuthErrorCode.INTERNAL_ERROR);
130+
_assert(typeof parsedToken.exp !== 'undefined', AuthErrorCode.INTERNAL_ERROR);
131+
_assert(typeof parsedToken.iat !== 'undefined', AuthErrorCode.INTERNAL_ERROR);
132+
return Number(parsedToken.exp) - Number(parsedToken.iat);
133+
}

packages-exp/auth-exp/src/core/user/token_manager.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import * as fetch from '../../../test/helpers/mock_fetch';
2626
import { Endpoint } from '../../api/authentication/token';
2727
import { IdTokenResponse } from '../../model/id_token';
2828
import { StsTokenManager, Buffer } from './token_manager';
29+
import { FinalizeMfaResponse } from '../../api/authentication/mfa';
30+
import { makeJWT } from '../../../test/helpers/jwt';
2931

3032
use(chaiAsPromised);
3133

@@ -74,6 +76,18 @@ describe('core/user/token_manager', () => {
7476
expect(stsTokenManager.accessToken).to.eq('id-token');
7577
expect(stsTokenManager.refreshToken).to.eq('refresh-token');
7678
});
79+
80+
it('falls back to exp and iat when expiresIn is ommited (ie: MFA)', () => {
81+
const idToken = makeJWT({ 'exp': '180', 'iat': '120' });
82+
stsTokenManager.updateFromServerResponse({
83+
idToken,
84+
refreshToken: 'refresh-token'
85+
} as FinalizeMfaResponse);
86+
87+
expect(stsTokenManager.expirationTime).to.eq(now + 60_000);
88+
expect(stsTokenManager.accessToken).to.eq(idToken);
89+
expect(stsTokenManager.refreshToken).to.eq('refresh-token');
90+
});
7791
});
7892

7993
describe('#clearRefreshToken', () => {

packages-exp/auth-exp/src/core/user/token_manager.ts

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { IdTokenResponse } from '../../model/id_token';
2222
import { AuthErrorCode } from '../errors';
2323
import { PersistedBlob } from '../persistence';
2424
import { _assert, debugFail } from '../util/assert';
25+
import { _tokenExpiresIn } from './id_token_result';
2526

2627
/**
2728
* The number of milliseconds before the official expiration time of a token
@@ -48,10 +49,23 @@ export class StsTokenManager {
4849
updateFromServerResponse(
4950
response: IdTokenResponse | FinalizeMfaResponse
5051
): void {
52+
_assert(response.idToken, AuthErrorCode.INTERNAL_ERROR);
53+
_assert(
54+
typeof response.idToken !== 'undefined',
55+
AuthErrorCode.INTERNAL_ERROR
56+
);
57+
_assert(
58+
typeof response.refreshToken !== 'undefined',
59+
AuthErrorCode.INTERNAL_ERROR
60+
);
61+
const expiresIn =
62+
'expiresIn' in response && typeof response.expiresIn !== 'undefined'
63+
? Number(response.expiresIn)
64+
: _tokenExpiresIn(response.idToken);
5165
this.updateTokensAndExpiration(
5266
response.idToken,
5367
response.refreshToken,
54-
'expiresIn' in response ? response.expiresIn : undefined
68+
expiresIn
5569
);
5670
}
5771

@@ -83,19 +97,21 @@ export class StsTokenManager {
8397
auth,
8498
oldToken
8599
);
86-
this.updateTokensAndExpiration(accessToken, refreshToken, expiresIn);
100+
this.updateTokensAndExpiration(
101+
accessToken,
102+
refreshToken,
103+
Number(expiresIn)
104+
);
87105
}
88106

89107
private updateTokensAndExpiration(
90-
accessToken?: string,
91-
refreshToken?: string,
92-
expiresInSec?: string
108+
accessToken: string,
109+
refreshToken: string,
110+
expiresInSec: number
93111
): void {
94112
this.refreshToken = refreshToken || null;
95113
this.accessToken = accessToken || null;
96-
if (expiresInSec) {
97-
this.expirationTime = Date.now() + Number(expiresInSec) * 1000;
98-
}
114+
this.expirationTime = Date.now() + expiresInSec * 1000;
99115
}
100116

101117
static fromJSON(appName: string, object: PersistedBlob): StsTokenManager {

0 commit comments

Comments
 (0)