@okta/okta-auth-js 6.7.0 → 6.7.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.
Files changed (40) hide show
  1. package/CHANGELOG.md +12 -2
  2. package/cjs/OktaUserAgent.js +2 -2
  3. package/cjs/idx/remediators/GenericRemediator/GenericRemediator.js +25 -12
  4. package/cjs/idx/remediators/GenericRemediator/GenericRemediator.js.map +1 -1
  5. package/cjs/idx/remediators/GenericRemediator/util.js +13 -5
  6. package/cjs/idx/remediators/GenericRemediator/util.js.map +1 -1
  7. package/cjs/idx/types/idx-js.js.map +1 -1
  8. package/cjs/idx/util.js +34 -2
  9. package/cjs/idx/util.js.map +1 -1
  10. package/cjs/util/misc.js +8 -0
  11. package/cjs/util/misc.js.map +1 -1
  12. package/dist/okta-auth-js.min.js +1 -1
  13. package/dist/okta-auth-js.min.js.map +1 -1
  14. package/dist/okta-auth-js.umd.js +1 -1
  15. package/dist/okta-auth-js.umd.js.map +1 -1
  16. package/esm/browser/OktaUserAgent.js +2 -2
  17. package/esm/browser/idx/remediators/GenericRemediator/GenericRemediator.js +5 -6
  18. package/esm/browser/idx/remediators/GenericRemediator/GenericRemediator.js.map +1 -1
  19. package/esm/browser/idx/remediators/GenericRemediator/util.js +11 -53
  20. package/esm/browser/idx/remediators/GenericRemediator/util.js.map +1 -1
  21. package/esm/browser/idx/types/idx-js.js.map +1 -1
  22. package/esm/browser/idx/util.js +13 -2
  23. package/esm/browser/idx/util.js.map +1 -1
  24. package/esm/browser/index.js +1 -1
  25. package/esm/browser/util/misc.js +8 -1
  26. package/esm/browser/util/misc.js.map +1 -1
  27. package/esm/node/OktaUserAgent.js +2 -2
  28. package/esm/node/idx/remediators/GenericRemediator/GenericRemediator.js +5 -6
  29. package/esm/node/idx/remediators/GenericRemediator/GenericRemediator.js.map +1 -1
  30. package/esm/node/idx/remediators/GenericRemediator/util.js +11 -53
  31. package/esm/node/idx/remediators/GenericRemediator/util.js.map +1 -1
  32. package/esm/node/idx/types/idx-js.js.map +1 -1
  33. package/esm/node/idx/util.js +13 -2
  34. package/esm/node/idx/util.js.map +1 -1
  35. package/esm/node/index.js +1 -1
  36. package/esm/node/util/misc.js +8 -1
  37. package/esm/node/util/misc.js.map +1 -1
  38. package/lib/idx/types/idx-js.d.ts +12 -0
  39. package/lib/util/misc.d.ts +1 -0
  40. package/package.json +3 -4
