dauth-context-react 6.3.0 → 6.4.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 +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.js +62 -16
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +62 -16
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/DauthProfileModal.tsx +21 -22
- package/src/api/dauth.api.ts +17 -0
- package/src/api/interfaces/dauth.api.responses.ts +9 -0
- package/src/index.tsx +7 -0
- package/src/initialDauthState.ts +1 -0
- package/src/interfaces.ts +3 -2
- package/src/reducer/dauth.actions.ts +31 -0
package/dist/index.mjs
CHANGED
|
@@ -24,7 +24,8 @@ var initialDauthState = {
|
|
|
24
24
|
deleteAccount: () => Promise.resolve(false),
|
|
25
25
|
getPasskeyCredentials: () => Promise.resolve([]),
|
|
26
26
|
registerPasskey: () => Promise.resolve(null),
|
|
27
|
-
deletePasskeyCredential: () => Promise.resolve(false)
|
|
27
|
+
deletePasskeyCredential: () => Promise.resolve(false),
|
|
28
|
+
uploadAvatar: () => Promise.resolve(false)
|
|
28
29
|
};
|
|
29
30
|
var initialDauthState_default = initialDauthState;
|
|
30
31
|
|
|
@@ -186,6 +187,18 @@ async function deletePasskeyCredentialAPI(basePath, credentialId) {
|
|
|
186
187
|
const data = await response.json();
|
|
187
188
|
return { response, data };
|
|
188
189
|
}
|
|
190
|
+
async function uploadAvatarAPI(basePath, file) {
|
|
191
|
+
const formData = new FormData();
|
|
192
|
+
formData.append("avatar", file);
|
|
193
|
+
const response = await fetch(`${basePath}/avatar`, {
|
|
194
|
+
method: "POST",
|
|
195
|
+
headers: { "X-CSRF-Token": getCsrfToken() },
|
|
196
|
+
credentials: "include",
|
|
197
|
+
body: formData
|
|
198
|
+
});
|
|
199
|
+
const data = await response.json();
|
|
200
|
+
return { response, data };
|
|
201
|
+
}
|
|
189
202
|
|
|
190
203
|
// src/webauthn.ts
|
|
191
204
|
function base64urlToBuffer(base64url) {
|
|
@@ -441,6 +454,30 @@ async function deletePasskeyCredentialAction(ctx, credentialId) {
|
|
|
441
454
|
return false;
|
|
442
455
|
}
|
|
443
456
|
}
|
|
457
|
+
async function uploadAvatarAction(ctx, file) {
|
|
458
|
+
const { dispatch, authProxyPath, onError } = ctx;
|
|
459
|
+
try {
|
|
460
|
+
const result = await uploadAvatarAPI(authProxyPath, file);
|
|
461
|
+
if (result.response.status === 200) {
|
|
462
|
+
dispatch({
|
|
463
|
+
type: UPDATE_USER,
|
|
464
|
+
payload: result.data.user
|
|
465
|
+
});
|
|
466
|
+
return true;
|
|
467
|
+
}
|
|
468
|
+
onError(
|
|
469
|
+
new Error(
|
|
470
|
+
"Avatar upload error: " + result.data.message
|
|
471
|
+
)
|
|
472
|
+
);
|
|
473
|
+
return false;
|
|
474
|
+
} catch (error) {
|
|
475
|
+
onError(
|
|
476
|
+
error instanceof Error ? error : new Error("Avatar upload error")
|
|
477
|
+
);
|
|
478
|
+
return false;
|
|
479
|
+
}
|
|
480
|
+
}
|
|
444
481
|
var resetUser = (dispatch) => {
|
|
445
482
|
return dispatch({
|
|
446
483
|
type: LOGIN,
|
|
@@ -750,7 +787,8 @@ function DauthProfileModal({
|
|
|
750
787
|
logout,
|
|
751
788
|
getPasskeyCredentials,
|
|
752
789
|
registerPasskey,
|
|
753
|
-
deletePasskeyCredential
|
|
790
|
+
deletePasskeyCredential,
|
|
791
|
+
uploadAvatar
|
|
754
792
|
} = useDauth();
|
|
755
793
|
const isDesktop = useMediaQuery("(min-width: 641px)");
|
|
756
794
|
const phase = useModalAnimation(open);
|
|
@@ -958,19 +996,21 @@ function DauthProfileModal({
|
|
|
958
996
|
[deletePasskeyCredential]
|
|
959
997
|
);
|
|
960
998
|
const handleAvatarClick = useCallback(() => {
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
}
|
|
964
|
-
}, [onAvatarUpload]);
|
|
999
|
+
avatarInputRef.current?.click();
|
|
1000
|
+
}, []);
|
|
965
1001
|
const handleAvatarChange = useCallback(
|
|
966
1002
|
async (e) => {
|
|
967
1003
|
const file = e.target.files?.[0];
|
|
968
|
-
if (!file
|
|
1004
|
+
if (!file) return;
|
|
969
1005
|
setUploadingAvatar(true);
|
|
970
1006
|
try {
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
1007
|
+
if (onAvatarUpload) {
|
|
1008
|
+
const url = await onAvatarUpload(file);
|
|
1009
|
+
if (url) {
|
|
1010
|
+
await updateUser({ avatar: url });
|
|
1011
|
+
}
|
|
1012
|
+
} else {
|
|
1013
|
+
await uploadAvatar(file);
|
|
974
1014
|
}
|
|
975
1015
|
} catch {
|
|
976
1016
|
}
|
|
@@ -979,7 +1019,7 @@ function DauthProfileModal({
|
|
|
979
1019
|
avatarInputRef.current.value = "";
|
|
980
1020
|
}
|
|
981
1021
|
},
|
|
982
|
-
[onAvatarUpload, updateUser]
|
|
1022
|
+
[onAvatarUpload, updateUser, uploadAvatar]
|
|
983
1023
|
);
|
|
984
1024
|
const handleSignOut = useCallback(() => {
|
|
985
1025
|
logout();
|
|
@@ -1121,7 +1161,7 @@ function DauthProfileModal({
|
|
|
1121
1161
|
{
|
|
1122
1162
|
style: {
|
|
1123
1163
|
...avatarCircle,
|
|
1124
|
-
cursor:
|
|
1164
|
+
cursor: "pointer",
|
|
1125
1165
|
position: "relative"
|
|
1126
1166
|
},
|
|
1127
1167
|
onClick: handleAvatarClick,
|
|
@@ -1138,12 +1178,12 @@ function DauthProfileModal({
|
|
|
1138
1178
|
}
|
|
1139
1179
|
}
|
|
1140
1180
|
) : avatarInitial,
|
|
1141
|
-
|
|
1181
|
+
!uploadingAvatar && /* @__PURE__ */ jsx("div", { style: avatarOverlay, children: /* @__PURE__ */ jsx(IconCamera, {}) })
|
|
1142
1182
|
]
|
|
1143
1183
|
}
|
|
1144
1184
|
),
|
|
1145
1185
|
/* @__PURE__ */ jsx("div", { style: emailText, children: user.email }),
|
|
1146
|
-
|
|
1186
|
+
/* @__PURE__ */ jsx(
|
|
1147
1187
|
"input",
|
|
1148
1188
|
{
|
|
1149
1189
|
ref: avatarInputRef,
|
|
@@ -2213,6 +2253,10 @@ var DauthProvider = (props) => {
|
|
|
2213
2253
|
(credentialId) => deletePasskeyCredentialAction(ctx, credentialId),
|
|
2214
2254
|
[ctx]
|
|
2215
2255
|
);
|
|
2256
|
+
const uploadAvatar = useCallback2(
|
|
2257
|
+
(file) => uploadAvatarAction(ctx, file),
|
|
2258
|
+
[ctx]
|
|
2259
|
+
);
|
|
2216
2260
|
const memoProvider = useMemo2(
|
|
2217
2261
|
() => ({
|
|
2218
2262
|
...dauthState,
|
|
@@ -2222,7 +2266,8 @@ var DauthProvider = (props) => {
|
|
|
2222
2266
|
deleteAccount,
|
|
2223
2267
|
getPasskeyCredentials,
|
|
2224
2268
|
registerPasskey,
|
|
2225
|
-
deletePasskeyCredential
|
|
2269
|
+
deletePasskeyCredential,
|
|
2270
|
+
uploadAvatar
|
|
2226
2271
|
}),
|
|
2227
2272
|
[
|
|
2228
2273
|
dauthState,
|
|
@@ -2232,7 +2277,8 @@ var DauthProvider = (props) => {
|
|
|
2232
2277
|
deleteAccount,
|
|
2233
2278
|
getPasskeyCredentials,
|
|
2234
2279
|
registerPasskey,
|
|
2235
|
-
deletePasskeyCredential
|
|
2280
|
+
deletePasskeyCredential,
|
|
2281
|
+
uploadAvatar
|
|
2236
2282
|
]
|
|
2237
2283
|
);
|
|
2238
2284
|
return /* @__PURE__ */ jsx2(DauthContext.Provider, { value: memoProvider, children });
|