@okta/okta-auth-js 7.3.0 → 7.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/CHANGELOG.md +30 -1
  2. package/README.md +2 -2
  3. package/cjs/http/OktaUserAgent.js +2 -2
  4. package/cjs/idx/authenticator/util.js +1 -1
  5. package/cjs/idx/authenticator/util.js.map +1 -1
  6. package/cjs/idx/idxState/v1/idxResponseParser.js +3 -0
  7. package/cjs/idx/idxState/v1/idxResponseParser.js.map +1 -1
  8. package/cjs/idx/remediate.js +2 -2
  9. package/cjs/idx/remediate.js.map +1 -1
  10. package/cjs/idx/remediators/Base/Remediator.js +1 -1
  11. package/cjs/idx/remediators/Base/Remediator.js.map +1 -1
  12. package/cjs/idx/remediators/Base/SelectAuthenticator.js +9 -3
  13. package/cjs/idx/remediators/Base/SelectAuthenticator.js.map +1 -1
  14. package/cjs/idx/types/api.js.map +1 -1
  15. package/cjs/idx/util.js +7 -3
  16. package/cjs/idx/util.js.map +1 -1
  17. package/cjs/oidc/TokenManager.js.map +1 -1
  18. package/cjs/oidc/factory/api.js +3 -1
  19. package/cjs/oidc/factory/api.js.map +1 -1
  20. package/cjs/oidc/index.js +9 -1
  21. package/cjs/oidc/index.js.map +1 -1
  22. package/cjs/oidc/introspect.js +70 -0
  23. package/cjs/oidc/introspect.js.map +1 -0
  24. package/cjs/oidc/mixin/index.js +26 -17
  25. package/cjs/oidc/mixin/index.js.map +1 -1
  26. package/cjs/oidc/renewTokens.js +2 -1
  27. package/cjs/oidc/renewTokens.js.map +1 -1
  28. package/cjs/oidc/types/Token.js +8 -2
  29. package/cjs/oidc/types/Token.js.map +1 -1
  30. package/cjs/oidc/types/TokenManager.js.map +1 -1
  31. package/cjs/oidc/types/api.js.map +1 -1
  32. package/cjs/oidc/types/options.js.map +1 -1
  33. package/cjs/oidc/types/proto.js.map +1 -1
  34. package/dist/okta-auth-js.authn.min.analyzer.html +2 -2
  35. package/dist/okta-auth-js.authn.min.js +1 -1
  36. package/dist/okta-auth-js.authn.min.js.map +1 -1
  37. package/dist/okta-auth-js.core.min.analyzer.html +2 -2
  38. package/dist/okta-auth-js.core.min.js +1 -1
  39. package/dist/okta-auth-js.core.min.js.map +1 -1
  40. package/dist/okta-auth-js.idx.min.analyzer.html +2 -2
  41. package/dist/okta-auth-js.idx.min.js +1 -1
  42. package/dist/okta-auth-js.idx.min.js.map +1 -1
  43. package/dist/okta-auth-js.min.analyzer.html +2 -2
  44. package/dist/okta-auth-js.min.js +1 -1
  45. package/dist/okta-auth-js.min.js.map +1 -1
  46. package/dist/okta-auth-js.myaccount.min.analyzer.html +2 -2
  47. package/dist/okta-auth-js.myaccount.min.js +1 -1
  48. package/dist/okta-auth-js.myaccount.min.js.map +1 -1
  49. package/dist/okta-auth-js.polyfill.js +1 -1
  50. package/dist/okta-auth-js.polyfill.js.map +1 -1
  51. package/esm/browser/browser/fingerprint.js +1 -0
  52. package/esm/browser/browser/fingerprint.js.map +1 -1
  53. package/esm/browser/core/AuthStateManager.js +1 -0
  54. package/esm/browser/core/AuthStateManager.js.map +1 -1
  55. package/esm/browser/core/options.js +1 -0
  56. package/esm/browser/core/options.js.map +1 -1
  57. package/esm/browser/exports/exports/authn.js +2 -1
  58. package/esm/browser/exports/exports/authn.js.map +1 -1
  59. package/esm/browser/exports/exports/core.js +2 -1
  60. package/esm/browser/exports/exports/core.js.map +1 -1
  61. package/esm/browser/exports/exports/default.js +2 -1
  62. package/esm/browser/exports/exports/default.js.map +1 -1
  63. package/esm/browser/exports/exports/idx.js +2 -1
  64. package/esm/browser/exports/exports/idx.js.map +1 -1
  65. package/esm/browser/exports/exports/myaccount.js +2 -1
  66. package/esm/browser/exports/exports/myaccount.js.map +1 -1
  67. package/esm/browser/http/OktaUserAgent.js +2 -2
  68. package/esm/browser/idx/authenticator/util.js +1 -1
  69. package/esm/browser/idx/authenticator/util.js.map +1 -1
  70. package/esm/browser/idx/factory/api.js +1 -0
  71. package/esm/browser/idx/factory/api.js.map +1 -1
  72. package/esm/browser/idx/idxState/v1/idxResponseParser.js +4 -0
  73. package/esm/browser/idx/idxState/v1/idxResponseParser.js.map +1 -1
  74. package/esm/browser/idx/interact.js +1 -0
  75. package/esm/browser/idx/interact.js.map +1 -1
  76. package/esm/browser/idx/introspect.js +1 -0
  77. package/esm/browser/idx/introspect.js.map +1 -1
  78. package/esm/browser/idx/remediate.js +2 -2
  79. package/esm/browser/idx/remediate.js.map +1 -1
  80. package/esm/browser/idx/remediators/Base/Remediator.js +1 -1
  81. package/esm/browser/idx/remediators/Base/Remediator.js.map +1 -1
  82. package/esm/browser/idx/remediators/Base/SelectAuthenticator.js +8 -3
  83. package/esm/browser/idx/remediators/Base/SelectAuthenticator.js.map +1 -1
  84. package/esm/browser/idx/transactionMeta.js +1 -0
  85. package/esm/browser/idx/transactionMeta.js.map +1 -1
  86. package/esm/browser/idx/types/api.js.map +1 -1
  87. package/esm/browser/idx/util.js +4 -3
  88. package/esm/browser/idx/util.js.map +1 -1
  89. package/esm/browser/oidc/TokenManager.js.map +1 -1
  90. package/esm/browser/oidc/TransactionManager.js +1 -0
  91. package/esm/browser/oidc/TransactionManager.js.map +1 -1
  92. package/esm/browser/oidc/enrollAuthenticator.js +1 -0
  93. package/esm/browser/oidc/enrollAuthenticator.js.map +1 -1
  94. package/esm/browser/oidc/exchangeCodeForTokens.js +1 -0
  95. package/esm/browser/oidc/exchangeCodeForTokens.js.map +1 -1
  96. package/esm/browser/oidc/factory/api.js +4 -1
  97. package/esm/browser/oidc/factory/api.js.map +1 -1
  98. package/esm/browser/oidc/getToken.js +1 -0
  99. package/esm/browser/oidc/getToken.js.map +1 -1
  100. package/esm/browser/oidc/getWithPopup.js +1 -0
  101. package/esm/browser/oidc/getWithPopup.js.map +1 -1
  102. package/esm/browser/oidc/getWithRedirect.js +1 -0
  103. package/esm/browser/oidc/getWithRedirect.js.map +1 -1
  104. package/esm/browser/oidc/handleOAuthResponse.js +1 -0
  105. package/esm/browser/oidc/handleOAuthResponse.js.map +1 -1
  106. package/esm/browser/oidc/introspect.js +67 -0
  107. package/esm/browser/oidc/introspect.js.map +1 -0
  108. package/esm/browser/oidc/mixin/index.js +25 -20
  109. package/esm/browser/oidc/mixin/index.js.map +1 -1
  110. package/esm/browser/oidc/parseFromUrl.js +1 -0
  111. package/esm/browser/oidc/parseFromUrl.js.map +1 -1
  112. package/esm/browser/oidc/renewTokens.js +3 -1
  113. package/esm/browser/oidc/renewTokens.js.map +1 -1
  114. package/esm/browser/oidc/types/Token.js +7 -1
  115. package/esm/browser/oidc/types/Token.js.map +1 -1
  116. package/esm/browser/oidc/types/TokenManager.js.map +1 -1
  117. package/esm/browser/oidc/util/sharedStorage.js +1 -0
  118. package/esm/browser/oidc/util/sharedStorage.js.map +1 -1
  119. package/esm/browser/oidc/verifyToken.js +1 -0
  120. package/esm/browser/oidc/verifyToken.js.map +1 -1
  121. package/esm/browser/package.json +1 -1
  122. package/esm/browser/services/SyncStorageService.js +1 -0
  123. package/esm/browser/services/SyncStorageService.js.map +1 -1
  124. package/esm/node/browser/fingerprint.js +1 -0
  125. package/esm/node/browser/fingerprint.js.map +1 -1
  126. package/esm/node/core/AuthStateManager.js +1 -0
  127. package/esm/node/core/AuthStateManager.js.map +1 -1
  128. package/esm/node/core/options.js +1 -0
  129. package/esm/node/core/options.js.map +1 -1
  130. package/esm/node/exports/exports/authn.js +2 -1
  131. package/esm/node/exports/exports/authn.js.map +1 -1
  132. package/esm/node/exports/exports/core.js +2 -1
  133. package/esm/node/exports/exports/core.js.map +1 -1
  134. package/esm/node/exports/exports/default.js +2 -1
  135. package/esm/node/exports/exports/default.js.map +1 -1
  136. package/esm/node/exports/exports/idx.js +2 -1
  137. package/esm/node/exports/exports/idx.js.map +1 -1
  138. package/esm/node/exports/exports/myaccount.js +2 -1
  139. package/esm/node/exports/exports/myaccount.js.map +1 -1
  140. package/esm/node/http/OktaUserAgent.js +2 -2
  141. package/esm/node/idx/authenticator/util.js +1 -1
  142. package/esm/node/idx/authenticator/util.js.map +1 -1
  143. package/esm/node/idx/factory/api.js +1 -0
  144. package/esm/node/idx/factory/api.js.map +1 -1
  145. package/esm/node/idx/idxState/v1/idxResponseParser.js +4 -0
  146. package/esm/node/idx/idxState/v1/idxResponseParser.js.map +1 -1
  147. package/esm/node/idx/interact.js +1 -0
  148. package/esm/node/idx/interact.js.map +1 -1
  149. package/esm/node/idx/introspect.js +1 -0
  150. package/esm/node/idx/introspect.js.map +1 -1
  151. package/esm/node/idx/remediate.js +2 -2
  152. package/esm/node/idx/remediate.js.map +1 -1
  153. package/esm/node/idx/remediators/Base/Remediator.js +1 -1
  154. package/esm/node/idx/remediators/Base/Remediator.js.map +1 -1
  155. package/esm/node/idx/remediators/Base/SelectAuthenticator.js +8 -3
  156. package/esm/node/idx/remediators/Base/SelectAuthenticator.js.map +1 -1
  157. package/esm/node/idx/transactionMeta.js +1 -0
  158. package/esm/node/idx/transactionMeta.js.map +1 -1
  159. package/esm/node/idx/types/api.js.map +1 -1
  160. package/esm/node/idx/util.js +4 -3
  161. package/esm/node/idx/util.js.map +1 -1
  162. package/esm/node/oidc/TokenManager.js.map +1 -1
  163. package/esm/node/oidc/TransactionManager.js +1 -0
  164. package/esm/node/oidc/TransactionManager.js.map +1 -1
  165. package/esm/node/oidc/enrollAuthenticator.js +1 -0
  166. package/esm/node/oidc/enrollAuthenticator.js.map +1 -1
  167. package/esm/node/oidc/exchangeCodeForTokens.js +1 -0
  168. package/esm/node/oidc/exchangeCodeForTokens.js.map +1 -1
  169. package/esm/node/oidc/factory/api.js +4 -1
  170. package/esm/node/oidc/factory/api.js.map +1 -1
  171. package/esm/node/oidc/getToken.js +1 -0
  172. package/esm/node/oidc/getToken.js.map +1 -1
  173. package/esm/node/oidc/getWithPopup.js +1 -0
  174. package/esm/node/oidc/getWithPopup.js.map +1 -1
  175. package/esm/node/oidc/getWithRedirect.js +1 -0
  176. package/esm/node/oidc/getWithRedirect.js.map +1 -1
  177. package/esm/node/oidc/handleOAuthResponse.js +1 -0
  178. package/esm/node/oidc/handleOAuthResponse.js.map +1 -1
  179. package/esm/node/oidc/introspect.js +67 -0
  180. package/esm/node/oidc/introspect.js.map +1 -0
  181. package/esm/node/oidc/mixin/index.js +25 -20
  182. package/esm/node/oidc/mixin/index.js.map +1 -1
  183. package/esm/node/oidc/parseFromUrl.js +1 -0
  184. package/esm/node/oidc/parseFromUrl.js.map +1 -1
  185. package/esm/node/oidc/renewTokens.js +3 -1
  186. package/esm/node/oidc/renewTokens.js.map +1 -1
  187. package/esm/node/oidc/types/Token.js +7 -1
  188. package/esm/node/oidc/types/Token.js.map +1 -1
  189. package/esm/node/oidc/types/TokenManager.js.map +1 -1
  190. package/esm/node/oidc/util/sharedStorage.js +1 -0
  191. package/esm/node/oidc/util/sharedStorage.js.map +1 -1
  192. package/esm/node/oidc/verifyToken.js +1 -0
  193. package/esm/node/oidc/verifyToken.js.map +1 -1
  194. package/esm/node/package.json +1 -1
  195. package/package.json +9 -5
  196. package/types/lib/idx/remediators/Base/Remediator.d.ts +1 -1
  197. package/types/lib/idx/remediators/Base/SelectAuthenticator.d.ts +3 -3
  198. package/types/lib/idx/types/api.d.ts +1 -0
  199. package/types/lib/idx/util.d.ts +2 -2
  200. package/types/lib/oidc/TokenManager.d.ts +2 -2
  201. package/types/lib/oidc/index.d.ts +1 -0
  202. package/types/lib/oidc/introspect.d.ts +14 -0
  203. package/types/lib/oidc/renewTokens.d.ts +2 -2
  204. package/types/lib/oidc/types/Token.d.ts +5 -0
  205. package/types/lib/oidc/types/TokenManager.d.ts +2 -2
  206. package/types/lib/oidc/types/api.d.ts +5 -4
  207. package/types/lib/oidc/types/options.d.ts +4 -0
  208. package/types/lib/oidc/types/proto.d.ts +1 -0
  209. package/umd/authn.js +1 -1
  210. package/umd/authn.js.map +1 -1
  211. package/umd/core.js +1 -1
  212. package/umd/core.js.map +1 -1
  213. package/umd/default.js +1 -1
  214. package/umd/default.js.map +1 -1
  215. package/umd/idx.js +1 -1
  216. package/umd/idx.js.map +1 -1
  217. package/umd/myaccount.js +1 -1
  218. package/umd/myaccount.js.map +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # Changelog
