@okta/okta-auth-js 6.1.0 → 6.2.0

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.
Files changed (69) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +53 -23
  3. package/cjs/AuthStateManager.js +5 -4
  4. package/cjs/AuthStateManager.js.map +1 -1
  5. package/cjs/OktaAuth.js +30 -14
  6. package/cjs/OktaAuth.js.map +1 -1
  7. package/cjs/OktaUserAgent.js +2 -2
  8. package/cjs/ServiceManager.js +195 -0
  9. package/cjs/ServiceManager.js.map +1 -0
  10. package/cjs/TokenManager.js +6 -14
  11. package/cjs/TokenManager.js.map +1 -1
  12. package/cjs/browser/browserStorage.js +12 -7
  13. package/cjs/browser/browserStorage.js.map +1 -1
  14. package/cjs/crypto/node.js +19 -13
  15. package/cjs/crypto/node.js.map +1 -1
  16. package/cjs/idx/remediators/AuthenticatorVerificationData.js +44 -7
  17. package/cjs/idx/remediators/AuthenticatorVerificationData.js.map +1 -1
  18. package/cjs/idx/remediators/Base/AuthenticatorData.js.map +1 -1
  19. package/cjs/idx/run.js +6 -0
  20. package/cjs/idx/run.js.map +1 -1
  21. package/cjs/options/browser.js +81 -0
  22. package/cjs/options/browser.js.map +1 -0
  23. package/cjs/{options.js → options/index.js} +12 -78
  24. package/cjs/options/index.js.map +1 -0
  25. package/cjs/options/node.js +46 -0
  26. package/cjs/options/node.js.map +1 -0
  27. package/cjs/server/serverStorage.js +7 -4
  28. package/cjs/server/serverStorage.js.map +1 -1
  29. package/cjs/services/AutoRenewService.js +94 -0
  30. package/cjs/services/AutoRenewService.js.map +1 -0
  31. package/cjs/services/SyncStorageService.js +93 -0
  32. package/cjs/services/SyncStorageService.js.map +1 -0
  33. package/cjs/services/index.js +30 -0
  34. package/cjs/services/index.js.map +1 -0
  35. package/cjs/types/Service.js +2 -0
  36. package/cjs/types/Service.js.map +1 -0
  37. package/cjs/types/index.js +13 -0
  38. package/cjs/types/index.js.map +1 -1
  39. package/dist/okta-auth-js.min.js +1 -1
  40. package/dist/okta-auth-js.min.js.LICENSE.txt +0 -8
  41. package/dist/okta-auth-js.min.js.map +1 -1
  42. package/dist/okta-auth-js.umd.js +1 -1
  43. package/dist/okta-auth-js.umd.js.LICENSE.txt +1 -7
  44. package/dist/okta-auth-js.umd.js.map +1 -1
  45. package/esm/{index.js → esm.browser.js} +1184 -2399
  46. package/esm/esm.browser.js.map +1 -0
  47. package/esm/esm.node.mjs +9277 -0
  48. package/esm/esm.node.mjs.map +1 -0
  49. package/lib/AuthStateManager.d.ts +1 -3
  50. package/lib/OktaAuth.d.ts +5 -4
  51. package/lib/ServiceManager.d.ts +38 -0
  52. package/lib/TokenManager.d.ts +0 -1
  53. package/lib/idx/remediators/AuthenticatorVerificationData.d.ts +5 -5
  54. package/lib/idx/remediators/Base/AuthenticatorData.d.ts +5 -6
  55. package/lib/options/browser.d.ts +16 -0
  56. package/lib/{options.d.ts → options/index.d.ts} +1 -1
  57. package/lib/options/node.d.ts +16 -0
  58. package/lib/services/AutoRenewService.d.ts +27 -0
  59. package/lib/services/{TokenService.d.ts → SyncStorageService.d.ts} +8 -5
  60. package/lib/services/index.d.ts +13 -0
  61. package/lib/types/OktaAuthOptions.d.ts +5 -0
  62. package/lib/types/Service.d.ts +23 -0
  63. package/lib/types/api.d.ts +5 -2
  64. package/lib/types/index.d.ts +1 -0
  65. package/package.json +24 -10
  66. package/cjs/options.js.map +0 -1
  67. package/cjs/services/TokenService.js +0 -111
  68. package/cjs/services/TokenService.js.map +0 -1
  69. package/esm/index.js.map +0 -1
