@genesislcap/foundation-auth 15.46.6-alpha-606571609.0 → 15.48.0

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.
@@ -77,11 +77,13 @@ export type JWTCredentials = {
77
77
  /**
78
78
  * @remarks
79
79
  * Will be sourced from MFA_CODE in url params.
80
+ * Set `mfaResend` to request a new code without submitting one (AUTH-473 / FUI-2625).
80
81
  * @public
81
82
  */
82
83
  export type MFACredentials = {
83
84
  type: CredentialType & CredentialType.MFA;
84
- mfaToken: string;
85
+ mfaToken?: string;
86
+ mfaResend?: boolean;
85
87
  };
86
88
  /**
87
89
  * Union of all credential types.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/credential/types.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,6BAA6B,CAAC;CACvC;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,+EAAgD,CAAC;AAErF;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,sBAAsB,GAAG;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,wBAAwB,GAAG,EAAE,CAAC;AAEjE;;;GAGG;AACH,oBAAY,cAAc;IACxB,KAAK,UAAU;IACf,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,GAAG,QAAQ;CACZ;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,WAAW,GACnB,gBAAgB,GAChB,cAAc,GACd,cAAc,GACd,kBAAkB,GAClB,cAAc,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/credential/types.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,6BAA6B,CAAC;CACvC;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,+EAAgD,CAAC;AAErF;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,sBAAsB,GAAG;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,wBAAwB,GAAG,EAAE,CAAC;AAEjE;;;GAGG;AACH,oBAAY,cAAc;IACxB,KAAK,UAAU;IACf,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,GAAG,QAAQ;CACZ;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,WAAW,GACnB,gBAAgB,GAChB,cAAc,GACd,cAAc,GACd,kBAAkB,GAClB,cAAc,CAAC"}
@@ -15,7 +15,9 @@ export interface EVENT_LOGIN_AUTH extends MESSAGE {
15
15
  readonly JWT: string;
16
16
  readonly DOMAIN: string;
17
17
  } | {
18
- readonly MFA_CODE: string;
18
+ readonly MFA_CODE?: string;
19
+ /** When true, requests a new MFA code (AUTH-473). */
20
+ readonly MFA_RESEND?: boolean;
19
21
  };
20
22
  }
21
23
  //# sourceMappingURL=EVENT_LOGIN_AUTH.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EVENT_LOGIN_AUTH.d.ts","sourceRoot":"","sources":["../../../src/dto/EVENT_LOGIN_AUTH.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,OAAO;IAC/C,QAAQ,CAAC,OAAO,EACZ;QACE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC3B,GACD;QACE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;KACrC,GACD;QACE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;KAC5B,GACD;QACE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,GACD;QACE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC3B,CAAC;CACP"}
