@okta/okta-auth-js 6.1.0 → 6.3.1

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 (170) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +53 -23
  3. package/cjs/AuthStateManager.js +14 -7
  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/PromiseQueue.js +9 -2
  9. package/cjs/PromiseQueue.js.map +1 -1
  10. package/cjs/ServiceManager.js +195 -0
  11. package/cjs/ServiceManager.js.map +1 -0
  12. package/cjs/TokenManager.js +6 -14
  13. package/cjs/TokenManager.js.map +1 -1
  14. package/cjs/TransactionManager.js +11 -5
  15. package/cjs/TransactionManager.js.map +1 -1
  16. package/cjs/browser/browserStorage.js +31 -25
  17. package/cjs/browser/browserStorage.js.map +1 -1
  18. package/cjs/crypto/node.js +19 -13
  19. package/cjs/crypto/node.js.map +1 -1
  20. package/cjs/idx/authenticator/Authenticator.js.map +1 -1
  21. package/cjs/idx/authenticator/OktaPassword.js +12 -3
  22. package/cjs/idx/authenticator/OktaPassword.js.map +1 -1
  23. package/cjs/idx/authenticator/OktaVerifyTotp.js +9 -1
  24. package/cjs/idx/authenticator/OktaVerifyTotp.js.map +1 -1
  25. package/cjs/idx/authenticator/SecurityQuestionEnrollment.js +14 -1
  26. package/cjs/idx/authenticator/SecurityQuestionEnrollment.js.map +1 -1
  27. package/cjs/idx/authenticator/SecurityQuestionVerification.js +9 -1
  28. package/cjs/idx/authenticator/SecurityQuestionVerification.js.map +1 -1
  29. package/cjs/idx/authenticator/VerificationCodeAuthenticator.js +13 -3
  30. package/cjs/idx/authenticator/VerificationCodeAuthenticator.js.map +1 -1
  31. package/cjs/idx/authenticator/WebauthnEnrollment.js +5 -0
  32. package/cjs/idx/authenticator/WebauthnEnrollment.js.map +1 -1
  33. package/cjs/idx/authenticator/WebauthnVerification.js +5 -0
  34. package/cjs/idx/authenticator/WebauthnVerification.js.map +1 -1
  35. package/cjs/idx/authenticator/util.js +64 -0
  36. package/cjs/idx/authenticator/util.js.map +1 -0
  37. package/cjs/idx/idx-js/index.js +0 -122
  38. package/cjs/idx/idx-js/index.js.map +1 -1
  39. package/cjs/idx/idx-js/introspect.js +10 -6
  40. package/cjs/idx/idx-js/introspect.js.map +1 -1
  41. package/cjs/idx/idx-js/v1/generateIdxAction.js +17 -23
  42. package/cjs/idx/idx-js/v1/generateIdxAction.js.map +1 -1
  43. package/cjs/idx/idx-js/v1/makeIdxState.js +5 -4
  44. package/cjs/idx/idx-js/v1/makeIdxState.js.map +1 -1
  45. package/cjs/idx/introspect.js +13 -3
  46. package/cjs/idx/introspect.js.map +1 -1
  47. package/cjs/idx/proceed.js +14 -11
  48. package/cjs/idx/proceed.js.map +1 -1
  49. package/cjs/idx/remediate.js +68 -77
  50. package/cjs/idx/remediate.js.map +1 -1
  51. package/cjs/idx/remediators/AuthenticatorEnrollmentData.js +6 -2
  52. package/cjs/idx/remediators/AuthenticatorEnrollmentData.js.map +1 -1
  53. package/cjs/idx/remediators/AuthenticatorVerificationData.js +56 -15
  54. package/cjs/idx/remediators/AuthenticatorVerificationData.js.map +1 -1
  55. package/cjs/idx/remediators/Base/AuthenticatorData.js +22 -14
  56. package/cjs/idx/remediators/Base/AuthenticatorData.js.map +1 -1
  57. package/cjs/idx/remediators/Base/Remediator.js +85 -85
  58. package/cjs/idx/remediators/Base/Remediator.js.map +1 -1
  59. package/cjs/idx/remediators/Base/SelectAuthenticator.js +24 -15
  60. package/cjs/idx/remediators/Base/SelectAuthenticator.js.map +1 -1
  61. package/cjs/idx/remediators/Base/VerifyAuthenticator.js +15 -4
  62. package/cjs/idx/remediators/Base/VerifyAuthenticator.js.map +1 -1
  63. package/cjs/idx/remediators/ChallengePoll.js +8 -1
  64. package/cjs/idx/remediators/ChallengePoll.js.map +1 -1
  65. package/cjs/idx/remediators/EnrollPoll.js +1 -1
  66. package/cjs/idx/remediators/EnrollPoll.js.map +1 -1
  67. package/cjs/idx/remediators/EnrollProfile.js +15 -9
  68. package/cjs/idx/remediators/EnrollProfile.js.map +1 -1
  69. package/cjs/idx/remediators/EnrollmentChannelData.js +0 -8
  70. package/cjs/idx/remediators/EnrollmentChannelData.js.map +1 -1
  71. package/cjs/idx/remediators/Identify.js +12 -5
  72. package/cjs/idx/remediators/Identify.js.map +1 -1
  73. package/cjs/idx/remediators/ReEnrollAuthenticator.js +9 -8
  74. package/cjs/idx/remediators/ReEnrollAuthenticator.js.map +1 -1
  75. package/cjs/idx/remediators/SelectAuthenticatorAuthenticate.js +4 -3
  76. package/cjs/idx/remediators/SelectAuthenticatorAuthenticate.js.map +1 -1
  77. package/cjs/idx/remediators/SelectAuthenticatorUnlockAccount.js +0 -1
  78. package/cjs/idx/remediators/SelectAuthenticatorUnlockAccount.js.map +1 -1
  79. package/cjs/idx/remediators/Skip.js +1 -8
  80. package/cjs/idx/remediators/Skip.js.map +1 -1
  81. package/cjs/idx/remediators/util.js.map +1 -1
  82. package/cjs/idx/run.js +270 -195
  83. package/cjs/idx/run.js.map +1 -1
  84. package/cjs/idx/types/idx-js.js.map +1 -1
  85. package/cjs/idx/types/index.js +37 -0
  86. package/cjs/idx/types/index.js.map +1 -1
  87. package/cjs/idx/util.js +198 -0
  88. package/cjs/idx/util.js.map +1 -0
  89. package/cjs/options/browser.js +86 -0
  90. package/cjs/options/browser.js.map +1 -0
  91. package/cjs/options/index.js +94 -0
  92. package/cjs/options/index.js.map +1 -0
  93. package/cjs/options/node.js +45 -0
  94. package/cjs/options/node.js.map +1 -0
  95. package/cjs/options.js +11 -1
  96. package/cjs/options.js.map +1 -1
  97. package/cjs/server/serverStorage.js +7 -4
  98. package/cjs/server/serverStorage.js.map +1 -1
  99. package/cjs/services/AutoRenewService.js +94 -0
  100. package/cjs/services/AutoRenewService.js.map +1 -0
  101. package/cjs/services/SyncStorageService.js +93 -0
  102. package/cjs/services/SyncStorageService.js.map +1 -0
  103. package/cjs/services/index.js +30 -0
  104. package/cjs/services/index.js.map +1 -0
  105. package/cjs/types/Service.js +2 -0
  106. package/cjs/types/Service.js.map +1 -0
  107. package/cjs/types/index.js +13 -0
  108. package/cjs/types/index.js.map +1 -1
  109. package/dist/okta-auth-js.min.js +1 -1
  110. package/dist/okta-auth-js.min.js.LICENSE.txt +0 -8
  111. package/dist/okta-auth-js.min.js.map +1 -1
  112. package/dist/okta-auth-js.umd.js +1 -1
  113. package/dist/okta-auth-js.umd.js.LICENSE.txt +1 -7
  114. package/dist/okta-auth-js.umd.js.map +1 -1
  115. package/esm/{index.js → esm.browser.js} +2144 -2975
  116. package/esm/esm.browser.js.map +1 -0
  117. package/esm/esm.node.mjs +9595 -0
  118. package/esm/esm.node.mjs.map +1 -0
  119. package/lib/AuthStateManager.d.ts +3 -3
  120. package/lib/OktaAuth.d.ts +5 -4
  121. package/lib/PromiseQueue.d.ts +6 -2
  122. package/lib/ServiceManager.d.ts +38 -0
  123. package/lib/TokenManager.d.ts +0 -1
  124. package/lib/TransactionManager.d.ts +3 -4
  125. package/lib/idx/authenticator/Authenticator.d.ts +1 -1
  126. package/lib/idx/authenticator/OktaPassword.d.ts +2 -1
  127. package/lib/idx/authenticator/OktaVerifyTotp.d.ts +1 -1
  128. package/lib/idx/authenticator/SecurityQuestionEnrollment.d.ts +3 -5
  129. package/lib/idx/authenticator/SecurityQuestionVerification.d.ts +1 -1
  130. package/lib/idx/authenticator/VerificationCodeAuthenticator.d.ts +2 -1
  131. package/lib/idx/authenticator/WebauthnEnrollment.d.ts +1 -1
  132. package/lib/idx/authenticator/WebauthnVerification.d.ts +1 -1
  133. package/lib/idx/authenticator/util.d.ts +4 -0
  134. package/lib/idx/idx-js/index.d.ts +1 -17
  135. package/lib/idx/idx-js/introspect.d.ts +2 -1
  136. package/lib/idx/idx-js/v1/generateIdxAction.d.ts +1 -1
  137. package/lib/idx/idx-js/v1/makeIdxState.d.ts +2 -2
  138. package/lib/idx/proceed.d.ts +1 -3
  139. package/lib/idx/remediate.d.ts +2 -2
  140. package/lib/idx/remediators/AuthenticatorVerificationData.d.ts +6 -5
  141. package/lib/idx/remediators/Base/AuthenticatorData.d.ts +5 -9
  142. package/lib/idx/remediators/Base/Remediator.d.ts +5 -4
  143. package/lib/idx/remediators/Base/SelectAuthenticator.d.ts +7 -9
  144. package/lib/idx/remediators/Base/VerifyAuthenticator.d.ts +2 -4
  145. package/lib/idx/remediators/ChallengePoll.d.ts +1 -0
  146. package/lib/idx/remediators/EnrollProfile.d.ts +0 -3
  147. package/lib/idx/remediators/EnrollmentChannelData.d.ts +0 -4
  148. package/lib/idx/remediators/Identify.d.ts +3 -5
  149. package/lib/idx/remediators/ReEnrollAuthenticator.d.ts +2 -5
  150. package/lib/idx/remediators/SelectAuthenticatorAuthenticate.d.ts +2 -1
  151. package/lib/idx/remediators/SelectAuthenticatorUnlockAccount.d.ts +1 -2
  152. package/lib/idx/remediators/Skip.d.ts +0 -3
  153. package/lib/idx/types/idx-js.d.ts +5 -1
  154. package/lib/idx/types/index.d.ts +7 -3
  155. package/lib/idx/util.d.ts +11 -0
  156. package/lib/options/browser.d.ts +16 -0
  157. package/lib/options/index.d.ts +14 -0
  158. package/lib/options/node.d.ts +16 -0
  159. package/lib/services/AutoRenewService.d.ts +27 -0
  160. package/lib/services/{TokenService.d.ts → SyncStorageService.d.ts} +8 -5
  161. package/lib/services/index.d.ts +13 -0
  162. package/lib/types/OktaAuthOptions.d.ts +5 -0
  163. package/lib/types/Service.d.ts +23 -0
  164. package/lib/types/Storage.d.ts +7 -5
  165. package/lib/types/api.d.ts +6 -5
  166. package/lib/types/index.d.ts +1 -0
  167. package/package.json +26 -11
  168. package/cjs/services/TokenService.js +0 -111
  169. package/cjs/services/TokenService.js.map +0 -1
  170. package/esm/index.js.map +0 -1
