@okta/okta-auth-js 6.5.0 → 6.5.1
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 +22 -0
- package/cjs/OktaUserAgent.js +2 -2
- package/cjs/idx/authenticator/WebauthnEnrollment.js +8 -3
- package/cjs/idx/authenticator/WebauthnEnrollment.js.map +1 -1
- package/cjs/idx/authenticator/WebauthnVerification.js +8 -3
- package/cjs/idx/authenticator/WebauthnVerification.js.map +1 -1
- package/cjs/idx/remediators/GenericRemediator/util.js +69 -9
- package/cjs/idx/remediators/GenericRemediator/util.js.map +1 -1
- package/cjs/idx/run.js +6 -2
- package/cjs/idx/run.js.map +1 -1
- package/cjs/idx/types/api.js.map +1 -1
- package/cjs/idx/util.js +19 -19
- package/cjs/idx/util.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 +88 -44
- package/esm/esm.browser.js.map +1 -1
- package/esm/esm.node.mjs +88 -44
- package/esm/esm.node.mjs.map +1 -1
- package/lib/idx/authenticator/WebauthnEnrollment.d.ts +1 -0
- package/lib/idx/authenticator/WebauthnVerification.d.ts +1 -0
- package/lib/idx/types/api.d.ts +4 -0
- package/package.json +3 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 6.5.1
|
|
4
|
+
|
|
5
|
+
### Fixes
|
|
6
|
+
|
|
7
|
+
- [#1200](https://github.com/okta/okta-auth-js/pull/1200) Fixes `canRemediate` logic in GenericRemediator (beta) to handle nested fields
|
|
8
|
+
- [1207](https://github.com/okta/okta-auth-js/pull/1207) Fixes `canRemediate` logic in GenericRemediator (beta) to handle `options` fields
|
|
9
|
+
|
|
10
|
+
### Other
|
|
11
|
+
|
|
12
|
+
- [#1200](https://github.com/okta/okta-auth-js/pull/1200) Adds missing fields to `Input` type in `idx` module
|
|
13
|
+
|
|
3
14
|
## 6.5.0
|
|
4
15
|
|
|
5
16
|
### Features
|
|
@@ -10,6 +21,17 @@
|
|
|
10
21
|
### Fixes
|
|
11
22
|
|
|
12
23
|
- [#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.
|
|
24
|
+
## 6.4.5
|
|
25
|
+
|
|
26
|
+
### Fixes
|
|
27
|
+
|
|
28
|
+
- [#1240](https://github.com/okta/okta-auth-js/pull/1204) Fixes Apple SSO flow: includes `stepUp` on returned `IdxTransaction`
|
|
29
|
+
|
|
30
|
+
## 6.4.4
|
|
31
|
+
|
|
32
|
+
### Fixes
|
|
33
|
+
|
|
34
|
+
- [#1199](https://github.com/okta/okta-auth-js/pull/1199) Fixes webauthn enrollment/verification to accept `credentials` object
|
|
13
35
|
|
|
14
36
|
## 6.4.3
|
|
15
37
|
|
package/cjs/OktaUserAgent.js
CHANGED
|
@@ -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.
|
|
24
|
+
this.environments = [`okta-auth-js/${"6.5.1"}`];
|
|
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.
|
|
39
|
+
return "6.5.1";
|
|
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
|
-
} =
|
|
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;;
|
|
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
|
-
} =
|
|
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;;
|
|
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"}
|
|
@@ -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 //
|
|
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
|
-
}
|
|
75
|
-
|
|
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":"
|
|
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":"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","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
|
|
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
|
package/cjs/idx/run.js.map
CHANGED
|
@@ -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"}
|
package/cjs/idx/types/api.js.map
CHANGED
|
@@ -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;;
|
|
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;;IA+CAC,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 relatesTo?: IdxAuthenticator;\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}\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
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
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
|
-
|
|
302
|
-
|
|
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
|
-
|
|
312
|
-
|
|
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
|
-
|
|
316
|
-
|
|
315
|
+
remediatorCandidates.push(remediator);
|
|
316
|
+
}
|
|
317
317
|
}
|
|
318
318
|
|
|
319
319
|
return remediatorCandidates[0];
|
package/cjs/idx/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../lib/idx/util.ts"],"names":["isTerminalResponse","idxResponse","neededToProceed","interactionCode","length","canSkipFn","some","name","canResendFn","actions","actionName","getMessagesFromIdxRemediationValue","value","Array","isArray","messages","form","messagesFromForm","options","optionValues","forEach","option","messagesFromOptions","getMessagesFromResponse","rawIdxState","globalMessages","message","remediation","fieldMessages","seen","filtered","key","i18n","getEnabledFeatures","res","push","IdxFeature","PASSWORD_RECOVERY","REGISTRATION","SOCIAL_IDP","ACCOUNT_UNLOCK","getAvailableSteps","authClient","useGenericRemediator","remediatorMap","remediators","map","remediatorClass","remediationName","T","getRemediatorClass","remediator","getNextStep","context","action","params","filterValuesForRemediation","values","remediations","r","valuesForRemediation","entry","undefined","GenericRemediator","getRemediator","idxRemediations","step","remediatorCandidates","isRemeditionInFlow","canRemediate","nextStep","canSkip","canResend","handleIdxError","e","requestDidSucceed","terminal"],"mappings":"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","sourcesContent":["import { warn } from '../util';\nimport * as remediators from './remediators';\nimport { RemediationValues, Remediator, RemediatorConstructor } from './remediators';\nimport { GenericRemediator } from './remediators/GenericRemediator';\nimport { proceed } from './proceed';\nimport { IdxFeature, NextStep, RemediateOptions, RemediationResponse } from './types';\nimport { IdxMessage, IdxRemediation, IdxRemediationValue, IdxResponse, isIdxResponse } from './types/idx-js';\nimport { OktaAuthInterface } from '../types';\n\nexport function isTerminalResponse(idxResponse: IdxResponse) {\n const { neededToProceed, interactionCode } = idxResponse;\n return !neededToProceed.length && !interactionCode;\n}\n\nexport function canSkipFn(idxResponse: IdxResponse) {\n return idxResponse.neededToProceed.some(({ name }) => name === 'skip');\n}\n\nexport function canResendFn(idxResponse: IdxResponse) {\n return Object.keys(idxResponse.actions).some(actionName => actionName.includes('resend'));\n}\n\nexport function getMessagesFromIdxRemediationValue(\n value?: IdxRemediationValue[]\n): IdxMessage[] | undefined {\n if (!value || !Array.isArray(value)) {\n return;\n }\n return value.reduce((messages, value) => {\n if (value.messages) {\n messages = [...messages, ...value.messages.value] as never;\n }\n if (value.form) {\n const messagesFromForm = getMessagesFromIdxRemediationValue(value.form.value) || [];\n messages = [...messages, ...messagesFromForm] as never;\n } \n if (value.options) {\n let optionValues = [];\n value.options.forEach(option => {\n if (!option.value || typeof option.value === 'string') {\n return;\n }\n optionValues = [...optionValues, option.value] as never;\n });\n const messagesFromOptions = getMessagesFromIdxRemediationValue(optionValues) || [];\n messages = [...messages, ...messagesFromOptions] as never;\n }\n return messages;\n }, []);\n}\n\nexport function getMessagesFromResponse(idxResponse: IdxResponse): IdxMessage[] {\n let messages: IdxMessage[] = [];\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 = getMessagesFromIdxRemediationValue(remediation.value);\n if (fieldMessages) {\n messages = [...messages, ...fieldMessages] as never;\n }\n }\n\n // API may return identical error on same field, filter by i18n key\n const seen = {};\n messages = messages.reduce((filtered, message) => {\n const key = message.i18n?.key;\n if (key && seen[key]) {\n return filtered;\n }\n seen[key] = message;\n filtered = [...filtered, message] as never;\n return filtered;\n }, []);\n return messages;\n}\n\n\nexport function getEnabledFeatures(idxResponse: IdxResponse): IdxFeature[] {\n const res = [];\n const { actions, neededToProceed } = idxResponse;\n\n if (actions['currentAuthenticator-recover']) {\n res.push(IdxFeature.PASSWORD_RECOVERY as never);\n }\n\n if (neededToProceed.some(({ name }) => name === 'select-enroll-profile')) {\n res.push(IdxFeature.REGISTRATION as never);\n }\n\n if (neededToProceed.some(({ name }) => name === 'redirect-idp')) {\n res.push(IdxFeature.SOCIAL_IDP as never);\n }\n\n if (neededToProceed.some(({ name }) => name === 'unlock-account')) {\n res.push(IdxFeature.ACCOUNT_UNLOCK as never);\n }\n\n return res;\n}\n\nexport function getAvailableSteps(\n authClient: OktaAuthInterface, \n idxResponse: IdxResponse, \n useGenericRemediator?: boolean\n): NextStep[] {\n const res: NextStep[] = [];\n\n const remediatorMap: Record<string, RemediatorConstructor> = Object.values(remediators)\n .reduce((map, remediatorClass) => {\n // Only add concrete subclasses to the map\n if (remediatorClass.remediationName) {\n map[remediatorClass.remediationName] = remediatorClass;\n }\n return map;\n }, {});\n\n for (let remediation of idxResponse.neededToProceed) {\n const T = getRemediatorClass(remediation, { useGenericRemediator, remediators: remediatorMap });\n if (T) {\n const remediator: Remediator = new T(remediation);\n res.push (remediator.getNextStep(authClient, idxResponse.context) as never);\n }\n }\n\n for (const [name] of Object.entries((idxResponse.actions || {}))) {\n res.push({ \n name, \n action: async (params?) => {\n return proceed(authClient, { \n actions: [{ name, params }] \n });\n }\n });\n }\n\n return res;\n}\n\nexport function filterValuesForRemediation(\n idxResponse: IdxResponse,\n remediationName: string,\n values: RemediationValues\n): RemediationValues {\n const remediations = idxResponse.neededToProceed || [];\n const remediation = remediations.find(r => r.name === remediationName);\n if (!remediation) {\n // step was specified, but remediation was not found. This is unexpected!\n warn(`filterValuesForRemediation: \"${remediationName}\" did not match any remediations`);\n return values;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const valuesForRemediation = remediation.value!.reduce((res, entry) => {\n const { name, value } = entry;\n if (name === 'stateHandle') {\n res[name] = value; // use the stateHandle value in the remediation\n } else {\n res[name] = values[name]; // use the value provided by the caller\n }\n return res;\n }, {});\n return valuesForRemediation;\n}\n\nfunction getRemediatorClass(remediation: IdxRemediation, options: RemediateOptions) {\n const { useGenericRemediator, remediators } = options;\n \n if (!remediation) {\n return undefined;\n }\n\n if (useGenericRemediator) {\n return GenericRemediator;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return remediators![remediation.name];\n}\n\n// Return first match idxRemediation in allowed remediators\n// eslint-disable-next-line complexity\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 const useGenericRemediator = options.useGenericRemediator;\n\n let remediator: 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 = getRemediatorClass(remediation, options);\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: Remediator[] = [];\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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const T = getRemediatorClass(remediation, options)!;\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); \n }\n\n // If no remedition is picked, use the first one with GenericRemeditor for default flow\n if (!remediatorCandidates.length && !!idxRemediations.length && useGenericRemediator) {\n return new GenericRemediator(idxRemediations[0], values, options);\n }\n \n return remediatorCandidates[0];\n}\n\n\nexport function getNextStep(\n authClient: OktaAuthInterface, remediator: Remediator, idxResponse: IdxResponse\n): NextStep {\n const nextStep = remediator.getNextStep(authClient, 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\nexport function handleIdxError(authClient: OktaAuthInterface, e, remediator?): RemediationResponse {\n // Handle idx messages\n let idxResponse = isIdxResponse(e) ? e : null;\n if (!idxResponse) {\n // Thrown error terminates the interaction with idx\n throw e;\n }\n idxResponse = {\n ...idxResponse,\n requestDidSucceed: false\n };\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(authClient, remediator, idxResponse);\n return { \n idxResponse,\n messages, \n ...(nextStep && { nextStep }) \n };\n }\n}\n"],"file":"util.js"}
|
|
1
|
+
{"version":3,"sources":["../../../lib/idx/util.ts"],"names":["isTerminalResponse","idxResponse","neededToProceed","interactionCode","length","canSkipFn","some","name","canResendFn","actions","actionName","getMessagesFromIdxRemediationValue","value","Array","isArray","messages","form","messagesFromForm","options","optionValues","forEach","option","messagesFromOptions","getMessagesFromResponse","rawIdxState","globalMessages","message","remediation","fieldMessages","seen","filtered","key","i18n","getEnabledFeatures","res","push","IdxFeature","PASSWORD_RECOVERY","REGISTRATION","SOCIAL_IDP","ACCOUNT_UNLOCK","getAvailableSteps","authClient","useGenericRemediator","remediatorMap","remediators","map","remediatorClass","remediationName","T","getRemediatorClass","remediator","getNextStep","context","action","params","filterValuesForRemediation","values","remediations","r","valuesForRemediation","entry","undefined","GenericRemediator","getRemediator","idxRemediations","step","remediatorCandidates","isRemeditionInFlow","canRemediate","nextStep","canSkip","canResend","handleIdxError","e","requestDidSucceed","terminal"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;AACA;;AACA;;;;;;AAGO,SAASA,kBAAT,CAA4BC,WAA5B,EAAsD;AAC3D,QAAM;AAAEC,IAAAA,eAAF;AAAmBC,IAAAA;AAAnB,MAAuCF,WAA7C;AACA,SAAO,CAACC,eAAe,CAACE,MAAjB,IAA2B,CAACD,eAAnC;AACD;;AAEM,SAASE,SAAT,CAAmBJ,WAAnB,EAA6C;AAClD,SAAOA,WAAW,CAACC,eAAZ,CAA4BI,IAA5B,CAAiC,CAAC;AAAEC,IAAAA;AAAF,GAAD,KAAcA,IAAI,KAAK,MAAxD,CAAP;AACD;;AAEM,SAASC,WAAT,CAAqBP,WAArB,EAA+C;AACpD,SAAO,mBAAYA,WAAW,CAACQ,OAAxB,EAAiCH,IAAjC,CAAsCI,UAAU,IAAI,uBAAAA,UAAU,MAAV,CAAAA,UAAU,EAAU,QAAV,CAA9D,CAAP;AACD;;AAEM,SAASC,kCAAT,CACLC,KADK,EAEqB;AAC1B,MAAI,CAACA,KAAD,IAAU,CAACC,KAAK,CAACC,OAAN,CAAcF,KAAd,CAAf,EAAqC;AACnC;AACD;;AACD,SAAO,qBAAAA,KAAK,MAAL,CAAAA,KAAK,EAAQ,CAACG,QAAD,EAAWH,KAAX,KAAqB;AACvC,QAAIA,KAAK,CAACG,QAAV,EAAoB;AAClBA,MAAAA,QAAQ,GAAG,CAAC,GAAGA,QAAJ,EAAc,GAAGH,KAAK,CAACG,QAAN,CAAeH,KAAhC,CAAX;AACD;;AACD,QAAIA,KAAK,CAACI,IAAV,EAAgB;AACd,YAAMC,gBAAgB,GAAGN,kCAAkC,CAACC,KAAK,CAACI,IAAN,CAAWJ,KAAZ,CAAlC,IAAwD,EAAjF;AACAG,MAAAA,QAAQ,GAAG,CAAC,GAAGA,QAAJ,EAAc,GAAGE,gBAAjB,CAAX;AACD;;AACD,QAAIL,KAAK,CAACM,OAAV,EAAmB;AACjB,UAAIC,YAAY,GAAG,EAAnB;AACAP,MAAAA,KAAK,CAACM,OAAN,CAAcE,OAAd,CAAsBC,MAAM,IAAI;AAC9B,YAAI,CAACA,MAAM,CAACT,KAAR,IAAiB,OAAOS,MAAM,CAACT,KAAd,KAAwB,QAA7C,EAAuD;AACrD;AACD;;AACDO,QAAAA,YAAY,GAAG,CAAC,GAAGA,YAAJ,EAAkBE,MAAM,CAACT,KAAzB,CAAf;AACD,OALD;AAMA,YAAMU,mBAAmB,GAAGX,kCAAkC,CAACQ,YAAD,CAAlC,IAAoD,EAAhF;AACAJ,MAAAA,QAAQ,GAAG,CAAC,GAAGA,QAAJ,EAAc,GAAGO,mBAAjB,CAAX;AACD;;AACD,WAAOP,QAAP;AACD,GApBW,EAoBT,EApBS,CAAZ;AAqBD;;AAEM,SAASQ,uBAAT,CAAiCtB,WAAjC,EAAyE;AAAA;;AAC9E,MAAIc,QAAsB,GAAG,EAA7B;AACA,QAAM;AAAES,IAAAA,WAAF;AAAetB,IAAAA;AAAf,MAAmCD,WAAzC,CAF8E,CAI9E;;AACA,QAAMwB,cAAc,4BAAGD,WAAW,CAACT,QAAf,0DAAG,mDAAsBH,KAAtB,iBAAgCc,OAAO,IAAIA,OAA3C,CAAvB;;AACA,MAAID,cAAJ,EAAoB;AAClBV,IAAAA,QAAQ,GAAG,CAAC,GAAGA,QAAJ,EAAc,GAAGU,cAAjB,CAAX;AACD,GAR6E,CAU9E;;;AACA,OAAK,IAAIE,WAAT,IAAwBzB,eAAxB,EAAyC;AACvC,UAAM0B,aAAa,GAAGjB,kCAAkC,CAACgB,WAAW,CAACf,KAAb,CAAxD;;AACA,QAAIgB,aAAJ,EAAmB;AACjBb,MAAAA,QAAQ,GAAG,CAAC,GAAGA,QAAJ,EAAc,GAAGa,aAAjB,CAAX;AACD;AACF,GAhB6E,CAkB9E;;;AACA,QAAMC,IAAI,GAAG,EAAb;AACAd,EAAAA,QAAQ,GAAG,qBAAAA,QAAQ,MAAR,CAAAA,QAAQ,EAAQ,CAACe,QAAD,EAAWJ,OAAX,KAAuB;AAAA;;AAChD,UAAMK,GAAG,oBAAGL,OAAO,CAACM,IAAX,kDAAG,cAAcD,GAA1B;;AACA,QAAIA,GAAG,IAAIF,IAAI,CAACE,GAAD,CAAf,EAAsB;AACpB,aAAOD,QAAP;AACD;;AACDD,IAAAA,IAAI,CAACE,GAAD,CAAJ,GAAYL,OAAZ;AACAI,IAAAA,QAAQ,GAAG,CAAC,GAAGA,QAAJ,EAAcJ,OAAd,CAAX;AACA,WAAOI,QAAP;AACD,GARkB,EAQhB,EARgB,CAAnB;AASA,SAAOf,QAAP;AACD;;AAGM,SAASkB,kBAAT,CAA4BhC,WAA5B,EAAoE;AACzE,QAAMiC,GAAG,GAAG,EAAZ;AACA,QAAM;AAAEzB,IAAAA,OAAF;AAAWP,IAAAA;AAAX,MAA+BD,WAArC;;AAEA,MAAIQ,OAAO,CAAC,8BAAD,CAAX,EAA6C;AAC3CyB,IAAAA,GAAG,CAACC,IAAJ,CAASC,kBAAWC,iBAApB;AACD;;AAED,MAAInC,eAAe,CAACI,IAAhB,CAAqB,CAAC;AAAEC,IAAAA;AAAF,GAAD,KAAcA,IAAI,KAAK,uBAA5C,CAAJ,EAA0E;AACxE2B,IAAAA,GAAG,CAACC,IAAJ,CAASC,kBAAWE,YAApB;AACD;;AAED,MAAIpC,eAAe,CAACI,IAAhB,CAAqB,CAAC;AAAEC,IAAAA;AAAF,GAAD,KAAcA,IAAI,KAAK,cAA5C,CAAJ,EAAiE;AAC/D2B,IAAAA,GAAG,CAACC,IAAJ,CAASC,kBAAWG,UAApB;AACD;;AAED,MAAIrC,eAAe,CAACI,IAAhB,CAAqB,CAAC;AAAEC,IAAAA;AAAF,GAAD,KAAcA,IAAI,KAAK,gBAA5C,CAAJ,EAAmE;AACjE2B,IAAAA,GAAG,CAACC,IAAJ,CAASC,kBAAWI,cAApB;AACD;;AAED,SAAON,GAAP;AACD;;AAEM,SAASO,iBAAT,CACLC,UADK,EAELzC,WAFK,EAGL0C,oBAHK,EAIO;AAAA;;AACZ,QAAMT,GAAe,GAAG,EAAxB;AAEA,QAAMU,aAAoD,GAAG,sDAAcC,WAAd,mBACnD,CAACC,GAAD,EAAMC,eAAN,KAA0B;AAChC;AACA,QAAIA,eAAe,CAACC,eAApB,EAAqC;AACnCF,MAAAA,GAAG,CAACC,eAAe,CAACC,eAAjB,CAAH,GAAuCD,eAAvC;AACD;;AACD,WAAOD,GAAP;AACD,GAP0D,EAOxD,EAPwD,CAA7D;;AASA,OAAK,IAAInB,WAAT,IAAwB1B,WAAW,CAACC,eAApC,EAAqD;AACnD,UAAM+C,CAAC,GAAGC,kBAAkB,CAACvB,WAAD,EAAc;AAAEgB,MAAAA,oBAAF;AAAwBE,MAAAA,WAAW,EAAED;AAArC,KAAd,CAA5B;;AACA,QAAIK,CAAJ,EAAO;AACL,YAAME,UAAsB,GAAG,IAAIF,CAAJ,CAAMtB,WAAN,CAA/B;AACAO,MAAAA,GAAG,CAACC,IAAJ,CAAUgB,UAAU,CAACC,WAAX,CAAuBV,UAAvB,EAAmCzC,WAAW,CAACoD,OAA/C,CAAV;AACD;AACF;;AAED,OAAK,MAAM,CAAC9C,IAAD,CAAX,IAAqB,sBAAgBN,WAAW,CAACQ,OAAZ,IAAuB,EAAvC,CAArB,EAAkE;AAChEyB,IAAAA,GAAG,CAACC,IAAJ,CAAS;AACP5B,MAAAA,IADO;AAEP+C,MAAAA,MAAM,EAAE,MAAOC,MAAP,IAAmB;AACzB,eAAO,sBAAQb,UAAR,EAAoB;AACzBjC,UAAAA,OAAO,EAAE,CAAC;AAAEF,YAAAA,IAAF;AAAQgD,YAAAA;AAAR,WAAD;AADgB,SAApB,CAAP;AAGD;AANM,KAAT;AAQD;;AAED,SAAOrB,GAAP;AACD;;AAEM,SAASsB,0BAAT,CACLvD,WADK,EAEL+C,eAFK,EAGLS,MAHK,EAIc;AAAA;;AACnB,QAAMC,YAAY,GAAGzD,WAAW,CAACC,eAAZ,IAA+B,EAApD;AACA,QAAMyB,WAAW,GAAG,mBAAA+B,YAAY,MAAZ,CAAAA,YAAY,EAAMC,CAAC,IAAIA,CAAC,CAACpD,IAAF,KAAWyC,eAAtB,CAAhC;;AACA,MAAI,CAACrB,WAAL,EAAkB;AAChB;AACA,oBAAM,gCAA+BqB,eAAgB,kCAArD;AACA,WAAOS,MAAP;AACD,GAPkB,CASnB;;;AACA,QAAMG,oBAAoB,GAAG,iCAAAjC,WAAW,CAACf,KAAZ,kBAA0B,CAACsB,GAAD,EAAM2B,KAAN,KAAgB;AACrE,UAAM;AAAEtD,MAAAA,IAAF;AAAQK,MAAAA;AAAR,QAAkBiD,KAAxB;;AACA,QAAItD,IAAI,KAAK,aAAb,EAA4B;AAC1B2B,MAAAA,GAAG,CAAC3B,IAAD,CAAH,GAAYK,KAAZ,CAD0B,CACP;AACpB,KAFD,MAEO;AACLsB,MAAAA,GAAG,CAAC3B,IAAD,CAAH,GAAYkD,MAAM,CAAClD,IAAD,CAAlB,CADK,CACqB;AAC3B;;AACD,WAAO2B,GAAP;AACD,GAR4B,EAQ1B,EAR0B,CAA7B;AASA,SAAO0B,oBAAP;AACD;;AAED,SAASV,kBAAT,CAA4BvB,WAA5B,EAAyDT,OAAzD,EAAoF;AAClF,QAAM;AAAEyB,IAAAA,oBAAF;AAAwBE,IAAAA;AAAxB,MAAwC3B,OAA9C;;AAEA,MAAI,CAACS,WAAL,EAAkB;AAChB,WAAOmC,SAAP;AACD;;AAED,MAAInB,oBAAJ,EAA0B;AACxB,WAAOoB,oCAAP;AACD,GATiF,CAWlF;;;AACA,SAAOlB,WAAW,CAAElB,WAAW,CAACpB,IAAd,CAAlB;AACD,C,CAED;AACA;;;AACO,SAASyD,aAAT,CACLC,eADK,EAELR,MAFK,EAGLvC,OAHK,EAImB;AACxB;AACA,QAAM2B,WAAW,GAAG3B,OAAO,CAAC2B,WAA5B;AACA,QAAMF,oBAAoB,GAAGzB,OAAO,CAACyB,oBAArC;AAEA,MAAIQ,UAAJ,CALwB,CAMxB;;AACA,MAAIjC,OAAO,CAACgD,IAAZ,EAAkB;AAChB;AACA,UAAMvC,WAAW,GAAG,mBAAAsC,eAAe,MAAf,CAAAA,eAAe,EAAM,CAAC;AAAE1D,MAAAA;AAAF,KAAD,KAAcA,IAAI,KAAKW,OAAO,CAACgD,IAArC,CAAnC;;AACA,QAAIvC,WAAJ,EAAiB;AACf,YAAMsB,CAAC,GAAGC,kBAAkB,CAACvB,WAAD,EAAcT,OAAd,CAA5B;AACA,aAAO+B,CAAC,GAAG,IAAIA,CAAJ,CAAMtB,WAAN,EAAmB8B,MAAnB,EAA2BvC,OAA3B,CAAH,GAAyC4C,SAAjD;AACD,KAHD,MAGO;AACL;AACA,sBAAM,SAAQ5C,OAAO,CAACgD,IAAK,kCAA3B;AACA;AACD;AACF;;AAED,QAAMC,oBAAkC,GAAG,EAA3C;;AACA,MAAIxB,oBAAJ,EAA0B;AACxB;AACAwB,IAAAA,oBAAoB,CAAChC,IAArB,CAA0B,IAAI4B,oCAAJ,CAAsBE,eAAe,CAAC,CAAD,CAArC,EAA0CR,MAA1C,EAAkDvC,OAAlD,CAA1B;AACD,GAHD,MAGO;AACL,SAAK,IAAIS,WAAT,IAAwBsC,eAAxB,EAAyC;AAAA;;AACvC,YAAMG,kBAAkB,GAAG,sDAAYvB,WAAZ,mBAA4ClB,WAAW,CAACpB,IAAxD,CAA3B;;AACA,UAAI,CAAC6D,kBAAL,EAAyB;AACvB;AACD,OAJsC,CAMvC;;;AACA,YAAMnB,CAAC,GAAGC,kBAAkB,CAACvB,WAAD,EAAcT,OAAd,CAA5B;AACAiC,MAAAA,UAAU,GAAG,IAAIF,CAAJ,CAAMtB,WAAN,EAAmB8B,MAAnB,EAA2BvC,OAA3B,CAAb;;AACA,UAAIiC,UAAU,CAACkB,YAAX,EAAJ,EAA+B;AAC7B;AACA,eAAOlB,UAAP;AACD,OAZsC,CAavC;AACA;;;AACAgB,MAAAA,oBAAoB,CAAChC,IAArB,CAA0BgB,UAA1B;AACD;AACF;;AAED,SAAOgB,oBAAoB,CAAC,CAAD,CAA3B;AACD;;AAGM,SAASf,WAAT,CACLV,UADK,EAC0BS,UAD1B,EACkDlD,WADlD,EAEK;AACV,QAAMqE,QAAQ,GAAGnB,UAAU,CAACC,WAAX,CAAuBV,UAAvB,EAAmCzC,WAAW,CAACoD,OAA/C,CAAjB;AACA,QAAMkB,OAAO,GAAGlE,SAAS,CAACJ,WAAD,CAAzB;AACA,QAAMuE,SAAS,GAAGhE,WAAW,CAACP,WAAD,CAA7B;AACA,SAAO,EACL,GAAGqE,QADE;AAEL,QAAIC,OAAO,IAAI;AAACA,MAAAA;AAAD,KAAf,CAFK;AAGL,QAAIC,SAAS,IAAI;AAACA,MAAAA;AAAD,KAAjB;AAHK,GAAP;AAKD;;AAEM,SAASC,cAAT,CAAwB/B,UAAxB,EAAuDgC,CAAvD,EAA0DvB,UAA1D,EAA4F;AACjG;AACA,MAAIlD,WAAW,GAAG,0BAAcyE,CAAd,IAAmBA,CAAnB,GAAuB,IAAzC;;AACA,MAAI,CAACzE,WAAL,EAAkB;AAChB;AACA,UAAMyE,CAAN;AACD;;AACDzE,EAAAA,WAAW,GAAG,EACZ,GAAGA,WADS;AAEZ0E,IAAAA,iBAAiB,EAAE;AAFP,GAAd;AAIA,QAAMC,QAAQ,GAAG5E,kBAAkB,CAACC,WAAD,CAAnC;AACA,QAAMc,QAAQ,GAAGQ,uBAAuB,CAACtB,WAAD,CAAxC;;AACA,MAAI2E,QAAJ,EAAc;AACZ,WAAO;AAAE3E,MAAAA,WAAF;AAAe2E,MAAAA,QAAf;AAAyB7D,MAAAA;AAAzB,KAAP;AACD,GAFD,MAEO;AACL,UAAMuD,QAAQ,GAAGnB,UAAU,IAAIC,WAAW,CAACV,UAAD,EAAaS,UAAb,EAAyBlD,WAAzB,CAA1C;AACA,WAAO;AACLA,MAAAA,WADK;AAELc,MAAAA,QAFK;AAGL,UAAIuD,QAAQ,IAAI;AAAEA,QAAAA;AAAF,OAAhB;AAHK,KAAP;AAKD;AACF","sourcesContent":["import { warn } from '../util';\nimport * as remediators from './remediators';\nimport { RemediationValues, Remediator, RemediatorConstructor } from './remediators';\nimport { GenericRemediator } from './remediators/GenericRemediator';\nimport { proceed } from './proceed';\nimport { IdxFeature, NextStep, RemediateOptions, RemediationResponse } from './types';\nimport { IdxMessage, IdxRemediation, IdxRemediationValue, IdxResponse, isIdxResponse } from './types/idx-js';\nimport { OktaAuthInterface } from '../types';\n\nexport function isTerminalResponse(idxResponse: IdxResponse) {\n const { neededToProceed, interactionCode } = idxResponse;\n return !neededToProceed.length && !interactionCode;\n}\n\nexport function canSkipFn(idxResponse: IdxResponse) {\n return idxResponse.neededToProceed.some(({ name }) => name === 'skip');\n}\n\nexport function canResendFn(idxResponse: IdxResponse) {\n return Object.keys(idxResponse.actions).some(actionName => actionName.includes('resend'));\n}\n\nexport function getMessagesFromIdxRemediationValue(\n value?: IdxRemediationValue[]\n): IdxMessage[] | undefined {\n if (!value || !Array.isArray(value)) {\n return;\n }\n return value.reduce((messages, value) => {\n if (value.messages) {\n messages = [...messages, ...value.messages.value] as never;\n }\n if (value.form) {\n const messagesFromForm = getMessagesFromIdxRemediationValue(value.form.value) || [];\n messages = [...messages, ...messagesFromForm] as never;\n } \n if (value.options) {\n let optionValues = [];\n value.options.forEach(option => {\n if (!option.value || typeof option.value === 'string') {\n return;\n }\n optionValues = [...optionValues, option.value] as never;\n });\n const messagesFromOptions = getMessagesFromIdxRemediationValue(optionValues) || [];\n messages = [...messages, ...messagesFromOptions] as never;\n }\n return messages;\n }, []);\n}\n\nexport function getMessagesFromResponse(idxResponse: IdxResponse): IdxMessage[] {\n let messages: IdxMessage[] = [];\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 = getMessagesFromIdxRemediationValue(remediation.value);\n if (fieldMessages) {\n messages = [...messages, ...fieldMessages] as never;\n }\n }\n\n // API may return identical error on same field, filter by i18n key\n const seen = {};\n messages = messages.reduce((filtered, message) => {\n const key = message.i18n?.key;\n if (key && seen[key]) {\n return filtered;\n }\n seen[key] = message;\n filtered = [...filtered, message] as never;\n return filtered;\n }, []);\n return messages;\n}\n\n\nexport function getEnabledFeatures(idxResponse: IdxResponse): IdxFeature[] {\n const res = [];\n const { actions, neededToProceed } = idxResponse;\n\n if (actions['currentAuthenticator-recover']) {\n res.push(IdxFeature.PASSWORD_RECOVERY as never);\n }\n\n if (neededToProceed.some(({ name }) => name === 'select-enroll-profile')) {\n res.push(IdxFeature.REGISTRATION as never);\n }\n\n if (neededToProceed.some(({ name }) => name === 'redirect-idp')) {\n res.push(IdxFeature.SOCIAL_IDP as never);\n }\n\n if (neededToProceed.some(({ name }) => name === 'unlock-account')) {\n res.push(IdxFeature.ACCOUNT_UNLOCK as never);\n }\n\n return res;\n}\n\nexport function getAvailableSteps(\n authClient: OktaAuthInterface, \n idxResponse: IdxResponse, \n useGenericRemediator?: boolean\n): NextStep[] {\n const res: NextStep[] = [];\n\n const remediatorMap: Record<string, RemediatorConstructor> = Object.values(remediators)\n .reduce((map, remediatorClass) => {\n // Only add concrete subclasses to the map\n if (remediatorClass.remediationName) {\n map[remediatorClass.remediationName] = remediatorClass;\n }\n return map;\n }, {});\n\n for (let remediation of idxResponse.neededToProceed) {\n const T = getRemediatorClass(remediation, { useGenericRemediator, remediators: remediatorMap });\n if (T) {\n const remediator: Remediator = new T(remediation);\n res.push (remediator.getNextStep(authClient, idxResponse.context) as never);\n }\n }\n\n for (const [name] of Object.entries((idxResponse.actions || {}))) {\n res.push({ \n name, \n action: async (params?) => {\n return proceed(authClient, { \n actions: [{ name, params }] \n });\n }\n });\n }\n\n return res;\n}\n\nexport function filterValuesForRemediation(\n idxResponse: IdxResponse,\n remediationName: string,\n values: RemediationValues\n): RemediationValues {\n const remediations = idxResponse.neededToProceed || [];\n const remediation = remediations.find(r => r.name === remediationName);\n if (!remediation) {\n // step was specified, but remediation was not found. This is unexpected!\n warn(`filterValuesForRemediation: \"${remediationName}\" did not match any remediations`);\n return values;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const valuesForRemediation = remediation.value!.reduce((res, entry) => {\n const { name, value } = entry;\n if (name === 'stateHandle') {\n res[name] = value; // use the stateHandle value in the remediation\n } else {\n res[name] = values[name]; // use the value provided by the caller\n }\n return res;\n }, {});\n return valuesForRemediation;\n}\n\nfunction getRemediatorClass(remediation: IdxRemediation, options: RemediateOptions) {\n const { useGenericRemediator, remediators } = options;\n \n if (!remediation) {\n return undefined;\n }\n\n if (useGenericRemediator) {\n return GenericRemediator;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return remediators![remediation.name];\n}\n\n// Return first match idxRemediation in allowed remediators\n// eslint-disable-next-line complexity\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 const useGenericRemediator = options.useGenericRemediator;\n\n let remediator: 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 = getRemediatorClass(remediation, options);\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: Remediator[] = [];\n if (useGenericRemediator) {\n // always pick the first remediation for when use GenericRemediator\n remediatorCandidates.push(new GenericRemediator(idxRemediations[0], values, options));\n } else {\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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const T = getRemediatorClass(remediation, options)!;\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); \n }\n }\n \n return remediatorCandidates[0];\n}\n\n\nexport function getNextStep(\n authClient: OktaAuthInterface, remediator: Remediator, idxResponse: IdxResponse\n): NextStep {\n const nextStep = remediator.getNextStep(authClient, 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\nexport function handleIdxError(authClient: OktaAuthInterface, e, remediator?): RemediationResponse {\n // Handle idx messages\n let idxResponse = isIdxResponse(e) ? e : null;\n if (!idxResponse) {\n // Thrown error terminates the interaction with idx\n throw e;\n }\n idxResponse = {\n ...idxResponse,\n requestDidSucceed: false\n };\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(authClient, remediator, idxResponse);\n return { \n idxResponse,\n messages, \n ...(nextStep && { nextStep }) \n };\n }\n}\n"],"file":"util.js"}
|