Skip to content

Commit 123f7f9

Browse files
committed
feat: update js version to 2.0.0
1 parent a2b6ac9 commit 123f7f9

9 files changed

Lines changed: 147 additions & 44 deletions

package-lock.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "1.1.19",
2+
"version": "1.2.0-beta.0",
33
"license": "MIT",
44
"main": "dist/index.js",
55
"typings": "dist/index.d.ts",
@@ -66,7 +66,7 @@
6666
"typescript": "^5.2.2"
6767
},
6868
"dependencies": {
69-
"@authorizerdev/authorizer-js": "^1.2.18",
69+
"@authorizerdev/authorizer-js": "^2.0.0-beta.1",
7070
"validator": "^13.11.0"
7171
}
7272
}

src/components/AuthorizerBasicAuthLogin.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,12 @@ export const AuthorizerBasicAuthLogin: FC<{
9393
data.roles = roles;
9494
}
9595

96-
const res = await authorizerRef.login(data);
96+
const { data: res, errors } = await authorizerRef.login(data);
97+
if (errors && errors.length) {
98+
setError(errors[0].message);
99+
setLoading(false);
100+
return;
101+
}
97102
// if totp is enabled for the first time show totp screen with scanner
98103
if (
99104
res &&

src/components/AuthorizerForgotPassword.tsx

Lines changed: 97 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,26 @@
11
import React, { FC, useEffect, useState } from 'react';
22
import isEmail from 'validator/es/lib/isEmail';
3+
import isMobilePhone from 'validator/es/lib/isMobilePhone';
34

45
import styles from '../styles/default.css';
56
import { ButtonAppearance, MessageType, Views } from '../constants';
67
import { useAuthorizer } from '../contexts/AuthorizerContext';
78
import { StyledButton, StyledFooter, StyledLink } from '../styledComponents';
89
import { formatErrorMessage } from '../utils/format';
910
import { Message } from './Message';
11+
import { AuthorizerVerifyOtp } from './AuthorizerVerifyOtp';
12+
import { OtpDataType } from '../types';
1013

1114
interface InputDataType {
12-
email: string | null;
15+
email_or_phone_number: string | null;
1316
}
1417

18+
const initOtpData: OtpDataType = {
19+
is_screen_visible: false,
20+
email: '',
21+
phone_number: '',
22+
};
23+
1524
export const AuthorizerForgotPassword: FC<{
1625
setView?: (v: Views) => void;
1726
onForgotPassword?: (data: any) => void;
@@ -20,11 +29,12 @@ export const AuthorizerForgotPassword: FC<{
2029
const [error, setError] = useState(``);
2130
const [loading, setLoading] = useState(false);
2231
const [successMessage, setSuccessMessage] = useState(``);
32+
const [otpData, setOtpData] = useState<OtpDataType>({ ...initOtpData });
2333
const [formData, setFormData] = useState<InputDataType>({
24-
email: null,
34+
email_or_phone_number: null,
2535
});
2636
const [errorData, setErrorData] = useState<InputDataType>({
27-
email: null,
37+
email_or_phone_number: null,
2838
});
2939
const { authorizerRef, config } = useAuthorizer();
3040

@@ -36,22 +46,50 @@ export const AuthorizerForgotPassword: FC<{
3646
e.preventDefault();
3747
try {
3848
setLoading(true);
39-
40-
const res = await authorizerRef.forgotPassword({
41-
email: formData.email || '',
49+
let email: string = '';
50+
let phone_number: string = '';
51+
if (formData.email_or_phone_number) {
52+
if (isEmail(formData.email_or_phone_number)) {
53+
email = formData.email_or_phone_number;
54+
} else if (isMobilePhone(formData.email_or_phone_number)) {
55+
phone_number = formData.email_or_phone_number;
56+
}
57+
}
58+
if (!email && !phone_number) {
59+
setErrorData({
60+
...errorData,
61+
email_or_phone_number: 'Invalid email or phone number',
62+
});
63+
setLoading(false);
64+
return;
65+
}
66+
const { data: res, errors } = await authorizerRef.forgotPassword({
67+
email: email,
68+
phone_number: phone_number,
4269
state: urlProps?.state || '',
4370
redirect_uri:
4471
urlProps?.redirect_uri ||
4572
config.redirectURL ||
4673
window.location.origin,
4774
});
4875
setLoading(false);
49-
50-
if (res && res.message) {
76+
if (errors && errors.length) {
77+
setError(formatErrorMessage(errors[0]?.message));
78+
return;
79+
}
80+
if (res?.message) {
5181
setError(``);
5282
setSuccessMessage(res.message);
83+
if (res?.should_show_mobile_otp_screen) {
84+
setOtpData({
85+
...otpData,
86+
is_screen_visible: true,
87+
email: email,
88+
phone_number: phone_number,
89+
});
90+
return;
91+
}
5392
}
54-
5593
if (onForgotPassword) {
5694
onForgotPassword(res);
5795
}
@@ -66,19 +104,43 @@ export const AuthorizerForgotPassword: FC<{
66104
};
67105

68106
useEffect(() => {
69-
if (formData.email === '') {
70-
setErrorData({ ...errorData, email: 'Email is required' });
71-
} else if (formData.email && !isEmail(formData.email)) {
72-
setErrorData({ ...errorData, email: 'Please enter valid email' });
107+
if (formData.email_or_phone_number === '') {
108+
setErrorData({
109+
...errorData,
110+
email_or_phone_number: 'Email OR Phone Number is required',
111+
});
112+
} else if (
113+
!isEmail(formData.email_or_phone_number || '') &&
114+
!isMobilePhone(formData.email_or_phone_number || '')
115+
) {
116+
setErrorData({
117+
...errorData,
118+
email_or_phone_number: 'Invalid Email OR Phone Number',
119+
});
73120
} else {
74-
setErrorData({ ...errorData, email: null });
121+
setErrorData({ ...errorData, email_or_phone_number: null });
75122
}
76-
}, [formData.email]);
123+
}, [formData.email_or_phone_number]);
77124

78125
if (successMessage) {
79126
return <Message type={MessageType.Success} text={successMessage} />;
80127
}
81128

129+
if (otpData.is_screen_visible) {
130+
return (
131+
<AuthorizerVerifyOtp
132+
email={otpData.email}
133+
phone_number={otpData.phone_number}
134+
urlProps={urlProps}
135+
onLogin={() => {
136+
if (onForgotPassword) {
137+
onForgotPassword({});
138+
}
139+
}}
140+
/>
141+
);
142+
}
143+
82144
return (
83145
<>
84146
{error && (
@@ -93,29 +155,39 @@ export const AuthorizerForgotPassword: FC<{
93155
<div className={styles['styled-form-group']}>
94156
<label
95157
className={styles['form-input-label']}
96-
htmlFor="authorizer-forgot-password-email"
158+
htmlFor="authorizer-forgot-password-email-or-phone-number"
97159
>
98160
<span>* </span>Email
99161
</label>
100162
<input
101-
name="email"
102-
id="authorizer-forgot-password-email"
163+
name="email_or_phone_number"
164+
id="authorizer-forgot-password-email-or-"
103165
className={`${styles['form-input-field']} ${
104-
errorData.email ? styles['input-error-content'] : null
166+
errorData.email_or_phone_number
167+
? styles['input-error-content']
168+
: null
105169
}`}
106170
placeholder="eg. foo@bar.com"
107-
type="email"
108-
value={formData.email || ''}
109-
onChange={(e) => onInputChange('email', e.target.value)}
171+
type="text"
172+
value={formData.email_or_phone_number || ''}
173+
onChange={(e) =>
174+
onInputChange('email_or_phone_number', e.target.value)
175+
}
110176
/>
111-
{errorData.email && (
112-
<div className={styles['form-input-error']}>{errorData.email}</div>
177+
{errorData.email_or_phone_number && (
178+
<div className={styles['form-input-error']}>
179+
{errorData.email_or_phone_number}
180+
</div>
113181
)}
114182
</div>
115183
<br />
116184
<StyledButton
117185
type="submit"
118-
disabled={loading || !!errorData.email || !formData.email}
186+
disabled={
187+
loading ||
188+
!!errorData.email_or_phone_number ||
189+
!formData.email_or_phone_number
190+
}
119191
appearance={ButtonAppearance.Primary}
120192
>
121193
{loading ? `Processing ...` : `Send Email`}

src/components/AuthorizerMagicLinkLogin.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,12 @@ export const AuthorizerMagicLinkLogin: FC<{
4747
if (roles && roles.length) {
4848
data.roles = roles;
4949
}
50-
const res = await authorizerRef.magicLinkLogin(data);
50+
const { data: res, errors } = await authorizerRef.magicLinkLogin(data);
5151
setLoading(false);
52+
if (errors && errors.length) {
53+
setError(formatErrorMessage(errors[0]?.message));
54+
return;
55+
}
5256

5357
if (res) {
5458
setError(``);

src/components/AuthorizerResetPassword.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,16 @@ export const AuthorizerResetPassword: FC<Props> = ({ onReset }) => {
4141
e.preventDefault();
4242
setLoading(true);
4343
try {
44-
const res = await authorizerRef.resetPassword({
44+
const { data: res, errors } = await authorizerRef.resetPassword({
4545
token,
4646
password: formData.password || '',
4747
confirm_password: formData.confirmPassword || '',
4848
});
4949
setLoading(false);
50+
if (errors && errors.length) {
51+
setError(formatErrorMessage(errors[0]?.message));
52+
return;
53+
}
5054
setError(``);
5155
if (onReset) {
5256
onReset(res);

src/components/AuthorizerSignup.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,12 @@ export const AuthorizerSignup: FC<{
8585
if (roles && roles.length) {
8686
data.roles = roles;
8787
}
88-
const res = await authorizerRef.signup(data);
88+
const { data: res, errors } = await authorizerRef.signup(data);
89+
if (errors && errors.length) {
90+
setError(formatErrorMessage(errors[0]?.message));
91+
setLoading(false);
92+
return;
93+
}
8994

9095
if (res) {
9196
setError(``);

src/components/AuthorizerVerifyOtp.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,12 @@ export const AuthorizerVerifyOtp: FC<{
5353
data.state = urlProps.state;
5454
}
5555
data.is_totp = !!is_totp;
56-
const res = await authorizerRef.verifyOtp(data);
56+
const { data: res, errors } = await authorizerRef.verifyOtp(data);
5757
setLoading(false);
58-
58+
if (errors && errors.length) {
59+
setError(errors[0]?.message || ``);
60+
return;
61+
}
5962
if (res) {
6063
setError(``);
6164
setAuthData({
@@ -93,10 +96,14 @@ export const AuthorizerVerifyOtp: FC<{
9396
try {
9497
setSendingOtp(true);
9598

96-
const res = await authorizerRef.resendOtp({
99+
const { data: res, errors } = await authorizerRef.resendOtp({
97100
email,
98101
});
99102
setSendingOtp(false);
103+
if (errors && errors.length) {
104+
setError(errors[0]?.message || ``);
105+
return;
106+
}
100107

101108
if (res && res?.message) {
102109
setError(``);

src/contexts/AuthorizerContext.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -142,11 +142,17 @@ export const AuthorizerProvider: FC<{
142142
);
143143

144144
const getToken = async () => {
145-
const metaRes = await authorizerRef.current.getMetaData();
146-
145+
const { data: metaRes, errors: metaResErrors } =
146+
await authorizerRef.current.getMetaData();
147147
try {
148-
const res = await authorizerRef.current.getSession();
149-
if (res.access_token && res.user) {
148+
if (metaResErrors && metaResErrors.length) {
149+
throw new Error(metaResErrors[0].message);
150+
}
151+
const { data: res, errors } = await authorizerRef.current.getSession();
152+
if (errors && errors.length) {
153+
throw new Error(errors[0].message);
154+
}
155+
if (res && res.access_token && res.user) {
150156
const token = {
151157
access_token: res.access_token,
152158
expires_in: res.expires_in,

0 commit comments

Comments
 (0)