package/CHANGELOG.md CHANGED
@@ -1,8 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 6.7.1
4
+
5
+ ### Fixes
6
+
7
+ - [#1245](https://github.com/okta/okta-auth-js/pull/1245) IDX GenericRemediator patches (beta):
8
+ - disables client side validation
9
+ - fixes ion response primitive types transformation issue
10
+ - adds missing types to `IdxAuthenticator`
11
+ - adds missing action meta to `IdxTransaction.availableSteps`
12
+
3
13
  ## 6.7.0
4
14
 
5
- ## Features
15
+ ### Features
6
16
 
7
17
  - [#1197](https://github.com/okta/okta-auth-js/pull/1197)
8
18
  - Changes implementation of `SyncStorageService` using `broadcast-channel` instead of using `StorageEvent`. Supports `localStorage` and `cookie` storage.
@@ -25,7 +35,7 @@
25
35
 
26
36
  ## 6.6.0
27
37
 
28
- ## Features
38
+ ### Features
29
39
 
30
40
  - [#1225](https://github.com/okta/okta-auth-js/pull/1225) `oktaAuth.start`/`oktaAuth.stop` now return a `Promise`, ensures services have started/stopped before resolving
31
41
  ### Fixes
@@ -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.7.0"}`];
24
+ this.environments = [`okta-auth-js/${"6.7.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.7.0";
39
+ return "6.7.1";
40
40
  }
41
41
 
42
42
  maybeAddNodeEnvironment() {
@@ -4,11 +4,15 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
4
4
 
5
5
  exports.GenericRemediator = void 0;
6
6
 
7
+ var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
8
+
7
9
  var _reduce = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/reduce"));
8
10
 
11
+ var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
12
+
9
13
  var _values = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/values"));
10
14
 
11
- var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
15
+ var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
12
16
 
13
17
  var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
14
18
 
@@ -18,22 +22,31 @@ var _util = require("./util");
18
22
 
19
23
  class GenericRemediator extends _Remediator.Remediator {
20
24
  canRemediate() {
25
+ var _context2, _context3;
26
+
21
27
  // only handle remediations that are able to submit form (xhr)
22
28
  if (typeof this.remediation.action !== 'function') {
23
29
  return false;
24
- }
30
+ } // DO NOT REMOVE - bring it back when enable client side validation for GenericRemediator
31
+ // const inputs = this.getInputs();
32
+ // const res = inputs.reduce((acc, input) => {
33
+ // return acc && hasValidInputValue(input, this.values);
34
+ // }, true);
35
+ // return res;
25
36
 
26
- const inputs = this.getInputs();
27
- const res = (0, _reduce.default)(inputs).call(inputs, (acc, input) => {
28
- return acc && (0, _util.hasValidInputValue)(input, (0, _values.default)(this));
29
- }, true);
30
- return res;
37
+
38
+ const inputKeys = (0, _map.default)(_context2 = this.getInputs()).call(_context2, ({
39
+ name
40
+ }) => name);
41
+ return (0, _reduce.default)(_context3 = (0, _keys.default)((0, _values.default)(this))).call(_context3, (acc, curr) => {
42
+ return acc || (0, _includes.default)(inputKeys).call(inputKeys, curr);
43
+ }, false);
31
44
  }
32
45
 
33
46
  getData() {
34
- var _context2;
47
+ var _context4;
35
48
 
36
- const data = (0, _reduce.default)(_context2 = this.getInputs()).call(_context2, (acc, {
49
+ const data = (0, _reduce.default)(_context4 = this.getInputs()).call(_context4, (acc, {
37
50
  name
38
51
  }) => {
39
52
  acc[name] = (0, _values.default)(this)[name];
@@ -84,11 +97,11 @@ class GenericRemediator extends _Remediator.Remediator {
84
97
  }
85
98
 
86
99
  getInputs() {
87
- var _context3, _context4, _context5;
100
+ var _context5, _context6, _context7;
88
101
 
89
- return (0, _map.default)(_context3 = (0, _map.default)(_context4 = (0, _filter.default)(_context5 = this.remediation.value || []).call(_context5, ({
102
+ return (0, _map.default)(_context5 = (0, _map.default)(_context6 = (0, _filter.default)(_context7 = this.remediation.value || []).call(_context7, ({
90
103
  name
91
- }) => name !== 'stateHandle')).call(_context4, _util.unwrapFormValue)).call(_context3, input => {
104
+ }) => name !== 'stateHandle')).call(_context6, _util.unwrapFormValue)).call(_context5, input => {
92
105
  // use string as default input type
93
106
  input.type = input.type || 'string';
94
107
  return input;
@@ -1 +1 @@
1
- {"version":3,"file":"GenericRemediator.js","names":["GenericRemediator","Remediator","canRemediate","remediation","action","inputs","getInputs","res","acc","input","getData","data","name","getNextStep","authClient","_context","getName","href","method","rel","accepts","produces","value","rest","length","params","idx","proceed","step","unwrapFormValue","type"],"sources":["../../../../../lib/idx/remediators/GenericRemediator/GenericRemediator.ts"],"sourcesContent":["import { IdxContext, NextStep, Input } from '../../types';\nimport { Remediator } from '../Base/Remediator';\nimport { unwrapFormValue, hasValidInputValue } from './util';\nimport { OktaAuthIdxInterface } from '../../../types';\n\nexport class GenericRemediator extends Remediator {\n canRemediate(): boolean {\n // only handle remediations that are able to submit form (xhr)\n if (typeof this.remediation.action !== 'function') {\n return false;\n }\n\n const inputs = this.getInputs();\n const res = inputs.reduce((acc, input) => {\n return acc && hasValidInputValue(input, this.values);\n }, true);\n return res;\n }\n\n getData() {\n const data = this.getInputs().reduce((acc, { name }) => {\n acc[name] = this.values[name];\n return acc;\n }, {});\n return data;\n }\n\n getNextStep(authClient: OktaAuthIdxInterface, _context?: IdxContext): NextStep {\n const name = this.getName();\n const inputs = this.getInputs();\n \n /* eslint-disable no-unused-vars, @typescript-eslint/no-unused-vars */\n // excludes transformed fields\n const { \n // http metas have been transformed to action\n href, \n method, \n rel, \n accepts, \n produces, \n // value has been transform to inputs\n value,\n // will be transformed to a function that resolves IdxTransaction\n action,\n ...rest \n } = this.remediation;\n /* eslint-enable no-unused-vars, @typescript-eslint/no-unused-vars */\n\n // step to handle form submission\n if (action) {\n return { \n ...rest,\n ...(!!inputs.length && { inputs }),\n action: async (params?) => {\n return authClient.idx.proceed({\n step: name,\n ...params\n });\n }\n };\n }\n\n // return whole remediation data for other steps, eg \"redirect-idp\"\n return { ...this.remediation } as NextStep;\n \n }\n\n getInputs(): Input[] {\n return (this.remediation.value || [])\n .filter(({ name }) => name !== 'stateHandle')\n .map(unwrapFormValue)\n .map(input => {\n // use string as default input type\n input.type = input.type || 'string';\n return input;\n });\n }\n\n}\n"],"mappings":";;;;;;;;;;;;;;AACA;;AACA;;AAGO,MAAMA,iBAAN,SAAgCC,sBAAhC,CAA2C;EAChDC,YAAY,GAAY;IACtB;IACA,IAAI,OAAO,KAAKC,WAAL,CAAiBC,MAAxB,KAAmC,UAAvC,EAAmD;MACjD,OAAO,KAAP;IACD;;IAED,MAAMC,MAAM,GAAG,KAAKC,SAAL,EAAf;IACA,MAAMC,GAAG,GAAG,qBAAAF,MAAM,MAAN,CAAAA,MAAM,EAAQ,CAACG,GAAD,EAAMC,KAAN,KAAgB;MACxC,OAAOD,GAAG,IAAI,8BAAmBC,KAAnB,uBAA0B,IAA1B,EAAd;IACD,CAFiB,EAEf,IAFe,CAAlB;IAGA,OAAOF,GAAP;EACD;;EAEDG,OAAO,GAAG;IAAA;;IACR,MAAMC,IAAI,GAAG,sCAAKL,SAAL,oBAAwB,CAACE,GAAD,EAAM;MAAEI;IAAF,CAAN,KAAmB;MACtDJ,GAAG,CAACI,IAAD,CAAH,GAAY,2BAAYA,IAAZ,CAAZ;MACA,OAAOJ,GAAP;IACD,CAHY,EAGV,EAHU,CAAb;IAIA,OAAOG,IAAP;EACD;;EAEDE,WAAW,CAACC,UAAD,EAAmCC,QAAnC,EAAoE;IAC7E,MAAMH,IAAI,GAAG,KAAKI,OAAL,EAAb;IACA,MAAMX,MAAM,GAAG,KAAKC,SAAL,EAAf;IAEA;IACA;;IACA,MAAM;MACJ;MACAW,IAFI;MAGJC,MAHI;MAIJC,GAJI;MAKJC,OALI;MAMJC,QANI;MAOJ;MACAC,KARI;MASJ;MACAlB,MAVI;MAWJ,GAAGmB;IAXC,IAYF,KAAKpB,WAZT;IAaA;IAEA;;IACA,IAAIC,MAAJ,EAAY;MACV,OAAO,EACL,GAAGmB,IADE;QAEL,IAAI,CAAC,CAAClB,MAAM,CAACmB,MAAT,IAAmB;UAAEnB;QAAF,CAAvB,CAFK;QAGLD,MAAM,EAAE,MAAOqB,MAAP,IAAmB;UACzB,OAAOX,UAAU,CAACY,GAAX,CAAeC,OAAf,CAAuB;YAC5BC,IAAI,EAAEhB,IADsB;YAE5B,GAAGa;UAFyB,CAAvB,CAAP;QAID;MARI,CAAP;IAUD,CAjC4E,CAmC7E;;;IACA,OAAO,EAAE,GAAG,KAAKtB;IAAV,CAAP;EAED;;EAEDG,SAAS,GAAY;IAAA;;IACnB,OAAO,6FAAC,KAAKH,WAAL,CAAiBmB,KAAjB,IAA0B,EAA3B,kBACG,CAAC;MAAEV;IAAF,CAAD,KAAcA,IAAI,KAAK,aAD1B,mBAEAiB,qBAFA,mBAGApB,KAAK,IAAI;MACZ;MACAA,KAAK,CAACqB,IAAN,GAAarB,KAAK,CAACqB,IAAN,IAAc,QAA3B;MACA,OAAOrB,KAAP;IACD,CAPI,CAAP;EAQD;;AAvE+C"}
1
+ {"version":3,"file":"GenericRemediator.js","names":["GenericRemediator","Remediator","canRemediate","remediation","action","inputKeys","getInputs","name","acc","curr","getData","data","getNextStep","authClient","_context","getName","inputs","href","method","rel","accepts","produces","value","rest","length","params","idx","proceed","step","unwrapFormValue","input","type"],"sources":["../../../../../lib/idx/remediators/GenericRemediator/GenericRemediator.ts"],"sourcesContent":["import { IdxContext, NextStep, Input } from '../../types';\nimport { Remediator } from '../Base/Remediator';\nimport { unwrapFormValue } from './util';\nimport { OktaAuthIdxInterface } from '../../../types';\n\nexport class GenericRemediator extends Remediator {\n canRemediate(): boolean {\n // only handle remediations that are able to submit form (xhr)\n if (typeof this.remediation.action !== 'function') {\n return false;\n }\n\n // DO NOT REMOVE - bring it back when enable client side validation for GenericRemediator\n // const inputs = this.getInputs();\n // const res = inputs.reduce((acc, input) => {\n // return acc && hasValidInputValue(input, this.values);\n // }, true);\n // return res;\n \n const inputKeys = this.getInputs().map(({ name }) => name);\n return Object.keys(this.values).reduce((acc: boolean, curr) => {\n return acc || inputKeys.includes(curr);\n }, false);\n }\n\n getData() {\n const data = this.getInputs().reduce((acc, { name }) => {\n acc[name] = this.values[name];\n return acc;\n }, {});\n return data;\n }\n\n getNextStep(authClient: OktaAuthIdxInterface, _context?: IdxContext): NextStep {\n const name = this.getName();\n const inputs = this.getInputs();\n \n /* eslint-disable no-unused-vars, @typescript-eslint/no-unused-vars */\n // excludes transformed fields\n const { \n // http metas have been transformed to action\n href, \n method, \n rel, \n accepts, \n produces, \n // value has been transform to inputs\n value,\n // will be transformed to a function that resolves IdxTransaction\n action,\n ...rest \n } = this.remediation;\n /* eslint-enable no-unused-vars, @typescript-eslint/no-unused-vars */\n\n // step to handle form submission\n if (action) {\n return { \n ...rest,\n ...(!!inputs.length && { inputs }),\n action: async (params?) => {\n return authClient.idx.proceed({\n step: name,\n ...params\n });\n }\n };\n }\n\n // return whole remediation data for other steps, eg \"redirect-idp\"\n return { ...this.remediation } as NextStep;\n \n }\n\n getInputs(): Input[] {\n return (this.remediation.value || [])\n .filter(({ name }) => name !== 'stateHandle')\n .map(unwrapFormValue)\n .map(input => {\n // use string as default input type\n input.type = input.type || 'string';\n return input;\n });\n }\n\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AACA;;AACA;;AAGO,MAAMA,iBAAN,SAAgCC,sBAAhC,CAA2C;EAChDC,YAAY,GAAY;IAAA;;IACtB;IACA,IAAI,OAAO,KAAKC,WAAL,CAAiBC,MAAxB,KAAmC,UAAvC,EAAmD;MACjD,OAAO,KAAP;IACD,CAJqB,CAMtB;IACA;IACA;IACA;IACA;IACA;;;IAEA,MAAMC,SAAS,GAAG,mCAAKC,SAAL,oBAAqB,CAAC;MAAEC;IAAF,CAAD,KAAcA,IAAnC,CAAlB;IACA,OAAO,yEAAY,IAAZ,oBAAgC,CAACC,GAAD,EAAeC,IAAf,KAAwB;MAC7D,OAAOD,GAAG,IAAI,uBAAAH,SAAS,MAAT,CAAAA,SAAS,EAAUI,IAAV,CAAvB;IACD,CAFM,EAEJ,KAFI,CAAP;EAGD;;EAEDC,OAAO,GAAG;IAAA;;IACR,MAAMC,IAAI,GAAG,sCAAKL,SAAL,oBAAwB,CAACE,GAAD,EAAM;MAAED;IAAF,CAAN,KAAmB;MACtDC,GAAG,CAACD,IAAD,CAAH,GAAY,2BAAYA,IAAZ,CAAZ;MACA,OAAOC,GAAP;IACD,CAHY,EAGV,EAHU,CAAb;IAIA,OAAOG,IAAP;EACD;;EAEDC,WAAW,CAACC,UAAD,EAAmCC,QAAnC,EAAoE;IAC7E,MAAMP,IAAI,GAAG,KAAKQ,OAAL,EAAb;IACA,MAAMC,MAAM,GAAG,KAAKV,SAAL,EAAf;IAEA;IACA;;IACA,MAAM;MACJ;MACAW,IAFI;MAGJC,MAHI;MAIJC,GAJI;MAKJC,OALI;MAMJC,QANI;MAOJ;MACAC,KARI;MASJ;MACAlB,MAVI;MAWJ,GAAGmB;IAXC,IAYF,KAAKpB,WAZT;IAaA;IAEA;;IACA,IAAIC,MAAJ,EAAY;MACV,OAAO,EACL,GAAGmB,IADE;QAEL,IAAI,CAAC,CAACP,MAAM,CAACQ,MAAT,IAAmB;UAAER;QAAF,CAAvB,CAFK;QAGLZ,MAAM,EAAE,MAAOqB,MAAP,IAAmB;UACzB,OAAOZ,UAAU,CAACa,GAAX,CAAeC,OAAf,CAAuB;YAC5BC,IAAI,EAAErB,IADsB;YAE5B,GAAGkB;UAFyB,CAAvB,CAAP;QAID;MARI,CAAP;IAUD,CAjC4E,CAmC7E;;;IACA,OAAO,EAAE,GAAG,KAAKtB;IAAV,CAAP;EAED;;EAEDG,SAAS,GAAY;IAAA;;IACnB,OAAO,6FAAC,KAAKH,WAAL,CAAiBmB,KAAjB,IAA0B,EAA3B,kBACG,CAAC;MAAEf;IAAF,CAAD,KAAcA,IAAI,KAAK,aAD1B,mBAEAsB,qBAFA,mBAGAC,KAAK,IAAI;MACZ;MACAA,KAAK,CAACC,IAAN,GAAaD,KAAK,CAACC,IAAN,IAAc,QAA3B;MACA,OAAOD,KAAP;IACD,CAPI,CAAP;EAQD;;AA7E+C"}
@@ -5,10 +5,10 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
5
5
  exports.unwrapFormValue = unwrapFormValue;
6
6
  exports.hasValidInputValue = hasValidInputValue;
7
7
 
8
- var _entries = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/entries"));
9
-
10
8
  var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
11
9
 
10
+ var _entries = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/entries"));
11
+
12
12
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
13
13
 
14
14
  var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
@@ -25,6 +25,16 @@ var _errors = require("../../../errors");
25
25
 
26
26
  /* eslint-disable complexity */
27
27
  function unwrapFormValue(remediation) {
28
+ if (Array.isArray(remediation)) {
29
+ return (0, _map.default)(remediation).call(remediation, item => {
30
+ if (typeof item === 'string' || typeof item === 'number' || typeof item === 'boolean') {
31
+ return item;
32
+ }
33
+
34
+ return unwrapFormValue(item);
35
+ });
36
+ }
37
+
28
38
  const res = {};
29
39
 
30
40
  for (const [key, value] of (0, _entries.default)(remediation)) {
@@ -32,9 +42,7 @@ function unwrapFormValue(remediation) {
32
42
  continue;
33
43
  }
34
44
 
35
- if (Array.isArray(value)) {
36
- res[key] = (0, _map.default)(value).call(value, unwrapFormValue);
37
- } else if (typeof value === 'object') {
45
+ if (typeof value === 'object') {
38
46
  var _context, _context2;
39
47
 
40
48
  const formKeys = (0, _keys.default)(value); // detect patterns like:
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","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"],"sources":["../../../../../lib/idx/remediators/GenericRemediator/util.ts"],"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 // 3. unknown format - pass to backend for validation\n if (options) {\n // object type options\n if (type === 'object') {\n const selectedOption = values[name];\n if (!selectedOption) {\n return false;\n }\n if (!selectedOption.id) {\n // unknown option format, pass to backend for validation\n return true;\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"],"mappings":"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"}
1
+ {"version":3,"file":"util.js","names":["unwrapFormValue","remediation","Array","isArray","item","res","key","value","formKeys","length","unwrappedForm","forEach","hasValidInputValue","input","values","fn","requiredTracker","name","type","options","required","isRequired","acc","selectedOption","id","optionSchema","option","idSchema","AuthSdkError"],"sources":["../../../../../lib/idx/remediators/GenericRemediator/util.ts"],"sourcesContent":["/* eslint-disable complexity */\nimport { AuthSdkError } from '../../../errors';\nimport { Input } from '../../types';\n\nexport function unwrapFormValue(remediation): Input { \n if (Array.isArray(remediation)) {\n return remediation\n .map(item => {\n if (typeof item === 'string' || typeof item === 'number' || typeof item === 'boolean') {\n return item;\n }\n return unwrapFormValue(item);\n }) as any;\n }\n\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 (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 // 3. unknown format - pass to backend for validation\n if (options) {\n // object type options\n if (type === 'object') {\n const selectedOption = values[name];\n if (!selectedOption) {\n return false;\n }\n if (!selectedOption.id) {\n // unknown option format, pass to backend for validation\n return true;\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"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"idx-js.js","names":["isRawIdxResponse","obj","version","isIdxResponse","rawIdxState"],"sources":["../../../../lib/idx/types/idx-js.ts"],"sourcesContent":["/* eslint-disable no-use-before-define */\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\nimport { Input } from './api';\n\n\n// TODO: remove when idx-js provides type information\n\nexport interface ChallengeData {\n challenge: string; \n userVerification: string; \n extensions?: {\n appid: string;\n };\n}\nexport interface ActivationData {\n challenge: string;\n rp: {\n name: string;\n };\n user: {\n id: string;\n name: string;\n displayName: string;\n };\n pubKeyCredParams: {\n type: string;\n alg: number;\n }[];\n attestation?: string;\n authenticatorSelection?: {\n userVerification?: string;\n authenticatorAttachment?: string;\n requireResidentKey?: boolean;\n residentKey?: string;\n };\n excludeCredentials?: {\n id: string;\n type: string;\n }[];\n}\nexport interface IdxAuthenticatorMethod {\n type: string;\n}\nexport interface IdxAuthenticator {\n displayName: string;\n id: string;\n key: string;\n methods: IdxAuthenticatorMethod[];\n type: string;\n settings?: {\n complexity?: unknown;\n age?: unknown;\n };\n contextualData?: {\n enrolledQuestion?: {\n question: string;\n questionKey: string;\n };\n qrcode?: { \n href: string; \n method: string; \n type: string; \n };\n sharedSecret?: string;\n questions?: {\n questionKey: string;\n question: string;\n }[];\n questionKeys?: string[];\n selectedChannel?: string;\n activationData?: ActivationData;\n challengeData?: ChallengeData;\n };\n credentialId?: string;\n enrollmentId?: string;\n}\n\nexport interface IdxForm {\n value: IdxRemediationValue[];\n}\n\nexport interface IdxOption {\n value: string | {form: IdxForm} | Input[];\n label: string;\n relatesTo?: IdxAuthenticator;\n}\n\nexport interface IdpConfig {\n id: string;\n name: string;\n}\n\nexport interface IdxRemediationValueForm {\n form: IdxForm;\n}\n\nexport interface IdxRemediationValue {\n name: string;\n type?: string;\n required?: boolean;\n secret?: boolean;\n visible?: boolean;\n mutable?: boolean;\n value?: string | IdxRemediationValueForm;\n label?: string;\n form?: IdxForm;\n options?: IdxOption[];\n messages?: IdxMessages;\n minLength?: number;\n maxLength?: number;\n}\n\nexport interface IdxRemediation {\n name: string;\n label?: string;\n value?: IdxRemediationValue[];\n relatesTo?: {\n type?: string;\n value: IdxAuthenticator;\n };\n idp?: IdpConfig;\n href?: string;\n method?: string;\n type?: string;\n accepts?: string;\n produces?: string;\n refresh?: number;\n rel?: string[];\n action?: (payload?: IdxActionParams) => Promise<IdxResponse>;\n}\n\nexport interface IdxContext {\n version: string;\n stateHandle: string;\n expiresAt: string;\n intent: string;\n currentAuthenticator: {\n type: string;\n value: IdxAuthenticator;\n };\n authenticators: {\n type: string;\n value: IdxAuthenticator[];\n };\n authenticatorEnrollments: {\n type: string;\n value: IdxAuthenticator[];\n };\n enrollmentAuthenticator: {\n type: string;\n value: IdxAuthenticator;\n };\n user?: {\n type: string;\n value: Record<string, unknown>;\n };\n app: {\n type: string;\n value: Record<string, unknown>;\n };\n messages?: IdxMessages;\n success?: IdxRemediation;\n failure?: IdxRemediation;\n}\n\nexport interface IdxMessage {\n message: string;\n class: string;\n i18n: {\n key: string;\n params?: unknown[];\n };\n}\n\nexport interface IdxMessages {\n type: 'array';\n value: IdxMessage[];\n}\n\n// JSON response from the server\nexport interface RawIdxResponse {\n version: string;\n stateHandle: string;\n intent?: string;\n expiresAt?: string;\n remediation?: {\n type: 'array';\n value: IdxRemediation[];\n };\n messages?: IdxMessages;\n success?: boolean;\n successWithInteractionCode?: IdxRemediation;\n}\n\nexport function isRawIdxResponse(obj: any): obj is RawIdxResponse {\n return obj && obj.version;\n}\n\nexport interface IdxActionParams {\n [key: string]: string | boolean | number | object;\n}\n\nexport interface IdxActions {\n [key: string]: (params?: IdxActionParams) => Promise<IdxResponse>;\n}\n\nexport interface IdxToPersist {\n interactionHandle?: string;\n withCredentials?: boolean;\n}\n\nexport interface IdxActionFunction {\n (params: IdxActionParams): Promise<IdxResponse>;\n neededParams?: Array<Array<IdxRemediationValue>>;\n}\n\nexport interface IdxResponse {\n proceed: (remediationName: string, params: unknown) => Promise<IdxResponse>;\n neededToProceed: IdxRemediation[];\n rawIdxState: RawIdxResponse;\n interactionCode?: string;\n actions: IdxActions;\n toPersist: IdxToPersist;\n context?: IdxContext;\n requestDidSucceed?: boolean;\n stepUp?: boolean;\n}\n\nexport function isIdxResponse(obj: any): obj is IdxResponse {\n return obj && isRawIdxResponse(obj.rawIdxState);\n}\n"],"mappings":";;;;;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AA8KA;AAeO,SAASA,gBAAT,CAA0BC,GAA1B,EAA2D;EAChE,OAAOA,GAAG,IAAIA,GAAG,CAACC,OAAlB;AACD;;AAgCM,SAASC,aAAT,CAAuBF,GAAvB,EAAqD;EAC1D,OAAOA,GAAG,IAAID,gBAAgB,CAACC,GAAG,CAACG,WAAL,CAA9B;AACD"}
1
+ {"version":3,"file":"idx-js.js","names":["isRawIdxResponse","obj","version","isIdxResponse","rawIdxState"],"sources":["../../../../lib/idx/types/idx-js.ts"],"sourcesContent":["/* eslint-disable no-use-before-define */\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\nimport { Input } from './api';\n\n\n// TODO: remove when idx-js provides type information\n\nexport interface ChallengeData {\n challenge: string; \n userVerification: string; \n extensions?: {\n appid: string;\n };\n}\nexport interface ActivationData {\n challenge: string;\n rp: {\n name: string;\n };\n user: {\n id: string;\n name: string;\n displayName: string;\n };\n pubKeyCredParams: {\n type: string;\n alg: number;\n }[];\n attestation?: string;\n authenticatorSelection?: {\n userVerification?: string;\n authenticatorAttachment?: string;\n requireResidentKey?: boolean;\n residentKey?: string;\n };\n excludeCredentials?: {\n id: string;\n type: string;\n }[];\n}\nexport interface IdxAuthenticatorMethod {\n type: string;\n}\nexport interface IdxAuthenticator {\n displayName: string;\n id: string;\n key: string;\n methods: IdxAuthenticatorMethod[];\n type: string;\n settings?: {\n complexity?: unknown;\n age?: unknown;\n };\n contextualData?: {\n enrolledQuestion?: {\n question: string;\n questionKey: string;\n };\n qrcode?: { \n href: string; \n method: string; \n type: string; \n };\n sharedSecret?: string;\n questions?: {\n questionKey: string;\n question: string;\n }[];\n questionKeys?: string[];\n selectedChannel?: string;\n activationData?: ActivationData;\n challengeData?: ChallengeData;\n };\n credentialId?: string;\n enrollmentId?: string;\n profile?: Record<string, unknown>;\n resend?: Record<string, unknown>;\n poll?: Record<string, unknown>;\n recover?: Record<string, unknown>;\n}\n\nexport interface IdxForm {\n value: IdxRemediationValue[];\n}\n\nexport interface IdxOption {\n value: string | {form: IdxForm} | Input[];\n label: string;\n relatesTo?: IdxAuthenticator;\n}\n\nexport interface IdpConfig {\n id: string;\n name: string;\n}\n\nexport interface IdxRemediationValueForm {\n form: IdxForm;\n}\n\nexport interface IdxRemediationValue {\n name: string;\n type?: string;\n required?: boolean;\n secret?: boolean;\n visible?: boolean;\n mutable?: boolean;\n value?: string | IdxRemediationValueForm;\n label?: string;\n form?: IdxForm;\n options?: IdxOption[];\n messages?: IdxMessages;\n minLength?: number;\n maxLength?: number;\n}\n\nexport interface IdxRemediation {\n name: string;\n label?: string;\n value?: IdxRemediationValue[];\n relatesTo?: {\n type?: string;\n value: IdxAuthenticator;\n };\n idp?: IdpConfig;\n href?: string;\n method?: string;\n type?: string;\n accepts?: string;\n produces?: string;\n refresh?: number;\n rel?: string[];\n action?: (payload?: IdxActionParams) => Promise<IdxResponse>;\n}\n\nexport interface IdxContext {\n version: string;\n stateHandle: string;\n expiresAt: string;\n intent: string;\n currentAuthenticator: {\n type: string;\n value: IdxAuthenticator;\n };\n authenticators: {\n type: string;\n value: IdxAuthenticator[];\n };\n authenticatorEnrollments: {\n type: string;\n value: IdxAuthenticator[];\n };\n enrollmentAuthenticator: {\n type: string;\n value: IdxAuthenticator;\n };\n user?: {\n type: string;\n value: Record<string, unknown>;\n };\n app: {\n type: string;\n value: Record<string, unknown>;\n };\n messages?: IdxMessages;\n success?: IdxRemediation;\n failure?: IdxRemediation;\n}\n\nexport interface IdxMessage {\n message: string;\n class: string;\n i18n: {\n key: string;\n params?: unknown[];\n };\n}\n\nexport interface IdxMessages {\n type: 'array';\n value: IdxMessage[];\n}\n\n// JSON response from the server\nexport interface RawIdxResponse {\n version: string;\n stateHandle: string;\n intent?: string;\n expiresAt?: string;\n remediation?: {\n type: 'array';\n value: IdxRemediation[];\n };\n messages?: IdxMessages;\n success?: boolean;\n successWithInteractionCode?: IdxRemediation;\n currentAuthenticator?: {\n type: string;\n value: IdxAuthenticator;\n };\n currentAuthenticatorEnrollment?: {\n type: string;\n value: IdxAuthenticator;\n };\n}\n\nexport function isRawIdxResponse(obj: any): obj is RawIdxResponse {\n return obj && obj.version;\n}\n\nexport interface IdxActionParams {\n [key: string]: string | boolean | number | object;\n}\n\nexport interface IdxActions {\n [key: string]: (params?: IdxActionParams) => Promise<IdxResponse>;\n}\n\nexport interface IdxToPersist {\n interactionHandle?: string;\n withCredentials?: boolean;\n}\n\nexport interface IdxActionFunction {\n (params: IdxActionParams): Promise<IdxResponse>;\n neededParams?: Array<Array<IdxRemediationValue>>;\n}\n\nexport interface IdxResponse {\n proceed: (remediationName: string, params: unknown) => Promise<IdxResponse>;\n neededToProceed: IdxRemediation[];\n rawIdxState: RawIdxResponse;\n interactionCode?: string;\n actions: IdxActions;\n toPersist: IdxToPersist;\n context?: IdxContext;\n requestDidSucceed?: boolean;\n stepUp?: boolean;\n}\n\nexport function isIdxResponse(obj: any): obj is IdxResponse {\n return obj && isRawIdxResponse(obj.rawIdxState);\n}\n"],"mappings":";;;;;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAkLA;AAuBO,SAASA,gBAAT,CAA0BC,GAA1B,EAA2D;EAChE,OAAOA,GAAG,IAAIA,GAAG,CAACC,OAAlB;AACD;;AAgCM,SAASC,aAAT,CAAuBF,GAAvB,EAAqD;EAC1D,OAAOA,GAAG,IAAID,gBAAgB,CAACC,GAAG,CAACG,WAAL,CAA9B;AACD"}
package/cjs/idx/util.js CHANGED
@@ -30,6 +30,10 @@ var _values = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-sta
30
30
 
31
31
  var _entries = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/entries"));
32
32
 
33
+ var _startsWith = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/starts-with"));
34
+
35
+ var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
36
+
33
37
  var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
34
38
 
35
39
  var _util = require("../util");
@@ -200,7 +204,7 @@ function getAvailableSteps(authClient, idxResponse, useGenericRemediator) {
200
204
  }
201
205
 
202
206
  for (const [name] of (0, _entries.default)(idxResponse.actions || {})) {
203
- res.push({
207
+ let stepObj = {
204
208
  name,
205
209
  action: async params => {
206
210
  return authClient.idx.proceed({
@@ -210,7 +214,35 @@ function getAvailableSteps(authClient, idxResponse, useGenericRemediator) {
210
214
  }]
211
215
  });
212
216
  }
213
- });
217
+ };
218
+
219
+ if ((0, _startsWith.default)(name).call(name, 'currentAuthenticator')) {
220
+ var _actionObj$value;
221
+
222
+ const [part1, part2] = (0, _util.split2)(name, '-');
223
+ const actionObj = idxResponse.rawIdxState[part1].value[part2];
224
+ /* eslint-disable no-unused-vars, @typescript-eslint/no-unused-vars */
225
+
226
+ const {
227
+ href,
228
+ method,
229
+ rel,
230
+ accepts,
231
+ produces,
232
+ ...rest
233
+ } = actionObj;
234
+ /* eslint-enable no-unused-vars, @typescript-eslint/no-unused-vars */
235
+
236
+ const value = (_actionObj$value = actionObj.value) === null || _actionObj$value === void 0 ? void 0 : (0, _filter.default)(_actionObj$value).call(_actionObj$value, item => item.name !== 'stateHandle');
237
+ stepObj = { ...rest,
238
+ ...(value && {
239
+ value
240
+ }),
241
+ ...stepObj
242
+ };
243
+ }
244
+
245
+ res.push(stepObj);
214
246
  }
215
247
 
216
248
  return res;
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","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","useGenericRemediator","remediation","fieldMessages","seen","filtered","key","i18n","getEnabledFeatures","res","push","IdxFeature","PASSWORD_RECOVERY","REGISTRATION","SOCIAL_IDP","ACCOUNT_UNLOCK","getAvailableSteps","authClient","remediatorMap","remediators","map","remediatorClass","remediationName","T","getRemediatorClass","remediator","getNextStep","context","action","params","idx","proceed","filterValuesForRemediation","values","remediations","r","valuesForRemediation","entry","undefined","GenericRemediator","getRemediator","idxRemediations","step","remediatorCandidates","isRemeditionInFlow","canRemediate","nextStep","canSkip","canResend","handleIdxError","e","requestDidSucceed","terminal"],"sources":["../../../lib/idx/util.ts"],"sourcesContent":["import { warn } from '../util';\nimport * as remediators from './remediators';\nimport { RemediationValues, Remediator, RemediatorConstructor } from './remediators';\nimport { GenericRemediator } from './remediators/GenericRemediator';\nimport { IdxFeature, NextStep, RemediateOptions, RemediationResponse, RunOptions } from './types';\nimport { IdxMessage, IdxRemediation, IdxRemediationValue, IdxResponse, isIdxResponse } from './types/idx-js';\nimport { OktaAuthIdxInterface } 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, options: RunOptions): 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 // Preserve existing logic for general cases, remove in the next major version\n // Follow ion response format for top level messages when useGenericRemediator is true\n if (!options.useGenericRemediator) {\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\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: OktaAuthIdxInterface, \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 authClient.idx.proceed({ \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: OktaAuthIdxInterface, 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: OktaAuthIdxInterface, e, options = {}): 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 remediator = getRemediator(idxResponse.neededToProceed, {}, options);\n const nextStep = remediator && getNextStep(authClient, remediator, idxResponse);\n return {\n idxResponse,\n ...(terminal && { terminal }),\n ...(!terminal && nextStep && { nextStep }) \n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"util.js","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","useGenericRemediator","remediation","fieldMessages","seen","filtered","key","i18n","getEnabledFeatures","res","push","IdxFeature","PASSWORD_RECOVERY","REGISTRATION","SOCIAL_IDP","ACCOUNT_UNLOCK","getAvailableSteps","authClient","remediatorMap","remediators","map","remediatorClass","remediationName","T","getRemediatorClass","remediator","getNextStep","context","stepObj","action","params","idx","proceed","part1","part2","actionObj","href","method","rel","accepts","produces","rest","item","filterValuesForRemediation","values","remediations","r","valuesForRemediation","entry","undefined","GenericRemediator","getRemediator","idxRemediations","step","remediatorCandidates","isRemeditionInFlow","canRemediate","nextStep","canSkip","canResend","handleIdxError","e","requestDidSucceed","terminal"],"sources":["../../../lib/idx/util.ts"],"sourcesContent":["import { warn, split2 } from '../util';\nimport * as remediators from './remediators';\nimport { RemediationValues, Remediator, RemediatorConstructor } from './remediators';\nimport { GenericRemediator } from './remediators/GenericRemediator';\nimport { IdxFeature, NextStep, RemediateOptions, RemediationResponse, RunOptions } from './types';\nimport { IdxMessage, IdxRemediation, IdxRemediationValue, IdxResponse, isIdxResponse } from './types/idx-js';\nimport { OktaAuthIdxInterface } 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, options: RunOptions): 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 // Preserve existing logic for general cases, remove in the next major version\n // Follow ion response format for top level messages when useGenericRemediator is true\n if (!options.useGenericRemediator) {\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\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: OktaAuthIdxInterface, \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 let stepObj = {\n name, \n action: async (params?) => {\n return authClient.idx.proceed({ \n actions: [{ name, params }] \n });\n }\n };\n if (name.startsWith('currentAuthenticator')) {\n const [part1, part2] = split2(name, '-');\n const actionObj = idxResponse.rawIdxState[part1].value[part2];\n /* eslint-disable no-unused-vars, @typescript-eslint/no-unused-vars */\n const {\n href, \n method, \n rel, \n accepts, \n produces, \n ...rest\n } = actionObj;\n /* eslint-enable no-unused-vars, @typescript-eslint/no-unused-vars */\n const value = actionObj.value?.filter(item => item.name !== 'stateHandle');\n stepObj = { \n ...rest, \n ...(value && { value }),\n ...stepObj,\n };\n }\n res.push(stepObj);\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: OktaAuthIdxInterface, 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: OktaAuthIdxInterface, e, options = {}): 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 remediator = getRemediator(idxResponse.neededToProceed, {}, options);\n const nextStep = remediator && getNextStep(authClient, remediator, idxResponse);\n return {\n idxResponse,\n ...(terminal && { terminal }),\n ...(!terminal && nextStep && { nextStep }) \n };\n}\n"],"mappings":"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"}
package/cjs/util/misc.js CHANGED
@@ -5,9 +5,12 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
5
5
  exports.isoToUTCString = isoToUTCString;
6
6
  exports.genRandomString = genRandomString;
7
7
  exports.delay = delay;
8
+ exports.split2 = split2;
8
9
 
9
10
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/promise"));
10
11
 
12
+ var _splice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/splice"));
13
+
11
14
  /*!
12
15
  * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.
13
16
  * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
@@ -42,4 +45,9 @@ function delay(ms) {
42
45
  setTimeout(resolve, ms);
43
46
  });
44
47
  }
48
+
49
+ function split2(str, delim) {
50
+ const parts = str.split(delim);
51
+ return [parts[0], (0, _splice.default)(parts).call(parts, 1, parts.length).join(delim)];
52
+ }
45
53
  //# sourceMappingURL=misc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"misc.js","names":["isoToUTCString","str","parts","match","isoTime","Date","UTC","isoDate","toUTCString","genRandomString","length","randomCharset","random","c","cl","Math","floor","delay","ms","resolve","setTimeout"],"sources":["../../../lib/util/misc.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nexport function isoToUTCString(str) {\n var parts = str.match(/\\d+/g),\n isoTime = Date.UTC(parts[0], parts[1] - 1, parts[2], parts[3], parts[4], parts[5]),\n isoDate = new Date(isoTime);\n\n return isoDate.toUTCString();\n}\n\nexport function genRandomString(length) {\n var randomCharset = 'abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';\n var random = '';\n for (var c = 0, cl = randomCharset.length; c < length; ++c) {\n random += randomCharset[Math.floor(Math.random() * cl)];\n }\n return random;\n}\n\nexport function delay(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n}\n"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEO,SAASA,cAAT,CAAwBC,GAAxB,EAA6B;EAClC,IAAIC,KAAK,GAAGD,GAAG,CAACE,KAAJ,CAAU,MAAV,CAAZ;EAAA,IACIC,OAAO,GAAGC,IAAI,CAACC,GAAL,CAASJ,KAAK,CAAC,CAAD,CAAd,EAAmBA,KAAK,CAAC,CAAD,CAAL,GAAW,CAA9B,EAAiCA,KAAK,CAAC,CAAD,CAAtC,EAA2CA,KAAK,CAAC,CAAD,CAAhD,EAAqDA,KAAK,CAAC,CAAD,CAA1D,EAA+DA,KAAK,CAAC,CAAD,CAApE,CADd;EAAA,IAEIK,OAAO,GAAG,IAAIF,IAAJ,CAASD,OAAT,CAFd;EAIA,OAAOG,OAAO,CAACC,WAAR,EAAP;AACD;;AAEM,SAASC,eAAT,CAAyBC,MAAzB,EAAiC;EACtC,IAAIC,aAAa,GAAG,+DAApB;EACA,IAAIC,MAAM,GAAG,EAAb;;EACA,KAAK,IAAIC,CAAC,GAAG,CAAR,EAAWC,EAAE,GAAGH,aAAa,CAACD,MAAnC,EAA2CG,CAAC,GAAGH,MAA/C,EAAuD,EAAEG,CAAzD,EAA4D;IAC1DD,MAAM,IAAID,aAAa,CAACI,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACH,MAAL,KAAgBE,EAA3B,CAAD,CAAvB;EACD;;EACD,OAAOF,MAAP;AACD;;AAEM,SAASK,KAAT,CAAeC,EAAf,EAAmB;EACxB,OAAO,qBAAY,UAASC,OAAT,EAAkB;IACnCC,UAAU,CAACD,OAAD,EAAUD,EAAV,CAAV;EACD,CAFM,CAAP;AAGD"}
1
+ {"version":3,"file":"misc.js","names":["isoToUTCString","str","parts","match","isoTime","Date","UTC","isoDate","toUTCString","genRandomString","length","randomCharset","random","c","cl","Math","floor","delay","ms","resolve","setTimeout","split2","delim","split","join"],"sources":["../../../lib/util/misc.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nexport function isoToUTCString(str) {\n var parts = str.match(/\\d+/g),\n isoTime = Date.UTC(parts[0], parts[1] - 1, parts[2], parts[3], parts[4], parts[5]),\n isoDate = new Date(isoTime);\n\n return isoDate.toUTCString();\n}\n\nexport function genRandomString(length) {\n var randomCharset = 'abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';\n var random = '';\n for (var c = 0, cl = randomCharset.length; c < length; ++c) {\n random += randomCharset[Math.floor(Math.random() * cl)];\n }\n return random;\n}\n\nexport function delay(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n}\n\nexport function split2(str, delim) {\n const parts = str.split(delim);\n return [\n parts[0], \n parts.splice(1, parts.length).join(delim),\n ];\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEO,SAASA,cAAT,CAAwBC,GAAxB,EAA6B;EAClC,IAAIC,KAAK,GAAGD,GAAG,CAACE,KAAJ,CAAU,MAAV,CAAZ;EAAA,IACIC,OAAO,GAAGC,IAAI,CAACC,GAAL,CAASJ,KAAK,CAAC,CAAD,CAAd,EAAmBA,KAAK,CAAC,CAAD,CAAL,GAAW,CAA9B,EAAiCA,KAAK,CAAC,CAAD,CAAtC,EAA2CA,KAAK,CAAC,CAAD,CAAhD,EAAqDA,KAAK,CAAC,CAAD,CAA1D,EAA+DA,KAAK,CAAC,CAAD,CAApE,CADd;EAAA,IAEIK,OAAO,GAAG,IAAIF,IAAJ,CAASD,OAAT,CAFd;EAIA,OAAOG,OAAO,CAACC,WAAR,EAAP;AACD;;AAEM,SAASC,eAAT,CAAyBC,MAAzB,EAAiC;EACtC,IAAIC,aAAa,GAAG,+DAApB;EACA,IAAIC,MAAM,GAAG,EAAb;;EACA,KAAK,IAAIC,CAAC,GAAG,CAAR,EAAWC,EAAE,GAAGH,aAAa,CAACD,MAAnC,EAA2CG,CAAC,GAAGH,MAA/C,EAAuD,EAAEG,CAAzD,EAA4D;IAC1DD,MAAM,IAAID,aAAa,CAACI,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACH,MAAL,KAAgBE,EAA3B,CAAD,CAAvB;EACD;;EACD,OAAOF,MAAP;AACD;;AAEM,SAASK,KAAT,CAAeC,EAAf,EAAmB;EACxB,OAAO,qBAAY,UAASC,OAAT,EAAkB;IACnCC,UAAU,CAACD,OAAD,EAAUD,EAAV,CAAV;EACD,CAFM,CAAP;AAGD;;AAEM,SAASG,MAAT,CAAgBpB,GAAhB,EAAqBqB,KAArB,EAA4B;EACjC,MAAMpB,KAAK,GAAGD,GAAG,CAACsB,KAAJ,CAAUD,KAAV,CAAd;EACA,OAAO,CACLpB,KAAK,CAAC,CAAD,CADA,EAEL,qBAAAA,KAAK,MAAL,CAAAA,KAAK,EAAQ,CAAR,EAAWA,KAAK,CAACQ,MAAjB,CAAL,CAA8Bc,IAA9B,CAAmCF,KAAnC,CAFK,CAAP;AAID"}