@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/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # @firebase/app-check
2
2
 
3
+ ## 0.5.16
4
+
5
+ ### Patch Changes
6
+
7
+ - [`4af28c1a4`](https://github.com/firebase/firebase-js-sdk/commit/4af28c1a42bd25ce2353f694ca1724c6101cbce5) [#6682](https://github.com/firebase/firebase-js-sdk/pull/6682) - Upgrade TypeScript to 4.7.4.
8
+
9
+ - Updated dependencies [[`4af28c1a4`](https://github.com/firebase/firebase-js-sdk/commit/4af28c1a42bd25ce2353f694ca1724c6101cbce5)]:
10
+ - @firebase/component@0.5.21
11
+ - @firebase/logger@0.3.4
12
+ - @firebase/util@1.7.3
13
+
3
14
  ## 0.5.15
4
15
 
5
16
  ### Patch Changes
@@ -1,6 +1,6 @@
1
1
  import { _getProvider, getApp, _registerComponent, registerVersion } from '@firebase/app';
2
2
  import { Component } from '@firebase/component';
3
- import { __awaiter, __generator, __assign, __spreadArray } from 'tslib';
3
+ import { __assign, __awaiter, __generator, __spreadArray } from 'tslib';
4
4
  import { Deferred, ErrorFactory, isIndexedDBAvailable, uuidv4, getGlobal, base64, issuedAtTime, calculateBackoffMillis, getModularInstance } from '@firebase/util';
5
5
  import { Logger } from '@firebase/logger';
6
6
 
@@ -29,11 +29,19 @@ var DEBUG_STATE = {
29
29
  initialized: false,
30
30
  enabled: false
31
31
  };
32
- function getState(app) {
33
- return APP_CHECK_STATES.get(app) || DEFAULT_STATE;
32
+ /**
33
+ * Gets a reference to the state object.
34
+ */
35
+ function getStateReference(app) {
36
+ return APP_CHECK_STATES.get(app) || __assign({}, DEFAULT_STATE);
34
37
  }
35
- function setState(app, state) {
38
+ /**
39
+ * Set once on initialization. The map should hold the same reference to the
40
+ * same object until this entry is deleted.
41
+ */
42
+ function setInitialState(app, state) {
36
43
  APP_CHECK_STATES.set(app, state);
44
+ return APP_CHECK_STATES.get(app);
37
45
  }
38
46
  function getDebugState() {
39
47
  return DEBUG_STATE;
@@ -271,7 +279,7 @@ function getRecaptcha(isEnterprise) {
271
279
  return self.grecaptcha;
272
280
  }
273
281
  function ensureActivated(app) {
274
- if (!getState(app).activated) {
282
+ if (!getStateReference(app).activated) {
275
283
  throw ERROR_FACTORY.create("use-before-activation" /* USE_BEFORE_ACTIVATION */, {
276
284
  appName: app.name
277
285
  });
@@ -772,7 +780,7 @@ function getToken$2(appCheck, forceRefresh) {
772
780
  case 0:
773
781
  app = appCheck.app;
774
782
  ensureActivated(app);
775
- state = getState(app);
783
+ state = getStateReference(app);
776
784
  token = state.token;
777
785
  error = undefined;
778
786
  /**
@@ -780,7 +788,7 @@ function getToken$2(appCheck, forceRefresh) {
780
788
  * memory and unset the local variable `token`.
781
789
  */
782
790
  if (token && !isValid(token)) {
783
- setState(app, __assign(__assign({}, state), { token: undefined }));
791
+ state.token = undefined;
784
792
  token = undefined;
785
793
  }
786
794
  if (!!token) return [3 /*break*/, 4];
@@ -829,7 +837,7 @@ function getToken$2(appCheck, forceRefresh) {
829
837
  // Write debug token to indexedDB.
830
838
  _e.sent();
831
839
  // Write debug token to state.
832
- setState(app, __assign(__assign({}, state), { token: tokenFromDebugExchange }));
840
+ state.token = tokenFromDebugExchange;
833
841
  return [2 /*return*/, { token: tokenFromDebugExchange.token }];
834
842
  case 9:
835
843
  _e.trys.push([9, 11, , 12]);
@@ -844,7 +852,7 @@ function getToken$2(appCheck, forceRefresh) {
844
852
  });
845
853
  shouldCallListeners = true;
846
854
  }
847
- return [4 /*yield*/, state.exchangeTokenPromise];
855
+ return [4 /*yield*/, getStateReference(app).exchangeTokenPromise];
848
856
  case 10:
849
857
  token = _e.sent();
850
858
  return [3 /*break*/, 12];
@@ -894,7 +902,7 @@ function getToken$2(appCheck, forceRefresh) {
894
902
  };
895
903
  // write the new token to the memory state as well as the persistent storage.
896
904
  // Only do it if we got a valid new token
897
- setState(app, __assign(__assign({}, state), { token: token }));
905
+ state.token = token;
898
906
  return [4 /*yield*/, writeTokenToStorage(app, token)];
899
907
  case 15:
900
908
  _e.sent();
@@ -910,13 +918,13 @@ function getToken$2(appCheck, forceRefresh) {
910
918
  }
911
919
  function addTokenListener(appCheck, type, listener, onError) {
912
920
  var app = appCheck.app;
913
- var state = getState(app);
921
+ var state = getStateReference(app);
914
922
  var tokenObserver = {
915
923
  next: listener,
916
924
  error: onError,
917
925
  type: type
918
926
  };
919
- setState(app, __assign(__assign({}, state), { tokenObservers: __spreadArray(__spreadArray([], state.tokenObservers), [tokenObserver]) }));
927
+ state.tokenObservers = __spreadArray(__spreadArray([], state.tokenObservers), [tokenObserver]);
920
928
  // Invoke the listener async immediately if there is a valid token
921
929
  // in memory.
922
930
  if (state.token && isValid(state.token)) {
@@ -943,27 +951,27 @@ function addTokenListener(appCheck, type, listener, onError) {
943
951
  void state.cachedTokenPromise.then(function () { return initTokenRefresher(appCheck); });
944
952
  }
945
953
  function removeTokenListener(app, listener) {
946
- var state = getState(app);
954
+ var state = getStateReference(app);
947
955
  var newObservers = state.tokenObservers.filter(function (tokenObserver) { return tokenObserver.next !== listener; });
948
956
  if (newObservers.length === 0 &&
949
957
  state.tokenRefresher &&
950
958
  state.tokenRefresher.isRunning()) {
951
959
  state.tokenRefresher.stop();
952
960
  }
953
- setState(app, __assign(__assign({}, state), { tokenObservers: newObservers }));
961
+ state.tokenObservers = newObservers;
954
962
  }
955
963
  /**
956
964
  * Logic to create and start refresher as needed.
957
965
  */
958
966
  function initTokenRefresher(appCheck) {
959
967
  var app = appCheck.app;
960
- var state = getState(app);
968
+ var state = getStateReference(app);
961
969
  // Create the refresher but don't start it if `isTokenAutoRefreshEnabled`
962
970
  // is not true.
963
971
  var refresher = state.tokenRefresher;
964
972
  if (!refresher) {
965
973
  refresher = createTokenRefresher(appCheck);
966
- setState(app, __assign(__assign({}, state), { tokenRefresher: refresher }));
974
+ state.tokenRefresher = refresher;
967
975
  }
968
976
  if (!refresher.isRunning() && state.isTokenAutoRefreshEnabled) {
969
977
  refresher.start();
@@ -980,7 +988,7 @@ function createTokenRefresher(appCheck) {
980
988
  return __generator(this, function (_a) {
981
989
  switch (_a.label) {
982
990
  case 0:
983
- state = getState(app);
991
+ state = getStateReference(app);
984
992
  if (!!state.token) return [3 /*break*/, 2];
985
993
  return [4 /*yield*/, getToken$2(appCheck)];
986
994
  case 1:
@@ -1015,7 +1023,7 @@ function createTokenRefresher(appCheck) {
1015
1023
  }); }, function () {
1016
1024
  return true;
1017
1025
  }, function () {
1018
- var state = getState(app);
1026
+ var state = getStateReference(app);
1019
1027
  if (state.token) {
1020
1028
  // issuedAtTime + (50% * total TTL) + 5 minutes
1021
1029
  var nextRefreshTimeMillis = state.token.issuedAtTimeMillis +
@@ -1033,7 +1041,7 @@ function createTokenRefresher(appCheck) {
1033
1041
  }, TOKEN_REFRESH_TIME.RETRIAL_MIN_WAIT, TOKEN_REFRESH_TIME.RETRIAL_MAX_WAIT);
1034
1042
  }
1035
1043
  function notifyTokenListeners(app, token) {
1036
- var observers = getState(app).tokenObservers;
1044
+ var observers = getStateReference(app).tokenObservers;
1037
1045
  for (var _i = 0, observers_1 = observers; _i < observers_1.length; _i++) {
1038
1046
  var observer = observers_1[_i];
1039
1047
  try {
@@ -1090,7 +1098,7 @@ var AppCheckService = /** @class */ (function () {
1090
1098
  this.heartbeatServiceProvider = heartbeatServiceProvider;
1091
1099
  }
1092
1100
  AppCheckService.prototype._delete = function () {
1093
- var tokenObservers = getState(this.app).tokenObservers;
1101
+ var tokenObservers = getStateReference(this.app).tokenObservers;
1094
1102
  for (var _i = 0, tokenObservers_1 = tokenObservers; _i < tokenObservers_1.length; _i++) {
1095
1103
  var tokenObserver = tokenObservers_1[_i];
1096
1104
  removeTokenListener(this.app, tokenObserver.next);
@@ -1113,7 +1121,7 @@ function internalFactory(appCheck) {
1113
1121
  }
1114
1122
 
1115
1123
  var name = "@firebase/app-check";
1116
- var version = "0.5.15";
1124
+ var version = "0.5.16-canary.457fc2eeb";
1117
1125
 
1118
1126
  /**
1119
1127
  * @license
@@ -1134,9 +1142,9 @@ var version = "0.5.15";
1134
1142
  var RECAPTCHA_URL = 'https://www.google.com/recaptcha/api.js';
1135
1143
  var RECAPTCHA_ENTERPRISE_URL = 'https://www.google.com/recaptcha/enterprise.js';
1136
1144
  function initializeV3(app, siteKey) {
1137
- var state = getState(app);
1138
1145
  var initialized = new Deferred();
1139
- setState(app, __assign(__assign({}, state), { reCAPTCHAState: { initialized: initialized } }));
1146
+ var state = getStateReference(app);
1147
+ state.reCAPTCHAState = { initialized: initialized };
1140
1148
  var divId = makeDiv(app);
1141
1149
  var grecaptcha = getRecaptcha(false);
1142
1150
  if (!grecaptcha) {
@@ -1155,9 +1163,9 @@ function initializeV3(app, siteKey) {
1155
1163
  return initialized.promise;
1156
1164
  }
1157
1165
  function initializeEnterprise(app, siteKey) {
1158
- var state = getState(app);
1159
1166
  var initialized = new Deferred();
1160
- setState(app, __assign(__assign({}, state), { reCAPTCHAState: { initialized: initialized } }));
1167
+ var state = getStateReference(app);
1168
+ state.reCAPTCHAState = { initialized: initialized };
1161
1169
  var divId = makeDiv(app);
1162
1170
  var grecaptcha = getRecaptcha(true);
1163
1171
  if (!grecaptcha) {
@@ -1205,13 +1213,13 @@ function getToken$1(app) {
1205
1213
  switch (_a.label) {
1206
1214
  case 0:
1207
1215
  ensureActivated(app);
1208
- reCAPTCHAState = getState(app).reCAPTCHAState;
1216
+ reCAPTCHAState = getStateReference(app).reCAPTCHAState;
1209
1217
  return [4 /*yield*/, reCAPTCHAState.initialized.promise];
1210
1218
  case 1:
1211
1219
  recaptcha = _a.sent();
1212
1220
  return [2 /*return*/, new Promise(function (resolve, _reject) {
1213
1221
  // Updated after initialization is complete.
1214
- var reCAPTCHAState = getState(app).reCAPTCHAState;
1222
+ var reCAPTCHAState = getStateReference(app).reCAPTCHAState;
1215
1223
  recaptcha.ready(function () {
1216
1224
  resolve(
1217
1225
  // widgetId is guaranteed to be available if reCAPTCHAState.initialized.promise resolved.
@@ -1234,9 +1242,9 @@ function renderInvisibleWidget(app, siteKey, grecaptcha, container) {
1234
1242
  sitekey: siteKey,
1235
1243
  size: 'invisible'
1236
1244
  });
1237
- var state = getState(app);
1238
- setState(app, __assign(__assign({}, state), { reCAPTCHAState: __assign(__assign({}, state.reCAPTCHAState), { // state.reCAPTCHAState is set in the initialize()
1239
- widgetId: widgetId }) }));
1245
+ var state = getStateReference(app);
1246
+ state.reCAPTCHAState = __assign(__assign({}, state.reCAPTCHAState), { // state.reCAPTCHAState is set in the initialize()
1247
+ widgetId: widgetId });
1240
1248
  }
1241
1249
  function loadReCAPTCHAV3Script(onload) {
1242
1250
  var script = document.createElement('script');
@@ -1601,7 +1609,7 @@ function initializeAppCheck(app, options) {
1601
1609
  // If isTokenAutoRefreshEnabled is false, do not send any requests to the
1602
1610
  // exchange endpoint without an explicit call from the user either directly
1603
1611
  // or through another Firebase library (storage, functions, etc.)
1604
- if (getState(app).isTokenAutoRefreshEnabled) {
1612
+ if (getStateReference(app).isTokenAutoRefreshEnabled) {
1605
1613
  // Adding a listener will start the refresher and fetch a token if needed.
1606
1614
  // This gets a token ready and prevents a delay when an internal library
1607
1615
  // requests the token.
@@ -1622,12 +1630,14 @@ function initializeAppCheck(app, options) {
1622
1630
  * false and can be set in the app config.
1623
1631
  */
1624
1632
  function _activate(app, provider, isTokenAutoRefreshEnabled) {
1625
- var state = getState(app);
1626
- var newState = __assign(__assign({}, state), { activated: true });
1627
- newState.provider = provider; // Read cached token from storage if it exists and store it in memory.
1628
- newState.cachedTokenPromise = readTokenFromStorage(app).then(function (cachedToken) {
1633
+ // Create an entry in the APP_CHECK_STATES map. Further changes should
1634
+ // directly mutate this object.
1635
+ var state = setInitialState(app, __assign({}, DEFAULT_STATE));
1636
+ state.activated = true;
1637
+ state.provider = provider; // Read cached token from storage if it exists and store it in memory.
1638
+ state.cachedTokenPromise = readTokenFromStorage(app).then(function (cachedToken) {
1629
1639
  if (cachedToken && isValid(cachedToken)) {
1630
- setState(app, __assign(__assign({}, getState(app)), { token: cachedToken }));
1640
+ state.token = cachedToken;
1631
1641
  // notify all listeners with the cached token
1632
1642
  notifyTokenListeners(app, { token: cachedToken.token });
1633
1643
  }
@@ -1636,12 +1646,11 @@ function _activate(app, provider, isTokenAutoRefreshEnabled) {
1636
1646
  // Use value of global `automaticDataCollectionEnabled` (which
1637
1647
  // itself defaults to false if not specified in config) if
1638
1648
  // `isTokenAutoRefreshEnabled` param was not provided by user.
1639
- newState.isTokenAutoRefreshEnabled =
1649
+ state.isTokenAutoRefreshEnabled =
1640
1650
  isTokenAutoRefreshEnabled === undefined
1641
1651
  ? app.automaticDataCollectionEnabled
1642
1652
  : isTokenAutoRefreshEnabled;
1643
- setState(app, newState);
1644
- newState.provider.initialize(app);
1653
+ state.provider.initialize(app);
1645
1654
  }
1646
1655
  /**
1647
1656
  * Set whether App Check will automatically refresh tokens as needed.
@@ -1654,7 +1663,7 @@ function _activate(app, provider, isTokenAutoRefreshEnabled) {
1654
1663
  */
1655
1664
  function setTokenAutoRefreshEnabled(appCheckInstance, isTokenAutoRefreshEnabled) {
1656
1665
  var app = appCheckInstance.app;
1657
- var state = getState(app);
1666
+ var state = getStateReference(app);
1658
1667
  // This will exist if any product libraries have called
1659
1668
  // `addTokenListener()`
1660
1669
  if (state.tokenRefresher) {
@@ -1665,7 +1674,7 @@ function setTokenAutoRefreshEnabled(appCheckInstance, isTokenAutoRefreshEnabled)
1665
1674
  state.tokenRefresher.stop();
1666
1675
  }
1667
1676
  }
1668
- setState(app, __assign(__assign({}, state), { isTokenAutoRefreshEnabled: isTokenAutoRefreshEnabled }));
1677
+ state.isTokenAutoRefreshEnabled = isTokenAutoRefreshEnabled;
1669
1678
  }
1670
1679
  /**
1671
1680
  * Get the current App Check token. Attaches to the most recent