firebase-admin
Advanced tools
Comparing version 9.5.0 to 9.6.0
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
/*! | ||
@@ -3,0 +3,0 @@ * Copyright 2020 Google Inc. |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -26,2 +26,3 @@ /*! | ||
var index_1 = require("../utils/index"); | ||
var TOKEN_REFRESH_THRESHOLD_MILLIS = 5 * 60 * 1000; | ||
var DatabaseService = /** @class */ (function () { | ||
@@ -43,2 +44,6 @@ function DatabaseService(app) { | ||
var _this = this; | ||
if (this.tokenListener) { | ||
this.appInternal.INTERNAL.removeAuthTokenListener(this.tokenListener); | ||
clearTimeout(this.tokenRefreshTimeout); | ||
} | ||
var promises = []; | ||
@@ -58,3 +63,3 @@ for (var _i = 0, _a = Object.keys(this.databases); _i < _a.length; _i++) { | ||
* | ||
* @return {FirebaseApp} The app associated with this DatabaseService instance. | ||
* @return The app associated with this DatabaseService instance. | ||
*/ | ||
@@ -91,4 +96,36 @@ get: function () { | ||
} | ||
if (!this.tokenListener) { | ||
this.tokenListener = this.onTokenChange.bind(this); | ||
this.appInternal.INTERNAL.addAuthTokenListener(this.tokenListener); | ||
} | ||
return db; | ||
}; | ||
// eslint-disable-next-line @typescript-eslint/no-unused-vars | ||
DatabaseService.prototype.onTokenChange = function (_) { | ||
var _this = this; | ||
this.appInternal.INTERNAL.getToken() | ||
.then(function (token) { | ||
var delayMillis = token.expirationTime - TOKEN_REFRESH_THRESHOLD_MILLIS - Date.now(); | ||
// If the new token is set to expire soon (unlikely), do nothing. Somebody will eventually | ||
// notice and refresh the token, at which point this callback will fire again. | ||
if (delayMillis > 0) { | ||
_this.scheduleTokenRefresh(delayMillis); | ||
} | ||
}) | ||
.catch(function (err) { | ||
console.error('Unexpected error while attempting to schedule a token refresh:', err); | ||
}); | ||
}; | ||
DatabaseService.prototype.scheduleTokenRefresh = function (delayMillis) { | ||
var _this = this; | ||
clearTimeout(this.tokenRefreshTimeout); | ||
this.tokenRefreshTimeout = setTimeout(function () { | ||
_this.appInternal.INTERNAL.getToken(/*forceRefresh=*/ true) | ||
.catch(function () { | ||
// Ignore the error since this might just be an intermittent failure. If we really cannot | ||
// refresh the token, an error will be logged once the existing token expires and we try | ||
// to fetch a fresh one. | ||
}); | ||
}, delayMillis); | ||
}; | ||
DatabaseService.prototype.ensureUrl = function (url) { | ||
@@ -116,2 +153,7 @@ if (typeof url !== 'undefined') { | ||
var parsedUrl = new url_1.URL(dbUrl); | ||
var emulatorHost = process.env.FIREBASE_DATABASE_EMULATOR_HOST; | ||
if (emulatorHost) { | ||
var namespace = extractNamespace(parsedUrl); | ||
parsedUrl = new url_1.URL("http://" + emulatorHost + "?ns=" + namespace); | ||
} | ||
parsedUrl.pathname = path.join(parsedUrl.pathname, RULES_URL_PATH); | ||
@@ -125,3 +167,3 @@ this.dbUrl = parsedUrl.toString(); | ||
* | ||
* @return {Promise<string>} A promise fulfilled with the rules as a raw string. | ||
* @return A promise fulfilled with the rules as a raw string. | ||
*/ | ||
@@ -225,1 +267,10 @@ DatabaseRulesClient.prototype.getRules = function () { | ||
}()); | ||
function extractNamespace(parsedUrl) { | ||
var ns = parsedUrl.searchParams.get('ns'); | ||
if (ns) { | ||
return ns; | ||
} | ||
var hostname = parsedUrl.hostname; | ||
var dotIndex = hostname.indexOf('.'); | ||
return hostname.substring(0, dotIndex).toLowerCase(); | ||
} |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
/*! | ||
@@ -3,0 +3,0 @@ * Copyright 2020 Google Inc. |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -25,2 +25,3 @@ /*! | ||
var error_1 = require("./utils/error"); | ||
var TOKEN_EXPIRY_THRESHOLD_MILLIS = 5 * 60 * 1000; | ||
/** | ||
@@ -32,103 +33,61 @@ * Internals of a FirebaseApp instance. | ||
this.credential_ = credential_; | ||
this.isDeleted_ = false; | ||
this.tokenListeners_ = []; | ||
} | ||
/** | ||
* Gets an auth token for the associated app. | ||
* | ||
* @param {boolean} forceRefresh Whether or not to force a token refresh. | ||
* @return {Promise<FirebaseAccessToken>} A Promise that will be fulfilled with the current or | ||
* new token. | ||
*/ | ||
FirebaseAppInternals.prototype.getToken = function (forceRefresh) { | ||
var _this = this; | ||
var expired = this.cachedToken_ && this.cachedToken_.expirationTime < Date.now(); | ||
if (this.cachedTokenPromise_ && !forceRefresh && !expired) { | ||
return this.cachedTokenPromise_ | ||
.catch(function (error) { | ||
// Update the cached token promise to avoid caching errors. Set it to resolve with the | ||
// cached token if we have one (and return that promise since the token has still not | ||
// expired). | ||
if (_this.cachedToken_) { | ||
_this.cachedTokenPromise_ = Promise.resolve(_this.cachedToken_); | ||
return _this.cachedTokenPromise_; | ||
} | ||
// Otherwise, set the cached token promise to null so that it will force a refresh next | ||
// time getToken() is called. | ||
_this.cachedTokenPromise_ = null; | ||
// And re-throw the caught error. | ||
throw error; | ||
}); | ||
if (forceRefresh === void 0) { forceRefresh = false; } | ||
if (forceRefresh || this.shouldRefresh()) { | ||
return this.refreshToken(); | ||
} | ||
else { | ||
// Clear the outstanding token refresh timeout. This is a noop if the timeout is undefined. | ||
clearTimeout(this.tokenRefreshTimeout_); | ||
// this.credential_ may be an external class; resolving it in a promise helps us | ||
// protect against exceptions and upgrades the result to a promise in all cases. | ||
this.cachedTokenPromise_ = Promise.resolve(this.credential_.getAccessToken()) | ||
.then(function (result) { | ||
// Since the developer can provide the credential implementation, we want to weakly verify | ||
// the return type until the type is properly exported. | ||
if (!validator.isNonNullObject(result) || | ||
typeof result.expires_in !== 'number' || | ||
typeof result.access_token !== 'string') { | ||
throw new error_1.FirebaseAppError(error_1.AppErrorCodes.INVALID_CREDENTIAL, "Invalid access token generated: \"" + JSON.stringify(result) + "\". Valid access " + | ||
'tokens must be an object with the "expires_in" (number) and "access_token" ' + | ||
'(string) properties.'); | ||
} | ||
var token = { | ||
accessToken: result.access_token, | ||
expirationTime: Date.now() + (result.expires_in * 1000), | ||
}; | ||
var hasAccessTokenChanged = (_this.cachedToken_ && _this.cachedToken_.accessToken !== token.accessToken); | ||
var hasExpirationChanged = (_this.cachedToken_ && _this.cachedToken_.expirationTime !== token.expirationTime); | ||
if (!_this.cachedToken_ || hasAccessTokenChanged || hasExpirationChanged) { | ||
_this.cachedToken_ = token; | ||
_this.tokenListeners_.forEach(function (listener) { | ||
listener(token.accessToken); | ||
}); | ||
} | ||
// Establish a timeout to proactively refresh the token every minute starting at five | ||
// minutes before it expires. Once a token refresh succeeds, no further retries are | ||
// needed; if it fails, retry every minute until the token expires (resulting in a total | ||
// of four retries: at 4, 3, 2, and 1 minutes). | ||
var refreshTimeInSeconds = (result.expires_in - (5 * 60)); | ||
var numRetries = 4; | ||
// In the rare cases the token is short-lived (that is, it expires in less than five | ||
// minutes from when it was fetched), establish the timeout to refresh it after the | ||
// current minute ends and update the number of retries that should be attempted before | ||
// the token expires. | ||
if (refreshTimeInSeconds <= 0) { | ||
refreshTimeInSeconds = result.expires_in % 60; | ||
numRetries = Math.floor(result.expires_in / 60) - 1; | ||
} | ||
// The token refresh timeout keeps the Node.js process alive, so only create it if this | ||
// instance has not already been deleted. | ||
if (numRetries && !_this.isDeleted_) { | ||
_this.setTokenRefreshTimeout(refreshTimeInSeconds * 1000, numRetries); | ||
} | ||
return token; | ||
}) | ||
.catch(function (error) { | ||
var errorMessage = (typeof error === 'string') ? error : error.message; | ||
errorMessage = 'Credential implementation provided to initializeApp() via the ' + | ||
'"credential" property failed to fetch a valid Google OAuth2 access token with the ' + | ||
("following error: \"" + errorMessage + "\"."); | ||
if (errorMessage.indexOf('invalid_grant') !== -1) { | ||
errorMessage += ' There are two likely causes: (1) your server time is not properly ' + | ||
'synced or (2) your certificate key file has been revoked. To solve (1), re-sync the ' + | ||
'time on your server. To solve (2), make sure the key ID for your key file is still ' + | ||
'present at https://console.firebase.google.com/iam-admin/serviceaccounts/project. If ' + | ||
'not, generate a new key file at ' + | ||
'https://console.firebase.google.com/project/_/settings/serviceaccounts/adminsdk.'; | ||
} | ||
throw new error_1.FirebaseAppError(error_1.AppErrorCodes.INVALID_CREDENTIAL, errorMessage); | ||
}); | ||
return this.cachedTokenPromise_; | ||
} | ||
return Promise.resolve(this.cachedToken_); | ||
}; | ||
FirebaseAppInternals.prototype.refreshToken = function () { | ||
var _this = this; | ||
return Promise.resolve(this.credential_.getAccessToken()) | ||
.then(function (result) { | ||
// Since the developer can provide the credential implementation, we want to weakly verify | ||
// the return type until the type is properly exported. | ||
if (!validator.isNonNullObject(result) || | ||
typeof result.expires_in !== 'number' || | ||
typeof result.access_token !== 'string') { | ||
throw new error_1.FirebaseAppError(error_1.AppErrorCodes.INVALID_CREDENTIAL, "Invalid access token generated: \"" + JSON.stringify(result) + "\". Valid access " + | ||
'tokens must be an object with the "expires_in" (number) and "access_token" ' + | ||
'(string) properties.'); | ||
} | ||
var token = { | ||
accessToken: result.access_token, | ||
expirationTime: Date.now() + (result.expires_in * 1000), | ||
}; | ||
if (!_this.cachedToken_ | ||
|| _this.cachedToken_.accessToken !== token.accessToken | ||
|| _this.cachedToken_.expirationTime !== token.expirationTime) { | ||
_this.cachedToken_ = token; | ||
_this.tokenListeners_.forEach(function (listener) { | ||
listener(token.accessToken); | ||
}); | ||
} | ||
return token; | ||
}) | ||
.catch(function (error) { | ||
var errorMessage = (typeof error === 'string') ? error : error.message; | ||
errorMessage = 'Credential implementation provided to initializeApp() via the ' + | ||
'"credential" property failed to fetch a valid Google OAuth2 access token with the ' + | ||
("following error: \"" + errorMessage + "\"."); | ||
if (errorMessage.indexOf('invalid_grant') !== -1) { | ||
errorMessage += ' There are two likely causes: (1) your server time is not properly ' + | ||
'synced or (2) your certificate key file has been revoked. To solve (1), re-sync the ' + | ||
'time on your server. To solve (2), make sure the key ID for your key file is still ' + | ||
'present at https://console.firebase.google.com/iam-admin/serviceaccounts/project. If ' + | ||
'not, generate a new key file at ' + | ||
'https://console.firebase.google.com/project/_/settings/serviceaccounts/adminsdk.'; | ||
} | ||
throw new error_1.FirebaseAppError(error_1.AppErrorCodes.INVALID_CREDENTIAL, errorMessage); | ||
}); | ||
}; | ||
FirebaseAppInternals.prototype.shouldRefresh = function () { | ||
return !this.cachedToken_ || (this.cachedToken_.expirationTime - Date.now()) <= TOKEN_EXPIRY_THRESHOLD_MILLIS; | ||
}; | ||
/** | ||
* Adds a listener that is called each time a token changes. | ||
* | ||
* @param {function(string)} listener The listener that will be called with each new token. | ||
* @param listener The listener that will be called with each new token. | ||
*/ | ||
@@ -144,3 +103,3 @@ FirebaseAppInternals.prototype.addAuthTokenListener = function (listener) { | ||
* | ||
* @param {function(string)} listener The listener to remove. | ||
* @param listener The listener to remove. | ||
*/ | ||
@@ -150,31 +109,2 @@ FirebaseAppInternals.prototype.removeAuthTokenListener = function (listener) { | ||
}; | ||
/** | ||
* Deletes the FirebaseAppInternals instance. | ||
*/ | ||
FirebaseAppInternals.prototype.delete = function () { | ||
this.isDeleted_ = true; | ||
// Clear the token refresh timeout so it doesn't keep the Node.js process alive. | ||
clearTimeout(this.tokenRefreshTimeout_); | ||
}; | ||
/** | ||
* Establishes timeout to refresh the Google OAuth2 access token used by the SDK. | ||
* | ||
* @param {number} delayInMilliseconds The delay to use for the timeout. | ||
* @param {number} numRetries The number of times to retry fetching a new token if the prior fetch | ||
* failed. | ||
*/ | ||
FirebaseAppInternals.prototype.setTokenRefreshTimeout = function (delayInMilliseconds, numRetries) { | ||
var _this = this; | ||
this.tokenRefreshTimeout_ = setTimeout(function () { | ||
_this.getToken(/* forceRefresh */ true) | ||
.catch(function () { | ||
// Ignore the error since this might just be an intermittent failure. If we really cannot | ||
// refresh the token, an error will be logged once the existing token expires and we try | ||
// to fetch a fresh one. | ||
if (numRetries > 0) { | ||
_this.setTokenRefreshTimeout(60 * 1000, numRetries - 1); | ||
} | ||
}); | ||
}, delayInMilliseconds); | ||
}; | ||
return FirebaseAppInternals; | ||
@@ -361,3 +291,2 @@ }()); | ||
this.firebaseInternals_.removeApp(this.name_); | ||
this.INTERNAL.delete(); | ||
return Promise.all(Object.keys(this.services_).map(function (serviceName) { | ||
@@ -364,0 +293,0 @@ var service = _this.services_[serviceName]; |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
/*! | ||
@@ -3,0 +3,0 @@ * Copyright 2020 Google Inc. |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
/*! | ||
@@ -3,0 +3,0 @@ * Copyright 2020 Google Inc. |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
/*! | ||
@@ -3,0 +3,0 @@ * Copyright 2020 Google Inc. |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
/*! | ||
@@ -3,0 +3,0 @@ * @license |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
/*! | ||
@@ -3,0 +3,0 @@ * Copyright 2020 Google Inc. |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
/*! | ||
@@ -3,0 +3,0 @@ * Copyright 2020 Google Inc. |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
/*! | ||
@@ -3,0 +3,0 @@ * Copyright 2020 Google Inc. |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
/*! | ||
@@ -3,0 +3,0 @@ * Copyright 2020 Google Inc. |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
/*! | ||
@@ -3,0 +3,0 @@ * Copyright 2020 Google Inc. |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
/*! | ||
@@ -3,0 +3,0 @@ * Copyright 2020 Google Inc. |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
/*! | ||
@@ -3,0 +3,0 @@ * Copyright 2020 Google Inc. |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
@@ -1,2 +0,2 @@ | ||
/*! firebase-admin v9.5.0 */ | ||
/*! firebase-admin v9.6.0 */ | ||
"use strict"; | ||
@@ -3,0 +3,0 @@ /*! |
{ | ||
"name": "firebase-admin", | ||
"version": "9.5.0", | ||
"version": "9.6.0", | ||
"description": "Firebase admin SDK for Node.js", | ||
@@ -5,0 +5,0 @@ "author": "Firebase <firebase-support@google.com> (https://firebase.google.com/)", |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
864959
19128
12