@tap-payments/auth-jsconnect 2.11.31-development → 2.12.0-development

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 (109) hide show
  1. package/build/api/lead.d.ts +2 -2
  2. package/build/assets/locales/ar.json +3 -3
  3. package/build/constants/app.js +60 -3
  4. package/build/constants/flows.d.ts +1 -0
  5. package/build/constants/flows.js +2 -1
  6. package/build/features/app/bank/bankStore.d.ts +7 -0
  7. package/build/features/app/bank/bankStore.js +84 -0
  8. package/build/features/app/board/boardStore.d.ts +5 -0
  9. package/build/features/app/board/boardStore.js +81 -0
  10. package/build/features/app/brand/brandStore.d.ts +7 -0
  11. package/build/features/app/brand/brandStore.js +83 -1
  12. package/build/features/app/business/businessStore.d.ts +10 -0
  13. package/build/features/app/business/businessStore.js +83 -1
  14. package/build/features/app/entity/entityStore.d.ts +7 -0
  15. package/build/features/app/entity/entityStore.js +85 -1
  16. package/build/features/app/individual/individualStore.d.ts +9 -0
  17. package/build/features/app/individual/individualStore.js +85 -1
  18. package/build/features/app/password/passwordStore.d.ts +9 -0
  19. package/build/features/app/password/passwordStore.js +82 -0
  20. package/build/features/app/tax/taxStore.d.ts +7 -0
  21. package/build/features/app/tax/taxStore.js +81 -0
  22. package/build/features/app/terminal/terminalStore.d.ts +9 -0
  23. package/build/features/app/terminal/terminalStore.js +76 -0
  24. package/build/features/auth/screens/OTPSessionExpired/OTPSessionExpired.js +2 -2
  25. package/build/features/bank/Bank.js +3 -2
  26. package/build/features/bank/screens/OTPSessionExpired/OTPInput.d.ts +7 -0
  27. package/build/features/bank/screens/OTPSessionExpired/OTPInput.js +51 -0
  28. package/build/features/bank/screens/OTPSessionExpired/OTPSessionExpired.d.ts +5 -0
  29. package/build/features/bank/screens/OTPSessionExpired/OTPSessionExpired.js +75 -0
  30. package/build/features/bank/screens/OTPSessionExpired/index.d.ts +2 -0
  31. package/build/features/bank/screens/OTPSessionExpired/index.js +2 -0
  32. package/build/features/bank/screens/OTPSessionExpired/validation.d.ts +8 -0
  33. package/build/features/bank/screens/OTPSessionExpired/validation.js +4 -0
  34. package/build/features/board/Board.js +5 -4
  35. package/build/features/board/screens/OTPSessionExpired/OTPInput.d.ts +7 -0
  36. package/build/features/board/screens/OTPSessionExpired/OTPInput.js +51 -0
  37. package/build/features/board/screens/OTPSessionExpired/OTPSessionExpired.d.ts +5 -0
  38. package/build/features/board/screens/OTPSessionExpired/OTPSessionExpired.js +75 -0
  39. package/build/features/board/screens/OTPSessionExpired/index.d.ts +2 -0
  40. package/build/features/board/screens/OTPSessionExpired/index.js +2 -0
  41. package/build/features/board/screens/OTPSessionExpired/validation.d.ts +8 -0
  42. package/build/features/board/screens/OTPSessionExpired/validation.js +4 -0
  43. package/build/features/brand/Brand.js +3 -2
  44. package/build/features/brand/screens/OTPSessionExpired/OTPInput.d.ts +7 -0
  45. package/build/features/brand/screens/OTPSessionExpired/OTPInput.js +51 -0
  46. package/build/features/brand/screens/OTPSessionExpired/OTPSessionExpired.d.ts +5 -0
  47. package/build/features/brand/screens/OTPSessionExpired/OTPSessionExpired.js +75 -0
  48. package/build/features/brand/screens/OTPSessionExpired/index.d.ts +2 -0
  49. package/build/features/brand/screens/OTPSessionExpired/index.js +2 -0
  50. package/build/features/brand/screens/OTPSessionExpired/validation.d.ts +8 -0
  51. package/build/features/brand/screens/OTPSessionExpired/validation.js +4 -0
  52. package/build/features/business/Business.js +3 -2
  53. package/build/features/business/screens/OTPSessionExpired/OTPInput.d.ts +7 -0
  54. package/build/features/business/screens/OTPSessionExpired/OTPInput.js +51 -0
  55. package/build/features/business/screens/OTPSessionExpired/OTPSessionExpired.d.ts +5 -0
  56. package/build/features/business/screens/OTPSessionExpired/OTPSessionExpired.js +75 -0
  57. package/build/features/business/screens/OTPSessionExpired/index.d.ts +2 -0
  58. package/build/features/business/screens/OTPSessionExpired/index.js +2 -0
  59. package/build/features/business/screens/OTPSessionExpired/validation.d.ts +8 -0
  60. package/build/features/business/screens/OTPSessionExpired/validation.js +4 -0
  61. package/build/features/connect/screens/OTPSessionExpired/OTPSessionExpired.js +2 -2
  62. package/build/features/connectExpress/screens/OTPSessionExpired/OTPSessionExpired.js +2 -2
  63. package/build/features/entity/Entity.js +3 -2
  64. package/build/features/entity/screens/OTPSessionExpired/OTPInput.d.ts +7 -0
  65. package/build/features/entity/screens/OTPSessionExpired/OTPInput.js +51 -0
  66. package/build/features/entity/screens/OTPSessionExpired/OTPSessionExpired.d.ts +5 -0
  67. package/build/features/entity/screens/OTPSessionExpired/OTPSessionExpired.js +75 -0
  68. package/build/features/entity/screens/OTPSessionExpired/index.d.ts +2 -0
  69. package/build/features/entity/screens/OTPSessionExpired/index.js +2 -0
  70. package/build/features/entity/screens/OTPSessionExpired/validation.d.ts +8 -0
  71. package/build/features/entity/screens/OTPSessionExpired/validation.js +4 -0
  72. package/build/features/featuresScreens.js +45 -0
  73. package/build/features/individual/Individual.js +3 -2
  74. package/build/features/individual/screens/OTPSessionExpired/OTPInput.d.ts +7 -0
  75. package/build/features/individual/screens/OTPSessionExpired/OTPInput.js +51 -0
  76. package/build/features/individual/screens/OTPSessionExpired/OTPSessionExpired.d.ts +5 -0
  77. package/build/features/individual/screens/OTPSessionExpired/OTPSessionExpired.js +75 -0
  78. package/build/features/individual/screens/OTPSessionExpired/index.d.ts +2 -0
  79. package/build/features/individual/screens/OTPSessionExpired/index.js +2 -0
  80. package/build/features/individual/screens/OTPSessionExpired/validation.d.ts +8 -0
  81. package/build/features/individual/screens/OTPSessionExpired/validation.js +4 -0
  82. package/build/features/password/Password.js +3 -2
  83. package/build/features/password/screens/OTPSessionExpired/OTPInput.d.ts +7 -0
  84. package/build/features/password/screens/OTPSessionExpired/OTPInput.js +51 -0
  85. package/build/features/password/screens/OTPSessionExpired/OTPSessionExpired.d.ts +5 -0
  86. package/build/features/password/screens/OTPSessionExpired/OTPSessionExpired.js +75 -0
  87. package/build/features/password/screens/OTPSessionExpired/index.d.ts +2 -0
  88. package/build/features/password/screens/OTPSessionExpired/index.js +2 -0
  89. package/build/features/password/screens/OTPSessionExpired/validation.d.ts +8 -0
  90. package/build/features/password/screens/OTPSessionExpired/validation.js +4 -0
  91. package/build/features/tax/Tax.js +3 -2
  92. package/build/features/tax/screens/OTPSessionExpired/OTPInput.d.ts +7 -0
  93. package/build/features/tax/screens/OTPSessionExpired/OTPInput.js +51 -0
  94. package/build/features/tax/screens/OTPSessionExpired/OTPSessionExpired.d.ts +5 -0
  95. package/build/features/tax/screens/OTPSessionExpired/OTPSessionExpired.js +75 -0
  96. package/build/features/tax/screens/OTPSessionExpired/index.d.ts +2 -0
  97. package/build/features/tax/screens/OTPSessionExpired/index.js +2 -0
  98. package/build/features/tax/screens/OTPSessionExpired/validation.d.ts +8 -0
  99. package/build/features/tax/screens/OTPSessionExpired/validation.js +4 -0
  100. package/build/features/terminal/Terminal.js +3 -2
  101. package/build/features/terminal/screens/OTPSessionExpired/OTPInput.d.ts +7 -0
  102. package/build/features/terminal/screens/OTPSessionExpired/OTPInput.js +51 -0
  103. package/build/features/terminal/screens/OTPSessionExpired/OTPSessionExpired.d.ts +5 -0
  104. package/build/features/terminal/screens/OTPSessionExpired/OTPSessionExpired.js +89 -0
  105. package/build/features/terminal/screens/OTPSessionExpired/index.d.ts +2 -0
  106. package/build/features/terminal/screens/OTPSessionExpired/index.js +2 -0
  107. package/build/features/terminal/screens/OTPSessionExpired/validation.d.ts +8 -0
  108. package/build/features/terminal/screens/OTPSessionExpired/validation.js +4 -0
  109. package/package.json +1 -1
