@okta/okta-auth-js 6.3.2 → 6.4.2

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 (155) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +6 -0
  3. package/cjs/AuthStateManager.js +1 -0
  4. package/cjs/AuthStateManager.js.map +1 -1
  5. package/cjs/OktaAuth.js +10 -11
  6. package/cjs/OktaAuth.js.map +1 -1
  7. package/cjs/OktaUserAgent.js +2 -2
  8. package/cjs/ServiceManager.js +1 -1
  9. package/cjs/ServiceManager.js.map +1 -1
  10. package/cjs/TokenManager.js.map +1 -1
  11. package/cjs/crypto/node.js +11 -16
  12. package/cjs/crypto/node.js.map +1 -1
  13. package/cjs/crypto/verifyToken.js +2 -1
  14. package/cjs/crypto/verifyToken.js.map +1 -1
  15. package/cjs/errors/AuthApiError.js.map +1 -1
  16. package/cjs/errors/OAuthError.js +7 -1
  17. package/cjs/errors/OAuthError.js.map +1 -1
  18. package/cjs/fetch/fetchRequest.js +17 -3
  19. package/cjs/fetch/fetchRequest.js.map +1 -1
  20. package/cjs/http/request.js +7 -3
  21. package/cjs/http/request.js.map +1 -1
  22. package/cjs/idx/idxState/index.js +55 -0
  23. package/cjs/idx/idxState/index.js.map +1 -0
  24. package/cjs/idx/{idx-js → idxState}/v1/actionParser.js +1 -0
  25. package/cjs/idx/idxState/v1/actionParser.js.map +1 -0
  26. package/cjs/idx/{idx-js → idxState}/v1/generateIdxAction.js +43 -30
  27. package/cjs/idx/idxState/v1/generateIdxAction.js.map +1 -0
  28. package/cjs/idx/{idx-js → idxState}/v1/idxResponseParser.js +8 -8
  29. package/cjs/idx/idxState/v1/idxResponseParser.js.map +1 -0
  30. package/cjs/idx/{idx-js → idxState}/v1/makeIdxState.js +3 -2
  31. package/cjs/idx/idxState/v1/makeIdxState.js.map +1 -0
  32. package/cjs/idx/{idx-js → idxState}/v1/parsers.js +1 -0
  33. package/cjs/idx/idxState/v1/parsers.js.map +1 -0
  34. package/cjs/idx/{idx-js → idxState}/v1/remediationParser.js +4 -2
  35. package/cjs/idx/idxState/v1/remediationParser.js.map +1 -0
  36. package/cjs/idx/interact.js +42 -21
  37. package/cjs/idx/interact.js.map +1 -1
  38. package/cjs/idx/introspect.js +37 -12
  39. package/cjs/idx/introspect.js.map +1 -1
  40. package/cjs/idx/remediate.js +56 -132
  41. package/cjs/idx/remediate.js.map +1 -1
  42. package/cjs/idx/remediators/AuthenticatorEnrollmentData.js.map +1 -1
  43. package/cjs/idx/remediators/AuthenticatorVerificationData.js +7 -6
  44. package/cjs/idx/remediators/AuthenticatorVerificationData.js.map +1 -1
  45. package/cjs/idx/remediators/Base/AuthenticatorData.js.map +1 -1
  46. package/cjs/idx/remediators/Base/Remediator.js +12 -2
  47. package/cjs/idx/remediators/Base/Remediator.js.map +1 -1
  48. package/cjs/idx/remediators/Base/SelectAuthenticator.js.map +1 -1
  49. package/cjs/idx/remediators/Base/VerifyAuthenticator.js.map +1 -1
  50. package/cjs/idx/remediators/ChallengeAuthenticator.js.map +1 -1
  51. package/cjs/idx/remediators/EnrollAuthenticator.js.map +1 -1
  52. package/cjs/idx/remediators/EnrollPoll.js.map +1 -1
  53. package/cjs/idx/remediators/EnrollProfile.js.map +1 -1
  54. package/cjs/idx/remediators/EnrollmentChannelData.js.map +1 -1
  55. package/cjs/idx/remediators/Identify.js.map +1 -1
  56. package/cjs/idx/remediators/ReEnrollAuthenticator.js.map +1 -1
  57. package/cjs/idx/remediators/ResetAuthenticator.js.map +1 -1
  58. package/cjs/idx/remediators/SelectAuthenticatorAuthenticate.js.map +1 -1
  59. package/cjs/idx/remediators/SelectAuthenticatorEnroll.js.map +1 -1
  60. package/cjs/idx/remediators/SelectAuthenticatorUnlockAccount.js.map +1 -1
  61. package/cjs/idx/remediators/SelectEnrollProfile.js.map +1 -1
  62. package/cjs/idx/remediators/SelectEnrollmentChannel.js.map +1 -1
  63. package/cjs/idx/remediators/Skip.js.map +1 -1
  64. package/cjs/idx/run.js +16 -12
  65. package/cjs/idx/run.js.map +1 -1
  66. package/cjs/idx/types/idx-js.js +2 -0
  67. package/cjs/idx/types/idx-js.js.map +1 -1
  68. package/cjs/idx/types/index.js +0 -138
  69. package/cjs/idx/types/index.js.map +1 -1
  70. package/cjs/idx/util.js +127 -5
  71. package/cjs/idx/util.js.map +1 -1
  72. package/cjs/server/serverStorage.js +1 -0
  73. package/cjs/server/serverStorage.js.map +1 -1
  74. package/cjs/tx/AuthTransaction.js.map +1 -1
  75. package/cjs/types/Token.js +0 -1
  76. package/cjs/types/Token.js.map +1 -1
  77. package/cjs/util/object.js.map +1 -1
  78. package/cjs/util/types.js.map +1 -1
  79. package/dist/okta-auth-js.min.js +1 -1
  80. package/dist/okta-auth-js.min.js.map +1 -1
  81. package/dist/okta-auth-js.umd.js +1 -1
  82. package/dist/okta-auth-js.umd.js.map +1 -1
  83. package/esm/esm.browser.js +598 -683
  84. package/esm/esm.browser.js.map +1 -1
  85. package/esm/esm.node.mjs +598 -683
  86. package/esm/esm.node.mjs.map +1 -1
  87. package/lib/TokenManager.d.ts +2 -2
  88. package/lib/errors/OAuthError.d.ts +2 -0
  89. package/lib/idx/flow/RemediationFlow.d.ts +2 -2
  90. package/lib/idx/idxState/index.d.ts +7 -0
  91. package/lib/idx/{idx-js → idxState}/v1/actionParser.d.ts +0 -0
  92. package/lib/idx/{idx-js → idxState}/v1/generateIdxAction.d.ts +3 -1
  93. package/lib/idx/{idx-js → idxState}/v1/idxResponseParser.d.ts +3 -2
  94. package/lib/idx/{idx-js → idxState}/v1/makeIdxState.d.ts +3 -2
  95. package/lib/idx/{idx-js → idxState}/v1/parsers.d.ts +0 -0
  96. package/lib/idx/{idx-js → idxState}/v1/remediationParser.d.ts +2 -1
  97. package/lib/idx/interact.d.ts +22 -0
  98. package/lib/idx/remediate.d.ts +9 -12
  99. package/lib/idx/remediators/AuthenticatorEnrollmentData.d.ts +1 -2
  100. package/lib/idx/remediators/AuthenticatorVerificationData.d.ts +3 -3
  101. package/lib/idx/remediators/Base/AuthenticatorData.d.ts +3 -4
  102. package/lib/idx/remediators/Base/Remediator.d.ts +8 -4
  103. package/lib/idx/remediators/Base/SelectAuthenticator.d.ts +2 -3
  104. package/lib/idx/remediators/Base/VerifyAuthenticator.d.ts +3 -4
  105. package/lib/idx/remediators/ChallengeAuthenticator.d.ts +1 -2
  106. package/lib/idx/remediators/EnrollAuthenticator.d.ts +1 -2
  107. package/lib/idx/remediators/EnrollPoll.d.ts +1 -2
  108. package/lib/idx/remediators/EnrollProfile.d.ts +1 -2
  109. package/lib/idx/remediators/EnrollmentChannelData.d.ts +1 -2
  110. package/lib/idx/remediators/Identify.d.ts +1 -2
  111. package/lib/idx/remediators/ReEnrollAuthenticator.d.ts +1 -2
  112. package/lib/idx/remediators/ResetAuthenticator.d.ts +1 -2
  113. package/lib/idx/remediators/SelectAuthenticatorAuthenticate.d.ts +1 -2
  114. package/lib/idx/remediators/SelectAuthenticatorEnroll.d.ts +1 -2
  115. package/lib/idx/remediators/SelectAuthenticatorUnlockAccount.d.ts +1 -2
  116. package/lib/idx/remediators/SelectEnrollProfile.d.ts +1 -2
  117. package/lib/idx/remediators/SelectEnrollmentChannel.d.ts +1 -2
  118. package/lib/idx/remediators/Skip.d.ts +1 -2
  119. package/lib/idx/types/idx-js.d.ts +5 -2
  120. package/lib/idx/types/index.d.ts +26 -17
  121. package/lib/idx/util.d.ts +7 -4
  122. package/lib/types/EventEmitter.d.ts +3 -3
  123. package/lib/types/Service.d.ts +6 -6
  124. package/lib/types/Storage.d.ts +6 -6
  125. package/lib/types/TokenManager.d.ts +5 -2
  126. package/lib/types/UserClaims.d.ts +1 -1
  127. package/lib/util/types.d.ts +1 -1
  128. package/package.json +10 -10
  129. package/cjs/idx/headers.js +0 -59
  130. package/cjs/idx/headers.js.map +0 -1
  131. package/cjs/idx/idx-js/client.js +0 -91
  132. package/cjs/idx/idx-js/client.js.map +0 -1
  133. package/cjs/idx/idx-js/index.js +0 -40
  134. package/cjs/idx/idx-js/index.js.map +0 -1
  135. package/cjs/idx/idx-js/interact.js +0 -83
  136. package/cjs/idx/idx-js/interact.js.map +0 -1
  137. package/cjs/idx/idx-js/introspect.js +0 -62
  138. package/cjs/idx/idx-js/introspect.js.map +0 -1
  139. package/cjs/idx/idx-js/parsers.js +0 -41
  140. package/cjs/idx/idx-js/parsers.js.map +0 -1
  141. package/cjs/idx/idx-js/util.js +0 -34
  142. package/cjs/idx/idx-js/util.js.map +0 -1
  143. package/cjs/idx/idx-js/v1/actionParser.js.map +0 -1
  144. package/cjs/idx/idx-js/v1/generateIdxAction.js.map +0 -1
  145. package/cjs/idx/idx-js/v1/idxResponseParser.js.map +0 -1
  146. package/cjs/idx/idx-js/v1/makeIdxState.js.map +0 -1
  147. package/cjs/idx/idx-js/v1/parsers.js.map +0 -1
  148. package/cjs/idx/idx-js/v1/remediationParser.js.map +0 -1
  149. package/lib/idx/headers.d.ts +0 -16
  150. package/lib/idx/idx-js/client.d.ts +0 -36
  151. package/lib/idx/idx-js/index.d.ts +0 -35
  152. package/lib/idx/idx-js/interact.d.ts +0 -25
  153. package/lib/idx/idx-js/introspect.d.ts +0 -21
  154. package/lib/idx/idx-js/parsers.d.ts +0 -15
  155. package/lib/idx/idx-js/util.d.ts +0 -12
@@ -2,27 +2,22 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
4
 
5
- exports.getRemediator = getRemediator;
6
5
  exports.remediate = remediate;
7
6
 
8
7
  var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
