dauth-context-react 2.5.0 → 4.0.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.
- package/dist/index.d.mts +0 -11
- package/dist/index.d.ts +0 -11
- package/dist/index.js +49 -139
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +49 -139
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -1
- package/src/api/dauth.api.ts +17 -39
- package/src/api/interfaces/dauth.api.responses.ts +4 -11
- package/src/api/utils/config.ts +5 -5
- package/src/constants.ts +1 -0
- package/src/index.tsx +14 -30
- package/src/initialDauthState.ts +1 -15
- package/src/interfaces.ts +0 -7
- package/src/reducer/dauth.actions.ts +55 -62
- package/src/reducer/dauth.reducer.ts +0 -25
- package/src/reducer/dauth.types.ts +0 -4
package/dist/index.mjs
CHANGED
|
@@ -25,15 +25,6 @@ var initialDauthState = {
|
|
|
25
25
|
updateUser: () => Promise.resolve(false),
|
|
26
26
|
updateUserWithRedirect: () => {
|
|
27
27
|
},
|
|
28
|
-
// Send email verification
|
|
29
|
-
sendEmailVerificationStatus: {
|
|
30
|
-
status: {
|
|
31
|
-
type: "info",
|
|
32
|
-
message: "Sending email verification..."
|
|
33
|
-
},
|
|
34
|
-
isLoading: false
|
|
35
|
-
},
|
|
36
|
-
sendEmailVerification: () => Promise.resolve(false),
|
|
37
28
|
deleteAccount: () => Promise.resolve(false)
|
|
38
29
|
};
|
|
39
30
|
var initialDauthState_default = initialDauthState;
|
|
@@ -42,8 +33,6 @@ var initialDauthState_default = initialDauthState;
|
|
|
42
33
|
var LOGIN = "LOGIN";
|
|
43
34
|
var SET_IS_LOADING = "SET_IS_LOADING";
|
|
44
35
|
var UPDATE_USER = "UPDATE_USER";
|
|
45
|
-
var SET_SEND_EMAIL_VERIFICATION_IS_LOADING = "SET_SEND_EMAIL_VERIFICATION_IS_LOADING";
|
|
46
|
-
var SET_SEND_EMAIL_VERIFICATION_STATUS = "SET_SEND_EMAIL_VERIFICATION_STATUS";
|
|
47
36
|
|
|
48
37
|
// src/reducer/dauth.reducer.ts
|
|
49
38
|
function userReducer(state, action) {
|
|
@@ -75,29 +64,6 @@ function userReducer(state, action) {
|
|
|
75
64
|
};
|
|
76
65
|
return updateUser;
|
|
77
66
|
}
|
|
78
|
-
case SET_SEND_EMAIL_VERIFICATION_STATUS: {
|
|
79
|
-
const setSendEmailVerificationStatus = {
|
|
80
|
-
...state,
|
|
81
|
-
sendEmailVerificationStatus: {
|
|
82
|
-
...state.sendEmailVerificationStatus,
|
|
83
|
-
status: {
|
|
84
|
-
type: payload.type,
|
|
85
|
-
message: payload.message
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
return setSendEmailVerificationStatus;
|
|
90
|
-
}
|
|
91
|
-
case SET_SEND_EMAIL_VERIFICATION_IS_LOADING: {
|
|
92
|
-
const setSendEmailVerificationIsLoading = {
|
|
93
|
-
...state,
|
|
94
|
-
sendEmailVerificationStatus: {
|
|
95
|
-
...state.sendEmailVerificationStatus,
|
|
96
|
-
isLoading: payload
|
|
97
|
-
}
|
|
98
|
-
};
|
|
99
|
-
return setSendEmailVerificationIsLoading;
|
|
100
|
-
}
|
|
101
67
|
default:
|
|
102
68
|
return state;
|
|
103
69
|
}
|
|
@@ -168,21 +134,6 @@ var updateUserAPI = async (domainName, user, token) => {
|
|
|
168
134
|
const data = await response.json();
|
|
169
135
|
return { response, data };
|
|
170
136
|
};
|
|
171
|
-
var sendEmailVerificationAPI = async (domainName, token) => {
|
|
172
|
-
const params = {
|
|
173
|
-
method: "GET",
|
|
174
|
-
headers: {
|
|
175
|
-
Authorization: token,
|
|
176
|
-
"Content-Type": "application/json"
|
|
177
|
-
}
|
|
178
|
-
};
|
|
179
|
-
const response = await fetch(
|
|
180
|
-
`${getServerBasePath()}/app/${domainName}/resend-email-verification`,
|
|
181
|
-
params
|
|
182
|
-
);
|
|
183
|
-
const data = await response.json();
|
|
184
|
-
return { response, data };
|
|
185
|
-
};
|
|
186
137
|
var refreshTokenAPI = async (domainName, refreshToken) => {
|
|
187
138
|
const params = {
|
|
188
139
|
method: "POST",
|
|
@@ -211,6 +162,19 @@ var deleteAccountAPI = async (domainName, token) => {
|
|
|
211
162
|
const data = await response.json();
|
|
212
163
|
return { response, data };
|
|
213
164
|
};
|
|
165
|
+
var exchangeCodeAPI = async (domainName, code) => {
|
|
166
|
+
const params = {
|
|
167
|
+
method: "POST",
|
|
168
|
+
headers: { "Content-Type": "application/json" },
|
|
169
|
+
body: JSON.stringify({ code })
|
|
170
|
+
};
|
|
171
|
+
const response = await fetch(
|
|
172
|
+
`${getServerBasePath()}/app/${domainName}/exchange-code`,
|
|
173
|
+
params
|
|
174
|
+
);
|
|
175
|
+
const data = await response.json();
|
|
176
|
+
return { response, data };
|
|
177
|
+
};
|
|
214
178
|
var logoutAPI = async (domainName, refreshToken) => {
|
|
215
179
|
const params = {
|
|
216
180
|
method: "POST",
|
|
@@ -225,17 +189,31 @@ var logoutAPI = async (domainName, refreshToken) => {
|
|
|
225
189
|
};
|
|
226
190
|
|
|
227
191
|
// src/reducer/dauth.actions.ts
|
|
228
|
-
async function
|
|
192
|
+
async function exchangeCodeAction({
|
|
229
193
|
dispatch,
|
|
230
|
-
|
|
231
|
-
refreshToken,
|
|
194
|
+
code,
|
|
232
195
|
domainName,
|
|
233
196
|
storageKeys,
|
|
234
197
|
onError
|
|
235
198
|
}) {
|
|
236
|
-
dispatch({
|
|
199
|
+
dispatch({
|
|
200
|
+
type: SET_IS_LOADING,
|
|
201
|
+
payload: { isLoading: true }
|
|
202
|
+
});
|
|
237
203
|
try {
|
|
238
|
-
|
|
204
|
+
window.history.replaceState(
|
|
205
|
+
{},
|
|
206
|
+
document.title,
|
|
207
|
+
window.location.pathname
|
|
208
|
+
);
|
|
209
|
+
const exchangeResult = await exchangeCodeAPI(domainName, code);
|
|
210
|
+
if (exchangeResult.response.status !== 200) {
|
|
211
|
+
return resetUser(dispatch, storageKeys);
|
|
212
|
+
}
|
|
213
|
+
const { accessToken, refreshToken } = exchangeResult.data;
|
|
214
|
+
localStorage.setItem(storageKeys.accessToken, accessToken);
|
|
215
|
+
localStorage.setItem(storageKeys.refreshToken, refreshToken);
|
|
216
|
+
const getUserFetch = await getUserAPI(domainName, accessToken);
|
|
239
217
|
if (getUserFetch.response.status === 200) {
|
|
240
218
|
dispatch({
|
|
241
219
|
type: LOGIN,
|
|
@@ -245,15 +223,13 @@ async function setDauthStateAction({
|
|
|
245
223
|
isAuthenticated: true
|
|
246
224
|
}
|
|
247
225
|
});
|
|
248
|
-
window.history.replaceState({}, document.title, window.location.pathname);
|
|
249
|
-
localStorage.setItem(storageKeys.accessToken, token);
|
|
250
|
-
localStorage.setItem(storageKeys.refreshToken, refreshToken);
|
|
251
226
|
return;
|
|
252
|
-
} else {
|
|
253
|
-
return resetUser(dispatch, storageKeys);
|
|
254
227
|
}
|
|
228
|
+
return resetUser(dispatch, storageKeys);
|
|
255
229
|
} catch (error) {
|
|
256
|
-
onError(
|
|
230
|
+
onError(
|
|
231
|
+
error instanceof Error ? error : new Error(String(error))
|
|
232
|
+
);
|
|
257
233
|
return resetUser(dispatch, storageKeys);
|
|
258
234
|
} finally {
|
|
259
235
|
dispatch({
|
|
@@ -397,60 +373,7 @@ async function setUpdateUserAction({
|
|
|
397
373
|
return false;
|
|
398
374
|
}
|
|
399
375
|
} catch (error) {
|
|
400
|
-
onError(
|
|
401
|
-
error instanceof Error ? error : new Error("Update user error")
|
|
402
|
-
);
|
|
403
|
-
return false;
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
async function sendEmailVerificationAction({
|
|
407
|
-
dispatch,
|
|
408
|
-
domainName,
|
|
409
|
-
token
|
|
410
|
-
}) {
|
|
411
|
-
dispatch({
|
|
412
|
-
type: SET_SEND_EMAIL_VERIFICATION_IS_LOADING,
|
|
413
|
-
payload: true
|
|
414
|
-
});
|
|
415
|
-
dispatch({
|
|
416
|
-
type: SET_SEND_EMAIL_VERIFICATION_STATUS,
|
|
417
|
-
payload: { type: "info", message: "Sending email verification..." }
|
|
418
|
-
});
|
|
419
|
-
try {
|
|
420
|
-
const sendEmailFetch = await sendEmailVerificationAPI(domainName, token);
|
|
421
|
-
if (sendEmailFetch.response.status === 200) {
|
|
422
|
-
dispatch({
|
|
423
|
-
type: SET_SEND_EMAIL_VERIFICATION_STATUS,
|
|
424
|
-
payload: { type: "success", message: sendEmailFetch.data.message }
|
|
425
|
-
});
|
|
426
|
-
dispatch({
|
|
427
|
-
type: SET_SEND_EMAIL_VERIFICATION_IS_LOADING,
|
|
428
|
-
payload: false
|
|
429
|
-
});
|
|
430
|
-
return true;
|
|
431
|
-
} else {
|
|
432
|
-
dispatch({
|
|
433
|
-
type: SET_SEND_EMAIL_VERIFICATION_STATUS,
|
|
434
|
-
payload: { type: "error", message: sendEmailFetch.data.message }
|
|
435
|
-
});
|
|
436
|
-
dispatch({
|
|
437
|
-
type: SET_SEND_EMAIL_VERIFICATION_IS_LOADING,
|
|
438
|
-
payload: false
|
|
439
|
-
});
|
|
440
|
-
return false;
|
|
441
|
-
}
|
|
442
|
-
} catch (_) {
|
|
443
|
-
dispatch({
|
|
444
|
-
type: SET_SEND_EMAIL_VERIFICATION_STATUS,
|
|
445
|
-
payload: {
|
|
446
|
-
type: "error",
|
|
447
|
-
message: "Send email verification fetch error"
|
|
448
|
-
}
|
|
449
|
-
});
|
|
450
|
-
dispatch({
|
|
451
|
-
type: SET_SEND_EMAIL_VERIFICATION_IS_LOADING,
|
|
452
|
-
payload: false
|
|
453
|
-
});
|
|
376
|
+
onError(error instanceof Error ? error : new Error("Update user error"));
|
|
454
377
|
return false;
|
|
455
378
|
}
|
|
456
379
|
}
|
|
@@ -497,9 +420,7 @@ async function deleteAccountAction({
|
|
|
497
420
|
}
|
|
498
421
|
return false;
|
|
499
422
|
} catch (error) {
|
|
500
|
-
onError(
|
|
501
|
-
error instanceof Error ? error : new Error("Delete account error")
|
|
502
|
-
);
|
|
423
|
+
onError(error instanceof Error ? error : new Error("Delete account error"));
|
|
503
424
|
return false;
|
|
504
425
|
}
|
|
505
426
|
}
|
|
@@ -519,6 +440,7 @@ var resetUser = (dispatch, storageKeys) => {
|
|
|
519
440
|
// src/constants.ts
|
|
520
441
|
var TOKEN_LS = "dauth_state";
|
|
521
442
|
var REFRESH_TOKEN_LS = "dauth_refresh_token";
|
|
443
|
+
var AUTH_CODE_PARAM = "code";
|
|
522
444
|
|
|
523
445
|
// src/api/utils/routes.ts
|
|
524
446
|
var routes = {
|
|
@@ -566,10 +488,13 @@ var DauthProvider = (props) => {
|
|
|
566
488
|
scheduleRefresh();
|
|
567
489
|
}, refreshIn);
|
|
568
490
|
} catch (_) {
|
|
569
|
-
refreshTimerRef.current = setTimeout(
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
491
|
+
refreshTimerRef.current = setTimeout(
|
|
492
|
+
async () => {
|
|
493
|
+
await refreshSessionAction(ctx);
|
|
494
|
+
scheduleRefresh();
|
|
495
|
+
},
|
|
496
|
+
5 * 60 * 1e3
|
|
497
|
+
);
|
|
573
498
|
}
|
|
574
499
|
}, [ctx, storageKeys.accessToken]);
|
|
575
500
|
useEffect(() => {
|
|
@@ -577,14 +502,9 @@ var DauthProvider = (props) => {
|
|
|
577
502
|
const queryString = window.location.search;
|
|
578
503
|
if (!queryString) return;
|
|
579
504
|
const urlParams = new URLSearchParams(queryString);
|
|
580
|
-
const
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
return setDauthStateAction({
|
|
584
|
-
...ctx,
|
|
585
|
-
token: token_url,
|
|
586
|
-
refreshToken: refresh_url
|
|
587
|
-
});
|
|
505
|
+
const code = urlParams.get(AUTH_CODE_PARAM);
|
|
506
|
+
if (code && !dauthState.isAuthenticated) {
|
|
507
|
+
return exchangeCodeAction({ ...ctx, code });
|
|
588
508
|
}
|
|
589
509
|
})();
|
|
590
510
|
}, []);
|
|
@@ -668,14 +588,6 @@ var DauthProvider = (props) => {
|
|
|
668
588
|
`${getClientBasePath()}/${domainName}/${routes.updateUser}/${token_ls}`
|
|
669
589
|
);
|
|
670
590
|
}, [domainName, storageKeys.accessToken]);
|
|
671
|
-
const sendEmailVerification = useCallback(async () => {
|
|
672
|
-
const token_ls = localStorage.getItem(storageKeys.accessToken);
|
|
673
|
-
if (!token_ls) return false;
|
|
674
|
-
return await sendEmailVerificationAction({
|
|
675
|
-
...ctx,
|
|
676
|
-
token: token_ls
|
|
677
|
-
});
|
|
678
|
-
}, [ctx, storageKeys.accessToken]);
|
|
679
591
|
const deleteAccount = useCallback(async () => {
|
|
680
592
|
const token_ls = localStorage.getItem(storageKeys.accessToken);
|
|
681
593
|
if (!token_ls) return false;
|
|
@@ -693,7 +605,6 @@ var DauthProvider = (props) => {
|
|
|
693
605
|
getAccessToken,
|
|
694
606
|
updateUser,
|
|
695
607
|
updateUserWithRedirect,
|
|
696
|
-
sendEmailVerification,
|
|
697
608
|
deleteAccount
|
|
698
609
|
}),
|
|
699
610
|
[
|
|
@@ -703,7 +614,6 @@ var DauthProvider = (props) => {
|
|
|
703
614
|
getAccessToken,
|
|
704
615
|
updateUser,
|
|
705
616
|
updateUserWithRedirect,
|
|
706
|
-
sendEmailVerification,
|
|
707
617
|
deleteAccount
|
|
708
618
|
]
|
|
709
619
|
);
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx","../src/initialDauthState.ts","../src/reducer/dauth.types.ts","../src/reducer/dauth.reducer.ts","../src/api/utils/config.ts","../src/api/dauth.api.ts","../src/reducer/dauth.actions.ts","../src/constants.ts","../src/api/utils/routes.ts"],"sourcesContent":["import React, {\n useReducer,\n useMemo,\n useEffect,\n useCallback,\n createContext,\n useContext,\n useRef,\n} from 'react';\nimport initialDauthState from './initialDauthState';\nimport userReducer from './reducer/dauth.reducer';\nimport * as action from './reducer/dauth.actions';\nimport { getClientBasePath, setDauthUrl } from './api/utils/config';\nimport { TOKEN_LS, REFRESH_TOKEN_LS } from './constants';\nimport { routes } from './api/utils/routes';\nimport type {\n IDauthProviderProps,\n IDauthStorageKeys,\n IDauthUser,\n IDauthAuthMethods,\n} from './interfaces';\nimport { SET_IS_LOADING } from './reducer/dauth.types';\n\nexport type { IDauthProviderProps, IDauthAuthMethods };\n\nconst defaultOnError = (error: Error) => console.error(error);\n\nexport const DauthProvider: React.FC<IDauthProviderProps> = (\n props: IDauthProviderProps\n) => {\n const { domainName, children, storageKey, onError, env, dauthUrl } =\n props;\n const [dauthState, dispatch] = useReducer(userReducer, initialDauthState);\n const refreshTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Configure custom dauth URL before any API calls\n useEffect(() => {\n setDauthUrl(dauthUrl);\n }, [dauthUrl]);\n\n const storageKeys: IDauthStorageKeys = useMemo(\n () => ({\n accessToken: storageKey?.accessToken ?? TOKEN_LS,\n refreshToken: storageKey?.refreshToken ?? REFRESH_TOKEN_LS,\n }),\n [storageKey?.accessToken, storageKey?.refreshToken]\n );\n\n const handleError = useCallback(\n (error: Error) => (onError ?? defaultOnError)(error),\n [onError]\n );\n\n // Build action context\n const ctx = useMemo(\n () => ({ dispatch, domainName, storageKeys, onError: handleError }),\n [domainName, storageKeys, handleError]\n );\n\n // Schedule next proactive refresh based on access token expiry\n const scheduleRefresh = useCallback(() => {\n if (refreshTimerRef.current) clearTimeout(refreshTimerRef.current);\n const token = localStorage.getItem(storageKeys.accessToken);\n if (!token) return;\n try {\n const payloadB64 = token.split('.')[1];\n if (!payloadB64) return;\n const payload = JSON.parse(atob(payloadB64));\n const expiresIn = (payload.exp || 0) * 1000 - Date.now();\n // Refresh 5 minutes before expiry, minimum 10 seconds\n const refreshIn = Math.max(expiresIn - 5 * 60 * 1000, 10_000);\n refreshTimerRef.current = setTimeout(async () => {\n await action.refreshSessionAction(ctx);\n scheduleRefresh();\n }, refreshIn);\n } catch (_) {\n // If decode fails, retry in 5 minutes\n refreshTimerRef.current = setTimeout(async () => {\n await action.refreshSessionAction(ctx);\n scheduleRefresh();\n }, 5 * 60 * 1000);\n }\n }, [ctx, storageKeys.accessToken]);\n\n // Catch login redirect\n useEffect(() => {\n (async () => {\n const queryString = window.location.search;\n if (!queryString) return;\n const urlParams = new URLSearchParams(queryString);\n const token_url = urlParams.get(storageKeys.accessToken);\n const refresh_url = urlParams.get(storageKeys.refreshToken);\n if (token_url && refresh_url && !dauthState.isAuthenticated) {\n return action.setDauthStateAction({\n ...ctx,\n token: token_url,\n refreshToken: refresh_url,\n });\n }\n })();\n }, []);\n\n // Auto Login\n useEffect(() => {\n (async () => {\n const refreshToken = localStorage.getItem(storageKeys.refreshToken);\n if (refreshToken && !dauthState.isAuthenticated) {\n return action.setAutoLoginAction(ctx);\n } else {\n return dispatch({\n type: SET_IS_LOADING,\n payload: { isLoading: false },\n });\n }\n })();\n }, []);\n\n // Schedule proactive refresh when authenticated\n useEffect(() => {\n if (dauthState.isAuthenticated) {\n scheduleRefresh();\n }\n return () => {\n if (refreshTimerRef.current) clearTimeout(refreshTimerRef.current);\n };\n }, [dauthState.isAuthenticated, scheduleRefresh]);\n\n const loginWithRedirect = useCallback(() => {\n const base = `${getClientBasePath()}/${domainName}/${routes.signin}`;\n const url = env\n ? `${base}?env=${encodeURIComponent(env)}`\n : base;\n return window.location.replace(url);\n }, [domainName, env]);\n\n const logout = useCallback(() => {\n if (refreshTimerRef.current) clearTimeout(refreshTimerRef.current);\n return action.setLogoutAction({\n dispatch,\n domainName,\n storageKeys,\n });\n }, [domainName, storageKeys]);\n\n const getAccessToken = useCallback(async () => {\n const token = await action.getAccessTokenAction(ctx);\n return token as string;\n }, [ctx]);\n\n const updateUser = useCallback(\n async (fields: Partial<IDauthUser>) => {\n const token_ls = localStorage.getItem(storageKeys.accessToken);\n const {\n name,\n lastname,\n nickname,\n telPrefix,\n telSuffix,\n language,\n avatar,\n birthDate,\n country,\n metadata,\n } = fields;\n const user = {\n name,\n lastname,\n nickname,\n telPrefix,\n telSuffix,\n language,\n avatar,\n birthDate,\n country,\n metadata,\n } as Partial<IDauthUser>;\n return (await action.setUpdateUserAction({\n ...ctx,\n user,\n token: token_ls,\n })) as boolean;\n },\n [ctx, storageKeys.accessToken]\n );\n\n const updateUserWithRedirect = useCallback(() => {\n const token_ls = localStorage.getItem(storageKeys.accessToken);\n if (!token_ls) return;\n return window.location.replace(\n `${getClientBasePath()}/${domainName}/${routes.updateUser}/${token_ls}`\n );\n }, [domainName, storageKeys.accessToken]);\n\n const sendEmailVerification = useCallback(async () => {\n const token_ls = localStorage.getItem(storageKeys.accessToken);\n if (!token_ls) return false;\n return (await action.sendEmailVerificationAction({\n ...ctx,\n token: token_ls,\n })) as boolean;\n }, [ctx, storageKeys.accessToken]);\n\n const deleteAccount = useCallback(async () => {\n const token_ls = localStorage.getItem(storageKeys.accessToken);\n if (!token_ls) return false;\n if (refreshTimerRef.current) clearTimeout(refreshTimerRef.current);\n return (await action.deleteAccountAction({\n ...ctx,\n token: token_ls,\n })) as boolean;\n }, [ctx, storageKeys.accessToken]);\n\n const memoProvider = useMemo(\n () => ({\n ...dauthState,\n loginWithRedirect,\n logout,\n getAccessToken,\n updateUser,\n updateUserWithRedirect,\n sendEmailVerification,\n deleteAccount,\n }),\n [\n dauthState,\n loginWithRedirect,\n logout,\n getAccessToken,\n updateUser,\n updateUserWithRedirect,\n sendEmailVerification,\n deleteAccount,\n ]\n );\n\n return (\n <DauthContext.Provider value={memoProvider}>\n {children}\n </DauthContext.Provider>\n );\n};\n\nconst DauthContext = createContext(initialDauthState);\n\nexport const useDauth = () => {\n const context = useContext(DauthContext);\n if (!context) {\n throw new Error('useDauth must be used inside DauthProvider');\n }\n return context;\n};\n","import {\n IActionStatus,\n IDauthDomainState,\n IDauthState,\n IDauthUser,\n} from './interfaces';\n\nconst initialDauthState: IDauthState = {\n user: {\n language:\n (typeof window !== 'undefined'\n ? window.document.documentElement.getAttribute('lang')\n : null) || 'es',\n } as IDauthUser,\n domain: {} as IDauthDomainState,\n isLoading: true,\n isAuthenticated: false,\n loginWithRedirect: () => {},\n logout: () => {},\n getAccessToken: () => Promise.resolve(''),\n updateUser: () => Promise.resolve(false),\n updateUserWithRedirect: () => {},\n // Send email verification\n sendEmailVerificationStatus: {\n status: {\n type: 'info',\n message: 'Sending email verification...',\n } as IActionStatus,\n isLoading: false,\n },\n sendEmailVerification: () => Promise.resolve(false),\n deleteAccount: () => Promise.resolve(false),\n};\n\nexport default initialDauthState;\n","export const LOGIN = 'LOGIN';\nexport const SET_IS_LOADING = 'SET_IS_LOADING';\nexport const UPDATE_USER = 'UPDATE_USER';\nexport const SET_SEND_EMAIL_VERIFICATION_IS_LOADING =\n 'SET_SEND_EMAIL_VERIFICATION_IS_LOADING';\nexport const SET_SEND_EMAIL_VERIFICATION_STATUS =\n 'SET_SEND_EMAIL_VERIFICATION_STATUS';\n","import { IDauthState } from '../interfaces';\nimport * as DauthTypes from './dauth.types';\n\nexport default function userReducer(state: IDauthState, action: any) {\n const { type, payload } = action;\n\n switch (type) {\n case DauthTypes.LOGIN: {\n const login: IDauthState = {\n ...state,\n user: payload.user,\n domain: payload.domain,\n isAuthenticated: payload.isAuthenticated,\n };\n return login;\n }\n\n case DauthTypes.SET_IS_LOADING: {\n const isLoading: IDauthState = {\n ...state,\n isLoading: payload.isLoading,\n };\n return isLoading;\n }\n\n case DauthTypes.UPDATE_USER: {\n const updateUser: IDauthState = {\n ...state,\n user: {\n ...state.user,\n ...payload,\n },\n };\n return updateUser;\n }\n\n case DauthTypes.SET_SEND_EMAIL_VERIFICATION_STATUS: {\n const setSendEmailVerificationStatus: IDauthState = {\n ...state,\n sendEmailVerificationStatus: {\n ...state.sendEmailVerificationStatus,\n status: {\n type: payload.type,\n message: payload.message,\n },\n },\n };\n return setSendEmailVerificationStatus;\n }\n\n case DauthTypes.SET_SEND_EMAIL_VERIFICATION_IS_LOADING: {\n const setSendEmailVerificationIsLoading: IDauthState = {\n ...state,\n sendEmailVerificationStatus: {\n ...state.sendEmailVerificationStatus,\n isLoading: payload,\n },\n };\n return setSendEmailVerificationIsLoading;\n }\n\n default:\n return state;\n }\n}\n","export const apiVersion = 'v1';\nexport const serverDomain = 'dauth.ovh';\n\nlet _dauthUrl: string | undefined;\n\nexport function setDauthUrl(url: string | undefined) {\n _dauthUrl = url?.replace(/\\/+$/, '');\n}\n\nfunction checkIsLocalhost(): boolean {\n if (typeof window === 'undefined') return false;\n const hostname = window.location.hostname;\n return Boolean(\n hostname === 'localhost' ||\n hostname === '[::1]' ||\n hostname.match(\n /(192)\\.(168)\\.(1)\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/gm\n ) ||\n hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n );\n}\n\nexport function getServerBasePath() {\n if (_dauthUrl) return `${_dauthUrl}/api/${apiVersion}`;\n const isLocalhost = checkIsLocalhost();\n const serverPort = 4012;\n const serverLocalUrl = `${window.location.protocol}//${window.location.hostname}:${serverPort}/api/${apiVersion}`;\n const serverProdUrl = `https://${serverDomain}/api/${apiVersion}`;\n return isLocalhost ? serverLocalUrl : serverProdUrl;\n}\n\nexport function getClientBasePath() {\n if (_dauthUrl) return _dauthUrl;\n const isLocalhost = checkIsLocalhost();\n const clientPort = 5185;\n const clientLocalUrl = `${window.location.protocol}//${window.location.hostname}:${clientPort}`;\n const clientProdUrl = `https://${serverDomain}`;\n return isLocalhost ? clientLocalUrl : clientProdUrl;\n}\n","import { getServerBasePath } from './utils/config';\nimport { IDauthUser } from '../interfaces';\nimport {\n IdeleteAccountAPIResponse,\n IgetUserAPIResponse,\n IrefreshAccessTokenAPIResponse,\n IrefreshTokenAPIResponse,\n IsendEmailVerificationAPIResponse,\n IupdateUserAPIResponse,\n} from './interfaces/dauth.api.responses';\n\nexport const getUserAPI = async (\n domainName: string,\n token: string\n): Promise<IgetUserAPIResponse> => {\n const params = {\n method: 'GET',\n headers: {\n Authorization: token,\n 'Content-Type': 'application/json',\n },\n };\n const response = await fetch(\n `${getServerBasePath()}/app/${domainName}/user`,\n params\n );\n const data = await response.json();\n return { response, data };\n};\n\nexport const updateUserAPI = async (\n domainName: string,\n user: Partial<IDauthUser>,\n token: string\n): Promise<IupdateUserAPIResponse> => {\n const params = {\n method: 'PATCH',\n headers: {\n Authorization: token,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(user),\n };\n const response = await fetch(\n `${getServerBasePath()}/app/${domainName}/user`,\n params\n );\n const data = await response.json();\n return { response, data };\n};\n\nexport const sendEmailVerificationAPI = async (\n domainName: string,\n token: string\n): Promise<IsendEmailVerificationAPIResponse> => {\n const params = {\n method: 'GET',\n headers: {\n Authorization: token,\n 'Content-Type': 'application/json',\n },\n };\n const response = await fetch(\n `${getServerBasePath()}/app/${domainName}/resend-email-verification`,\n params\n );\n const data = await response.json();\n return { response, data };\n};\n\nexport const refreshAccessTokenAPI = async (\n domainName: string,\n token: string\n): Promise<IrefreshAccessTokenAPIResponse> => {\n const params = {\n method: 'GET',\n headers: {\n Authorization: token,\n 'Content-Type': 'application/json',\n },\n };\n const response = await fetch(\n `${getServerBasePath()}/app/${domainName}/refresh-access-token`,\n params\n );\n const data = await response.json();\n return { response, data };\n};\n\nexport const refreshTokenAPI = async (\n domainName: string,\n refreshToken: string\n): Promise<IrefreshTokenAPIResponse> => {\n const params = {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ refreshToken }),\n };\n const response = await fetch(\n `${getServerBasePath()}/app/${domainName}/refresh-token`,\n params\n );\n const data = await response.json();\n return { response, data };\n};\n\nexport const deleteAccountAPI = async (\n domainName: string,\n token: string\n): Promise<IdeleteAccountAPIResponse> => {\n const params = {\n method: 'DELETE',\n headers: {\n Authorization: token,\n 'Content-Type': 'application/json',\n },\n };\n const response = await fetch(\n `${getServerBasePath()}/app/${domainName}/user`,\n params\n );\n const data = await response.json();\n return { response, data };\n};\n\nexport const logoutAPI = async (\n domainName: string,\n refreshToken: string\n): Promise<{ response: Response }> => {\n const params = {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ refreshToken }),\n };\n const response = await fetch(\n `${getServerBasePath()}/app/${domainName}/logout`,\n params\n );\n return { response };\n};\n","import {\n deleteAccountAPI,\n getUserAPI,\n logoutAPI,\n refreshTokenAPI,\n sendEmailVerificationAPI,\n updateUserAPI,\n} from '../api/dauth.api';\nimport {\n IDauthDomainState,\n IDauthStorageKeys,\n IDauthUser,\n} from '../interfaces';\nimport * as DauthTypes from './dauth.types';\n\nexport interface ActionContext {\n dispatch: React.Dispatch<any>;\n domainName: string;\n storageKeys: IDauthStorageKeys;\n onError: (error: Error) => void;\n}\n\ntype TSetDauthStateAction = ActionContext & {\n token: string;\n refreshToken: string;\n};\nexport async function setDauthStateAction({\n dispatch,\n token,\n refreshToken,\n domainName,\n storageKeys,\n onError,\n}: TSetDauthStateAction) {\n dispatch({ type: DauthTypes.SET_IS_LOADING, payload: { isLoading: true } });\n try {\n const getUserFetch = await getUserAPI(domainName, token);\n if (getUserFetch.response.status === 200) {\n dispatch({\n type: DauthTypes.LOGIN,\n payload: {\n user: getUserFetch.data.user,\n domain: getUserFetch.data.domain,\n isAuthenticated: true,\n },\n });\n window.history.replaceState({}, document.title, window.location.pathname);\n localStorage.setItem(storageKeys.accessToken, token);\n localStorage.setItem(storageKeys.refreshToken, refreshToken);\n return;\n } else {\n return resetUser(dispatch, storageKeys);\n }\n } catch (error) {\n onError(error instanceof Error ? error : new Error(String(error)));\n return resetUser(dispatch, storageKeys);\n } finally {\n dispatch({\n type: DauthTypes.SET_IS_LOADING,\n payload: { isLoading: false },\n });\n }\n}\n\nexport async function setAutoLoginAction({\n dispatch,\n domainName,\n storageKeys,\n onError,\n}: ActionContext) {\n dispatch({ type: DauthTypes.SET_IS_LOADING, payload: { isLoading: true } });\n const storedRefreshToken = localStorage.getItem(storageKeys.refreshToken);\n if (!storedRefreshToken) {\n dispatch({\n type: DauthTypes.SET_IS_LOADING,\n payload: { isLoading: false },\n });\n return resetUser(dispatch, storageKeys);\n }\n try {\n const refreshResult = await refreshTokenAPI(domainName, storedRefreshToken);\n if (refreshResult.response.status === 200) {\n const newAccessToken = refreshResult.data.accessToken;\n const newRefreshToken = refreshResult.data.refreshToken;\n localStorage.setItem(storageKeys.accessToken, newAccessToken);\n localStorage.setItem(storageKeys.refreshToken, newRefreshToken);\n const getUserFetch = await getUserAPI(domainName, newAccessToken);\n if (getUserFetch.response.status === 200) {\n dispatch({\n type: DauthTypes.LOGIN,\n payload: {\n user: getUserFetch.data.user,\n domain: getUserFetch.data.domain,\n isAuthenticated: true,\n },\n });\n return;\n }\n }\n // Refresh failed — session expired\n resetUser(dispatch, storageKeys);\n } catch (error) {\n onError(error instanceof Error ? error : new Error(String(error)));\n resetUser(dispatch, storageKeys);\n } finally {\n dispatch({\n type: DauthTypes.SET_IS_LOADING,\n payload: { isLoading: false },\n });\n }\n}\n\nexport async function setLogoutAction({\n dispatch,\n domainName,\n storageKeys,\n}: Omit<ActionContext, 'onError'>) {\n const storedRefreshToken = localStorage.getItem(storageKeys.refreshToken);\n if (storedRefreshToken && domainName) {\n try {\n await logoutAPI(domainName, storedRefreshToken);\n } catch (_) {\n // Best-effort server-side logout\n }\n }\n dispatch({ type: DauthTypes.SET_IS_LOADING, payload: { isLoading: true } });\n dispatch({\n type: DauthTypes.LOGIN,\n payload: {\n user: {\n language: window.document.documentElement.getAttribute('lang') || 'es',\n },\n domain: {},\n isAuthenticated: false,\n },\n });\n localStorage.removeItem(storageKeys.accessToken);\n localStorage.removeItem(storageKeys.refreshToken);\n return dispatch({\n type: DauthTypes.SET_IS_LOADING,\n payload: { isLoading: false },\n });\n}\n\nexport async function refreshSessionAction({\n dispatch,\n domainName,\n storageKeys,\n onError,\n}: ActionContext) {\n const storedRefreshToken = localStorage.getItem(storageKeys.refreshToken);\n if (!storedRefreshToken) {\n return resetUser(dispatch, storageKeys);\n }\n try {\n const refreshResult = await refreshTokenAPI(domainName, storedRefreshToken);\n if (refreshResult.response.status === 200) {\n localStorage.setItem(\n storageKeys.accessToken,\n refreshResult.data.accessToken\n );\n localStorage.setItem(\n storageKeys.refreshToken,\n refreshResult.data.refreshToken\n );\n return;\n }\n // Refresh failed — revoked or expired\n resetUser(dispatch, storageKeys);\n } catch (error) {\n onError(error instanceof Error ? error : new Error(String(error)));\n resetUser(dispatch, storageKeys);\n }\n}\n\ntype TSetUpdateAction = ActionContext & {\n user: Partial<IDauthUser>;\n token: string | null;\n};\nexport async function setUpdateUserAction({\n dispatch,\n domainName,\n user,\n token,\n onError,\n}: TSetUpdateAction) {\n if (user.language) {\n window.document.documentElement.setAttribute('lang', user.language);\n }\n if (!token) {\n dispatch({\n type: DauthTypes.UPDATE_USER,\n payload: user,\n });\n return false;\n }\n try {\n const getUserFetch = await updateUserAPI(domainName, user, token);\n if (getUserFetch.response.status === 200) {\n dispatch({\n type: DauthTypes.UPDATE_USER,\n payload: getUserFetch.data.user,\n });\n return true;\n } else {\n onError(new Error('Update user error: ' + getUserFetch.data.message));\n return false;\n }\n } catch (error) {\n onError(\n error instanceof Error ? error : new Error('Update user error')\n );\n return false;\n }\n}\n\ntype TSetSendEmailVerificationAction = ActionContext & {\n token: string;\n};\nexport async function sendEmailVerificationAction({\n dispatch,\n domainName,\n token,\n}: TSetSendEmailVerificationAction) {\n dispatch({\n type: DauthTypes.SET_SEND_EMAIL_VERIFICATION_IS_LOADING,\n payload: true,\n });\n dispatch({\n type: DauthTypes.SET_SEND_EMAIL_VERIFICATION_STATUS,\n payload: { type: 'info', message: 'Sending email verification...' },\n });\n try {\n const sendEmailFetch = await sendEmailVerificationAPI(domainName, token);\n if (sendEmailFetch.response.status === 200) {\n dispatch({\n type: DauthTypes.SET_SEND_EMAIL_VERIFICATION_STATUS,\n payload: { type: 'success', message: sendEmailFetch.data.message },\n });\n dispatch({\n type: DauthTypes.SET_SEND_EMAIL_VERIFICATION_IS_LOADING,\n payload: false,\n });\n return true;\n } else {\n dispatch({\n type: DauthTypes.SET_SEND_EMAIL_VERIFICATION_STATUS,\n payload: { type: 'error', message: sendEmailFetch.data.message },\n });\n dispatch({\n type: DauthTypes.SET_SEND_EMAIL_VERIFICATION_IS_LOADING,\n payload: false,\n });\n return false;\n }\n } catch (_) {\n dispatch({\n type: DauthTypes.SET_SEND_EMAIL_VERIFICATION_STATUS,\n payload: {\n type: 'error',\n message: 'Send email verification fetch error',\n },\n });\n dispatch({\n type: DauthTypes.SET_SEND_EMAIL_VERIFICATION_IS_LOADING,\n payload: false,\n });\n return false;\n }\n}\n\nexport async function getAccessTokenAction({\n dispatch,\n domainName,\n storageKeys,\n onError,\n}: ActionContext) {\n const token_ls = localStorage.getItem(storageKeys.accessToken);\n if (!token_ls) return 'token-not-found';\n // Decode JWT to check expiry (without verification — that's the server's job)\n try {\n const payloadB64 = token_ls.split('.')[1];\n if (payloadB64) {\n const payload = JSON.parse(atob(payloadB64));\n const expiresIn = (payload.exp || 0) * 1000 - Date.now();\n // If token expires in less than 5 minutes, refresh proactively\n if (expiresIn < 5 * 60 * 1000) {\n await refreshSessionAction({\n dispatch,\n domainName,\n storageKeys,\n onError,\n });\n const refreshedToken = localStorage.getItem(storageKeys.accessToken);\n return refreshedToken || 'token-not-found';\n }\n }\n } catch (_) {\n // If decode fails, return stored token and let server validate\n }\n return token_ls;\n}\n\nexport async function deleteAccountAction({\n dispatch,\n domainName,\n storageKeys,\n onError,\n token,\n}: ActionContext & { token: string }) {\n try {\n const result = await deleteAccountAPI(domainName, token);\n if (result.response.status === 200) {\n resetUser(dispatch, storageKeys);\n return true;\n }\n return false;\n } catch (error) {\n onError(\n error instanceof Error ? error : new Error('Delete account error')\n );\n return false;\n }\n}\n\n///////////////////////////////////////////\n//////////////////////////////////////////\nexport const resetUser = (\n dispatch: React.Dispatch<any>,\n storageKeys: IDauthStorageKeys\n) => {\n localStorage.removeItem(storageKeys.accessToken);\n localStorage.removeItem(storageKeys.refreshToken);\n return dispatch({\n type: DauthTypes.LOGIN,\n payload: {\n user: {} as IDauthUser,\n domain: {} as IDauthDomainState,\n isAuthenticated: false,\n },\n });\n};\n","export const TOKEN_LS = 'dauth_state';\nexport const REFRESH_TOKEN_LS = 'dauth_refresh_token';\n","export const routes = {\n signin: 'signin',\n updateUser: 'update-user',\n};\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx","../src/initialDauthState.ts","../src/reducer/dauth.types.ts","../src/reducer/dauth.reducer.ts","../src/api/utils/config.ts","../src/api/dauth.api.ts","../src/reducer/dauth.actions.ts","../src/constants.ts","../src/api/utils/routes.ts"],"sourcesContent":["import React, {\n useReducer,\n useMemo,\n useEffect,\n useCallback,\n createContext,\n useContext,\n useRef,\n} from 'react';\nimport initialDauthState from './initialDauthState';\nimport userReducer from './reducer/dauth.reducer';\nimport * as action from './reducer/dauth.actions';\nimport { getClientBasePath, setDauthUrl } from './api/utils/config';\nimport { TOKEN_LS, REFRESH_TOKEN_LS, AUTH_CODE_PARAM } from './constants';\nimport { routes } from './api/utils/routes';\nimport type {\n IDauthProviderProps,\n IDauthStorageKeys,\n IDauthUser,\n IDauthAuthMethods,\n} from './interfaces';\nimport { SET_IS_LOADING } from './reducer/dauth.types';\n\nexport type { IDauthProviderProps, IDauthAuthMethods };\n\nconst defaultOnError = (error: Error) => console.error(error);\n\nexport const DauthProvider: React.FC<IDauthProviderProps> = (\n props: IDauthProviderProps\n) => {\n const { domainName, children, storageKey, onError, env, dauthUrl } = props;\n const [dauthState, dispatch] = useReducer(userReducer, initialDauthState);\n const refreshTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Configure custom dauth URL before any API calls\n useEffect(() => {\n setDauthUrl(dauthUrl);\n }, [dauthUrl]);\n\n const storageKeys: IDauthStorageKeys = useMemo(\n () => ({\n accessToken: storageKey?.accessToken ?? TOKEN_LS,\n refreshToken: storageKey?.refreshToken ?? REFRESH_TOKEN_LS,\n }),\n [storageKey?.accessToken, storageKey?.refreshToken]\n );\n\n const handleError = useCallback(\n (error: Error) => (onError ?? defaultOnError)(error),\n [onError]\n );\n\n // Build action context\n const ctx = useMemo(\n () => ({ dispatch, domainName, storageKeys, onError: handleError }),\n [domainName, storageKeys, handleError]\n );\n\n // Schedule next proactive refresh based on access token expiry\n const scheduleRefresh = useCallback(() => {\n if (refreshTimerRef.current) clearTimeout(refreshTimerRef.current);\n const token = localStorage.getItem(storageKeys.accessToken);\n if (!token) return;\n try {\n const payloadB64 = token.split('.')[1];\n if (!payloadB64) return;\n const payload = JSON.parse(atob(payloadB64));\n const expiresIn = (payload.exp || 0) * 1000 - Date.now();\n // Refresh 5 minutes before expiry, minimum 10 seconds\n const refreshIn = Math.max(expiresIn - 5 * 60 * 1000, 10_000);\n refreshTimerRef.current = setTimeout(async () => {\n await action.refreshSessionAction(ctx);\n scheduleRefresh();\n }, refreshIn);\n } catch (_) {\n // If decode fails, retry in 5 minutes\n refreshTimerRef.current = setTimeout(\n async () => {\n await action.refreshSessionAction(ctx);\n scheduleRefresh();\n },\n 5 * 60 * 1000\n );\n }\n }, [ctx, storageKeys.accessToken]);\n\n // Catch login redirect — exchange authorization code for tokens\n useEffect(() => {\n (async () => {\n const queryString = window.location.search;\n if (!queryString) return;\n const urlParams = new URLSearchParams(queryString);\n const code = urlParams.get(AUTH_CODE_PARAM);\n if (code && !dauthState.isAuthenticated) {\n return action.exchangeCodeAction({ ...ctx, code });\n }\n })();\n }, []);\n\n // Auto Login\n useEffect(() => {\n (async () => {\n const refreshToken = localStorage.getItem(storageKeys.refreshToken);\n if (refreshToken && !dauthState.isAuthenticated) {\n return action.setAutoLoginAction(ctx);\n } else {\n return dispatch({\n type: SET_IS_LOADING,\n payload: { isLoading: false },\n });\n }\n })();\n }, []);\n\n // Schedule proactive refresh when authenticated\n useEffect(() => {\n if (dauthState.isAuthenticated) {\n scheduleRefresh();\n }\n return () => {\n if (refreshTimerRef.current) clearTimeout(refreshTimerRef.current);\n };\n }, [dauthState.isAuthenticated, scheduleRefresh]);\n\n const loginWithRedirect = useCallback(() => {\n const base = `${getClientBasePath()}/${domainName}/${routes.signin}`;\n const url = env ? `${base}?env=${encodeURIComponent(env)}` : base;\n return window.location.replace(url);\n }, [domainName, env]);\n\n const logout = useCallback(() => {\n if (refreshTimerRef.current) clearTimeout(refreshTimerRef.current);\n return action.setLogoutAction({\n dispatch,\n domainName,\n storageKeys,\n });\n }, [domainName, storageKeys]);\n\n const getAccessToken = useCallback(async () => {\n const token = await action.getAccessTokenAction(ctx);\n return token as string;\n }, [ctx]);\n\n const updateUser = useCallback(\n async (fields: Partial<IDauthUser>) => {\n const token_ls = localStorage.getItem(storageKeys.accessToken);\n const {\n name,\n lastname,\n nickname,\n telPrefix,\n telSuffix,\n language,\n avatar,\n birthDate,\n country,\n metadata,\n } = fields;\n const user = {\n name,\n lastname,\n nickname,\n telPrefix,\n telSuffix,\n language,\n avatar,\n birthDate,\n country,\n metadata,\n } as Partial<IDauthUser>;\n return (await action.setUpdateUserAction({\n ...ctx,\n user,\n token: token_ls,\n })) as boolean;\n },\n [ctx, storageKeys.accessToken]\n );\n\n const updateUserWithRedirect = useCallback(() => {\n const token_ls = localStorage.getItem(storageKeys.accessToken);\n if (!token_ls) return;\n return window.location.replace(\n `${getClientBasePath()}/${domainName}/${routes.updateUser}/${token_ls}`\n );\n }, [domainName, storageKeys.accessToken]);\n\n const deleteAccount = useCallback(async () => {\n const token_ls = localStorage.getItem(storageKeys.accessToken);\n if (!token_ls) return false;\n if (refreshTimerRef.current) clearTimeout(refreshTimerRef.current);\n return (await action.deleteAccountAction({\n ...ctx,\n token: token_ls,\n })) as boolean;\n }, [ctx, storageKeys.accessToken]);\n\n const memoProvider = useMemo(\n () => ({\n ...dauthState,\n loginWithRedirect,\n logout,\n getAccessToken,\n updateUser,\n updateUserWithRedirect,\n deleteAccount,\n }),\n [\n dauthState,\n loginWithRedirect,\n logout,\n getAccessToken,\n updateUser,\n updateUserWithRedirect,\n deleteAccount,\n ]\n );\n\n return (\n <DauthContext.Provider value={memoProvider}>\n {children}\n </DauthContext.Provider>\n );\n};\n\nconst DauthContext = createContext(initialDauthState);\n\nexport const useDauth = () => {\n const context = useContext(DauthContext);\n if (!context) {\n throw new Error('useDauth must be used inside DauthProvider');\n }\n return context;\n};\n","import { IDauthDomainState, IDauthState, IDauthUser } from './interfaces';\n\nconst initialDauthState: IDauthState = {\n user: {\n language:\n (typeof window !== 'undefined'\n ? window.document.documentElement.getAttribute('lang')\n : null) || 'es',\n } as IDauthUser,\n domain: {} as IDauthDomainState,\n isLoading: true,\n isAuthenticated: false,\n loginWithRedirect: () => {},\n logout: () => {},\n getAccessToken: () => Promise.resolve(''),\n updateUser: () => Promise.resolve(false),\n updateUserWithRedirect: () => {},\n deleteAccount: () => Promise.resolve(false),\n};\n\nexport default initialDauthState;\n","export const LOGIN = 'LOGIN';\nexport const SET_IS_LOADING = 'SET_IS_LOADING';\nexport const UPDATE_USER = 'UPDATE_USER';\n","import { IDauthState } from '../interfaces';\nimport * as DauthTypes from './dauth.types';\n\nexport default function userReducer(state: IDauthState, action: any) {\n const { type, payload } = action;\n\n switch (type) {\n case DauthTypes.LOGIN: {\n const login: IDauthState = {\n ...state,\n user: payload.user,\n domain: payload.domain,\n isAuthenticated: payload.isAuthenticated,\n };\n return login;\n }\n\n case DauthTypes.SET_IS_LOADING: {\n const isLoading: IDauthState = {\n ...state,\n isLoading: payload.isLoading,\n };\n return isLoading;\n }\n\n case DauthTypes.UPDATE_USER: {\n const updateUser: IDauthState = {\n ...state,\n user: {\n ...state.user,\n ...payload,\n },\n };\n return updateUser;\n }\n\n default:\n return state;\n }\n}\n","export const apiVersion = 'v1';\nexport const serverDomain = 'dauth.ovh';\n\nlet _dauthUrl: string | undefined;\n\nexport function setDauthUrl(url: string | undefined) {\n _dauthUrl = url?.replace(/\\/+$/, '');\n}\n\nfunction checkIsLocalhost(): boolean {\n if (typeof window === 'undefined') return false;\n const hostname = window.location.hostname;\n return Boolean(\n hostname === 'localhost' ||\n hostname === '[::1]' ||\n hostname.match(\n /(192)\\.(168)\\.(1)\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/gm\n ) ||\n hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n );\n}\n\nexport function getServerBasePath() {\n if (_dauthUrl) return `${_dauthUrl}/api/${apiVersion}`;\n const isLocalhost = checkIsLocalhost();\n const serverPort = 4012;\n const serverLocalUrl = `${window.location.protocol}//${window.location.hostname}:${serverPort}/api/${apiVersion}`;\n const serverProdUrl = `https://${serverDomain}/api/${apiVersion}`;\n return isLocalhost ? serverLocalUrl : serverProdUrl;\n}\n\nexport function getClientBasePath() {\n if (_dauthUrl) return _dauthUrl;\n const isLocalhost = checkIsLocalhost();\n const clientPort = 5185;\n const clientLocalUrl = `${window.location.protocol}//${window.location.hostname}:${clientPort}`;\n const clientProdUrl = `https://${serverDomain}`;\n return isLocalhost ? clientLocalUrl : clientProdUrl;\n}\n","import { getServerBasePath } from './utils/config';\nimport { IDauthUser } from '../interfaces';\nimport {\n IdeleteAccountAPIResponse,\n IExchangeCodeAPIResponse,\n IgetUserAPIResponse,\n IrefreshTokenAPIResponse,\n IupdateUserAPIResponse,\n} from './interfaces/dauth.api.responses';\n\nexport const getUserAPI = async (\n domainName: string,\n token: string\n): Promise<IgetUserAPIResponse> => {\n const params = {\n method: 'GET',\n headers: {\n Authorization: token,\n 'Content-Type': 'application/json',\n },\n };\n const response = await fetch(\n `${getServerBasePath()}/app/${domainName}/user`,\n params\n );\n const data = await response.json();\n return { response, data };\n};\n\nexport const updateUserAPI = async (\n domainName: string,\n user: Partial<IDauthUser>,\n token: string\n): Promise<IupdateUserAPIResponse> => {\n const params = {\n method: 'PATCH',\n headers: {\n Authorization: token,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(user),\n };\n const response = await fetch(\n `${getServerBasePath()}/app/${domainName}/user`,\n params\n );\n const data = await response.json();\n return { response, data };\n};\n\nexport const refreshTokenAPI = async (\n domainName: string,\n refreshToken: string\n): Promise<IrefreshTokenAPIResponse> => {\n const params = {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ refreshToken }),\n };\n const response = await fetch(\n `${getServerBasePath()}/app/${domainName}/refresh-token`,\n params\n );\n const data = await response.json();\n return { response, data };\n};\n\nexport const deleteAccountAPI = async (\n domainName: string,\n token: string\n): Promise<IdeleteAccountAPIResponse> => {\n const params = {\n method: 'DELETE',\n headers: {\n Authorization: token,\n 'Content-Type': 'application/json',\n },\n };\n const response = await fetch(\n `${getServerBasePath()}/app/${domainName}/user`,\n params\n );\n const data = await response.json();\n return { response, data };\n};\n\nexport const exchangeCodeAPI = async (\n domainName: string,\n code: string\n): Promise<IExchangeCodeAPIResponse> => {\n const params = {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ code }),\n };\n const response = await fetch(\n `${getServerBasePath()}/app/${domainName}/exchange-code`,\n params\n );\n const data = await response.json();\n return { response, data };\n};\n\nexport const logoutAPI = async (\n domainName: string,\n refreshToken: string\n): Promise<{ response: Response }> => {\n const params = {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ refreshToken }),\n };\n const response = await fetch(\n `${getServerBasePath()}/app/${domainName}/logout`,\n params\n );\n return { response };\n};\n","import {\n deleteAccountAPI,\n exchangeCodeAPI,\n getUserAPI,\n logoutAPI,\n refreshTokenAPI,\n updateUserAPI,\n} from '../api/dauth.api';\nimport {\n IDauthDomainState,\n IDauthStorageKeys,\n IDauthUser,\n} from '../interfaces';\nimport * as DauthTypes from './dauth.types';\n\nexport interface ActionContext {\n dispatch: React.Dispatch<any>;\n domainName: string;\n storageKeys: IDauthStorageKeys;\n onError: (error: Error) => void;\n}\n\ntype TSetDauthStateAction = ActionContext & {\n token: string;\n refreshToken: string;\n};\nexport async function setDauthStateAction({\n dispatch,\n token,\n refreshToken,\n domainName,\n storageKeys,\n onError,\n}: TSetDauthStateAction) {\n dispatch({ type: DauthTypes.SET_IS_LOADING, payload: { isLoading: true } });\n try {\n const getUserFetch = await getUserAPI(domainName, token);\n if (getUserFetch.response.status === 200) {\n dispatch({\n type: DauthTypes.LOGIN,\n payload: {\n user: getUserFetch.data.user,\n domain: getUserFetch.data.domain,\n isAuthenticated: true,\n },\n });\n window.history.replaceState({}, document.title, window.location.pathname);\n localStorage.setItem(storageKeys.accessToken, token);\n localStorage.setItem(storageKeys.refreshToken, refreshToken);\n return;\n } else {\n return resetUser(dispatch, storageKeys);\n }\n } catch (error) {\n onError(error instanceof Error ? error : new Error(String(error)));\n return resetUser(dispatch, storageKeys);\n } finally {\n dispatch({\n type: DauthTypes.SET_IS_LOADING,\n payload: { isLoading: false },\n });\n }\n}\n\ntype TExchangeCodeAction = ActionContext & { code: string };\nexport async function exchangeCodeAction({\n dispatch,\n code,\n domainName,\n storageKeys,\n onError,\n}: TExchangeCodeAction) {\n dispatch({\n type: DauthTypes.SET_IS_LOADING,\n payload: { isLoading: true },\n });\n try {\n // Clean URL immediately (before any fetch)\n window.history.replaceState(\n {},\n document.title,\n window.location.pathname\n );\n const exchangeResult = await exchangeCodeAPI(domainName, code);\n if (exchangeResult.response.status !== 200) {\n return resetUser(dispatch, storageKeys);\n }\n const { accessToken, refreshToken } = exchangeResult.data;\n localStorage.setItem(storageKeys.accessToken, accessToken);\n localStorage.setItem(storageKeys.refreshToken, refreshToken);\n const getUserFetch = await getUserAPI(domainName, accessToken);\n if (getUserFetch.response.status === 200) {\n dispatch({\n type: DauthTypes.LOGIN,\n payload: {\n user: getUserFetch.data.user,\n domain: getUserFetch.data.domain,\n isAuthenticated: true,\n },\n });\n return;\n }\n return resetUser(dispatch, storageKeys);\n } catch (error) {\n onError(\n error instanceof Error ? error : new Error(String(error))\n );\n return resetUser(dispatch, storageKeys);\n } finally {\n dispatch({\n type: DauthTypes.SET_IS_LOADING,\n payload: { isLoading: false },\n });\n }\n}\n\nexport async function setAutoLoginAction({\n dispatch,\n domainName,\n storageKeys,\n onError,\n}: ActionContext) {\n dispatch({ type: DauthTypes.SET_IS_LOADING, payload: { isLoading: true } });\n const storedRefreshToken = localStorage.getItem(storageKeys.refreshToken);\n if (!storedRefreshToken) {\n dispatch({\n type: DauthTypes.SET_IS_LOADING,\n payload: { isLoading: false },\n });\n return resetUser(dispatch, storageKeys);\n }\n try {\n const refreshResult = await refreshTokenAPI(domainName, storedRefreshToken);\n if (refreshResult.response.status === 200) {\n const newAccessToken = refreshResult.data.accessToken;\n const newRefreshToken = refreshResult.data.refreshToken;\n localStorage.setItem(storageKeys.accessToken, newAccessToken);\n localStorage.setItem(storageKeys.refreshToken, newRefreshToken);\n const getUserFetch = await getUserAPI(domainName, newAccessToken);\n if (getUserFetch.response.status === 200) {\n dispatch({\n type: DauthTypes.LOGIN,\n payload: {\n user: getUserFetch.data.user,\n domain: getUserFetch.data.domain,\n isAuthenticated: true,\n },\n });\n return;\n }\n }\n // Refresh failed — session expired\n resetUser(dispatch, storageKeys);\n } catch (error) {\n onError(error instanceof Error ? error : new Error(String(error)));\n resetUser(dispatch, storageKeys);\n } finally {\n dispatch({\n type: DauthTypes.SET_IS_LOADING,\n payload: { isLoading: false },\n });\n }\n}\n\nexport async function setLogoutAction({\n dispatch,\n domainName,\n storageKeys,\n}: Omit<ActionContext, 'onError'>) {\n const storedRefreshToken = localStorage.getItem(storageKeys.refreshToken);\n if (storedRefreshToken && domainName) {\n try {\n await logoutAPI(domainName, storedRefreshToken);\n } catch (_) {\n // Best-effort server-side logout\n }\n }\n dispatch({ type: DauthTypes.SET_IS_LOADING, payload: { isLoading: true } });\n dispatch({\n type: DauthTypes.LOGIN,\n payload: {\n user: {\n language: window.document.documentElement.getAttribute('lang') || 'es',\n },\n domain: {},\n isAuthenticated: false,\n },\n });\n localStorage.removeItem(storageKeys.accessToken);\n localStorage.removeItem(storageKeys.refreshToken);\n return dispatch({\n type: DauthTypes.SET_IS_LOADING,\n payload: { isLoading: false },\n });\n}\n\nexport async function refreshSessionAction({\n dispatch,\n domainName,\n storageKeys,\n onError,\n}: ActionContext) {\n const storedRefreshToken = localStorage.getItem(storageKeys.refreshToken);\n if (!storedRefreshToken) {\n return resetUser(dispatch, storageKeys);\n }\n try {\n const refreshResult = await refreshTokenAPI(domainName, storedRefreshToken);\n if (refreshResult.response.status === 200) {\n localStorage.setItem(\n storageKeys.accessToken,\n refreshResult.data.accessToken\n );\n localStorage.setItem(\n storageKeys.refreshToken,\n refreshResult.data.refreshToken\n );\n return;\n }\n // Refresh failed — revoked or expired\n resetUser(dispatch, storageKeys);\n } catch (error) {\n onError(error instanceof Error ? error : new Error(String(error)));\n resetUser(dispatch, storageKeys);\n }\n}\n\ntype TSetUpdateAction = ActionContext & {\n user: Partial<IDauthUser>;\n token: string | null;\n};\nexport async function setUpdateUserAction({\n dispatch,\n domainName,\n user,\n token,\n onError,\n}: TSetUpdateAction) {\n if (user.language) {\n window.document.documentElement.setAttribute('lang', user.language);\n }\n if (!token) {\n dispatch({\n type: DauthTypes.UPDATE_USER,\n payload: user,\n });\n return false;\n }\n try {\n const getUserFetch = await updateUserAPI(domainName, user, token);\n if (getUserFetch.response.status === 200) {\n dispatch({\n type: DauthTypes.UPDATE_USER,\n payload: getUserFetch.data.user,\n });\n return true;\n } else {\n onError(new Error('Update user error: ' + getUserFetch.data.message));\n return false;\n }\n } catch (error) {\n onError(error instanceof Error ? error : new Error('Update user error'));\n return false;\n }\n}\n\nexport async function getAccessTokenAction({\n dispatch,\n domainName,\n storageKeys,\n onError,\n}: ActionContext) {\n const token_ls = localStorage.getItem(storageKeys.accessToken);\n if (!token_ls) return 'token-not-found';\n // Decode JWT to check expiry (without verification — that's the server's job)\n try {\n const payloadB64 = token_ls.split('.')[1];\n if (payloadB64) {\n const payload = JSON.parse(atob(payloadB64));\n const expiresIn = (payload.exp || 0) * 1000 - Date.now();\n // If token expires in less than 5 minutes, refresh proactively\n if (expiresIn < 5 * 60 * 1000) {\n await refreshSessionAction({\n dispatch,\n domainName,\n storageKeys,\n onError,\n });\n const refreshedToken = localStorage.getItem(storageKeys.accessToken);\n return refreshedToken || 'token-not-found';\n }\n }\n } catch (_) {\n // If decode fails, return stored token and let server validate\n }\n return token_ls;\n}\n\nexport async function deleteAccountAction({\n dispatch,\n domainName,\n storageKeys,\n onError,\n token,\n}: ActionContext & { token: string }) {\n try {\n const result = await deleteAccountAPI(domainName, token);\n if (result.response.status === 200) {\n resetUser(dispatch, storageKeys);\n return true;\n }\n return false;\n } catch (error) {\n onError(error instanceof Error ? error : new Error('Delete account error'));\n return false;\n }\n}\n\n///////////////////////////////////////////\n//////////////////////////////////////////\nexport const resetUser = (\n dispatch: React.Dispatch<any>,\n storageKeys: IDauthStorageKeys\n) => {\n localStorage.removeItem(storageKeys.accessToken);\n localStorage.removeItem(storageKeys.refreshToken);\n return dispatch({\n type: DauthTypes.LOGIN,\n payload: {\n user: {} as IDauthUser,\n domain: {} as IDauthDomainState,\n isAuthenticated: false,\n },\n });\n};\n","export const TOKEN_LS = 'dauth_state';\nexport const REFRESH_TOKEN_LS = 'dauth_refresh_token';\nexport const AUTH_CODE_PARAM = 'code';\n","export const routes = {\n signin: 'signin',\n updateUser: 'update-user',\n};\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dauth-context-react",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "David T. Pizarro Frick",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -58,6 +58,7 @@
|
|
|
58
58
|
"@types/react-dom": "^18.2.19",
|
|
59
59
|
"husky": "^9.0.10",
|
|
60
60
|
"jsdom": "~25.0.0",
|
|
61
|
+
"prettier": "^3.8.1",
|
|
61
62
|
"react": "^18.2.0",
|
|
62
63
|
"react-dom": "^18.2.0",
|
|
63
64
|
"size-limit": "^11.0.2",
|
package/src/api/dauth.api.ts
CHANGED
|
@@ -2,10 +2,9 @@ import { getServerBasePath } from './utils/config';
|
|
|
2
2
|
import { IDauthUser } from '../interfaces';
|
|
3
3
|
import {
|
|
4
4
|
IdeleteAccountAPIResponse,
|
|
5
|
+
IExchangeCodeAPIResponse,
|
|
5
6
|
IgetUserAPIResponse,
|
|
6
|
-
IrefreshAccessTokenAPIResponse,
|
|
7
7
|
IrefreshTokenAPIResponse,
|
|
8
|
-
IsendEmailVerificationAPIResponse,
|
|
9
8
|
IupdateUserAPIResponse,
|
|
10
9
|
} from './interfaces/dauth.api.responses';
|
|
11
10
|
|
|
@@ -49,74 +48,53 @@ export const updateUserAPI = async (
|
|
|
49
48
|
return { response, data };
|
|
50
49
|
};
|
|
51
50
|
|
|
52
|
-
export const
|
|
51
|
+
export const refreshTokenAPI = async (
|
|
53
52
|
domainName: string,
|
|
54
|
-
|
|
55
|
-
): Promise<
|
|
53
|
+
refreshToken: string
|
|
54
|
+
): Promise<IrefreshTokenAPIResponse> => {
|
|
56
55
|
const params = {
|
|
57
|
-
method: '
|
|
58
|
-
headers: {
|
|
59
|
-
|
|
60
|
-
'Content-Type': 'application/json',
|
|
61
|
-
},
|
|
56
|
+
method: 'POST',
|
|
57
|
+
headers: { 'Content-Type': 'application/json' },
|
|
58
|
+
body: JSON.stringify({ refreshToken }),
|
|
62
59
|
};
|
|
63
60
|
const response = await fetch(
|
|
64
|
-
`${getServerBasePath()}/app/${domainName}/
|
|
61
|
+
`${getServerBasePath()}/app/${domainName}/refresh-token`,
|
|
65
62
|
params
|
|
66
63
|
);
|
|
67
64
|
const data = await response.json();
|
|
68
65
|
return { response, data };
|
|
69
66
|
};
|
|
70
67
|
|
|
71
|
-
export const
|
|
68
|
+
export const deleteAccountAPI = async (
|
|
72
69
|
domainName: string,
|
|
73
70
|
token: string
|
|
74
|
-
): Promise<
|
|
71
|
+
): Promise<IdeleteAccountAPIResponse> => {
|
|
75
72
|
const params = {
|
|
76
|
-
method: '
|
|
73
|
+
method: 'DELETE',
|
|
77
74
|
headers: {
|
|
78
75
|
Authorization: token,
|
|
79
76
|
'Content-Type': 'application/json',
|
|
80
77
|
},
|
|
81
78
|
};
|
|
82
79
|
const response = await fetch(
|
|
83
|
-
`${getServerBasePath()}/app/${domainName}/
|
|
80
|
+
`${getServerBasePath()}/app/${domainName}/user`,
|
|
84
81
|
params
|
|
85
82
|
);
|
|
86
83
|
const data = await response.json();
|
|
87
84
|
return { response, data };
|
|
88
85
|
};
|
|
89
86
|
|
|
90
|
-
export const
|
|
87
|
+
export const exchangeCodeAPI = async (
|
|
91
88
|
domainName: string,
|
|
92
|
-
|
|
93
|
-
): Promise<
|
|
89
|
+
code: string
|
|
90
|
+
): Promise<IExchangeCodeAPIResponse> => {
|
|
94
91
|
const params = {
|
|
95
92
|
method: 'POST',
|
|
96
93
|
headers: { 'Content-Type': 'application/json' },
|
|
97
|
-
body: JSON.stringify({
|
|
94
|
+
body: JSON.stringify({ code }),
|
|
98
95
|
};
|
|
99
96
|
const response = await fetch(
|
|
100
|
-
`${getServerBasePath()}/app/${domainName}/
|
|
101
|
-
params
|
|
102
|
-
);
|
|
103
|
-
const data = await response.json();
|
|
104
|
-
return { response, data };
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
export const deleteAccountAPI = async (
|
|
108
|
-
domainName: string,
|
|
109
|
-
token: string
|
|
110
|
-
): Promise<IdeleteAccountAPIResponse> => {
|
|
111
|
-
const params = {
|
|
112
|
-
method: 'DELETE',
|
|
113
|
-
headers: {
|
|
114
|
-
Authorization: token,
|
|
115
|
-
'Content-Type': 'application/json',
|
|
116
|
-
},
|
|
117
|
-
};
|
|
118
|
-
const response = await fetch(
|
|
119
|
-
`${getServerBasePath()}/app/${domainName}/user`,
|
|
97
|
+
`${getServerBasePath()}/app/${domainName}/exchange-code`,
|
|
120
98
|
params
|
|
121
99
|
);
|
|
122
100
|
const data = await response.json();
|
|
@@ -26,26 +26,19 @@ export interface IupdateUserAPIResponse {
|
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
export interface
|
|
30
|
-
response: Response;
|
|
31
|
-
data: {
|
|
32
|
-
status: string;
|
|
33
|
-
message: string;
|
|
34
|
-
emailStatus: string;
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export interface IrefreshAccessTokenAPIResponse {
|
|
29
|
+
export interface IrefreshTokenAPIResponse {
|
|
39
30
|
response: Response;
|
|
40
31
|
data: {
|
|
41
32
|
accessToken: string;
|
|
33
|
+
refreshToken: string;
|
|
42
34
|
};
|
|
43
35
|
}
|
|
44
36
|
|
|
45
|
-
export interface
|
|
37
|
+
export interface IExchangeCodeAPIResponse {
|
|
46
38
|
response: Response;
|
|
47
39
|
data: {
|
|
48
40
|
accessToken: string;
|
|
49
41
|
refreshToken: string;
|
|
42
|
+
isNewUser?: boolean;
|
|
50
43
|
};
|
|
51
44
|
}
|
package/src/api/utils/config.ts
CHANGED
|
@@ -12,11 +12,11 @@ function checkIsLocalhost(): boolean {
|
|
|
12
12
|
const hostname = window.location.hostname;
|
|
13
13
|
return Boolean(
|
|
14
14
|
hostname === 'localhost' ||
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
hostname === '[::1]' ||
|
|
16
|
+
hostname.match(
|
|
17
|
+
/(192)\.(168)\.(1)\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/gm
|
|
18
|
+
) ||
|
|
19
|
+
hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)
|
|
20
20
|
);
|
|
21
21
|
}
|
|
22
22
|
|
package/src/constants.ts
CHANGED