package/cjs/idx/run.js CHANGED
@@ -1,17 +1,7 @@
1
1
  "use strict";
2
2
 
3
- var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
4
-
5
- var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
6
-
7
- var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
8
-
9
3
  exports.run = run;
10
4
 
11
- var _reduce = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/reduce"));
12
-
13
- var _values = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/values"));
14
-
15
5
  var _interact = require("./interact");
16
6
 
17
7
  var _introspect = require("./introspect");
@@ -20,17 +10,15 @@ var _remediate = require("./remediate");
20
10
 
21
11
  var _flow = require("./flow");
22
12
 
23
- var remediators = _interopRequireWildcard(require("./remediators"));
24
-
25
13
  var _types = require("../types");
26
14
 
27
15
  var _idxJs = require("./types/idx-js");
28
16
 
29
17
  var _transactionMeta = require("./transactionMeta");
30
18
 
31
- function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
+ var _util = require("./util");
32
20
 
33
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
+ /* eslint-disable @typescript-eslint/no-non-null-assertion */
34
22
 
35
23
  /*!
36
24
  * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.
@@ -45,115 +33,83 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
45
33
  */
46
34
 
47
35
  /* eslint-disable max-statements, complexity, max-depth */
48
- function getEnabledFeatures(idxResponse) {
49
- const res = [];
50
- const {
51
- actions,
52
- neededToProceed
53
- } = idxResponse;
54
-
55
- if (actions['currentAuthenticator-recover']) {
56
- res.push(_types.IdxFeature.PASSWORD_RECOVERY);
57
- }
58
-
59
- if (neededToProceed.some(({
60
- name
61
- }) => name === 'select-enroll-profile')) {
62
- res.push(_types.IdxFeature.REGISTRATION);
63
- }
64
-
65
- if (neededToProceed.some(({
66
- name
67
- }) => name === 'redirect-idp')) {
68
- res.push(_types.IdxFeature.SOCIAL_IDP);
69
- }
70
-
71
- if (neededToProceed.some(({
72
- name
73
- }) => name === 'unlock-account')) {
74
- res.push(_types.IdxFeature.ACCOUNT_UNLOCK);
75
- }
76
-
77
- return res;
36
+ function initializeValues(options) {
37
+ // remove known options, everything else is assumed to be a value
38
+ const knownOptions = ['flow', 'remediators', 'actions', 'withCredentials', 'step'];
39
+ const values = { ...options
40
+ };
41
+ knownOptions.forEach(option => {
42
+ delete values[option];
43
+ });
44
+ return values;
78
45
  }
79
46
 
80
- function getAvailableSteps(idxResponse) {
81
- var _context;
82
-
83
- const res = [];
84
- const remediatorMap = (0, _reduce.default)(_context = (0, _values.default)(remediators)).call(_context, (map, remediatorClass) => {
85
- // Only add concrete subclasses to the map
86
- if (remediatorClass.remediationName) {
87
- map[remediatorClass.remediationName] = remediatorClass;
88
- }
89
-
90
- return map;
91
- }, {});
92
-
93
- for (let remediation of idxResponse.neededToProceed) {
94
- const T = remediatorMap[remediation.name];
95
-
96
- if (T) {
97
- const remediator = new T(remediation);
98
- res.push(remediator.getNextStep(idxResponse.context));
99
- }
47
+ function initializeData(authClient, data) {
48
+ const {
49
+ options
50
+ } = data;
51
+ let {
52
+ flow,
53
+ withCredentials,
54
+ remediators,
55
+ actions
56
+ } = options;
57
+ const status = _types.IdxStatus.PENDING; // certain options can be set by the flow specification
58
+
59
+ flow = flow || authClient.idx.getFlow() || 'default';
60
+
61
+ if (flow) {
62
+ authClient.idx.setFlow(flow);
63
+ const flowSpec = (0, _flow.getFlowSpecification)(authClient, flow); // Favor option values over flow spec
64
+
65
+ withCredentials = typeof withCredentials !== 'undefined' ? withCredentials : flowSpec.withCredentials;
66
+ remediators = remediators || flowSpec.remediators;
67
+ actions = actions || flowSpec.actions;
100
68
  }
101
69
 
102
- return res;
70
+ return { ...data,
71
+ options: { ...options,
72
+ flow,
73
+ withCredentials,
74
+ remediators,
75
+ actions
76
+ },
77
+ status
78
+ };
103
79
  }
104
80
 
105
- async function run(authClient, options = {}) {
106
- let tokens;
107
- let nextStep;
108
- let messages;
109
- let error;
110
- let meta;
111
- let enabledFeatures;
112
- let availableSteps;
113
- let status = _types.IdxStatus.PENDING;
114
- let shouldClearTransaction = false;
115
- let clearSharedStorage = true;
81
+ async function getDataFromIntrospect(authClient, data) {
82
+ const {
83
+ options
84
+ } = data;
85
+ const {
86
+ stateHandle,
87
+ withCredentials,
88
+ version,
89
+ state,
90
+ scopes,
91
+ recoveryToken,
92
+ activationToken
93
+ } = options;
116
94
  let idxResponse;
117
- let interactionHandle;
118
- let metaFromResp;
119
- let interactionCode;
120
-
121
- try {
122
- var _metaFromResp;
95
+ let meta;
123
96
 
124
- let {
125
- flow,
126
- state,
127
- scopes,
128
- version,
129
- remediators,
130
- actions,
97
+ if (stateHandle) {
98
+ idxResponse = await (0, _introspect.introspect)(authClient, {
131
99
  withCredentials,
132
- exchangeCodeForTokens,
133
- autoRemediate,
134
- step,
135
- recoveryToken,
136
- activationToken
137
- } = options; // Only one flow can be operating at a time
138
-
139
- flow = flow || authClient.idx.getFlow() || 'default';
140
-
141
- if (flow) {
142
- authClient.idx.setFlow(flow);
143
- const flowSpec = (0, _flow.getFlowSpecification)(authClient, flow); // Favor option values over flow spec
144
-
145
- withCredentials = typeof withCredentials !== 'undefined' ? withCredentials : flowSpec.withCredentials;
146
- remediators = remediators || flowSpec.remediators;
147
- actions = actions || flowSpec.actions;
148
- } // Try to resume saved transaction
149
-
100
+ version,
101
+ stateHandle
102
+ });
103
+ } else {
104
+ var _meta;
150
105
 
151
- metaFromResp = (0, _transactionMeta.getSavedTransactionMeta)(authClient, {
106
+ // Try to resume saved transaction
107
+ meta = (0, _transactionMeta.getSavedTransactionMeta)(authClient, {
152
108
  state,
153
109
  recoveryToken,
154
110
  activationToken
155
111
  });
156
- interactionHandle = (_metaFromResp = metaFromResp) === null || _metaFromResp === void 0 ? void 0 : _metaFromResp.interactionHandle; // may be undefined
112
+ let interactionHandle = (_meta = meta) === null || _meta === void 0 ? void 0 : _meta.interactionHandle; // may be undefined
157
113
 
158
114
  if (!interactionHandle) {
159
115
  // start a new transaction
@@ -166,8 +122,7 @@ async function run(authClient, options = {}) {
166
122
  recoveryToken
167
123
  });
168
124
  interactionHandle = interactResponse.interactionHandle;
169
- metaFromResp = interactResponse.meta;
170
- withCredentials = metaFromResp.withCredentials;
125
+ meta = interactResponse.meta;
171
126
  } // Introspect to get idx response
172
127
 
173
128
 
@@ -176,94 +131,214 @@ async function run(authClient, options = {}) {
176
131
  version,
177
132
  interactionHandle
178
133
  });
179
- enabledFeatures = getEnabledFeatures(idxResponse);
180
- availableSteps = getAvailableSteps(idxResponse); // Include meta in the transaction response
134
+ }
181
135
 
182
- meta = metaFromResp;
136
+ return { ...data,
137
+ idxResponse,
138
+ meta
139
+ };
140
+ }
183
141
 
184
- if (autoRemediate !== false && (remediators || actions)) {
185
- var _idxResponse;
142
+ async function getDataFromRemediate(data) {
143
+ let {
144
+ idxResponse,
145
+ options,
146
+ values
147
+ } = data;
148
+ const {
149
+ autoRemediate,
150
+ remediators,
151
+ actions,
152
+ flow,
153
+ step
154
+ } = options;
155
+ const shouldRemediate = autoRemediate !== false && (remediators || actions || step);
186
156
 
187
- const values = { ...options,
188
- stateHandle: idxResponse.rawIdxState.stateHandle
189
- }; // Can we handle the remediations?
157
+ if (!shouldRemediate) {
158
+ return data;
159
+ }
190
160
 
191
- const {
192
- idxResponse: idxResponseFromResp,
193
- nextStep: nextStepFromResp,
194
- terminal,
195
- canceled,
196
- messages: messagesFromResp
197
- } = await (0, _remediate.remediate)(idxResponse, values, {
198
- remediators,
199
- actions,
200
- flow,
201
- step
202
- });
203
- idxResponse = idxResponseFromResp || idxResponse; // Track fields from remediation response
204
-
205
- nextStep = nextStepFromResp;
206
- messages = messagesFromResp; // Save intermediate idx response in storage to reduce introspect call
207
-
208
- if (nextStep) {
209
- authClient.transactionManager.saveIdxResponse(idxResponse.rawIdxState);
210
- availableSteps = getAvailableSteps(idxResponse);
211
- }
212
-
213
- if (terminal) {
214
- status = _types.IdxStatus.TERMINAL;
215
- shouldClearTransaction = true;
216
- clearSharedStorage = false; // transaction may be continued in another tab
217
- }
218
-
219
- if (canceled) {
220
- status = _types.IdxStatus.CANCELED;
221
- shouldClearTransaction = true;
222
- } else if ((_idxResponse = idxResponse) !== null && _idxResponse !== void 0 && _idxResponse.interactionCode) {
223
- interactionCode = idxResponse.interactionCode;
224
-
225
- if (exchangeCodeForTokens === false) {
226
- status = _types.IdxStatus.SUCCESS;
227
- shouldClearTransaction = false;
228
- } else {
229
- // exchange the interaction code for tokens
230
- const {
231
- clientId,
232
- codeVerifier,
233
- ignoreSignature,
234
- redirectUri,
235
- urls,
236
- scopes
237
- } = metaFromResp;
238
- tokens = await authClient.token.exchangeCodeForTokens({
239
- interactionCode,
240
- clientId,
241
- codeVerifier,
242
- ignoreSignature,
243
- redirectUri,
244
- scopes
245
- }, urls);
246
- status = _types.IdxStatus.SUCCESS;
247
- shouldClearTransaction = true;
248
- }
249
- }
250
- }
251
- } catch (err) {
252
- // current version of idx-js will throw/reject IDX responses. Handle these differently than regular errors
253
- if ((0, _idxJs.isIdxResponse)(err)) {
254
- error = err;
255
- status = _types.IdxStatus.FAILURE;
256
- shouldClearTransaction = true;
161
+ values = { ...values,
162
+ stateHandle: idxResponse.rawIdxState.stateHandle
163
+ }; // Can we handle the remediations?
164
+
165
+ const {
166
+ idxResponse: idxResponseFromRemediation,
167
+ nextStep,
168
+ canceled
169
+ } = await (0, _remediate.remediate)(idxResponse, values, {
170
+ remediators,
171
+ actions,
172
+ flow,
173
+ step
174
+ });
175
+ idxResponse = idxResponseFromRemediation;
176
+ return { ...data,
177
+ idxResponse,
178
+ nextStep,
179
+ canceled
180
+ };
181
+ }
182
+
183
+ async function getTokens(authClient, data) {
184
+ let {
185
+ meta,
186
+ idxResponse
187
+ } = data;
188
+ const {
189
+ interactionCode
190
+ } = idxResponse;
191
+ const {
192
+ clientId,
193
+ codeVerifier,
194
+ ignoreSignature,
195
+ redirectUri,
196
+ urls,
197
+ scopes
198
+ } = meta;
199
+ const tokenResponse = await authClient.token.exchangeCodeForTokens({
200
+ interactionCode,
201
+ clientId,
202
+ codeVerifier,
203
+ ignoreSignature,
204
+ redirectUri,
205
+ scopes
206
+ }, urls);
207
+ return tokenResponse.tokens;
208
+ }
209
+
210
+ async function finalizeData(authClient, data) {
211
+ let {
212
+ options,
213
+ idxResponse,
214
+ canceled,
215
+ status
216
+ } = data;
217
+ const {
218
+ exchangeCodeForTokens
219
+ } = options;
220
+ let shouldClearTransaction = false;
221
+ let clearSharedStorage = true;
222
+ let interactionCode;
223
+ let tokens;
224
+ let enabledFeatures;
225
+ let availableSteps;
226
+ let messages;
227
+ let terminal;
228
+
229
+ if (idxResponse) {
230
+ enabledFeatures = (0, _util.getEnabledFeatures)(idxResponse);
231
+ availableSteps = (0, _util.getAvailableSteps)(idxResponse);
232
+ messages = (0, _util.getMessagesFromResponse)(idxResponse);
233
+ terminal = (0, _util.isTerminalResponse)(idxResponse);
234
+ }
235
+
236
+ if (terminal) {
237
+ status = _types.IdxStatus.TERMINAL;
238
+ shouldClearTransaction = true;
239
+ clearSharedStorage = false;
240
+ } else if (canceled) {
241
+ status = _types.IdxStatus.CANCELED;
242
+ shouldClearTransaction = true;
243
+ } else if (idxResponse !== null && idxResponse !== void 0 && idxResponse.interactionCode) {
244
+ interactionCode = idxResponse.interactionCode;
245
+
246
+ if (exchangeCodeForTokens === false) {
247
+ status = _types.IdxStatus.SUCCESS;
248
+ shouldClearTransaction = false;
257
249
  } else {
258
- // error is not an IDX response, throw it like a regular error
259
- throw err;
250
+ tokens = await getTokens(authClient, data);
251
+ status = _types.IdxStatus.SUCCESS;
252
+ shouldClearTransaction = true;
260
253
  }
261
254
  }
262
255
 
256
+ return { ...data,
257
+ status,
258
+ interactionCode,
259
+ tokens,
260
+ shouldClearTransaction,
261
+ clearSharedStorage,
262
+ enabledFeatures,
263
+ availableSteps,
264
+ messages,
265
+ terminal
266
+ };
267
+ }
268
+
269
+ function handleError(err, data) {
270
+ let {
271
+ error,
272
+ status,
273
+ shouldClearTransaction
274
+ } = data; // current version of idx-js will throw/reject IDX responses. Handle these differently than regular errors
275
+
276
+ if ((0, _idxJs.isIdxResponse)(err)) {
277
+ error = err;
278
+ status = _types.IdxStatus.FAILURE;
279
+ shouldClearTransaction = true;
280
+ } else {
281
+ // error is not an IDX response, throw it like a regular error
282
+ throw err;
283
+ }
284
+
285
+ return { ...data,
286
+ error,
287
+ status,
288
+ shouldClearTransaction
289
+ };
290
+ }
291
+
292
+ async function run(authClient, options = {}) {
293
+ let data = {
294
+ options,
295
+ values: initializeValues(options)
296
+ };
297
+ data = initializeData(authClient, data);
298
+
299
+ try {
300
+ data = await getDataFromIntrospect(authClient, data);
301
+ data = await getDataFromRemediate(data);
302
+ } catch (err) {
303
+ data = handleError(err, data);
304
+ }
305
+
306
+ data = await finalizeData(authClient, data);
307
+ const {
308
+ idxResponse,
309
+ meta,
310
+ shouldClearTransaction,
311
+ clearSharedStorage,
312
+ status,
313
+ enabledFeatures,
314
+ availableSteps,
315
+ tokens,
316
+ nextStep,
317
+ messages,
318
+ error,
319
+ interactionCode
320
+ } = data;
321
+
263
322
  if (shouldClearTransaction) {
264
323
  authClient.transactionManager.clear({
265
324
  clearSharedStorage
266
325
  });
326
+ } else {
327
+ // ensures state is saved to sessionStorage
328
+ (0, _transactionMeta.saveTransactionMeta)(authClient, { ...meta
329
+ });
330
+
331
+ if (idxResponse) {
332
+ // Save intermediate idx response in storage to reduce introspect call
333
+ const {
334
+ rawIdxState: rawIdxResponse,
335
+ requestDidSucceed
336
+ } = idxResponse;
337
+ authClient.transactionManager.saveIdxResponse({
338
+ rawIdxResponse,
339
+ requestDidSucceed
340
+ });
341
+ }
267
342
  } // from idx-js, used by the widget
268
343
 
269
344
 
@@ -275,7 +350,7 @@ async function run(authClient, options = {}) {
275
350
  rawIdxState
276
351
  } = idxResponse || {};
277
352
  return {
278
- status,
353
+ status: status,
279
354
  ...(meta && {
280
355
  meta
281
356
  }),
@@ -286,12 +361,12 @@ async function run(authClient, options = {}) {
286
361
  availableSteps
287
362
  }),
288
363
  ...(tokens && {
289
- tokens: tokens.tokens
364
+ tokens
290
365
  }),
291
366
  ...(nextStep && {
292
367
  nextStep
293
368
  }),
294
- ...(messages && {
369
+ ...(messages && messages.length && {
295
370
  messages
296
371
  }),
297
372
  ...(error && {
@@ -300,11 +375,11 @@ async function run(authClient, options = {}) {
300
375
  interactionCode,
301
376
  // if options.exchangeCodeForTokens is false
302
377
  // from idx-js
303
- actions,
304
- context,
305
- neededToProceed,
306
- proceed,
307
- rawIdxState
378
+ actions: actions,
379
+ context: context,
380
+ neededToProceed: neededToProceed,
381
+ proceed: proceed,
382
+ rawIdxState: rawIdxState
308
383
  };
309
384
  }
310
385
  //# sourceMappingURL=run.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../lib/idx/run.ts"],"names":["getEnabledFeatures","idxResponse","res","actions","neededToProceed","push","IdxFeature","PASSWORD_RECOVERY","some","name","REGISTRATION","SOCIAL_IDP","ACCOUNT_UNLOCK","getAvailableSteps","remediatorMap","remediators","map","remediatorClass","remediationName","remediation","T","remediator","getNextStep","context","run","authClient","options","tokens","nextStep","messages","error","meta","enabledFeatures","availableSteps","status","IdxStatus","PENDING","shouldClearTransaction","clearSharedStorage","interactionHandle","metaFromResp","interactionCode","flow","state","scopes","version","withCredentials","exchangeCodeForTokens","autoRemediate","step","recoveryToken","activationToken","idx","getFlow","setFlow","flowSpec","transactionManager","clear","interactResponse","values","stateHandle","rawIdxState","idxResponseFromResp","nextStepFromResp","terminal","canceled","messagesFromResp","saveIdxResponse","TERMINAL","CANCELED","SUCCESS","clientId","codeVerifier","ignoreSignature","redirectUri","urls","token","err","FAILURE","proceed"],"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\n/* eslint-disable max-statements, complexity, max-depth */\nimport { interact } from './interact';\nimport { introspect } from './introspect';\nimport { remediate, RemediateOptions } from './remediate';\nimport { getFlowSpecification, RemediationFlow } from './flow';\nimport * as remediators from './remediators';\nimport { \n OktaAuthInterface,\n IdxStatus,\n IdxTransaction,\n IdxFeature,\n NextStep,\n FlowIdentifier,\n} from '../types';\nimport { IdxResponse, isIdxResponse } from './types/idx-js';\nimport { getSavedTransactionMeta } from './transactionMeta';\nimport { ProceedOptions } from './proceed';\n\nexport type RunOptions = ProceedOptions & RemediateOptions & {\n flow?: FlowIdentifier;\n remediators?: RemediationFlow;\n actions?: string[];\n withCredentials?: boolean;\n}\n\nfunction getEnabledFeatures(idxResponse: IdxResponse): IdxFeature[] {\n const res = [];\n const { actions, neededToProceed } = idxResponse;\n\n if (actions['currentAuthenticator-recover']) {\n res.push(IdxFeature.PASSWORD_RECOVERY as never);\n }\n\n if (neededToProceed.some(({ name }) => name === 'select-enroll-profile')) {\n res.push(IdxFeature.REGISTRATION as never);\n }\n\n if (neededToProceed.some(({ name }) => name === 'redirect-idp')) {\n res.push(IdxFeature.SOCIAL_IDP as never);\n }\n\n if (neededToProceed.some(({ name }) => name === 'unlock-account')) {\n res.push(IdxFeature.ACCOUNT_UNLOCK as never);\n }\n\n return res;\n}\n\nfunction getAvailableSteps(idxResponse: IdxResponse): NextStep[] {\n const res = [];\n\n const remediatorMap = Object.values(remediators).reduce((map, remediatorClass) => {\n // Only add concrete subclasses to the map\n if (remediatorClass.remediationName) {\n map[remediatorClass.remediationName] = remediatorClass;\n }\n return map;\n }, {});\n\n for (let remediation of idxResponse.neededToProceed) {\n const T = remediatorMap[remediation.name];\n if (T) {\n const remediator = new T(remediation);\n res.push (remediator.getNextStep(idxResponse.context) as never);\n }\n }\n\n return res;\n}\n\nexport async function run(\n authClient: OktaAuthInterface, \n options: RunOptions = {},\n): Promise<IdxTransaction> {\n let tokens;\n let nextStep;\n let messages;\n let error;\n let meta;\n let enabledFeatures;\n let availableSteps;\n let status = IdxStatus.PENDING;\n let shouldClearTransaction = false;\n let clearSharedStorage = true;\n let idxResponse;\n let interactionHandle;\n let metaFromResp;\n let interactionCode;\n\n try {\n\n let {\n flow,\n state,\n scopes,\n version,\n remediators,\n actions,\n withCredentials,\n exchangeCodeForTokens,\n autoRemediate,\n step,\n recoveryToken,\n activationToken\n } = options;\n\n // Only one flow can be operating at a time\n flow = flow || authClient.idx.getFlow() || 'default';\n if (flow) {\n authClient.idx.setFlow(flow);\n const flowSpec = getFlowSpecification(authClient, flow);\n // Favor option values over flow spec\n withCredentials = (typeof withCredentials !== 'undefined') ? withCredentials : flowSpec.withCredentials;\n remediators = remediators || flowSpec.remediators;\n actions = actions || flowSpec.actions;\n }\n\n // Try to resume saved transaction\n metaFromResp = getSavedTransactionMeta(authClient, { state, recoveryToken, activationToken });\n interactionHandle = metaFromResp?.interactionHandle; // may be undefined\n\n if (!interactionHandle) {\n // start a new transaction\n authClient.transactionManager.clear();\n const interactResponse = await interact(authClient, {\n withCredentials,\n state,\n scopes,\n activationToken,\n recoveryToken\n }); \n interactionHandle = interactResponse.interactionHandle;\n metaFromResp = interactResponse.meta;\n withCredentials = metaFromResp.withCredentials;\n }\n\n // Introspect to get idx response\n idxResponse = await introspect(authClient, { withCredentials, version, interactionHandle });\n enabledFeatures = getEnabledFeatures(idxResponse);\n availableSteps = getAvailableSteps(idxResponse);\n \n // Include meta in the transaction response\n meta = metaFromResp;\n\n if (autoRemediate !== false && (remediators || actions)) {\n const values: remediators.RemediationValues = { \n ...options, \n stateHandle: idxResponse.rawIdxState.stateHandle \n };\n\n // Can we handle the remediations?\n const { \n idxResponse: idxResponseFromResp, \n nextStep: nextStepFromResp,\n terminal,\n canceled,\n messages: messagesFromResp,\n } = await remediate(idxResponse, values, { remediators, actions, flow, step });\n idxResponse = idxResponseFromResp || idxResponse;\n\n // Track fields from remediation response\n nextStep = nextStepFromResp;\n messages = messagesFromResp;\n\n // Save intermediate idx response in storage to reduce introspect call\n if (nextStep) {\n authClient.transactionManager.saveIdxResponse(idxResponse.rawIdxState);\n availableSteps = getAvailableSteps(idxResponse);\n }\n\n if (terminal) {\n status = IdxStatus.TERMINAL;\n shouldClearTransaction = true;\n clearSharedStorage = false; // transaction may be continued in another tab\n } if (canceled) {\n status = IdxStatus.CANCELED;\n shouldClearTransaction = true;\n } else if (idxResponse?.interactionCode) { \n interactionCode = idxResponse.interactionCode;\n\n if (exchangeCodeForTokens === false) {\n status = IdxStatus.SUCCESS;\n shouldClearTransaction = false;\n } else {\n // exchange the interaction code for tokens\n const {\n clientId,\n codeVerifier,\n ignoreSignature,\n redirectUri,\n urls,\n scopes,\n } = metaFromResp;\n tokens = await authClient.token.exchangeCodeForTokens({\n interactionCode,\n clientId,\n codeVerifier,\n ignoreSignature,\n redirectUri,\n scopes\n }, urls);\n\n status = IdxStatus.SUCCESS;\n shouldClearTransaction = true;\n }\n }\n }\n } catch (err) {\n // current version of idx-js will throw/reject IDX responses. Handle these differently than regular errors\n if (isIdxResponse(err)) {\n error = err;\n status = IdxStatus.FAILURE;\n shouldClearTransaction = true;\n } else {\n // error is not an IDX response, throw it like a regular error\n throw err;\n }\n\n }\n\n if (shouldClearTransaction) {\n authClient.transactionManager.clear({ clearSharedStorage });\n }\n \n // from idx-js, used by the widget\n const { actions, context, neededToProceed, proceed, rawIdxState } = idxResponse || {};\n return {\n status,\n ...(meta && { meta }),\n ...(enabledFeatures && { enabledFeatures }),\n ...(availableSteps && { availableSteps }),\n ...(tokens && { tokens: tokens.tokens }),\n ...(nextStep && { nextStep }),\n ...(messages && { messages }),\n ...(error && { error }),\n interactionCode, // if options.exchangeCodeForTokens is false\n\n // from idx-js\n actions,\n context,\n neededToProceed,\n proceed,\n rawIdxState,\n };\n}\n"],"file":"run.js"}
1
+ {"version":3,"sources":["../../../lib/idx/run.ts"],"names":["initializeValues","options","knownOptions","values","forEach","option","initializeData","authClient","data","flow","withCredentials","remediators","actions","status","IdxStatus","PENDING","idx","getFlow","setFlow","flowSpec","getDataFromIntrospect","stateHandle","version","state","scopes","recoveryToken","activationToken","idxResponse","meta","interactionHandle","transactionManager","clear","interactResponse","getDataFromRemediate","autoRemediate","step","shouldRemediate","rawIdxState","idxResponseFromRemediation","nextStep","canceled","getTokens","interactionCode","clientId","codeVerifier","ignoreSignature","redirectUri","urls","tokenResponse","token","exchangeCodeForTokens","tokens","finalizeData","shouldClearTransaction","clearSharedStorage","enabledFeatures","availableSteps","messages","terminal","TERMINAL","CANCELED","SUCCESS","handleError","err","error","FAILURE","run","rawIdxResponse","requestDidSucceed","saveIdxResponse","context","neededToProceed","proceed","length"],"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\n/* eslint-disable max-statements, complexity, max-depth */\nimport { interact } from './interact';\nimport { introspect } from './introspect';\nimport { remediate, RemediateOptions } from './remediate';\nimport { getFlowSpecification, RemediationFlow } from './flow';\nimport * as remediators from './remediators';\nimport { \n OktaAuthInterface,\n IdxStatus,\n IdxTransaction,\n IdxFeature,\n NextStep,\n FlowIdentifier,\n IdxTransactionMeta,\n Tokens,\n APIError,\n} from '../types';\nimport { IdxMessage, IdxResponse, isIdxResponse } from './types/idx-js';\nimport { getSavedTransactionMeta, saveTransactionMeta } from './transactionMeta';\nimport { ProceedOptions } from './proceed';\nimport { getAvailableSteps, getEnabledFeatures, getMessagesFromResponse, isTerminalResponse } from './util';\n\nexport type RunOptions = ProceedOptions & RemediateOptions & {\n flow?: FlowIdentifier;\n remediators?: RemediationFlow;\n actions?: string[];\n withCredentials?: boolean;\n}\n\ndeclare interface RunData {\n options: RunOptions;\n values: remediators.RemediationValues;\n status?: IdxStatus;\n tokens?: Tokens;\n nextStep?: NextStep;\n messages?: IdxMessage[];\n error?: APIError | IdxResponse;\n meta?: IdxTransactionMeta;\n enabledFeatures?: IdxFeature[];\n availableSteps?: NextStep[];\n idxResponse?: IdxResponse;\n canceled?: boolean;\n interactionCode?: string;\n shouldClearTransaction?: boolean;\n clearSharedStorage?: boolean;\n terminal?: boolean;\n}\n\nfunction initializeValues(options: RunOptions) {\n // remove known options, everything else is assumed to be a value\n const knownOptions = ['flow', 'remediators', 'actions', 'withCredentials', 'step'];\n const values = { ...options };\n knownOptions.forEach(option => {\n delete values[option];\n });\n return values;\n}\n\nfunction initializeData(authClient, data: RunData): RunData {\n const { options } = data;\n let {\n flow,\n withCredentials,\n remediators,\n actions\n } = options;\n\n const status = IdxStatus.PENDING;\n\n // certain options can be set by the flow specification\n flow = flow || authClient.idx.getFlow() || 'default';\n if (flow) {\n authClient.idx.setFlow(flow);\n const flowSpec = getFlowSpecification(authClient, flow);\n // Favor option values over flow spec\n withCredentials = (typeof withCredentials !== 'undefined') ? withCredentials : flowSpec.withCredentials;\n remediators = remediators || flowSpec.remediators;\n actions = actions || flowSpec.actions;\n }\n return { \n ...data,\n options: { ...options, flow, withCredentials, remediators, actions },\n status\n };\n}\n\nasync function getDataFromIntrospect(authClient, data: RunData): Promise<RunData> {\n const { options } = data;\n const {\n stateHandle,\n withCredentials,\n version,\n state,\n scopes,\n recoveryToken,\n activationToken\n } = options;\n\n let idxResponse;\n let meta;\n\n if (stateHandle) {\n idxResponse = await introspect(authClient, { withCredentials, version, stateHandle });\n } else {\n // Try to resume saved transaction\n meta = getSavedTransactionMeta(authClient, { state, recoveryToken, activationToken });\n let interactionHandle = meta?.interactionHandle; // may be undefined\n\n if (!interactionHandle) {\n // start a new transaction\n authClient.transactionManager.clear();\n const interactResponse = await interact(authClient, {\n withCredentials,\n state,\n scopes,\n activationToken,\n recoveryToken\n }); \n interactionHandle = interactResponse.interactionHandle;\n meta = interactResponse.meta;\n }\n \n // Introspect to get idx response\n idxResponse = await introspect(authClient, { withCredentials, version, interactionHandle });\n }\n return { ...data, idxResponse, meta };\n}\n\nasync function getDataFromRemediate(data: RunData): Promise<RunData> {\n let {\n idxResponse,\n options,\n values\n } = data;\n\n const {\n autoRemediate,\n remediators,\n actions,\n flow,\n step,\n } = options;\n \n const shouldRemediate = (autoRemediate !== false && (remediators || actions || step));\n if (!shouldRemediate) {\n return data;\n }\n\n values = { \n ...values, \n stateHandle: idxResponse!.rawIdxState.stateHandle \n };\n\n // Can we handle the remediations?\n const { \n idxResponse: idxResponseFromRemediation, \n nextStep,\n canceled,\n } = await remediate(idxResponse!, values, { remediators, actions, flow, step });\n idxResponse = idxResponseFromRemediation;\n\n return { ...data, idxResponse, nextStep, canceled };\n}\n\nasync function getTokens(authClient, data: RunData): Promise<Tokens> {\n let { meta, idxResponse } = data;\n const { interactionCode } = idxResponse as IdxResponse;\n const {\n clientId,\n codeVerifier,\n ignoreSignature,\n redirectUri,\n urls,\n scopes,\n } = meta as IdxTransactionMeta;\n const tokenResponse = await authClient.token.exchangeCodeForTokens({\n interactionCode,\n clientId,\n codeVerifier,\n ignoreSignature,\n redirectUri,\n scopes\n }, urls);\n return tokenResponse.tokens;\n}\n\nasync function finalizeData(authClient, data: RunData): Promise<RunData> {\n let {\n options,\n idxResponse,\n canceled,\n status,\n } = data;\n const { exchangeCodeForTokens } = options;\n let shouldClearTransaction = false;\n let clearSharedStorage = true;\n let interactionCode;\n let tokens;\n let enabledFeatures;\n let availableSteps;\n let messages;\n let terminal;\n\n if (idxResponse) {\n enabledFeatures = getEnabledFeatures(idxResponse);\n availableSteps = getAvailableSteps(idxResponse);\n messages = getMessagesFromResponse(idxResponse);\n terminal = isTerminalResponse(idxResponse);\n }\n\n if (terminal) {\n status = IdxStatus.TERMINAL;\n shouldClearTransaction = true;\n clearSharedStorage = false;\n } else if (canceled) {\n status = IdxStatus.CANCELED;\n shouldClearTransaction = true;\n } else if (idxResponse?.interactionCode) { \n interactionCode = idxResponse.interactionCode;\n if (exchangeCodeForTokens === false) {\n status = IdxStatus.SUCCESS;\n shouldClearTransaction = false;\n } else {\n tokens = await getTokens(authClient, data);\n status = IdxStatus.SUCCESS;\n shouldClearTransaction = true;\n }\n }\n return {\n ...data,\n status,\n interactionCode,\n tokens,\n shouldClearTransaction,\n clearSharedStorage,\n enabledFeatures,\n availableSteps,\n messages,\n terminal\n };\n}\n\nfunction handleError(err, data: RunData): RunData {\n let { error, status, shouldClearTransaction } = data;\n\n // current version of idx-js will throw/reject IDX responses. Handle these differently than regular errors\n if (isIdxResponse(err)) {\n error = err;\n status = IdxStatus.FAILURE;\n shouldClearTransaction = true;\n } else {\n // error is not an IDX response, throw it like a regular error\n throw err;\n }\n\n return { ...data, error, status, shouldClearTransaction };\n}\n\nexport async function run(\n authClient: OktaAuthInterface, \n options: RunOptions = {},\n): Promise<IdxTransaction> {\n let data: RunData = {\n options,\n values: initializeValues(options)\n };\n\n data = initializeData(authClient, data);\n try {\n data = await getDataFromIntrospect(authClient, data);\n data = await getDataFromRemediate(data);\n } catch (err) {\n data = handleError(err, data);\n }\n data = await finalizeData(authClient, data);\n\n const {\n idxResponse,\n meta,\n shouldClearTransaction,\n clearSharedStorage,\n status,\n enabledFeatures,\n availableSteps,\n tokens,\n nextStep,\n messages,\n error,\n interactionCode\n } = data;\n\n if (shouldClearTransaction) {\n authClient.transactionManager.clear({ clearSharedStorage });\n }\n else {\n // ensures state is saved to sessionStorage\n saveTransactionMeta(authClient, { ...meta });\n\n if (idxResponse) {\n // Save intermediate idx response in storage to reduce introspect call\n const { rawIdxState: rawIdxResponse, requestDidSucceed } = idxResponse;\n authClient.transactionManager.saveIdxResponse({\n rawIdxResponse,\n requestDidSucceed\n });\n }\n\n }\n \n // from idx-js, used by the widget\n const { actions, context, neededToProceed, proceed, rawIdxState } = idxResponse || {};\n return {\n status: status!,\n ...(meta && { meta }),\n ...(enabledFeatures && { enabledFeatures }),\n ...(availableSteps && { availableSteps }),\n ...(tokens && { tokens }),\n ...(nextStep && { nextStep }),\n ...(messages && messages.length && { messages }),\n ...(error && { error }),\n interactionCode, // if options.exchangeCodeForTokens is false\n\n // from idx-js\n actions: actions!,\n context: context!,\n neededToProceed: neededToProceed!,\n proceed: proceed!,\n rawIdxState: rawIdxState!,\n };\n}\n"],"file":"run.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../lib/idx/types/idx-js.ts"],"names":["isRawIdxResponse","obj","version","isIdxResponse","rawIdxState"],"mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AA0KA;AAaO,SAASA,gBAAT,CAA0BC,GAA1B,EAA2D;AAChE,SAAOA,GAAG,IAAIA,GAAG,CAACC,OAAlB;AACD;;AAoBM,SAASC,aAAT,CAAuBF,GAAvB,EAAqD;AAC1D,SAAOA,GAAG,IAAID,gBAAgB,CAACC,GAAG,CAACG,WAAL,CAA9B;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// TODO: remove when idx-js provides type information\n\nexport interface ChallengeData {\n challenge: string; \n userVerification: string; \n extensions?: {\n appid: string;\n };\n}\nexport interface ActivationData {\n challenge: string;\n rp: {\n name: string;\n };\n user: {\n id: string;\n name: string;\n displayName: string;\n };\n pubKeyCredParams: {\n type: string;\n alg: number;\n }[];\n attestation?: string;\n authenticatorSelection?: {\n userVerification?: string;\n authenticatorAttachment?: string;\n requireResidentKey?: boolean;\n residentKey?: string;\n };\n excludeCredentials?: {\n id: string;\n type: string;\n }[];\n}\nexport interface IdxAuthenticatorMethod {\n type: string;\n}\nexport interface IdxAuthenticator {\n displayName: string;\n id: string;\n key: string;\n methods: IdxAuthenticatorMethod[];\n type: string;\n settings?: {\n complexity?: unknown;\n age?: unknown;\n };\n contextualData?: {\n enrolledQuestion?: {\n question: string;\n questionKey: string;\n };\n qrcode?: { \n href: string; \n method: string; \n type: string; \n };\n sharedSecret?: string;\n questions?: {\n questionKey: string;\n question: string;\n }[];\n questionKeys?: string[];\n selectedChannel?: string;\n activationData?: ActivationData;\n challengeData?: ChallengeData;\n };\n credentialId?: string;\n}\n\nexport interface IdxForm {\n value: IdxRemediationValue[];\n}\n\nexport interface IdxOption {\n value: string | { form: IdxForm };\n label: string;\n relatesTo?: IdxAuthenticator;\n}\n\nexport interface IdpConfig {\n id: string;\n name: string;\n}\n\nexport interface IdxRemediationValueForm {\n form: IdxForm;\n}\n\nexport interface IdxRemediationValue {\n name: string;\n type?: string;\n required?: boolean;\n secret?: boolean;\n visible?: boolean;\n mutable?: boolean;\n value?: string | IdxRemediationValueForm;\n label?: string;\n form?: IdxForm;\n options?: IdxOption[];\n messages?: IdxMessages;\n minLength?: number;\n maxLength?: number;\n}\n\nexport interface IdxRemediation {\n name: string;\n label?: string;\n value?: IdxRemediationValue[];\n relatesTo?: {\n type?: string;\n value: IdxAuthenticator;\n };\n idp?: IdpConfig;\n href?: string;\n method?: string;\n type?: string;\n accepts?: string;\n refresh?: number;\n}\n\nexport interface IdxContext {\n version: string;\n stateHandle: string;\n expiresAt: string;\n intent: string;\n currentAuthenticator: {\n type: string;\n value: IdxAuthenticator;\n };\n authenticators: {\n type: string;\n value: IdxAuthenticator[];\n };\n authenticatorEnrollments: {\n type: string;\n value: IdxAuthenticator[];\n };\n enrollmentAuthenticator: {\n type: string;\n value: IdxAuthenticator;\n };\n user: {\n type: string;\n value: Record<string, unknown>;\n };\n app: {\n type: string;\n value: Record<string, unknown>;\n };\n messages?: IdxMessages;\n success?: IdxRemediation;\n failure?: IdxRemediation;\n}\n\nexport interface IdxMessage {\n message: string;\n class: string;\n i18n: {\n key: string;\n params?: unknown[];\n };\n}\n\nexport interface IdxMessages {\n type: 'array';\n value: IdxMessage[];\n}\n\n// JSON response from the server\nexport interface RawIdxResponse {\n version: string;\n stateHandle: string;\n intent?: string;\n expiresAt?: string;\n remediation?: {\n type: 'array';\n value: IdxRemediation[];\n };\n messages?: IdxMessages;\n}\n\nexport function isRawIdxResponse(obj: any): obj is RawIdxResponse {\n return obj && obj.version;\n}\n\n\nexport interface IdxActions {\n [key: string]: Function;\n}\n\n// Object returned from idx-js\nexport interface IdxResponse {\n proceed: (remediationName: string, params: unknown) => Promise<IdxResponse>;\n neededToProceed: IdxRemediation[];\n rawIdxState: RawIdxResponse;\n interactionCode?: string;\n actions: IdxActions;\n toPersist: {\n interactionHandle?: string;\n };\n context?: IdxContext;\n}\n\nexport function isIdxResponse(obj: any): obj is IdxResponse {\n return obj && isRawIdxResponse(obj.rawIdxState);\n}\n"],"file":"idx-js.js"}
1
+ {"version":3,"sources":["../../../../lib/idx/types/idx-js.ts"],"names":["isRawIdxResponse","obj","version","isIdxResponse","rawIdxState"],"mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AA2KA;AAeO,SAASA,gBAAT,CAA0BC,GAA1B,EAA2D;AAChE,SAAOA,GAAG,IAAIA,GAAG,CAACC,OAAlB;AACD;;AAqBM,SAASC,aAAT,CAAuBF,GAAvB,EAAqD;AAC1D,SAAOA,GAAG,IAAID,gBAAgB,CAACC,GAAG,CAACG,WAAL,CAA9B;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// TODO: remove when idx-js provides type information\n\nexport interface ChallengeData {\n challenge: string; \n userVerification: string; \n extensions?: {\n appid: string;\n };\n}\nexport interface ActivationData {\n challenge: string;\n rp: {\n name: string;\n };\n user: {\n id: string;\n name: string;\n displayName: string;\n };\n pubKeyCredParams: {\n type: string;\n alg: number;\n }[];\n attestation?: string;\n authenticatorSelection?: {\n userVerification?: string;\n authenticatorAttachment?: string;\n requireResidentKey?: boolean;\n residentKey?: string;\n };\n excludeCredentials?: {\n id: string;\n type: string;\n }[];\n}\nexport interface IdxAuthenticatorMethod {\n type: string;\n}\nexport interface IdxAuthenticator {\n displayName: string;\n id: string;\n key: string;\n methods: IdxAuthenticatorMethod[];\n type: string;\n settings?: {\n complexity?: unknown;\n age?: unknown;\n };\n contextualData?: {\n enrolledQuestion?: {\n question: string;\n questionKey: string;\n };\n qrcode?: { \n href: string; \n method: string; \n type: string; \n };\n sharedSecret?: string;\n questions?: {\n questionKey: string;\n question: string;\n }[];\n questionKeys?: string[];\n selectedChannel?: string;\n activationData?: ActivationData;\n challengeData?: ChallengeData;\n };\n credentialId?: string;\n enrollmentId?: string;\n}\n\nexport interface IdxForm {\n value: IdxRemediationValue[];\n}\n\nexport interface IdxOption {\n value: string | { form: IdxForm };\n label: string;\n relatesTo?: IdxAuthenticator;\n}\n\nexport interface IdpConfig {\n id: string;\n name: string;\n}\n\nexport interface IdxRemediationValueForm {\n form: IdxForm;\n}\n\nexport interface IdxRemediationValue {\n name: string;\n type?: string;\n required?: boolean;\n secret?: boolean;\n visible?: boolean;\n mutable?: boolean;\n value?: string | IdxRemediationValueForm;\n label?: string;\n form?: IdxForm;\n options?: IdxOption[];\n messages?: IdxMessages;\n minLength?: number;\n maxLength?: number;\n}\n\nexport interface IdxRemediation {\n name: string;\n label?: string;\n value?: IdxRemediationValue[];\n relatesTo?: {\n type?: string;\n value: IdxAuthenticator;\n };\n idp?: IdpConfig;\n href?: string;\n method?: string;\n type?: string;\n accepts?: string;\n refresh?: number;\n}\n\nexport interface IdxContext {\n version: string;\n stateHandle: string;\n expiresAt: string;\n intent: string;\n currentAuthenticator: {\n type: string;\n value: IdxAuthenticator;\n };\n authenticators: {\n type: string;\n value: IdxAuthenticator[];\n };\n authenticatorEnrollments: {\n type: string;\n value: IdxAuthenticator[];\n };\n enrollmentAuthenticator: {\n type: string;\n value: IdxAuthenticator;\n };\n user: {\n type: string;\n value: Record<string, unknown>;\n };\n app: {\n type: string;\n value: Record<string, unknown>;\n };\n messages?: IdxMessages;\n success?: IdxRemediation;\n failure?: IdxRemediation;\n}\n\nexport interface IdxMessage {\n message: string;\n class: string;\n i18n: {\n key: string;\n params?: unknown[];\n };\n}\n\nexport interface IdxMessages {\n type: 'array';\n value: IdxMessage[];\n}\n\n// JSON response from the server\nexport interface RawIdxResponse {\n version: string;\n stateHandle: string;\n intent?: string;\n expiresAt?: string;\n remediation?: {\n type: 'array';\n value: IdxRemediation[];\n };\n messages?: IdxMessages;\n success?: boolean;\n successWithInteractionCode?: IdxRemediation;\n}\n\nexport function isRawIdxResponse(obj: any): obj is RawIdxResponse {\n return obj && obj.version;\n}\n\n\nexport interface IdxActions {\n [key: string]: () => Promise<IdxResponse>;\n}\n\n// Object returned from auth-js\nexport interface IdxResponse {\n proceed: (remediationName: string, params: unknown) => Promise<IdxResponse>;\n neededToProceed: IdxRemediation[];\n rawIdxState: RawIdxResponse;\n interactionCode?: string;\n actions: IdxActions;\n toPersist: {\n interactionHandle?: string;\n };\n context?: IdxContext;\n requestDidSucceed?: boolean;\n}\n\nexport function isIdxResponse(obj: any): obj is IdxResponse {\n return obj && isRawIdxResponse(obj.rawIdxState);\n}\n"],"file":"idx-js.js"}