9
8
 
10
- var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
11
-
12
9
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
13
10
 
11
+ var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
12
+
14
13
  var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
15
14
 
16
15
  var _reduce = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/reduce"));
17
16
 
18
17
  var _errors = require("../errors");
19
18
 
20
- var _idxJs = require("./types/idx-js");
21
-
22
19
  var _util = require("./util");
23
20
 
24
- var _util2 = require("../util");
25
-
26
21
  /*!
27
22
  * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.
28
23
  * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
@@ -36,111 +31,32 @@ var _util2 = require("../util");
36
31
  */
37
32
 
38
33
  /* eslint-disable max-statements, max-depth, complexity */
39
- // Return first match idxRemediation in allowed remediators
40
- function getRemediator(idxRemediations, values, options) {
41
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
42
- const remediators = options.remediators;
43
- let remediator; // remediation name specified by caller - fast-track remediator lookup
44
-
45
- if (options.step) {
46
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
47
- const remediation = (0, _find.default)(idxRemediations).call(idxRemediations, ({
48
- name
49
- }) => name === options.step);
50
-
51
- if (remediation) {
52
- const T = remediation ? remediators[remediation.name] : undefined;
53
- return T ? new T(remediation, values, options) : undefined;
54
- } else {
55
- // step was specified, but remediation was not found. This is unexpected!
56
- (0, _util2.warn)(`step "${options.step}" did not match any remediations`);
57
- return;
58
- }
59
- }
60
-
61
- const remediatorCandidates = [];
62
-
63
- for (let remediation of idxRemediations) {
64
- var _context;
65
-
66
- const isRemeditionInFlow = (0, _includes.default)(_context = (0, _keys.default)(remediators)).call(_context, remediation.name);
67
-
68
- if (!isRemeditionInFlow) {
69
- continue;
70
- }
71
-
72
- const T = remediators[remediation.name];
73
- remediator = new T(remediation, values, options);
74
-
75
- if (remediator.canRemediate()) {
76
- // found the remediator
77
- return remediator;
78
- } // remediator cannot handle the current values
79
- // maybe return for next step
80
-
81
-
82
- remediatorCandidates.push(remediator);
83
- }
84
-
85
- return remediatorCandidates[0];
86
- }
87
-
88
- function getNextStep(remediator, idxResponse) {
89
- const nextStep = remediator.getNextStep(idxResponse.context);
90
- const canSkip = (0, _util.canSkipFn)(idxResponse);
91
- const canResend = (0, _util.canResendFn)(idxResponse);
92
- return { ...nextStep,
93
- ...(canSkip && {
94
- canSkip
95
- }),
96
- ...(canResend && {
97
- canResend
98
- })
99
- };
100
- }
101
-
102
- function handleIdxError(e, remediator) {
103
- // Handle idx messages
104
- const idxResponse = (0, _idxJs.isIdxResponse)(e) ? e : null;
105
-
106
- if (!idxResponse) {
107
- // Thrown error terminates the interaction with idx
108
- throw e;
109
- }
110
-
111
- idxResponse.requestDidSucceed = false;
112
- const terminal = (0, _util.isTerminalResponse)(idxResponse);
113
- const messages = (0, _util.getMessagesFromResponse)(idxResponse);
114
-
115
- if (terminal) {
116
- return {
117
- idxResponse,
118
- terminal,
119
- messages
120
- };
121
- } else {
122
- const nextStep = remediator && getNextStep(remediator, idxResponse);
123
- return {
124
- idxResponse,
125
- messages,
126
- ...(nextStep && {
127
- nextStep
128
- })
129
- };
130
- }
131
- }
132
-
133
34
  function getActionFromValues(values, idxResponse) {
134
- var _context2;
35
+ var _context;
135
36
 
136
37
  // Currently support resend actions only
137
- return (0, _find.default)(_context2 = (0, _keys.default)(idxResponse.actions)).call(_context2, action => !!values.resend && (0, _includes.default)(action).call(action, '-resend'));
38
+ return (0, _find.default)(_context = (0, _keys.default)(idxResponse.actions)).call(_context, action => !!values.resend && (0, _includes.default)(action).call(action, '-resend'));
138
39
  }
139
40
 
140
41
  function removeActionFromValues(values) {
141
42
  // Currently support resend actions only
142
- values.resend = undefined;
143
- return values;
43
+ return { ...values,
44
+ resend: undefined
45
+ };
46
+ }
47
+
48
+ function removeActionFromOptions(options, actionName) {
49
+ let actions = options.actions || [];
50
+ actions = (0, _filter.default)(actions).call(actions, entry => {
51
+ if (typeof entry === 'string') {
52
+ return entry !== actionName;
53
+ }
54
+
55
+ return entry.name !== actionName;
56
+ });
57
+ return { ...options,
58
+ actions
59
+ };
144
60
  } // This function is called recursively until it reaches success or cannot be remediated
145
61
 
146
62
 
@@ -171,7 +87,7 @@ async function remediate(idxResponse, values, options) {
171
87
  };
172
88
  }
173
89
 
174
- const remediator = getRemediator(neededToProceed, values, options); // Try actions in idxResponse first
90
+ const remediator = (0, _util.getRemediator)(neededToProceed, values, options); // Try actions in idxResponse first
175
91
 
176
92
  const actionFromValues = getActionFromValues(values, idxResponse);
177
93
  const actionFromOptions = options.actions || [];
