zudoku 0.46.2 → 0.47.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.
Files changed (123) hide show
  1. package/dist/config/config.d.ts +11 -0
  2. package/dist/config/validators/InputSidebarSchema.d.ts +4 -1
  3. package/dist/config/validators/InputSidebarSchema.js +1 -0
  4. package/dist/config/validators/InputSidebarSchema.js.map +1 -1
  5. package/dist/config/validators/SidebarSchema.d.ts +1 -1
  6. package/dist/config/validators/validate.d.ts +47 -47
  7. package/dist/config/validators/validate.js +11 -1
  8. package/dist/config/validators/validate.js.map +1 -1
  9. package/dist/config/validators/validate.test.d.ts +1 -0
  10. package/dist/config/validators/validate.test.js +80 -0
  11. package/dist/config/validators/validate.test.js.map +1 -0
  12. package/dist/lib/auth/issuer.d.ts +2 -0
  13. package/dist/lib/auth/issuer.js +34 -0
  14. package/dist/lib/auth/issuer.js.map +1 -0
  15. package/dist/lib/auth/issuer.test.d.ts +1 -0
  16. package/dist/lib/auth/issuer.test.js +81 -0
  17. package/dist/lib/auth/issuer.test.js.map +1 -0
  18. package/dist/lib/authentication/hook.d.ts +6 -0
  19. package/dist/lib/authentication/providers/auth0.js +1 -1
  20. package/dist/lib/authentication/providers/auth0.js.map +1 -1
  21. package/dist/lib/authentication/providers/azureb2c.d.ts +28 -0
  22. package/dist/lib/authentication/providers/azureb2c.js +145 -0
  23. package/dist/lib/authentication/providers/azureb2c.js.map +1 -0
  24. package/dist/lib/authentication/providers/clerk.js +3 -12
  25. package/dist/lib/authentication/providers/clerk.js.map +1 -1
  26. package/dist/lib/authentication/providers/openid.d.ts +1 -0
  27. package/dist/lib/authentication/providers/openid.js +38 -0
  28. package/dist/lib/authentication/providers/openid.js.map +1 -1
  29. package/dist/lib/authentication/providers/supabase.js +2 -9
  30. package/dist/lib/authentication/providers/supabase.js.map +1 -1
  31. package/dist/lib/authentication/state.d.ts +6 -5
  32. package/dist/lib/authentication/state.js +19 -6
  33. package/dist/lib/authentication/state.js.map +1 -1
  34. package/dist/lib/components/context/ZudokuProvider.d.ts +1 -1
  35. package/dist/lib/components/index.d.ts +6 -0
  36. package/dist/lib/components/navigation/SidebarItem.js +2 -3
  37. package/dist/lib/components/navigation/SidebarItem.js.map +1 -1
  38. package/dist/lib/hooks/index.d.ts +6 -0
  39. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.d.ts +1 -1
  40. package/dist/lib/plugins/openapi/playground/Headers.d.ts +2 -2
  41. package/dist/lib/plugins/openapi/playground/fileUtils.js +1 -1
  42. package/dist/lib/plugins/openapi/playground/fileUtils.js.map +1 -1
  43. package/dist/lib/util/MdxComponents.js +1 -1
  44. package/dist/lib/util/MdxComponents.js.map +1 -1
  45. package/dist/vite/build.js +2 -32
  46. package/dist/vite/build.js.map +1 -1
  47. package/lib/{Markdown-Cm4kj26S.js → Markdown-BUE2ViaD.js} +340 -337
  48. package/lib/{Markdown-Cm4kj26S.js.map → Markdown-BUE2ViaD.js.map} +1 -1
  49. package/lib/{MdxPage-fDGQtB5w.js → MdxPage-By4UkRkI.js} +4 -4
  50. package/lib/{MdxPage-fDGQtB5w.js.map → MdxPage-By4UkRkI.js.map} +1 -1
  51. package/lib/{OasProvider-CFBvfR3r.js → OasProvider-C6_Kx5O7.js} +2 -2
  52. package/lib/{OasProvider-CFBvfR3r.js.map → OasProvider-C6_Kx5O7.js.map} +1 -1
  53. package/lib/{OperationList-Xs4KWmsh.js → OperationList-BISd29LY.js} +6 -6
  54. package/lib/OperationList-BISd29LY.js.map +1 -0
  55. package/lib/{RouteGuard-CZ_uLv3g.js → RouteGuard-CgmsSw7T.js} +2 -2
  56. package/lib/{RouteGuard-CZ_uLv3g.js.map → RouteGuard-CgmsSw7T.js.map} +1 -1
  57. package/lib/{SchemaList-BWaNlmUJ.js → SchemaList-BqnRo5ov.js} +6 -6
  58. package/lib/{SchemaList-BWaNlmUJ.js.map → SchemaList-BqnRo5ov.js.map} +1 -1
  59. package/lib/{SchemaView-DdKJt2ln.js → SchemaView-CtYJpxQI.js} +3 -3
  60. package/lib/{SchemaView-DdKJt2ln.js.map → SchemaView-CtYJpxQI.js.map} +1 -1
  61. package/lib/{SignUp-B-1Pvc-8.js → SignUp-CrjeBbqN.js} +2 -2
  62. package/lib/{SignUp-B-1Pvc-8.js.map → SignUp-CrjeBbqN.js.map} +1 -1
  63. package/lib/{Slot-B99cbD-q.js → Slot-DANV2b7_.js} +4 -4
  64. package/lib/{Slot-B99cbD-q.js.map → Slot-DANV2b7_.js.map} +1 -1
  65. package/lib/{SyntaxHighlight-Cz6Me7-F.js → SyntaxHighlight-DtvR7RLF.js} +1291 -1265
  66. package/lib/SyntaxHighlight-DtvR7RLF.js.map +1 -0
  67. package/lib/{Toc-Qe7A4uj_.js → Toc-ClJBmdtI.js} +2 -2
  68. package/lib/{Toc-Qe7A4uj_.js.map → Toc-ClJBmdtI.js.map} +1 -1
  69. package/lib/{circular-w5eL5J8a.js → circular-pOdgLzpG.js} +2 -2
  70. package/lib/{circular-w5eL5J8a.js.map → circular-pOdgLzpG.js.map} +1 -1
  71. package/lib/clerk-yAKDC3Qz.js +24812 -0
  72. package/lib/clerk-yAKDC3Qz.js.map +1 -0
  73. package/lib/{createServer-p3yUA8Bu.js → createServer-qAtUf99r.js} +2625 -2615
  74. package/lib/createServer-qAtUf99r.js.map +1 -0
  75. package/lib/errors-Bpodza84.js +78 -0
  76. package/lib/errors-Bpodza84.js.map +1 -0
  77. package/lib/{hook-k7PfUIsj.js → hook-wIlTGE-2.js} +52 -31
  78. package/lib/{hook-k7PfUIsj.js.map → hook-wIlTGE-2.js.map} +1 -1
  79. package/lib/{index-yqBxBqxF.js → index-RFzRn4fM.js} +10 -10
  80. package/lib/index-RFzRn4fM.js.map +1 -0
  81. package/lib/{mutation-BSeQ8pEK.js → mutation-C-kdA_1r.js} +2 -2
  82. package/lib/{mutation-BSeQ8pEK.js.map → mutation-C-kdA_1r.js.map} +1 -1
  83. package/lib/ui/SyntaxHighlight.js +2 -2
  84. package/lib/{useMutation-CZSmsIGW.js → useMutation-3Ph3x6En.js} +3 -3
  85. package/lib/{useMutation-CZSmsIGW.js.map → useMutation-3Ph3x6En.js.map} +1 -1
  86. package/lib/zudoku.auth-auth0.js +2 -2
  87. package/lib/zudoku.auth-auth0.js.map +1 -1
  88. package/lib/zudoku.auth-azureb2c.js +9974 -0
  89. package/lib/zudoku.auth-azureb2c.js.map +1 -0
  90. package/lib/zudoku.auth-clerk.js +39 -48
  91. package/lib/zudoku.auth-clerk.js.map +1 -1
  92. package/lib/zudoku.auth-openid.js +291 -316
  93. package/lib/zudoku.auth-openid.js.map +1 -1
  94. package/lib/zudoku.components.js +1222 -1594
  95. package/lib/zudoku.components.js.map +1 -1
  96. package/lib/zudoku.hooks.js +2 -2
  97. package/lib/zudoku.plugin-api-catalog.js +2 -2
  98. package/lib/zudoku.plugin-api-keys.js +3 -3
  99. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  100. package/lib/zudoku.plugin-custom-pages.js +1 -1
  101. package/lib/zudoku.plugin-markdown.js +1 -1
  102. package/lib/zudoku.plugin-openapi.js +2 -2
  103. package/lib/zudoku.plugin-search-pagefind.js +2 -2
  104. package/package.json +37 -19
  105. package/src/lib/auth/issuer.test.ts +104 -0
  106. package/src/lib/auth/issuer.ts +38 -0
  107. package/src/lib/authentication/providers/auth0.tsx +1 -1
  108. package/src/lib/authentication/providers/azureb2c.tsx +196 -0
  109. package/src/lib/authentication/providers/clerk.tsx +3 -12
  110. package/src/lib/authentication/providers/openid.tsx +53 -0
  111. package/src/lib/authentication/providers/supabase.tsx +2 -9
  112. package/src/lib/authentication/state.ts +37 -7
  113. package/src/lib/components/context/ZudokuProvider.tsx +1 -1
  114. package/src/lib/components/navigation/SidebarItem.tsx +2 -1
  115. package/src/lib/plugins/api-keys/SettingsApiKeys.tsx +1 -1
  116. package/src/lib/plugins/openapi/PlaygroundDialogWrapper.tsx +1 -1
  117. package/src/lib/plugins/openapi/playground/Headers.tsx +2 -2
  118. package/src/lib/plugins/openapi/playground/fileUtils.ts +1 -1
  119. package/src/lib/util/MdxComponents.tsx +1 -1
  120. package/lib/OperationList-Xs4KWmsh.js.map +0 -1
  121. package/lib/SyntaxHighlight-Cz6Me7-F.js.map +0 -1
  122. package/lib/createServer-p3yUA8Bu.js.map +0 -1
  123. package/lib/index-yqBxBqxF.js.map +0 -1
