zudoku 0.66.4 → 0.66.6

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 (216) hide show
  1. package/dist/app/main.d.ts +6 -6
  2. package/dist/config/validators/InputNavigationSchema.d.ts +2 -0
  3. package/dist/config/validators/InputNavigationSchema.js +1 -0
  4. package/dist/config/validators/InputNavigationSchema.js.map +1 -1
  5. package/dist/config/validators/NavigationSchema.js +6 -1
  6. package/dist/config/validators/NavigationSchema.js.map +1 -1
  7. package/dist/flat-config.d.ts +1 -0
  8. package/dist/lib/authentication/components/CallbackHandler.js +1 -1
  9. package/dist/lib/authentication/components/CallbackHandler.js.map +1 -1
  10. package/dist/lib/authentication/providers/auth0.js +11 -7
  11. package/dist/lib/authentication/providers/auth0.js.map +1 -1
  12. package/dist/lib/authentication/providers/clerk.js +0 -22
  13. package/dist/lib/authentication/providers/clerk.js.map +1 -1
  14. package/dist/lib/authentication/providers/supabase.js +6 -15
  15. package/dist/lib/authentication/providers/supabase.js.map +1 -1
  16. package/dist/lib/core/RouteGuard.js +12 -7
  17. package/dist/lib/core/RouteGuard.js.map +1 -1
  18. package/dist/lib/oas/graphql/circular.d.ts +1 -0
  19. package/dist/lib/oas/graphql/circular.js +20 -5
  20. package/dist/lib/oas/graphql/circular.js.map +1 -1
  21. package/dist/lib/plugins/api-keys/index.d.ts +9 -5
  22. package/dist/lib/plugins/api-keys/index.js +18 -8
  23. package/dist/lib/plugins/api-keys/index.js.map +1 -1
  24. package/dist/lib/plugins/api-keys/settings/ApiKeyList.js +3 -0
  25. package/dist/lib/plugins/api-keys/settings/ApiKeyList.js.map +1 -1
  26. package/dist/lib/plugins/openapi/OperationList.js +5 -1
  27. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  28. package/dist/lib/plugins/openapi/schema/utils.js +11 -3
  29. package/dist/lib/plugins/openapi/schema/utils.js.map +1 -1
  30. package/dist/lib/util/invariant.d.ts +1 -1
  31. package/dist/lib/util/invariant.js +2 -2
  32. package/dist/lib/util/invariant.js.map +1 -1
  33. package/dist/vite/api/SchemaManager.d.ts +1 -0
  34. package/dist/vite/api/SchemaManager.js +9 -3
  35. package/dist/vite/api/SchemaManager.js.map +1 -1
  36. package/dist/vite/mdx/remark-link-rewrite.js +1 -1
  37. package/dist/vite/plugin-api-keys.js +1 -0
  38. package/dist/vite/plugin-api-keys.js.map +1 -1
  39. package/dist/vite/prerender/utils.js +9 -3
  40. package/dist/vite/prerender/utils.js.map +1 -1
  41. package/lib/{ActionButton-BSM2oNHF.js → ActionButton-B0CXL1Lq.js} +3 -3
  42. package/lib/{ActionButton-BSM2oNHF.js.map → ActionButton-B0CXL1Lq.js.map} +1 -1
  43. package/lib/{Button-IOAeVaIH.js → Button-GUVe7pmt.js} +2 -2
  44. package/lib/{Button-IOAeVaIH.js.map → Button-GUVe7pmt.js.map} +1 -1
  45. package/lib/{Card-KFniaZn5.js → Card-DCdq37aA.js} +2 -2
  46. package/lib/{Card-KFniaZn5.js.map → Card-DCdq37aA.js.map} +1 -1
  47. package/lib/{ClaudeLogo-DgjivS8A.js → ClaudeLogo-BpqHBMS8.js} +4 -4
  48. package/lib/{ClaudeLogo-DgjivS8A.js.map → ClaudeLogo-BpqHBMS8.js.map} +1 -1
  49. package/lib/{Command-BpT1iBE6.js → Command-N6VujV30.js} +3 -3
  50. package/lib/{Command-BpT1iBE6.js.map → Command-N6VujV30.js.map} +1 -1
  51. package/lib/{Dialog-BQciPiHN.js → Dialog-hlvmmQ_c.js} +2 -2
  52. package/lib/{Dialog-BQciPiHN.js.map → Dialog-hlvmmQ_c.js.map} +1 -1
  53. package/lib/{Drawer-BRMcpfuF.js → Drawer-Ch7927PF.js} +2 -2
  54. package/lib/{Drawer-BRMcpfuF.js.map → Drawer-Ch7927PF.js.map} +1 -1
  55. package/lib/{DropdownMenu-C8SX_-S_.js → DropdownMenu-DN0jNrjj.js} +2 -2
  56. package/lib/{DropdownMenu-C8SX_-S_.js.map → DropdownMenu-DN0jNrjj.js.map} +1 -1
  57. package/lib/{Frame-DxlznfVd.js → Frame-DKlOmSkU.js} +2 -2
  58. package/lib/{Frame-DxlznfVd.js.map → Frame-DKlOmSkU.js.map} +1 -1
  59. package/lib/{IndexingDialog-DZWj_3cU.js → IndexingDialog-D0YdGfbn.js} +3 -3
  60. package/lib/{IndexingDialog-DZWj_3cU.js.map → IndexingDialog-D0YdGfbn.js.map} +1 -1
  61. package/lib/{Input-D-kqEQ5M.js → Input-B6YcAPv-.js} +39 -18
  62. package/lib/Input-B6YcAPv-.js.map +1 -0
  63. package/lib/{MdxPage-BL-HbZrv.js → MdxPage-CeFSxGb_.js} +11 -11
  64. package/lib/{MdxPage-BL-HbZrv.js.map → MdxPage-CeFSxGb_.js.map} +1 -1
  65. package/lib/{Mermaid-BjSczjLW.js → Mermaid-COVtAqcZ.js} +4 -4
  66. package/lib/{Mermaid-BjSczjLW.js.map → Mermaid-COVtAqcZ.js.map} +1 -1
  67. package/lib/{OAuthErrorPage-DQtg28Go.js → OAuthErrorPage-XTPBOMN8.js} +9 -9
  68. package/lib/OAuthErrorPage-XTPBOMN8.js.map +1 -0
  69. package/lib/{OasProvider--qcZwrKS.js → OasProvider-BS4rdzZC.js} +4 -4
  70. package/lib/{OasProvider--qcZwrKS.js.map → OasProvider-BS4rdzZC.js.map} +1 -1
  71. package/lib/{OperationList-CSJYzxQY.js → OperationList-Dg0Nm1tg.js} +136 -133
  72. package/lib/{OperationList-CSJYzxQY.js.map → OperationList-Dg0Nm1tg.js.map} +1 -1
  73. package/lib/RouteGuard-kCicqF3x.js +77 -0
  74. package/lib/RouteGuard-kCicqF3x.js.map +1 -0
  75. package/lib/{SchemaList-DtyuDrQA.js → SchemaList-DZKBH2WC.js} +9 -9
  76. package/lib/{SchemaList-DtyuDrQA.js.map → SchemaList-DZKBH2WC.js.map} +1 -1
  77. package/lib/{SchemaView-G-SVXxAG.js → SchemaView-DBaqV2yU.js} +95 -92
  78. package/lib/SchemaView-DBaqV2yU.js.map +1 -0
  79. package/lib/{Secret-BxGpIhDP.js → Secret-BDBqq4p3.js} +2 -2
  80. package/lib/{Secret-BxGpIhDP.js.map → Secret-BDBqq4p3.js.map} +1 -1
  81. package/lib/{Separator-CTPSeW1S.js → Separator-BXt1LYnm.js} +2 -2
  82. package/lib/{Separator-CTPSeW1S.js.map → Separator-BXt1LYnm.js.map} +1 -1
  83. package/lib/{SignUp-CDl7bQj3.js → SignUp-DNmOFbLD.js} +5 -5
  84. package/lib/{SignUp-CDl7bQj3.js.map → SignUp-DNmOFbLD.js.map} +1 -1
  85. package/lib/{SyntaxHighlight-Dgd0AaaX.js → SyntaxHighlight-C75W8uCn.js} +374 -365
  86. package/lib/SyntaxHighlight-C75W8uCn.js.map +1 -0
  87. package/lib/{Toc-D_Rj4jVx.js → Toc-ICilS65g.js} +3 -3
  88. package/lib/{Toc-D_Rj4jVx.js.map → Toc-ICilS65g.js.map} +1 -1
  89. package/lib/{ZudokuContext-DNHMZfcP.js → ZudokuContext-Ea7gxmGq.js} +542 -469
  90. package/lib/ZudokuContext-Ea7gxmGq.js.map +1 -0
  91. package/lib/{___vite-browser-external_commonjs-proxy-Cga3HsWk.js → ___vite-browser-external_commonjs-proxy-BttVsNON.js} +2 -2
  92. package/lib/___vite-browser-external_commonjs-proxy-BttVsNON.js.map +1 -0
  93. package/lib/chunk-EPOLDU6W-C6C8jAwd.js +8558 -0
  94. package/lib/chunk-EPOLDU6W-C6C8jAwd.js.map +1 -0
  95. package/lib/{circular-BxODTa7z.js → circular-DleWPaPP.js} +767 -747
  96. package/lib/{circular-BxODTa7z.js.map → circular-DleWPaPP.js.map} +1 -1
  97. package/lib/{cn-dYga0KKN.js → cn-5-Gd1Dss.js} +531 -498
  98. package/lib/cn-5-Gd1Dss.js.map +1 -0
  99. package/lib/{createServer-BpreIXp6.js → createServer-nqMW9kro.js} +6 -6
  100. package/lib/{createServer-BpreIXp6.js.map → createServer-nqMW9kro.js.map} +1 -1
  101. package/lib/{createVariantComponent-CQVt-H3r.js → createVariantComponent-Dc0vtOvr.js} +2 -2
  102. package/lib/{createVariantComponent-CQVt-H3r.js.map → createVariantComponent-Dc0vtOvr.js.map} +1 -1
  103. package/lib/{errors-DliW1dED.js → errors-D2FbERKl.js} +3 -3
  104. package/lib/{errors-DliW1dED.js.map → errors-D2FbERKl.js.map} +1 -1
  105. package/lib/{firebase-D4tbaCYB.js → firebase-Cn9CmB6h.js} +21 -21
  106. package/lib/{firebase-D4tbaCYB.js.map → firebase-Cn9CmB6h.js.map} +1 -1
  107. package/lib/{hook-CHw_R_xu.js → hook-B2nmfmYN.js} +3 -3
  108. package/lib/{hook-CHw_R_xu.js.map → hook-B2nmfmYN.js.map} +1 -1
  109. package/lib/{index-DXXZDuSJ.js → index-CC4L3gtM.js} +4 -4
  110. package/lib/{index-DXXZDuSJ.js.map → index-CC4L3gtM.js.map} +1 -1
  111. package/lib/{index-9MxNUgg4.js → index-CSDW7CHl.js} +21 -21
  112. package/lib/{index-9MxNUgg4.js.map → index-CSDW7CHl.js.map} +1 -1
  113. package/lib/{index-CboxZOVW.js → index-D5NeW2z6.js} +12 -12
  114. package/lib/{index-CboxZOVW.js.map → index-D5NeW2z6.js.map} +1 -1
  115. package/lib/{index-1TbL0HXQ.js → index-DSKBOdpT.js} +2 -2
  116. package/lib/{index-1TbL0HXQ.js.map → index-DSKBOdpT.js.map} +1 -1
  117. package/lib/{index.esm-ti5zvZS_.js → index.esm-B35e7P83.js} +2 -2
  118. package/lib/index.esm-B35e7P83.js.map +1 -0
  119. package/lib/{index.esm-DtzT_KoE.js → index.esm-B_0dvNjB.js} +2 -2
  120. package/lib/{index.esm-DtzT_KoE.js.map → index.esm-B_0dvNjB.js.map} +1 -1
  121. package/lib/{invariant-CGOLuIIz.js → invariant-BJAl77rw.js} +4 -4
  122. package/lib/invariant-BJAl77rw.js.map +1 -0
  123. package/lib/{mutation-DMHWqmFp.js → mutation-BOYnEDf6.js} +70 -44
  124. package/lib/mutation-BOYnEDf6.js.map +1 -0
  125. package/lib/ui/Accordion.js +1 -1
  126. package/lib/ui/ActionButton.js +2 -2
  127. package/lib/ui/Alert.js +1 -1
  128. package/lib/ui/AlertDialog.js +1 -1
  129. package/lib/ui/Badge.js +1 -1
  130. package/lib/ui/Breadcrumb.js +1 -1
  131. package/lib/ui/Button.js +1 -1
  132. package/lib/ui/ButtonGroup.js +1 -1
  133. package/lib/ui/Callout.js +1 -1
  134. package/lib/ui/Card.js +1 -1
  135. package/lib/ui/Carousel.js +1 -1
  136. package/lib/ui/Checkbox.js +1 -1
  137. package/lib/ui/CodeBlock.js +1 -1
  138. package/lib/ui/Command.js +2 -2
  139. package/lib/ui/Dialog.js +1 -1
  140. package/lib/ui/Drawer.js +2 -2
  141. package/lib/ui/DropdownMenu.js +1 -1
  142. package/lib/ui/EmbeddedCodeBlock.js +1 -1
  143. package/lib/ui/Form.js +1 -1
  144. package/lib/ui/Frame.js +1 -1
  145. package/lib/ui/HoverCard.js +1 -1
  146. package/lib/ui/Input.js +1 -1
  147. package/lib/ui/Item.js +1 -1
  148. package/lib/ui/Label.js +1 -1
  149. package/lib/ui/NativeSelect.js +1 -1
  150. package/lib/ui/Pagination.js +1 -1
  151. package/lib/ui/Popover.js +1 -1
  152. package/lib/ui/Progress.js +1 -1
  153. package/lib/ui/RadioGroup.js +1 -1
  154. package/lib/ui/ScrollArea.js +1 -1
  155. package/lib/ui/Secret.js +1 -1
  156. package/lib/ui/Separator.js +1 -1
  157. package/lib/ui/Skeleton.js +1 -1
  158. package/lib/ui/Slider.js +1 -1
  159. package/lib/ui/Switch.js +1 -1
  160. package/lib/ui/SyntaxHighlight.js +3 -3
  161. package/lib/ui/Tabs.js +1 -1
  162. package/lib/ui/Textarea.js +1 -1
  163. package/lib/ui/Toggle.js +1 -1
  164. package/lib/ui/ToggleGroup.js +1 -1
  165. package/lib/ui/Value.js +1 -1
  166. package/lib/ui/util.js +1 -1
  167. package/lib/zudoku.__internal.js +604 -602
  168. package/lib/zudoku.__internal.js.map +1 -1
  169. package/lib/zudoku.auth-auth0.js +16 -16
  170. package/lib/zudoku.auth-auth0.js.map +1 -1
  171. package/lib/zudoku.auth-azureb2c.js +4 -4
  172. package/lib/zudoku.auth-clerk.js +52 -75
  173. package/lib/zudoku.auth-clerk.js.map +1 -1
  174. package/lib/zudoku.auth-firebase.js +5 -5
  175. package/lib/zudoku.auth-openid.js +5 -5
  176. package/lib/zudoku.auth-supabase.js +31 -40
  177. package/lib/zudoku.auth-supabase.js.map +1 -1
  178. package/lib/zudoku.components.js +6 -6
  179. package/lib/zudoku.hooks.js +3 -3
  180. package/lib/zudoku.mermaid.js +3 -3
  181. package/lib/zudoku.plugin-api-catalog.js +5 -5
  182. package/lib/zudoku.plugin-api-keys.js +258 -240
  183. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  184. package/lib/zudoku.plugin-custom-pages.js +1 -1
  185. package/lib/zudoku.plugin-markdown.js +1 -1
  186. package/lib/zudoku.plugin-openapi.js +3 -3
  187. package/lib/zudoku.plugin-redirect.js +1 -1
  188. package/lib/zudoku.plugin-search-pagefind.js +7 -7
  189. package/lib/zudoku.router.js +1130 -1404
  190. package/lib/zudoku.router.js.map +1 -1
  191. package/package.json +12 -12
  192. package/src/lib/authentication/components/CallbackHandler.tsx +1 -1
  193. package/src/lib/authentication/providers/auth0.tsx +15 -9
  194. package/src/lib/authentication/providers/clerk.tsx +0 -26
  195. package/src/lib/authentication/providers/supabase.tsx +6 -15
  196. package/src/lib/core/RouteGuard.tsx +30 -24
  197. package/src/lib/oas/graphql/circular.ts +36 -3
  198. package/src/lib/plugins/api-keys/index.tsx +46 -16
  199. package/src/lib/plugins/api-keys/settings/ApiKeyList.tsx +3 -0
  200. package/src/lib/plugins/openapi/OperationList.tsx +6 -1
  201. package/src/lib/plugins/openapi/schema/utils.ts +15 -4
  202. package/src/lib/util/invariant.ts +2 -1
  203. package/lib/Input-D-kqEQ5M.js.map +0 -1
  204. package/lib/OAuthErrorPage-DQtg28Go.js.map +0 -1
  205. package/lib/RouteGuard-D0f743SM.js +0 -77
  206. package/lib/RouteGuard-D0f743SM.js.map +0 -1
  207. package/lib/SchemaView-G-SVXxAG.js.map +0 -1
  208. package/lib/SyntaxHighlight-Dgd0AaaX.js.map +0 -1
  209. package/lib/ZudokuContext-DNHMZfcP.js.map +0 -1
  210. package/lib/___vite-browser-external_commonjs-proxy-Cga3HsWk.js.map +0 -1
  211. package/lib/chunk-PVWAREVJ-ClM0m2aJ.js +0 -7965
  212. package/lib/chunk-PVWAREVJ-ClM0m2aJ.js.map +0 -1
  213. package/lib/cn-dYga0KKN.js.map +0 -1
  214. package/lib/index.esm-ti5zvZS_.js.map +0 -1
  215. package/lib/invariant-CGOLuIIz.js.map +0 -1
  216. package/lib/mutation-DMHWqmFp.js.map +0 -1
