@sanvika/auth 2.9.3 → 2.9.5
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.js +59 -14
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -314,8 +314,22 @@ function SanvikaAuthProvider({
|
|
|
314
314
|
...opts.headers
|
|
315
315
|
};
|
|
316
316
|
const res = await fetch(url, { ...opts, headers });
|
|
317
|
-
|
|
318
|
-
|
|
317
|
+
let data;
|
|
318
|
+
try {
|
|
319
|
+
data = await res.json();
|
|
320
|
+
} catch {
|
|
321
|
+
data = {
|
|
322
|
+
success: false,
|
|
323
|
+
message: `Invalid JSON response (HTTP ${res.status})`
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
const bodySuccess = (data == null ? void 0 : data.success) === true;
|
|
327
|
+
return {
|
|
328
|
+
data,
|
|
329
|
+
success: bodySuccess,
|
|
330
|
+
ok: res.ok && (data == null ? void 0 : data.success) !== false,
|
|
331
|
+
status: res.status
|
|
332
|
+
};
|
|
319
333
|
},
|
|
320
334
|
[persistence]
|
|
321
335
|
);
|
|
@@ -368,7 +382,7 @@ function styleInject(css, { insertAt } = {}) {
|
|
|
368
382
|
}
|
|
369
383
|
|
|
370
384
|
// SanvikaAccountButton.css
|
|
371
|
-
styleInject("@keyframes snvk-shimmer {\n 0% {\n background-position: 200% 0;\n }\n 100% {\n background-position: -200% 0;\n }\n}\n.snvk-skeleton {\n width: clamp(72px, 20vw, 96px);\n height: clamp(34px, 8vw, 40px);\n border-radius: 8px;\n background:\n linear-gradient(\n 90deg,\n var(--skeleton-base-color, #d0d0d0) 25%,\n var(--skeleton-highlight-color, #f0f0f0) 50%,\n var(--skeleton-base-color, #d0d0d0) 75%);\n background-size: 200% 100%;\n animation: snvk-shimmer 1.4s infinite;\n display: inline-block;\n}\n.snvk-wrapper {\n position: relative;\n display: inline-block;\n}\n.snvk-guestBtn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: clamp(6px, 2vw, 8px) clamp(10px, 3vw, 16px);\n min-height: 44px;\n min-width: 44px;\n background: var(--sanvika-brand-color, #4f46e5);\n color: #ffffff;\n border: none;\n border-radius: 8px;\n font-size: clamp(13px, 3vw, 14px);\n font-weight: 600;\n cursor: pointer;\n transition: background-color 0.3s ease, color 0.3s ease;\n white-space: nowrap;\n}\n.snvk-guestBtn:hover {\n background: var(--sanvika-brand-hover, #4338ca);\n}\n.snvk-iconWrap {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n}\n.snvk-profileBtn {\n display: inline-flex;\n align-items: center;\n gap: 7px;\n padding: 5px 10px 5px 5px;\n min-height: 44px;\n background: var(--muted-bg, #f5f5f5);\n border: 1px solid var(--border-color-light, #e5e7eb);\n border-radius: 99px;\n font-size: clamp(13px, 3vw, 14px);\n font-weight: 600;\n cursor: pointer;\n color: var(--text-color, #1a1a1a);\n transition:\n background-color 0.3s ease,\n border-color 0.3s ease,\n color 0.3s ease;\n white-space: nowrap;\n outline: none;\n}\n.snvk-profileBtn:hover {\n background: var(--hover-color, #ebebeb);\n border-color: var(--border-color-dark, #d1d5db);\n}\n.snvk-profileBtn:focus-visible {\n outline: 2px solid var(--sanvika-brand-color, #4f46e5);\n outline-offset: 2px;\n}\n.snvk-avatar {\n width: 28px;\n height: 28px;\n border-radius: 50%;\n object-fit: cover;\n border: 2px solid var(--sanvika-brand-color, #4f46e5);\n flex-shrink: 0;\n}\n.snvk-textWrap {\n display: inline;\n}\n.snvk-hideTextOnMobile {\n display: none;\n}\n@media (min-width: 500px) {\n .snvk-hideTextOnMobile {\n display: inline;\n }\n}\n.snvk-dropdown {\n position: absolute;\n top: calc(100% + 8px);\n right: 0;\n min-width: clamp(200px, 60vw, 240px);\n background: var(--card-bg, #f3f3f3);\n border: 1px solid var(--border-color-light, #cccccc);\n border-radius: 12px;\n box-shadow: 0 8px 24px var(--shadow-color, rgba(0, 0, 0, 0.2));\n z-index: 9999;\n overflow: hidden;\n transition: background-color 0.3s ease, border-color 0.3s ease;\n}\n.snvk-dropdownHeader {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 14px 16px;\n background: var(--section-bg, #ebebeb);\n transition: background-color 0.3s ease;\n}\n.snvk-dropdownAvatar {\n width: 38px;\n height: 38px;\n border-radius: 50%;\n object-fit: cover;\n border: 2px solid var(--sanvika-brand-color, #4f46e5);\n flex-shrink: 0;\n}\n.snvk-dropdownName {\n font-size: clamp(13px, 3vw, 14px);\n font-weight: 800;\n color: var(--text-color, #000000);\n line-height: 1.3;\n transition: color 0.3s ease;\n}\n.snvk-dropdownMobile {\n font-size: clamp(11px, 2.5vw, 12px);\n color: var(--secondary-text-color, #333333);\n margin-top: 2px;\n transition: color 0.3s ease;\n font-weight: 700;\n}\n.snvk-divider {\n height: 1px;\n background: var(--muted-border, #d8d8d8);\n transition: background-color 0.3s ease;\n}\n.snvk-dropdownItem {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 11px 16px;\n min-height: 44px;\n background: none;\n border: none;\n font-size: clamp(13px, 3vw, 14px);\n color: var(--text-color, #000000);\n font-weight: 600;\n cursor: pointer;\n text-decoration: none;\n text-align: left;\n transition: background-color 0.3s ease, color 0.3s ease;\n}\n.snvk-dropdownItem:hover {\n background: var(--hover-color, #e8e8e8);\n}\n");
|
|
385
|
+
styleInject("@keyframes snvk-shimmer {\n 0% {\n background-position: 200% 0;\n }\n 100% {\n background-position: -200% 0;\n }\n}\n.snvk-skeleton {\n width: clamp(72px, 20vw, 96px);\n height: clamp(34px, 8vw, 40px);\n border-radius: 8px;\n background:\n linear-gradient(\n 90deg,\n var(--skeleton-base-color, #d0d0d0) 25%,\n var(--skeleton-highlight-color, #f0f0f0) 50%,\n var(--skeleton-base-color, #d0d0d0) 75%);\n background-size: 200% 100%;\n animation: snvk-shimmer 1.4s infinite;\n display: inline-block;\n}\n.snvk-wrapper {\n position: relative;\n display: inline-block;\n}\n.snvk-guestBtn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: clamp(6px, 2vw, 8px) clamp(10px, 3vw, 16px);\n min-height: 44px;\n min-width: 44px;\n background: var(--sanvika-brand-color, #4f46e5);\n color: #ffffff;\n border: none;\n border-radius: 8px;\n font-size: clamp(13px, 3vw, 14px);\n font-weight: 600;\n cursor: pointer;\n transition: background-color 0.3s ease, color 0.3s ease;\n white-space: nowrap;\n}\n.snvk-guestBtn:hover {\n background: var(--sanvika-brand-hover, #4338ca);\n}\n.snvk-iconWrap {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n}\n.snvk-profileBtn {\n display: inline-flex;\n align-items: center;\n gap: 7px;\n padding: 5px 10px 5px 5px;\n min-height: 44px;\n background: var(--muted-bg, #f5f5f5);\n border: 1px solid var(--border-color-light, #e5e7eb);\n border-radius: 99px;\n font-size: clamp(13px, 3vw, 14px);\n font-weight: 600;\n cursor: pointer;\n color: var(--text-color, #1a1a1a);\n transition:\n background-color 0.3s ease,\n border-color 0.3s ease,\n color 0.3s ease;\n white-space: nowrap;\n outline: none;\n}\n.snvk-profileBtn:hover {\n background: var(--hover-color, #ebebeb);\n border-color: var(--border-color-dark, #d1d5db);\n}\n.snvk-profileBtn:focus-visible {\n outline: 2px solid var(--sanvika-brand-color, #4f46e5);\n outline-offset: 2px;\n}\n.snvk-avatar {\n width: 28px;\n height: 28px;\n border-radius: 50%;\n object-fit: cover;\n border: 2px solid var(--sanvika-brand-color, #4f46e5);\n flex-shrink: 0;\n}\n.snvk-textWrap {\n display: inline;\n}\n.snvk-hideTextOnMobile {\n display: none;\n}\n@media (min-width: 500px) {\n .snvk-hideTextOnMobile {\n display: inline;\n }\n}\n.snvk-dropdown {\n position: absolute;\n top: calc(100% + 8px);\n right: 0;\n min-width: clamp(200px, 60vw, 240px);\n background: var(--card-bg, #f3f3f3);\n border: 1px solid var(--border-color-light, #cccccc);\n border-radius: 12px;\n box-shadow: 0 8px 24px var(--shadow-color, rgba(0, 0, 0, 0.2));\n z-index: 9999;\n overflow: hidden;\n transition: background-color 0.3s ease, border-color 0.3s ease;\n}\n.snvk-dropdownHeader {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 14px 16px;\n background: var(--section-bg, #ebebeb);\n transition: background-color 0.3s ease;\n}\n.snvk-dropdownAvatar {\n width: 38px;\n height: 38px;\n border-radius: 50%;\n object-fit: cover;\n border: 2px solid var(--sanvika-brand-color, #4f46e5);\n flex-shrink: 0;\n}\n.snvk-dropdownName {\n font-size: clamp(13px, 3vw, 14px);\n font-weight: 800;\n color: var(--text-color, #000000);\n line-height: 1.3;\n transition: color 0.3s ease;\n}\n.snvk-dropdownMobile {\n font-size: clamp(11px, 2.5vw, 12px);\n color: var(--secondary-text-color, #333333);\n margin-top: 2px;\n transition: color 0.3s ease;\n font-weight: 700;\n}\n.snvk-divider {\n height: 1px;\n background: var(--muted-border, #d8d8d8);\n transition: background-color 0.3s ease;\n}\n.snvk-dropdownItem {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 11px 16px;\n min-height: 44px;\n background: none;\n border: none;\n font-size: clamp(13px, 3vw, 14px);\n color: var(--text-color, #000000);\n font-weight: 600;\n cursor: pointer;\n text-decoration: none;\n text-align: left;\n transition: background-color 0.3s ease, color 0.3s ease;\n}\n.snvk-dropdownItem:hover {\n background: var(--hover-color, #e8e8e8);\n}\n.snvk-layout-navbarChip.snvk-guestBtn,\n.snvk-layout-navbarChip-profile {\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n height: clamp(32px, 8vw, 38px) !important;\n min-height: clamp(32px, 8vw, 38px) !important;\n max-height: clamp(32px, 8vw, 38px) !important;\n padding: clamp(3px, 0.8vw, 5px) clamp(4px, 1.2vw, 8px) !important;\n border-radius: 4px !important;\n border: 1px solid var(--border-color) !important;\n background-color: var(--btn-primary-bg) !important;\n color: var(--btn-primary-text) !important;\n font-size: clamp(9px, 2.4vw, 13px) !important;\n font-weight: 600 !important;\n line-height: 1.1 !important;\n box-sizing: border-box !important;\n white-space: nowrap !important;\n cursor: pointer;\n}\n.snvk-layout-navbarChip.snvk-guestBtn {\n min-width: clamp(52px, 16vw, 90px) !important;\n max-width: clamp(64px, 22vw, 200px) !important;\n gap: 0 !important;\n}\n.snvk-layout-navbarChip.snvk-guestBtn .snvk-iconWrap {\n display: none !important;\n}\n.snvk-layout-navbarChip-profile {\n min-width: clamp(52px, 16vw, 90px) !important;\n max-width: clamp(72px, 24vw, 120px) !important;\n gap: clamp(3px, 0.8vw, 5px) !important;\n}\n.snvk-layout-navbarChip-profile .snvk-avatar {\n width: clamp(18px, 5vw, 22px) !important;\n height: clamp(18px, 5vw, 22px) !important;\n border: 2px solid var(--success-color, #00b894) !important;\n}\n.snvk-layout-navbarChip-profile .snvk-textWrap {\n display: inline !important;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: clamp(32px, 12vw, 64px);\n}\n.snvk-layout-navbarChip.snvk-wrapper {\n display: inline-flex;\n align-items: center;\n}\n");
|
|
372
386
|
|
|
373
387
|
// SanvikaAccountButton.jsx
|
|
374
388
|
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
|
@@ -453,9 +467,13 @@ function SanvikaAccountButtonContent({
|
|
|
453
467
|
onLoginClick,
|
|
454
468
|
onProfileClick,
|
|
455
469
|
onboardingPath,
|
|
456
|
-
className
|
|
470
|
+
className,
|
|
471
|
+
layout = "default"
|
|
457
472
|
}) {
|
|
458
473
|
var _a, _b;
|
|
474
|
+
const isNavbarChip = layout === "navbarChip";
|
|
475
|
+
const guestBtnClass = `snvk-guestBtn${isNavbarChip ? " snvk-layout-navbarChip" : ""}${className ? ` ${className}` : ""}`;
|
|
476
|
+
const wrapperClass = `snvk-wrapper${isNavbarChip ? " snvk-layout-navbarChip" : ""}${className ? ` ${className}` : ""}`;
|
|
459
477
|
const auth = useSanvikaAuth();
|
|
460
478
|
const [dropdownOpen, setDropdownOpen] = useState2(false);
|
|
461
479
|
const [imgError, setImgError] = useState2(false);
|
|
@@ -475,7 +493,7 @@ function SanvikaAccountButtonContent({
|
|
|
475
493
|
return /* @__PURE__ */ jsxs(
|
|
476
494
|
"button",
|
|
477
495
|
{
|
|
478
|
-
className:
|
|
496
|
+
className: guestBtnClass,
|
|
479
497
|
onClick: (e) => {
|
|
480
498
|
if (onLoginClick) {
|
|
481
499
|
onLoginClick();
|
|
@@ -485,11 +503,11 @@ function SanvikaAccountButtonContent({
|
|
|
485
503
|
},
|
|
486
504
|
"aria-label": "Login or Sign Up",
|
|
487
505
|
children: [
|
|
488
|
-
/* @__PURE__ */ jsx2("span", { className: "snvk-iconWrap", children: /* @__PURE__ */ jsx2(UserIcon, { size: 18 }) }),
|
|
506
|
+
!isNavbarChip ? /* @__PURE__ */ jsx2("span", { className: "snvk-iconWrap", children: /* @__PURE__ */ jsx2(UserIcon, { size: 18 }) }) : null,
|
|
489
507
|
/* @__PURE__ */ jsx2(
|
|
490
508
|
"span",
|
|
491
509
|
{
|
|
492
|
-
className: hideTextOnMobile ? "snvk-hideTextOnMobile" : "snvk-textWrap",
|
|
510
|
+
className: hideTextOnMobile && !isNavbarChip ? "snvk-hideTextOnMobile" : "snvk-textWrap",
|
|
493
511
|
children: text
|
|
494
512
|
}
|
|
495
513
|
)
|
|
@@ -509,7 +527,7 @@ function SanvikaAccountButtonContent({
|
|
|
509
527
|
return /* @__PURE__ */ jsxs(
|
|
510
528
|
"button",
|
|
511
529
|
{
|
|
512
|
-
className:
|
|
530
|
+
className: guestBtnClass,
|
|
513
531
|
onClick: (e) => {
|
|
514
532
|
if (onLoginClick) {
|
|
515
533
|
onLoginClick();
|
|
@@ -519,11 +537,11 @@ function SanvikaAccountButtonContent({
|
|
|
519
537
|
},
|
|
520
538
|
"aria-label": "Login or Sign Up",
|
|
521
539
|
children: [
|
|
522
|
-
/* @__PURE__ */ jsx2("span", { className: "snvk-iconWrap", children: /* @__PURE__ */ jsx2(UserIcon, { size: 18 }) }),
|
|
540
|
+
!isNavbarChip ? /* @__PURE__ */ jsx2("span", { className: "snvk-iconWrap", children: /* @__PURE__ */ jsx2(UserIcon, { size: 18 }) }) : null,
|
|
523
541
|
/* @__PURE__ */ jsx2(
|
|
524
542
|
"span",
|
|
525
543
|
{
|
|
526
|
-
className: hideTextOnMobile ? "snvk-hideTextOnMobile" : "snvk-textWrap",
|
|
544
|
+
className: hideTextOnMobile && !isNavbarChip ? "snvk-hideTextOnMobile" : "snvk-textWrap",
|
|
527
545
|
children: text
|
|
528
546
|
}
|
|
529
547
|
)
|
|
@@ -541,11 +559,11 @@ function SanvikaAccountButtonContent({
|
|
|
541
559
|
await logout(false);
|
|
542
560
|
setDropdownOpen(false);
|
|
543
561
|
};
|
|
544
|
-
return /* @__PURE__ */ jsxs("div", { ref: wrapperRef, className:
|
|
562
|
+
return /* @__PURE__ */ jsxs("div", { ref: wrapperRef, className: wrapperClass, children: [
|
|
545
563
|
/* @__PURE__ */ jsxs(
|
|
546
564
|
"button",
|
|
547
565
|
{
|
|
548
|
-
className:
|
|
566
|
+
className: `snvk-profileBtn${isNavbarChip ? " snvk-layout-navbarChip-profile" : ""}`,
|
|
549
567
|
onClick: () => setDropdownOpen((o) => !o),
|
|
550
568
|
onDoubleClick: handleProfileClick,
|
|
551
569
|
"aria-label": "Account menu",
|
|
@@ -563,11 +581,11 @@ function SanvikaAccountButtonContent({
|
|
|
563
581
|
/* @__PURE__ */ jsx2(
|
|
564
582
|
"span",
|
|
565
583
|
{
|
|
566
|
-
className: hideTextOnMobile ? "snvk-hideTextOnMobile" : "snvk-textWrap",
|
|
584
|
+
className: hideTextOnMobile && !isNavbarChip ? "snvk-hideTextOnMobile" : "snvk-textWrap",
|
|
567
585
|
children: displayName
|
|
568
586
|
}
|
|
569
587
|
),
|
|
570
|
-
/* @__PURE__ */ jsx2(ChevronIcon, { open: dropdownOpen })
|
|
588
|
+
!isNavbarChip ? /* @__PURE__ */ jsx2(ChevronIcon, { open: dropdownOpen }) : null
|
|
571
589
|
]
|
|
572
590
|
}
|
|
573
591
|
),
|
|
@@ -862,6 +880,29 @@ function SanvikaAdminLogin({
|
|
|
862
880
|
error && /* @__PURE__ */ jsx3("p", { style: S.error, children: error })
|
|
863
881
|
] }) });
|
|
864
882
|
}
|
|
883
|
+
|
|
884
|
+
// authFetchResult.js
|
|
885
|
+
function isAuthFetchOk(response) {
|
|
886
|
+
var _a;
|
|
887
|
+
if (!response || typeof response !== "object") return false;
|
|
888
|
+
if (response.ok === true) return true;
|
|
889
|
+
return Boolean(response.success) || ((_a = response == null ? void 0 : response.data) == null ? void 0 : _a.success) === true;
|
|
890
|
+
}
|
|
891
|
+
function getAuthFetchMessage(response, fallback = "Request failed") {
|
|
892
|
+
var _a;
|
|
893
|
+
const msg = (_a = response == null ? void 0 : response.data) == null ? void 0 : _a.message;
|
|
894
|
+
return typeof msg === "string" && msg.trim() ? msg.trim() : fallback;
|
|
895
|
+
}
|
|
896
|
+
function getAuthFetchPayload(response) {
|
|
897
|
+
return (response == null ? void 0 : response.data) ?? null;
|
|
898
|
+
}
|
|
899
|
+
function getAuthFetchData(response) {
|
|
900
|
+
const payload = getAuthFetchPayload(response);
|
|
901
|
+
if (payload && typeof payload === "object" && payload.data !== void 0) {
|
|
902
|
+
return payload.data;
|
|
903
|
+
}
|
|
904
|
+
return payload;
|
|
905
|
+
}
|
|
865
906
|
export {
|
|
866
907
|
DEFAULT_AUTH_URL,
|
|
867
908
|
DEFAULT_AVATAR_SVG,
|
|
@@ -874,7 +915,11 @@ export {
|
|
|
874
915
|
SanvikaAuthProvider,
|
|
875
916
|
checkMobile,
|
|
876
917
|
deviceAwareLogin,
|
|
918
|
+
getAuthFetchData,
|
|
919
|
+
getAuthFetchMessage,
|
|
920
|
+
getAuthFetchPayload,
|
|
877
921
|
getOrCreateWebDeviceId,
|
|
922
|
+
isAuthFetchOk,
|
|
878
923
|
postLogin,
|
|
879
924
|
randomDeviceId,
|
|
880
925
|
resolveLogoutDeviceId,
|