@@ -1,69 +1,67 @@
1
1
  import { j as l } from "./jsx-runtime-C5mzlN2N.js";
2
- import { LogOutIcon as f } from "lucide-react";
3
- import { S as g, a as p, b as w } from "./SignUp-B-1Pvc-8.js";
4
- import { u as r } from "./hook-k7PfUIsj.js";
2
+ import { LogOutIcon as g } from "lucide-react";
3
+ import { S as f, a as w, b as p } from "./SignUp-CrjeBbqN.js";
4
+ import { u as n } from "./hook-wIlTGE-2.js";
5
5
  const y = ({
6
6
  clerkPubKey: d,
7
7
  redirectToAfterSignOut: c = "/",
8
8
  redirectToAfterSignUp: t,
9
- redirectToAfterSignIn: n
9
+ redirectToAfterSignIn: r
10
10
  }) => {
11
- let i;
11
+ let s;
12
12
  const a = (async () => {
13
13
  if (typeof window > "u") return;
14
- const { Clerk: e } = await import("@clerk/clerk-js");
15
- if (i = new e(d), await i.load(), i.user) {
16
- const s = i.user.emailAddresses.find(
14
+ const { Clerk: e } = await import("./clerk-yAKDC3Qz.js");
15
+ if (s = new e(d), await s.load(), s.user) {
16
+ const i = s.user.emailAddresses.find(
17
17
  (o) => o.verification.status === "verified"
18
18
  );
19
- r.setState({
20
- isAuthenticated: !0,
21
- isPending: !1,
19
+ n.getState().setLoggedIn({
22
20
  profile: {
23
- sub: i.user.id,
24
- name: i.user.fullName ?? void 0,
25
- email: s?.emailAddress ?? i.user.emailAddresses[0]?.emailAddress,
26
- emailVerified: s !== void 0,
27
- pictureUrl: i.user.imageUrl
21
+ sub: s.user.id,
22
+ name: s.user.fullName ?? void 0,
23
+ email: i?.emailAddress ?? s.user.emailAddresses[0]?.emailAddress,
24
+ emailVerified: i !== void 0,
25
+ pictureUrl: s.user.imageUrl
28
26
  },
29
27
  providerData: {
30
28
  user: {
31
- publicMetadata: i.user.publicMetadata,
32
- id: i.user.id,
33
- emailAddresses: i.user.emailAddresses,
34
- imageUrl: i.user.imageUrl,
35
- fullName: i.user.fullName
29
+ publicMetadata: s.user.publicMetadata,
30
+ id: s.user.id,
31
+ emailAddresses: s.user.emailAddresses,
32
+ imageUrl: s.user.imageUrl,
33
+ fullName: s.user.fullName
36
34
  }
37
35
  }
38
36
  });
39
37
  }
40
- return i;
38
+ return s;
41
39
  })();
42
40
  async function u() {
43
- if (await a, !i?.session)
41
+ if (await a, !s?.session)
44
42
  throw new Error("No session available");
45
- const e = await i.session.getToken();
43
+ const e = await s.session.getToken();
46
44
  if (!e)
47
45
  throw new Error("Could not get access token from Clerk");
48
46
  return e;
49
47
  }
50
48
  async function m(e) {
51
- const s = await u();
52
- return e.headers.set("Authorization", `Bearer ${s}`), e;
49
+ const i = await u();
50
+ return e.headers.set("Authorization", `Bearer ${i}`), e;
53
51
  }
54
52
  return {
55
53
  getRoutes: () => [
56
54
  {
57
55
  path: "/signout",
58
- element: /* @__PURE__ */ l.jsx(g, {})
56
+ element: /* @__PURE__ */ l.jsx(f, {})
59
57
  },
60
58
  {
61
59
  path: "/signin",
62
- element: /* @__PURE__ */ l.jsx(p, {})
60
+ element: /* @__PURE__ */ l.jsx(w, {})
63
61
  },
64
62
  {
65
63
  path: "/signup",
66
- element: /* @__PURE__ */ l.jsx(w, {})
64
+ element: /* @__PURE__ */ l.jsx(p, {})
67
65
  }
68
66
  ],
69
67
  getProfileMenuItems() {
@@ -72,7 +70,7 @@ const y = ({
72
70
  label: "Logout",
73
71
  path: "/signout",
74
72
  category: "bottom",
75
- icon: f
73
+ icon: g
76
74
  }
77
75
  ];
78
76
  },
@@ -80,17 +78,15 @@ const y = ({
80
78
  const e = await a;
81
79
  if (e)
82
80
  if (e.session) {
83
- const s = e.session.user.emailAddresses.find(
81
+ const i = e.session.user.emailAddresses.find(
84
82
  (o) => o.verification.status === "verified"
85
83
  );
86
- r.setState({
87
- isAuthenticated: !0,
88
- isPending: !1,
84
+ n.getState().setLoggedIn({
89
85
  profile: {
90
86
  sub: e.session.user.id,
91
87
  name: e.session.user.fullName ?? void 0,
92
- email: s?.emailAddress ?? e.session.user.emailAddresses[0]?.emailAddress,
93
- emailVerified: s !== void 0,
88
+ email: i?.emailAddress ?? e.session.user.emailAddresses[0]?.emailAddress,
89
+ emailVerified: i !== void 0,
94
90
  pictureUrl: e.session.user.imageUrl
95
91
  },
96
92
  providerData: {
@@ -98,7 +94,7 @@ const y = ({
98
94
  }
99
95
  });
100
96
  } else
101
- r.setState({
97
+ n.setState({
102
98
  isAuthenticated: !1,
103
99
  isPending: !1,
104
100
  profile: void 0
@@ -107,24 +103,19 @@ const y = ({
107
103
  getAccessToken: u,
108
104
  signRequest: m,
109
105
  signOut: async () => {
110
- await a, await i?.signOut({
106
+ await a, await s?.signOut({
111
107
  redirectUrl: window.location.origin + c
112
- }), r.setState({
113
- isAuthenticated: !1,
114
- isPending: !1,
115
- profile: null,
116
- providerData: null
117
- });
108
+ }), n.getState().setLoggedOut();
118
109
  },
119
110
  signIn: async ({ redirectTo: e } = {}) => {
120
- await a, await i?.redirectToSignIn({
121
- signInForceRedirectUrl: n ? window.location.origin + n : e,
111
+ await a, await s?.redirectToSignIn({
112
+ signInForceRedirectUrl: r ? window.location.origin + r : e,
122
113
  signUpForceRedirectUrl: t ? window.location.origin + t : e
123
114
  });
124
115
  },
125
116
  signUp: async ({ redirectTo: e } = {}) => {
126
- await a, await i?.redirectToSignUp({
127
- signInForceRedirectUrl: n ? window.location.origin + n : e,
117
+ await a, await s?.redirectToSignUp({
118
+ signInForceRedirectUrl: r ? window.location.origin + r : e,
128
119
  signUpForceRedirectUrl: t ? window.location.origin + t : e
129
120
  });
130
121
  }
@@ -1 +1 @@
1
- {"version":3,"file":"zudoku.auth-clerk.js","sources":["../src/lib/authentication/providers/clerk.tsx"],"sourcesContent":["import type { Clerk } from \"@clerk/clerk-js\";\nimport { LogOutIcon } from \"lucide-react\";\nimport { type ZudokuPlugin } from \"zudoku/plugins\";\nimport { type ClerkAuthenticationConfig } from \"../../../config/config.js\";\nimport {\n type AuthenticationPlugin,\n type AuthenticationProviderInitializer,\n} from \"../authentication.js\";\nimport { SignIn } from \"../components/SignIn.js\";\nimport { SignOut } from \"../components/SignOut.js\";\nimport { SignUp } from \"../components/SignUp.js\";\nimport { useAuthState } from \"../state.js\";\n\nconst clerkAuth: AuthenticationProviderInitializer<\n ClerkAuthenticationConfig\n> = ({\n clerkPubKey,\n redirectToAfterSignOut = \"/\",\n redirectToAfterSignUp,\n redirectToAfterSignIn,\n}): AuthenticationPlugin & ZudokuPlugin => {\n let clerkApi: Clerk | undefined;\n const ensureLoaded = (async () => {\n if (typeof window === \"undefined\") return;\n const { Clerk } = await import(\"@clerk/clerk-js\");\n clerkApi = new Clerk(clerkPubKey);\n\n await clerkApi.load();\n\n if (clerkApi.user) {\n const verifiedEmail = clerkApi.user.emailAddresses.find(\n (email) => email.verification.status === \"verified\",\n );\n useAuthState.setState({\n isAuthenticated: true,\n isPending: false,\n profile: {\n sub: clerkApi.user.id,\n name: clerkApi.user.fullName ?? undefined,\n email:\n verifiedEmail?.emailAddress ??\n clerkApi.user.emailAddresses[0]?.emailAddress,\n emailVerified: verifiedEmail !== undefined,\n pictureUrl: clerkApi.user.imageUrl,\n },\n providerData: {\n user: {\n publicMetadata: clerkApi.user.publicMetadata,\n id: clerkApi.user.id,\n emailAddresses: clerkApi.user.emailAddresses,\n imageUrl: clerkApi.user.imageUrl,\n fullName: clerkApi.user.fullName,\n },\n },\n });\n }\n\n return clerkApi;\n })();\n\n async function getAccessToken() {\n await ensureLoaded;\n if (!clerkApi?.session) {\n throw new Error(\"No session available\");\n }\n const response = await clerkApi.session.getToken();\n if (!response) {\n throw new Error(\"Could not get access token from Clerk\");\n }\n return response;\n }\n\n async function signRequest(request: Request): Promise<Request> {\n const response = await getAccessToken();\n request.headers.set(\"Authorization\", `Bearer ${response}`);\n return request;\n }\n\n return {\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 initialize: async () => {\n const clerk = await ensureLoaded;\n\n if (!clerk) {\n return;\n }\n\n if (clerk.session) {\n const verifiedEmail = clerk.session.user.emailAddresses.find(\n (email) => email.verification.status === \"verified\",\n );\n useAuthState.setState({\n isAuthenticated: true,\n isPending: false,\n profile: {\n sub: clerk.session.user.id,\n name: clerk.session.user.fullName ?? undefined,\n email:\n verifiedEmail?.emailAddress ??\n clerk.session.user.emailAddresses[0]?.emailAddress,\n emailVerified: verifiedEmail !== undefined,\n pictureUrl: clerk.session.user.imageUrl,\n },\n providerData: {\n user: clerk.session.user,\n },\n });\n } else {\n useAuthState.setState({\n isAuthenticated: false,\n isPending: false,\n profile: undefined,\n });\n }\n },\n getAccessToken,\n signRequest,\n signOut: async () => {\n await ensureLoaded;\n await clerkApi?.signOut({\n redirectUrl: window.location.origin + redirectToAfterSignOut,\n });\n useAuthState.setState({\n isAuthenticated: false,\n isPending: false,\n profile: null,\n providerData: null,\n });\n },\n signIn: async ({ redirectTo }: { redirectTo?: string } = {}) => {\n await ensureLoaded;\n await clerkApi?.redirectToSignIn({\n signInForceRedirectUrl: redirectToAfterSignIn\n ? window.location.origin + redirectToAfterSignIn\n : redirectTo,\n signUpForceRedirectUrl: redirectToAfterSignUp\n ? window.location.origin + redirectToAfterSignUp\n : redirectTo,\n });\n },\n signUp: async ({ redirectTo }: { redirectTo?: string } = {}) => {\n await ensureLoaded;\n await clerkApi?.redirectToSignUp({\n signInForceRedirectUrl: redirectToAfterSignIn\n ? window.location.origin + redirectToAfterSignIn\n : redirectTo,\n signUpForceRedirectUrl: redirectToAfterSignUp\n ? window.location.origin + redirectToAfterSignUp\n : redirectTo,\n });\n },\n };\n};\n\nexport default clerkAuth;\n"],"names":["clerkAuth","clerkPubKey","redirectToAfterSignOut","redirectToAfterSignUp","redirectToAfterSignIn","clerkApi","ensureLoaded","Clerk","verifiedEmail","email","useAuthState","getAccessToken","response","signRequest","request","SignOut","SignIn","SignUp","LogOutIcon","clerk","redirectTo"],"mappings":"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"}
1
+ {"version":3,"file":"zudoku.auth-clerk.js","sources":["../src/lib/authentication/providers/clerk.tsx"],"sourcesContent":["import type { Clerk } from \"@clerk/clerk-js\";\nimport { LogOutIcon } from \"lucide-react\";\nimport { type ZudokuPlugin } from \"zudoku/plugins\";\nimport { type ClerkAuthenticationConfig } from \"../../../config/config.js\";\nimport {\n type AuthenticationPlugin,\n type AuthenticationProviderInitializer,\n} from \"../authentication.js\";\nimport { SignIn } from \"../components/SignIn.js\";\nimport { SignOut } from \"../components/SignOut.js\";\nimport { SignUp } from \"../components/SignUp.js\";\nimport { useAuthState } from \"../state.js\";\n\nconst clerkAuth: AuthenticationProviderInitializer<\n ClerkAuthenticationConfig\n> = ({\n clerkPubKey,\n redirectToAfterSignOut = \"/\",\n redirectToAfterSignUp,\n redirectToAfterSignIn,\n}): AuthenticationPlugin & ZudokuPlugin => {\n let clerkApi: Clerk | undefined;\n const ensureLoaded = (async () => {\n if (typeof window === \"undefined\") return;\n const { Clerk } = await import(\"@clerk/clerk-js\");\n clerkApi = new Clerk(clerkPubKey);\n\n await clerkApi.load();\n\n if (clerkApi.user) {\n const verifiedEmail = clerkApi.user.emailAddresses.find(\n (email) => email.verification.status === \"verified\",\n );\n useAuthState.getState().setLoggedIn({\n profile: {\n sub: clerkApi.user.id,\n name: clerkApi.user.fullName ?? undefined,\n email:\n verifiedEmail?.emailAddress ??\n clerkApi.user.emailAddresses[0]?.emailAddress,\n emailVerified: verifiedEmail !== undefined,\n pictureUrl: clerkApi.user.imageUrl,\n },\n providerData: {\n user: {\n publicMetadata: clerkApi.user.publicMetadata,\n id: clerkApi.user.id,\n emailAddresses: clerkApi.user.emailAddresses,\n imageUrl: clerkApi.user.imageUrl,\n fullName: clerkApi.user.fullName,\n },\n },\n });\n }\n\n return clerkApi;\n })();\n\n async function getAccessToken() {\n await ensureLoaded;\n if (!clerkApi?.session) {\n throw new Error(\"No session available\");\n }\n const response = await clerkApi.session.getToken();\n if (!response) {\n throw new Error(\"Could not get access token from Clerk\");\n }\n return response;\n }\n\n async function signRequest(request: Request): Promise<Request> {\n const response = await getAccessToken();\n request.headers.set(\"Authorization\", `Bearer ${response}`);\n return request;\n }\n\n return {\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 initialize: async () => {\n const clerk = await ensureLoaded;\n\n if (!clerk) {\n return;\n }\n\n if (clerk.session) {\n const verifiedEmail = clerk.session.user.emailAddresses.find(\n (email) => email.verification.status === \"verified\",\n );\n useAuthState.getState().setLoggedIn({\n profile: {\n sub: clerk.session.user.id,\n name: clerk.session.user.fullName ?? undefined,\n email:\n verifiedEmail?.emailAddress ??\n clerk.session.user.emailAddresses[0]?.emailAddress,\n emailVerified: verifiedEmail !== undefined,\n pictureUrl: clerk.session.user.imageUrl,\n },\n providerData: {\n user: clerk.session.user,\n },\n });\n } else {\n useAuthState.setState({\n isAuthenticated: false,\n isPending: false,\n profile: undefined,\n });\n }\n },\n getAccessToken,\n signRequest,\n signOut: async () => {\n await ensureLoaded;\n await clerkApi?.signOut({\n redirectUrl: window.location.origin + redirectToAfterSignOut,\n });\n useAuthState.getState().setLoggedOut();\n },\n signIn: async ({ redirectTo }: { redirectTo?: string } = {}) => {\n await ensureLoaded;\n await clerkApi?.redirectToSignIn({\n signInForceRedirectUrl: redirectToAfterSignIn\n ? window.location.origin + redirectToAfterSignIn\n : redirectTo,\n signUpForceRedirectUrl: redirectToAfterSignUp\n ? window.location.origin + redirectToAfterSignUp\n : redirectTo,\n });\n },\n signUp: async ({ redirectTo }: { redirectTo?: string } = {}) => {\n await ensureLoaded;\n await clerkApi?.redirectToSignUp({\n signInForceRedirectUrl: redirectToAfterSignIn\n ? window.location.origin + redirectToAfterSignIn\n : redirectTo,\n signUpForceRedirectUrl: redirectToAfterSignUp\n ? window.location.origin + redirectToAfterSignUp\n : redirectTo,\n });\n },\n };\n};\n\nexport default clerkAuth;\n"],"names":["clerkAuth","clerkPubKey","redirectToAfterSignOut","redirectToAfterSignUp","redirectToAfterSignIn","clerkApi","ensureLoaded","Clerk","verifiedEmail","email","useAuthState","getAccessToken","response","signRequest","request","SignOut","SignIn","SignUp","LogOutIcon","clerk","redirectTo"],"mappings":"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"}