@cabin-id/nextjs 2.0.0 → 2.0.1
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/cjs/components/SignInButton.js +6 -3
- package/dist/cjs/components/SignInButton.js.map +1 -1
- package/dist/cjs/components/SignOutButton.js +1 -1
- package/dist/cjs/components/SignOutButton.js.map +1 -1
- package/dist/cjs/hooks/useUser.js +3 -0
- package/dist/cjs/hooks/useUser.js.map +1 -1
- package/dist/esm/components/SignInButton.js +6 -3
- package/dist/esm/components/SignInButton.js.map +1 -1
- package/dist/esm/components/SignOutButton.js +2 -2
- package/dist/esm/components/SignOutButton.js.map +1 -1
- package/dist/esm/hooks/useUser.js +3 -0
- package/dist/esm/hooks/useUser.js.map +1 -1
- package/dist/types/components/SignInButton.d.ts +15 -1
- package/dist/types/components/SignInButton.d.ts.map +1 -1
- package/dist/types/hooks/useUser.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -35,7 +35,10 @@ module.exports = __toCommonJS(SignInButton_exports);
|
|
|
35
35
|
var import_react = __toESM(require("react"));
|
|
36
36
|
var import_logo = require("../icons/logo");
|
|
37
37
|
var import_constants = require("../constants");
|
|
38
|
-
const SignInButton = (
|
|
38
|
+
const SignInButton = ({
|
|
39
|
+
children = "Continue to CabinID",
|
|
40
|
+
className = "max-w-48 pl-2 py-2 pr-4 bg-blue-600 rounded-full flex flex-row space-x-2 items-center hover:opacity-90 active:bg-blue-700"
|
|
41
|
+
}) => {
|
|
39
42
|
const [signInUrl, setSignInUrl] = (0, import_react.useState)("#");
|
|
40
43
|
(0, import_react.useEffect)(() => {
|
|
41
44
|
if (typeof window !== "undefined") {
|
|
@@ -60,10 +63,10 @@ const SignInButton = () => {
|
|
|
60
63
|
"a",
|
|
61
64
|
{
|
|
62
65
|
href: signInUrl,
|
|
63
|
-
className
|
|
66
|
+
className
|
|
64
67
|
},
|
|
65
68
|
/* @__PURE__ */ import_react.default.createElement(import_logo.CabinLogo, null),
|
|
66
|
-
/* @__PURE__ */ import_react.default.createElement("span", { className: "text-white text-sm" },
|
|
69
|
+
/* @__PURE__ */ import_react.default.createElement("span", { className: "text-white text-sm" }, children)
|
|
67
70
|
);
|
|
68
71
|
};
|
|
69
72
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/SignInButton.tsx"],"sourcesContent":["'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { CabinLogo } from '../icons/logo';\nimport { AFTER_SIGN_IN_URL, frontendApi, SIGN_IN_URL } from '../constants';\n\nexport const SignInButton = () => {\n const [signInUrl, setSignInUrl] = useState('#');\n\n useEffect(() => {\n if (typeof window !== 'undefined') {\n const origin = typeof window === 'undefined' ? null : window.origin;\n if (!origin) {\n return;\n }\n const params = new URLSearchParams({\n redirect_url: `${origin}${AFTER_SIGN_IN_URL}` || '/',\n });\n\n let signInUrlTemp = '#';\n if (SIGN_IN_URL) {\n signInUrlTemp = SIGN_IN_URL.includes('?')\n ? `${SIGN_IN_URL}&${params.toString()}`\n : `${SIGN_IN_URL}?${params.toString()}`;\n } else if (frontendApi) {\n const protocol = frontendApi.includes('localhost') ? 'http' : 'https';\n signInUrlTemp = `${protocol}://${frontendApi}/sign-in?${params.toString()}`;\n }\n\n setSignInUrl(signInUrlTemp);\n }\n }, []);\n\n return (\n <a\n href={signInUrl}\n className
|
|
1
|
+
{"version":3,"sources":["../../../src/components/SignInButton.tsx"],"sourcesContent":["'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { CabinLogo } from '../icons/logo';\nimport { AFTER_SIGN_IN_URL, frontendApi, SIGN_IN_URL } from '../constants';\n\nexport interface SignInButtonProps {\n /**\n * Custom text to display on the button\n * @default \"Continue to CabinID\"\n */\n children?: React.ReactNode;\n /**\n * Custom CSS class name\n */\n className?: string;\n}\n\n/**\n * SignInButton component that handles user authentication redirect to CabinID\n */\nexport const SignInButton: React.FC<SignInButtonProps> = ({\n children = 'Continue to CabinID',\n className = 'max-w-48 pl-2 py-2 pr-4 bg-blue-600 rounded-full flex flex-row space-x-2 items-center hover:opacity-90 active:bg-blue-700',\n}) => {\n const [signInUrl, setSignInUrl] = useState('#');\n\n useEffect(() => {\n if (typeof window !== 'undefined') {\n const origin = typeof window === 'undefined' ? null : window.origin;\n if (!origin) {\n return;\n }\n const params = new URLSearchParams({\n redirect_url: `${origin}${AFTER_SIGN_IN_URL}` || '/',\n });\n\n let signInUrlTemp = '#';\n if (SIGN_IN_URL) {\n signInUrlTemp = SIGN_IN_URL.includes('?')\n ? `${SIGN_IN_URL}&${params.toString()}`\n : `${SIGN_IN_URL}?${params.toString()}`;\n } else if (frontendApi) {\n const protocol = frontendApi.includes('localhost') ? 'http' : 'https';\n signInUrlTemp = `${protocol}://${frontendApi}/sign-in?${params.toString()}`;\n }\n\n setSignInUrl(signInUrlTemp);\n }\n }, []);\n\n return (\n <a\n href={signInUrl}\n className={className}\n >\n <CabinLogo />\n <span className=\"text-white text-sm\">{children}</span>\n </a>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAA2C;AAC3C,kBAA0B;AAC1B,uBAA4D;AAiBrD,MAAM,eAA4C,CAAC;AAAA,EACxD,WAAW;AAAA,EACX,YAAY;AACd,MAAM;AACJ,QAAM,CAAC,WAAW,YAAY,QAAI,uBAAS,GAAG;AAE9C,8BAAU,MAAM;AACd,QAAI,OAAO,WAAW,aAAa;AACjC,YAAM,SAAS,OAAO,WAAW,cAAc,OAAO,OAAO;AAC7D,UAAI,CAAC,QAAQ;AACX;AAAA,MACF;AACA,YAAM,SAAS,IAAI,gBAAgB;AAAA,QACjC,cAAc,GAAG,MAAM,GAAG,kCAAiB,MAAM;AAAA,MACnD,CAAC;AAED,UAAI,gBAAgB;AACpB,UAAI,8BAAa;AACf,wBAAgB,6BAAY,SAAS,GAAG,IACpC,GAAG,4BAAW,IAAI,OAAO,SAAS,CAAC,KACnC,GAAG,4BAAW,IAAI,OAAO,SAAS,CAAC;AAAA,MACzC,WAAW,8BAAa;AACtB,cAAM,WAAW,6BAAY,SAAS,WAAW,IAAI,SAAS;AAC9D,wBAAgB,GAAG,QAAQ,MAAM,4BAAW,YAAY,OAAO,SAAS,CAAC;AAAA,MAC3E;AAEA,mBAAa,aAAa;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SACE,6BAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAM;AAAA,MACN;AAAA;AAAA,IAEA,6BAAAA,QAAA,cAAC,2BAAU;AAAA,IACX,6BAAAA,QAAA,cAAC,UAAK,WAAU,wBAAsB,QAAS;AAAA,EACjD;AAEJ;","names":["React"]}
|
|
@@ -56,7 +56,7 @@ const SignOutButton = ({
|
|
|
56
56
|
try {
|
|
57
57
|
const token = getCookieValue("__client") || getCookieValue("__user");
|
|
58
58
|
if (token) {
|
|
59
|
-
await fetch(`${import_constants.
|
|
59
|
+
await fetch(`${import_constants.baseApiUrlV2}/auth/sign-out`, {
|
|
60
60
|
method: "POST",
|
|
61
61
|
headers: {
|
|
62
62
|
"Content-Type": "application/json",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/SignOutButton.tsx"],"sourcesContent":["'use client';\n\nimport React, { useState } from 'react';\nimport { useUser } from '../hooks/useUser';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/components/SignOutButton.tsx"],"sourcesContent":["'use client';\n\nimport React, { useState } from 'react';\nimport { useUser } from '../hooks/useUser';\nimport { baseApiUrlV2 } from '../constants';\nimport { AFTER_SIGN_IN_URL, frontendApi } from '../constants';\n\nexport interface SignOutButtonProps {\n /**\n * Custom text to display on the button\n * @default \"Sign Out\"\n */\n children?: React.ReactNode;\n /**\n * Custom CSS class name\n */\n className?: string;\n /**\n * Callback function called before sign out\n */\n onSignOutStart?: () => void;\n /**\n * Callback function called after successful sign out\n */\n onSignOutSuccess?: () => void;\n /**\n * Callback function called when sign out fails\n */\n onSignOutError?: (error: Error) => void;\n /**\n * Whether to show loading state\n * @default true\n */\n showLoading?: boolean;\n /**\n * Custom loading text\n * @default \"Signing out...\"\n */\n loadingText?: string;\n}\n\n/**\n * SignOutButton component that handles user logout with CabinID backend integration\n */\nexport const SignOutButton: React.FC<SignOutButtonProps> = ({\n children = 'Sign Out',\n className = 'px-4 py-2 bg-red-600 text-white rounded hover:bg-red-700 disabled:opacity-50',\n onSignOutStart,\n onSignOutSuccess,\n onSignOutError,\n showLoading = true,\n loadingText = 'Signing out...',\n}) => {\n const { signOut, isSignedIn, user } = useUser();\n const [isLoading, setIsLoading] = useState(false);\n\n const handleSignOut = async () => {\n if (isLoading || !isSignedIn) return;\n\n try {\n setIsLoading(true);\n onSignOutStart?.();\n\n // 1. Call backend sign-out endpoint first\n if (user) {\n try {\n const token = getCookieValue('__client') || getCookieValue('__user');\n if (token) {\n await fetch(`${baseApiUrlV2}/auth/sign-out`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${token}`,\n 'Origin': typeof window !== 'undefined' ? window.location.origin : '',\n },\n });\n }\n } catch (backendError) {\n console.warn('Backend sign-out failed, proceeding with logout:', backendError);\n }\n }\n\n // 2. Clear local cookies and storage\n await signOut(() => {\n // Prevent automatic redirect, we'll handle it manually\n });\n\n // 3. Redirect to CabinID logout page with redirect_url\n const origin = typeof window !== 'undefined' ? window.location.origin : '';\n const params = new URLSearchParams({\n redirect_url: `${origin}${AFTER_SIGN_IN_URL}`,\n });\n const logoutUrl = `https://${frontendApi}/logout?${params.toString()}`;\n\n onSignOutSuccess?.();\n window.location.href = logoutUrl;\n } catch (error) {\n console.error('Sign out error:', error);\n onSignOutError?.(error as Error);\n setIsLoading(false);\n }\n };\n\n // Helper function to get cookie value\n const getCookieValue = (name: string): string | null => {\n if (typeof window === 'undefined') return null;\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) {\n return parts.pop()?.split(';').shift() || null;\n }\n return null;\n };\n\n // Don't render if user is not signed in\n if (!isSignedIn) {\n return null;\n }\n\n return (\n <button\n onClick={handleSignOut}\n disabled={isLoading}\n className={className}\n type=\"button\"\n >\n {isLoading && showLoading ? loadingText : children}\n </button>\n );\n};"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAgC;AAChC,qBAAwB;AACxB,uBAA6B;AAC7B,IAAAA,oBAA+C;AAuCxC,MAAM,gBAA8C,CAAC;AAAA,EAC1D,WAAW;AAAA,EACX,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,cAAc;AAChB,MAAM;AACJ,QAAM,EAAE,SAAS,YAAY,KAAK,QAAI,wBAAQ;AAC9C,QAAM,CAAC,WAAW,YAAY,QAAI,uBAAS,KAAK;AAEhD,QAAM,gBAAgB,YAAY;AAChC,QAAI,aAAa,CAAC,WAAY;AAE9B,QAAI;AACF,mBAAa,IAAI;AACjB;AAGA,UAAI,MAAM;AACR,YAAI;AACF,gBAAM,QAAQ,eAAe,UAAU,KAAK,eAAe,QAAQ;AACnE,cAAI,OAAO;AACT,kBAAM,MAAM,GAAG,6BAAY,kBAAkB;AAAA,cAC3C,QAAQ;AAAA,cACR,SAAS;AAAA,gBACP,gBAAgB;AAAA,gBAChB,iBAAiB,UAAU,KAAK;AAAA,gBAChC,UAAU,OAAO,WAAW,cAAc,OAAO,SAAS,SAAS;AAAA,cACrE;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF,SAAS,cAAc;AACrB,kBAAQ,KAAK,oDAAoD,YAAY;AAAA,QAC/E;AAAA,MACF;AAGA,YAAM,QAAQ,MAAM;AAAA,MAEpB,CAAC;AAGD,YAAM,SAAS,OAAO,WAAW,cAAc,OAAO,SAAS,SAAS;AACxE,YAAM,SAAS,IAAI,gBAAgB;AAAA,QACjC,cAAc,GAAG,MAAM,GAAG,mCAAiB;AAAA,MAC7C,CAAC;AACD,YAAM,YAAY,WAAW,6BAAW,WAAW,OAAO,SAAS,CAAC;AAEpE;AACA,aAAO,SAAS,OAAO;AAAA,IACzB,SAAS,OAAO;AACd,cAAQ,MAAM,mBAAmB,KAAK;AACtC,uDAAiB;AACjB,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF;AAGA,QAAM,iBAAiB,CAAC,SAAgC;AAxG1D;AAyGI,QAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,UAAM,QAAQ,KAAK,SAAS,MAAM;AAClC,UAAM,QAAQ,MAAM,MAAM,KAAK,IAAI,GAAG;AACtC,QAAI,MAAM,WAAW,GAAG;AACtB,eAAO,WAAM,IAAI,MAAV,mBAAa,MAAM,KAAK,YAAW;AAAA,IAC5C;AACA,WAAO;AAAA,EACT;AAGA,MAAI,CAAC,YAAY;AACf,WAAO;AAAA,EACT;AAEA,SACE,6BAAAC,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAS;AAAA,MACT,UAAU;AAAA,MACV;AAAA,MACA,MAAK;AAAA;AAAA,IAEJ,aAAa,cAAc,cAAc;AAAA,EAC5C;AAEJ;","names":["import_constants","React"]}
|
|
@@ -33,6 +33,9 @@ const useUser = () => {
|
|
|
33
33
|
const signOut = async (...args) => {
|
|
34
34
|
(0, import_cookies_next.deleteCookie)(import_constants.constants.Cookies.Client);
|
|
35
35
|
(0, import_cookies_next.deleteCookie)(import_constants.constants.Cookies.User);
|
|
36
|
+
(0, import_cookies_next.deleteCookie)(import_constants.constants.Cookies.Access);
|
|
37
|
+
(0, import_cookies_next.deleteCookie)(import_constants.constants.Cookies.Refresh);
|
|
38
|
+
(0, import_cookies_next.deleteCookie)(import_constants.constants.Cookies.UserId);
|
|
36
39
|
const hasCallback = typeof args[0] === "function";
|
|
37
40
|
if (hasCallback) {
|
|
38
41
|
const callback = args[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/hooks/useUser.ts"],"sourcesContent":["'use client';\n\nimport { deleteCookie } from 'cookies-next';\nimport {\n useAssertWrappedByCabinIdProvider,\n useUserContext,\n} from '../provider/context';\nimport { User } from '../types';\nimport {\n AFTER_SIGN_IN_URL,\n constants,\n frontendApi,\n SIGN_IN_URL,\n} from '../constants';\nimport { useRouter } from 'next/navigation';\n\nexport type SignOutCallback = () => void | Promise<any>;\n\nexport type SignOutOptions = {\n /**\n * Specify a specific session to sign out. Useful for\n * multi-session applications.\n */\n sessionId?: string;\n /**\n * Specify a redirect URL to navigate after sign out is complete.\n */\n redirectUrl?: string;\n};\n\nexport interface SignOut {\n (options?: SignOutOptions): Promise<void>;\n\n (signOutCallback?: SignOutCallback, options?: SignOutOptions): Promise<void>;\n}\n\ntype UseUserReturn =\n | {\n isLoaded: false;\n isSignedIn: undefined;\n user: undefined;\n signOut: SignOut;\n }\n | { isLoaded: true; isSignedIn: false; user: null; signOut: SignOut }\n | {\n isLoaded: true;\n isSignedIn: true;\n user: User;\n signOut: SignOut;\n };\n\nexport const useUser = (): UseUserReturn => {\n useAssertWrappedByCabinIdProvider('useUser');\n\n const user = useUserContext();\n const router = useRouter();\n\n const signOut = async (...args: any[]) => {\n deleteCookie(constants.Cookies.Client);\n deleteCookie(constants.Cookies.User);\n const hasCallback = typeof args[0] === 'function';\n if (hasCallback) {\n const callback = args[0];\n await callback();\n } else {\n if (SIGN_IN_URL) {\n router.push(SIGN_IN_URL);\n } else {\n if (typeof window !== 'undefined') {\n const origin = typeof window === 'undefined' ? null : window.origin;\n if (!origin) {\n return;\n }\n const params = new URLSearchParams({\n redirect_url: `${origin}${AFTER_SIGN_IN_URL}` || '/',\n });\n const signInUrlTemp = frontendApi\n ? `https://${frontendApi}/sign-in?${params.toString()}`\n : '#';\n router.push(signInUrlTemp);\n }\n }\n }\n };\n\n if (user === undefined) {\n return { isLoaded: false, isSignedIn: undefined, user: undefined, signOut };\n }\n\n if (user === null) {\n return { isLoaded: true, isSignedIn: false, user: null, signOut };\n }\n\n return { isLoaded: true, isSignedIn: true, user, signOut };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,0BAA6B;AAC7B,qBAGO;AAEP,uBAKO;AACP,wBAA0B;AAqCnB,MAAM,UAAU,MAAqB;AAC1C,wDAAkC,SAAS;AAE3C,QAAM,WAAO,+BAAe;AAC5B,QAAM,aAAS,6BAAU;AAEzB,QAAM,UAAU,UAAU,SAAgB;
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/useUser.ts"],"sourcesContent":["'use client';\n\nimport { deleteCookie } from 'cookies-next';\nimport {\n useAssertWrappedByCabinIdProvider,\n useUserContext,\n} from '../provider/context';\nimport { User } from '../types';\nimport {\n AFTER_SIGN_IN_URL,\n constants,\n frontendApi,\n SIGN_IN_URL,\n} from '../constants';\nimport { useRouter } from 'next/navigation';\n\nexport type SignOutCallback = () => void | Promise<any>;\n\nexport type SignOutOptions = {\n /**\n * Specify a specific session to sign out. Useful for\n * multi-session applications.\n */\n sessionId?: string;\n /**\n * Specify a redirect URL to navigate after sign out is complete.\n */\n redirectUrl?: string;\n};\n\nexport interface SignOut {\n (options?: SignOutOptions): Promise<void>;\n\n (signOutCallback?: SignOutCallback, options?: SignOutOptions): Promise<void>;\n}\n\ntype UseUserReturn =\n | {\n isLoaded: false;\n isSignedIn: undefined;\n user: undefined;\n signOut: SignOut;\n }\n | { isLoaded: true; isSignedIn: false; user: null; signOut: SignOut }\n | {\n isLoaded: true;\n isSignedIn: true;\n user: User;\n signOut: SignOut;\n };\n\nexport const useUser = (): UseUserReturn => {\n useAssertWrappedByCabinIdProvider('useUser');\n\n const user = useUserContext();\n const router = useRouter();\n\n const signOut = async (...args: any[]) => {\n // Clear V1 cookies\n deleteCookie(constants.Cookies.Client);\n deleteCookie(constants.Cookies.User);\n // Clear V2 cookies\n deleteCookie(constants.Cookies.Access);\n deleteCookie(constants.Cookies.Refresh);\n deleteCookie(constants.Cookies.UserId);\n const hasCallback = typeof args[0] === 'function';\n if (hasCallback) {\n const callback = args[0];\n await callback();\n } else {\n if (SIGN_IN_URL) {\n router.push(SIGN_IN_URL);\n } else {\n if (typeof window !== 'undefined') {\n const origin = typeof window === 'undefined' ? null : window.origin;\n if (!origin) {\n return;\n }\n const params = new URLSearchParams({\n redirect_url: `${origin}${AFTER_SIGN_IN_URL}` || '/',\n });\n const signInUrlTemp = frontendApi\n ? `https://${frontendApi}/sign-in?${params.toString()}`\n : '#';\n router.push(signInUrlTemp);\n }\n }\n }\n };\n\n if (user === undefined) {\n return { isLoaded: false, isSignedIn: undefined, user: undefined, signOut };\n }\n\n if (user === null) {\n return { isLoaded: true, isSignedIn: false, user: null, signOut };\n }\n\n return { isLoaded: true, isSignedIn: true, user, signOut };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,0BAA6B;AAC7B,qBAGO;AAEP,uBAKO;AACP,wBAA0B;AAqCnB,MAAM,UAAU,MAAqB;AAC1C,wDAAkC,SAAS;AAE3C,QAAM,WAAO,+BAAe;AAC5B,QAAM,aAAS,6BAAU;AAEzB,QAAM,UAAU,UAAU,SAAgB;AAExC,0CAAa,2BAAU,QAAQ,MAAM;AACrC,0CAAa,2BAAU,QAAQ,IAAI;AAEnC,0CAAa,2BAAU,QAAQ,MAAM;AACrC,0CAAa,2BAAU,QAAQ,OAAO;AACtC,0CAAa,2BAAU,QAAQ,MAAM;AACrC,UAAM,cAAc,OAAO,KAAK,CAAC,MAAM;AACvC,QAAI,aAAa;AACf,YAAM,WAAW,KAAK,CAAC;AACvB,YAAM,SAAS;AAAA,IACjB,OAAO;AACL,UAAI,8BAAa;AACf,eAAO,KAAK,4BAAW;AAAA,MACzB,OAAO;AACL,YAAI,OAAO,WAAW,aAAa;AACjC,gBAAM,SAAS,OAAO,WAAW,cAAc,OAAO,OAAO;AAC7D,cAAI,CAAC,QAAQ;AACX;AAAA,UACF;AACA,gBAAM,SAAS,IAAI,gBAAgB;AAAA,YACjC,cAAc,GAAG,MAAM,GAAG,kCAAiB,MAAM;AAAA,UACnD,CAAC;AACD,gBAAM,gBAAgB,+BAClB,WAAW,4BAAW,YAAY,OAAO,SAAS,CAAC,KACnD;AACJ,iBAAO,KAAK,aAAa;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,SAAS,QAAW;AACtB,WAAO,EAAE,UAAU,OAAO,YAAY,QAAW,MAAM,QAAW,QAAQ;AAAA,EAC5E;AAEA,MAAI,SAAS,MAAM;AACjB,WAAO,EAAE,UAAU,MAAM,YAAY,OAAO,MAAM,MAAM,QAAQ;AAAA,EAClE;AAEA,SAAO,EAAE,UAAU,MAAM,YAAY,MAAM,MAAM,QAAQ;AAC3D;","names":[]}
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
import React, { useEffect, useState } from "react";
|
|
3
3
|
import { CabinLogo } from "../icons/logo";
|
|
4
4
|
import { AFTER_SIGN_IN_URL, frontendApi, SIGN_IN_URL } from "../constants";
|
|
5
|
-
const SignInButton = (
|
|
5
|
+
const SignInButton = ({
|
|
6
|
+
children = "Continue to CabinID",
|
|
7
|
+
className = "max-w-48 pl-2 py-2 pr-4 bg-blue-600 rounded-full flex flex-row space-x-2 items-center hover:opacity-90 active:bg-blue-700"
|
|
8
|
+
}) => {
|
|
6
9
|
const [signInUrl, setSignInUrl] = useState("#");
|
|
7
10
|
useEffect(() => {
|
|
8
11
|
if (typeof window !== "undefined") {
|
|
@@ -27,10 +30,10 @@ const SignInButton = () => {
|
|
|
27
30
|
"a",
|
|
28
31
|
{
|
|
29
32
|
href: signInUrl,
|
|
30
|
-
className
|
|
33
|
+
className
|
|
31
34
|
},
|
|
32
35
|
/* @__PURE__ */ React.createElement(CabinLogo, null),
|
|
33
|
-
/* @__PURE__ */ React.createElement("span", { className: "text-white text-sm" },
|
|
36
|
+
/* @__PURE__ */ React.createElement("span", { className: "text-white text-sm" }, children)
|
|
34
37
|
);
|
|
35
38
|
};
|
|
36
39
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/SignInButton.tsx"],"sourcesContent":["'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { CabinLogo } from '../icons/logo';\nimport { AFTER_SIGN_IN_URL, frontendApi, SIGN_IN_URL } from '../constants';\n\nexport const SignInButton = () => {\n const [signInUrl, setSignInUrl] = useState('#');\n\n useEffect(() => {\n if (typeof window !== 'undefined') {\n const origin = typeof window === 'undefined' ? null : window.origin;\n if (!origin) {\n return;\n }\n const params = new URLSearchParams({\n redirect_url: `${origin}${AFTER_SIGN_IN_URL}` || '/',\n });\n\n let signInUrlTemp = '#';\n if (SIGN_IN_URL) {\n signInUrlTemp = SIGN_IN_URL.includes('?')\n ? `${SIGN_IN_URL}&${params.toString()}`\n : `${SIGN_IN_URL}?${params.toString()}`;\n } else if (frontendApi) {\n const protocol = frontendApi.includes('localhost') ? 'http' : 'https';\n signInUrlTemp = `${protocol}://${frontendApi}/sign-in?${params.toString()}`;\n }\n\n setSignInUrl(signInUrlTemp);\n }\n }, []);\n\n return (\n <a\n href={signInUrl}\n className
|
|
1
|
+
{"version":3,"sources":["../../../src/components/SignInButton.tsx"],"sourcesContent":["'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { CabinLogo } from '../icons/logo';\nimport { AFTER_SIGN_IN_URL, frontendApi, SIGN_IN_URL } from '../constants';\n\nexport interface SignInButtonProps {\n /**\n * Custom text to display on the button\n * @default \"Continue to CabinID\"\n */\n children?: React.ReactNode;\n /**\n * Custom CSS class name\n */\n className?: string;\n}\n\n/**\n * SignInButton component that handles user authentication redirect to CabinID\n */\nexport const SignInButton: React.FC<SignInButtonProps> = ({\n children = 'Continue to CabinID',\n className = 'max-w-48 pl-2 py-2 pr-4 bg-blue-600 rounded-full flex flex-row space-x-2 items-center hover:opacity-90 active:bg-blue-700',\n}) => {\n const [signInUrl, setSignInUrl] = useState('#');\n\n useEffect(() => {\n if (typeof window !== 'undefined') {\n const origin = typeof window === 'undefined' ? null : window.origin;\n if (!origin) {\n return;\n }\n const params = new URLSearchParams({\n redirect_url: `${origin}${AFTER_SIGN_IN_URL}` || '/',\n });\n\n let signInUrlTemp = '#';\n if (SIGN_IN_URL) {\n signInUrlTemp = SIGN_IN_URL.includes('?')\n ? `${SIGN_IN_URL}&${params.toString()}`\n : `${SIGN_IN_URL}?${params.toString()}`;\n } else if (frontendApi) {\n const protocol = frontendApi.includes('localhost') ? 'http' : 'https';\n signInUrlTemp = `${protocol}://${frontendApi}/sign-in?${params.toString()}`;\n }\n\n setSignInUrl(signInUrlTemp);\n }\n }, []);\n\n return (\n <a\n href={signInUrl}\n className={className}\n >\n <CabinLogo />\n <span className=\"text-white text-sm\">{children}</span>\n </a>\n );\n};\n"],"mappings":";AAEA,OAAO,SAAS,WAAW,gBAAgB;AAC3C,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB,aAAa,mBAAmB;AAiBrD,MAAM,eAA4C,CAAC;AAAA,EACxD,WAAW;AAAA,EACX,YAAY;AACd,MAAM;AACJ,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,GAAG;AAE9C,YAAU,MAAM;AACd,QAAI,OAAO,WAAW,aAAa;AACjC,YAAM,SAAS,OAAO,WAAW,cAAc,OAAO,OAAO;AAC7D,UAAI,CAAC,QAAQ;AACX;AAAA,MACF;AACA,YAAM,SAAS,IAAI,gBAAgB;AAAA,QACjC,cAAc,GAAG,MAAM,GAAG,iBAAiB,MAAM;AAAA,MACnD,CAAC;AAED,UAAI,gBAAgB;AACpB,UAAI,aAAa;AACf,wBAAgB,YAAY,SAAS,GAAG,IACpC,GAAG,WAAW,IAAI,OAAO,SAAS,CAAC,KACnC,GAAG,WAAW,IAAI,OAAO,SAAS,CAAC;AAAA,MACzC,WAAW,aAAa;AACtB,cAAM,WAAW,YAAY,SAAS,WAAW,IAAI,SAAS;AAC9D,wBAAgB,GAAG,QAAQ,MAAM,WAAW,YAAY,OAAO,SAAS,CAAC;AAAA,MAC3E;AAEA,mBAAa,aAAa;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM;AAAA,MACN;AAAA;AAAA,IAEA,oCAAC,eAAU;AAAA,IACX,oCAAC,UAAK,WAAU,wBAAsB,QAAS;AAAA,EACjD;AAEJ;","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import React, { useState } from "react";
|
|
3
3
|
import { useUser } from "../hooks/useUser";
|
|
4
|
-
import {
|
|
4
|
+
import { baseApiUrlV2 } from "../constants";
|
|
5
5
|
import { AFTER_SIGN_IN_URL, frontendApi } from "../constants";
|
|
6
6
|
const SignOutButton = ({
|
|
7
7
|
children = "Sign Out",
|
|
@@ -23,7 +23,7 @@ const SignOutButton = ({
|
|
|
23
23
|
try {
|
|
24
24
|
const token = getCookieValue("__client") || getCookieValue("__user");
|
|
25
25
|
if (token) {
|
|
26
|
-
await fetch(`${
|
|
26
|
+
await fetch(`${baseApiUrlV2}/auth/sign-out`, {
|
|
27
27
|
method: "POST",
|
|
28
28
|
headers: {
|
|
29
29
|
"Content-Type": "application/json",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/SignOutButton.tsx"],"sourcesContent":["'use client';\n\nimport React, { useState } from 'react';\nimport { useUser } from '../hooks/useUser';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/components/SignOutButton.tsx"],"sourcesContent":["'use client';\n\nimport React, { useState } from 'react';\nimport { useUser } from '../hooks/useUser';\nimport { baseApiUrlV2 } from '../constants';\nimport { AFTER_SIGN_IN_URL, frontendApi } from '../constants';\n\nexport interface SignOutButtonProps {\n /**\n * Custom text to display on the button\n * @default \"Sign Out\"\n */\n children?: React.ReactNode;\n /**\n * Custom CSS class name\n */\n className?: string;\n /**\n * Callback function called before sign out\n */\n onSignOutStart?: () => void;\n /**\n * Callback function called after successful sign out\n */\n onSignOutSuccess?: () => void;\n /**\n * Callback function called when sign out fails\n */\n onSignOutError?: (error: Error) => void;\n /**\n * Whether to show loading state\n * @default true\n */\n showLoading?: boolean;\n /**\n * Custom loading text\n * @default \"Signing out...\"\n */\n loadingText?: string;\n}\n\n/**\n * SignOutButton component that handles user logout with CabinID backend integration\n */\nexport const SignOutButton: React.FC<SignOutButtonProps> = ({\n children = 'Sign Out',\n className = 'px-4 py-2 bg-red-600 text-white rounded hover:bg-red-700 disabled:opacity-50',\n onSignOutStart,\n onSignOutSuccess,\n onSignOutError,\n showLoading = true,\n loadingText = 'Signing out...',\n}) => {\n const { signOut, isSignedIn, user } = useUser();\n const [isLoading, setIsLoading] = useState(false);\n\n const handleSignOut = async () => {\n if (isLoading || !isSignedIn) return;\n\n try {\n setIsLoading(true);\n onSignOutStart?.();\n\n // 1. Call backend sign-out endpoint first\n if (user) {\n try {\n const token = getCookieValue('__client') || getCookieValue('__user');\n if (token) {\n await fetch(`${baseApiUrlV2}/auth/sign-out`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${token}`,\n 'Origin': typeof window !== 'undefined' ? window.location.origin : '',\n },\n });\n }\n } catch (backendError) {\n console.warn('Backend sign-out failed, proceeding with logout:', backendError);\n }\n }\n\n // 2. Clear local cookies and storage\n await signOut(() => {\n // Prevent automatic redirect, we'll handle it manually\n });\n\n // 3. Redirect to CabinID logout page with redirect_url\n const origin = typeof window !== 'undefined' ? window.location.origin : '';\n const params = new URLSearchParams({\n redirect_url: `${origin}${AFTER_SIGN_IN_URL}`,\n });\n const logoutUrl = `https://${frontendApi}/logout?${params.toString()}`;\n\n onSignOutSuccess?.();\n window.location.href = logoutUrl;\n } catch (error) {\n console.error('Sign out error:', error);\n onSignOutError?.(error as Error);\n setIsLoading(false);\n }\n };\n\n // Helper function to get cookie value\n const getCookieValue = (name: string): string | null => {\n if (typeof window === 'undefined') return null;\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) {\n return parts.pop()?.split(';').shift() || null;\n }\n return null;\n };\n\n // Don't render if user is not signed in\n if (!isSignedIn) {\n return null;\n }\n\n return (\n <button\n onClick={handleSignOut}\n disabled={isLoading}\n className={className}\n type=\"button\"\n >\n {isLoading && showLoading ? loadingText : children}\n </button>\n );\n};"],"mappings":";AAEA,OAAO,SAAS,gBAAgB;AAChC,SAAS,eAAe;AACxB,SAAS,oBAAoB;AAC7B,SAAS,mBAAmB,mBAAmB;AAuCxC,MAAM,gBAA8C,CAAC;AAAA,EAC1D,WAAW;AAAA,EACX,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,cAAc;AAChB,MAAM;AACJ,QAAM,EAAE,SAAS,YAAY,KAAK,IAAI,QAAQ;AAC9C,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAEhD,QAAM,gBAAgB,YAAY;AAChC,QAAI,aAAa,CAAC,WAAY;AAE9B,QAAI;AACF,mBAAa,IAAI;AACjB;AAGA,UAAI,MAAM;AACR,YAAI;AACF,gBAAM,QAAQ,eAAe,UAAU,KAAK,eAAe,QAAQ;AACnE,cAAI,OAAO;AACT,kBAAM,MAAM,GAAG,YAAY,kBAAkB;AAAA,cAC3C,QAAQ;AAAA,cACR,SAAS;AAAA,gBACP,gBAAgB;AAAA,gBAChB,iBAAiB,UAAU,KAAK;AAAA,gBAChC,UAAU,OAAO,WAAW,cAAc,OAAO,SAAS,SAAS;AAAA,cACrE;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF,SAAS,cAAc;AACrB,kBAAQ,KAAK,oDAAoD,YAAY;AAAA,QAC/E;AAAA,MACF;AAGA,YAAM,QAAQ,MAAM;AAAA,MAEpB,CAAC;AAGD,YAAM,SAAS,OAAO,WAAW,cAAc,OAAO,SAAS,SAAS;AACxE,YAAM,SAAS,IAAI,gBAAgB;AAAA,QACjC,cAAc,GAAG,MAAM,GAAG,iBAAiB;AAAA,MAC7C,CAAC;AACD,YAAM,YAAY,WAAW,WAAW,WAAW,OAAO,SAAS,CAAC;AAEpE;AACA,aAAO,SAAS,OAAO;AAAA,IACzB,SAAS,OAAO;AACd,cAAQ,MAAM,mBAAmB,KAAK;AACtC,uDAAiB;AACjB,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF;AAGA,QAAM,iBAAiB,CAAC,SAAgC;AAxG1D;AAyGI,QAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,UAAM,QAAQ,KAAK,SAAS,MAAM;AAClC,UAAM,QAAQ,MAAM,MAAM,KAAK,IAAI,GAAG;AACtC,QAAI,MAAM,WAAW,GAAG;AACtB,eAAO,WAAM,IAAI,MAAV,mBAAa,MAAM,KAAK,YAAW;AAAA,IAC5C;AACA,WAAO;AAAA,EACT;AAGA,MAAI,CAAC,YAAY;AACf,WAAO;AAAA,EACT;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAS;AAAA,MACT,UAAU;AAAA,MACV;AAAA,MACA,MAAK;AAAA;AAAA,IAEJ,aAAa,cAAc,cAAc;AAAA,EAC5C;AAEJ;","names":[]}
|
|
@@ -18,6 +18,9 @@ const useUser = () => {
|
|
|
18
18
|
const signOut = async (...args) => {
|
|
19
19
|
deleteCookie(constants.Cookies.Client);
|
|
20
20
|
deleteCookie(constants.Cookies.User);
|
|
21
|
+
deleteCookie(constants.Cookies.Access);
|
|
22
|
+
deleteCookie(constants.Cookies.Refresh);
|
|
23
|
+
deleteCookie(constants.Cookies.UserId);
|
|
21
24
|
const hasCallback = typeof args[0] === "function";
|
|
22
25
|
if (hasCallback) {
|
|
23
26
|
const callback = args[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/hooks/useUser.ts"],"sourcesContent":["'use client';\n\nimport { deleteCookie } from 'cookies-next';\nimport {\n useAssertWrappedByCabinIdProvider,\n useUserContext,\n} from '../provider/context';\nimport { User } from '../types';\nimport {\n AFTER_SIGN_IN_URL,\n constants,\n frontendApi,\n SIGN_IN_URL,\n} from '../constants';\nimport { useRouter } from 'next/navigation';\n\nexport type SignOutCallback = () => void | Promise<any>;\n\nexport type SignOutOptions = {\n /**\n * Specify a specific session to sign out. Useful for\n * multi-session applications.\n */\n sessionId?: string;\n /**\n * Specify a redirect URL to navigate after sign out is complete.\n */\n redirectUrl?: string;\n};\n\nexport interface SignOut {\n (options?: SignOutOptions): Promise<void>;\n\n (signOutCallback?: SignOutCallback, options?: SignOutOptions): Promise<void>;\n}\n\ntype UseUserReturn =\n | {\n isLoaded: false;\n isSignedIn: undefined;\n user: undefined;\n signOut: SignOut;\n }\n | { isLoaded: true; isSignedIn: false; user: null; signOut: SignOut }\n | {\n isLoaded: true;\n isSignedIn: true;\n user: User;\n signOut: SignOut;\n };\n\nexport const useUser = (): UseUserReturn => {\n useAssertWrappedByCabinIdProvider('useUser');\n\n const user = useUserContext();\n const router = useRouter();\n\n const signOut = async (...args: any[]) => {\n deleteCookie(constants.Cookies.Client);\n deleteCookie(constants.Cookies.User);\n const hasCallback = typeof args[0] === 'function';\n if (hasCallback) {\n const callback = args[0];\n await callback();\n } else {\n if (SIGN_IN_URL) {\n router.push(SIGN_IN_URL);\n } else {\n if (typeof window !== 'undefined') {\n const origin = typeof window === 'undefined' ? null : window.origin;\n if (!origin) {\n return;\n }\n const params = new URLSearchParams({\n redirect_url: `${origin}${AFTER_SIGN_IN_URL}` || '/',\n });\n const signInUrlTemp = frontendApi\n ? `https://${frontendApi}/sign-in?${params.toString()}`\n : '#';\n router.push(signInUrlTemp);\n }\n }\n }\n };\n\n if (user === undefined) {\n return { isLoaded: false, isSignedIn: undefined, user: undefined, signOut };\n }\n\n if (user === null) {\n return { isLoaded: true, isSignedIn: false, user: null, signOut };\n }\n\n return { isLoaded: true, isSignedIn: true, user, signOut };\n};\n"],"mappings":";AAEA,SAAS,oBAAoB;AAC7B;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB;AAqCnB,MAAM,UAAU,MAAqB;AAC1C,oCAAkC,SAAS;AAE3C,QAAM,OAAO,eAAe;AAC5B,QAAM,SAAS,UAAU;AAEzB,QAAM,UAAU,UAAU,SAAgB;
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/useUser.ts"],"sourcesContent":["'use client';\n\nimport { deleteCookie } from 'cookies-next';\nimport {\n useAssertWrappedByCabinIdProvider,\n useUserContext,\n} from '../provider/context';\nimport { User } from '../types';\nimport {\n AFTER_SIGN_IN_URL,\n constants,\n frontendApi,\n SIGN_IN_URL,\n} from '../constants';\nimport { useRouter } from 'next/navigation';\n\nexport type SignOutCallback = () => void | Promise<any>;\n\nexport type SignOutOptions = {\n /**\n * Specify a specific session to sign out. Useful for\n * multi-session applications.\n */\n sessionId?: string;\n /**\n * Specify a redirect URL to navigate after sign out is complete.\n */\n redirectUrl?: string;\n};\n\nexport interface SignOut {\n (options?: SignOutOptions): Promise<void>;\n\n (signOutCallback?: SignOutCallback, options?: SignOutOptions): Promise<void>;\n}\n\ntype UseUserReturn =\n | {\n isLoaded: false;\n isSignedIn: undefined;\n user: undefined;\n signOut: SignOut;\n }\n | { isLoaded: true; isSignedIn: false; user: null; signOut: SignOut }\n | {\n isLoaded: true;\n isSignedIn: true;\n user: User;\n signOut: SignOut;\n };\n\nexport const useUser = (): UseUserReturn => {\n useAssertWrappedByCabinIdProvider('useUser');\n\n const user = useUserContext();\n const router = useRouter();\n\n const signOut = async (...args: any[]) => {\n // Clear V1 cookies\n deleteCookie(constants.Cookies.Client);\n deleteCookie(constants.Cookies.User);\n // Clear V2 cookies\n deleteCookie(constants.Cookies.Access);\n deleteCookie(constants.Cookies.Refresh);\n deleteCookie(constants.Cookies.UserId);\n const hasCallback = typeof args[0] === 'function';\n if (hasCallback) {\n const callback = args[0];\n await callback();\n } else {\n if (SIGN_IN_URL) {\n router.push(SIGN_IN_URL);\n } else {\n if (typeof window !== 'undefined') {\n const origin = typeof window === 'undefined' ? null : window.origin;\n if (!origin) {\n return;\n }\n const params = new URLSearchParams({\n redirect_url: `${origin}${AFTER_SIGN_IN_URL}` || '/',\n });\n const signInUrlTemp = frontendApi\n ? `https://${frontendApi}/sign-in?${params.toString()}`\n : '#';\n router.push(signInUrlTemp);\n }\n }\n }\n };\n\n if (user === undefined) {\n return { isLoaded: false, isSignedIn: undefined, user: undefined, signOut };\n }\n\n if (user === null) {\n return { isLoaded: true, isSignedIn: false, user: null, signOut };\n }\n\n return { isLoaded: true, isSignedIn: true, user, signOut };\n};\n"],"mappings":";AAEA,SAAS,oBAAoB;AAC7B;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB;AAqCnB,MAAM,UAAU,MAAqB;AAC1C,oCAAkC,SAAS;AAE3C,QAAM,OAAO,eAAe;AAC5B,QAAM,SAAS,UAAU;AAEzB,QAAM,UAAU,UAAU,SAAgB;AAExC,iBAAa,UAAU,QAAQ,MAAM;AACrC,iBAAa,UAAU,QAAQ,IAAI;AAEnC,iBAAa,UAAU,QAAQ,MAAM;AACrC,iBAAa,UAAU,QAAQ,OAAO;AACtC,iBAAa,UAAU,QAAQ,MAAM;AACrC,UAAM,cAAc,OAAO,KAAK,CAAC,MAAM;AACvC,QAAI,aAAa;AACf,YAAM,WAAW,KAAK,CAAC;AACvB,YAAM,SAAS;AAAA,IACjB,OAAO;AACL,UAAI,aAAa;AACf,eAAO,KAAK,WAAW;AAAA,MACzB,OAAO;AACL,YAAI,OAAO,WAAW,aAAa;AACjC,gBAAM,SAAS,OAAO,WAAW,cAAc,OAAO,OAAO;AAC7D,cAAI,CAAC,QAAQ;AACX;AAAA,UACF;AACA,gBAAM,SAAS,IAAI,gBAAgB;AAAA,YACjC,cAAc,GAAG,MAAM,GAAG,iBAAiB,MAAM;AAAA,UACnD,CAAC;AACD,gBAAM,gBAAgB,cAClB,WAAW,WAAW,YAAY,OAAO,SAAS,CAAC,KACnD;AACJ,iBAAO,KAAK,aAAa;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,SAAS,QAAW;AACtB,WAAO,EAAE,UAAU,OAAO,YAAY,QAAW,MAAM,QAAW,QAAQ;AAAA,EAC5E;AAEA,MAAI,SAAS,MAAM;AACjB,WAAO,EAAE,UAAU,MAAM,YAAY,OAAO,MAAM,MAAM,QAAQ;AAAA,EAClE;AAEA,SAAO,EAAE,UAAU,MAAM,YAAY,MAAM,MAAM,QAAQ;AAC3D;","names":[]}
|
|
@@ -1,3 +1,17 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
export
|
|
2
|
+
export interface SignInButtonProps {
|
|
3
|
+
/**
|
|
4
|
+
* Custom text to display on the button
|
|
5
|
+
* @default "Continue to CabinID"
|
|
6
|
+
*/
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
/**
|
|
9
|
+
* Custom CSS class name
|
|
10
|
+
*/
|
|
11
|
+
className?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* SignInButton component that handles user authentication redirect to CabinID
|
|
15
|
+
*/
|
|
16
|
+
export declare const SignInButton: React.FC<SignInButtonProps>;
|
|
3
17
|
//# sourceMappingURL=SignInButton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignInButton.d.ts","sourceRoot":"","sources":["../../../src/components/SignInButton.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"SignInButton.d.ts","sourceRoot":"","sources":["../../../src/components/SignInButton.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAuCpD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUser.d.ts","sourceRoot":"","sources":["../../../src/hooks/useUser.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAShC,MAAM,MAAM,eAAe,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAExD,MAAM,MAAM,cAAc,GAAG;IAC3B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,WAAW,OAAO;IACtB,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C,CAAC,eAAe,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9E;AAED,KAAK,aAAa,GACd;IACE,QAAQ,EAAE,KAAK,CAAC;IAChB,UAAU,EAAE,SAAS,CAAC;IACtB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB,GACD;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACnE;IACE,QAAQ,EAAE,IAAI,CAAC;IACf,UAAU,EAAE,IAAI,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEN,eAAO,MAAM,OAAO,QAAO,
|
|
1
|
+
{"version":3,"file":"useUser.d.ts","sourceRoot":"","sources":["../../../src/hooks/useUser.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAShC,MAAM,MAAM,eAAe,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAExD,MAAM,MAAM,cAAc,GAAG;IAC3B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,WAAW,OAAO;IACtB,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C,CAAC,eAAe,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9E;AAED,KAAK,aAAa,GACd;IACE,QAAQ,EAAE,KAAK,CAAC;IAChB,UAAU,EAAE,SAAS,CAAC;IACtB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB,GACD;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACnE;IACE,QAAQ,EAAE,IAAI,CAAC;IACf,UAAU,EAAE,IAAI,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEN,eAAO,MAAM,OAAO,QAAO,aAgD1B,CAAC"}
|