@@ -21,7 +21,7 @@ var _features = require("./features");
21
21
  class OktaUserAgent {
22
22
  constructor() {
23
23
  // add base sdk env
24
- this.environments = [`okta-auth-js/${"6.1.0"}`];
24
+ this.environments = [`okta-auth-js/${"6.2.0"}`];
25
25
  }
26
26
 
27
27
  addEnvironment(env) {
@@ -36,7 +36,7 @@ class OktaUserAgent {
36
36
  }
37
37
 
38
38
  getVersion() {
39
- return "6.1.0";
39
+ return "6.2.0";
40
40
  }
41
41
 
42
42
  maybeAddNodeEnvironment() {
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+
5
+ exports.ServiceManager = void 0;
6
+
7
+ var _assign = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/assign"));
8
+
9
+ var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/map"));
10
+
11
+ var _values = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/values"));
12
+
13
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
14
+
15
+ var _broadcastChannel = require("broadcast-channel");
16
+
17
+ var _services = require("./services");
18
+
19
+ var _features = require("./features");
20
+
21
+ /*!
22
+ * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.
23
+ * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
24
+ *
25
+ * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
26
+ * Unless required by applicable law or agreed to in writing, software
27
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
28
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
29
+ *
30
+ * See the License for the specific language governing permissions and limitations under the License.
31
+ */
32
+ class ServiceManager {
33
+ constructor(sdk, options = {}) {
34
+ this.sdk = sdk; // TODO: backwards compatibility, remove in next major version - OKTA-473815
35
+
36
+ const {
37
+ autoRenew,
38
+ autoRemove,
39
+ syncStorage
40
+ } = sdk.tokenManager.getOptions();
41
+ this.options = (0, _assign.default)({}, ServiceManager.defaultOptions, {
42
+ autoRenew,
43
+ autoRemove,
44
+ syncStorage
45
+ }, options);
46
+ this.started = false;
47
+ this.services = new _map.default();
48
+ this.onLeaderDuplicate = this.onLeaderDuplicate.bind(this);
49
+ this.onLeader = this.onLeader.bind(this);
50
+ ServiceManager.knownServices.forEach(name => {
51
+ const svc = this.createService(name);
52
+
53
+ if (svc) {
54
+ this.services.set(name, svc);
55
+ }
56
+ });
57
+ }
58
+
59
+ static canUseLeaderElection() {
60
+ return (0, _features.isBrowser)();
61
+ }
62
+
63
+ onLeader() {
64
+ if (this.started) {
65
+ // Start services that requires leadership
66
+ this.startServices();
67
+ }
68
+ }
69
+
70
+ onLeaderDuplicate() {}
71
+
72
+ isLeader() {
73
+ var _this$elector;
74
+
75
+ return !!((_this$elector = this.elector) !== null && _this$elector !== void 0 && _this$elector.isLeader);
76
+ }
77
+
78
+ hasLeader() {
79
+ var _this$elector2;
80
+
81
+ return (_this$elector2 = this.elector) === null || _this$elector2 === void 0 ? void 0 : _this$elector2.hasLeader;
82
+ }
83
+
84
+ isLeaderRequired() {
85
+ var _context;
86
+
87
+ return [...(0, _values.default)(_context = this.services).call(_context)].some(srv => srv.requiresLeadership());
88
+ }
89
+
90
+ start() {
91
+ if (this.started) {
92
+ this.stop();
93
+ } // only start election if a leader is required
94
+
95
+
96
+ if (this.isLeaderRequired()) {
97
+ this.startElector();
98
+ }
99
+
100
+ this.startServices();
101
+ this.started = true;
102
+ }
103
+
104
+ stop() {
105
+ this.stopElector();
106
+ this.stopServices();
107
+ this.started = false;
108
+ }
109
+
110
+ getService(name) {
111
+ return this.services.get(name);
112
+ }
113
+
114
+ startServices() {
115
+ for (const srv of (0, _values.default)(_context2 = this.services).call(_context2)) {
116
+ var _context2;
117
+
118
+ const canStart = srv.canStart() && !srv.isStarted() && (srv.requiresLeadership() ? this.isLeader() : true);
119
+
120
+ if (canStart) {
121
+ srv.start();
122
+ }
123
+ }
124
+ }
125
+
126
+ stopServices() {
127
+ for (const srv of (0, _values.default)(_context3 = this.services).call(_context3)) {
128
+ var _context3;
129
+
130
+ srv.stop();
131
+ }
132
+
133
+ this.services = new _map.default();
134
+ }
135
+
136
+ startElector() {
137
+ this.stopElector();
138
+
139
+ if (ServiceManager.canUseLeaderElection()) {
140
+ if (!this.channel) {
141
+ const {
142
+ broadcastChannelName
143
+ } = this.options;
144
+ this.channel = new _broadcastChannel.BroadcastChannel(broadcastChannelName);
145
+ }
146
+
147
+ if (!this.elector) {
148
+ this.elector = (0, _broadcastChannel.createLeaderElection)(this.channel);
149
+ this.elector.onduplicate = this.onLeaderDuplicate;
150
+ this.elector.awaitLeadership().then(this.onLeader);
151
+ }
152
+ }
153
+ }
154
+
155
+ stopElector() {
156
+ if (this.elector) {
157
+ var _this$elector3;
158
+
159
+ (_this$elector3 = this.elector) === null || _this$elector3 === void 0 ? void 0 : _this$elector3.die();
160
+ this.elector = undefined;
161
+ }
162
+ }
163
+
164
+ createService(name) {
165
+ const tokenManager = this.sdk.tokenManager;
166
+ let service;
167
+
168
+ switch (name) {
169
+ case 'autoRenew':
170
+ service = new _services.AutoRenewService(tokenManager, { ...this.options
171
+ });
172
+ break;
173
+
174
+ case 'syncStorage':
175
+ service = new _services.SyncStorageService(tokenManager, { ...this.options
176
+ });
177
+ break;
178
+
179
+ default:
180
+ throw new Error(`Unknown service ${name}`);
181
+ }
182
+
183
+ return service;
184
+ }
185
+
186
+ }
187
+
188
+ exports.ServiceManager = ServiceManager;
189
+ (0, _defineProperty2.default)(ServiceManager, "knownServices", ['autoRenew', 'syncStorage']);
190
+ (0, _defineProperty2.default)(ServiceManager, "defaultOptions", {
191
+ autoRenew: true,
192
+ autoRemove: true,
193
+ syncStorage: true
194
+ });
195
+ //# sourceMappingURL=ServiceManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../lib/ServiceManager.ts"],"names":["ServiceManager","constructor","sdk","options","autoRenew","autoRemove","syncStorage","tokenManager","getOptions","defaultOptions","started","services","onLeaderDuplicate","bind","onLeader","knownServices","forEach","name","svc","createService","set","canUseLeaderElection","startServices","isLeader","elector","hasLeader","isLeaderRequired","some","srv","requiresLeadership","start","stop","startElector","stopElector","stopServices","getService","get","canStart","isStarted","channel","broadcastChannelName","BroadcastChannel","onduplicate","awaitLeadership","then","die","undefined","service","AutoRenewService","SyncStorageService","Error"],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\nimport {\n ServiceManagerInterface,\n ServiceInterface,\n ServiceManagerOptions\n} from './types';\nimport { OktaAuth } from '.';\nimport {\n BroadcastChannel,\n createLeaderElection,\n LeaderElector\n} from 'broadcast-channel';\nimport { AutoRenewService, SyncStorageService } from './services';\nimport { isBrowser } from './features';\n\nexport class ServiceManager implements ServiceManagerInterface {\n private sdk: OktaAuth;\n private options: ServiceManagerOptions;\n private services: Map<string, ServiceInterface>;\n private channel?: BroadcastChannel;\n private elector?: LeaderElector;\n private started: boolean;\n\n private static knownServices = ['autoRenew', 'syncStorage'];\n\n private static defaultOptions = {\n autoRenew: true,\n autoRemove: true,\n syncStorage: true\n };\n\n constructor(sdk: OktaAuth, options: ServiceManagerOptions = {}) {\n this.sdk = sdk;\n\n // TODO: backwards compatibility, remove in next major version - OKTA-473815\n const { autoRenew, autoRemove, syncStorage } = sdk.tokenManager.getOptions();\n this.options = Object.assign({}, \n ServiceManager.defaultOptions,\n { autoRenew, autoRemove, syncStorage },\n options\n );\n\n this.started = false;\n this.services = new Map();\n this.onLeaderDuplicate = this.onLeaderDuplicate.bind(this);\n this.onLeader = this.onLeader.bind(this);\n\n ServiceManager.knownServices.forEach(name => {\n const svc = this.createService(name);\n if (svc) {\n this.services.set(name, svc);\n }\n });\n }\n\n public static canUseLeaderElection() {\n return isBrowser();\n }\n\n private onLeader() {\n if (this.started) {\n // Start services that requires leadership\n this.startServices();\n }\n }\n\n private onLeaderDuplicate() {\n }\n\n isLeader() {\n return !!this.elector?.isLeader;\n }\n\n hasLeader() {\n return this.elector?.hasLeader;\n }\n\n isLeaderRequired() {\n return [...this.services.values()].some(srv => srv.requiresLeadership());\n }\n\n start() {\n if (this.started) {\n this.stop();\n }\n // only start election if a leader is required\n if (this.isLeaderRequired()) {\n this.startElector();\n }\n this.startServices();\n this.started = true;\n }\n \n stop() {\n this.stopElector();\n this.stopServices();\n this.started = false;\n }\n\n getService(name: string): ServiceInterface | undefined {\n return this.services.get(name);\n }\n\n private startServices() {\n for (const srv of this.services.values()) {\n const canStart = srv.canStart() && !srv.isStarted() && (srv.requiresLeadership() ? this.isLeader() : true);\n if (canStart) {\n srv.start();\n }\n }\n }\n\n private stopServices() {\n for (const srv of this.services.values()) {\n srv.stop();\n }\n this.services = new Map();\n }\n\n private startElector() {\n this.stopElector();\n if (ServiceManager.canUseLeaderElection()) {\n if (!this.channel) {\n const { broadcastChannelName } = this.options;\n this.channel = new BroadcastChannel(broadcastChannelName as string);\n }\n if (!this.elector) {\n this.elector = createLeaderElection(this.channel);\n this.elector.onduplicate = this.onLeaderDuplicate;\n this.elector.awaitLeadership().then(this.onLeader);\n }\n }\n }\n\n private stopElector() {\n if (this.elector) {\n this.elector?.die();\n this.elector = undefined;\n }\n }\n\n private createService(name: string): ServiceInterface {\n const tokenManager = this.sdk.tokenManager;\n\n let service: ServiceInterface | undefined;\n switch (name) {\n case 'autoRenew':\n service = new AutoRenewService(tokenManager, {...this.options});\n break;\n case 'syncStorage':\n service = new SyncStorageService(tokenManager, {...this.options});\n break;\n default:\n throw new Error(`Unknown service ${name}`);\n }\n return service;\n }\n\n}\n"],"file":"ServiceManager.js"}
@@ -30,8 +30,6 @@ var _types = require("./types");
30
30
 
31
31
  var _constants = require("./constants");
32
32
 
33
- var _TokenService = require("./services/TokenService");
34
-
35
33
  /*!
36
34
  * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.
37
35
  * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
@@ -45,14 +43,16 @@ var _TokenService = require("./services/TokenService");
45
43
  *
46
44
  */
47
45
  const DEFAULT_OPTIONS = {
46
+ // TODO: remove in next major version - OKTA-473815
48
47
  autoRenew: true,
49
48
  autoRemove: true,
49
+ syncStorage: true,
50
+ // --- //
50
51
  clearPendingRemoveTokens: true,
51
52
  storage: undefined,
52
53
  // will use value from storageManager config
53
54
  expireEarlySeconds: 30,
54
55
  storageKey: _constants.TOKEN_STORAGE_NAME,
55
- syncStorage: true,
56
56
  _storageEventDelay: 0
57
57
  };
58
58
  const EVENT_EXPIRED = 'expired';
@@ -74,6 +74,7 @@ function defaultState() {
74
74
  }
75
75
 
76
76
  class TokenManager {
77
+ // eslint-disable-next-line complexity
77
78
  constructor(sdk, options = {}) {
78
79
  this.sdk = sdk;
79
80
  this.emitter = sdk.emitter;
@@ -82,7 +83,6 @@ class TokenManager {
82
83
  throw new _errors.AuthSdkError('Emitter should be initialized before TokenManager');
83
84
  }
84
85
 
85
- this.service = null;
86
86
  options = (0, _assign.default)({}, DEFAULT_OPTIONS, (0, _util.removeNils)(options));
87
87
 
88
88
  if ((0, _features.isIE11OrLess)()) {
@@ -116,23 +116,15 @@ class TokenManager {
116
116
  }
117
117
 
118
118
  start() {
119
- if (this.service) {
120
- this.stop();
121
- }
122
-
123
119
  if (this.options.clearPendingRemoveTokens) {
124
120
  this.clearPendingRemoveTokens();
125
121
  }
126
122
 
127
- this.service = new _TokenService.TokenService(this, this.getOptions());
128
- this.service.start();
123
+ this.setExpireEventTimeoutAll();
129
124
  }
130
125
 
131
126
  stop() {
132
- if (this.service) {
133
- this.service.stop();
134
- this.service = null;
135
- }
127
+ this.clearExpireEventTimeoutAll();
136
128
  }
137
129
 
138
130
  getOptions() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../lib/TokenManager.ts"],"names":["DEFAULT_OPTIONS","autoRenew","autoRemove","clearPendingRemoveTokens","storage","undefined","expireEarlySeconds","storageKey","TOKEN_STORAGE_NAME","syncStorage","_storageEventDelay","EVENT_EXPIRED","EVENT_RENEWED","EVENT_ADDED","EVENT_REMOVED","EVENT_ERROR","defaultState","expireTimeouts","renewPromise","TokenManager","constructor","sdk","options","emitter","AuthSdkError","service","storageOptions","secure","storageProvider","storageType","storageManager","getTokenStorage","useSeparateCookies","clock","SdkClock","create","state","on","bind","off","start","stop","TokenService","getOptions","getExpireTime","token","expireTime","expiresAt","hasExpired","now","emitExpired","key","emit","emitRenewed","freshToken","oldToken","emitAdded","emitRemoved","emitError","error","emitEventsForCrossTabsStorageUpdate","newValue","oldValue","oldTokens","getTokensFromStorageValue","newTokens","forEach","newToken","clearExpireEventTimeout","clearTimeout","clearExpireEventTimeoutAll","Object","prototype","hasOwnProperty","call","setExpireEventTimeout","expireEventWait","Math","max","expireEventTimeout","setTimeout","setExpireEventTimeoutAll","tokenStorage","getStorage","resetExpireEventTimeoutAll","add","setStorage","getSync","get","getTokensSync","tokens","accessToken","idToken","refreshToken","getTokens","getStorageKeyByType","type","getTokenType","setTokens","accessTokenCb","idTokenCb","refreshTokenCb","handleTokenCallback","handleAdded","handleRenewed","handleRemoved","types","existingTokens","existingToken","remove","removedToken","renewToken","renew","validateToken","e","reject","renewTokens","then","tokenType","catch","err","tokenKey","finally","clear","clearStorage","pendingRemove","value","JSON","parse","updateRefreshToken","REFRESH_TOKEN_STORAGE_KEY","addPendingRemoveFlags"],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n *\n */\nimport { removeNils, clone } from './util';\nimport { AuthSdkError } from './errors';\nimport { validateToken } from './oidc/util';\nimport { isLocalhost, isIE11OrLess } from './features';\nimport SdkClock from './clock';\nimport {\n EventEmitter,\n Token, \n Tokens, \n TokenType, \n TokenManagerOptions, \n isIDToken, \n isAccessToken,\n isRefreshToken,\n StorageOptions,\n StorageType,\n OktaAuthInterface,\n StorageProvider,\n TokenManagerErrorEventHandler,\n TokenManagerEventHandler,\n TokenManagerInterface,\n RefreshToken\n} from './types';\nimport { REFRESH_TOKEN_STORAGE_KEY, TOKEN_STORAGE_NAME } from './constants';\nimport { TokenService } from './services/TokenService';\n\nconst DEFAULT_OPTIONS = {\n autoRenew: true,\n autoRemove: true,\n clearPendingRemoveTokens: true,\n storage: undefined, // will use value from storageManager config\n expireEarlySeconds: 30,\n storageKey: TOKEN_STORAGE_NAME,\n syncStorage: true,\n _storageEventDelay: 0\n};\nexport const EVENT_EXPIRED = 'expired';\nexport const EVENT_RENEWED = 'renewed';\nexport const EVENT_ADDED = 'added';\nexport const EVENT_REMOVED = 'removed';\nexport const EVENT_ERROR = 'error';\n\ninterface TokenManagerState {\n expireTimeouts: Record<string, unknown>;\n renewPromise: Promise<Token | undefined> | null;\n}\nfunction defaultState(): TokenManagerState {\n return {\n expireTimeouts: {},\n renewPromise: null\n };\n}\nexport class TokenManager implements TokenManagerInterface {\n private sdk: OktaAuthInterface;\n private clock: SdkClock;\n private emitter: EventEmitter;\n private storage: StorageProvider;\n private state: TokenManagerState;\n private options: TokenManagerOptions;\n private service: TokenService | null;\n\n on: (event: string, handler: TokenManagerErrorEventHandler | TokenManagerEventHandler, context?: object) => void;\n off: (event: string, handler?: TokenManagerErrorEventHandler | TokenManagerEventHandler) => void;\n\n constructor(sdk: OktaAuthInterface, options: TokenManagerOptions = {}) {\n this.sdk = sdk;\n this.emitter = (sdk as any).emitter;\n if (!this.emitter) {\n throw new AuthSdkError('Emitter should be initialized before TokenManager');\n }\n this.service = null;\n \n options = Object.assign({}, DEFAULT_OPTIONS, removeNils(options));\n if (isIE11OrLess()) {\n options._storageEventDelay = options._storageEventDelay || 1000;\n }\n if (!isLocalhost()) {\n options.expireEarlySeconds = DEFAULT_OPTIONS.expireEarlySeconds;\n }\n this.options = options;\n\n const storageOptions: StorageOptions = removeNils({\n storageKey: options.storageKey,\n secure: options.secure,\n });\n if (typeof options.storage === 'object') {\n // A custom storage provider must implement getItem(key) and setItem(key, val)\n storageOptions.storageProvider = options.storage;\n } else if (options.storage) {\n storageOptions.storageType = options.storage as StorageType;\n }\n\n this.storage = sdk.storageManager.getTokenStorage({...storageOptions, useSeparateCookies: true});\n this.clock = SdkClock.create(/* sdk, options */);\n this.state = defaultState();\n\n this.on = this.emitter.on.bind(this.emitter);\n this.off = this.emitter.off.bind(this.emitter);\n }\n\n start() {\n if (this.service) {\n this.stop();\n }\n if (this.options.clearPendingRemoveTokens) {\n this.clearPendingRemoveTokens();\n }\n this.service = new TokenService(this, this.getOptions());\n this.service.start();\n }\n \n stop() {\n if (this.service) {\n this.service.stop();\n this.service = null;\n }\n }\n\n getOptions(): TokenManagerOptions {\n return clone(this.options);\n }\n \n getExpireTime(token) {\n const expireEarlySeconds = this.options.expireEarlySeconds || 0;\n var expireTime = token.expiresAt - expireEarlySeconds;\n return expireTime;\n }\n \n hasExpired(token) {\n var expireTime = this.getExpireTime(token);\n return expireTime <= this.clock.now();\n }\n \n emitExpired(key, token) {\n this.emitter.emit(EVENT_EXPIRED, key, token);\n }\n \n emitRenewed(key, freshToken, oldToken) {\n this.emitter.emit(EVENT_RENEWED, key, freshToken, oldToken);\n }\n \n emitAdded(key, token) {\n this.emitter.emit(EVENT_ADDED, key, token);\n }\n \n emitRemoved(key, token?) {\n this.emitter.emit(EVENT_REMOVED, key, token);\n }\n \n emitError(error) {\n this.emitter.emit(EVENT_ERROR, error);\n }\n \n emitEventsForCrossTabsStorageUpdate(newValue, oldValue) {\n const oldTokens = this.getTokensFromStorageValue(oldValue);\n const newTokens = this.getTokensFromStorageValue(newValue);\n Object.keys(newTokens).forEach(key => {\n const oldToken = oldTokens[key];\n const newToken = newTokens[key];\n if (JSON.stringify(oldToken) !== JSON.stringify(newToken)) {\n this.emitAdded(key, newToken);\n }\n });\n Object.keys(oldTokens).forEach(key => {\n const oldToken = oldTokens[key];\n const newToken = newTokens[key];\n if (!newToken) {\n this.emitRemoved(key, oldToken);\n }\n });\n }\n \n clearExpireEventTimeout(key) {\n clearTimeout(this.state.expireTimeouts[key] as any);\n delete this.state.expireTimeouts[key];\n \n // Remove the renew promise (if it exists)\n this.state.renewPromise = null;\n }\n \n clearExpireEventTimeoutAll() {\n var expireTimeouts = this.state.expireTimeouts;\n for (var key in expireTimeouts) {\n if (!Object.prototype.hasOwnProperty.call(expireTimeouts, key)) {\n continue;\n }\n this.clearExpireEventTimeout(key);\n }\n }\n \n setExpireEventTimeout(key, token) {\n if (isRefreshToken(token)) {\n return;\n }\n\n var expireTime = this.getExpireTime(token);\n var expireEventWait = Math.max(expireTime - this.clock.now(), 0) * 1000;\n \n // Clear any existing timeout\n this.clearExpireEventTimeout(key);\n \n var expireEventTimeout = setTimeout(() => {\n this.emitExpired(key, token);\n }, expireEventWait);\n \n // Add a new timeout\n this.state.expireTimeouts[key] = expireEventTimeout;\n }\n \n setExpireEventTimeoutAll() {\n var tokenStorage = this.storage.getStorage();\n for(var key in tokenStorage) {\n if (!Object.prototype.hasOwnProperty.call(tokenStorage, key)) {\n continue;\n }\n var token = tokenStorage[key];\n this.setExpireEventTimeout(key, token);\n }\n }\n \n // reset timeouts to setup autoRenew for tokens from other document context (tabs)\n resetExpireEventTimeoutAll() {\n this.clearExpireEventTimeoutAll();\n this.setExpireEventTimeoutAll();\n }\n \n add(key, token: Token) {\n var tokenStorage = this.storage.getStorage();\n validateToken(token);\n tokenStorage[key] = token;\n this.storage.setStorage(tokenStorage);\n this.emitAdded(key, token);\n this.setExpireEventTimeout(key, token);\n }\n \n getSync(key) {\n var tokenStorage = this.storage.getStorage();\n return tokenStorage[key];\n }\n \n async get(key) {\n return this.getSync(key);\n }\n \n getTokensSync(): Tokens {\n const tokens = {} as Tokens;\n const tokenStorage = this.storage.getStorage();\n Object.keys(tokenStorage).forEach(key => {\n const token = tokenStorage[key];\n if (isAccessToken(token)) {\n tokens.accessToken = token;\n } else if (isIDToken(token)) {\n tokens.idToken = token;\n } else if (isRefreshToken(token)) { \n tokens.refreshToken = token;\n }\n });\n return tokens;\n }\n \n async getTokens(): Promise<Tokens> {\n return this.getTokensSync();\n }\n\n getStorageKeyByType(type: TokenType): string {\n const tokenStorage = this.storage.getStorage();\n const key = Object.keys(tokenStorage).filter(key => {\n const token = tokenStorage[key];\n return (isAccessToken(token) && type === 'accessToken') \n || (isIDToken(token) && type === 'idToken')\n || (isRefreshToken(token) && type === 'refreshToken');\n })[0];\n return key;\n }\n\n private getTokenType(token: Token): TokenType {\n if (isAccessToken(token)) {\n return 'accessToken';\n }\n if (isIDToken(token)) {\n return 'idToken';\n }\n if(isRefreshToken(token)) {\n return 'refreshToken';\n }\n throw new AuthSdkError('Unknown token type');\n }\n\n setTokens(\n tokens: Tokens,\n // TODO: callbacks can be removed in the next major version OKTA-407224\n accessTokenCb?: Function, \n idTokenCb?: Function,\n refreshTokenCb?: Function\n ): void {\n const handleTokenCallback = (key, token) => {\n const type = this.getTokenType(token);\n if (type === 'accessToken') {\n accessTokenCb && accessTokenCb(key, token);\n } else if (type === 'idToken') {\n idTokenCb && idTokenCb(key, token);\n } else if (type === 'refreshToken') {\n refreshTokenCb && refreshTokenCb(key, token);\n }\n };\n const handleAdded = (key, token) => {\n this.emitAdded(key, token);\n this.setExpireEventTimeout(key, token);\n handleTokenCallback(key, token);\n };\n const handleRenewed = (key, token, oldToken) => {\n this.emitRenewed(key, token, oldToken);\n this.clearExpireEventTimeout(key);\n this.setExpireEventTimeout(key, token);\n handleTokenCallback(key, token);\n };\n const handleRemoved = (key, token) => {\n this.clearExpireEventTimeout(key);\n this.emitRemoved(key, token);\n handleTokenCallback(key, token);\n };\n \n const types: TokenType[] = ['idToken', 'accessToken', 'refreshToken'];\n const existingTokens = this.getTokensSync();\n\n // valid tokens\n types.forEach((type) => {\n const token = tokens[type];\n if (token) {\n validateToken(token, type);\n }\n });\n \n // add token to storage\n const storage = types.reduce((storage, type) => {\n const token = tokens[type];\n if (token) {\n const storageKey = this.getStorageKeyByType(type) || type;\n storage[storageKey] = token;\n }\n return storage;\n }, {});\n this.storage.setStorage(storage);\n \n // emit event and start expiration timer\n types.forEach(type => {\n const newToken = tokens[type];\n const existingToken = existingTokens[type];\n const storageKey = this.getStorageKeyByType(type) || type;\n if (newToken && existingToken) { // renew\n // call handleRemoved first, since it clears timers\n handleRemoved(storageKey, existingToken);\n handleAdded(storageKey, newToken);\n handleRenewed(storageKey, newToken, existingToken);\n } else if (newToken) { // add\n handleAdded(storageKey, newToken);\n } else if (existingToken) { //remove\n handleRemoved(storageKey, existingToken);\n }\n });\n }\n \n remove(key) {\n // Clear any listener for this token\n this.clearExpireEventTimeout(key);\n \n var tokenStorage = this.storage.getStorage();\n var removedToken = tokenStorage[key];\n delete tokenStorage[key];\n this.storage.setStorage(tokenStorage);\n \n this.emitRemoved(key, removedToken);\n }\n \n // TODO: this methods is redundant and can be removed in the next major version OKTA-407224\n async renewToken(token) {\n return this.sdk.token?.renew(token);\n }\n // TODO: this methods is redundant and can be removed in the next major version OKTA-407224\n validateToken(token: Token) {\n return validateToken(token);\n }\n\n // TODO: renew method should take no param, change in the next major version OKTA-407224\n renew(key): Promise<Token | undefined> {\n // Multiple callers may receive the same promise. They will all resolve or reject from the same request.\n if (this.state.renewPromise) {\n return this.state.renewPromise;\n }\n \n try {\n var token = this.getSync(key);\n if (!token) {\n throw new AuthSdkError('The tokenManager has no token for the key: ' + key);\n }\n } catch (e) {\n return Promise.reject(e);\n }\n \n // Remove existing autoRenew timeout\n this.clearExpireEventTimeout(key);\n \n // A refresh token means a replace instead of renewal\n // Store the renew promise state, to avoid renewing again\n this.state.renewPromise = this.sdk.token.renewTokens()\n .then(tokens => {\n this.setTokens(tokens);\n\n // resolve token based on the key\n const tokenType = this.getTokenType(token);\n return tokens[tokenType];\n })\n .catch(err => {\n // If renew fails, remove token from storage and emit error\n this.remove(key);\n err.tokenKey = key;\n this.emitError(err);\n throw err;\n })\n .finally(() => {\n // Remove existing promise key\n this.state.renewPromise = null;\n });\n \n return this.state.renewPromise;\n }\n \n clear() {\n this.clearExpireEventTimeoutAll();\n this.storage.clearStorage();\n }\n\n clearPendingRemoveTokens() {\n const tokens = this.getTokensSync();\n Object.keys(tokens).forEach(key => {\n if (tokens[key].pendingRemove) {\n this.remove(key);\n }\n });\n }\n \n getTokensFromStorageValue(value) {\n let tokens;\n try {\n tokens = JSON.parse(value) || {};\n } catch (e) {\n tokens = {};\n }\n return tokens;\n }\n\n updateRefreshToken(token: RefreshToken) {\n const key = this.getStorageKeyByType('refreshToken') || REFRESH_TOKEN_STORAGE_KEY;\n\n // do not emit any event\n var tokenStorage = this.storage.getStorage();\n validateToken(token);\n tokenStorage[key] = token;\n this.storage.setStorage(tokenStorage);\n }\n\n addPendingRemoveFlags() {\n const tokens = this.getTokensSync();\n Object.keys(tokens).forEach(key => {\n tokens[key].pendingRemove = true;\n });\n this.setTokens(tokens);\n }\n \n}\n"],"file":"TokenManager.js"}
1
+ {"version":3,"sources":["../../lib/TokenManager.ts"],"names":["DEFAULT_OPTIONS","autoRenew","autoRemove","syncStorage","clearPendingRemoveTokens","storage","undefined","expireEarlySeconds","storageKey","TOKEN_STORAGE_NAME","_storageEventDelay","EVENT_EXPIRED","EVENT_RENEWED","EVENT_ADDED","EVENT_REMOVED","EVENT_ERROR","defaultState","expireTimeouts","renewPromise","TokenManager","constructor","sdk","options","emitter","AuthSdkError","storageOptions","secure","storageProvider","storageType","storageManager","getTokenStorage","useSeparateCookies","clock","SdkClock","create","state","on","bind","off","start","setExpireEventTimeoutAll","stop","clearExpireEventTimeoutAll","getOptions","getExpireTime","token","expireTime","expiresAt","hasExpired","now","emitExpired","key","emit","emitRenewed","freshToken","oldToken","emitAdded","emitRemoved","emitError","error","emitEventsForCrossTabsStorageUpdate","newValue","oldValue","oldTokens","getTokensFromStorageValue","newTokens","forEach","newToken","clearExpireEventTimeout","clearTimeout","Object","prototype","hasOwnProperty","call","setExpireEventTimeout","expireEventWait","Math","max","expireEventTimeout","setTimeout","tokenStorage","getStorage","resetExpireEventTimeoutAll","add","setStorage","getSync","get","getTokensSync","tokens","accessToken","idToken","refreshToken","getTokens","getStorageKeyByType","type","getTokenType","setTokens","accessTokenCb","idTokenCb","refreshTokenCb","handleTokenCallback","handleAdded","handleRenewed","handleRemoved","types","existingTokens","existingToken","remove","removedToken","renewToken","renew","validateToken","e","reject","renewTokens","then","tokenType","catch","err","tokenKey","finally","clear","clearStorage","pendingRemove","value","JSON","parse","updateRefreshToken","REFRESH_TOKEN_STORAGE_KEY","addPendingRemoveFlags"],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n *\n */\nimport { removeNils, clone } from './util';\nimport { AuthSdkError } from './errors';\nimport { validateToken } from './oidc/util';\nimport { isLocalhost, isIE11OrLess } from './features';\nimport SdkClock from './clock';\nimport {\n EventEmitter,\n Token, \n Tokens, \n TokenType, \n TokenManagerOptions, \n isIDToken, \n isAccessToken,\n isRefreshToken,\n StorageOptions,\n StorageType,\n OktaAuthInterface,\n StorageProvider,\n TokenManagerErrorEventHandler,\n TokenManagerEventHandler,\n TokenManagerInterface,\n RefreshToken\n} from './types';\nimport { REFRESH_TOKEN_STORAGE_KEY, TOKEN_STORAGE_NAME } from './constants';\n\nconst DEFAULT_OPTIONS = {\n // TODO: remove in next major version - OKTA-473815\n autoRenew: true,\n autoRemove: true,\n syncStorage: true,\n // --- //\n clearPendingRemoveTokens: true,\n storage: undefined, // will use value from storageManager config\n expireEarlySeconds: 30,\n storageKey: TOKEN_STORAGE_NAME,\n _storageEventDelay: 0\n};\nexport const EVENT_EXPIRED = 'expired';\nexport const EVENT_RENEWED = 'renewed';\nexport const EVENT_ADDED = 'added';\nexport const EVENT_REMOVED = 'removed';\nexport const EVENT_ERROR = 'error';\n\ninterface TokenManagerState {\n expireTimeouts: Record<string, unknown>;\n renewPromise: Promise<Token | undefined> | null;\n}\nfunction defaultState(): TokenManagerState {\n return {\n expireTimeouts: {},\n renewPromise: null\n };\n}\nexport class TokenManager implements TokenManagerInterface {\n private sdk: OktaAuthInterface;\n private clock: SdkClock;\n private emitter: EventEmitter;\n private storage: StorageProvider;\n private state: TokenManagerState;\n private options: TokenManagerOptions;\n\n on: (event: string, handler: TokenManagerErrorEventHandler | TokenManagerEventHandler, context?: object) => void;\n off: (event: string, handler?: TokenManagerErrorEventHandler | TokenManagerEventHandler) => void;\n\n // eslint-disable-next-line complexity\n constructor(sdk: OktaAuthInterface, options: TokenManagerOptions = {}) {\n this.sdk = sdk;\n this.emitter = (sdk as any).emitter;\n if (!this.emitter) {\n throw new AuthSdkError('Emitter should be initialized before TokenManager');\n }\n \n options = Object.assign({}, DEFAULT_OPTIONS, removeNils(options));\n if (isIE11OrLess()) {\n options._storageEventDelay = options._storageEventDelay || 1000;\n }\n if (!isLocalhost()) {\n options.expireEarlySeconds = DEFAULT_OPTIONS.expireEarlySeconds;\n }\n\n this.options = options;\n\n const storageOptions: StorageOptions = removeNils({\n storageKey: options.storageKey,\n secure: options.secure,\n });\n if (typeof options.storage === 'object') {\n // A custom storage provider must implement getItem(key) and setItem(key, val)\n storageOptions.storageProvider = options.storage;\n } else if (options.storage) {\n storageOptions.storageType = options.storage as StorageType;\n }\n\n this.storage = sdk.storageManager.getTokenStorage({...storageOptions, useSeparateCookies: true});\n this.clock = SdkClock.create(/* sdk, options */);\n this.state = defaultState();\n\n this.on = this.emitter.on.bind(this.emitter);\n this.off = this.emitter.off.bind(this.emitter);\n }\n\n start() {\n if (this.options.clearPendingRemoveTokens) {\n this.clearPendingRemoveTokens();\n }\n this.setExpireEventTimeoutAll();\n }\n \n stop() {\n this.clearExpireEventTimeoutAll();\n }\n\n getOptions(): TokenManagerOptions {\n return clone(this.options);\n }\n \n getExpireTime(token) {\n const expireEarlySeconds = this.options.expireEarlySeconds || 0;\n var expireTime = token.expiresAt - expireEarlySeconds;\n return expireTime;\n }\n \n hasExpired(token) {\n var expireTime = this.getExpireTime(token);\n return expireTime <= this.clock.now();\n }\n \n emitExpired(key, token) {\n this.emitter.emit(EVENT_EXPIRED, key, token);\n }\n \n emitRenewed(key, freshToken, oldToken) {\n this.emitter.emit(EVENT_RENEWED, key, freshToken, oldToken);\n }\n \n emitAdded(key, token) {\n this.emitter.emit(EVENT_ADDED, key, token);\n }\n \n emitRemoved(key, token?) {\n this.emitter.emit(EVENT_REMOVED, key, token);\n }\n \n emitError(error) {\n this.emitter.emit(EVENT_ERROR, error);\n }\n \n emitEventsForCrossTabsStorageUpdate(newValue, oldValue) {\n const oldTokens = this.getTokensFromStorageValue(oldValue);\n const newTokens = this.getTokensFromStorageValue(newValue);\n Object.keys(newTokens).forEach(key => {\n const oldToken = oldTokens[key];\n const newToken = newTokens[key];\n if (JSON.stringify(oldToken) !== JSON.stringify(newToken)) {\n this.emitAdded(key, newToken);\n }\n });\n Object.keys(oldTokens).forEach(key => {\n const oldToken = oldTokens[key];\n const newToken = newTokens[key];\n if (!newToken) {\n this.emitRemoved(key, oldToken);\n }\n });\n }\n \n clearExpireEventTimeout(key) {\n clearTimeout(this.state.expireTimeouts[key] as any);\n delete this.state.expireTimeouts[key];\n \n // Remove the renew promise (if it exists)\n this.state.renewPromise = null;\n }\n \n clearExpireEventTimeoutAll() {\n var expireTimeouts = this.state.expireTimeouts;\n for (var key in expireTimeouts) {\n if (!Object.prototype.hasOwnProperty.call(expireTimeouts, key)) {\n continue;\n }\n this.clearExpireEventTimeout(key);\n }\n }\n \n setExpireEventTimeout(key, token) {\n if (isRefreshToken(token)) {\n return;\n }\n\n var expireTime = this.getExpireTime(token);\n var expireEventWait = Math.max(expireTime - this.clock.now(), 0) * 1000;\n \n // Clear any existing timeout\n this.clearExpireEventTimeout(key);\n \n var expireEventTimeout = setTimeout(() => {\n this.emitExpired(key, token);\n }, expireEventWait);\n \n // Add a new timeout\n this.state.expireTimeouts[key] = expireEventTimeout;\n }\n \n setExpireEventTimeoutAll() {\n var tokenStorage = this.storage.getStorage();\n for(var key in tokenStorage) {\n if (!Object.prototype.hasOwnProperty.call(tokenStorage, key)) {\n continue;\n }\n var token = tokenStorage[key];\n this.setExpireEventTimeout(key, token);\n }\n }\n \n // reset timeouts to setup autoRenew for tokens from other document context (tabs)\n resetExpireEventTimeoutAll() {\n this.clearExpireEventTimeoutAll();\n this.setExpireEventTimeoutAll();\n }\n \n add(key, token: Token) {\n var tokenStorage = this.storage.getStorage();\n validateToken(token);\n tokenStorage[key] = token;\n this.storage.setStorage(tokenStorage);\n this.emitAdded(key, token);\n this.setExpireEventTimeout(key, token);\n }\n \n getSync(key) {\n var tokenStorage = this.storage.getStorage();\n return tokenStorage[key];\n }\n \n async get(key) {\n return this.getSync(key);\n }\n \n getTokensSync(): Tokens {\n const tokens = {} as Tokens;\n const tokenStorage = this.storage.getStorage();\n Object.keys(tokenStorage).forEach(key => {\n const token = tokenStorage[key];\n if (isAccessToken(token)) {\n tokens.accessToken = token;\n } else if (isIDToken(token)) {\n tokens.idToken = token;\n } else if (isRefreshToken(token)) { \n tokens.refreshToken = token;\n }\n });\n return tokens;\n }\n \n async getTokens(): Promise<Tokens> {\n return this.getTokensSync();\n }\n\n getStorageKeyByType(type: TokenType): string {\n const tokenStorage = this.storage.getStorage();\n const key = Object.keys(tokenStorage).filter(key => {\n const token = tokenStorage[key];\n return (isAccessToken(token) && type === 'accessToken') \n || (isIDToken(token) && type === 'idToken')\n || (isRefreshToken(token) && type === 'refreshToken');\n })[0];\n return key;\n }\n\n private getTokenType(token: Token): TokenType {\n if (isAccessToken(token)) {\n return 'accessToken';\n }\n if (isIDToken(token)) {\n return 'idToken';\n }\n if(isRefreshToken(token)) {\n return 'refreshToken';\n }\n throw new AuthSdkError('Unknown token type');\n }\n\n setTokens(\n tokens: Tokens,\n // TODO: callbacks can be removed in the next major version OKTA-407224\n accessTokenCb?: Function, \n idTokenCb?: Function,\n refreshTokenCb?: Function\n ): void {\n const handleTokenCallback = (key, token) => {\n const type = this.getTokenType(token);\n if (type === 'accessToken') {\n accessTokenCb && accessTokenCb(key, token);\n } else if (type === 'idToken') {\n idTokenCb && idTokenCb(key, token);\n } else if (type === 'refreshToken') {\n refreshTokenCb && refreshTokenCb(key, token);\n }\n };\n const handleAdded = (key, token) => {\n this.emitAdded(key, token);\n this.setExpireEventTimeout(key, token);\n handleTokenCallback(key, token);\n };\n const handleRenewed = (key, token, oldToken) => {\n this.emitRenewed(key, token, oldToken);\n this.clearExpireEventTimeout(key);\n this.setExpireEventTimeout(key, token);\n handleTokenCallback(key, token);\n };\n const handleRemoved = (key, token) => {\n this.clearExpireEventTimeout(key);\n this.emitRemoved(key, token);\n handleTokenCallback(key, token);\n };\n \n const types: TokenType[] = ['idToken', 'accessToken', 'refreshToken'];\n const existingTokens = this.getTokensSync();\n\n // valid tokens\n types.forEach((type) => {\n const token = tokens[type];\n if (token) {\n validateToken(token, type);\n }\n });\n \n // add token to storage\n const storage = types.reduce((storage, type) => {\n const token = tokens[type];\n if (token) {\n const storageKey = this.getStorageKeyByType(type) || type;\n storage[storageKey] = token;\n }\n return storage;\n }, {});\n this.storage.setStorage(storage);\n \n // emit event and start expiration timer\n types.forEach(type => {\n const newToken = tokens[type];\n const existingToken = existingTokens[type];\n const storageKey = this.getStorageKeyByType(type) || type;\n if (newToken && existingToken) { // renew\n // call handleRemoved first, since it clears timers\n handleRemoved(storageKey, existingToken);\n handleAdded(storageKey, newToken);\n handleRenewed(storageKey, newToken, existingToken);\n } else if (newToken) { // add\n handleAdded(storageKey, newToken);\n } else if (existingToken) { //remove\n handleRemoved(storageKey, existingToken);\n }\n });\n }\n \n remove(key) {\n // Clear any listener for this token\n this.clearExpireEventTimeout(key);\n \n var tokenStorage = this.storage.getStorage();\n var removedToken = tokenStorage[key];\n delete tokenStorage[key];\n this.storage.setStorage(tokenStorage);\n \n this.emitRemoved(key, removedToken);\n }\n \n // TODO: this methods is redundant and can be removed in the next major version OKTA-407224\n async renewToken(token) {\n return this.sdk.token?.renew(token);\n }\n // TODO: this methods is redundant and can be removed in the next major version OKTA-407224\n validateToken(token: Token) {\n return validateToken(token);\n }\n\n // TODO: renew method should take no param, change in the next major version OKTA-407224\n renew(key): Promise<Token | undefined> {\n // Multiple callers may receive the same promise. They will all resolve or reject from the same request.\n if (this.state.renewPromise) {\n return this.state.renewPromise;\n }\n \n try {\n var token = this.getSync(key);\n if (!token) {\n throw new AuthSdkError('The tokenManager has no token for the key: ' + key);\n }\n } catch (e) {\n return Promise.reject(e);\n }\n \n // Remove existing autoRenew timeout\n this.clearExpireEventTimeout(key);\n \n // A refresh token means a replace instead of renewal\n // Store the renew promise state, to avoid renewing again\n this.state.renewPromise = this.sdk.token.renewTokens()\n .then(tokens => {\n this.setTokens(tokens);\n\n // resolve token based on the key\n const tokenType = this.getTokenType(token);\n return tokens[tokenType];\n })\n .catch(err => {\n // If renew fails, remove token from storage and emit error\n this.remove(key);\n err.tokenKey = key;\n this.emitError(err);\n throw err;\n })\n .finally(() => {\n // Remove existing promise key\n this.state.renewPromise = null;\n });\n \n return this.state.renewPromise;\n }\n \n clear() {\n this.clearExpireEventTimeoutAll();\n this.storage.clearStorage();\n }\n\n clearPendingRemoveTokens() {\n const tokens = this.getTokensSync();\n Object.keys(tokens).forEach(key => {\n if (tokens[key].pendingRemove) {\n this.remove(key);\n }\n });\n }\n \n getTokensFromStorageValue(value) {\n let tokens;\n try {\n tokens = JSON.parse(value) || {};\n } catch (e) {\n tokens = {};\n }\n return tokens;\n }\n\n updateRefreshToken(token: RefreshToken) {\n const key = this.getStorageKeyByType('refreshToken') || REFRESH_TOKEN_STORAGE_KEY;\n\n // do not emit any event\n var tokenStorage = this.storage.getStorage();\n validateToken(token);\n tokenStorage[key] = token;\n this.storage.setStorage(tokenStorage);\n }\n\n addPendingRemoveFlags() {\n const tokens = this.getTokensSync();\n Object.keys(tokens).forEach(key => {\n tokens[key].pendingRemove = true;\n });\n this.setTokens(tokens);\n }\n \n}\n"],"file":"TokenManager.js"}
@@ -12,6 +12,8 @@ var _indexOf = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-st
12
12
 
13
13
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/json/stringify"));
14
14
 
15
+ var _jsCookie = _interopRequireDefault(require("js-cookie"));
16
+
15
17
  var _AuthSdkError = _interopRequireDefault(require("../errors/AuthSdkError"));
16
18
 
17
19
  var _util = require("../util");
@@ -30,10 +32,7 @@ var _util = require("../util");
30
32
  * See the License for the specific language governing permissions and limitations under the License.
31
33
  *
32
34
  */
33
- // eslint-disable-next-line import/no-commonjs
34
- const Cookies = require('js-cookie'); // Building this as an object allows us to mock the functions in our tests
35
-
36
-
35
+ // Building this as an object allows us to mock the functions in our tests
37
36
  var storageUtil = {
38
37
  // These are shimmed in `OktaAuthBase.ts`
39
38
  getHttpCache() {
@@ -256,14 +255,20 @@ var storageUtil = {
256
255
  cookieOptions.expires = new Date(expiresAt);
257
256
  }
258
257
 
259
- Cookies.set(name, value, cookieOptions);
258
+ _jsCookie.default.set(name, value, cookieOptions);
259
+
260
260
  return storageUtil.storage.get(name);
261
261
  },
262
262
  get: function (name) {
263
- return Cookies.get(name);
263
+ // return all cookies when no args is provided
264
+ if (!arguments.length) {
265
+ return _jsCookie.default.get();
266
+ }
267
+
268
+ return _jsCookie.default.get(name);
264
269
  },
265
270
  delete: function (name) {
266
- return Cookies.remove(name, {
271
+ return _jsCookie.default.remove(name, {
267
272
  path: '/'
268
273
  });
269
274
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../lib/browser/browserStorage.ts"],"names":["Cookies","require","storageUtil","getHttpCache","getPKCEStorage","browserHasLocalStorage","storage","getLocalStorage","testStorage","e","browserHasSessionStorage","getSessionStorage","testStorageType","storageType","supported","getStorageByType","options","storageProvider","getCookieStorage","getInMemoryStorage","AuthSdkError","findStorageType","types","curType","nextType","shift","length","localStorage","sessionStorage","secure","sameSite","sessionCookie","getItem","get","setItem","key","value","expiresAt","set","removeItem","delete","useSeparateCookies","data","forEach","k","replace","JSON","parse","existingValues","storageKey","valueToStore","inMemoryStore","name","cookieOptions","path","Date","expires","remove"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n *\n */\n\nimport AuthSdkError from '../errors/AuthSdkError';\nimport {\n StorageProvider,\n StorageOptions,\n PKCEStorage,\n CookieOptions,\n SimpleStorage,\n StorageType,\n BrowserStorageUtil,\n CookieStorage\n} from '../types';\nimport { warn } from '../util';\n\n// eslint-disable-next-line import/no-commonjs\nconst Cookies = require('js-cookie');\n\n// Building this as an object allows us to mock the functions in our tests\nvar storageUtil: BrowserStorageUtil = {\n\n // These are shimmed in `OktaAuthBase.ts`\n getHttpCache(): StorageProvider {\n return null as never as StorageProvider;\n },\n\n getPKCEStorage(): PKCEStorage {\n return null as never as PKCEStorage;\n },\n\n // IE11 bug that Microsoft doesn't plan to fix\n // https://connect.microsoft.com/IE/Feedback/Details/1496040\n browserHasLocalStorage: function() {\n try {\n var storage = storageUtil.getLocalStorage();\n return storageUtil.testStorage(storage);\n } catch (e) {\n return false;\n }\n },\n\n browserHasSessionStorage: function() {\n try {\n var storage = storageUtil.getSessionStorage();\n return storageUtil.testStorage(storage);\n } catch (e) {\n return false;\n }\n },\n\n testStorageType: function(storageType: StorageType): boolean {\n var supported = false;\n switch (storageType) {\n case 'sessionStorage':\n supported = storageUtil.browserHasSessionStorage();\n break;\n case 'localStorage':\n supported = storageUtil.browserHasLocalStorage();\n break;\n case 'cookie':\n case 'memory':\n supported = true;\n break;\n default:\n supported = false;\n break;\n }\n return supported;\n },\n\n getStorageByType: function(storageType: StorageType, options?: StorageOptions): SimpleStorage {\n let storageProvider;\n switch (storageType) {\n case 'sessionStorage':\n storageProvider = storageUtil.getSessionStorage();\n break;\n case 'localStorage':\n storageProvider = storageUtil.getLocalStorage();\n break;\n case 'cookie':\n storageProvider = storageUtil.getCookieStorage(options);\n break;\n case 'memory':\n storageProvider = storageUtil.getInMemoryStorage();\n break;\n default:\n throw new AuthSdkError(`Unrecognized storage option: ${storageType}`);\n break;\n }\n return storageProvider;\n },\n\n findStorageType: function(types: StorageType[]) {\n let curType;\n let nextType;\n \n types = types.slice(); // copy array\n curType = types.shift();\n nextType = types.length ? types[0] : null;\n if (!nextType) {\n return curType;\n }\n\n if (storageUtil.testStorageType(curType)) {\n return curType;\n }\n\n // preferred type was unsupported.\n warn(`This browser doesn't support ${curType}. Switching to ${nextType}.`);\n\n // fallback to the next type. this is a recursive call\n return storageUtil.findStorageType(types);\n },\n\n getLocalStorage: function() {\n return localStorage;\n },\n\n getSessionStorage: function() {\n return sessionStorage;\n },\n\n // Provides webStorage-like interface for cookies\n getCookieStorage: function(options): CookieStorage {\n const secure = options!.secure;\n const sameSite = options!.sameSite;\n const sessionCookie = options!.sessionCookie;\n if (typeof secure === 'undefined' || typeof sameSite === 'undefined') {\n throw new AuthSdkError('getCookieStorage: \"secure\" and \"sameSite\" options must be provided');\n }\n const storage: CookieStorage = {\n getItem: storageUtil.storage.get,\n setItem: function(key, value, expiresAt = '2200-01-01T00:00:00.000Z') {\n // By defauilt, cookie shouldn't expire\n expiresAt = (sessionCookie ? null : expiresAt) as string;\n storageUtil.storage.set(key, value, expiresAt, {\n secure: secure, \n sameSite: sameSite,\n });\n },\n removeItem: function(key) {\n storageUtil.storage.delete(key);\n }\n };\n\n if (!options!.useSeparateCookies) {\n return storage;\n }\n\n // Tokens are stored separately because cookies have size limits.\n // Can only be used when storing an object value. Object properties will be saved to separate cookies.\n // Each property of the object must also be an object.\n return {\n getItem: function(key) {\n var data = storage.getItem(); // read all cookies\n var value = {};\n Object.keys(data).forEach(k => {\n if (k.indexOf(key!) === 0) { // filter out unrelated cookies\n value[k.replace(`${key}_`, '')] = JSON.parse(data[k]); // populate with cookie data\n }\n });\n return JSON.stringify(value);\n },\n setItem: function(key, value) {\n var existingValues = JSON.parse(this.getItem(key));\n value = JSON.parse(value);\n // Set key-value pairs from input to cookies\n Object.keys(value).forEach(k => {\n var storageKey = key + '_' + k;\n var valueToStore = JSON.stringify(value[k]);\n storage.setItem(storageKey, valueToStore);\n delete existingValues[k];\n });\n // Delete unmatched keys from existing cookies\n Object.keys(existingValues).forEach(k => {\n storage.removeItem(key + '_' + k);\n });\n },\n removeItem: function(key) {\n var existingValues = JSON.parse(this.getItem(key));\n Object.keys(existingValues).forEach(k => {\n storage.removeItem(key + '_' + k);\n });\n }\n };\n },\n\n // Provides an in-memory solution\n inMemoryStore: {},\n getInMemoryStorage: function() {\n return {\n getItem: (key) => {\n return this.inMemoryStore[key];\n },\n setItem: (key, value) => {\n this.inMemoryStore[key] = value;\n }\n };\n },\n\n testStorage: function(storage) {\n var key = 'okta-test-storage';\n try {\n storage.setItem(key, key);\n storage.removeItem(key);\n return true;\n } catch (e) {\n return false;\n }\n },\n\n storage: {\n set: function(name: string, value: string, expiresAt: string, options: CookieOptions): string {\n const { sameSite, secure } = options;\n if (typeof secure === 'undefined' || typeof sameSite === 'undefined') {\n throw new AuthSdkError('storage.set: \"secure\" and \"sameSite\" options must be provided');\n }\n var cookieOptions: CookieOptions = {\n path: options.path || '/',\n secure,\n sameSite\n };\n\n // eslint-disable-next-line no-extra-boolean-cast\n if (!!(Date.parse(expiresAt))) {\n // Expires value can be converted to a Date object.\n //\n // If the 'expiresAt' value is not provided, or the value cannot be\n // parsed as a Date object, the cookie will set as a session cookie.\n cookieOptions.expires = new Date(expiresAt);\n }\n\n Cookies.set(name, value, cookieOptions);\n return storageUtil.storage.get(name);\n },\n\n get: function(name: string): string {\n return Cookies.get(name);\n },\n\n delete: function(name: string): string {\n return Cookies.remove(name, { path: '/' });\n }\n }\n};\n\nexport default storageUtil;\n"],"file":"browserStorage.js"}
1
+ {"version":3,"sources":["../../../lib/browser/browserStorage.ts"],"names":["storageUtil","getHttpCache","getPKCEStorage","browserHasLocalStorage","storage","getLocalStorage","testStorage","e","browserHasSessionStorage","getSessionStorage","testStorageType","storageType","supported","getStorageByType","options","storageProvider","getCookieStorage","getInMemoryStorage","AuthSdkError","findStorageType","types","curType","nextType","shift","length","localStorage","sessionStorage","secure","sameSite","sessionCookie","getItem","get","setItem","key","value","expiresAt","set","removeItem","delete","useSeparateCookies","data","forEach","k","replace","JSON","parse","existingValues","storageKey","valueToStore","inMemoryStore","name","cookieOptions","path","Date","expires","Cookies","arguments","remove"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n *\n */\n\nimport Cookies from 'js-cookie';\nimport AuthSdkError from '../errors/AuthSdkError';\nimport {\n StorageProvider,\n StorageOptions,\n PKCEStorage,\n CookieOptions,\n SimpleStorage,\n StorageType,\n BrowserStorageUtil,\n CookieStorage\n} from '../types';\nimport { warn } from '../util';\n\n// Building this as an object allows us to mock the functions in our tests\nvar storageUtil: BrowserStorageUtil = {\n\n // These are shimmed in `OktaAuthBase.ts`\n getHttpCache(): StorageProvider {\n return null as never as StorageProvider;\n },\n\n getPKCEStorage(): PKCEStorage {\n return null as never as PKCEStorage;\n },\n\n // IE11 bug that Microsoft doesn't plan to fix\n // https://connect.microsoft.com/IE/Feedback/Details/1496040\n browserHasLocalStorage: function() {\n try {\n var storage = storageUtil.getLocalStorage();\n return storageUtil.testStorage(storage);\n } catch (e) {\n return false;\n }\n },\n\n browserHasSessionStorage: function() {\n try {\n var storage = storageUtil.getSessionStorage();\n return storageUtil.testStorage(storage);\n } catch (e) {\n return false;\n }\n },\n\n testStorageType: function(storageType: StorageType): boolean {\n var supported = false;\n switch (storageType) {\n case 'sessionStorage':\n supported = storageUtil.browserHasSessionStorage();\n break;\n case 'localStorage':\n supported = storageUtil.browserHasLocalStorage();\n break;\n case 'cookie':\n case 'memory':\n supported = true;\n break;\n default:\n supported = false;\n break;\n }\n return supported;\n },\n\n getStorageByType: function(storageType: StorageType, options?: StorageOptions): SimpleStorage {\n let storageProvider;\n switch (storageType) {\n case 'sessionStorage':\n storageProvider = storageUtil.getSessionStorage();\n break;\n case 'localStorage':\n storageProvider = storageUtil.getLocalStorage();\n break;\n case 'cookie':\n storageProvider = storageUtil.getCookieStorage(options);\n break;\n case 'memory':\n storageProvider = storageUtil.getInMemoryStorage();\n break;\n default:\n throw new AuthSdkError(`Unrecognized storage option: ${storageType}`);\n break;\n }\n return storageProvider;\n },\n\n findStorageType: function(types: StorageType[]) {\n let curType;\n let nextType;\n \n types = types.slice(); // copy array\n curType = types.shift();\n nextType = types.length ? types[0] : null;\n if (!nextType) {\n return curType;\n }\n\n if (storageUtil.testStorageType(curType)) {\n return curType;\n }\n\n // preferred type was unsupported.\n warn(`This browser doesn't support ${curType}. Switching to ${nextType}.`);\n\n // fallback to the next type. this is a recursive call\n return storageUtil.findStorageType(types);\n },\n\n getLocalStorage: function() {\n return localStorage;\n },\n\n getSessionStorage: function() {\n return sessionStorage;\n },\n\n // Provides webStorage-like interface for cookies\n getCookieStorage: function(options): CookieStorage {\n const secure = options!.secure;\n const sameSite = options!.sameSite;\n const sessionCookie = options!.sessionCookie;\n if (typeof secure === 'undefined' || typeof sameSite === 'undefined') {\n throw new AuthSdkError('getCookieStorage: \"secure\" and \"sameSite\" options must be provided');\n }\n const storage: CookieStorage = {\n getItem: storageUtil.storage.get,\n setItem: function(key, value, expiresAt = '2200-01-01T00:00:00.000Z') {\n // By defauilt, cookie shouldn't expire\n expiresAt = (sessionCookie ? null : expiresAt) as string;\n storageUtil.storage.set(key, value, expiresAt, {\n secure: secure, \n sameSite: sameSite,\n });\n },\n removeItem: function(key) {\n storageUtil.storage.delete(key);\n }\n };\n\n if (!options!.useSeparateCookies) {\n return storage;\n }\n\n // Tokens are stored separately because cookies have size limits.\n // Can only be used when storing an object value. Object properties will be saved to separate cookies.\n // Each property of the object must also be an object.\n return {\n getItem: function(key) {\n var data = storage.getItem(); // read all cookies\n var value = {};\n Object.keys(data).forEach(k => {\n if (k.indexOf(key!) === 0) { // filter out unrelated cookies\n value[k.replace(`${key}_`, '')] = JSON.parse(data[k]); // populate with cookie data\n }\n });\n return JSON.stringify(value);\n },\n setItem: function(key, value) {\n var existingValues = JSON.parse(this.getItem(key));\n value = JSON.parse(value);\n // Set key-value pairs from input to cookies\n Object.keys(value).forEach(k => {\n var storageKey = key + '_' + k;\n var valueToStore = JSON.stringify(value[k]);\n storage.setItem(storageKey, valueToStore);\n delete existingValues[k];\n });\n // Delete unmatched keys from existing cookies\n Object.keys(existingValues).forEach(k => {\n storage.removeItem(key + '_' + k);\n });\n },\n removeItem: function(key) {\n var existingValues = JSON.parse(this.getItem(key));\n Object.keys(existingValues).forEach(k => {\n storage.removeItem(key + '_' + k);\n });\n }\n };\n },\n\n // Provides an in-memory solution\n inMemoryStore: {},\n getInMemoryStorage: function() {\n return {\n getItem: (key) => {\n return this.inMemoryStore[key];\n },\n setItem: (key, value) => {\n this.inMemoryStore[key] = value;\n }\n };\n },\n\n testStorage: function(storage) {\n var key = 'okta-test-storage';\n try {\n storage.setItem(key, key);\n storage.removeItem(key);\n return true;\n } catch (e) {\n return false;\n }\n },\n\n storage: {\n set: function(name: string, value: string, expiresAt: string, options: CookieOptions): string {\n const { sameSite, secure } = options;\n if (typeof secure === 'undefined' || typeof sameSite === 'undefined') {\n throw new AuthSdkError('storage.set: \"secure\" and \"sameSite\" options must be provided');\n }\n var cookieOptions: CookieOptions = {\n path: options.path || '/',\n secure,\n sameSite\n };\n\n // eslint-disable-next-line no-extra-boolean-cast\n if (!!(Date.parse(expiresAt))) {\n // Expires value can be converted to a Date object.\n //\n // If the 'expiresAt' value is not provided, or the value cannot be\n // parsed as a Date object, the cookie will set as a session cookie.\n cookieOptions.expires = new Date(expiresAt);\n }\n\n Cookies.set(name, value, cookieOptions);\n return storageUtil.storage.get(name);\n },\n\n get: function(name?: string): string {\n // return all cookies when no args is provided\n if (!arguments.length) {\n return Cookies.get();\n }\n return Cookies.get(name);\n },\n\n delete: function(name: string): string {\n return Cookies.remove(name, { path: '/' });\n }\n }\n};\n\nexport default storageUtil;\n"],"file":"browserStorage.js"}
@@ -1,7 +1,15 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+
3
5
  exports.webcrypto = exports.btoa = exports.atob = void 0;
4
6
 
7
+ var _atob = _interopRequireDefault(require("atob"));
8
+
9
+ var _btoa = _interopRequireDefault(require("btoa"));
10
+
11
+ var _webcrypto = require("@peculiar/webcrypto");
12
+
5
13
  /*!
6
14
  * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.
7
15
  * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
@@ -23,7 +31,7 @@ exports.atob = a;
23
31
  if (typeof atob !== 'undefined') {
24
32
  exports.atob = a = atob;
25
33
  } else {
26
- exports.atob = a = require('atob');
34
+ exports.atob = a = _atob.default;
27
35
  }
28
36
 
29
37
  let b;
@@ -32,15 +40,17 @@ exports.btoa = b;
32
40
  if (typeof btoa !== 'undefined') {
33
41
  exports.btoa = b = btoa;
34
42
  } else {
35
- exports.btoa = b = require('btoa');
43
+ exports.btoa = b = _btoa.default;
36
44
  }
37
45
 
38
- let crypto;
39
-
40
- try {
41
- crypto = require('crypto');
42
- } catch (err) {// this environment has no crypto module!
43
- }
46
+ const crypto = (async () => {
47
+ try {
48
+ return await import('crypto');
49
+ } catch (err) {
50
+ // this environment has no crypto module!
51
+ return undefined;
52
+ }
53
+ })();
44
54
 
45
55
  let webcrypto;
46
56
  exports.webcrypto = webcrypto;
@@ -48,10 +58,6 @@ exports.webcrypto = webcrypto;
48
58
  if (typeof crypto !== 'undefined' && crypto['webcrypto']) {
49
59
  exports.webcrypto = webcrypto = crypto['webcrypto'];
50
60
  } else {
51
- const {
52
- Crypto
53
- } = require('@peculiar/webcrypto');
54
-
55
- exports.webcrypto = webcrypto = new Crypto();
61
+ exports.webcrypto = webcrypto = new _webcrypto.Crypto();
56
62
  }
57
63
  //# sourceMappingURL=node.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../lib/crypto/node.ts"],"names":["a","atob","require","b","btoa","crypto","err","webcrypto","Crypto"],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AAEA;AACA;AAEA,IAAIA,CAAJ;;;AACA,IAAI,OAAOC,IAAP,KAAgB,WAApB,EAAiC;AAC/B,iBAAAD,CAAC,GAAGC,IAAJ;AACD,CAFD,MAEO;AACL,iBAAAD,CAAC,GAAGE,OAAO,CAAC,MAAD,CAAX;AACD;;AAID,IAAIC,CAAJ;;;AACA,IAAI,OAAOC,IAAP,KAAgB,WAApB,EAAiC;AAC/B,iBAAAD,CAAC,GAAGC,IAAJ;AACD,CAFD,MAEO;AACL,iBAAAD,CAAC,GAAGD,OAAO,CAAC,MAAD,CAAX;AACD;;AAGD,IAAIG,MAAJ;;AACA,IAAI;AACFA,EAAAA,MAAM,GAAGH,OAAO,CAAC,QAAD,CAAhB;AACD,CAFD,CAEE,OAAOI,GAAP,EAAY,CACZ;AACD;;AAED,IAAIC,SAAJ;;;AACA,IAAI,OAAOF,MAAP,KAAkB,WAAlB,IAAiCA,MAAM,CAAC,WAAD,CAA3C,EAA0D;AACxD,sBAAAE,SAAS,GAAGF,MAAM,CAAC,WAAD,CAAlB;AACD,CAFD,MAEO;AACL,QAAM;AAAEG,IAAAA;AAAF,MAAaN,OAAO,CAAC,qBAAD,CAA1B;;AACA,sBAAAK,SAAS,GAAG,IAAIC,MAAJ,EAAZ;AACD","sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\n/* global atob, btoa */\n\n// Ponyfill for NodeJS\n// Webpack config excludes this file\n\nlet a;\nif (typeof atob !== 'undefined') {\n a = atob;\n} else {\n a = require('atob');\n}\nexport { a as atob };\n\n\nlet b;\nif (typeof btoa !== 'undefined') {\n b = btoa;\n} else {\n b = require('btoa');\n}\nexport { b as btoa };\n\nlet crypto;\ntry {\n crypto = require('crypto');\n} catch (err) {\n // this environment has no crypto module!\n}\n\nlet webcrypto;\nif (typeof crypto !== 'undefined' && crypto['webcrypto']) {\n webcrypto = crypto['webcrypto'];\n} else {\n const { Crypto } = require('@peculiar/webcrypto');\n webcrypto = new Crypto();\n}\n\nexport { webcrypto };\n"],"file":"node.js"}
1
+ {"version":3,"sources":["../../../lib/crypto/node.ts"],"names":["a","atob","atobModule","b","btoa","btoaModule","crypto","err","undefined","webcrypto","Crypto"],"mappings":";;;;;;AAkBA;;AACA;;AACA;;AApBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AAEA;AACA;AAMA,IAAIA,CAAJ;;;AACA,IAAI,OAAOC,IAAP,KAAgB,WAApB,EAAiC;AAC/B,iBAAAD,CAAC,GAAGC,IAAJ;AACD,CAFD,MAEO;AACL,iBAAAD,CAAC,GAAGE,aAAJ;AACD;;AAID,IAAIC,CAAJ;;;AACA,IAAI,OAAOC,IAAP,KAAgB,WAApB,EAAiC;AAC/B,iBAAAD,CAAC,GAAGC,IAAJ;AACD,CAFD,MAEO;AACL,iBAAAD,CAAC,GAAGE,aAAJ;AACD;;AAGD,MAAMC,MAAM,GAAG,CAAC,YAAY;AAC1B,MAAI;AACF,WAAO,MAAM,OAAO,QAAP,CAAb;AACD,GAFD,CAEE,OAAOC,GAAP,EAAY;AACZ;AACA,WAAOC,SAAP;AACD;AACF,CAPc,GAAf;;AASA,IAAIC,SAAJ;;;AACA,IAAI,OAAOH,MAAP,KAAkB,WAAlB,IAAiCA,MAAM,CAAC,WAAD,CAA3C,EAA0D;AACxD,sBAAAG,SAAS,GAAGH,MAAM,CAAC,WAAD,CAAlB;AACD,CAFD,MAEO;AACL,sBAAAG,SAAS,GAAG,IAAIC,iBAAJ,EAAZ;AACD","sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\n/* global atob, btoa */\n\n// Ponyfill for NodeJS\n// Webpack config excludes this file\n\nimport atobModule from 'atob';\nimport btoaModule from 'btoa';\nimport { Crypto } from '@peculiar/webcrypto';\n\nlet a;\nif (typeof atob !== 'undefined') {\n a = atob;\n} else {\n a = atobModule;\n}\nexport { a as atob };\n\n\nlet b;\nif (typeof btoa !== 'undefined') {\n b = btoa;\n} else {\n b = btoaModule;\n}\nexport { b as btoa };\n\nconst crypto = (async () => {\n try {\n return await import('crypto');\n } catch (err) {\n // this environment has no crypto module!\n return undefined;\n }\n})();\n\nlet webcrypto;\nif (typeof crypto !== 'undefined' && crypto['webcrypto']) {\n webcrypto = crypto['webcrypto'];\n} else {\n webcrypto = new Crypto();\n}\n\nexport { webcrypto };\n"],"file":"node.js"}