@cabin-id/nextjs 1.2.7 → 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 +7 -1
- 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/constants.js +18 -5
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/hooks/useUser.js +3 -0
- package/dist/cjs/hooks/useUser.js.map +1 -1
- package/dist/cjs/provider/main.provider.js +2 -2
- package/dist/cjs/provider/main.provider.js.map +1 -1
- package/dist/cjs/server/auth.js +2 -2
- package/dist/cjs/server/auth.js.map +1 -1
- package/dist/cjs/server/getCurrentUser.js +1 -1
- package/dist/cjs/server/getCurrentUser.js.map +1 -1
- package/dist/cjs/server/middleware.js +86 -0
- package/dist/cjs/server/middleware.js.map +1 -1
- package/dist/cjs/server/utils.js +3 -2
- package/dist/cjs/server/utils.js.map +1 -1
- package/dist/cjs/utils/initial.js +5 -3
- package/dist/cjs/utils/initial.js.map +1 -1
- package/dist/cjs/utils/isomorphicAtob.js +11 -4
- package/dist/cjs/utils/isomorphicAtob.js.map +1 -1
- package/dist/esm/components/SignInButton.js +8 -2
- 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/constants.js +14 -4
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/hooks/useUser.js +3 -0
- package/dist/esm/hooks/useUser.js.map +1 -1
- package/dist/esm/provider/main.provider.js +2 -2
- package/dist/esm/provider/main.provider.js.map +1 -1
- package/dist/esm/server/auth.js +2 -2
- package/dist/esm/server/auth.js.map +1 -1
- package/dist/esm/server/getCurrentUser.js +1 -1
- package/dist/esm/server/getCurrentUser.js.map +1 -1
- package/dist/esm/server/middleware.js +88 -1
- package/dist/esm/server/middleware.js.map +1 -1
- package/dist/esm/server/utils.js +3 -2
- package/dist/esm/server/utils.js.map +1 -1
- package/dist/esm/utils/initial.js +4 -2
- package/dist/esm/utils/initial.js.map +1 -1
- package/dist/esm/utils/isomorphicAtob.js +11 -4
- package/dist/esm/utils/isomorphicAtob.js.map +1 -1
- package/dist/types/components/SignInButton.d.ts.map +1 -1
- package/dist/types/constants.d.ts +8 -1
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/hooks/useUser.d.ts.map +1 -1
- package/dist/types/provider/main.provider.d.ts +5 -2
- package/dist/types/provider/main.provider.d.ts.map +1 -1
- package/dist/types/server/auth.d.ts +1 -1
- package/dist/types/server/auth.d.ts.map +1 -1
- package/dist/types/server/middleware.d.ts.map +1 -1
- package/dist/types/server/utils.d.ts +1 -1
- package/dist/types/server/utils.d.ts.map +1 -1
- package/dist/types/utils/initial.d.ts +1 -1
- package/dist/types/utils/initial.d.ts.map +1 -1
- package/dist/types/utils/isomorphicAtob.d.ts.map +1 -1
- package/package.json +10 -10
|
@@ -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 } 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
|
|
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":[]}
|
package/dist/esm/constants.js
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { parsePublishableKey } from "./utils/key";
|
|
2
2
|
import { joinPaths } from "./utils/path";
|
|
3
|
-
const API_URL = "https://api.cabinid.dev/";
|
|
3
|
+
const API_URL = process.env.NEXT_PUBLIC_CABIN_ID_API_URL || "https://api.cabinid.dev/";
|
|
4
4
|
const API_VERSION = "v1";
|
|
5
|
+
const API_VERSION_V2 = "v2";
|
|
5
6
|
const PUBLISHABLE_KEY = process.env.NEXT_PUBLIC_CABIN_ID_PUBLISH_KEY || "";
|
|
6
7
|
const SECRET_KEY = process.env.CABIN_ID_SECRET_KEY || "";
|
|
7
8
|
const SIGN_IN_URL = process.env.NEXT_PUBLIC_CABIN_ID_SIGN_IN_URL || "";
|
|
8
9
|
const SIGN_UP_URL = process.env.NEXT_PUBLIC_CABIN_ID_SIGN_UP_URL || "";
|
|
9
10
|
const AFTER_SIGN_IN_URL = process.env.NEXT_PUBLIC_CABIN_ID_AFTER_SIGN_IN_URL || "";
|
|
10
11
|
const AFTER_SIGN_UP_URL = process.env.NEXT_PUBLIC_CABIN_ID_AFTER_SIGN_UP_URL || "";
|
|
11
|
-
const
|
|
12
|
+
const getBaseApiUrl = (version = API_VERSION) => joinPaths(API_URL, version);
|
|
13
|
+
const baseApiUrl = getBaseApiUrl(API_VERSION);
|
|
14
|
+
const baseApiUrlV2 = getBaseApiUrl(API_VERSION_V2);
|
|
12
15
|
const frontendApi = parsePublishableKey(PUBLISHABLE_KEY);
|
|
13
16
|
const Attributes = {
|
|
14
17
|
AuthToken: "__cabinIdAuthToken",
|
|
@@ -21,11 +24,15 @@ const Attributes = {
|
|
|
21
24
|
const Cookies = {
|
|
22
25
|
Session: "__session",
|
|
23
26
|
Client: "__client",
|
|
24
|
-
User: "__user"
|
|
27
|
+
User: "__user",
|
|
28
|
+
Access: "__access",
|
|
29
|
+
Refresh: "__refresh",
|
|
30
|
+
UserId: "__userId"
|
|
25
31
|
};
|
|
26
32
|
const QueryParams = {
|
|
27
33
|
UserId: "user_id",
|
|
28
34
|
Token: "token",
|
|
35
|
+
RedirectUrl: "redirect_url",
|
|
29
36
|
CabinIdRedirectUrl: "__cabin_id_redirect_url"
|
|
30
37
|
};
|
|
31
38
|
const Headers = {
|
|
@@ -77,12 +84,15 @@ export {
|
|
|
77
84
|
AFTER_SIGN_UP_URL,
|
|
78
85
|
API_URL,
|
|
79
86
|
API_VERSION,
|
|
87
|
+
API_VERSION_V2,
|
|
80
88
|
PUBLISHABLE_KEY,
|
|
81
89
|
SECRET_KEY,
|
|
82
90
|
SIGN_IN_URL,
|
|
83
91
|
SIGN_UP_URL,
|
|
84
92
|
baseApiUrl,
|
|
93
|
+
baseApiUrlV2,
|
|
85
94
|
constants,
|
|
86
|
-
frontendApi
|
|
95
|
+
frontendApi,
|
|
96
|
+
getBaseApiUrl
|
|
87
97
|
};
|
|
88
98
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/constants.ts"],"sourcesContent":["import { parsePublishableKey } from './utils/key';\nimport { joinPaths } from './utils/path';\n\nexport const API_URL = 'https://api.cabinid.dev/';\n// export const API_URL = 'http://localhost:3001/';\nexport const API_VERSION = 'v1';\nexport const PUBLISHABLE_KEY =\n process.env.NEXT_PUBLIC_CABIN_ID_PUBLISH_KEY! || '';\nexport const SECRET_KEY = process.env.CABIN_ID_SECRET_KEY! || '';\nexport const SIGN_IN_URL =\n process.env.NEXT_PUBLIC_CABIN_ID_SIGN_IN_URL! || '';\nexport const SIGN_UP_URL =\n process.env.NEXT_PUBLIC_CABIN_ID_SIGN_UP_URL! || '';\nexport const AFTER_SIGN_IN_URL =\n process.env.NEXT_PUBLIC_CABIN_ID_AFTER_SIGN_IN_URL || '';\nexport const AFTER_SIGN_UP_URL =\n process.env.NEXT_PUBLIC_CABIN_ID_AFTER_SIGN_UP_URL || '';\n\nexport const
|
|
1
|
+
{"version":3,"sources":["../../src/constants.ts"],"sourcesContent":["import { parsePublishableKey } from './utils/key';\nimport { joinPaths } from './utils/path';\n\nexport const API_URL = process.env.NEXT_PUBLIC_CABIN_ID_API_URL || 'https://api.cabinid.dev/';\n// export const API_URL = 'http://localhost:3001/';\nexport const API_VERSION = 'v1';\nexport const API_VERSION_V2 = 'v2';\nexport const PUBLISHABLE_KEY =\n process.env.NEXT_PUBLIC_CABIN_ID_PUBLISH_KEY! || '';\nexport const SECRET_KEY = process.env.CABIN_ID_SECRET_KEY! || '';\nexport const SIGN_IN_URL =\n process.env.NEXT_PUBLIC_CABIN_ID_SIGN_IN_URL! || '';\nexport const SIGN_UP_URL =\n process.env.NEXT_PUBLIC_CABIN_ID_SIGN_UP_URL! || '';\nexport const AFTER_SIGN_IN_URL =\n process.env.NEXT_PUBLIC_CABIN_ID_AFTER_SIGN_IN_URL || '';\nexport const AFTER_SIGN_UP_URL =\n process.env.NEXT_PUBLIC_CABIN_ID_AFTER_SIGN_UP_URL || '';\n\nexport const getBaseApiUrl = (version: string = API_VERSION) => joinPaths(API_URL, version);\nexport const baseApiUrl = getBaseApiUrl(API_VERSION);\nexport const baseApiUrlV2 = getBaseApiUrl(API_VERSION_V2);\nexport const frontendApi = parsePublishableKey(PUBLISHABLE_KEY);\n\nconst Attributes = {\n AuthToken: '__cabinIdAuthToken',\n AuthSignature: '__cabinIdAuthSignature',\n AuthStatus: '__cabinIdAuthStatus',\n AuthReason: '__cabinIdAuthReason',\n AuthMessage: '__cabinIdAuthMessage',\n CabinIdUrl: '__cabinIdUrl',\n} as const;\n\nconst Cookies = {\n Session: '__session',\n Client: '__client',\n User: '__user',\n Access: '__access',\n Refresh: '__refresh',\n UserId: '__userId',\n} as const;\n\nconst QueryParams = {\n UserId: 'user_id',\n Token: 'token',\n RedirectUrl: 'redirect_url',\n CabinIdRedirectUrl: '__cabin_id_redirect_url',\n} as const;\n\nconst Headers = {\n AuthToken: 'x-cabin-id-auth-token',\n AuthSignature: 'x-cabin-id-auth-signature',\n AuthStatus: 'x-cabin-id-auth-status',\n AuthReason: 'x-cabin-id-auth-reason',\n AuthMessage: 'x-cabin-id-auth-message',\n CabinIdUrl: 'x-cabin-id-cabin-id-url',\n EnableDebug: 'x-cabin-id-debug',\n CabinIdRedirectTo: 'x-cabin-id-redirect-to',\n CloudFrontForwardedProto: 'cloudfront-forwarded-proto',\n Authorization: 'authorization',\n ForwardedPort: 'x-forwarded-port',\n ForwardedProto: 'x-forwarded-proto',\n ForwardedHost: 'x-forwarded-host',\n Accept: 'accept',\n Referrer: 'referer',\n UserAgent: 'user-agent',\n Origin: 'origin',\n Host: 'host',\n ContentType: 'content-type',\n SecFetchDest: 'sec-fetch-dest',\n Location: 'location',\n} as const;\n\nconst ContentTypes = {\n Json: 'application/json',\n} as const;\n\nconst NextHeaders = {\n NextRewrite: 'x-middleware-rewrite',\n NextResume: 'x-middleware-next',\n NextRedirect: 'Location',\n // Used by next to identify internal navigation for app router\n NextUrl: 'next-url',\n NextAction: 'next-action',\n // Used by next to identify internal navigation for pages router\n NextjsData: 'x-nextjs-data',\n} as const;\n\n/**\n * @internal\n */\nexport const constants = {\n Attributes,\n Cookies,\n Headers,\n ContentTypes,\n QueryParams,\n NextHeaders,\n} as const;\n\nexport type Constants = typeof constants;\n"],"mappings":"AAAA,SAAS,2BAA2B;AACpC,SAAS,iBAAiB;AAEnB,MAAM,UAAU,QAAQ,IAAI,gCAAgC;AAE5D,MAAM,cAAc;AACpB,MAAM,iBAAiB;AACvB,MAAM,kBACX,QAAQ,IAAI,oCAAqC;AAC5C,MAAM,aAAa,QAAQ,IAAI,uBAAwB;AACvD,MAAM,cACX,QAAQ,IAAI,oCAAqC;AAC5C,MAAM,cACX,QAAQ,IAAI,oCAAqC;AAC5C,MAAM,oBACX,QAAQ,IAAI,0CAA0C;AACjD,MAAM,oBACX,QAAQ,IAAI,0CAA0C;AAEjD,MAAM,gBAAgB,CAAC,UAAkB,gBAAgB,UAAU,SAAS,OAAO;AACnF,MAAM,aAAa,cAAc,WAAW;AAC5C,MAAM,eAAe,cAAc,cAAc;AACjD,MAAM,cAAc,oBAAoB,eAAe;AAE9D,MAAM,aAAa;AAAA,EACjB,WAAW;AAAA,EACX,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,YAAY;AACd;AAEA,MAAM,UAAU;AAAA,EACd,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AACV;AAEA,MAAM,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,aAAa;AAAA,EACb,oBAAoB;AACtB;AAEA,MAAM,UAAU;AAAA,EACd,WAAW;AAAA,EACX,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,mBAAmB;AAAA,EACnB,0BAA0B;AAAA,EAC1B,eAAe;AAAA,EACf,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,EACd,UAAU;AACZ;AAEA,MAAM,eAAe;AAAA,EACnB,MAAM;AACR;AAEA,MAAM,cAAc;AAAA,EAClB,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,cAAc;AAAA;AAAA,EAEd,SAAS;AAAA,EACT,YAAY;AAAA;AAAA,EAEZ,YAAY;AACd;AAKO,MAAM,YAAY;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","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,8 +1,8 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { CabinIDCoreProvider } from "./core.provider";
|
|
3
3
|
import { initialState } from "../utils/initial";
|
|
4
|
-
const CabinIDProvider = async ({ children }) => {
|
|
5
|
-
const state = await initialState();
|
|
4
|
+
const CabinIDProvider = async ({ children, apiVersion }) => {
|
|
5
|
+
const state = await initialState(apiVersion);
|
|
6
6
|
return /* @__PURE__ */ React.createElement(CabinIDCoreProvider, { ...state }, children);
|
|
7
7
|
};
|
|
8
8
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/provider/main.provider.tsx"],"sourcesContent":["import React from 'react';\nimport
|
|
1
|
+
{"version":3,"sources":["../../../src/provider/main.provider.tsx"],"sourcesContent":["import React from 'react';\nimport { CabinIDCoreProvider } from './core.provider';\nimport { initialState } from '../utils/initial';\n\ninterface CabinIDProviderProps {\n apiVersion?: string;\n children: React.ReactNode;\n}\n\nconst CabinIDProvider = async ({ children, apiVersion }: CabinIDProviderProps) => {\n const state = await initialState(apiVersion);\n return <CabinIDCoreProvider {...state}>{children}</CabinIDCoreProvider>;\n};\n\nexport { CabinIDProvider };\n"],"mappings":"AAAA,OAAO,WAAW;AAClB,SAAS,2BAA2B;AACpC,SAAS,oBAAoB;AAO7B,MAAM,kBAAkB,OAAO,EAAE,UAAU,WAAW,MAA4B;AAChF,QAAM,QAAQ,MAAM,aAAa,UAAU;AAC3C,SAAO,oCAAC,uBAAqB,GAAG,SAAQ,QAAS;AACnD;","names":[]}
|
package/dist/esm/server/auth.js
CHANGED
|
@@ -5,8 +5,8 @@ import { buildRequestLike, getAuthKeyFromRequest } from "./utils";
|
|
|
5
5
|
import { PUBLISHABLE_KEY, SIGN_IN_URL, SIGN_UP_URL } from "../constants";
|
|
6
6
|
import { createCabinIdRequest } from "../tokens/cabinIdRequest";
|
|
7
7
|
import { createGetAuth } from "./createGetAuth";
|
|
8
|
-
const auth = () => {
|
|
9
|
-
const request = buildRequestLike();
|
|
8
|
+
const auth = async () => {
|
|
9
|
+
const request = await buildRequestLike();
|
|
10
10
|
const authObject = createGetAuth()(request);
|
|
11
11
|
const cabinIdUrl = getAuthKeyFromRequest(request, "CabinIdUrl");
|
|
12
12
|
const redirectToSignIn = (opts = {}) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/server/auth.ts"],"sourcesContent":["import { notFound, redirect } from 'next/navigation';\nimport { AuthObject } from '../tokens/authObjects';\nimport { createRedirect, RedirectFun } from './createRedirect';\nimport { AuthProtect, createProtect } from './protect';\nimport { buildRequestLike, getAuthKeyFromRequest } from './utils';\nimport { PUBLISHABLE_KEY, SIGN_IN_URL, SIGN_UP_URL } from '../constants';\nimport { createCabinIdRequest } from '../tokens/cabinIdRequest';\nimport { createGetAuth } from './createGetAuth';\n\ntype Auth = AuthObject & {\n protect: AuthProtect;\n redirectToSignIn: RedirectFun<ReturnType<typeof redirect>>;\n};\n\nexport const auth = (): Auth => {\n const request = buildRequestLike();\n const authObject = createGetAuth()(request);\n\n const cabinIdUrl = getAuthKeyFromRequest(request, 'CabinIdUrl');\n\n const redirectToSignIn: RedirectFun<never> = (opts = {}) => {\n return createRedirect({\n redirectAdapter: redirect,\n baseUrl: createCabinIdRequest(request).cabinIdUrl.toString(),\n // TODO: Support runtime-value configuration of these options\n // via setting and reading headers from clerkMiddleware\n publishableKey: PUBLISHABLE_KEY,\n signInUrl: SIGN_IN_URL,\n signUpUrl: SIGN_UP_URL,\n }).redirectToSignIn({\n returnBackUrl:\n opts.returnBackUrl === null\n ? ''\n : opts.returnBackUrl || cabinIdUrl?.toString(),\n });\n };\n\n const protect = createProtect({\n request,\n authObject,\n redirectToSignIn,\n notFound,\n redirect,\n });\n\n return Object.assign(authObject, { protect, redirectToSignIn });\n};\n"],"mappings":"AAAA,SAAS,UAAU,gBAAgB;AAEnC,SAAS,sBAAmC;AAC5C,SAAsB,qBAAqB;AAC3C,SAAS,kBAAkB,6BAA6B;AACxD,SAAS,iBAAiB,aAAa,mBAAmB;AAC1D,SAAS,4BAA4B;AACrC,SAAS,qBAAqB;AAOvB,MAAM,OAAO,
|
|
1
|
+
{"version":3,"sources":["../../../src/server/auth.ts"],"sourcesContent":["import { notFound, redirect } from 'next/navigation';\nimport { AuthObject } from '../tokens/authObjects';\nimport { createRedirect, RedirectFun } from './createRedirect';\nimport { AuthProtect, createProtect } from './protect';\nimport { buildRequestLike, getAuthKeyFromRequest } from './utils';\nimport { PUBLISHABLE_KEY, SIGN_IN_URL, SIGN_UP_URL } from '../constants';\nimport { createCabinIdRequest } from '../tokens/cabinIdRequest';\nimport { createGetAuth } from './createGetAuth';\n\ntype Auth = AuthObject & {\n protect: AuthProtect;\n redirectToSignIn: RedirectFun<ReturnType<typeof redirect>>;\n};\n\nexport const auth = async (): Promise<Auth> => {\n const request = await buildRequestLike();\n const authObject = createGetAuth()(request);\n\n const cabinIdUrl = getAuthKeyFromRequest(request, 'CabinIdUrl');\n\n const redirectToSignIn: RedirectFun<never> = (opts = {}) => {\n return createRedirect({\n redirectAdapter: redirect,\n baseUrl: createCabinIdRequest(request).cabinIdUrl.toString(),\n // TODO: Support runtime-value configuration of these options\n // via setting and reading headers from clerkMiddleware\n publishableKey: PUBLISHABLE_KEY,\n signInUrl: SIGN_IN_URL,\n signUpUrl: SIGN_UP_URL,\n }).redirectToSignIn({\n returnBackUrl:\n opts.returnBackUrl === null\n ? ''\n : opts.returnBackUrl || cabinIdUrl?.toString(),\n });\n };\n\n const protect = createProtect({\n request,\n authObject,\n redirectToSignIn,\n notFound,\n redirect,\n });\n\n return Object.assign(authObject, { protect, redirectToSignIn });\n};\n"],"mappings":"AAAA,SAAS,UAAU,gBAAgB;AAEnC,SAAS,sBAAmC;AAC5C,SAAsB,qBAAqB;AAC3C,SAAS,kBAAkB,6BAA6B;AACxD,SAAS,iBAAiB,aAAa,mBAAmB;AAC1D,SAAS,4BAA4B;AACrC,SAAS,qBAAqB;AAOvB,MAAM,OAAO,YAA2B;AAC7C,QAAM,UAAU,MAAM,iBAAiB;AACvC,QAAM,aAAa,cAAc,EAAE,OAAO;AAE1C,QAAM,aAAa,sBAAsB,SAAS,YAAY;AAE9D,QAAM,mBAAuC,CAAC,OAAO,CAAC,MAAM;AAC1D,WAAO,eAAe;AAAA,MACpB,iBAAiB;AAAA,MACjB,SAAS,qBAAqB,OAAO,EAAE,WAAW,SAAS;AAAA;AAAA;AAAA,MAG3D,gBAAgB;AAAA,MAChB,WAAW;AAAA,MACX,WAAW;AAAA,IACb,CAAC,EAAE,iBAAiB;AAAA,MAClB,eACE,KAAK,kBAAkB,OACnB,KACA,KAAK,kBAAiB,yCAAY;AAAA,IAC1C,CAAC;AAAA,EACH;AAEA,QAAM,UAAU,cAAc;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,OAAO,OAAO,YAAY,EAAE,SAAS,iBAAiB,CAAC;AAChE;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/server/getCurrentUser.ts"],"sourcesContent":["import { User } from '../types';\nimport { auth } from './auth';\nimport { client } from '../utils/http';\n\nexport async function currentUser(): Promise<User | null> {\n const { userId } = auth();\n if (!userId) return null;\n return client.users.getUser(userId);\n}\n"],"mappings":"AACA,SAAS,YAAY;AACrB,SAAS,cAAc;AAEvB,eAAsB,cAAoC;AACxD,QAAM,EAAE,OAAO,IAAI,KAAK;
|
|
1
|
+
{"version":3,"sources":["../../../src/server/getCurrentUser.ts"],"sourcesContent":["import { User } from '../types';\nimport { auth } from './auth';\nimport { client } from '../utils/http';\n\nexport async function currentUser(): Promise<User | null> {\n const { userId } = await auth();\n if (!userId) return null;\n return client.users.getUser(userId);\n}\n"],"mappings":"AACA,SAAS,YAAY;AACrB,SAAS,cAAc;AAEvB,eAAsB,cAAoC;AACxD,QAAM,EAAE,OAAO,IAAI,MAAM,KAAK;AAC9B,MAAI,CAAC,OAAQ,QAAO;AACpB,SAAO,OAAO,MAAM,QAAQ,MAAM;AACpC;","names":[]}
|
|
@@ -4,7 +4,8 @@ import {
|
|
|
4
4
|
PUBLISHABLE_KEY,
|
|
5
5
|
SECRET_KEY,
|
|
6
6
|
SIGN_IN_URL,
|
|
7
|
-
SIGN_UP_URL
|
|
7
|
+
SIGN_UP_URL,
|
|
8
|
+
baseApiUrlV2
|
|
8
9
|
} from "../constants";
|
|
9
10
|
import { assertKey, decorateRequest, redirectAdapter } from "./utils";
|
|
10
11
|
import { cabinIdClient } from "./client";
|
|
@@ -60,6 +61,7 @@ const authMiddleware = (...args) => {
|
|
|
60
61
|
signUpUrl
|
|
61
62
|
};
|
|
62
63
|
const nextMiddleware = async (_request, _event) => {
|
|
64
|
+
var _a, _b, _c;
|
|
63
65
|
const accessToken = _request.nextUrl.searchParams.get(
|
|
64
66
|
constants.QueryParams.Token
|
|
65
67
|
);
|
|
@@ -74,8 +76,93 @@ const authMiddleware = (...args) => {
|
|
|
74
76
|
);
|
|
75
77
|
setCookieWithDefaults(response, constants.Cookies.Client, accessToken);
|
|
76
78
|
setCookieWithDefaults(response, constants.Cookies.User, userId);
|
|
79
|
+
setCookieWithDefaults(response, constants.Cookies.Access, accessToken);
|
|
80
|
+
setCookieWithDefaults(response, constants.Cookies.UserId, userId);
|
|
77
81
|
return response;
|
|
78
82
|
}
|
|
83
|
+
let currentAccessToken = ((_a = _request.cookies.get(constants.Cookies.Access)) == null ? void 0 : _a.value) || "";
|
|
84
|
+
let currentUserId = ((_b = _request.cookies.get(constants.Cookies.UserId)) == null ? void 0 : _b.value) || "";
|
|
85
|
+
let refreshToken = ((_c = _request.cookies.get(constants.Cookies.Refresh)) == null ? void 0 : _c.value) || "";
|
|
86
|
+
if ((!currentAccessToken || !currentUserId) && refreshToken) {
|
|
87
|
+
try {
|
|
88
|
+
const response = await fetch(`${baseApiUrlV2}/auth/refresh`, {
|
|
89
|
+
method: "POST",
|
|
90
|
+
headers: {
|
|
91
|
+
"Authorization": `Bearer ${refreshToken}`,
|
|
92
|
+
"Content-Type": "application/json"
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
if (response.ok) {
|
|
96
|
+
const data = await response.json();
|
|
97
|
+
const res = NextResponse.next();
|
|
98
|
+
setCookieWithDefaults(res, constants.Cookies.Access, data.accessToken, { maxAge: 900 });
|
|
99
|
+
setCookieWithDefaults(res, constants.Cookies.Refresh, data.refreshToken, { maxAge: 2592e3 });
|
|
100
|
+
setCookieWithDefaults(res, constants.Cookies.Client, data.accessToken);
|
|
101
|
+
setCookieWithDefaults(res, constants.Cookies.User, data.userId || currentUserId);
|
|
102
|
+
setCookieWithDefaults(res, constants.Cookies.UserId, data.userId || currentUserId);
|
|
103
|
+
currentAccessToken = data.accessToken;
|
|
104
|
+
currentUserId = data.userId || currentUserId;
|
|
105
|
+
const cabinIdRequest2 = createCabinIdRequest(_request);
|
|
106
|
+
const requestState2 = await cabinIdClient.authenticateRequest(
|
|
107
|
+
cabinIdRequest2,
|
|
108
|
+
options
|
|
109
|
+
);
|
|
110
|
+
const authObject2 = requestState2.toAuth();
|
|
111
|
+
const redirectToSignIn2 = createMiddlewareRedirectToSignIn(cabinIdRequest2);
|
|
112
|
+
const protect2 = createMiddlewareProtect(
|
|
113
|
+
cabinIdRequest2,
|
|
114
|
+
authObject2,
|
|
115
|
+
redirectToSignIn2
|
|
116
|
+
);
|
|
117
|
+
const authObjWithMethods2 = Object.assign(
|
|
118
|
+
authObject2,
|
|
119
|
+
{ protect: protect2, redirectToSignIn: redirectToSignIn2 }
|
|
120
|
+
);
|
|
121
|
+
const mergeCookies = (target, source) => {
|
|
122
|
+
if (source instanceof NextResponse && target instanceof NextResponse) {
|
|
123
|
+
source.cookies.getAll().forEach((cookie) => {
|
|
124
|
+
target.cookies.set(cookie.name, cookie.value, {
|
|
125
|
+
domain: cookie.domain,
|
|
126
|
+
expires: cookie.expires,
|
|
127
|
+
httpOnly: cookie.httpOnly,
|
|
128
|
+
maxAge: cookie.maxAge,
|
|
129
|
+
path: cookie.path,
|
|
130
|
+
sameSite: cookie.sameSite,
|
|
131
|
+
secure: cookie.secure
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
return target;
|
|
136
|
+
};
|
|
137
|
+
let handlerResult2 = res;
|
|
138
|
+
try {
|
|
139
|
+
const result = await (handler == null ? void 0 : handler(() => authObjWithMethods2, _request, _event));
|
|
140
|
+
if (result) {
|
|
141
|
+
handlerResult2 = mergeCookies(result, res);
|
|
142
|
+
}
|
|
143
|
+
} catch (e) {
|
|
144
|
+
handlerResult2 = mergeCookies(handleControlFlowErrors(e, cabinIdRequest2, requestState2), res);
|
|
145
|
+
}
|
|
146
|
+
if (isRedirect(handlerResult2)) {
|
|
147
|
+
return serverRedirectWithAuth(cabinIdRequest2, handlerResult2);
|
|
148
|
+
}
|
|
149
|
+
decorateRequest(
|
|
150
|
+
cabinIdRequest2,
|
|
151
|
+
handlerResult2,
|
|
152
|
+
requestState2,
|
|
153
|
+
options.secretKey
|
|
154
|
+
);
|
|
155
|
+
if (requestState2.headers) {
|
|
156
|
+
requestState2.headers.forEach((value, key) => {
|
|
157
|
+
handlerResult2.headers.append(key, value);
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
return handlerResult2;
|
|
161
|
+
}
|
|
162
|
+
} catch (error) {
|
|
163
|
+
console.error("Token refresh failed:", error);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
79
166
|
const cabinIdRequest = createCabinIdRequest(_request);
|
|
80
167
|
const requestState = await cabinIdClient.authenticateRequest(
|
|
81
168
|
cabinIdRequest,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/server/middleware.ts"],"sourcesContent":["import { NextMiddleware, NextResponse } from \"next/server\";\nimport {\n constants,\n PUBLISHABLE_KEY,\n SECRET_KEY,\n SIGN_IN_URL,\n SIGN_UP_URL,\n} from \"../constants\";\nimport { assertKey, decorateRequest, redirectAdapter } from \"./utils\";\nimport {\n NextMiddlewareEvtParam,\n NextMiddlewareRequestParam,\n NextMiddlewareReturn,\n} from \"./type\";\nimport { cabinIdClient } from \"./client\";\nimport { CabinIdRequest, createCabinIdRequest } from \"../tokens/cabinIdRequest\";\nimport { AuthProtect, createProtect } from \"./protect\";\nimport { createRedirect, RedirectFun } from \"./createRedirect\";\nimport { isRedirect, setHeader } from \"../utils/response\";\nimport { RequestState } from \"../tokens/authStatus\";\nimport { AuthObject } from \"../tokens/authObjects\";\nimport { serverRedirectWithAuth } from \"./serverRedirectWithAuth\";\nimport { AuthenticateRequestOptions } from \"../api/factory\";\n\nconst CONTROL_FLOW_ERROR = {\n FORCE_NOT_FOUND: \"CABIN_ID_PROTECT_REWRITE\",\n REDIRECT_TO_URL: \"CABIN_ID_PROTECT_REDIRECT_TO_URL\",\n REDIRECT_TO_SIGN_IN: \"CABIN_ID_PROTECT_REDIRECT_TO_SIGN_IN\",\n};\n\nexport type CabinIdMiddlewareAuthObject = AuthObject & {\n protect: AuthProtect;\n redirectToSignIn: RedirectFun<Response>;\n};\n\nexport type CabinIdMiddlewareAuth = () => CabinIdMiddlewareAuthObject;\n\nexport interface AuthMiddleware {\n /**\n * @example\n * export default clerkMiddleware((auth, request, event) => { ... }, options);\n */\n (\n handler: CabinIdMiddlewareHandler,\n options?: CabinIdMiddlewareOptions\n ): NextMiddleware;\n /**\n * @example\n * export default clerkMiddleware(options);\n */\n (options?: CabinIdMiddlewareOptions): NextMiddleware;\n /**\n * @example\n * export default clerkMiddleware;\n */\n (\n request: NextMiddlewareRequestParam,\n event: NextMiddlewareEvtParam\n ): NextMiddlewareReturn;\n}\n\ntype CabinIdMiddlewareHandler = (\n auth: CabinIdMiddlewareAuth,\n request: NextMiddlewareRequestParam,\n event: NextMiddlewareEvtParam\n) => NextMiddlewareReturn;\n\nexport type CabinIdMiddlewareOptions = AuthenticateRequestOptions;\n\n// Hàm tiện ích để thiết lập cookie với cấu hình mặc định\nconst setCookieWithDefaults = (\n response: NextResponse,\n name: string,\n value: string,\n options: { maxAge?: number } = {}\n) => {\n response.cookies.set(name, value, {\n maxAge: options.maxAge || 60 * 60 * 24 * 30, // 30 days mặc định\n sameSite: \"lax\",\n secure: true,\n });\n};\n\nconst parseRequestAndEvent = (args: unknown[]) => {\n return [\n args[0] instanceof Request ? args[0] : undefined,\n args[0] instanceof Request ? args[1] : undefined,\n ] as [\n NextMiddlewareRequestParam | undefined,\n NextMiddlewareEvtParam | undefined,\n ];\n};\n\nconst parseHandlerAndOptions = (args: unknown[]) => {\n return [\n typeof args[0] === \"function\" ? args[0] : undefined,\n (args.length === 2\n ? args[1]\n : typeof args[0] === \"function\"\n ? {}\n : args[0]) || {},\n ] as [CabinIdMiddlewareHandler | undefined, CabinIdMiddlewareOptions];\n};\n\nconst authMiddleware: AuthMiddleware = (...args: unknown[]): any => {\n const [request, event] = parseRequestAndEvent(args);\n const [handler, params] = parseHandlerAndOptions(args);\n\n const publishableKey = assertKey(\n params.publishableKey || PUBLISHABLE_KEY,\n () => {\n throw new Error(\"Publish Key is not exist\");\n }\n );\n const secretKey = assertKey(params.secretKey || SECRET_KEY, () => {\n throw new Error(\"Secret Key is not valid\");\n });\n\n const signInUrl = params.signInUrl || SIGN_IN_URL;\n const signUpUrl = params.signUpUrl || SIGN_UP_URL;\n\n const options = {\n ...params,\n publishableKey,\n secretKey,\n signInUrl,\n signUpUrl,\n };\n\n const nextMiddleware: NextMiddleware = async (_request, _event) => {\n const accessToken = _request.nextUrl.searchParams.get(\n constants.QueryParams.Token\n );\n const userId = _request.nextUrl.searchParams.get(\n constants.QueryParams.UserId\n );\n\n if (accessToken && userId) {\n const url = _request.nextUrl;\n const path = url.pathname;\n const response = NextResponse.redirect(\n new URL(path || \"/\", _request.url)\n );\n \n // Sử dụng hàm tiện ích để thiết lập cookie với sameSite=\"lax\" và secure=true\n setCookieWithDefaults(response, constants.Cookies.Client, accessToken);\n setCookieWithDefaults(response, constants.Cookies.User, userId);\n\n return response;\n }\n\n const cabinIdRequest = createCabinIdRequest(_request);\n\n const requestState = await cabinIdClient.authenticateRequest(\n cabinIdRequest,\n options\n );\n\n const authObject = requestState.toAuth();\n\n const redirectToSignIn = createMiddlewareRedirectToSignIn(cabinIdRequest);\n\n const protect = createMiddlewareProtect(\n cabinIdRequest,\n authObject,\n redirectToSignIn\n );\n\n const authObjWithMethods: CabinIdMiddlewareAuthObject = Object.assign(\n authObject,\n { protect, redirectToSignIn }\n );\n\n let handlerResult: Response = NextResponse.next();\n\n try {\n handlerResult =\n (await handler?.(() => authObjWithMethods, _request, _event)) ||\n handlerResult;\n } catch (e: any) {\n handlerResult = handleControlFlowErrors(e, cabinIdRequest, requestState);\n }\n\n if (isRedirect(handlerResult)) {\n return serverRedirectWithAuth(cabinIdRequest, handlerResult);\n }\n\n decorateRequest(\n cabinIdRequest,\n handlerResult,\n requestState,\n options.secretKey\n );\n\n if (requestState.headers) {\n requestState.headers.forEach((value, key) => {\n handlerResult.headers.append(key, value);\n });\n }\n\n return handlerResult;\n };\n\n if (request && event) {\n return nextMiddleware(request, event);\n }\n\n return nextMiddleware;\n};\n\nexport { authMiddleware };\n\nconst createMiddlewareRedirectToSignIn = (\n cabinIdRequest: CabinIdRequest\n): CabinIdMiddlewareAuthObject[\"redirectToSignIn\"] => {\n return (opts = {}) => {\n const err = new Error(CONTROL_FLOW_ERROR.REDIRECT_TO_SIGN_IN) as any;\n err.returnBackUrl =\n opts.returnBackUrl === null\n ? \"\"\n : opts.returnBackUrl || cabinIdRequest.cabinIdUrl.toString();\n throw err;\n };\n};\n\nconst createMiddlewareProtect = (\n cabinIdRequest: CabinIdRequest,\n authObject: AuthObject,\n redirectToSignIn: RedirectFun<Response>\n): CabinIdMiddlewareAuthObject[\"protect\"] => {\n return ((_: any, options: any) => {\n const notFound = () => {\n throw new Error(CONTROL_FLOW_ERROR.FORCE_NOT_FOUND) as any;\n };\n\n const redirect = (url: string) => {\n const err = new Error(CONTROL_FLOW_ERROR.REDIRECT_TO_URL) as any;\n err.redirectUrl = url;\n throw err;\n };\n\n return createProtect({\n request: cabinIdRequest,\n redirect,\n notFound,\n authObject,\n redirectToSignIn,\n })(options);\n }) as AuthProtect;\n};\n\nconst handleControlFlowErrors = (\n e: any,\n cabinIdRequest: CabinIdRequest,\n requestState: RequestState\n): Response => {\n switch (e.message) {\n case CONTROL_FLOW_ERROR.FORCE_NOT_FOUND:\n return setHeader(\n NextResponse.rewrite(\n `${cabinIdRequest.cabinIdUrl.origin}/cabin_${Date.now()}`\n ),\n constants.Headers.AuthReason,\n \"protect-rewrite\"\n );\n case CONTROL_FLOW_ERROR.REDIRECT_TO_URL:\n return redirectAdapter(e.redirectUrl);\n case CONTROL_FLOW_ERROR.REDIRECT_TO_SIGN_IN:\n return createRedirect({\n redirectAdapter,\n baseUrl: cabinIdRequest.cabinIdUrl,\n signInUrl: requestState.signInUrl,\n signUpUrl: requestState.signUpUrl,\n publishableKey: requestState.publishableKey,\n }).redirectToSignIn({ returnBackUrl: e.returnBackUrl });\n default:\n throw e;\n }\n};"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/server/middleware.ts"],"sourcesContent":["import { NextMiddleware, NextResponse } from \"next/server\";\nimport {\n constants,\n PUBLISHABLE_KEY,\n SECRET_KEY,\n SIGN_IN_URL,\n SIGN_UP_URL,\n baseApiUrlV2,\n} from \"../constants\";\nimport { assertKey, decorateRequest, redirectAdapter } from \"./utils\";\nimport {\n NextMiddlewareEvtParam,\n NextMiddlewareRequestParam,\n NextMiddlewareReturn,\n} from \"./type\";\nimport { cabinIdClient } from \"./client\";\nimport { CabinIdRequest, createCabinIdRequest } from \"../tokens/cabinIdRequest\";\nimport { AuthProtect, createProtect } from \"./protect\";\nimport { createRedirect, RedirectFun } from \"./createRedirect\";\nimport { isRedirect, setHeader } from \"../utils/response\";\nimport { RequestState } from \"../tokens/authStatus\";\nimport { AuthObject } from \"../tokens/authObjects\";\nimport { serverRedirectWithAuth } from \"./serverRedirectWithAuth\";\nimport { AuthenticateRequestOptions } from \"../api/factory\";\n\nconst CONTROL_FLOW_ERROR = {\n FORCE_NOT_FOUND: \"CABIN_ID_PROTECT_REWRITE\",\n REDIRECT_TO_URL: \"CABIN_ID_PROTECT_REDIRECT_TO_URL\",\n REDIRECT_TO_SIGN_IN: \"CABIN_ID_PROTECT_REDIRECT_TO_SIGN_IN\",\n};\n\nexport type CabinIdMiddlewareAuthObject = AuthObject & {\n protect: AuthProtect;\n redirectToSignIn: RedirectFun<Response>;\n};\n\nexport type CabinIdMiddlewareAuth = () => CabinIdMiddlewareAuthObject;\n\nexport interface AuthMiddleware {\n /**\n * @example\n * export default clerkMiddleware((auth, request, event) => { ... }, options);\n */\n (\n handler: CabinIdMiddlewareHandler,\n options?: CabinIdMiddlewareOptions\n ): NextMiddleware;\n /**\n * @example\n * export default clerkMiddleware(options);\n */\n (options?: CabinIdMiddlewareOptions): NextMiddleware;\n /**\n * @example\n * export default clerkMiddleware;\n */\n (\n request: NextMiddlewareRequestParam,\n event: NextMiddlewareEvtParam\n ): NextMiddlewareReturn;\n}\n\ntype CabinIdMiddlewareHandler = (\n auth: CabinIdMiddlewareAuth,\n request: NextMiddlewareRequestParam,\n event: NextMiddlewareEvtParam\n) => NextMiddlewareReturn;\n\nexport type CabinIdMiddlewareOptions = AuthenticateRequestOptions;\n\n// Hàm tiện ích để thiết lập cookie với cấu hình mặc định\nconst setCookieWithDefaults = (\n response: NextResponse,\n name: string,\n value: string,\n options: { maxAge?: number } = {}\n) => {\n response.cookies.set(name, value, {\n maxAge: options.maxAge || 60 * 60 * 24 * 30, // 30 days mặc định\n sameSite: \"lax\",\n secure: true,\n });\n};\n\nconst parseRequestAndEvent = (args: unknown[]) => {\n return [\n args[0] instanceof Request ? args[0] : undefined,\n args[0] instanceof Request ? args[1] : undefined,\n ] as [\n NextMiddlewareRequestParam | undefined,\n NextMiddlewareEvtParam | undefined,\n ];\n};\n\nconst parseHandlerAndOptions = (args: unknown[]) => {\n return [\n typeof args[0] === \"function\" ? args[0] : undefined,\n (args.length === 2\n ? args[1]\n : typeof args[0] === \"function\"\n ? {}\n : args[0]) || {},\n ] as [CabinIdMiddlewareHandler | undefined, CabinIdMiddlewareOptions];\n};\n\nconst authMiddleware: AuthMiddleware = (...args: unknown[]): any => {\n const [request, event] = parseRequestAndEvent(args);\n const [handler, params] = parseHandlerAndOptions(args);\n\n const publishableKey = assertKey(\n params.publishableKey || PUBLISHABLE_KEY,\n () => {\n throw new Error(\"Publish Key is not exist\");\n }\n );\n const secretKey = assertKey(params.secretKey || SECRET_KEY, () => {\n throw new Error(\"Secret Key is not valid\");\n });\n\n const signInUrl = params.signInUrl || SIGN_IN_URL;\n const signUpUrl = params.signUpUrl || SIGN_UP_URL;\n\n const options = {\n ...params,\n publishableKey,\n secretKey,\n signInUrl,\n signUpUrl,\n };\n\n const nextMiddleware: NextMiddleware = async (_request, _event) => {\n const accessToken = _request.nextUrl.searchParams.get(\n constants.QueryParams.Token\n );\n const userId = _request.nextUrl.searchParams.get(\n constants.QueryParams.UserId\n );\n\n if (accessToken && userId) {\n const url = _request.nextUrl;\n const path = url.pathname;\n const response = NextResponse.redirect(\n new URL(path || \"/\", _request.url)\n );\n\n // Sử dụng hàm tiện ích để thiết lập cookie với sameSite=\"lax\" và secure=true\n setCookieWithDefaults(response, constants.Cookies.Client, accessToken);\n setCookieWithDefaults(response, constants.Cookies.User, userId);\n setCookieWithDefaults(response, constants.Cookies.Access, accessToken);\n setCookieWithDefaults(response, constants.Cookies.UserId, userId);\n\n return response;\n }\n\n // Get tokens from cookies for refresh logic\n let currentAccessToken = _request.cookies.get(constants.Cookies.Access)?.value || '';\n let currentUserId = _request.cookies.get(constants.Cookies.UserId)?.value || '';\n let refreshToken = _request.cookies.get(constants.Cookies.Refresh)?.value || '';\n\n // Check if we need to refresh the token\n if ((!currentAccessToken || !currentUserId) && refreshToken) {\n try {\n const response = await fetch(`${baseApiUrlV2}/auth/refresh`, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${refreshToken}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (response.ok) {\n const data = await response.json();\n const res = NextResponse.next();\n\n // Set new tokens in cookies\n setCookieWithDefaults(res, constants.Cookies.Access, data.accessToken, { maxAge: 900 }); // 15 minutes\n setCookieWithDefaults(res, constants.Cookies.Refresh, data.refreshToken, { maxAge: 2592000 }); // 30 days\n setCookieWithDefaults(res, constants.Cookies.Client, data.accessToken);\n setCookieWithDefaults(res, constants.Cookies.User, data.userId || currentUserId);\n setCookieWithDefaults(res, constants.Cookies.UserId, data.userId || currentUserId);\n\n // Update current tokens for subsequent processing\n currentAccessToken = data.accessToken;\n currentUserId = data.userId || currentUserId;\n\n // Continue with normal middleware processing but use the refreshed response\n const cabinIdRequest = createCabinIdRequest(_request);\n const requestState = await cabinIdClient.authenticateRequest(\n cabinIdRequest,\n options\n );\n\n const authObject = requestState.toAuth();\n const redirectToSignIn = createMiddlewareRedirectToSignIn(cabinIdRequest);\n const protect = createMiddlewareProtect(\n cabinIdRequest,\n authObject,\n redirectToSignIn\n );\n\n const authObjWithMethods: CabinIdMiddlewareAuthObject = Object.assign(\n authObject,\n { protect, redirectToSignIn }\n );\n\nconst mergeCookies = (target: Response, source: Response) => {\n if (source instanceof NextResponse && target instanceof NextResponse) {\n source.cookies.getAll().forEach((cookie) => {\n target.cookies.set(cookie.name, cookie.value, {\n domain: cookie.domain,\n expires: cookie.expires,\n httpOnly: cookie.httpOnly,\n maxAge: cookie.maxAge,\n path: cookie.path,\n sameSite: cookie.sameSite,\n secure: cookie.secure,\n });\n });\n }\n return target;\n};\n\n let handlerResult: Response = res;\n\n try {\n const result = await handler?.(() => authObjWithMethods, _request, _event);\n if (result) {\n handlerResult = mergeCookies(result as NextResponse, res);\n }\n } catch (e: any) {\n handlerResult = mergeCookies(handleControlFlowErrors(e, cabinIdRequest, requestState) as NextResponse, res);\n }\n\n if (isRedirect(handlerResult)) {\n return serverRedirectWithAuth(cabinIdRequest, handlerResult as NextResponse);\n }\n\n decorateRequest(\n cabinIdRequest,\n handlerResult as NextResponse,\n requestState,\n options.secretKey\n );\n\n if (requestState.headers) {\n requestState.headers.forEach((value, key) => {\n handlerResult.headers.append(key, value);\n });\n }\n\n return handlerResult;\n }\n } catch (error) {\n console.error('Token refresh failed:', error);\n }\n }\n\n const cabinIdRequest = createCabinIdRequest(_request);\n\n const requestState = await cabinIdClient.authenticateRequest(\n cabinIdRequest,\n options\n );\n\n const authObject = requestState.toAuth();\n\n const redirectToSignIn = createMiddlewareRedirectToSignIn(cabinIdRequest);\n\n const protect = createMiddlewareProtect(\n cabinIdRequest,\n authObject,\n redirectToSignIn\n );\n\n const authObjWithMethods: CabinIdMiddlewareAuthObject = Object.assign(\n authObject,\n { protect, redirectToSignIn }\n );\n\n let handlerResult: Response = NextResponse.next();\n\n try {\n handlerResult =\n (await handler?.(() => authObjWithMethods, _request, _event)) ||\n handlerResult;\n } catch (e: any) {\n handlerResult = handleControlFlowErrors(e, cabinIdRequest, requestState);\n }\n\n if (isRedirect(handlerResult)) {\n return serverRedirectWithAuth(cabinIdRequest, handlerResult);\n }\n\n decorateRequest(\n cabinIdRequest,\n handlerResult,\n requestState,\n options.secretKey\n );\n\n if (requestState.headers) {\n requestState.headers.forEach((value, key) => {\n handlerResult.headers.append(key, value);\n });\n }\n\n return handlerResult;\n };\n\n if (request && event) {\n return nextMiddleware(request, event);\n }\n\n return nextMiddleware;\n};\n\nexport { authMiddleware };\n\nconst createMiddlewareRedirectToSignIn = (\n cabinIdRequest: CabinIdRequest\n): CabinIdMiddlewareAuthObject[\"redirectToSignIn\"] => {\n return (opts = {}) => {\n const err = new Error(CONTROL_FLOW_ERROR.REDIRECT_TO_SIGN_IN) as any;\n err.returnBackUrl =\n opts.returnBackUrl === null\n ? \"\"\n : opts.returnBackUrl || cabinIdRequest.cabinIdUrl.toString();\n throw err;\n };\n};\n\nconst createMiddlewareProtect = (\n cabinIdRequest: CabinIdRequest,\n authObject: AuthObject,\n redirectToSignIn: RedirectFun<Response>\n): CabinIdMiddlewareAuthObject[\"protect\"] => {\n return ((_: any, options: any) => {\n const notFound = () => {\n throw new Error(CONTROL_FLOW_ERROR.FORCE_NOT_FOUND) as any;\n };\n\n const redirect = (url: string) => {\n const err = new Error(CONTROL_FLOW_ERROR.REDIRECT_TO_URL) as any;\n err.redirectUrl = url;\n throw err;\n };\n\n return createProtect({\n request: cabinIdRequest,\n redirect,\n notFound,\n authObject,\n redirectToSignIn,\n })(options);\n }) as AuthProtect;\n};\n\nconst handleControlFlowErrors = (\n e: any,\n cabinIdRequest: CabinIdRequest,\n requestState: RequestState\n): Response => {\n switch (e.message) {\n case CONTROL_FLOW_ERROR.FORCE_NOT_FOUND:\n return setHeader(\n NextResponse.rewrite(\n `${cabinIdRequest.cabinIdUrl.origin}/cabin_${Date.now()}`\n ),\n constants.Headers.AuthReason,\n \"protect-rewrite\"\n );\n case CONTROL_FLOW_ERROR.REDIRECT_TO_URL:\n return redirectAdapter(e.redirectUrl);\n case CONTROL_FLOW_ERROR.REDIRECT_TO_SIGN_IN:\n return createRedirect({\n redirectAdapter,\n baseUrl: cabinIdRequest.cabinIdUrl,\n signInUrl: requestState.signInUrl,\n signUpUrl: requestState.signUpUrl,\n publishableKey: requestState.publishableKey,\n }).redirectToSignIn({ returnBackUrl: e.returnBackUrl });\n default:\n throw e;\n }\n};"],"mappings":"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","names":["cabinIdRequest","requestState","authObject","redirectToSignIn","protect","authObjWithMethods","handlerResult"]}
|
package/dist/esm/server/utils.js
CHANGED
|
@@ -69,10 +69,11 @@ function decorateRequest(req, res, requestState, secretKey) {
|
|
|
69
69
|
}
|
|
70
70
|
return res;
|
|
71
71
|
}
|
|
72
|
-
const buildRequestLike = () => {
|
|
72
|
+
const buildRequestLike = async () => {
|
|
73
73
|
try {
|
|
74
74
|
const { headers } = require("next/headers");
|
|
75
|
-
|
|
75
|
+
const headersList = await headers();
|
|
76
|
+
return new NextRequest("https://placeholder.com", { headers: headersList });
|
|
76
77
|
} catch (e) {
|
|
77
78
|
if (e && "message" in e && typeof e.message === "string" && (e.message.toLowerCase().includes("Dynamic server usage".toLowerCase()) || e.message.toLowerCase().includes(
|
|
78
79
|
"This page needs to bail out of prerendering".toLowerCase()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/server/utils.ts"],"sourcesContent":["import { NextResponse, NextRequest } from 'next/server';\nimport { constants } from '../constants';\nimport { CabinIdRequest } from '../tokens/cabinIdRequest';\nimport { RequestLike } from './type';\n\nexport function assertKey(key: string, onError: () => never): string {\n if (!key) {\n onError();\n }\n\n return key;\n}\n\nexport const apiEndpointUnauthorizedNextResponse = () => {\n return NextResponse.json(null, { status: 401, statusText: 'Unauthorized' });\n};\n\nexport const redirectAdapter = (url: string | URL) => {\n return NextResponse.redirect(url, {\n headers: { [constants.Headers.CabinIdRedirectTo]: 'true' },\n });\n};\n\nconst OVERRIDE_HEADERS = 'x-middleware-override-headers';\nconst MIDDLEWARE_HEADER_PREFIX = 'x-middleware-request' as string;\n\nexport const setRequestHeadersOnNextResponse = (\n res: NextResponse | Response,\n req: Request,\n newHeaders: Record<string, string>\n) => {\n if (!res.headers.get(OVERRIDE_HEADERS)) {\n // Emulate a user setting overrides by explicitly adding the required nextjs headers\n // https://github.com/vercel/next.js/pull/41380\n // @ts-expect-error\n res.headers.set(OVERRIDE_HEADERS, [...req.headers.keys()]);\n req.headers.forEach((val, key) => {\n res.headers.set(`${MIDDLEWARE_HEADER_PREFIX}-${key}`, val);\n });\n }\n\n // Now that we have normalised res to include overrides, just append the new header\n Object.entries(newHeaders).forEach(([key, val]) => {\n res.headers.set(\n OVERRIDE_HEADERS,\n `${res.headers.get(OVERRIDE_HEADERS)},${key}`\n );\n res.headers.set(`${MIDDLEWARE_HEADER_PREFIX}-${key}`, val);\n });\n};\n\n/**\n * Compute a cryptographic signature from a session token and provided secret key. Used to validate that the token has not been modified when transferring between middleware and the Next.js origin.\n */\nfunction createTokenSignature(token: string, key: string): string {\n return `${token}${key}`;\n}\n\ntype RequestState = any;\n\n// Auth result will be set as both a query param & header when applicable\nexport function decorateRequest(\n req: CabinIdRequest,\n res: Response,\n requestState: RequestState,\n secretKey: string\n): Response {\n const { token } = requestState;\n\n // pass-through case, convert to next()\n if (!res) {\n res = NextResponse.next();\n }\n\n // redirect() case, return early\n if (res.headers.get(constants.NextHeaders.NextRedirect)) {\n return res;\n }\n\n let rewriteURL;\n\n // next() case, convert to a rewrite\n if (res.headers.get(constants.NextHeaders.NextResume) === '1') {\n res.headers.delete(constants.NextHeaders.NextResume);\n rewriteURL = new URL(req.url);\n }\n\n // rewrite() case, set auth result only if origin remains the same\n const rewriteURLHeader = res.headers.get(constants.NextHeaders.NextRewrite);\n\n if (rewriteURLHeader) {\n const reqURL = new URL(req.url);\n rewriteURL = new URL(rewriteURLHeader);\n\n // if the origin has changed, return early\n if (rewriteURL.origin !== reqURL.origin) {\n return res;\n }\n }\n\n if (rewriteURL) {\n setRequestHeadersOnNextResponse(res, req, {\n [constants.Headers.AuthToken]: token || '',\n [constants.Headers.AuthSignature]: token\n ? createTokenSignature(token, secretKey)\n : '',\n });\n const origin = rewriteURL?.origin;\n const pathName = rewriteURL?.pathname;\n\n res.headers.set(\n constants.NextHeaders.NextRewrite,\n `${origin}${pathName || ''}`\n );\n }\n return res;\n}\n\nexport const buildRequestLike = () => {\n try {\n // Dynamically import next/headers, otherwise Next12 apps will break\n // because next/headers was introduced in next@13\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { headers } = require('next/headers');\n return new NextRequest('https://placeholder.com', { headers:
|
|
1
|
+
{"version":3,"sources":["../../../src/server/utils.ts"],"sourcesContent":["import { NextResponse, NextRequest } from 'next/server';\nimport { constants } from '../constants';\nimport { CabinIdRequest } from '../tokens/cabinIdRequest';\nimport { RequestLike } from './type';\n\nexport function assertKey(key: string, onError: () => never): string {\n if (!key) {\n onError();\n }\n\n return key;\n}\n\nexport const apiEndpointUnauthorizedNextResponse = () => {\n return NextResponse.json(null, { status: 401, statusText: 'Unauthorized' });\n};\n\nexport const redirectAdapter = (url: string | URL) => {\n return NextResponse.redirect(url, {\n headers: { [constants.Headers.CabinIdRedirectTo]: 'true' },\n });\n};\n\nconst OVERRIDE_HEADERS = 'x-middleware-override-headers';\nconst MIDDLEWARE_HEADER_PREFIX = 'x-middleware-request' as string;\n\nexport const setRequestHeadersOnNextResponse = (\n res: NextResponse | Response,\n req: Request,\n newHeaders: Record<string, string>\n) => {\n if (!res.headers.get(OVERRIDE_HEADERS)) {\n // Emulate a user setting overrides by explicitly adding the required nextjs headers\n // https://github.com/vercel/next.js/pull/41380\n // @ts-expect-error\n res.headers.set(OVERRIDE_HEADERS, [...req.headers.keys()]);\n req.headers.forEach((val, key) => {\n res.headers.set(`${MIDDLEWARE_HEADER_PREFIX}-${key}`, val);\n });\n }\n\n // Now that we have normalised res to include overrides, just append the new header\n Object.entries(newHeaders).forEach(([key, val]) => {\n res.headers.set(\n OVERRIDE_HEADERS,\n `${res.headers.get(OVERRIDE_HEADERS)},${key}`\n );\n res.headers.set(`${MIDDLEWARE_HEADER_PREFIX}-${key}`, val);\n });\n};\n\n/**\n * Compute a cryptographic signature from a session token and provided secret key. Used to validate that the token has not been modified when transferring between middleware and the Next.js origin.\n */\nfunction createTokenSignature(token: string, key: string): string {\n return `${token}${key}`;\n}\n\ntype RequestState = any;\n\n// Auth result will be set as both a query param & header when applicable\nexport function decorateRequest(\n req: CabinIdRequest,\n res: Response,\n requestState: RequestState,\n secretKey: string\n): Response {\n const { token } = requestState;\n\n // pass-through case, convert to next()\n if (!res) {\n res = NextResponse.next();\n }\n\n // redirect() case, return early\n if (res.headers.get(constants.NextHeaders.NextRedirect)) {\n return res;\n }\n\n let rewriteURL;\n\n // next() case, convert to a rewrite\n if (res.headers.get(constants.NextHeaders.NextResume) === '1') {\n res.headers.delete(constants.NextHeaders.NextResume);\n rewriteURL = new URL(req.url);\n }\n\n // rewrite() case, set auth result only if origin remains the same\n const rewriteURLHeader = res.headers.get(constants.NextHeaders.NextRewrite);\n\n if (rewriteURLHeader) {\n const reqURL = new URL(req.url);\n rewriteURL = new URL(rewriteURLHeader);\n\n // if the origin has changed, return early\n if (rewriteURL.origin !== reqURL.origin) {\n return res;\n }\n }\n\n if (rewriteURL) {\n setRequestHeadersOnNextResponse(res, req, {\n [constants.Headers.AuthToken]: token || '',\n [constants.Headers.AuthSignature]: token\n ? createTokenSignature(token, secretKey)\n : '',\n });\n const origin = rewriteURL?.origin;\n const pathName = rewriteURL?.pathname;\n\n res.headers.set(\n constants.NextHeaders.NextRewrite,\n `${origin}${pathName || ''}`\n );\n }\n return res;\n}\n\nexport const buildRequestLike = async () => {\n try {\n // Dynamically import next/headers, otherwise Next12 apps will break\n // because next/headers was introduced in next@13\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { headers } = require('next/headers');\n const headersList = await headers();\n return new NextRequest('https://placeholder.com', { headers: headersList });\n } catch (e: any) {\n if (\n e &&\n 'message' in e &&\n typeof e.message === 'string' &&\n (e.message.toLowerCase().includes('Dynamic server usage'.toLowerCase()) ||\n e.message\n .toLowerCase()\n .includes(\n 'This page needs to bail out of prerendering'.toLowerCase()\n ))\n ) {\n throw e;\n }\n\n throw new Error(\n `CabinID: auth() and currentUser() are only supported in App Router (/app directory).\\nIf you're using /pages, try getAuth() instead.\\nOriginal error: ${e}`\n );\n }\n};\n\nexport function getCustomAttributeFromRequest(\n req: RequestLike,\n key: string\n): string | null | undefined {\n // @ts-expect-error - TS doesn't like indexing into RequestLike\n return key in req ? req[key] : undefined;\n}\n\nexport function getAuthKeyFromRequest(\n req: RequestLike,\n key: keyof typeof constants.Attributes\n): string | null | undefined {\n return (\n getCustomAttributeFromRequest(req, constants.Attributes[key]) ||\n getHeader(req, constants.Headers[key])\n );\n}\n\nexport function getHeader(\n req: RequestLike,\n name: string\n): string | null | undefined {\n if (isNextRequest(req)) {\n return req.headers.get(name);\n }\n\n // If no header has been determined for IncomingMessage case, check if available within private `socket` headers\n // When deployed to vercel, req.headers for API routes is a `IncomingHttpHeaders` key-val object which does not follow\n // the Headers spec so the name is no longer case-insensitive.\n return (\n req.headers[name] ||\n req.headers[name.toLowerCase()] ||\n (req.socket as any)?._httpMessage?.getHeader(name)\n );\n}\n\nfunction isNextRequest(val: unknown): val is NextRequest {\n try {\n const { headers, nextUrl, cookies } = (val || {}) as NextRequest;\n return (\n typeof headers?.get === 'function' &&\n typeof nextUrl?.searchParams.get === 'function' &&\n typeof cookies?.get === 'function'\n );\n } catch (e) {\n return false;\n }\n}\n\nexport function getCookie(req: RequestLike, name: string): string | undefined {\n if (isNextRequest(req)) {\n // Nextjs broke semver in the 13.0.0 -> 13.0.1 release, so even though\n // this should be RequestCookie in all updated apps. In order to support apps\n // using v13.0.0 still, we explicitly add the string type\n // https://github.com/vercel/next.js/pull/41526\n const reqCookieOrString = req.cookies.get(name) as\n | ReturnType<NextRequest['cookies']['get']>\n | string\n | undefined;\n if (!reqCookieOrString) {\n return undefined;\n }\n return typeof reqCookieOrString === 'string'\n ? reqCookieOrString\n : reqCookieOrString.value;\n }\n return req.cookies[name];\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
"use server";
|
|
2
2
|
import { cookies } from "next/headers";
|
|
3
3
|
import { constants } from "../constants";
|
|
4
|
-
import {
|
|
5
|
-
|
|
4
|
+
import { createBackendApiClient } from "../api/factory";
|
|
5
|
+
import { SECRET_KEY } from "../constants";
|
|
6
|
+
const initialState = async (apiVersion) => {
|
|
6
7
|
var _a;
|
|
7
8
|
const cookiesStore = await cookies();
|
|
8
9
|
const userId = ((_a = cookiesStore.get(constants.Cookies.User)) == null ? void 0 : _a.value) || null;
|
|
9
10
|
let user = null;
|
|
10
11
|
if (userId) {
|
|
12
|
+
const client = createBackendApiClient({ secretKey: SECRET_KEY, apiVersion });
|
|
11
13
|
user = await client.users.getUser(userId);
|
|
12
14
|
}
|
|
13
15
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/initial.ts"],"sourcesContent":["'use server';\n\nimport { cookies } from 'next/headers';\nimport { constants } from '../constants';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/initial.ts"],"sourcesContent":["'use server';\n\nimport { cookies } from 'next/headers';\nimport { constants } from '../constants';\nimport { createBackendApiClient } from '../api/factory';\nimport { SECRET_KEY } from '../constants';\n\nexport const initialState = async (apiVersion?: string) => {\n const cookiesStore = await cookies();\n const userId = cookiesStore.get(constants.Cookies.User)?.value || null;\n let user = null;\n\n if (userId) {\n const client = createBackendApiClient({ secretKey: SECRET_KEY, apiVersion });\n user = await client.users.getUser(userId);\n }\n\n return {\n userId,\n user,\n };\n};\n"],"mappings":";AAEA,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAC1B,SAAS,8BAA8B;AACvC,SAAS,kBAAkB;AAEpB,MAAM,eAAe,OAAO,eAAwB;AAP3D;AAQE,QAAM,eAAe,MAAM,QAAQ;AACnC,QAAM,WAAS,kBAAa,IAAI,UAAU,QAAQ,IAAI,MAAvC,mBAA0C,UAAS;AAClE,MAAI,OAAO;AAEX,MAAI,QAAQ;AACV,UAAM,SAAS,uBAAuB,EAAE,WAAW,YAAY,WAAW,CAAC;AAC3E,WAAO,MAAM,OAAO,MAAM,QAAQ,MAAM;AAAA,EAC1C;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
const isomorphicAtob = (data) => {
|
|
2
|
-
if (
|
|
3
|
-
return
|
|
4
|
-
}
|
|
5
|
-
|
|
2
|
+
if (!data || typeof data !== "string") {
|
|
3
|
+
return "";
|
|
4
|
+
}
|
|
5
|
+
try {
|
|
6
|
+
if (typeof atob !== "undefined" && typeof atob === "function") {
|
|
7
|
+
return atob(data);
|
|
8
|
+
} else if (typeof global !== "undefined" && global.Buffer) {
|
|
9
|
+
return new global.Buffer(data, "base64").toString();
|
|
10
|
+
}
|
|
11
|
+
} catch (error) {
|
|
12
|
+
return "";
|
|
6
13
|
}
|
|
7
14
|
return data;
|
|
8
15
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/isomorphicAtob.ts"],"sourcesContent":["/**\n * A function that decodes a string of data which has been encoded using base-64 encoding.\n * Uses `atob` if available, otherwise uses `Buffer` from `global`. If neither are available, returns the data as-is.\n */\nexport const isomorphicAtob = (data: string) => {\n if (typeof atob !== 'undefined' && typeof atob === 'function') {\n
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/isomorphicAtob.ts"],"sourcesContent":["/**\n * A function that decodes a string of data which has been encoded using base-64 encoding.\n * Uses `atob` if available, otherwise uses `Buffer` from `global`. If neither are available, returns the data as-is.\n */\nexport const isomorphicAtob = (data: string) => {\n if (!data || typeof data !== 'string') {\n return '';\n }\n\n try {\n if (typeof atob !== 'undefined' && typeof atob === 'function') {\n return atob(data);\n } else if (typeof global !== 'undefined' && global.Buffer) {\n return new global.Buffer(data, 'base64').toString();\n }\n } catch (error) {\n // Return empty string if base64 decoding fails\n return '';\n }\n\n return data;\n};\n"],"mappings":"AAIO,MAAM,iBAAiB,CAAC,SAAiB;AAC9C,MAAI,CAAC,QAAQ,OAAO,SAAS,UAAU;AACrC,WAAO;AAAA,EACT;AAEA,MAAI;AACF,QAAI,OAAO,SAAS,eAAe,OAAO,SAAS,YAAY;AAC7D,aAAO,KAAK,IAAI;AAAA,IAClB,WAAW,OAAO,WAAW,eAAe,OAAO,QAAQ;AACzD,aAAO,IAAI,OAAO,OAAO,MAAM,QAAQ,EAAE,SAAS;AAAA,IACpD;AAAA,EACF,SAAS,OAAO;AAEd,WAAO;AAAA,EACT;AAEA,SAAO;AACT;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,12 +1,15 @@
|
|
|
1
|
-
export declare const API_URL
|
|
1
|
+
export declare const API_URL: string;
|
|
2
2
|
export declare const API_VERSION = "v1";
|
|
3
|
+
export declare const API_VERSION_V2 = "v2";
|
|
3
4
|
export declare const PUBLISHABLE_KEY: string;
|
|
4
5
|
export declare const SECRET_KEY: string;
|
|
5
6
|
export declare const SIGN_IN_URL: string;
|
|
6
7
|
export declare const SIGN_UP_URL: string;
|
|
7
8
|
export declare const AFTER_SIGN_IN_URL: string;
|
|
8
9
|
export declare const AFTER_SIGN_UP_URL: string;
|
|
10
|
+
export declare const getBaseApiUrl: (version?: string) => string;
|
|
9
11
|
export declare const baseApiUrl: string;
|
|
12
|
+
export declare const baseApiUrlV2: string;
|
|
10
13
|
export declare const frontendApi: string | null;
|
|
11
14
|
/**
|
|
12
15
|
* @internal
|
|
@@ -24,6 +27,9 @@ export declare const constants: {
|
|
|
24
27
|
readonly Session: "__session";
|
|
25
28
|
readonly Client: "__client";
|
|
26
29
|
readonly User: "__user";
|
|
30
|
+
readonly Access: "__access";
|
|
31
|
+
readonly Refresh: "__refresh";
|
|
32
|
+
readonly UserId: "__userId";
|
|
27
33
|
};
|
|
28
34
|
readonly Headers: {
|
|
29
35
|
readonly AuthToken: "x-cabin-id-auth-token";
|
|
@@ -54,6 +60,7 @@ export declare const constants: {
|
|
|
54
60
|
readonly QueryParams: {
|
|
55
61
|
readonly UserId: "user_id";
|
|
56
62
|
readonly Token: "token";
|
|
63
|
+
readonly RedirectUrl: "redirect_url";
|
|
57
64
|
readonly CabinIdRedirectUrl: "__cabin_id_redirect_url";
|
|
58
65
|
};
|
|
59
66
|
readonly NextHeaders: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,QAAyE,CAAC;AAE9F,eAAO,MAAM,WAAW,OAAO,CAAC;AAChC,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,eAAe,QACyB,CAAC;AACtD,eAAO,MAAM,UAAU,QAAyC,CAAC;AACjE,eAAO,MAAM,WAAW,QAC6B,CAAC;AACtD,eAAO,MAAM,WAAW,QAC6B,CAAC;AACtD,eAAO,MAAM,iBAAiB,QAC4B,CAAC;AAC3D,eAAO,MAAM,iBAAiB,QAC4B,CAAC;AAE3D,eAAO,MAAM,aAAa,GAAI,UAAS,MAAoB,WAAgC,CAAC;AAC5F,eAAO,MAAM,UAAU,QAA6B,CAAC;AACrD,eAAO,MAAM,YAAY,QAAgC,CAAC;AAC1D,eAAO,MAAM,WAAW,eAAuC,CAAC;AAkEhE;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOZ,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,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"}
|