@@ -179,17 +95,25 @@ async function remediate(idxResponse, values, options) {
179
95
 
180
96
  if (actions) {
181
97
  for (let action of actions) {
98
+ // Action can either be specified as a string, or as an object with name and optional params
99
+ let params = {};
100
+
101
+ if (typeof action !== 'string') {
102
+ params = action.params || {};
103
+ action = action.name;
104
+ }
105
+
182
106
  let valuesWithoutExecutedAction = removeActionFromValues(values);
183
- let optionsWithoutExecutedAction = { ...options,
184
- actions: (0, _filter.default)(actionFromOptions).call(actionFromOptions, entry => entry !== action)
185
- };
107
+ let optionsWithoutExecutedAction = removeActionFromOptions(options, action);
186
108
 
187
109
  if (typeof idxResponse.actions[action] === 'function') {
188
110
  try {
189
- idxResponse = await idxResponse.actions[action]();
190
- idxResponse.requestDidSucceed = true;
111
+ idxResponse = await idxResponse.actions[action](params);
112
+ idxResponse = { ...idxResponse,
113
+ requestDidSucceed: true
114
+ };
191
115
  } catch (e) {
192
- return handleIdxError(e, remediator);
116
+ return (0, _util.handleIdxError)(e, remediator);
193
117
  }
194
118
 
195
119
  if (action === 'cancel') {
@@ -209,10 +133,12 @@ async function remediate(idxResponse, values, options) {
209
133
 
210
134
  if (remediationAction) {
211
135
  try {
212
- idxResponse = await idxResponse.proceed(action, {});
213
- idxResponse.requestDidSucceed = true;
136
+ idxResponse = await idxResponse.proceed(action, params);
137
+ idxResponse = { ...idxResponse,
138
+ requestDidSucceed: true
139
+ };
214
140
  } catch (e) {
215
- return handleIdxError(e, remediator);
141
+ return (0, _util.handleIdxError)(e, remediator);
216
142
  }
217
143
 
218
144
  return remediate(idxResponse, values, optionsWithoutExecutedAction); // recursive call
@@ -222,16 +148,18 @@ async function remediate(idxResponse, values, options) {
222
148
 
223
149
  if (!remediator) {
224
150
  if (options.step) {
225
- values = (0, _util.filterValuesForRemediation)(idxResponse, values); // include only requested values
151
+ values = (0, _util.filterValuesForRemediation)(idxResponse, options.step, values); // include only requested values
226
152
 
227
153
  try {
228
154
  idxResponse = await idxResponse.proceed(options.step, values);
229
- idxResponse.requestDidSucceed = true;
155
+ idxResponse = { ...idxResponse,
156
+ requestDidSucceed: true
157
+ };
230
158
  return {
231
159
  idxResponse
232
160
  };
233
161
  } catch (e) {
234
- return handleIdxError(e);
162
+ return (0, _util.handleIdxError)(e);
235
163
  }
236
164
  }
237
165
 
@@ -245,23 +173,15 @@ async function remediate(idxResponse, values, options) {
245
173
  No remediation can match current flow, check policy settings in your org.
246
174
  Remediations: [${(0, _reduce.default)(neededToProceed).call(neededToProceed, (acc, curr) => acc ? acc + ' ,' + curr.name : curr.name, '')}]
247
175
  `);
248
- }
249
-
250
- if (messages.length) {
251
- const nextStep = getNextStep(remediator, idxResponse);
252
- return {
253
- idxResponse,
254
- nextStep,
255
- messages
256
- };
257
176
  } // Return next step to the caller
258
177
 
259
178
 
260
179
  if (!remediator.canRemediate()) {
261
- const nextStep = getNextStep(remediator, idxResponse);
180
+ const nextStep = (0, _util.getNextStep)(remediator, idxResponse);
262
181
  return {
263
182
  idxResponse,
264
- nextStep
183
+ nextStep,
184
+ messages: messages.length ? messages : undefined
265
185
  };
266
186
  }
267
187
 
@@ -270,15 +190,19 @@ async function remediate(idxResponse, values, options) {
270
190
 
271
191
  try {
272
192
  idxResponse = await idxResponse.proceed(name, data);
273
- idxResponse.requestDidSucceed = true; // We may want to trim the values bag for the next remediation
193
+ idxResponse = { ...idxResponse,
194
+ requestDidSucceed: true
195
+ }; // We may want to trim the values bag for the next remediation
274
196
  // Let the remediator decide what the values should be (default to current values)
275
197
 
276
198
  values = remediator.getValuesAfterProceed();
277
- delete options.step; // do not re-use the step
199
+ options = { ...options,
200
+ step: undefined
201
+ }; // do not re-use the step
278
202
 
279
203
  return remediate(idxResponse, values, options); // recursive call
280
204
  } catch (e) {
281
- return handleIdxError(e, remediator);
205
+ return (0, _util.handleIdxError)(e, remediator);
282
206
  }
283
207
  }
284
208
  //# sourceMappingURL=remediate.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../lib/idx/remediate.ts"],"names":["getRemediator","idxRemediations","values","options","remediators","remediator","step","remediation","name","T","undefined","remediatorCandidates","isRemeditionInFlow","canRemediate","push","getNextStep","idxResponse","nextStep","context","canSkip","canResend","handleIdxError","e","requestDidSucceed","terminal","messages","getActionFromValues","actions","action","resend","removeActionFromValues","remediate","neededToProceed","interactionCode","flow","actionFromValues","actionFromOptions","valuesWithoutExecutedAction","optionsWithoutExecutedAction","entry","canceled","remediationAction","proceed","AuthSdkError","acc","curr","length","getName","data","getData","getValuesAfterProceed"],"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, max-depth, complexity */\nimport { AuthSdkError } from '../errors';\nimport { Remediator, RemediationValues } from './remediators';\nimport { NextStep, IdxMessage, FlowIdentifier } from './types';\nimport { RemediationFlow } from './flow';\nimport { \n IdxResponse, \n IdxRemediation,\n isIdxResponse, \n} from './types/idx-js';\nimport {\n canResendFn,\n canSkipFn,\n getMessagesFromResponse,\n isTerminalResponse,\n filterValuesForRemediation\n} from './util';\nimport { warn } from '../util';\n\ninterface RemediationResponse {\n idxResponse: IdxResponse;\n nextStep?: NextStep;\n messages?: IdxMessage[];\n terminal?: boolean;\n canceled?: boolean;\n}\nexport interface RemediateOptions {\n remediators?: RemediationFlow;\n actions?: string[];\n flow?: FlowIdentifier;\n step?: string;\n}\n\n// Return first match idxRemediation in allowed remediators\nexport function getRemediator(\n idxRemediations: IdxRemediation[],\n values: RemediationValues,\n options: RemediateOptions,\n): Remediator | undefined {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const remediators = options.remediators!;\n\n let remediator;\n // remediation name specified by caller - fast-track remediator lookup \n if (options.step) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const remediation = idxRemediations.find(({ name }) => name === options.step)!;\n if (remediation) {\n const T = remediation ? remediators[remediation.name] : undefined;\n return T ? new T(remediation, values, options) : undefined;\n } else {\n // step was specified, but remediation was not found. This is unexpected!\n warn(`step \"${options.step}\" did not match any remediations`);\n return;\n }\n }\n\n const remediatorCandidates = [];\n for (let remediation of idxRemediations) {\n const isRemeditionInFlow = Object.keys(remediators as object).includes(remediation.name);\n if (!isRemeditionInFlow) {\n continue;\n }\n\n const T = remediators[remediation.name];\n remediator = new T(remediation, values, options);\n if (remediator.canRemediate()) {\n // found the remediator\n return remediator;\n }\n // remediator cannot handle the current values\n // maybe return for next step\n remediatorCandidates.push(remediator as never); \n }\n \n return remediatorCandidates[0];\n}\n\nfunction getNextStep(\n remediator: Remediator, idxResponse: IdxResponse\n): NextStep {\n const nextStep = remediator.getNextStep(idxResponse.context);\n const canSkip = canSkipFn(idxResponse);\n const canResend = canResendFn(idxResponse);\n return {\n ...nextStep,\n ...(canSkip && {canSkip}),\n ...(canResend && {canResend}),\n };\n}\n\nfunction handleIdxError(e, remediator?: Remediator): RemediationResponse {\n // Handle idx messages\n const idxResponse = isIdxResponse(e) ? e : null;\n if (!idxResponse) {\n // Thrown error terminates the interaction with idx\n throw e;\n }\n idxResponse.requestDidSucceed = false;\n const terminal = isTerminalResponse(idxResponse);\n const messages = getMessagesFromResponse(idxResponse);\n if (terminal) {\n return { idxResponse, terminal, messages };\n } else {\n const nextStep = remediator && getNextStep(remediator, idxResponse);\n return { \n idxResponse,\n messages, \n ...(nextStep && { nextStep }) \n };\n }\n}\n\nfunction getActionFromValues(values, idxResponse: IdxResponse): string | undefined {\n // Currently support resend actions only\n return Object.keys(idxResponse.actions).find(action => !!values.resend && action.includes('-resend'));\n}\n\nfunction removeActionFromValues(values) {\n // Currently support resend actions only\n values.resend = undefined;\n return values;\n}\n\n// This function is called recursively until it reaches success or cannot be remediated\nexport async function remediate(\n idxResponse: IdxResponse,\n values: RemediationValues,\n options: RemediateOptions\n): Promise<RemediationResponse> {\n let { neededToProceed, interactionCode } = idxResponse;\n const { flow } = options;\n\n // If the response contains an interaction code, there is no need to remediate\n if (interactionCode) {\n return { idxResponse };\n }\n\n // Reach to terminal state\n const terminal = isTerminalResponse(idxResponse);\n const messages = getMessagesFromResponse(idxResponse);\n if (terminal) {\n return { idxResponse, terminal, messages };\n }\n\n const remediator = getRemediator(neededToProceed, values, options);\n \n // Try actions in idxResponse first\n const actionFromValues = getActionFromValues(values, idxResponse);\n const actionFromOptions = options.actions || [];\n const actions = [\n ...actionFromOptions,\n ...(actionFromValues && [actionFromValues] || []),\n ];\n if (actions) {\n for (let action of actions) {\n let valuesWithoutExecutedAction = removeActionFromValues(values);\n let optionsWithoutExecutedAction = { ...options, actions: actionFromOptions.filter(entry => entry !== action) };\n if (typeof idxResponse.actions[action] === 'function') {\n try {\n idxResponse = await idxResponse.actions[action]();\n idxResponse.requestDidSucceed = true;\n } catch (e) {\n return handleIdxError(e, remediator);\n }\n if (action === 'cancel') {\n return { idxResponse, canceled: true };\n }\n return remediate(idxResponse, valuesWithoutExecutedAction, optionsWithoutExecutedAction); // recursive call\n }\n\n // search for action in remediation list\n const remediationAction = neededToProceed.find(({ name }) => name === action);\n if (remediationAction) {\n try {\n idxResponse = await idxResponse.proceed(action, {});\n idxResponse.requestDidSucceed = true;\n }\n catch (e) {\n return handleIdxError(e, remediator);\n }\n\n return remediate(idxResponse, values, optionsWithoutExecutedAction); // recursive call\n }\n }\n }\n\n if (!remediator) {\n if (options.step) {\n values = filterValuesForRemediation(idxResponse, values); // include only requested values\n try {\n idxResponse = await idxResponse.proceed(options.step, values);\n idxResponse.requestDidSucceed = true;\n return { idxResponse };\n } catch(e) {\n return handleIdxError(e);\n }\n }\n if (flow === 'default') {\n return { idxResponse };\n }\n throw new AuthSdkError(`\n No remediation can match current flow, check policy settings in your org.\n Remediations: [${neededToProceed.reduce((acc, curr) => acc ? acc + ' ,' + curr.name : curr.name, '')}]\n `);\n }\n\n if (messages.length) {\n const nextStep = getNextStep(remediator, idxResponse);\n return { idxResponse, nextStep, messages };\n }\n\n // Return next step to the caller\n if (!remediator.canRemediate()) {\n const nextStep = getNextStep(remediator, idxResponse);\n return { idxResponse, nextStep };\n }\n\n const name = remediator.getName();\n const data = remediator.getData();\n try {\n idxResponse = await idxResponse.proceed(name, data);\n idxResponse.requestDidSucceed = true;\n // We may want to trim the values bag for the next remediation\n // Let the remediator decide what the values should be (default to current values)\n values = remediator.getValuesAfterProceed();\n delete options.step; // do not re-use the step\n return remediate(idxResponse, values, options); // recursive call\n } catch (e) {\n return handleIdxError(e, remediator);\n }\n}\n"],"file":"remediate.js"}
1
+ {"version":3,"sources":["../../../lib/idx/remediate.ts"],"names":["getActionFromValues","values","idxResponse","actions","action","resend","removeActionFromValues","undefined","removeActionFromOptions","options","actionName","entry","name","remediate","neededToProceed","interactionCode","flow","terminal","messages","remediator","actionFromValues","actionFromOptions","params","valuesWithoutExecutedAction","optionsWithoutExecutedAction","requestDidSucceed","e","canceled","remediationAction","proceed","step","AuthSdkError","acc","curr","canRemediate","nextStep","length","getName","data","getData","getValuesAfterProceed"],"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, max-depth, complexity */\nimport { AuthSdkError } from '../errors';\nimport { RemediationValues } from './remediators';\nimport { FlowIdentifier, RemediationResponse } from './types';\nimport { RemediationFlow } from './flow';\nimport { \n IdxResponse,\n IdxActionParams, \n} from './types/idx-js';\nimport {\n getMessagesFromResponse,\n isTerminalResponse,\n filterValuesForRemediation,\n getRemediator,\n getNextStep,\n handleIdxError\n} from './util';\n\nexport interface RemediateActionWithOptionalParams {\n name: string;\n params?: IdxActionParams;\n}\n\nexport type RemediateAction = string | RemediateActionWithOptionalParams;\nexport interface RemediateOptions {\n remediators?: RemediationFlow;\n actions?: RemediateAction[];\n flow?: FlowIdentifier;\n step?: string;\n shouldProceedWithEmailAuthenticator?: boolean; // will be removed in next major version\n}\n\n\nfunction getActionFromValues(values: RemediationValues, idxResponse: IdxResponse): string | undefined {\n // Currently support resend actions only\n return Object.keys(idxResponse.actions).find(action => !!values.resend && action.includes('-resend'));\n}\n\nfunction removeActionFromValues(values: RemediationValues): RemediationValues {\n // Currently support resend actions only\n return {\n ...values,\n resend: undefined\n };\n}\n\nfunction removeActionFromOptions(options: RemediateOptions, actionName: string): RemediateOptions {\n let actions = options.actions || [];\n actions = actions.filter(entry => {\n if (typeof entry === 'string') {\n return entry !== actionName;\n }\n return entry.name !== actionName;\n });\n\n return { ...options, actions };\n}\n\n// This function is called recursively until it reaches success or cannot be remediated\nexport async function remediate(\n idxResponse: IdxResponse,\n values: RemediationValues,\n options: RemediateOptions\n): Promise<RemediationResponse> {\n let { neededToProceed, interactionCode } = idxResponse;\n const { flow } = options;\n\n // If the response contains an interaction code, there is no need to remediate\n if (interactionCode) {\n return { idxResponse };\n }\n\n // Reach to terminal state\n const terminal = isTerminalResponse(idxResponse);\n const messages = getMessagesFromResponse(idxResponse);\n if (terminal) {\n return { idxResponse, terminal, messages };\n }\n\n const remediator = getRemediator(neededToProceed, values, options);\n\n // Try actions in idxResponse first\n const actionFromValues = getActionFromValues(values, idxResponse);\n const actionFromOptions = options.actions || [];\n const actions = [\n ...actionFromOptions,\n ...(actionFromValues && [actionFromValues] || []),\n ];\n if (actions) {\n for (let action of actions) {\n // Action can either be specified as a string, or as an object with name and optional params\n let params: IdxActionParams = {};\n if (typeof action !== 'string') {\n params = action.params || {};\n action = action.name;\n }\n let valuesWithoutExecutedAction = removeActionFromValues(values);\n let optionsWithoutExecutedAction = removeActionFromOptions(options, action);\n\n if (typeof idxResponse.actions[action] === 'function') {\n try {\n idxResponse = await idxResponse.actions[action](params);\n idxResponse = { ...idxResponse, requestDidSucceed: true };\n } catch (e) {\n return handleIdxError(e, remediator);\n }\n if (action === 'cancel') {\n return { idxResponse, canceled: true };\n }\n return remediate(idxResponse, valuesWithoutExecutedAction, optionsWithoutExecutedAction); // recursive call\n }\n\n // search for action in remediation list\n const remediationAction = neededToProceed.find(({ name }) => name === action);\n if (remediationAction) {\n try {\n idxResponse = await idxResponse.proceed(action, params);\n idxResponse = { ...idxResponse, requestDidSucceed: true };\n }\n catch (e) {\n return handleIdxError(e, remediator);\n }\n\n return remediate(idxResponse, values, optionsWithoutExecutedAction); // recursive call\n }\n }\n }\n\n if (!remediator) {\n if (options.step) {\n values = filterValuesForRemediation(idxResponse, options.step, values); // include only requested values\n try {\n idxResponse = await idxResponse.proceed(options.step, values);\n idxResponse = { ...idxResponse, requestDidSucceed: true };\n return { idxResponse };\n } catch(e) {\n return handleIdxError(e);\n }\n }\n if (flow === 'default') {\n return { idxResponse };\n }\n throw new AuthSdkError(`\n No remediation can match current flow, check policy settings in your org.\n Remediations: [${neededToProceed.reduce((acc, curr) => acc ? acc + ' ,' + curr.name : curr.name, '')}]\n `);\n }\n\n // Return next step to the caller\n if (!remediator.canRemediate()) {\n const nextStep = getNextStep(remediator, idxResponse);\n return {\n idxResponse,\n nextStep,\n messages: messages.length ? messages: undefined\n };\n }\n\n const name = remediator.getName();\n const data = remediator.getData();\n try {\n idxResponse = await idxResponse.proceed(name, data);\n idxResponse = { ...idxResponse, requestDidSucceed: true };\n // We may want to trim the values bag for the next remediation\n // Let the remediator decide what the values should be (default to current values)\n values = remediator.getValuesAfterProceed();\n options = { ...options, step: undefined }; // do not re-use the step\n return remediate(idxResponse, values, options); // recursive call\n } catch (e) {\n return handleIdxError(e, remediator);\n }\n}\n"],"file":"remediate.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../lib/idx/remediators/AuthenticatorEnrollmentData.ts"],"names":["AuthenticatorEnrollmentData","AuthenticatorData","mapAuthenticator","authenticatorData","getAuthenticatorData","authenticatorFromRemediation","remediation","id","form","value","name","methodType","phoneNumber","getInputAuthenticator","type","required","label","mapAuthenticatorDataFromValues","data"],"mappings":";;;;;;;;;;;;AAcA;;AACA;;AAfA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAUO,MAAMA,2BAAN,SAA0CC,oCAA1C,CAA4D;AAKjEC,EAAAA,gBAAgB,GAAG;AAAA;;AACjB,UAAMC,iBAAiB,GAAG,KAAKC,oBAAL,EAA1B;AACA,UAAMC,4BAA4B,GAAG,2CAAgC,KAAKC,WAArC,CAArC;AACA,WAAO;AACLC,MAAAA,EAAE,EAAE,8BAAAF,4BAA4B,CAACG,IAA7B,CAAmCC,KAAnC,iBACI,CAAC;AAAEC,QAAAA;AAAF,OAAD,KAAcA,IAAI,KAAK,IAD3B,EACkCD,KAFjC;AAGLE,MAAAA,UAAU,EAAER,iBAAiB,CAAEQ,UAH1B;AAILC,MAAAA,WAAW,EAAET,iBAAiB,CAAES;AAJ3B,KAAP;AAMD;;AAEDC,EAAAA,qBAAqB,GAAG;AACtB,WAAO,CACL;AAAEH,MAAAA,IAAI,EAAE,YAAR;AAAsBI,MAAAA,IAAI,EAAE,QAA5B;AAAsCC,MAAAA,QAAQ,EAAE;AAAhD,KADK,EAEL;AAAEL,MAAAA,IAAI,EAAE,aAAR;AAAuBI,MAAAA,IAAI,EAAE,QAA7B;AAAuCC,MAAAA,QAAQ,EAAE,IAAjD;AAAuDC,MAAAA,KAAK,EAAE;AAA9D,KAFK,CAAP;AAID;;AAESC,EAAAA,8BAA8B,CAACC,IAAD,EAAQ;AAC9C;AACAA,IAAAA,IAAI,GAAG,MAAMD,8BAAN,CAAqCC,IAArC,CAAP,CAF8C,CAG9C;;AACA,UAAM;AAAEN,MAAAA;AAAF,6BAAkB,IAAlB,CAAN;;AACA,QAAI,CAACM,IAAD,IAAS,CAACN,WAAd,EAA2B;AACzB;AACD;;AAED,WAAO,EACL,IAAIM,IAAI,IAAIA,IAAZ,CADK;AAEL,UAAIN,WAAW,IAAI;AAAEA,QAAAA;AAAF,OAAnB;AAFK,KAAP;AAID;;AApCgE;;;8BAAtDZ,2B,qBACc,+B","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 { AuthenticatorData, AuthenticatorDataValues } from './Base/AuthenticatorData';\nimport { getAuthenticatorFromRemediation } from './util';\n\nexport type AuthenticatorEnrollmentDataValues = AuthenticatorDataValues & {\n phoneNumber?: string;\n resend?: boolean; // resend is not a remediator value - revise when IdxResponse structure is updated\n}\nexport class AuthenticatorEnrollmentData extends AuthenticatorData {\n static remediationName = 'authenticator-enrollment-data';\n\n values!: AuthenticatorEnrollmentDataValues;\n\n mapAuthenticator() {\n const authenticatorData = this.getAuthenticatorData();\n const authenticatorFromRemediation = getAuthenticatorFromRemediation(this.remediation)!;\n return { \n id: authenticatorFromRemediation.form!.value\n .find(({ name }) => name === 'id')!.value,\n methodType: authenticatorData!.methodType,\n phoneNumber: authenticatorData!.phoneNumber,\n };\n }\n\n getInputAuthenticator() {\n return [\n { name: 'methodType', type: 'string', required: true },\n { name: 'phoneNumber', type: 'string', required: true, label: 'Phone Number' },\n ];\n }\n\n protected mapAuthenticatorDataFromValues(data?) {\n // get mapped authenticator from base class\n data = super.mapAuthenticatorDataFromValues(data);\n // add phoneNumber to authenticator if it exists in values\n const { phoneNumber } = this.values;\n if (!data && !phoneNumber) {\n return;\n }\n\n return { \n ...(data && data), \n ...(phoneNumber && { phoneNumber }) \n };\n }\n\n}\n"],"file":"AuthenticatorEnrollmentData.js"}
1
+ {"version":3,"sources":["../../../../lib/idx/remediators/AuthenticatorEnrollmentData.ts"],"names":["AuthenticatorEnrollmentData","AuthenticatorData","mapAuthenticator","authenticatorData","getAuthenticatorData","authenticatorFromRemediation","remediation","id","form","value","name","methodType","phoneNumber","getInputAuthenticator","type","required","label","mapAuthenticatorDataFromValues","data"],"mappings":";;;;;;;;;;;;AAcA;;AACA;;AAfA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAUO,MAAMA,2BAAN,SAA0CC,oCAA1C,CAA+F;AAGpGC,EAAAA,gBAAgB,GAAG;AAAA;;AACjB,UAAMC,iBAAiB,GAAG,KAAKC,oBAAL,EAA1B;AACA,UAAMC,4BAA4B,GAAG,2CAAgC,KAAKC,WAArC,CAArC;AACA,WAAO;AACLC,MAAAA,EAAE,EAAE,8BAAAF,4BAA4B,CAACG,IAA7B,CAAmCC,KAAnC,iBACI,CAAC;AAAEC,QAAAA;AAAF,OAAD,KAAcA,IAAI,KAAK,IAD3B,EACkCD,KAFjC;AAGLE,MAAAA,UAAU,EAAER,iBAAiB,CAAEQ,UAH1B;AAILC,MAAAA,WAAW,EAAET,iBAAiB,CAAES;AAJ3B,KAAP;AAMD;;AAEDC,EAAAA,qBAAqB,GAAG;AACtB,WAAO,CACL;AAAEH,MAAAA,IAAI,EAAE,YAAR;AAAsBI,MAAAA,IAAI,EAAE,QAA5B;AAAsCC,MAAAA,QAAQ,EAAE;AAAhD,KADK,EAEL;AAAEL,MAAAA,IAAI,EAAE,aAAR;AAAuBI,MAAAA,IAAI,EAAE,QAA7B;AAAuCC,MAAAA,QAAQ,EAAE,IAAjD;AAAuDC,MAAAA,KAAK,EAAE;AAA9D,KAFK,CAAP;AAID;;AAESC,EAAAA,8BAA8B,CAACC,IAAD,EAAQ;AAC9C;AACAA,IAAAA,IAAI,GAAG,MAAMD,8BAAN,CAAqCC,IAArC,CAAP,CAF8C,CAG9C;;AACA,UAAM;AAAEN,MAAAA;AAAF,6BAAkB,IAAlB,CAAN;;AACA,QAAI,CAACM,IAAD,IAAS,CAACN,WAAd,EAA2B;AACzB;AACD;;AAED,WAAO,EACL,IAAIM,IAAI,IAAIA,IAAZ,CADK;AAEL,UAAIN,WAAW,IAAI;AAAEA,QAAAA;AAAF,OAAnB;AAFK,KAAP;AAID;;AAlCmG;;;8BAAzFZ,2B,qBACc,+B","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 { AuthenticatorData, AuthenticatorDataValues } from './Base/AuthenticatorData';\nimport { getAuthenticatorFromRemediation } from './util';\n\nexport type AuthenticatorEnrollmentDataValues = AuthenticatorDataValues & {\n phoneNumber?: string;\n resend?: boolean; // resend is not a remediator value - revise when IdxResponse structure is updated\n}\nexport class AuthenticatorEnrollmentData extends AuthenticatorData<AuthenticatorEnrollmentDataValues> {\n static remediationName = 'authenticator-enrollment-data';\n\n mapAuthenticator() {\n const authenticatorData = this.getAuthenticatorData();\n const authenticatorFromRemediation = getAuthenticatorFromRemediation(this.remediation)!;\n return { \n id: authenticatorFromRemediation.form!.value\n .find(({ name }) => name === 'id')!.value,\n methodType: authenticatorData!.methodType,\n phoneNumber: authenticatorData!.phoneNumber,\n };\n }\n\n getInputAuthenticator() {\n return [\n { name: 'methodType', type: 'string', required: true },\n { name: 'phoneNumber', type: 'string', required: true, label: 'Phone Number' },\n ];\n }\n\n protected mapAuthenticatorDataFromValues(data?) {\n // get mapped authenticator from base class\n data = super.mapAuthenticatorDataFromValues(data);\n // add phoneNumber to authenticator if it exists in values\n const { phoneNumber } = this.values;\n if (!data && !phoneNumber) {\n return;\n }\n\n return { \n ...(data && data), \n ...(phoneNumber && { phoneNumber }) \n };\n }\n\n}\n"],"file":"AuthenticatorEnrollmentData.js"}
@@ -34,15 +34,16 @@ var _AuthenticatorData = require("./Base/AuthenticatorData");
34
34
  * See the License for the specific language governing permissions and limitations under the License.
35
35
  */
36
36
  class AuthenticatorVerificationData extends _AuthenticatorData.AuthenticatorData {
37
- constructor(remediation, values = {}) {
38
- super(remediation, values); // TODO: extend this feature to all authenticators
37
+ // will be removed in next major version
38
+ constructor(remediation, values = {}, options = {}) {
39
+ super(remediation, values); // will be removed in next major version
39
40
 
40
- this.shouldProceedWithEmailAuthenticator = this.authenticator.methods.length === 1 && this.authenticator.methods[0].type === 'email';
41
+ this.shouldProceedWithEmailAuthenticator = options.shouldProceedWithEmailAuthenticator !== false && this.authenticator.methods.length === 1 && this.authenticator.methods[0].type === 'email';
41
42
  }
42
43
 
43
44
  canRemediate() {
44
- // auto proceed if there is only one method
45
- if (this.shouldProceedWithEmailAuthenticator) {
45
+ // auto proceed if there is only one method (will be removed in next major version)
46
+ if (this.shouldProceedWithEmailAuthenticator !== false) {
46
47
  return true;
47
48
  }
48
49
 
@@ -51,7 +52,7 @@ class AuthenticatorVerificationData extends _AuthenticatorData.AuthenticatorData
51
52
 
52
53
  mapAuthenticator() {
53
54
  // auto proceed with the only methodType option
54
- if (this.shouldProceedWithEmailAuthenticator) {
55
+ if (this.shouldProceedWithEmailAuthenticator !== false) {
55
56
  var _authenticatorFromRem, _context;
56
57
 
57
58
  const authenticatorFromRemediation = this.getAuthenticatorFromRemediation();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../lib/idx/remediators/AuthenticatorVerificationData.ts"],"names":["AuthenticatorVerificationData","AuthenticatorData","constructor","remediation","values","shouldProceedWithEmailAuthenticator","authenticator","methods","length","type","canRemediate","mapAuthenticator","authenticatorFromRemediation","getAuthenticatorFromRemediation","form","value","acc","curr","name","options","AuthSdkError","getAuthenticatorData","getInputAuthenticator","methodType","required","inputs","getValuesAfterProceed","trimmedValues","valueKey"],"mappings":";;;;;;;;;;;;;;;;;;AAcA;;AACA;;AAfA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AASO,MAAMA,6BAAN,SAA4CC,oCAA5C,CAA8D;AAMnEC,EAAAA,WAAW,CAACC,WAAD,EAA8BC,MAA+B,GAAG,EAAhE,EAAoE;AAC7E,UAAMD,WAAN,EAAmBC,MAAnB,EAD6E,CAG7E;;AACA,SAAKC,mCAAL,GAA2C,KAAKC,aAAL,CAAmBC,OAAnB,CAA2BC,MAA3B,KAAsC,CAAtC,IACtC,KAAKF,aAAL,CAAmBC,OAAnB,CAA2B,CAA3B,EAA8BE,IAA9B,KAAuC,OAD5C;AAED;;AAEDC,EAAAA,YAAY,GAAG;AACb;AACA,QAAI,KAAKL,mCAAT,EAA8C;AAC5C,aAAO,IAAP;AACD;;AACD,WAAO,MAAMK,YAAN,EAAP;AACD;;AAEDC,EAAAA,gBAAgB,GAAG;AACjB;AACA,QAAI,KAAKN,mCAAT,EAA8C;AAAA;;AAC5C,YAAMO,4BAA4B,GAAG,KAAKC,+BAAL,EAArC;AACA,sCAAOD,4BAA4B,CAACE,IAApC,0DAAO,sDAAmCC,KAAnC,iBAAgD,CAACC,GAAD,EAAMC,IAAN,KAAe;AACpE,YAAIA,IAAI,CAACF,KAAT,EAAgB;AACdC,UAAAA,GAAG,CAACC,IAAI,CAACC,IAAN,CAAH,GAAiBD,IAAI,CAACF,KAAtB;AACD,SAFD,MAEO,IAAIE,IAAI,CAACE,OAAT,EAAkB;AACvBH,UAAAA,GAAG,CAACC,IAAI,CAACC,IAAN,CAAH,GAAiBD,IAAI,CAACE,OAAL,CAAc,CAAd,EAAiBJ,KAAlC;AACD,SAFM,MAEA;AACL,gBAAM,IAAIK,oBAAJ,CAAkB,wCAAuCH,IAAK,EAA9D,CAAN;AACD;;AACD,eAAOD,GAAP;AACD,OATM,EASJ,EATI,CAAP;AAUD;;AAED,WAAO,KAAKK,oBAAL,EAAP;AACD;;AAEDC,EAAAA,qBAAqB,GAAG;AAAA;;AACtB,UAAMhB,aAAa,GAAG,KAAKO,+BAAL,EAAtB;AACA,UAAMU,UAAU,GAAG,+BAAAjB,aAAa,CAACQ,IAAd,CAAoBC,KAApB,kBAA+B,CAAC;AAAEG,MAAAA;AAAF,KAAD,KAAcA,IAAI,KAAK,YAAtD,CAAnB,CAFsB,CAGtB;;AACA,QAAIK,UAAU,IAAIA,UAAU,CAACJ,OAA7B,EAAsC;AACpC,aAAO;AAAED,QAAAA,IAAI,EAAE,YAAR;AAAsBT,QAAAA,IAAI,EAAE,QAA5B;AAAsCe,QAAAA,QAAQ,EAAE;AAAhD,OAAP;AACD,KANqB,CAOtB;;;AACA,UAAMC,MAAM,GAAG,CAAC,GAAGnB,aAAa,CAACQ,IAAd,CAAoBC,KAAxB,CAAf;AACA,WAAOU,MAAP;AACD;;AAEDC,EAAAA,qBAAqB,GAAwC;AAAA;;AAC3D,SAAKtB,MAAL,GAAc,MAAMsB,qBAAN,EAAd;AACA,QAAIC,aAAa,GAAG,yEAAY,IAAZ,oBAAgCC,QAAQ,IAAIA,QAAQ,KAAK,eAAzD,CAApB;AACA,WAAO,qBAAAD,aAAa,MAAb,CAAAA,aAAa,EAAQ,CAACvB,MAAD,EAASwB,QAAT,MAAuB,EAAC,GAAGxB,MAAJ;AAAY,OAACwB,QAAD,GAAY,2BAAYA,QAAZ;AAAxB,KAAvB,CAAR,EAAgF,EAAhF,CAApB;AACD;;AAzDkE;;;8BAAxD5B,6B,qBACc,iC","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';\nimport { AuthenticatorData, AuthenticatorDataValues } from './Base/AuthenticatorData';\nimport { IdxRemediation } from '../types/idx-js';\n\nexport type AuthenticatorVerificationDataValues = AuthenticatorDataValues;\n\nexport class AuthenticatorVerificationData extends AuthenticatorData {\n static remediationName = 'authenticator-verification-data';\n\n values!: AuthenticatorVerificationDataValues;\n shouldProceedWithEmailAuthenticator: boolean;\n\n constructor(remediation: IdxRemediation, values: AuthenticatorDataValues = {}) {\n super(remediation, values);\n\n // TODO: extend this feature to all authenticators\n this.shouldProceedWithEmailAuthenticator = this.authenticator.methods.length === 1 \n && this.authenticator.methods[0].type === 'email';\n }\n\n canRemediate() {\n // auto proceed if there is only one method\n if (this.shouldProceedWithEmailAuthenticator) {\n return true;\n }\n return super.canRemediate();\n }\n\n mapAuthenticator() {\n // auto proceed with the only methodType option\n if (this.shouldProceedWithEmailAuthenticator) {\n const authenticatorFromRemediation = this.getAuthenticatorFromRemediation();\n return authenticatorFromRemediation.form?.value.reduce((acc, curr) => {\n if (curr.value) {\n acc[curr.name] = curr.value;\n } else if (curr.options) {\n acc[curr.name] = curr.options![0].value;\n } else {\n throw new AuthSdkError(`Unsupported authenticator data type: ${curr}`);\n }\n return acc;\n }, {});\n }\n\n return this.getAuthenticatorData();\n }\n\n getInputAuthenticator() {\n const authenticator = this.getAuthenticatorFromRemediation();\n const methodType = authenticator.form!.value.find(({ name }) => name === 'methodType');\n // if has methodType in form, let user select the methodType\n if (methodType && methodType.options) {\n return { name: 'methodType', type: 'string', required: true };\n }\n // no methodType, then return form values\n const inputs = [...authenticator.form!.value];\n return inputs;\n }\n\n getValuesAfterProceed(): AuthenticatorVerificationDataValues {\n this.values = super.getValuesAfterProceed();\n let trimmedValues = Object.keys(this.values).filter(valueKey => valueKey !== 'authenticator');\n return trimmedValues.reduce((values, valueKey) => ({...values, [valueKey]: this.values[valueKey]}), {});\n }\n}\n"],"file":"AuthenticatorVerificationData.js"}
1
+ {"version":3,"sources":["../../../../lib/idx/remediators/AuthenticatorVerificationData.ts"],"names":["AuthenticatorVerificationData","AuthenticatorData","constructor","remediation","values","options","shouldProceedWithEmailAuthenticator","authenticator","methods","length","type","canRemediate","mapAuthenticator","authenticatorFromRemediation","getAuthenticatorFromRemediation","form","value","acc","curr","name","AuthSdkError","getAuthenticatorData","getInputAuthenticator","methodType","required","inputs","getValuesAfterProceed","trimmedValues","valueKey"],"mappings":";;;;;;;;;;;;;;;;;;AAcA;;AACA;;AAfA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAUO,MAAMA,6BAAN,SAA4CC,oCAA5C,CAAmG;AAG1D;AAE9CC,EAAAA,WAAW,CAACC,WAAD,EAA8BC,MAA+B,GAAG,EAAhE,EAAoEC,OAAyB,GAAG,EAAhG,EAAoG;AAC7G,UAAMF,WAAN,EAAmBC,MAAnB,EAD6G,CAG7G;;AACA,SAAKE,mCAAL,GAA2CD,OAAO,CAACC,mCAAR,KAAgD,KAAhD,IACtC,KAAKC,aAAL,CAAmBC,OAAnB,CAA2BC,MAA3B,KAAsC,CADA,IAEtC,KAAKF,aAAL,CAAmBC,OAAnB,CAA2B,CAA3B,EAA8BE,IAA9B,KAAuC,OAF5C;AAGD;;AAEDC,EAAAA,YAAY,GAAG;AACb;AACA,QAAI,KAAKL,mCAAL,KAA6C,KAAjD,EAAwD;AACtD,aAAO,IAAP;AACD;;AACD,WAAO,MAAMK,YAAN,EAAP;AACD;;AAEDC,EAAAA,gBAAgB,GAAG;AACjB;AACA,QAAI,KAAKN,mCAAL,KAA6C,KAAjD,EAAwD;AAAA;;AACtD,YAAMO,4BAA4B,GAAG,KAAKC,+BAAL,EAArC;AACA,sCAAOD,4BAA4B,CAACE,IAApC,0DAAO,sDAAmCC,KAAnC,iBAAgD,CAACC,GAAD,EAAMC,IAAN,KAAe;AACpE,YAAIA,IAAI,CAACF,KAAT,EAAgB;AACdC,UAAAA,GAAG,CAACC,IAAI,CAACC,IAAN,CAAH,GAAiBD,IAAI,CAACF,KAAtB;AACD,SAFD,MAEO,IAAIE,IAAI,CAACb,OAAT,EAAkB;AACvBY,UAAAA,GAAG,CAACC,IAAI,CAACC,IAAN,CAAH,GAAiBD,IAAI,CAACb,OAAL,CAAc,CAAd,EAAiBW,KAAlC;AACD,SAFM,MAEA;AACL,gBAAM,IAAII,oBAAJ,CAAkB,wCAAuCF,IAAK,EAA9D,CAAN;AACD;;AACD,eAAOD,GAAP;AACD,OATM,EASJ,EATI,CAAP;AAUD;;AAED,WAAO,KAAKI,oBAAL,EAAP;AACD;;AAEDC,EAAAA,qBAAqB,GAAG;AAAA;;AACtB,UAAMf,aAAa,GAAG,KAAKO,+BAAL,EAAtB;AACA,UAAMS,UAAU,GAAG,+BAAAhB,aAAa,CAACQ,IAAd,CAAoBC,KAApB,kBAA+B,CAAC;AAAEG,MAAAA;AAAF,KAAD,KAAcA,IAAI,KAAK,YAAtD,CAAnB,CAFsB,CAGtB;;AACA,QAAII,UAAU,IAAIA,UAAU,CAAClB,OAA7B,EAAsC;AACpC,aAAO;AAAEc,QAAAA,IAAI,EAAE,YAAR;AAAsBT,QAAAA,IAAI,EAAE,QAA5B;AAAsCc,QAAAA,QAAQ,EAAE;AAAhD,OAAP;AACD,KANqB,CAOtB;;;AACA,UAAMC,MAAM,GAAG,CAAC,GAAGlB,aAAa,CAACQ,IAAd,CAAoBC,KAAxB,CAAf;AACA,WAAOS,MAAP;AACD;;AAEDC,EAAAA,qBAAqB,GAAwC;AAAA;;AAC3D,SAAKtB,MAAL,GAAc,MAAMsB,qBAAN,EAAd;AACA,QAAIC,aAAa,GAAG,yEAAY,IAAZ,oBAAgCC,QAAQ,IAAIA,QAAQ,KAAK,eAAzD,CAApB;AACA,WAAO,qBAAAD,aAAa,MAAb,CAAAA,aAAa,EAAQ,CAACvB,MAAD,EAASwB,QAAT,MAAuB,EAAC,GAAGxB,MAAJ;AAAY,OAACwB,QAAD,GAAY,2BAAYA,QAAZ;AAAxB,KAAvB,CAAR,EAAgF,EAAhF,CAApB;AACD;;AAzDuG;;;8BAA7F5B,6B,qBACc,iC","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';\nimport { AuthenticatorData, AuthenticatorDataValues } from './Base/AuthenticatorData';\nimport { IdxRemediation } from '../types/idx-js';\nimport { RemediateOptions } from '../remediate';\n\nexport type AuthenticatorVerificationDataValues = AuthenticatorDataValues;\n\nexport class AuthenticatorVerificationData extends AuthenticatorData<AuthenticatorVerificationDataValues> {\n static remediationName = 'authenticator-verification-data';\n\n shouldProceedWithEmailAuthenticator: boolean; // will be removed in next major version\n\n constructor(remediation: IdxRemediation, values: AuthenticatorDataValues = {}, options: RemediateOptions = {}) {\n super(remediation, values);\n\n // will be removed in next major version\n this.shouldProceedWithEmailAuthenticator = options.shouldProceedWithEmailAuthenticator !== false\n && this.authenticator.methods.length === 1 \n && this.authenticator.methods[0].type === 'email';\n }\n\n canRemediate() {\n // auto proceed if there is only one method (will be removed in next major version)\n if (this.shouldProceedWithEmailAuthenticator !== false) {\n return true;\n }\n return super.canRemediate();\n }\n\n mapAuthenticator() {\n // auto proceed with the only methodType option\n if (this.shouldProceedWithEmailAuthenticator !== false) {\n const authenticatorFromRemediation = this.getAuthenticatorFromRemediation();\n return authenticatorFromRemediation.form?.value.reduce((acc, curr) => {\n if (curr.value) {\n acc[curr.name] = curr.value;\n } else if (curr.options) {\n acc[curr.name] = curr.options![0].value;\n } else {\n throw new AuthSdkError(`Unsupported authenticator data type: ${curr}`);\n }\n return acc;\n }, {});\n }\n\n return this.getAuthenticatorData();\n }\n\n getInputAuthenticator() {\n const authenticator = this.getAuthenticatorFromRemediation();\n const methodType = authenticator.form!.value.find(({ name }) => name === 'methodType');\n // if has methodType in form, let user select the methodType\n if (methodType && methodType.options) {\n return { name: 'methodType', type: 'string', required: true };\n }\n // no methodType, then return form values\n const inputs = [...authenticator.form!.value];\n return inputs;\n }\n\n getValuesAfterProceed(): AuthenticatorVerificationDataValues {\n this.values = super.getValuesAfterProceed();\n let trimmedValues = Object.keys(this.values).filter(valueKey => valueKey !== 'authenticator');\n return trimmedValues.reduce((values, valueKey) => ({...values, [valueKey]: this.values[valueKey]}), {});\n }\n}\n"],"file":"AuthenticatorVerificationData.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../lib/idx/remediators/Base/AuthenticatorData.ts"],"names":["AuthenticatorData","Remediator","constructor","remediation","values","authenticator","getAuthenticator","formatAuthenticatorData","authenticatorData","getAuthenticatorData","authenticatorsData","data","mapAuthenticatorDataFromValues","push","canRemediate","some","getNextStep","common","options","getMethodTypes","methodType","id","enrollmentId","getAuthenticatorFromRemediation","value","name","form","getValuesAfterProceed"],"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 { Remediator, RemediationValues } from './Remediator';\nimport { IdxRemediationValue, IdxOption, IdxRemediation, IdxAuthenticator } from '../../types/idx-js';\nimport { isAuthenticator } from '../../types';\nimport { compareAuthenticators } from '../../authenticator/util';\n\nexport type AuthenticatorDataValues = RemediationValues & {\n methodType?: string;\n};\n\n// Base class - DO NOT expose static remediationName\nexport class AuthenticatorData extends Remediator {\n values!: AuthenticatorDataValues;\n authenticator: IdxAuthenticator;\n\n constructor(remediation: IdxRemediation, values: AuthenticatorDataValues = {}) {\n super(remediation, values);\n\n // set before other data calculation\n this.authenticator = this.getAuthenticator()!;\n\n this.formatAuthenticatorData();\n }\n\n protected formatAuthenticatorData() {\n const authenticatorData = this.getAuthenticatorData();\n if (authenticatorData) {\n this.values.authenticatorsData = this.values.authenticatorsData!.map(data => {\n if (compareAuthenticators(this.authenticator, data)) {\n return this.mapAuthenticatorDataFromValues(data);\n }\n return data;\n });\n } else {\n const data = this.mapAuthenticatorDataFromValues();\n if (data) {\n this.values.authenticatorsData!.push(data);\n }\n }\n }\n\n protected getAuthenticatorData() {\n return this.values.authenticatorsData!\n .find((data) => compareAuthenticators(this.authenticator, data));\n }\n\n canRemediate() {\n return this.values.authenticatorsData!\n .some(data => compareAuthenticators(this.authenticator, data));\n }\n\n getNextStep() {\n const common = super.getNextStep();\n const options = this.getMethodTypes();\n return { \n ...common, \n ...(options && { options }) \n };\n }\n\n protected mapAuthenticatorDataFromValues(authenticatorData?) {\n // add methodType to authenticatorData if it exists in values\n let { methodType, authenticator } = this.values;\n if (!methodType && isAuthenticator(authenticator)) {\n methodType = authenticator?.methodType;\n }\n \n const { id, enrollmentId } = this.authenticator;\n const data = { \n id,\n enrollmentId,\n ...(authenticatorData && authenticatorData),\n ...(methodType && { methodType }) \n };\n\n return data.methodType ? data : null;\n }\n\n protected getAuthenticatorFromRemediation(): IdxRemediationValue {\n const authenticator = this.remediation.value!\n .find(({ name }) => name === 'authenticator') as IdxRemediationValue;\n return authenticator;\n }\n\n private getMethodTypes(): IdxOption[] {\n const authenticator: IdxRemediationValue = this.getAuthenticatorFromRemediation();\n return authenticator.form!.value.find(({ name }) => name === 'methodType')?.options as IdxOption[];\n }\n\n getValuesAfterProceed(): RemediationValues {\n this.values = super.getValuesAfterProceed();\n // remove used authenticatorData\n const authenticatorsData = this.values.authenticatorsData!\n .filter(data => compareAuthenticators(this.authenticator, data) !== true);\n return { ...this.values, authenticatorsData };\n }\n}\n"],"file":"AuthenticatorData.js"}
1
+ {"version":3,"sources":["../../../../../lib/idx/remediators/Base/AuthenticatorData.ts"],"names":["AuthenticatorData","Remediator","constructor","remediation","values","authenticator","getAuthenticator","formatAuthenticatorData","authenticatorData","getAuthenticatorData","authenticatorsData","data","mapAuthenticatorDataFromValues","push","canRemediate","some","getNextStep","common","options","getMethodTypes","methodType","id","enrollmentId","getAuthenticatorFromRemediation","value","name","form","getValuesAfterProceed"],"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 { Remediator, RemediationValues } from './Remediator';\nimport { IdxRemediationValue, IdxOption, IdxRemediation, IdxAuthenticator } from '../../types/idx-js';\nimport { isAuthenticator } from '../../types';\nimport { compareAuthenticators } from '../../authenticator/util';\n\nexport type AuthenticatorDataValues = RemediationValues & {\n methodType?: string;\n};\n\n// Base class - DO NOT expose static remediationName\nexport class AuthenticatorData<T extends AuthenticatorDataValues = AuthenticatorDataValues> extends Remediator<T> {\n authenticator: IdxAuthenticator;\n\n constructor(remediation: IdxRemediation, values: T = {} as T) {\n super(remediation, values);\n\n // set before other data calculation\n this.authenticator = this.getAuthenticator()!;\n\n this.formatAuthenticatorData();\n }\n\n protected formatAuthenticatorData() {\n const authenticatorData = this.getAuthenticatorData();\n if (authenticatorData) {\n this.values.authenticatorsData = this.values.authenticatorsData!.map(data => {\n if (compareAuthenticators(this.authenticator, data)) {\n return this.mapAuthenticatorDataFromValues(data);\n }\n return data;\n });\n } else {\n const data = this.mapAuthenticatorDataFromValues();\n if (data) {\n this.values.authenticatorsData!.push(data);\n }\n }\n }\n\n protected getAuthenticatorData() {\n return this.values.authenticatorsData!\n .find((data) => compareAuthenticators(this.authenticator, data));\n }\n\n canRemediate() {\n return this.values.authenticatorsData!\n .some(data => compareAuthenticators(this.authenticator, data));\n }\n\n getNextStep() {\n const common = super.getNextStep();\n const options = this.getMethodTypes();\n return { \n ...common, \n ...(options && { options }) \n };\n }\n\n protected mapAuthenticatorDataFromValues(authenticatorData?) {\n // add methodType to authenticatorData if it exists in values\n let { methodType, authenticator } = this.values;\n if (!methodType && isAuthenticator(authenticator)) {\n methodType = authenticator?.methodType;\n }\n \n const { id, enrollmentId } = this.authenticator;\n const data = { \n id,\n enrollmentId,\n ...(authenticatorData && authenticatorData),\n ...(methodType && { methodType }) \n };\n\n return data.methodType ? data : null;\n }\n\n protected getAuthenticatorFromRemediation(): IdxRemediationValue {\n const authenticator = this.remediation.value!\n .find(({ name }) => name === 'authenticator') as IdxRemediationValue;\n return authenticator;\n }\n\n private getMethodTypes(): IdxOption[] {\n const authenticator: IdxRemediationValue = this.getAuthenticatorFromRemediation();\n return authenticator.form!.value.find(({ name }) => name === 'methodType')?.options as IdxOption[];\n }\n\n getValuesAfterProceed(): T {\n this.values = super.getValuesAfterProceed();\n // remove used authenticatorData\n const authenticatorsData = this.values.authenticatorsData!\n .filter(data => compareAuthenticators(this.authenticator, data) !== true);\n return { ...this.values, authenticatorsData };\n }\n}\n"],"file":"AuthenticatorData.js"}
@@ -176,7 +176,8 @@ class Remediator {
176
176
  let {
177
177
  name,
178
178
  type,
179
- visible
179
+ visible,
180
+ messages
180
181
  } = inputFromRemediation;
181
182
 
182
183
  if (visible === false) {
@@ -215,6 +216,11 @@ class Remediator {
215
216
  if (Array.isArray(input)) {
216
217
  input.forEach(i => inputs.push(i));
217
218
  } else {
219
+ // guarantees field-level messages are passed back
220
+ if (messages) {
221
+ input.messages = messages;
222
+ }
223
+
218
224
  inputs.push(input);
219
225
  }
220
226
  });
@@ -241,7 +247,11 @@ class Remediator {
241
247
 
242
248
 
243
249
  getValuesAfterProceed() {
244
- const inputs = this.getInputs();
250
+ const inputsFromRemediation = this.remediation.value || []; // "raw" inputs from server response
251
+
252
+ const inputsFromRemediator = this.getInputs(); // "aliased" inputs from SDK remediator
253
+
254
+ const inputs = [...inputsFromRemediation, ...inputsFromRemediator]; // scrub all values related to this remediation
245
255
 
246
256
  for (const input of inputs) {
247
257
  delete (0, _values.default)(this)[input.name];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../lib/idx/remediators/Base/Remediator.ts"],"names":["Remediator","constructor","remediation","values","options","formatAuthenticators","authenticators","authenticator","hasAuthenticatorInList","some","existing","push","authenticatorsData","acc","length","getName","name","canRemediate","required","needed","key","hasData","getData","allValues","res","data","val","value","entry","i","getNextStep","_context","inputs","getInputs","getAuthenticator","type","inputsFromRemediation","forEach","inputFromRemediation","input","visible","alias","aliases","Array","isArray","getMessages","form","messages","field","getValuesAfterProceed","relatesTo","authenticatorFromRemediation","id","enrollmentId"],"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 complexity */\nimport { NextStep, IdxMessage, Authenticator, Input, IdxOptions, RemediateOptions } from '../../types';\nimport { IdxAuthenticator, IdxRemediation, IdxContext } from '../../types/idx-js';\nimport { getAllValues, getRequiredValues, titleCase, getAuthenticatorFromRemediation } from '../util';\nimport { formatAuthenticator, compareAuthenticators } from '../../authenticator/util';\n\n// A map from IDX data values (server spec) to RemediationValues (client spec)\nexport type IdxToRemediationValueMap = Record<string, string[]>;\n\nexport interface RemediationValues extends IdxOptions {\n stateHandle?: string;\n authenticators?: (Authenticator | string)[];\n authenticator?: string | Authenticator;\n authenticatorsData?: Authenticator[];\n}\n\n// Base class - DO NOT expose static remediationName\nexport class Remediator {\n static remediationName: string;\n\n remediation: IdxRemediation;\n values: RemediationValues;\n options: RemediateOptions;\n map?: IdxToRemediationValueMap;\n\n constructor(remediation: IdxRemediation, values: RemediationValues = {}, options: RemediateOptions = {}) {\n // assign fields to the instance\n this.values = { ...values };\n this.options = { ...options };\n this.formatAuthenticators();\n this.remediation = remediation;\n }\n\n private formatAuthenticators() {\n this.values.authenticators = (this.values.authenticators || []) as Authenticator[];\n\n // ensure authenticators are in the correct format\n this.values.authenticators = this.values.authenticators.map(authenticator => {\n return formatAuthenticator(authenticator);\n });\n\n // add authenticator (if any) to \"authenticators\"\n if (this.values.authenticator) {\n const authenticator = formatAuthenticator(this.values.authenticator);\n const hasAuthenticatorInList = this.values.authenticators.some(existing => {\n return compareAuthenticators(authenticator, existing);\n });\n if (!hasAuthenticatorInList) {\n this.values.authenticators.push(authenticator);\n }\n }\n\n // save non-key meta to \"authenticatorsData\" field\n // authenticators will be removed after selection to avoid select-authenticator loop\n this.values.authenticatorsData = this.values.authenticators.reduce((acc, authenticator) => {\n if (typeof authenticator === 'object' && Object.keys(authenticator).length > 1) {\n // save authenticator meta into authenticator data\n acc.push(authenticator);\n }\n return acc;\n }, this.values.authenticatorsData || []);\n }\n\n getName(): string {\n return this.remediation.name;\n }\n\n // Override this method to provide custom check\n /* eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars */\n canRemediate(): boolean {\n const required = getRequiredValues(this.remediation);\n const needed = required!.find((key) => !this.hasData(key));\n if (needed) {\n return false; // missing data for a required field\n }\n return true; // all required fields have available data\n }\n\n // returns an object for the entire remediation form, or just a part\n getData(key?: string) {\n\n if (!key) {\n let allValues = getAllValues(this.remediation);\n let res = allValues!.reduce((data, key) => {\n data[key] = this.getData(key); // recursive\n return data;\n }, {});\n return res;\n }\n\n // Map value by \"map${Property}\" function in each subClass\n if (typeof this[`map${titleCase(key)}`] === 'function') {\n const val = this[`map${titleCase(key)}`](\n this.remediation.value!.find(({name}) => name === key)\n );\n if (val) {\n return val;\n }\n }\n\n // If a map is defined for this key, return the first aliased property that returns a truthy value\n if (this.map && this.map[key]) {\n const entry = this.map[key];\n for (let i = 0; i < entry.length; i++) {\n let val = this.values[entry[i]];\n if (val) {\n return val;\n }\n }\n }\n\n // fallback: return the value by key\n return this.values[key];\n }\n\n hasData(\n key: string // idx name\n ): boolean \n {\n // no attempt to format, we want simple true/false\n return !!this.getData(key);\n }\n\n getNextStep(_context?: IdxContext): NextStep {\n const name = this.getName();\n const inputs = this.getInputs();\n const authenticator = this.getAuthenticator();\n // TODO: remove type field in the next major version change\n // https://oktainc.atlassian.net/browse/OKTA-431749\n const type = authenticator?.type;\n return { \n name, \n inputs, \n ...(type && { type }),\n ...(authenticator && { authenticator }),\n };\n }\n\n // Get inputs for the next step\n private getInputs(): Input[] {\n const inputs: Input[] = [];\n const inputsFromRemediation = this.remediation.value || [];\n inputsFromRemediation.forEach(inputFromRemediation => {\n let input;\n let { name, type, visible } = inputFromRemediation;\n if (visible === false) {\n return; // Filter out invisible inputs, like stateHandle\n }\n if (typeof this[`getInput${titleCase(name)}`] === 'function') {\n input = this[`getInput${titleCase(name)}`](inputFromRemediation);\n } else if (type !== 'object') {\n // handle general primitive types\n let alias;\n const aliases = (this.map ? this.map[name] : null) || [];\n if (aliases.length === 1) {\n alias = aliases[0];\n } else {\n // try find key from values\n alias = aliases.find(name => Object.keys(this.values).includes(name));\n }\n if (alias) {\n input = { ...inputFromRemediation, name: alias };\n }\n }\n if (!input) {\n input = inputFromRemediation;\n }\n if (Array.isArray(input)) {\n input.forEach(i => inputs.push(i));\n } else {\n inputs.push(input);\n }\n });\n return inputs;\n }\n\n static getMessages(remediation: IdxRemediation): IdxMessage[] | undefined {\n if (!remediation.value) {\n return;\n }\n return remediation.value[0]?.form?.value.reduce((messages: IdxMessage[], field) => {\n if (field.messages) {\n messages = [...messages, ...field.messages.value];\n }\n return messages;\n }, []);\n }\n\n // Prepare values for the next remediation\n // In general, remove used values from inputs for the current remediation\n // Override this method if special cases need be handled\n getValuesAfterProceed(): RemediationValues {\n const inputs = this.getInputs();\n for (const input of inputs) {\n delete this.values[input.name];\n }\n return this.values;\n }\n\n protected getAuthenticator(): IdxAuthenticator | undefined {\n // relatesTo value may be an authenticator or an authenticatorEnrollment\n const relatesTo = this.remediation.relatesTo?.value;\n if (!relatesTo) {\n return;\n }\n\n const authenticatorFromRemediation = getAuthenticatorFromRemediation(this.remediation);\n if (!authenticatorFromRemediation) {\n // Hopefully value is an authenticator\n return relatesTo;\n }\n\n // If relatesTo is an authenticatorEnrollment, the id is actually the enrollmentId\n // Let's get the correct authenticator id from the form value\n const id = authenticatorFromRemediation.form!.value\n .find(({ name }) => name === 'id')!.value as string;\n const enrollmentId = authenticatorFromRemediation.form!.value\n .find(({ name }) => name === 'enrollmentId')?.value as string;\n\n return {\n ...relatesTo,\n id,\n enrollmentId\n };\n }\n}\n"],"file":"Remediator.js"}
1
+ {"version":3,"sources":["../../../../../lib/idx/remediators/Base/Remediator.ts"],"names":["Remediator","constructor","remediation","values","options","formatAuthenticators","authenticators","authenticator","hasAuthenticatorInList","some","existing","push","authenticatorsData","acc","length","getName","name","canRemediate","required","needed","key","hasData","getData","allValues","res","data","val","value","entry","i","getNextStep","_context","inputs","getInputs","getAuthenticator","type","inputsFromRemediation","forEach","inputFromRemediation","input","visible","messages","alias","aliases","Array","isArray","getMessages","form","field","getValuesAfterProceed","inputsFromRemediator","relatesTo","authenticatorFromRemediation","id","enrollmentId"],"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 complexity */\nimport { NextStep, IdxMessage, Authenticator, Input, IdxOptions, RemediateOptions } from '../../types';\nimport { IdxAuthenticator, IdxRemediation, IdxContext } from '../../types/idx-js';\nimport { getAllValues, getRequiredValues, titleCase, getAuthenticatorFromRemediation } from '../util';\nimport { formatAuthenticator, compareAuthenticators } from '../../authenticator/util';\n\n// A map from IDX data values (server spec) to RemediationValues (client spec)\nexport type IdxToRemediationValueMap = Record<string, string[]>;\n\nexport interface RemediationValues extends IdxOptions {\n stateHandle?: string;\n authenticators?: (Authenticator | string)[];\n authenticator?: string | Authenticator;\n authenticatorsData?: Authenticator[];\n resend?: boolean;\n}\n\nexport interface RemediatorConstructor {\n new<T extends RemediationValues>(remediation: IdxRemediation, values?: T, options?: RemediateOptions): any;\n}\n\n// Base class - DO NOT expose static remediationName\nexport class Remediator<T extends RemediationValues = RemediationValues> {\n static remediationName: string;\n\n remediation: IdxRemediation;\n values: T;\n options: RemediateOptions;\n map?: IdxToRemediationValueMap;\n\n constructor(remediation: IdxRemediation, values: T = {} as T, options: RemediateOptions = {}) {\n // assign fields to the instance\n this.values = { ...values };\n this.options = { ...options };\n this.formatAuthenticators();\n this.remediation = remediation;\n }\n\n private formatAuthenticators() {\n this.values.authenticators = (this.values.authenticators || []) as Authenticator[];\n\n // ensure authenticators are in the correct format\n this.values.authenticators = this.values.authenticators.map(authenticator => {\n return formatAuthenticator(authenticator);\n });\n\n // add authenticator (if any) to \"authenticators\"\n if (this.values.authenticator) {\n const authenticator = formatAuthenticator(this.values.authenticator);\n const hasAuthenticatorInList = this.values.authenticators.some(existing => {\n return compareAuthenticators(authenticator, existing);\n });\n if (!hasAuthenticatorInList) {\n this.values.authenticators.push(authenticator);\n }\n }\n\n // save non-key meta to \"authenticatorsData\" field\n // authenticators will be removed after selection to avoid select-authenticator loop\n this.values.authenticatorsData = this.values.authenticators.reduce((acc, authenticator) => {\n if (typeof authenticator === 'object' && Object.keys(authenticator).length > 1) {\n // save authenticator meta into authenticator data\n acc.push(authenticator);\n }\n return acc;\n }, this.values.authenticatorsData || []);\n }\n\n getName(): string {\n return this.remediation.name;\n }\n\n // Override this method to provide custom check\n /* eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars */\n canRemediate(): boolean {\n const required = getRequiredValues(this.remediation);\n const needed = required!.find((key) => !this.hasData(key));\n if (needed) {\n return false; // missing data for a required field\n }\n return true; // all required fields have available data\n }\n\n // returns an object for the entire remediation form, or just a part\n getData(key?: string) {\n\n if (!key) {\n let allValues = getAllValues(this.remediation);\n let res = allValues!.reduce((data, key) => {\n data[key] = this.getData(key); // recursive\n return data;\n }, {});\n return res;\n }\n\n // Map value by \"map${Property}\" function in each subClass\n if (typeof this[`map${titleCase(key)}`] === 'function') {\n const val = this[`map${titleCase(key)}`](\n this.remediation.value!.find(({name}) => name === key)\n );\n if (val) {\n return val;\n }\n }\n\n // If a map is defined for this key, return the first aliased property that returns a truthy value\n if (this.map && this.map[key]) {\n const entry = this.map[key];\n for (let i = 0; i < entry.length; i++) {\n let val = this.values[entry[i]];\n if (val) {\n return val;\n }\n }\n }\n\n // fallback: return the value by key\n return this.values[key];\n }\n\n hasData(\n key: string // idx name\n ): boolean \n {\n // no attempt to format, we want simple true/false\n return !!this.getData(key);\n }\n\n getNextStep(_context?: IdxContext): NextStep {\n const name = this.getName();\n const inputs = this.getInputs();\n const authenticator = this.getAuthenticator();\n // TODO: remove type field in the next major version change\n // https://oktainc.atlassian.net/browse/OKTA-431749\n const type = authenticator?.type;\n return { \n name, \n inputs, \n ...(type && { type }),\n ...(authenticator && { authenticator }),\n };\n }\n\n // Get inputs for the next step\n private getInputs(): Input[] {\n const inputs: Input[] = [];\n const inputsFromRemediation = this.remediation.value || [];\n inputsFromRemediation.forEach(inputFromRemediation => {\n let input;\n let { name, type, visible, messages } = inputFromRemediation;\n if (visible === false) {\n return; // Filter out invisible inputs, like stateHandle\n }\n if (typeof this[`getInput${titleCase(name)}`] === 'function') {\n input = this[`getInput${titleCase(name)}`](inputFromRemediation);\n } else if (type !== 'object') {\n // handle general primitive types\n let alias;\n const aliases = (this.map ? this.map[name] : null) || [];\n if (aliases.length === 1) {\n alias = aliases[0];\n } else {\n // try find key from values\n alias = aliases.find(name => Object.keys(this.values).includes(name));\n }\n if (alias) {\n input = { ...inputFromRemediation, name: alias };\n }\n }\n if (!input) {\n input = inputFromRemediation;\n }\n if (Array.isArray(input)) {\n input.forEach(i => inputs.push(i));\n } else {\n // guarantees field-level messages are passed back\n if (messages) {\n input.messages = messages;\n }\n inputs.push(input);\n }\n });\n return inputs;\n }\n\n static getMessages(remediation: IdxRemediation): IdxMessage[] | undefined {\n if (!remediation.value) {\n return;\n }\n return remediation.value[0]?.form?.value.reduce((messages: IdxMessage[], field) => {\n if (field.messages) {\n messages = [...messages, ...field.messages.value];\n }\n return messages;\n }, []);\n }\n\n // Prepare values for the next remediation\n // In general, remove used values from inputs for the current remediation\n // Override this method if special cases need be handled\n getValuesAfterProceed(): T {\n const inputsFromRemediation = this.remediation.value || []; // \"raw\" inputs from server response\n const inputsFromRemediator = this.getInputs(); // \"aliased\" inputs from SDK remediator\n const inputs = [\n ...inputsFromRemediation,\n ...inputsFromRemediator\n ];\n // scrub all values related to this remediation\n for (const input of inputs) {\n delete this.values[input.name];\n }\n return this.values;\n }\n\n protected getAuthenticator(): IdxAuthenticator | undefined {\n // relatesTo value may be an authenticator or an authenticatorEnrollment\n const relatesTo = this.remediation.relatesTo?.value;\n if (!relatesTo) {\n return;\n }\n\n const authenticatorFromRemediation = getAuthenticatorFromRemediation(this.remediation);\n if (!authenticatorFromRemediation) {\n // Hopefully value is an authenticator\n return relatesTo;\n }\n\n // If relatesTo is an authenticatorEnrollment, the id is actually the enrollmentId\n // Let's get the correct authenticator id from the form value\n const id = authenticatorFromRemediation.form!.value\n .find(({ name }) => name === 'id')!.value as string;\n const enrollmentId = authenticatorFromRemediation.form!.value\n .find(({ name }) => name === 'enrollmentId')?.value as string;\n\n return {\n ...relatesTo,\n id,\n enrollmentId\n };\n }\n}\n"],"file":"Remediator.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../lib/idx/remediators/Base/SelectAuthenticator.ts"],"names":["SelectAuthenticator","Remediator","findMatchedOption","authenticators","options","option","authenticator","relatesTo","key","canRemediate","authenticatorFromRemediation","remediation","length","id","matchedOption","getNextStep","common","label","value","mapAuthenticator","remediationValue","selectedAuthenticator","selectedOption","form","name","getInputAuthenticator","getValuesAfterProceed","values"],"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 { Remediator, RemediationValues } from './Remediator';\nimport { getAuthenticatorFromRemediation } from '../util';\nimport { IdxOption, IdxRemediationValue } from '../../types/idx-js';\nimport { Authenticator, isAuthenticator } from '../../types';\nimport { compareAuthenticators, findMatchedOption} from '../../authenticator/util';\n\nexport type SelectAuthenticatorValues = RemediationValues & {\n authenticator?: string | Authenticator;\n};\n\n// Base class - DO NOT expose static remediationName\nexport class SelectAuthenticator extends Remediator {\n values!: SelectAuthenticatorValues;\n selectedAuthenticator?: Authenticator;\n selectedOption?: any;\n\n // Find matched authenticator in provided order\n findMatchedOption(authenticators, options) {\n let option;\n for (let authenticator of authenticators) {\n option = options\n .find(({ relatesTo }) => relatesTo.key === authenticator.key);\n if (option) {\n break;\n }\n }\n return option;\n }\n\n canRemediate() {\n const { authenticators, authenticator } = this.values;\n const authenticatorFromRemediation = getAuthenticatorFromRemediation(this.remediation);\n const { options } = authenticatorFromRemediation;\n // Let users select authenticator if no input is provided\n if (!authenticators || !authenticators.length) {\n return false;\n }\n\n // Authenticator is explicitly specified by id\n if (isAuthenticator(authenticator) && authenticator.id) {\n return true;\n }\n\n // Proceed with provided authenticators\n const matchedOption = this.findMatchedOption(authenticators, options);\n if (matchedOption) {\n return true;\n }\n \n return false;\n }\n\n getNextStep() {\n const common = super.getNextStep();\n const authenticatorFromRemediation = getAuthenticatorFromRemediation(this.remediation);\n const options = authenticatorFromRemediation.options!.map(option => {\n const { \n label, \n relatesTo\n } = option as IdxOption;\n const key = relatesTo!.key!;\n return { label, value: key };\n });\n return { ...common, options };\n }\n\n mapAuthenticator(remediationValue: IdxRemediationValue) {\n const { authenticators, authenticator } = this.values;\n\n // Authenticator is explicitly specified by id\n if (isAuthenticator(authenticator) && authenticator.id) {\n this.selectedAuthenticator = authenticator; // track the selected authenticator\n return authenticator;\n }\n\n const { options } = remediationValue;\n const selectedOption = findMatchedOption(authenticators, options);\n this.selectedAuthenticator = selectedOption.relatesTo; // track the selected authenticator\n this.selectedOption = selectedOption;\n return {\n id: selectedOption?.value.form.value.find(({ name }) => name === 'id').value\n };\n }\n\n getInputAuthenticator() {\n return { name: 'authenticator', key: 'string' };\n }\n\n getValuesAfterProceed(): RemediationValues {\n this.values = super.getValuesAfterProceed();\n // remove used authenticators\n const authenticators = (this.values.authenticators as Authenticator[])\n .filter(authenticator => {\n return compareAuthenticators(authenticator, this.selectedAuthenticator) !== true;\n });\n return { ...this.values, authenticators };\n }\n\n}\n"],"file":"SelectAuthenticator.js"}
1
+ {"version":3,"sources":["../../../../../lib/idx/remediators/Base/SelectAuthenticator.ts"],"names":["SelectAuthenticator","Remediator","findMatchedOption","authenticators","options","option","authenticator","relatesTo","key","canRemediate","authenticatorFromRemediation","remediation","length","id","matchedOption","getNextStep","common","label","value","mapAuthenticator","remediationValue","selectedAuthenticator","selectedOption","form","name","getInputAuthenticator","getValuesAfterProceed","values"],"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 { Remediator, RemediationValues } from './Remediator';\nimport { getAuthenticatorFromRemediation } from '../util';\nimport { IdxOption, IdxRemediationValue } from '../../types/idx-js';\nimport { Authenticator, isAuthenticator } from '../../types';\nimport { compareAuthenticators, findMatchedOption} from '../../authenticator/util';\n\nexport type SelectAuthenticatorValues = RemediationValues & {\n authenticator?: string | Authenticator;\n};\n\n// Base class - DO NOT expose static remediationName\nexport class SelectAuthenticator<T extends SelectAuthenticatorValues = SelectAuthenticatorValues>\n extends Remediator<T> {\n selectedAuthenticator?: Authenticator;\n selectedOption?: any;\n\n // Find matched authenticator in provided order\n findMatchedOption(authenticators, options) {\n let option;\n for (let authenticator of authenticators) {\n option = options\n .find(({ relatesTo }) => relatesTo.key === authenticator.key);\n if (option) {\n break;\n }\n }\n return option;\n }\n\n canRemediate() {\n const { authenticators, authenticator } = this.values;\n const authenticatorFromRemediation = getAuthenticatorFromRemediation(this.remediation);\n const { options } = authenticatorFromRemediation;\n // Let users select authenticator if no input is provided\n if (!authenticators || !authenticators.length) {\n return false;\n }\n\n // Authenticator is explicitly specified by id\n if (isAuthenticator(authenticator) && authenticator.id) {\n return true;\n }\n\n // Proceed with provided authenticators\n const matchedOption = this.findMatchedOption(authenticators, options);\n if (matchedOption) {\n return true;\n }\n \n return false;\n }\n\n getNextStep() {\n const common = super.getNextStep();\n const authenticatorFromRemediation = getAuthenticatorFromRemediation(this.remediation);\n const options = authenticatorFromRemediation.options!.map(option => {\n const { \n label, \n relatesTo\n } = option as IdxOption;\n const key = relatesTo!.key!;\n return { label, value: key };\n });\n return { ...common, options };\n }\n\n mapAuthenticator(remediationValue: IdxRemediationValue) {\n const { authenticators, authenticator } = this.values;\n\n // Authenticator is explicitly specified by id\n if (isAuthenticator(authenticator) && authenticator.id) {\n this.selectedAuthenticator = authenticator; // track the selected authenticator\n return authenticator;\n }\n\n const { options } = remediationValue;\n const selectedOption = findMatchedOption(authenticators, options);\n this.selectedAuthenticator = selectedOption.relatesTo; // track the selected authenticator\n this.selectedOption = selectedOption;\n return {\n id: selectedOption?.value.form.value.find(({ name }) => name === 'id').value\n };\n }\n\n getInputAuthenticator() {\n return { name: 'authenticator', key: 'string' };\n }\n\n getValuesAfterProceed(): T {\n this.values = super.getValuesAfterProceed();\n // remove used authenticators\n const authenticators = (this.values.authenticators as Authenticator[])\n .filter(authenticator => {\n return compareAuthenticators(authenticator, this.selectedAuthenticator) !== true;\n });\n return { ...this.values, authenticators };\n }\n\n}\n"],"file":"SelectAuthenticator.js"}