@@ -1,6 +1,6 @@
1
- import { u as r } from "./ZudokuContext-DNHMZfcP.js";
2
- import { OpenIDAuthenticationProvider as a } from "./zudoku.auth-openid.js";
3
- class p extends a {
1
+ import { u as r, j as a } from "./ZudokuContext-Ea7gxmGq.js";
2
+ import { OpenIDAuthenticationProvider as p } from "./zudoku.auth-openid.js";
3
+ class d extends p {
4
4
  options;
5
5
  constructor(t) {
6
6
  super({
@@ -16,28 +16,28 @@ class p extends a {
16
16
  this.options?.prompt !== void 0 ? this.options.prompt !== "" && t.searchParams.set("prompt", this.options.prompt) : this.options?.alwaysPromptLogin !== !1 && t.searchParams.set("prompt", "login"), e && t.searchParams.set("screen_hint", "signup");
17
17
  };
18
18
  signOut = async (t) => {
19
- const e = await this.getAuthServer(), i = await this.getAccessToken();
19
+ const e = await this.getAuthServer(), s = r.getState().providerData?.idToken;
20
20
  r.setState({
21
21
  isAuthenticated: !1,
22
22
  isPending: !1,
23
23
  profile: void 0,
24
24
  providerData: void 0
25
25
  });
26
- const o = new URL(window.location.origin);
27
- if (o.pathname = this.redirectToAfterSignOut, e.end_session_endpoint) {
28
- const n = new URL(e.end_session_endpoint);
29
- i && n.searchParams.set("id_token_hint", i), n.searchParams.set(
26
+ const n = new URL(window.location.origin);
27
+ if (n.pathname = a(
28
+ "/",
29
+ this.redirectToAfterSignOut
30
+ ), e.end_session_endpoint) {
31
+ const i = new URL(e.end_session_endpoint);
32
+ s && i.searchParams.set("id_token_hint", s), i.searchParams.set(
30
33
  "post_logout_redirect_uri",
31
- o.toString()
32
- );
33
- } else
34
- new URL(
35
- `${this.issuer.replace(/\/$/, "")}/oidc/logout`
36
- );
34
+ n.toString()
35
+ ), window.location.href = i.toString();
36
+ }
37
37
  };
38
38
  }
39
- const h = (s) => new p(s);
39
+ const l = (o) => new d(o);
40
40
  export {
41
- h as default
41
+ l as default
42
42
  };
43
43
  //# sourceMappingURL=zudoku.auth-auth0.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zudoku.auth-auth0.js","sources":["../src/lib/authentication/providers/auth0.tsx"],"sourcesContent":["import type { Auth0AuthenticationConfig } from \"../../../config/config.js\";\nimport type {\n AuthActionContext,\n AuthenticationPlugin,\n AuthenticationProviderInitializer,\n} from \"../authentication.js\";\nimport { useAuthState } from \"../state.js\";\nimport { OpenIDAuthenticationProvider } from \"./openid.js\";\n\nclass Auth0AuthenticationProvider\n extends OpenIDAuthenticationProvider\n implements AuthenticationPlugin\n{\n private readonly options: Auth0AuthenticationConfig[\"options\"];\n constructor(config: Auth0AuthenticationConfig) {\n super({\n ...config,\n type: \"openid\",\n issuer: `https://${config.domain}/`,\n clientId: config.clientId,\n audience: config.audience,\n scopes: config.scopes,\n });\n this.options = config.options;\n }\n\n onAuthorizationUrl = async (\n url: URL,\n { isSignUp }: { isSignUp: boolean },\n ) => {\n if (this.options?.prompt !== undefined) {\n if (this.options.prompt !== \"\") {\n url.searchParams.set(\"prompt\", this.options.prompt);\n }\n } else if (this.options?.alwaysPromptLogin !== false) {\n url.searchParams.set(\"prompt\", \"login\");\n }\n\n if (isSignUp) {\n url.searchParams.set(\"screen_hint\", \"signup\");\n }\n };\n\n signOut = async (_: AuthActionContext): Promise<void> => {\n const as = await this.getAuthServer();\n const idToken = await this.getAccessToken();\n\n useAuthState.setState({\n isAuthenticated: false,\n isPending: false,\n profile: undefined,\n providerData: undefined,\n });\n\n const redirectUrl = new URL(window.location.origin);\n redirectUrl.pathname = this.redirectToAfterSignOut;\n\n // SEE: https://auth0.com/docs/authenticate/login/logout/log-users-out-of-auth0\n // For Auth0 tenants created on or after 14 November 2023, RP-Initiated\n // Logout End Session Endpoint Discovery is enabled by default.\n // Otherwise we fallback to the old non-compliant logout\n\n // The endSessionEndpoint is set, the IdP supports some form of logout,\n // so we use the IdP logout. Otherwise, just redirect the user to home\n if (as.end_session_endpoint) {\n const logoutUrl = new URL(as.end_session_endpoint);\n if (idToken) {\n logoutUrl.searchParams.set(\"id_token_hint\", idToken);\n }\n logoutUrl.searchParams.set(\n \"post_logout_redirect_uri\",\n redirectUrl.toString(),\n );\n\n // window.location.href = logoutUrl.toString();\n } else {\n const _logoutUrl = new URL(\n `${this.issuer.replace(/\\/$/, \"\")}/oidc/logout`,\n );\n // window.location.href = logoutUrl.toString();\n }\n };\n}\n\nconst auth0Auth: AuthenticationProviderInitializer<\n Auth0AuthenticationConfig\n> = (options) => new Auth0AuthenticationProvider(options);\n\nexport default auth0Auth;\n"],"names":["Auth0AuthenticationProvider","OpenIDAuthenticationProvider","config","url","isSignUp","_","as","idToken","useAuthState","redirectUrl","logoutUrl","auth0Auth","options"],"mappings":";;AASA,MAAMA,UACIC,EAEV;AAAA,EACmB;AAAA,EACjB,YAAYC,GAAmC;AAC7C,UAAM;AAAA,MACJ,GAAGA;AAAA,MACH,MAAM;AAAA,MACN,QAAQ,WAAWA,EAAO,MAAM;AAAA,MAChC,UAAUA,EAAO;AAAA,MACjB,UAAUA,EAAO;AAAA,MACjB,QAAQA,EAAO;AAAA,IAAA,CAChB,GACD,KAAK,UAAUA,EAAO;AAAA,EACxB;AAAA,EAEA,qBAAqB,OACnBC,GACA,EAAE,UAAAC,QACC;AACH,IAAI,KAAK,SAAS,WAAW,SACvB,KAAK,QAAQ,WAAW,MAC1BD,EAAI,aAAa,IAAI,UAAU,KAAK,QAAQ,MAAM,IAE3C,KAAK,SAAS,sBAAsB,MAC7CA,EAAI,aAAa,IAAI,UAAU,OAAO,GAGpCC,KACFD,EAAI,aAAa,IAAI,eAAe,QAAQ;AAAA,EAEhD;AAAA,EAEA,UAAU,OAAOE,MAAwC;AACvD,UAAMC,IAAK,MAAM,KAAK,cAAA,GAChBC,IAAU,MAAM,KAAK,eAAA;AAE3B,IAAAC,EAAa,SAAS;AAAA,MACpB,iBAAiB;AAAA,MACjB,WAAW;AAAA,MACX,SAAS;AAAA,MACT,cAAc;AAAA,IAAA,CACf;AAED,UAAMC,IAAc,IAAI,IAAI,OAAO,SAAS,MAAM;AAUlD,QATAA,EAAY,WAAW,KAAK,wBASxBH,EAAG,sBAAsB;AAC3B,YAAMI,IAAY,IAAI,IAAIJ,EAAG,oBAAoB;AACjD,MAAIC,KACFG,EAAU,aAAa,IAAI,iBAAiBH,CAAO,GAErDG,EAAU,aAAa;AAAA,QACrB;AAAA,QACAD,EAAY,SAAA;AAAA,MAAS;AAAA,IAIzB;AACqB,UAAI;AAAA,QACrB,GAAG,KAAK,OAAO,QAAQ,OAAO,EAAE,CAAC;AAAA,MAAA;AAAA,EAIvC;AACF;AAEA,MAAME,IAEF,CAACC,MAAY,IAAIZ,EAA4BY,CAAO;"}
1
+ {"version":3,"file":"zudoku.auth-auth0.js","sources":["../src/lib/authentication/providers/auth0.tsx"],"sourcesContent":["import type { Auth0AuthenticationConfig } from \"../../../config/config.js\";\nimport { joinUrl } from \"../../util/joinUrl.js\";\nimport type {\n AuthActionContext,\n AuthenticationPlugin,\n AuthenticationProviderInitializer,\n} from \"../authentication.js\";\nimport { useAuthState } from \"../state.js\";\nimport { OpenIDAuthenticationProvider } from \"./openid.js\";\n\nclass Auth0AuthenticationProvider\n extends OpenIDAuthenticationProvider\n implements AuthenticationPlugin\n{\n private readonly options: Auth0AuthenticationConfig[\"options\"];\n constructor(config: Auth0AuthenticationConfig) {\n super({\n ...config,\n type: \"openid\",\n issuer: `https://${config.domain}/`,\n clientId: config.clientId,\n audience: config.audience,\n scopes: config.scopes,\n });\n this.options = config.options;\n }\n\n onAuthorizationUrl = async (\n url: URL,\n { isSignUp }: { isSignUp: boolean },\n ) => {\n if (this.options?.prompt !== undefined) {\n if (this.options.prompt !== \"\") {\n url.searchParams.set(\"prompt\", this.options.prompt);\n }\n } else if (this.options?.alwaysPromptLogin !== false) {\n url.searchParams.set(\"prompt\", \"login\");\n }\n\n if (isSignUp) {\n url.searchParams.set(\"screen_hint\", \"signup\");\n }\n };\n\n signOut = async (_: AuthActionContext): Promise<void> => {\n const as = await this.getAuthServer();\n\n // biome-ignore lint/suspicious/noExplicitAny: We don't have a good way for typing provider-data yet.\n const providerData = useAuthState.getState().providerData as any;\n const idToken = providerData?.idToken;\n\n useAuthState.setState({\n isAuthenticated: false,\n isPending: false,\n profile: undefined,\n providerData: undefined,\n });\n\n const redirectUrl = new URL(window.location.origin);\n redirectUrl.pathname = joinUrl(\n import.meta.env.BASE_URL,\n this.redirectToAfterSignOut,\n );\n\n // SEE: https://auth0.com/docs/authenticate/login/logout/log-users-out-of-auth0\n // For Auth0 tenants created on or after 14 November 2023, RP-Initiated\n // Logout End Session Endpoint Discovery is enabled by default.\n // Otherwise we fallback to the old non-compliant logout\n\n // The end_session_endpoint is set, the IdP supports some form of logout,\n // so we use auth0 logout. Otherwise, just redirect the user to home\n if (as.end_session_endpoint) {\n const logoutUrl = new URL(as.end_session_endpoint);\n if (idToken) {\n logoutUrl.searchParams.set(\"id_token_hint\", idToken);\n }\n logoutUrl.searchParams.set(\n \"post_logout_redirect_uri\",\n redirectUrl.toString(),\n );\n\n window.location.href = logoutUrl.toString();\n } else {\n // const logoutUrl = new URL(`${this.issuer.replace(/\\/$/, \"\")}/v2/logout`);\n // logoutUrl.searchParams.set(\"returnTo\", redirectUrl.toString());\n // don't support the deprecated logout today\n }\n };\n}\n\nconst auth0Auth: AuthenticationProviderInitializer<\n Auth0AuthenticationConfig\n> = (options) => new Auth0AuthenticationProvider(options);\n\nexport default auth0Auth;\n"],"names":["Auth0AuthenticationProvider","OpenIDAuthenticationProvider","config","url","isSignUp","_","as","idToken","useAuthState","redirectUrl","joinUrl","logoutUrl","auth0Auth","options"],"mappings":";;AAUA,MAAMA,UACIC,EAEV;AAAA,EACmB;AAAA,EACjB,YAAYC,GAAmC;AAC7C,UAAM;AAAA,MACJ,GAAGA;AAAA,MACH,MAAM;AAAA,MACN,QAAQ,WAAWA,EAAO,MAAM;AAAA,MAChC,UAAUA,EAAO;AAAA,MACjB,UAAUA,EAAO;AAAA,MACjB,QAAQA,EAAO;AAAA,IAAA,CAChB,GACD,KAAK,UAAUA,EAAO;AAAA,EACxB;AAAA,EAEA,qBAAqB,OACnBC,GACA,EAAE,UAAAC,QACC;AACH,IAAI,KAAK,SAAS,WAAW,SACvB,KAAK,QAAQ,WAAW,MAC1BD,EAAI,aAAa,IAAI,UAAU,KAAK,QAAQ,MAAM,IAE3C,KAAK,SAAS,sBAAsB,MAC7CA,EAAI,aAAa,IAAI,UAAU,OAAO,GAGpCC,KACFD,EAAI,aAAa,IAAI,eAAe,QAAQ;AAAA,EAEhD;AAAA,EAEA,UAAU,OAAOE,MAAwC;AACvD,UAAMC,IAAK,MAAM,KAAK,cAAA,GAIhBC,IADeC,EAAa,SAAA,EAAW,cACf;AAE9B,IAAAA,EAAa,SAAS;AAAA,MACpB,iBAAiB;AAAA,MACjB,WAAW;AAAA,MACX,SAAS;AAAA,MACT,cAAc;AAAA,IAAA,CACf;AAED,UAAMC,IAAc,IAAI,IAAI,OAAO,SAAS,MAAM;AAalD,QAZAA,EAAY,WAAWC;AAAA,MACrB;AAAA,MACA,KAAK;AAAA,IAAA,GAUHJ,EAAG,sBAAsB;AAC3B,YAAMK,IAAY,IAAI,IAAIL,EAAG,oBAAoB;AACjD,MAAIC,KACFI,EAAU,aAAa,IAAI,iBAAiBJ,CAAO,GAErDI,EAAU,aAAa;AAAA,QACrB;AAAA,QACAF,EAAY,SAAA;AAAA,MAAS,GAGvB,OAAO,SAAS,OAAOE,EAAU,SAAA;AAAA,IACnC;AAAA,EAKF;AACF;AAEA,MAAMC,IAEF,CAACC,MAAY,IAAIb,EAA4Ba,CAAO;"}
@@ -1,10 +1,10 @@
1
1
  import { j as n } from "./jsx-runtime-BzflLqGi.js";
2
2
  import { PublicClientApplication as A, EventType as f } from "@azure/msal-browser";
3
- import { E as I } from "./index-CboxZOVW.js";
3
+ import { E as I } from "./index-D5NeW2z6.js";
4
4
  import { C as T } from "./ClientOnly-E7hGysn1.js";
5
- import { j as S, u as h } from "./ZudokuContext-DNHMZfcP.js";
6
- import { C, A as c } from "./errors-DliW1dED.js";
7
- import { C as k, O as w } from "./OAuthErrorPage-DQtg28Go.js";
5
+ import { j as S, u as h } from "./ZudokuContext-Ea7gxmGq.js";
6
+ import { C, A as c } from "./errors-D2FbERKl.js";
7
+ import { C as k, O as w } from "./OAuthErrorPage-XTPBOMN8.js";
8
8
  const u = "/oauth/callback";
9
9
  class y extends C {
10
10
  msalInstance;
@@ -1,70 +1,47 @@
1
- import { j as l } from "./jsx-runtime-BzflLqGi.js";
2
- import { LogOutIcon as f } from "lucide-react";
3
- import { S as w, a as p, b as v } from "./SignUp-CDl7bQj3.js";
4
- import { u as n } from "./ZudokuContext-DNHMZfcP.js";
5
- const b = ({
6
- clerkPubKey: d,
7
- jwtTemplateName: m,
8
- redirectToAfterSignOut: c = "/",
9
- redirectToAfterSignUp: a,
10
- redirectToAfterSignIn: r
1
+ import { j as a } from "./jsx-runtime-BzflLqGi.js";
2
+ import { LogOutIcon as m } from "lucide-react";
3
+ import { S as p, a as f, b as h } from "./SignUp-DNmOFbLD.js";
4
+ import { u as r } from "./ZudokuContext-Ea7gxmGq.js";
5
+ const R = ({
6
+ clerkPubKey: u,
7
+ jwtTemplateName: c,
8
+ redirectToAfterSignOut: d = "/",
9
+ redirectToAfterSignUp: n,
10
+ redirectToAfterSignIn: o
11
11
  }) => {
12
- let e;
12
+ let i;
13
13
  const t = (async () => {
14
14
  if (typeof window > "u") return;
15
- const { Clerk: s } = await import("@clerk/clerk-js");
16
- if (e = new s(d), await e.load(), e.user) {
17
- const i = e.user.emailAddresses.find(
18
- (o) => o.verification.status === "verified"
19
- );
20
- n.getState().setLoggedIn({
21
- profile: {
22
- sub: e.user.id,
23
- name: e.user.fullName ?? void 0,
24
- email: i?.emailAddress ?? e.user.emailAddresses[0]?.emailAddress,
25
- emailVerified: i !== void 0,
26
- pictureUrl: e.user.imageUrl
27
- },
28
- providerData: {
29
- user: {
30
- publicMetadata: e.user.publicMetadata,
31
- id: e.user.id,
32
- emailAddresses: e.user.emailAddresses,
33
- imageUrl: e.user.imageUrl,
34
- fullName: e.user.fullName
35
- }
36
- }
37
- });
38
- }
39
- return e;
15
+ const { Clerk: e } = await import("@clerk/clerk-js");
16
+ return i = new e(u), await i.load(), i;
40
17
  })();
41
- async function u() {
42
- if (await t, !e?.session)
18
+ async function l() {
19
+ if (await t, !i?.session)
43
20
  throw new Error("No session available");
44
- const s = await e.session.getToken({
45
- template: m
21
+ const e = await i.session.getToken({
22
+ template: c
46
23
  });
47
- if (!s)
24
+ if (!e)
48
25
  throw new Error("Could not get access token from Clerk");
49
- return s;
26
+ return e;
50
27
  }
51
- async function g(s) {
52
- const i = await u();
53
- return s.headers.set("Authorization", `Bearer ${i}`), s;
28
+ async function g(e) {
29
+ const s = await l();
30
+ return e.headers.set("Authorization", `Bearer ${s}`), e;
54
31
  }
55
32
  return {
56
33
  getRoutes: () => [
57
34
  {
58
35
  path: "/signout",
59
- element: /* @__PURE__ */ l.jsx(w, {})
36
+ element: /* @__PURE__ */ a.jsx(p, {})
60
37
  },
61
38
  {
62
39
  path: "/signin",
63
- element: /* @__PURE__ */ l.jsx(p, {})
40
+ element: /* @__PURE__ */ a.jsx(f, {})
64
41
  },
65
42
  {
66
43
  path: "/signup",
67
- element: /* @__PURE__ */ l.jsx(v, {})
44
+ element: /* @__PURE__ */ a.jsx(h, {})
68
45
  }
69
46
  ],
70
47
  getProfileMenuItems() {
@@ -73,58 +50,58 @@ const b = ({
73
50
  label: "Logout",
74
51
  path: "/signout",
75
52
  category: "bottom",
76
- icon: f
53
+ icon: m
77
54
  }
78
55
  ];
79
56
  },
80
57
  initialize: async () => {
81
- const s = await t;
82
- if (s)
83
- if (s.session) {
84
- const i = s.session.user.emailAddresses.find(
85
- (o) => o.verification.status === "verified"
58
+ const e = await t;
59
+ if (e)
60
+ if (e.session) {
61
+ const s = e.session.user.emailAddresses.find(
62
+ (w) => w.verification.status === "verified"
86
63
  );
87
- n.getState().setLoggedIn({
64
+ r.getState().setLoggedIn({
88
65
  profile: {
89
- sub: s.session.user.id,
90
- name: s.session.user.fullName ?? void 0,
91
- email: i?.emailAddress ?? s.session.user.emailAddresses[0]?.emailAddress,
92
- emailVerified: i !== void 0,
93
- pictureUrl: s.session.user.imageUrl
66
+ sub: e.session.user.id,
67
+ name: e.session.user.fullName ?? void 0,
68
+ email: s?.emailAddress ?? e.session.user.emailAddresses[0]?.emailAddress,
69
+ emailVerified: s !== void 0,
70
+ pictureUrl: e.session.user.imageUrl
94
71
  },
95
72
  providerData: {
96
- user: s.session.user
73
+ user: e.session.user
97
74
  }
98
75
  });
99
76
  } else
100
- n.setState({
77
+ r.setState({
101
78
  isAuthenticated: !1,
102
79
  isPending: !1,
103
80
  profile: void 0
104
81
  });
105
82
  },
106
- getAccessToken: u,
83
+ getAccessToken: l,
107
84
  signRequest: g,
108
85
  signOut: async () => {
109
- await t, await e?.signOut({
110
- redirectUrl: window.location.origin + c
111
- }), n.getState().setLoggedOut();
86
+ await t, await i?.signOut({
87
+ redirectUrl: window.location.origin + d
88
+ }), r.getState().setLoggedOut();
112
89
  },
113
- signIn: async (s, { redirectTo: i } = {}) => {
114
- await t, await e?.redirectToSignIn({
115
- signInForceRedirectUrl: r ? window.location.origin + r : i,
116
- signUpForceRedirectUrl: a ? window.location.origin + a : i
90
+ signIn: async (e, { redirectTo: s } = {}) => {
91
+ await t, await i?.redirectToSignIn({
92
+ signInForceRedirectUrl: o ? window.location.origin + o : s,
93
+ signUpForceRedirectUrl: n ? window.location.origin + n : s
117
94
  });
118
95
  },
119
- signUp: async (s, { redirectTo: i } = {}) => {
120
- await t, await e?.redirectToSignUp({
121
- signInForceRedirectUrl: r ? window.location.origin + r : i,
122
- signUpForceRedirectUrl: a ? window.location.origin + a : i
96
+ signUp: async (e, { redirectTo: s } = {}) => {
97
+ await t, await i?.redirectToSignUp({
98
+ signInForceRedirectUrl: o ? window.location.origin + o : s,
99
+ signUpForceRedirectUrl: n ? window.location.origin + n : s
123
100
  });
124
101
  }
125
102
  };
126
103
  };
127
104
  export {
128
- b as default
105
+ R as default
129
106
  };
130
107
  //# sourceMappingURL=zudoku.auth-clerk.js.map
@@ -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 type {\n AuthActionContext,\n AuthenticationPlugin,\n 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 jwtTemplateName,\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 template: jwtTemplateName,\n });\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 (\n _: AuthActionContext,\n { redirectTo }: { redirectTo?: string } = {},\n ) => {\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 (\n _: AuthActionContext,\n { redirectTo }: { redirectTo?: string } = {},\n ) => {\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","jwtTemplateName","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 type {\n AuthActionContext,\n AuthenticationPlugin,\n 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 jwtTemplateName,\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 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 template: jwtTemplateName,\n });\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 (\n _: AuthActionContext,\n { redirectTo }: { redirectTo?: string } = {},\n ) => {\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 (\n _: AuthActionContext,\n { redirectTo }: { redirectTo?: string } = {},\n ) => {\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","jwtTemplateName","redirectToAfterSignOut","redirectToAfterSignUp","redirectToAfterSignIn","clerkApi","ensureLoaded","Clerk","getAccessToken","response","signRequest","request","SignOut","SignIn","SignUp","LogOutIcon","clerk","verifiedEmail","email","useAuthState","_","redirectTo"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import "./jsx-runtime-BzflLqGi.js";
2
- import { y as e } from "./firebase-D4tbaCYB.js";
3
- import "./invariant-CGOLuIIz.js";
4
- import "./errors-DliW1dED.js";
5
- import "./SignUp-CDl7bQj3.js";
6
- import "./ZudokuContext-DNHMZfcP.js";
2
+ import { y as e } from "./firebase-Cn9CmB6h.js";
3
+ import "./invariant-BJAl77rw.js";
4
+ import "./errors-D2FbERKl.js";
5
+ import "./SignUp-DNmOFbLD.js";
6
+ import "./ZudokuContext-Ea7gxmGq.js";
7
7
  export {
8
8
  e as default
9
9
  };
@@ -1,10 +1,10 @@
1
1
  import { j as D } from "./jsx-runtime-BzflLqGi.js";
2
- import { a as Le } from "./invariant-CGOLuIIz.js";
3
- import { E as Ue } from "./index-CboxZOVW.js";
2
+ import { a as Le } from "./invariant-BJAl77rw.js";
3
+ import { E as Ue } from "./index-D5NeW2z6.js";
4
4
  import { C as xe } from "./ClientOnly-E7hGysn1.js";
5
- import { j as Ce, u as S } from "./ZudokuContext-DNHMZfcP.js";
6
- import { C as Ie, O as re, A as R } from "./errors-DliW1dED.js";
7
- import { C as je, O as Oe } from "./OAuthErrorPage-DQtg28Go.js";
5
+ import { j as Ce, u as S } from "./ZudokuContext-Ea7gxmGq.js";
6
+ import { C as Ie, O as re, A as R } from "./errors-D2FbERKl.js";
7
+ import { C as je, O as Oe } from "./OAuthErrorPage-XTPBOMN8.js";
8
8
  var J = { exports: {} }, De = J.exports, oe;
9
9
  function Je() {
10
10
  return oe || (oe = 1, (function(t) {
@@ -1,28 +1,28 @@
1
- import { j as i } from "./jsx-runtime-BzflLqGi.js";
2
- import { createClient as h } from "@supabase/supabase-js";
3
- import { C as m, A as g } from "./errors-DliW1dED.js";
4
- import { S as f } from "./SignUp-CDl7bQj3.js";
5
- import { u } from "./ZudokuContext-DNHMZfcP.js";
1
+ import { j as a } from "./jsx-runtime-BzflLqGi.js";
2
+ import { createClient as g } from "@supabase/supabase-js";
3
+ import { C as m, A as h } from "./errors-D2FbERKl.js";
4
+ import { S as f } from "./SignUp-DNmOFbLD.js";
5
+ import { u } from "./ZudokuContext-Ea7gxmGq.js";
6
6
  import { Auth as v } from "@supabase/auth-ui-react";
7
7
  import { ThemeSupa as S } from "@supabase/auth-ui-shared";
8
- import { b as A } from "./chunk-PVWAREVJ-ClM0m2aJ.js";
9
- import { H as T } from "./index-CboxZOVW.js";
10
- const d = ({
11
- client: s,
8
+ import { b as T } from "./chunk-EPOLDU6W-C6C8jAwd.js";
9
+ import { H as A } from "./index-D5NeW2z6.js";
10
+ const c = ({
11
+ client: i,
12
12
  config: e,
13
13
  view: t = "sign_in"
14
14
  }) => {
15
- const [r] = A(), a = r.get("redirectTo"), n = e.provider ? [e.provider] : e.providers, o = e.basePath ?? "/", c = a ?? e.redirectToAfterSignUp ?? o, l = a ?? e.redirectToAfterSignIn ?? o, p = a ?? e.redirectToAfterSignOut ?? o;
16
- return /* @__PURE__ */ i.jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ i.jsxs("div", { className: "max-w-md w-full mt-10", children: [
17
- /* @__PURE__ */ i.jsx(T, { level: 1, children: t === "sign_in" ? "Sign in" : "Sign up" }),
18
- /* @__PURE__ */ i.jsx(
15
+ const [s] = T(), r = s.get("redirectTo"), n = e.provider ? [e.provider] : e.providers, o = e.basePath ?? "/", d = r ?? e.redirectToAfterSignUp ?? o, l = r ?? e.redirectToAfterSignIn ?? o, p = r ?? e.redirectToAfterSignOut ?? o;
16
+ return /* @__PURE__ */ a.jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ a.jsxs("div", { className: "max-w-md w-full mt-10", children: [
17
+ /* @__PURE__ */ a.jsx(A, { level: 1, children: t === "sign_in" ? "Sign in" : "Sign up" }),
18
+ /* @__PURE__ */ a.jsx(
19
19
  v,
20
20
  {
21
21
  view: t,
22
22
  redirectToAfterSignIn: l,
23
- redirectToAfterSignUp: c,
23
+ redirectToAfterSignUp: d,
24
24
  redirectToAfterSignOut: p,
25
- supabaseClient: s,
25
+ supabaseClient: i,
26
26
  onlyThirdPartyProviders: e.onlyThirdPartyProviders,
27
27
  appearance: {
28
28
  theme: S,
@@ -58,18 +58,18 @@ class b extends m {
58
58
  client;
59
59
  config;
60
60
  constructor(e) {
61
- const { supabaseUrl: t, supabaseKey: r } = e;
62
- super(), this.client = h(t, r, {
61
+ const { supabaseUrl: t, supabaseKey: s } = e;
62
+ super(), this.client = g(t, s, {
63
63
  auth: {
64
64
  autoRefreshToken: !0,
65
65
  persistSession: !0
66
66
  }
67
- }), this.config = e, this.client.auth.onAuthStateChange(async (a, n) => {
68
- n && (a === "SIGNED_IN" || a === "TOKEN_REFRESHED") ? await this.updateUserState(n) : a === "SIGNED_OUT" && u.getState().setLoggedOut();
67
+ }), this.config = e, this.client.auth.onAuthStateChange(async (r, n) => {
68
+ n && (r === "SIGNED_IN" || r === "TOKEN_REFRESHED") ? await this.updateUserState(n) : r === "SIGNED_OUT" && u.getState().setLoggedOut();
69
69
  });
70
70
  }
71
71
  async updateUserState(e) {
72
- const { user: t } = e, r = {
72
+ const { user: t } = e, s = {
73
73
  sub: t.id,
74
74
  email: t.email,
75
75
  name: t.user_metadata.full_name || t.user_metadata.name,
@@ -77,14 +77,14 @@ class b extends m {
77
77
  pictureUrl: t.user_metadata.avatar_url
78
78
  };
79
79
  u.getState().setLoggedIn({
80
- profile: r,
80
+ profile: s,
81
81
  providerData: { session: e }
82
82
  });
83
83
  }
84
84
  async getAccessToken() {
85
85
  const { data: e, error: t } = await this.client.auth.getSession();
86
86
  if (t || !e.session)
87
- throw new g("User is not authenticated");
87
+ throw new h("User is not authenticated");
88
88
  return e.session.access_token;
89
89
  }
90
90
  async signRequest(e) {
@@ -104,8 +104,8 @@ class b extends m {
104
104
  getRoutes = () => [
105
105
  {
106
106
  path: "/signin",
107
- element: /* @__PURE__ */ i.jsx(
108
- d,
107
+ element: /* @__PURE__ */ a.jsx(
108
+ c,
109
109
  {
110
110
  view: "sign_in",
111
111
  client: this.client,
@@ -115,8 +115,8 @@ class b extends m {
115
115
  },
116
116
  {
117
117
  path: "/signup",
118
- element: /* @__PURE__ */ i.jsx(
119
- d,
118
+ element: /* @__PURE__ */ a.jsx(
119
+ c,
120
120
  {
121
121
  view: "sign_up",
122
122
  client: this.client,
@@ -126,29 +126,20 @@ class b extends m {
126
126
  },
127
127
  {
128
128
  path: "/signout",
129
- element: /* @__PURE__ */ i.jsx(f, {})
129
+ element: /* @__PURE__ */ a.jsx(f, {})
130
130
  }
131
131
  ];
132
132
  signOut = async () => {
133
- await new Promise((e) => {
134
- const { data: t } = this.client.auth.onAuthStateChange(async (r) => {
135
- r === "SIGNED_OUT" && (t.subscription.unsubscribe(), e());
136
- });
137
- this.client.auth.signOut();
138
- }), u.setState({
139
- isAuthenticated: !1,
140
- isPending: !1,
141
- profile: void 0,
142
- providerData: void 0
143
- });
133
+ const { error: e } = await this.client.auth.signOut({ scope: "local" });
134
+ e && console.error("Error signing out", e), u.getState().setLoggedOut();
144
135
  };
145
136
  onPageLoad = async () => {
146
137
  const { data: e, error: t } = await this.client.auth.getSession();
147
138
  !t && e.session && await this.updateUserState(e.session);
148
139
  };
149
140
  }
150
- const j = (s) => new b(s);
141
+ const P = (i) => new b(i);
151
142
  export {
152
- j as default
143
+ P as default
153
144
  };
154
145
  //# sourceMappingURL=zudoku.auth-supabase.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zudoku.auth-supabase.js","sources":["../src/lib/authentication/providers/supabase/SupabaseAuthUI.tsx","../src/lib/authentication/providers/supabase.tsx"],"sourcesContent":["import { Auth } from \"@supabase/auth-ui-react\";\nimport {\n ThemeSupa,\n type ThemeVariables,\n type ViewType,\n} from \"@supabase/auth-ui-shared\";\nimport type { SupabaseClient } from \"@supabase/supabase-js\";\nimport { useSearchParams } from \"react-router\";\nimport type { SupabaseAuthenticationConfig } from \"../../../../config/config.js\";\nimport { Heading } from \"../../../components/Heading.js\";\n\nexport const SupabaseAuthUI = ({\n client,\n config,\n view = \"sign_in\",\n}: {\n client: SupabaseClient;\n config: SupabaseAuthenticationConfig;\n view: ViewType;\n}) => {\n const [searchParams] = useSearchParams();\n const redirectTo = searchParams.get(\"redirectTo\");\n const providers = config.provider ? [config.provider] : config.providers;\n const root = config.basePath ?? \"/\";\n const redirectToAfterSignUp =\n redirectTo ?? config.redirectToAfterSignUp ?? root;\n const redirectToAfterSignIn =\n redirectTo ?? config.redirectToAfterSignIn ?? root;\n const redirectToAfterSignOut =\n redirectTo ?? config.redirectToAfterSignOut ?? root;\n\n return (\n <div className=\"flex items-center justify-center\">\n <div className=\"max-w-md w-full mt-10\">\n <Heading level={1}>\n {view === \"sign_in\" ? \"Sign in\" : \"Sign up\"}\n </Heading>\n <Auth\n view={view}\n redirectToAfterSignIn={redirectToAfterSignIn}\n redirectToAfterSignUp={redirectToAfterSignUp}\n redirectToAfterSignOut={redirectToAfterSignOut}\n supabaseClient={client}\n onlyThirdPartyProviders={config.onlyThirdPartyProviders}\n appearance={{\n theme: ThemeSupa,\n variables: {\n default: {\n colors: {\n dividerBackground: \"var(--border)\",\n brand: \"var(--primary)\",\n brandAccent: \"hsla(from var(--primary) h s l / 0.8)\",\n brandButtonText: \"var(--primary-foreground)\",\n defaultButtonBorder: \"var(--border)\",\n inputBorder: \"var(--border)\",\n inputText: \"var(--foreground)\",\n inputBorderHover: \"var(--accent)\",\n defaultButtonBackground: \"var(--secondary)\",\n defaultButtonBackgroundHover: \"var(--accent)\",\n },\n radii: {\n borderRadiusButton: \"var(--radius)\",\n buttonBorderRadius: \"var(--radius)\",\n inputBorderRadius: \"var(--radius)\",\n },\n } satisfies ThemeVariables,\n },\n }}\n providers={providers}\n redirectTo={config.redirectToAfterSignIn ?? \"/\"}\n />\n </div>\n </div>\n );\n};\n","import {\n createClient,\n type Session,\n type SupabaseClient,\n} from \"@supabase/supabase-js\";\nimport type { SupabaseAuthenticationConfig } from \"../../../config/config.js\";\nimport { CoreAuthenticationPlugin } from \"../AuthenticationPlugin.js\";\nimport type {\n AuthActionContext,\n AuthActionOptions,\n AuthenticationPlugin,\n AuthenticationProviderInitializer,\n} from \"../authentication.js\";\nimport { SignOut } from \"../components/SignOut.js\";\nimport { AuthorizationError } from \"../errors.js\";\nimport { type UserProfile, useAuthState } from \"../state.js\";\nimport { SupabaseAuthUI } from \"./supabase/SupabaseAuthUI.js\";\n\nclass SupabaseAuthenticationProvider\n extends CoreAuthenticationPlugin\n implements AuthenticationPlugin\n{\n private readonly client: SupabaseClient;\n private readonly config: SupabaseAuthenticationConfig;\n\n constructor(config: SupabaseAuthenticationConfig) {\n const { supabaseUrl, supabaseKey } = config;\n super();\n\n this.client = createClient(supabaseUrl, supabaseKey, {\n auth: {\n autoRefreshToken: true,\n persistSession: true,\n },\n });\n this.config = config;\n\n this.client.auth.onAuthStateChange(async (event, session) => {\n if (session && (event === \"SIGNED_IN\" || event === \"TOKEN_REFRESHED\")) {\n await this.updateUserState(session);\n } else if (event === \"SIGNED_OUT\") {\n useAuthState.getState().setLoggedOut();\n }\n });\n }\n\n private async updateUserState(session: Session) {\n const { user } = session;\n\n const profile: UserProfile = {\n sub: user.id,\n email: user.email,\n name: user.user_metadata.full_name || user.user_metadata.name,\n emailVerified: user.email_confirmed_at != null,\n pictureUrl: user.user_metadata.avatar_url,\n };\n\n useAuthState.getState().setLoggedIn({\n profile,\n providerData: { session },\n });\n }\n\n async getAccessToken(): Promise<string> {\n const { data, error } = await this.client.auth.getSession();\n\n if (error || !data.session) {\n throw new AuthorizationError(\"User is not authenticated\");\n }\n\n return data.session.access_token;\n }\n\n async signRequest(request: Request): Promise<Request> {\n const accessToken = await this.getAccessToken();\n request.headers.set(\"Authorization\", `Bearer ${accessToken}`);\n return request;\n }\n\n signUp = async (\n { navigate }: AuthActionContext,\n { redirectTo }: AuthActionOptions,\n ) => {\n void navigate(\n redirectTo\n ? `/signup?redirectTo=${encodeURIComponent(redirectTo)}`\n : `/signup`,\n );\n };\n\n signIn = async (\n { navigate }: AuthActionContext,\n { redirectTo }: AuthActionOptions,\n ) => {\n void navigate(\n redirectTo\n ? `/signin?redirectTo=${encodeURIComponent(redirectTo)}`\n : `/signin`,\n );\n };\n\n getRoutes = () => {\n return [\n {\n path: \"/signin\",\n element: (\n <SupabaseAuthUI\n view=\"sign_in\"\n client={this.client}\n config={this.config}\n />\n ),\n },\n {\n path: \"/signup\",\n element: (\n <SupabaseAuthUI\n view=\"sign_up\"\n client={this.client}\n config={this.config}\n />\n ),\n },\n {\n path: \"/signout\",\n element: <SignOut />,\n },\n ];\n };\n\n signOut = async () => {\n await new Promise<void>((resolve) => {\n const { data } = this.client.auth.onAuthStateChange(async (event) => {\n if (event !== \"SIGNED_OUT\") return;\n data.subscription.unsubscribe();\n resolve();\n });\n void this.client.auth.signOut();\n });\n\n useAuthState.setState({\n isAuthenticated: false,\n isPending: false,\n profile: undefined,\n providerData: undefined,\n });\n };\n\n onPageLoad = async () => {\n const { data, error } = await this.client.auth.getSession();\n\n if (!error && data.session) {\n await this.updateUserState(data.session);\n }\n };\n}\n\nconst supabaseAuth: AuthenticationProviderInitializer<\n SupabaseAuthenticationConfig\n> = (options) => new SupabaseAuthenticationProvider(options);\n\nexport default supabaseAuth;\n"],"names":["SupabaseAuthUI","client","config","view","searchParams","useSearchParams","redirectTo","providers","root","redirectToAfterSignUp","redirectToAfterSignIn","redirectToAfterSignOut","jsxs","jsx","Heading","Auth","ThemeSupa","SupabaseAuthenticationProvider","CoreAuthenticationPlugin","supabaseUrl","supabaseKey","createClient","event","session","useAuthState","user","profile","data","error","AuthorizationError","request","accessToken","navigate","SignOut","resolve","supabaseAuth","options"],"mappings":"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"}
1
+ {"version":3,"file":"zudoku.auth-supabase.js","sources":["../src/lib/authentication/providers/supabase/SupabaseAuthUI.tsx","../src/lib/authentication/providers/supabase.tsx"],"sourcesContent":["import { Auth } from \"@supabase/auth-ui-react\";\nimport {\n ThemeSupa,\n type ThemeVariables,\n type ViewType,\n} from \"@supabase/auth-ui-shared\";\nimport type { SupabaseClient } from \"@supabase/supabase-js\";\nimport { useSearchParams } from \"react-router\";\nimport type { SupabaseAuthenticationConfig } from \"../../../../config/config.js\";\nimport { Heading } from \"../../../components/Heading.js\";\n\nexport const SupabaseAuthUI = ({\n client,\n config,\n view = \"sign_in\",\n}: {\n client: SupabaseClient;\n config: SupabaseAuthenticationConfig;\n view: ViewType;\n}) => {\n const [searchParams] = useSearchParams();\n const redirectTo = searchParams.get(\"redirectTo\");\n const providers = config.provider ? [config.provider] : config.providers;\n const root = config.basePath ?? \"/\";\n const redirectToAfterSignUp =\n redirectTo ?? config.redirectToAfterSignUp ?? root;\n const redirectToAfterSignIn =\n redirectTo ?? config.redirectToAfterSignIn ?? root;\n const redirectToAfterSignOut =\n redirectTo ?? config.redirectToAfterSignOut ?? root;\n\n return (\n <div className=\"flex items-center justify-center\">\n <div className=\"max-w-md w-full mt-10\">\n <Heading level={1}>\n {view === \"sign_in\" ? \"Sign in\" : \"Sign up\"}\n </Heading>\n <Auth\n view={view}\n redirectToAfterSignIn={redirectToAfterSignIn}\n redirectToAfterSignUp={redirectToAfterSignUp}\n redirectToAfterSignOut={redirectToAfterSignOut}\n supabaseClient={client}\n onlyThirdPartyProviders={config.onlyThirdPartyProviders}\n appearance={{\n theme: ThemeSupa,\n variables: {\n default: {\n colors: {\n dividerBackground: \"var(--border)\",\n brand: \"var(--primary)\",\n brandAccent: \"hsla(from var(--primary) h s l / 0.8)\",\n brandButtonText: \"var(--primary-foreground)\",\n defaultButtonBorder: \"var(--border)\",\n inputBorder: \"var(--border)\",\n inputText: \"var(--foreground)\",\n inputBorderHover: \"var(--accent)\",\n defaultButtonBackground: \"var(--secondary)\",\n defaultButtonBackgroundHover: \"var(--accent)\",\n },\n radii: {\n borderRadiusButton: \"var(--radius)\",\n buttonBorderRadius: \"var(--radius)\",\n inputBorderRadius: \"var(--radius)\",\n },\n } satisfies ThemeVariables,\n },\n }}\n providers={providers}\n redirectTo={config.redirectToAfterSignIn ?? \"/\"}\n />\n </div>\n </div>\n );\n};\n","import {\n createClient,\n type Session,\n type SupabaseClient,\n} from \"@supabase/supabase-js\";\nimport type { SupabaseAuthenticationConfig } from \"../../../config/config.js\";\nimport { CoreAuthenticationPlugin } from \"../AuthenticationPlugin.js\";\nimport type {\n AuthActionContext,\n AuthActionOptions,\n AuthenticationPlugin,\n AuthenticationProviderInitializer,\n} from \"../authentication.js\";\nimport { SignOut } from \"../components/SignOut.js\";\nimport { AuthorizationError } from \"../errors.js\";\nimport { type UserProfile, useAuthState } from \"../state.js\";\nimport { SupabaseAuthUI } from \"./supabase/SupabaseAuthUI.js\";\n\nclass SupabaseAuthenticationProvider\n extends CoreAuthenticationPlugin\n implements AuthenticationPlugin\n{\n private readonly client: SupabaseClient;\n private readonly config: SupabaseAuthenticationConfig;\n\n constructor(config: SupabaseAuthenticationConfig) {\n const { supabaseUrl, supabaseKey } = config;\n super();\n\n this.client = createClient(supabaseUrl, supabaseKey, {\n auth: {\n autoRefreshToken: true,\n persistSession: true,\n },\n });\n this.config = config;\n\n this.client.auth.onAuthStateChange(async (event, session) => {\n if (session && (event === \"SIGNED_IN\" || event === \"TOKEN_REFRESHED\")) {\n await this.updateUserState(session);\n } else if (event === \"SIGNED_OUT\") {\n useAuthState.getState().setLoggedOut();\n }\n });\n }\n\n private async updateUserState(session: Session) {\n const { user } = session;\n\n const profile: UserProfile = {\n sub: user.id,\n email: user.email,\n name: user.user_metadata.full_name || user.user_metadata.name,\n emailVerified: user.email_confirmed_at != null,\n pictureUrl: user.user_metadata.avatar_url,\n };\n\n useAuthState.getState().setLoggedIn({\n profile,\n providerData: { session },\n });\n }\n\n async getAccessToken(): Promise<string> {\n const { data, error } = await this.client.auth.getSession();\n\n if (error || !data.session) {\n throw new AuthorizationError(\"User is not authenticated\");\n }\n\n return data.session.access_token;\n }\n\n async signRequest(request: Request): Promise<Request> {\n const accessToken = await this.getAccessToken();\n request.headers.set(\"Authorization\", `Bearer ${accessToken}`);\n return request;\n }\n\n signUp = async (\n { navigate }: AuthActionContext,\n { redirectTo }: AuthActionOptions,\n ) => {\n void navigate(\n redirectTo\n ? `/signup?redirectTo=${encodeURIComponent(redirectTo)}`\n : `/signup`,\n );\n };\n\n signIn = async (\n { navigate }: AuthActionContext,\n { redirectTo }: AuthActionOptions,\n ) => {\n void navigate(\n redirectTo\n ? `/signin?redirectTo=${encodeURIComponent(redirectTo)}`\n : `/signin`,\n );\n };\n\n getRoutes = () => {\n return [\n {\n path: \"/signin\",\n element: (\n <SupabaseAuthUI\n view=\"sign_in\"\n client={this.client}\n config={this.config}\n />\n ),\n },\n {\n path: \"/signup\",\n element: (\n <SupabaseAuthUI\n view=\"sign_up\"\n client={this.client}\n config={this.config}\n />\n ),\n },\n {\n path: \"/signout\",\n element: <SignOut />,\n },\n ];\n };\n\n signOut = async () => {\n const { error } = await this.client.auth.signOut({ scope: \"local\" });\n if (error) {\n // biome-ignore lint/suspicious: Logging is better than not doing anything\n console.error(\"Error signing out\", error);\n }\n useAuthState.getState().setLoggedOut();\n };\n\n onPageLoad = async () => {\n const { data, error } = await this.client.auth.getSession();\n\n if (!error && data.session) {\n await this.updateUserState(data.session);\n }\n };\n}\n\nconst supabaseAuth: AuthenticationProviderInitializer<\n SupabaseAuthenticationConfig\n> = (options) => new SupabaseAuthenticationProvider(options);\n\nexport default supabaseAuth;\n"],"names":["SupabaseAuthUI","client","config","view","searchParams","useSearchParams","redirectTo","providers","root","redirectToAfterSignUp","redirectToAfterSignIn","redirectToAfterSignOut","jsxs","jsx","Heading","Auth","ThemeSupa","SupabaseAuthenticationProvider","CoreAuthenticationPlugin","supabaseUrl","supabaseKey","createClient","event","session","useAuthState","user","profile","data","error","AuthorizationError","request","accessToken","navigate","SignOut","supabaseAuth","options"],"mappings":"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"}
@@ -1,12 +1,12 @@
1
- import "./index.esm-DtzT_KoE.js";
2
- import "./index-DXXZDuSJ.js";
3
- import "./chunk-PVWAREVJ-ClM0m2aJ.js";
4
- import "./hook-CHw_R_xu.js";
1
+ import "./index.esm-B_0dvNjB.js";
2
+ import "./index-CC4L3gtM.js";
3
+ import "./chunk-EPOLDU6W-C6C8jAwd.js";
4
+ import "./hook-B2nmfmYN.js";
5
5
  import "./ui/Button.js";
6
6
  import "./ui/Callout.js";
7
7
  import "./ClientOnly-E7hGysn1.js";
8
- import "./ZudokuContext-DNHMZfcP.js";
9
- import { B as C, y as l, C as d, q as h, p as k, L as y, o as S, t as Z, S as w, r as x, Z as A, w as B, x as E, v as H, z as L, a as M } from "./index-CboxZOVW.js";
8
+ import "./ZudokuContext-Ea7gxmGq.js";
9
+ import { B as C, y as l, C as d, q as h, p as k, L as y, o as S, t as Z, S as w, r as x, Z as A, w as B, x as E, v as H, z as L, a as M } from "./index-D5NeW2z6.js";
10
10
  import "./Spinner-CI6bRyZw.js";
11
11
  export {
12
12
  C as Button,
@@ -1,6 +1,6 @@
1
- import { b as o, h as u, e as p, f as r, g as t, a as m, c as C } from "./index-DXXZDuSJ.js";
2
- import "./hook-CHw_R_xu.js";
3
- import { C as E } from "./ZudokuContext-DNHMZfcP.js";
1
+ import { b as o, h as u, e as p, f as r, g as t, a as m, c as C } from "./index-CC4L3gtM.js";
2
+ import "./hook-B2nmfmYN.js";
3
+ import { C as E } from "./ZudokuContext-Ea7gxmGq.js";
4
4
  export {
5
5
  E as CACHE_KEYS,
6
6
  o as useAuth,
@@ -1,8 +1,8 @@
1
1
  import "./jsx-runtime-BzflLqGi.js";
2
- import "./ZudokuContext-DNHMZfcP.js";
2
+ import "./ZudokuContext-Ea7gxmGq.js";
3
3
  import "react";
4
- import { M as e } from "./Mermaid-BjSczjLW.js";
5
- import "./index-DXXZDuSJ.js";
4
+ import { M as e } from "./Mermaid-COVtAqcZ.js";
5
+ import "./index-CC4L3gtM.js";
6
6
  import "./Spinner-CI6bRyZw.js";
7
7
  export {
8
8
  e as Mermaid
@@ -1,9 +1,9 @@
1
1
  import { j as t } from "./jsx-runtime-BzflLqGi.js";
2
- import { s as f } from "./index-1TbL0HXQ.js";
3
- import { c as b, m as j } from "./chunk-PVWAREVJ-ClM0m2aJ.js";
4
- import { u as x, e as v, j as d } from "./ZudokuContext-DNHMZfcP.js";
5
- import { H as y } from "./index.esm-DtzT_KoE.js";
6
- import { H as N, L as k, M as S } from "./index-CboxZOVW.js";
2
+ import { s as f } from "./index-DSKBOdpT.js";
3
+ import { c as b, m as j } from "./chunk-EPOLDU6W-C6C8jAwd.js";
4
+ import { u as x, e as v, j as d } from "./ZudokuContext-Ea7gxmGq.js";
5
+ import { H as y } from "./index.esm-B_0dvNjB.js";
6
+ import { H as N, L as k, M as S } from "./index-D5NeW2z6.js";
7
7
  const w = ({
8
8
  items: o,
9
9
  filterCatalogItems: r = (i) => i,