@firebase/app-check 0.5.15 → 0.5.16-canary.457fc2eeb

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.js CHANGED
@@ -33,11 +33,19 @@ var DEBUG_STATE = {
33
33
  initialized: false,
34
34
  enabled: false
35
35
  };
36
- function getState(app) {
37
- return APP_CHECK_STATES.get(app) || DEFAULT_STATE;
36
+ /**
37
+ * Gets a reference to the state object.
38
+ */
39
+ function getStateReference(app) {
40
+ return APP_CHECK_STATES.get(app) || tslib.__assign({}, DEFAULT_STATE);
38
41
  }
39
- function setState(app, state) {
42
+ /**
43
+ * Set once on initialization. The map should hold the same reference to the
44
+ * same object until this entry is deleted.
45
+ */
46
+ function setInitialState(app, state) {
40
47
  APP_CHECK_STATES.set(app, state);
48
+ return APP_CHECK_STATES.get(app);
41
49
  }
42
50
  function getDebugState() {
43
51
  return DEBUG_STATE;
@@ -275,7 +283,7 @@ function getRecaptcha(isEnterprise) {
275
283
  return self.grecaptcha;
276
284
  }
277
285
  function ensureActivated(app) {
278
- if (!getState(app).activated) {
286
+ if (!getStateReference(app).activated) {
279
287
  throw ERROR_FACTORY.create("use-before-activation" /* USE_BEFORE_ACTIVATION */, {
280
288
  appName: app.name
281
289
  });
@@ -776,7 +784,7 @@ function getToken$2(appCheck, forceRefresh) {
776
784
  case 0:
777
785
  app = appCheck.app;
778
786
  ensureActivated(app);
779
- state = getState(app);
787
+ state = getStateReference(app);
780
788
  token = state.token;
781
789
  error = undefined;
782
790
  /**
@@ -784,7 +792,7 @@ function getToken$2(appCheck, forceRefresh) {
784
792
  * memory and unset the local variable `token`.
785
793
  */
786
794
  if (token && !isValid(token)) {
787
- setState(app, tslib.__assign(tslib.__assign({}, state), { token: undefined }));
795
+ state.token = undefined;
788
796
  token = undefined;
789
797
  }
790
798
  if (!!token) return [3 /*break*/, 4];
@@ -833,7 +841,7 @@ function getToken$2(appCheck, forceRefresh) {
833
841
  // Write debug token to indexedDB.
834
842
  _e.sent();
835
843
  // Write debug token to state.
836
- setState(app, tslib.__assign(tslib.__assign({}, state), { token: tokenFromDebugExchange }));
844
+ state.token = tokenFromDebugExchange;
837
845
  return [2 /*return*/, { token: tokenFromDebugExchange.token }];
838
846
  case 9:
839
847
  _e.trys.push([9, 11, , 12]);
@@ -848,7 +856,7 @@ function getToken$2(appCheck, forceRefresh) {
848
856
  });
849
857
  shouldCallListeners = true;
850
858
  }
851
- return [4 /*yield*/, state.exchangeTokenPromise];
859
+ return [4 /*yield*/, getStateReference(app).exchangeTokenPromise];
852
860
  case 10:
853
861
  token = _e.sent();
854
862
  return [3 /*break*/, 12];
@@ -898,7 +906,7 @@ function getToken$2(appCheck, forceRefresh) {
898
906
  };
899
907
  // write the new token to the memory state as well as the persistent storage.
900
908
  // Only do it if we got a valid new token
901
- setState(app, tslib.__assign(tslib.__assign({}, state), { token: token }));
909
+ state.token = token;
902
910
  return [4 /*yield*/, writeTokenToStorage(app, token)];
903
911
  case 15:
904
912
  _e.sent();
@@ -914,13 +922,13 @@ function getToken$2(appCheck, forceRefresh) {
914
922
  }
915
923
  function addTokenListener(appCheck, type, listener, onError) {
916
924
  var app = appCheck.app;
917
- var state = getState(app);
925
+ var state = getStateReference(app);
918
926
  var tokenObserver = {
919
927
  next: listener,
920
928
  error: onError,
921
929
  type: type
922
930
  };
923
- setState(app, tslib.__assign(tslib.__assign({}, state), { tokenObservers: tslib.__spreadArray(tslib.__spreadArray([], state.tokenObservers), [tokenObserver]) }));
931
+ state.tokenObservers = tslib.__spreadArray(tslib.__spreadArray([], state.tokenObservers), [tokenObserver]);
924
932
  // Invoke the listener async immediately if there is a valid token
925
933
  // in memory.
926
934
  if (state.token && isValid(state.token)) {
@@ -947,27 +955,27 @@ function addTokenListener(appCheck, type, listener, onError) {
947
955
  void state.cachedTokenPromise.then(function () { return initTokenRefresher(appCheck); });
948
956
  }
949
957
  function removeTokenListener(app, listener) {
950
- var state = getState(app);
958
+ var state = getStateReference(app);
951
959
  var newObservers = state.tokenObservers.filter(function (tokenObserver) { return tokenObserver.next !== listener; });
952
960
  if (newObservers.length === 0 &&
953
961
  state.tokenRefresher &&
954
962
  state.tokenRefresher.isRunning()) {
955
963
  state.tokenRefresher.stop();
956
964
  }
957
- setState(app, tslib.__assign(tslib.__assign({}, state), { tokenObservers: newObservers }));
965
+ state.tokenObservers = newObservers;
958
966
  }
959
967
  /**
960
968
  * Logic to create and start refresher as needed.
961
969
  */
962
970
  function initTokenRefresher(appCheck) {
963
971
  var app = appCheck.app;
964
- var state = getState(app);
972
+ var state = getStateReference(app);
965
973
  // Create the refresher but don't start it if `isTokenAutoRefreshEnabled`
966
974
  // is not true.
967
975
  var refresher = state.tokenRefresher;
968
976
  if (!refresher) {
969
977
  refresher = createTokenRefresher(appCheck);
970
- setState(app, tslib.__assign(tslib.__assign({}, state), { tokenRefresher: refresher }));
978
+ state.tokenRefresher = refresher;
971
979
  }
972
980
  if (!refresher.isRunning() && state.isTokenAutoRefreshEnabled) {
973
981
  refresher.start();
@@ -984,7 +992,7 @@ function createTokenRefresher(appCheck) {
984
992
  return tslib.__generator(this, function (_a) {
985
993
  switch (_a.label) {
986
994
  case 0:
987
- state = getState(app);
995
+ state = getStateReference(app);
988
996
  if (!!state.token) return [3 /*break*/, 2];
989
997
  return [4 /*yield*/, getToken$2(appCheck)];
990
998
  case 1:
@@ -1019,7 +1027,7 @@ function createTokenRefresher(appCheck) {
1019
1027
  }); }, function () {
1020
1028
  return true;
1021
1029
  }, function () {
1022
- var state = getState(app);
1030
+ var state = getStateReference(app);
1023
1031
  if (state.token) {
1024
1032
  // issuedAtTime + (50% * total TTL) + 5 minutes
1025
1033
  var nextRefreshTimeMillis = state.token.issuedAtTimeMillis +
@@ -1037,7 +1045,7 @@ function createTokenRefresher(appCheck) {
1037
1045
  }, TOKEN_REFRESH_TIME.RETRIAL_MIN_WAIT, TOKEN_REFRESH_TIME.RETRIAL_MAX_WAIT);
1038
1046
  }
1039
1047
  function notifyTokenListeners(app, token) {
1040
- var observers = getState(app).tokenObservers;
1048
+ var observers = getStateReference(app).tokenObservers;
1041
1049
  for (var _i = 0, observers_1 = observers; _i < observers_1.length; _i++) {
1042
1050
  var observer = observers_1[_i];
1043
1051
  try {
@@ -1094,7 +1102,7 @@ var AppCheckService = /** @class */ (function () {
1094
1102
  this.heartbeatServiceProvider = heartbeatServiceProvider;
1095
1103
  }
1096
1104
  AppCheckService.prototype._delete = function () {
1097
- var tokenObservers = getState(this.app).tokenObservers;
1105
+ var tokenObservers = getStateReference(this.app).tokenObservers;
1098
1106
  for (var _i = 0, tokenObservers_1 = tokenObservers; _i < tokenObservers_1.length; _i++) {
1099
1107
  var tokenObserver = tokenObservers_1[_i];
1100
1108
  removeTokenListener(this.app, tokenObserver.next);
@@ -1117,7 +1125,7 @@ function internalFactory(appCheck) {
1117
1125
  }
1118
1126
 
1119
1127
  var name = "@firebase/app-check";
1120
- var version = "0.5.15";
1128
+ var version = "0.5.16-canary.457fc2eeb";
1121
1129
 
1122
1130
  /**
1123
1131
  * @license
@@ -1138,9 +1146,9 @@ var version = "0.5.15";
1138
1146
  var RECAPTCHA_URL = 'https://www.google.com/recaptcha/api.js';
1139
1147
  var RECAPTCHA_ENTERPRISE_URL = 'https://www.google.com/recaptcha/enterprise.js';
1140
1148
  function initializeV3(app, siteKey) {
1141
- var state = getState(app);
1142
1149
  var initialized = new util.Deferred();
1143
- setState(app, tslib.__assign(tslib.__assign({}, state), { reCAPTCHAState: { initialized: initialized } }));
1150
+ var state = getStateReference(app);
1151
+ state.reCAPTCHAState = { initialized: initialized };
1144
1152
  var divId = makeDiv(app);
1145
1153
  var grecaptcha = getRecaptcha(false);
1146
1154
  if (!grecaptcha) {
@@ -1159,9 +1167,9 @@ function initializeV3(app, siteKey) {
1159
1167
  return initialized.promise;
1160
1168
  }
1161
1169
  function initializeEnterprise(app, siteKey) {
1162
- var state = getState(app);
1163
1170
  var initialized = new util.Deferred();
1164
- setState(app, tslib.__assign(tslib.__assign({}, state), { reCAPTCHAState: { initialized: initialized } }));
1171
+ var state = getStateReference(app);
1172
+ state.reCAPTCHAState = { initialized: initialized };
1165
1173
  var divId = makeDiv(app);
1166
1174
  var grecaptcha = getRecaptcha(true);
1167
1175
  if (!grecaptcha) {
@@ -1209,13 +1217,13 @@ function getToken$1(app) {
1209
1217
  switch (_a.label) {
1210
1218
  case 0:
1211
1219
  ensureActivated(app);
1212
- reCAPTCHAState = getState(app).reCAPTCHAState;
1220
+ reCAPTCHAState = getStateReference(app).reCAPTCHAState;
1213
1221
  return [4 /*yield*/, reCAPTCHAState.initialized.promise];
1214
1222
  case 1:
1215
1223
  recaptcha = _a.sent();
1216
1224
  return [2 /*return*/, new Promise(function (resolve, _reject) {
1217
1225
  // Updated after initialization is complete.
1218
- var reCAPTCHAState = getState(app).reCAPTCHAState;
1226
+ var reCAPTCHAState = getStateReference(app).reCAPTCHAState;
1219
1227
  recaptcha.ready(function () {
1220
1228
  resolve(
1221
1229
  // widgetId is guaranteed to be available if reCAPTCHAState.initialized.promise resolved.
@@ -1238,9 +1246,9 @@ function renderInvisibleWidget(app, siteKey, grecaptcha, container) {
1238
1246
  sitekey: siteKey,
1239
1247
  size: 'invisible'
1240
1248
  });
1241
- var state = getState(app);
1242
- setState(app, tslib.__assign(tslib.__assign({}, state), { reCAPTCHAState: tslib.__assign(tslib.__assign({}, state.reCAPTCHAState), { // state.reCAPTCHAState is set in the initialize()
1243
- widgetId: widgetId }) }));
1249
+ var state = getStateReference(app);
1250
+ state.reCAPTCHAState = tslib.__assign(tslib.__assign({}, state.reCAPTCHAState), { // state.reCAPTCHAState is set in the initialize()
1251
+ widgetId: widgetId });
1244
1252
  }
1245
1253
  function loadReCAPTCHAV3Script(onload) {
1246
1254
  var script = document.createElement('script');
@@ -1605,7 +1613,7 @@ function initializeAppCheck(app$1, options) {
1605
1613
  // If isTokenAutoRefreshEnabled is false, do not send any requests to the
1606
1614
  // exchange endpoint without an explicit call from the user either directly
1607
1615
  // or through another Firebase library (storage, functions, etc.)
1608
- if (getState(app$1).isTokenAutoRefreshEnabled) {
1616
+ if (getStateReference(app$1).isTokenAutoRefreshEnabled) {
1609
1617
  // Adding a listener will start the refresher and fetch a token if needed.
1610
1618
  // This gets a token ready and prevents a delay when an internal library
1611
1619
  // requests the token.
@@ -1626,12 +1634,14 @@ function initializeAppCheck(app$1, options) {
1626
1634
  * false and can be set in the app config.
1627
1635
  */
1628
1636
  function _activate(app, provider, isTokenAutoRefreshEnabled) {
1629
- var state = getState(app);
1630
- var newState = tslib.__assign(tslib.__assign({}, state), { activated: true });
1631
- newState.provider = provider; // Read cached token from storage if it exists and store it in memory.
1632
- newState.cachedTokenPromise = readTokenFromStorage(app).then(function (cachedToken) {
1637
+ // Create an entry in the APP_CHECK_STATES map. Further changes should
1638
+ // directly mutate this object.
1639
+ var state = setInitialState(app, tslib.__assign({}, DEFAULT_STATE));
1640
+ state.activated = true;
1641
+ state.provider = provider; // Read cached token from storage if it exists and store it in memory.
1642
+ state.cachedTokenPromise = readTokenFromStorage(app).then(function (cachedToken) {
1633
1643
  if (cachedToken && isValid(cachedToken)) {
1634
- setState(app, tslib.__assign(tslib.__assign({}, getState(app)), { token: cachedToken }));
1644
+ state.token = cachedToken;
1635
1645
  // notify all listeners with the cached token
1636
1646
  notifyTokenListeners(app, { token: cachedToken.token });
1637
1647
  }
@@ -1640,12 +1650,11 @@ function _activate(app, provider, isTokenAutoRefreshEnabled) {
1640
1650
  // Use value of global `automaticDataCollectionEnabled` (which
1641
1651
  // itself defaults to false if not specified in config) if
1642
1652
  // `isTokenAutoRefreshEnabled` param was not provided by user.
1643
- newState.isTokenAutoRefreshEnabled =
1653
+ state.isTokenAutoRefreshEnabled =
1644
1654
  isTokenAutoRefreshEnabled === undefined
1645
1655
  ? app.automaticDataCollectionEnabled
1646
1656
  : isTokenAutoRefreshEnabled;
1647
- setState(app, newState);
1648
- newState.provider.initialize(app);
1657
+ state.provider.initialize(app);
1649
1658
  }
1650
1659
  /**
1651
1660
  * Set whether App Check will automatically refresh tokens as needed.
@@ -1658,7 +1667,7 @@ function _activate(app, provider, isTokenAutoRefreshEnabled) {
1658
1667
  */
1659
1668
  function setTokenAutoRefreshEnabled(appCheckInstance, isTokenAutoRefreshEnabled) {
1660
1669
  var app = appCheckInstance.app;
1661
- var state = getState(app);
1670
+ var state = getStateReference(app);
1662
1671
  // This will exist if any product libraries have called
1663
1672
  // `addTokenListener()`
1664
1673
  if (state.tokenRefresher) {
@@ -1669,7 +1678,7 @@ function setTokenAutoRefreshEnabled(appCheckInstance, isTokenAutoRefreshEnabled)
1669
1678
  state.tokenRefresher.stop();
1670
1679
  }
1671
1680
  }
1672
- setState(app, tslib.__assign(tslib.__assign({}, state), { isTokenAutoRefreshEnabled: isTokenAutoRefreshEnabled }));
1681
+ state.isTokenAutoRefreshEnabled = isTokenAutoRefreshEnabled;
1673
1682
  }
1674
1683
  /**
1675
1684
  * Get the current App Check token. Attaches to the most recent