@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.
Files changed (50) hide show
  1. package/dist/cjs/components/SignInButton.js +7 -1
  2. package/dist/cjs/components/SignInButton.js.map +1 -1
  3. package/dist/cjs/constants.js +18 -5
  4. package/dist/cjs/constants.js.map +1 -1
  5. package/dist/cjs/provider/main.provider.js +2 -2
  6. package/dist/cjs/provider/main.provider.js.map +1 -1
  7. package/dist/cjs/server/auth.js +2 -2
  8. package/dist/cjs/server/auth.js.map +1 -1
  9. package/dist/cjs/server/getCurrentUser.js +1 -1
  10. package/dist/cjs/server/getCurrentUser.js.map +1 -1
  11. package/dist/cjs/server/middleware.js +86 -0
  12. package/dist/cjs/server/middleware.js.map +1 -1
  13. package/dist/cjs/server/utils.js +3 -2
  14. package/dist/cjs/server/utils.js.map +1 -1
  15. package/dist/cjs/utils/initial.js +6 -4
  16. package/dist/cjs/utils/initial.js.map +1 -1
  17. package/dist/cjs/utils/isomorphicAtob.js +11 -4
  18. package/dist/cjs/utils/isomorphicAtob.js.map +1 -1
  19. package/dist/esm/components/SignInButton.js +8 -2
  20. package/dist/esm/components/SignInButton.js.map +1 -1
  21. package/dist/esm/constants.js +14 -4
  22. package/dist/esm/constants.js.map +1 -1
  23. package/dist/esm/provider/main.provider.js +2 -2
  24. package/dist/esm/provider/main.provider.js.map +1 -1
  25. package/dist/esm/server/auth.js +2 -2
  26. package/dist/esm/server/auth.js.map +1 -1
  27. package/dist/esm/server/getCurrentUser.js +1 -1
  28. package/dist/esm/server/getCurrentUser.js.map +1 -1
  29. package/dist/esm/server/middleware.js +88 -1
  30. package/dist/esm/server/middleware.js.map +1 -1
  31. package/dist/esm/server/utils.js +3 -2
  32. package/dist/esm/server/utils.js.map +1 -1
  33. package/dist/esm/utils/initial.js +5 -3
  34. package/dist/esm/utils/initial.js.map +1 -1
  35. package/dist/esm/utils/isomorphicAtob.js +11 -4
  36. package/dist/esm/utils/isomorphicAtob.js.map +1 -1
  37. package/dist/types/components/SignInButton.d.ts.map +1 -1
  38. package/dist/types/constants.d.ts +8 -1
  39. package/dist/types/constants.d.ts.map +1 -1
  40. package/dist/types/provider/main.provider.d.ts +5 -2
  41. package/dist/types/provider/main.provider.d.ts.map +1 -1
  42. package/dist/types/server/auth.d.ts +1 -1
  43. package/dist/types/server/auth.d.ts.map +1 -1
  44. package/dist/types/server/middleware.d.ts.map +1 -1
  45. package/dist/types/server/utils.d.ts +1 -1
  46. package/dist/types/server/utils.d.ts.map +1 -1
  47. package/dist/types/utils/initial.d.ts +1 -1
  48. package/dist/types/utils/initial.d.ts.map +1 -1
  49. package/dist/types/utils/isomorphicAtob.d.ts.map +1 -1
  50. 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
