zudoku 0.53.5 → 0.54.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/config/config.d.ts +1 -0
- package/dist/config/validators/InputNavigationSchema.d.ts +254 -158
- package/dist/config/validators/InputNavigationSchema.js +4 -1
- package/dist/config/validators/InputNavigationSchema.js.map +1 -1
- package/dist/config/validators/ProtectedRoutesSchema.d.ts +12 -0
- package/dist/config/validators/ProtectedRoutesSchema.js +19 -0
- package/dist/config/validators/ProtectedRoutesSchema.js.map +1 -0
- package/dist/config/validators/icon-types.d.ts +1 -1
- package/dist/config/validators/icon-types.js +16 -0
- package/dist/config/validators/icon-types.js.map +1 -1
- package/dist/config/validators/validate.d.ts +32 -19
- package/dist/config/validators/validate.js +6 -2
- package/dist/config/validators/validate.js.map +1 -1
- package/dist/lib/authentication/components/CallbackHandler.js +11 -9
- package/dist/lib/authentication/components/CallbackHandler.js.map +1 -1
- package/dist/lib/authentication/components/OAuthErrorPage.d.ts +3 -0
- package/dist/lib/authentication/components/OAuthErrorPage.js +99 -0
- package/dist/lib/authentication/components/OAuthErrorPage.js.map +1 -0
- package/dist/lib/authentication/errors.d.ts +6 -12
- package/dist/lib/authentication/errors.js +2 -1
- package/dist/lib/authentication/errors.js.map +1 -1
- package/dist/lib/authentication/hook.d.ts +1 -0
- package/dist/lib/authentication/hook.js.map +1 -1
- package/dist/lib/authentication/providers/azureb2c.js +4 -2
- package/dist/lib/authentication/providers/azureb2c.js.map +1 -1
- package/dist/lib/authentication/providers/clerk.js +4 -2
- package/dist/lib/authentication/providers/clerk.js.map +1 -1
- package/dist/lib/authentication/providers/openid.js +3 -1
- package/dist/lib/authentication/providers/openid.js.map +1 -1
- package/dist/lib/components/Heading.js +1 -1
- package/dist/lib/components/Heading.js.map +1 -1
- package/dist/lib/components/MobileTopNavigation.js +5 -3
- package/dist/lib/components/MobileTopNavigation.js.map +1 -1
- package/dist/lib/components/TopNavigation.js +4 -3
- package/dist/lib/components/TopNavigation.js.map +1 -1
- package/dist/lib/components/context/ZudokuContext.js +21 -13
- package/dist/lib/components/context/ZudokuContext.js.map +1 -1
- package/dist/lib/components/navigation/NavigationItem.d.ts +1 -1
- package/dist/lib/components/navigation/NavigationItem.js +8 -1
- package/dist/lib/components/navigation/NavigationItem.js.map +1 -1
- package/dist/lib/components/navigation/utils.d.ts +3 -1
- package/dist/lib/components/navigation/utils.js +6 -3
- package/dist/lib/components/navigation/utils.js.map +1 -1
- package/dist/lib/core/RouteGuard.js +9 -9
- package/dist/lib/core/RouteGuard.js.map +1 -1
- package/dist/lib/core/ZudokuContext.d.ts +2 -1
- package/dist/lib/core/ZudokuContext.js +13 -1
- package/dist/lib/core/ZudokuContext.js.map +1 -1
- package/dist/lib/core/plugins.d.ts +2 -1
- package/dist/lib/core/plugins.js.map +1 -1
- package/dist/lib/plugins/api-keys/CreateApiKey.js +7 -3
- package/dist/lib/plugins/api-keys/CreateApiKey.js.map +1 -1
- package/dist/lib/plugins/api-keys/SettingsApiKeys.js +3 -1
- package/dist/lib/plugins/api-keys/SettingsApiKeys.js.map +1 -1
- package/dist/lib/plugins/api-keys/index.d.ts +1 -0
- package/dist/lib/plugins/api-keys/index.js +3 -7
- package/dist/lib/plugins/api-keys/index.js.map +1 -1
- package/dist/lib/plugins/openapi/graphql/gql.d.ts +1 -1
- package/dist/lib/plugins/openapi/graphql/gql.js +1 -1
- package/dist/lib/plugins/openapi/graphql/gql.js.map +1 -1
- package/dist/lib/plugins/openapi/graphql/graphql.d.ts +1 -0
- package/dist/lib/plugins/openapi/graphql/graphql.js +1 -0
- package/dist/lib/plugins/openapi/graphql/graphql.js.map +1 -1
- package/dist/lib/plugins/openapi/index.js +42 -10
- package/dist/lib/plugins/openapi/index.js.map +1 -1
- package/dist/lib/ui/ActionButton.js +1 -1
- package/dist/lib/ui/ActionButton.js.map +1 -1
- package/dist/lib/ui/Badge.d.ts +1 -1
- package/dist/lib/ui/Button.d.ts +2 -2
- package/dist/lib/ui/Command.d.ts +1 -1
- package/dist/lib/util/invariant.d.ts +6 -5
- package/dist/lib/util/invariant.js +1 -1
- package/dist/lib/util/invariant.js.map +1 -1
- package/dist/vite/dev-server.js +1 -1
- package/dist/vite/dev-server.js.map +1 -1
- package/dist/vite/plugin-docs.js +15 -10
- package/dist/vite/plugin-docs.js.map +1 -1
- package/dist/vite/prerender/worker.js +5 -1
- package/dist/vite/prerender/worker.js.map +1 -1
- package/dist/vite/shadcn-registry.d.ts +8 -8
- package/lib/{Command-C9AC5cf-.js → Command-BYukybsa.js} +2 -2
- package/lib/{Command-C9AC5cf-.js.map → Command-BYukybsa.js.map} +1 -1
- package/lib/{Dialog-DMWw1doX.js → Dialog-u9Uz9sTt.js} +4 -4
- package/lib/{Dialog-DMWw1doX.js.map → Dialog-u9Uz9sTt.js.map} +1 -1
- package/lib/{MdxPage-DVI4iYgW.js → MdxPage-Bsko6_kb.js} +11 -11
- package/lib/{MdxPage-DVI4iYgW.js.map → MdxPage-Bsko6_kb.js.map} +1 -1
- package/lib/OAuthErrorPage-DJzGiIBt.js +150 -0
- package/lib/OAuthErrorPage-DJzGiIBt.js.map +1 -0
- package/lib/{OasProvider-CbwsKPNc.js → OasProvider-DQQRt3oS.js} +3 -3
- package/lib/{OasProvider-CbwsKPNc.js.map → OasProvider-DQQRt3oS.js.map} +1 -1
- package/lib/{OperationList-Bn9ggxw8.js → OperationList-DpmkHf26.js} +45 -43
- package/lib/{OperationList-Bn9ggxw8.js.map → OperationList-DpmkHf26.js.map} +1 -1
- package/lib/{Pagination-bavPec-z.js → Pagination-kqFNgtnI.js} +3 -3
- package/lib/{Pagination-bavPec-z.js.map → Pagination-kqFNgtnI.js.map} +1 -1
- package/lib/{RouteGuard-Vnlz_t51.js → RouteGuard-0wPUKdxJ.js} +166 -165
- package/lib/{RouteGuard-Vnlz_t51.js.map → RouteGuard-0wPUKdxJ.js.map} +1 -1
- package/lib/{SchemaList-DETyCVqu.js → SchemaList-DS-pMd6B.js} +8 -8
- package/lib/{SchemaList-DETyCVqu.js.map → SchemaList-DS-pMd6B.js.map} +1 -1
- package/lib/{SchemaView-Dvxo2RNe.js → SchemaView-BnN6WHjw.js} +4 -4
- package/lib/{SchemaView-Dvxo2RNe.js.map → SchemaView-BnN6WHjw.js.map} +1 -1
- package/lib/Select-BmTTKNPp.js +273 -0
- package/lib/Select-BmTTKNPp.js.map +1 -0
- package/lib/{SignUp-ClYhZq9H.js → SignUp-BwOSCD-6.js} +9 -9
- package/lib/{SignUp-ClYhZq9H.js.map → SignUp-BwOSCD-6.js.map} +1 -1
- package/lib/{Slot-B31yZlfB.js → Slot-DAyXieeZ.js} +1352 -1349
- package/lib/{Slot-B31yZlfB.js.map → Slot-DAyXieeZ.js.map} +1 -1
- package/lib/{SyntaxHighlight-bm761HDo.js → SyntaxHighlight-BMKR4pl6.js} +3 -3
- package/lib/{SyntaxHighlight-bm761HDo.js.map → SyntaxHighlight-BMKR4pl6.js.map} +1 -1
- package/lib/{Toc-D4oBWE8D.js → Toc-BKDRCQzU.js} +2 -2
- package/lib/{Toc-D4oBWE8D.js.map → Toc-BKDRCQzU.js.map} +1 -1
- package/lib/ZudokuContext-CLl5w57E.js +1278 -0
- package/lib/ZudokuContext-CLl5w57E.js.map +1 -0
- package/lib/{chunk-DQRVZFIR-DHK7_Ilc.js → chunk-QMGIS6GS-CEOk3lro.js} +3 -3
- package/lib/chunk-QMGIS6GS-CEOk3lro.js.map +1 -0
- package/lib/{circular-CRbFI6Zl.js → circular-8GWQDvCW.js} +2 -2
- package/lib/{circular-CRbFI6Zl.js.map → circular-8GWQDvCW.js.map} +1 -1
- package/lib/{createServer-DNyGJJNX.js → createServer-BsezSzvV.js} +5 -5
- package/lib/{createServer-DNyGJJNX.js.map → createServer-BsezSzvV.js.map} +1 -1
- package/lib/{errors-C1GlNcV3.js → errors-Cs7hKmdL.js} +11 -10
- package/lib/errors-Cs7hKmdL.js.map +1 -0
- package/lib/hook-DbUCLQNg.js +247 -0
- package/lib/hook-DbUCLQNg.js.map +1 -0
- package/lib/{index-D09PbNex.js → index-A5Qdwj1B.js} +1521 -1420
- package/lib/index-A5Qdwj1B.js.map +1 -0
- package/lib/{index-C_PXQ8Bx.js → index-Bg7Js3jB.js} +832 -912
- package/lib/index-Bg7Js3jB.js.map +1 -0
- package/lib/{index-CZTEgYDd.js → index-BkW9tJ6j.js} +2 -2
- package/lib/{index-CZTEgYDd.js.map → index-BkW9tJ6j.js.map} +1 -1
- package/lib/index.esm-CdzlRw50.js +1254 -0
- package/lib/index.esm-CdzlRw50.js.map +1 -0
- package/lib/{invariant-DAFpPywt.js → invariant-Bm-FVUQE.js} +2 -6
- package/lib/invariant-Bm-FVUQE.js.map +1 -0
- package/lib/ui/ActionButton.js +9 -9
- package/lib/ui/ActionButton.js.map +1 -1
- package/lib/ui/Command.js +1 -1
- package/lib/ui/Form.js +1 -1
- package/lib/ui/SyntaxHighlight.js +3 -3
- package/lib/{useExposedProps-BIYjecPD.js → useExposedProps-KcgXHKeE.js} +2 -2
- package/lib/{useExposedProps-BIYjecPD.js.map → useExposedProps-KcgXHKeE.js.map} +1 -1
- package/lib/zudoku.auth-auth0.js +1 -1
- package/lib/zudoku.auth-azureb2c.js +25 -17
- package/lib/zudoku.auth-azureb2c.js.map +1 -1
- package/lib/zudoku.auth-clerk.js +24 -21
- package/lib/zudoku.auth-clerk.js.map +1 -1
- package/lib/zudoku.auth-openid.js +213 -205
- package/lib/zudoku.auth-openid.js.map +1 -1
- package/lib/zudoku.auth-supabase.js +2 -2
- package/lib/zudoku.components.js +29 -28
- package/lib/zudoku.components.js.map +1 -1
- package/lib/zudoku.hooks.js +16 -15
- package/lib/zudoku.hooks.js.map +1 -1
- package/lib/zudoku.plugin-api-catalog.js +26 -25
- package/lib/zudoku.plugin-api-catalog.js.map +1 -1
- package/lib/zudoku.plugin-api-keys.js +404 -289
- package/lib/zudoku.plugin-api-keys.js.map +1 -1
- package/lib/zudoku.plugin-custom-pages.js +1 -1
- package/lib/zudoku.plugin-markdown.js +1 -1
- package/lib/zudoku.plugin-openapi.js +7 -6
- package/lib/zudoku.plugin-openapi.js.map +1 -1
- package/lib/zudoku.plugin-redirect.js +1 -1
- package/lib/zudoku.plugin-search-pagefind.js +28 -27
- package/lib/zudoku.plugin-search-pagefind.js.map +1 -1
- package/lib/zudoku.plugins.js.map +1 -1
- package/package.json +8 -8
- package/src/lib/authentication/components/CallbackHandler.tsx +22 -15
- package/src/lib/authentication/components/OAuthErrorPage.tsx +171 -0
- package/src/lib/authentication/errors.ts +27 -13
- package/src/lib/authentication/hook.ts +2 -0
- package/src/lib/authentication/providers/azureb2c.tsx +8 -3
- package/src/lib/authentication/providers/clerk.tsx +4 -1
- package/src/lib/authentication/providers/openid.tsx +7 -1
- package/src/lib/components/Heading.tsx +1 -1
- package/src/lib/components/MobileTopNavigation.tsx +6 -3
- package/src/lib/components/TopNavigation.tsx +4 -4
- package/src/lib/components/context/ZudokuContext.ts +25 -18
- package/src/lib/components/navigation/NavigationItem.tsx +9 -1
- package/src/lib/components/navigation/utils.ts +9 -3
- package/src/lib/core/RouteGuard.tsx +13 -13
- package/src/lib/core/ZudokuContext.ts +18 -5
- package/src/lib/core/plugins.ts +2 -1
- package/src/lib/plugins/api-keys/CreateApiKey.tsx +12 -1
- package/src/lib/plugins/api-keys/SettingsApiKeys.tsx +24 -4
- package/src/lib/plugins/api-keys/index.tsx +7 -8
- package/src/lib/plugins/openapi/graphql/gql.ts +3 -3
- package/src/lib/plugins/openapi/graphql/graphql.ts +2 -0
- package/src/lib/plugins/openapi/index.tsx +66 -16
- package/src/lib/ui/ActionButton.tsx +3 -1
- package/src/lib/util/invariant.ts +7 -5
- package/lib/Alert-CWApD0CL.js +0 -161
- package/lib/Alert-CWApD0CL.js.map +0 -1
- package/lib/CallbackHandler-Dr5Lva9x.js +0 -38
- package/lib/CallbackHandler-Dr5Lva9x.js.map +0 -1
- package/lib/chunk-DQRVZFIR-DHK7_Ilc.js.map +0 -1
- package/lib/errors-C1GlNcV3.js.map +0 -1
- package/lib/hook-CZjW2buS.js +0 -1510
- package/lib/hook-CZjW2buS.js.map +0 -1
- package/lib/index-C_PXQ8Bx.js.map +0 -1
- package/lib/index-D09PbNex.js.map +0 -1
- package/lib/index.esm-Cp4wkyud.js +0 -1236
- package/lib/index.esm-Cp4wkyud.js.map +0 -1
- package/lib/invariant-DAFpPywt.js.map +0 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { j as t } from "./jsx-runtime-C5mzlN2N.js";
|
|
2
2
|
import { LogOutIcon as n } from "lucide-react";
|
|
3
|
-
import { S as i, a, b as u } from "./SignUp-
|
|
4
|
-
|
|
3
|
+
import { S as i, a, b as u } from "./SignUp-BwOSCD-6.js";
|
|
4
|
+
import { Z as m } from "./invariant-Bm-FVUQE.js";
|
|
5
|
+
class h {
|
|
5
6
|
getRoutes() {
|
|
6
7
|
return [
|
|
7
8
|
{
|
|
@@ -29,16 +30,16 @@ class c {
|
|
|
29
30
|
];
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
|
-
class
|
|
33
|
+
class x extends Error {
|
|
33
34
|
}
|
|
34
|
-
class
|
|
35
|
-
constructor(
|
|
36
|
-
super(
|
|
35
|
+
class f extends m {
|
|
36
|
+
constructor(o, s, e) {
|
|
37
|
+
super(o, e), this.error = s;
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
40
|
export {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
x as A,
|
|
42
|
+
h as C,
|
|
43
|
+
f as O
|
|
43
44
|
};
|
|
44
|
-
//# sourceMappingURL=errors-
|
|
45
|
+
//# sourceMappingURL=errors-Cs7hKmdL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors-Cs7hKmdL.js","sources":["../src/lib/authentication/AuthenticationPlugin.tsx","../src/lib/authentication/errors.ts"],"sourcesContent":["import { LogOutIcon } from \"lucide-react\";\nimport {\n type CommonPlugin,\n type NavigationPlugin,\n type ProfileMenuPlugin,\n} from \"../core/plugins.js\";\nimport { SignIn } from \"./components/SignIn.js\";\nimport { SignOut } from \"./components/SignOut.js\";\nimport { SignUp } from \"./components/SignUp.js\";\n\ntype PluginInterface = NavigationPlugin & CommonPlugin & ProfileMenuPlugin;\n\nexport class CoreAuthenticationPlugin implements PluginInterface {\n getRoutes() {\n return [\n {\n path: \"/signout\",\n element: <SignOut />,\n },\n {\n path: \"/signin\",\n element: <SignIn />,\n },\n {\n path: \"/signup\",\n element: <SignUp />,\n },\n ];\n }\n\n getProfileMenuItems() {\n return [\n {\n label: \"Logout\",\n path: \"/signout\",\n category: \"bottom\",\n icon: LogOutIcon,\n } as const,\n ];\n }\n}\n","import type { OAuth2Error } from \"oauth4webapi\";\nimport { ZudokuError, type ZudokuErrorOptions } from \"../util/invariant.js\";\n\nexport class AuthorizationError extends Error {}\n\nexport class OAuthAuthorizationError extends ZudokuError {\n constructor(\n message: string,\n public error: OAuth2Error,\n options?: ZudokuErrorOptions,\n ) {\n super(message, options);\n }\n}\n\nexport type OAuthErrorType =\n // Authorization errors\n | \"invalid_request\"\n | \"unauthorized_client\"\n | \"access_denied\"\n | \"unsupported_response_type\"\n | \"invalid_scope\"\n | \"server_error\"\n | \"temporarily_unavailable\"\n // Token errors\n | \"invalid_client\"\n | \"invalid_grant\"\n | \"unsupported_grant_type\"\n // Custom errors\n | \"invalid_state\"\n | \"missing_code_verifier\"\n | \"network_error\"\n | \"token_expired\"\n | \"configuration_error\"\n | \"unknown_error\";\n"],"names":["CoreAuthenticationPlugin","SignOut","SignIn","SignUp","LogOutIcon","AuthorizationError","OAuthAuthorizationError","ZudokuError","message","error","options"],"mappings":";;;;AAYO,MAAMA,EAAoD;AAAA,EAC/D,YAAY;AACV,WAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,+BAAUC,GAAA,CAAA,CAAQ;AAAA,MAAA;AAAA,MAEpB;AAAA,QACE,MAAM;AAAA,QACN,+BAAUC,GAAA,CAAA,CAAO;AAAA,MAAA;AAAA,MAEnB;AAAA,QACE,MAAM;AAAA,QACN,+BAAUC,GAAA,CAAA,CAAO;AAAA,MAAA;AAAA,IACnB;AAAA,EAEJ;AAAA,EAEA,sBAAsB;AACpB,WAAO;AAAA,MACL;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAU;AAAA,QACV,MAAMC;AAAA,MAAA;AAAA,IACR;AAAA,EAEJ;AACF;ACrCO,MAAMC,UAA2B,MAAM;AAAC;AAExC,MAAMC,UAAgCC,EAAY;AAAA,EACvD,YACEC,GACOC,GACPC,GACA;AACA,UAAMF,GAASE,CAAO,GAHf,KAAA,QAAAD;AAAA,EAIT;AACF;"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { c as _ } from "./ZudokuContext-CLl5w57E.js";
|
|
2
|
+
import I from "react";
|
|
3
|
+
const E = (t) => {
|
|
4
|
+
let n;
|
|
5
|
+
const e = /* @__PURE__ */ new Set(), s = (i, v) => {
|
|
6
|
+
const h = typeof i == "function" ? i(n) : i;
|
|
7
|
+
if (!Object.is(h, n)) {
|
|
8
|
+
const m = n;
|
|
9
|
+
n = v ?? (typeof h != "object" || h === null) ? h : Object.assign({}, n, h), e.forEach((f) => f(n, m));
|
|
10
|
+
}
|
|
11
|
+
}, a = () => n, c = { setState: s, getState: a, getInitialState: () => d, subscribe: (i) => (e.add(i), () => e.delete(i)) }, d = n = t(s, a, c);
|
|
12
|
+
return c;
|
|
13
|
+
}, j = (t) => t ? E(t) : E, H = (t) => t;
|
|
14
|
+
function L(t, n = H) {
|
|
15
|
+
const e = I.useSyncExternalStore(
|
|
16
|
+
t.subscribe,
|
|
17
|
+
() => n(t.getState()),
|
|
18
|
+
() => n(t.getInitialState())
|
|
19
|
+
);
|
|
20
|
+
return I.useDebugValue(e), e;
|
|
21
|
+
}
|
|
22
|
+
const k = (t) => {
|
|
23
|
+
const n = j(t), e = (s) => L(n, s);
|
|
24
|
+
return Object.assign(e, n), e;
|
|
25
|
+
}, D = (t) => k;
|
|
26
|
+
function A(t, n) {
|
|
27
|
+
let e;
|
|
28
|
+
try {
|
|
29
|
+
e = t();
|
|
30
|
+
} catch {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
getItem: (a) => {
|
|
35
|
+
var o;
|
|
36
|
+
const g = (d) => d === null ? null : JSON.parse(d, void 0), c = (o = e.getItem(a)) != null ? o : null;
|
|
37
|
+
return c instanceof Promise ? c.then(g) : g(c);
|
|
38
|
+
},
|
|
39
|
+
setItem: (a, o) => e.setItem(a, JSON.stringify(o, void 0)),
|
|
40
|
+
removeItem: (a) => e.removeItem(a)
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
const w = (t) => (n) => {
|
|
44
|
+
try {
|
|
45
|
+
const e = t(n);
|
|
46
|
+
return e instanceof Promise ? e : {
|
|
47
|
+
then(s) {
|
|
48
|
+
return w(s)(e);
|
|
49
|
+
},
|
|
50
|
+
catch(s) {
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
} catch (e) {
|
|
55
|
+
return {
|
|
56
|
+
then(s) {
|
|
57
|
+
return this;
|
|
58
|
+
},
|
|
59
|
+
catch(s) {
|
|
60
|
+
return w(s)(e);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}, R = (t, n) => (e, s, a) => {
|
|
65
|
+
let o = {
|
|
66
|
+
storage: A(() => localStorage),
|
|
67
|
+
partialize: (r) => r,
|
|
68
|
+
version: 0,
|
|
69
|
+
merge: (r, S) => ({
|
|
70
|
+
...S,
|
|
71
|
+
...r
|
|
72
|
+
}),
|
|
73
|
+
...n
|
|
74
|
+
}, g = !1;
|
|
75
|
+
const c = /* @__PURE__ */ new Set(), d = /* @__PURE__ */ new Set();
|
|
76
|
+
let i = o.storage;
|
|
77
|
+
if (!i)
|
|
78
|
+
return t(
|
|
79
|
+
(...r) => {
|
|
80
|
+
console.warn(
|
|
81
|
+
`[zustand persist middleware] Unable to update item '${o.name}', the given storage is currently unavailable.`
|
|
82
|
+
), e(...r);
|
|
83
|
+
},
|
|
84
|
+
s,
|
|
85
|
+
a
|
|
86
|
+
);
|
|
87
|
+
const v = () => {
|
|
88
|
+
const r = o.partialize({ ...s() });
|
|
89
|
+
return i.setItem(o.name, {
|
|
90
|
+
state: r,
|
|
91
|
+
version: o.version
|
|
92
|
+
});
|
|
93
|
+
}, h = a.setState;
|
|
94
|
+
a.setState = (r, S) => {
|
|
95
|
+
h(r, S), v();
|
|
96
|
+
};
|
|
97
|
+
const m = t(
|
|
98
|
+
(...r) => {
|
|
99
|
+
e(...r), v();
|
|
100
|
+
},
|
|
101
|
+
s,
|
|
102
|
+
a
|
|
103
|
+
);
|
|
104
|
+
a.getInitialState = () => m;
|
|
105
|
+
let f;
|
|
106
|
+
const b = () => {
|
|
107
|
+
var r, S;
|
|
108
|
+
if (!i) return;
|
|
109
|
+
g = !1, c.forEach((u) => {
|
|
110
|
+
var l;
|
|
111
|
+
return u((l = s()) != null ? l : m);
|
|
112
|
+
});
|
|
113
|
+
const p = ((S = o.onRehydrateStorage) == null ? void 0 : S.call(o, (r = s()) != null ? r : m)) || void 0;
|
|
114
|
+
return w(i.getItem.bind(i))(o.name).then((u) => {
|
|
115
|
+
if (u)
|
|
116
|
+
if (typeof u.version == "number" && u.version !== o.version) {
|
|
117
|
+
if (o.migrate) {
|
|
118
|
+
const l = o.migrate(
|
|
119
|
+
u.state,
|
|
120
|
+
u.version
|
|
121
|
+
);
|
|
122
|
+
return l instanceof Promise ? l.then((y) => [!0, y]) : [!0, l];
|
|
123
|
+
}
|
|
124
|
+
console.error(
|
|
125
|
+
"State loaded from storage couldn't be migrated since no migrate function was provided"
|
|
126
|
+
);
|
|
127
|
+
} else
|
|
128
|
+
return [!1, u.state];
|
|
129
|
+
return [!1, void 0];
|
|
130
|
+
}).then((u) => {
|
|
131
|
+
var l;
|
|
132
|
+
const [y, P] = u;
|
|
133
|
+
if (f = o.merge(
|
|
134
|
+
P,
|
|
135
|
+
(l = s()) != null ? l : m
|
|
136
|
+
), e(f, !0), y)
|
|
137
|
+
return v();
|
|
138
|
+
}).then(() => {
|
|
139
|
+
p?.(f, void 0), f = s(), g = !0, d.forEach((u) => u(f));
|
|
140
|
+
}).catch((u) => {
|
|
141
|
+
p?.(void 0, u);
|
|
142
|
+
});
|
|
143
|
+
};
|
|
144
|
+
return a.persist = {
|
|
145
|
+
setOptions: (r) => {
|
|
146
|
+
o = {
|
|
147
|
+
...o,
|
|
148
|
+
...r
|
|
149
|
+
}, r.storage && (i = r.storage);
|
|
150
|
+
},
|
|
151
|
+
clearStorage: () => {
|
|
152
|
+
i?.removeItem(o.name);
|
|
153
|
+
},
|
|
154
|
+
getOptions: () => o,
|
|
155
|
+
rehydrate: () => b(),
|
|
156
|
+
hasHydrated: () => g,
|
|
157
|
+
onHydrate: (r) => (c.add(r), () => {
|
|
158
|
+
c.delete(r);
|
|
159
|
+
}),
|
|
160
|
+
onFinishHydration: (r) => (d.add(r), () => {
|
|
161
|
+
d.delete(r);
|
|
162
|
+
})
|
|
163
|
+
}, o.skipHydration || b(), f || m;
|
|
164
|
+
}, x = R, F = (t) => {
|
|
165
|
+
const n = (e) => {
|
|
166
|
+
e.key === t.persist.getOptions().name && e.newValue && t.persist.rehydrate();
|
|
167
|
+
};
|
|
168
|
+
return window.addEventListener("storage", n), () => {
|
|
169
|
+
window.removeEventListener("storage", n);
|
|
170
|
+
};
|
|
171
|
+
}, O = D()(
|
|
172
|
+
x(
|
|
173
|
+
(t) => ({
|
|
174
|
+
isAuthenticated: !1,
|
|
175
|
+
isPending: !0,
|
|
176
|
+
profile: null,
|
|
177
|
+
providerData: null,
|
|
178
|
+
setAuthenticationPending: () => t(() => ({
|
|
179
|
+
isAuthenticated: !1,
|
|
180
|
+
isPending: !1,
|
|
181
|
+
profile: null,
|
|
182
|
+
providerData: null
|
|
183
|
+
})),
|
|
184
|
+
setLoggedOut: () => t(() => ({
|
|
185
|
+
isAuthenticated: !1,
|
|
186
|
+
isPending: !1,
|
|
187
|
+
profile: null,
|
|
188
|
+
providerData: null
|
|
189
|
+
})),
|
|
190
|
+
setLoggedIn: ({
|
|
191
|
+
profile: n,
|
|
192
|
+
providerData: e
|
|
193
|
+
}) => t(() => ({
|
|
194
|
+
isAuthenticated: !0,
|
|
195
|
+
isPending: !1,
|
|
196
|
+
profile: n,
|
|
197
|
+
providerData: e
|
|
198
|
+
}))
|
|
199
|
+
}),
|
|
200
|
+
{
|
|
201
|
+
merge: (t, n) => ({
|
|
202
|
+
...n,
|
|
203
|
+
isPending: !1,
|
|
204
|
+
...typeof t == "object" ? t : {}
|
|
205
|
+
}),
|
|
206
|
+
name: "auth-state",
|
|
207
|
+
storage: A(() => localStorage)
|
|
208
|
+
}
|
|
209
|
+
)
|
|
210
|
+
);
|
|
211
|
+
typeof window < "u" && F(O);
|
|
212
|
+
const T = () => {
|
|
213
|
+
const { authentication: t } = _(), n = O(), e = typeof t < "u";
|
|
214
|
+
return {
|
|
215
|
+
isAuthEnabled: e,
|
|
216
|
+
...n,
|
|
217
|
+
login: async () => {
|
|
218
|
+
if (!e)
|
|
219
|
+
throw new Error("Authentication is not enabled.");
|
|
220
|
+
await t.signIn({
|
|
221
|
+
redirectTo: window.location.href
|
|
222
|
+
});
|
|
223
|
+
},
|
|
224
|
+
logout: async () => {
|
|
225
|
+
if (!e)
|
|
226
|
+
throw new Error("Authentication is not enabled.");
|
|
227
|
+
await t.signOut(), window.location.href = "/";
|
|
228
|
+
},
|
|
229
|
+
signup: async () => {
|
|
230
|
+
if (!e)
|
|
231
|
+
throw new Error("Authentication is not enabled.");
|
|
232
|
+
await t.signUp({
|
|
233
|
+
redirectTo: window.location.href
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
};
|
|
238
|
+
export {
|
|
239
|
+
T as a,
|
|
240
|
+
A as b,
|
|
241
|
+
D as c,
|
|
242
|
+
j as d,
|
|
243
|
+
L as e,
|
|
244
|
+
x as p,
|
|
245
|
+
O as u
|
|
246
|
+
};
|
|
247
|
+
//# sourceMappingURL=hook-DbUCLQNg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-DbUCLQNg.js","sources":["../../../node_modules/.pnpm/zustand@5.0.5_@types+react@19.1.8_react@19.1.0_use-sync-external-store@1.5.0_react@19.1.0_/node_modules/zustand/esm/vanilla.mjs","../../../node_modules/.pnpm/zustand@5.0.5_@types+react@19.1.8_react@19.1.0_use-sync-external-store@1.5.0_react@19.1.0_/node_modules/zustand/esm/react.mjs","../../../node_modules/.pnpm/zustand@5.0.5_@types+react@19.1.8_react@19.1.0_use-sync-external-store@1.5.0_react@19.1.0_/node_modules/zustand/esm/middleware.mjs","../src/lib/authentication/state.ts","../src/lib/authentication/hook.ts"],"sourcesContent":["const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\n\nexport { createStore };\n","import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = React.useSyncExternalStore(\n api.subscribe,\n () => selector(api.getState()),\n () => selector(api.getInitialState())\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = createStore(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = (createState) => createState ? createImpl(createState) : createImpl;\n\nexport { create, useStore };\n","const reduxImpl = (reducer, initial) => (set, _get, api) => {\n api.dispatch = (action) => {\n set((state) => reducer(state, action), false, action);\n return action;\n };\n api.dispatchFromDevtools = true;\n return { dispatch: (...args) => api.dispatch(...args), ...initial };\n};\nconst redux = reduxImpl;\n\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api) return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst removeStoreFromTrackedConnections = (name, store) => {\n if (store === void 0) return;\n const connectionInfo = trackedConnections.get(name);\n if (!connectionInfo) return;\n delete connectionInfo.stores[store];\n if (Object.keys(connectionInfo.stores).length === 0) {\n trackedConnections.delete(name);\n }\n};\nconst findCallerName = (stack) => {\n var _a, _b;\n if (!stack) return void 0;\n const traceLines = stack.split(\"\\n\");\n const apiSetStateLineIndex = traceLines.findIndex(\n (traceLine) => traceLine.includes(\"api.setState\")\n );\n if (apiSetStateLineIndex < 0) return void 0;\n const callerLine = ((_a = traceLines[apiSetStateLineIndex + 1]) == null ? void 0 : _a.trim()) || \"\";\n return (_b = /.+ (.+) .+/.exec(callerLine)) == null ? void 0 : _b[1];\n};\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = (state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording) return r;\n const inferredActionType = findCallerName(new Error().stack);\n const action = nameOrAction === void 0 ? { type: anonymousActionType || inferredActionType || \"anonymous\" } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n };\n api.devtools = {\n cleanup: () => {\n if (connection && typeof connection.unsubscribe === \"function\") {\n connection.unsubscribe();\n }\n removeStoreFromTrackedConnections(options.name, store);\n }\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (api.dispatchFromDevtools && typeof api.dispatch === \"function\") {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...args) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && args[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...args);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format.\n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (!api.dispatchFromDevtools) return;\n if (typeof api.dispatch !== \"function\") return;\n api.dispatch(action);\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState) return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, fn) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0) fn(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n const origSubscribe = api.subscribe;\n api.subscribe = (selector, optListener, options) => {\n let listener = selector;\n if (optListener) {\n const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n let currentSlice = selector(api.getState());\n listener = (state) => {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n optListener(currentSlice = nextSlice, previousSlice);\n }\n };\n if (options == null ? void 0 : options.fireImmediately) {\n optListener(currentSlice, currentSlice);\n }\n }\n return origSubscribe(listener);\n };\n const initialState = fn(set, get, api);\n return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nfunction combine(initialState, create) {\n return (...args) => Object.assign({}, initialState, create(...args));\n}\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(name, JSON.stringify(newValue, options == null ? void 0 : options.replacer)),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst persistImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n void setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n void setItem();\n },\n get,\n api\n );\n api.getInitialState = () => configResult;\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage) return;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n const migration = options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n if (migration instanceof Promise) {\n return migration.then((result) => [true, result]);\n }\n return [true, migration];\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return [false, deserializedStorageValue.state];\n }\n }\n return [false, void 0];\n }).then((migrationResult) => {\n var _a2;\n const [migrated, migratedState] = migrationResult;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n if (migrated) {\n return setItem();\n }\n }).then(() => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persist = persistImpl;\n\nexport { combine, createJSONStorage, devtools, persist, redux, subscribeWithSelector };\n","import { create, type Mutate, type StoreApi } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\n\nexport interface AuthState<ProviderData = unknown> {\n isAuthenticated: boolean;\n isPending: boolean;\n profile: UserProfile | null;\n providerData: ProviderData | null;\n setAuthenticationPending: () => void;\n setLoggedOut: () => void;\n setLoggedIn: ({\n profile,\n providerData,\n }: {\n profile: UserProfile;\n providerData: unknown;\n }) => void;\n}\n\nexport type StoreWithPersist<T> = Mutate<\n StoreApi<T>,\n [[\"zustand/persist\", unknown]]\n>;\n\nconst withStorageDOMEvents = <T>(store: StoreWithPersist<T>) => {\n const storageEventCallback = (e: StorageEvent) => {\n if (e.key === store.persist.getOptions().name && e.newValue) {\n void store.persist.rehydrate();\n }\n };\n\n window.addEventListener(\"storage\", storageEventCallback);\n\n return () => {\n window.removeEventListener(\"storage\", storageEventCallback);\n };\n};\n\nexport const useAuthState = create<AuthState>()(\n persist(\n (set) => ({\n isAuthenticated: false,\n isPending: true,\n profile: null,\n providerData: null,\n setAuthenticationPending: () =>\n set(() => ({\n isAuthenticated: false,\n isPending: false,\n profile: null,\n providerData: null,\n })),\n setLoggedOut: () =>\n set(() => ({\n isAuthenticated: false,\n isPending: false,\n profile: null,\n providerData: null,\n })),\n setLoggedIn: ({\n profile,\n providerData,\n }: {\n profile: UserProfile;\n providerData: unknown;\n }) =>\n set(() => ({\n isAuthenticated: true,\n isPending: false,\n profile,\n providerData,\n })),\n }),\n {\n merge: (persistedState, currentState) => {\n return {\n ...currentState,\n isPending: false,\n ...(typeof persistedState === \"object\" ? persistedState : {}),\n };\n },\n name: \"auth-state\",\n storage: createJSONStorage(() => localStorage),\n },\n ),\n);\n\nif (typeof window !== \"undefined\") {\n withStorageDOMEvents(useAuthState);\n}\n\nexport interface UserProfile {\n sub: string;\n email: string | undefined;\n emailVerified: boolean;\n name: string | undefined;\n pictureUrl: string | undefined;\n [key: string]: string | boolean | undefined;\n}\n","import { useZudoku } from \"../components/context/ZudokuContext.js\";\nimport { useAuthState } from \"./state.js\";\n\nexport type UseAuthReturn = ReturnType<typeof useAuth>;\n\nexport const useAuth = () => {\n const { authentication } = useZudoku();\n const authState = useAuthState();\n const isAuthEnabled = typeof authentication !== \"undefined\";\n\n return {\n isAuthEnabled,\n ...authState,\n\n login: async () => {\n if (!isAuthEnabled) {\n throw new Error(\"Authentication is not enabled.\");\n }\n // TODO: Should handle errors/state\n await authentication.signIn({\n redirectTo: window.location.href,\n });\n },\n\n logout: async () => {\n if (!isAuthEnabled) {\n throw new Error(\"Authentication is not enabled.\");\n }\n // TODO: Should handle errors/state\n await authentication.signOut();\n\n // Redirect to home\n window.location.href = \"/\";\n },\n\n signup: async () => {\n if (!isAuthEnabled) {\n throw new Error(\"Authentication is not enabled.\");\n }\n await authentication.signUp({\n redirectTo: window.location.href,\n });\n },\n };\n};\n"],"names":["createStoreImpl","createState","state","listeners","setState","partial","replace","nextState","previousState","listener","getState","api","initialState","createStore","identity","arg","useStore","selector","slice","React","createImpl","useBoundStore","create","createJSONStorage","getStorage","options","storage","name","_a","parse","str2","str","newValue","toThenable","fn","input","result","onFulfilled","_onRejected","_onFulfilled","onRejected","persistImpl","config","baseOptions","set","get","persistedState","currentState","hasHydrated","hydrationListeners","finishHydrationListeners","args","setItem","savedSetState","configResult","stateFromStorage","hydrate","_b","cb","_a2","postRehydrationCallback","deserializedStorageValue","migration","migrationResult","migrated","migratedState","e","newOptions","persist","withStorageDOMEvents","store","storageEventCallback","useAuthState","profile","providerData","useAuth","authentication","useZudoku","authState","isAuthEnabled"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|