@cabin-id/nextjs 1.0.0 → 1.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/endpoints/AbstractApi.js +38 -0
- package/dist/cjs/api/endpoints/AbstractApi.js.map +1 -0
- package/dist/cjs/api/endpoints/UserApi.js +40 -0
- package/dist/cjs/api/endpoints/UserApi.js.map +1 -0
- package/dist/cjs/api/endpoints/index.js +32 -0
- package/dist/cjs/api/endpoints/index.js.map +1 -0
- package/dist/cjs/api/factory.js +60 -0
- package/dist/cjs/api/factory.js.map +1 -0
- package/dist/cjs/api/request.js +97 -0
- package/dist/cjs/api/request.js.map +1 -0
- package/dist/cjs/component.client.js +32 -0
- package/dist/cjs/component.client.js.map +1 -0
- package/dist/cjs/component.server.js +32 -0
- package/dist/cjs/component.server.js.map +1 -0
- package/dist/cjs/components/SignInButton.js +67 -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 +122 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/hooks/createContextAndHook.js +62 -0
- package/dist/cjs/hooks/createContextAndHook.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/useSafeLayoutEffect.js +40 -0
- package/dist/cjs/hooks/useSafeLayoutEffect.js.map +1 -0
- package/dist/cjs/hooks/useUser.js +70 -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 +45 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +9 -0
- package/dist/cjs/provider/context.js +62 -0
- package/dist/cjs/provider/context.js.map +1 -0
- package/dist/cjs/provider/core.provider.js +49 -0
- package/dist/cjs/provider/core.provider.js.map +1 -0
- package/dist/cjs/provider/main.provider.js +45 -0
- package/dist/cjs/provider/main.provider.js.map +1 -0
- package/dist/cjs/server/auth.js +61 -0
- package/dist/cjs/server/auth.js.map +1 -0
- package/dist/cjs/server/client.js +35 -0
- package/dist/cjs/server/client.js.map +1 -0
- package/dist/cjs/server/createGetAuth.js +45 -0
- package/dist/cjs/server/createGetAuth.js.map +1 -0
- package/dist/cjs/server/createRedirect.js +90 -0
- package/dist/cjs/server/createRedirect.js.map +1 -0
- package/dist/cjs/server/errors.js +110 -0
- package/dist/cjs/server/errors.js.map +1 -0
- package/dist/cjs/server/getCurrentUser.js +36 -0
- package/dist/cjs/server/getCurrentUser.js.map +1 -0
- package/dist/cjs/server/index.js +32 -0
- package/dist/cjs/server/index.js.map +1 -0
- package/dist/cjs/server/middleware.js +195 -0
- package/dist/cjs/server/middleware.js.map +1 -0
- package/dist/cjs/server/protect.js +69 -0
- package/dist/cjs/server/protect.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 +165 -0
- package/dist/cjs/server/utils.js.map +1 -0
- package/dist/cjs/styles/global.css +420 -0
- package/dist/cjs/styles/global.css.map +1 -0
- package/dist/cjs/tokens/authObjects.js +45 -0
- package/dist/cjs/tokens/authObjects.js.map +1 -0
- package/dist/cjs/tokens/authStatus.js +86 -0
- package/dist/cjs/tokens/authStatus.js.map +1 -0
- package/dist/cjs/tokens/authenticateContext.js +69 -0
- package/dist/cjs/tokens/authenticateContext.js.map +1 -0
- package/dist/cjs/tokens/cabinIdRequest.js +79 -0
- package/dist/cjs/tokens/cabinIdRequest.js.map +1 -0
- package/dist/cjs/tokens/cabinIdUrl.js +36 -0
- package/dist/cjs/tokens/cabinIdUrl.js.map +1 -0
- package/dist/cjs/tokens/request.js +58 -0
- package/dist/cjs/tokens/request.js.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/createCabinIdClient.js +38 -0
- package/dist/cjs/utils/createCabinIdClient.js.map +1 -0
- package/dist/cjs/utils/http.js +31 -0
- package/dist/cjs/utils/http.js.map +1 -0
- package/dist/cjs/utils/initial.js +45 -0
- package/dist/cjs/utils/initial.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 +52 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/esm/api/endpoints/AbstractApi.js +14 -0
- package/dist/esm/api/endpoints/AbstractApi.js.map +1 -0
- package/dist/esm/api/endpoints/UserApi.js +16 -0
- package/dist/esm/api/endpoints/UserApi.js.map +1 -0
- package/dist/esm/api/endpoints/index.js +7 -0
- package/dist/esm/api/endpoints/index.js.map +1 -0
- package/dist/esm/api/factory.js +35 -0
- package/dist/esm/api/factory.js.map +1 -0
- package/dist/esm/api/request.js +63 -0
- package/dist/esm/api/request.js.map +1 -0
- package/dist/esm/component.client.js +7 -0
- package/dist/esm/component.client.js.map +1 -0
- package/dist/esm/component.server.js +7 -0
- package/dist/esm/component.server.js.map +1 -0
- package/dist/esm/components/SignInButton.js +33 -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 +88 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/hooks/createContextAndHook.js +27 -0
- package/dist/esm/hooks/createContextAndHook.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/useSafeLayoutEffect.js +6 -0
- package/dist/esm/hooks/useSafeLayoutEffect.js.map +1 -0
- package/dist/esm/hooks/useUser.js +54 -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 +16 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +9 -0
- package/dist/esm/provider/context.js +24 -0
- package/dist/esm/provider/context.js.map +1 -0
- package/dist/esm/provider/core.provider.js +15 -0
- package/dist/esm/provider/core.provider.js.map +1 -0
- package/dist/esm/provider/main.provider.js +11 -0
- package/dist/esm/provider/main.provider.js.map +1 -0
- package/dist/esm/server/auth.js +37 -0
- package/dist/esm/server/auth.js.map +1 -0
- package/dist/esm/server/client.js +11 -0
- package/dist/esm/server/client.js.map +1 -0
- package/dist/esm/server/createGetAuth.js +23 -0
- package/dist/esm/server/createGetAuth.js.map +1 -0
- package/dist/esm/server/createRedirect.js +66 -0
- package/dist/esm/server/createRedirect.js.map +1 -0
- package/dist/esm/server/errors.js +78 -0
- package/dist/esm/server/errors.js.map +1 -0
- package/dist/esm/server/getCurrentUser.js +12 -0
- package/dist/esm/server/getCurrentUser.js.map +1 -0
- package/dist/esm/server/index.js +7 -0
- package/dist/esm/server/index.js.map +1 -0
- package/dist/esm/server/middleware.js +177 -0
- package/dist/esm/server/middleware.js.map +1 -0
- package/dist/esm/server/protect.js +45 -0
- package/dist/esm/server/protect.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 +132 -0
- package/dist/esm/server/utils.js.map +1 -0
- package/dist/esm/styles/global.css +420 -0
- package/dist/esm/styles/global.css.map +1 -0
- package/dist/esm/tokens/authObjects.js +20 -0
- package/dist/esm/tokens/authObjects.js.map +1 -0
- package/dist/esm/tokens/authStatus.js +59 -0
- package/dist/esm/tokens/authStatus.js.map +1 -0
- package/dist/esm/tokens/authenticateContext.js +45 -0
- package/dist/esm/tokens/authenticateContext.js.map +1 -0
- package/dist/esm/tokens/cabinIdRequest.js +55 -0
- package/dist/esm/tokens/cabinIdRequest.js.map +1 -0
- package/dist/esm/tokens/cabinIdUrl.js +12 -0
- package/dist/esm/tokens/cabinIdUrl.js.map +1 -0
- package/dist/esm/tokens/request.js +34 -0
- package/dist/esm/tokens/request.js.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/createCabinIdClient.js +17 -0
- package/dist/esm/utils/createCabinIdClient.js.map +1 -0
- package/dist/esm/utils/http.js +7 -0
- package/dist/esm/utils/http.js.map +1 -0
- package/dist/esm/utils/initial.js +21 -0
- package/dist/esm/utils/initial.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 +27 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/types/api/endpoints/AbstractApi.d.ts +7 -0
- package/dist/types/api/endpoints/AbstractApi.d.ts.map +1 -0
- package/dist/types/api/endpoints/UserApi.d.ts +6 -0
- package/dist/types/api/endpoints/UserApi.d.ts.map +1 -0
- package/dist/types/api/endpoints/index.d.ts +3 -0
- package/dist/types/api/endpoints/index.d.ts.map +1 -0
- package/dist/types/api/factory.d.ts +35 -0
- package/dist/types/api/factory.d.ts.map +1 -0
- package/dist/types/api/request.d.ts +33 -0
- package/dist/types/api/request.d.ts.map +1 -0
- package/dist/types/component.client.d.ts +3 -0
- package/dist/types/component.client.d.ts.map +1 -0
- package/dist/types/component.server.d.ts +3 -0
- package/dist/types/component.server.d.ts.map +1 -0
- package/dist/types/components/SignInButton.d.ts +3 -0
- package/dist/types/components/SignInButton.d.ts.map +1 -0
- package/dist/types/components/index.d.ts +2 -0
- package/dist/types/components/index.d.ts.map +1 -0
- package/dist/types/constants.d.ts +69 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/hooks/createContextAndHook.d.ts +18 -0
- package/dist/types/hooks/createContextAndHook.d.ts.map +1 -0
- package/dist/types/hooks/index.d.ts +2 -0
- package/dist/types/hooks/index.d.ts.map +1 -0
- package/dist/types/hooks/useSafeLayoutEffect.d.ts +3 -0
- package/dist/types/hooks/useSafeLayoutEffect.d.ts.map +1 -0
- package/dist/types/hooks/useUser.d.ts +36 -0
- package/dist/types/hooks/useUser.d.ts.map +1 -0
- package/dist/types/icons/logo.d.ts +3 -0
- package/dist/types/icons/logo.d.ts.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/provider/context.d.ts +15 -0
- package/dist/types/provider/context.d.ts.map +1 -0
- package/dist/types/provider/core.provider.d.ts +6 -0
- package/dist/types/provider/core.provider.d.ts.map +1 -0
- package/dist/types/provider/main.provider.d.ts +5 -0
- package/dist/types/provider/main.provider.d.ts.map +1 -0
- package/dist/types/server/auth.d.ts +11 -0
- package/dist/types/server/auth.d.ts.map +1 -0
- package/dist/types/server/client.d.ts +3 -0
- package/dist/types/server/client.d.ts.map +1 -0
- package/dist/types/server/createGetAuth.d.ts +5 -0
- package/dist/types/server/createGetAuth.d.ts.map +1 -0
- package/dist/types/server/createRedirect.d.ts +21 -0
- package/dist/types/server/createRedirect.d.ts.map +1 -0
- package/dist/types/server/errors.d.ts +10 -0
- package/dist/types/server/errors.d.ts.map +1 -0
- package/dist/types/server/getCurrentUser.d.ts +3 -0
- package/dist/types/server/getCurrentUser.d.ts.map +1 -0
- package/dist/types/server/index.d.ts +3 -0
- package/dist/types/server/index.d.ts.map +1 -0
- package/dist/types/server/middleware.d.ts +33 -0
- package/dist/types/server/middleware.d.ts.map +1 -0
- package/dist/types/server/protect.d.ts +34 -0
- package/dist/types/server/protect.d.ts.map +1 -0
- package/dist/types/server/routeMatcher.d.ts +10 -0
- package/dist/types/server/routeMatcher.d.ts.map +1 -0
- package/dist/types/server/serverRedirectWithAuth.d.ts +3 -0
- package/dist/types/server/serverRedirectWithAuth.d.ts.map +1 -0
- package/dist/types/server/type.d.ts +14 -0
- package/dist/types/server/type.d.ts.map +1 -0
- package/dist/types/server/utils.d.ts +17 -0
- package/dist/types/server/utils.d.ts.map +1 -0
- package/dist/types/tokens/authObjects.d.ts +37 -0
- package/dist/types/tokens/authObjects.d.ts.map +1 -0
- package/dist/types/tokens/authStatus.d.ts +51 -0
- package/dist/types/tokens/authStatus.d.ts.map +1 -0
- package/dist/types/tokens/authenticateContext.d.ts +40 -0
- package/dist/types/tokens/authenticateContext.d.ts.map +1 -0
- package/dist/types/tokens/cabinIdRequest.d.ts +24 -0
- package/dist/types/tokens/cabinIdRequest.d.ts.map +1 -0
- package/dist/types/tokens/cabinIdUrl.d.ts +18 -0
- package/dist/types/tokens/cabinIdUrl.d.ts.map +1 -0
- package/dist/types/tokens/request.d.ts +4 -0
- package/dist/types/tokens/request.d.ts.map +1 -0
- package/dist/types/types.d.ts +34 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/utils/assertValidSecretKey.d.ts +2 -0
- package/dist/types/utils/assertValidSecretKey.d.ts.map +1 -0
- package/dist/types/utils/createCabinIdClient.d.ts +5 -0
- package/dist/types/utils/createCabinIdClient.d.ts.map +1 -0
- package/dist/types/utils/http.d.ts +4 -0
- package/dist/types/utils/http.d.ts.map +1 -0
- package/dist/types/utils/initial.d.ts +5 -0
- package/dist/types/utils/initial.d.ts.map +1 -0
- package/dist/types/utils/isomorphicAtob.d.ts +6 -0
- package/dist/types/utils/isomorphicAtob.d.ts.map +1 -0
- package/dist/types/utils/isomorphicBtoa.d.ts +2 -0
- package/dist/types/utils/isomorphicBtoa.d.ts.map +1 -0
- package/dist/types/utils/key.d.ts +5 -0
- package/dist/types/utils/key.d.ts.map +1 -0
- package/dist/types/utils/path.d.ts +4 -0
- package/dist/types/utils/path.d.ts.map +1 -0
- package/dist/types/utils/response.d.ts +13 -0
- package/dist/types/utils/response.d.ts.map +1 -0
- package/dist/types/utils.d.ts +5 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { createContextAndHook } from "../hooks/createContextAndHook";
|
|
3
|
+
const [CabinIdInstanceContext, useCabinIDInstanceContext] = createContextAndHook("CabinIdInstanceContext");
|
|
4
|
+
const [UserContext, useUserContext] = createContextAndHook("UserContext");
|
|
5
|
+
function useAssertWrappedByCabinIdProvider(displayNameOrFn) {
|
|
6
|
+
const ctx = React.useContext(CabinIdInstanceContext);
|
|
7
|
+
if (!ctx) {
|
|
8
|
+
if (typeof displayNameOrFn === "function") {
|
|
9
|
+
displayNameOrFn();
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
throw new Error(
|
|
13
|
+
`${displayNameOrFn} can only be used within the <CabinIDProvider /> component.`
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
CabinIdInstanceContext,
|
|
19
|
+
UserContext,
|
|
20
|
+
useAssertWrappedByCabinIdProvider,
|
|
21
|
+
useCabinIDInstanceContext,
|
|
22
|
+
useUserContext
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/provider/context.tsx"],"sourcesContent":["import React from 'react';\nimport { createContextAndHook } from '../hooks/createContextAndHook';\nimport { User } from '../types';\n\nexport type LoadedCabinId = {\n user: User | null;\n userId: string | null;\n};\n\nconst [CabinIdInstanceContext, useCabinIDInstanceContext] =\n createContextAndHook<LoadedCabinId>('CabinIdInstanceContext');\nconst [UserContext, useUserContext] = createContextAndHook<\n User | null | undefined\n>('UserContext');\n\nfunction useAssertWrappedByCabinIdProvider(\n displayNameOrFn: string | (() => void)\n): void {\n const ctx = React.useContext(CabinIdInstanceContext);\n\n if (!ctx) {\n if (typeof displayNameOrFn === 'function') {\n displayNameOrFn();\n return;\n }\n\n throw new Error(\n `${displayNameOrFn} can only be used within the <CabinIDProvider /> component.`\n );\n }\n}\n\nexport {\n CabinIdInstanceContext,\n UserContext,\n useCabinIDInstanceContext,\n useUserContext,\n useAssertWrappedByCabinIdProvider,\n};\n"],"mappings":"AAAA,OAAO,WAAW;AAClB,SAAS,4BAA4B;AAQrC,MAAM,CAAC,wBAAwB,yBAAyB,IACtD,qBAAoC,wBAAwB;AAC9D,MAAM,CAAC,aAAa,cAAc,IAAI,qBAEpC,aAAa;AAEf,SAAS,kCACP,iBACM;AACN,QAAM,MAAM,MAAM,WAAW,sBAAsB;AAEnD,MAAI,CAAC,KAAK;AACR,QAAI,OAAO,oBAAoB,YAAY;AACzC,sBAAgB;AAChB;AAAA,IACF;AAEA,UAAM,IAAI;AAAA,MACR,GAAG,eAAe;AAAA,IACpB;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { CabinIdInstanceContext, UserContext } from "./context";
|
|
4
|
+
const CabinIDCoreProvider = ({
|
|
5
|
+
children,
|
|
6
|
+
...rest
|
|
7
|
+
}) => {
|
|
8
|
+
const { user } = rest;
|
|
9
|
+
const userCtx = React.useMemo(() => ({ value: user }), [user]);
|
|
10
|
+
return /* @__PURE__ */ React.createElement(CabinIdInstanceContext.Provider, { value: { value: rest } }, /* @__PURE__ */ React.createElement(UserContext.Provider, { value: userCtx }, children));
|
|
11
|
+
};
|
|
12
|
+
export {
|
|
13
|
+
CabinIDCoreProvider
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=core.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/provider/core.provider.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport type { PropsWithChildren } from 'react';\nimport { CabinIdInstanceContext, LoadedCabinId, UserContext } from './context';\n\nconst CabinIDCoreProvider = ({\n children,\n ...rest\n}: PropsWithChildren<LoadedCabinId>) => {\n const { user } = rest;\n\n const userCtx = React.useMemo(() => ({ value: user }), [user]);\n\n return (\n <CabinIdInstanceContext.Provider value={{ value: rest }}>\n <UserContext.Provider value={userCtx}>{children}</UserContext.Provider>\n </CabinIdInstanceContext.Provider>\n );\n};\n\nexport { CabinIDCoreProvider };\n"],"mappings":";AAEA,OAAO,WAAW;AAElB,SAAS,wBAAuC,mBAAmB;AAEnE,MAAM,sBAAsB,CAAC;AAAA,EAC3B;AAAA,EACA,GAAG;AACL,MAAwC;AACtC,QAAM,EAAE,KAAK,IAAI;AAEjB,QAAM,UAAU,MAAM,QAAQ,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC,IAAI,CAAC;AAE7D,SACE,oCAAC,uBAAuB,UAAvB,EAAgC,OAAO,EAAE,OAAO,KAAK,KACpD,oCAAC,YAAY,UAAZ,EAAqB,OAAO,WAAU,QAAS,CAClD;AAEJ;","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { CabinIDCoreProvider } from "./core.provider";
|
|
3
|
+
import { initialState } from "../utils/initial";
|
|
4
|
+
const CabinIDProvider = async ({ children }) => {
|
|
5
|
+
const state = await initialState();
|
|
6
|
+
return /* @__PURE__ */ React.createElement(CabinIDCoreProvider, { ...state }, children);
|
|
7
|
+
};
|
|
8
|
+
export {
|
|
9
|
+
CabinIDProvider
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=main.provider.js.map
|
|
@@ -0,0 +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,OAAO,WAAW;AAElB,SAAS,2BAA2B;AACpC,SAAS,oBAAoB;AAE7B,MAAM,kBAAkB,OAAO,EAAE,SAAS,MAA8B;AACtE,QAAM,QAAQ,MAAM,aAAa;AACjC,SAAO,oCAAC,uBAAqB,GAAG,SAAQ,QAAS;AACnD;","names":[]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { notFound, redirect } from "next/navigation";
|
|
2
|
+
import { createRedirect } from "./createRedirect";
|
|
3
|
+
import { createProtect } from "./protect";
|
|
4
|
+
import { buildRequestLike, getAuthKeyFromRequest } from "./utils";
|
|
5
|
+
import { PUBLISHABLE_KEY, SIGN_IN_URL, SIGN_UP_URL } from "../constants";
|
|
6
|
+
import { createCabinIdRequest } from "../tokens/cabinIdRequest";
|
|
7
|
+
import { createGetAuth } from "./createGetAuth";
|
|
8
|
+
const auth = () => {
|
|
9
|
+
const request = buildRequestLike();
|
|
10
|
+
const authObject = createGetAuth()(request);
|
|
11
|
+
const cabinIdUrl = getAuthKeyFromRequest(request, "CabinIdUrl");
|
|
12
|
+
const redirectToSignIn = (opts = {}) => {
|
|
13
|
+
return createRedirect({
|
|
14
|
+
redirectAdapter: redirect,
|
|
15
|
+
baseUrl: createCabinIdRequest(request).cabinIdUrl.toString(),
|
|
16
|
+
// TODO: Support runtime-value configuration of these options
|
|
17
|
+
// via setting and reading headers from clerkMiddleware
|
|
18
|
+
publishableKey: PUBLISHABLE_KEY,
|
|
19
|
+
signInUrl: SIGN_IN_URL,
|
|
20
|
+
signUpUrl: SIGN_UP_URL
|
|
21
|
+
}).redirectToSignIn({
|
|
22
|
+
returnBackUrl: opts.returnBackUrl === null ? "" : opts.returnBackUrl || (cabinIdUrl == null ? void 0 : cabinIdUrl.toString())
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
const protect = createProtect({
|
|
26
|
+
request,
|
|
27
|
+
authObject,
|
|
28
|
+
redirectToSignIn,
|
|
29
|
+
notFound,
|
|
30
|
+
redirect
|
|
31
|
+
});
|
|
32
|
+
return Object.assign(authObject, { protect, redirectToSignIn });
|
|
33
|
+
};
|
|
34
|
+
export {
|
|
35
|
+
auth
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/server/auth.ts"],"sourcesContent":["import { notFound, redirect } from 'next/navigation';\nimport { AuthObject } from '../tokens/authObjects';\nimport { createRedirect, RedirectFun } from './createRedirect';\nimport { AuthProtect, createProtect } from './protect';\nimport { buildRequestLike, getAuthKeyFromRequest } from './utils';\nimport { PUBLISHABLE_KEY, SIGN_IN_URL, SIGN_UP_URL } from '../constants';\nimport { createCabinIdRequest } from '../tokens/cabinIdRequest';\nimport { createGetAuth } from './createGetAuth';\n\ntype Auth = AuthObject & {\n protect: AuthProtect;\n redirectToSignIn: RedirectFun<ReturnType<typeof redirect>>;\n};\n\nexport const auth = (): Auth => {\n const request = buildRequestLike();\n const authObject = createGetAuth()(request);\n\n const cabinIdUrl = getAuthKeyFromRequest(request, 'CabinIdUrl');\n\n const redirectToSignIn: RedirectFun<never> = (opts = {}) => {\n return createRedirect({\n redirectAdapter: redirect,\n baseUrl: createCabinIdRequest(request).cabinIdUrl.toString(),\n // TODO: Support runtime-value configuration of these options\n // via setting and reading headers from clerkMiddleware\n publishableKey: PUBLISHABLE_KEY,\n signInUrl: SIGN_IN_URL,\n signUpUrl: SIGN_UP_URL,\n }).redirectToSignIn({\n returnBackUrl:\n opts.returnBackUrl === null\n ? ''\n : opts.returnBackUrl || cabinIdUrl?.toString(),\n });\n };\n\n const protect = createProtect({\n request,\n authObject,\n redirectToSignIn,\n notFound,\n redirect,\n });\n\n return Object.assign(authObject, { protect, redirectToSignIn });\n};\n"],"mappings":"AAAA,SAAS,UAAU,gBAAgB;AAEnC,SAAS,sBAAmC;AAC5C,SAAsB,qBAAqB;AAC3C,SAAS,kBAAkB,6BAA6B;AACxD,SAAS,iBAAiB,aAAa,mBAAmB;AAC1D,SAAS,4BAA4B;AACrC,SAAS,qBAAqB;AAOvB,MAAM,OAAO,MAAY;AAC9B,QAAM,UAAU,iBAAiB;AACjC,QAAM,aAAa,cAAc,EAAE,OAAO;AAE1C,QAAM,aAAa,sBAAsB,SAAS,YAAY;AAE9D,QAAM,mBAAuC,CAAC,OAAO,CAAC,MAAM;AAC1D,WAAO,eAAe;AAAA,MACpB,iBAAiB;AAAA,MACjB,SAAS,qBAAqB,OAAO,EAAE,WAAW,SAAS;AAAA;AAAA;AAAA,MAG3D,gBAAgB;AAAA,MAChB,WAAW;AAAA,MACX,WAAW;AAAA,IACb,CAAC,EAAE,iBAAiB;AAAA,MAClB,eACE,KAAK,kBAAkB,OACnB,KACA,KAAK,kBAAiB,yCAAY;AAAA,IAC1C,CAAC;AAAA,EACH;AAEA,QAAM,UAAU,cAAc;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,OAAO,OAAO,YAAY,EAAE,SAAS,iBAAiB,CAAC;AAChE;","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { API_URL, API_VERSION, SECRET_KEY } from "../constants";
|
|
2
|
+
import { createCabinIdClient } from "../utils/createCabinIdClient";
|
|
3
|
+
const cabinIdClient = createCabinIdClient({
|
|
4
|
+
apiUrl: API_URL,
|
|
5
|
+
apiVersion: API_VERSION,
|
|
6
|
+
secretKey: SECRET_KEY
|
|
7
|
+
});
|
|
8
|
+
export {
|
|
9
|
+
cabinIdClient
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/server/client.ts"],"sourcesContent":["import { API_URL, API_VERSION, SECRET_KEY } from '../constants';\nimport { createCabinIdClient } from '../utils/createCabinIdClient';\n\nconst cabinIdClient = createCabinIdClient({\n apiUrl: API_URL,\n apiVersion: API_VERSION,\n secretKey: SECRET_KEY,\n});\n\nexport { cabinIdClient };\n"],"mappings":"AAAA,SAAS,SAAS,aAAa,kBAAkB;AACjD,SAAS,2BAA2B;AAEpC,MAAM,gBAAgB,oBAAoB;AAAA,EACxC,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,WAAW;AACb,CAAC;","names":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import {
|
|
2
|
+
signedInAuthObject,
|
|
3
|
+
signedOutAuthObject
|
|
4
|
+
} from "../tokens/authObjects";
|
|
5
|
+
import { constants } from "../constants";
|
|
6
|
+
import { getCookie } from "./utils";
|
|
7
|
+
const createGetAuth = () => (req) => {
|
|
8
|
+
const authToken = getCookie(req, constants.Cookies.Client);
|
|
9
|
+
const userId = getCookie(req, constants.Cookies.User);
|
|
10
|
+
if (authToken && userId) {
|
|
11
|
+
return signedInAuthObject({
|
|
12
|
+
sessionToken: authToken || "",
|
|
13
|
+
userId: userId || ""
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return signedOutAuthObject();
|
|
17
|
+
};
|
|
18
|
+
const getAuth = createGetAuth();
|
|
19
|
+
export {
|
|
20
|
+
createGetAuth,
|
|
21
|
+
getAuth
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=createGetAuth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/server/createGetAuth.ts"],"sourcesContent":["import {\n AuthObject,\n signedInAuthObject,\n signedOutAuthObject,\n} from '../tokens/authObjects';\nimport { constants } from '../constants';\nimport { getCookie } from './utils';\nimport { RequestLike } from './type';\n\nexport const createGetAuth =\n () =>\n (req: RequestLike): AuthObject => {\n const authToken = getCookie(req, constants.Cookies.Client);\n const userId = getCookie(req, constants.Cookies.User);\n if (authToken && userId) {\n return signedInAuthObject({\n sessionToken: authToken || '',\n userId: userId || '',\n });\n }\n\n return signedOutAuthObject();\n };\n\nexport const getAuth = createGetAuth();\n"],"mappings":"AAAA;AAAA,EAEE;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB;AAC1B,SAAS,iBAAiB;AAGnB,MAAM,gBACX,MACA,CAAC,QAAiC;AAChC,QAAM,YAAY,UAAU,KAAK,UAAU,QAAQ,MAAM;AACzD,QAAM,SAAS,UAAU,KAAK,UAAU,QAAQ,IAAI;AACpD,MAAI,aAAa,QAAQ;AACvB,WAAO,mBAAmB;AAAA,MACxB,cAAc,aAAa;AAAA,MAC3B,QAAQ,UAAU;AAAA,IACpB,CAAC;AAAA,EACH;AAEA,SAAO,oBAAoB;AAC7B;AAEK,MAAM,UAAU,cAAc;","names":[]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { parsePublishableKey } from "../utils/key";
|
|
2
|
+
const buildUrl = (_baseUrl, _targetUrl, _returnBackUrl) => {
|
|
3
|
+
if (!!_baseUrl) {
|
|
4
|
+
const baseUrl = new URL(_baseUrl);
|
|
5
|
+
const returnBackUrl = _returnBackUrl ? new URL(_returnBackUrl, baseUrl) : void 0;
|
|
6
|
+
const res = new URL(_targetUrl, baseUrl);
|
|
7
|
+
if (returnBackUrl) {
|
|
8
|
+
res.searchParams.set("redirect_url", returnBackUrl.toString());
|
|
9
|
+
}
|
|
10
|
+
return res.toString();
|
|
11
|
+
} else {
|
|
12
|
+
const returnBackUrl = _returnBackUrl ? new URL(_returnBackUrl) : void 0;
|
|
13
|
+
const res = new URL(_targetUrl);
|
|
14
|
+
if (returnBackUrl) {
|
|
15
|
+
res.searchParams.set("redirect_url", returnBackUrl.toString());
|
|
16
|
+
}
|
|
17
|
+
return res.toString();
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const buildAccountsBaseUrl = (frontendApi) => {
|
|
21
|
+
if (!frontendApi) {
|
|
22
|
+
return "";
|
|
23
|
+
}
|
|
24
|
+
const accountsBaseUrl = frontendApi;
|
|
25
|
+
return `https://${accountsBaseUrl}`;
|
|
26
|
+
};
|
|
27
|
+
const createRedirect = (params) => {
|
|
28
|
+
const { publishableKey, redirectAdapter, signInUrl, signUpUrl, baseUrl } = params;
|
|
29
|
+
const frontendApi = parsePublishableKey(publishableKey);
|
|
30
|
+
const accountsBaseUrl = buildAccountsBaseUrl(frontendApi);
|
|
31
|
+
const redirectToSignUp = ({ returnBackUrl } = {}) => {
|
|
32
|
+
if (!signUpUrl && !accountsBaseUrl) {
|
|
33
|
+
throw new Error("Publish Key is not exist");
|
|
34
|
+
}
|
|
35
|
+
const accountsSignUpUrl = `${accountsBaseUrl}/sign-up`;
|
|
36
|
+
let redirect = null;
|
|
37
|
+
if (signUpUrl) {
|
|
38
|
+
redirect = redirectAdapter(buildUrl(baseUrl, signUpUrl));
|
|
39
|
+
} else {
|
|
40
|
+
redirect = redirectAdapter(
|
|
41
|
+
buildUrl(null, accountsSignUpUrl, returnBackUrl)
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
return redirect;
|
|
45
|
+
};
|
|
46
|
+
const redirectToSignIn = ({ returnBackUrl } = {}) => {
|
|
47
|
+
if (!signInUrl && !accountsBaseUrl) {
|
|
48
|
+
throw new Error("Publish Key is not exist");
|
|
49
|
+
}
|
|
50
|
+
const accountsSignInUrl = `${accountsBaseUrl}/sign-in`;
|
|
51
|
+
let redirect = null;
|
|
52
|
+
if (signInUrl) {
|
|
53
|
+
redirect = redirectAdapter(buildUrl(baseUrl, signInUrl));
|
|
54
|
+
} else {
|
|
55
|
+
redirect = redirectAdapter(
|
|
56
|
+
buildUrl(null, accountsSignInUrl, returnBackUrl)
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
return redirect;
|
|
60
|
+
};
|
|
61
|
+
return { redirectToSignUp, redirectToSignIn };
|
|
62
|
+
};
|
|
63
|
+
export {
|
|
64
|
+
createRedirect
|
|
65
|
+
};
|
|
66
|
+
//# 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 | null,\n _targetUrl: string | URL,\n _returnBackUrl?: string | URL | null\n) => {\n if (!!_baseUrl) {\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 } else {\n const returnBackUrl = _returnBackUrl ? new URL(_returnBackUrl) : undefined;\n const res = new URL(_targetUrl);\n\n if (returnBackUrl) {\n res.searchParams.set('redirect_url', returnBackUrl.toString());\n }\n return res.toString();\n }\n};\n\nconst buildAccountsBaseUrl = (frontendApi: string | null) => {\n if (!frontendApi) {\n return '';\n }\n\n // convert url from FAPI to accounts for Kima and legacy (prod & dev) instances\n const accountsBaseUrl = frontendApi;\n return `https://${accountsBaseUrl}`;\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 = buildAccountsBaseUrl(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 let redirect = null;\n\n if (signUpUrl) {\n redirect = redirectAdapter(buildUrl(baseUrl, signUpUrl));\n } else {\n redirect = redirectAdapter(\n buildUrl(null, accountsSignUpUrl, returnBackUrl)\n );\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 let redirect = null;\n if (signInUrl) {\n redirect = redirectAdapter(buildUrl(baseUrl, signInUrl));\n } else {\n redirect = redirectAdapter(\n buildUrl(null, accountsSignInUrl, returnBackUrl)\n );\n }\n\n return redirect;\n };\n\n return { redirectToSignUp, redirectToSignIn };\n};\n"],"mappings":"AAAA,SAAS,2BAA2B;AAMpC,MAAM,WAAW,CACf,UACA,YACA,mBACG;AACH,MAAI,CAAC,CAAC,UAAU;AACd,UAAM,UAAU,IAAI,IAAI,QAAQ;AAChC,UAAM,gBAAgB,iBAClB,IAAI,IAAI,gBAAgB,OAAO,IAC/B;AACJ,UAAM,MAAM,IAAI,IAAI,YAAY,OAAO;AAEvC,QAAI,eAAe;AACjB,UAAI,aAAa,IAAI,gBAAgB,cAAc,SAAS,CAAC;AAAA,IAC/D;AACA,WAAO,IAAI,SAAS;AAAA,EACtB,OAAO;AACL,UAAM,gBAAgB,iBAAiB,IAAI,IAAI,cAAc,IAAI;AACjE,UAAM,MAAM,IAAI,IAAI,UAAU;AAE9B,QAAI,eAAe;AACjB,UAAI,aAAa,IAAI,gBAAgB,cAAc,SAAS,CAAC;AAAA,IAC/D;AACA,WAAO,IAAI,SAAS;AAAA,EACtB;AACF;AAEA,MAAM,uBAAuB,CAAC,gBAA+B;AAC3D,MAAI,CAAC,aAAa;AAChB,WAAO;AAAA,EACT;AAGA,QAAM,kBAAkB;AACxB,SAAO,WAAW,eAAe;AACnC;AAgBO,MAAM,iBAAiC,CAAC,WAAW;AACxD,QAAM,EAAE,gBAAgB,iBAAiB,WAAW,WAAW,QAAQ,IACrE;AACF,QAAM,cAAc,oBAAoB,cAAc;AACtD,QAAM,kBAAkB,qBAAqB,WAAW;AAExD,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,QAAI,WAAW;AAEf,QAAI,WAAW;AACb,iBAAW,gBAAgB,SAAS,SAAS,SAAS,CAAC;AAAA,IACzD,OAAO;AACL,iBAAW;AAAA,QACT,SAAS,MAAM,mBAAmB,aAAa;AAAA,MACjD;AAAA,IACF;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,QAAI,WAAW;AACf,QAAI,WAAW;AACb,iBAAW,gBAAgB,SAAS,SAAS,SAAS,CAAC;AAAA,IACzD,OAAO;AACL,iBAAW;AAAA,QACT,SAAS,MAAM,mBAAmB,aAAa;AAAA,MACjD;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,kBAAkB,iBAAiB;AAC9C;","names":[]}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
const missingDomainAndProxy = `
|
|
2
|
+
Missing domain and proxyUrl. A satellite application needs to specify a domain or a proxyUrl.
|
|
3
|
+
|
|
4
|
+
1) With middleware
|
|
5
|
+
e.g. export default clerkMiddleware({domain:'YOUR_DOMAIN',isSatellite:true}); // or the deprecated authMiddleware()
|
|
6
|
+
2) With environment variables e.g.
|
|
7
|
+
NEXT_PUBLIC_CLERK_DOMAIN='YOUR_DOMAIN'
|
|
8
|
+
NEXT_PUBLIC_CLERK_IS_SATELLITE='true'
|
|
9
|
+
`;
|
|
10
|
+
const missingSignInUrlInDev = `
|
|
11
|
+
Invalid signInUrl. A satellite application requires a signInUrl for development instances.
|
|
12
|
+
Check if signInUrl is missing from your configuration or if it is not an absolute URL
|
|
13
|
+
|
|
14
|
+
1) With middleware
|
|
15
|
+
e.g. export default clerkMiddleware({signInUrl:'SOME_URL', isSatellite:true}); // or the deprecated authMiddleware()
|
|
16
|
+
2) With environment variables e.g.
|
|
17
|
+
NEXT_PUBLIC_CLERK_SIGN_IN_URL='SOME_URL'
|
|
18
|
+
NEXT_PUBLIC_CLERK_IS_SATELLITE='true'`;
|
|
19
|
+
const receivedRequestForIgnoredRoute = (url, matcher) => `Clerk: The middleware was skipped for this request URL: ${url}. For performance reasons, it's recommended to your middleware matcher to:
|
|
20
|
+
export const config = {
|
|
21
|
+
matcher: ${matcher},
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
Alternatively, you can set your own ignoredRoutes. See https://clerk.com/docs/nextjs/middleware
|
|
25
|
+
(This log only appears in development mode)
|
|
26
|
+
`;
|
|
27
|
+
const getAuthAuthHeaderMissing = () => authAuthHeaderMissing("getAuth");
|
|
28
|
+
const authAuthHeaderMissing = (helperName = "auth") => `CabinID: ${helperName}() was called but CabinID can't detect usage of authMiddleware(). Please ensure the following:
|
|
29
|
+
- clerkMiddleware() authMiddleware is used in your Next.js Middleware.
|
|
30
|
+
- Your Middleware matcher is configured to match this route or page.
|
|
31
|
+
- If you are using the src directory, make sure the Middleware file is inside of it.
|
|
32
|
+
`;
|
|
33
|
+
const clockSkewDetected = (verifyMessage) => `Clerk: Clock skew detected. This usually means that your system clock is inaccurate. Clerk will continuously try to issue new tokens, as the existing ones will be treated as "expired" due to clock skew.
|
|
34
|
+
|
|
35
|
+
To resolve this issue, make sure your system's clock is set to the correct time (e.g. turn off and on automatic time synchronization).
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
${verifyMessage}`;
|
|
40
|
+
const infiniteRedirectLoopDetected = () => `Clerk: Infinite redirect loop detected. That usually means that we were not able to determine the auth state for this request. A list of common causes and solutions follows.
|
|
41
|
+
|
|
42
|
+
Reason 1:
|
|
43
|
+
Your Clerk instance keys are incorrect, or you recently changed keys (Publishable Key, Secret Key).
|
|
44
|
+
How to resolve:
|
|
45
|
+
-> Make sure you're using the correct keys from the Clerk Dashboard. If you changed keys recently, make sure to clear your browser application data and cookies.
|
|
46
|
+
|
|
47
|
+
Reason 2:
|
|
48
|
+
A bug that may have already been fixed in the latest version of Clerk NextJS package.
|
|
49
|
+
How to resolve:
|
|
50
|
+
-> Make sure you are using the latest version of '@clerk/nextjs' and 'next'.
|
|
51
|
+
`;
|
|
52
|
+
const informAboutProtectedRouteInfo = (path, hasPublicRoutes, hasIgnoredRoutes, isApiRoute, defaultIgnoredRoutes) => {
|
|
53
|
+
const infoText = isApiRoute ? `INFO: Clerk: The request to ${path} is being protected (401) because there is no signed-in user, and the path is included in \`apiRoutes\`. To prevent this behavior, choose one of:` : `INFO: Clerk: The request to ${path} is being redirected because there is no signed-in user, and the path is not included in \`ignoredRoutes\` or \`publicRoutes\`. To prevent this behavior, choose one of:`;
|
|
54
|
+
const apiRoutesText = isApiRoute ? `To prevent Clerk authentication from protecting (401) the api route, remove the rule matching "${path}" from the \`apiRoutes\` array passed to authMiddleware` : void 0;
|
|
55
|
+
const publicRoutesText = hasPublicRoutes ? `To make the route accessible to both signed in and signed out users, add "${path}" to the \`publicRoutes\` array passed to authMiddleware` : `To make the route accessible to both signed in and signed out users, pass \`publicRoutes: ["${path}"]\` to authMiddleware`;
|
|
56
|
+
const ignoredRoutes = [...defaultIgnoredRoutes, path].map((r) => `"${r}"`).join(", ");
|
|
57
|
+
const ignoredRoutesText = hasIgnoredRoutes ? `To prevent Clerk authentication from running at all, add "${path}" to the \`ignoredRoutes\` array passed to authMiddleware` : `To prevent Clerk authentication from running at all, pass \`ignoredRoutes: [${ignoredRoutes}]\` to authMiddleware`;
|
|
58
|
+
const afterAuthText = "Pass a custom `afterAuth` to authMiddleware, and replace Clerk's default behavior of redirecting unless a route is included in publicRoutes";
|
|
59
|
+
return `${infoText}
|
|
60
|
+
|
|
61
|
+
${[apiRoutesText, publicRoutesText, ignoredRoutesText, afterAuthText].filter(Boolean).map((text, index) => `${index + 1}. ${text}`).join("\n")}
|
|
62
|
+
|
|
63
|
+
For additional information about middleware, please visit https://clerk.com/docs/nextjs/middleware
|
|
64
|
+
(This log only appears in development mode, or if \`debug: true\` is passed to authMiddleware)`;
|
|
65
|
+
};
|
|
66
|
+
const authSignatureInvalid = `Clerk: Unable to verify request, this usually means the Clerk middleware did not run. Ensure Clerk's middleware is properly integrated and matches the current route. For more information, see: https://clerk.com/docs/nextjs/middleware. (code=auth_signature_invalid)`;
|
|
67
|
+
export {
|
|
68
|
+
authAuthHeaderMissing,
|
|
69
|
+
authSignatureInvalid,
|
|
70
|
+
clockSkewDetected,
|
|
71
|
+
getAuthAuthHeaderMissing,
|
|
72
|
+
infiniteRedirectLoopDetected,
|
|
73
|
+
informAboutProtectedRouteInfo,
|
|
74
|
+
missingDomainAndProxy,
|
|
75
|
+
missingSignInUrlInDev,
|
|
76
|
+
receivedRequestForIgnoredRoute
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/server/errors.ts"],"sourcesContent":["export const missingDomainAndProxy = `\nMissing domain and proxyUrl. A satellite application needs to specify a domain or a proxyUrl.\n\n1) With middleware\n e.g. export default clerkMiddleware({domain:'YOUR_DOMAIN',isSatellite:true}); // or the deprecated authMiddleware()\n2) With environment variables e.g.\n NEXT_PUBLIC_CLERK_DOMAIN='YOUR_DOMAIN'\n NEXT_PUBLIC_CLERK_IS_SATELLITE='true'\n `;\n\nexport const missingSignInUrlInDev = `\nInvalid signInUrl. A satellite application requires a signInUrl for development instances.\nCheck if signInUrl is missing from your configuration or if it is not an absolute URL\n\n1) With middleware\n e.g. export default clerkMiddleware({signInUrl:'SOME_URL', isSatellite:true}); // or the deprecated authMiddleware()\n2) With environment variables e.g.\n NEXT_PUBLIC_CLERK_SIGN_IN_URL='SOME_URL'\n NEXT_PUBLIC_CLERK_IS_SATELLITE='true'`;\n\nexport const receivedRequestForIgnoredRoute = (url: string, matcher: string) =>\n `Clerk: The middleware was skipped for this request URL: ${url}. For performance reasons, it's recommended to your middleware matcher to:\nexport const config = {\n matcher: ${matcher},\n};\n\nAlternatively, you can set your own ignoredRoutes. See https://clerk.com/docs/nextjs/middleware\n(This log only appears in development mode)\n`;\n\nexport const getAuthAuthHeaderMissing = () => authAuthHeaderMissing('getAuth');\n\nexport const authAuthHeaderMissing = (helperName = 'auth') =>\n `CabinID: ${helperName}() was called but CabinID can't detect usage of authMiddleware(). Please ensure the following:\n- clerkMiddleware() authMiddleware is used in your Next.js Middleware.\n- Your Middleware matcher is configured to match this route or page.\n- If you are using the src directory, make sure the Middleware file is inside of it.\n`;\n\nexport const clockSkewDetected = (verifyMessage: string) =>\n `Clerk: Clock skew detected. This usually means that your system clock is inaccurate. Clerk will continuously try to issue new tokens, as the existing ones will be treated as \"expired\" due to clock skew.\n\nTo resolve this issue, make sure your system's clock is set to the correct time (e.g. turn off and on automatic time synchronization).\n\n---\n\n${verifyMessage}`;\n\nexport const infiniteRedirectLoopDetected = () =>\n `Clerk: Infinite redirect loop detected. That usually means that we were not able to determine the auth state for this request. A list of common causes and solutions follows.\n\nReason 1:\nYour Clerk instance keys are incorrect, or you recently changed keys (Publishable Key, Secret Key).\nHow to resolve:\n-> Make sure you're using the correct keys from the Clerk Dashboard. If you changed keys recently, make sure to clear your browser application data and cookies.\n\nReason 2:\nA bug that may have already been fixed in the latest version of Clerk NextJS package.\nHow to resolve:\n-> Make sure you are using the latest version of '@clerk/nextjs' and 'next'.\n`;\n\nexport const informAboutProtectedRouteInfo = (\n path: string,\n hasPublicRoutes: boolean,\n hasIgnoredRoutes: boolean,\n isApiRoute: boolean,\n defaultIgnoredRoutes: string[]\n) => {\n const infoText = isApiRoute\n ? `INFO: Clerk: The request to ${path} is being protected (401) because there is no signed-in user, and the path is included in \\`apiRoutes\\`. To prevent this behavior, choose one of:`\n : `INFO: Clerk: The request to ${path} is being redirected because there is no signed-in user, and the path is not included in \\`ignoredRoutes\\` or \\`publicRoutes\\`. To prevent this behavior, choose one of:`;\n const apiRoutesText = isApiRoute\n ? `To prevent Clerk authentication from protecting (401) the api route, remove the rule matching \"${path}\" from the \\`apiRoutes\\` array passed to authMiddleware`\n : undefined;\n const publicRoutesText = hasPublicRoutes\n ? `To make the route accessible to both signed in and signed out users, add \"${path}\" to the \\`publicRoutes\\` array passed to authMiddleware`\n : `To make the route accessible to both signed in and signed out users, pass \\`publicRoutes: [\"${path}\"]\\` to authMiddleware`;\n const ignoredRoutes = [...defaultIgnoredRoutes, path]\n .map((r) => `\"${r}\"`)\n .join(', ');\n const ignoredRoutesText = hasIgnoredRoutes\n ? `To prevent Clerk authentication from running at all, add \"${path}\" to the \\`ignoredRoutes\\` array passed to authMiddleware`\n : `To prevent Clerk authentication from running at all, pass \\`ignoredRoutes: [${ignoredRoutes}]\\` to authMiddleware`;\n const afterAuthText =\n \"Pass a custom `afterAuth` to authMiddleware, and replace Clerk's default behavior of redirecting unless a route is included in publicRoutes\";\n\n return `${infoText}\n\n${[apiRoutesText, publicRoutesText, ignoredRoutesText, afterAuthText]\n .filter(Boolean)\n .map((text, index) => `${index + 1}. ${text}`)\n .join('\\n')}\n\nFor additional information about middleware, please visit https://clerk.com/docs/nextjs/middleware\n(This log only appears in development mode, or if \\`debug: true\\` is passed to authMiddleware)`;\n};\n\nexport const authSignatureInvalid = `Clerk: Unable to verify request, this usually means the Clerk middleware did not run. Ensure Clerk's middleware is properly integrated and matches the current route. For more information, see: https://clerk.com/docs/nextjs/middleware. (code=auth_signature_invalid)`;\n"],"mappings":"AAAO,MAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAU9B,MAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAU9B,MAAM,iCAAiC,CAAC,KAAa,YAC1D,2DAA2D,GAAG;AAAA;AAAA,aAEnD,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAOb,MAAM,2BAA2B,MAAM,sBAAsB,SAAS;AAEtE,MAAM,wBAAwB,CAAC,aAAa,WACjD,YAAY,UAAU;AAAA;AAAA;AAAA;AAAA;AAMjB,MAAM,oBAAoB,CAAC,kBAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa;AAER,MAAM,+BAA+B,MAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaK,MAAM,gCAAgC,CAC3C,MACA,iBACA,kBACA,YACA,yBACG;AACH,QAAM,WAAW,aACb,+BAA+B,IAAI,sJACnC,+BAA+B,IAAI;AACvC,QAAM,gBAAgB,aAClB,kGAAkG,IAAI,4DACtG;AACJ,QAAM,mBAAmB,kBACrB,6EAA6E,IAAI,6DACjF,+FAA+F,IAAI;AACvG,QAAM,gBAAgB,CAAC,GAAG,sBAAsB,IAAI,EACjD,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EACnB,KAAK,IAAI;AACZ,QAAM,oBAAoB,mBACtB,6DAA6D,IAAI,8DACjE,+EAA+E,aAAa;AAChG,QAAM,gBACJ;AAEF,SAAO,GAAG,QAAQ;AAAA;AAAA,EAElB,CAAC,eAAe,kBAAkB,mBAAmB,aAAa,EACjE,OAAO,OAAO,EACd,IAAI,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,EAC5C,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAIb;AAEO,MAAM,uBAAuB;","names":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { auth } from "./auth";
|
|
2
|
+
import { client } from "../utils/http";
|
|
3
|
+
async function currentUser() {
|
|
4
|
+
const { userId } = auth();
|
|
5
|
+
if (!userId)
|
|
6
|
+
return null;
|
|
7
|
+
return client.users.getUser(userId);
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
currentUser
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=getCurrentUser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/server/getCurrentUser.ts"],"sourcesContent":["import { User } from '../types';\nimport { auth } from './auth';\nimport { client } from '../utils/http';\n\nexport async function currentUser(): Promise<User | null> {\n const { userId } = auth();\n if (!userId) return null;\n return client.users.getUser(userId);\n}\n"],"mappings":"AACA,SAAS,YAAY;AACrB,SAAS,cAAc;AAEvB,eAAsB,cAAoC;AACxD,QAAM,EAAE,OAAO,IAAI,KAAK;AACxB,MAAI,CAAC;AAAQ,WAAO;AACpB,SAAO,OAAO,MAAM,QAAQ,MAAM;AACpC;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/server/index.ts"],"sourcesContent":["export { auth } from './auth';\nexport { createRouteMatcher } from './routeMatcher';\n"],"mappings":"AAAA,SAAS,YAAY;AACrB,SAAS,0BAA0B;","names":[]}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { NextResponse } from "next/server";
|
|
2
|
+
import {
|
|
3
|
+
constants,
|
|
4
|
+
PUBLISHABLE_KEY,
|
|
5
|
+
SECRET_KEY,
|
|
6
|
+
SIGN_IN_URL,
|
|
7
|
+
SIGN_UP_URL
|
|
8
|
+
} from "../constants";
|
|
9
|
+
import { assertKey, decorateRequest, redirectAdapter } from "./utils";
|
|
10
|
+
import { cabinIdClient } from "./client";
|
|
11
|
+
import { createCabinIdRequest } from "../tokens/cabinIdRequest";
|
|
12
|
+
import { createProtect } from "./protect";
|
|
13
|
+
import { createRedirect } from "./createRedirect";
|
|
14
|
+
import { isRedirect, setHeader } from "../utils/response";
|
|
15
|
+
import { serverRedirectWithAuth } from "./serverRedirectWithAuth";
|
|
16
|
+
const CONTROL_FLOW_ERROR = {
|
|
17
|
+
FORCE_NOT_FOUND: "CABIN_ID_PROTECT_REWRITE",
|
|
18
|
+
REDIRECT_TO_URL: "CABIN_ID_PROTECT_REDIRECT_TO_URL",
|
|
19
|
+
REDIRECT_TO_SIGN_IN: "CABIN_ID_PROTECT_REDIRECT_TO_SIGN_IN"
|
|
20
|
+
};
|
|
21
|
+
const parseRequestAndEvent = (args) => {
|
|
22
|
+
return [
|
|
23
|
+
args[0] instanceof Request ? args[0] : void 0,
|
|
24
|
+
args[0] instanceof Request ? args[1] : void 0
|
|
25
|
+
];
|
|
26
|
+
};
|
|
27
|
+
const parseHandlerAndOptions = (args) => {
|
|
28
|
+
return [
|
|
29
|
+
typeof args[0] === "function" ? args[0] : void 0,
|
|
30
|
+
(args.length === 2 ? args[1] : typeof args[0] === "function" ? {} : args[0]) || {}
|
|
31
|
+
];
|
|
32
|
+
};
|
|
33
|
+
const authMiddleware = (...args) => {
|
|
34
|
+
const [request, event] = parseRequestAndEvent(args);
|
|
35
|
+
const [handler, params] = parseHandlerAndOptions(args);
|
|
36
|
+
const publishableKey = assertKey(
|
|
37
|
+
params.publishableKey || PUBLISHABLE_KEY,
|
|
38
|
+
() => {
|
|
39
|
+
throw new Error("Publish Key is not exist");
|
|
40
|
+
}
|
|
41
|
+
);
|
|
42
|
+
const secretKey = assertKey(params.secretKey || SECRET_KEY, () => {
|
|
43
|
+
throw new Error("Secret Key is not valid");
|
|
44
|
+
});
|
|
45
|
+
const signInUrl = params.signInUrl || SIGN_IN_URL;
|
|
46
|
+
const signUpUrl = params.signUpUrl || SIGN_UP_URL;
|
|
47
|
+
const options = {
|
|
48
|
+
...params,
|
|
49
|
+
publishableKey,
|
|
50
|
+
secretKey,
|
|
51
|
+
signInUrl,
|
|
52
|
+
signUpUrl
|
|
53
|
+
};
|
|
54
|
+
const nextMiddleware = async (_request, _event) => {
|
|
55
|
+
const accessToken = _request.nextUrl.searchParams.get(
|
|
56
|
+
constants.QueryParams.Token
|
|
57
|
+
);
|
|
58
|
+
const userId = _request.nextUrl.searchParams.get(
|
|
59
|
+
constants.QueryParams.UserId
|
|
60
|
+
);
|
|
61
|
+
if (accessToken && userId) {
|
|
62
|
+
const url = _request.nextUrl;
|
|
63
|
+
const path = url.pathname;
|
|
64
|
+
const response = NextResponse.redirect(
|
|
65
|
+
new URL(path || "/", _request.url)
|
|
66
|
+
);
|
|
67
|
+
response.cookies.set(constants.Cookies.Client, accessToken, {
|
|
68
|
+
maxAge: 60 * 60 * 24 * 30,
|
|
69
|
+
// 30 days
|
|
70
|
+
sameSite: "lax",
|
|
71
|
+
secure: true
|
|
72
|
+
});
|
|
73
|
+
response.cookies.set(constants.Cookies.User, userId, {
|
|
74
|
+
maxAge: 60 * 60 * 24 * 30,
|
|
75
|
+
// 30 days
|
|
76
|
+
sameSite: "lax",
|
|
77
|
+
secure: true
|
|
78
|
+
});
|
|
79
|
+
return response;
|
|
80
|
+
}
|
|
81
|
+
const cabinIdRequest = createCabinIdRequest(_request);
|
|
82
|
+
const requestState = await cabinIdClient.authenticateRequest(
|
|
83
|
+
cabinIdRequest,
|
|
84
|
+
options
|
|
85
|
+
);
|
|
86
|
+
const authObject = requestState.toAuth();
|
|
87
|
+
const redirectToSignIn = createMiddlewareRedirectToSignIn(cabinIdRequest);
|
|
88
|
+
const protect = createMiddlewareProtect(
|
|
89
|
+
cabinIdRequest,
|
|
90
|
+
authObject,
|
|
91
|
+
redirectToSignIn
|
|
92
|
+
);
|
|
93
|
+
const authObjWithMethods = Object.assign(
|
|
94
|
+
authObject,
|
|
95
|
+
{ protect, redirectToSignIn }
|
|
96
|
+
);
|
|
97
|
+
let handlerResult = NextResponse.next();
|
|
98
|
+
try {
|
|
99
|
+
handlerResult = await (handler == null ? void 0 : handler(() => authObjWithMethods, _request, _event)) || handlerResult;
|
|
100
|
+
} catch (e) {
|
|
101
|
+
handlerResult = handleControlFlowErrors(e, cabinIdRequest, requestState);
|
|
102
|
+
}
|
|
103
|
+
if (isRedirect(handlerResult)) {
|
|
104
|
+
return serverRedirectWithAuth(cabinIdRequest, handlerResult);
|
|
105
|
+
}
|
|
106
|
+
decorateRequest(
|
|
107
|
+
cabinIdRequest,
|
|
108
|
+
handlerResult,
|
|
109
|
+
requestState,
|
|
110
|
+
options.secretKey
|
|
111
|
+
);
|
|
112
|
+
if (requestState.headers) {
|
|
113
|
+
requestState.headers.forEach((value, key) => {
|
|
114
|
+
handlerResult.headers.append(key, value);
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
return handlerResult;
|
|
118
|
+
};
|
|
119
|
+
if (request && event) {
|
|
120
|
+
return nextMiddleware(request, event);
|
|
121
|
+
}
|
|
122
|
+
return nextMiddleware;
|
|
123
|
+
};
|
|
124
|
+
const createMiddlewareRedirectToSignIn = (cabinIdRequest) => {
|
|
125
|
+
return (opts = {}) => {
|
|
126
|
+
const err = new Error(CONTROL_FLOW_ERROR.REDIRECT_TO_SIGN_IN);
|
|
127
|
+
err.returnBackUrl = opts.returnBackUrl === null ? "" : opts.returnBackUrl || cabinIdRequest.cabinIdUrl.toString();
|
|
128
|
+
throw err;
|
|
129
|
+
};
|
|
130
|
+
};
|
|
131
|
+
const createMiddlewareProtect = (cabinIdRequest, authObject, redirectToSignIn) => {
|
|
132
|
+
return (_, options) => {
|
|
133
|
+
const notFound = () => {
|
|
134
|
+
throw new Error(CONTROL_FLOW_ERROR.FORCE_NOT_FOUND);
|
|
135
|
+
};
|
|
136
|
+
const redirect = (url) => {
|
|
137
|
+
const err = new Error(CONTROL_FLOW_ERROR.REDIRECT_TO_URL);
|
|
138
|
+
err.redirectUrl = url;
|
|
139
|
+
throw err;
|
|
140
|
+
};
|
|
141
|
+
return createProtect({
|
|
142
|
+
request: cabinIdRequest,
|
|
143
|
+
redirect,
|
|
144
|
+
notFound,
|
|
145
|
+
authObject,
|
|
146
|
+
redirectToSignIn
|
|
147
|
+
})(options);
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
const handleControlFlowErrors = (e, cabinIdRequest, requestState) => {
|
|
151
|
+
switch (e.message) {
|
|
152
|
+
case CONTROL_FLOW_ERROR.FORCE_NOT_FOUND:
|
|
153
|
+
return setHeader(
|
|
154
|
+
NextResponse.rewrite(
|
|
155
|
+
`${cabinIdRequest.cabinIdUrl.origin}/cabin_${Date.now()}`
|
|
156
|
+
),
|
|
157
|
+
constants.Headers.AuthReason,
|
|
158
|
+
"protect-rewrite"
|
|
159
|
+
);
|
|
160
|
+
case CONTROL_FLOW_ERROR.REDIRECT_TO_URL:
|
|
161
|
+
return redirectAdapter(e.redirectUrl);
|
|
162
|
+
case CONTROL_FLOW_ERROR.REDIRECT_TO_SIGN_IN:
|
|
163
|
+
return createRedirect({
|
|
164
|
+
redirectAdapter,
|
|
165
|
+
baseUrl: cabinIdRequest.cabinIdUrl,
|
|
166
|
+
signInUrl: requestState.signInUrl,
|
|
167
|
+
signUpUrl: requestState.signUpUrl,
|
|
168
|
+
publishableKey: requestState.publishableKey
|
|
169
|
+
}).redirectToSignIn({ returnBackUrl: e.returnBackUrl });
|
|
170
|
+
default:
|
|
171
|
+
throw e;
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
export {
|
|
175
|
+
authMiddleware
|
|
176
|
+
};
|
|
177
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +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\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 response.cookies.set(constants.Cookies.Client, accessToken, {\n maxAge: 60 * 60 * 24 * 30, // 30 days\n sameSite: \"lax\",\n secure: true,\n });\n response.cookies.set(constants.Cookies.User, userId, {\n maxAge: 60 * 60 * 24 * 30, // 30 days\n sameSite: \"lax\",\n secure: true,\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 // TODO @nikos: we need to make this more generic\n // and move the logic in clerk/backend\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 we have a request and event, we're being called as a middleware directly\n // eg, export default clerkMiddleware;\n if (request && event) {\n return nextMiddleware(request, event);\n }\n\n // Otherwise, return a middleware that can be called with a request and event\n // eg, export default clerkMiddleware(auth => { ... });\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\n// Handle errors thrown by protect() and redirectToSignIn() calls,\n// as we want to align the APIs between middleware, pages and route handlers\n// Normally, middleware requires to explicitly return a response, but we want to\n// avoid discrepancies between the APIs as it's easy to miss the `return` statement\n// especially when copy-pasting code from one place to another.\n// This function handles the known errors thrown by the APIs described above,\n// and returns the appropriate response.\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 // Rewrite to a bogus URL to force not found error\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};\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { constants } from "../constants";
|
|
2
|
+
const createProtect = (opts) => {
|
|
3
|
+
const { redirectToSignIn, authObject, redirect, notFound, request } = opts;
|
|
4
|
+
return (...args) => {
|
|
5
|
+
var _a, _b, _c, _d, _e, _f;
|
|
6
|
+
const optionValuesAsParam = ((_a = args[0]) == null ? void 0 : _a.unauthenticatedUrl) || ((_b = args[0]) == null ? void 0 : _b.unauthorizedUrl);
|
|
7
|
+
const paramsOrFunction = optionValuesAsParam ? void 0 : args[0];
|
|
8
|
+
const unauthenticatedUrl = ((_c = args[0]) == null ? void 0 : _c.unauthenticatedUrl) || ((_d = args[1]) == null ? void 0 : _d.unauthenticatedUrl);
|
|
9
|
+
const unauthorizedUrl = ((_e = args[0]) == null ? void 0 : _e.unauthorizedUrl) || ((_f = args[1]) == null ? void 0 : _f.unauthorizedUrl);
|
|
10
|
+
const handleUnauthenticated = () => {
|
|
11
|
+
if (unauthenticatedUrl) {
|
|
12
|
+
return redirect(unauthenticatedUrl);
|
|
13
|
+
}
|
|
14
|
+
if (isPageRequest(request)) {
|
|
15
|
+
return redirectToSignIn();
|
|
16
|
+
}
|
|
17
|
+
return notFound();
|
|
18
|
+
};
|
|
19
|
+
const handleUnauthorized = () => {
|
|
20
|
+
if (unauthorizedUrl) {
|
|
21
|
+
return redirect(unauthorizedUrl);
|
|
22
|
+
}
|
|
23
|
+
return notFound();
|
|
24
|
+
};
|
|
25
|
+
if (!authObject.userId) {
|
|
26
|
+
return handleUnauthenticated();
|
|
27
|
+
}
|
|
28
|
+
if (!paramsOrFunction) {
|
|
29
|
+
return authObject;
|
|
30
|
+
}
|
|
31
|
+
return handleUnauthorized();
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
const isServerActionRequest = (req) => {
|
|
35
|
+
var _a, _b;
|
|
36
|
+
return !!req.headers.get(constants.NextHeaders.NextUrl) && (((_a = req.headers.get(constants.Headers.Accept)) == null ? void 0 : _a.includes("text/x-component")) || ((_b = req.headers.get(constants.Headers.ContentType)) == null ? void 0 : _b.includes("multipart/form-data")) || !!req.headers.get(constants.NextHeaders.NextAction));
|
|
37
|
+
};
|
|
38
|
+
const isPageRequest = (req) => {
|
|
39
|
+
var _a;
|
|
40
|
+
return req.headers.get(constants.Headers.SecFetchDest) === "document" || ((_a = req.headers.get(constants.Headers.Accept)) == null ? void 0 : _a.includes("text/html")) || !!req.headers.get(constants.NextHeaders.NextUrl) && !isServerActionRequest(req) || !!req.headers.get(constants.NextHeaders.NextjsData);
|
|
41
|
+
};
|
|
42
|
+
export {
|
|
43
|
+
createProtect
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=protect.js.map
|