@okta/okta-auth-js 6.5.0 → 6.5.3

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 CHANGED
@@ -1,5 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ ## 6.5.3
4
+
5
+ - [#1224](https://github.com/okta/okta-auth-js/pull/1224) Fixes missing `relatesTo` type from `NextStep`
6
+
7
+ ## 6.5.2
8
+
9
+ ### Fixes
10
+
11
+ - [#1215](https://github.com/okta/okta-auth-js/pull/1215) Fixes polling issue in GenericRemediator (beta)
12
+
13
+ ## 6.5.1
14
+
15
+ ### Fixes
16
+
17
+ - [#1200](https://github.com/okta/okta-auth-js/pull/1200) Fixes `canRemediate` logic in GenericRemediator (beta) to handle nested fields
18
+ - [1207](https://github.com/okta/okta-auth-js/pull/1207) Fixes `canRemediate` logic in GenericRemediator (beta) to handle `options` fields
19
+
20
+ ### Other
21
+
22
+ - [#1200](https://github.com/okta/okta-auth-js/pull/1200) Adds missing fields to `Input` type in `idx` module
23
+
3
24
  ## 6.5.0
4
25
 
5
26
  ### Features
@@ -10,6 +31,17 @@
10
31
  ### Fixes
11
32
 
12
33
  - [#1189](https://github.com/okta/okta-auth-js/pull/1189) IDX: fixes `input` type indicator's field name for `username` and `authenticator`. Before the indicator was named as `key`, now it's fixed to `type` to follow input metadata with all other inputs.
34
+ ## 6.4.5
35
+
36
+ ### Fixes
37
+
38
+ - [#1240](https://github.com/okta/okta-auth-js/pull/1204) Fixes Apple SSO flow: includes `stepUp` on returned `IdxTransaction`
39
+
40
+ ## 6.4.4
41
+
42
+ ### Fixes
43
+
44
+ - [#1199](https://github.com/okta/okta-auth-js/pull/1199) Fixes webauthn enrollment/verification to accept `credentials` object
13
45
 
14
46
  ## 6.4.3
15
47
 
@@ -21,7 +21,7 @@ var _features = require("./features");
21
21
  class OktaUserAgent {
22
22
  constructor() {
23
23
  // add base sdk env
24
- this.environments = [`okta-auth-js/${"6.5.0"}`];
24
+ this.environments = [`okta-auth-js/${"6.5.3"}`];
25
25
  }
26
26
 
27
27
  addEnvironment(env) {
@@ -36,7 +36,7 @@ class OktaUserAgent {
36
36
  }
37
37
 
38
38
  getVersion() {
39
- return "6.5.0";
39
+ return "6.5.3";
40
40
  }
41
41
 
42
42
  maybeAddNodeEnvironment() {
@@ -6,24 +6,29 @@ var _Authenticator = require("./Authenticator");
6
6
 
7
7
  class WebauthnEnrollment extends _Authenticator.Authenticator {
8
8
  canVerify(values) {
9
+ const {
10
+ credentials
11
+ } = values;
12
+ const obj = credentials || values;
9
13
  const {
10
14
  clientData,
11
15
  attestation
12
- } = values;
16
+ } = obj;
13
17
  return !!(clientData && attestation);
14
18
  }
15
19
 
16
20
  mapCredentials(values) {
17
21
  const {
22
+ credentials,
18
23
  clientData,
19
24
  attestation
20
25
  } = values;
21
26
 
22
- if (!clientData && !attestation) {
27
+ if (!credentials && !clientData && !attestation) {
23
28
  return;
24
29
  }
25
30
 
26
- return {
31
+ return credentials || {
27
32
  clientData,
28
33
  attestation
29
34
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../lib/idx/authenticator/WebauthnEnrollment.ts"],"names":["WebauthnEnrollment","Authenticator","canVerify","values","clientData","attestation","mapCredentials","getInputs","name","type","required","visible","label"],"mappings":";;;;AAAA;;AAOO,MAAMA,kBAAN,SAAiCC,4BAAjC,CAAqE;AAC1EC,EAAAA,SAAS,CAACC,MAAD,EAA+B;AACtC,UAAM;AAAEC,MAAAA,UAAF;AAAcC,MAAAA;AAAd,QAA8BF,MAApC;AACA,WAAO,CAAC,EAAEC,UAAU,IAAIC,WAAhB,CAAR;AACD;;AAEDC,EAAAA,cAAc,CAACH,MAAD,EAAwD;AACpE,UAAM;AAAEC,MAAAA,UAAF;AAAcC,MAAAA;AAAd,QAA8BF,MAApC;;AACA,QAAI,CAACC,UAAD,IAAe,CAACC,WAApB,EAAiC;AAC/B;AACD;;AACD,WAAO;AACLD,MAAAA,UADK;AAELC,MAAAA;AAFK,KAAP;AAID;;AAEDE,EAAAA,SAAS,GAAG;AACV,WAAO,CACL;AAAEC,MAAAA,IAAI,EAAE,YAAR;AAAsBC,MAAAA,IAAI,EAAE,QAA5B;AAAsCC,MAAAA,QAAQ,EAAE,IAAhD;AAAsDC,MAAAA,OAAO,EAAE,KAA/D;AAAsEC,MAAAA,KAAK,EAAE;AAA7E,KADK,EAEL;AAAEJ,MAAAA,IAAI,EAAE,aAAR;AAAuBC,MAAAA,IAAI,EAAE,QAA7B;AAAuCC,MAAAA,QAAQ,EAAE,IAAjD;AAAuDC,MAAAA,OAAO,EAAE,KAAhE;AAAuEC,MAAAA,KAAK,EAAE;AAA9E,KAFK,CAAP;AAID;;AAtByE","sourcesContent":["import { Authenticator, Credentials } from './Authenticator';\n\nexport interface WebauthnEnrollValues {\n clientData?: string;\n attestation?: string;\n}\n\nexport class WebauthnEnrollment extends Authenticator<WebauthnEnrollValues> {\n canVerify(values: WebauthnEnrollValues) {\n const { clientData, attestation } = values;\n return !!(clientData && attestation);\n }\n\n mapCredentials(values: WebauthnEnrollValues): Credentials | undefined {\n const { clientData, attestation } = values;\n if (!clientData && !attestation) {\n return;\n }\n return {\n clientData,\n attestation\n };\n }\n\n getInputs() {\n return [\n { name: 'clientData', type: 'string', required: true, visible: false, label: 'Client Data' },\n { name: 'attestation', type: 'string', required: true, visible: false, label: 'Attestation' },\n ];\n }\n}\n"],"file":"WebauthnEnrollment.js"}
1
+ {"version":3,"sources":["../../../../lib/idx/authenticator/WebauthnEnrollment.ts"],"names":["WebauthnEnrollment","Authenticator","canVerify","values","credentials","obj","clientData","attestation","mapCredentials","getInputs","name","type","required","visible","label"],"mappings":";;;;AAAA;;AAQO,MAAMA,kBAAN,SAAiCC,4BAAjC,CAAqE;AAC1EC,EAAAA,SAAS,CAACC,MAAD,EAA+B;AACtC,UAAM;AAAEC,MAAAA;AAAF,QAAkBD,MAAxB;AACA,UAAME,GAAG,GAAGD,WAAW,IAAID,MAA3B;AACA,UAAM;AAAEG,MAAAA,UAAF;AAAcC,MAAAA;AAAd,QAA8BF,GAApC;AACA,WAAO,CAAC,EAAEC,UAAU,IAAIC,WAAhB,CAAR;AACD;;AAEDC,EAAAA,cAAc,CAACL,MAAD,EAAwD;AACpE,UAAM;AAAEC,MAAAA,WAAF;AAAeE,MAAAA,UAAf;AAA2BC,MAAAA;AAA3B,QAA2CJ,MAAjD;;AACA,QAAI,CAACC,WAAD,IAAgB,CAACE,UAAjB,IAA+B,CAACC,WAApC,EAAiD;AAC/C;AACD;;AACD,WAAOH,WAAW,IAAK;AACrBE,MAAAA,UADqB;AAErBC,MAAAA;AAFqB,KAAvB;AAID;;AAEDE,EAAAA,SAAS,GAAG;AACV,WAAO,CACL;AAAEC,MAAAA,IAAI,EAAE,YAAR;AAAsBC,MAAAA,IAAI,EAAE,QAA5B;AAAsCC,MAAAA,QAAQ,EAAE,IAAhD;AAAsDC,MAAAA,OAAO,EAAE,KAA/D;AAAsEC,MAAAA,KAAK,EAAE;AAA7E,KADK,EAEL;AAAEJ,MAAAA,IAAI,EAAE,aAAR;AAAuBC,MAAAA,IAAI,EAAE,QAA7B;AAAuCC,MAAAA,QAAQ,EAAE,IAAjD;AAAuDC,MAAAA,OAAO,EAAE,KAAhE;AAAuEC,MAAAA,KAAK,EAAE;AAA9E,KAFK,CAAP;AAID;;AAxByE","sourcesContent":["import { Authenticator, Credentials } from './Authenticator';\n\nexport interface WebauthnEnrollValues {\n clientData?: string;\n attestation?: string;\n credentials?: Credentials;\n}\n\nexport class WebauthnEnrollment extends Authenticator<WebauthnEnrollValues> {\n canVerify(values: WebauthnEnrollValues) {\n const { credentials } = values;\n const obj = credentials || values;\n const { clientData, attestation } = obj;\n return !!(clientData && attestation);\n }\n\n mapCredentials(values: WebauthnEnrollValues): Credentials | undefined {\n const { credentials, clientData, attestation } = values;\n if (!credentials && !clientData && !attestation) {\n return;\n }\n return credentials || ({\n clientData,\n attestation\n });\n }\n\n getInputs() {\n return [\n { name: 'clientData', type: 'string', required: true, visible: false, label: 'Client Data' },\n { name: 'attestation', type: 'string', required: true, visible: false, label: 'Attestation' },\n ];\n }\n}\n"],"file":"WebauthnEnrollment.js"}
@@ -6,26 +6,31 @@ var _Authenticator = require("./Authenticator");
6
6
 
7
7
  class WebauthnVerification extends _Authenticator.Authenticator {
8
8
  canVerify(values) {
9
+ const {
10
+ credentials
11
+ } = values;
12
+ const obj = credentials || values;
9
13
  const {
10
14
  clientData,
11
15
  authenticatorData,
12
16
  signatureData
13
- } = values;
17
+ } = obj;
14
18
  return !!(clientData && authenticatorData && signatureData);
15
19
  }
16
20
 
17
21
  mapCredentials(values) {
18
22
  const {
23
+ credentials,
19
24
  authenticatorData,
20
25
  clientData,
21
26
  signatureData
22
27
  } = values;
23
28
 
24
- if (!authenticatorData && !clientData && !signatureData) {
29
+ if (!credentials && !authenticatorData && !clientData && !signatureData) {
25
30
  return;
26
31
  }
27
32
 
28
- return {
33
+ return credentials || {
29
34
  authenticatorData,
30
35
  clientData,
31
36
  signatureData
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../lib/idx/authenticator/WebauthnVerification.ts"],"names":["WebauthnVerification","Authenticator","canVerify","values","clientData","authenticatorData","signatureData","mapCredentials","getInputs","name","type","label","required","visible"],"mappings":";;;;AAAA;;AAQO,MAAMA,oBAAN,SAAmCC,4BAAnC,CAA6E;AAClFC,EAAAA,SAAS,CAACC,MAAD,EAAqC;AAC5C,UAAM;AAAEC,MAAAA,UAAF;AAAcC,MAAAA,iBAAd;AAAiCC,MAAAA;AAAjC,QAAmDH,MAAzD;AACA,WAAO,CAAC,EAAEC,UAAU,IAAIC,iBAAd,IAAmCC,aAArC,CAAR;AACD;;AAEDC,EAAAA,cAAc,CAACJ,MAAD,EAA8D;AAC1E,UAAM;AAAEE,MAAAA,iBAAF;AAAqBD,MAAAA,UAArB;AAAiCE,MAAAA;AAAjC,QAAmDH,MAAzD;;AACA,QAAI,CAACE,iBAAD,IAAsB,CAACD,UAAvB,IAAqC,CAACE,aAA1C,EAAyD;AACvD;AACD;;AACD,WAAO;AACLD,MAAAA,iBADK;AAELD,MAAAA,UAFK;AAGLE,MAAAA;AAHK,KAAP;AAKD;;AAEDE,EAAAA,SAAS,GAAG;AACV,WAAO,CACL;AAAEC,MAAAA,IAAI,EAAE,mBAAR;AAA6BC,MAAAA,IAAI,EAAE,QAAnC;AAA6CC,MAAAA,KAAK,EAAE,oBAApD;AAA0EC,MAAAA,QAAQ,EAAE,IAApF;AAA0FC,MAAAA,OAAO,EAAE;AAAnG,KADK,EAEL;AAAEJ,MAAAA,IAAI,EAAE,YAAR;AAAsBC,MAAAA,IAAI,EAAE,QAA5B;AAAsCC,MAAAA,KAAK,EAAE,aAA7C;AAA4DC,MAAAA,QAAQ,EAAE,IAAtE;AAA4EC,MAAAA,OAAO,EAAE;AAArF,KAFK,EAGL;AAAEJ,MAAAA,IAAI,EAAE,eAAR;AAAyBC,MAAAA,IAAI,EAAE,QAA/B;AAAyCC,MAAAA,KAAK,EAAE,gBAAhD;AAAkEC,MAAAA,QAAQ,EAAE,IAA5E;AAAkFC,MAAAA,OAAO,EAAE;AAA3F,KAHK,CAAP;AAKD;;AAxBiF","sourcesContent":["import { Authenticator, Credentials } from './Authenticator';\n\nexport interface WebauthnVerificationValues {\n clientData?: string;\n authenticatorData?: string;\n signatureData?: string;\n}\n\nexport class WebauthnVerification extends Authenticator<WebauthnVerificationValues> {\n canVerify(values: WebauthnVerificationValues) {\n const { clientData, authenticatorData, signatureData } = values;\n return !!(clientData && authenticatorData && signatureData);\n }\n\n mapCredentials(values: WebauthnVerificationValues): Credentials | undefined {\n const { authenticatorData, clientData, signatureData } = values;\n if (!authenticatorData && !clientData && !signatureData) {\n return;\n }\n return {\n authenticatorData,\n clientData,\n signatureData\n };\n }\n\n getInputs() {\n return [\n { name: 'authenticatorData', type: 'string', label: 'Authenticator Data', required: true, visible: false },\n { name: 'clientData', type: 'string', label: 'Client Data', required: true, visible: false },\n { name: 'signatureData', type: 'string', label: 'Signature Data', required: true, visible: false },\n ];\n }\n}\n"],"file":"WebauthnVerification.js"}
1
+ {"version":3,"sources":["../../../../lib/idx/authenticator/WebauthnVerification.ts"],"names":["WebauthnVerification","Authenticator","canVerify","values","credentials","obj","clientData","authenticatorData","signatureData","mapCredentials","getInputs","name","type","label","required","visible"],"mappings":";;;;AAAA;;AASO,MAAMA,oBAAN,SAAmCC,4BAAnC,CAA6E;AAClFC,EAAAA,SAAS,CAACC,MAAD,EAAqC;AAC5C,UAAM;AAAEC,MAAAA;AAAF,QAAkBD,MAAxB;AACA,UAAME,GAAG,GAAGD,WAAW,IAAID,MAA3B;AACA,UAAM;AAAEG,MAAAA,UAAF;AAAcC,MAAAA,iBAAd;AAAiCC,MAAAA;AAAjC,QAAmDH,GAAzD;AACA,WAAO,CAAC,EAAEC,UAAU,IAAIC,iBAAd,IAAmCC,aAArC,CAAR;AACD;;AAEDC,EAAAA,cAAc,CAACN,MAAD,EAA8D;AAC1E,UAAM;AAAEC,MAAAA,WAAF;AAAeG,MAAAA,iBAAf;AAAkCD,MAAAA,UAAlC;AAA8CE,MAAAA;AAA9C,QAAgEL,MAAtE;;AACA,QAAI,CAACC,WAAD,IAAgB,CAACG,iBAAjB,IAAsC,CAACD,UAAvC,IAAqD,CAACE,aAA1D,EAAyE;AACvE;AACD;;AACD,WAAOJ,WAAW,IAAK;AACrBG,MAAAA,iBADqB;AAErBD,MAAAA,UAFqB;AAGrBE,MAAAA;AAHqB,KAAvB;AAKD;;AAEDE,EAAAA,SAAS,GAAG;AACV,WAAO,CACL;AAAEC,MAAAA,IAAI,EAAE,mBAAR;AAA6BC,MAAAA,IAAI,EAAE,QAAnC;AAA6CC,MAAAA,KAAK,EAAE,oBAApD;AAA0EC,MAAAA,QAAQ,EAAE,IAApF;AAA0FC,MAAAA,OAAO,EAAE;AAAnG,KADK,EAEL;AAAEJ,MAAAA,IAAI,EAAE,YAAR;AAAsBC,MAAAA,IAAI,EAAE,QAA5B;AAAsCC,MAAAA,KAAK,EAAE,aAA7C;AAA4DC,MAAAA,QAAQ,EAAE,IAAtE;AAA4EC,MAAAA,OAAO,EAAE;AAArF,KAFK,EAGL;AAAEJ,MAAAA,IAAI,EAAE,eAAR;AAAyBC,MAAAA,IAAI,EAAE,QAA/B;AAAyCC,MAAAA,KAAK,EAAE,gBAAhD;AAAkEC,MAAAA,QAAQ,EAAE,IAA5E;AAAkFC,MAAAA,OAAO,EAAE;AAA3F,KAHK,CAAP;AAKD;;AA1BiF","sourcesContent":["import { Authenticator, Credentials } from './Authenticator';\n\nexport interface WebauthnVerificationValues {\n clientData?: string;\n authenticatorData?: string;\n signatureData?: string;\n credentials?: Credentials;\n}\n\nexport class WebauthnVerification extends Authenticator<WebauthnVerificationValues> {\n canVerify(values: WebauthnVerificationValues) {\n const { credentials } = values;\n const obj = credentials || values;\n const { clientData, authenticatorData, signatureData } = obj;\n return !!(clientData && authenticatorData && signatureData);\n }\n\n mapCredentials(values: WebauthnVerificationValues): Credentials | undefined {\n const { credentials, authenticatorData, clientData, signatureData } = values;\n if (!credentials && !authenticatorData && !clientData && !signatureData) {\n return;\n }\n return credentials || ({\n authenticatorData,\n clientData,\n signatureData\n });\n }\n\n getInputs() {\n return [\n { name: 'authenticatorData', type: 'string', label: 'Authenticator Data', required: true, visible: false },\n { name: 'clientData', type: 'string', label: 'Client Data', required: true, visible: false },\n { name: 'signatureData', type: 'string', label: 'Signature Data', required: true, visible: false },\n ];\n }\n}\n"],"file":"WebauthnVerification.js"}
@@ -199,6 +199,19 @@ async function remediate(authClient, idxResponse, values, options) {
199
199
  options = { ...options,
200
200
  step: undefined
201
201
  }; // do not re-use the step
202
+ // generic remediator should not auto proceed in pending status
203
+ // return nextStep directly
204
+
205
+ if (options.useGenericRemediator && !idxResponse.interactionCode) {
206
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
207
+ const gr = (0, _util.getRemediator)(idxResponse.neededToProceed, values, options);
208
+ const nextStep = (0, _util.getNextStep)(authClient, gr, idxResponse);
209
+ return {
210
+ idxResponse,
211
+ nextStep,
212
+ messages: messages.length ? messages : undefined
213
+ };
214
+ }
202
215
 
203
216
  return remediate(authClient, idxResponse, values, options); // recursive call
204
217
  } catch (e) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../lib/idx/remediate.ts"],"names":["getActionFromValues","values","idxResponse","actions","action","resend","removeActionFromValues","undefined","removeActionFromOptions","options","actionName","entry","name","remediate","authClient","neededToProceed","interactionCode","flow","remediator","actionFromValues","actionFromOptions","params","valuesWithoutExecutedAction","optionsWithoutExecutedAction","requestDidSucceed","e","canceled","remediationAction","proceed","terminal","messages","step","AuthSdkError","acc","curr","canRemediate","nextStep","length","getName","data","getData","getValuesAfterProceed"],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\n/* eslint-disable max-statements, max-depth, complexity */\nimport { OktaAuthInterface } from '../types';\nimport { AuthSdkError } from '../errors';\nimport { RemediationValues } from './remediators';\nimport { RemediateOptions, RemediationResponse } from './types';\nimport { \n IdxResponse,\n IdxActionParams, \n} from './types/idx-js';\nimport {\n getMessagesFromResponse,\n isTerminalResponse,\n filterValuesForRemediation,\n getRemediator,\n getNextStep,\n handleIdxError\n} from './util';\n\nexport interface RemediateActionWithOptionalParams {\n name: string;\n params?: IdxActionParams;\n}\n\nexport type RemediateAction = string | RemediateActionWithOptionalParams;\n\n\nfunction getActionFromValues(values: RemediationValues, idxResponse: IdxResponse): string | undefined {\n // Currently support resend actions only\n return Object.keys(idxResponse.actions).find(action => !!values.resend && action.includes('-resend'));\n}\n\nfunction removeActionFromValues(values: RemediationValues): RemediationValues {\n // Currently support resend actions only\n return {\n ...values,\n resend: undefined\n };\n}\n\nfunction removeActionFromOptions(options: RemediateOptions, actionName: string): RemediateOptions {\n let actions = options.actions || [];\n actions = actions.filter(entry => {\n if (typeof entry === 'string') {\n return entry !== actionName;\n }\n return entry.name !== actionName;\n });\n\n return { ...options, actions };\n}\n\n// This function is called recursively until it reaches success or cannot be remediated\nexport async function remediate(\n authClient: OktaAuthInterface,\n idxResponse: IdxResponse,\n values: RemediationValues,\n options: RemediateOptions\n): Promise<RemediationResponse> {\n let { neededToProceed, interactionCode } = idxResponse;\n const { flow } = options;\n\n // If the response contains an interaction code, there is no need to remediate\n if (interactionCode) {\n return { idxResponse };\n }\n\n const remediator = getRemediator(neededToProceed, values, options);\n\n // Try actions in idxResponse first\n const actionFromValues = getActionFromValues(values, idxResponse);\n const actionFromOptions = options.actions || [];\n const actions = [\n ...actionFromOptions,\n ...(actionFromValues && [actionFromValues] || []),\n ];\n if (actions) {\n for (let action of actions) {\n // Action can either be specified as a string, or as an object with name and optional params\n let params: IdxActionParams = {};\n if (typeof action !== 'string') {\n params = action.params || {};\n action = action.name;\n }\n let valuesWithoutExecutedAction = removeActionFromValues(values);\n let optionsWithoutExecutedAction = removeActionFromOptions(options, action);\n\n if (typeof idxResponse.actions[action] === 'function') {\n try {\n idxResponse = await idxResponse.actions[action](params);\n idxResponse = { ...idxResponse, requestDidSucceed: true };\n } catch (e) {\n return handleIdxError(authClient, e, remediator);\n }\n if (action === 'cancel') {\n return { idxResponse, canceled: true };\n }\n return remediate(\n authClient, \n idxResponse, \n valuesWithoutExecutedAction, \n optionsWithoutExecutedAction\n ); // recursive call\n }\n\n // search for action in remediation list\n const remediationAction = neededToProceed.find(({ name }) => name === action);\n if (remediationAction) {\n try {\n idxResponse = await idxResponse.proceed(action, params);\n idxResponse = { ...idxResponse, requestDidSucceed: true };\n }\n catch (e) {\n return handleIdxError(authClient, e, remediator);\n }\n\n return remediate(authClient, idxResponse, values, optionsWithoutExecutedAction); // recursive call\n }\n }\n }\n\n // Do not attempt to remediate if response is in terminal state\n const terminal = isTerminalResponse(idxResponse);\n const messages = getMessagesFromResponse(idxResponse);\n if (terminal) {\n return { idxResponse, terminal, messages };\n }\n\n if (!remediator) {\n if (options.step) {\n values = filterValuesForRemediation(idxResponse, options.step, values); // include only requested values\n try {\n idxResponse = await idxResponse.proceed(options.step, values);\n idxResponse = { ...idxResponse, requestDidSucceed: true };\n return { idxResponse };\n } catch(e) {\n return handleIdxError(authClient, e);\n }\n }\n if (flow === 'default') {\n return { idxResponse };\n }\n throw new AuthSdkError(`\n No remediation can match current flow, check policy settings in your org.\n Remediations: [${neededToProceed.reduce((acc, curr) => acc ? acc + ' ,' + curr.name : curr.name, '')}]\n `);\n }\n\n // Return next step to the caller\n if (!remediator.canRemediate()) {\n const nextStep = getNextStep(authClient, remediator, idxResponse);\n return {\n idxResponse,\n nextStep,\n messages: messages.length ? messages: undefined\n };\n }\n\n const name = remediator.getName();\n const data = remediator.getData();\n try {\n idxResponse = await idxResponse.proceed(name, data);\n idxResponse = { ...idxResponse, requestDidSucceed: true };\n // We may want to trim the values bag for the next remediation\n // Let the remediator decide what the values should be (default to current values)\n values = remediator.getValuesAfterProceed();\n options = { ...options, step: undefined }; // do not re-use the step\n return remediate(authClient, idxResponse, values, options); // recursive call\n } catch (e) {\n return handleIdxError(authClient, e, remediator);\n }\n}\n"],"file":"remediate.js"}
1
+ {"version":3,"sources":["../../../lib/idx/remediate.ts"],"names":["getActionFromValues","values","idxResponse","actions","action","resend","removeActionFromValues","undefined","removeActionFromOptions","options","actionName","entry","name","remediate","authClient","neededToProceed","interactionCode","flow","remediator","actionFromValues","actionFromOptions","params","valuesWithoutExecutedAction","optionsWithoutExecutedAction","requestDidSucceed","e","canceled","remediationAction","proceed","terminal","messages","step","AuthSdkError","acc","curr","canRemediate","nextStep","length","getName","data","getData","getValuesAfterProceed","useGenericRemediator","gr"],"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 { OktaAuthInterface } from '../types';\nimport { AuthSdkError } from '../errors';\nimport { RemediationValues } from './remediators';\nimport { RemediateOptions, RemediationResponse } from './types';\nimport { \n IdxResponse,\n IdxActionParams, \n} from './types/idx-js';\nimport {\n getMessagesFromResponse,\n isTerminalResponse,\n filterValuesForRemediation,\n getRemediator,\n getNextStep,\n handleIdxError\n} from './util';\n\nexport interface RemediateActionWithOptionalParams {\n name: string;\n params?: IdxActionParams;\n}\n\nexport type RemediateAction = string | RemediateActionWithOptionalParams;\n\n\nfunction getActionFromValues(values: RemediationValues, idxResponse: IdxResponse): string | undefined {\n // Currently support resend actions only\n return Object.keys(idxResponse.actions).find(action => !!values.resend && action.includes('-resend'));\n}\n\nfunction removeActionFromValues(values: RemediationValues): RemediationValues {\n // Currently support resend actions only\n return {\n ...values,\n resend: undefined\n };\n}\n\nfunction removeActionFromOptions(options: RemediateOptions, actionName: string): RemediateOptions {\n let actions = options.actions || [];\n actions = actions.filter(entry => {\n if (typeof entry === 'string') {\n return entry !== actionName;\n }\n return entry.name !== actionName;\n });\n\n return { ...options, actions };\n}\n\n// This function is called recursively until it reaches success or cannot be remediated\nexport async function remediate(\n authClient: OktaAuthInterface,\n idxResponse: IdxResponse,\n values: RemediationValues,\n options: RemediateOptions\n): Promise<RemediationResponse> {\n let { neededToProceed, interactionCode } = idxResponse;\n const { flow } = options;\n\n // If the response contains an interaction code, there is no need to remediate\n if (interactionCode) {\n return { idxResponse };\n }\n\n const remediator = getRemediator(neededToProceed, values, options);\n\n // Try actions in idxResponse first\n const actionFromValues = getActionFromValues(values, idxResponse);\n const actionFromOptions = options.actions || [];\n const actions = [\n ...actionFromOptions,\n ...(actionFromValues && [actionFromValues] || []),\n ];\n if (actions) {\n for (let action of actions) {\n // Action can either be specified as a string, or as an object with name and optional params\n let params: IdxActionParams = {};\n if (typeof action !== 'string') {\n params = action.params || {};\n action = action.name;\n }\n let valuesWithoutExecutedAction = removeActionFromValues(values);\n let optionsWithoutExecutedAction = removeActionFromOptions(options, action);\n\n if (typeof idxResponse.actions[action] === 'function') {\n try {\n idxResponse = await idxResponse.actions[action](params);\n idxResponse = { ...idxResponse, requestDidSucceed: true };\n } catch (e) {\n return handleIdxError(authClient, e, remediator);\n }\n if (action === 'cancel') {\n return { idxResponse, canceled: true };\n }\n return remediate(\n authClient, \n idxResponse, \n valuesWithoutExecutedAction, \n optionsWithoutExecutedAction\n ); // recursive call\n }\n\n // search for action in remediation list\n const remediationAction = neededToProceed.find(({ name }) => name === action);\n if (remediationAction) {\n try {\n idxResponse = await idxResponse.proceed(action, params);\n idxResponse = { ...idxResponse, requestDidSucceed: true };\n }\n catch (e) {\n return handleIdxError(authClient, e, remediator);\n }\n\n return remediate(authClient, idxResponse, values, optionsWithoutExecutedAction); // recursive call\n }\n }\n }\n\n // Do not attempt to remediate if response is in terminal state\n const terminal = isTerminalResponse(idxResponse);\n const messages = getMessagesFromResponse(idxResponse);\n if (terminal) {\n return { idxResponse, terminal, messages };\n }\n\n if (!remediator) {\n if (options.step) {\n values = filterValuesForRemediation(idxResponse, options.step, values); // include only requested values\n try {\n idxResponse = await idxResponse.proceed(options.step, values);\n idxResponse = { ...idxResponse, requestDidSucceed: true };\n return { idxResponse };\n } catch(e) {\n return handleIdxError(authClient, e);\n }\n }\n if (flow === 'default') {\n return { idxResponse };\n }\n throw new AuthSdkError(`\n No remediation can match current flow, check policy settings in your org.\n Remediations: [${neededToProceed.reduce((acc, curr) => acc ? acc + ' ,' + curr.name : curr.name, '')}]\n `);\n }\n\n // Return next step to the caller\n if (!remediator.canRemediate()) {\n const nextStep = getNextStep(authClient, remediator, idxResponse);\n return {\n idxResponse,\n nextStep,\n messages: messages.length ? messages: undefined\n };\n }\n\n const name = remediator.getName();\n const data = remediator.getData();\n try {\n idxResponse = await idxResponse.proceed(name, data);\n idxResponse = { ...idxResponse, requestDidSucceed: true };\n // We may want to trim the values bag for the next remediation\n // Let the remediator decide what the values should be (default to current values)\n values = remediator.getValuesAfterProceed();\n options = { ...options, step: undefined }; // do not re-use the step\n\n // generic remediator should not auto proceed in pending status\n // return nextStep directly\n if (options.useGenericRemediator && !idxResponse.interactionCode) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const gr = getRemediator(idxResponse.neededToProceed, values, options)!;\n const nextStep = getNextStep(authClient, gr, idxResponse);\n return {\n idxResponse,\n nextStep,\n messages: messages.length ? messages: undefined\n };\n }\n \n return remediate(authClient, idxResponse, values, options); // recursive call\n } catch (e) {\n return handleIdxError(authClient, e, remediator);\n }\n}\n"],"file":"remediate.js"}
@@ -15,6 +15,14 @@ var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-s
15
15
 
16
16
  var _reduce = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/reduce"));
17
17
 
18
+ var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
19
+
20
+ var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
21
+
22
+ var _stringify = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/json/stringify"));
23
+
24
+ var _errors = require("../../../errors");
25
+
18
26
  /* eslint-disable complexity */
19
27
  function unwrapFormValue(remediation) {
20
28
  const res = {};
@@ -58,22 +66,74 @@ function hasValidInputValue(input, values) {
58
66
  const {
59
67
  name,
60
68
  value,
69
+ type,
70
+ options,
61
71
  required
62
72
  } = input;
63
- const isRequired = required || requiredTracker // TODO: confirm with backend why `required` meta is missing for authenticator remediation
64
- || name === 'authenticator';
65
-
66
- if (!isRequired) {
67
- return true;
68
- }
73
+ const isRequired = required || requiredTracker; // handle nested value - all required fields should be avaiable in values
69
74
 
70
75
  if (Array.isArray(value)) {
71
76
  return (0, _reduce.default)(value).call(value, (acc, item) => {
72
- return acc && fn(item, values[name], isRequired);
77
+ return acc && fn(item, values[name], isRequired); // recursive call
73
78
  }, true);
74
- } else {
75
- return !!(values && values[name]);
79
+ } // handle options field
80
+ // 1. object type options - check if each object field is required and value can be found from the selectedOption
81
+ // 2. primitive options - required field is avaiable from top level
82
+
83
+
84
+ if (options) {
85
+ // object type options
86
+ if (type === 'object') {
87
+ var _context4, _context5;
88
+
89
+ const selectedOption = values[name];
90
+
91
+ if (!(selectedOption !== null && selectedOption !== void 0 && selectedOption.id)) {
92
+ return false;
93
+ }
94
+
95
+ const optionSchema = (0, _find.default)(options).call(options, option => {
96
+ var _context3;
97
+
98
+ const idSchema = (0, _find.default)(_context3 = option.value).call(_context3, ({
99
+ name
100
+ }) => name === 'id');
101
+ return idSchema.value === selectedOption.id;
102
+ });
103
+
104
+ if (!optionSchema) {
105
+ return false;
106
+ }
107
+
108
+ return (0, _reduce.default)(_context4 = (0, _filter.default)(_context5 = optionSchema.value).call(_context5, ({
109
+ required
110
+ }) => !!required)).call(_context4, (acc, {
111
+ name
112
+ }) => {
113
+ return acc && !!selectedOption[name];
114
+ }, true);
115
+ } // primitive options, not required - always valid
116
+
117
+
118
+ if (required === false) {
119
+ return true;
120
+ } // primitive options, required - check if value is available
121
+
122
+
123
+ if (required === true) {
124
+ return !!values[name];
125
+ } // unknown options, throw
126
+
127
+
128
+ throw new _errors.AuthSdkError(`Unknown options type, ${(0, _stringify.default)(input)}`);
129
+ } // base case
130
+
131
+
132
+ if (!isRequired) {
133
+ return true;
76
134
  }
135
+
136
+ return !!(values && values[name]);
77
137
  };
78
138
 
79
139
  return fn(input, values, false);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../lib/idx/remediators/GenericRemediator/util.ts"],"names":["unwrapFormValue","remediation","res","key","value","Array","isArray","formKeys","length","unwrappedForm","forEach","hasValidInputValue","input","values","fn","requiredTracker","name","required","isRequired","acc","item"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAGO,SAASA,eAAT,CAAyBC,WAAzB,EAA6C;AAClD,QAAMC,GAAG,GAAG,EAAZ;;AACA,OAAK,MAAM,CAACC,GAAD,EAAMC,KAAN,CAAX,IAA2B,sBAAeH,WAAf,CAA3B,EAAwD;AACtD,QAAIG,KAAK,KAAK,IAAV,IAAkB,OAAOA,KAAP,KAAiB,WAAvC,EAAoD;AAClD;AACD;;AAED,QAAIC,KAAK,CAACC,OAAN,CAAcF,KAAd,CAAJ,EAA0B;AACxBF,MAAAA,GAAG,CAACC,GAAD,CAAH,GAAW,kBAAAC,KAAK,MAAL,CAAAA,KAAK,EAAKJ,eAAL,CAAhB;AACD,KAFD,MAEO,IAAI,OAAOI,KAAP,KAAiB,QAArB,EAA+B;AAAA;;AACpC,YAAMG,QAAQ,GAAG,mBAAYH,KAAZ,CAAjB,CADoC,CAEpC;AACA;;AACA,UAAI,mCAAC,OAAD,EAAU,MAAV,kBAA2BD,GAA3B,KACCI,QAAQ,CAACC,MAAT,KAAoB,CADrB,IAEC,oCAAC,OAAD,EAAU,MAAV,mBAA2BD,QAAQ,CAAC,CAAD,CAAnC,CAFL,EAGE;AACA;AACA,cAAME,aAAa,GAAGT,eAAe,CAACI,KAAD,CAArC;AACA,8BAAeK,aAAf,EAA8BC,OAA9B,CAAsC,CAAC,CAACP,GAAD,EAAMC,KAAN,CAAD,KAAkB;AACtDF,UAAAA,GAAG,CAACC,GAAD,CAAH,GAAWC,KAAX;AACD,SAFD;AAGD,OATD,MASO;AACL;AACAF,QAAAA,GAAG,CAACC,GAAD,CAAH,GAAWH,eAAe,CAACI,KAAD,CAA1B;AACD;AACF,KAjBM,MAiBA;AACL;AACAF,MAAAA,GAAG,CAACC,GAAD,CAAH,GAAWC,KAAX;AACD;AACF;;AAED,SAAOF,GAAP;AACD,C,CAED;AACA;;;AACO,SAASS,kBAAT,CAA4BC,KAA5B,EAAmCC,MAAnC,EAA2C;AAChD,QAAMC,EAAE,GAAG,CAACF,KAAD,EAAQC,MAAR,EAAgBE,eAAhB,KAAoC;AAC7C,UAAM;AAAEC,MAAAA,IAAF;AAAQZ,MAAAA,KAAR;AAAea,MAAAA;AAAf,QAA4BL,KAAlC;AACA,UAAMM,UAAU,GAAGD,QAAQ,IACtBF,eADc,CAEjB;AAFiB,OAGdC,IAAI,KAAK,eAHd;;AAIA,QAAI,CAACE,UAAL,EAAiB;AACf,aAAO,IAAP;AACD;;AAED,QAAIb,KAAK,CAACC,OAAN,CAAcF,KAAd,CAAJ,EAA0B;AACxB,aAAO,qBAAAA,KAAK,MAAL,CAAAA,KAAK,EAAQ,CAACe,GAAD,EAAMC,IAAN,KAAe;AACjC,eAAOD,GAAG,IAAIL,EAAE,CAACM,IAAD,EAAOP,MAAM,CAACG,IAAD,CAAb,EAAqBE,UAArB,CAAhB;AACD,OAFW,EAET,IAFS,CAAZ;AAGD,KAJD,MAIO;AACL,aAAO,CAAC,EAAEL,MAAM,IAAIA,MAAM,CAACG,IAAD,CAAlB,CAAR;AACD;AACF,GAjBD;;AAmBA,SAAOF,EAAE,CAACF,KAAD,EAAQC,MAAR,EAAgB,KAAhB,CAAT;AACD","sourcesContent":["/* eslint-disable complexity */\nimport { Input } from '../../types';\n\nexport function unwrapFormValue(remediation): Input { \n const res = {};\n for (const [key, value] of Object.entries(remediation)) {\n if (value === null || typeof value === 'undefined') {\n continue;\n }\n\n if (Array.isArray(value)) {\n res[key] = value.map(unwrapFormValue);\n } else if (typeof value === 'object') {\n const formKeys = Object.keys(value as object);\n // detect patterns like:\n // value -> form -> value | form -> value\n if (['value', 'form'].includes(key) \n && formKeys.length === 1 \n && ['value', 'form'].includes(formKeys[0])\n ) {\n // unwrap nested form\n const unwrappedForm = unwrapFormValue(value);\n Object.entries(unwrappedForm).forEach(([key, value]) => {\n res[key] = value;\n });\n } else {\n // dfs\n res[key] = unwrapFormValue(value);\n }\n } else {\n // handle primitive value\n res[key] = value;\n }\n }\n\n return res as Input;\n}\n\n// only check if value is required for now\n// TODO: support SDK layer type based input validation\nexport function hasValidInputValue(input, values) {\n const fn = (input, values, requiredTracker) => {\n const { name, value, required } = input;\n const isRequired = required \n || requiredTracker \n // TODO: confirm with backend why `required` meta is missing for authenticator remediation\n || name === 'authenticator';\n if (!isRequired) {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.reduce((acc, item) => {\n return acc && fn(item, values[name], isRequired);\n }, true);\n } else {\n return !!(values && values[name]);\n }\n };\n\n return fn(input, values, false);\n}\n"],"file":"util.js"}
1
+ {"version":3,"sources":["../../../../../lib/idx/remediators/GenericRemediator/util.ts"],"names":["unwrapFormValue","remediation","res","key","value","Array","isArray","formKeys","length","unwrappedForm","forEach","hasValidInputValue","input","values","fn","requiredTracker","name","type","options","required","isRequired","acc","item","selectedOption","id","optionSchema","option","idSchema","AuthSdkError"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AACA;;AADA;AAIO,SAASA,eAAT,CAAyBC,WAAzB,EAA6C;AAClD,QAAMC,GAAG,GAAG,EAAZ;;AACA,OAAK,MAAM,CAACC,GAAD,EAAMC,KAAN,CAAX,IAA2B,sBAAeH,WAAf,CAA3B,EAAwD;AACtD,QAAIG,KAAK,KAAK,IAAV,IAAkB,OAAOA,KAAP,KAAiB,WAAvC,EAAoD;AAClD;AACD;;AAED,QAAIC,KAAK,CAACC,OAAN,CAAcF,KAAd,CAAJ,EAA0B;AACxBF,MAAAA,GAAG,CAACC,GAAD,CAAH,GAAW,kBAAAC,KAAK,MAAL,CAAAA,KAAK,EAAKJ,eAAL,CAAhB;AACD,KAFD,MAEO,IAAI,OAAOI,KAAP,KAAiB,QAArB,EAA+B;AAAA;;AACpC,YAAMG,QAAQ,GAAG,mBAAYH,KAAZ,CAAjB,CADoC,CAEpC;AACA;;AACA,UAAI,mCAAC,OAAD,EAAU,MAAV,kBAA2BD,GAA3B,KACCI,QAAQ,CAACC,MAAT,KAAoB,CADrB,IAEC,oCAAC,OAAD,EAAU,MAAV,mBAA2BD,QAAQ,CAAC,CAAD,CAAnC,CAFL,EAGE;AACA;AACA,cAAME,aAAa,GAAGT,eAAe,CAACI,KAAD,CAArC;AACA,8BAAeK,aAAf,EAA8BC,OAA9B,CAAsC,CAAC,CAACP,GAAD,EAAMC,KAAN,CAAD,KAAkB;AACtDF,UAAAA,GAAG,CAACC,GAAD,CAAH,GAAWC,KAAX;AACD,SAFD;AAGD,OATD,MASO;AACL;AACAF,QAAAA,GAAG,CAACC,GAAD,CAAH,GAAWH,eAAe,CAACI,KAAD,CAA1B;AACD;AACF,KAjBM,MAiBA;AACL;AACAF,MAAAA,GAAG,CAACC,GAAD,CAAH,GAAWC,KAAX;AACD;AACF;;AAED,SAAOF,GAAP;AACD,C,CAED;AACA;;;AACO,SAASS,kBAAT,CAA4BC,KAA5B,EAAmCC,MAAnC,EAA2C;AAChD,QAAMC,EAAE,GAAG,CAACF,KAAD,EAAQC,MAAR,EAAgBE,eAAhB,KAAoC;AAC7C,UAAM;AAAEC,MAAAA,IAAF;AAAQZ,MAAAA,KAAR;AAAea,MAAAA,IAAf;AAAqBC,MAAAA,OAArB;AAA8BC,MAAAA;AAA9B,QAA2CP,KAAjD;AACA,UAAMQ,UAAU,GAAGD,QAAQ,IAAIJ,eAA/B,CAF6C,CAI7C;;AACA,QAAIV,KAAK,CAACC,OAAN,CAAcF,KAAd,CAAJ,EAA0B;AACxB,aAAO,qBAAAA,KAAK,MAAL,CAAAA,KAAK,EAAQ,CAACiB,GAAD,EAAMC,IAAN,KAAe;AACjC,eAAOD,GAAG,IAAIP,EAAE,CAACQ,IAAD,EAAOT,MAAM,CAACG,IAAD,CAAb,EAAqBI,UAArB,CAAhB,CADiC,CACiB;AACnD,OAFW,EAET,IAFS,CAAZ;AAGD,KAT4C,CAW7C;AACA;AACA;;;AACA,QAAIF,OAAJ,EAAa;AACX;AACA,UAAID,IAAI,KAAK,QAAb,EAAuB;AAAA;;AACrB,cAAMM,cAAc,GAAGV,MAAM,CAACG,IAAD,CAA7B;;AACA,YAAI,EAACO,cAAD,aAACA,cAAD,eAACA,cAAc,CAAEC,EAAjB,CAAJ,EAAyB;AACxB,iBAAO,KAAP;AACA;;AACD,cAAMC,YAAY,GAAG,mBAAAP,OAAO,MAAP,CAAAA,OAAO,EAAOQ,MAAD,IAAY;AAAA;;AAC5C,gBAAMC,QAAQ,GAAG,+BAAAD,MAAM,CAACtB,KAAP,kBAAkB,CAAC;AAAEY,YAAAA;AAAF,WAAD,KAAcA,IAAI,KAAK,IAAzC,CAAjB;AACA,iBAAOW,QAAQ,CAACvB,KAAT,KAAmBmB,cAAc,CAACC,EAAzC;AACD,SAH2B,CAA5B;;AAIA,YAAI,CAACC,YAAL,EAAmB;AACjB,iBAAO,KAAP;AACD;;AACD,eAAO,kEAAAA,YAAY,CAACrB,KAAb,kBACG,CAAC;AAAEe,UAAAA;AAAF,SAAD,KAAkB,CAAC,CAACA,QADvB,mBAEG,CAACE,GAAD,EAAM;AAAEL,UAAAA;AAAF,SAAN,KAAmB;AACzB,iBAAOK,GAAG,IAAI,CAAC,CAACE,cAAc,CAACP,IAAD,CAA9B;AACD,SAJI,EAIF,IAJE,CAAP;AAKD,OAnBU,CAqBX;;;AACA,UAAIG,QAAQ,KAAK,KAAjB,EAAwB;AACtB,eAAO,IAAP;AACD,OAxBU,CA0BX;;;AACA,UAAIA,QAAQ,KAAK,IAAjB,EAAuB;AACrB,eAAO,CAAC,CAACN,MAAM,CAACG,IAAD,CAAf;AACD,OA7BU,CA+BX;;;AACA,YAAM,IAAIY,oBAAJ,CAAkB,yBAAwB,wBAAehB,KAAf,CAAsB,EAAhE,CAAN;AACD,KA/C4C,CAiD7C;;;AACA,QAAI,CAACQ,UAAL,EAAiB;AACf,aAAO,IAAP;AACD;;AAED,WAAO,CAAC,EAAEP,MAAM,IAAIA,MAAM,CAACG,IAAD,CAAlB,CAAR;AACD,GAvDD;;AAyDA,SAAOF,EAAE,CAACF,KAAD,EAAQC,MAAR,EAAgB,KAAhB,CAAT;AACD","sourcesContent":["/* eslint-disable complexity */\nimport { AuthSdkError } from '../../../errors';\nimport { Input } from '../../types';\n\nexport function unwrapFormValue(remediation): Input { \n const res = {};\n for (const [key, value] of Object.entries(remediation)) {\n if (value === null || typeof value === 'undefined') {\n continue;\n }\n\n if (Array.isArray(value)) {\n res[key] = value.map(unwrapFormValue);\n } else if (typeof value === 'object') {\n const formKeys = Object.keys(value as object);\n // detect patterns like:\n // value -> form -> value | form -> value\n if (['value', 'form'].includes(key) \n && formKeys.length === 1 \n && ['value', 'form'].includes(formKeys[0])\n ) {\n // unwrap nested form\n const unwrappedForm = unwrapFormValue(value);\n Object.entries(unwrappedForm).forEach(([key, value]) => {\n res[key] = value;\n });\n } else {\n // dfs\n res[key] = unwrapFormValue(value);\n }\n } else {\n // handle primitive value\n res[key] = value;\n }\n }\n\n return res as Input;\n}\n\n// only check if value is required for now\n// TODO: support SDK layer type based input validation\nexport function hasValidInputValue(input, values) {\n const fn = (input, values, requiredTracker) => {\n const { name, value, type, options, required } = input;\n const isRequired = required || requiredTracker;\n\n // handle nested value - all required fields should be avaiable in values \n if (Array.isArray(value)) {\n return value.reduce((acc, item) => {\n return acc && fn(item, values[name], isRequired); // recursive call\n }, true);\n }\n\n // handle options field\n // 1. object type options - check if each object field is required and value can be found from the selectedOption\n // 2. primitive options - required field is avaiable from top level\n if (options) {\n // object type options\n if (type === 'object') {\n const selectedOption = values[name];\n if (!selectedOption?.id) {\n return false;\n }\n const optionSchema = options.find((option) => {\n const idSchema = option.value.find(({ name }) => name === 'id' );\n return idSchema.value === selectedOption.id;\n });\n if (!optionSchema) {\n return false;\n }\n return optionSchema.value\n .filter(({ required }) => !!required)\n .reduce((acc, { name }) => {\n return acc && !!selectedOption[name];\n }, true);\n }\n\n // primitive options, not required - always valid\n if (required === false) {\n return true;\n }\n\n // primitive options, required - check if value is available\n if (required === true) {\n return !!values[name];\n }\n\n // unknown options, throw\n throw new AuthSdkError(`Unknown options type, ${JSON.stringify(input)}`);\n }\n\n // base case\n if (!isRequired) {\n return true;\n }\n \n return !!(values && values[name]);\n };\n\n return fn(input, values, false);\n}\n"],"file":"util.js"}
package/cjs/idx/run.js CHANGED
@@ -379,7 +379,7 @@ async function run(authClient, options = {}) {
379
379
  interactionHandle: meta === null || meta === void 0 ? void 0 : meta.interactionHandle
380
380
  });
381
381
  }
382
- } // from idx-js, used by the widget
382
+ } // copy all fields from idxResponse which are needed by the widget
383
383
 
384
384
 
385
385
  const {
@@ -388,7 +388,8 @@ async function run(authClient, options = {}) {
388
388
  neededToProceed,
389
389
  proceed,
390
390
  rawIdxState,
391
- requestDidSucceed
391
+ requestDidSucceed,
392
+ stepUp
392
393
  } = idxResponse || {};
393
394
  return {
394
395
  status: status,
@@ -413,6 +414,9 @@ async function run(authClient, options = {}) {
413
414
  ...(error && {
414
415
  error
415
416
  }),
417
+ ...(stepUp && {
418
+ stepUp
419
+ }),
416
420
  interactionCode,
417
421
  // if options.exchangeCodeForTokens is false
418
422
  // from idx-js
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../lib/idx/run.ts"],"names":["initializeValues","options","knownOptions","values","forEach","option","initializeData","authClient","data","flow","withCredentials","remediators","actions","useGenericRemediator","status","IdxStatus","PENDING","idx","getFlow","setFlow","flowSpec","getDataFromIntrospect","stateHandle","version","state","scopes","recoveryToken","activationToken","maxAge","idxResponse","meta","interactionHandle","transactionManager","clear","interactResponse","getDataFromRemediate","autoRemediate","step","shouldProceedWithEmailAuthenticator","shouldRemediate","rawIdxState","idxResponseFromRemediation","nextStep","canceled","getTokens","interactionCode","clientId","codeVerifier","ignoreSignature","redirectUri","urls","tokenResponse","token","exchangeCodeForTokens","tokens","finalizeData","shouldSaveResponse","shouldClearTransaction","clearSharedStorage","enabledFeatures","availableSteps","messages","terminal","requestDidSucceed","stepUp","TERMINAL","hasActions","length","hasErrors","msg","class","isTerminalSuccess","CANCELED","SUCCESS","handleError","err","error","FAILURE","run","rawIdxResponse","saveIdxResponse","context","neededToProceed","proceed"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\n/* eslint-disable max-statements, complexity, max-depth */\nimport { interact } from './interact';\nimport { introspect } from './introspect';\nimport { remediate } from './remediate';\nimport { getFlowSpecification } from './flow';\nimport * as remediators from './remediators';\nimport { \n OktaAuthInterface,\n IdxStatus,\n IdxTransaction,\n IdxFeature,\n NextStep,\n RunOptions,\n IdxTransactionMeta,\n Tokens,\n APIError,\n} from '../types';\nimport { IdxMessage, IdxResponse, isIdxResponse } from './types/idx-js';\nimport { getSavedTransactionMeta, saveTransactionMeta } from './transactionMeta';\nimport { getAvailableSteps, getEnabledFeatures, getMessagesFromResponse, isTerminalResponse } from './util';\ndeclare interface RunData {\n options: RunOptions;\n values: remediators.RemediationValues;\n status?: IdxStatus;\n tokens?: Tokens;\n nextStep?: NextStep;\n messages?: IdxMessage[];\n error?: APIError | IdxResponse;\n meta?: IdxTransactionMeta;\n enabledFeatures?: IdxFeature[];\n availableSteps?: NextStep[];\n idxResponse?: IdxResponse;\n canceled?: boolean;\n interactionCode?: string;\n shouldSaveResponse?: boolean;\n shouldClearTransaction?: boolean;\n clearSharedStorage?: boolean;\n terminal?: boolean;\n}\n\nfunction initializeValues(options: RunOptions) {\n // remove known options, everything else is assumed to be a value\n const knownOptions = [\n 'flow', \n 'remediators', \n 'actions', \n 'withCredentials', \n 'step', \n 'shouldProceedWithEmailAuthenticator'\n ];\n const values = { ...options };\n knownOptions.forEach(option => {\n delete values[option];\n });\n return values;\n}\n\nfunction initializeData(authClient, data: RunData): RunData {\n const { options } = data;\n let {\n flow,\n withCredentials,\n remediators,\n actions,\n useGenericRemediator\n } = options;\n\n const status = IdxStatus.PENDING;\n\n // certain options can be set by the flow specification\n flow = flow || authClient.idx.getFlow() || 'default';\n if (flow) {\n authClient.idx.setFlow(flow);\n const flowSpec = getFlowSpecification(authClient, flow);\n // Favor option values over flow spec\n withCredentials = (typeof withCredentials !== 'undefined') ? withCredentials : flowSpec.withCredentials;\n remediators = remediators || flowSpec.remediators;\n actions = actions || flowSpec.actions;\n }\n\n useGenericRemediator = useGenericRemediator || authClient.options.idx?.useGenericRemediator || false;\n\n return { \n ...data,\n options: { \n ...options, \n flow, \n withCredentials, \n remediators, \n actions,\n useGenericRemediator\n },\n status\n };\n}\n\nasync function getDataFromIntrospect(authClient, data: RunData): Promise<RunData> {\n const { options } = data;\n const {\n stateHandle,\n withCredentials,\n version,\n state,\n scopes,\n recoveryToken,\n activationToken,\n maxAge,\n } = options;\n\n let idxResponse;\n let meta = getSavedTransactionMeta(authClient, { state, recoveryToken, activationToken }); // may be undefined\n\n if (stateHandle) {\n idxResponse = await introspect(authClient, { withCredentials, version, stateHandle });\n } else {\n let interactionHandle = meta?.interactionHandle; // may be undefined\n if (!interactionHandle) {\n // start a new transaction\n authClient.transactionManager.clear();\n const interactResponse = await interact(authClient, {\n withCredentials,\n state,\n scopes,\n activationToken,\n recoveryToken,\n maxAge,\n }); \n interactionHandle = interactResponse.interactionHandle;\n meta = interactResponse.meta;\n }\n \n // Introspect to get idx response\n idxResponse = await introspect(authClient, { withCredentials, version, interactionHandle });\n }\n return { ...data, idxResponse, meta };\n}\n\nasync function getDataFromRemediate(authClient, data: RunData): Promise<RunData> {\n let {\n idxResponse,\n options,\n values\n } = data;\n\n const {\n autoRemediate,\n remediators,\n actions,\n flow,\n step,\n shouldProceedWithEmailAuthenticator, // will be removed in next major version\n useGenericRemediator,\n } = options;\n \n const shouldRemediate = (autoRemediate !== false && (remediators || actions || step));\n if (!shouldRemediate) {\n return data;\n }\n\n values = { \n ...values, \n stateHandle: idxResponse!.rawIdxState.stateHandle \n };\n\n // Can we handle the remediations?\n const { \n idxResponse: idxResponseFromRemediation, \n nextStep,\n canceled,\n } = await remediate(\n authClient,\n idxResponse!, \n values, \n {\n remediators,\n actions,\n flow,\n step,\n shouldProceedWithEmailAuthenticator, // will be removed in next major version\n useGenericRemediator,\n }\n );\n idxResponse = idxResponseFromRemediation;\n\n return { ...data, idxResponse, nextStep, canceled };\n}\n\nasync function getTokens(authClient, data: RunData): Promise<Tokens> {\n let { meta, idxResponse } = data;\n const { interactionCode } = idxResponse as IdxResponse;\n const {\n clientId,\n codeVerifier,\n ignoreSignature,\n redirectUri,\n urls,\n scopes,\n } = meta as IdxTransactionMeta;\n const tokenResponse = await authClient.token.exchangeCodeForTokens({\n interactionCode,\n clientId,\n codeVerifier,\n ignoreSignature,\n redirectUri,\n scopes\n }, urls);\n return tokenResponse.tokens;\n}\n\nasync function finalizeData(authClient, data: RunData): Promise<RunData> {\n let {\n options,\n idxResponse,\n canceled,\n status,\n } = data;\n const { exchangeCodeForTokens } = options;\n let shouldSaveResponse = false;\n let shouldClearTransaction = false;\n let clearSharedStorage = true;\n let interactionCode;\n let tokens;\n let enabledFeatures;\n let availableSteps;\n let messages;\n let terminal;\n\n if (idxResponse) {\n shouldSaveResponse = !!(idxResponse.requestDidSucceed || idxResponse.stepUp);\n enabledFeatures = getEnabledFeatures(idxResponse);\n availableSteps = getAvailableSteps(authClient, idxResponse, options.useGenericRemediator);\n messages = getMessagesFromResponse(idxResponse);\n terminal = isTerminalResponse(idxResponse);\n }\n\n if (terminal) {\n status = IdxStatus.TERMINAL;\n\n // In most cases a terminal response should not clear transaction data. The user should cancel or skip to continue.\n // A terminal \"success\" is a non-error response with no further actions available.\n // In these narrow cases, saved transaction data should be cleared.\n // One example of a terminal success is when the email verify flow is continued in another tab\n const hasActions = Object.keys(idxResponse!.actions).length > 0;\n const hasErrors = !!messages.find(msg => msg.class === 'ERROR');\n const isTerminalSuccess = !hasActions && !hasErrors && idxResponse!.requestDidSucceed === true;\n if (isTerminalSuccess) {\n shouldClearTransaction = true;\n } else {\n // only save response if there are actions available (ignore messages)\n shouldSaveResponse = shouldSaveResponse && hasActions;\n }\n // leave shared storage intact so the transaction can be continued in another tab\n clearSharedStorage = false;\n } else if (canceled) {\n status = IdxStatus.CANCELED;\n shouldClearTransaction = true;\n } else if (idxResponse?.interactionCode) { \n interactionCode = idxResponse.interactionCode;\n if (exchangeCodeForTokens === false) {\n status = IdxStatus.SUCCESS;\n shouldClearTransaction = false;\n } else {\n tokens = await getTokens(authClient, data);\n status = IdxStatus.SUCCESS;\n shouldClearTransaction = true;\n }\n }\n return {\n ...data,\n status,\n interactionCode,\n tokens,\n shouldSaveResponse,\n shouldClearTransaction,\n clearSharedStorage,\n enabledFeatures,\n availableSteps,\n messages,\n terminal\n };\n}\n\nfunction handleError(err, data: RunData): RunData {\n let { error, status, shouldClearTransaction } = data;\n\n // current version of idx-js will throw/reject IDX responses. Handle these differently than regular errors\n if (isIdxResponse(err)) {\n error = err;\n status = IdxStatus.FAILURE;\n shouldClearTransaction = true;\n } else {\n // error is not an IDX response, throw it like a regular error\n throw err;\n }\n\n return { ...data, error, status, shouldClearTransaction };\n}\n\nexport async function run(\n authClient: OktaAuthInterface, \n options: RunOptions = {},\n): Promise<IdxTransaction> {\n let data: RunData = {\n options,\n values: initializeValues(options)\n };\n\n data = initializeData(authClient, data);\n try {\n data = await getDataFromIntrospect(authClient, data);\n data = await getDataFromRemediate(authClient, data);\n } catch (err) {\n data = handleError(err, data);\n }\n data = await finalizeData(authClient, data);\n\n const {\n idxResponse,\n meta,\n shouldSaveResponse,\n shouldClearTransaction,\n clearSharedStorage,\n status,\n enabledFeatures,\n availableSteps,\n tokens,\n nextStep,\n messages,\n error,\n interactionCode\n } = data;\n\n if (shouldClearTransaction) {\n authClient.transactionManager.clear({ clearSharedStorage });\n }\n else {\n // ensures state is saved to sessionStorage\n saveTransactionMeta(authClient, { ...meta });\n\n if (shouldSaveResponse) {\n // Save intermediate idx response in storage to reduce introspect call\n const { rawIdxState: rawIdxResponse, requestDidSucceed } = idxResponse!;\n authClient.transactionManager.saveIdxResponse({\n rawIdxResponse,\n requestDidSucceed,\n stateHandle: idxResponse!.context?.stateHandle,\n interactionHandle: meta?.interactionHandle\n });\n }\n }\n \n // from idx-js, used by the widget\n const { actions, context, neededToProceed, proceed, rawIdxState, requestDidSucceed } = idxResponse || {};\n return {\n status: status!,\n ...(meta && { meta }),\n ...(enabledFeatures && { enabledFeatures }),\n ...(availableSteps && { availableSteps }),\n ...(tokens && { tokens }),\n ...(nextStep && { nextStep }),\n ...(messages && messages.length && { messages }),\n ...(error && { error }),\n interactionCode, // if options.exchangeCodeForTokens is false\n\n // from idx-js\n actions: actions!,\n context: context!,\n neededToProceed: neededToProceed!,\n proceed: proceed!,\n rawIdxState: rawIdxState!,\n requestDidSucceed\n };\n}\n"],"file":"run.js"}
1
+ {"version":3,"sources":["../../../lib/idx/run.ts"],"names":["initializeValues","options","knownOptions","values","forEach","option","initializeData","authClient","data","flow","withCredentials","remediators","actions","useGenericRemediator","status","IdxStatus","PENDING","idx","getFlow","setFlow","flowSpec","getDataFromIntrospect","stateHandle","version","state","scopes","recoveryToken","activationToken","maxAge","idxResponse","meta","interactionHandle","transactionManager","clear","interactResponse","getDataFromRemediate","autoRemediate","step","shouldProceedWithEmailAuthenticator","shouldRemediate","rawIdxState","idxResponseFromRemediation","nextStep","canceled","getTokens","interactionCode","clientId","codeVerifier","ignoreSignature","redirectUri","urls","tokenResponse","token","exchangeCodeForTokens","tokens","finalizeData","shouldSaveResponse","shouldClearTransaction","clearSharedStorage","enabledFeatures","availableSteps","messages","terminal","requestDidSucceed","stepUp","TERMINAL","hasActions","length","hasErrors","msg","class","isTerminalSuccess","CANCELED","SUCCESS","handleError","err","error","FAILURE","run","rawIdxResponse","saveIdxResponse","context","neededToProceed","proceed"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\n/* eslint-disable max-statements, complexity, max-depth */\nimport { interact } from './interact';\nimport { introspect } from './introspect';\nimport { remediate } from './remediate';\nimport { getFlowSpecification } from './flow';\nimport * as remediators from './remediators';\nimport { \n OktaAuthInterface,\n IdxStatus,\n IdxTransaction,\n IdxFeature,\n NextStep,\n RunOptions,\n IdxTransactionMeta,\n Tokens,\n APIError,\n} from '../types';\nimport { IdxMessage, IdxResponse, isIdxResponse } from './types/idx-js';\nimport { getSavedTransactionMeta, saveTransactionMeta } from './transactionMeta';\nimport { getAvailableSteps, getEnabledFeatures, getMessagesFromResponse, isTerminalResponse } from './util';\ndeclare interface RunData {\n options: RunOptions;\n values: remediators.RemediationValues;\n status?: IdxStatus;\n tokens?: Tokens;\n nextStep?: NextStep;\n messages?: IdxMessage[];\n error?: APIError | IdxResponse;\n meta?: IdxTransactionMeta;\n enabledFeatures?: IdxFeature[];\n availableSteps?: NextStep[];\n idxResponse?: IdxResponse;\n canceled?: boolean;\n interactionCode?: string;\n shouldSaveResponse?: boolean;\n shouldClearTransaction?: boolean;\n clearSharedStorage?: boolean;\n terminal?: boolean;\n}\n\nfunction initializeValues(options: RunOptions) {\n // remove known options, everything else is assumed to be a value\n const knownOptions = [\n 'flow', \n 'remediators', \n 'actions', \n 'withCredentials', \n 'step', \n 'shouldProceedWithEmailAuthenticator'\n ];\n const values = { ...options };\n knownOptions.forEach(option => {\n delete values[option];\n });\n return values;\n}\n\nfunction initializeData(authClient, data: RunData): RunData {\n const { options } = data;\n let {\n flow,\n withCredentials,\n remediators,\n actions,\n useGenericRemediator\n } = options;\n\n const status = IdxStatus.PENDING;\n\n // certain options can be set by the flow specification\n flow = flow || authClient.idx.getFlow() || 'default';\n if (flow) {\n authClient.idx.setFlow(flow);\n const flowSpec = getFlowSpecification(authClient, flow);\n // Favor option values over flow spec\n withCredentials = (typeof withCredentials !== 'undefined') ? withCredentials : flowSpec.withCredentials;\n remediators = remediators || flowSpec.remediators;\n actions = actions || flowSpec.actions;\n }\n\n useGenericRemediator = useGenericRemediator || authClient.options.idx?.useGenericRemediator || false;\n\n return { \n ...data,\n options: { \n ...options, \n flow, \n withCredentials, \n remediators, \n actions,\n useGenericRemediator\n },\n status\n };\n}\n\nasync function getDataFromIntrospect(authClient, data: RunData): Promise<RunData> {\n const { options } = data;\n const {\n stateHandle,\n withCredentials,\n version,\n state,\n scopes,\n recoveryToken,\n activationToken,\n maxAge,\n } = options;\n\n let idxResponse;\n let meta = getSavedTransactionMeta(authClient, { state, recoveryToken, activationToken }); // may be undefined\n\n if (stateHandle) {\n idxResponse = await introspect(authClient, { withCredentials, version, stateHandle });\n } else {\n let interactionHandle = meta?.interactionHandle; // may be undefined\n if (!interactionHandle) {\n // start a new transaction\n authClient.transactionManager.clear();\n const interactResponse = await interact(authClient, {\n withCredentials,\n state,\n scopes,\n activationToken,\n recoveryToken,\n maxAge,\n }); \n interactionHandle = interactResponse.interactionHandle;\n meta = interactResponse.meta;\n }\n \n // Introspect to get idx response\n idxResponse = await introspect(authClient, { withCredentials, version, interactionHandle });\n }\n return { ...data, idxResponse, meta };\n}\n\nasync function getDataFromRemediate(authClient, data: RunData): Promise<RunData> {\n let {\n idxResponse,\n options,\n values\n } = data;\n\n const {\n autoRemediate,\n remediators,\n actions,\n flow,\n step,\n shouldProceedWithEmailAuthenticator, // will be removed in next major version\n useGenericRemediator,\n } = options;\n \n const shouldRemediate = (autoRemediate !== false && (remediators || actions || step));\n if (!shouldRemediate) {\n return data;\n }\n\n values = { \n ...values, \n stateHandle: idxResponse!.rawIdxState.stateHandle \n };\n\n // Can we handle the remediations?\n const { \n idxResponse: idxResponseFromRemediation, \n nextStep,\n canceled,\n } = await remediate(\n authClient,\n idxResponse!, \n values, \n {\n remediators,\n actions,\n flow,\n step,\n shouldProceedWithEmailAuthenticator, // will be removed in next major version\n useGenericRemediator,\n }\n );\n idxResponse = idxResponseFromRemediation;\n\n return { ...data, idxResponse, nextStep, canceled };\n}\n\nasync function getTokens(authClient, data: RunData): Promise<Tokens> {\n let { meta, idxResponse } = data;\n const { interactionCode } = idxResponse as IdxResponse;\n const {\n clientId,\n codeVerifier,\n ignoreSignature,\n redirectUri,\n urls,\n scopes,\n } = meta as IdxTransactionMeta;\n const tokenResponse = await authClient.token.exchangeCodeForTokens({\n interactionCode,\n clientId,\n codeVerifier,\n ignoreSignature,\n redirectUri,\n scopes\n }, urls);\n return tokenResponse.tokens;\n}\n\nasync function finalizeData(authClient, data: RunData): Promise<RunData> {\n let {\n options,\n idxResponse,\n canceled,\n status,\n } = data;\n const { exchangeCodeForTokens } = options;\n let shouldSaveResponse = false;\n let shouldClearTransaction = false;\n let clearSharedStorage = true;\n let interactionCode;\n let tokens;\n let enabledFeatures;\n let availableSteps;\n let messages;\n let terminal;\n\n if (idxResponse) {\n shouldSaveResponse = !!(idxResponse.requestDidSucceed || idxResponse.stepUp);\n enabledFeatures = getEnabledFeatures(idxResponse);\n availableSteps = getAvailableSteps(authClient, idxResponse, options.useGenericRemediator);\n messages = getMessagesFromResponse(idxResponse);\n terminal = isTerminalResponse(idxResponse);\n }\n\n if (terminal) {\n status = IdxStatus.TERMINAL;\n\n // In most cases a terminal response should not clear transaction data. The user should cancel or skip to continue.\n // A terminal \"success\" is a non-error response with no further actions available.\n // In these narrow cases, saved transaction data should be cleared.\n // One example of a terminal success is when the email verify flow is continued in another tab\n const hasActions = Object.keys(idxResponse!.actions).length > 0;\n const hasErrors = !!messages.find(msg => msg.class === 'ERROR');\n const isTerminalSuccess = !hasActions && !hasErrors && idxResponse!.requestDidSucceed === true;\n if (isTerminalSuccess) {\n shouldClearTransaction = true;\n } else {\n // only save response if there are actions available (ignore messages)\n shouldSaveResponse = shouldSaveResponse && hasActions;\n }\n // leave shared storage intact so the transaction can be continued in another tab\n clearSharedStorage = false;\n } else if (canceled) {\n status = IdxStatus.CANCELED;\n shouldClearTransaction = true;\n } else if (idxResponse?.interactionCode) { \n interactionCode = idxResponse.interactionCode;\n if (exchangeCodeForTokens === false) {\n status = IdxStatus.SUCCESS;\n shouldClearTransaction = false;\n } else {\n tokens = await getTokens(authClient, data);\n status = IdxStatus.SUCCESS;\n shouldClearTransaction = true;\n }\n }\n return {\n ...data,\n status,\n interactionCode,\n tokens,\n shouldSaveResponse,\n shouldClearTransaction,\n clearSharedStorage,\n enabledFeatures,\n availableSteps,\n messages,\n terminal\n };\n}\n\nfunction handleError(err, data: RunData): RunData {\n let { error, status, shouldClearTransaction } = data;\n\n // current version of idx-js will throw/reject IDX responses. Handle these differently than regular errors\n if (isIdxResponse(err)) {\n error = err;\n status = IdxStatus.FAILURE;\n shouldClearTransaction = true;\n } else {\n // error is not an IDX response, throw it like a regular error\n throw err;\n }\n\n return { ...data, error, status, shouldClearTransaction };\n}\n\nexport async function run(\n authClient: OktaAuthInterface, \n options: RunOptions = {},\n): Promise<IdxTransaction> {\n let data: RunData = {\n options,\n values: initializeValues(options)\n };\n\n data = initializeData(authClient, data);\n try {\n data = await getDataFromIntrospect(authClient, data);\n data = await getDataFromRemediate(authClient, data);\n } catch (err) {\n data = handleError(err, data);\n }\n data = await finalizeData(authClient, data);\n\n const {\n idxResponse,\n meta,\n shouldSaveResponse,\n shouldClearTransaction,\n clearSharedStorage,\n status,\n enabledFeatures,\n availableSteps,\n tokens,\n nextStep,\n messages,\n error,\n interactionCode\n } = data;\n\n if (shouldClearTransaction) {\n authClient.transactionManager.clear({ clearSharedStorage });\n }\n else {\n // ensures state is saved to sessionStorage\n saveTransactionMeta(authClient, { ...meta });\n\n if (shouldSaveResponse) {\n // Save intermediate idx response in storage to reduce introspect call\n const { rawIdxState: rawIdxResponse, requestDidSucceed } = idxResponse!;\n authClient.transactionManager.saveIdxResponse({\n rawIdxResponse,\n requestDidSucceed,\n stateHandle: idxResponse!.context?.stateHandle,\n interactionHandle: meta?.interactionHandle\n });\n }\n }\n \n // copy all fields from idxResponse which are needed by the widget\n const { actions, context, neededToProceed, proceed, rawIdxState, requestDidSucceed, stepUp } = idxResponse || {};\n return {\n status: status!,\n ...(meta && { meta }),\n ...(enabledFeatures && { enabledFeatures }),\n ...(availableSteps && { availableSteps }),\n ...(tokens && { tokens }),\n ...(nextStep && { nextStep }),\n ...(messages && messages.length && { messages }),\n ...(error && { error }),\n ...(stepUp && { stepUp }),\n interactionCode, // if options.exchangeCodeForTokens is false\n\n // from idx-js\n actions: actions!,\n context: context!,\n neededToProceed: neededToProceed!,\n proceed: proceed!,\n rawIdxState: rawIdxState!,\n requestDidSucceed\n };\n}\n"],"file":"run.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../lib/idx/types/api.ts"],"names":["IdxStatus","AuthenticatorKey","IdxFeature","isAuthenticator","obj","key","id"],"mappings":";;;;IAkBYA,S;;;WAAAA,S;AAAAA,EAAAA,S;AAAAA,EAAAA,S;AAAAA,EAAAA,S;AAAAA,EAAAA,S;AAAAA,EAAAA,S;GAAAA,S,yBAAAA,S;;IAQAC,gB;;;WAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;GAAAA,gB,gCAAAA,gB;;IA4CAC,U;;;WAAAA,U;AAAAA,EAAAA,U;AAAAA,EAAAA,U;AAAAA,EAAAA,U;AAAAA,EAAAA,U;GAAAA,U,0BAAAA,U;;AA8CL,SAASC,eAAT,CAAyBC,GAAzB,EAAyD;AAC9D,SAAOA,GAAG,KAAKA,GAAG,CAACC,GAAJ,IAAWD,GAAG,CAACE,EAApB,CAAV;AACD","sourcesContent":["import { APIError } from '../../types/api';\nimport { Tokens } from '../../types/Token';\nimport { PKCETransactionMeta } from '../../types/Transaction';\nimport { FlowIdentifier } from './FlowIdentifier';\nimport {\n IdxActions,\n IdxAuthenticator,\n IdxContext,\n IdxForm,\n IdxMessage,\n IdxOption,\n IdxRemediation,\n IdxResponse,\n RawIdxResponse,\n IdxActionParams,\n IdpConfig,\n} from './idx-js';\n\nexport enum IdxStatus {\n SUCCESS = 'SUCCESS',\n PENDING = 'PENDING',\n FAILURE = 'FAILURE',\n TERMINAL = 'TERMINAL',\n CANCELED = 'CANCELED',\n}\n\nexport enum AuthenticatorKey {\n OKTA_PASSWORD = 'okta_password',\n OKTA_EMAIL = 'okta_email',\n PHONE_NUMBER = 'phone_number',\n GOOGLE_AUTHENTICATOR = 'google_otp',\n SECURITY_QUESTION = 'security_question',\n OKTA_VERIFY = 'okta_verify',\n WEBAUTHN = 'webauthn',\n}\n\nexport type Input = {\n name: string;\n key?: string;\n type?: string;\n label?: string;\n value?: string | {form: IdxForm} | Input[];\n minLength?: number;\n maxLength?: number;\n secret?: boolean;\n required?: boolean;\n options?: IdxOption[];\n}\n\n\nexport interface IdxPollOptions {\n required?: boolean;\n refresh?: number;\n}\n\nexport type NextStep = {\n name: string;\n authenticator?: IdxAuthenticator;\n canSkip?: boolean;\n canResend?: boolean;\n inputs?: Input[];\n options?: IdxOption[];\n poll?: IdxPollOptions;\n authenticatorEnrollments?: IdxAuthenticator[];\n // eslint-disable-next-line no-use-before-define\n action?: (params?: IdxActionParams) => Promise<IdxTransaction>;\n idp?: IdpConfig;\n href?: string;\n}\n\nexport enum IdxFeature {\n PASSWORD_RECOVERY = 'recover-password',\n REGISTRATION = 'enroll-profile',\n SOCIAL_IDP = 'redirect-idp',\n ACCOUNT_UNLOCK = 'unlock-account',\n}\n\nexport interface IdxTransactionMeta extends PKCETransactionMeta {\n interactionHandle?: string;\n remediations?: string[];\n flow?: FlowIdentifier;\n withCredentials?: boolean;\n activationToken?: string;\n recoveryToken?: string;\n maxAge?: string | number;\n useGenericRemediator?: boolean;\n}\n\nexport interface IdxTransaction {\n status: IdxStatus;\n tokens?: Tokens;\n nextStep?: NextStep;\n messages?: IdxMessage[];\n error?: APIError | IdxResponse;\n meta?: IdxTransactionMeta;\n enabledFeatures?: IdxFeature[];\n availableSteps?: NextStep[];\n requestDidSucceed?: boolean;\n\n // from idx-js, used by signin widget\n proceed: (remediationName: string, params: unknown) => Promise<IdxResponse>;\n neededToProceed: IdxRemediation[];\n rawIdxState: RawIdxResponse;\n interactionCode?: string;\n actions: IdxActions;\n context: IdxContext;\n}\n\n\nexport type Authenticator = {\n id?: string;\n key?: string;\n methodType?: string;\n phoneNumber?: string;\n};\n\nexport function isAuthenticator(obj: any): obj is Authenticator {\n return obj && (obj.key || obj.id);\n}\n\nexport interface RemediationResponse {\n idxResponse: IdxResponse;\n nextStep?: NextStep;\n messages?: IdxMessage[];\n terminal?: boolean;\n canceled?: boolean;\n}\n\nexport interface InteractResponse {\n state?: string;\n interactionHandle: string;\n meta: IdxTransactionMeta;\n}\n"],"file":"api.js"}
1
+ {"version":3,"sources":["../../../../lib/idx/types/api.ts"],"names":["IdxStatus","AuthenticatorKey","IdxFeature","isAuthenticator","obj","key","id"],"mappings":";;;;IAkBYA,S;;;WAAAA,S;AAAAA,EAAAA,S;AAAAA,EAAAA,S;AAAAA,EAAAA,S;AAAAA,EAAAA,S;AAAAA,EAAAA,S;GAAAA,S,yBAAAA,S;;IAQAC,gB;;;WAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;AAAAA,EAAAA,gB;GAAAA,gB,gCAAAA,gB;;IAmDAC,U;;;WAAAA,U;AAAAA,EAAAA,U;AAAAA,EAAAA,U;AAAAA,EAAAA,U;AAAAA,EAAAA,U;GAAAA,U,0BAAAA,U;;AA+CL,SAASC,eAAT,CAAyBC,GAAzB,EAAyD;AAC9D,SAAOA,GAAG,KAAKA,GAAG,CAACC,GAAJ,IAAWD,GAAG,CAACE,EAApB,CAAV;AACD","sourcesContent":["import { APIError } from '../../types/api';\nimport { Tokens } from '../../types/Token';\nimport { PKCETransactionMeta } from '../../types/Transaction';\nimport { FlowIdentifier } from './FlowIdentifier';\nimport {\n IdxActions,\n IdxAuthenticator,\n IdxContext,\n IdxForm,\n IdxMessage,\n IdxOption,\n IdxRemediation,\n IdxResponse,\n RawIdxResponse,\n IdxActionParams,\n IdpConfig,\n} from './idx-js';\n\nexport enum IdxStatus {\n SUCCESS = 'SUCCESS',\n PENDING = 'PENDING',\n FAILURE = 'FAILURE',\n TERMINAL = 'TERMINAL',\n CANCELED = 'CANCELED',\n}\n\nexport enum AuthenticatorKey {\n OKTA_PASSWORD = 'okta_password',\n OKTA_EMAIL = 'okta_email',\n PHONE_NUMBER = 'phone_number',\n GOOGLE_AUTHENTICATOR = 'google_otp',\n SECURITY_QUESTION = 'security_question',\n OKTA_VERIFY = 'okta_verify',\n WEBAUTHN = 'webauthn',\n}\n\nexport type Input = {\n name: string;\n key?: string;\n type?: string;\n label?: string;\n value?: string | {form: IdxForm} | Input[];\n minLength?: number;\n maxLength?: number;\n secret?: boolean;\n required?: boolean;\n options?: IdxOption[];\n mutable?: boolean;\n visible?: boolean;\n}\n\n\nexport interface IdxPollOptions {\n required?: boolean;\n refresh?: number;\n}\n\nexport type NextStep = {\n name: string;\n authenticator?: IdxAuthenticator;\n canSkip?: boolean;\n canResend?: boolean;\n inputs?: Input[];\n options?: IdxOption[];\n poll?: IdxPollOptions;\n authenticatorEnrollments?: IdxAuthenticator[];\n // eslint-disable-next-line no-use-before-define\n action?: (params?: IdxActionParams) => Promise<IdxTransaction>;\n idp?: IdpConfig;\n href?: string;\n relatesTo?: {\n type?: string;\n value: IdxAuthenticator;\n };\n refresh?: number;\n}\n\nexport enum IdxFeature {\n PASSWORD_RECOVERY = 'recover-password',\n REGISTRATION = 'enroll-profile',\n SOCIAL_IDP = 'redirect-idp',\n ACCOUNT_UNLOCK = 'unlock-account',\n}\n\nexport interface IdxTransactionMeta extends PKCETransactionMeta {\n interactionHandle?: string;\n remediations?: string[];\n flow?: FlowIdentifier;\n withCredentials?: boolean;\n activationToken?: string;\n recoveryToken?: string;\n maxAge?: string | number;\n useGenericRemediator?: boolean;\n}\n\nexport interface IdxTransaction {\n status: IdxStatus;\n tokens?: Tokens;\n nextStep?: NextStep;\n messages?: IdxMessage[];\n error?: APIError | IdxResponse;\n meta?: IdxTransactionMeta;\n enabledFeatures?: IdxFeature[];\n availableSteps?: NextStep[];\n requestDidSucceed?: boolean;\n stepUp?: boolean;\n \n // from idx-js, used by signin widget\n proceed: (remediationName: string, params: unknown) => Promise<IdxResponse>;\n neededToProceed: IdxRemediation[];\n rawIdxState: RawIdxResponse;\n interactionCode?: string;\n actions: IdxActions;\n context: IdxContext;\n}\n\n\nexport type Authenticator = {\n id?: string;\n key?: string;\n methodType?: string;\n phoneNumber?: string;\n};\n\nexport function isAuthenticator(obj: any): obj is Authenticator {\n return obj && (obj.key || obj.id);\n}\n\nexport interface RemediationResponse {\n idxResponse: IdxResponse;\n nextStep?: NextStep;\n messages?: IdxMessage[];\n terminal?: boolean;\n canceled?: boolean;\n}\n\nexport interface InteractResponse {\n state?: string;\n interactionHandle: string;\n meta: IdxTransactionMeta;\n}\n"],"file":"api.js"}
package/cjs/idx/util.js CHANGED
@@ -288,32 +288,32 @@ function getRemediator(idxRemediations, values, options) {
288
288
 
289
289
  const remediatorCandidates = [];
290
290
 
291
- for (let remediation of idxRemediations) {
292
- var _context4;
293
-
294
- const isRemeditionInFlow = (0, _includes.default)(_context4 = (0, _keys.default)(remediators)).call(_context4, remediation.name);
295
-
296
- if (!isRemeditionInFlow) {
297
- continue;
298
- } // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
291
+ if (useGenericRemediator) {
292
+ // always pick the first remediation for when use GenericRemediator
293
+ remediatorCandidates.push(new _GenericRemediator.GenericRemediator(idxRemediations[0], values, options));
294
+ } else {
295
+ for (let remediation of idxRemediations) {
296
+ var _context4;
299
297
 
298
+ const isRemeditionInFlow = (0, _includes.default)(_context4 = (0, _keys.default)(remediators)).call(_context4, remediation.name);
300
299
 
301
- const T = getRemediatorClass(remediation, options);
302
- remediator = new T(remediation, values, options);
300
+ if (!isRemeditionInFlow) {
301
+ continue;
302
+ } // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
303
303
 
304
- if (remediator.canRemediate()) {
305
- // found the remediator
306
- return remediator;
307
- } // remediator cannot handle the current values
308
- // maybe return for next step
309
304
 
305
+ const T = getRemediatorClass(remediation, options);
306
+ remediator = new T(remediation, values, options);
310
307
 
311
- remediatorCandidates.push(remediator);
312
- } // If no remedition is picked, use the first one with GenericRemeditor for default flow
308
+ if (remediator.canRemediate()) {
309
+ // found the remediator
310
+ return remediator;
311
+ } // remediator cannot handle the current values
312
+ // maybe return for next step
313
313
 
314
314
 
315
- if (!remediatorCandidates.length && !!idxRemediations.length && useGenericRemediator) {
316
- return new _GenericRemediator.GenericRemediator(idxRemediations[0], values, options);
315
+ remediatorCandidates.push(remediator);
316
+ }
317
317
  }
318
318
 
319
319
  return remediatorCandidates[0];