@cabin-id/nextjs 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/api/getUserInfo.js +42 -0
- package/dist/cjs/api/getUserInfo.js.map +1 -0
- package/dist/cjs/client/provider.js +57 -0
- package/dist/cjs/client/provider.js.map +1 -0
- package/dist/cjs/component.client.js +2 -0
- package/dist/cjs/component.client.js.map +1 -0
- package/dist/cjs/component.server.js +29 -0
- package/dist/cjs/component.server.js.map +1 -0
- package/dist/cjs/components/SignInButton.js +58 -0
- package/dist/cjs/components/SignInButton.js.map +1 -0
- package/dist/cjs/components/index.js +29 -0
- package/dist/cjs/components/index.js.map +1 -0
- package/dist/cjs/constants.js +121 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/global.d.js +17 -0
- package/dist/cjs/global.d.js.map +1 -0
- package/dist/cjs/hooks/index.js +29 -0
- package/dist/cjs/hooks/index.js.map +1 -0
- package/dist/cjs/hooks/useUser.js +48 -0
- package/dist/cjs/hooks/useUser.js.map +1 -0
- package/dist/cjs/icons/logo.js +98 -0
- package/dist/cjs/icons/logo.js.map +1 -0
- package/dist/cjs/index.js +44 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/server/auth.js +37 -0
- package/dist/cjs/server/auth.js.map +1 -0
- package/dist/cjs/server/createRedirect.js +89 -0
- package/dist/cjs/server/createRedirect.js.map +1 -0
- package/dist/cjs/server/getCurrentUser.js +43 -0
- package/dist/cjs/server/getCurrentUser.js.map +1 -0
- package/dist/cjs/server/middleware.js +185 -0
- package/dist/cjs/server/middleware.js.map +1 -0
- package/dist/cjs/server/routeMatcher.js +42 -0
- package/dist/cjs/server/routeMatcher.js.map +1 -0
- package/dist/cjs/server/serverRedirectWithAuth.js +39 -0
- package/dist/cjs/server/serverRedirectWithAuth.js.map +1 -0
- package/dist/cjs/server/type.js +17 -0
- package/dist/cjs/server/type.js.map +1 -0
- package/dist/cjs/server/utils.js +107 -0
- package/dist/cjs/server/utils.js.map +1 -0
- package/dist/cjs/styles/global.css +334 -0
- package/dist/cjs/styles/global.css.map +1 -0
- package/dist/cjs/types.js +17 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/utils/assertValidSecretKey.js +35 -0
- package/dist/cjs/utils/assertValidSecretKey.js.map +1 -0
- package/dist/cjs/utils/isomorphicAtob.js +36 -0
- package/dist/cjs/utils/isomorphicAtob.js.map +1 -0
- package/dist/cjs/utils/isomorphicBtoa.js +36 -0
- package/dist/cjs/utils/isomorphicBtoa.js.map +1 -0
- package/dist/cjs/utils/key.js +49 -0
- package/dist/cjs/utils/key.js.map +1 -0
- package/dist/cjs/utils/path.js +33 -0
- package/dist/cjs/utils/path.js.map +1 -0
- package/dist/cjs/utils/response.js +76 -0
- package/dist/cjs/utils/response.js.map +1 -0
- package/dist/cjs/utils.js +42 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/esm/api/getUserInfo.js +18 -0
- package/dist/esm/api/getUserInfo.js.map +1 -0
- package/dist/esm/client/provider.js +22 -0
- package/dist/esm/client/provider.js.map +1 -0
- package/dist/esm/component.client.js +1 -0
- package/dist/esm/component.client.js.map +1 -0
- package/dist/esm/component.server.js +5 -0
- package/dist/esm/component.server.js.map +1 -0
- package/dist/esm/components/SignInButton.js +24 -0
- package/dist/esm/components/SignInButton.js.map +1 -0
- package/dist/esm/components/index.js +5 -0
- package/dist/esm/components/index.js.map +1 -0
- package/dist/esm/constants.js +87 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/global.d.js +1 -0
- package/dist/esm/global.d.js.map +1 -0
- package/dist/esm/hooks/index.js +5 -0
- package/dist/esm/hooks/index.js.map +1 -0
- package/dist/esm/hooks/useUser.js +14 -0
- package/dist/esm/hooks/useUser.js.map +1 -0
- package/dist/esm/icons/logo.js +64 -0
- package/dist/esm/icons/logo.js.map +1 -0
- package/dist/esm/index.js +15 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/server/auth.js +13 -0
- package/dist/esm/server/auth.js.map +1 -0
- package/dist/esm/server/createRedirect.js +65 -0
- package/dist/esm/server/createRedirect.js.map +1 -0
- package/dist/esm/server/getCurrentUser.js +19 -0
- package/dist/esm/server/getCurrentUser.js.map +1 -0
- package/dist/esm/server/middleware.js +166 -0
- package/dist/esm/server/middleware.js.map +1 -0
- package/dist/esm/server/routeMatcher.js +18 -0
- package/dist/esm/server/routeMatcher.js.map +1 -0
- package/dist/esm/server/serverRedirectWithAuth.js +15 -0
- package/dist/esm/server/serverRedirectWithAuth.js.map +1 -0
- package/dist/esm/server/type.js +1 -0
- package/dist/esm/server/type.js.map +1 -0
- package/dist/esm/server/utils.js +79 -0
- package/dist/esm/server/utils.js.map +1 -0
- package/dist/esm/styles/global.css +334 -0
- package/dist/esm/styles/global.css.map +1 -0
- package/dist/esm/types.js +1 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/utils/assertValidSecretKey.js +11 -0
- package/dist/esm/utils/assertValidSecretKey.js.map +1 -0
- package/dist/esm/utils/isomorphicAtob.js +12 -0
- package/dist/esm/utils/isomorphicAtob.js.map +1 -0
- package/dist/esm/utils/isomorphicBtoa.js +12 -0
- package/dist/esm/utils/isomorphicBtoa.js.map +1 -0
- package/dist/esm/utils/key.js +24 -0
- package/dist/esm/utils/key.js.map +1 -0
- package/dist/esm/utils/path.js +9 -0
- package/dist/esm/utils/path.js.map +1 -0
- package/dist/esm/utils/response.js +49 -0
- package/dist/esm/utils/response.js.map +1 -0
- package/dist/esm/utils.js +18 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/types/api/getUserInfo.d.ts.map +1 -0
- package/dist/types/client/provider.d.ts.map +1 -0
- package/dist/types/component.client.d.ts.map +1 -0
- package/dist/types/component.server.d.ts.map +1 -0
- package/dist/types/components/SignInButton.d.ts.map +1 -0
- package/dist/types/components/index.d.ts.map +1 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/hooks/index.d.ts.map +1 -0
- package/dist/types/hooks/useUser.d.ts.map +1 -0
- package/dist/types/icons/logo.d.ts.map +1 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/server/auth.d.ts.map +1 -0
- package/dist/types/server/createRedirect.d.ts.map +1 -0
- package/dist/types/server/getCurrentUser.d.ts.map +1 -0
- package/dist/types/server/middleware.d.ts.map +1 -0
- package/dist/types/server/routeMatcher.d.ts.map +1 -0
- package/dist/types/server/serverRedirectWithAuth.d.ts.map +1 -0
- package/dist/types/server/type.d.ts.map +1 -0
- package/dist/types/server/utils.d.ts.map +1 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/utils/assertValidSecretKey.d.ts.map +1 -0
- package/dist/types/utils/isomorphicAtob.d.ts.map +1 -0
- package/dist/types/utils/isomorphicBtoa.d.ts.map +1 -0
- package/dist/types/utils/key.d.ts.map +1 -0
- package/dist/types/utils/path.d.ts.map +1 -0
- package/dist/types/utils/response.d.ts.map +1 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use server";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
var auth_exports = {};
|
|
21
|
+
__export(auth_exports, {
|
|
22
|
+
auth: () => auth
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(auth_exports);
|
|
25
|
+
var import_headers = require("next/headers");
|
|
26
|
+
var import_constants = require("../constants");
|
|
27
|
+
const auth = () => {
|
|
28
|
+
var _a;
|
|
29
|
+
const cookie = (0, import_headers.cookies)();
|
|
30
|
+
const userId = ((_a = cookie.get(import_constants.constants.Cookies.User)) == null ? void 0 : _a.value) || null;
|
|
31
|
+
return { userId };
|
|
32
|
+
};
|
|
33
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
34
|
+
0 && (module.exports = {
|
|
35
|
+
auth
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/server/auth.ts"],"sourcesContent":["'use server';\n\nimport { cookies } from 'next/headers';\nimport { constants } from '../constants';\n\nexport const auth = () => {\n const cookie = cookies();\n const userId = cookie.get(constants.Cookies.User)?.value || null;\n\n return { userId };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,qBAAwB;AACxB,uBAA0B;AAEnB,MAAM,OAAO,MAAM;AAL1B;AAME,QAAM,aAAS,wBAAQ;AACvB,QAAM,WAAS,YAAO,IAAI,2BAAU,QAAQ,IAAI,MAAjC,mBAAoC,UAAS;AAE5D,SAAO,EAAE,OAAO;AAClB;","names":[]}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var createRedirect_exports = {};
|
|
20
|
+
__export(createRedirect_exports, {
|
|
21
|
+
createRedirect: () => createRedirect
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(createRedirect_exports);
|
|
24
|
+
var import_key = require("../utils/key");
|
|
25
|
+
const buildUrl = (_baseUrl, _targetUrl, _returnBackUrl) => {
|
|
26
|
+
if (_baseUrl === "") {
|
|
27
|
+
const legacyUrl = legacyBuildUrl(
|
|
28
|
+
_targetUrl.toString(),
|
|
29
|
+
_returnBackUrl == null ? void 0 : _returnBackUrl.toString()
|
|
30
|
+
);
|
|
31
|
+
return legacyUrl;
|
|
32
|
+
}
|
|
33
|
+
const baseUrl = new URL(_baseUrl);
|
|
34
|
+
const returnBackUrl = _returnBackUrl ? new URL(_returnBackUrl, baseUrl) : void 0;
|
|
35
|
+
const res = new URL(_targetUrl, baseUrl);
|
|
36
|
+
if (returnBackUrl) {
|
|
37
|
+
res.searchParams.set("redirect_url", returnBackUrl.toString());
|
|
38
|
+
}
|
|
39
|
+
return res.toString();
|
|
40
|
+
};
|
|
41
|
+
const legacyBuildUrl = (targetUrl, redirectUrl) => {
|
|
42
|
+
let url;
|
|
43
|
+
if (!targetUrl.startsWith("http")) {
|
|
44
|
+
if (!redirectUrl || !redirectUrl.startsWith("http")) {
|
|
45
|
+
throw new Error(
|
|
46
|
+
"destination url or return back url should be an absolute path url!"
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
const baseURL = new URL(redirectUrl);
|
|
50
|
+
url = new URL(targetUrl, baseURL.origin);
|
|
51
|
+
} else {
|
|
52
|
+
url = new URL(targetUrl);
|
|
53
|
+
}
|
|
54
|
+
if (redirectUrl) {
|
|
55
|
+
url.searchParams.set("redirect_url", redirectUrl);
|
|
56
|
+
}
|
|
57
|
+
return url.toString();
|
|
58
|
+
};
|
|
59
|
+
const createRedirect = (params) => {
|
|
60
|
+
const { publishableKey, redirectAdapter, signInUrl, signUpUrl, baseUrl } = params;
|
|
61
|
+
const frontendApi = (0, import_key.parsePublishableKey)(publishableKey);
|
|
62
|
+
const accountsBaseUrl = frontendApi;
|
|
63
|
+
const redirectToSignUp = ({ returnBackUrl } = {}) => {
|
|
64
|
+
if (!signUpUrl && !accountsBaseUrl) {
|
|
65
|
+
throw new Error("Publish Key is not exist");
|
|
66
|
+
}
|
|
67
|
+
const accountsSignUpUrl = `${accountsBaseUrl}/sign-up`;
|
|
68
|
+
const redirect = redirectAdapter(
|
|
69
|
+
buildUrl(baseUrl, signUpUrl || accountsSignUpUrl, returnBackUrl)
|
|
70
|
+
);
|
|
71
|
+
return redirect;
|
|
72
|
+
};
|
|
73
|
+
const redirectToSignIn = ({ returnBackUrl } = {}) => {
|
|
74
|
+
if (!signInUrl && !accountsBaseUrl) {
|
|
75
|
+
throw new Error("Publish Key is not exist");
|
|
76
|
+
}
|
|
77
|
+
const accountsSignInUrl = `${accountsBaseUrl}/sign-in`;
|
|
78
|
+
const redirect = redirectAdapter(
|
|
79
|
+
buildUrl(baseUrl, signInUrl || accountsSignInUrl, returnBackUrl)
|
|
80
|
+
);
|
|
81
|
+
return redirect;
|
|
82
|
+
};
|
|
83
|
+
return { redirectToSignUp, redirectToSignIn };
|
|
84
|
+
};
|
|
85
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
86
|
+
0 && (module.exports = {
|
|
87
|
+
createRedirect
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=createRedirect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/server/createRedirect.ts"],"sourcesContent":["import { parsePublishableKey } from '../utils/key';\n\ntype RedirectAdapter<RedirectReturn> = (url: string) => RedirectReturn;\ntype RedirectToParams = { returnBackUrl?: string | URL | null };\nexport type RedirectFun<ReturnType> = (params?: RedirectToParams) => ReturnType;\n\nconst buildUrl = (\n _baseUrl: string | URL,\n _targetUrl: string | URL,\n _returnBackUrl?: string | URL | null\n) => {\n if (_baseUrl === '') {\n const legacyUrl = legacyBuildUrl(\n _targetUrl.toString(),\n _returnBackUrl?.toString()\n );\n return legacyUrl;\n }\n\n const baseUrl = new URL(_baseUrl);\n const returnBackUrl = _returnBackUrl\n ? new URL(_returnBackUrl, baseUrl)\n : undefined;\n const res = new URL(_targetUrl, baseUrl);\n\n if (returnBackUrl) {\n res.searchParams.set('redirect_url', returnBackUrl.toString());\n }\n return res.toString();\n};\n\nconst legacyBuildUrl = (targetUrl: string, redirectUrl?: string) => {\n let url;\n if (!targetUrl.startsWith('http')) {\n if (!redirectUrl || !redirectUrl.startsWith('http')) {\n throw new Error(\n 'destination url or return back url should be an absolute path url!'\n );\n }\n\n const baseURL = new URL(redirectUrl);\n url = new URL(targetUrl, baseURL.origin);\n } else {\n url = new URL(targetUrl);\n }\n\n if (redirectUrl) {\n url.searchParams.set('redirect_url', redirectUrl);\n }\n\n return url.toString();\n};\n\n/**\n * @internal\n */\ntype CreateRedirect = <ReturnType>(params: {\n publishableKey: string;\n redirectAdapter: RedirectAdapter<ReturnType>;\n baseUrl: URL | string;\n signInUrl?: URL | string;\n signUpUrl?: URL | string;\n}) => {\n redirectToSignIn: RedirectFun<ReturnType>;\n redirectToSignUp: RedirectFun<ReturnType>;\n};\n\nexport const createRedirect: CreateRedirect = (params) => {\n const { publishableKey, redirectAdapter, signInUrl, signUpUrl, baseUrl } =\n params;\n const frontendApi = parsePublishableKey(publishableKey);\n const accountsBaseUrl = frontendApi;\n\n const redirectToSignUp = ({ returnBackUrl }: RedirectToParams = {}) => {\n if (!signUpUrl && !accountsBaseUrl) {\n throw new Error('Publish Key is not exist');\n }\n const accountsSignUpUrl = `${accountsBaseUrl}/sign-up`;\n const redirect = redirectAdapter(\n buildUrl(baseUrl, signUpUrl || accountsSignUpUrl, returnBackUrl)\n );\n return redirect;\n };\n\n const redirectToSignIn = ({ returnBackUrl }: RedirectToParams = {}) => {\n if (!signInUrl && !accountsBaseUrl) {\n throw new Error('Publish Key is not exist');\n }\n const accountsSignInUrl = `${accountsBaseUrl}/sign-in`;\n\n const redirect = redirectAdapter(\n buildUrl(baseUrl, signInUrl || accountsSignInUrl, returnBackUrl)\n );\n\n return redirect;\n };\n\n return { redirectToSignUp, redirectToSignIn };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAoC;AAMpC,MAAM,WAAW,CACf,UACA,YACA,mBACG;AACH,MAAI,aAAa,IAAI;AACnB,UAAM,YAAY;AAAA,MAChB,WAAW,SAAS;AAAA,MACpB,iDAAgB;AAAA,IAClB;AACA,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,IAAI,IAAI,QAAQ;AAChC,QAAM,gBAAgB,iBAClB,IAAI,IAAI,gBAAgB,OAAO,IAC/B;AACJ,QAAM,MAAM,IAAI,IAAI,YAAY,OAAO;AAEvC,MAAI,eAAe;AACjB,QAAI,aAAa,IAAI,gBAAgB,cAAc,SAAS,CAAC;AAAA,EAC/D;AACA,SAAO,IAAI,SAAS;AACtB;AAEA,MAAM,iBAAiB,CAAC,WAAmB,gBAAyB;AAClE,MAAI;AACJ,MAAI,CAAC,UAAU,WAAW,MAAM,GAAG;AACjC,QAAI,CAAC,eAAe,CAAC,YAAY,WAAW,MAAM,GAAG;AACnD,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,UAAM,UAAU,IAAI,IAAI,WAAW;AACnC,UAAM,IAAI,IAAI,WAAW,QAAQ,MAAM;AAAA,EACzC,OAAO;AACL,UAAM,IAAI,IAAI,SAAS;AAAA,EACzB;AAEA,MAAI,aAAa;AACf,QAAI,aAAa,IAAI,gBAAgB,WAAW;AAAA,EAClD;AAEA,SAAO,IAAI,SAAS;AACtB;AAgBO,MAAM,iBAAiC,CAAC,WAAW;AACxD,QAAM,EAAE,gBAAgB,iBAAiB,WAAW,WAAW,QAAQ,IACrE;AACF,QAAM,kBAAc,gCAAoB,cAAc;AACtD,QAAM,kBAAkB;AAExB,QAAM,mBAAmB,CAAC,EAAE,cAAc,IAAsB,CAAC,MAAM;AACrE,QAAI,CAAC,aAAa,CAAC,iBAAiB;AAClC,YAAM,IAAI,MAAM,0BAA0B;AAAA,IAC5C;AACA,UAAM,oBAAoB,GAAG,eAAe;AAC5C,UAAM,WAAW;AAAA,MACf,SAAS,SAAS,aAAa,mBAAmB,aAAa;AAAA,IACjE;AACA,WAAO;AAAA,EACT;AAEA,QAAM,mBAAmB,CAAC,EAAE,cAAc,IAAsB,CAAC,MAAM;AACrE,QAAI,CAAC,aAAa,CAAC,iBAAiB;AAClC,YAAM,IAAI,MAAM,0BAA0B;AAAA,IAC5C;AACA,UAAM,oBAAoB,GAAG,eAAe;AAE5C,UAAM,WAAW;AAAA,MACf,SAAS,SAAS,aAAa,mBAAmB,aAAa;AAAA,IACjE;AAEA,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,kBAAkB,iBAAiB;AAC9C;","names":[]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var getCurrentUser_exports = {};
|
|
20
|
+
__export(getCurrentUser_exports, {
|
|
21
|
+
currentUser: () => currentUser
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(getCurrentUser_exports);
|
|
24
|
+
var import_constants = require("../constants");
|
|
25
|
+
var import_auth = require("./auth");
|
|
26
|
+
async function currentUser() {
|
|
27
|
+
const { userId } = (0, import_auth.auth)();
|
|
28
|
+
if (!userId)
|
|
29
|
+
return null;
|
|
30
|
+
const response = await fetch(`${import_constants.baseApiUrl}/user/${userId}`, {
|
|
31
|
+
method: "GET",
|
|
32
|
+
headers: {
|
|
33
|
+
Authorization: `Bearer ${import_constants.SECRET_KEY}`
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
const data = await response.json();
|
|
37
|
+
return data;
|
|
38
|
+
}
|
|
39
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
40
|
+
0 && (module.exports = {
|
|
41
|
+
currentUser
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=getCurrentUser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/server/getCurrentUser.ts"],"sourcesContent":["import { baseApiUrl, SECRET_KEY } from '../constants';\n\nimport { auth } from './auth';\n\nexport type User = {\n id: string;\n avatar: string | null;\n email: string | null;\n phoneNumber: string;\n firstName: string;\n lastName: string;\n address: string | null;\n createdAt: string;\n updatedAt: string;\n};\n\nexport async function currentUser(): Promise<User | null> {\n const { userId } = auth();\n if (!userId) return null;\n\n const response = await fetch(`${baseApiUrl}/user/${userId}`, {\n method: 'GET',\n headers: {\n Authorization: `Bearer ${SECRET_KEY}`,\n },\n });\n const data: User = await response.json();\n return data;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAuC;AAEvC,kBAAqB;AAcrB,eAAsB,cAAoC;AACxD,QAAM,EAAE,OAAO,QAAI,kBAAK;AACxB,MAAI,CAAC;AAAQ,WAAO;AAEpB,QAAM,WAAW,MAAM,MAAM,GAAG,2BAAU,SAAS,MAAM,IAAI;AAAA,IAC3D,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,eAAe,UAAU,2BAAU;AAAA,IACrC;AAAA,EACF,CAAC;AACD,QAAM,OAAa,MAAM,SAAS,KAAK;AACvC,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var middleware_exports = {};
|
|
20
|
+
__export(middleware_exports, {
|
|
21
|
+
DEFAULT_API_ROUTES: () => DEFAULT_API_ROUTES,
|
|
22
|
+
DEFAULT_CONFIG_MATCHER: () => DEFAULT_CONFIG_MATCHER,
|
|
23
|
+
DEFAULT_IGNORED_ROUTES: () => DEFAULT_IGNORED_ROUTES,
|
|
24
|
+
authMiddleware: () => authMiddleware,
|
|
25
|
+
createDefaultAfterAuth: () => createDefaultAfterAuth
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(middleware_exports);
|
|
28
|
+
var import_server = require("next/server");
|
|
29
|
+
var import_constants = require("../constants");
|
|
30
|
+
var import_routeMatcher = require("./routeMatcher");
|
|
31
|
+
var import_utils = require("./utils");
|
|
32
|
+
var import_response = require("../utils/response");
|
|
33
|
+
var import_createRedirect = require("./createRedirect");
|
|
34
|
+
const DEFAULT_CONFIG_MATCHER = [
|
|
35
|
+
"/((?!.+\\.[\\w]+$|_next).*)",
|
|
36
|
+
"/",
|
|
37
|
+
"/(api|trpc)(.*)"
|
|
38
|
+
];
|
|
39
|
+
const DEFAULT_IGNORED_ROUTES = [`/((?!api|trpc))(_next.*|.+\\.[\\w]+$)`];
|
|
40
|
+
const DEFAULT_API_ROUTES = ["/api/(.*)", "/trpc/(.*)"];
|
|
41
|
+
const authMiddleware = (...args) => {
|
|
42
|
+
const [params = {}] = args;
|
|
43
|
+
const publishableKey = (0, import_utils.assertKey)(
|
|
44
|
+
params.publishableKey || import_constants.PUBLISHABLE_KEY,
|
|
45
|
+
() => {
|
|
46
|
+
throw new Error("Publish Key is not exist");
|
|
47
|
+
}
|
|
48
|
+
);
|
|
49
|
+
const secretKey = (0, import_utils.assertKey)(params.secretKey || import_constants.SECRET_KEY, () => {
|
|
50
|
+
throw new Error("Secret Key is not valid");
|
|
51
|
+
});
|
|
52
|
+
const signInUrl = params.signInUrl || import_constants.CUSTOM_SIGN_IN_URL;
|
|
53
|
+
const signUpUrl = params.signUpUrl || import_constants.CUSTOM_SIGN_IN_URL;
|
|
54
|
+
const options = {
|
|
55
|
+
...params,
|
|
56
|
+
publishableKey,
|
|
57
|
+
secretKey,
|
|
58
|
+
signInUrl,
|
|
59
|
+
signUpUrl
|
|
60
|
+
};
|
|
61
|
+
const isIgnoredRoute = (0, import_routeMatcher.createRouteMatcher)(
|
|
62
|
+
options.ignoredRoutes || DEFAULT_IGNORED_ROUTES
|
|
63
|
+
);
|
|
64
|
+
const isPublicRoute = (0, import_routeMatcher.createRouteMatcher)(
|
|
65
|
+
withDefaultPublicRoutes(options.publicRoutes)
|
|
66
|
+
);
|
|
67
|
+
const isApiRoute = createApiRoutes(options.apiRoutes);
|
|
68
|
+
const defaultAfterAuth = createDefaultAfterAuth(
|
|
69
|
+
isPublicRoute,
|
|
70
|
+
isApiRoute,
|
|
71
|
+
options
|
|
72
|
+
);
|
|
73
|
+
return async (_req, evt) => {
|
|
74
|
+
const url = _req.nextUrl;
|
|
75
|
+
const accessToken = url.searchParams.get(import_constants.constants.QueryParams.Token);
|
|
76
|
+
const userId = url.searchParams.get(import_constants.constants.QueryParams.UserId);
|
|
77
|
+
if (isIgnoredRoute(_req) || isPublicRoute(_req)) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const nextRequest = _req;
|
|
81
|
+
const beforeAuthRes = await (options.beforeAuth && options.beforeAuth(nextRequest, evt));
|
|
82
|
+
if (beforeAuthRes === false) {
|
|
83
|
+
return (0, import_response.setHeader)(
|
|
84
|
+
import_server.NextResponse.next(),
|
|
85
|
+
import_constants.constants.Headers.AuthReason,
|
|
86
|
+
"skip"
|
|
87
|
+
);
|
|
88
|
+
} else if (beforeAuthRes && (0, import_response.isRedirect)(beforeAuthRes)) {
|
|
89
|
+
return (0, import_response.setHeader)(
|
|
90
|
+
beforeAuthRes,
|
|
91
|
+
import_constants.constants.Headers.AuthReason,
|
|
92
|
+
"before-auth-redirect"
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
const requestState = {
|
|
96
|
+
token: accessToken,
|
|
97
|
+
userId
|
|
98
|
+
};
|
|
99
|
+
const auth = {
|
|
100
|
+
...requestState,
|
|
101
|
+
isPublicRoute: isPublicRoute(nextRequest),
|
|
102
|
+
isApiRoute: isApiRoute(nextRequest)
|
|
103
|
+
};
|
|
104
|
+
const afterAuthRes = await (options.afterAuth || defaultAfterAuth)(
|
|
105
|
+
auth,
|
|
106
|
+
nextRequest,
|
|
107
|
+
evt
|
|
108
|
+
);
|
|
109
|
+
const finalRes = (0, import_response.mergeResponses)(beforeAuthRes, afterAuthRes) || import_server.NextResponse.next();
|
|
110
|
+
if (accessToken && userId) {
|
|
111
|
+
const path = url.pathname;
|
|
112
|
+
const response = import_server.NextResponse.redirect(new URL(path || "/", _req.url));
|
|
113
|
+
response.cookies.set(import_constants.constants.Cookies.Client, accessToken);
|
|
114
|
+
response.cookies.set(import_constants.constants.Cookies.User, userId);
|
|
115
|
+
return response;
|
|
116
|
+
}
|
|
117
|
+
const result = (
|
|
118
|
+
// decorateRequest(_req, finalRes, requestState, secretKey) ||
|
|
119
|
+
import_server.NextResponse.next()
|
|
120
|
+
);
|
|
121
|
+
return result;
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
const withDefaultPublicRoutes = (publicRoutes) => {
|
|
125
|
+
if (typeof publicRoutes === "function") {
|
|
126
|
+
return publicRoutes;
|
|
127
|
+
}
|
|
128
|
+
const routes = [publicRoutes || ""].flat().filter(Boolean);
|
|
129
|
+
const signInUrl = process.env.NEXT_PUBLIC_CLERK_SIGN_IN_URL || "";
|
|
130
|
+
if (signInUrl) {
|
|
131
|
+
routes.push(matchRoutesStartingWith(signInUrl));
|
|
132
|
+
}
|
|
133
|
+
const signUpUrl = process.env.NEXT_PUBLIC_CLERK_SIGN_UP_URL || "";
|
|
134
|
+
if (signUpUrl) {
|
|
135
|
+
routes.push(matchRoutesStartingWith(signUpUrl));
|
|
136
|
+
}
|
|
137
|
+
return routes;
|
|
138
|
+
};
|
|
139
|
+
const matchRoutesStartingWith = (path) => {
|
|
140
|
+
path = path.replace(/\/$/, "");
|
|
141
|
+
return new RegExp(`^${path}(/.*)?$`);
|
|
142
|
+
};
|
|
143
|
+
const isRequestMethodIndicatingApiRoute = (req) => {
|
|
144
|
+
const requestMethod = req.method.toLowerCase();
|
|
145
|
+
return !["get", "head", "options"].includes(requestMethod);
|
|
146
|
+
};
|
|
147
|
+
const isRequestContentTypeJson = (req) => {
|
|
148
|
+
const requestContentType = req.headers.get(import_constants.constants.Headers.ContentType);
|
|
149
|
+
return requestContentType === import_constants.constants.ContentTypes.Json;
|
|
150
|
+
};
|
|
151
|
+
const createApiRoutes = (apiRoutes) => {
|
|
152
|
+
if (apiRoutes) {
|
|
153
|
+
return (0, import_routeMatcher.createRouteMatcher)(apiRoutes);
|
|
154
|
+
}
|
|
155
|
+
const isDefaultApiRoute = (0, import_routeMatcher.createRouteMatcher)(DEFAULT_API_ROUTES);
|
|
156
|
+
return (req) => isDefaultApiRoute(req) || isRequestMethodIndicatingApiRoute(req) || isRequestContentTypeJson(req);
|
|
157
|
+
};
|
|
158
|
+
const createDefaultAfterAuth = (isPublicRoute, isApiRoute, options) => {
|
|
159
|
+
return (auth, req) => {
|
|
160
|
+
if (!auth.userId && !isPublicRoute(req)) {
|
|
161
|
+
if (isApiRoute(req)) {
|
|
162
|
+
return (0, import_utils.apiEndpointUnauthorizedNextResponse)();
|
|
163
|
+
}
|
|
164
|
+
return (0, import_createRedirect.createRedirect)({
|
|
165
|
+
redirectAdapter: import_utils.redirectAdapter,
|
|
166
|
+
signInUrl: options.signInUrl,
|
|
167
|
+
signUpUrl: options.signUpUrl,
|
|
168
|
+
publishableKey: options.publishableKey,
|
|
169
|
+
// We're setting baseUrl to '' here as we want to keep the legacy behavior of
|
|
170
|
+
// the redirectToSignIn, redirectToSignUp helpers in the backend package.
|
|
171
|
+
baseUrl: ""
|
|
172
|
+
}).redirectToSignIn({ returnBackUrl: req.nextUrl.href });
|
|
173
|
+
}
|
|
174
|
+
return import_server.NextResponse.next();
|
|
175
|
+
};
|
|
176
|
+
};
|
|
177
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
178
|
+
0 && (module.exports = {
|
|
179
|
+
DEFAULT_API_ROUTES,
|
|
180
|
+
DEFAULT_CONFIG_MATCHER,
|
|
181
|
+
DEFAULT_IGNORED_ROUTES,
|
|
182
|
+
authMiddleware,
|
|
183
|
+
createDefaultAfterAuth
|
|
184
|
+
});
|
|
185
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/server/middleware.ts"],"sourcesContent":["import { NextFetchEvent, NextMiddleware, NextResponse } from 'next/server';\nimport { NextRequest } from 'next/server';\nimport {\n constants,\n CUSTOM_SIGN_IN_URL,\n PUBLISHABLE_KEY,\n SECRET_KEY,\n} from '../constants';\nimport { createRouteMatcher, RouteMatcherParam } from './routeMatcher';\nimport {\n apiEndpointUnauthorizedNextResponse,\n assertKey,\n // decorateRequest,\n redirectAdapter,\n} from './utils';\nimport { NextMiddlewareReturn } from './type';\nimport { isRedirect, mergeResponses, setHeader } from '../utils/response';\nimport { createRedirect } from './createRedirect';\n// import { serverRedirectWithAuth } from './serverRedirectWithAuth';\n\ntype BeforeAuthHandler = (\n req: NextRequest,\n evt: NextFetchEvent\n) => NextMiddlewareReturn | false | Promise<false>;\n\ntype AfterAuthHandler = (\n auth: { isPublicRoute: boolean; isApiRoute: boolean },\n req: NextRequest,\n evt: NextFetchEvent\n) => NextMiddlewareReturn;\n\nexport type AuthenticateRequestOptions = {\n publishableKey?: string;\n secretKey?: string;\n domain?: string;\n isSatellite?: boolean;\n proxyUrl?: string;\n signInUrl?: string;\n signUpUrl?: string;\n afterSignInUrl?: string;\n afterSignUpUrl?: string;\n};\n\ntype AuthMiddlewareParams = AuthenticateRequestOptions & {\n /**\n * A function that is called before the authentication middleware is executed.\n * If a redirect response is returned, the middleware will respect it and redirect the user.\n * If false is returned, the auth middleware will not execute and the request will be handled as if the auth middleware was not present.\n */\n beforeAuth?: BeforeAuthHandler;\n /**\n * A function that is called after the authentication middleware is executed.\n * This function has access to the auth object and can be used to execute logic based on the auth state.\n */\n afterAuth?: AfterAuthHandler;\n /**\n * A list of routes that should be accessible without authentication.\n * You can use glob patterns to match multiple routes or a function to match against the request object.\n * Path patterns and regular expressions are supported, for example: `['/foo', '/bar(.*)'] or `[/^\\/foo\\/.*$/]`\n * The sign in and sign up URLs are included by default, unless a function is provided.\n * For more information, see: https://clerk.com/docs\n */\n publicRoutes?: RouteMatcherParam;\n /**\n * A list of routes that should be ignored by the middleware.\n * This list typically includes routes for static files or Next.js internals.\n * For improved performance, these routes should be skipped using the default config.matcher instead.\n */\n ignoredRoutes?: IgnoredRoutesParam;\n /**\n * A list of routes that should be treated as API endpoints.\n * When user is signed out, the middleware will return a 401 response for these routes, instead of redirecting the user.\n *\n * If omitted, the following heuristics will be used to determine an API endpoint:\n * - The route path is ['/api/(.*)', '/trpc/(.*)'],\n * - or the request has `Content-Type` set to `application/json`,\n * - or the request method is not one of: `GET`, `OPTIONS` ,` HEAD`\n *\n * @default undefined\n */\n apiRoutes?: ApiRoutesParam;\n};\n\nexport interface AuthMiddleware {\n (params?: AuthMiddlewareParams): NextMiddleware;\n}\n\n/**\n * The default ideal matcher that excludes the _next directory (internals) and all static files,\n * but it will match the root route (/) and any routes that start with /api or /trpc.\n */\nexport const DEFAULT_CONFIG_MATCHER = [\n '/((?!.+\\\\.[\\\\w]+$|_next).*)',\n '/',\n '/(api|trpc)(.*)',\n];\n\n/**\n * Any routes matching this path will be ignored by the middleware.\n * This is the inverted version of DEFAULT_CONFIG_MATCHER.\n */\nexport const DEFAULT_IGNORED_ROUTES = [`/((?!api|trpc))(_next.*|.+\\\\.[\\\\w]+$)`];\n/**\n * Any routes matching this path will be treated as API endpoints by the middleware.\n */\nexport const DEFAULT_API_ROUTES = ['/api/(.*)', '/trpc/(.*)'];\n\ntype IgnoredRoutesParam =\n | Array<RegExp | string>\n | RegExp\n | string\n | ((req: NextRequest) => boolean);\n\ntype ApiRoutesParam = IgnoredRoutesParam;\n\nconst authMiddleware: AuthMiddleware = (...args: unknown[]) => {\n const [params = {}] = args as [AuthMiddlewareParams?];\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 || CUSTOM_SIGN_IN_URL;\n const signUpUrl = params.signUpUrl || CUSTOM_SIGN_IN_URL;\n\n const options = {\n ...params,\n publishableKey,\n secretKey,\n signInUrl,\n signUpUrl,\n };\n\n const isIgnoredRoute = createRouteMatcher(\n options.ignoredRoutes || DEFAULT_IGNORED_ROUTES\n );\n const isPublicRoute = createRouteMatcher(\n withDefaultPublicRoutes(options.publicRoutes)\n );\n const isApiRoute = createApiRoutes(options.apiRoutes);\n const defaultAfterAuth = createDefaultAfterAuth(\n isPublicRoute,\n isApiRoute,\n options\n );\n\n return async (_req: NextRequest, evt: NextFetchEvent) => {\n const url = _req.nextUrl;\n const accessToken = url.searchParams.get(constants.QueryParams.Token);\n const userId = url.searchParams.get(constants.QueryParams.UserId);\n\n if (isIgnoredRoute(_req) || isPublicRoute(_req)) {\n return;\n }\n const nextRequest = _req;\n\n const beforeAuthRes = await (options.beforeAuth &&\n options.beforeAuth(nextRequest, evt));\n\n if (beforeAuthRes === false) {\n return setHeader(\n NextResponse.next(),\n constants.Headers.AuthReason,\n 'skip'\n );\n } else if (beforeAuthRes && isRedirect(beforeAuthRes)) {\n return setHeader(\n beforeAuthRes,\n constants.Headers.AuthReason,\n 'before-auth-redirect'\n );\n }\n\n const requestState = {\n token: accessToken,\n userId,\n };\n\n const auth = {\n ...requestState,\n isPublicRoute: isPublicRoute(nextRequest),\n isApiRoute: isApiRoute(nextRequest),\n };\n\n const afterAuthRes = await (options.afterAuth || defaultAfterAuth)(\n auth,\n nextRequest,\n evt\n );\n\n const finalRes =\n mergeResponses(beforeAuthRes, afterAuthRes) || NextResponse.next();\n\n if (accessToken && userId) {\n const path = url.pathname;\n const response = NextResponse.redirect(new URL(path || '/', _req.url));\n response.cookies.set(constants.Cookies.Client, accessToken);\n response.cookies.set(constants.Cookies.User, userId);\n return response;\n }\n \n // if (isRedirect(finalRes)) {\n // const res = serverRedirectWithAuth(finalRes);\n // return res;\n // }\n\n const result =\n // decorateRequest(_req, finalRes, requestState, secretKey) ||\n NextResponse.next();\n\n return result;\n };\n};\n\nconst withDefaultPublicRoutes = (\n publicRoutes: RouteMatcherParam | undefined\n) => {\n if (typeof publicRoutes === 'function') {\n return publicRoutes;\n }\n\n const routes = [publicRoutes || ''].flat().filter(Boolean);\n // TODO: refactor it to use common config file eg SIGN_IN_URL from ./clerkClient\n // we use process.env for now to support testing\n const signInUrl = process.env.NEXT_PUBLIC_CLERK_SIGN_IN_URL || '';\n if (signInUrl) {\n routes.push(matchRoutesStartingWith(signInUrl));\n }\n // TODO: refactor it to use common config file eg SIGN_UP_URL from ./clerkClient\n // we use process.env for now to support testing\n const signUpUrl = process.env.NEXT_PUBLIC_CLERK_SIGN_UP_URL || '';\n if (signUpUrl) {\n routes.push(matchRoutesStartingWith(signUpUrl));\n }\n return routes;\n};\n\nconst matchRoutesStartingWith = (path: string) => {\n path = path.replace(/\\/$/, '');\n return new RegExp(`^${path}(/.*)?$`);\n};\n\nconst isRequestMethodIndicatingApiRoute = (req: NextRequest): boolean => {\n const requestMethod = req.method.toLowerCase();\n return !['get', 'head', 'options'].includes(requestMethod);\n};\n\nconst isRequestContentTypeJson = (req: NextRequest): boolean => {\n const requestContentType = req.headers.get(constants.Headers.ContentType);\n return requestContentType === constants.ContentTypes.Json;\n};\n\n// - Default behavior:\n// If the route path is `['/api/(.*)*', '*/trpc/(.*)']`\n// or Request has `Content-Type: application/json`\n// or Request method is not-GET,OPTIONS,HEAD,\n// then this is considered an API route.\n//\n// - If the user has provided a specific `apiRoutes` prop in `authMiddleware` then all the above are discarded,\n// and only routes that match the user’s provided paths are considered API routes.\nconst createApiRoutes = (\n apiRoutes: RouteMatcherParam | undefined\n): ((req: NextRequest) => boolean) => {\n if (apiRoutes) {\n return createRouteMatcher(apiRoutes);\n }\n const isDefaultApiRoute = createRouteMatcher(DEFAULT_API_ROUTES);\n return (req: NextRequest) =>\n isDefaultApiRoute(req) ||\n isRequestMethodIndicatingApiRoute(req) ||\n isRequestContentTypeJson(req);\n};\n\nexport const createDefaultAfterAuth = (\n isPublicRoute: ReturnType<typeof createRouteMatcher>,\n isApiRoute: ReturnType<typeof createApiRoutes>,\n options: {\n signInUrl: string;\n signUpUrl: string;\n publishableKey: string;\n secretKey: string;\n }\n) => {\n return (auth: any, req: NextRequest) => {\n if (!auth.userId && !isPublicRoute(req)) {\n if (isApiRoute(req)) {\n return apiEndpointUnauthorizedNextResponse();\n }\n return createRedirect({\n redirectAdapter,\n signInUrl: options.signInUrl,\n signUpUrl: options.signUpUrl,\n publishableKey: options.publishableKey,\n // We're setting baseUrl to '' here as we want to keep the legacy behavior of\n // the redirectToSignIn, redirectToSignUp helpers in the backend package.\n baseUrl: '',\n }).redirectToSignIn({ returnBackUrl: req.nextUrl.href });\n }\n return NextResponse.next();\n };\n};\n\nexport { authMiddleware };\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var routeMatcher_exports = {};
|
|
20
|
+
__export(routeMatcher_exports, {
|
|
21
|
+
createRouteMatcher: () => createRouteMatcher
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(routeMatcher_exports);
|
|
24
|
+
var import_utils = require("../utils");
|
|
25
|
+
const createRouteMatcher = (routes) => {
|
|
26
|
+
if (typeof routes === "function") {
|
|
27
|
+
return (req) => routes(req);
|
|
28
|
+
}
|
|
29
|
+
const routePatterns = [routes || ""].flat().filter(Boolean);
|
|
30
|
+
const matchers = precomputePathRegex(routePatterns);
|
|
31
|
+
return (req) => matchers.some((matcher) => matcher.test(req.nextUrl.pathname));
|
|
32
|
+
};
|
|
33
|
+
const precomputePathRegex = (patterns) => {
|
|
34
|
+
return patterns.map(
|
|
35
|
+
(pattern) => pattern instanceof RegExp ? pattern : import_utils.paths.toRegexp(pattern)
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
39
|
+
0 && (module.exports = {
|
|
40
|
+
createRouteMatcher
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=routeMatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/server/routeMatcher.ts"],"sourcesContent":["import type Link from \"next/link\";\nimport type { NextRequest } from \"next/server\";\nimport type { Autocomplete } from \"../types\";\nimport { paths } from \"../utils\";\n\ntype WithPathPatternWildcard<T> = `${T & string}(.*)`;\ntype NextTypedRoute<T = Parameters<typeof Link>[\"0\"][\"href\"]> = T extends string\n ? T\n : never;\n\ntype RouteMatcherWithNextTypedRoutes = Autocomplete<\n WithPathPatternWildcard<NextTypedRoute> | NextTypedRoute\n>;\n\nexport type RouteMatcherParam =\n | Array<RegExp | RouteMatcherWithNextTypedRoutes>\n | RegExp\n | RouteMatcherWithNextTypedRoutes\n | ((req: NextRequest) => boolean);\n\nexport const createRouteMatcher = (routes: RouteMatcherParam) => {\n if (typeof routes === \"function\") {\n return (req: NextRequest) => routes(req);\n }\n\n const routePatterns = [routes || \"\"].flat().filter(Boolean);\n const matchers = precomputePathRegex(routePatterns);\n return (req: NextRequest) =>\n matchers.some((matcher) => matcher.test(req.nextUrl.pathname));\n};\n\nconst precomputePathRegex = (patterns: Array<string | RegExp>) => {\n return patterns.map((pattern) =>\n pattern instanceof RegExp ? pattern : paths.toRegexp(pattern),\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,mBAAsB;AAiBf,MAAM,qBAAqB,CAAC,WAA8B;AAC/D,MAAI,OAAO,WAAW,YAAY;AAChC,WAAO,CAAC,QAAqB,OAAO,GAAG;AAAA,EACzC;AAEA,QAAM,gBAAgB,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,OAAO;AAC1D,QAAM,WAAW,oBAAoB,aAAa;AAClD,SAAO,CAAC,QACN,SAAS,KAAK,CAAC,YAAY,QAAQ,KAAK,IAAI,QAAQ,QAAQ,CAAC;AACjE;AAEA,MAAM,sBAAsB,CAAC,aAAqC;AAChE,SAAO,SAAS;AAAA,IAAI,CAAC,YACnB,mBAAmB,SAAS,UAAU,mBAAM,SAAS,OAAO;AAAA,EAC9D;AACF;","names":[]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var serverRedirectWithAuth_exports = {};
|
|
20
|
+
__export(serverRedirectWithAuth_exports, {
|
|
21
|
+
serverRedirectWithAuth: () => serverRedirectWithAuth
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(serverRedirectWithAuth_exports);
|
|
24
|
+
var import_server = require("next/server");
|
|
25
|
+
var import_constants = require("../constants");
|
|
26
|
+
const serverRedirectWithAuth = (res) => {
|
|
27
|
+
const location = res.headers.get("location");
|
|
28
|
+
const shouldAppendDevBrowser = res.headers.get(import_constants.constants.Headers.CabinIdRedirectTo) === "true";
|
|
29
|
+
if (shouldAppendDevBrowser && !!location) {
|
|
30
|
+
const url = new URL(location);
|
|
31
|
+
return import_server.NextResponse.redirect(url.href, res);
|
|
32
|
+
}
|
|
33
|
+
return res;
|
|
34
|
+
};
|
|
35
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
36
|
+
0 && (module.exports = {
|
|
37
|
+
serverRedirectWithAuth
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=serverRedirectWithAuth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/server/serverRedirectWithAuth.ts"],"sourcesContent":["import { NextResponse } from 'next/server';\nimport { constants } from '../constants';\n\nexport const serverRedirectWithAuth = (res: Response) => {\n const location = res.headers.get('location');\n const shouldAppendDevBrowser =\n res.headers.get(constants.Headers.CabinIdRedirectTo) === 'true';\n if (shouldAppendDevBrowser && !!location) {\n // Next.js 12.1+ allows redirects only to absolute URLs\n const url = new URL(location);\n return NextResponse.redirect(url.href, res);\n }\n return res;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA6B;AAC7B,uBAA0B;AAEnB,MAAM,yBAAyB,CAAC,QAAkB;AACvD,QAAM,WAAW,IAAI,QAAQ,IAAI,UAAU;AAC3C,QAAM,yBACJ,IAAI,QAAQ,IAAI,2BAAU,QAAQ,iBAAiB,MAAM;AAC3D,MAAI,0BAA0B,CAAC,CAAC,UAAU;AAExC,UAAM,MAAM,IAAI,IAAI,QAAQ;AAC5B,WAAO,2BAAa,SAAS,IAAI,MAAM,GAAG;AAAA,EAC5C;AACA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
+
var type_exports = {};
|
|
16
|
+
module.exports = __toCommonJS(type_exports);
|
|
17
|
+
//# sourceMappingURL=type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/server/type.ts"],"sourcesContent":["import { NextMiddleware } from \"next/server\";\n\nexport type NextMiddlewareRequestParam = Parameters<NextMiddleware>['0'];\nexport type NextMiddlewareEvtParam = Parameters<NextMiddleware>['1'];\nexport type NextMiddlewareReturn = ReturnType<NextMiddleware>;\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var utils_exports = {};
|
|
20
|
+
__export(utils_exports, {
|
|
21
|
+
apiEndpointUnauthorizedNextResponse: () => apiEndpointUnauthorizedNextResponse,
|
|
22
|
+
assertKey: () => assertKey,
|
|
23
|
+
decorateRequest: () => decorateRequest,
|
|
24
|
+
redirectAdapter: () => redirectAdapter,
|
|
25
|
+
setRequestHeadersOnNextResponse: () => setRequestHeadersOnNextResponse
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(utils_exports);
|
|
28
|
+
var import_server = require("next/server");
|
|
29
|
+
var import_constants = require("../constants");
|
|
30
|
+
function assertKey(key, onError) {
|
|
31
|
+
if (!key) {
|
|
32
|
+
onError();
|
|
33
|
+
}
|
|
34
|
+
return key;
|
|
35
|
+
}
|
|
36
|
+
const apiEndpointUnauthorizedNextResponse = () => {
|
|
37
|
+
return import_server.NextResponse.json(null, { status: 401, statusText: "Unauthorized" });
|
|
38
|
+
};
|
|
39
|
+
const redirectAdapter = (url) => {
|
|
40
|
+
return import_server.NextResponse.redirect(url, {
|
|
41
|
+
headers: { [import_constants.constants.Headers.CabinIdRedirectTo]: "true" }
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
const OVERRIDE_HEADERS = "x-middleware-override-headers";
|
|
45
|
+
const MIDDLEWARE_HEADER_PREFIX = "x-middleware-request";
|
|
46
|
+
const setRequestHeadersOnNextResponse = (res, req, newHeaders) => {
|
|
47
|
+
if (!res.headers.get(OVERRIDE_HEADERS)) {
|
|
48
|
+
res.headers.set(OVERRIDE_HEADERS, [...req.headers.keys()]);
|
|
49
|
+
req.headers.forEach((val, key) => {
|
|
50
|
+
res.headers.set(`${MIDDLEWARE_HEADER_PREFIX}-${key}`, val);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
Object.entries(newHeaders).forEach(([key, val]) => {
|
|
54
|
+
res.headers.set(
|
|
55
|
+
OVERRIDE_HEADERS,
|
|
56
|
+
`${res.headers.get(OVERRIDE_HEADERS)},${key}`
|
|
57
|
+
);
|
|
58
|
+
res.headers.set(`${MIDDLEWARE_HEADER_PREFIX}-${key}`, val);
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
function createTokenSignature(token, key) {
|
|
62
|
+
return `${token}${key}`;
|
|
63
|
+
}
|
|
64
|
+
function decorateRequest(req, res, requestState, secretKey) {
|
|
65
|
+
const { token } = requestState;
|
|
66
|
+
if (!res) {
|
|
67
|
+
res = import_server.NextResponse.next();
|
|
68
|
+
}
|
|
69
|
+
if (res.headers.get(import_constants.constants.NextHeaders.NextRedirect)) {
|
|
70
|
+
return res;
|
|
71
|
+
}
|
|
72
|
+
let rewriteURL;
|
|
73
|
+
if (res.headers.get(import_constants.constants.NextHeaders.NextResume) === "1") {
|
|
74
|
+
res.headers.delete(import_constants.constants.NextHeaders.NextResume);
|
|
75
|
+
rewriteURL = new URL(req.url);
|
|
76
|
+
}
|
|
77
|
+
const rewriteURLHeader = res.headers.get(import_constants.constants.NextHeaders.NextRewrite);
|
|
78
|
+
if (rewriteURLHeader) {
|
|
79
|
+
const reqURL = new URL(req.url);
|
|
80
|
+
rewriteURL = new URL(rewriteURLHeader);
|
|
81
|
+
if (rewriteURL.origin !== reqURL.origin) {
|
|
82
|
+
return res;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (rewriteURL) {
|
|
86
|
+
setRequestHeadersOnNextResponse(res, req, {
|
|
87
|
+
[import_constants.constants.Headers.AuthToken]: token || "",
|
|
88
|
+
[import_constants.constants.Headers.AuthSignature]: token ? createTokenSignature(token, secretKey) : ""
|
|
89
|
+
});
|
|
90
|
+
const origin = rewriteURL == null ? void 0 : rewriteURL.origin;
|
|
91
|
+
const pathName = rewriteURL == null ? void 0 : rewriteURL.pathname;
|
|
92
|
+
res.headers.set(
|
|
93
|
+
import_constants.constants.NextHeaders.NextRewrite,
|
|
94
|
+
`${origin}${pathName || ""}`
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
return res;
|
|
98
|
+
}
|
|
99
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
100
|
+
0 && (module.exports = {
|
|
101
|
+
apiEndpointUnauthorizedNextResponse,
|
|
102
|
+
assertKey,
|
|
103
|
+
decorateRequest,
|
|
104
|
+
redirectAdapter,
|
|
105
|
+
setRequestHeadersOnNextResponse
|
|
106
|
+
});
|
|
107
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/server/utils.ts"],"sourcesContent":["import { NextResponse } from 'next/server';\nimport type { NextRequest } from 'next/server';\nimport { constants } from '../constants';\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: NextRequest,\n res: Response,\n requestState: RequestState,\n secretKey: string\n): Response {\n const { token } = requestState;\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"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA6B;AAE7B,uBAA0B;AAEnB,SAAS,UAAU,KAAa,SAA8B;AACnE,MAAI,CAAC,KAAK;AACR,YAAQ;AAAA,EACV;AAEA,SAAO;AACT;AAEO,MAAM,sCAAsC,MAAM;AACvD,SAAO,2BAAa,KAAK,MAAM,EAAE,QAAQ,KAAK,YAAY,eAAe,CAAC;AAC5E;AAEO,MAAM,kBAAkB,CAAC,QAAsB;AACpD,SAAO,2BAAa,SAAS,KAAK;AAAA,IAChC,SAAS,EAAE,CAAC,2BAAU,QAAQ,iBAAiB,GAAG,OAAO;AAAA,EAC3D,CAAC;AACH;AAEA,MAAM,mBAAmB;AACzB,MAAM,2BAA2B;AAE1B,MAAM,kCAAkC,CAC7C,KACA,KACA,eACG;AACH,MAAI,CAAC,IAAI,QAAQ,IAAI,gBAAgB,GAAG;AAItC,QAAI,QAAQ,IAAI,kBAAkB,CAAC,GAAG,IAAI,QAAQ,KAAK,CAAC,CAAC;AACzD,QAAI,QAAQ,QAAQ,CAAC,KAAK,QAAQ;AAChC,UAAI,QAAQ,IAAI,GAAG,wBAAwB,IAAI,GAAG,IAAI,GAAG;AAAA,IAC3D,CAAC;AAAA,EACH;AAGA,SAAO,QAAQ,UAAU,EAAE,QAAQ,CAAC,CAAC,KAAK,GAAG,MAAM;AACjD,QAAI,QAAQ;AAAA,MACV;AAAA,MACA,GAAG,IAAI,QAAQ,IAAI,gBAAgB,CAAC,IAAI,GAAG;AAAA,IAC7C;AACA,QAAI,QAAQ,IAAI,GAAG,wBAAwB,IAAI,GAAG,IAAI,GAAG;AAAA,EAC3D,CAAC;AACH;AAKA,SAAS,qBAAqB,OAAe,KAAqB;AAChE,SAAO,GAAG,KAAK,GAAG,GAAG;AACvB;AAKO,SAAS,gBACd,KACA,KACA,cACA,WACU;AACV,QAAM,EAAE,MAAM,IAAI;AAElB,MAAI,CAAC,KAAK;AACR,UAAM,2BAAa,KAAK;AAAA,EAC1B;AAGA,MAAI,IAAI,QAAQ,IAAI,2BAAU,YAAY,YAAY,GAAG;AACvD,WAAO;AAAA,EACT;AAEA,MAAI;AAGJ,MAAI,IAAI,QAAQ,IAAI,2BAAU,YAAY,UAAU,MAAM,KAAK;AAC7D,QAAI,QAAQ,OAAO,2BAAU,YAAY,UAAU;AACnD,iBAAa,IAAI,IAAI,IAAI,GAAG;AAAA,EAC9B;AAGA,QAAM,mBAAmB,IAAI,QAAQ,IAAI,2BAAU,YAAY,WAAW;AAE1E,MAAI,kBAAkB;AACpB,UAAM,SAAS,IAAI,IAAI,IAAI,GAAG;AAC9B,iBAAa,IAAI,IAAI,gBAAgB;AAGrC,QAAI,WAAW,WAAW,OAAO,QAAQ;AACvC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,YAAY;AACd,oCAAgC,KAAK,KAAK;AAAA,MACxC,CAAC,2BAAU,QAAQ,SAAS,GAAG,SAAS;AAAA,MACxC,CAAC,2BAAU,QAAQ,aAAa,GAAG,QAC/B,qBAAqB,OAAO,SAAS,IACrC;AAAA,IACN,CAAC;AACD,UAAM,SAAS,yCAAY;AAC3B,UAAM,WAAW,yCAAY;AAE7B,QAAI,QAAQ;AAAA,MACV,2BAAU,YAAY;AAAA,MACtB,GAAG,MAAM,GAAG,YAAY,EAAE;AAAA,IAC5B;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
|