- const signInUrlTemp = import_constants.frontendApi ? `https://${import_constants.frontendApi}/sign-in?${params.toString()}` : "#";
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 const signInUrlTemp = frontendApi\n ? `https://${frontendApi}/sign-in?${params.toString()}`\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,uBAA+C;AAExC,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;AACD,YAAM,gBAAgB,+BAClB,WAAW,4BAAW,YAAY,OAAO,SAAS,CAAC,KACnD;AACJ,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"]}
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"]}
@@ -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 baseApiUrl = (0, import_path.joinPaths)(API_URL, API_VERSION);
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 baseApiUrl = joinPaths(API_URL, API_VERSION);\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} as const;\n\nconst QueryParams = {\n UserId: 'user_id',\n Token: 'token',\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,iBAAoC;AACpC,kBAA0B;AAEnB,MAAM,UAAU;AAEhB,MAAM,cAAc;AACpB,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,iBAAa,uBAAU,SAAS,WAAW;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;AACR;AAEA,MAAM,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,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":[]}
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 type { PropsWithChildren } from 'react';\nimport { CabinIDCoreProvider } from './core.provider';\nimport { initialState } from '../utils/initial';\n\nconst CabinIDProvider = async ({ children }: PropsWithChildren<any>) => {\n const state = await initialState();\n return <CabinIDCoreProvider {...state}>{children}</CabinIDCoreProvider>;\n};\n\nexport { CabinIDProvider };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAElB,kBAAoC;AACpC,qBAA6B;AAE7B,MAAM,kBAAkB,OAAO,EAAE,SAAS,MAA8B;AACtE,QAAM,QAAQ,UAAM,6BAAa;AACjC,SAAO,6BAAAA,QAAA,cAAC,mCAAqB,GAAG,SAAQ,QAAS;AACnD;","names":["React"]}
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"]}
@@ -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,MAAY;AAC9B,QAAM,cAAU,+BAAiB;AACjC,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":[]}
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,QAAI,kBAAK;AACxB,MAAI,CAAC,OAAQ,QAAO;AACpB,SAAO,mBAAO,MAAM,QAAQ,MAAM;AACpC;","names":[]}
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"]}
@@ -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
- return new import_server.NextRequest("https://placeholder.com", { headers: headers() });
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: headers() });\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
+ {"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 import_http = require("./http");
28
- const initialState = async () => {
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
- user = await import_http.client.users.getUser(userId);
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 { client } from './http';\n\nexport const initialState = async () => {\n const cookiesStore = cookies();\n const userId = cookiesStore.get(constants.Cookies.User)?.value || null;\n let user = null;\n\n if (userId) {\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,kBAAuB;AAEhB,MAAM,eAAe,YAAY;AANxC;AAOE,QAAM,mBAAe,wBAAQ;AAC7B,QAAM,WAAS,kBAAa,IAAI,2BAAU,QAAQ,IAAI,MAAvC,mBAA0C,UAAS;AAClE,MAAI,OAAO;AAEX,MAAI,QAAQ;AACV,WAAO,MAAM,mBAAO,MAAM,QAAQ,MAAM;AAAA,EAC1C;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
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 (typeof atob !== "undefined" && typeof atob === "function") {
26
- return atob(data);
27
- } else if (typeof global !== "undefined" && global.Buffer) {
28
- return new global.Buffer(data, "base64").toString();
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 return atob(data);\n } else if (typeof global !== 'undefined' && global.Buffer) {\n return new global.Buffer(data, 'base64').toString();\n }\n return data;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIO,MAAM,iBAAiB,CAAC,SAAiB;AAC9C,MAAI,OAAO,SAAS,eAAe,OAAO,SAAS,YAAY;AAC7D,WAAO,KAAK,IAAI;AAAA,EAClB,WAAW,OAAO,WAAW,eAAe,OAAO,QAAQ;AACzD,WAAO,IAAI,OAAO,OAAO,MAAM,QAAQ,EAAE,SAAS;AAAA,EACpD;AACA,SAAO;AACT;","names":[]}
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
- const signInUrlTemp = frontendApi ? `https://${frontendApi}/sign-in?${params.toString()}` : "#";
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 const signInUrlTemp = frontendApi\n ? `https://${frontendApi}/sign-in?${params.toString()}`\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,mBAAmB;AAExC,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;AACD,YAAM,gBAAgB,cAClB,WAAW,WAAW,YAAY,OAAO,SAAS,CAAC,KACnD;AACJ,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":[]}
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":[]}
@@ -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 baseApiUrl = joinPaths(API_URL, API_VERSION);
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 baseApiUrl = joinPaths(API_URL, API_VERSION);\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} as const;\n\nconst QueryParams = {\n UserId: 'user_id',\n Token: 'token',\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;AAEhB,MAAM,cAAc;AACpB,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,aAAa,UAAU,SAAS,WAAW;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;AACR;AAEA,MAAM,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,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":[]}
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":[]}