@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.
- package/CHANGELOG.md +35 -0
- package/cjs/AuthStateManager.js +9 -3
- package/cjs/AuthStateManager.js.map +1 -1
- package/cjs/OktaUserAgent.js +2 -2
- package/cjs/PromiseQueue.js +9 -2
- package/cjs/PromiseQueue.js.map +1 -1
- package/cjs/ServiceManager.js +3 -3
- package/cjs/ServiceManager.js.map +1 -1
- package/cjs/TransactionManager.js +11 -5
- package/cjs/TransactionManager.js.map +1 -1
- package/cjs/browser/browserStorage.js +19 -18
- package/cjs/browser/browserStorage.js.map +1 -1
- package/cjs/idx/authenticator/Authenticator.js.map +1 -1
- package/cjs/idx/authenticator/OktaPassword.js +12 -3
- package/cjs/idx/authenticator/OktaPassword.js.map +1 -1
- package/cjs/idx/authenticator/OktaVerifyTotp.js +9 -1
- package/cjs/idx/authenticator/OktaVerifyTotp.js.map +1 -1
- package/cjs/idx/authenticator/SecurityQuestionEnrollment.js +14 -1
- package/cjs/idx/authenticator/SecurityQuestionEnrollment.js.map +1 -1
- package/cjs/idx/authenticator/SecurityQuestionVerification.js +9 -1
- package/cjs/idx/authenticator/SecurityQuestionVerification.js.map +1 -1
- package/cjs/idx/authenticator/VerificationCodeAuthenticator.js +13 -3
- package/cjs/idx/authenticator/VerificationCodeAuthenticator.js.map +1 -1
- package/cjs/idx/authenticator/WebauthnEnrollment.js +5 -0
- package/cjs/idx/authenticator/WebauthnEnrollment.js.map +1 -1
- package/cjs/idx/authenticator/WebauthnVerification.js +5 -0
- package/cjs/idx/authenticator/WebauthnVerification.js.map +1 -1
- package/cjs/idx/authenticator/util.js +64 -0
- package/cjs/idx/authenticator/util.js.map +1 -0
- package/cjs/idx/idx-js/index.js +0 -122
- package/cjs/idx/idx-js/index.js.map +1 -1
- package/cjs/idx/idx-js/introspect.js +10 -6
- package/cjs/idx/idx-js/introspect.js.map +1 -1
- package/cjs/idx/idx-js/v1/generateIdxAction.js +17 -23
- package/cjs/idx/idx-js/v1/generateIdxAction.js.map +1 -1
- package/cjs/idx/idx-js/v1/makeIdxState.js +5 -4
- package/cjs/idx/idx-js/v1/makeIdxState.js.map +1 -1
- package/cjs/idx/introspect.js +13 -3
- package/cjs/idx/introspect.js.map +1 -1
- package/cjs/idx/proceed.js +14 -11
- package/cjs/idx/proceed.js.map +1 -1
- package/cjs/idx/remediate.js +68 -77
- package/cjs/idx/remediate.js.map +1 -1
- package/cjs/idx/remediators/AuthenticatorEnrollmentData.js +6 -2
- package/cjs/idx/remediators/AuthenticatorEnrollmentData.js.map +1 -1
- package/cjs/idx/remediators/AuthenticatorVerificationData.js +23 -19
- package/cjs/idx/remediators/AuthenticatorVerificationData.js.map +1 -1
- package/cjs/idx/remediators/Base/AuthenticatorData.js +22 -14
- package/cjs/idx/remediators/Base/AuthenticatorData.js.map +1 -1
- package/cjs/idx/remediators/Base/Remediator.js +85 -85
- package/cjs/idx/remediators/Base/Remediator.js.map +1 -1
- package/cjs/idx/remediators/Base/SelectAuthenticator.js +24 -15
- package/cjs/idx/remediators/Base/SelectAuthenticator.js.map +1 -1
- package/cjs/idx/remediators/Base/VerifyAuthenticator.js +15 -4
- package/cjs/idx/remediators/Base/VerifyAuthenticator.js.map +1 -1
- package/cjs/idx/remediators/ChallengePoll.js +8 -1
- package/cjs/idx/remediators/ChallengePoll.js.map +1 -1
- package/cjs/idx/remediators/EnrollPoll.js +1 -1
- package/cjs/idx/remediators/EnrollPoll.js.map +1 -1
- package/cjs/idx/remediators/EnrollProfile.js +15 -9
- package/cjs/idx/remediators/EnrollProfile.js.map +1 -1
- package/cjs/idx/remediators/EnrollmentChannelData.js +0 -8
- package/cjs/idx/remediators/EnrollmentChannelData.js.map +1 -1
- package/cjs/idx/remediators/Identify.js +12 -5
- package/cjs/idx/remediators/Identify.js.map +1 -1
- package/cjs/idx/remediators/ReEnrollAuthenticator.js +9 -8
- package/cjs/idx/remediators/ReEnrollAuthenticator.js.map +1 -1
- package/cjs/idx/remediators/SelectAuthenticatorAuthenticate.js +4 -3
- package/cjs/idx/remediators/SelectAuthenticatorAuthenticate.js.map +1 -1
- package/cjs/idx/remediators/SelectAuthenticatorUnlockAccount.js +0 -1
- package/cjs/idx/remediators/SelectAuthenticatorUnlockAccount.js.map +1 -1
- package/cjs/idx/remediators/Skip.js +1 -8
- package/cjs/idx/remediators/Skip.js.map +1 -1
- package/cjs/idx/remediators/util.js.map +1 -1
- package/cjs/idx/run.js +267 -198
- package/cjs/idx/run.js.map +1 -1
- package/cjs/idx/types/idx-js.js.map +1 -1
- package/cjs/idx/types/index.js +37 -0
- package/cjs/idx/types/index.js.map +1 -1
- package/cjs/idx/util.js +198 -0
- package/cjs/idx/util.js.map +1 -0
- package/cjs/options/browser.js +11 -6
- package/cjs/options/browser.js.map +1 -1
- package/cjs/options/index.js +1 -1
- package/cjs/options/index.js.map +1 -1
- package/cjs/options/node.js +5 -6
- package/cjs/options/node.js.map +1 -1
- package/dist/okta-auth-js.min.js +1 -1
- package/dist/okta-auth-js.min.js.map +1 -1
- package/dist/okta-auth-js.umd.js +1 -1
- package/dist/okta-auth-js.umd.js.map +1 -1
- package/esm/esm.browser.js +1060 -775
- package/esm/esm.browser.js.map +1 -1
- package/esm/esm.node.mjs +1057 -775
- package/esm/esm.node.mjs.map +1 -1
- package/lib/AuthStateManager.d.ts +2 -0
- package/lib/PromiseQueue.d.ts +6 -2
- package/lib/TransactionManager.d.ts +3 -4
- package/lib/idx/authenticator/Authenticator.d.ts +1 -1
- package/lib/idx/authenticator/OktaPassword.d.ts +2 -1
- package/lib/idx/authenticator/OktaVerifyTotp.d.ts +1 -1
- package/lib/idx/authenticator/SecurityQuestionEnrollment.d.ts +3 -5
- package/lib/idx/authenticator/SecurityQuestionVerification.d.ts +1 -1
- package/lib/idx/authenticator/VerificationCodeAuthenticator.d.ts +2 -1
- package/lib/idx/authenticator/WebauthnEnrollment.d.ts +1 -1
- package/lib/idx/authenticator/WebauthnVerification.d.ts +1 -1
- package/lib/idx/authenticator/util.d.ts +4 -0
- package/lib/idx/idx-js/index.d.ts +1 -17
- package/lib/idx/idx-js/introspect.d.ts +2 -1
- package/lib/idx/idx-js/v1/generateIdxAction.d.ts +1 -1
- package/lib/idx/idx-js/v1/makeIdxState.d.ts +2 -2
- package/lib/idx/proceed.d.ts +1 -3
- package/lib/idx/remediate.d.ts +2 -2
- package/lib/idx/remediators/AuthenticatorVerificationData.d.ts +1 -0
- package/lib/idx/remediators/Base/AuthenticatorData.d.ts +0 -3
- package/lib/idx/remediators/Base/Remediator.d.ts +5 -4
- package/lib/idx/remediators/Base/SelectAuthenticator.d.ts +7 -9
- package/lib/idx/remediators/Base/VerifyAuthenticator.d.ts +2 -4
- package/lib/idx/remediators/ChallengePoll.d.ts +1 -0
- package/lib/idx/remediators/EnrollProfile.d.ts +0 -3
- package/lib/idx/remediators/EnrollmentChannelData.d.ts +0 -4
- package/lib/idx/remediators/Identify.d.ts +3 -5
- package/lib/idx/remediators/ReEnrollAuthenticator.d.ts +2 -5
- package/lib/idx/remediators/SelectAuthenticatorAuthenticate.d.ts +2 -1
- package/lib/idx/remediators/SelectAuthenticatorUnlockAccount.d.ts +1 -2
- package/lib/idx/remediators/Skip.d.ts +0 -3
- package/lib/idx/types/idx-js.d.ts +5 -1
- package/lib/idx/types/index.d.ts +7 -3
- package/lib/idx/util.d.ts +11 -0
- package/lib/options/browser.d.ts +2 -2
- package/lib/options/node.d.ts +2 -2
- package/lib/types/Storage.d.ts +7 -5
- package/lib/types/api.d.ts +1 -3
- package/package.json +7 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../lib/idx/idx-js/v1/generateIdxAction.ts"],"names":["generateDirectFetch","actionDefinition","defaultParamsForAction","immutableParamsForAction","toPersist","target","href","params","headers","accepts","body","credentials","withCredentials","
|
|
1
|
+
{"version":3,"sources":["../../../../../lib/idx/idx-js/v1/generateIdxAction.ts"],"names":["generateDirectFetch","actionDefinition","defaultParamsForAction","immutableParamsForAction","toPersist","target","href","params","headers","accepts","body","credentials","withCredentials","response","method","responseJSON","json","requestDidSucceed","ok","idxResponse","status","get","stepUp","generateIdxAction","generator","defaultParams","neededParams","immutableParams","action","name"],"mappings":";;;;;;;;AAcA;;AACA;;AACA;;AAhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAKA,MAAMA,mBAAmB,GAAG,SAASA,mBAAT,CAA6B;AACvDC,EAAAA,gBADuD;AAEvDC,EAAAA,sBAAsB,GAAG,EAF8B;AAGvDC,EAAAA,wBAAwB,GAAG,EAH4B;AAIvDC,EAAAA;AAJuD,CAA7B,EAKzB;AACD,QAAMC,MAAM,GAAGJ,gBAAgB,CAACK,IAAhC;AACA,SAAO,gBAAeC,MAAf,EAAuB;AAC5B,UAAMC,OAAO,GAAG;AACd,sBAAgB,kBADF;AAEd,gBAAUP,gBAAgB,CAACQ,OAAjB,IAA4B;AAFxB,KAAhB;AAIA,UAAMC,IAAI,GAAG,wBAAe,EAC1B,GAAGR,sBADuB;AAE1B,SAAGK,MAFuB;AAG1B,SAAGJ;AAHuB,KAAf,CAAb;AAKA,UAAMQ,WAAW,GAAGP,SAAS,IAAIA,SAAS,CAACQ,eAAV,KAA8B,KAA3C,GAAmD,MAAnD,GAA4D,SAAhF;AACA,UAAMC,QAAQ,GAAG,MAAM,qBAAQR,MAAR,EAAgB;AAAES,MAAAA,MAAM,EAAEb,gBAAgB,CAACa,MAA3B;AAAmCN,MAAAA,OAAnC;AAA4CE,MAAAA,IAA5C;AAAkDC,MAAAA;AAAlD,KAAhB,CAAvB;AACA,UAAMI,YAAY,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAA3B;AACA,UAAMC,iBAAiB,GAAGJ,QAAQ,CAACK,EAAnC;AACA,UAAMC,WAAW,GAAG,gCAAaJ,YAAb,EAA2BX,SAA3B,EAAsCa,iBAAtC,CAApB;;AACA,QAAIJ,QAAQ,CAACO,MAAT,KAAoB,GAApB,IAA2BP,QAAQ,CAACL,OAAT,CAAiBa,GAAjB,CAAqB,kBAArB,MAA6C,mCAA5E,EAAiH;AAC/G;AACA;AACA;AACA;AACAF,MAAAA,WAAW,CAACG,MAAZ,GAAqB,IAArB;AACD,KArB2B,CAuB3B;;;AACA,QAAI,CAACL,iBAAL,EAAwB;AACtB,YAAME,WAAN;AACD;;AAEF,WAAOA,WAAP;AACD,GA7BD;AA8BD,CArCD,C,CAuCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,MAAMI,iBAAiB,GAAG,SAASA,iBAAT,CAA4BtB,gBAA5B,EAA8CG,SAA9C,EAA0D;AAClF;AACA;AACA,QAAMoB,SAAS,GAAGxB,mBAAlB;AACA,QAAM;AAAEyB,IAAAA,aAAF;AAAiBC,IAAAA,YAAjB;AAA+BC,IAAAA;AAA/B,MAAmD,kDAAgC1B,gBAAhC,CAAzD;AAEA,QAAM2B,MAAM,GAAGJ,SAAS,CAAE;AACxBvB,IAAAA,gBADwB;AAExBC,IAAAA,sBAAsB,EAAEuB,aAAa,CAACxB,gBAAgB,CAAC4B,IAAlB,CAFb;AAGxB1B,IAAAA,wBAAwB,EAAEwB,eAAe,CAAC1B,gBAAgB,CAAC4B,IAAlB,CAHjB;AAIxBzB,IAAAA;AAJwB,GAAF,CAAxB;AAMAwB,EAAAA,MAAM,CAACF,YAAP,GAAsBA,YAAtB;AACA,SAAOE,MAAP;AACD,CAdD;;eAgBeL,iB","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// @ts-nocheck\nimport { request } from '../client';\nimport { divideActionParamsByMutability } from './actionParser';\nimport { makeIdxState } from './makeIdxState';\n\nconst generateDirectFetch = function generateDirectFetch({ \n actionDefinition, \n defaultParamsForAction = {}, \n immutableParamsForAction = {}, \n toPersist \n}) {\n const target = actionDefinition.href;\n return async function(params) {\n const headers = {\n 'content-type': 'application/json',\n 'accept': actionDefinition.accepts || 'application/ion+json',\n };\n const body = JSON.stringify({\n ...defaultParamsForAction,\n ...params,\n ...immutableParamsForAction\n });\n const credentials = toPersist && toPersist.withCredentials === false ? 'omit' : 'include';\n const response = await request(target, { method: actionDefinition.method, headers, body, credentials });\n const responseJSON = await response.json();\n const requestDidSucceed = response.ok;\n const idxResponse = makeIdxState(responseJSON, toPersist, requestDidSucceed);\n if (response.status === 401 && response.headers.get('WWW-Authenticate') === 'Oktadevicejwt realm=\"Okta Device\"') {\n // Okta server responds 401 status code with WWW-Authenticate header and new remediation\n // so that the iOS/MacOS credential SSO extension (Okta Verify) can intercept\n // the response reaches here when Okta Verify is not installed\n // set `stepUp` to true if flow should be continued without showing any errors\n idxResponse.stepUp = true;\n }\n\n // Throw IDX response if request did not succeed. This behavior will be removed in version 7.0: OKTA-481844\n if (!requestDidSucceed) {\n throw idxResponse;\n }\n\n return idxResponse;\n };\n};\n\n// TODO: Resolve in M2: Either build the final polling solution or remove this code\n// const generatePollingFetch = function generatePollingFetch( { actionDefinition, defaultParamsForAction = {}, immutableParamsForAction = {} } ) {\n// // TODO: Discussions ongoing about when/how to terminate polling: OKTA-246581\n// const target = actionDefinition.href;\n// return async function(params) {\n// return fetch(target, {\n// method: actionDefinition.method,\n// headers: {\n// 'content-type': actionDefinition.accepts,\n// },\n// body: JSON.stringify({ ...defaultParamsForAction, ...params, ...immutableParamsForAction })\n// })\n// .then( response => response.ok ? response.json() : response.json().then( err => Promise.reject(err)) )\n// .then( idxResponse => makeIdxState(idxResponse) );\n// };\n// };\n\nconst generateIdxAction = function generateIdxAction( actionDefinition, toPersist ) {\n // TODO: leaving this here to see where the polling is EXPECTED to drop into the code, but removing any accidental trigger of incomplete code\n // const generator = actionDefinition.refresh ? generatePollingFetch : generateDirectFetch;\n const generator = generateDirectFetch;\n const { defaultParams, neededParams, immutableParams } = divideActionParamsByMutability( actionDefinition );\n\n const action = generator( {\n actionDefinition,\n defaultParamsForAction: defaultParams[actionDefinition.name],\n immutableParamsForAction: immutableParams[actionDefinition.name],\n toPersist\n });\n action.neededParams = neededParams;\n return action;\n};\n\nexport default generateIdxAction;\n"],"file":"generateIdxAction.js"}
|
|
@@ -21,8 +21,8 @@ var _idxResponseParser = require("./idxResponseParser");
|
|
|
21
21
|
*
|
|
22
22
|
* See the License for the specific language governing permissions and limitations under the License.
|
|
23
23
|
*/
|
|
24
|
-
function makeIdxState(idxResponse, toPersist) {
|
|
25
|
-
var _rawIdxResponse$succe,
|
|
24
|
+
function makeIdxState(idxResponse, toPersist, requestDidSucceed) {
|
|
25
|
+
var _rawIdxResponse$succe, _rawIdxResponse$succe2, _rawIdxResponse$succe3;
|
|
26
26
|
|
|
27
27
|
const rawIdxResponse = idxResponse;
|
|
28
28
|
const {
|
|
@@ -50,7 +50,7 @@ function makeIdxState(idxResponse, toPersist) {
|
|
|
50
50
|
|
|
51
51
|
const findCode = item => item.name === 'interaction_code';
|
|
52
52
|
|
|
53
|
-
const interactionCode = (_rawIdxResponse$succe = rawIdxResponse.successWithInteractionCode) === null || _rawIdxResponse$succe === void 0 ? void 0 : (0, _find.default)(
|
|
53
|
+
const interactionCode = (_rawIdxResponse$succe = rawIdxResponse.successWithInteractionCode) === null || _rawIdxResponse$succe === void 0 ? void 0 : (_rawIdxResponse$succe2 = _rawIdxResponse$succe.value) === null || _rawIdxResponse$succe2 === void 0 ? void 0 : (_rawIdxResponse$succe3 = (0, _find.default)(_rawIdxResponse$succe2).call(_rawIdxResponse$succe2, findCode)) === null || _rawIdxResponse$succe3 === void 0 ? void 0 : _rawIdxResponse$succe3.value;
|
|
54
54
|
return {
|
|
55
55
|
proceed,
|
|
56
56
|
neededToProceed,
|
|
@@ -58,7 +58,8 @@ function makeIdxState(idxResponse, toPersist) {
|
|
|
58
58
|
context,
|
|
59
59
|
rawIdxState: rawIdxResponse,
|
|
60
60
|
interactionCode,
|
|
61
|
-
toPersist
|
|
61
|
+
toPersist,
|
|
62
|
+
requestDidSucceed
|
|
62
63
|
};
|
|
63
64
|
}
|
|
64
65
|
//# sourceMappingURL=makeIdxState.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../lib/idx/idx-js/v1/makeIdxState.ts"],"names":["makeIdxState","idxResponse","toPersist","rawIdxResponse","remediations","context","actions","neededToProceed","proceed","remediationChoice","paramsFromUser","remediationChoiceObject","remediation","name","reject","action","findCode","item","interactionCode","successWithInteractionCode","value","rawIdxState"],"mappings":";;;;;;;;;;AAaA;;AAbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKO,SAASA,YAAT,CAAuBC,WAAvB,
|
|
1
|
+
{"version":3,"sources":["../../../../../lib/idx/idx-js/v1/makeIdxState.ts"],"names":["makeIdxState","idxResponse","toPersist","requestDidSucceed","rawIdxResponse","remediations","context","actions","neededToProceed","proceed","remediationChoice","paramsFromUser","remediationChoiceObject","remediation","name","reject","action","findCode","item","interactionCode","successWithInteractionCode","value","rawIdxState"],"mappings":";;;;;;;;;;AAaA;;AAbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKO,SAASA,YAAT,CAAuBC,WAAvB,EAAoDC,SAApD,EAA+DC,iBAA/D,EAAyG;AAAA;;AAC9G,QAAMC,cAAc,GAAIH,WAAxB;AACA,QAAM;AAAEI,IAAAA,YAAF;AAAgBC,IAAAA,OAAhB;AAAyBC,IAAAA;AAAzB,MAAqC,yCAAkBN,WAAlB,EAA+BC,SAA/B,CAA3C;AACA,QAAMM,eAAe,GAAG,CAAC,GAAGH,YAAJ,CAAxB;;AAEA,QAAMI,OAA+B,GAAG,gBAAgBC,iBAAhB,EAAmCC,cAAc,GAAG,EAApD,EAAyD;AAC/F;AACJ;AACA;AACA;AACA;AACA;AACI,UAAMC,uBAAuB,GAAG,mBAAAP,YAAY,MAAZ,CAAAA,YAAY,EAAOQ,WAAD,IAAiBA,WAAW,CAACC,IAAZ,KAAqBJ,iBAA5C,CAA5C;;AACA,QAAK,CAACE,uBAAN,EAAgC;AAC9B,aAAO,iBAAQG,MAAR,CAAgB,gCAA+BL,iBAAkB,GAAjE,CAAP;AACD;;AAED,WAAOE,uBAAuB,CAACI,MAAxB,CAA+BL,cAA/B,CAAP;AACD,GAbD;;AAeA,QAAMM,QAAQ,GAAGC,IAAI,IAAIA,IAAI,CAACJ,IAAL,KAAc,kBAAvC;;AACA,QAAMK,eAAe,4BAAGf,cAAc,CAACgB,0BAAlB,oFAAG,sBAA2CC,KAA9C,qFAAG,wEAAwDJ,QAAxD,CAAH,2DAAG,uBAAoEI,KAA5F;AAEA,SAAO;AACLZ,IAAAA,OADK;AAELD,IAAAA,eAFK;AAGLD,IAAAA,OAHK;AAILD,IAAAA,OAJK;AAKLgB,IAAAA,WAAW,EAAElB,cALR;AAMLe,IAAAA,eANK;AAOLjB,IAAAA,SAPK;AAQLC,IAAAA;AARK,GAAP;AAUD","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 { IdxResponse, RawIdxResponse } from '../../types/idx-js';\nimport { parseIdxResponse } from './idxResponseParser';\n\nexport function makeIdxState( idxResponse: RawIdxResponse, toPersist, requestDidSucceed: boolean ): IdxResponse {\n const rawIdxResponse = idxResponse;\n const { remediations, context, actions } = parseIdxResponse( idxResponse, toPersist );\n const neededToProceed = [...remediations];\n\n const proceed: IdxResponse['proceed'] = async function( remediationChoice, paramsFromUser = {} ) {\n /*\n remediationChoice is the name attribute on each form\n name should remain unique for items inside the remediation that are considered forms(identify, select-factor)\n name can be duplicate for items like redirect where its not considered a form(redirect)\n when names are not unique its a redirect to a href, so widget wont POST to idx-js layer.\n */\n const remediationChoiceObject = remediations.find((remediation) => remediation.name === remediationChoice);\n if ( !remediationChoiceObject ) {\n return Promise.reject(`Unknown remediation choice: [${remediationChoice}]`);\n }\n\n return remediationChoiceObject.action(paramsFromUser);\n };\n\n const findCode = item => item.name === 'interaction_code';\n const interactionCode = rawIdxResponse.successWithInteractionCode?.value?.find( findCode )?.value as string;\n\n return {\n proceed,\n neededToProceed,\n actions,\n context,\n rawIdxState: rawIdxResponse,\n interactionCode,\n toPersist,\n requestDidSucceed,\n };\n}\n"],"file":"makeIdxState.js"}
|
package/cjs/idx/introspect.js
CHANGED
|
@@ -24,8 +24,16 @@ var _constants = require("../constants");
|
|
|
24
24
|
* See the License for the specific language governing permissions and limitations under the License.
|
|
25
25
|
*/
|
|
26
26
|
async function introspect(authClient, options = {}) {
|
|
27
|
-
|
|
28
|
-
let
|
|
27
|
+
let rawIdxResponse;
|
|
28
|
+
let requestDidSucceed; // try load from storage first
|
|
29
|
+
|
|
30
|
+
const savedIdxResponse = authClient.transactionManager.loadIdxResponse();
|
|
31
|
+
|
|
32
|
+
if (savedIdxResponse) {
|
|
33
|
+
rawIdxResponse = savedIdxResponse.rawIdxResponse;
|
|
34
|
+
requestDidSucceed = savedIdxResponse.requestDidSucceed;
|
|
35
|
+
} // call idx.introspect if no existing idx response available in storage
|
|
36
|
+
|
|
29
37
|
|
|
30
38
|
if (!rawIdxResponse) {
|
|
31
39
|
const version = options.version || _constants.IDX_API_VERSION;
|
|
@@ -37,9 +45,11 @@ async function introspect(authClient, options = {}) {
|
|
|
37
45
|
...options,
|
|
38
46
|
version
|
|
39
47
|
});
|
|
48
|
+
requestDidSucceed = true;
|
|
40
49
|
} catch (err) {
|
|
41
50
|
if ((0, _idxJs2.isRawIdxResponse)(err)) {
|
|
42
51
|
rawIdxResponse = err;
|
|
52
|
+
requestDidSucceed = false;
|
|
43
53
|
} else {
|
|
44
54
|
throw err;
|
|
45
55
|
}
|
|
@@ -51,6 +61,6 @@ async function introspect(authClient, options = {}) {
|
|
|
51
61
|
} = options;
|
|
52
62
|
return _idxJs.default.makeIdxState(rawIdxResponse, {
|
|
53
63
|
withCredentials
|
|
54
|
-
});
|
|
64
|
+
}, requestDidSucceed);
|
|
55
65
|
}
|
|
56
66
|
//# sourceMappingURL=introspect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../lib/idx/introspect.ts"],"names":["introspect","authClient","options","rawIdxResponse","transactionManager","loadIdxResponse","version","IDX_API_VERSION","domain","idx","err","withCredentials","makeIdxState"],"mappings":";;;;;;AAYA;;AAEA;;AACA;;AACA;;AAhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAeO,eAAeA,UAAf,CACLC,UADK,EAELC,OAA0B,GAAG,EAFxB,EAGiB;AACtB;AACA,MAAIC,
|
|
1
|
+
{"version":3,"sources":["../../../lib/idx/introspect.ts"],"names":["introspect","authClient","options","rawIdxResponse","requestDidSucceed","savedIdxResponse","transactionManager","loadIdxResponse","version","IDX_API_VERSION","domain","idx","err","withCredentials","makeIdxState"],"mappings":";;;;;;AAYA;;AAEA;;AACA;;AACA;;AAhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAeO,eAAeA,UAAf,CACLC,UADK,EAELC,OAA0B,GAAG,EAFxB,EAGiB;AACtB,MAAIC,cAAJ;AACA,MAAIC,iBAAJ,CAFsB,CAItB;;AACA,QAAMC,gBAAgB,GAAGJ,UAAU,CAACK,kBAAX,CAA8BC,eAA9B,EAAzB;;AACA,MAAIF,gBAAJ,EAAsB;AACpBF,IAAAA,cAAc,GAAGE,gBAAgB,CAACF,cAAlC;AACAC,IAAAA,iBAAiB,GAAGC,gBAAgB,CAACD,iBAArC;AACD,GATqB,CAWtB;;;AACA,MAAI,CAACD,cAAL,EAAqB;AACnB,UAAMK,OAAO,GAAGN,OAAO,CAACM,OAAR,IAAmBC,0BAAnC;AACA,UAAMC,MAAM,GAAG,0BAAeT,UAAf,CAAf;;AACA,QAAI;AACFE,MAAAA,cAAc,GAAG,MAAMQ,eAAIX,UAAJ,CAAe;AAAEU,QAAAA,MAAF;AAAU,WAAGR,OAAb;AAAsBM,QAAAA;AAAtB,OAAf,CAAvB;AACAJ,MAAAA,iBAAiB,GAAG,IAApB;AACD,KAHD,CAGE,OAAOQ,GAAP,EAAY;AACZ,UAAI,8BAAiBA,GAAjB,CAAJ,EAA2B;AACzBT,QAAAA,cAAc,GAAGS,GAAjB;AACAR,QAAAA,iBAAiB,GAAG,KAApB;AACD,OAHD,MAGO;AACL,cAAMQ,GAAN;AACD;AACF;AACF;;AAED,QAAM;AAAEC,IAAAA;AAAF,MAAsBX,OAA5B;AACA,SAAOS,eAAIG,YAAJ,CAAiBX,cAAjB,EAAiC;AAAEU,IAAAA;AAAF,GAAjC,EAAsDT,iBAAtD,CAAP;AACD","sourcesContent":["/*!\n * Copyright (c) 2021, 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 idx from './idx-js';\nimport { OktaAuthInterface } from '../types';\nimport { IdxResponse, isRawIdxResponse } from './types/idx-js';\nimport { getOAuthDomain } from '../oidc';\nimport { IDX_API_VERSION } from '../constants';\n\nexport interface IntrospectOptions {\n withCredentials?: boolean;\n interactionHandle?: string;\n stateHandle?: string;\n version?: string;\n}\n\nexport async function introspect (\n authClient: OktaAuthInterface, \n options: IntrospectOptions = {}\n): Promise<IdxResponse> {\n let rawIdxResponse;\n let requestDidSucceed;\n\n // try load from storage first\n const savedIdxResponse = authClient.transactionManager.loadIdxResponse();\n if (savedIdxResponse) {\n rawIdxResponse = savedIdxResponse.rawIdxResponse;\n requestDidSucceed = savedIdxResponse.requestDidSucceed;\n }\n\n // call idx.introspect if no existing idx response available in storage\n if (!rawIdxResponse) {\n const version = options.version || IDX_API_VERSION;\n const domain = getOAuthDomain(authClient);\n try {\n rawIdxResponse = await idx.introspect({ domain, ...options, version });\n requestDidSucceed = true;\n } catch (err) {\n if (isRawIdxResponse(err)) {\n rawIdxResponse = err;\n requestDidSucceed = false;\n } else {\n throw err;\n }\n }\n }\n\n const { withCredentials } = options;\n return idx.makeIdxState(rawIdxResponse, { withCredentials }, requestDidSucceed);\n}\n"],"file":"introspect.js"}
|
package/cjs/idx/proceed.js
CHANGED
|
@@ -20,25 +20,28 @@ var _errors = require("../errors");
|
|
|
20
20
|
*
|
|
21
21
|
* See the License for the specific language governing permissions and limitations under the License.
|
|
22
22
|
*/
|
|
23
|
-
function canProceed(authClient, options) {
|
|
23
|
+
function canProceed(authClient, options = {}) {
|
|
24
24
|
const meta = (0, _transactionMeta.getSavedTransactionMeta)(authClient, options);
|
|
25
|
-
return !!meta;
|
|
25
|
+
return !!(meta || options.stateHandle);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
async function proceed(authClient, options = {}) {
|
|
29
|
-
|
|
29
|
+
if (!canProceed(authClient, options)) {
|
|
30
|
+
throw new _errors.AuthSdkError('Unable to proceed: saved transaction could not be loaded');
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
let {
|
|
34
|
+
flow,
|
|
30
35
|
state
|
|
31
36
|
} = options;
|
|
32
|
-
const meta = (0, _transactionMeta.getSavedTransactionMeta)(authClient, {
|
|
33
|
-
state
|
|
34
|
-
}); // Proceed always needs saved transaction meta
|
|
35
|
-
|
|
36
|
-
if (!meta) {
|
|
37
|
-
throw new _errors.AuthSdkError('Unable to proceed: saved transaction could not be loaded');
|
|
38
|
-
} // Determine the flow specification based on the saved flow
|
|
39
37
|
|
|
38
|
+
if (!flow) {
|
|
39
|
+
const meta = (0, _transactionMeta.getSavedTransactionMeta)(authClient, {
|
|
40
|
+
state
|
|
41
|
+
});
|
|
42
|
+
flow = meta === null || meta === void 0 ? void 0 : meta.flow;
|
|
43
|
+
}
|
|
40
44
|
|
|
41
|
-
const flow = meta === null || meta === void 0 ? void 0 : meta.flow;
|
|
42
45
|
return (0, _run.run)(authClient, { ...options,
|
|
43
46
|
flow
|
|
44
47
|
});
|
package/cjs/idx/proceed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../lib/idx/proceed.ts"],"names":["canProceed","authClient","options","meta","
|
|
1
|
+
{"version":3,"sources":["../../../lib/idx/proceed.ts"],"names":["canProceed","authClient","options","meta","stateHandle","proceed","AuthSdkError","flow","state"],"mappings":";;;;;AAiBA;;AASA;;AACA;;AA3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA2BO,SAASA,UAAT,CAAoBC,UAApB,EAAmDC,OAAuB,GAAG,EAA7E,EAA0F;AAC/F,QAAMC,IAAI,GAAG,8CAAwBF,UAAxB,EAAoCC,OAApC,CAAb;AACA,SAAO,CAAC,EAAEC,IAAI,IAAID,OAAO,CAACE,WAAlB,CAAR;AACD;;AAEM,eAAeC,OAAf,CACLJ,UADK,EAELC,OAAuB,GAAG,EAFrB,EAGoB;AAEzB,MAAI,CAACF,UAAU,CAACC,UAAD,EAAaC,OAAb,CAAf,EAAsC;AACpC,UAAM,IAAII,oBAAJ,CAAiB,0DAAjB,CAAN;AACD;;AAED,MAAI;AAAEC,IAAAA,IAAF;AAAQC,IAAAA;AAAR,MAAkBN,OAAtB;;AACA,MAAI,CAACK,IAAL,EAAW;AACT,UAAMJ,IAAI,GAAG,8CAAwBF,UAAxB,EAAoC;AAAEO,MAAAA;AAAF,KAApC,CAAb;AACAD,IAAAA,IAAI,GAAGJ,IAAH,aAAGA,IAAH,uBAAGA,IAAI,CAAEI,IAAb;AACD;;AAED,SAAO,cAAIN,UAAJ,EAAgB,EACrB,GAAGC,OADkB;AAErBK,IAAAA;AAFqB,GAAhB,CAAP;AAID","sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\nimport { \n OktaAuthInterface,\n IdxTransaction,\n} from '../types';\nimport { run } from './run';\nimport { AuthenticationOptions } from './authenticate';\nimport {\n EnrollPollValues as EnrollPollOptions,\n SelectEnrollmentChannelValues as SelectEnrollmentChannelOptions\n} from './remediators';\nimport { RegistrationOptions } from './register';\nimport { PasswordRecoveryOptions } from './recoverPassword';\nimport { AccountUnlockOptions } from './unlockAccount';\nimport { getSavedTransactionMeta } from './transactionMeta';\nimport { AuthSdkError } from '../errors';\n\nexport type ProceedOptions = AuthenticationOptions\n & RegistrationOptions\n & PasswordRecoveryOptions\n & AccountUnlockOptions\n & EnrollPollOptions\n & SelectEnrollmentChannelOptions\n & { step?: string };\n\nexport function canProceed(authClient: OktaAuthInterface, options: ProceedOptions = {}): boolean {\n const meta = getSavedTransactionMeta(authClient, options);\n return !!(meta || options.stateHandle);\n}\n\nexport async function proceed(\n authClient: OktaAuthInterface,\n options: ProceedOptions = {}\n): Promise<IdxTransaction> {\n\n if (!canProceed(authClient, options)) {\n throw new AuthSdkError('Unable to proceed: saved transaction could not be loaded');\n }\n\n let { flow, state } = options;\n if (!flow) {\n const meta = getSavedTransactionMeta(authClient, { state });\n flow = meta?.flow;\n }\n\n return run(authClient, { \n ...options, \n flow\n });\n}\n"],"file":"proceed.js"}
|
package/cjs/idx/remediate.js
CHANGED
|
@@ -11,16 +11,18 @@ var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-s
|
|
|
11
11
|
|
|
12
12
|
var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
|
|
13
13
|
|
|
14
|
-
var
|
|
14
|
+
var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
|
|
15
15
|
|
|
16
16
|
var _reduce = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/reduce"));
|
|
17
17
|
|
|
18
18
|
var _errors = require("../errors");
|
|
19
19
|
|
|
20
|
-
var _remediators = require("./remediators");
|
|
21
|
-
|
|
22
20
|
var _idxJs = require("./types/idx-js");
|
|
23
21
|
|
|
22
|
+
var _util = require("./util");
|
|
23
|
+
|
|
24
|
+
var _util2 = require("../util");
|
|
25
|
+
|
|
24
26
|
/*!
|
|
25
27
|
* Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.
|
|
26
28
|
* The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
|
|
@@ -45,8 +47,15 @@ function getRemediator(idxRemediations, values, options) {
|
|
|
45
47
|
const remediation = (0, _find.default)(idxRemediations).call(idxRemediations, ({
|
|
46
48
|
name
|
|
47
49
|
}) => name === options.step);
|
|
48
|
-
|
|
49
|
-
|
|
50
|
+
|
|
51
|
+
if (remediation) {
|
|
52
|
+
const T = remediation ? remediators[remediation.name] : undefined;
|
|
53
|
+
return T ? new T(remediation, values, options) : undefined;
|
|
54
|
+
} else {
|
|
55
|
+
// step was specified, but remediation was not found. This is unexpected!
|
|
56
|
+
(0, _util2.warn)(`step "${options.step}" did not match any remediations`);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
50
59
|
}
|
|
51
60
|
|
|
52
61
|
const remediatorCandidates = [];
|
|
@@ -61,7 +70,7 @@ function getRemediator(idxRemediations, values, options) {
|
|
|
61
70
|
}
|
|
62
71
|
|
|
63
72
|
const T = remediators[remediation.name];
|
|
64
|
-
remediator = new T(remediation, values);
|
|
73
|
+
remediator = new T(remediation, values, options);
|
|
65
74
|
|
|
66
75
|
if (remediator.canRemediate()) {
|
|
67
76
|
// found the remediator
|
|
@@ -76,55 +85,10 @@ function getRemediator(idxRemediations, values, options) {
|
|
|
76
85
|
return remediatorCandidates[0];
|
|
77
86
|
}
|
|
78
87
|
|
|
79
|
-
function isTerminalResponse(idxResponse) {
|
|
80
|
-
const {
|
|
81
|
-
neededToProceed,
|
|
82
|
-
interactionCode
|
|
83
|
-
} = idxResponse;
|
|
84
|
-
return !neededToProceed.length && !interactionCode;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function canSkipFn(idxResponse) {
|
|
88
|
-
return idxResponse.neededToProceed.some(({
|
|
89
|
-
name
|
|
90
|
-
}) => name === 'skip');
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
function canResendFn(idxResponse) {
|
|
94
|
-
return (0, _keys.default)(idxResponse.actions).some(actionName => (0, _includes.default)(actionName).call(actionName, 'resend'));
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
function getIdxMessages(idxResponse) {
|
|
98
|
-
var _rawIdxState$messages, _context2;
|
|
99
|
-
|
|
100
|
-
let messages = [];
|
|
101
|
-
const {
|
|
102
|
-
rawIdxState,
|
|
103
|
-
neededToProceed
|
|
104
|
-
} = idxResponse; // Handle global messages
|
|
105
|
-
|
|
106
|
-
const globalMessages = (_rawIdxState$messages = rawIdxState.messages) === null || _rawIdxState$messages === void 0 ? void 0 : (0, _map.default)(_context2 = _rawIdxState$messages.value).call(_context2, message => message);
|
|
107
|
-
|
|
108
|
-
if (globalMessages) {
|
|
109
|
-
messages = [...messages, ...globalMessages];
|
|
110
|
-
} // Handle field messages for current flow
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
for (let remediation of neededToProceed) {
|
|
114
|
-
const fieldMessages = _remediators.Remediator.getMessages(remediation);
|
|
115
|
-
|
|
116
|
-
if (fieldMessages) {
|
|
117
|
-
messages = [...messages, ...fieldMessages];
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
return messages;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
88
|
function getNextStep(remediator, idxResponse) {
|
|
125
89
|
const nextStep = remediator.getNextStep(idxResponse.context);
|
|
126
|
-
const canSkip = canSkipFn(idxResponse);
|
|
127
|
-
const canResend = canResendFn(idxResponse);
|
|
90
|
+
const canSkip = (0, _util.canSkipFn)(idxResponse);
|
|
91
|
+
const canResend = (0, _util.canResendFn)(idxResponse);
|
|
128
92
|
return { ...nextStep,
|
|
129
93
|
...(canSkip && {
|
|
130
94
|
canSkip
|
|
@@ -137,24 +101,27 @@ function getNextStep(remediator, idxResponse) {
|
|
|
137
101
|
|
|
138
102
|
function handleIdxError(e, remediator) {
|
|
139
103
|
// Handle idx messages
|
|
140
|
-
const
|
|
104
|
+
const idxResponse = (0, _idxJs.isIdxResponse)(e) ? e : null;
|
|
141
105
|
|
|
142
|
-
if (!
|
|
106
|
+
if (!idxResponse) {
|
|
143
107
|
// Thrown error terminates the interaction with idx
|
|
144
108
|
throw e;
|
|
145
109
|
}
|
|
146
110
|
|
|
147
|
-
|
|
148
|
-
const
|
|
111
|
+
idxResponse.requestDidSucceed = false;
|
|
112
|
+
const terminal = (0, _util.isTerminalResponse)(idxResponse);
|
|
113
|
+
const messages = (0, _util.getMessagesFromResponse)(idxResponse);
|
|
149
114
|
|
|
150
115
|
if (terminal) {
|
|
151
116
|
return {
|
|
117
|
+
idxResponse,
|
|
152
118
|
terminal,
|
|
153
119
|
messages
|
|
154
120
|
};
|
|
155
121
|
} else {
|
|
156
|
-
const nextStep = remediator && getNextStep(remediator,
|
|
122
|
+
const nextStep = remediator && getNextStep(remediator, idxResponse);
|
|
157
123
|
return {
|
|
124
|
+
idxResponse,
|
|
158
125
|
messages,
|
|
159
126
|
...(nextStep && {
|
|
160
127
|
nextStep
|
|
@@ -164,10 +131,10 @@ function handleIdxError(e, remediator) {
|
|
|
164
131
|
}
|
|
165
132
|
|
|
166
133
|
function getActionFromValues(values, idxResponse) {
|
|
167
|
-
var
|
|
134
|
+
var _context2;
|
|
168
135
|
|
|
169
136
|
// Currently support resend actions only
|
|
170
|
-
return (0, _find.default)(
|
|
137
|
+
return (0, _find.default)(_context2 = (0, _keys.default)(idxResponse.actions)).call(_context2, action => !!values.resend && (0, _includes.default)(action).call(action, '-resend'));
|
|
171
138
|
}
|
|
172
139
|
|
|
173
140
|
function removeActionFromValues(values) {
|
|
@@ -183,7 +150,6 @@ async function remediate(idxResponse, values, options) {
|
|
|
183
150
|
interactionCode
|
|
184
151
|
} = idxResponse;
|
|
185
152
|
const {
|
|
186
|
-
remediators,
|
|
187
153
|
flow
|
|
188
154
|
} = options; // If the response contains an interaction code, there is no need to remediate
|
|
189
155
|
|
|
@@ -194,38 +160,46 @@ async function remediate(idxResponse, values, options) {
|
|
|
194
160
|
} // Reach to terminal state
|
|
195
161
|
|
|
196
162
|
|
|
197
|
-
const terminal = isTerminalResponse(idxResponse);
|
|
198
|
-
const messages =
|
|
163
|
+
const terminal = (0, _util.isTerminalResponse)(idxResponse);
|
|
164
|
+
const messages = (0, _util.getMessagesFromResponse)(idxResponse);
|
|
199
165
|
|
|
200
166
|
if (terminal) {
|
|
201
167
|
return {
|
|
168
|
+
idxResponse,
|
|
202
169
|
terminal,
|
|
203
170
|
messages
|
|
204
171
|
};
|
|
205
|
-
}
|
|
172
|
+
}
|
|
206
173
|
|
|
174
|
+
const remediator = getRemediator(neededToProceed, values, options); // Try actions in idxResponse first
|
|
207
175
|
|
|
208
176
|
const actionFromValues = getActionFromValues(values, idxResponse);
|
|
209
|
-
const
|
|
177
|
+
const actionFromOptions = options.actions || [];
|
|
178
|
+
const actions = [...actionFromOptions, ...(actionFromValues && [actionFromValues] || [])];
|
|
210
179
|
|
|
211
180
|
if (actions) {
|
|
212
181
|
for (let action of actions) {
|
|
213
182
|
let valuesWithoutExecutedAction = removeActionFromValues(values);
|
|
183
|
+
let optionsWithoutExecutedAction = { ...options,
|
|
184
|
+
actions: (0, _filter.default)(actionFromOptions).call(actionFromOptions, entry => entry !== action)
|
|
185
|
+
};
|
|
214
186
|
|
|
215
187
|
if (typeof idxResponse.actions[action] === 'function') {
|
|
216
188
|
try {
|
|
217
189
|
idxResponse = await idxResponse.actions[action]();
|
|
190
|
+
idxResponse.requestDidSucceed = true;
|
|
218
191
|
} catch (e) {
|
|
219
|
-
return handleIdxError(e,
|
|
192
|
+
return handleIdxError(e, remediator);
|
|
220
193
|
}
|
|
221
194
|
|
|
222
195
|
if (action === 'cancel') {
|
|
223
196
|
return {
|
|
197
|
+
idxResponse,
|
|
224
198
|
canceled: true
|
|
225
199
|
};
|
|
226
200
|
}
|
|
227
201
|
|
|
228
|
-
return remediate(idxResponse, valuesWithoutExecutedAction,
|
|
202
|
+
return remediate(idxResponse, valuesWithoutExecutedAction, optionsWithoutExecutedAction); // recursive call
|
|
229
203
|
} // search for action in remediation list
|
|
230
204
|
|
|
231
205
|
|
|
@@ -236,24 +210,37 @@ async function remediate(idxResponse, values, options) {
|
|
|
236
210
|
if (remediationAction) {
|
|
237
211
|
try {
|
|
238
212
|
idxResponse = await idxResponse.proceed(action, {});
|
|
213
|
+
idxResponse.requestDidSucceed = true;
|
|
239
214
|
} catch (e) {
|
|
240
|
-
return handleIdxError(e,
|
|
215
|
+
return handleIdxError(e, remediator);
|
|
241
216
|
}
|
|
242
217
|
|
|
243
|
-
return remediate(idxResponse, values,
|
|
218
|
+
return remediate(idxResponse, values, optionsWithoutExecutedAction); // recursive call
|
|
244
219
|
}
|
|
245
220
|
}
|
|
246
221
|
}
|
|
247
222
|
|
|
248
|
-
|
|
223
|
+
if (!remediator) {
|
|
224
|
+
if (options.step) {
|
|
225
|
+
values = (0, _util.filterValuesForRemediation)(idxResponse, values); // include only requested values
|
|
226
|
+
|
|
227
|
+
try {
|
|
228
|
+
idxResponse = await idxResponse.proceed(options.step, values);
|
|
229
|
+
idxResponse.requestDidSucceed = true;
|
|
230
|
+
return {
|
|
231
|
+
idxResponse
|
|
232
|
+
};
|
|
233
|
+
} catch (e) {
|
|
234
|
+
return handleIdxError(e);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
249
237
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
238
|
+
if (flow === 'default') {
|
|
239
|
+
return {
|
|
240
|
+
idxResponse
|
|
241
|
+
};
|
|
242
|
+
}
|
|
255
243
|
|
|
256
|
-
if (!remediator) {
|
|
257
244
|
throw new _errors.AuthSdkError(`
|
|
258
245
|
No remediation can match current flow, check policy settings in your org.
|
|
259
246
|
Remediations: [${(0, _reduce.default)(neededToProceed).call(neededToProceed, (acc, curr) => acc ? acc + ' ,' + curr.name : curr.name, '')}]
|
|
@@ -263,6 +250,7 @@ async function remediate(idxResponse, values, options) {
|
|
|
263
250
|
if (messages.length) {
|
|
264
251
|
const nextStep = getNextStep(remediator, idxResponse);
|
|
265
252
|
return {
|
|
253
|
+
idxResponse,
|
|
266
254
|
nextStep,
|
|
267
255
|
messages
|
|
268
256
|
};
|
|
@@ -281,10 +269,13 @@ async function remediate(idxResponse, values, options) {
|
|
|
281
269
|
const data = remediator.getData();
|
|
282
270
|
|
|
283
271
|
try {
|
|
284
|
-
idxResponse = await idxResponse.proceed(name, data);
|
|
272
|
+
idxResponse = await idxResponse.proceed(name, data);
|
|
273
|
+
idxResponse.requestDidSucceed = true; // We may want to trim the values bag for the next remediation
|
|
285
274
|
// Let the remediator decide what the values should be (default to current values)
|
|
286
275
|
|
|
287
276
|
values = remediator.getValuesAfterProceed();
|
|
277
|
+
delete options.step; // do not re-use the step
|
|
278
|
+
|
|
288
279
|
return remediate(idxResponse, values, options); // recursive call
|
|
289
280
|
} catch (e) {
|
|
290
281
|
return handleIdxError(e, remediator);
|
package/cjs/idx/remediate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../lib/idx/remediate.ts"],"names":["getRemediator","idxRemediations","values","options","remediators","remediator","step","remediation","name","T","remediatorCandidates","isRemeditionInFlow","canRemediate","push","isTerminalResponse","idxResponse","neededToProceed","interactionCode","length","canSkipFn","some","canResendFn","actions","actionName","getIdxMessages","messages","rawIdxState","globalMessages","value","message","fieldMessages","Remediator","getMessages","getNextStep","nextStep","context","canSkip","canResend","handleIdxError","e","idxState","terminal","getActionFromValues","action","resend","removeActionFromValues","undefined","remediate","flow","actionFromValues","valuesWithoutExecutedAction","canceled","remediationAction","proceed","AuthSdkError","acc","curr","getName","data","getData","getValuesAfterProceed"],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\n/* eslint-disable max-statements, max-depth, complexity */\nimport { AuthSdkError } from '../errors';\nimport { Remediator, RemediationValues } from './remediators';\nimport { NextStep, IdxMessage, FlowIdentifier } from './types';\nimport { RemediationFlow } from './flow';\nimport { \n IdxResponse, \n IdxRemediation,\n isIdxResponse, \n} from './types/idx-js';\n\ninterface RemediationResponse {\n idxResponse?: IdxResponse;\n nextStep?: NextStep;\n messages?: IdxMessage[];\n terminal?: boolean;\n canceled?: boolean;\n}\nexport interface RemediateOptions {\n remediators?: RemediationFlow;\n actions?: string[];\n flow?: FlowIdentifier;\n step?: string;\n}\n\n// Return first match idxRemediation in allowed remediators\nexport function getRemediator(\n idxRemediations: IdxRemediation[],\n values: RemediationValues,\n options: RemediateOptions,\n): Remediator {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const remediators = options.remediators!;\n\n let remediator;\n // remediation name specified by caller - fast-track remediator lookup \n if (options.step) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const remediation = idxRemediations.find(({ name }) => name === options.step)!;\n const T = remediators[remediation.name];\n return new T(remediation, values);\n }\n\n const remediatorCandidates = [];\n for (let remediation of idxRemediations) {\n const isRemeditionInFlow = Object.keys(remediators as object).includes(remediation.name);\n if (!isRemeditionInFlow) {\n continue;\n }\n\n const T = remediators[remediation.name];\n remediator = new T(remediation, values);\n if (remediator.canRemediate()) {\n // found the remediator\n return remediator;\n }\n // remediator cannot handle the current values\n // maybe return for next step\n remediatorCandidates.push(remediator as never); \n }\n \n return remediatorCandidates[0];\n}\n\nfunction isTerminalResponse(idxResponse: IdxResponse) {\n const { neededToProceed, interactionCode } = idxResponse;\n return !neededToProceed.length && !interactionCode;\n}\n\nfunction canSkipFn(idxResponse: IdxResponse) {\n return idxResponse.neededToProceed.some(({ name }) => name === 'skip');\n}\n\nfunction canResendFn(idxResponse: IdxResponse) {\n return Object.keys(idxResponse.actions).some(actionName => actionName.includes('resend'));\n}\n\nfunction getIdxMessages(idxResponse: IdxResponse): IdxMessage[] {\n let messages = [];\n const { rawIdxState, neededToProceed } = idxResponse;\n\n // Handle global messages\n const globalMessages = rawIdxState.messages?.value.map(message => message);\n if (globalMessages) {\n messages = [...messages, ...globalMessages] as never;\n }\n\n // Handle field messages for current flow\n for (let remediation of neededToProceed) {\n const fieldMessages = Remediator.getMessages(remediation);\n if (fieldMessages) {\n messages = [...messages, ...fieldMessages] as never;\n }\n }\n\n return messages;\n}\n\nfunction getNextStep(\n remediator: Remediator, idxResponse: IdxResponse\n): NextStep {\n const nextStep = remediator.getNextStep(idxResponse.context);\n const canSkip = canSkipFn(idxResponse);\n const canResend = canResendFn(idxResponse);\n return {\n ...nextStep,\n ...(canSkip && {canSkip}),\n ...(canResend && {canResend}),\n };\n}\n\nfunction handleIdxError(e, remediator?) {\n // Handle idx messages\n const idxState = isIdxResponse(e) ? e : null;\n if (!idxState) {\n // Thrown error terminates the interaction with idx\n throw e;\n }\n const terminal = isTerminalResponse(idxState);\n const messages = getIdxMessages(idxState);\n if (terminal) {\n return { terminal, messages };\n } else {\n const nextStep = remediator && getNextStep(remediator, idxState);\n return { \n messages, \n ...(nextStep && { nextStep }) \n };\n }\n}\n\nfunction getActionFromValues(values, idxResponse: IdxResponse): string | undefined {\n // Currently support resend actions only\n return Object.keys(idxResponse.actions).find(action => !!values.resend && action.includes('-resend'));\n}\n\nfunction removeActionFromValues(values) {\n // Currently support resend actions only\n values.resend = undefined;\n return values;\n}\n\n// This function is called recursively until it reaches success or cannot be remediated\nexport async function remediate(\n idxResponse: IdxResponse,\n values: RemediationValues,\n options: RemediateOptions\n): Promise<RemediationResponse> {\n let { neededToProceed, interactionCode } = idxResponse;\n const { remediators, flow } = options;\n\n // If the response contains an interaction code, there is no need to remediate\n if (interactionCode) {\n return { idxResponse };\n }\n\n // Reach to terminal state\n const terminal = isTerminalResponse(idxResponse);\n const messages = getIdxMessages(idxResponse);\n if (terminal) {\n return { terminal, messages };\n }\n \n // Try actions in idxResponse first\n const actionFromValues = getActionFromValues(values, idxResponse);\n const actions = [\n ...options.actions || [],\n ...(actionFromValues && [actionFromValues] || []),\n ];\n if (actions) {\n for (let action of actions) {\n let valuesWithoutExecutedAction = removeActionFromValues(values);\n if (typeof idxResponse.actions[action] === 'function') {\n try {\n idxResponse = await idxResponse.actions[action]();\n } catch (e) {\n return handleIdxError(e, remediators);\n }\n if (action === 'cancel') {\n return { canceled: true };\n }\n return remediate(idxResponse, valuesWithoutExecutedAction, options); // recursive call\n }\n\n // search for action in remediation list\n const remediationAction = neededToProceed.find(({ name }) => name === action);\n if (remediationAction) {\n try {\n idxResponse = await idxResponse.proceed(action, {});\n }\n catch (e) {\n return handleIdxError(e, remediators);\n }\n\n return remediate(idxResponse, values, options); // recursive call\n }\n }\n }\n\n const remediator = getRemediator(neededToProceed, values, options);\n if (!remediator && flow === 'default') {\n return { idxResponse };\n }\n\n if (!remediator) {\n throw new AuthSdkError(`\n No remediation can match current flow, check policy settings in your org.\n Remediations: [${neededToProceed.reduce((acc, curr) => acc ? acc + ' ,' + curr.name : curr.name, '')}]\n `);\n }\n\n if (messages.length) {\n const nextStep = getNextStep(remediator, idxResponse);\n return { nextStep, messages };\n }\n\n // Return next step to the caller\n if (!remediator.canRemediate()) {\n const nextStep = getNextStep(remediator, idxResponse);\n return { idxResponse, nextStep };\n }\n\n const name = remediator.getName();\n const data = remediator.getData();\n try {\n idxResponse = await idxResponse.proceed(name, data);\n\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 return remediate(idxResponse, values, options); // recursive call\n } catch (e) {\n return handleIdxError(e, remediator);\n }\n}\n"],"file":"remediate.js"}
|
|
1
|
+
{"version":3,"sources":["../../../lib/idx/remediate.ts"],"names":["getRemediator","idxRemediations","values","options","remediators","remediator","step","remediation","name","T","undefined","remediatorCandidates","isRemeditionInFlow","canRemediate","push","getNextStep","idxResponse","nextStep","context","canSkip","canResend","handleIdxError","e","requestDidSucceed","terminal","messages","getActionFromValues","actions","action","resend","removeActionFromValues","remediate","neededToProceed","interactionCode","flow","actionFromValues","actionFromOptions","valuesWithoutExecutedAction","optionsWithoutExecutedAction","entry","canceled","remediationAction","proceed","AuthSdkError","acc","curr","length","getName","data","getData","getValuesAfterProceed"],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\n/* eslint-disable max-statements, max-depth, complexity */\nimport { AuthSdkError } from '../errors';\nimport { Remediator, RemediationValues } from './remediators';\nimport { NextStep, IdxMessage, FlowIdentifier } from './types';\nimport { RemediationFlow } from './flow';\nimport { \n IdxResponse, \n IdxRemediation,\n isIdxResponse, \n} from './types/idx-js';\nimport {\n canResendFn,\n canSkipFn,\n getMessagesFromResponse,\n isTerminalResponse,\n filterValuesForRemediation\n} from './util';\nimport { warn } from '../util';\n\ninterface RemediationResponse {\n idxResponse: IdxResponse;\n nextStep?: NextStep;\n messages?: IdxMessage[];\n terminal?: boolean;\n canceled?: boolean;\n}\nexport interface RemediateOptions {\n remediators?: RemediationFlow;\n actions?: string[];\n flow?: FlowIdentifier;\n step?: string;\n}\n\n// Return first match idxRemediation in allowed remediators\nexport function getRemediator(\n idxRemediations: IdxRemediation[],\n values: RemediationValues,\n options: RemediateOptions,\n): Remediator | undefined {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const remediators = options.remediators!;\n\n let remediator;\n // remediation name specified by caller - fast-track remediator lookup \n if (options.step) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const remediation = idxRemediations.find(({ name }) => name === options.step)!;\n if (remediation) {\n const T = remediation ? remediators[remediation.name] : undefined;\n return T ? new T(remediation, values, options) : undefined;\n } else {\n // step was specified, but remediation was not found. This is unexpected!\n warn(`step \"${options.step}\" did not match any remediations`);\n return;\n }\n }\n\n const remediatorCandidates = [];\n for (let remediation of idxRemediations) {\n const isRemeditionInFlow = Object.keys(remediators as object).includes(remediation.name);\n if (!isRemeditionInFlow) {\n continue;\n }\n\n const T = remediators[remediation.name];\n remediator = new T(remediation, values, options);\n if (remediator.canRemediate()) {\n // found the remediator\n return remediator;\n }\n // remediator cannot handle the current values\n // maybe return for next step\n remediatorCandidates.push(remediator as never); \n }\n \n return remediatorCandidates[0];\n}\n\nfunction getNextStep(\n remediator: Remediator, idxResponse: IdxResponse\n): NextStep {\n const nextStep = remediator.getNextStep(idxResponse.context);\n const canSkip = canSkipFn(idxResponse);\n const canResend = canResendFn(idxResponse);\n return {\n ...nextStep,\n ...(canSkip && {canSkip}),\n ...(canResend && {canResend}),\n };\n}\n\nfunction handleIdxError(e, remediator?: Remediator): RemediationResponse {\n // Handle idx messages\n const idxResponse = isIdxResponse(e) ? e : null;\n if (!idxResponse) {\n // Thrown error terminates the interaction with idx\n throw e;\n }\n idxResponse.requestDidSucceed = false;\n const terminal = isTerminalResponse(idxResponse);\n const messages = getMessagesFromResponse(idxResponse);\n if (terminal) {\n return { idxResponse, terminal, messages };\n } else {\n const nextStep = remediator && getNextStep(remediator, idxResponse);\n return { \n idxResponse,\n messages, \n ...(nextStep && { nextStep }) \n };\n }\n}\n\nfunction getActionFromValues(values, idxResponse: IdxResponse): string | undefined {\n // Currently support resend actions only\n return Object.keys(idxResponse.actions).find(action => !!values.resend && action.includes('-resend'));\n}\n\nfunction removeActionFromValues(values) {\n // Currently support resend actions only\n values.resend = undefined;\n return values;\n}\n\n// This function is called recursively until it reaches success or cannot be remediated\nexport async function remediate(\n idxResponse: IdxResponse,\n values: RemediationValues,\n options: RemediateOptions\n): Promise<RemediationResponse> {\n let { neededToProceed, interactionCode } = idxResponse;\n const { flow } = options;\n\n // If the response contains an interaction code, there is no need to remediate\n if (interactionCode) {\n return { idxResponse };\n }\n\n // Reach to terminal state\n const terminal = isTerminalResponse(idxResponse);\n const messages = getMessagesFromResponse(idxResponse);\n if (terminal) {\n return { idxResponse, terminal, messages };\n }\n\n const remediator = getRemediator(neededToProceed, values, options);\n \n // Try actions in idxResponse first\n const actionFromValues = getActionFromValues(values, idxResponse);\n const actionFromOptions = options.actions || [];\n const actions = [\n ...actionFromOptions,\n ...(actionFromValues && [actionFromValues] || []),\n ];\n if (actions) {\n for (let action of actions) {\n let valuesWithoutExecutedAction = removeActionFromValues(values);\n let optionsWithoutExecutedAction = { ...options, actions: actionFromOptions.filter(entry => entry !== action) };\n if (typeof idxResponse.actions[action] === 'function') {\n try {\n idxResponse = await idxResponse.actions[action]();\n idxResponse.requestDidSucceed = true;\n } catch (e) {\n return handleIdxError(e, remediator);\n }\n if (action === 'cancel') {\n return { idxResponse, canceled: true };\n }\n return remediate(idxResponse, valuesWithoutExecutedAction, optionsWithoutExecutedAction); // recursive call\n }\n\n // search for action in remediation list\n const remediationAction = neededToProceed.find(({ name }) => name === action);\n if (remediationAction) {\n try {\n idxResponse = await idxResponse.proceed(action, {});\n idxResponse.requestDidSucceed = true;\n }\n catch (e) {\n return handleIdxError(e, remediator);\n }\n\n return remediate(idxResponse, values, optionsWithoutExecutedAction); // recursive call\n }\n }\n }\n\n if (!remediator) {\n if (options.step) {\n values = filterValuesForRemediation(idxResponse, values); // include only requested values\n try {\n idxResponse = await idxResponse.proceed(options.step, values);\n idxResponse.requestDidSucceed = true;\n return { idxResponse };\n } catch(e) {\n return handleIdxError(e);\n }\n }\n if (flow === 'default') {\n return { idxResponse };\n }\n throw new AuthSdkError(`\n No remediation can match current flow, check policy settings in your org.\n Remediations: [${neededToProceed.reduce((acc, curr) => acc ? acc + ' ,' + curr.name : curr.name, '')}]\n `);\n }\n\n if (messages.length) {\n const nextStep = getNextStep(remediator, idxResponse);\n return { idxResponse, nextStep, messages };\n }\n\n // Return next step to the caller\n if (!remediator.canRemediate()) {\n const nextStep = getNextStep(remediator, idxResponse);\n return { idxResponse, nextStep };\n }\n\n const name = remediator.getName();\n const data = remediator.getData();\n try {\n idxResponse = await idxResponse.proceed(name, data);\n idxResponse.requestDidSucceed = true;\n // We may want to trim the values bag for the next remediation\n // Let the remediator decide what the values should be (default to current values)\n values = remediator.getValuesAfterProceed();\n delete options.step; // do not re-use the step\n return remediate(idxResponse, values, options); // recursive call\n } catch (e) {\n return handleIdxError(e, remediator);\n }\n}\n"],"file":"remediate.js"}
|
|
@@ -62,12 +62,16 @@ class AuthenticatorEnrollmentData extends _AuthenticatorData.AuthenticatorData {
|
|
|
62
62
|
const {
|
|
63
63
|
phoneNumber
|
|
64
64
|
} = (0, _values.default)(this);
|
|
65
|
-
|
|
65
|
+
|
|
66
|
+
if (!data && !phoneNumber) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return { ...(data && data),
|
|
66
71
|
...(phoneNumber && {
|
|
67
72
|
phoneNumber
|
|
68
73
|
})
|
|
69
74
|
};
|
|
70
|
-
return data.phoneNumber && data.methodType ? data : null;
|
|
71
75
|
}
|
|
72
76
|
|
|
73
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../lib/idx/remediators/AuthenticatorEnrollmentData.ts"],"names":["AuthenticatorEnrollmentData","AuthenticatorData","mapAuthenticator","authenticatorData","getAuthenticatorData","authenticatorFromRemediation","remediation","id","form","value","name","methodType","phoneNumber","getInputAuthenticator","type","required","label","mapAuthenticatorDataFromValues","data"],"mappings":";;;;;;;;;;;;AAcA;;AACA;;AAfA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAUO,MAAMA,2BAAN,SAA0CC,oCAA1C,CAA4D;AAKjEC,EAAAA,gBAAgB,GAAG;AAAA;;AACjB,UAAMC,iBAAiB,GAAG,KAAKC,oBAAL,EAA1B;AACA,UAAMC,4BAA4B,GAAG,2CAAgC,KAAKC,WAArC,CAArC;AACA,WAAO;AACLC,MAAAA,EAAE,EAAE,8BAAAF,4BAA4B,CAACG,IAA7B,CAAmCC,KAAnC,iBACI,CAAC;AAAEC,QAAAA;AAAF,OAAD,KAAcA,IAAI,KAAK,IAD3B,EACkCD,KAFjC;AAGLE,MAAAA,UAAU,EAAER,iBAAiB,CAAEQ,UAH1B;AAILC,MAAAA,WAAW,EAAET,iBAAiB,CAAES;AAJ3B,KAAP;AAMD;;AAEDC,EAAAA,qBAAqB,GAAG;AACtB,WAAO,CACL;AAAEH,MAAAA,IAAI,EAAE,YAAR;AAAsBI,MAAAA,IAAI,EAAE,QAA5B;AAAsCC,MAAAA,QAAQ,EAAE;AAAhD,KADK,EAEL;AAAEL,MAAAA,IAAI,EAAE,aAAR;AAAuBI,MAAAA,IAAI,EAAE,QAA7B;AAAuCC,MAAAA,QAAQ,EAAE,IAAjD;AAAuDC,MAAAA,KAAK,EAAE;AAA9D,KAFK,CAAP;AAID;;AAESC,EAAAA,8BAA8B,CAACC,IAAD,EAAQ;AAC9C;AACAA,IAAAA,IAAI,GAAG,MAAMD,8BAAN,CAAqCC,IAArC,CAAP,CAF8C,CAG9C;;AACA,UAAM;AAAEN,MAAAA;AAAF,6BAAkB,IAAlB,CAAN
|
|
1
|
+
{"version":3,"sources":["../../../../lib/idx/remediators/AuthenticatorEnrollmentData.ts"],"names":["AuthenticatorEnrollmentData","AuthenticatorData","mapAuthenticator","authenticatorData","getAuthenticatorData","authenticatorFromRemediation","remediation","id","form","value","name","methodType","phoneNumber","getInputAuthenticator","type","required","label","mapAuthenticatorDataFromValues","data"],"mappings":";;;;;;;;;;;;AAcA;;AACA;;AAfA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAUO,MAAMA,2BAAN,SAA0CC,oCAA1C,CAA4D;AAKjEC,EAAAA,gBAAgB,GAAG;AAAA;;AACjB,UAAMC,iBAAiB,GAAG,KAAKC,oBAAL,EAA1B;AACA,UAAMC,4BAA4B,GAAG,2CAAgC,KAAKC,WAArC,CAArC;AACA,WAAO;AACLC,MAAAA,EAAE,EAAE,8BAAAF,4BAA4B,CAACG,IAA7B,CAAmCC,KAAnC,iBACI,CAAC;AAAEC,QAAAA;AAAF,OAAD,KAAcA,IAAI,KAAK,IAD3B,EACkCD,KAFjC;AAGLE,MAAAA,UAAU,EAAER,iBAAiB,CAAEQ,UAH1B;AAILC,MAAAA,WAAW,EAAET,iBAAiB,CAAES;AAJ3B,KAAP;AAMD;;AAEDC,EAAAA,qBAAqB,GAAG;AACtB,WAAO,CACL;AAAEH,MAAAA,IAAI,EAAE,YAAR;AAAsBI,MAAAA,IAAI,EAAE,QAA5B;AAAsCC,MAAAA,QAAQ,EAAE;AAAhD,KADK,EAEL;AAAEL,MAAAA,IAAI,EAAE,aAAR;AAAuBI,MAAAA,IAAI,EAAE,QAA7B;AAAuCC,MAAAA,QAAQ,EAAE,IAAjD;AAAuDC,MAAAA,KAAK,EAAE;AAA9D,KAFK,CAAP;AAID;;AAESC,EAAAA,8BAA8B,CAACC,IAAD,EAAQ;AAC9C;AACAA,IAAAA,IAAI,GAAG,MAAMD,8BAAN,CAAqCC,IAArC,CAAP,CAF8C,CAG9C;;AACA,UAAM;AAAEN,MAAAA;AAAF,6BAAkB,IAAlB,CAAN;;AACA,QAAI,CAACM,IAAD,IAAS,CAACN,WAAd,EAA2B;AACzB;AACD;;AAED,WAAO,EACL,IAAIM,IAAI,IAAIA,IAAZ,CADK;AAEL,UAAIN,WAAW,IAAI;AAAEA,QAAAA;AAAF,OAAnB;AAFK,KAAP;AAID;;AApCgE;;;8BAAtDZ,2B,qBACc,+B","sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\nimport { AuthenticatorData, AuthenticatorDataValues } from './Base/AuthenticatorData';\nimport { getAuthenticatorFromRemediation } from './util';\n\nexport type AuthenticatorEnrollmentDataValues = AuthenticatorDataValues & {\n phoneNumber?: string;\n resend?: boolean; // resend is not a remediator value - revise when IdxResponse structure is updated\n}\nexport class AuthenticatorEnrollmentData extends AuthenticatorData {\n static remediationName = 'authenticator-enrollment-data';\n\n values!: AuthenticatorEnrollmentDataValues;\n\n mapAuthenticator() {\n const authenticatorData = this.getAuthenticatorData();\n const authenticatorFromRemediation = getAuthenticatorFromRemediation(this.remediation)!;\n return { \n id: authenticatorFromRemediation.form!.value\n .find(({ name }) => name === 'id')!.value,\n methodType: authenticatorData!.methodType,\n phoneNumber: authenticatorData!.phoneNumber,\n };\n }\n\n getInputAuthenticator() {\n return [\n { name: 'methodType', type: 'string', required: true },\n { name: 'phoneNumber', type: 'string', required: true, label: 'Phone Number' },\n ];\n }\n\n protected mapAuthenticatorDataFromValues(data?) {\n // get mapped authenticator from base class\n data = super.mapAuthenticatorDataFromValues(data);\n // add phoneNumber to authenticator if it exists in values\n const { phoneNumber } = this.values;\n if (!data && !phoneNumber) {\n return;\n }\n\n return { \n ...(data && data), \n ...(phoneNumber && { phoneNumber }) \n };\n }\n\n}\n"],"file":"AuthenticatorEnrollmentData.js"}
|