@cabin-id/nextjs 1.2.6 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/SignInButton.js +7 -1
- package/dist/cjs/components/SignInButton.js.map +1 -1
- package/dist/cjs/constants.js +18 -5
- package/dist/cjs/constants.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 +6 -4
- 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/constants.js +14 -4
- package/dist/esm/constants.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 +5 -3
- 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/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
|
@@ -46,7 +46,13 @@ const SignInButton = () => {
|
|
|
46
46
|
const params = new URLSearchParams({
|
|
47
47
|
redirect_url: `${origin}${import_constants.AFTER_SIGN_IN_URL}` || "/"
|
|
48
48
|
});
|
|
49
|
-
|
|
49
|
+
let signInUrlTemp = "#";
|
|
50
|
+
if (import_constants.SIGN_IN_URL) {
|
|
51
|
+
signInUrlTemp = import_constants.SIGN_IN_URL.includes("?") ? `${import_constants.SIGN_IN_URL}&${params.toString()}` : `${import_constants.SIGN_IN_URL}?${params.toString()}`;
|
|
52
|
+
} else if (import_constants.frontendApi) {
|
|
53
|
+
const protocol = import_constants.frontendApi.includes("localhost") ? "http" : "https";
|
|
54
|
+
signInUrlTemp = `${protocol}://${import_constants.frontendApi}/sign-in?${params.toString()}`;
|
|
55
|
+
}
|
|
50
56
|
setSignInUrl(signInUrlTemp);
|
|
51
57
|
}
|
|
52
58
|
}, []);
|
|
@@ -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 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
|
|
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=\"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 <CabinLogo />\n <span className=\"text-white text-sm\">Continue to CabinID</span>\n </a>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAA2C;AAC3C,kBAA0B;AAC1B,uBAA4D;AAErD,MAAM,eAAe,MAAM;AAChC,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,WAAU;AAAA;AAAA,IAEV,6BAAAA,QAAA,cAAC,2BAAU;AAAA,IACX,6BAAAA,QAAA,cAAC,UAAK,WAAU,wBAAqB,qBAAmB;AAAA,EAC1D;AAEJ;","names":["React"]}
|
package/dist/cjs/constants.js
CHANGED
|
@@ -22,26 +22,32 @@ __export(constants_exports, {
|
|
|
22
22
|
AFTER_SIGN_UP_URL: () => AFTER_SIGN_UP_URL,
|
|
23
23
|
API_URL: () => API_URL,
|
|
24
24
|
API_VERSION: () => API_VERSION,
|
|
25
|
+
API_VERSION_V2: () => API_VERSION_V2,
|
|
25
26
|
PUBLISHABLE_KEY: () => PUBLISHABLE_KEY,
|
|
26
27
|
SECRET_KEY: () => SECRET_KEY,
|
|
27
28
|
SIGN_IN_URL: () => SIGN_IN_URL,
|
|
28
29
|
SIGN_UP_URL: () => SIGN_UP_URL,
|
|
29
30
|
baseApiUrl: () => baseApiUrl,
|
|
31
|
+
baseApiUrlV2: () => baseApiUrlV2,
|
|
30
32
|
constants: () => constants,
|
|
31
|
-
frontendApi: () => frontendApi
|
|
33
|
+
frontendApi: () => frontendApi,
|
|
34
|
+
getBaseApiUrl: () => getBaseApiUrl
|
|
32
35
|
});
|
|
33
36
|
module.exports = __toCommonJS(constants_exports);
|
|
34
37
|
var import_key = require("./utils/key");
|
|
35
38
|
var import_path = require("./utils/path");
|
|
36
|
-
const API_URL = "https://api.cabinid.dev/";
|
|
39
|
+
const API_URL = process.env.NEXT_PUBLIC_CABIN_ID_API_URL || "https://api.cabinid.dev/";
|
|
37
40
|
const API_VERSION = "v1";
|
|
41
|
+
const API_VERSION_V2 = "v2";
|
|
38
42
|
const PUBLISHABLE_KEY = process.env.NEXT_PUBLIC_CABIN_ID_PUBLISH_KEY || "";
|
|
39
43
|
const SECRET_KEY = process.env.CABIN_ID_SECRET_KEY || "";
|
|
40
44
|
const SIGN_IN_URL = process.env.NEXT_PUBLIC_CABIN_ID_SIGN_IN_URL || "";
|
|
41
45
|
const SIGN_UP_URL = process.env.NEXT_PUBLIC_CABIN_ID_SIGN_UP_URL || "";
|
|
42
46
|
const AFTER_SIGN_IN_URL = process.env.NEXT_PUBLIC_CABIN_ID_AFTER_SIGN_IN_URL || "";
|
|
43
47
|
const AFTER_SIGN_UP_URL = process.env.NEXT_PUBLIC_CABIN_ID_AFTER_SIGN_UP_URL || "";
|
|
44
|
-
const
|
|
48
|
+
const getBaseApiUrl = (version = API_VERSION) => (0, import_path.joinPaths)(API_URL, version);
|
|
49
|
+
const baseApiUrl = getBaseApiUrl(API_VERSION);
|
|
50
|
+
const baseApiUrlV2 = getBaseApiUrl(API_VERSION_V2);
|
|
45
51
|
const frontendApi = (0, import_key.parsePublishableKey)(PUBLISHABLE_KEY);
|
|
46
52
|
const Attributes = {
|
|
47
53
|
AuthToken: "__cabinIdAuthToken",
|
|
@@ -54,11 +60,15 @@ const Attributes = {
|
|
|
54
60
|
const Cookies = {
|
|
55
61
|
Session: "__session",
|
|
56
62
|
Client: "__client",
|
|
57
|
-
User: "__user"
|
|
63
|
+
User: "__user",
|
|
64
|
+
Access: "__access",
|
|
65
|
+
Refresh: "__refresh",
|
|
66
|
+
UserId: "__userId"
|
|
58
67
|
};
|
|
59
68
|
const QueryParams = {
|
|
60
69
|
UserId: "user_id",
|
|
61
70
|
Token: "token",
|
|
71
|
+
RedirectUrl: "redirect_url",
|
|
62
72
|
CabinIdRedirectUrl: "__cabin_id_redirect_url"
|
|
63
73
|
};
|
|
64
74
|
const Headers = {
|
|
@@ -111,12 +121,15 @@ const constants = {
|
|
|
111
121
|
AFTER_SIGN_UP_URL,
|
|
112
122
|
API_URL,
|
|
113
123
|
API_VERSION,
|
|
124
|
+
API_VERSION_V2,
|
|
114
125
|
PUBLISHABLE_KEY,
|
|
115
126
|
SECRET_KEY,
|
|
116
127
|
SIGN_IN_URL,
|
|
117
128
|
SIGN_UP_URL,
|
|
118
129
|
baseApiUrl,
|
|
130
|
+
baseApiUrlV2,
|
|
119
131
|
constants,
|
|
120
|
-
frontendApi
|
|
132
|
+
frontendApi,
|
|
133
|
+
getBaseApiUrl
|
|
121
134
|
});
|
|
122
135
|
//# 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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAoC;AACpC,kBAA0B;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,oBAAgB,uBAAU,SAAS,OAAO;AACnF,MAAM,aAAa,cAAc,WAAW;AAC5C,MAAM,eAAe,cAAc,cAAc;AACjD,MAAM,kBAAc,gCAAoB,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":[]}
|
|
@@ -34,8 +34,8 @@ module.exports = __toCommonJS(main_provider_exports);
|
|
|
34
34
|
var import_react = __toESM(require("react"));
|
|
35
35
|
var import_core = require("./core.provider");
|
|
36
36
|
var import_initial = require("../utils/initial");
|
|
37
|
-
const CabinIDProvider = async ({ children }) => {
|
|
38
|
-
const state = await (0, import_initial.initialState)();
|
|
37
|
+
const CabinIDProvider = async ({ children, apiVersion }) => {
|
|
38
|
+
const state = await (0, import_initial.initialState)(apiVersion);
|
|
39
39
|
return /* @__PURE__ */ import_react.default.createElement(import_core.CabinIDCoreProvider, { ...state }, children);
|
|
40
40
|
};
|
|
41
41
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -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;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,kBAAoC;AACpC,qBAA6B;AAO7B,MAAM,kBAAkB,OAAO,EAAE,UAAU,WAAW,MAA4B;AAChF,QAAM,QAAQ,UAAM,6BAAa,UAAU;AAC3C,SAAO,6BAAAA,QAAA,cAAC,mCAAqB,GAAG,SAAQ,QAAS;AACnD;","names":["React"]}
|
package/dist/cjs/server/auth.js
CHANGED
|
@@ -28,8 +28,8 @@ var import_utils = require("./utils");
|
|
|
28
28
|
var import_constants = require("../constants");
|
|
29
29
|
var import_cabinIdRequest = require("../tokens/cabinIdRequest");
|
|
30
30
|
var import_createGetAuth = require("./createGetAuth");
|
|
31
|
-
const auth = () => {
|
|
32
|
-
const request = (0, import_utils.buildRequestLike)();
|
|
31
|
+
const auth = async () => {
|
|
32
|
+
const request = await (0, import_utils.buildRequestLike)();
|
|
33
33
|
const authObject = (0, import_createGetAuth.createGetAuth)()(request);
|
|
34
34
|
const cabinIdUrl = (0, import_utils.getAuthKeyFromRequest)(request, "CabinIdUrl");
|
|
35
35
|
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;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAmC;AAEnC,4BAA4C;AAC5C,qBAA2C;AAC3C,mBAAwD;AACxD,uBAA0D;AAC1D,4BAAqC;AACrC,2BAA8B;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;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAmC;AAEnC,4BAA4C;AAC5C,qBAA2C;AAC3C,mBAAwD;AACxD,uBAA0D;AAC1D,4BAAqC;AACrC,2BAA8B;AAOvB,MAAM,OAAO,YAA2B;AAC7C,QAAM,UAAU,UAAM,+BAAiB;AACvC,QAAM,iBAAa,oCAAc,EAAE,OAAO;AAE1C,QAAM,iBAAa,oCAAsB,SAAS,YAAY;AAE9D,QAAM,mBAAuC,CAAC,OAAO,CAAC,MAAM;AAC1D,eAAO,sCAAe;AAAA,MACpB,iBAAiB;AAAA,MACjB,aAAS,4CAAqB,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,cAAU,8BAAc;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,OAAO,OAAO,YAAY,EAAE,SAAS,iBAAiB,CAAC;AAChE;","names":[]}
|
|
@@ -24,7 +24,7 @@ module.exports = __toCommonJS(getCurrentUser_exports);
|
|
|
24
24
|
var import_auth = require("./auth");
|
|
25
25
|
var import_http = require("../utils/http");
|
|
26
26
|
async function currentUser() {
|
|
27
|
-
const { userId } = (0, import_auth.auth)();
|
|
27
|
+
const { userId } = await (0, import_auth.auth)();
|
|
28
28
|
if (!userId) return null;
|
|
29
29
|
return import_http.client.users.getUser(userId);
|
|
30
30
|
}
|
|
@@ -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":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAAqB;AACrB,kBAAuB;AAEvB,eAAsB,cAAoC;AACxD,QAAM,EAAE,OAAO,
|
|
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":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAAqB;AACrB,kBAAuB;AAEvB,eAAsB,cAAoC;AACxD,QAAM,EAAE,OAAO,IAAI,UAAM,kBAAK;AAC9B,MAAI,CAAC,OAAQ,QAAO;AACpB,SAAO,mBAAO,MAAM,QAAQ,MAAM;AACpC;","names":[]}
|
|
@@ -77,6 +77,7 @@ const authMiddleware = (...args) => {
|
|
|
77
77
|
signUpUrl
|
|
78
78
|
};
|
|
79
79
|
const nextMiddleware = async (_request, _event) => {
|
|
80
|
+
var _a, _b, _c;
|
|
80
81
|
const accessToken = _request.nextUrl.searchParams.get(
|
|
81
82
|
import_constants.constants.QueryParams.Token
|
|
82
83
|
);
|
|
@@ -91,8 +92,93 @@ const authMiddleware = (...args) => {
|
|
|
91
92
|
);
|
|
92
93
|
setCookieWithDefaults(response, import_constants.constants.Cookies.Client, accessToken);
|
|
93
94
|
setCookieWithDefaults(response, import_constants.constants.Cookies.User, userId);
|
|
95
|
+
setCookieWithDefaults(response, import_constants.constants.Cookies.Access, accessToken);
|
|
96
|
+
setCookieWithDefaults(response, import_constants.constants.Cookies.UserId, userId);
|
|
94
97
|
return response;
|
|
95
98
|
}
|
|
99
|
+
let currentAccessToken = ((_a = _request.cookies.get(import_constants.constants.Cookies.Access)) == null ? void 0 : _a.value) || "";
|
|
100
|
+
let currentUserId = ((_b = _request.cookies.get(import_constants.constants.Cookies.UserId)) == null ? void 0 : _b.value) || "";
|
|
101
|
+
let refreshToken = ((_c = _request.cookies.get(import_constants.constants.Cookies.Refresh)) == null ? void 0 : _c.value) || "";
|
|
102
|
+
if ((!currentAccessToken || !currentUserId) && refreshToken) {
|
|
103
|
+
try {
|
|
104
|
+
const response = await fetch(`${import_constants.baseApiUrlV2}/auth/refresh`, {
|
|
105
|
+
method: "POST",
|
|
106
|
+
headers: {
|
|
107
|
+
"Authorization": `Bearer ${refreshToken}`,
|
|
108
|
+
"Content-Type": "application/json"
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
if (response.ok) {
|
|
112
|
+
const data = await response.json();
|
|
113
|
+
const res = import_server.NextResponse.next();
|
|
114
|
+
setCookieWithDefaults(res, import_constants.constants.Cookies.Access, data.accessToken, { maxAge: 900 });
|
|
115
|
+
setCookieWithDefaults(res, import_constants.constants.Cookies.Refresh, data.refreshToken, { maxAge: 2592e3 });
|
|
116
|
+
setCookieWithDefaults(res, import_constants.constants.Cookies.Client, data.accessToken);
|
|
117
|
+
setCookieWithDefaults(res, import_constants.constants.Cookies.User, data.userId || currentUserId);
|
|
118
|
+
setCookieWithDefaults(res, import_constants.constants.Cookies.UserId, data.userId || currentUserId);
|
|
119
|
+
currentAccessToken = data.accessToken;
|
|
120
|
+
currentUserId = data.userId || currentUserId;
|
|
121
|
+
const cabinIdRequest2 = (0, import_cabinIdRequest.createCabinIdRequest)(_request);
|
|
122
|
+
const requestState2 = await import_client.cabinIdClient.authenticateRequest(
|
|
123
|
+
cabinIdRequest2,
|
|
124
|
+
options
|
|
125
|
+
);
|
|
126
|
+
const authObject2 = requestState2.toAuth();
|
|
127
|
+
const redirectToSignIn2 = createMiddlewareRedirectToSignIn(cabinIdRequest2);
|
|
128
|
+
const protect2 = createMiddlewareProtect(
|
|
129
|
+
cabinIdRequest2,
|
|
130
|
+
authObject2,
|
|
131
|
+
redirectToSignIn2
|
|
132
|
+
);
|
|
133
|
+
const authObjWithMethods2 = Object.assign(
|
|
134
|
+
authObject2,
|
|
135
|
+
{ protect: protect2, redirectToSignIn: redirectToSignIn2 }
|
|
136
|
+
);
|
|
137
|
+
const mergeCookies = (target, source) => {
|
|
138
|
+
if (source instanceof import_server.NextResponse && target instanceof import_server.NextResponse) {
|
|
139
|
+
source.cookies.getAll().forEach((cookie) => {
|
|
140
|
+
target.cookies.set(cookie.name, cookie.value, {
|
|
141
|
+
domain: cookie.domain,
|
|
142
|
+
expires: cookie.expires,
|
|
143
|
+
httpOnly: cookie.httpOnly,
|
|
144
|
+
maxAge: cookie.maxAge,
|
|
145
|
+
path: cookie.path,
|
|
146
|
+
sameSite: cookie.sameSite,
|
|
147
|
+
secure: cookie.secure
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
return target;
|
|
152
|
+
};
|
|
153
|
+
let handlerResult2 = res;
|
|
154
|
+
try {
|
|
155
|
+
const result = await (handler == null ? void 0 : handler(() => authObjWithMethods2, _request, _event));
|
|
156
|
+
if (result) {
|
|
157
|
+
handlerResult2 = mergeCookies(result, res);
|
|
158
|
+
}
|
|
159
|
+
} catch (e) {
|
|
160
|
+
handlerResult2 = mergeCookies(handleControlFlowErrors(e, cabinIdRequest2, requestState2), res);
|
|
161
|
+
}
|
|
162
|
+
if ((0, import_response.isRedirect)(handlerResult2)) {
|
|
163
|
+
return (0, import_serverRedirectWithAuth.serverRedirectWithAuth)(cabinIdRequest2, handlerResult2);
|
|
164
|
+
}
|
|
165
|
+
(0, import_utils.decorateRequest)(
|
|
166
|
+
cabinIdRequest2,
|
|
167
|
+
handlerResult2,
|
|
168
|
+
requestState2,
|
|
169
|
+
options.secretKey
|
|
170
|
+
);
|
|
171
|
+
if (requestState2.headers) {
|
|
172
|
+
requestState2.headers.forEach((value, key) => {
|
|
173
|
+
handlerResult2.headers.append(key, value);
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
return handlerResult2;
|
|
177
|
+
}
|
|
178
|
+
} catch (error) {
|
|
179
|
+
console.error("Token refresh failed:", error);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
96
182
|
const cabinIdRequest = (0, import_cabinIdRequest.createCabinIdRequest)(_request);
|
|
97
183
|
const requestState = await import_client.cabinIdClient.authenticateRequest(
|
|
98
184
|
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":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA6C;AAC7C,uBAOO;AACP,mBAA4D;AAM5D,oBAA8B;AAC9B,4BAAqD;AACrD,qBAA2C;AAC3C,4BAA4C;AAC5C,sBAAsC;AAGtC,oCAAuC;AAGvC,MAAM,qBAAqB;AAAA,EACzB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,qBAAqB;AACvB;AA0CA,MAAM,wBAAwB,CAC5B,UACA,MACA,OACA,UAA+B,CAAC,MAC7B;AACH,WAAS,QAAQ,IAAI,MAAM,OAAO;AAAA,IAChC,QAAQ,QAAQ,UAAU,KAAK,KAAK,KAAK;AAAA;AAAA,IACzC,UAAU;AAAA,IACV,QAAQ;AAAA,EACV,CAAC;AACH;AAEA,MAAM,uBAAuB,CAAC,SAAoB;AAChD,SAAO;AAAA,IACL,KAAK,CAAC,aAAa,UAAU,KAAK,CAAC,IAAI;AAAA,IACvC,KAAK,CAAC,aAAa,UAAU,KAAK,CAAC,IAAI;AAAA,EACzC;AAIF;AAEA,MAAM,yBAAyB,CAAC,SAAoB;AAClD,SAAO;AAAA,IACL,OAAO,KAAK,CAAC,MAAM,aAAa,KAAK,CAAC,IAAI;AAAA,KACzC,KAAK,WAAW,IACb,KAAK,CAAC,IACN,OAAO,KAAK,CAAC,MAAM,aACnB,CAAC,IACD,KAAK,CAAC,MAAM,CAAC;AAAA,EACnB;AACF;AAEA,MAAM,iBAAiC,IAAI,SAAyB;AAClE,QAAM,CAAC,SAAS,KAAK,IAAI,qBAAqB,IAAI;AAClD,QAAM,CAAC,SAAS,MAAM,IAAI,uBAAuB,IAAI;AAErD,QAAM,qBAAiB;AAAA,IACrB,OAAO,kBAAkB;AAAA,IACzB,MAAM;AACJ,YAAM,IAAI,MAAM,0BAA0B;AAAA,IAC5C;AAAA,EACF;AACA,QAAM,gBAAY,wBAAU,OAAO,aAAa,6BAAY,MAAM;AAChE,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C,CAAC;AAED,QAAM,YAAY,OAAO,aAAa;AACtC,QAAM,YAAY,OAAO,aAAa;AAEtC,QAAM,UAAU;AAAA,IACd,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,iBAAiC,OAAO,UAAU,WAAW;AAlIrE;AAmII,UAAM,cAAc,SAAS,QAAQ,aAAa;AAAA,MAChD,2BAAU,YAAY;AAAA,IACxB;AACA,UAAM,SAAS,SAAS,QAAQ,aAAa;AAAA,MAC3C,2BAAU,YAAY;AAAA,IACxB;AAEA,QAAI,eAAe,QAAQ;AACzB,YAAM,MAAM,SAAS;AACrB,YAAM,OAAO,IAAI;AACjB,YAAM,WAAW,2BAAa;AAAA,QAC5B,IAAI,IAAI,QAAQ,KAAK,SAAS,GAAG;AAAA,MACnC;AAGA,4BAAsB,UAAU,2BAAU,QAAQ,QAAQ,WAAW;AACrE,4BAAsB,UAAU,2BAAU,QAAQ,MAAM,MAAM;AAC9D,4BAAsB,UAAU,2BAAU,QAAQ,QAAQ,WAAW;AACrE,4BAAsB,UAAU,2BAAU,QAAQ,QAAQ,MAAM;AAEhE,aAAO;AAAA,IACT;AAGA,QAAI,uBAAqB,cAAS,QAAQ,IAAI,2BAAU,QAAQ,MAAM,MAA7C,mBAAgD,UAAS;AAClF,QAAI,kBAAgB,cAAS,QAAQ,IAAI,2BAAU,QAAQ,MAAM,MAA7C,mBAAgD,UAAS;AAC7E,QAAI,iBAAe,cAAS,QAAQ,IAAI,2BAAU,QAAQ,OAAO,MAA9C,mBAAiD,UAAS;AAG7E,SAAK,CAAC,sBAAsB,CAAC,kBAAkB,cAAc;AAC3D,UAAI;AACF,cAAM,WAAW,MAAM,MAAM,GAAG,6BAAY,iBAAiB;AAAA,UAC3D,QAAQ;AAAA,UACR,SAAS;AAAA,YACP,iBAAiB,UAAU,YAAY;AAAA,YACvC,gBAAgB;AAAA,UAClB;AAAA,QACF,CAAC;AAED,YAAI,SAAS,IAAI;AACf,gBAAM,OAAO,MAAM,SAAS,KAAK;AACjC,gBAAM,MAAM,2BAAa,KAAK;AAG9B,gCAAsB,KAAK,2BAAU,QAAQ,QAAQ,KAAK,aAAa,EAAE,QAAQ,IAAI,CAAC;AACtF,gCAAsB,KAAK,2BAAU,QAAQ,SAAS,KAAK,cAAc,EAAE,QAAQ,OAAQ,CAAC;AAC5F,gCAAsB,KAAK,2BAAU,QAAQ,QAAQ,KAAK,WAAW;AACrE,gCAAsB,KAAK,2BAAU,QAAQ,MAAM,KAAK,UAAU,aAAa;AAC/E,gCAAsB,KAAK,2BAAU,QAAQ,QAAQ,KAAK,UAAU,aAAa;AAGjF,+BAAqB,KAAK;AAC1B,0BAAgB,KAAK,UAAU;AAG/B,gBAAMA,sBAAiB,4CAAqB,QAAQ;AACpD,gBAAMC,gBAAe,MAAM,4BAAc;AAAA,YACvCD;AAAA,YACA;AAAA,UACF;AAEA,gBAAME,cAAaD,cAAa,OAAO;AACvC,gBAAME,oBAAmB,iCAAiCH,eAAc;AACxE,gBAAMI,WAAU;AAAA,YACdJ;AAAA,YACAE;AAAA,YACAC;AAAA,UACF;AAEA,gBAAME,sBAAkD,OAAO;AAAA,YAC7DH;AAAA,YACA,EAAE,SAAAE,UAAS,kBAAAD,kBAAiB;AAAA,UAC9B;AAEV,gBAAM,eAAe,CAAC,QAAkB,WAAqB;AAC3D,gBAAI,kBAAkB,8BAAgB,kBAAkB,4BAAc;AACpE,qBAAO,QAAQ,OAAO,EAAE,QAAQ,CAAC,WAAW;AAC1C,uBAAO,QAAQ,IAAI,OAAO,MAAM,OAAO,OAAO;AAAA,kBAC5C,QAAQ,OAAO;AAAA,kBACf,SAAS,OAAO;AAAA,kBAChB,UAAU,OAAO;AAAA,kBACjB,QAAQ,OAAO;AAAA,kBACf,MAAM,OAAO;AAAA,kBACb,UAAU,OAAO;AAAA,kBACjB,QAAQ,OAAO;AAAA,gBACjB,CAAC;AAAA,cACH,CAAC;AAAA,YACH;AACA,mBAAO;AAAA,UACT;AAEU,cAAIG,iBAA0B;AAE9B,cAAI;AACF,kBAAM,SAAS,OAAM,mCAAU,MAAMD,qBAAoB,UAAU;AACnE,gBAAI,QAAQ;AACV,cAAAC,iBAAgB,aAAa,QAAwB,GAAG;AAAA,YAC1D;AAAA,UACF,SAAS,GAAQ;AACf,YAAAA,iBAAgB,aAAa,wBAAwB,GAAGN,iBAAgBC,aAAY,GAAmB,GAAG;AAAA,UAC5G;AAEA,kBAAI,4BAAWK,cAAa,GAAG;AAC7B,uBAAO,sDAAuBN,iBAAgBM,cAA6B;AAAA,UAC7E;AAEA;AAAA,YACEN;AAAA,YACAM;AAAA,YACAL;AAAA,YACA,QAAQ;AAAA,UACV;AAEA,cAAIA,cAAa,SAAS;AACxB,YAAAA,cAAa,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AAC3C,cAAAK,eAAc,QAAQ,OAAO,KAAK,KAAK;AAAA,YACzC,CAAC;AAAA,UACH;AAEA,iBAAOA;AAAA,QACT;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,yBAAyB,KAAK;AAAA,MAC9C;AAAA,IACF;AAEA,UAAM,qBAAiB,4CAAqB,QAAQ;AAEpD,UAAM,eAAe,MAAM,4BAAc;AAAA,MACvC;AAAA,MACA;AAAA,IACF;AAEA,UAAM,aAAa,aAAa,OAAO;AAEvC,UAAM,mBAAmB,iCAAiC,cAAc;AAExE,UAAM,UAAU;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,qBAAkD,OAAO;AAAA,MAC7D;AAAA,MACA,EAAE,SAAS,iBAAiB;AAAA,IAC9B;AAEA,QAAI,gBAA0B,2BAAa,KAAK;AAEhD,QAAI;AACF,sBACG,OAAM,mCAAU,MAAM,oBAAoB,UAAU,YACrD;AAAA,IACJ,SAAS,GAAQ;AACf,sBAAgB,wBAAwB,GAAG,gBAAgB,YAAY;AAAA,IACzE;AAEA,YAAI,4BAAW,aAAa,GAAG;AAC7B,iBAAO,sDAAuB,gBAAgB,aAAa;AAAA,IAC7D;AAEA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IACV;AAEA,QAAI,aAAa,SAAS;AACxB,mBAAa,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AAC3C,sBAAc,QAAQ,OAAO,KAAK,KAAK;AAAA,MACzC,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,OAAO;AACpB,WAAO,eAAe,SAAS,KAAK;AAAA,EACtC;AAEA,SAAO;AACT;AAIA,MAAM,mCAAmC,CACvC,mBACoD;AACpD,SAAO,CAAC,OAAO,CAAC,MAAM;AACpB,UAAM,MAAM,IAAI,MAAM,mBAAmB,mBAAmB;AAC5D,QAAI,gBACF,KAAK,kBAAkB,OACnB,KACA,KAAK,iBAAiB,eAAe,WAAW,SAAS;AAC/D,UAAM;AAAA,EACR;AACF;AAEA,MAAM,0BAA0B,CAC9B,gBACA,YACA,qBAC2C;AAC3C,SAAQ,CAAC,GAAQ,YAAiB;AAChC,UAAM,WAAW,MAAM;AACrB,YAAM,IAAI,MAAM,mBAAmB,eAAe;AAAA,IACpD;AAEA,UAAM,WAAW,CAAC,QAAgB;AAChC,YAAM,MAAM,IAAI,MAAM,mBAAmB,eAAe;AACxD,UAAI,cAAc;AAClB,YAAM;AAAA,IACR;AAEA,eAAO,8BAAc;AAAA,MACnB,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC,EAAE,OAAO;AAAA,EACZ;AACF;AAEA,MAAM,0BAA0B,CAC9B,GACA,gBACA,iBACa;AACb,UAAQ,EAAE,SAAS;AAAA,IACjB,KAAK,mBAAmB;AACtB,iBAAO;AAAA,QACL,2BAAa;AAAA,UACX,GAAG,eAAe,WAAW,MAAM,UAAU,KAAK,IAAI,CAAC;AAAA,QACzD;AAAA,QACA,2BAAU,QAAQ;AAAA,QAClB;AAAA,MACF;AAAA,IACF,KAAK,mBAAmB;AACtB,iBAAO,8BAAgB,EAAE,WAAW;AAAA,IACtC,KAAK,mBAAmB;AACtB,iBAAO,sCAAe;AAAA,QACpB;AAAA,QACA,SAAS,eAAe;AAAA,QACxB,WAAW,aAAa;AAAA,QACxB,WAAW,aAAa;AAAA,QACxB,gBAAgB,aAAa;AAAA,MAC/B,CAAC,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,CAAC;AAAA,IACxD;AACE,YAAM;AAAA,EACV;AACF;","names":["cabinIdRequest","requestState","authObject","redirectToSignIn","protect","authObjWithMethods","handlerResult"]}
|
package/dist/cjs/server/utils.js
CHANGED
|
@@ -101,10 +101,11 @@ function decorateRequest(req, res, requestState, secretKey) {
|
|
|
101
101
|
}
|
|
102
102
|
return res;
|
|
103
103
|
}
|
|
104
|
-
const buildRequestLike = () => {
|
|
104
|
+
const buildRequestLike = async () => {
|
|
105
105
|
try {
|
|
106
106
|
const { headers } = require("next/headers");
|
|
107
|
-
|
|
107
|
+
const headersList = await headers();
|
|
108
|
+
return new import_server.NextRequest("https://placeholder.com", { headers: headersList });
|
|
108
109
|
} catch (e) {
|
|
109
110
|
if (e && "message" in e && typeof e.message === "string" && (e.message.toLowerCase().includes("Dynamic server usage".toLowerCase()) || e.message.toLowerCase().includes(
|
|
110
111
|
"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":[]}
|
|
@@ -24,14 +24,16 @@ __export(initial_exports, {
|
|
|
24
24
|
module.exports = __toCommonJS(initial_exports);
|
|
25
25
|
var import_headers = require("next/headers");
|
|
26
26
|
var import_constants = require("../constants");
|
|
27
|
-
var
|
|
28
|
-
|
|
27
|
+
var import_factory = require("../api/factory");
|
|
28
|
+
var import_constants2 = require("../constants");
|
|
29
|
+
const initialState = async (apiVersion) => {
|
|
29
30
|
var _a;
|
|
30
|
-
const cookiesStore = (0, import_headers.cookies)();
|
|
31
|
+
const cookiesStore = await (0, import_headers.cookies)();
|
|
31
32
|
const userId = ((_a = cookiesStore.get(import_constants.constants.Cookies.User)) == null ? void 0 : _a.value) || null;
|
|
32
33
|
let user = null;
|
|
33
34
|
if (userId) {
|
|
34
|
-
|
|
35
|
+
const client = (0, import_factory.createBackendApiClient)({ secretKey: import_constants2.SECRET_KEY, apiVersion });
|
|
36
|
+
user = await client.users.getUser(userId);
|
|
35
37
|
}
|
|
36
38
|
return {
|
|
37
39
|
userId,
|
|
@@ -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":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,qBAAwB;AACxB,uBAA0B;AAC1B,qBAAuC;AACvC,IAAAA,oBAA2B;AAEpB,MAAM,eAAe,OAAO,eAAwB;AAP3D;AAQE,QAAM,eAAe,UAAM,wBAAQ;AACnC,QAAM,WAAS,kBAAa,IAAI,2BAAU,QAAQ,IAAI,MAAvC,mBAA0C,UAAS;AAClE,MAAI,OAAO;AAEX,MAAI,QAAQ;AACV,UAAM,aAAS,uCAAuB,EAAE,WAAW,8BAAY,WAAW,CAAC;AAC3E,WAAO,MAAM,OAAO,MAAM,QAAQ,MAAM;AAAA,EAC1C;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;","names":["import_constants"]}
|
|
@@ -22,10 +22,17 @@ __export(isomorphicAtob_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(isomorphicAtob_exports);
|
|
24
24
|
const isomorphicAtob = (data) => {
|
|
25
|
-
if (
|
|
26
|
-
return
|
|
27
|
-
}
|
|
28
|
-
|
|
25
|
+
if (!data || typeof data !== "string") {
|
|
26
|
+
return "";
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
if (typeof atob !== "undefined" && typeof atob === "function") {
|
|
30
|
+
return atob(data);
|
|
31
|
+
} else if (typeof global !== "undefined" && global.Buffer) {
|
|
32
|
+
return new global.Buffer(data, "base64").toString();
|
|
33
|
+
}
|
|
34
|
+
} catch (error) {
|
|
35
|
+
return "";
|
|
29
36
|
}
|
|
30
37
|
return data;
|
|
31
38
|
};
|
|
@@ -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":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;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,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import React, { useEffect, useState } from "react";
|
|
3
3
|
import { CabinLogo } from "../icons/logo";
|
|
4
|
-
import { AFTER_SIGN_IN_URL, frontendApi } from "../constants";
|
|
4
|
+
import { AFTER_SIGN_IN_URL, frontendApi, SIGN_IN_URL } from "../constants";
|
|
5
5
|
const SignInButton = () => {
|
|
6
6
|
const [signInUrl, setSignInUrl] = useState("#");
|
|
7
7
|
useEffect(() => {
|
|
@@ -13,7 +13,13 @@ const SignInButton = () => {
|
|
|
13
13
|
const params = new URLSearchParams({
|
|
14
14
|
redirect_url: `${origin}${AFTER_SIGN_IN_URL}` || "/"
|
|
15
15
|
});
|
|
16
|
-
|
|
16
|
+
let signInUrlTemp = "#";
|
|
17
|
+
if (SIGN_IN_URL) {
|
|
18
|
+
signInUrlTemp = SIGN_IN_URL.includes("?") ? `${SIGN_IN_URL}&${params.toString()}` : `${SIGN_IN_URL}?${params.toString()}`;
|
|
19
|
+
} else if (frontendApi) {
|
|
20
|
+
const protocol = frontendApi.includes("localhost") ? "http" : "https";
|
|
21
|
+
signInUrlTemp = `${protocol}://${frontendApi}/sign-in?${params.toString()}`;
|
|
22
|
+
}
|
|
17
23
|
setSignInUrl(signInUrlTemp);
|
|
18
24
|
}
|
|
19
25
|
}, []);
|
|
@@ -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 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
|
|
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=\"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 <CabinLogo />\n <span className=\"text-white text-sm\">Continue to CabinID</span>\n </a>\n );\n};\n"],"mappings":";AAEA,OAAO,SAAS,WAAW,gBAAgB;AAC3C,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB,aAAa,mBAAmB;AAErD,MAAM,eAAe,MAAM;AAChC,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,WAAU;AAAA;AAAA,IAEV,oCAAC,eAAU;AAAA,IACX,oCAAC,UAAK,WAAU,wBAAqB,qBAAmB;AAAA,EAC1D;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":[]}
|