@okta/okta-auth-js 6.2.0 → 6.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/cjs/AuthStateManager.js +9 -3
  3. package/cjs/AuthStateManager.js.map +1 -1
  4. package/cjs/OktaUserAgent.js +2 -2
  5. package/cjs/PromiseQueue.js +9 -2
  6. package/cjs/PromiseQueue.js.map +1 -1
  7. package/cjs/ServiceManager.js +3 -3
  8. package/cjs/ServiceManager.js.map +1 -1
  9. package/cjs/TransactionManager.js +11 -5
  10. package/cjs/TransactionManager.js.map +1 -1
  11. package/cjs/browser/browserStorage.js +19 -18
  12. package/cjs/browser/browserStorage.js.map +1 -1
  13. package/cjs/idx/authenticator/Authenticator.js.map +1 -1
  14. package/cjs/idx/authenticator/OktaPassword.js +12 -3
  15. package/cjs/idx/authenticator/OktaPassword.js.map +1 -1
  16. package/cjs/idx/authenticator/OktaVerifyTotp.js +9 -1
  17. package/cjs/idx/authenticator/OktaVerifyTotp.js.map +1 -1
  18. package/cjs/idx/authenticator/SecurityQuestionEnrollment.js +14 -1
  19. package/cjs/idx/authenticator/SecurityQuestionEnrollment.js.map +1 -1
  20. package/cjs/idx/authenticator/SecurityQuestionVerification.js +9 -1
  21. package/cjs/idx/authenticator/SecurityQuestionVerification.js.map +1 -1
  22. package/cjs/idx/authenticator/VerificationCodeAuthenticator.js +13 -3
  23. package/cjs/idx/authenticator/VerificationCodeAuthenticator.js.map +1 -1
  24. package/cjs/idx/authenticator/WebauthnEnrollment.js +5 -0
  25. package/cjs/idx/authenticator/WebauthnEnrollment.js.map +1 -1
  26. package/cjs/idx/authenticator/WebauthnVerification.js +5 -0
  27. package/cjs/idx/authenticator/WebauthnVerification.js.map +1 -1
  28. package/cjs/idx/authenticator/util.js +64 -0
  29. package/cjs/idx/authenticator/util.js.map +1 -0
  30. package/cjs/idx/idx-js/index.js +0 -122
  31. package/cjs/idx/idx-js/index.js.map +1 -1
  32. package/cjs/idx/idx-js/introspect.js +10 -6
  33. package/cjs/idx/idx-js/introspect.js.map +1 -1
  34. package/cjs/idx/idx-js/v1/generateIdxAction.js +17 -23
  35. package/cjs/idx/idx-js/v1/generateIdxAction.js.map +1 -1
  36. package/cjs/idx/idx-js/v1/makeIdxState.js +5 -4
  37. package/cjs/idx/idx-js/v1/makeIdxState.js.map +1 -1
  38. package/cjs/idx/introspect.js +13 -3
  39. package/cjs/idx/introspect.js.map +1 -1
  40. package/cjs/idx/proceed.js +14 -11
  41. package/cjs/idx/proceed.js.map +1 -1
  42. package/cjs/idx/remediate.js +68 -77
  43. package/cjs/idx/remediate.js.map +1 -1
  44. package/cjs/idx/remediators/AuthenticatorEnrollmentData.js +6 -2
  45. package/cjs/idx/remediators/AuthenticatorEnrollmentData.js.map +1 -1
  46. package/cjs/idx/remediators/AuthenticatorVerificationData.js +23 -19
  47. package/cjs/idx/remediators/AuthenticatorVerificationData.js.map +1 -1
  48. package/cjs/idx/remediators/Base/AuthenticatorData.js +22 -14
  49. package/cjs/idx/remediators/Base/AuthenticatorData.js.map +1 -1
  50. package/cjs/idx/remediators/Base/Remediator.js +85 -85
  51. package/cjs/idx/remediators/Base/Remediator.js.map +1 -1
  52. package/cjs/idx/remediators/Base/SelectAuthenticator.js +24 -15
  53. package/cjs/idx/remediators/Base/SelectAuthenticator.js.map +1 -1
  54. package/cjs/idx/remediators/Base/VerifyAuthenticator.js +15 -4
  55. package/cjs/idx/remediators/Base/VerifyAuthenticator.js.map +1 -1
  56. package/cjs/idx/remediators/ChallengePoll.js +8 -1
  57. package/cjs/idx/remediators/ChallengePoll.js.map +1 -1
  58. package/cjs/idx/remediators/EnrollPoll.js +1 -1
  59. package/cjs/idx/remediators/EnrollPoll.js.map +1 -1
  60. package/cjs/idx/remediators/EnrollProfile.js +15 -9
  61. package/cjs/idx/remediators/EnrollProfile.js.map +1 -1
  62. package/cjs/idx/remediators/EnrollmentChannelData.js +0 -8
  63. package/cjs/idx/remediators/EnrollmentChannelData.js.map +1 -1
  64. package/cjs/idx/remediators/Identify.js +12 -5
  65. package/cjs/idx/remediators/Identify.js.map +1 -1
  66. package/cjs/idx/remediators/ReEnrollAuthenticator.js +9 -8
  67. package/cjs/idx/remediators/ReEnrollAuthenticator.js.map +1 -1
  68. package/cjs/idx/remediators/SelectAuthenticatorAuthenticate.js +4 -3
  69. package/cjs/idx/remediators/SelectAuthenticatorAuthenticate.js.map +1 -1
  70. package/cjs/idx/remediators/SelectAuthenticatorUnlockAccount.js +0 -1
  71. package/cjs/idx/remediators/SelectAuthenticatorUnlockAccount.js.map +1 -1
  72. package/cjs/idx/remediators/Skip.js +1 -8
  73. package/cjs/idx/remediators/Skip.js.map +1 -1
  74. package/cjs/idx/remediators/util.js.map +1 -1
  75. package/cjs/idx/run.js +267 -198
  76. package/cjs/idx/run.js.map +1 -1
  77. package/cjs/idx/types/idx-js.js.map +1 -1
  78. package/cjs/idx/types/index.js +37 -0
  79. package/cjs/idx/types/index.js.map +1 -1
  80. package/cjs/idx/util.js +198 -0
  81. package/cjs/idx/util.js.map +1 -0
  82. package/cjs/options/browser.js +11 -6
  83. package/cjs/options/browser.js.map +1 -1
  84. package/cjs/options/index.js +1 -1
  85. package/cjs/options/index.js.map +1 -1
  86. package/cjs/options/node.js +5 -6
  87. package/cjs/options/node.js.map +1 -1
  88. package/dist/okta-auth-js.min.js +1 -1
  89. package/dist/okta-auth-js.min.js.map +1 -1
  90. package/dist/okta-auth-js.umd.js +1 -1
  91. package/dist/okta-auth-js.umd.js.map +1 -1
  92. package/esm/esm.browser.js +1060 -775
  93. package/esm/esm.browser.js.map +1 -1
  94. package/esm/esm.node.mjs +1057 -775
  95. package/esm/esm.node.mjs.map +1 -1
  96. package/lib/AuthStateManager.d.ts +2 -0
  97. package/lib/PromiseQueue.d.ts +6 -2
  98. package/lib/TransactionManager.d.ts +3 -4
  99. package/lib/idx/authenticator/Authenticator.d.ts +1 -1
  100. package/lib/idx/authenticator/OktaPassword.d.ts +2 -1
  101. package/lib/idx/authenticator/OktaVerifyTotp.d.ts +1 -1
  102. package/lib/idx/authenticator/SecurityQuestionEnrollment.d.ts +3 -5
  103. package/lib/idx/authenticator/SecurityQuestionVerification.d.ts +1 -1
  104. package/lib/idx/authenticator/VerificationCodeAuthenticator.d.ts +2 -1
  105. package/lib/idx/authenticator/WebauthnEnrollment.d.ts +1 -1
  106. package/lib/idx/authenticator/WebauthnVerification.d.ts +1 -1
  107. package/lib/idx/authenticator/util.d.ts +4 -0
  108. package/lib/idx/idx-js/index.d.ts +1 -17
  109. package/lib/idx/idx-js/introspect.d.ts +2 -1
  110. package/lib/idx/idx-js/v1/generateIdxAction.d.ts +1 -1
  111. package/lib/idx/idx-js/v1/makeIdxState.d.ts +2 -2
  112. package/lib/idx/proceed.d.ts +1 -3
  113. package/lib/idx/remediate.d.ts +2 -2
  114. package/lib/idx/remediators/AuthenticatorVerificationData.d.ts +1 -0
  115. package/lib/idx/remediators/Base/AuthenticatorData.d.ts +0 -3
  116. package/lib/idx/remediators/Base/Remediator.d.ts +5 -4
  117. package/lib/idx/remediators/Base/SelectAuthenticator.d.ts +7 -9
  118. package/lib/idx/remediators/Base/VerifyAuthenticator.d.ts +2 -4
  119. package/lib/idx/remediators/ChallengePoll.d.ts +1 -0
  120. package/lib/idx/remediators/EnrollProfile.d.ts +0 -3
  121. package/lib/idx/remediators/EnrollmentChannelData.d.ts +0 -4
  122. package/lib/idx/remediators/Identify.d.ts +3 -5
  123. package/lib/idx/remediators/ReEnrollAuthenticator.d.ts +2 -5
  124. package/lib/idx/remediators/SelectAuthenticatorAuthenticate.d.ts +2 -1
  125. package/lib/idx/remediators/SelectAuthenticatorUnlockAccount.d.ts +1 -2
  126. package/lib/idx/remediators/Skip.d.ts +0 -3
  127. package/lib/idx/types/idx-js.d.ts +5 -1
  128. package/lib/idx/types/index.d.ts +7 -3
  129. package/lib/idx/util.d.ts +11 -0
  130. package/lib/options/browser.d.ts +2 -2
  131. package/lib/options/node.d.ts +2 -2
  132. package/lib/types/Storage.d.ts +7 -5
  133. package/lib/types/api.d.ts +1 -3
  134. package/package.json +7 -6