@@ -0,0 +1,51 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ import * as React from 'react';
14
+ import Box from '@mui/material/Box/Box';
15
+ import { styled } from '@mui/material/styles';
16
+ import OTPField from '../../../shared/OTP';
17
+ import { useController, useFormContext } from 'react-hook-form';
18
+ import { useTranslation } from 'react-i18next';
19
+ import { DEFAULT_TIMER_VALUE } from '../../../../constants';
20
+ import { useAppDispatch, useAppSelector } from '../../../../hooks';
21
+ import { isTokenExpired } from '../../../../utils';
22
+ import { individualSelector, clearError, verifyTokenSessionExpired } from '../../../app/individual/individualStore';
23
+ var BoxStyled = styled(Box)(function (_a) {
24
+ var theme = _a.theme;
25
+ return ({
26
+ display: 'flex',
27
+ flexDirection: 'column',
28
+ fontFamily: theme.typography.fontFamily
29
+ });
30
+ });
31
+ var OTPInput = function (_a) {
32
+ var loading = _a.loading;
33
+ var _b = useFormContext(), control = _b.control, setValue = _b.setValue;
34
+ var t = useTranslation().t;
35
+ var otpControl = useController({ name: 'otp', control: control });
36
+ var dispatch = useAppDispatch();
37
+ var error = useAppSelector(individualSelector).error;
38
+ var handleOnOTPChange = function (otp) {
39
+ if (error)
40
+ dispatch(clearError());
41
+ otpControl.field.onChange(otp);
42
+ };
43
+ var handleOnResendOTP = function () {
44
+ if (otpControl.field.value)
45
+ setValue('otp', '', { shouldValidate: true });
46
+ dispatch(verifyTokenSessionExpired(false));
47
+ };
48
+ var otpValue = otpControl.field.value;
49
+ return (_jsx(BoxStyled, __assign({ dir: 'ltr' }, { children: _jsx(OTPField, { loading: loading, timeEndLabel: t('ide_otp_resend_label'), timerInSeconds: DEFAULT_TIMER_VALUE, onResetClick: handleOnResendOTP, value: otpValue, hasError: isTokenExpired(error), onChange: function (number) { return handleOnOTPChange(number.toString()); } }) })));
50
+ };
51
+ export default React.memo(OTPInput);
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+ export interface OTPProps {
3
+ }
4
+ declare const _default: React.MemoExoticComponent<({}: OTPProps) => JSX.Element>;
5
+ export default _default;
@@ -0,0 +1,75 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
+ import * as React from 'react';
14
+ import { useAppDispatch } from '../../../../hooks';
15
+ import { useTranslation } from 'react-i18next';
16
+ import { useForm, FormProvider } from 'react-hook-form';
17
+ import { yupResolver } from '@hookform/resolvers/yup';
18
+ import Box from '@mui/material/Box/Box';
19
+ import { styled } from '@mui/material/styles';
20
+ import { useLanguage, useAppSelector, useSanitizedTranslation } from '../../../../hooks';
21
+ import { deepCopy, maskPhone } from '../../../../utils';
22
+ import Form from '../../../../components/Form';
23
+ import Text from '../../../../components/Text';
24
+ import { ScreenContainer } from '../../../shared/Containers';
25
+ import { individualSelector, clearError, resetOTPScreen, verifyLeadOTPSessionExpired } from '../../../app/individual/individualStore';
26
+ import Button from '../../../shared/Button';
27
+ import { OTPValidation } from './validation';
28
+ import OTPInput from './OTPInput';
29
+ var OTPTitleContainerStyled = styled(Box)(function (_a) {
30
+ var theme = _a.theme;
31
+ return ({
32
+ background: theme.palette.common.white,
33
+ border: '1px solid',
34
+ borderColor: theme.palette.divider,
35
+ direction: theme.direction,
36
+ borderRadius: theme.spacing(0, 0, 1.25, 1.25),
37
+ marginBottom: theme.spacing(5.75)
38
+ });
39
+ });
40
+ var OTPTitleStyled = styled(Text)(function (_a) {
41
+ var theme = _a.theme;
42
+ return (__assign(__assign({}, theme.typography.body1), { color: theme.palette.text.primary, fontWeight: theme.typography.fontWeightLight, marginBlock: theme.spacing(1.75), marginInlineStart: theme.spacing(2.5), lineHeight: 1.5, display: 'flex', flexDirection: 'column' }));
43
+ });
44
+ var FormStyled = styled(Form)(function () { return ({
45
+ display: 'flex',
46
+ flexDirection: 'column'
47
+ }); });
48
+ var OTPSessionExpired = function (_a) {
49
+ var _b, _c;
50
+ var dispatch = useAppDispatch();
51
+ var _d = useAppSelector(individualSelector), data = _d.data, loading = _d.loading, error = _d.error;
52
+ var methods = useForm({
53
+ resolver: yupResolver(OTPValidation),
54
+ defaultValues: data.otpData,
55
+ mode: 'onChange'
56
+ });
57
+ var t = useTranslation().t;
58
+ var st = useSanitizedTranslation();
59
+ var isAr = useLanguage().isAr;
60
+ var _e = React.useState(false), resendLoading = _e[0], setResendLoading = _e[1];
61
+ var phone = (_c = (_b = data.verify.responseBody) === null || _b === void 0 ? void 0 : _b.verification_by) === null || _c === void 0 ? void 0 : _c.sent_to;
62
+ React.useEffect(function () {
63
+ if (error && methods.formState.isValid && phone)
64
+ dispatch(clearError());
65
+ return function () {
66
+ dispatch(resetOTPScreen());
67
+ };
68
+ }, [methods.formState.isValid]);
69
+ var onSubmit = function (formData) {
70
+ dispatch(verifyLeadOTPSessionExpired(deepCopy(formData)));
71
+ };
72
+ var disabled = !methods.formState.isValid || !!error || !phone || resendLoading;
73
+ return (_jsx(ScreenContainer, { children: _jsx(FormProvider, __assign({}, methods, { children: _jsxs(FormStyled, __assign({ onSubmit: methods.handleSubmit(onSubmit) }, { children: [_jsx(OTPTitleContainerStyled, { children: _jsxs(OTPTitleStyled, { children: [loading ? st('ide_otp_waiting_title') : st('session_expired_otp'), !loading && phone && (_jsxs("span", { children: [st('code_sent_to'), " ", _jsx("span", __assign({ dir: 'ltr' }, { children: maskPhone(phone) }))] }))] }) }), _jsx(OTPInput, { loading: resendLoading, setLoading: setResendLoading }), _jsx(Button, __assign({ disableBack: true, disabled: disabled, isAr: isAr, loading: loading, error: st(error || '') }, { children: t('next') }))] })) })) }));
74
+ };
75
+ export default React.memo(OTPSessionExpired);
@@ -0,0 +1,2 @@
1
+ import OTPSessionExpired from './OTPSessionExpired';
2
+ export default OTPSessionExpired;
@@ -0,0 +1,2 @@
1
+ import OTPSessionExpired from './OTPSessionExpired';
2
+ export default OTPSessionExpired;
@@ -0,0 +1,8 @@
1
+ import * as yup from 'yup';
2
+ export declare const OTPValidation: yup.ObjectSchema<import("yup/lib/object").Assign<import("yup/lib/object").ObjectShape, {
3
+ otp: import("yup/lib/string").RequiredStringSchema<string | undefined, import("yup/lib/types").AnyObject>;
4
+ }>, import("yup/lib/object").AnyObject, import("yup/lib/object").TypeOfShape<import("yup/lib/object").Assign<import("yup/lib/object").ObjectShape, {
5
+ otp: import("yup/lib/string").RequiredStringSchema<string | undefined, import("yup/lib/types").AnyObject>;
6
+ }>>, import("yup/lib/object").AssertsShape<import("yup/lib/object").Assign<import("yup/lib/object").ObjectShape, {
7
+ otp: import("yup/lib/string").RequiredStringSchema<string | undefined, import("yup/lib/types").AnyObject>;
8
+ }>>>;
@@ -0,0 +1,4 @@
1
+ import * as yup from 'yup';
2
+ export var OTPValidation = yup.object().shape({
3
+ otp: yup.string().min(6, 'otp_min_length').required('otp_required')
4
+ });
@@ -59,7 +59,7 @@ var __rest = (this && this.__rest) || function (s, e) {
59
59
  import { jsx as _jsx } from "react/jsx-runtime";
60
60
  import { memo } from 'react';
61
61
  import { createRoot } from 'react-dom/client';
62
- import { useAppTheme, useAppDispatch, useAppSelector, useAppConfig, useErrorListener, useStepStartedListener, useVerifyToken } from '../../hooks';
62
+ import { useAppTheme, useAppDispatch, useAppSelector, useAppConfig, useErrorListener, useStepStartedListener, useVerifyToken, useSessionExpiryHandler } from '../../hooks';
63
63
  import { handleOpen, settingsSelector } from '../../app/settings';
64
64
  import AnimationFlow from '../../components/AnimationFlow';
65
65
  import { store } from '../../app/store';
@@ -69,7 +69,7 @@ import { FeatureContainer } from '../shared/Containers';
69
69
  import { getParameterByName, findOrCreateElementAndInject, sendPageView, initializeGTM } from '../../utils';
70
70
  import { PASSWORD_OPERATION_TYPE, PASSWORD_SCREENS_NAVIGATION } from '../../constants';
71
71
  import { passwordFeatureScreens } from '../featuresScreens';
72
- import { passwordSelector, verifyLeadToken, verifyOperationToken } from '../app/password/passwordStore';
72
+ import { clearError, passwordSelector, verifyLeadToken, verifyLeadTokenSessionExpired, verifyOperationToken } from '../app/password/passwordStore';
73
73
  import Background from '../shared/Background';
74
74
  var Password = memo(function (_a) {
75
75
  var _b, _c, _d;
@@ -81,6 +81,7 @@ var Password = memo(function (_a) {
81
81
  useAppConfig(__assign({ navigation: PASSWORD_SCREENS_NAVIGATION, disableSettingFetching: props.mode === 'content' ? false : !!verifyToken || !!configToken }, props));
82
82
  useErrorListener(passwordError || error);
83
83
  useStepStartedListener();
84
+ useSessionExpiryHandler({ error: passwordError, clearError: clearError, createAuthSession: verifyLeadTokenSessionExpired });
84
85
  var activeScreen = data.activeScreen, isTapOrigin = data.isTapOrigin, open = data.open, merchant = data.merchant, isMaturityExpress = data.isMaturityExpress, featureScreensNavigation = data.featureScreensNavigation, appConfig = data.appConfig;
85
86
  var animationDirection = open ? (_b = appConfig.features) === null || _b === void 0 ? void 0 : _b.dialogStartTransition : (_c = appConfig.features) === null || _c === void 0 ? void 0 : _c.dialogEndTransition;
86
87
  var handleVerifyToken = function (_a) {
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ export interface OTPProps {
3
+ loading: boolean;
4
+ setLoading: (flag: boolean) => void;
5
+ }
6
+ declare const _default: React.MemoExoticComponent<({ loading }: OTPProps) => JSX.Element>;
7
+ export default _default;
@@ -0,0 +1,51 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ import * as React from 'react';
14
+ import Box from '@mui/material/Box/Box';
15
+ import { styled } from '@mui/material/styles';
16
+ import OTPField from '../../../shared/OTP';
17
+ import { useController, useFormContext } from 'react-hook-form';
18
+ import { useTranslation } from 'react-i18next';
19
+ import { DEFAULT_TIMER_VALUE } from '../../../../constants';
20
+ import { useAppDispatch, useAppSelector } from '../../../../hooks';
21
+ import { isTokenExpired } from '../../../../utils';
22
+ import { passwordSelector, clearError, verifyLeadTokenSessionExpired } from '../../../app/password/passwordStore';
23
+ var BoxStyled = styled(Box)(function (_a) {
24
+ var theme = _a.theme;
25
+ return ({
26
+ display: 'flex',
27
+ flexDirection: 'column',
28
+ fontFamily: theme.typography.fontFamily
29
+ });
30
+ });
31
+ var OTPInput = function (_a) {
32
+ var loading = _a.loading;
33
+ var _b = useFormContext(), control = _b.control, setValue = _b.setValue;
34
+ var t = useTranslation().t;
35
+ var otpControl = useController({ name: 'otp', control: control });
36
+ var dispatch = useAppDispatch();
37
+ var error = useAppSelector(passwordSelector).error;
38
+ var handleOnOTPChange = function (otp) {
39
+ if (error)
40
+ dispatch(clearError());
41
+ otpControl.field.onChange(otp);
42
+ };
43
+ var handleOnResendOTP = function () {
44
+ if (otpControl.field.value)
45
+ setValue('otp', '', { shouldValidate: true });
46
+ dispatch(verifyLeadTokenSessionExpired(false));
47
+ };
48
+ var otpValue = otpControl.field.value;
49
+ return (_jsx(BoxStyled, __assign({ dir: 'ltr' }, { children: _jsx(OTPField, { loading: loading, timeEndLabel: t('ide_otp_resend_label'), timerInSeconds: DEFAULT_TIMER_VALUE, onResetClick: handleOnResendOTP, value: otpValue, hasError: isTokenExpired(error), onChange: function (number) { return handleOnOTPChange(number.toString()); } }) })));
50
+ };
51
+ export default React.memo(OTPInput);
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+ export interface OTPProps {
3
+ }
4
+ declare const _default: React.MemoExoticComponent<({}: OTPProps) => JSX.Element>;
5
+ export default _default;
@@ -0,0 +1,75 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
+ import * as React from 'react';
14
+ import { useAppDispatch } from '../../../../hooks';
15
+ import { useTranslation } from 'react-i18next';
16
+ import { useForm, FormProvider } from 'react-hook-form';
17
+ import { yupResolver } from '@hookform/resolvers/yup';
18
+ import Box from '@mui/material/Box/Box';
19
+ import { styled } from '@mui/material/styles';
20
+ import { useLanguage, useAppSelector, useSanitizedTranslation } from '../../../../hooks';
21
+ import { deepCopy, maskPhone } from '../../../../utils';
22
+ import Form from '../../../../components/Form';
23
+ import Text from '../../../../components/Text';
24
+ import { ScreenContainer } from '../../../shared/Containers';
25
+ import { passwordSelector, clearError, resetOTPScreen, verifyLeadOTPSessionExpired } from '../../../app/password/passwordStore';
26
+ import Button from '../../../shared/Button';
27
+ import { OTPValidation } from './validation';
28
+ import OTPInput from './OTPInput';
29
+ var OTPTitleContainerStyled = styled(Box)(function (_a) {
30
+ var theme = _a.theme;
31
+ return ({
32
+ background: theme.palette.common.white,
33
+ border: '1px solid',
34
+ borderColor: theme.palette.divider,
35
+ direction: theme.direction,
36
+ borderRadius: theme.spacing(0, 0, 1.25, 1.25),
37
+ marginBottom: theme.spacing(5.75)
38
+ });
39
+ });
40
+ var OTPTitleStyled = styled(Text)(function (_a) {
41
+ var theme = _a.theme;
42
+ return (__assign(__assign({}, theme.typography.body1), { color: theme.palette.text.primary, fontWeight: theme.typography.fontWeightLight, marginBlock: theme.spacing(1.75), marginInlineStart: theme.spacing(2.5), lineHeight: 1.5, display: 'flex', flexDirection: 'column' }));
43
+ });
44
+ var FormStyled = styled(Form)(function () { return ({
45
+ display: 'flex',
46
+ flexDirection: 'column'
47
+ }); });
48
+ var OTPSessionExpired = function (_a) {
49
+ var _b, _c;
50
+ var dispatch = useAppDispatch();
51
+ var _d = useAppSelector(passwordSelector), data = _d.data, loading = _d.loading, error = _d.error;
52
+ var methods = useForm({
53
+ resolver: yupResolver(OTPValidation),
54
+ defaultValues: data.otpData,
55
+ mode: 'onChange'
56
+ });
57
+ var t = useTranslation().t;
58
+ var st = useSanitizedTranslation();
59
+ var isAr = useLanguage().isAr;
60
+ var _e = React.useState(false), resendLoading = _e[0], setResendLoading = _e[1];
61
+ var phone = (_c = (_b = data.verify.responseBody) === null || _b === void 0 ? void 0 : _b.verification_by) === null || _c === void 0 ? void 0 : _c.sent_to;
62
+ React.useEffect(function () {
63
+ if (error && methods.formState.isValid && phone)
64
+ dispatch(clearError());
65
+ return function () {
66
+ dispatch(resetOTPScreen());
67
+ };
68
+ }, [methods.formState.isValid]);
69
+ var onSubmit = function (formData) {
70
+ dispatch(verifyLeadOTPSessionExpired(deepCopy(formData)));
71
+ };
72
+ var disabled = !methods.formState.isValid || !!error || !phone || resendLoading;
73
+ return (_jsx(ScreenContainer, { children: _jsx(FormProvider, __assign({}, methods, { children: _jsxs(FormStyled, __assign({ onSubmit: methods.handleSubmit(onSubmit) }, { children: [_jsx(OTPTitleContainerStyled, { children: _jsxs(OTPTitleStyled, { children: [loading ? st('ide_otp_waiting_title') : st('session_expired_otp'), !loading && phone && (_jsxs("span", { children: [st('code_sent_to'), " ", _jsx("span", __assign({ dir: 'ltr' }, { children: maskPhone(phone) }))] }))] }) }), _jsx(OTPInput, { loading: resendLoading, setLoading: setResendLoading }), _jsx(Button, __assign({ disableBack: true, disabled: disabled, isAr: isAr, loading: loading, error: st(error || '') }, { children: t('next') }))] })) })) }));
74
+ };
75
+ export default React.memo(OTPSessionExpired);
@@ -0,0 +1,2 @@
1
+ import OTPSessionExpired from './OTPSessionExpired';
2
+ export default OTPSessionExpired;
@@ -0,0 +1,2 @@
1
+ import OTPSessionExpired from './OTPSessionExpired';
2
+ export default OTPSessionExpired;
@@ -0,0 +1,8 @@
1
+ import * as yup from 'yup';
2
+ export declare const OTPValidation: yup.ObjectSchema<import("yup/lib/object").Assign<import("yup/lib/object").ObjectShape, {
3
+ otp: import("yup/lib/string").RequiredStringSchema<string | undefined, import("yup/lib/types").AnyObject>;
4
+ }>, import("yup/lib/object").AnyObject, import("yup/lib/object").TypeOfShape<import("yup/lib/object").Assign<import("yup/lib/object").ObjectShape, {
5
+ otp: import("yup/lib/string").RequiredStringSchema<string | undefined, import("yup/lib/types").AnyObject>;
6
+ }>>, import("yup/lib/object").AssertsShape<import("yup/lib/object").Assign<import("yup/lib/object").ObjectShape, {
7
+ otp: import("yup/lib/string").RequiredStringSchema<string | undefined, import("yup/lib/types").AnyObject>;
8
+ }>>>;
@@ -0,0 +1,4 @@
1
+ import * as yup from 'yup';
2
+ export var OTPValidation = yup.object().shape({
3
+ otp: yup.string().min(6, 'otp_min_length').required('otp_required')
4
+ });
@@ -23,7 +23,7 @@ var __rest = (this && this.__rest) || function (s, e) {
23
23
  import { jsx as _jsx } from "react/jsx-runtime";
24
24
  import React, { memo } from 'react';
25
25
  import { createRoot } from 'react-dom/client';
26
- import { useAppTheme, useAppSelector, useAppConfig, useErrorListener, useStepStartedListener, useVerifyToken, useAppDispatch } from '../../hooks';
26
+ import { useAppTheme, useAppSelector, useAppConfig, useErrorListener, useStepStartedListener, useVerifyToken, useAppDispatch, useSessionExpiryHandler } from '../../hooks';
27
27
  import { handleOpen, settingsSelector } from '../../app/settings';
28
28
  import AnimationFlow from '../../components/AnimationFlow';
29
29
  import { store } from '../../app/store';
@@ -33,7 +33,7 @@ import { findOrCreateElementAndInject, initializeGTM, sendPageView } from '../..
33
33
  import { FeatureContainer } from '../shared/Containers';
34
34
  import { TAX_SCREENS_NAVIGATION } from '../../constants';
35
35
  import { taxFeatureScreens } from '../featuresScreens';
36
- import { taxSelector, verifyLeadToken } from '../app/tax/taxStore';
36
+ import { clearError, taxSelector, verifyLeadToken, verifyLeadTokenSessionVerified } from '../app/tax/taxStore';
37
37
  import Background from '../shared/Background';
38
38
  var Tax = memo(function (_a) {
39
39
  var _b, _c, _d;
@@ -45,6 +45,7 @@ var Tax = memo(function (_a) {
45
45
  useAppConfig(__assign(__assign({ navigation: TAX_SCREENS_NAVIGATION }, props), { disableSettingFetching: props.mode === 'content' ? false : !!verifyToken || !!configToken }));
46
46
  useErrorListener(taxError || error);
47
47
  useStepStartedListener();
48
+ useSessionExpiryHandler({ error: taxError, clearError: clearError, createAuthSession: verifyLeadTokenSessionVerified });
48
49
  var activeScreen = data.activeScreen, isTapOrigin = data.isTapOrigin, open = data.open, featureScreensNavigation = data.featureScreensNavigation, merchant = data.merchant, isMaturityExpress = data.isMaturityExpress, appConfig = data.appConfig;
49
50
  var animationDirection = open ? (_b = appConfig.features) === null || _b === void 0 ? void 0 : _b.dialogStartTransition : (_c = appConfig.features) === null || _c === void 0 ? void 0 : _c.dialogEndTransition;
50
51
  React.useEffect(function () {
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ export interface OTPProps {
3
+ loading: boolean;
4
+ setLoading: (flag: boolean) => void;
5
+ }
6
+ declare const _default: React.MemoExoticComponent<({ loading }: OTPProps) => JSX.Element>;
7
+ export default _default;
@@ -0,0 +1,51 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ import * as React from 'react';
14
+ import Box from '@mui/material/Box/Box';
15
+ import { styled } from '@mui/material/styles';
16
+ import OTPField from '../../../shared/OTP';
17
+ import { useController, useFormContext } from 'react-hook-form';
18
+ import { useTranslation } from 'react-i18next';
19
+ import { DEFAULT_TIMER_VALUE } from '../../../../constants';
20
+ import { useAppDispatch, useAppSelector } from '../../../../hooks';
21
+ import { isTokenExpired } from '../../../../utils';
22
+ import { taxSelector, clearError, verifyLeadTokenSessionVerified } from '../../../app/tax/taxStore';
23
+ var BoxStyled = styled(Box)(function (_a) {
24
+ var theme = _a.theme;
25
+ return ({
26
+ display: 'flex',
27
+ flexDirection: 'column',
28
+ fontFamily: theme.typography.fontFamily
29
+ });
30
+ });
31
+ var OTPInput = function (_a) {
32
+ var loading = _a.loading;
33
+ var _b = useFormContext(), control = _b.control, setValue = _b.setValue;
34
+ var t = useTranslation().t;
35
+ var otpControl = useController({ name: 'otp', control: control });
36
+ var dispatch = useAppDispatch();
37
+ var error = useAppSelector(taxSelector).error;
38
+ var handleOnOTPChange = function (otp) {
39
+ if (error)
40
+ dispatch(clearError());
41
+ otpControl.field.onChange(otp);
42
+ };
43
+ var handleOnResendOTP = function () {
44
+ if (otpControl.field.value)
45
+ setValue('otp', '', { shouldValidate: true });
46
+ dispatch(verifyLeadTokenSessionVerified(false));
47
+ };
48
+ var otpValue = otpControl.field.value;
49
+ return (_jsx(BoxStyled, __assign({ dir: 'ltr' }, { children: _jsx(OTPField, { loading: loading, timeEndLabel: t('ide_otp_resend_label'), timerInSeconds: DEFAULT_TIMER_VALUE, onResetClick: handleOnResendOTP, value: otpValue, hasError: isTokenExpired(error), onChange: function (number) { return handleOnOTPChange(number.toString()); } }) })));
50
+ };
51
+ export default React.memo(OTPInput);
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+ export interface OTPProps {
3
+ }
4
+ declare const _default: React.MemoExoticComponent<({}: OTPProps) => JSX.Element>;
5
+ export default _default;
@@ -0,0 +1,75 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
+ import * as React from 'react';
14
+ import { useAppDispatch } from '../../../../hooks';
15
+ import { useTranslation } from 'react-i18next';
16
+ import { useForm, FormProvider } from 'react-hook-form';
17
+ import { yupResolver } from '@hookform/resolvers/yup';
18
+ import Box from '@mui/material/Box/Box';
19
+ import { styled } from '@mui/material/styles';
20
+ import { useLanguage, useAppSelector, useSanitizedTranslation } from '../../../../hooks';
21
+ import { deepCopy, maskPhone } from '../../../../utils';
22
+ import Form from '../../../../components/Form';
23
+ import Text from '../../../../components/Text';
24
+ import { ScreenContainer } from '../../../shared/Containers';
25
+ import { taxSelector, clearError, resetOTPScreen, verifyLeadOTPSessionExpired } from '../../../app/tax/taxStore';
26
+ import Button from '../../../shared/Button';
27
+ import { OTPValidation } from './validation';
28
+ import OTPInput from './OTPInput';
29
+ var OTPTitleContainerStyled = styled(Box)(function (_a) {
30
+ var theme = _a.theme;
31
+ return ({
32
+ background: theme.palette.common.white,
33
+ border: '1px solid',
34
+ borderColor: theme.palette.divider,
35
+ direction: theme.direction,
36
+ borderRadius: theme.spacing(0, 0, 1.25, 1.25),
37
+ marginBottom: theme.spacing(5.75)
38
+ });
39
+ });
40
+ var OTPTitleStyled = styled(Text)(function (_a) {
41
+ var theme = _a.theme;
42
+ return (__assign(__assign({}, theme.typography.body1), { color: theme.palette.text.primary, fontWeight: theme.typography.fontWeightLight, marginBlock: theme.spacing(1.75), marginInlineStart: theme.spacing(2.5), lineHeight: 1.5, display: 'flex', flexDirection: 'column' }));
43
+ });
44
+ var FormStyled = styled(Form)(function () { return ({
45
+ display: 'flex',
46
+ flexDirection: 'column'
47
+ }); });
48
+ var OTPSessionExpired = function (_a) {
49
+ var _b, _c;
50
+ var dispatch = useAppDispatch();
51
+ var _d = useAppSelector(taxSelector), data = _d.data, loading = _d.loading, error = _d.error;
52
+ var methods = useForm({
53
+ resolver: yupResolver(OTPValidation),
54
+ defaultValues: data.otpData,
55
+ mode: 'onChange'
56
+ });
57
+ var t = useTranslation().t;
58
+ var st = useSanitizedTranslation();
59
+ var isAr = useLanguage().isAr;
60
+ var _e = React.useState(false), resendLoading = _e[0], setResendLoading = _e[1];
61
+ var phone = (_c = (_b = data.verify.responseBody) === null || _b === void 0 ? void 0 : _b.verification_by) === null || _c === void 0 ? void 0 : _c.sent_to;
62
+ React.useEffect(function () {
63
+ if (error && methods.formState.isValid && phone)
64
+ dispatch(clearError());
65
+ return function () {
66
+ dispatch(resetOTPScreen());
67
+ };
68
+ }, [methods.formState.isValid]);
69
+ var onSubmit = function (formData) {
70
+ dispatch(verifyLeadOTPSessionExpired(deepCopy(formData)));
71
+ };
72
+ var disabled = !methods.formState.isValid || !!error || !phone || resendLoading;
73
+ return (_jsx(ScreenContainer, { children: _jsx(FormProvider, __assign({}, methods, { children: _jsxs(FormStyled, __assign({ onSubmit: methods.handleSubmit(onSubmit) }, { children: [_jsx(OTPTitleContainerStyled, { children: _jsxs(OTPTitleStyled, { children: [loading ? st('ide_otp_waiting_title') : st('session_expired_otp'), !loading && phone && (_jsxs("span", { children: [st('code_sent_to'), " ", _jsx("span", __assign({ dir: 'ltr' }, { children: maskPhone(phone) }))] }))] }) }), _jsx(OTPInput, { loading: resendLoading, setLoading: setResendLoading }), _jsx(Button, __assign({ disableBack: true, disabled: disabled, isAr: isAr, loading: loading, error: st(error || '') }, { children: t('next') }))] })) })) }));
74
+ };
75
+ export default React.memo(OTPSessionExpired);
@@ -0,0 +1,2 @@
1
+ import OTPSessionExpired from './OTPSessionExpired';
2
+ export default OTPSessionExpired;
@@ -0,0 +1,2 @@
1
+ import OTPSessionExpired from './OTPSessionExpired';
2
+ export default OTPSessionExpired;
@@ -0,0 +1,8 @@
1
+ import * as yup from 'yup';
2
+ export declare const OTPValidation: yup.ObjectSchema<import("yup/lib/object").Assign<import("yup/lib/object").ObjectShape, {
3
+ otp: import("yup/lib/string").RequiredStringSchema<string | undefined, import("yup/lib/types").AnyObject>;
4
+ }>, import("yup/lib/object").AnyObject, import("yup/lib/object").TypeOfShape<import("yup/lib/object").Assign<import("yup/lib/object").ObjectShape, {
5
+ otp: import("yup/lib/string").RequiredStringSchema<string | undefined, import("yup/lib/types").AnyObject>;
6
+ }>>, import("yup/lib/object").AssertsShape<import("yup/lib/object").Assign<import("yup/lib/object").ObjectShape, {
7
+ otp: import("yup/lib/string").RequiredStringSchema<string | undefined, import("yup/lib/types").AnyObject>;
8
+ }>>>;
@@ -0,0 +1,4 @@
1
+ import * as yup from 'yup';
2
+ export var OTPValidation = yup.object().shape({
3
+ otp: yup.string().min(6, 'otp_min_length').required('otp_required')
4
+ });
@@ -23,7 +23,7 @@ var __rest = (this && this.__rest) || function (s, e) {
23
23
  import { jsx as _jsx } from "react/jsx-runtime";
24
24
  import React, { memo } from 'react';
25
25
  import { createRoot } from 'react-dom/client';
26
- import { useAppTheme, useAppSelector, useAppConfig, useErrorListener, useStepStartedListener, useVerifyToken, useAppDispatch } from '../../hooks';
26
+ import { useAppTheme, useAppSelector, useAppConfig, useErrorListener, useStepStartedListener, useVerifyToken, useAppDispatch, useSessionExpiryHandler } from '../../hooks';
27
27
  import { handleCurrentActiveScreen, settingsSelector } from '../../app/settings';
28
28
  import { store } from '../../app/store';
29
29
  import AnimationFlow from '../../components/AnimationFlow';
@@ -32,7 +32,7 @@ import Collapse from '../../components/Collapse';
32
32
  import { findOrCreateElementAndInject, initializeGTM, sendPageView } from '../../utils';
33
33
  import { CONNECT_FLOWS, TERMINAL_SCREENS_NAVIGATION } from '../../constants';
34
34
  import { FeatureContainer } from '../shared/Containers';
35
- import { terminalSelector, verifyToken as verifyTokenAPI } from '../app/terminal/terminalStore';
35
+ import { clearError, terminalSelector, verifyToken as verifyTokenAPI, verifyTokenSessionExpired } from '../app/terminal/terminalStore';
36
36
  import { terminalFeatureScreens } from '../featuresScreens';
37
37
  import Background from '../shared/Background';
38
38
  var Terminal = memo(function (_a) {
@@ -45,6 +45,7 @@ var Terminal = memo(function (_a) {
45
45
  useAppConfig(__assign(__assign({ navigation: TERMINAL_SCREENS_NAVIGATION }, props), { disableSettingFetching: props.mode === 'content' ? false : !!verifyToken || !!configToken }));
46
46
  useErrorListener(terminalError || error);
47
47
  useStepStartedListener();
48
+ useSessionExpiryHandler({ error: terminalError, clearError: clearError, createAuthSession: verifyTokenSessionExpired });
48
49
  var activeScreen = data.activeScreen, isTapOrigin = data.isTapOrigin, open = data.open, featureScreensNavigation = data.featureScreensNavigation, merchant = data.merchant, isMaturityExpress = data.isMaturityExpress, appConfig = data.appConfig;
49
50
  var animationDirection = open ? (_b = appConfig.features) === null || _b === void 0 ? void 0 : _b.dialogStartTransition : (_c = appConfig.features) === null || _c === void 0 ? void 0 : _c.dialogEndTransition;
50
51
  var verifyTokenAndMoveToNextScreen = function (_a) {
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ export interface OTPProps {
3
+ loading: boolean;
4
+ setLoading: (flag: boolean) => void;
5
+ }
6
+ declare const _default: React.MemoExoticComponent<({ loading }: OTPProps) => JSX.Element>;
7
+ export default _default;