@cabin-id/nextjs 0.1.7 → 0.2.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 → endpoints/AbstractApi.js} +14 -18
- 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 +2 -2
- package/dist/cjs/component.client.js.map +1 -1
- package/dist/cjs/component.server.js +5 -2
- package/dist/cjs/component.server.js.map +1 -1
- package/dist/cjs/components/SignInButton.js +15 -6
- package/dist/cjs/components/SignInButton.js.map +1 -1
- package/dist/cjs/constants.js +20 -19
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/hooks/createContextAndHook.js +62 -0
- package/dist/cjs/hooks/createContextAndHook.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 +24 -16
- package/dist/cjs/hooks/useUser.js.map +1 -1
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/index.js.map +1 -1
- 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/{client/provider.js → provider/main.provider.js} +9 -21
- package/dist/cjs/provider/main.provider.js.map +1 -0
- package/dist/cjs/server/auth.js +31 -7
- package/dist/cjs/server/auth.js.map +1 -1
- package/dist/cjs/{client/request.js → server/client.js} +12 -20
- 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 +36 -35
- package/dist/cjs/server/createRedirect.js.map +1 -1
- package/dist/cjs/server/errors.js +110 -0
- package/dist/cjs/server/errors.js.map +1 -0
- package/dist/cjs/server/getCurrentUser.js +3 -10
- package/dist/cjs/server/getCurrentUser.js.map +1 -1
- package/dist/cjs/server/index.js +32 -0
- package/dist/cjs/server/index.js.map +1 -0
- package/dist/cjs/server/middleware.js +122 -102
- package/dist/cjs/server/middleware.js.map +1 -1
- package/dist/cjs/server/protect.js +69 -0
- package/dist/cjs/server/protect.js.map +1 -0
- package/dist/cjs/server/routeMatcher.js.map +1 -1
- package/dist/cjs/server/serverRedirectWithAuth.js +2 -2
- package/dist/cjs/server/serverRedirectWithAuth.js.map +1 -1
- package/dist/cjs/server/type.js.map +1 -1
- package/dist/cjs/server/utils.js +58 -0
- package/dist/cjs/server/utils.js.map +1 -1
- package/dist/cjs/styles/global.css +30 -2
- package/dist/cjs/styles/global.css.map +1 -1
- 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.map +1 -1
- 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 +51 -0
- package/dist/cjs/utils/initial.js.map +1 -0
- package/dist/cjs/utils.js +10 -0
- package/dist/cjs/utils.js.map +1 -1
- 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 +1 -1
- package/dist/esm/component.client.js.map +1 -1
- package/dist/esm/component.server.js +3 -1
- package/dist/esm/component.server.js.map +1 -1
- package/dist/esm/components/SignInButton.js +17 -8
- package/dist/esm/components/SignInButton.js.map +1 -1
- package/dist/esm/constants.js +16 -15
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/hooks/createContextAndHook.js +27 -0
- package/dist/esm/hooks/createContextAndHook.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 +27 -6
- package/dist/esm/hooks/useUser.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- 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 +32 -8
- package/dist/esm/server/auth.js.map +1 -1
- 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 +36 -35
- package/dist/esm/server/createRedirect.js.map +1 -1
- package/dist/esm/server/errors.js +78 -0
- package/dist/esm/server/errors.js.map +1 -0
- package/dist/esm/server/getCurrentUser.js +3 -10
- package/dist/esm/server/getCurrentUser.js.map +1 -1
- package/dist/esm/server/index.js +7 -0
- package/dist/esm/server/index.js.map +1 -0
- package/dist/esm/server/middleware.js +125 -106
- package/dist/esm/server/middleware.js.map +1 -1
- package/dist/esm/server/protect.js +45 -0
- package/dist/esm/server/protect.js.map +1 -0
- package/dist/esm/server/routeMatcher.js.map +1 -1
- package/dist/esm/server/serverRedirectWithAuth.js +2 -2
- package/dist/esm/server/serverRedirectWithAuth.js.map +1 -1
- package/dist/esm/server/utils.js +54 -1
- package/dist/esm/server/utils.js.map +1 -1
- package/dist/esm/styles/global.css +30 -2
- package/dist/esm/styles/global.css.map +1 -1
- 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/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 +26 -0
- package/dist/esm/utils/initial.js.map +1 -0
- package/dist/esm/utils.js +9 -0
- package/dist/esm/utils.js.map +1 -1
- 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 +1 -1
- package/dist/types/component.client.d.ts.map +1 -1
- package/dist/types/component.server.d.ts +1 -0
- package/dist/types/component.server.d.ts.map +1 -1
- package/dist/types/components/SignInButton.d.ts.map +1 -1
- package/dist/types/constants.d.ts +11 -10
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/hooks/createContextAndHook.d.ts +18 -0
- package/dist/types/hooks/createContextAndHook.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 +35 -1
- package/dist/types/hooks/useUser.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- 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 +10 -3
- package/dist/types/server/auth.d.ts.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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 +22 -77
- package/dist/types/server/middleware.d.ts.map +1 -1
- 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 +4 -4
- package/dist/types/server/routeMatcher.d.ts.map +1 -1
- package/dist/types/server/serverRedirectWithAuth.d.ts +2 -1
- package/dist/types/server/serverRedirectWithAuth.d.ts.map +1 -1
- package/dist/types/server/type.d.ts +10 -1
- package/dist/types/server/type.d.ts.map +1 -1
- package/dist/types/server/utils.d.ts +10 -3
- package/dist/types/server/utils.d.ts.map +1 -1
- 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 +1 -3
- package/dist/types/types.d.ts.map +1 -1
- 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 +8 -0
- package/dist/types/utils/initial.d.ts.map +1 -0
- package/dist/types/utils.d.ts +1 -0
- package/dist/types/utils.d.ts.map +1 -1
- package/package.json +7 -4
- package/server/package.json +5 -0
- package/dist/cjs/api/getUserInfo.js.map +0 -1
- package/dist/cjs/client/provider.js.map +0 -1
- package/dist/cjs/client/request.js.map +0 -1
- package/dist/esm/api/getUserInfo.js +0 -18
- package/dist/esm/api/getUserInfo.js.map +0 -1
- package/dist/esm/client/provider.js +0 -22
- package/dist/esm/client/provider.js.map +0 -1
- package/dist/esm/client/request.js +0 -19
- package/dist/esm/client/request.js.map +0 -1
- package/dist/types/api/getUserInfo.d.ts +0 -2
- package/dist/types/api/getUserInfo.d.ts.map +0 -1
- package/dist/types/client/provider.d.ts +0 -7
- package/dist/types/client/provider.d.ts.map +0 -1
- package/dist/types/client/request.d.ts +0 -3
- package/dist/types/client/request.d.ts.map +0 -1
|
@@ -0,0 +1,58 @@
|
|
|
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 request_exports = {};
|
|
20
|
+
__export(request_exports, {
|
|
21
|
+
authenticateRequest: () => authenticateRequest
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(request_exports);
|
|
24
|
+
var import_assertValidSecretKey = require("../utils/assertValidSecretKey");
|
|
25
|
+
var import_authenticateContext = require("./authenticateContext");
|
|
26
|
+
var import_authStatus = require("./authStatus");
|
|
27
|
+
var import_cabinIdRequest = require("./cabinIdRequest");
|
|
28
|
+
async function authenticateRequest(request, options) {
|
|
29
|
+
const authenticateContext = (0, import_authenticateContext.createAuthenticateContext)(
|
|
30
|
+
(0, import_cabinIdRequest.createCabinIdRequest)(request),
|
|
31
|
+
options
|
|
32
|
+
);
|
|
33
|
+
(0, import_assertValidSecretKey.assertValidSecretKey)(authenticateContext.secretKey);
|
|
34
|
+
async function authenticateRequestWithTokenInHeader() {
|
|
35
|
+
const { sessionTokenInHeader } = authenticateContext;
|
|
36
|
+
return (0, import_authStatus.signedIn)(authenticateContext, void 0, sessionTokenInHeader);
|
|
37
|
+
}
|
|
38
|
+
async function authenticateRequestWithTokenInCookie() {
|
|
39
|
+
const hasSessionToken = !!authenticateContext.sessionTokenInCookie;
|
|
40
|
+
if (!hasSessionToken) {
|
|
41
|
+
return (0, import_authStatus.signedOut)(authenticateContext);
|
|
42
|
+
}
|
|
43
|
+
return (0, import_authStatus.signedIn)(
|
|
44
|
+
authenticateContext,
|
|
45
|
+
void 0,
|
|
46
|
+
authenticateContext.sessionTokenInCookie
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
if (authenticateContext.sessionTokenInHeader) {
|
|
50
|
+
return authenticateRequestWithTokenInHeader();
|
|
51
|
+
}
|
|
52
|
+
return authenticateRequestWithTokenInCookie();
|
|
53
|
+
}
|
|
54
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
55
|
+
0 && (module.exports = {
|
|
56
|
+
authenticateRequest
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/tokens/request.ts"],"sourcesContent":["import { AuthenticateRequestOptions } from '../api/factory';\nimport { assertValidSecretKey } from '../utils/assertValidSecretKey';\nimport { createAuthenticateContext } from './authenticateContext';\nimport { RequestState, signedIn, signedOut } from './authStatus';\nimport { createCabinIdRequest } from './cabinIdRequest';\n\nexport async function authenticateRequest(\n request: Request,\n options: AuthenticateRequestOptions\n): Promise<RequestState> {\n const authenticateContext = createAuthenticateContext(\n createCabinIdRequest(request),\n options\n );\n assertValidSecretKey(authenticateContext.secretKey);\n\n async function authenticateRequestWithTokenInHeader() {\n const { sessionTokenInHeader } = authenticateContext;\n return signedIn(authenticateContext, undefined, sessionTokenInHeader!);\n }\n\n async function authenticateRequestWithTokenInCookie() {\n const hasSessionToken = !!authenticateContext.sessionTokenInCookie;\n\n if (!hasSessionToken) {\n return signedOut(authenticateContext);\n }\n\n return signedIn(\n authenticateContext,\n undefined,\n authenticateContext.sessionTokenInCookie!\n );\n }\n\n if (authenticateContext.sessionTokenInHeader) {\n return authenticateRequestWithTokenInHeader();\n }\n\n return authenticateRequestWithTokenInCookie();\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kCAAqC;AACrC,iCAA0C;AAC1C,wBAAkD;AAClD,4BAAqC;AAErC,eAAsB,oBACpB,SACA,SACuB;AACvB,QAAM,0BAAsB;AAAA,QAC1B,4CAAqB,OAAO;AAAA,IAC5B;AAAA,EACF;AACA,wDAAqB,oBAAoB,SAAS;AAElD,iBAAe,uCAAuC;AACpD,UAAM,EAAE,qBAAqB,IAAI;AACjC,eAAO,4BAAS,qBAAqB,QAAW,oBAAqB;AAAA,EACvE;AAEA,iBAAe,uCAAuC;AACpD,UAAM,kBAAkB,CAAC,CAAC,oBAAoB;AAE9C,QAAI,CAAC,iBAAiB;AACpB,iBAAO,6BAAU,mBAAmB;AAAA,IACtC;AAEA,eAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,oBAAoB;AAAA,IACtB;AAAA,EACF;AAEA,MAAI,oBAAoB,sBAAsB;AAC5C,WAAO,qCAAqC;AAAA,EAC9C;AAEA,SAAO,qCAAqC;AAC9C;","names":[]}
|
package/dist/cjs/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/types.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../src/types.ts"],"sourcesContent":["export 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 type CabinIDProviderProps = {\n userId: string | null;\n};\n\nexport type LogoutParams = {\n redirectUrl?: string;\n};\n\nexport type ResponseDataType<T> = {\n data?: T;\n error: any;\n loading: boolean;\n};\n\n/**\n * Enables autocompletion for a union type, while keeping the ability to use any string\n * or type of `T`\n */\nexport type Autocomplete<U extends T, T = string> =\n | U\n | (T & Record<never, never>);\n\n/**\n * Omit without union flattening\n * */\nexport type Without<T, W> = {\n [P in keyof T as Exclude<P, W>]: T[P];\n};\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|
|
@@ -0,0 +1,38 @@
|
|
|
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 createCabinIdClient_exports = {};
|
|
20
|
+
__export(createCabinIdClient_exports, {
|
|
21
|
+
createCabinIdClient: () => createCabinIdClient
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(createCabinIdClient_exports);
|
|
24
|
+
var import_factory = require("../api/factory");
|
|
25
|
+
function createCabinIdClient(options) {
|
|
26
|
+
const opts = { ...options };
|
|
27
|
+
const apiClient = (0, import_factory.createBackendApiClient)(opts);
|
|
28
|
+
const requestState = (0, import_factory.createAuthenticateRequest)({ options: opts, apiClient });
|
|
29
|
+
return {
|
|
30
|
+
...apiClient,
|
|
31
|
+
...requestState
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
35
|
+
0 && (module.exports = {
|
|
36
|
+
createCabinIdClient
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=createCabinIdClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/createCabinIdClient.ts"],"sourcesContent":["import {\n ApiClient,\n createAuthenticateRequest,\n createBackendApiClient,\n CreateBackendApiOptions,\n} from '../api/factory';\n\nexport type ClerkOptions = CreateBackendApiOptions;\n\nexport type CabinIdClient = ApiClient &\n ReturnType<typeof createAuthenticateRequest>;\n\nexport function createCabinIdClient(options: ClerkOptions): CabinIdClient {\n const opts = { ...options };\n const apiClient = createBackendApiClient(opts);\n const requestState = createAuthenticateRequest({ options: opts, apiClient });\n\n return {\n ...apiClient,\n ...requestState,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAKO;AAOA,SAAS,oBAAoB,SAAsC;AACxE,QAAM,OAAO,EAAE,GAAG,QAAQ;AAC1B,QAAM,gBAAY,uCAAuB,IAAI;AAC7C,QAAM,mBAAe,0CAA0B,EAAE,SAAS,MAAM,UAAU,CAAC;AAE3E,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF;","names":[]}
|
|
@@ -0,0 +1,31 @@
|
|
|
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 http_exports = {};
|
|
20
|
+
__export(http_exports, {
|
|
21
|
+
client: () => client
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(http_exports);
|
|
24
|
+
var import_factory = require("../api/factory");
|
|
25
|
+
var import_constants = require("../constants");
|
|
26
|
+
const client = (0, import_factory.createBackendApiClient)({ secretKey: import_constants.SECRET_KEY });
|
|
27
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
28
|
+
0 && (module.exports = {
|
|
29
|
+
client
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/http.ts"],"sourcesContent":["import { createBackendApiClient } from '../api/factory';\nimport { SECRET_KEY } from '../constants';\n\nexport const client = createBackendApiClient({ secretKey: SECRET_KEY });\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAuC;AACvC,uBAA2B;AAEpB,MAAM,aAAS,uCAAuB,EAAE,WAAW,4BAAW,CAAC;","names":[]}
|
|
@@ -0,0 +1,51 @@
|
|
|
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 initial_exports = {};
|
|
21
|
+
__export(initial_exports, {
|
|
22
|
+
initialState: () => initialState,
|
|
23
|
+
injectSSRStateIntoObject: () => injectSSRStateIntoObject
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(initial_exports);
|
|
26
|
+
var import_headers = require("next/headers");
|
|
27
|
+
var import_constants = require("../constants");
|
|
28
|
+
var import_http = require("./http");
|
|
29
|
+
const initialState = async () => {
|
|
30
|
+
var _a;
|
|
31
|
+
const cookiesStore = (0, import_headers.cookies)();
|
|
32
|
+
const userId = ((_a = cookiesStore.get(import_constants.constants.Cookies.User)) == null ? void 0 : _a.value) || null;
|
|
33
|
+
let user = null;
|
|
34
|
+
if (userId) {
|
|
35
|
+
user = await import_http.client.users.getUser(userId);
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
userId,
|
|
39
|
+
user
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
const injectSSRStateIntoObject = (obj, authObject) => {
|
|
43
|
+
const __clerk_ssr_state = process.env.NODE_ENV !== "production" ? JSON.parse(JSON.stringify({ ...authObject })) : { ...authObject };
|
|
44
|
+
return { ...obj, __clerk_ssr_state };
|
|
45
|
+
};
|
|
46
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
47
|
+
0 && (module.exports = {
|
|
48
|
+
initialState,
|
|
49
|
+
injectSSRStateIntoObject
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=initial.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/initial.ts"],"sourcesContent":["'use server';\n\nimport { cookies } from 'next/headers';\nimport { constants } from '../constants';\nimport { client } from './http';\n\nexport const initialState = async () => {\n const cookiesStore = cookies();\n const userId = cookiesStore.get(constants.Cookies.User)?.value || null;\n let user = null;\n\n if (userId) {\n user = await client.users.getUser(userId);\n }\n\n return {\n userId,\n user,\n };\n};\n\nexport const injectSSRStateIntoObject = <O, T>(obj: O, authObject: T) => {\n // Serializing the state on dev env is a temp workaround for the following issue:\n // https://github.com/vercel/next.js/discussions/11209|Next.js\n const __clerk_ssr_state = (\n process.env.NODE_ENV !== 'production'\n ? JSON.parse(JSON.stringify({ ...authObject }))\n : { ...authObject }\n ) as T;\n return { ...obj, __clerk_ssr_state };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,qBAAwB;AACxB,uBAA0B;AAC1B,kBAAuB;AAEhB,MAAM,eAAe,YAAY;AANxC;AAOE,QAAM,mBAAe,wBAAQ;AAC7B,QAAM,WAAS,kBAAa,IAAI,2BAAU,QAAQ,IAAI,MAAvC,mBAA0C,UAAS;AAClE,MAAI,OAAO;AAEX,MAAI,QAAQ;AACV,WAAO,MAAM,mBAAO,MAAM,QAAQ,MAAM;AAAA,EAC1C;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAEO,MAAM,2BAA2B,CAAO,KAAQ,eAAkB;AAGvE,QAAM,oBACJ,QAAQ,IAAI,aAAa,eACrB,KAAK,MAAM,KAAK,UAAU,EAAE,GAAG,WAAW,CAAC,CAAC,IAC5C,EAAE,GAAG,WAAW;AAEtB,SAAO,EAAE,GAAG,KAAK,kBAAkB;AACrC;","names":[]}
|
package/dist/cjs/utils.js
CHANGED
|
@@ -18,6 +18,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var utils_exports = {};
|
|
20
20
|
__export(utils_exports, {
|
|
21
|
+
mergePreDefinedOptions: () => mergePreDefinedOptions,
|
|
21
22
|
paths: () => paths
|
|
22
23
|
});
|
|
23
24
|
module.exports = __toCommonJS(utils_exports);
|
|
@@ -35,8 +36,17 @@ ${e.message}`
|
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
38
|
};
|
|
39
|
+
function mergePreDefinedOptions(preDefinedOptions, options) {
|
|
40
|
+
return Object.keys(preDefinedOptions).reduce(
|
|
41
|
+
(obj, key) => {
|
|
42
|
+
return { ...obj, [key]: options[key] || obj[key] };
|
|
43
|
+
},
|
|
44
|
+
{ ...preDefinedOptions }
|
|
45
|
+
);
|
|
46
|
+
}
|
|
38
47
|
// Annotate the CommonJS export names for ESM import in node:
|
|
39
48
|
0 && (module.exports = {
|
|
49
|
+
mergePreDefinedOptions,
|
|
40
50
|
paths
|
|
41
51
|
});
|
|
42
52
|
//# sourceMappingURL=utils.js.map
|
package/dist/cjs/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils.ts"],"sourcesContent":["import { pathToRegexp } from
|
|
1
|
+
{"version":3,"sources":["../../src/utils.ts"],"sourcesContent":["import { pathToRegexp } from 'path-to-regexp';\n\nexport const paths = {\n toRegexp: (path: string) => {\n try {\n return pathToRegexp(path);\n } catch (e: any) {\n throw new Error(\n `Invalid path: ${path}.\\nConsult the documentation of path-to-regexp here: https://github.com/pillarjs/path-to-regexp\\n${e.message}`\n );\n }\n },\n};\n\nexport function mergePreDefinedOptions<T extends Record<string, any>>(\n preDefinedOptions: T,\n options: Partial<T>\n): T {\n return Object.keys(preDefinedOptions).reduce(\n (obj: T, key: string) => {\n return { ...obj, [key]: options[key] || obj[key] };\n },\n { ...preDefinedOptions }\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAA6B;AAEtB,MAAM,QAAQ;AAAA,EACnB,UAAU,CAAC,SAAiB;AAC1B,QAAI;AACF,iBAAO,oCAAa,IAAI;AAAA,IAC1B,SAAS,GAAQ;AACf,YAAM,IAAI;AAAA,QACR,iBAAiB,IAAI;AAAA;AAAA,EAAoG,EAAE,OAAO;AAAA,MACpI;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,uBACd,mBACA,SACG;AACH,SAAO,OAAO,KAAK,iBAAiB,EAAE;AAAA,IACpC,CAAC,KAAQ,QAAgB;AACvB,aAAO,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,QAAQ,GAAG,KAAK,IAAI,GAAG,EAAE;AAAA,IACnD;AAAA,IACA,EAAE,GAAG,kBAAkB;AAAA,EACzB;AACF;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/api/endpoints/AbstractApi.ts"],"sourcesContent":["import type { RequestFunction } from '../request';\n\nexport abstract class AbstractAPI {\n constructor(protected request: RequestFunction) {}\n\n protected requireId(id: string) {\n if (!id) {\n throw new Error('A valid resource ID is required.');\n }\n }\n}\n"],"mappings":"AAEO,MAAe,YAAY;AAAA,EAChC,YAAsB,SAA0B;AAA1B;AAAA,EAA2B;AAAA,EAEvC,UAAU,IAAY;AAC9B,QAAI,CAAC,IAAI;AACP,YAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { joinPaths } from "../../utils/path";
|
|
2
|
+
import { AbstractAPI } from "./AbstractApi";
|
|
3
|
+
const basePath = "/user";
|
|
4
|
+
class UserAPI extends AbstractAPI {
|
|
5
|
+
async getUser(userId) {
|
|
6
|
+
this.requireId(userId);
|
|
7
|
+
return this.request({
|
|
8
|
+
method: "GET",
|
|
9
|
+
path: joinPaths(basePath, userId)
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export {
|
|
14
|
+
UserAPI
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=UserApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/api/endpoints/UserApi.ts"],"sourcesContent":["import { joinPaths } from '../../utils/path';\nimport { AbstractAPI } from './AbstractApi';\nimport { User } from '../../types';\n\nconst basePath = '/user';\n\nexport class UserAPI extends AbstractAPI {\n public async getUser(userId: string) {\n this.requireId(userId);\n return this.request<User>({\n method: 'GET',\n path: joinPaths(basePath, userId),\n });\n }\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB;AAG5B,MAAM,WAAW;AAEV,MAAM,gBAAgB,YAAY;AAAA,EACvC,MAAa,QAAQ,QAAgB;AACnC,SAAK,UAAU,MAAM;AACrB,WAAO,KAAK,QAAc;AAAA,MACxB,QAAQ;AAAA,MACR,MAAM,UAAU,UAAU,MAAM;AAAA,IAClC,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/api/endpoints/index.ts"],"sourcesContent":["export { AbstractAPI } from './AbstractApi';\nexport { UserAPI } from './UserApi';\n"],"mappings":"AAAA,SAAS,mBAAmB;AAC5B,SAAS,eAAe;","names":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { mergePreDefinedOptions } from "../utils";
|
|
2
|
+
import { UserAPI } from "./endpoints";
|
|
3
|
+
import { buildRequest } from "./request";
|
|
4
|
+
import { authenticateRequest as authenticateRequestOriginal } from "../tokens/request";
|
|
5
|
+
const defaultOptions = {
|
|
6
|
+
secretKey: "",
|
|
7
|
+
publishableKey: ""
|
|
8
|
+
};
|
|
9
|
+
function createBackendApiClient(options) {
|
|
10
|
+
const request = buildRequest(options);
|
|
11
|
+
return {
|
|
12
|
+
users: new UserAPI(request)
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function createAuthenticateRequest(params) {
|
|
16
|
+
const buildTimeOptions = mergePreDefinedOptions(
|
|
17
|
+
defaultOptions,
|
|
18
|
+
params.options
|
|
19
|
+
);
|
|
20
|
+
const authenticateRequest = (request, options = {}) => {
|
|
21
|
+
const runTimeOptions = mergePreDefinedOptions(buildTimeOptions, options);
|
|
22
|
+
return authenticateRequestOriginal(request, {
|
|
23
|
+
...options,
|
|
24
|
+
...runTimeOptions
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
return {
|
|
28
|
+
authenticateRequest
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export {
|
|
32
|
+
createAuthenticateRequest,
|
|
33
|
+
createBackendApiClient
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/api/factory.ts"],"sourcesContent":["import { mergePreDefinedOptions } from '../utils';\nimport { UserAPI } from './endpoints';\nimport { buildRequest } from './request';\nimport { authenticateRequest as authenticateRequestOriginal } from '../tokens/request';\n\nexport type CreateBackendApiOptions = Parameters<typeof buildRequest>[0];\n\nexport type ApiClient = ReturnType<typeof createBackendApiClient>;\n\nexport type AuthenticateRequestOptions = {\n secretKey?: string;\n publishableKey?: 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 BuildTimeOptions = {\n secretKey?: string;\n publishableKey?: string;\n signInUrl?: string;\n signUpUrl?: string;\n afterSignInUrl?: string;\n afterSignUpUrl?: string;\n};\n\nconst defaultOptions = {\n secretKey: '',\n publishableKey: '',\n} satisfies BuildTimeOptions;\n\nexport type CreateAuthenticateRequestOptions = {\n options: BuildTimeOptions;\n apiClient: ApiClient;\n};\n\nexport function createBackendApiClient(options: CreateBackendApiOptions) {\n const request = buildRequest(options);\n\n return {\n users: new UserAPI(request),\n };\n}\n\nexport function createAuthenticateRequest(\n params: CreateAuthenticateRequestOptions\n) {\n const buildTimeOptions = mergePreDefinedOptions(\n defaultOptions,\n params.options\n );\n\n const authenticateRequest = (\n request: Request,\n options: BuildTimeOptions = {}\n ) => {\n const runTimeOptions = mergePreDefinedOptions(buildTimeOptions, options);\n return authenticateRequestOriginal(request, {\n ...options,\n ...runTimeOptions,\n });\n };\n\n return {\n authenticateRequest,\n };\n}\n"],"mappings":"AAAA,SAAS,8BAA8B;AACvC,SAAS,eAAe;AACxB,SAAS,oBAAoB;AAC7B,SAAS,uBAAuB,mCAAmC;AA2BnE,MAAM,iBAAiB;AAAA,EACrB,WAAW;AAAA,EACX,gBAAgB;AAClB;AAOO,SAAS,uBAAuB,SAAkC;AACvE,QAAM,UAAU,aAAa,OAAO;AAEpC,SAAO;AAAA,IACL,OAAO,IAAI,QAAQ,OAAO;AAAA,EAC5B;AACF;AAEO,SAAS,0BACd,QACA;AACA,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACA,OAAO;AAAA,EACT;AAEA,QAAM,sBAAsB,CAC1B,SACA,UAA4B,CAAC,MAC1B;AACH,UAAM,iBAAiB,uBAAuB,kBAAkB,OAAO;AACvE,WAAO,4BAA4B,SAAS;AAAA,MAC1C,GAAG;AAAA,MACH,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { joinPaths } from "../utils/path";
|
|
2
|
+
import { API_URL, API_VERSION, constants } from "../constants";
|
|
3
|
+
import { assertValidSecretKey } from "../utils/assertValidSecretKey";
|
|
4
|
+
import snakecaseKeys from "snakecase-keys";
|
|
5
|
+
function buildRequest(options) {
|
|
6
|
+
const requestFn = async (requestOptions) => {
|
|
7
|
+
var _a;
|
|
8
|
+
const { secretKey, apiUrl = API_URL, apiVersion = API_VERSION } = options;
|
|
9
|
+
const { path, method, queryParams, headerParams, bodyParams, formData } = requestOptions;
|
|
10
|
+
assertValidSecretKey(secretKey);
|
|
11
|
+
const url = joinPaths(apiUrl, apiVersion, path);
|
|
12
|
+
const finalUrl = new URL(url);
|
|
13
|
+
if (queryParams) {
|
|
14
|
+
const snakecasedQueryParams = snakecaseKeys({ ...queryParams });
|
|
15
|
+
for (const [key, val] of Object.entries(snakecasedQueryParams)) {
|
|
16
|
+
if (val) {
|
|
17
|
+
[val].flat().forEach((v) => finalUrl.searchParams.append(key, v));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const headers = {
|
|
22
|
+
Authorization: `Bearer ${secretKey}`,
|
|
23
|
+
...headerParams
|
|
24
|
+
};
|
|
25
|
+
let res;
|
|
26
|
+
try {
|
|
27
|
+
if (formData) {
|
|
28
|
+
res = await fetch(finalUrl.href, {
|
|
29
|
+
method,
|
|
30
|
+
headers,
|
|
31
|
+
body: formData
|
|
32
|
+
});
|
|
33
|
+
} else {
|
|
34
|
+
headers["Content-Type"] = "application/json";
|
|
35
|
+
const hasBody = method !== "GET" && bodyParams && Object.keys(bodyParams).length > 0;
|
|
36
|
+
const body = hasBody ? { body: JSON.stringify(snakecaseKeys(bodyParams, { deep: false })) } : null;
|
|
37
|
+
res = await fetch(finalUrl.href, {
|
|
38
|
+
method,
|
|
39
|
+
headers,
|
|
40
|
+
...body
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
const isJSONResponse = (res == null ? void 0 : res.headers) && ((_a = res.headers) == null ? void 0 : _a.get(constants.Headers.ContentType)) === constants.ContentTypes.Json;
|
|
44
|
+
const responseBody = isJSONResponse ? await res.json() : JSON.parse(await res.text());
|
|
45
|
+
if (!res.ok) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
...responseBody
|
|
50
|
+
};
|
|
51
|
+
} catch (err) {
|
|
52
|
+
if (err instanceof Error) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
return requestFn;
|
|
59
|
+
}
|
|
60
|
+
export {
|
|
61
|
+
buildRequest
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/api/request.ts"],"sourcesContent":["import { joinPaths } from '../utils/path';\nimport { API_URL, API_VERSION, constants } from '../constants';\nimport { assertValidSecretKey } from '../utils/assertValidSecretKey';\nimport snakecaseKeys from 'snakecase-keys';\n\ntype BuildRequestOptions = {\n /* Secret Key */\n secretKey?: string;\n /* Backend API URL */\n apiUrl?: string;\n /* Backend API version */\n apiVersion?: string;\n};\n\nexport type CabinIdBackendApiRequestOptions = {\n method: 'GET' | 'POST' | 'PATCH' | 'DELETE' | 'PUT';\n queryParams?: Record<string, unknown>;\n headerParams?: Record<string, string>;\n bodyParams?: Record<string, unknown>;\n formData?: FormData;\n} & (\n | {\n url: string;\n path?: string;\n }\n | {\n url?: string;\n path: string;\n }\n);\n\nexport type CabinIdBackendApiResponse<T> =\n | {\n data: T;\n errors: null;\n totalCount?: number;\n }\n | {\n data: null;\n errors: any;\n totalCount?: never;\n status?: number;\n statusText?: string;\n };\n\nexport type RequestFunction = ReturnType<typeof buildRequest>;\n\nexport function buildRequest(options: BuildRequestOptions) {\n const requestFn = async <T>(\n requestOptions: CabinIdBackendApiRequestOptions\n ): Promise<T | null> => {\n const { secretKey, apiUrl = API_URL, apiVersion = API_VERSION } = options;\n const { path, method, queryParams, headerParams, bodyParams, formData } =\n requestOptions;\n\n assertValidSecretKey(secretKey);\n\n const url = joinPaths(apiUrl, apiVersion, path);\n\n // Build final URL with search parameters\n const finalUrl = new URL(url);\n\n if (queryParams) {\n // Snakecase query parameters\n const snakecasedQueryParams = snakecaseKeys({ ...queryParams });\n\n // Support array values for queryParams such as { foo: [42, 43] }\n for (const [key, val] of Object.entries(snakecasedQueryParams)) {\n if (val) {\n [val]\n .flat()\n .forEach((v) => finalUrl.searchParams.append(key, v as string));\n }\n }\n }\n\n // Build headers\n const headers: Record<string, string> = {\n Authorization: `Bearer ${secretKey}`,\n ...headerParams,\n };\n\n let res: Response | undefined;\n try {\n if (formData) {\n res = await fetch(finalUrl.href, {\n method,\n headers,\n body: formData,\n });\n } else {\n // Enforce application/json for all non form-data requests\n headers['Content-Type'] = 'application/json';\n // Build body\n const hasBody =\n method !== 'GET' && bodyParams && Object.keys(bodyParams).length > 0;\n const body = hasBody\n ? { body: JSON.stringify(snakecaseKeys(bodyParams, { deep: false })) }\n : null;\n\n res = await fetch(finalUrl.href, {\n method,\n headers,\n ...body,\n });\n }\n\n // TODO: Parse JSON or Text response based on a response header\n const isJSONResponse =\n res?.headers &&\n res.headers?.get(constants.Headers.ContentType) ===\n constants.ContentTypes.Json;\n const responseBody = isJSONResponse\n ? await res.json()\n : JSON.parse(await res.text());\n\n if (!res.ok) {\n return null;\n }\n return {\n ...responseBody,\n };\n } catch (err) {\n if (err instanceof Error) {\n return null;\n }\n\n return null;\n }\n };\n\n return requestFn;\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;AAC1B,SAAS,SAAS,aAAa,iBAAiB;AAChD,SAAS,4BAA4B;AACrC,OAAO,mBAAmB;AA4CnB,SAAS,aAAa,SAA8B;AACzD,QAAM,YAAY,OAChB,mBACsB;AAlD1B;AAmDI,UAAM,EAAE,WAAW,SAAS,SAAS,aAAa,YAAY,IAAI;AAClE,UAAM,EAAE,MAAM,QAAQ,aAAa,cAAc,YAAY,SAAS,IACpE;AAEF,yBAAqB,SAAS;AAE9B,UAAM,MAAM,UAAU,QAAQ,YAAY,IAAI;AAG9C,UAAM,WAAW,IAAI,IAAI,GAAG;AAE5B,QAAI,aAAa;AAEf,YAAM,wBAAwB,cAAc,EAAE,GAAG,YAAY,CAAC;AAG9D,iBAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,qBAAqB,GAAG;AAC9D,YAAI,KAAK;AACP,WAAC,GAAG,EACD,KAAK,EACL,QAAQ,CAAC,MAAM,SAAS,aAAa,OAAO,KAAK,CAAW,CAAC;AAAA,QAClE;AAAA,MACF;AAAA,IACF;AAGA,UAAM,UAAkC;AAAA,MACtC,eAAe,UAAU,SAAS;AAAA,MAClC,GAAG;AAAA,IACL;AAEA,QAAI;AACJ,QAAI;AACF,UAAI,UAAU;AACZ,cAAM,MAAM,MAAM,SAAS,MAAM;AAAA,UAC/B;AAAA,UACA;AAAA,UACA,MAAM;AAAA,QACR,CAAC;AAAA,MACH,OAAO;AAEL,gBAAQ,cAAc,IAAI;AAE1B,cAAM,UACJ,WAAW,SAAS,cAAc,OAAO,KAAK,UAAU,EAAE,SAAS;AACrE,cAAM,OAAO,UACT,EAAE,MAAM,KAAK,UAAU,cAAc,YAAY,EAAE,MAAM,MAAM,CAAC,CAAC,EAAE,IACnE;AAEJ,cAAM,MAAM,MAAM,SAAS,MAAM;AAAA,UAC/B;AAAA,UACA;AAAA,UACA,GAAG;AAAA,QACL,CAAC;AAAA,MACH;AAGA,YAAM,kBACJ,2BAAK,cACL,SAAI,YAAJ,mBAAa,IAAI,UAAU,QAAQ,kBACjC,UAAU,aAAa;AAC3B,YAAM,eAAe,iBACjB,MAAM,IAAI,KAAK,IACf,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC;AAE/B,UAAI,CAAC,IAAI,IAAI;AACX,eAAO;AAAA,MACT;AACA,aAAO;AAAA,QACL,GAAG;AAAA,MACL;AAAA,IACF,SAAS,KAAK;AACZ,UAAI,eAAe,OAAO;AACxB,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/component.client.ts"],"sourcesContent":["export { CabinIDProvider } from './
|
|
1
|
+
{"version":3,"sources":["../../src/component.client.ts"],"sourcesContent":["export { CabinIDProvider } from './provider/main.provider';\nexport { useUser } from './hooks';\n"],"mappings":"AAAA,SAAS,uBAAuB;AAChC,SAAS,eAAe;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/component.server.ts"],"sourcesContent":["export { auth } from './server/auth';\n"],"mappings":"AAAA,SAAS,YAAY;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/component.server.ts"],"sourcesContent":["export { auth } from './server/auth';\nexport { createRouteMatcher } from './server/routeMatcher';\n"],"mappings":"AAAA,SAAS,YAAY;AACrB,SAAS,0BAA0B;","names":[]}
|
|
@@ -1,13 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
"use client";
|
|
2
|
+
import React, { useEffect, useState } from "react";
|
|
2
3
|
import { CabinLogo } from "../icons/logo";
|
|
3
|
-
import {
|
|
4
|
+
import { AFTER_SIGN_IN_URL, frontendApi } from "../constants";
|
|
4
5
|
const SignInButton = () => {
|
|
5
|
-
const signInUrl =
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
const [signInUrl, setSignInUrl] = useState("#");
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
if (typeof window !== "undefined") {
|
|
9
|
+
const origin = typeof window === "undefined" ? null : window.origin;
|
|
10
|
+
if (!origin) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const params = new URLSearchParams({
|
|
14
|
+
redirect_url: `${origin}${AFTER_SIGN_IN_URL}` || "/"
|
|
15
|
+
});
|
|
16
|
+
const signInUrlTemp = frontendApi ? `https://${frontendApi}/sign-in?${params.toString()}` : "#";
|
|
17
|
+
setSignInUrl(signInUrlTemp);
|
|
18
|
+
}
|
|
19
|
+
}, []);
|
|
11
20
|
return /* @__PURE__ */ React.createElement(
|
|
12
21
|
"a",
|
|
13
22
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/SignInButton.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../src/components/SignInButton.tsx"],"sourcesContent":["'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { CabinLogo } from '../icons/logo';\nimport { AFTER_SIGN_IN_URL, frontendApi } from '../constants';\n\nexport const SignInButton = () => {\n const [signInUrl, setSignInUrl] = useState('#');\n\n useEffect(() => {\n if (typeof window !== 'undefined') {\n const origin = typeof window === 'undefined' ? null : window.origin;\n if (!origin) {\n return;\n }\n const params = new URLSearchParams({\n redirect_url: `${origin}${AFTER_SIGN_IN_URL}` || '/',\n });\n const signInUrlTemp = frontendApi\n ? `https://${frontendApi}/sign-in?${params.toString()}`\n : '#';\n setSignInUrl(signInUrlTemp);\n }\n }, []);\n\n return (\n <a\n href={signInUrl}\n className=\"max-w-48 pl-2 py-2 pr-4 bg-blue-600 rounded-full flex flex-row space-x-2 items-center hover:opacity-90 active:bg-blue-700\"\n >\n <CabinLogo />\n <span className=\"text-white text-sm\">Continue to CabinID</span>\n </a>\n );\n};\n"],"mappings":";AAEA,OAAO,SAAS,WAAW,gBAAgB;AAC3C,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB,mBAAmB;AAExC,MAAM,eAAe,MAAM;AAChC,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,GAAG;AAE9C,YAAU,MAAM;AACd,QAAI,OAAO,WAAW,aAAa;AACjC,YAAM,SAAS,OAAO,WAAW,cAAc,OAAO,OAAO;AAC7D,UAAI,CAAC,QAAQ;AACX;AAAA,MACF;AACA,YAAM,SAAS,IAAI,gBAAgB;AAAA,QACjC,cAAc,GAAG,MAAM,GAAG,iBAAiB,MAAM;AAAA,MACnD,CAAC;AACD,YAAM,gBAAgB,cAClB,WAAW,WAAW,YAAY,OAAO,SAAS,CAAC,KACnD;AACJ,mBAAa,aAAa;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM;AAAA,MACN,WAAU;AAAA;AAAA,IAEV,oCAAC,eAAU;AAAA,IACX,oCAAC,UAAK,WAAU,wBAAqB,qBAAmB;AAAA,EAC1D;AAEJ;","names":[]}
|
package/dist/esm/constants.js
CHANGED
|
@@ -4,19 +4,19 @@ const API_URL = "https://api.cabinid.dev/";
|
|
|
4
4
|
const API_VERSION = "v1";
|
|
5
5
|
const PUBLISHABLE_KEY = process.env.NEXT_PUBLIC_CABIN_ID_PUBLISH_KEY || "";
|
|
6
6
|
const SECRET_KEY = process.env.CABIN_ID_SECRET_KEY || "";
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
7
|
+
const SIGN_IN_URL = process.env.NEXT_PUBLIC_CABIN_ID_SIGN_IN_URL || "";
|
|
8
|
+
const SIGN_UP_URL = process.env.NEXT_PUBLIC_CABIN_ID_SIGN_UP_URL || "";
|
|
9
|
+
const AFTER_SIGN_IN_URL = process.env.NEXT_PUBLIC_CABIN_ID_AFTER_SIGN_IN_URL || "";
|
|
10
|
+
const AFTER_SIGN_UP_URL = process.env.NEXT_PUBLIC_CABIN_ID_AFTER_SIGN_UP_URL || "";
|
|
11
11
|
const baseApiUrl = joinPaths(API_URL, API_VERSION);
|
|
12
12
|
const frontendApi = parsePublishableKey(PUBLISHABLE_KEY);
|
|
13
13
|
const Attributes = {
|
|
14
|
-
AuthToken: "
|
|
15
|
-
AuthSignature: "
|
|
16
|
-
AuthStatus: "
|
|
17
|
-
AuthReason: "
|
|
18
|
-
AuthMessage: "
|
|
19
|
-
|
|
14
|
+
AuthToken: "__cabinIdAuthToken",
|
|
15
|
+
AuthSignature: "__cabinIdAuthSignature",
|
|
16
|
+
AuthStatus: "__cabinIdAuthStatus",
|
|
17
|
+
AuthReason: "__cabinIdAuthReason",
|
|
18
|
+
AuthMessage: "__cabinIdAuthMessage",
|
|
19
|
+
CabinIdUrl: "__cabinIdUrl"
|
|
20
20
|
};
|
|
21
21
|
const Cookies = {
|
|
22
22
|
Session: "__session",
|
|
@@ -25,7 +25,8 @@ const Cookies = {
|
|
|
25
25
|
};
|
|
26
26
|
const QueryParams = {
|
|
27
27
|
UserId: "user_id",
|
|
28
|
-
Token: "token"
|
|
28
|
+
Token: "token",
|
|
29
|
+
CabinIdRedirectUrl: "__cabin_id_redirect_url"
|
|
29
30
|
};
|
|
30
31
|
const Headers = {
|
|
31
32
|
AuthToken: "x-cabin-id-auth-token",
|
|
@@ -72,14 +73,14 @@ const constants = {
|
|
|
72
73
|
NextHeaders
|
|
73
74
|
};
|
|
74
75
|
export {
|
|
76
|
+
AFTER_SIGN_IN_URL,
|
|
77
|
+
AFTER_SIGN_UP_URL,
|
|
75
78
|
API_URL,
|
|
76
79
|
API_VERSION,
|
|
77
|
-
CUSTOM_AFTER_SIGN_IN_URL,
|
|
78
|
-
CUSTOM_AFTER_SIGN_UP_URL,
|
|
79
|
-
CUSTOM_SIGN_IN_URL,
|
|
80
|
-
CUSTOM_SIGN_Up_URL,
|
|
81
80
|
PUBLISHABLE_KEY,
|
|
82
81
|
SECRET_KEY,
|
|
82
|
+
SIGN_IN_URL,
|
|
83
|
+
SIGN_UP_URL,
|
|
83
84
|
baseApiUrl,
|
|
84
85
|
constants,
|
|
85
86
|
frontendApi
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/constants.ts"],"sourcesContent":["import { parsePublishableKey } from './utils/key';\nimport { joinPaths } from './utils/path';\n\nexport const API_URL = 'https://api.cabinid.dev/';\n// export const API_URL = 'http://localhost:3001/';\nexport const API_VERSION = 'v1';\nexport const PUBLISHABLE_KEY =\n process.env.NEXT_PUBLIC_CABIN_ID_PUBLISH_KEY! || '';\nexport const SECRET_KEY = process.env.CABIN_ID_SECRET_KEY! || '';\nexport const
|
|
1
|
+
{"version":3,"sources":["../../src/constants.ts"],"sourcesContent":["import { parsePublishableKey } from './utils/key';\nimport { joinPaths } from './utils/path';\n\nexport const API_URL = 'https://api.cabinid.dev/';\n// export const API_URL = 'http://localhost:3001/';\nexport const API_VERSION = 'v1';\nexport const PUBLISHABLE_KEY =\n process.env.NEXT_PUBLIC_CABIN_ID_PUBLISH_KEY! || '';\nexport const SECRET_KEY = process.env.CABIN_ID_SECRET_KEY! || '';\nexport const SIGN_IN_URL =\n process.env.NEXT_PUBLIC_CABIN_ID_SIGN_IN_URL! || '';\nexport const SIGN_UP_URL =\n process.env.NEXT_PUBLIC_CABIN_ID_SIGN_UP_URL! || '';\nexport const AFTER_SIGN_IN_URL =\n process.env.NEXT_PUBLIC_CABIN_ID_AFTER_SIGN_IN_URL || '';\nexport const AFTER_SIGN_UP_URL =\n process.env.NEXT_PUBLIC_CABIN_ID_AFTER_SIGN_UP_URL || '';\n\nexport const baseApiUrl = joinPaths(API_URL, API_VERSION);\nexport const frontendApi = parsePublishableKey(PUBLISHABLE_KEY);\n\nconst Attributes = {\n AuthToken: '__cabinIdAuthToken',\n AuthSignature: '__cabinIdAuthSignature',\n AuthStatus: '__cabinIdAuthStatus',\n AuthReason: '__cabinIdAuthReason',\n AuthMessage: '__cabinIdAuthMessage',\n CabinIdUrl: '__cabinIdUrl',\n} as const;\n\nconst Cookies = {\n Session: '__session',\n Client: '__client',\n User: '__user',\n} as const;\n\nconst QueryParams = {\n UserId: 'user_id',\n Token: 'token',\n CabinIdRedirectUrl: '__cabin_id_redirect_url',\n} as const;\n\nconst Headers = {\n AuthToken: 'x-cabin-id-auth-token',\n AuthSignature: 'x-cabin-id-auth-signature',\n AuthStatus: 'x-cabin-id-auth-status',\n AuthReason: 'x-cabin-id-auth-reason',\n AuthMessage: 'x-cabin-id-auth-message',\n CabinIdUrl: 'x-cabin-id-cabin-id-url',\n EnableDebug: 'x-cabin-id-debug',\n CabinIdRedirectTo: 'x-cabin-id-redirect-to',\n CloudFrontForwardedProto: 'cloudfront-forwarded-proto',\n Authorization: 'authorization',\n ForwardedPort: 'x-forwarded-port',\n ForwardedProto: 'x-forwarded-proto',\n ForwardedHost: 'x-forwarded-host',\n Accept: 'accept',\n Referrer: 'referer',\n UserAgent: 'user-agent',\n Origin: 'origin',\n Host: 'host',\n ContentType: 'content-type',\n SecFetchDest: 'sec-fetch-dest',\n Location: 'location',\n} as const;\n\nconst ContentTypes = {\n Json: 'application/json',\n} as const;\n\nconst NextHeaders = {\n NextRewrite: 'x-middleware-rewrite',\n NextResume: 'x-middleware-next',\n NextRedirect: 'Location',\n // Used by next to identify internal navigation for app router\n NextUrl: 'next-url',\n NextAction: 'next-action',\n // Used by next to identify internal navigation for pages router\n NextjsData: 'x-nextjs-data',\n} as const;\n\n/**\n * @internal\n */\nexport const constants = {\n Attributes,\n Cookies,\n Headers,\n ContentTypes,\n QueryParams,\n NextHeaders,\n} as const;\n\nexport type Constants = typeof constants;\n"],"mappings":"AAAA,SAAS,2BAA2B;AACpC,SAAS,iBAAiB;AAEnB,MAAM,UAAU;AAEhB,MAAM,cAAc;AACpB,MAAM,kBACX,QAAQ,IAAI,oCAAqC;AAC5C,MAAM,aAAa,QAAQ,IAAI,uBAAwB;AACvD,MAAM,cACX,QAAQ,IAAI,oCAAqC;AAC5C,MAAM,cACX,QAAQ,IAAI,oCAAqC;AAC5C,MAAM,oBACX,QAAQ,IAAI,0CAA0C;AACjD,MAAM,oBACX,QAAQ,IAAI,0CAA0C;AAEjD,MAAM,aAAa,UAAU,SAAS,WAAW;AACjD,MAAM,cAAc,oBAAoB,eAAe;AAE9D,MAAM,aAAa;AAAA,EACjB,WAAW;AAAA,EACX,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,YAAY;AACd;AAEA,MAAM,UAAU;AAAA,EACd,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AACR;AAEA,MAAM,cAAc;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,oBAAoB;AACtB;AAEA,MAAM,UAAU;AAAA,EACd,WAAW;AAAA,EACX,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,mBAAmB;AAAA,EACnB,0BAA0B;AAAA,EAC1B,eAAe;AAAA,EACf,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,aAAa;AAAA,EACb,cAAc;AAAA,EACd,UAAU;AACZ;AAEA,MAAM,eAAe;AAAA,EACnB,MAAM;AACR;AAEA,MAAM,cAAc;AAAA,EAClB,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,cAAc;AAAA;AAAA,EAEd,SAAS;AAAA,EACT,YAAY;AAAA;AAAA,EAEZ,YAAY;AACd;AAKO,MAAM,YAAY;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import React from "react";
|
|
3
|
+
function assertContextExists(contextVal, msgOrCtx) {
|
|
4
|
+
if (!contextVal) {
|
|
5
|
+
throw typeof msgOrCtx === "string" ? new Error(msgOrCtx) : new Error(`${msgOrCtx.displayName} not found`);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
const createContextAndHook = (displayName, options) => {
|
|
9
|
+
const { assertCtxFn = assertContextExists } = options || {};
|
|
10
|
+
const Ctx = React.createContext(void 0);
|
|
11
|
+
Ctx.displayName = displayName;
|
|
12
|
+
const useCtx = () => {
|
|
13
|
+
const ctx = React.useContext(Ctx);
|
|
14
|
+
assertCtxFn(ctx, `${displayName} not found`);
|
|
15
|
+
return ctx.value;
|
|
16
|
+
};
|
|
17
|
+
const useCtxWithoutGuarantee = () => {
|
|
18
|
+
const ctx = React.useContext(Ctx);
|
|
19
|
+
return ctx ? ctx.value : {};
|
|
20
|
+
};
|
|
21
|
+
return [Ctx, useCtx, useCtxWithoutGuarantee];
|
|
22
|
+
};
|
|
23
|
+
export {
|
|
24
|
+
assertContextExists,
|
|
25
|
+
createContextAndHook
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=createContextAndHook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/createContextAndHook.ts"],"sourcesContent":["'use client';\nimport React from 'react';\n\nexport function assertContextExists(contextVal: unknown, msgOrCtx: string | React.Context<any>): asserts contextVal {\n if (!contextVal) {\n throw typeof msgOrCtx === 'string' ? new Error(msgOrCtx) : new Error(`${msgOrCtx.displayName} not found`);\n }\n}\n\ntype Options = { assertCtxFn?: (v: unknown, msg: string) => void };\ntype ContextOf<T> = React.Context<{ value: T } | undefined>;\ntype UseCtxFn<T> = () => T;\n\n/**\n * Creates and returns a Context and two hooks that return the context value.\n * The Context type is derived from the type passed in by the user.\n * The first hook returned guarantees that the context exists so the returned value is always CtxValue\n * The second hook makes no guarantees, so the returned value can be CtxValue | undefined\n */\nexport const createContextAndHook = <CtxVal>(\n displayName: string,\n options?: Options,\n): [ContextOf<CtxVal>, UseCtxFn<CtxVal>, UseCtxFn<CtxVal | Partial<CtxVal>>] => {\n const { assertCtxFn = assertContextExists } = options || {};\n const Ctx = React.createContext<{ value: CtxVal } | undefined>(undefined);\n Ctx.displayName = displayName;\n\n const useCtx = () => {\n const ctx = React.useContext(Ctx);\n assertCtxFn(ctx, `${displayName} not found`);\n return (ctx as any).value as CtxVal;\n };\n\n const useCtxWithoutGuarantee = () => {\n const ctx = React.useContext(Ctx);\n return ctx ? ctx.value : {};\n };\n\n return [Ctx, useCtx, useCtxWithoutGuarantee];\n};\n"],"mappings":";AACA,OAAO,WAAW;AAEX,SAAS,oBAAoB,YAAqB,UAA2D;AAClH,MAAI,CAAC,YAAY;AACf,UAAM,OAAO,aAAa,WAAW,IAAI,MAAM,QAAQ,IAAI,IAAI,MAAM,GAAG,SAAS,WAAW,YAAY;AAAA,EAC1G;AACF;AAYO,MAAM,uBAAuB,CAClC,aACA,YAC8E;AAC9E,QAAM,EAAE,cAAc,oBAAoB,IAAI,WAAW,CAAC;AAC1D,QAAM,MAAM,MAAM,cAA6C,MAAS;AACxE,MAAI,cAAc;AAElB,QAAM,SAAS,MAAM;AACnB,UAAM,MAAM,MAAM,WAAW,GAAG;AAChC,gBAAY,KAAK,GAAG,WAAW,YAAY;AAC3C,WAAQ,IAAY;AAAA,EACtB;AAEA,QAAM,yBAAyB,MAAM;AACnC,UAAM,MAAM,MAAM,WAAW,GAAG;AAChC,WAAO,MAAM,IAAI,QAAQ,CAAC;AAAA,EAC5B;AAEA,SAAO,CAAC,KAAK,QAAQ,sBAAsB;AAC7C;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/useSafeLayoutEffect.tsx"],"sourcesContent":["import React from 'react';\n\nexport const useSafeLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n"],"mappings":"AAAA,OAAO,WAAW;AAEX,MAAM,sBAAsB,OAAO,WAAW,cAAc,MAAM,kBAAkB,MAAM;","names":[]}
|