@@ -8,6 +8,12 @@ var _reduce = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-sta
8
8
 
9
9
  var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
10
10
 
11
+ var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
12
+
13
+ var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
14
+
15
+ var _values = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/values"));
16
+
11
17
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
12
18
 
13
19
  var _errors = require("../../errors");
@@ -44,14 +50,11 @@ class AuthenticatorVerificationData extends _AuthenticatorData.AuthenticatorData
44
50
  }
45
51
 
46
52
  mapAuthenticator() {
47
- var _context2, _value$find, _context3;
48
-
49
- const authenticatorData = this.getAuthenticatorData();
50
- const authenticatorFromRemediation = this.getAuthenticatorFromRemediation(); // auto proceed with the only methodType option
51
-
53
+ // auto proceed with the only methodType option
52
54
  if (this.shouldProceedWithEmailAuthenticator) {
53
55
  var _authenticatorFromRem, _context;
54
56
 
57
+ const authenticatorFromRemediation = this.getAuthenticatorFromRemediation();
55
58
  return (_authenticatorFromRem = authenticatorFromRemediation.form) === null || _authenticatorFromRem === void 0 ? void 0 : (0, _reduce.default)(_context = _authenticatorFromRem.value).call(_context, (acc, curr) => {
56
59
  if (curr.value) {
57
60
  acc[curr.name] = curr.value;
@@ -63,25 +66,16 @@ class AuthenticatorVerificationData extends _AuthenticatorData.AuthenticatorData
63
66
 
64
67
  return acc;
65
68
  }, {});
66
- } // return based on user selection
67
-
68
-
69
- return {
70
- id: (0, _find.default)(_context2 = authenticatorFromRemediation.form.value).call(_context2, ({
71
- name
72
- }) => name === 'id').value,
73
- enrollmentId: (_value$find = (0, _find.default)(_context3 = authenticatorFromRemediation.form.value).call(_context3, ({
74
- name
75
- }) => name === 'enrollmentId')) === null || _value$find === void 0 ? void 0 : _value$find.value,
76
- methodType: authenticatorData === null || authenticatorData === void 0 ? void 0 : authenticatorData.methodType
77
- };
69
+ }
70
+
71
+ return this.getAuthenticatorData();
78
72
  }
79
73
 