2
2
 
3
+ ## 7.4.0
4
+
5
+ ### Features
6
+
7
+ - [#1440](https://github.com/okta/okta-auth-js/pull/1440) Fixes type of `tokenManager.getSync`
8
+
9
+ - [#1439](https://github.com/okta/okta-auth-js/pull/1439) `.signOut` improvements
10
+ * Passing `postLogoutRedirectUri: null` to `.signOut` now omits the param from `/logout` call and will observe the behavior of `/logout`
11
+ * `state` is now returned as a query param to the `postLogoutRedirectUri` when `.signOut` falls back to `.closeSession`
12
+
13
+ - [#1412](https://github.com/okta/okta-auth-js/pull/1412)
14
+ * Adds oauth2 introspect method, exposed as `authClient.token.introspect`
15
+ * Adds optional `tokens` param to `renewTokens`
16
+
17
+ ### Fixes
18
+
19
+ - [#1421](https://github.com/okta/okta-auth-js/pull/1421) Throw error if there is incorrect `relatesTo` in IDX response
20
+
21
+ ### Other
22
+
23
+ - [#1409](https://github.com/okta/okta-auth-js/pull/1409) Adds password page to React myaccount sample app
24
+ - [#1422](https://github.com/okta/okta-auth-js/pull/1422) IDX: add `customLabel` to `Input` type
25
+
26
+ ## 7.3.1
27
+
28
+ ### Fixes
29
+
30
+ - [#1426](https://github.com/okta/okta-auth-js/pull/1426) fix: Don't auto remediate SelectAuthenticator with current authenticator
31
+
3
32
  ## 7.3.0
4
33
 
5
34
  ### Features
@@ -35,7 +64,7 @@
35
64
 
36
65
  - [#1343](https://github.com/okta/okta-auth-js/pull/1343) Supports Step Up MFA against `/authorize` and `/interact` endpoints
37
66
 
38
- # Other
67
+ ### Other
39
68
 
40
69
  - [#1342](https://github.com/okta/okta-auth-js/pull/1342) - fixes possible RCE in jsonpath-plus
41
70
 
package/README.md CHANGED
@@ -44,7 +44,7 @@ This library uses semantic versioning and follows Okta's [library version policy
44
44
  | ------- | -------------------------------- |
45
45
  | `7.x` | :heavy_check_mark: Stable |
46
46
  | `6.x` | :warning: Retiring on 2023-09-30 |
47
- | `5.x` | :warning: Retiring on 2022-10-31 |
47
+ | `5.x` | :x: Retired |
48
48
  | `4.x` | :x: Retired |
49
49
  | `3.x` | :x: Retired |
50
50
  | `2.x` | :x: Retired |
@@ -996,7 +996,7 @@ Signs the user out of their current [Okta session](https://developer.okta.com/do
996
996
 
997
997
  `signOut` takes the following options:
998
998
 
999
- * `postLogoutRedirectUri` - Setting a value will override the `postLogoutRedirectUri` configured on the SDK.
999
+ * `postLogoutRedirectUri` - Setting a value will override the `postLogoutRedirectUri` configured on the SDK. This will default to `window.location.origin` if no value is provided. To prevent this explicitly pass `null` to leverage the default behavior of `/logout`. If `signOut` falls back to `closeSession` `window.location.origin` will still be used as the default value, even if `null` is passed.
1000
1000
  * `state` - An optional value, used along with `postLogoutRedirectUri`. If set, this value will be returned as a query parameter during the redirect to the `postLogoutRedirectUri`
1001
1001
  * `idToken` - Specifies the ID token object. By default, `signOut` will look for a token object named `idToken` within the `TokenManager`. If you have stored the id token object in a different location, you should retrieve it first and then pass it here.
1002
1002
  * `clearTokensBeforeRedirect` - If `true` (default: `false`) local tokens will be removed before the logout redirect happens. Otherwise a flag (`pendingRemove`) will be added to each local token instead of clearing them immediately. Calling `oktaAuth.start()` after logout redirect will clear local tokens if flags are found. **Use this option with care**: removing local tokens before fully terminating the Okta SSO session can result in logging back in again when using [`@okta/okta-react`](https://www.npmjs.com/package/@okta/okta-react)'s [`SecureRoute`](https://github.com/okta/okta-react#secureroute) component.
@@ -20,7 +20,7 @@ var _features = require("../features");
20
20
  class OktaUserAgent {
21
21
  constructor() {
22
22
  // add base sdk env
23
- this.environments = [`okta-auth-js/${"7.3.0"}`];
23
+ this.environments = [`okta-auth-js/${"7.4.0"}`];
24
24
  }
25
25
  addEnvironment(env) {
26
26
  this.environments.push(env);
@@ -32,7 +32,7 @@ class OktaUserAgent {
32
32
  };
33
33
  }
34
34
  getVersion() {
35
- return "7.3.0";
35
+ return "7.4.0";
36
36
  }
37
37
  maybeAddNodeEnvironment() {
38
38
  if ((0, _features.isBrowser)() || !process || !process.versions) {
@@ -40,7 +40,7 @@ function findMatchedOption(authenticators, options) {
40
40
  for (let authenticator of authenticators) {
41
41
  option = options.find(({
42
42
  relatesTo
43
- }) => relatesTo.key === authenticator.key);
43
+ }) => relatesTo.key && relatesTo.key === authenticator.key);
44
44
  if (option) {
45
45
  break;
46
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","names":["formatAuthenticator","incoming","authenticator","isAuthenticator","key","Error","compareAuthenticators","auth1","auth2","id","findMatchedOption","authenticators","options","option","find","relatesTo"],"sources":["../../../../lib/idx/authenticator/util.ts"],"sourcesContent":["import { Authenticator, isAuthenticator } from '../types';\n\nexport function formatAuthenticator(incoming: unknown): Authenticator {\n let authenticator: Authenticator;\n if (isAuthenticator(incoming)) {\n authenticator = incoming;\n } else if (typeof incoming === 'string') {\n authenticator = {\n key: incoming\n };\n } else {\n throw new Error('Invalid format for authenticator');\n }\n return authenticator;\n}\n\n// Returns true if the authenticators are equivalent\nexport function compareAuthenticators(auth1, auth2) {\n if (!auth1 || !auth2) {\n return false;\n }\n // by id\n if (auth1.id && auth2.id) {\n return (auth1.id === auth2.id);\n }\n // by key\n if (auth1.key && auth2.key) {\n return (auth1.key === auth2.key);\n }\n return false;\n}\n\n// Find matched authenticator in provided order\nexport function 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}"],"mappings":";;;;;AAAA;AAEO,SAASA,mBAAmB,CAACC,QAAiB,EAAiB;EACpE,IAAIC,aAA4B;EAChC,IAAK,IAAAC,sBAAe,EAACF,QAAQ,CAAC,EAAE;IAC9BC,aAAa,GAAGD,QAAQ;EAC1B,CAAC,MAAM,IAAI,OAAOA,QAAQ,KAAK,QAAQ,EAAE;IACvCC,aAAa,GAAG;MACdE,GAAG,EAAEH;IACP,CAAC;EACH,CAAC,MAAM;IACL,MAAM,IAAII,KAAK,CAAC,kCAAkC,CAAC;EACrD;EACA,OAAOH,aAAa;AACtB;;AAEA;AACO,SAASI,qBAAqB,CAACC,KAAK,EAAEC,KAAK,EAAE;EAClD,IAAI,CAACD,KAAK,IAAI,CAACC,KAAK,EAAE;IACpB,OAAO,KAAK;EACd;EACA;EACA,IAAID,KAAK,CAACE,EAAE,IAAID,KAAK,CAACC,EAAE,EAAE;IACxB,OAAQF,KAAK,CAACE,EAAE,KAAKD,KAAK,CAACC,EAAE;EAC/B;EACA;EACA,IAAIF,KAAK,CAACH,GAAG,IAAII,KAAK,CAACJ,GAAG,EAAE;IAC1B,OAAQG,KAAK,CAACH,GAAG,KAAKI,KAAK,CAACJ,GAAG;EACjC;EACA,OAAO,KAAK;AACd;;AAEA;AACO,SAASM,iBAAiB,CAACC,cAAc,EAAEC,OAAO,EAAE;EACzD,IAAIC,MAAM;EACV,KAAK,IAAIX,aAAa,IAAIS,cAAc,EAAE;IACxCE,MAAM,GAAGD,OAAO,CACbE,IAAI,CAAC,CAAC;MAAEC;IAAU,CAAC,KAAKA,SAAS,CAACX,GAAG,KAAKF,aAAa,CAACE,GAAG,CAAC;IAC/D,IAAIS,MAAM,EAAE;MACV;IACF;EACF;EACA,OAAOA,MAAM;AACf"}
1
+ {"version":3,"file":"util.js","names":["formatAuthenticator","incoming","authenticator","isAuthenticator","key","Error","compareAuthenticators","auth1","auth2","id","findMatchedOption","authenticators","options","option","find","relatesTo"],"sources":["../../../../lib/idx/authenticator/util.ts"],"sourcesContent":["import { Authenticator, isAuthenticator } from '../types';\n\nexport function formatAuthenticator(incoming: unknown): Authenticator {\n let authenticator: Authenticator;\n if (isAuthenticator(incoming)) {\n authenticator = incoming;\n } else if (typeof incoming === 'string') {\n authenticator = {\n key: incoming\n };\n } else {\n throw new Error('Invalid format for authenticator');\n }\n return authenticator;\n}\n\n// Returns true if the authenticators are equivalent\nexport function compareAuthenticators(auth1, auth2) {\n if (!auth1 || !auth2) {\n return false;\n }\n // by id\n if (auth1.id && auth2.id) {\n return (auth1.id === auth2.id);\n }\n // by key\n if (auth1.key && auth2.key) {\n return (auth1.key === auth2.key);\n }\n return false;\n}\n\n// Find matched authenticator in provided order\nexport function findMatchedOption(authenticators, options) {\n let option;\n for (let authenticator of authenticators) {\n option = options\n .find(({ relatesTo }) => relatesTo.key && relatesTo.key === authenticator.key);\n if (option) {\n break;\n }\n }\n return option;\n}"],"mappings":";;;;;AAAA;AAEO,SAASA,mBAAmB,CAACC,QAAiB,EAAiB;EACpE,IAAIC,aAA4B;EAChC,IAAK,IAAAC,sBAAe,EAACF,QAAQ,CAAC,EAAE;IAC9BC,aAAa,GAAGD,QAAQ;EAC1B,CAAC,MAAM,IAAI,OAAOA,QAAQ,KAAK,QAAQ,EAAE;IACvCC,aAAa,GAAG;MACdE,GAAG,EAAEH;IACP,CAAC;EACH,CAAC,MAAM;IACL,MAAM,IAAII,KAAK,CAAC,kCAAkC,CAAC;EACrD;EACA,OAAOH,aAAa;AACtB;;AAEA;AACO,SAASI,qBAAqB,CAACC,KAAK,EAAEC,KAAK,EAAE;EAClD,IAAI,CAACD,KAAK,IAAI,CAACC,KAAK,EAAE;IACpB,OAAO,KAAK;EACd;EACA;EACA,IAAID,KAAK,CAACE,EAAE,IAAID,KAAK,CAACC,EAAE,EAAE;IACxB,OAAQF,KAAK,CAACE,EAAE,KAAKD,KAAK,CAACC,EAAE;EAC/B;EACA;EACA,IAAIF,KAAK,CAACH,GAAG,IAAII,KAAK,CAACJ,GAAG,EAAE;IAC1B,OAAQG,KAAK,CAACH,GAAG,KAAKI,KAAK,CAACJ,GAAG;EACjC;EACA,OAAO,KAAK;AACd;;AAEA;AACO,SAASM,iBAAiB,CAACC,cAAc,EAAEC,OAAO,EAAE;EACzD,IAAIC,MAAM;EACV,KAAK,IAAIX,aAAa,IAAIS,cAAc,EAAE;IACxCE,MAAM,GAAGD,OAAO,CACbE,IAAI,CAAC,CAAC;MAAEC;IAAU,CAAC,KAAKA,SAAS,CAACX,GAAG,IAAIW,SAAS,CAACX,GAAG,KAAKF,aAAa,CAACE,GAAG,CAAC;IAChF,IAAIS,MAAM,EAAE;MACV;IACF;EACF;EACA,OAAOA,MAAM;AACf"}
@@ -5,6 +5,7 @@ exports.parseNonRemediations = exports.parseIdxResponse = void 0;
5
5
  var _remediationParser = require("./remediationParser");
6
6
  var _generateIdxAction = _interopRequireDefault(require("./generateIdxAction"));
7
7
  var _jsonpath = require("../../../util/jsonpath");
8
+ var _errors = require("../../../errors");
8
9
  /*!
9
10
  * Copyright (c) 2021-Present, Okta, Inc. and/or its affiliates. All rights reserved.
10
11
  * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
@@ -88,6 +89,8 @@ const expandRelatesTo = (idxResponse, value) => {
88
89
  if (result) {
89
90
  value[k] = result;
90
91
  return;
92
+ } else {
93
+ throw new _errors.AuthSdkError(`Cannot resolve relatesTo: ${query}`);
91
94
  }
92
95
  }
93
96
  }
@@ -1 +1 @@
1
- {"version":3,"file":"idxResponseParser.js","names":["SKIP_FIELDS","Object","fromEntries","map","field","parseNonRemediations","authClient","idxResponse","toPersist","actions","context","keys","filter","forEach","fieldIsObject","rel","name","generateIdxAction","value","fieldValue","type","info","entries","subField","expandRelatesTo","k","query","Array","isArray","result","jsonpath","path","json","innerValue","convertRemediationAction","remediation","remediationActions","generateRemediationFunctions","actionFn","action","parseIdxResponse","remediationData","remediations"],"sources":["../../../../../lib/idx/idxState/v1/idxResponseParser.ts"],"sourcesContent":["/*!\n * Copyright (c) 2021-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/* eslint-disable max-len */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { OktaAuthIdxInterface } from '../../types'; // auth-js/types\nimport { generateRemediationFunctions } from './remediationParser';\nimport generateIdxAction from './generateIdxAction';\nimport { jsonpath } from '../../../util/jsonpath';\n\nconst SKIP_FIELDS = Object.fromEntries([\n 'remediation', // remediations are put into proceed/neededToProceed\n 'context', // the API response of 'context' isn't externally useful. We ignore it and put all non-action (contextual) info into idxState.context\n].map( (field) => [ field, !!'skip this field' ] ));\n\nexport const parseNonRemediations = function parseNonRemediations( authClient: OktaAuthIdxInterface, idxResponse, toPersist = {} ) {\n const actions = {};\n const context = {};\n\n Object.keys(idxResponse)\n .filter( field => !SKIP_FIELDS[field])\n .forEach( field => {\n const fieldIsObject = typeof idxResponse[field] === 'object' && !!idxResponse[field];\n\n if ( !fieldIsObject ) {\n // simple fields are contextual info\n context[field] = idxResponse[field];\n return;\n }\n\n if ( idxResponse[field].rel ) {\n // top level actions\n actions[idxResponse[field].name] = generateIdxAction(authClient, idxResponse[field], toPersist);\n return;\n }\n\n const { value: fieldValue, type, ...info} = idxResponse[field];\n context[field] = { type, ...info}; // add the non-action parts as context\n\n if ( type !== 'object' ) {\n // only object values hold actions\n context[field].value = fieldValue;\n return;\n }\n\n // We are an object field containing an object value\n context[field].value = {};\n Object.entries(fieldValue)\n .forEach( ([subField, value]) => {\n if (value.rel) { // is [field].value[subField] an action?\n // add any \"action\" value subfields to actions\n actions[`${field}-${subField.name || subField}`] = generateIdxAction(authClient, value, toPersist);\n } else {\n // add non-action value subfields to context\n context[field].value[subField] = value;\n }\n });\n });\n\n return { context, actions };\n};\n\nconst expandRelatesTo = (idxResponse, value) => {\n Object.keys(value).forEach(k => {\n if (k === 'relatesTo') {\n const query = Array.isArray(value[k]) ? value[k][0] : value[k];\n if (typeof query === 'string') {\n const result = jsonpath({ path: query, json: idxResponse })[0];\n if (result) {\n value[k] = result;\n return;\n }\n }\n }\n if (Array.isArray(value[k])) {\n value[k].forEach(innerValue => expandRelatesTo(idxResponse, innerValue));\n }\n });\n};\n\nconst convertRemediationAction = (authClient: OktaAuthIdxInterface, remediation, toPersist) => {\n // Only remediation that has `rel` field (indicator for form submission) can have http action\n if (remediation.rel) {\n const remediationActions = generateRemediationFunctions( authClient, [remediation], toPersist );\n const actionFn = remediationActions[remediation.name];\n return {\n ...remediation,\n action: actionFn,\n };\n }\n\n return remediation;\n};\n\nexport const parseIdxResponse = function parseIdxResponse( authClient: OktaAuthIdxInterface, idxResponse, toPersist = {} ): {\n remediations: IdxRemediation[];\n context: IdxContext;\n actions: IdxActions;\n} {\n const remediationData = idxResponse.remediation?.value || [];\n\n remediationData.forEach(\n remediation => expandRelatesTo(idxResponse, remediation)\n );\n\n const remediations = remediationData.map(remediation => convertRemediationAction( authClient, remediation, toPersist ));\n\n const { context, actions } = parseNonRemediations( authClient, idxResponse, toPersist );\n\n return {\n remediations,\n context,\n actions,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"idxResponseParser.js","names":["SKIP_FIELDS","Object","fromEntries","map","field","parseNonRemediations","authClient","idxResponse","toPersist","actions","context","keys","filter","forEach","fieldIsObject","rel","name","generateIdxAction","value","fieldValue","type","info","entries","subField","expandRelatesTo","k","query","Array","isArray","result","jsonpath","path","json","AuthSdkError","innerValue","convertRemediationAction","remediation","remediationActions","generateRemediationFunctions","actionFn","action","parseIdxResponse","remediationData","remediations"],"sources":["../../../../../lib/idx/idxState/v1/idxResponseParser.ts"],"sourcesContent":["/*!\n * Copyright (c) 2021-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/* eslint-disable max-len */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { OktaAuthIdxInterface } from '../../types'; // auth-js/types\nimport { generateRemediationFunctions } from './remediationParser';\nimport generateIdxAction from './generateIdxAction';\nimport { jsonpath } from '../../../util/jsonpath';\nimport { AuthSdkError } from '../../../errors';\n\nconst SKIP_FIELDS = Object.fromEntries([\n 'remediation', // remediations are put into proceed/neededToProceed\n 'context', // the API response of 'context' isn't externally useful. We ignore it and put all non-action (contextual) info into idxState.context\n].map( (field) => [ field, !!'skip this field' ] ));\n\nexport const parseNonRemediations = function parseNonRemediations( authClient: OktaAuthIdxInterface, idxResponse, toPersist = {} ) {\n const actions = {};\n const context = {};\n\n Object.keys(idxResponse)\n .filter( field => !SKIP_FIELDS[field])\n .forEach( field => {\n const fieldIsObject = typeof idxResponse[field] === 'object' && !!idxResponse[field];\n\n if ( !fieldIsObject ) {\n // simple fields are contextual info\n context[field] = idxResponse[field];\n return;\n }\n\n if ( idxResponse[field].rel ) {\n // top level actions\n actions[idxResponse[field].name] = generateIdxAction(authClient, idxResponse[field], toPersist);\n return;\n }\n\n const { value: fieldValue, type, ...info} = idxResponse[field];\n context[field] = { type, ...info}; // add the non-action parts as context\n\n if ( type !== 'object' ) {\n // only object values hold actions\n context[field].value = fieldValue;\n return;\n }\n\n // We are an object field containing an object value\n context[field].value = {};\n Object.entries(fieldValue)\n .forEach( ([subField, value]) => {\n if (value.rel) { // is [field].value[subField] an action?\n // add any \"action\" value subfields to actions\n actions[`${field}-${subField.name || subField}`] = generateIdxAction(authClient, value, toPersist);\n } else {\n // add non-action value subfields to context\n context[field].value[subField] = value;\n }\n });\n });\n\n return { context, actions };\n};\n\nconst expandRelatesTo = (idxResponse, value) => {\n Object.keys(value).forEach(k => {\n if (k === 'relatesTo') {\n const query = Array.isArray(value[k]) ? value[k][0] : value[k];\n if (typeof query === 'string') {\n const result = jsonpath({ path: query, json: idxResponse })[0];\n if (result) {\n value[k] = result;\n return;\n } else {\n throw new AuthSdkError(`Cannot resolve relatesTo: ${query}`);\n }\n }\n }\n if (Array.isArray(value[k])) {\n value[k].forEach(innerValue => expandRelatesTo(idxResponse, innerValue));\n }\n });\n};\n\nconst convertRemediationAction = (authClient: OktaAuthIdxInterface, remediation, toPersist) => {\n // Only remediation that has `rel` field (indicator for form submission) can have http action\n if (remediation.rel) {\n const remediationActions = generateRemediationFunctions( authClient, [remediation], toPersist );\n const actionFn = remediationActions[remediation.name];\n return {\n ...remediation,\n action: actionFn,\n };\n }\n\n return remediation;\n};\n\nexport const parseIdxResponse = function parseIdxResponse( authClient: OktaAuthIdxInterface, idxResponse, toPersist = {} ): {\n remediations: IdxRemediation[];\n context: IdxContext;\n actions: IdxActions;\n} {\n const remediationData = idxResponse.remediation?.value || [];\n\n remediationData.forEach(\n remediation => expandRelatesTo(idxResponse, remediation)\n );\n\n const remediations = remediationData.map(remediation => convertRemediationAction( authClient, remediation, toPersist ));\n\n const { context, actions } = parseNonRemediations( authClient, idxResponse, toPersist );\n\n return {\n remediations,\n context,\n actions,\n };\n};\n"],"mappings":"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"}
@@ -58,7 +58,7 @@ async function remediate(authClient, idxResponse, values, options) {
58
58
  idxResponse
59
59
  };
60
60
  }
61
- const remediator = (0, _util.getRemediator)(neededToProceed, values, options);
61
+ const remediator = (0, _util.getRemediator)(idxResponse, values, options);
62
62
 
63
63
  // Try actions in idxResponse first
64
64
  const actionFromValues = getActionFromValues(values, idxResponse);
@@ -161,7 +161,7 @@ async function remediate(authClient, idxResponse, values, options) {
161
161
  // return nextStep directly
162
162
  if (options.useGenericRemediator && !idxResponse.interactionCode && !(0, _util.isTerminalResponse)(idxResponse)) {
163
163
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
164
- const gr = (0, _util.getRemediator)(idxResponse.neededToProceed, values, options);
164
+ const gr = (0, _util.getRemediator)(idxResponse, values, options);
165
165
  const nextStep = (0, _util.getNextStep)(authClient, gr, idxResponse);
166
166
  return {
167
167
  idxResponse,
@@ -1 +1 @@
1
- {"version":3,"file":"remediate.js","names":["getActionFromValues","values","idxResponse","Object","keys","actions","find","action","resend","includes","removeActionFromValues","undefined","removeActionFromOptions","options","actionName","filter","entry","name","remediate","authClient","neededToProceed","interactionCode","flow","remediator","getRemediator","actionFromValues","actionFromOptions","params","valuesWithoutExecutedAction","optionsWithoutExecutedAction","requestDidSucceed","handleFailedResponse","canceled","remediationAction","proceed","terminal","isTerminalResponse","step","filterValuesForRemediation","AuthSdkError","reduce","acc","curr","canRemediate","nextStep","getNextStep","getName","data","getData","getValuesAfterProceed","useGenericRemediator","gr"],"sources":["../../../lib/idx/remediate.ts"],"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 { OktaAuthIdxInterface, RemediateOptions, RemediationResponse } from './types';\nimport { \n IdxResponse,\n IdxActionParams, \n} from './types/idx-js';\nimport {\n isTerminalResponse,\n filterValuesForRemediation,\n getRemediator,\n getNextStep,\n handleFailedResponse\n} from './util';\n\nexport interface RemediateActionWithOptionalParams {\n name: string;\n params?: IdxActionParams;\n}\n\nexport type RemediateAction = string | RemediateActionWithOptionalParams;\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 authClient: OktaAuthIdxInterface,\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 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 idxResponse = await idxResponse.actions[action](params);\n if (idxResponse.requestDidSucceed === false) {\n return handleFailedResponse(authClient, idxResponse, options);\n }\n if (action === 'cancel') {\n return { idxResponse, canceled: true };\n }\n return remediate(\n authClient, \n idxResponse, \n valuesWithoutExecutedAction, \n optionsWithoutExecutedAction\n ); // recursive call\n }\n\n // search for action in remediation list\n const remediationAction = neededToProceed.find(({ name }) => name === action);\n if (remediationAction) {\n idxResponse = await idxResponse.proceed(action, params);\n if (idxResponse.requestDidSucceed === false) {\n return handleFailedResponse(authClient, idxResponse, options);\n }\n return remediate(authClient, idxResponse, values, optionsWithoutExecutedAction); // recursive call\n }\n }\n }\n\n // Do not attempt to remediate if response is in terminal state\n const terminal = isTerminalResponse(idxResponse);\n if (terminal) {\n return { idxResponse, terminal };\n }\n\n if (!remediator) {\n // With options.step, remediator is not required\n if (options.step) {\n values = filterValuesForRemediation(idxResponse, options.step, values); // include only requested values\n idxResponse = await idxResponse.proceed(options.step, values);\n if (idxResponse.requestDidSucceed === false) {\n return handleFailedResponse(authClient, idxResponse, options);\n }\n return { idxResponse };\n }\n\n // With default flow, remediator is not required\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(authClient, remediator, idxResponse);\n return {\n idxResponse,\n nextStep,\n };\n }\n\n const name = remediator.getName();\n const data = remediator.getData();\n\n idxResponse = await idxResponse.proceed(name, data);\n if (idxResponse.requestDidSucceed === false) {\n return handleFailedResponse(authClient, idxResponse, options);\n }\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\n // generic remediator should not auto proceed in pending status\n // return nextStep directly\n if (options.useGenericRemediator && !idxResponse.interactionCode && !isTerminalResponse(idxResponse)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const gr = getRemediator(idxResponse.neededToProceed, values, options)!;\n const nextStep = getNextStep(authClient, gr, idxResponse);\n return {\n idxResponse,\n nextStep,\n };\n }\n \n return remediate(authClient, idxResponse, values, options); // recursive call\n\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"remediate.js","names":["getActionFromValues","values","idxResponse","Object","keys","actions","find","action","resend","includes","removeActionFromValues","undefined","removeActionFromOptions","options","actionName","filter","entry","name","remediate","authClient","neededToProceed","interactionCode","flow","remediator","getRemediator","actionFromValues","actionFromOptions","params","valuesWithoutExecutedAction","optionsWithoutExecutedAction","requestDidSucceed","handleFailedResponse","canceled","remediationAction","proceed","terminal","isTerminalResponse","step","filterValuesForRemediation","AuthSdkError","reduce","acc","curr","canRemediate","nextStep","getNextStep","getName","data","getData","getValuesAfterProceed","useGenericRemediator","gr"],"sources":["../../../lib/idx/remediate.ts"],"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 { OktaAuthIdxInterface, RemediateOptions, RemediationResponse } from './types';\nimport { \n IdxResponse,\n IdxActionParams, \n} from './types/idx-js';\nimport {\n isTerminalResponse,\n filterValuesForRemediation,\n getRemediator,\n getNextStep,\n handleFailedResponse\n} from './util';\n\nexport interface RemediateActionWithOptionalParams {\n name: string;\n params?: IdxActionParams;\n}\n\nexport type RemediateAction = string | RemediateActionWithOptionalParams;\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 authClient: OktaAuthIdxInterface,\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 const remediator = getRemediator(idxResponse, 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 idxResponse = await idxResponse.actions[action](params);\n if (idxResponse.requestDidSucceed === false) {\n return handleFailedResponse(authClient, idxResponse, options);\n }\n if (action === 'cancel') {\n return { idxResponse, canceled: true };\n }\n return remediate(\n authClient, \n idxResponse, \n valuesWithoutExecutedAction, \n optionsWithoutExecutedAction\n ); // recursive call\n }\n\n // search for action in remediation list\n const remediationAction = neededToProceed.find(({ name }) => name === action);\n if (remediationAction) {\n idxResponse = await idxResponse.proceed(action, params);\n if (idxResponse.requestDidSucceed === false) {\n return handleFailedResponse(authClient, idxResponse, options);\n }\n return remediate(authClient, idxResponse, values, optionsWithoutExecutedAction); // recursive call\n }\n }\n }\n\n // Do not attempt to remediate if response is in terminal state\n const terminal = isTerminalResponse(idxResponse);\n if (terminal) {\n return { idxResponse, terminal };\n }\n\n if (!remediator) {\n // With options.step, remediator is not required\n if (options.step) {\n values = filterValuesForRemediation(idxResponse, options.step, values); // include only requested values\n idxResponse = await idxResponse.proceed(options.step, values);\n if (idxResponse.requestDidSucceed === false) {\n return handleFailedResponse(authClient, idxResponse, options);\n }\n return { idxResponse };\n }\n\n // With default flow, remediator is not required\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(authClient, remediator, idxResponse);\n return {\n idxResponse,\n nextStep,\n };\n }\n\n const name = remediator.getName();\n const data = remediator.getData();\n\n idxResponse = await idxResponse.proceed(name, data);\n if (idxResponse.requestDidSucceed === false) {\n return handleFailedResponse(authClient, idxResponse, options);\n }\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\n // generic remediator should not auto proceed in pending status\n // return nextStep directly\n if (options.useGenericRemediator && !idxResponse.interactionCode && !isTerminalResponse(idxResponse)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const gr = getRemediator(idxResponse, values, options)!;\n const nextStep = getNextStep(authClient, gr, idxResponse);\n return {\n idxResponse,\n nextStep,\n };\n }\n \n return remediate(authClient, idxResponse, values, options); // recursive call\n\n}\n"],"mappings":";;;AAcA;AAOA;AArBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;;AAwBA,SAASA,mBAAmB,CAACC,MAAyB,EAAEC,WAAwB,EAAsB;EACpG;EACA,OAAOC,MAAM,CAACC,IAAI,CAACF,WAAW,CAACG,OAAO,CAAC,CAACC,IAAI,CAACC,MAAM,IAAI,CAAC,CAACN,MAAM,CAACO,MAAM,IAAID,MAAM,CAACE,QAAQ,CAAC,SAAS,CAAC,CAAC;AACvG;AAEA,SAASC,sBAAsB,CAACT,MAAyB,EAAqB;EAC5E;EACA,OAAO;IACL,GAAGA,MAAM;IACTO,MAAM,EAAEG;EACV,CAAC;AACH;AAEA,SAASC,uBAAuB,CAACC,OAAyB,EAAEC,UAAkB,EAAoB;EAChG,IAAIT,OAAO,GAAGQ,OAAO,CAACR,OAAO,IAAI,EAAE;EACnCA,OAAO,GAAGA,OAAO,CAACU,MAAM,CAACC,KAAK,IAAI;IAChC,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MAC7B,OAAOA,KAAK,KAAKF,UAAU;IAC7B;IACA,OAAOE,KAAK,CAACC,IAAI,KAAKH,UAAU;EAClC,CAAC,CAAC;EAEF,OAAO;IAAE,GAAGD,OAAO;IAAER;EAAQ,CAAC;AAChC;;AAEA;AACO,eAAea,SAAS,CAC7BC,UAAgC,EAChCjB,WAAwB,EACxBD,MAAyB,EACzBY,OAAyB,EACK;EAC9B,IAAI;IAAEO,eAAe;IAAEC;EAAgB,CAAC,GAAGnB,WAAW;EACtD,MAAM;IAAEoB;EAAK,CAAC,GAAGT,OAAO;;EAExB;EACA,IAAIQ,eAAe,EAAE;IACnB,OAAO;MAAEnB;IAAY,CAAC;EACxB;EAEA,MAAMqB,UAAU,GAAG,IAAAC,mBAAa,EAACtB,WAAW,EAAED,MAAM,EAAEY,OAAO,CAAC;;EAE9D;EACA,MAAMY,gBAAgB,GAAGzB,mBAAmB,CAACC,MAAM,EAAEC,WAAW,CAAC;EACjE,MAAMwB,iBAAiB,GAAGb,OAAO,CAACR,OAAO,IAAI,EAAE;EAC/C,MAAMA,OAAO,GAAG,CACd,GAAGqB,iBAAiB,EACpB,IAAID,gBAAgB,IAAI,CAACA,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAClD;EACD,IAAIpB,OAAO,EAAE;IACX,KAAK,IAAIE,MAAM,IAAIF,OAAO,EAAE;MAC1B;MACA,IAAIsB,MAAuB,GAAG,CAAC,CAAC;MAChC,IAAI,OAAOpB,MAAM,KAAK,QAAQ,EAAE;QAC9BoB,MAAM,GAAGpB,MAAM,CAACoB,MAAM,IAAI,CAAC,CAAC;QAC5BpB,MAAM,GAAGA,MAAM,CAACU,IAAI;MACtB;MACA,IAAIW,2BAA2B,GAAGlB,sBAAsB,CAACT,MAAM,CAAC;MAChE,IAAI4B,4BAA4B,GAAGjB,uBAAuB,CAACC,OAAO,EAAEN,MAAM,CAAC;MAE3E,IAAI,OAAOL,WAAW,CAACG,OAAO,CAACE,MAAM,CAAC,KAAK,UAAU,EAAE;QACrDL,WAAW,GAAG,MAAMA,WAAW,CAACG,OAAO,CAACE,MAAM,CAAC,CAACoB,MAAM,CAAC;QACvD,IAAIzB,WAAW,CAAC4B,iBAAiB,KAAK,KAAK,EAAE;UAC3C,OAAO,IAAAC,0BAAoB,EAACZ,UAAU,EAAEjB,WAAW,EAAEW,OAAO,CAAC;QAC/D;QACA,IAAIN,MAAM,KAAK,QAAQ,EAAE;UACvB,OAAO;YAAEL,WAAW;YAAE8B,QAAQ,EAAE;UAAK,CAAC;QACxC;QACA,OAAOd,SAAS,CACdC,UAAU,EACVjB,WAAW,EACX0B,2BAA2B,EAC3BC,4BAA4B,CAC7B,CAAC,CAAC;MACL;;MAEA;MACA,MAAMI,iBAAiB,GAAGb,eAAe,CAACd,IAAI,CAAC,CAAC;QAAEW;MAAK,CAAC,KAAKA,IAAI,KAAKV,MAAM,CAAC;MAC7E,IAAI0B,iBAAiB,EAAE;QACrB/B,WAAW,GAAG,MAAMA,WAAW,CAACgC,OAAO,CAAC3B,MAAM,EAAEoB,MAAM,CAAC;QACvD,IAAIzB,WAAW,CAAC4B,iBAAiB,KAAK,KAAK,EAAE;UAC3C,OAAO,IAAAC,0BAAoB,EAACZ,UAAU,EAAEjB,WAAW,EAAEW,OAAO,CAAC;QAC/D;QACA,OAAOK,SAAS,CAACC,UAAU,EAAEjB,WAAW,EAAED,MAAM,EAAE4B,4BAA4B,CAAC,CAAC,CAAC;MACnF;IACF;EACF;;EAEA;EACA,MAAMM,QAAQ,GAAG,IAAAC,wBAAkB,EAAClC,WAAW,CAAC;EAChD,IAAIiC,QAAQ,EAAE;IACZ,OAAO;MAAEjC,WAAW;MAAEiC;IAAS,CAAC;EAClC;EAEA,IAAI,CAACZ,UAAU,EAAE;IACf;IACA,IAAIV,OAAO,CAACwB,IAAI,EAAE;MAChBpC,MAAM,GAAG,IAAAqC,gCAA0B,EAACpC,WAAW,EAAEW,OAAO,CAACwB,IAAI,EAAEpC,MAAM,CAAC,CAAC,CAAC;MACxEC,WAAW,GAAG,MAAMA,WAAW,CAACgC,OAAO,CAACrB,OAAO,CAACwB,IAAI,EAAEpC,MAAM,CAAC;MAC7D,IAAIC,WAAW,CAAC4B,iBAAiB,KAAK,KAAK,EAAE;QAC3C,OAAO,IAAAC,0BAAoB,EAACZ,UAAU,EAAEjB,WAAW,EAAEW,OAAO,CAAC;MAC/D;MACA,OAAO;QAAEX;MAAY,CAAC;IACxB;;IAEA;IACA,IAAIoB,IAAI,KAAK,SAAS,EAAE;MACtB,OAAO;QAAEpB;MAAY,CAAC;IACxB;IACA,MAAM,IAAIqC,oBAAY,CAAE;AAC5B;AACA,uBAAuBnB,eAAe,CAACoB,MAAM,CAAC,CAACC,GAAG,EAAEC,IAAI,KAAKD,GAAG,GAAGA,GAAG,GAAG,IAAI,GAAGC,IAAI,CAACzB,IAAI,GAAGyB,IAAI,CAACzB,IAAI,EAAE,EAAE,CAAE;AAC3G,KAAK,CAAC;EACJ;;EAEA;EACA,IAAI,CAACM,UAAU,CAACoB,YAAY,EAAE,EAAE;IAC9B,MAAMC,QAAQ,GAAG,IAAAC,iBAAW,EAAC1B,UAAU,EAAEI,UAAU,EAAErB,WAAW,CAAC;IACjE,OAAO;MACLA,WAAW;MACX0C;IACF,CAAC;EACH;EAEA,MAAM3B,IAAI,GAAGM,UAAU,CAACuB,OAAO,EAAE;EACjC,MAAMC,IAAI,GAAGxB,UAAU,CAACyB,OAAO,EAAE;EAEjC9C,WAAW,GAAG,MAAMA,WAAW,CAACgC,OAAO,CAACjB,IAAI,EAAE8B,IAAI,CAAC;EACnD,IAAI7C,WAAW,CAAC4B,iBAAiB,KAAK,KAAK,EAAE;IAC3C,OAAO,IAAAC,0BAAoB,EAACZ,UAAU,EAAEjB,WAAW,EAAEW,OAAO,CAAC;EAC/D;EACA;EACA;EACAZ,MAAM,GAAGsB,UAAU,CAAC0B,qBAAqB,EAAE;EAC3CpC,OAAO,GAAG;IAAE,GAAGA,OAAO;IAAEwB,IAAI,EAAE1B;EAAU,CAAC,CAAC,CAAC;;EAE3C;EACA;EACA,IAAIE,OAAO,CAACqC,oBAAoB,IAAI,CAAChD,WAAW,CAACmB,eAAe,IAAI,CAAC,IAAAe,wBAAkB,EAAClC,WAAW,CAAC,EAAE;IACpG;IACA,MAAMiD,EAAE,GAAG,IAAA3B,mBAAa,EAACtB,WAAW,EAAED,MAAM,EAAEY,OAAO,CAAE;IACvD,MAAM+B,QAAQ,GAAG,IAAAC,iBAAW,EAAC1B,UAAU,EAAEgC,EAAE,EAAEjD,WAAW,CAAC;IACzD,OAAO;MACLA,WAAW;MACX0C;IACF,CAAC;EACH;EAEA,OAAO1B,SAAS,CAACC,UAAU,EAAEjB,WAAW,EAAED,MAAM,EAAEY,OAAO,CAAC,CAAC,CAAC;AAE9D"}
@@ -66,7 +66,7 @@ class Remediator {
66
66
 
67
67
  // Override this method to provide custom check
68
68
  /* eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars */
69
- canRemediate() {
69
+ canRemediate(context) {
70
70
  const required = (0, _util.getRequiredValues)(this.remediation);
71
71
  const needed = required.find(key => !this.hasData(key));
72
72
  if (needed) {
@@ -1 +1 @@
1
- {"version":3,"file":"Remediator.js","names":["Remediator","constructor","remediation","values","options","formatAuthenticators","authenticators","map","authenticator","formatAuthenticator","hasAuthenticatorInList","some","existing","compareAuthenticators","push","authenticatorsData","reduce","acc","Object","keys","length","getName","name","canRemediate","required","getRequiredValues","needed","find","key","hasData","getData","allValues","getAllValues","res","data","titleCase","val","value","entry","i","getNextStep","_authClient","_context","inputs","getInputs","getAuthenticator","type","inputsFromRemediation","forEach","inputFromRemediation","input","visible","messages","alias","aliases","includes","Array","isArray","getMessages","form","field","getValuesAfterProceed","inputsFromRemediator","relatesTo","authenticatorFromRemediation","getAuthenticatorFromRemediation","id","enrollmentId"],"sources":["../../../../../lib/idx/remediators/Base/Remediator.ts"],"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 { OktaAuthIdxInterface, NextStep, IdxMessage, Authenticator, Input, 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 {\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>(\n remediation: IdxRemediation, \n values?: T, \n options?: RemediateOptions\n ): 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(\n remediation: IdxRemediation, \n values: T = {} as T, \n options: RemediateOptions = {}\n ) {\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 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(_authClient: OktaAuthIdxInterface, _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 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"],"mappings":";;;AAiBA;AACA;AAlBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;;AAyBA;AACO,MAAMA,UAAU,CAAkD;EAQvEC,WAAW,CACTC,WAA2B,EAC3BC,MAAS,GAAG,CAAC,CAAM,EACnBC,OAAyB,GAAG,CAAC,CAAC,EAC9B;IACA;IACA,IAAI,CAACD,MAAM,GAAG;MAAE,GAAGA;IAAO,CAAC;IAC3B,IAAI,CAACC,OAAO,GAAG;MAAE,GAAGA;IAAQ,CAAC;IAC7B,IAAI,CAACC,oBAAoB,EAAE;IAC3B,IAAI,CAACH,WAAW,GAAGA,WAAW;EAChC;EAEQG,oBAAoB,GAAG;IAC7B,IAAI,CAACF,MAAM,CAACG,cAAc,GAAI,IAAI,CAACH,MAAM,CAACG,cAAc,IAAI,EAAsB;;IAElF;IACA,IAAI,CAACH,MAAM,CAACG,cAAc,GAAG,IAAI,CAACH,MAAM,CAACG,cAAc,CAACC,GAAG,CAACC,aAAa,IAAI;MAC3E,OAAO,IAAAC,0BAAmB,EAACD,aAAa,CAAC;IAC3C,CAAC,CAAC;;IAEF;IACA,IAAI,IAAI,CAACL,MAAM,CAACK,aAAa,EAAE;MAC7B,MAAMA,aAAa,GAAG,IAAAC,0BAAmB,EAAC,IAAI,CAACN,MAAM,CAACK,aAAa,CAAC;MACpE,MAAME,sBAAsB,GAAG,IAAI,CAACP,MAAM,CAACG,cAAc,CAACK,IAAI,CAACC,QAAQ,IAAI;QACzE,OAAO,IAAAC,4BAAqB,EAACL,aAAa,EAAEI,QAAQ,CAAC;MACvD,CAAC,CAAC;MACF,IAAI,CAACF,sBAAsB,EAAE;QAC3B,IAAI,CAACP,MAAM,CAACG,cAAc,CAACQ,IAAI,CAACN,aAAa,CAAC;MAChD;IACF;;IAEA;IACA;IACA,IAAI,CAACL,MAAM,CAACY,kBAAkB,GAAG,IAAI,CAACZ,MAAM,CAACG,cAAc,CAACU,MAAM,CAAC,CAACC,GAAG,EAAET,aAAa,KAAK;MACzF,IAAI,OAAOA,aAAa,KAAK,QAAQ,IAAIU,MAAM,CAACC,IAAI,CAACX,aAAa,CAAC,CAACY,MAAM,GAAG,CAAC,EAAE;QAC9E;QACAH,GAAG,CAACH,IAAI,CAACN,aAAa,CAAC;MACzB;MACA,OAAOS,GAAG;IACZ,CAAC,EAAE,IAAI,CAACd,MAAM,CAACY,kBAAkB,IAAI,EAAE,CAAC;EAC1C;EAEAM,OAAO,GAAW;IAChB,OAAO,IAAI,CAACnB,WAAW,CAACoB,IAAI;EAC9B;;EAEA;EACA;EACAC,YAAY,GAAY;IACtB,MAAMC,QAAQ,GAAG,IAAAC,uBAAiB,EAAC,IAAI,CAACvB,WAAW,CAAC;IACpD,MAAMwB,MAAM,GAAGF,QAAQ,CAAEG,IAAI,CAAEC,GAAG,IAAK,CAAC,IAAI,CAACC,OAAO,CAACD,GAAG,CAAC,CAAC;IAC1D,IAAIF,MAAM,EAAE;MACV,OAAO,KAAK,CAAC,CAAC;IAChB;;IACA,OAAO,IAAI,CAAC,CAAC;EACf;;EAEA;EACAI,OAAO,CAACF,GAAY,EAAE;IACpB,IAAI,CAACA,GAAG,EAAE;MACR,IAAIG,SAAS,GAAG,IAAAC,kBAAY,EAAC,IAAI,CAAC9B,WAAW,CAAC;MAC9C,IAAI+B,GAAG,GAAGF,SAAS,CAAEf,MAAM,CAAC,CAACkB,IAAI,EAAEN,GAAG,KAAK;QACzCM,IAAI,CAACN,GAAG,CAAC,GAAG,IAAI,CAACE,OAAO,CAACF,GAAG,CAAC,CAAC,CAAC;QAC/B,OAAOM,IAAI;MACb,CAAC,EAAE,CAAC,CAAC,CAAC;MACN,OAAOD,GAAG;IACZ;;IAEA;IACA,IAAI,OAAO,IAAI,CAAE,MAAK,IAAAE,eAAS,EAACP,GAAG,CAAE,EAAC,CAAC,KAAK,UAAU,EAAE;MACtD,MAAMQ,GAAG,GAAG,IAAI,CAAE,MAAK,IAAAD,eAAS,EAACP,GAAG,CAAE,EAAC,CAAC,CACtC,IAAI,CAAC1B,WAAW,CAACmC,KAAK,CAAEV,IAAI,CAAC,CAAC;QAACL;MAAI,CAAC,KAAKA,IAAI,KAAKM,GAAG,CAAC,CACvD;MACD,IAAIQ,GAAG,EAAE;QACP,OAAOA,GAAG;MACZ;IACF;;IAEA;IACA,IAAI,IAAI,CAAC7B,GAAG,IAAI,IAAI,CAACA,GAAG,CAACqB,GAAG,CAAC,EAAE;MAC7B,MAAMU,KAAK,GAAG,IAAI,CAAC/B,GAAG,CAACqB,GAAG,CAAC;MAC3B,KAAK,IAAIW,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,KAAK,CAAClB,MAAM,EAAEmB,CAAC,EAAE,EAAE;QACrC,IAAIH,GAAG,GAAG,IAAI,CAACjC,MAAM,CAACmC,KAAK,CAACC,CAAC,CAAC,CAAC;QAC/B,IAAIH,GAAG,EAAE;UACP,OAAOA,GAAG;QACZ;MACF;IACF;;IAEA;IACA,OAAO,IAAI,CAACjC,MAAM,CAACyB,GAAG,CAAC;EACzB;EAEAC,OAAO,CACLD,GAAW,EAEb;IACE;IACA,OAAO,CAAC,CAAC,IAAI,CAACE,OAAO,CAACF,GAAG,CAAC;EAC5B;EAEAY,WAAW,CAACC,WAAiC,EAAEC,QAAqB,EAAY;IAC9E,MAAMpB,IAAI,GAAG,IAAI,CAACD,OAAO,EAAE;IAC3B,MAAMsB,MAAM,GAAG,IAAI,CAACC,SAAS,EAAE;IAC/B,MAAMpC,aAAa,GAAG,IAAI,CAACqC,gBAAgB,EAAE;IAC7C;IACA;IACA,MAAMC,IAAI,GAAGtC,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEsC,IAAI;IAChC,OAAO;MACLxB,IAAI;MACJqB,MAAM;MACN,IAAIG,IAAI,IAAI;QAAEA;MAAK,CAAC,CAAC;MACrB,IAAItC,aAAa,IAAI;QAAEA;MAAc,CAAC;IACxC,CAAC;EACH;;EAEA;EACAoC,SAAS,GAAY;IACnB,MAAMD,MAAe,GAAG,EAAE;IAC1B,MAAMI,qBAAqB,GAAG,IAAI,CAAC7C,WAAW,CAACmC,KAAK,IAAI,EAAE;IAC1DU,qBAAqB,CAACC,OAAO,CAACC,oBAAoB,IAAI;MACpD,IAAIC,KAAK;MACT,IAAI;QAAE5B,IAAI;QAAEwB,IAAI;QAAEK,OAAO;QAAEC;MAAS,CAAC,GAAGH,oBAAoB;MAC5D,IAAIE,OAAO,KAAK,KAAK,EAAE;QACrB,OAAO,CAAC;MACV;;MACA,IAAI,OAAO,IAAI,CAAE,WAAU,IAAAhB,eAAS,EAACb,IAAI,CAAE,EAAC,CAAC,KAAK,UAAU,EAAE;QAC5D4B,KAAK,GAAG,IAAI,CAAE,WAAU,IAAAf,eAAS,EAACb,IAAI,CAAE,EAAC,CAAC,CAAC2B,oBAAoB,CAAC;MAClE,CAAC,MAAM,IAAIH,IAAI,KAAK,QAAQ,EAAE;QAC5B;QACA,IAAIO,KAAK;QACT,MAAMC,OAAO,GAAG,CAAC,IAAI,CAAC/C,GAAG,GAAG,IAAI,CAACA,GAAG,CAACe,IAAI,CAAC,GAAG,IAAI,KAAK,EAAE;QACxD,IAAIgC,OAAO,CAAClC,MAAM,KAAK,CAAC,EAAE;UACxBiC,KAAK,GAAGC,OAAO,CAAC,CAAC,CAAC;QACpB,CAAC,MAAM;UACL;UACAD,KAAK,GAAGC,OAAO,CAAC3B,IAAI,CAACL,IAAI,IAAIJ,MAAM,CAACC,IAAI,CAAC,IAAI,CAAChB,MAAM,CAAC,CAACoD,QAAQ,CAACjC,IAAI,CAAC,CAAC;QACvE;QACA,IAAI+B,KAAK,EAAE;UACTH,KAAK,GAAG;YAAE,GAAGD,oBAAoB;YAAE3B,IAAI,EAAE+B;UAAM,CAAC;QAClD;MACF;MACA,IAAI,CAACH,KAAK,EAAE;QACVA,KAAK,GAAGD,oBAAoB;MAC9B;MACA,IAAIO,KAAK,CAACC,OAAO,CAACP,KAAK,CAAC,EAAE;QACxBA,KAAK,CAACF,OAAO,CAACT,CAAC,IAAII,MAAM,CAAC7B,IAAI,CAACyB,CAAC,CAAC,CAAC;MACpC,CAAC,MAAM;QACL;QACA,IAAIa,QAAQ,EAAE;UACZF,KAAK,CAACE,QAAQ,GAAGA,QAAQ;QAC3B;QACAT,MAAM,CAAC7B,IAAI,CAACoC,KAAK,CAAC;MACpB;IACF,CAAC,CAAC;IACF,OAAOP,MAAM;EACf;EAEA,OAAOe,WAAW,CAACxD,WAA2B,EAA4B;IAAA;IACxE,IAAI,CAACA,WAAW,CAACmC,KAAK,EAAE;MACtB;IACF;IACA,8BAAOnC,WAAW,CAACmC,KAAK,CAAC,CAAC,CAAC,iFAApB,oBAAsBsB,IAAI,0DAA1B,sBAA4BtB,KAAK,CAACrB,MAAM,CAAC,CAACoC,QAAsB,EAAEQ,KAAK,KAAK;MACjF,IAAIA,KAAK,CAACR,QAAQ,EAAE;QAClBA,QAAQ,GAAG,CAAC,GAAGA,QAAQ,EAAE,GAAGQ,KAAK,CAACR,QAAQ,CAACf,KAAK,CAAC;MACnD;MACA,OAAOe,QAAQ;IACjB,CAAC,EAAE,EAAE,CAAC;EACR;;EAEA;EACA;EACA;EACAS,qBAAqB,GAAM;IACzB,MAAMd,qBAAqB,GAAG,IAAI,CAAC7C,WAAW,CAACmC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAMyB,oBAAoB,GAAG,IAAI,CAAClB,SAAS,EAAE,CAAC,CAAC;IAC/C,MAAMD,MAAM,GAAG,CACb,GAAGI,qBAAqB,EACxB,GAAGe,oBAAoB,CACxB;IACD;IACA,KAAK,MAAMZ,KAAK,IAAIP,MAAM,EAAE;MAC1B,OAAO,IAAI,CAACxC,MAAM,CAAC+C,KAAK,CAAC5B,IAAI,CAAC;IAChC;IACA,OAAO,IAAI,CAACnB,MAAM;EACpB;EAEU0C,gBAAgB,GAAiC;IAAA;IACzD;IACA,MAAMkB,SAAS,4BAAG,IAAI,CAAC7D,WAAW,CAAC6D,SAAS,0DAA1B,sBAA4B1B,KAAK;IACnD,IAAI,CAAC0B,SAAS,EAAE;MACd;IACF;IAEA,MAAMC,4BAA4B,GAAG,IAAAC,qCAA+B,EAAC,IAAI,CAAC/D,WAAW,CAAC;IACtF,IAAI,CAAC8D,4BAA4B,EAAE;MACjC;MACA,OAAOD,SAAS;IAClB;;IAEA;IACA;IACA,MAAMG,EAAE,GAAGF,4BAA4B,CAACL,IAAI,CAAEtB,KAAK,CAChDV,IAAI,CAAC,CAAC;MAAEL;IAAK,CAAC,KAAKA,IAAI,KAAK,IAAI,CAAC,CAAEe,KAAe;IACrD,MAAM8B,YAAY,kBAAGH,4BAA4B,CAACL,IAAI,CAAEtB,KAAK,CAC1DV,IAAI,CAAC,CAAC;MAAEL;IAAK,CAAC,KAAKA,IAAI,KAAK,cAAc,CAAC,gDADzB,YAC2Be,KAAe;IAE/D,OAAO;MACL,GAAG0B,SAAS;MACZG,EAAE;MACFC;IACF,CAAC;EACH;AACF;AAAC"}
1
+ {"version":3,"file":"Remediator.js","names":["Remediator","constructor","remediation","values","options","formatAuthenticators","authenticators","map","authenticator","formatAuthenticator","hasAuthenticatorInList","some","existing","compareAuthenticators","push","authenticatorsData","reduce","acc","Object","keys","length","getName","name","canRemediate","context","required","getRequiredValues","needed","find","key","hasData","getData","allValues","getAllValues","res","data","titleCase","val","value","entry","i","getNextStep","_authClient","_context","inputs","getInputs","getAuthenticator","type","inputsFromRemediation","forEach","inputFromRemediation","input","visible","messages","alias","aliases","includes","Array","isArray","getMessages","form","field","getValuesAfterProceed","inputsFromRemediator","relatesTo","authenticatorFromRemediation","getAuthenticatorFromRemediation","id","enrollmentId"],"sources":["../../../../../lib/idx/remediators/Base/Remediator.ts"],"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 { OktaAuthIdxInterface, NextStep, IdxMessage, Authenticator, Input, 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 {\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>(\n remediation: IdxRemediation, \n values?: T, \n options?: RemediateOptions\n ): 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(\n remediation: IdxRemediation, \n values: T = {} as T, \n options: RemediateOptions = {}\n ) {\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(context?: IdxContext): 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 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(_authClient: OktaAuthIdxInterface, _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 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"],"mappings":";;;AAiBA;AACA;AAlBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;;AAyBA;AACO,MAAMA,UAAU,CAAkD;EAQvEC,WAAW,CACTC,WAA2B,EAC3BC,MAAS,GAAG,CAAC,CAAM,EACnBC,OAAyB,GAAG,CAAC,CAAC,EAC9B;IACA;IACA,IAAI,CAACD,MAAM,GAAG;MAAE,GAAGA;IAAO,CAAC;IAC3B,IAAI,CAACC,OAAO,GAAG;MAAE,GAAGA;IAAQ,CAAC;IAC7B,IAAI,CAACC,oBAAoB,EAAE;IAC3B,IAAI,CAACH,WAAW,GAAGA,WAAW;EAChC;EAEQG,oBAAoB,GAAG;IAC7B,IAAI,CAACF,MAAM,CAACG,cAAc,GAAI,IAAI,CAACH,MAAM,CAACG,cAAc,IAAI,EAAsB;;IAElF;IACA,IAAI,CAACH,MAAM,CAACG,cAAc,GAAG,IAAI,CAACH,MAAM,CAACG,cAAc,CAACC,GAAG,CAACC,aAAa,IAAI;MAC3E,OAAO,IAAAC,0BAAmB,EAACD,aAAa,CAAC;IAC3C,CAAC,CAAC;;IAEF;IACA,IAAI,IAAI,CAACL,MAAM,CAACK,aAAa,EAAE;MAC7B,MAAMA,aAAa,GAAG,IAAAC,0BAAmB,EAAC,IAAI,CAACN,MAAM,CAACK,aAAa,CAAC;MACpE,MAAME,sBAAsB,GAAG,IAAI,CAACP,MAAM,CAACG,cAAc,CAACK,IAAI,CAACC,QAAQ,IAAI;QACzE,OAAO,IAAAC,4BAAqB,EAACL,aAAa,EAAEI,QAAQ,CAAC;MACvD,CAAC,CAAC;MACF,IAAI,CAACF,sBAAsB,EAAE;QAC3B,IAAI,CAACP,MAAM,CAACG,cAAc,CAACQ,IAAI,CAACN,aAAa,CAAC;MAChD;IACF;;IAEA;IACA;IACA,IAAI,CAACL,MAAM,CAACY,kBAAkB,GAAG,IAAI,CAACZ,MAAM,CAACG,cAAc,CAACU,MAAM,CAAC,CAACC,GAAG,EAAET,aAAa,KAAK;MACzF,IAAI,OAAOA,aAAa,KAAK,QAAQ,IAAIU,MAAM,CAACC,IAAI,CAACX,aAAa,CAAC,CAACY,MAAM,GAAG,CAAC,EAAE;QAC9E;QACAH,GAAG,CAACH,IAAI,CAACN,aAAa,CAAC;MACzB;MACA,OAAOS,GAAG;IACZ,CAAC,EAAE,IAAI,CAACd,MAAM,CAACY,kBAAkB,IAAI,EAAE,CAAC;EAC1C;EAEAM,OAAO,GAAW;IAChB,OAAO,IAAI,CAACnB,WAAW,CAACoB,IAAI;EAC9B;;EAEA;EACA;EACAC,YAAY,CAACC,OAAoB,EAAW;IAC1C,MAAMC,QAAQ,GAAG,IAAAC,uBAAiB,EAAC,IAAI,CAACxB,WAAW,CAAC;IACpD,MAAMyB,MAAM,GAAGF,QAAQ,CAAEG,IAAI,CAAEC,GAAG,IAAK,CAAC,IAAI,CAACC,OAAO,CAACD,GAAG,CAAC,CAAC;IAC1D,IAAIF,MAAM,EAAE;MACV,OAAO,KAAK,CAAC,CAAC;IAChB;;IACA,OAAO,IAAI,CAAC,CAAC;EACf;;EAEA;EACAI,OAAO,CAACF,GAAY,EAAE;IACpB,IAAI,CAACA,GAAG,EAAE;MACR,IAAIG,SAAS,GAAG,IAAAC,kBAAY,EAAC,IAAI,CAAC/B,WAAW,CAAC;MAC9C,IAAIgC,GAAG,GAAGF,SAAS,CAAEhB,MAAM,CAAC,CAACmB,IAAI,EAAEN,GAAG,KAAK;QACzCM,IAAI,CAACN,GAAG,CAAC,GAAG,IAAI,CAACE,OAAO,CAACF,GAAG,CAAC,CAAC,CAAC;QAC/B,OAAOM,IAAI;MACb,CAAC,EAAE,CAAC,CAAC,CAAC;MACN,OAAOD,GAAG;IACZ;;IAEA;IACA,IAAI,OAAO,IAAI,CAAE,MAAK,IAAAE,eAAS,EAACP,GAAG,CAAE,EAAC,CAAC,KAAK,UAAU,EAAE;MACtD,MAAMQ,GAAG,GAAG,IAAI,CAAE,MAAK,IAAAD,eAAS,EAACP,GAAG,CAAE,EAAC,CAAC,CACtC,IAAI,CAAC3B,WAAW,CAACoC,KAAK,CAAEV,IAAI,CAAC,CAAC;QAACN;MAAI,CAAC,KAAKA,IAAI,KAAKO,GAAG,CAAC,CACvD;MACD,IAAIQ,GAAG,EAAE;QACP,OAAOA,GAAG;MACZ;IACF;;IAEA;IACA,IAAI,IAAI,CAAC9B,GAAG,IAAI,IAAI,CAACA,GAAG,CAACsB,GAAG,CAAC,EAAE;MAC7B,MAAMU,KAAK,GAAG,IAAI,CAAChC,GAAG,CAACsB,GAAG,CAAC;MAC3B,KAAK,IAAIW,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,KAAK,CAACnB,MAAM,EAAEoB,CAAC,EAAE,EAAE;QACrC,IAAIH,GAAG,GAAG,IAAI,CAAClC,MAAM,CAACoC,KAAK,CAACC,CAAC,CAAC,CAAC;QAC/B,IAAIH,GAAG,EAAE;UACP,OAAOA,GAAG;QACZ;MACF;IACF;;IAEA;IACA,OAAO,IAAI,CAAClC,MAAM,CAAC0B,GAAG,CAAC;EACzB;EAEAC,OAAO,CACLD,GAAW,EAEb;IACE;IACA,OAAO,CAAC,CAAC,IAAI,CAACE,OAAO,CAACF,GAAG,CAAC;EAC5B;EAEAY,WAAW,CAACC,WAAiC,EAAEC,QAAqB,EAAY;IAC9E,MAAMrB,IAAI,GAAG,IAAI,CAACD,OAAO,EAAE;IAC3B,MAAMuB,MAAM,GAAG,IAAI,CAACC,SAAS,EAAE;IAC/B,MAAMrC,aAAa,GAAG,IAAI,CAACsC,gBAAgB,EAAE;IAC7C;IACA;IACA,MAAMC,IAAI,GAAGvC,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEuC,IAAI;IAChC,OAAO;MACLzB,IAAI;MACJsB,MAAM;MACN,IAAIG,IAAI,IAAI;QAAEA;MAAK,CAAC,CAAC;MACrB,IAAIvC,aAAa,IAAI;QAAEA;MAAc,CAAC;IACxC,CAAC;EACH;;EAEA;EACAqC,SAAS,GAAY;IACnB,MAAMD,MAAe,GAAG,EAAE;IAC1B,MAAMI,qBAAqB,GAAG,IAAI,CAAC9C,WAAW,CAACoC,KAAK,IAAI,EAAE;IAC1DU,qBAAqB,CAACC,OAAO,CAACC,oBAAoB,IAAI;MACpD,IAAIC,KAAK;MACT,IAAI;QAAE7B,IAAI;QAAEyB,IAAI;QAAEK,OAAO;QAAEC;MAAS,CAAC,GAAGH,oBAAoB;MAC5D,IAAIE,OAAO,KAAK,KAAK,EAAE;QACrB,OAAO,CAAC;MACV;;MACA,IAAI,OAAO,IAAI,CAAE,WAAU,IAAAhB,eAAS,EAACd,IAAI,CAAE,EAAC,CAAC,KAAK,UAAU,EAAE;QAC5D6B,KAAK,GAAG,IAAI,CAAE,WAAU,IAAAf,eAAS,EAACd,IAAI,CAAE,EAAC,CAAC,CAAC4B,oBAAoB,CAAC;MAClE,CAAC,MAAM,IAAIH,IAAI,KAAK,QAAQ,EAAE;QAC5B;QACA,IAAIO,KAAK;QACT,MAAMC,OAAO,GAAG,CAAC,IAAI,CAAChD,GAAG,GAAG,IAAI,CAACA,GAAG,CAACe,IAAI,CAAC,GAAG,IAAI,KAAK,EAAE;QACxD,IAAIiC,OAAO,CAACnC,MAAM,KAAK,CAAC,EAAE;UACxBkC,KAAK,GAAGC,OAAO,CAAC,CAAC,CAAC;QACpB,CAAC,MAAM;UACL;UACAD,KAAK,GAAGC,OAAO,CAAC3B,IAAI,CAACN,IAAI,IAAIJ,MAAM,CAACC,IAAI,CAAC,IAAI,CAAChB,MAAM,CAAC,CAACqD,QAAQ,CAAClC,IAAI,CAAC,CAAC;QACvE;QACA,IAAIgC,KAAK,EAAE;UACTH,KAAK,GAAG;YAAE,GAAGD,oBAAoB;YAAE5B,IAAI,EAAEgC;UAAM,CAAC;QAClD;MACF;MACA,IAAI,CAACH,KAAK,EAAE;QACVA,KAAK,GAAGD,oBAAoB;MAC9B;MACA,IAAIO,KAAK,CAACC,OAAO,CAACP,KAAK,CAAC,EAAE;QACxBA,KAAK,CAACF,OAAO,CAACT,CAAC,IAAII,MAAM,CAAC9B,IAAI,CAAC0B,CAAC,CAAC,CAAC;MACpC,CAAC,MAAM;QACL;QACA,IAAIa,QAAQ,EAAE;UACZF,KAAK,CAACE,QAAQ,GAAGA,QAAQ;QAC3B;QACAT,MAAM,CAAC9B,IAAI,CAACqC,KAAK,CAAC;MACpB;IACF,CAAC,CAAC;IACF,OAAOP,MAAM;EACf;EAEA,OAAOe,WAAW,CAACzD,WAA2B,EAA4B;IAAA;IACxE,IAAI,CAACA,WAAW,CAACoC,KAAK,EAAE;MACtB;IACF;IACA,8BAAOpC,WAAW,CAACoC,KAAK,CAAC,CAAC,CAAC,iFAApB,oBAAsBsB,IAAI,0DAA1B,sBAA4BtB,KAAK,CAACtB,MAAM,CAAC,CAACqC,QAAsB,EAAEQ,KAAK,KAAK;MACjF,IAAIA,KAAK,CAACR,QAAQ,EAAE;QAClBA,QAAQ,GAAG,CAAC,GAAGA,QAAQ,EAAE,GAAGQ,KAAK,CAACR,QAAQ,CAACf,KAAK,CAAC;MACnD;MACA,OAAOe,QAAQ;IACjB,CAAC,EAAE,EAAE,CAAC;EACR;;EAEA;EACA;EACA;EACAS,qBAAqB,GAAM;IACzB,MAAMd,qBAAqB,GAAG,IAAI,CAAC9C,WAAW,CAACoC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAMyB,oBAAoB,GAAG,IAAI,CAAClB,SAAS,EAAE,CAAC,CAAC;IAC/C,MAAMD,MAAM,GAAG,CACb,GAAGI,qBAAqB,EACxB,GAAGe,oBAAoB,CACxB;IACD;IACA,KAAK,MAAMZ,KAAK,IAAIP,MAAM,EAAE;MAC1B,OAAO,IAAI,CAACzC,MAAM,CAACgD,KAAK,CAAC7B,IAAI,CAAC;IAChC;IACA,OAAO,IAAI,CAACnB,MAAM;EACpB;EAEU2C,gBAAgB,GAAiC;IAAA;IACzD;IACA,MAAMkB,SAAS,4BAAG,IAAI,CAAC9D,WAAW,CAAC8D,SAAS,0DAA1B,sBAA4B1B,KAAK;IACnD,IAAI,CAAC0B,SAAS,EAAE;MACd;IACF;IAEA,MAAMC,4BAA4B,GAAG,IAAAC,qCAA+B,EAAC,IAAI,CAAChE,WAAW,CAAC;IACtF,IAAI,CAAC+D,4BAA4B,EAAE;MACjC;MACA,OAAOD,SAAS;IAClB;;IAEA;IACA;IACA,MAAMG,EAAE,GAAGF,4BAA4B,CAACL,IAAI,CAAEtB,KAAK,CAChDV,IAAI,CAAC,CAAC;MAAEN;IAAK,CAAC,KAAKA,IAAI,KAAK,IAAI,CAAC,CAAEgB,KAAe;IACrD,MAAM8B,YAAY,kBAAGH,4BAA4B,CAACL,IAAI,CAAEtB,KAAK,CAC1DV,IAAI,CAAC,CAAC;MAAEN;IAAK,CAAC,KAAKA,IAAI,KAAK,cAAc,CAAC,gDADzB,YAC2BgB,KAAe;IAE/D,OAAO;MACL,GAAG0B,SAAS;MACZG,EAAE;MACFC;IACF,CAAC;EACH;AACF;AAAC"}
@@ -26,14 +26,16 @@ class SelectAuthenticator extends _Remediator.Remediator {
26
26
  for (let authenticator of authenticators) {
27
27
  option = options.find(({
28
28
  relatesTo
29
- }) => relatesTo.key === authenticator.key);
29
+ }) => relatesTo.key && relatesTo.key === authenticator.key);
30
30
  if (option) {
31
31
  break;
32
32
  }
33
33
  }
34
34
  return option;
35
35
  }
36
- canRemediate() {
36
+
37
+ /* eslint complexity:[0,9] */
38
+ canRemediate(context) {
37
39
  const {
38
40
  authenticators,
39
41
  authenticator
@@ -55,7 +57,11 @@ class SelectAuthenticator extends _Remediator.Remediator {
55
57
  // Proceed with provided authenticators
56
58
  const matchedOption = this.findMatchedOption(authenticators, options);
57
59
  if (matchedOption) {
58
- return true;
60
+ var _matchedOption$relate, _matchedOption$relate2;
61
+ // Don't select current authenticator (OKTA-612939)
62
+ const isCurrentAuthenticator = (context === null || context === void 0 ? void 0 : context.currentAuthenticator) && (context === null || context === void 0 ? void 0 : context.currentAuthenticator.value.id) === ((_matchedOption$relate = matchedOption.relatesTo) === null || _matchedOption$relate === void 0 ? void 0 : _matchedOption$relate.id);
63
+ const isCurrentAuthenticatorEnrollment = (context === null || context === void 0 ? void 0 : context.currentAuthenticatorEnrollment) && (context === null || context === void 0 ? void 0 : context.currentAuthenticatorEnrollment.value.id) === ((_matchedOption$relate2 = matchedOption.relatesTo) === null || _matchedOption$relate2 === void 0 ? void 0 : _matchedOption$relate2.id);
64
+ return !isCurrentAuthenticator && !isCurrentAuthenticatorEnrollment;
59
65
  }
60
66
  return false;
61
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SelectAuthenticator.js","names":["SelectAuthenticator","Remediator","findMatchedOption","authenticators","options","option","authenticator","find","relatesTo","key","canRemediate","values","authenticatorFromRemediation","getAuthenticatorFromRemediation","remediation","length","isAuthenticator","id","matchedOption","mapAuthenticator","remediationValue","selectedAuthenticator","selectedOption","value","form","name","getInputAuthenticator","map","label","type","getValuesAfterProceed","filter","compareAuthenticators"],"sources":["../../../../../lib/idx/remediators/Base/SelectAuthenticator.ts"],"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 { IdxRemediationValue } from '../../types/idx-js';\nimport { Authenticator, isAuthenticator } from '../../types/api';\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 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(remediation) {\n const options = remediation.options.map(({ label, relatesTo }) => {\n return {\n label,\n value: relatesTo.key\n };\n });\n return { name: 'authenticator', type: 'string', options };\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"],"mappings":"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"}
1
+ {"version":3,"file":"SelectAuthenticator.js","names":["SelectAuthenticator","Remediator","findMatchedOption","authenticators","options","option","authenticator","find","relatesTo","key","canRemediate","context","values","authenticatorFromRemediation","getAuthenticatorFromRemediation","remediation","length","isAuthenticator","id","matchedOption","isCurrentAuthenticator","currentAuthenticator","value","isCurrentAuthenticatorEnrollment","currentAuthenticatorEnrollment","mapAuthenticator","remediationValue","selectedAuthenticator","selectedOption","form","name","getInputAuthenticator","map","label","type","getValuesAfterProceed","filter","compareAuthenticators"],"sources":["../../../../../lib/idx/remediators/Base/SelectAuthenticator.ts"],"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 { IdxRemediationValue, IdxContext, IdxOption } from '../../types/idx-js';\nimport { Authenticator, isAuthenticator } from '../../types/api';\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: IdxOption | undefined;\n for (let authenticator of authenticators) {\n option = options\n .find(({ relatesTo }) => relatesTo.key && relatesTo.key === authenticator.key);\n if (option) {\n break;\n }\n }\n return option;\n }\n\n /* eslint complexity:[0,9] */\n canRemediate(context?: IdxContext) {\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 // Don't select current authenticator (OKTA-612939)\n const isCurrentAuthenticator = context?.currentAuthenticator\n && context?.currentAuthenticator.value.id === matchedOption.relatesTo?.id;\n const isCurrentAuthenticatorEnrollment = context?.currentAuthenticatorEnrollment\n && context?.currentAuthenticatorEnrollment.value.id === matchedOption.relatesTo?.id;\n return !isCurrentAuthenticator && !isCurrentAuthenticatorEnrollment;\n }\n \n return false;\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(remediation) {\n const options = remediation.options.map(({ label, relatesTo }) => {\n return {\n label,\n value: relatesTo.key\n };\n });\n return { name: 'authenticator', type: 'string', options };\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"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","names":["IdxStatus","AuthenticatorKey","IdxFeature","isAuthenticator","obj","key","id"],"sources":["../../../../lib/idx/types/api.ts"],"sourcesContent":["/*!\n * Copyright (c) 2021-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { APIError } from '../../errors/types';\nimport {\n OktaAuthOAuthInterface,\n Tokens,\n TransactionManagerConstructor,\n TransactionManagerInterface\n} from '../../oidc/types';\nimport { FlowIdentifier } from './FlowIdentifier';\nimport {\n IdxActions,\n IdxAuthenticator,\n IdxContext,\n IdxForm,\n IdxMessage,\n IdxOption,\n IdxRemediation,\n IdxResponse,\n RawIdxResponse,\n IdxActionParams,\n IdpConfig,\n IdxToPersist,\n ChallengeData,\n ActivationData,\n} from './idx-js';\nimport {\n AccountUnlockOptions,\n AuthenticationOptions,\n CancelOptions,\n InteractOptions,\n IntrospectOptions,\n OktaAuthIdxOptions,\n PasswordRecoveryOptions,\n ProceedOptions,\n RegistrationOptions,\n StartOptions,\n IdxTransactionMetaOptions\n} from './options';\nimport { IdxTransactionMeta } from './meta';\nimport { IdxStorageManagerInterface, SavedIdxResponse } from './storage';\nimport type {\n WebauthnEnrollValues,\n WebauthnVerificationValues\n} from '../authenticator';\nimport { OktaAuthConstructor } from '../../base/types';\n\nexport enum IdxStatus {\n SUCCESS = 'SUCCESS',\n PENDING = 'PENDING',\n FAILURE = 'FAILURE',\n TERMINAL = 'TERMINAL',\n CANCELED = 'CANCELED',\n}\n\nexport enum AuthenticatorKey {\n OKTA_PASSWORD = 'okta_password',\n OKTA_EMAIL = 'okta_email',\n PHONE_NUMBER = 'phone_number',\n GOOGLE_AUTHENTICATOR = 'google_otp',\n SECURITY_QUESTION = 'security_question',\n OKTA_VERIFY = 'okta_verify',\n WEBAUTHN = 'webauthn',\n}\n\nexport type Input = {\n name: string;\n key?: string;\n type?: string;\n label?: string;\n value?: string | {form: IdxForm} | Input[];\n minLength?: number;\n maxLength?: number;\n secret?: boolean;\n required?: boolean;\n options?: IdxOption[];\n mutable?: boolean;\n visible?: boolean;\n}\n\n\nexport interface IdxPollOptions {\n required?: boolean;\n refresh?: number;\n}\n\nexport type NextStep = {\n name: string;\n authenticator?: IdxAuthenticator;\n canSkip?: boolean;\n canResend?: boolean;\n inputs?: Input[];\n poll?: IdxPollOptions;\n authenticatorEnrollments?: IdxAuthenticator[];\n // eslint-disable-next-line no-use-before-define\n action?: (params?: IdxActionParams) => Promise<IdxTransaction>;\n idp?: IdpConfig;\n href?: string;\n relatesTo?: {\n type?: string;\n value: IdxAuthenticator;\n };\n refresh?: number;\n}\n\nexport enum IdxFeature {\n PASSWORD_RECOVERY = 'recover-password',\n REGISTRATION = 'enroll-profile',\n SOCIAL_IDP = 'redirect-idp',\n ACCOUNT_UNLOCK = 'unlock-account',\n}\n\n\nexport interface IdxTransaction {\n status: IdxStatus;\n tokens?: Tokens;\n nextStep?: NextStep;\n messages?: IdxMessage[];\n error?: APIError | IdxResponse;\n meta?: IdxTransactionMeta;\n enabledFeatures?: IdxFeature[];\n availableSteps?: NextStep[];\n requestDidSucceed?: boolean;\n stepUp?: boolean;\n \n // from idx-js, used by signin widget\n proceed: (remediationName: string, params: unknown) => Promise<IdxResponse>;\n neededToProceed: IdxRemediation[];\n rawIdxState: RawIdxResponse;\n interactionCode?: string;\n actions: IdxActions;\n context: IdxContext;\n}\n\n\nexport type Authenticator = {\n id?: string;\n key?: string;\n methodType?: string;\n phoneNumber?: string;\n channel?: string;\n};\n\nexport function isAuthenticator(obj: any): obj is Authenticator {\n return obj && (obj.key || obj.id);\n}\n\nexport interface RemediationResponse {\n idxResponse: IdxResponse;\n nextStep?: NextStep;\n messages?: IdxMessage[];\n terminal?: boolean;\n canceled?: boolean;\n}\n\nexport interface InteractResponse {\n state?: string;\n interactionHandle: string;\n meta: IdxTransactionMeta;\n}\n\nexport interface EmailVerifyCallbackResponse {\n state: string;\n otp: string;\n}\n\nexport interface IdxAPI {\n // lowest level api\n interact: (options?: InteractOptions) => Promise<InteractResponse>;\n introspect: (options?: IntrospectOptions) => Promise<IdxResponse>;\n makeIdxResponse: (rawIdxResponse: RawIdxResponse, toPersist: IdxToPersist, requestDidSucceed: boolean) => IdxResponse;\n\n // flow entrypoints\n authenticate: (options?: AuthenticationOptions) => Promise<IdxTransaction>;\n register: (options?: RegistrationOptions) => Promise<IdxTransaction>;\n recoverPassword: (options?: PasswordRecoveryOptions) => Promise<IdxTransaction>;\n unlockAccount: (options?: AccountUnlockOptions) => Promise<IdxTransaction>;\n poll: (options?: IdxPollOptions) => Promise<IdxTransaction>;\n\n // flow control\n start: (options?: StartOptions) => Promise<IdxTransaction>;\n canProceed(options?: ProceedOptions): boolean;\n proceed: (options?: ProceedOptions) => Promise<IdxTransaction>;\n cancel: (options?: CancelOptions) => Promise<IdxTransaction>;\n getFlow(): FlowIdentifier | undefined;\n setFlow(flow: FlowIdentifier): void;\n\n // call `start` instead of `startTransaction`. `startTransaction` will be removed in next major version (7.0)\n startTransaction: (options?: StartOptions) => Promise<IdxTransaction>;\n\n // redirect callbacks\n isInteractionRequired: (hashOrSearch?: string) => boolean;\n isInteractionRequiredError: (error: Error) => boolean; \n handleInteractionCodeRedirect: (url: string) => Promise<void>;\n isEmailVerifyCallback: (search: string) => boolean;\n parseEmailVerifyCallback: (search: string) => EmailVerifyCallbackResponse;\n handleEmailVerifyCallback: (search: string) => Promise<IdxTransaction | undefined>;\n isEmailVerifyCallbackError: (error: Error) => boolean;\n\n // transaction meta\n getSavedTransactionMeta: (options?: IdxTransactionMetaOptions) => IdxTransactionMeta | undefined;\n createTransactionMeta: (options?: IdxTransactionMetaOptions) => Promise<IdxTransactionMeta>;\n getTransactionMeta: (options?: IdxTransactionMetaOptions) => Promise<IdxTransactionMeta>;\n saveTransactionMeta: (meta: unknown) => void;\n clearTransactionMeta: () => void;\n isTransactionMetaValid: (meta: unknown) => boolean;\n}\n\nexport interface IdxTransactionManagerInterface extends TransactionManagerInterface {\n saveIdxResponse(data: SavedIdxResponse): void;\n loadIdxResponse(options?: IntrospectOptions): SavedIdxResponse | null;\n clearIdxResponse(): void;\n}\n\nexport type IdxTransactionManagerConstructor = TransactionManagerConstructor<IdxTransactionManagerInterface>;\n\nexport interface WebauthnAPI {\n getAssertion(credential: PublicKeyCredential): WebauthnVerificationValues;\n getAttestation(credential: PublicKeyCredential): WebauthnEnrollValues;\n buildCredentialRequestOptions(\n challengeData: ChallengeData, authenticatorEnrollments: IdxAuthenticator[]\n ): CredentialRequestOptions;\n buildCredentialCreationOptions(\n activationData: ActivationData, authenticatorEnrollments: IdxAuthenticator[]\n ): CredentialCreationOptions;\n}\n\nexport interface OktaAuthIdxInterface\n<\n M extends IdxTransactionMeta = IdxTransactionMeta,\n S extends IdxStorageManagerInterface<M> = IdxStorageManagerInterface<M>,\n O extends OktaAuthIdxOptions = OktaAuthIdxOptions,\n TM extends IdxTransactionManagerInterface = IdxTransactionManagerInterface\n>\n extends OktaAuthOAuthInterface<M, S, O, TM>\n{\n idx: IdxAPI;\n}\n\nexport interface OktaAuthIdxConstructor\n<\n I extends OktaAuthIdxInterface = OktaAuthIdxInterface\n>\n extends OktaAuthConstructor<I>\n{\n new(...args: any[]): I;\n webauthn: WebauthnAPI;\n}\n\n"],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAVA,IAyDYA,SAAS;AAAA;AAAA,WAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;AAAA,GAATA,SAAS,yBAATA,SAAS;AAAA,IAQTC,gBAAgB;AAAA;AAAA,WAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;AAAA,GAAhBA,gBAAgB,gCAAhBA,gBAAgB;AAAA,IAkDhBC,UAAU;AAAA;AAAA,WAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;AAAA,GAAVA,UAAU,0BAAVA,UAAU;AAsCf,SAASC,eAAe,CAACC,GAAQ,EAAwB;EAC9D,OAAOA,GAAG,KAAKA,GAAG,CAACC,GAAG,IAAID,GAAG,CAACE,EAAE,CAAC;AACnC"}
1
+ {"version":3,"file":"api.js","names":["IdxStatus","AuthenticatorKey","IdxFeature","isAuthenticator","obj","key","id"],"sources":["../../../../lib/idx/types/api.ts"],"sourcesContent":["/*!\n * Copyright (c) 2021-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { APIError } from '../../errors/types';\nimport {\n OktaAuthOAuthInterface,\n Tokens,\n TransactionManagerConstructor,\n TransactionManagerInterface\n} from '../../oidc/types';\nimport { FlowIdentifier } from './FlowIdentifier';\nimport {\n IdxActions,\n IdxAuthenticator,\n IdxContext,\n IdxForm,\n IdxMessage,\n IdxOption,\n IdxRemediation,\n IdxResponse,\n RawIdxResponse,\n IdxActionParams,\n IdpConfig,\n IdxToPersist,\n ChallengeData,\n ActivationData,\n} from './idx-js';\nimport {\n AccountUnlockOptions,\n AuthenticationOptions,\n CancelOptions,\n InteractOptions,\n IntrospectOptions,\n OktaAuthIdxOptions,\n PasswordRecoveryOptions,\n ProceedOptions,\n RegistrationOptions,\n StartOptions,\n IdxTransactionMetaOptions\n} from './options';\nimport { IdxTransactionMeta } from './meta';\nimport { IdxStorageManagerInterface, SavedIdxResponse } from './storage';\nimport type {\n WebauthnEnrollValues,\n WebauthnVerificationValues\n} from '../authenticator';\nimport { OktaAuthConstructor } from '../../base/types';\n\nexport enum IdxStatus {\n SUCCESS = 'SUCCESS',\n PENDING = 'PENDING',\n FAILURE = 'FAILURE',\n TERMINAL = 'TERMINAL',\n CANCELED = 'CANCELED',\n}\n\nexport enum AuthenticatorKey {\n OKTA_PASSWORD = 'okta_password',\n OKTA_EMAIL = 'okta_email',\n PHONE_NUMBER = 'phone_number',\n GOOGLE_AUTHENTICATOR = 'google_otp',\n SECURITY_QUESTION = 'security_question',\n OKTA_VERIFY = 'okta_verify',\n WEBAUTHN = 'webauthn',\n}\n\nexport type Input = {\n name: string;\n key?: string;\n type?: string;\n label?: string;\n value?: string | {form: IdxForm} | Input[];\n minLength?: number;\n maxLength?: number;\n secret?: boolean;\n required?: boolean;\n options?: IdxOption[];\n mutable?: boolean;\n visible?: boolean;\n customLabel?: boolean\n}\n\n\nexport interface IdxPollOptions {\n required?: boolean;\n refresh?: number;\n}\n\nexport type NextStep = {\n name: string;\n authenticator?: IdxAuthenticator;\n canSkip?: boolean;\n canResend?: boolean;\n inputs?: Input[];\n poll?: IdxPollOptions;\n authenticatorEnrollments?: IdxAuthenticator[];\n // eslint-disable-next-line no-use-before-define\n action?: (params?: IdxActionParams) => Promise<IdxTransaction>;\n idp?: IdpConfig;\n href?: string;\n relatesTo?: {\n type?: string;\n value: IdxAuthenticator;\n };\n refresh?: number;\n}\n\nexport enum IdxFeature {\n PASSWORD_RECOVERY = 'recover-password',\n REGISTRATION = 'enroll-profile',\n SOCIAL_IDP = 'redirect-idp',\n ACCOUNT_UNLOCK = 'unlock-account',\n}\n\n\nexport interface IdxTransaction {\n status: IdxStatus;\n tokens?: Tokens;\n nextStep?: NextStep;\n messages?: IdxMessage[];\n error?: APIError | IdxResponse;\n meta?: IdxTransactionMeta;\n enabledFeatures?: IdxFeature[];\n availableSteps?: NextStep[];\n requestDidSucceed?: boolean;\n stepUp?: boolean;\n \n // from idx-js, used by signin widget\n proceed: (remediationName: string, params: unknown) => Promise<IdxResponse>;\n neededToProceed: IdxRemediation[];\n rawIdxState: RawIdxResponse;\n interactionCode?: string;\n actions: IdxActions;\n context: IdxContext;\n}\n\n\nexport type Authenticator = {\n id?: string;\n key?: string;\n methodType?: string;\n phoneNumber?: string;\n channel?: string;\n};\n\nexport function isAuthenticator(obj: any): obj is Authenticator {\n return obj && (obj.key || obj.id);\n}\n\nexport interface RemediationResponse {\n idxResponse: IdxResponse;\n nextStep?: NextStep;\n messages?: IdxMessage[];\n terminal?: boolean;\n canceled?: boolean;\n}\n\nexport interface InteractResponse {\n state?: string;\n interactionHandle: string;\n meta: IdxTransactionMeta;\n}\n\nexport interface EmailVerifyCallbackResponse {\n state: string;\n otp: string;\n}\n\nexport interface IdxAPI {\n // lowest level api\n interact: (options?: InteractOptions) => Promise<InteractResponse>;\n introspect: (options?: IntrospectOptions) => Promise<IdxResponse>;\n makeIdxResponse: (rawIdxResponse: RawIdxResponse, toPersist: IdxToPersist, requestDidSucceed: boolean) => IdxResponse;\n\n // flow entrypoints\n authenticate: (options?: AuthenticationOptions) => Promise<IdxTransaction>;\n register: (options?: RegistrationOptions) => Promise<IdxTransaction>;\n recoverPassword: (options?: PasswordRecoveryOptions) => Promise<IdxTransaction>;\n unlockAccount: (options?: AccountUnlockOptions) => Promise<IdxTransaction>;\n poll: (options?: IdxPollOptions) => Promise<IdxTransaction>;\n\n // flow control\n start: (options?: StartOptions) => Promise<IdxTransaction>;\n canProceed(options?: ProceedOptions): boolean;\n proceed: (options?: ProceedOptions) => Promise<IdxTransaction>;\n cancel: (options?: CancelOptions) => Promise<IdxTransaction>;\n getFlow(): FlowIdentifier | undefined;\n setFlow(flow: FlowIdentifier): void;\n\n // call `start` instead of `startTransaction`. `startTransaction` will be removed in next major version (7.0)\n startTransaction: (options?: StartOptions) => Promise<IdxTransaction>;\n\n // redirect callbacks\n isInteractionRequired: (hashOrSearch?: string) => boolean;\n isInteractionRequiredError: (error: Error) => boolean; \n handleInteractionCodeRedirect: (url: string) => Promise<void>;\n isEmailVerifyCallback: (search: string) => boolean;\n parseEmailVerifyCallback: (search: string) => EmailVerifyCallbackResponse;\n handleEmailVerifyCallback: (search: string) => Promise<IdxTransaction | undefined>;\n isEmailVerifyCallbackError: (error: Error) => boolean;\n\n // transaction meta\n getSavedTransactionMeta: (options?: IdxTransactionMetaOptions) => IdxTransactionMeta | undefined;\n createTransactionMeta: (options?: IdxTransactionMetaOptions) => Promise<IdxTransactionMeta>;\n getTransactionMeta: (options?: IdxTransactionMetaOptions) => Promise<IdxTransactionMeta>;\n saveTransactionMeta: (meta: unknown) => void;\n clearTransactionMeta: () => void;\n isTransactionMetaValid: (meta: unknown) => boolean;\n}\n\nexport interface IdxTransactionManagerInterface extends TransactionManagerInterface {\n saveIdxResponse(data: SavedIdxResponse): void;\n loadIdxResponse(options?: IntrospectOptions): SavedIdxResponse | null;\n clearIdxResponse(): void;\n}\n\nexport type IdxTransactionManagerConstructor = TransactionManagerConstructor<IdxTransactionManagerInterface>;\n\nexport interface WebauthnAPI {\n getAssertion(credential: PublicKeyCredential): WebauthnVerificationValues;\n getAttestation(credential: PublicKeyCredential): WebauthnEnrollValues;\n buildCredentialRequestOptions(\n challengeData: ChallengeData, authenticatorEnrollments: IdxAuthenticator[]\n ): CredentialRequestOptions;\n buildCredentialCreationOptions(\n activationData: ActivationData, authenticatorEnrollments: IdxAuthenticator[]\n ): CredentialCreationOptions;\n}\n\nexport interface OktaAuthIdxInterface\n<\n M extends IdxTransactionMeta = IdxTransactionMeta,\n S extends IdxStorageManagerInterface<M> = IdxStorageManagerInterface<M>,\n O extends OktaAuthIdxOptions = OktaAuthIdxOptions,\n TM extends IdxTransactionManagerInterface = IdxTransactionManagerInterface\n>\n extends OktaAuthOAuthInterface<M, S, O, TM>\n{\n idx: IdxAPI;\n}\n\nexport interface OktaAuthIdxConstructor\n<\n I extends OktaAuthIdxInterface = OktaAuthIdxInterface\n>\n extends OktaAuthConstructor<I>\n{\n new(...args: any[]): I;\n webauthn: WebauthnAPI;\n}\n\n"],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAVA,IAyDYA,SAAS;AAAA;AAAA,WAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;AAAA,GAATA,SAAS,yBAATA,SAAS;AAAA,IAQTC,gBAAgB;AAAA;AAAA,WAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;AAAA,GAAhBA,gBAAgB,gCAAhBA,gBAAgB;AAAA,IAmDhBC,UAAU;AAAA;AAAA,WAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;AAAA,GAAVA,UAAU,0BAAVA,UAAU;AAsCf,SAASC,eAAe,CAACC,GAAQ,EAAwB;EAC9D,OAAOA,GAAG,KAAKA,GAAG,CAACC,GAAG,IAAID,GAAG,CAACE,EAAE,CAAC;AACnC"}
package/cjs/idx/util.js CHANGED
@@ -225,10 +225,14 @@ function getRemediatorClass(remediation, options) {
225
225
 
226
226
  // Return first match idxRemediation in allowed remediators
227
227
  // eslint-disable-next-line complexity
228
- function getRemediator(idxRemediations, values, options) {
228
+ function getRemediator(idxResponse, values, options) {
229
229
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
230
230
  const remediators = options.remediators;
231
231
  const useGenericRemediator = options.useGenericRemediator;
232
+ const {
233
+ neededToProceed: idxRemediations,
234
+ context
235
+ } = idxResponse;
232
236
  let remediator;
233
237
  // remediation name specified by caller - fast-track remediator lookup
234
238
  if (options.step) {
@@ -259,7 +263,7 @@ function getRemediator(idxRemediations, values, options) {
259
263
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
260
264
  const T = getRemediatorClass(remediation, options);
261
265
  remediator = new T(remediation, values, options);
262
- if (remediator.canRemediate()) {
266
+ if (remediator.canRemediate(context)) {
263
267
  // found the remediator
264
268
  return remediator;
265
269
  }
@@ -294,7 +298,7 @@ function handleFailedResponse(authClient, idxResponse, options = {}) {
294
298
  messages
295
299
  };
296
300
  } else {
297
- const remediator = getRemediator(idxResponse.neededToProceed, {}, options);
301
+ const remediator = getRemediator(idxResponse, {}, options);
298
302
  const nextStep = remediator && getNextStep(authClient, remediator, idxResponse);
299
303
  return {
300
304
  idxResponse,