1
+ {"version":3,"file":"EVENT_LOGIN_AUTH.d.ts","sourceRoot":"","sources":["../../../src/dto/EVENT_LOGIN_AUTH.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,OAAO;IAC/C,QAAQ,CAAC,OAAO,EACZ;QACE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC3B,GACD;QACE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;KACrC,GACD;QACE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;KAC5B,GACD;QACE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,GACD;QACE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAC3B,qDAAqD;QACrD,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;KAC/B,CAAC;CACP"}
@@ -1,4 +1,9 @@
1
1
  import type { NACK } from './NACK';
2
+ /**
3
+ * MFA delivery mechanism returned on MFA_REQUIRED / MFA_FAILED NACKs (AUTH-473).
4
+ * @public
5
+ */
6
+ export type MFA_TYPE = 'NOTIFY' | 'QR_CODE';
2
7
  /**
3
8
  * @public
4
9
  */
@@ -8,5 +13,9 @@ export interface EVENT_LOGIN_AUTH_NACK extends NACK {
8
13
  */
9
14
  readonly REFRESH_AUTH_TOKEN: string;
10
15
  readonly REFRESH_TOKEN_EXPIRATION_MINS: number;
16
+ /**
17
+ * MFA type when MFA is required or has failed (AUTH-473).
18
+ */
19
+ readonly MFA_TYPE?: MFA_TYPE;
11
20
  }
12
21
  //# sourceMappingURL=EVENT_LOGIN_AUTH_NACK.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EVENT_LOGIN_AUTH_NACK.d.ts","sourceRoot":"","sources":["../../../src/dto/EVENT_LOGIN_AUTH_NACK.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,IAAI;IACjD;;OAEG;IACH,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,6BAA6B,EAAE,MAAM,CAAC;CAChD"}
1
+ {"version":3,"file":"EVENT_LOGIN_AUTH_NACK.d.ts","sourceRoot":"","sources":["../../../src/dto/EVENT_LOGIN_AUTH_NACK.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,IAAI;IACjD;;OAEG;IACH,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,6BAA6B,EAAE,MAAM,CAAC;IAC/C;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;CAC9B"}
@@ -3,6 +3,7 @@ export { EVENT_CHANGE_USER_PASSWORD } from './EVENT_CHANGE_USER_PASSWORD';
3
3
  export { EVENT_LOGIN_AUTH } from './EVENT_LOGIN_AUTH';
4
4
  export { EVENT_LOGIN_AUTH_ACK } from './EVENT_LOGIN_AUTH_ACK';
5
5
  export { EVENT_LOGIN_AUTH_NACK } from './EVENT_LOGIN_AUTH_NACK';
6
+ export type { MFA_TYPE } from './EVENT_LOGIN_AUTH_NACK';
6
7
  export { EVENT_LOGIN_DETAILS_ACK } from './EVENT_LOGIN_DETAILS_ACK';
7
8
  export { EVENT_LOGOUT_NACK } from './EVENT_LOGOUT_NACK';
8
9
  export { EVENT_PASSWORD_RESET_ACTION } from './EVENT_PASSWORD_RESET_ACTION';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dto/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dto/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC"}
@@ -1,3 +1,4 @@
1
+ import type { MFA_TYPE } from '../dto/EVENT_LOGIN_AUTH_NACK';
1
2
  import type { Nack } from './nack';
2
3
  /**
3
4
  * @public
@@ -8,7 +9,12 @@ export interface LoginNack extends Nack {
8
9
  readonly hasIncorrectCredentials: boolean;
9
10
  readonly maxTriesReached: boolean;
10
11
  readonly isMFARequired: boolean;
12
+ readonly isMFAFailed: boolean;
11
13
  readonly hasPasswordExpired: boolean;
12
14
  readonly requiresTermsAndConditions: boolean;
15
+ /** MFA challenge session / credentials no longer usable (e.g. expired refresh). */
16
+ readonly hasNoCompatibleProviders: boolean;
17
+ /** MFA delivery type from AUTH-473 (`NOTIFY` | `QR_CODE`). */
18
+ readonly mfaType?: MFA_TYPE;
13
19
  }
14
20
  //# sourceMappingURL=loginNack.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loginNack.d.ts","sourceRoot":"","sources":["../../../src/entity/loginNack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,IAAI;IACrC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,0BAA0B,EAAE,MAAM,CAAC;IAC5C,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAC;IAC1C,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,0BAA0B,EAAE,OAAO,CAAC;CAC9C"}
1
+ {"version":3,"file":"loginNack.d.ts","sourceRoot":"","sources":["../../../src/entity/loginNack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,IAAI;IACrC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,0BAA0B,EAAE,MAAM,CAAC;IAC5C,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAC;IAC1C,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,0BAA0B,EAAE,OAAO,CAAC;IAC7C,mFAAmF;IACnF,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAC;IAC3C,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC;CAC7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"machine.d.ts","sourceRoot":"","sources":["../../../src/machine/machine.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEf,YAAY,EACZ,iBAAiB,EAMjB,OAAO,EACR,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AACpD,OAAO,EACL,IAAI,EASL,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAEL,iBAAiB,EAIlB,MAAM,eAAe,CAAC;AAIvB,OAAO,EACL,iBAAiB,EAQlB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,KAAK,EAEV,kBAAkB,EAClB,gBAAgB,EAGhB,WAAW,EACX,WAAW,EAEZ,MAAM,SAAS,CAAC;AAGjB;;;GAGG;AACH,MAAM,WAAW,WAAY,SAAQ,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;CAAG;AAErF;;;GAGG;AACH,qBAAa,kBACX,SAAQ,eAAe,CAAC,kBAAkB,EAAE,gBAAgB,CAC5D,YAAW,WAAW;IAGd,OAAO,CAAC,IAAI;IACJ,OAAO,CAAC,YAAY;IACf,OAAO,CAAC,EAAE;IACvB,OAAO,CAAC,IAAI;IACC,OAAO,CAAC,aAAa;IAC5B,OAAO,CAAC,MAAM;IACb,OAAO,CAAC,OAAO;gBANd,IAAI,EAAE,IAAI,EACF,YAAY,EAAE,YAAY,EACrB,EAAE,EAAE,iBAAiB,EAClC,IAAI,EAAE,IAAI,EACG,aAAa,EAAE,iBAAiB,EACvC,MAAM,EAAE,UAAU,EACjB,OAAO,EAAE,WAAW;IAytB3C,KAAK,CACH,OAAO,GAAE,kBAAkB,CAAC,OAAO,IAAI,CAAC,OAAO,CAM9C;IAKH;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAIxB,SAAS,CAAC,sBAAsB,IAAI,WAAW;IAQ/C,SAAS,CAAC,+BAA+B,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW;IAuB3E,SAAS,CAAC,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,GAAG,iBAAiB;IAgB3E,SAAS,CAAC,YAAY;;;;;;;;;;;;;;;;;;;;;MAwBpB;IAEF,SAAS,CAAC,aAAa;;;MAGpB;CACJ;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,mEAA0E,CAAC;AAEnG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAE5C"}
1
+ {"version":3,"file":"machine.d.ts","sourceRoot":"","sources":["../../../src/machine/machine.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEf,YAAY,EACZ,iBAAiB,EAMjB,OAAO,EACR,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AACpD,OAAO,EACL,IAAI,EASL,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAEL,iBAAiB,EAIlB,MAAM,eAAe,CAAC;AAIvB,OAAO,EACL,iBAAiB,EAQlB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,KAAK,EAEV,kBAAkB,EAClB,gBAAgB,EAGhB,WAAW,EACX,WAAW,EAEZ,MAAM,SAAS,CAAC;AAGjB;;;GAGG;AACH,MAAM,WAAW,WAAY,SAAQ,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;CAAG;AAErF;;;GAGG;AACH,qBAAa,kBACX,SAAQ,eAAe,CAAC,kBAAkB,EAAE,gBAAgB,CAC5D,YAAW,WAAW;IAGd,OAAO,CAAC,IAAI;IACJ,OAAO,CAAC,YAAY;IACf,OAAO,CAAC,EAAE;IACvB,OAAO,CAAC,IAAI;IACC,OAAO,CAAC,aAAa;IAC5B,OAAO,CAAC,MAAM;IACb,OAAO,CAAC,OAAO;gBANd,IAAI,EAAE,IAAI,EACF,YAAY,EAAE,YAAY,EACrB,EAAE,EAAE,iBAAiB,EAClC,IAAI,EAAE,IAAI,EACG,aAAa,EAAE,iBAAiB,EACvC,MAAM,EAAE,UAAU,EACjB,OAAO,EAAE,WAAW;IAsyB3C,KAAK,CACH,OAAO,GAAE,kBAAkB,CAAC,OAAO,IAAI,CAAC,OAAO,CAM9C;IAKH;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAIxB,SAAS,CAAC,sBAAsB,IAAI,WAAW;IAQ/C,SAAS,CAAC,+BAA+B,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW;IAuB3E,SAAS,CAAC,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,GAAG,iBAAiB;IAgB3E,SAAS,CAAC,YAAY;;;;;;;;;;;;;;;;;;;;;MAwBpB;IAEF,SAAS,CAAC,aAAa;;;MAGpB;CACJ;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,mEAA0E,CAAC;AAEnG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAE5C"}
@@ -2,6 +2,7 @@ import type { MachineContext } from '@genesislcap/foundation-state-machine';
2
2
  import type { User } from '@genesislcap/foundation-user';
3
3
  import type { DoneInvokeEvent, ErrorEvent } from 'xstate';
4
4
  import { Credentials } from '../credential';
5
+ import type { MFA_TYPE } from '../dto/EVENT_LOGIN_AUTH_NACK';
5
6
  import type { AuthDTO, AuthEntity } from '../mapper';
6
7
  /**
7
8
  * @public
@@ -85,6 +86,10 @@ export interface AuthMachineContext extends MachineContext {
85
86
  * The user, either authenticated or anonymous.
86
87
  */
87
88
  user: User;
89
+ /**
90
+ * MFA delivery type from the latest MFA_REQUIRED / MFA_FAILED NACK (AUTH-473).
91
+ */
92
+ mfaType?: MFA_TYPE;
88
93
  }
89
94
  /**
90
95
  * AuthMachineEvent type.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/machine/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/machine/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"loginMapper.d.ts","sourceRoot":"","sources":["../../../src/mapper/loginMapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,OAAO,EAAgB,MAAM,QAAQ,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC9F,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAI3F,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AASjC;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAChB,gBAAgB,GAChB,oBAAoB,GACpB,qBAAqB,GACrB,uBAAuB,GACvB,OAAO,CAAC;AAEZ;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,eAAe,GAAG,SAAS,GAAG,IAAI,CAAC;AAEtF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,GAAG,IAAI,oBAAoB,CAExE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,QAAQ,GAAG,GAAG,IAAI,uBAAuB,CAElF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,GAAG,IAAI,qBAAqB,CAE1E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,IAAI,QAAQ,CAExE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,IAAI,eAAe,CAEtF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,IAAI,SAAS,CAE1E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,WAAY,SAAQ,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC;CAAG;AAErE;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,WAAW;IAC9C,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;IAE3B;;OAEG;IACH,QAAQ,GAAI,KAAK,QAAQ,KAAG,WAAW,CAqDrC;IAEF;;OAEG;IACH,KAAK,GAAI,QAAQ,WAAW,KAAG,QAAQ,CAgDrC;IAEF,SAAS,CAAC,aAAa,GAAI,QAAQ,SAAS,KAAG,YAAY,CACnB;IAExC,SAAS,CAAC,cAAc,GAAI,UAAU,UAAU,EAAE,KAAG,aAAa,EAAE,CAM3D;CACV;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,mEAA0E,CAAC"}
1
+ {"version":3,"file":"loginMapper.d.ts","sourceRoot":"","sources":["../../../src/mapper/loginMapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,OAAO,EAAgB,MAAM,QAAQ,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC9F,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAI3F,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AASjC;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAChB,gBAAgB,GAChB,oBAAoB,GACpB,qBAAqB,GACrB,uBAAuB,GACvB,OAAO,CAAC;AAEZ;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,eAAe,GAAG,SAAS,GAAG,IAAI,CAAC;AAEtF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,GAAG,IAAI,oBAAoB,CAExE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,QAAQ,GAAG,GAAG,IAAI,uBAAuB,CAElF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,GAAG,IAAI,qBAAqB,CAE1E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,IAAI,QAAQ,CAExE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,IAAI,eAAe,CAEtF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,IAAI,SAAS,CAE1E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,WAAY,SAAQ,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC;CAAG;AAErE;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,WAAW;IAC9C,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;IAE3B;;OAEG;IACH,QAAQ,GAAI,KAAK,QAAQ,KAAG,WAAW,CAwDrC;IAEF;;OAEG;IACH,KAAK,GAAI,QAAQ,WAAW,KAAG,QAAQ,CAiDrC;IAEF,SAAS,CAAC,aAAa,GAAI,QAAQ,SAAS,KAAG,YAAY,CACnB;IAExC,SAAS,CAAC,cAAc,GAAI,UAAU,UAAU,EAAE,KAAG,aAAa,EAAE,CAM3D;CACV;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,mEAA0E,CAAC"}
@@ -11,15 +11,27 @@ import { BaseRoute } from '../base';
11
11
  export declare class Verify extends BaseRoute {
12
12
  credentialManager: CredentialManager;
13
13
  code: string;
14
+ /** Seconds remaining before Resend is enabled. */
15
+ resendCountdown: number;
16
+ private resendTimer;
14
17
  connectedCallback(): void;
18
+ disconnectedCallback(): void;
15
19
  /**
16
20
  * True while AuthMachine is in the awaitingMfa state (or its feedback return path still tagged).
17
21
  */
18
22
  get isAwaitingMfa(): boolean;
23
+ /** Show Resend only for notify-delivered MFA codes (AUTH-473 / FUI-2625). */
24
+ get showResendCode(): boolean;
25
+ get isMfaSessionExpired(): boolean;
19
26
  get submitDisabled(): boolean;
27
+ get resendDisabled(): boolean;
28
+ get resendLabel(): string;
20
29
  onBack: () => void;
30
+ onResend: () => void;
21
31
  onSubmit(event: Event): void;
22
32
  private attemptMfaLogin;
23
33
  login(params: LoginParams): void;
34
+ private startResendCooldown;
35
+ private clearResendTimer;
24
36
  }
25
37
  //# sourceMappingURL=verify.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../../src/routes/verify/verify.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAkC,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC;;;;;;GAMG;AACH,qBAKa,MAAO,SAAQ,SAAS;IAChB,iBAAiB,EAAE,iBAAiB,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAM;IAE9B,iBAAiB;IAUjB;;OAEG;IACH,IAAI,aAAa,YAIhB;IAED,IAAI,cAAc,YAEjB;IAED,MAAM,aAGJ;IAEF,QAAQ,CAAC,KAAK,EAAE,KAAK;IAerB,OAAO,CAAC,eAAe;IAevB,KAAK,CAAC,MAAM,EAAE,WAAW;CAG1B"}
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../../src/routes/verify/verify.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAkC,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAOpC;;;;;;GAMG;AACH,qBAKa,MAAO,SAAQ,SAAS;IAChB,iBAAiB,EAAE,iBAAiB,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAM;IAC9B,kDAAkD;IACtC,eAAe,SAA2B;IAEtD,OAAO,CAAC,WAAW,CAA6C;IAEhE,iBAAiB;IAcjB,oBAAoB;IAKpB;;OAEG;IACH,IAAI,aAAa,YAIhB;IAED,6EAA6E;IAC7E,IAAI,cAAc,YAEjB;IAED,IAAI,mBAAmB,YAEtB;IAED,IAAI,cAAc,YAEjB;IAED,IAAI,cAAc,YAOjB;IAED,IAAI,WAAW,WAMd;IAED,MAAM,aAIJ;IAEF,QAAQ,aAkBN;IAEF,QAAQ,CAAC,KAAK,EAAE,KAAK;IAerB,OAAO,CAAC,eAAe;IAevB,KAAK,CAAC,MAAM,EAAE,WAAW;IAIzB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,gBAAgB;CAMzB"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * VerifyStyles
3
+ * @public
4
+ */
5
+ export declare const VerifyStyles: import("@microsoft/fast-element").ElementStyles;
6
+ //# sourceMappingURL=verify.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.styles.d.ts","sourceRoot":"","sources":["../../../../src/routes/verify/verify.styles.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,YAAY,iDAgBxB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"verify.template.d.ts","sourceRoot":"","sources":["../../../../src/routes/verify/verify.template.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC;;;GAGG;AACH,eAAO,MAAM,cAAc,6DAwC1B,CAAC"}
1
+ {"version":3,"file":"verify.template.d.ts","sourceRoot":"","sources":["../../../../src/routes/verify/verify.template.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC;;;GAGG;AACH,eAAO,MAAM,cAAc,6DAyD1B,CAAC"}
@@ -99,7 +99,7 @@ let DefaultCredentialManager = class DefaultCredentialManager {
99
99
  return credentials && !!credentials.ssoToken;
100
100
  }
101
101
  validateMFACredentials(credentials) {
102
- return credentials && !!credentials.mfaToken;
102
+ return credentials && (!!credentials.mfaToken || !!credentials.mfaResend);
103
103
  }
104
104
  validateUserCredentialData(data, ensurePassword) {
105
105
  const baseResult = data &&
@@ -179,7 +179,12 @@ let DefaultAuthMachine = class DefaultAuthMachine extends AbstractMachine {
179
179
  meta: {
180
180
  content: 'Logged in.',
181
181
  },
182
- entry: ['storeBasicCredentials', 'loggedInCallback', 'postLoginRedirect'],
182
+ entry: [
183
+ 'storeBasicCredentials',
184
+ 'clearMfaType',
185
+ 'loggedInCallback',
186
+ 'postLoginRedirect',
187
+ ],
183
188
  on: {
184
189
  logout: {
185
190
  target: '#authMachine.loggingOut',
@@ -192,9 +197,6 @@ let DefaultAuthMachine = class DefaultAuthMachine extends AbstractMachine {
192
197
  */
193
198
  awaitingMfa: {
194
199
  tags: ['awaitingMfa'],
195
- meta: {
196
- content: 'MESSAGE_MFA_REQUIRED',
197
- },
198
200
  entry: ['verifyRedirect'],
199
201
  on: {
200
202
  login: {
@@ -443,13 +445,22 @@ let DefaultAuthMachine = class DefaultAuthMachine extends AbstractMachine {
443
445
  actions: ['setUser'],
444
446
  target: '#authMachine.authCheck',
445
447
  },
448
+ {
449
+ guard: and(['isLoginNackEntity', 'hasNoCompatibleProviders', 'isMfaChallenge']),
450
+ target: '#authMachine.feedback.mfaSessionExpired',
451
+ },
452
+ {
453
+ guard: and(['isLoginNackEntity', 'hasIncorrectCredentials', 'isMfaChallenge']),
454
+ actions: 'storeMfaType',
455
+ target: '#authMachine.feedback.incorrectMfa',
456
+ },
446
457
  {
447
458
  guard: and(['isLoginNackEntity', 'hasIncorrectCredentials']),
448
459
  target: '#authMachine.feedback.incorrectCredentials',
449
460
  },
450
461
  {
451
462
  guard: and(['isLoginNackEntity', 'isMFARequired']),
452
- actions: 'storeBasicCredentials',
463
+ actions: ['storeBasicCredentials', 'storeMfaType'],
453
464
  target: '#authMachine.feedback.mfaRequired',
454
465
  },
455
466
  {
@@ -463,8 +474,14 @@ let DefaultAuthMachine = class DefaultAuthMachine extends AbstractMachine {
463
474
  target: '#authMachine.feedback.termsAndConditions',
464
475
  },
465
476
  {
466
- guard: and(['isLoginNackEntity', 'isMfaLoginParams']),
467
- target: '#authMachine.feedback.incorrectCredentials',
477
+ guard: and(['isLoginNackEntity', 'isMFAFailed']),
478
+ actions: 'storeMfaType',
479
+ target: '#authMachine.feedback.incorrectMfa',
480
+ },
481
+ {
482
+ guard: and(['isLoginNackEntity', 'isMfaChallenge']),
483
+ actions: 'storeMfaType',
484
+ target: '#authMachine.feedback.incorrectMfa',
468
485
  },
469
486
  {
470
487
  guard: 'isLoginNackEntity',
@@ -556,7 +573,7 @@ let DefaultAuthMachine = class DefaultAuthMachine extends AbstractMachine {
556
573
  after: {
557
574
  feedbackDelay: [
558
575
  {
559
- guard: 'isMfaLoginParams',
576
+ guard: 'isMfaChallenge',
560
577
  target: '#authMachine.awaitingMfa',
561
578
  },
562
579
  {
@@ -565,13 +582,48 @@ let DefaultAuthMachine = class DefaultAuthMachine extends AbstractMachine {
565
582
  ],
566
583
  },
567
584
  },
585
+ /**
586
+ * Wrong MFA code (or failed MFA resend). Keeps awaitingMfa so Verify does not bounce to login.
587
+ */
588
+ incorrectMfa: {
589
+ tags: ['feedback', 'incorrectCredentials', 'awaitingMfa'],
590
+ meta: {
591
+ content: 'MESSAGE_INCORRECT_MFA_CODE',
592
+ },
593
+ entry: ['verifyRedirect'],
594
+ after: {
595
+ feedbackDelay: {
596
+ target: '#authMachine.awaitingMfa',
597
+ },
598
+ },
599
+ },
600
+ /**
601
+ * MFA challenge credentials expired (e.g. NO_COMPATIBLE_PROVIDERS on resend).
602
+ * Keep user on verify with a warning, then return to login.
603
+ */
604
+ mfaSessionExpired: {
605
+ tags: ['feedback', 'awaitingMfa', 'mfaSessionExpired'],
606
+ meta: {
607
+ content: 'MESSAGE_MFA_SESSION_EXPIRED',
608
+ },
609
+ entry: ['verifyRedirect'],
610
+ after: {
611
+ mfaSessionExpiredRedirectDelay: {
612
+ actions: ['resetContext', 'loginRedirect'],
613
+ target: '#authMachine.idle',
614
+ },
615
+ },
616
+ },
568
617
  mfaRequired: {
569
- tags: ['feedback', 'mfaRequired'],
618
+ tags: ['feedback', 'mfaRequired', 'awaitingMfa'],
570
619
  meta: {
571
620
  content: 'MESSAGE_MFA_REQUIRED',
572
621
  },
573
- always: {
574
- target: '#authMachine.awaitingMfa',
622
+ entry: ['verifyRedirect'],
623
+ after: {
624
+ feedbackDelay: {
625
+ target: '#authMachine.awaitingMfa',
626
+ },
575
627
  },
576
628
  },
577
629
  passwordExpired: {
@@ -696,6 +748,17 @@ let DefaultAuthMachine = class DefaultAuthMachine extends AbstractMachine {
696
748
  this.cm.storeCredentials(data);
697
749
  }
698
750
  },
751
+ storeMfaType: assign(({ event, context }) => {
752
+ if (isDoneInvokeEvent(event) &&
753
+ isLoginNackEntity(event.output) &&
754
+ event.output.mfaType) {
755
+ return { mfaType: event.output.mfaType };
756
+ }
757
+ return { mfaType: context.mfaType };
758
+ }),
759
+ clearMfaType: assign({
760
+ mfaType: () => undefined,
761
+ }),
699
762
  postLoginRedirect: this.config.postLoginRedirect,
700
763
  postLogoutRedirect: this.config.postLogoutRedirect,
701
764
  resetPasswordRedirect: () => this.routing.navigateTo('reset-password?expired'),
@@ -732,7 +795,15 @@ let DefaultAuthMachine = class DefaultAuthMachine extends AbstractMachine {
732
795
  isMFARequired: ({ event }) => isDoneInvokeEvent(event)
733
796
  ? isLoginNackEntity(event.output) && event.output.isMFARequired
734
797
  : false,
798
+ isMFAFailed: ({ event }) => isDoneInvokeEvent(event)
799
+ ? isLoginNackEntity(event.output) && event.output.isMFAFailed
800
+ : false,
801
+ hasNoCompatibleProviders: ({ event }) => isDoneInvokeEvent(event)
802
+ ? isLoginNackEntity(event.output) && event.output.hasNoCompatibleProviders
803
+ : false,
735
804
  isMfaLoginParams: ({ context }) => isLoginParams(context.params) && context.params.type === CredentialType.MFA,
805
+ isMfaChallenge: ({ context }) => (isLoginParams(context.params) && context.params.type === CredentialType.MFA) ||
806
+ !!context.mfaType,
736
807
  hasPasswordExpired: ({ event }) => isDoneInvokeEvent(event)
737
808
  ? isLoginNackEntity(event.output) && event.output.hasPasswordExpired
738
809
  : false,
@@ -754,6 +825,7 @@ let DefaultAuthMachine = class DefaultAuthMachine extends AbstractMachine {
754
825
  delays: {
755
826
  feedbackDelay: this.config.feedbackDelay,
756
827
  logoutFeedbackDelay: 1000,
828
+ mfaSessionExpiredRedirectDelay: 5000,
757
829
  },
758
830
  });
759
831
  this.start();
@@ -8,6 +8,7 @@ export const defaultAuthMachineContext = {
8
8
  dto: undefined,
9
9
  entity: undefined,
10
10
  user: undefined,
11
+ mfaType: undefined,
11
12
  };
12
13
  /**
13
14
  * isLoginParams.
@@ -82,7 +82,7 @@ export class DefaultLoginMapper {
82
82
  return ack;
83
83
  }
84
84
  if (isLoginNackDTO(dto)) {
85
- const nack = Object.assign(Object.assign({}, fromDTONack(dto)), { refreshAuthToken: dto.REFRESH_AUTH_TOKEN, refreshTokenExpirationMins: dto.REFRESH_TOKEN_EXPIRATION_MINS, hasIncorrectCredentials: hasDTOErrorWarningCode(dto, 'INCORRECT_CREDENTIALS'), maxTriesReached: hasDTOErrorWarningCode(dto, 'MAX_TRIES_REACHED'), isMFARequired: hasDTOErrorWarningCode(dto, 'MFA_REQUIRED'), hasPasswordExpired: hasDTOErrorWarningCode(dto, 'PASSWORD_EXPIRED'), requiresTermsAndConditions: hasDTOErrorWarningCode(dto, 'TERMS_ACCEPTANCE_REQUIRED') });
85
+ const nack = Object.assign(Object.assign({}, fromDTONack(dto)), { refreshAuthToken: dto.REFRESH_AUTH_TOKEN, refreshTokenExpirationMins: dto.REFRESH_TOKEN_EXPIRATION_MINS, hasIncorrectCredentials: hasDTOErrorWarningCode(dto, 'INCORRECT_CREDENTIALS'), maxTriesReached: hasDTOErrorWarningCode(dto, 'MAX_TRIES_REACHED'), isMFARequired: hasDTOErrorWarningCode(dto, 'MFA_REQUIRED'), isMFAFailed: hasDTOErrorWarningCode(dto, 'MFA_FAILED'), hasPasswordExpired: hasDTOErrorWarningCode(dto, 'PASSWORD_EXPIRED'), requiresTermsAndConditions: hasDTOErrorWarningCode(dto, 'TERMS_ACCEPTANCE_REQUIRED'), hasNoCompatibleProviders: hasDTOErrorWarningCode(dto, 'NO_COMPATIBLE_PROVIDERS'), mfaType: dto.MFA_TYPE });
86
86
  return nack;
87
87
  }
88
88
  if (isNackDTO(dto)) {
@@ -129,9 +129,7 @@ export class DefaultLoginMapper {
129
129
  };
130
130
  break;
131
131
  case CredentialType.MFA:
132
- DETAILS = {
133
- MFA_CODE: params.mfaToken,
134
- };
132
+ DETAILS = Object.assign(Object.assign({}, (params.mfaToken ? { MFA_CODE: params.mfaToken } : {})), (params.mfaResend ? { MFA_RESEND: true } : {}));
135
133
  break;
136
134
  }
137
135
  const dto = {
@@ -1,10 +1,12 @@
1
1
  import { __decorate } from "tslib";
2
2
  import { customElement, observable } from '@microsoft/fast-element';
3
3
  import { CredentialManager, CredentialType } from '../../credential';
4
- import { commonStyles } from '../../styles';
5
4
  import { logger } from '../../utils';
6
5
  import { BaseRoute } from '../base';
6
+ import { VerifyStyles as styles } from './verify.styles';
7
7
  import { VerifyTemplate as template } from './verify.template';
8
+ const RESEND_COOLDOWN_SECONDS = 60;
9
+ const RESEND_TICK_MS = 1000;
8
10
  /**
9
11
  * Verify
10
12
  *
@@ -16,10 +18,29 @@ let Verify = class Verify extends BaseRoute {
16
18
  constructor() {
17
19
  super(...arguments);
18
20
  this.code = '';
21
+ /** Seconds remaining before Resend is enabled. */
22
+ this.resendCountdown = RESEND_COOLDOWN_SECONDS;
19
23
  this.onBack = () => {
24
+ this.clearResendTimer();
20
25
  this.store.authMachine.send({ type: 'cancel-mfa' });
21
26
  this.routing.navigateTo('');
22
27
  };
28
+ this.onResend = () => {
29
+ if (this.resendDisabled) {
30
+ return;
31
+ }
32
+ const mfaCredentials = {
33
+ type: CredentialType.MFA,
34
+ mfaResend: true,
35
+ };
36
+ if (!this.credentialManager.validateMFACredentials(mfaCredentials)) {
37
+ logger.debug(`MFA resend credentials appear invalid, aborting.`);
38
+ return;
39
+ }
40
+ logger.debug(`Requesting a new MFA code.`);
41
+ this.startResendCooldown();
42
+ this.login(mfaCredentials);
43
+ };
23
44
  }
24
45
  connectedCallback() {
25
46
  super.connectedCallback();
@@ -28,6 +49,13 @@ let Verify = class Verify extends BaseRoute {
28
49
  this.routing.navigateTo('');
29
50
  return;
30
51
  }
52
+ if (this.showResendCode) {
53
+ this.startResendCooldown();
54
+ }
55
+ }
56
+ disconnectedCallback() {
57
+ this.clearResendTimer();
58
+ super.disconnectedCallback();
31
59
  }
32
60
  /**
33
61
  * True while AuthMachine is in the awaitingMfa state (or its feedback return path still tagged).
@@ -35,8 +63,28 @@ let Verify = class Verify extends BaseRoute {
35
63
  get isAwaitingMfa() {
36
64
  return (this.store.authMachine.matches('awaitingMfa') || this.store.authMachine.hasTag('awaitingMfa'));
37
65
  }
66
+ /** Show Resend only for notify-delivered MFA codes (AUTH-473 / FUI-2625). */
67
+ get showResendCode() {
68
+ return this.store.authMachine.context.mfaType === 'NOTIFY';
69
+ }
70
+ get isMfaSessionExpired() {
71
+ return this.store.authMachine.hasTag('mfaSessionExpired');
72
+ }
38
73
  get submitDisabled() {
39
- return this.store.authMachine.hasTag('pending');
74
+ return this.store.authMachine.hasTag('pending') || this.isMfaSessionExpired;
75
+ }
76
+ get resendDisabled() {
77
+ return (this.submitDisabled ||
78
+ this.resendCountdown > 0 ||
79
+ this.isMfaSessionExpired ||
80
+ !this.showResendCode);
81
+ }
82
+ get resendLabel() {
83
+ const label = this.toLocalisedText('VERIFY_RESEND_CODE');
84
+ if (this.resendCountdown > 0 && !this.isMfaSessionExpired) {
85
+ return `${label} (${this.resendCountdown}s)`;
86
+ }
87
+ return label;
40
88
  }
41
89
  onSubmit(event) {
42
90
  event.preventDefault();
@@ -64,6 +112,24 @@ let Verify = class Verify extends BaseRoute {
64
112
  login(params) {
65
113
  this.$emit('auth-login', params);
66
114
  }
115
+ startResendCooldown() {
116
+ this.clearResendTimer();
117
+ this.resendCountdown = RESEND_COOLDOWN_SECONDS;
118
+ this.resendTimer = setInterval(() => {
119
+ if (this.resendCountdown <= 1) {
120
+ this.resendCountdown = 0;
121
+ this.clearResendTimer();
122
+ return;
123
+ }
124
+ this.resendCountdown -= 1;
125
+ }, RESEND_TICK_MS);
126
+ }
127
+ clearResendTimer() {
128
+ if (this.resendTimer !== undefined) {
129
+ clearInterval(this.resendTimer);
130
+ this.resendTimer = undefined;
131
+ }
132
+ }
67
133
  };
68
134
  __decorate([
69
135
  CredentialManager
@@ -71,11 +137,14 @@ __decorate([
71
137
  __decorate([
72
138
  observable
73
139
  ], Verify.prototype, "code", void 0);
140
+ __decorate([
141
+ observable
142
+ ], Verify.prototype, "resendCountdown", void 0);
74
143
  Verify = __decorate([
75
144
  customElement({
76
145
  name: 'foundation-auth-verify',
77
146
  template,
78
- styles: commonStyles,
147
+ styles,
79
148
  })
80
149
  ], Verify);
81
150
  export { Verify };
@@ -0,0 +1,23 @@
1
+ import { css } from '@microsoft/fast-element';
2
+ import { commonStyles } from '../../styles';
3
+ /**
4
+ * VerifyStyles
5
+ * @public
6
+ */
7
+ export const VerifyStyles = css `
8
+ ${commonStyles}
9
+
10
+ .links {
11
+ display: flex;
12
+ align-items: center;
13
+ gap: calc(var(--design-unit) * 2px);
14
+ }
15
+
16
+ .link-url {
17
+ font-size: calc(var(--type-ramp-base-font-size) / 4 * var(--design-unit));
18
+ }
19
+
20
+ .link-url[disabled]:hover {
21
+ background-color: transparent;
22
+ }
23
+ `;
@@ -1,5 +1,5 @@
1
1
  import { sync } from '@genesislcap/foundation-utils';
2
- import { html } from '@microsoft/fast-element';
2
+ import { html, when } from '@microsoft/fast-element';
3
3
  import { backButton, showEnvironmentIndicator, submitButton } from '../base';
4
4
  /**
5
5
  * VerifyTemplate
@@ -30,6 +30,20 @@ export const VerifyTemplate = html `
30
30
  >
31
31
  <span class="form-title">${(x) => x.toLocalisedText('VERIFY_FORM_TITLE')}</span>
32
32
  </rapid-verification-code-input>
33
+ ${when((x) => x.showResendCode, html `
34
+ <div class="links">
35
+ <rapid-button
36
+ class="link-url"
37
+ appearance="link"
38
+ type="button"
39
+ ?disabled=${(x) => x.resendDisabled}
40
+ @click=${(x) => x.onResend()}
41
+ data-test-id="resend-code"
42
+ >
43
+ ${(x) => x.resendLabel}
44
+ </rapid-button>
45
+ </div>
46
+ `)}
33
47
  <div class="form-buttons">
34
48
  ${(x) => submitButton(x.toLocalisedText('VERIFY_SUBMIT_BUTTON_LABEL'), 'submit', x.submitDisabled)}
35
49
  ${(x) => backButton(() => x.onBack(), x.toLocalisedText('VERIFY_BACK_BUTTON'))}
@@ -35,6 +35,8 @@
35
35
  "VERIFY_FORM_TITLE": "Verification Code",
36
36
  "VERIFY_SUBMIT_BUTTON_LABEL": "Verify and Login",
37
37
  "VERIFY_BACK_BUTTON": "Back",
38
+ "VERIFY_RESEND_CODE": "Resend code",
39
+ "MESSAGE_MFA_SESSION_EXPIRED": "Your verification session has expired. Please log in again.",
38
40
  "FIELD_USERNAME_TITLE": "Username",
39
41
  "FIELD_EMAIL_TITLE": "Email",
40
42
  "FIELD_PASSWORD_TITLE": "Password",
@@ -45,6 +47,7 @@
45
47
  "MESSAGE_FORGOT_PASSWORD_RESET": "Please check your inbox for reset instructions.",
46
48
  "MESSAGE_PASSWORD_RESET_SUCCESS": "Password reset success. Redirecting to login.",
47
49
  "MESSAGE_INCORRECT_CREDENTIALS": "Incorrect credentials, please try again.",
50
+ "MESSAGE_INCORRECT_MFA_CODE": "Incorrect verification code, please try again.",
48
51
  "MESSAGE_MFA_REQUIRED": "Please check your inbox for your login link.",
49
52
  "MESSAGE_PASSWORD_EXPIRED": "You are required to change your password.",
50
53
  "ERROR_UNKNOWN_ERROR": "Unknown error.",
@@ -2095,6 +2095,34 @@
2095
2095
  "endIndex": 2
2096
2096
  }
2097
2097
  },
2098
+ {
2099
+ "kind": "PropertySignature",
2100
+ "canonicalReference": "@genesislcap/foundation-auth!AuthMachineContext#mfaType:member",
2101
+ "docComment": "/**\n * MFA delivery type from the latest MFA_REQUIRED / MFA_FAILED NACK (AUTH-473).\n */\n",
2102
+ "excerptTokens": [
2103
+ {
2104
+ "kind": "Content",
2105
+ "text": "mfaType?: "
2106
+ },
2107
+ {
2108
+ "kind": "Reference",
2109
+ "text": "MFA_TYPE",
2110
+ "canonicalReference": "@genesislcap/foundation-auth!MFA_TYPE:type"
2111
+ },
2112
+ {
2113
+ "kind": "Content",
2114
+ "text": ";"
2115
+ }
2116
+ ],
2117
+ "isReadonly": false,
2118
+ "isOptional": true,
2119
+ "releaseTag": "Public",
2120
+ "name": "mfaType",
2121
+ "propertyTypeTokenRange": {
2122
+ "startIndex": 1,
2123
+ "endIndex": 2
2124
+ }
2125
+ },
2098
2126
  {
2099
2127
  "kind": "PropertySignature",
2100
2128
  "canonicalReference": "@genesislcap/foundation-auth!AuthMachineContext#params:member",
@@ -9181,6 +9209,34 @@
9181
9209
  "name": "EVENT_LOGIN_AUTH_NACK",
9182
9210
  "preserveMemberOrder": false,
9183
9211
  "members": [
9212
+ {
9213
+ "kind": "PropertySignature",
9214
+ "canonicalReference": "@genesislcap/foundation-auth!EVENT_LOGIN_AUTH_NACK#MFA_TYPE:member",
9215
+ "docComment": "/**\n * MFA type when MFA is required or has failed (AUTH-473).\n */\n",
9216
+ "excerptTokens": [
9217
+ {
9218
+ "kind": "Content",
9219
+ "text": "readonly MFA_TYPE?: "
9220
+ },
9221
+ {
9222
+ "kind": "Reference",
9223
+ "text": "MFA_TYPE",
9224
+ "canonicalReference": "@genesislcap/foundation-auth!MFA_TYPE:type"
9225
+ },
9226
+ {
9227
+ "kind": "Content",
9228
+ "text": ";"
9229
+ }
9230
+ ],
9231
+ "isReadonly": true,
9232
+ "isOptional": true,
9233
+ "releaseTag": "Public",
9234
+ "name": "MFA_TYPE",
9235
+ "propertyTypeTokenRange": {
9236
+ "startIndex": 1,
9237
+ "endIndex": 2
9238
+ }
9239
+ },
9184
9240
  {
9185
9241
  "kind": "PropertySignature",
9186
9242
  "canonicalReference": "@genesislcap/foundation-auth!EVENT_LOGIN_AUTH_NACK#REFRESH_AUTH_TOKEN:member",
@@ -9278,7 +9334,7 @@
9278
9334
  },
9279
9335
  {
9280
9336
  "kind": "Content",
9281
- "text": "{\n readonly USER_NAME: string;\n readonly PASSWORD: string;\n } | {\n readonly USER_NAME: string;\n readonly REFRESH_AUTH_TOKEN: string;\n } | {\n readonly SSO_TOKEN: string;\n } | {\n readonly JWT: string;\n readonly DOMAIN: string;\n } | {\n readonly MFA_CODE: string;\n }"
9337
+ "text": "{\n readonly USER_NAME: string;\n readonly PASSWORD: string;\n } | {\n readonly USER_NAME: string;\n readonly REFRESH_AUTH_TOKEN: string;\n } | {\n readonly SSO_TOKEN: string;\n } | {\n readonly JWT: string;\n readonly DOMAIN: string;\n } | {\n readonly MFA_CODE?: string;\n readonly MFA_RESEND?: boolean;\n }"
9282
9338
  },
9283
9339
  {
9284
9340
  "kind": "Content",
@@ -11836,6 +11892,33 @@
11836
11892
  "endIndex": 2
11837
11893
  }
11838
11894
  },
11895
+ {
11896
+ "kind": "PropertySignature",
11897
+ "canonicalReference": "@genesislcap/foundation-auth!LoginNack#hasNoCompatibleProviders:member",
11898
+ "docComment": "/**\n * MFA challenge session / credentials no longer usable (e.g. expired refresh).\n */\n",
11899
+ "excerptTokens": [
11900
+ {
11901
+ "kind": "Content",
11902
+ "text": "readonly hasNoCompatibleProviders: "
11903
+ },
11904
+ {
11905
+ "kind": "Content",
11906
+ "text": "boolean"
11907
+ },
11908
+ {
11909
+ "kind": "Content",
11910
+ "text": ";"
11911
+ }
11912
+ ],
11913
+ "isReadonly": true,
11914
+ "isOptional": false,
11915
+ "releaseTag": "Public",
11916
+ "name": "hasNoCompatibleProviders",
11917
+ "propertyTypeTokenRange": {
11918
+ "startIndex": 1,
11919
+ "endIndex": 2
11920
+ }
11921
+ },
11839
11922
  {
11840
11923
  "kind": "PropertySignature",
11841
11924
  "canonicalReference": "@genesislcap/foundation-auth!LoginNack#hasPasswordExpired:member",
@@ -11863,6 +11946,33 @@
11863
11946
  "endIndex": 2
11864
11947
  }
11865
11948
  },
11949
+ {
11950
+ "kind": "PropertySignature",
11951
+ "canonicalReference": "@genesislcap/foundation-auth!LoginNack#isMFAFailed:member",
11952
+ "docComment": "",
11953
+ "excerptTokens": [
11954
+ {
11955
+ "kind": "Content",
11956
+ "text": "readonly isMFAFailed: "
11957
+ },
11958
+ {
11959
+ "kind": "Content",
11960
+ "text": "boolean"
11961
+ },
11962
+ {
11963
+ "kind": "Content",
11964
+ "text": ";"
11965
+ }
11966
+ ],
11967
+ "isReadonly": true,
11968
+ "isOptional": false,
11969
+ "releaseTag": "Public",
11970
+ "name": "isMFAFailed",
11971
+ "propertyTypeTokenRange": {
11972
+ "startIndex": 1,
11973
+ "endIndex": 2
11974
+ }
11975
+ },
11866
11976
  {
11867
11977
  "kind": "PropertySignature",
11868
11978
  "canonicalReference": "@genesislcap/foundation-auth!LoginNack#isMFARequired:member",
@@ -11917,6 +12027,34 @@
11917
12027
  "endIndex": 2
11918
12028
  }
11919
12029
  },
12030
+ {
12031
+ "kind": "PropertySignature",
12032
+ "canonicalReference": "@genesislcap/foundation-auth!LoginNack#mfaType:member",
12033
+ "docComment": "/**\n * MFA delivery type from AUTH-473 (`NOTIFY` | `QR_CODE`).\n */\n",
12034
+ "excerptTokens": [
12035
+ {
12036
+ "kind": "Content",
12037
+ "text": "readonly mfaType?: "
12038
+ },
12039
+ {
12040
+ "kind": "Reference",
12041
+ "text": "MFA_TYPE",
12042
+ "canonicalReference": "@genesislcap/foundation-auth!MFA_TYPE:type"
12043
+ },
12044
+ {
12045
+ "kind": "Content",
12046
+ "text": ";"
12047
+ }
12048
+ ],
12049
+ "isReadonly": true,
12050
+ "isOptional": true,
12051
+ "releaseTag": "Public",
12052
+ "name": "mfaType",
12053
+ "propertyTypeTokenRange": {
12054
+ "startIndex": 1,
12055
+ "endIndex": 2
12056
+ }
12057
+ },
11920
12058
  {
11921
12059
  "kind": "PropertySignature",
11922
12060
  "canonicalReference": "@genesislcap/foundation-auth!LoginNack#refreshAuthToken:member",
@@ -12726,10 +12864,36 @@
12726
12864
  "endIndex": 5
12727
12865
  }
12728
12866
  },
12867
+ {
12868
+ "kind": "TypeAlias",
12869
+ "canonicalReference": "@genesislcap/foundation-auth!MFA_TYPE:type",
12870
+ "docComment": "/**\n * MFA delivery mechanism returned on MFA_REQUIRED / MFA_FAILED NACKs (AUTH-473).\n *\n * @public\n */\n",
12871
+ "excerptTokens": [
12872
+ {
12873
+ "kind": "Content",
12874
+ "text": "export type MFA_TYPE = "
12875
+ },
12876
+ {
12877
+ "kind": "Content",
12878
+ "text": "'NOTIFY' | 'QR_CODE'"
12879
+ },
12880
+ {
12881
+ "kind": "Content",
12882
+ "text": ";"
12883
+ }
12884
+ ],
12885
+ "fileUrlPath": "src/dto/EVENT_LOGIN_AUTH_NACK.ts",
12886
+ "releaseTag": "Public",
12887
+ "name": "MFA_TYPE",
12888
+ "typeTokenRange": {
12889
+ "startIndex": 1,
12890
+ "endIndex": 2
12891
+ }
12892
+ },
12729
12893
  {
12730
12894
  "kind": "TypeAlias",
12731
12895
  "canonicalReference": "@genesislcap/foundation-auth!MFACredentials:type",
12732
- "docComment": "/**\n * @remarks\n *\n * Will be sourced from MFA_CODE in url params.\n *\n * @public\n */\n",
12896
+ "docComment": "/**\n * @remarks\n *\n * Will be sourced from MFA_CODE in url params. Set `mfaResend` to request a new code without submitting one (AUTH-473 / FUI-2625).\n *\n * @public\n */\n",
12733
12897
  "excerptTokens": [
12734
12898
  {
12735
12899
  "kind": "Content",
@@ -12755,7 +12919,7 @@
12755
12919
  },
12756
12920
  {
12757
12921
  "kind": "Content",
12758
- "text": ";\n mfaToken: string;\n}"
12922
+ "text": ";\n mfaToken?: string;\n mfaResend?: boolean;\n}"
12759
12923
  },
12760
12924
  {
12761
12925
  "kind": "Content",
@@ -423,6 +423,10 @@ export declare interface AuthMachineContext extends MachineContext {
423
423
  * The user, either authenticated or anonymous.
424
424
  */
425
425
  user: User;
426
+ /**
427
+ * MFA delivery type from the latest MFA_REQUIRED / MFA_FAILED NACK (AUTH-473).
428
+ */
429
+ mfaType?: MFA_TYPE;
426
430
  }
427
431
 
428
432
  /**
@@ -1264,7 +1268,9 @@ export declare interface EVENT_LOGIN_AUTH extends MESSAGE {
1264
1268
  readonly JWT: string;
1265
1269
  readonly DOMAIN: string;
1266
1270
  } | {
1267
- readonly MFA_CODE: string;
1271
+ readonly MFA_CODE?: string;
1272
+ /** When true, requests a new MFA code (AUTH-473). */
1273
+ readonly MFA_RESEND?: boolean;
1268
1274
  };
1269
1275
  }
1270
1276
 
@@ -1314,6 +1320,10 @@ export declare interface EVENT_LOGIN_AUTH_NACK extends NACK {
1314
1320
  */
1315
1321
  readonly REFRESH_AUTH_TOKEN: string;
1316
1322
  readonly REFRESH_TOKEN_EXPIRATION_MINS: number;
1323
+ /**
1324
+ * MFA type when MFA is required or has failed (AUTH-473).
1325
+ */
1326
+ readonly MFA_TYPE?: MFA_TYPE;
1317
1327
  }
1318
1328
 
1319
1329
  /**
@@ -2268,8 +2278,13 @@ export declare interface LoginNack extends Nack {
2268
2278
  readonly hasIncorrectCredentials: boolean;
2269
2279
  readonly maxTriesReached: boolean;
2270
2280
  readonly isMFARequired: boolean;
2281
+ readonly isMFAFailed: boolean;
2271
2282
  readonly hasPasswordExpired: boolean;
2272
2283
  readonly requiresTermsAndConditions: boolean;
2284
+ /** MFA challenge session / credentials no longer usable (e.g. expired refresh). */
2285
+ readonly hasNoCompatibleProviders: boolean;
2286
+ /** MFA delivery type from AUTH-473 (`NOTIFY` | `QR_CODE`). */
2287
+ readonly mfaType?: MFA_TYPE;
2273
2288
  }
2274
2289
 
2275
2290
  /**
@@ -2428,14 +2443,22 @@ export declare interface MessageMapper<TLookup extends MessageMapperLookup, K ex
2428
2443
  */
2429
2444
  export declare type MessageMapperLookup = Record<string, Mapper<unknown, unknown>>;
2430
2445
 
2446
+ /**
2447
+ * MFA delivery mechanism returned on MFA_REQUIRED / MFA_FAILED NACKs (AUTH-473).
2448
+ * @public
2449
+ */
2450
+ export declare type MFA_TYPE = 'NOTIFY' | 'QR_CODE';
2451
+
2431
2452
  /**
2432
2453
  * @remarks
2433
2454
  * Will be sourced from MFA_CODE in url params.
2455
+ * Set `mfaResend` to request a new code without submitting one (AUTH-473 / FUI-2625).
2434
2456
  * @public
2435
2457
  */
2436
2458
  export declare type MFACredentials = {
2437
2459
  type: CredentialType_2 & CredentialType_2.MFA;
2438
- mfaToken: string;
2460
+ mfaToken?: string;
2461
+ mfaResend?: boolean;
2439
2462
  };
2440
2463
 
2441
2464
  /**
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@genesislcap/foundation-auth",
3
3
  "description": "Genesis Foundation Auth",
4
- "version": "15.46.6-alpha-606571609.0",
4
+ "version": "15.48.0",
5
5
  "license": "SEE LICENSE IN license.txt",
6
6
  "main": "dist/esm/index.js",
7
7
  "types": "dist/foundation-auth.d.ts",
@@ -134,24 +134,24 @@
134
134
  }
135
135
  },
136
136
  "devDependencies": {
137
- "@genesislcap/foundation-testing": "15.46.6-alpha-606571609.0",
138
- "@genesislcap/genx": "15.46.6-alpha-606571609.0",
139
- "@genesislcap/ts-builder": "15.46.6-alpha-606571609.0",
140
- "@genesislcap/uvu-playwright-builder": "15.46.6-alpha-606571609.0",
141
- "@genesislcap/vite-builder": "15.46.6-alpha-606571609.0",
142
- "@genesislcap/webpack-builder": "15.46.6-alpha-606571609.0"
137
+ "@genesislcap/foundation-testing": "15.48.0",
138
+ "@genesislcap/genx": "15.48.0",
139
+ "@genesislcap/ts-builder": "15.48.0",
140
+ "@genesislcap/uvu-playwright-builder": "15.48.0",
141
+ "@genesislcap/vite-builder": "15.48.0",
142
+ "@genesislcap/webpack-builder": "15.48.0"
143
143
  },
144
144
  "dependencies": {
145
- "@genesislcap/foundation-comms": "15.46.6-alpha-606571609.0",
146
- "@genesislcap/foundation-events": "15.46.6-alpha-606571609.0",
147
- "@genesislcap/foundation-i18n": "15.46.6-alpha-606571609.0",
148
- "@genesislcap/foundation-logger": "15.46.6-alpha-606571609.0",
149
- "@genesislcap/foundation-state-machine": "15.46.6-alpha-606571609.0",
150
- "@genesislcap/foundation-store": "15.46.6-alpha-606571609.0",
151
- "@genesislcap/foundation-ui": "15.46.6-alpha-606571609.0",
152
- "@genesislcap/foundation-user": "15.46.6-alpha-606571609.0",
153
- "@genesislcap/foundation-utils": "15.46.6-alpha-606571609.0",
154
- "@genesislcap/foundation-zero": "15.46.6-alpha-606571609.0",
145
+ "@genesislcap/foundation-comms": "15.48.0",
146
+ "@genesislcap/foundation-events": "15.48.0",
147
+ "@genesislcap/foundation-i18n": "15.48.0",
148
+ "@genesislcap/foundation-logger": "15.48.0",
149
+ "@genesislcap/foundation-state-machine": "15.48.0",
150
+ "@genesislcap/foundation-store": "15.48.0",
151
+ "@genesislcap/foundation-ui": "15.48.0",
152
+ "@genesislcap/foundation-user": "15.48.0",
153
+ "@genesislcap/foundation-utils": "15.48.0",
154
+ "@genesislcap/foundation-zero": "15.48.0",
155
155
  "@microsoft/fast-components": "2.30.6",
156
156
  "@microsoft/fast-element": "1.14.0",
157
157
  "@microsoft/fast-foundation": "2.50.0",