80
74
  getInputAuthenticator() {
81
- var _context4;
75
+ var _context2;
82
76
 
83
77
  const authenticator = this.getAuthenticatorFromRemediation();
84
- const methodType = (0, _find.default)(_context4 = authenticator.form.value).call(_context4, ({
78
+ const methodType = (0, _find.default)(_context2 = authenticator.form.value).call(_context2, ({
85
79
  name
86
80
  }) => name === 'methodType'); // if has methodType in form, let user select the methodType
87
81
 
@@ -98,6 +92,16 @@ class AuthenticatorVerificationData extends _AuthenticatorData.AuthenticatorData
98
92
  return inputs;
99
93
  }
100
94
 
95
+ getValuesAfterProceed() {
96
+ var _context3;
97
+
98
+ this.values = super.getValuesAfterProceed();
99
+ let trimmedValues = (0, _filter.default)(_context3 = (0, _keys.default)((0, _values.default)(this))).call(_context3, valueKey => valueKey !== 'authenticator');
100
+ return (0, _reduce.default)(trimmedValues).call(trimmedValues, (values, valueKey) => ({ ...values,
101
+ [valueKey]: (0, _values.default)(this)[valueKey]
102
+ }), {});
103
+ }
104
+
101
105
  }
102
106
 
103
107
  exports.AuthenticatorVerificationData = AuthenticatorVerificationData;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../lib/idx/remediators/AuthenticatorVerificationData.ts"],"names":["AuthenticatorVerificationData","AuthenticatorData","constructor","remediation","values","shouldProceedWithEmailAuthenticator","authenticator","methods","length","type","canRemediate","mapAuthenticator","authenticatorData","getAuthenticatorData","authenticatorFromRemediation","getAuthenticatorFromRemediation","form","value","acc","curr","name","options","AuthSdkError","id","enrollmentId","methodType","getInputAuthenticator","required","inputs"],"mappings":";;;;;;;;;;;;AAcA;;AACA;;AAfA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AASO,MAAMA,6BAAN,SAA4CC,oCAA5C,CAA8D;AAMnEC,EAAAA,WAAW,CAACC,WAAD,EAA8BC,MAA+B,GAAG,EAAhE,EAAoE;AAC7E,UAAMD,WAAN,EAAmBC,MAAnB,EAD6E,CAG7E;;AACA,SAAKC,mCAAL,GAA2C,KAAKC,aAAL,CAAmBC,OAAnB,CAA2BC,MAA3B,KAAsC,CAAtC,IACtC,KAAKF,aAAL,CAAmBC,OAAnB,CAA2B,CAA3B,EAA8BE,IAA9B,KAAuC,OAD5C;AAED;;AAEDC,EAAAA,YAAY,GAAG;AACb;AACA,QAAI,KAAKL,mCAAT,EAA8C;AAC5C,aAAO,IAAP;AACD;;AACD,WAAO,MAAMK,YAAN,EAAP;AACD;;AAEDC,EAAAA,gBAAgB,GAAG;AAAA;;AACjB,UAAMC,iBAAiB,GAAG,KAAKC,oBAAL,EAA1B;AACA,UAAMC,4BAA4B,GAAG,KAAKC,+BAAL,EAArC,CAFiB,CAIjB;;AACA,QAAI,KAAKV,mCAAT,EAA8C;AAAA;;AAC5C,sCAAOS,4BAA4B,CAACE,IAApC,0DAAO,sDAAmCC,KAAnC,iBAAgD,CAACC,GAAD,EAAMC,IAAN,KAAe;AACpE,YAAIA,IAAI,CAACF,KAAT,EAAgB;AACdC,UAAAA,GAAG,CAACC,IAAI,CAACC,IAAN,CAAH,GAAiBD,IAAI,CAACF,KAAtB;AACD,SAFD,MAEO,IAAIE,IAAI,CAACE,OAAT,EAAkB;AACvBH,UAAAA,GAAG,CAACC,IAAI,CAACC,IAAN,CAAH,GAAiBD,IAAI,CAACE,OAAL,CAAc,CAAd,EAAiBJ,KAAlC;AACD,SAFM,MAEA;AACL,gBAAM,IAAIK,oBAAJ,CAAkB,wCAAuCH,IAAK,EAA9D,CAAN;AACD;;AACD,eAAOD,GAAP;AACD,OATM,EASJ,EATI,CAAP;AAUD,KAhBgB,CAkBjB;;;AACA,WAAO;AACLK,MAAAA,EAAE,EAAE,+BAAAT,4BAA4B,CAACE,IAA7B,CAAmCC,KAAnC,kBACI,CAAC;AAAEG,QAAAA;AAAF,OAAD,KAAcA,IAAI,KAAK,IAD3B,EACkCH,KAFjC;AAGLO,MAAAA,YAAY,iBAAE,+BAAAV,4BAA4B,CAACE,IAA7B,CAAmCC,KAAnC,kBACN,CAAC;AAAEG,QAAAA;AAAF,OAAD,KAAcA,IAAI,KAAK,cADjB,CAAF,gDAAE,YACkCH,KAJ3C;AAKLQ,MAAAA,UAAU,EAAEb,iBAAF,aAAEA,iBAAF,uBAAEA,iBAAiB,CAAEa;AAL1B,KAAP;AAOD;;AAEDC,EAAAA,qBAAqB,GAAG;AAAA;;AACtB,UAAMpB,aAAa,GAAG,KAAKS,+BAAL,EAAtB;AACA,UAAMU,UAAU,GAAG,+BAAAnB,aAAa,CAACU,IAAd,CAAoBC,KAApB,kBAA+B,CAAC;AAAEG,MAAAA;AAAF,KAAD,KAAcA,IAAI,KAAK,YAAtD,CAAnB,CAFsB,CAGtB;;AACA,QAAIK,UAAU,IAAIA,UAAU,CAACJ,OAA7B,EAAsC;AACpC,aAAO;AAAED,QAAAA,IAAI,EAAE,YAAR;AAAsBX,QAAAA,IAAI,EAAE,QAA5B;AAAsCkB,QAAAA,QAAQ,EAAE;AAAhD,OAAP;AACD,KANqB,CAOtB;;;AACA,UAAMC,MAAM,GAAG,CAAC,GAAGtB,aAAa,CAACU,IAAd,CAAoBC,KAAxB,CAAf;AACA,WAAOW,MAAP;AACD;;AA5DkE;;;8BAAxD5B,6B,qBACc,iC","sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\nimport { AuthSdkError } from '../../errors';\nimport { AuthenticatorData, AuthenticatorDataValues } from './Base/AuthenticatorData';\nimport { IdxRemediation } from '../types/idx-js';\n\nexport type AuthenticatorVerificationDataValues = AuthenticatorDataValues;\n\nexport class AuthenticatorVerificationData extends AuthenticatorData {\n static remediationName = 'authenticator-verification-data';\n\n values!: AuthenticatorVerificationDataValues;\n shouldProceedWithEmailAuthenticator: boolean;\n\n constructor(remediation: IdxRemediation, values: AuthenticatorDataValues = {}) {\n super(remediation, values);\n\n // TODO: extend this feature to all authenticators\n this.shouldProceedWithEmailAuthenticator = this.authenticator.methods.length === 1 \n && this.authenticator.methods[0].type === 'email';\n }\n\n canRemediate() {\n // auto proceed if there is only one method\n if (this.shouldProceedWithEmailAuthenticator) {\n return true;\n }\n return super.canRemediate();\n }\n\n mapAuthenticator() {\n const authenticatorData = this.getAuthenticatorData();\n const authenticatorFromRemediation = this.getAuthenticatorFromRemediation();\n\n // auto proceed with the only methodType option\n if (this.shouldProceedWithEmailAuthenticator) {\n return authenticatorFromRemediation.form?.value.reduce((acc, curr) => {\n if (curr.value) {\n acc[curr.name] = curr.value;\n } else if (curr.options) {\n acc[curr.name] = curr.options![0].value;\n } else {\n throw new AuthSdkError(`Unsupported authenticator data type: ${curr}`);\n }\n return acc;\n }, {});\n }\n\n // return based on user selection\n return { \n id: authenticatorFromRemediation.form!.value\n .find(({ name }) => name === 'id')!.value,\n enrollmentId: authenticatorFromRemediation.form!.value\n .find(({ name }) => name === 'enrollmentId')?.value,\n methodType: authenticatorData?.methodType,\n };\n }\n\n getInputAuthenticator() {\n const authenticator = this.getAuthenticatorFromRemediation();\n const methodType = authenticator.form!.value.find(({ name }) => name === 'methodType');\n // if has methodType in form, let user select the methodType\n if (methodType && methodType.options) {\n return { name: 'methodType', type: 'string', required: true };\n }\n // no methodType, then return form values\n const inputs = [...authenticator.form!.value];\n return inputs;\n }\n\n}\n"],"file":"AuthenticatorVerificationData.js"}
1
+ {"version":3,"sources":["../../../../lib/idx/remediators/AuthenticatorVerificationData.ts"],"names":["AuthenticatorVerificationData","AuthenticatorData","constructor","remediation","values","shouldProceedWithEmailAuthenticator","authenticator","methods","length","type","canRemediate","mapAuthenticator","authenticatorFromRemediation","getAuthenticatorFromRemediation","form","value","acc","curr","name","options","AuthSdkError","getAuthenticatorData","getInputAuthenticator","methodType","required","inputs","getValuesAfterProceed","trimmedValues","valueKey"],"mappings":";;;;;;;;;;;;;;;;;;AAcA;;AACA;;AAfA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AASO,MAAMA,6BAAN,SAA4CC,oCAA5C,CAA8D;AAMnEC,EAAAA,WAAW,CAACC,WAAD,EAA8BC,MAA+B,GAAG,EAAhE,EAAoE;AAC7E,UAAMD,WAAN,EAAmBC,MAAnB,EAD6E,CAG7E;;AACA,SAAKC,mCAAL,GAA2C,KAAKC,aAAL,CAAmBC,OAAnB,CAA2BC,MAA3B,KAAsC,CAAtC,IACtC,KAAKF,aAAL,CAAmBC,OAAnB,CAA2B,CAA3B,EAA8BE,IAA9B,KAAuC,OAD5C;AAED;;AAEDC,EAAAA,YAAY,GAAG;AACb;AACA,QAAI,KAAKL,mCAAT,EAA8C;AAC5C,aAAO,IAAP;AACD;;AACD,WAAO,MAAMK,YAAN,EAAP;AACD;;AAEDC,EAAAA,gBAAgB,GAAG;AACjB;AACA,QAAI,KAAKN,mCAAT,EAA8C;AAAA;;AAC5C,YAAMO,4BAA4B,GAAG,KAAKC,+BAAL,EAArC;AACA,sCAAOD,4BAA4B,CAACE,IAApC,0DAAO,sDAAmCC,KAAnC,iBAAgD,CAACC,GAAD,EAAMC,IAAN,KAAe;AACpE,YAAIA,IAAI,CAACF,KAAT,EAAgB;AACdC,UAAAA,GAAG,CAACC,IAAI,CAACC,IAAN,CAAH,GAAiBD,IAAI,CAACF,KAAtB;AACD,SAFD,MAEO,IAAIE,IAAI,CAACE,OAAT,EAAkB;AACvBH,UAAAA,GAAG,CAACC,IAAI,CAACC,IAAN,CAAH,GAAiBD,IAAI,CAACE,OAAL,CAAc,CAAd,EAAiBJ,KAAlC;AACD,SAFM,MAEA;AACL,gBAAM,IAAIK,oBAAJ,CAAkB,wCAAuCH,IAAK,EAA9D,CAAN;AACD;;AACD,eAAOD,GAAP;AACD,OATM,EASJ,EATI,CAAP;AAUD;;AAED,WAAO,KAAKK,oBAAL,EAAP;AACD;;AAEDC,EAAAA,qBAAqB,GAAG;AAAA;;AACtB,UAAMhB,aAAa,GAAG,KAAKO,+BAAL,EAAtB;AACA,UAAMU,UAAU,GAAG,+BAAAjB,aAAa,CAACQ,IAAd,CAAoBC,KAApB,kBAA+B,CAAC;AAAEG,MAAAA;AAAF,KAAD,KAAcA,IAAI,KAAK,YAAtD,CAAnB,CAFsB,CAGtB;;AACA,QAAIK,UAAU,IAAIA,UAAU,CAACJ,OAA7B,EAAsC;AACpC,aAAO;AAAED,QAAAA,IAAI,EAAE,YAAR;AAAsBT,QAAAA,IAAI,EAAE,QAA5B;AAAsCe,QAAAA,QAAQ,EAAE;AAAhD,OAAP;AACD,KANqB,CAOtB;;;AACA,UAAMC,MAAM,GAAG,CAAC,GAAGnB,aAAa,CAACQ,IAAd,CAAoBC,KAAxB,CAAf;AACA,WAAOU,MAAP;AACD;;AAEDC,EAAAA,qBAAqB,GAAwC;AAAA;;AAC3D,SAAKtB,MAAL,GAAc,MAAMsB,qBAAN,EAAd;AACA,QAAIC,aAAa,GAAG,yEAAY,IAAZ,oBAAgCC,QAAQ,IAAIA,QAAQ,KAAK,eAAzD,CAApB;AACA,WAAO,qBAAAD,aAAa,MAAb,CAAAA,aAAa,EAAQ,CAACvB,MAAD,EAASwB,QAAT,MAAuB,EAAC,GAAGxB,MAAJ;AAAY,OAACwB,QAAD,GAAY,2BAAYA,QAAZ;AAAxB,KAAvB,CAAR,EAAgF,EAAhF,CAApB;AACD;;AAzDkE;;;8BAAxD5B,6B,qBACc,iC","sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\nimport { AuthSdkError } from '../../errors';\nimport { AuthenticatorData, AuthenticatorDataValues } from './Base/AuthenticatorData';\nimport { IdxRemediation } from '../types/idx-js';\n\nexport type AuthenticatorVerificationDataValues = AuthenticatorDataValues;\n\nexport class AuthenticatorVerificationData extends AuthenticatorData {\n static remediationName = 'authenticator-verification-data';\n\n values!: AuthenticatorVerificationDataValues;\n shouldProceedWithEmailAuthenticator: boolean;\n\n constructor(remediation: IdxRemediation, values: AuthenticatorDataValues = {}) {\n super(remediation, values);\n\n // TODO: extend this feature to all authenticators\n this.shouldProceedWithEmailAuthenticator = this.authenticator.methods.length === 1 \n && this.authenticator.methods[0].type === 'email';\n }\n\n canRemediate() {\n // auto proceed if there is only one method\n if (this.shouldProceedWithEmailAuthenticator) {\n return true;\n }\n return super.canRemediate();\n }\n\n mapAuthenticator() {\n // auto proceed with the only methodType option\n if (this.shouldProceedWithEmailAuthenticator) {\n const authenticatorFromRemediation = this.getAuthenticatorFromRemediation();\n return authenticatorFromRemediation.form?.value.reduce((acc, curr) => {\n if (curr.value) {\n acc[curr.name] = curr.value;\n } else if (curr.options) {\n acc[curr.name] = curr.options![0].value;\n } else {\n throw new AuthSdkError(`Unsupported authenticator data type: ${curr}`);\n }\n return acc;\n }, {});\n }\n\n return this.getAuthenticatorData();\n }\n\n getInputAuthenticator() {\n const authenticator = this.getAuthenticatorFromRemediation();\n const methodType = authenticator.form!.value.find(({ name }) => name === 'methodType');\n // if has methodType in form, let user select the methodType\n if (methodType && methodType.options) {\n return { name: 'methodType', type: 'string', required: true };\n }\n // no methodType, then return form values\n const inputs = [...authenticator.form!.value];\n return inputs;\n }\n\n getValuesAfterProceed(): AuthenticatorVerificationDataValues {\n this.values = super.getValuesAfterProceed();\n let trimmedValues = Object.keys(this.values).filter(valueKey => valueKey !== 'authenticator');\n return trimmedValues.reduce((values, valueKey) => ({...values, [valueKey]: this.values[valueKey]}), {});\n }\n}\n"],"file":"AuthenticatorVerificationData.js"}
@@ -12,10 +12,12 @@ var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stabl
12
12
 
13
13
  var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
14
14
 
15
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
16
-
17
15
  var _Remediator = require("./Remediator");
18
16
 
17
+ var _types = require("../../types");
18
+
19
+ var _util = require("../../authenticator/util");
20
+
19
21
  /* eslint-disable @typescript-eslint/no-non-null-assertion */
20
22
 
21
23
  /*!
@@ -34,9 +36,6 @@ class AuthenticatorData extends _Remediator.Remediator {
34
36
  constructor(remediation, values = {}) {
35
37
  super(remediation, values); // set before other data calculation
36
38
 
37
- (0, _defineProperty2.default)(this, "map", {
38
- 'authenticator': []
39
- });
40
39
  this.authenticator = this.getAuthenticator();
41
40
  this.formatAuthenticatorData();
42
41
  }
@@ -48,7 +47,7 @@ class AuthenticatorData extends _Remediator.Remediator {
48
47
  var _context;
49
48
 
50
49
  (0, _values.default)(this).authenticatorsData = (0, _map.default)(_context = (0, _values.default)(this).authenticatorsData).call(_context, data => {
51
- if (data.key === this.authenticator.key) {
50
+ if ((0, _util.compareAuthenticators)(this.authenticator, data)) {
52
51
  return this.mapAuthenticatorDataFromValues(data);
53
52
  }
54
53
 
@@ -66,13 +65,11 @@ class AuthenticatorData extends _Remediator.Remediator {
66
65
  getAuthenticatorData() {
67
66
  var _context2;
68
67
 
69
- return (0, _find.default)(_context2 = (0, _values.default)(this).authenticatorsData).call(_context2, ({
70
- key
71
- }) => key === this.authenticator.key);
68
+ return (0, _find.default)(_context2 = (0, _values.default)(this).authenticatorsData).call(_context2, data => (0, _util.compareAuthenticators)(this.authenticator, data));
72
69
  }
73
70
 
74
71
  canRemediate() {
75
- return (0, _values.default)(this).authenticatorsData.some(data => data.key === this.authenticator.key);
72
+ return (0, _values.default)(this).authenticatorsData.some(data => (0, _util.compareAuthenticators)(this.authenticator, data));
76
73
  }
77
74
 
78
75
  getNextStep() {
@@ -87,11 +84,22 @@ class AuthenticatorData extends _Remediator.Remediator {
87
84
 
88
85
  mapAuthenticatorDataFromValues(authenticatorData) {
89
86
  // add methodType to authenticatorData if it exists in values
90
- const {
91
- methodType
87
+ let {
88
+ methodType,
89
+ authenticator
92
90
  } = (0, _values.default)(this);
91
+
92
+ if (!methodType && (0, _types.isAuthenticator)(authenticator)) {
93
+ methodType = authenticator === null || authenticator === void 0 ? void 0 : authenticator.methodType;
94
+ }
95
+
96
+ const {
97
+ id,
98
+ enrollmentId
99
+ } = this.authenticator;
93
100
  const data = {
94
- key: this.authenticator.key,
101
+ id,
102
+ enrollmentId,
95
103
  ...(authenticatorData && authenticatorData),
96
104
  ...(methodType && {
97
105
  methodType
@@ -123,7 +131,7 @@ class AuthenticatorData extends _Remediator.Remediator {
123
131
 
124
132
  this.values = super.getValuesAfterProceed(); // remove used authenticatorData
125
133
 
126
- const authenticatorsData = (0, _filter.default)(_context5 = (0, _values.default)(this).authenticatorsData).call(_context5, data => data.key !== this.authenticator.key);
134
+ const authenticatorsData = (0, _filter.default)(_context5 = (0, _values.default)(this).authenticatorsData).call(_context5, data => (0, _util.compareAuthenticators)(this.authenticator, data) !== true);
127
135
  return { ...(0, _values.default)(this),
128
136
  authenticatorsData
129
137
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../lib/idx/remediators/Base/AuthenticatorData.ts"],"names":["AuthenticatorData","Remediator","constructor","remediation","values","authenticator","getAuthenticator","formatAuthenticatorData","authenticatorData","getAuthenticatorData","authenticatorsData","data","key","mapAuthenticatorDataFromValues","push","canRemediate","some","getNextStep","common","options","getMethodTypes","methodType","getAuthenticatorFromRemediation","value","name","form","getValuesAfterProceed"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\nimport { Remediator, RemediationValues } from './Remediator';\nimport { IdxRemediationValue, IdxOption, IdxRemediation, IdxAuthenticator } from '../../types/idx-js';\n\nexport type AuthenticatorDataValues = RemediationValues & {\n methodType?: string;\n};\n\n// Base class - DO NOT expose static remediationName\nexport class AuthenticatorData extends Remediator {\n\n map = {\n 'authenticator': []\n };\n\n values!: AuthenticatorDataValues;\n authenticator: IdxAuthenticator;\n\n constructor(remediation: IdxRemediation, values: AuthenticatorDataValues = {}) {\n super(remediation, values);\n\n // set before other data calculation\n this.authenticator = this.getAuthenticator()!;\n\n this.formatAuthenticatorData();\n }\n\n protected formatAuthenticatorData() {\n const authenticatorData = this.getAuthenticatorData();\n if (authenticatorData) {\n this.values.authenticatorsData = this.values.authenticatorsData!.map(data => {\n if (data.key === this.authenticator.key) {\n return this.mapAuthenticatorDataFromValues(data);\n }\n return data;\n });\n } else {\n const data = this.mapAuthenticatorDataFromValues();\n if (data) {\n this.values.authenticatorsData!.push(data);\n }\n }\n }\n\n protected getAuthenticatorData() {\n return this.values.authenticatorsData!\n .find(({ key }) => key === this.authenticator.key);\n }\n\n canRemediate() {\n return this.values.authenticatorsData!\n .some(data => data.key === this.authenticator.key);\n }\n\n getNextStep() {\n const common = super.getNextStep();\n const options = this.getMethodTypes();\n return { \n ...common, \n ...(options && { options }) \n };\n }\n\n protected mapAuthenticatorDataFromValues(authenticatorData?) {\n // add methodType to authenticatorData if it exists in values\n const { methodType } = this.values;\n const data = { \n key: this.authenticator.key, \n ...(authenticatorData && authenticatorData),\n ...(methodType && { methodType }) \n };\n\n return data.methodType ? data : null;\n }\n\n protected getAuthenticatorFromRemediation(): IdxRemediationValue {\n const authenticator = this.remediation.value!\n .find(({ name }) => name === 'authenticator') as IdxRemediationValue;\n return authenticator;\n }\n\n private getMethodTypes(): IdxOption[] {\n const authenticator: IdxRemediationValue = this.getAuthenticatorFromRemediation();\n return authenticator.form!.value.find(({ name }) => name === 'methodType')?.options as IdxOption[];\n }\n\n getValuesAfterProceed(): RemediationValues {\n this.values = super.getValuesAfterProceed();\n // remove used authenticatorData\n const authenticatorsData = this.values.authenticatorsData!\n .filter(data => data.key !== this.authenticator.key);\n return { ...this.values, authenticatorsData };\n }\n}\n"],"file":"AuthenticatorData.js"}
1
+ {"version":3,"sources":["../../../../../lib/idx/remediators/Base/AuthenticatorData.ts"],"names":["AuthenticatorData","Remediator","constructor","remediation","values","authenticator","getAuthenticator","formatAuthenticatorData","authenticatorData","getAuthenticatorData","authenticatorsData","data","mapAuthenticatorDataFromValues","push","canRemediate","some","getNextStep","common","options","getMethodTypes","methodType","id","enrollmentId","getAuthenticatorFromRemediation","value","name","form","getValuesAfterProceed"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\nimport { Remediator, RemediationValues } from './Remediator';\nimport { IdxRemediationValue, IdxOption, IdxRemediation, IdxAuthenticator } from '../../types/idx-js';\nimport { isAuthenticator } from '../../types';\nimport { compareAuthenticators } from '../../authenticator/util';\n\nexport type AuthenticatorDataValues = RemediationValues & {\n methodType?: string;\n};\n\n// Base class - DO NOT expose static remediationName\nexport class AuthenticatorData extends Remediator {\n values!: AuthenticatorDataValues;\n authenticator: IdxAuthenticator;\n\n constructor(remediation: IdxRemediation, values: AuthenticatorDataValues = {}) {\n super(remediation, values);\n\n // set before other data calculation\n this.authenticator = this.getAuthenticator()!;\n\n this.formatAuthenticatorData();\n }\n\n protected formatAuthenticatorData() {\n const authenticatorData = this.getAuthenticatorData();\n if (authenticatorData) {\n this.values.authenticatorsData = this.values.authenticatorsData!.map(data => {\n if (compareAuthenticators(this.authenticator, data)) {\n return this.mapAuthenticatorDataFromValues(data);\n }\n return data;\n });\n } else {\n const data = this.mapAuthenticatorDataFromValues();\n if (data) {\n this.values.authenticatorsData!.push(data);\n }\n }\n }\n\n protected getAuthenticatorData() {\n return this.values.authenticatorsData!\n .find((data) => compareAuthenticators(this.authenticator, data));\n }\n\n canRemediate() {\n return this.values.authenticatorsData!\n .some(data => compareAuthenticators(this.authenticator, data));\n }\n\n getNextStep() {\n const common = super.getNextStep();\n const options = this.getMethodTypes();\n return { \n ...common, \n ...(options && { options }) \n };\n }\n\n protected mapAuthenticatorDataFromValues(authenticatorData?) {\n // add methodType to authenticatorData if it exists in values\n let { methodType, authenticator } = this.values;\n if (!methodType && isAuthenticator(authenticator)) {\n methodType = authenticator?.methodType;\n }\n \n const { id, enrollmentId } = this.authenticator;\n const data = { \n id,\n enrollmentId,\n ...(authenticatorData && authenticatorData),\n ...(methodType && { methodType }) \n };\n\n return data.methodType ? data : null;\n }\n\n protected getAuthenticatorFromRemediation(): IdxRemediationValue {\n const authenticator = this.remediation.value!\n .find(({ name }) => name === 'authenticator') as IdxRemediationValue;\n return authenticator;\n }\n\n private getMethodTypes(): IdxOption[] {\n const authenticator: IdxRemediationValue = this.getAuthenticatorFromRemediation();\n return authenticator.form!.value.find(({ name }) => name === 'methodType')?.options as IdxOption[];\n }\n\n getValuesAfterProceed(): RemediationValues {\n this.values = super.getValuesAfterProceed();\n // remove used authenticatorData\n const authenticatorsData = this.values.authenticatorsData!\n .filter(data => compareAuthenticators(this.authenticator, data) !== true);\n return { ...this.values, authenticatorsData };\n }\n}\n"],"file":"AuthenticatorData.js"}
@@ -16,10 +16,10 @@ var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stabl
16
16
 
17
17
  var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
18
18
 
19
- var _errors = require("../../../errors");
20
-
21
19
  var _util = require("../util");
22
20
 
21
+ var _util2 = require("../../authenticator/util");
22
+
23
23
  /* eslint-disable @typescript-eslint/no-non-null-assertion */
24
24
 
25
25
  /*!
@@ -37,10 +37,12 @@ var _util = require("../util");
37
37
  /* eslint-disable complexity */
38
38
  // Base class - DO NOT expose static remediationName
39
39
  class Remediator {
40
- constructor(remediation, values = {}) {
40
+ constructor(remediation, values = {}, options = {}) {
41
41
  // assign fields to the instance
42
42
  this.values = { ...values
43
43
  };
44
+ this.options = { ...options
45
+ };
44
46
  this.formatAuthenticators();
45
47
  this.remediation = remediation;
46
48
  }
@@ -48,32 +50,25 @@ class Remediator {
48
50
  formatAuthenticators() {
49
51
  var _context2, _context3;
50
52
 
51
- (0, _values.default)(this).authenticators = (0, _values.default)(this).authenticators || []; // add string authenticator from input to "authenticators" field
53
+ (0, _values.default)(this).authenticators = (0, _values.default)(this).authenticators || []; // ensure authenticators are in the correct format
52
54
 
53
- if ((0, _values.default)(this).authenticator) {
54
- const hasAuthenticatorInList = (0, _values.default)(this).authenticators.some(authenticator => {
55
- if (typeof authenticator === 'string') {
56
- return authenticator === (0, _values.default)(this).authenticator;
57
- }
55
+ (0, _values.default)(this).authenticators = (0, _map.default)(_context2 = (0, _values.default)(this).authenticators).call(_context2, authenticator => {
56
+ return (0, _util2.formatAuthenticator)(authenticator);
57
+ }); // add authenticator (if any) to "authenticators"
58
58
 
59
- return authenticator.key === (0, _values.default)(this).authenticator;
59
+ if ((0, _values.default)(this).authenticator) {
60
+ const authenticator = (0, _util2.formatAuthenticator)((0, _values.default)(this).authenticator);
61
+ const hasAuthenticatorInList = (0, _values.default)(this).authenticators.some(existing => {
62
+ return (0, _util2.compareAuthenticators)(authenticator, existing);
60
63
  });
61
64
 
62
65
  if (!hasAuthenticatorInList) {
63
- (0, _values.default)(this).authenticators.push({
64
- key: (0, _values.default)(this).authenticator
65
- });
66
+ (0, _values.default)(this).authenticators.push(authenticator);
66
67
  }
67
- } // transform items in "authenticators" into one format
68
-
69
-
70
- (0, _values.default)(this).authenticators = (0, _map.default)(_context2 = (0, _values.default)(this).authenticators).call(_context2, authenticator => {
71
- return typeof authenticator === 'string' ? {
72
- key: authenticator
73
- } : authenticator;
74
- }); // save non-key meta to "authenticatorsData" field
68
+ } // save non-key meta to "authenticatorsData" field
75
69
  // authenticators will be removed after selection to avoid select-authenticator loop
76
70
 
71
+
77
72
  (0, _values.default)(this).authenticatorsData = (0, _reduce.default)(_context3 = (0, _values.default)(this).authenticators).call(_context3, (acc, authenticator) => {
78
73
  if (typeof authenticator === 'object' && (0, _keys.default)(authenticator).length > 1) {
79
74
  // save authenticator meta into authenticator data
@@ -94,10 +89,6 @@ class Remediator {
94
89
  canRemediate() {
95
90
  var _context4;
96
91
 
97
- if (!(0, _map.default)(this)) {
98
- return false;
99
- }
100
-
101
92
  const required = (0, _util.getRequiredValues)(this.remediation);
102
93
  const needed = (0, _find.default)(_context4 = required).call(_context4, key => !this.hasData(key));
103
94
 
@@ -126,44 +117,35 @@ class Remediator {
126
117
  if (typeof this[`map${(0, _util.titleCase)(key)}`] === 'function') {
127
118
  var _context6;
128
119
 
129
- return this[`map${(0, _util.titleCase)(key)}`]((0, _find.default)(_context6 = this.remediation.value).call(_context6, ({
120
+ const val = this[`map${(0, _util.titleCase)(key)}`]((0, _find.default)(_context6 = this.remediation.value).call(_context6, ({
130
121
  name
131
122
  }) => name === key));
132
- }
133
123
 
134
- if (!(0, _map.default)(this)) {
135
- return (0, _values.default)(this)[key];
136
- } // Handle general primitive types
124
+ if (val) {
125
+ return val;
126
+ }
127
+ } // If a map is defined for this key, return the first aliased property that returns a truthy value
137
128
 
138
129
 
139
- const entry = (0, _map.default)(this)[key];
130
+ if ((0, _map.default)(this) && (0, _map.default)(this)[key]) {
131
+ const entry = (0, _map.default)(this)[key];
140
132
 
141
- if (!entry) {
142
- return (0, _values.default)(this)[key];
143
- } // find the first aliased property that returns a truthy value
133
+ for (let i = 0; i < entry.length; i++) {
134
+ let val = (0, _values.default)(this)[entry[i]];
144
135
 
136
+ if (val) {
137
+ return val;
138
+ }
139
+ }
140
+ } // fallback: return the value by key
145
141
 
146
- for (let i = 0; i < entry.length; i++) {
147
- let val = (0, _values.default)(this)[entry[i]];
148
142
 
149
- if (val) {
150
- return val;
151
- }
152
- }
143
+ return (0, _values.default)(this)[key];
153
144
  }
154
145
 
155
146
  hasData(key) {
156
147
  // no attempt to format, we want simple true/false
157
- // First see if the remediation has a mapping for this value
158
- const data = this.getData(key);
159
-
160
- if (typeof data === 'object') {
161
- var _context7;
162
-
163
- return !!(0, _find.default)(_context7 = (0, _keys.default)(data)).call(_context7, key => !!data[key]);
164
- }
165
-
166
- return !!data;
148
+ return !!this.getData(key);
167
149
  }
168
150
 
169
151
  getNextStep(_context) {
@@ -187,53 +169,47 @@ class Remediator {
187
169
 
188
170
 
189
171
  getInputs() {
190
- var _context8;
191
-
192
- if (!(0, _map.default)(this)) {
193
- return [];
194
- }
195
-
196
- return (0, _reduce.default)(_context8 = (0, _keys.default)((0, _map.default)(this))).call(_context8, (inputs, key) => {
197
- var _context9;
198
-
199
- const inputFromRemediation = (0, _find.default)(_context9 = this.remediation.value).call(_context9, item => item.name === key);
200
-
201
- if (!inputFromRemediation) {
202
- return inputs;
203
- }
204
-
172
+ const inputs = [];
173
+ const inputsFromRemediation = this.remediation.value || [];
174
+ inputsFromRemediation.forEach(inputFromRemediation => {
205
175
  let input;
206
- const aliases = (0, _map.default)(this)[key];
207
- const {
208
- type
176
+ let {
177
+ name,
178
+ type,
179
+ visible
209
180
  } = inputFromRemediation;
210
181
 
211
- if (typeof this[`getInput${(0, _util.titleCase)(key)}`] === 'function') {
212
- input = this[`getInput${(0, _util.titleCase)(key)}`](inputFromRemediation);
182
+ if (visible === false) {
183
+ return; // Filter out invisible inputs, like stateHandle
184
+ }
185
+
186
+ if (typeof this[`getInput${(0, _util.titleCase)(name)}`] === 'function') {
187
+ input = this[`getInput${(0, _util.titleCase)(name)}`](inputFromRemediation);
213
188
  } else if (type !== 'object') {
214
189
  // handle general primitive types
215
- let name;
190
+ let alias;
191
+ const aliases = ((0, _map.default)(this) ? (0, _map.default)(this)[name] : null) || [];
216
192
 
217
193
  if (aliases.length === 1) {
218
- name = aliases[0];
194
+ alias = aliases[0];
219
195
  } else {
220
196
  // try find key from values
221
- name = (0, _find.default)(aliases).call(aliases, name => {
222
- var _context10;
197
+ alias = (0, _find.default)(aliases).call(aliases, name => {
198
+ var _context7;
223
199
 
224
- return (0, _includes.default)(_context10 = (0, _keys.default)((0, _values.default)(this))).call(_context10, name);
200
+ return (0, _includes.default)(_context7 = (0, _keys.default)((0, _values.default)(this))).call(_context7, name);
225
201
  });
226
202
  }
227
203
 
228
- if (name) {
204
+ if (alias) {
229
205
  input = { ...inputFromRemediation,
230
- name
206
+ name: alias
231
207
  };
232
208
  }
233
209
  }
234
210
 
235
211
  if (!input) {
236
- throw new _errors.AuthSdkError(`Missing custom getInput${(0, _util.titleCase)(key)} method in Remediator: ${this.getName()}`);
212
+ input = inputFromRemediation;
237
213
  }
238
214
 
239
215
  if (Array.isArray(input)) {
@@ -241,19 +217,18 @@ class Remediator {
241
217
  } else {
242
218
  inputs.push(input);
243
219
  }
244
-
245
- return inputs;
246
- }, []);
220
+ });
221
+ return inputs;
247
222
  }
248
223
 
249
224
  static getMessages(remediation) {
250
- var _remediation$value$, _remediation$value$$f, _context11;
225
+ var _remediation$value$, _remediation$value$$f, _context8;
251
226
 
252
227
  if (!remediation.value) {
253
228
  return;
254
229
  }
255
230
 
256
- return (_remediation$value$ = remediation.value[0]) === null || _remediation$value$ === void 0 ? void 0 : (_remediation$value$$f = _remediation$value$.form) === null || _remediation$value$$f === void 0 ? void 0 : (0, _reduce.default)(_context11 = _remediation$value$$f.value).call(_context11, (messages, field) => {
231
+ return (_remediation$value$ = remediation.value[0]) === null || _remediation$value$ === void 0 ? void 0 : (_remediation$value$$f = _remediation$value$.form) === null || _remediation$value$$f === void 0 ? void 0 : (0, _reduce.default)(_context8 = _remediation$value$$f.value).call(_context8, (messages, field) => {
257
232
  if (field.messages) {
258
233
  messages = [...messages, ...field.messages.value];
259
234
  }
@@ -276,9 +251,34 @@ class Remediator {
276
251
  }
277
252
 
278
253
  getAuthenticator() {
279
- var _this$remediation$rel;
254
+ var _this$remediation$rel, _context9, _value$find, _context10;
280
255
 
281
- return (_this$remediation$rel = this.remediation.relatesTo) === null || _this$remediation$rel === void 0 ? void 0 : _this$remediation$rel.value;
256
+ // relatesTo value may be an authenticator or an authenticatorEnrollment
257
+ const relatesTo = (_this$remediation$rel = this.remediation.relatesTo) === null || _this$remediation$rel === void 0 ? void 0 : _this$remediation$rel.value;
258
+
259
+ if (!relatesTo) {
260
+ return;
261
+ }
262
+
263
+ const authenticatorFromRemediation = (0, _util.getAuthenticatorFromRemediation)(this.remediation);
264
+
265
+ if (!authenticatorFromRemediation) {
266
+ // Hopefully value is an authenticator
267
+ return relatesTo;
268
+ } // If relatesTo is an authenticatorEnrollment, the id is actually the enrollmentId
269
+ // Let's get the correct authenticator id from the form value
270
+
271
+
272
+ const id = (0, _find.default)(_context9 = authenticatorFromRemediation.form.value).call(_context9, ({
273
+ name
274
+ }) => name === 'id').value;
275
+ const enrollmentId = (_value$find = (0, _find.default)(_context10 = authenticatorFromRemediation.form.value).call(_context10, ({
276
+ name
277
+ }) => name === 'enrollmentId')) === null || _value$find === void 0 ? void 0 : _value$find.value;
278
+ return { ...relatesTo,
279
+ id,
280
+ enrollmentId
281
+ };
282
282
  }
283
283
 
284
284
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../lib/idx/remediators/Base/Remediator.ts"],"names":["Remediator","constructor","remediation","values","formatAuthenticators","authenticators","authenticator","hasAuthenticatorInList","some","key","push","authenticatorsData","acc","length","getName","name","canRemediate","required","needed","hasData","getData","allValues","res","data","value","entry","i","val","getNextStep","_context","inputs","getInputs","getAuthenticator","type","inputFromRemediation","item","input","aliases","AuthSdkError","Array","isArray","forEach","getMessages","form","messages","field","getValuesAfterProceed","relatesTo"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\n/* eslint-disable complexity */\nimport { AuthSdkError } from '../../../errors';\nimport { NextStep, IdxMessage, Authenticator, Input, IdxOptions } from '../../types';\nimport { IdxAuthenticator, IdxRemediation, IdxContext } from '../../types/idx-js';\nimport { getAllValues, getRequiredValues, titleCase } from '../util';\n\n// A map from IDX data values (server spec) to RemediationValues (client spec)\nexport type IdxToRemediationValueMap = Record<string, string[]>;\n\nexport interface RemediationValues extends IdxOptions {\n stateHandle?: string;\n authenticators?: Authenticator[] | string[];\n authenticator?: string;\n authenticatorsData?: Authenticator[];\n}\n\n// Base class - DO NOT expose static remediationName\nexport class Remediator {\n static remediationName: string;\n\n remediation: IdxRemediation;\n values: RemediationValues;\n map?: IdxToRemediationValueMap;\n\n constructor(remediation: IdxRemediation, values: RemediationValues = {}) {\n // assign fields to the instance\n this.values = { ...values };\n this.formatAuthenticators();\n this.remediation = remediation;\n }\n\n private formatAuthenticators() {\n this.values.authenticators = (this.values.authenticators || []) as Authenticator[];\n // add string authenticator from input to \"authenticators\" field\n if (this.values.authenticator) {\n const hasAuthenticatorInList = this.values.authenticators.some(authenticator => {\n if (typeof authenticator === 'string') {\n return authenticator === this.values.authenticator;\n }\n return authenticator.key === this.values.authenticator;\n });\n if (!hasAuthenticatorInList) {\n this.values.authenticators.push({\n key: this.values.authenticator \n });\n }\n }\n\n // transform items in \"authenticators\" into one format\n this.values.authenticators = this.values.authenticators.map(authenticator => {\n return typeof authenticator === 'string' ? { key: authenticator } : authenticator;\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 if (!this.map) {\n return false;\n }\n const required = getRequiredValues(this.remediation);\n const needed = required!.find((key) => !this.hasData(key));\n if (needed) {\n return false; // missing data for a required field\n }\n return true; // all required fields have available data\n }\n\n // returns an object for the entire remediation form, or just a part\n getData(key?: string) {\n\n if (!key) {\n let allValues = getAllValues(this.remediation);\n let res = allValues!.reduce((data, key) => {\n data[key] = this.getData(key); // recursive\n return data;\n }, {});\n return res;\n }\n\n // Map value by \"map${Property}\" function in each subClass\n if (typeof this[`map${titleCase(key)}`] === 'function') {\n return this[`map${titleCase(key)}`](\n this.remediation.value!.find(({name}) => name === key)\n );\n }\n\n if (!this.map) {\n return this.values[key];\n }\n\n // Handle general primitive types\n const entry = this.map[key];\n if (!entry) {\n return this.values[key];\n }\n\n // find the first aliased property that returns a truthy value\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 hasData(\n key: string // idx name\n ): boolean \n {\n // no attempt to format, we want simple true/false\n\n // First see if the remediation has a mapping for this value\n const data = this.getData(key);\n if (typeof data === 'object') {\n return !!Object.keys(data).find(key => !!data[key]);\n }\n return !!data;\n }\n\n getNextStep(_context?: IdxContext): NextStep {\n const name = this.getName();\n const inputs = this.getInputs();\n const authenticator = this.getAuthenticator();\n // TODO: remove type field in the next major version change\n // https://oktainc.atlassian.net/browse/OKTA-431749\n const type = authenticator?.type;\n return { \n name, \n inputs, \n ...(type && { type }),\n ...(authenticator && { authenticator }),\n };\n }\n\n // Get inputs for the next step\n private getInputs(): Input[] {\n if (!this.map) {\n return [];\n }\n\n return Object.keys(this.map).reduce((inputs, key) => {\n const inputFromRemediation = this.remediation.value!.find(item => item.name === key);\n if (!inputFromRemediation) {\n return inputs;\n }\n\n let input;\n const aliases = this.map![key];\n const { type } = inputFromRemediation;\n if (typeof this[`getInput${titleCase(key)}`] === 'function') {\n input = this[`getInput${titleCase(key)}`](inputFromRemediation);\n } else if (type !== 'object') {\n // handle general primitive types\n let name;\n if (aliases.length === 1) {\n name = aliases[0];\n } else {\n // try find key from values\n name = aliases.find(name => Object.keys(this.values).includes(name));\n }\n if (name) {\n input = { ...inputFromRemediation, name };\n }\n } \n\n if (!input) {\n throw new AuthSdkError(`Missing custom getInput${titleCase(key)} method in Remediator: ${this.getName()}`);\n }\n\n if (Array.isArray(input)) {\n input.forEach(i => inputs.push(i as never));\n } else {\n inputs.push(input as never);\n }\n return inputs;\n }, []);\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, field) => {\n if (field.messages) {\n messages = [...messages, ...field.messages.value] as never;\n }\n return messages;\n }, []);\n }\n\n // Prepare values for the next remediation\n // In general, remove used values from inputs for the current remediation\n // Override this method if special cases need be handled\n getValuesAfterProceed(): RemediationValues {\n const inputs = this.getInputs();\n for (const input of inputs) {\n delete this.values[input.name];\n }\n return this.values;\n }\n\n protected getAuthenticator(): IdxAuthenticator | undefined {\n return this.remediation.relatesTo?.value;\n }\n}\n"],"file":"Remediator.js"}
1
+ {"version":3,"sources":["../../../../../lib/idx/remediators/Base/Remediator.ts"],"names":["Remediator","constructor","remediation","values","options","formatAuthenticators","authenticators","authenticator","hasAuthenticatorInList","some","existing","push","authenticatorsData","acc","length","getName","name","canRemediate","required","needed","key","hasData","getData","allValues","res","data","val","value","entry","i","getNextStep","_context","inputs","getInputs","getAuthenticator","type","inputsFromRemediation","forEach","inputFromRemediation","input","visible","alias","aliases","Array","isArray","getMessages","form","messages","field","getValuesAfterProceed","relatesTo","authenticatorFromRemediation","id","enrollmentId"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\n/* eslint-disable complexity */\nimport { NextStep, IdxMessage, Authenticator, Input, IdxOptions, RemediateOptions } from '../../types';\nimport { IdxAuthenticator, IdxRemediation, IdxContext } from '../../types/idx-js';\nimport { getAllValues, getRequiredValues, titleCase, getAuthenticatorFromRemediation } from '../util';\nimport { formatAuthenticator, compareAuthenticators } from '../../authenticator/util';\n\n// A map from IDX data values (server spec) to RemediationValues (client spec)\nexport type IdxToRemediationValueMap = Record<string, string[]>;\n\nexport interface RemediationValues extends IdxOptions {\n stateHandle?: string;\n authenticators?: (Authenticator | string)[];\n authenticator?: string | Authenticator;\n authenticatorsData?: Authenticator[];\n}\n\n// Base class - DO NOT expose static remediationName\nexport class Remediator {\n static remediationName: string;\n\n remediation: IdxRemediation;\n values: RemediationValues;\n options: RemediateOptions;\n map?: IdxToRemediationValueMap;\n\n constructor(remediation: IdxRemediation, values: RemediationValues = {}, options: RemediateOptions = {}) {\n // assign fields to the instance\n this.values = { ...values };\n this.options = { ...options };\n this.formatAuthenticators();\n this.remediation = remediation;\n }\n\n private formatAuthenticators() {\n this.values.authenticators = (this.values.authenticators || []) as Authenticator[];\n\n // ensure authenticators are in the correct format\n this.values.authenticators = this.values.authenticators.map(authenticator => {\n return formatAuthenticator(authenticator);\n });\n\n // add authenticator (if any) to \"authenticators\"\n if (this.values.authenticator) {\n const authenticator = formatAuthenticator(this.values.authenticator);\n const hasAuthenticatorInList = this.values.authenticators.some(existing => {\n return compareAuthenticators(authenticator, existing);\n });\n if (!hasAuthenticatorInList) {\n this.values.authenticators.push(authenticator);\n }\n }\n\n // save non-key meta to \"authenticatorsData\" field\n // authenticators will be removed after selection to avoid select-authenticator loop\n this.values.authenticatorsData = this.values.authenticators.reduce((acc, authenticator) => {\n if (typeof authenticator === 'object' && Object.keys(authenticator).length > 1) {\n // save authenticator meta into authenticator data\n acc.push(authenticator);\n }\n return acc;\n }, this.values.authenticatorsData || []);\n }\n\n getName(): string {\n return this.remediation.name;\n }\n\n // Override this method to provide custom check\n /* eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars */\n canRemediate(): boolean {\n const required = getRequiredValues(this.remediation);\n const needed = required!.find((key) => !this.hasData(key));\n if (needed) {\n return false; // missing data for a required field\n }\n return true; // all required fields have available data\n }\n\n // returns an object for the entire remediation form, or just a part\n getData(key?: string) {\n\n if (!key) {\n let allValues = getAllValues(this.remediation);\n let res = allValues!.reduce((data, key) => {\n data[key] = this.getData(key); // recursive\n return data;\n }, {});\n return res;\n }\n\n // Map value by \"map${Property}\" function in each subClass\n if (typeof this[`map${titleCase(key)}`] === 'function') {\n const val = this[`map${titleCase(key)}`](\n this.remediation.value!.find(({name}) => name === key)\n );\n if (val) {\n return val;\n }\n }\n\n // If a map is defined for this key, return the first aliased property that returns a truthy value\n if (this.map && this.map[key]) {\n const entry = this.map[key];\n for (let i = 0; i < entry.length; i++) {\n let val = this.values[entry[i]];\n if (val) {\n return val;\n }\n }\n }\n\n // fallback: return the value by key\n return this.values[key];\n }\n\n hasData(\n key: string // idx name\n ): boolean \n {\n // no attempt to format, we want simple true/false\n return !!this.getData(key);\n }\n\n getNextStep(_context?: IdxContext): NextStep {\n const name = this.getName();\n const inputs = this.getInputs();\n const authenticator = this.getAuthenticator();\n // TODO: remove type field in the next major version change\n // https://oktainc.atlassian.net/browse/OKTA-431749\n const type = authenticator?.type;\n return { \n name, \n inputs, \n ...(type && { type }),\n ...(authenticator && { authenticator }),\n };\n }\n\n // Get inputs for the next step\n private getInputs(): Input[] {\n const inputs: Input[] = [];\n const inputsFromRemediation = this.remediation.value || [];\n inputsFromRemediation.forEach(inputFromRemediation => {\n let input;\n let { name, type, visible } = inputFromRemediation;\n if (visible === false) {\n return; // Filter out invisible inputs, like stateHandle\n }\n if (typeof this[`getInput${titleCase(name)}`] === 'function') {\n input = this[`getInput${titleCase(name)}`](inputFromRemediation);\n } else if (type !== 'object') {\n // handle general primitive types\n let alias;\n const aliases = (this.map ? this.map[name] : null) || [];\n if (aliases.length === 1) {\n alias = aliases[0];\n } else {\n // try find key from values\n alias = aliases.find(name => Object.keys(this.values).includes(name));\n }\n if (alias) {\n input = { ...inputFromRemediation, name: alias };\n }\n }\n if (!input) {\n input = inputFromRemediation;\n }\n if (Array.isArray(input)) {\n input.forEach(i => inputs.push(i));\n } else {\n inputs.push(input);\n }\n });\n return inputs;\n }\n\n static getMessages(remediation: IdxRemediation): IdxMessage[] | undefined {\n if (!remediation.value) {\n return;\n }\n return remediation.value[0]?.form?.value.reduce((messages: IdxMessage[], field) => {\n if (field.messages) {\n messages = [...messages, ...field.messages.value];\n }\n return messages;\n }, []);\n }\n\n // Prepare values for the next remediation\n // In general, remove used values from inputs for the current remediation\n // Override this method if special cases need be handled\n getValuesAfterProceed(): RemediationValues {\n const inputs = this.getInputs();\n for (const input of inputs) {\n delete this.values[input.name];\n }\n return this.values;\n }\n\n protected getAuthenticator(): IdxAuthenticator | undefined {\n // relatesTo value may be an authenticator or an authenticatorEnrollment\n const relatesTo = this.remediation.relatesTo?.value;\n if (!relatesTo) {\n return;\n }\n\n const authenticatorFromRemediation = getAuthenticatorFromRemediation(this.remediation);\n if (!authenticatorFromRemediation) {\n // Hopefully value is an authenticator\n return relatesTo;\n }\n\n // If relatesTo is an authenticatorEnrollment, the id is actually the enrollmentId\n // Let's get the correct authenticator id from the form value\n const id = authenticatorFromRemediation.form!.value\n .find(({ name }) => name === 'id')!.value as string;\n const enrollmentId = authenticatorFromRemediation.form!.value\n .find(({ name }) => name === 'enrollmentId')?.value as string;\n\n return {\n ...relatesTo,\n id,\n enrollmentId\n };\n }\n}\n"],"file":"Remediator.js"}