@authdog/nextjs-app 0.1.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/index.d.mts +58 -42
- package/dist/index.d.ts +58 -42
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/index.server.js +1 -1
- package/dist/index.server.js.map +1 -1
- package/dist/index.server.mjs +1 -1
- package/dist/index.server.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -2,57 +2,58 @@ import React from 'react';
|
|
|
2
2
|
export { P as PublicKeyPayload, g as getPublicKeyPayload } from './commons-CoLIU2e7.mjs';
|
|
3
3
|
|
|
4
4
|
declare const getTokenFromUri: (url: string) => string | null;
|
|
5
|
-
interface
|
|
6
|
-
|
|
5
|
+
interface AuthdogUser {
|
|
6
|
+
id: string;
|
|
7
|
+
environmentId: string;
|
|
8
|
+
externalId: string;
|
|
9
|
+
userName: string;
|
|
10
|
+
displayName: string;
|
|
11
|
+
nickName: string;
|
|
12
|
+
profileUrl: string;
|
|
13
|
+
title: string;
|
|
14
|
+
userType: string;
|
|
15
|
+
preferredLanguage: string | null;
|
|
16
|
+
locale: string | null;
|
|
17
|
+
timezone: string | null;
|
|
18
|
+
active: boolean;
|
|
19
|
+
provider: string;
|
|
20
|
+
lastLogin: string;
|
|
21
|
+
createdAt: string;
|
|
22
|
+
updatedAt: string;
|
|
23
|
+
names: {
|
|
7
24
|
id: string;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
userType: string;
|
|
16
|
-
preferredLanguage: string | null;
|
|
17
|
-
locale: string | null;
|
|
18
|
-
timezone: string | null;
|
|
19
|
-
active: boolean;
|
|
20
|
-
provider: string;
|
|
21
|
-
lastLogin: string;
|
|
25
|
+
userId: string;
|
|
26
|
+
formatted: string | null;
|
|
27
|
+
familyName: string;
|
|
28
|
+
givenName: string;
|
|
29
|
+
middleName: string | null;
|
|
30
|
+
honorificPrefix: string | null;
|
|
31
|
+
honorificSuffix: string | null;
|
|
22
32
|
createdAt: string;
|
|
23
33
|
updatedAt: string;
|
|
24
|
-
names: {
|
|
25
|
-
id: string;
|
|
26
|
-
userId: string;
|
|
27
|
-
formatted: string | null;
|
|
28
|
-
familyName: string;
|
|
29
|
-
givenName: string;
|
|
30
|
-
middleName: string | null;
|
|
31
|
-
honorificPrefix: string | null;
|
|
32
|
-
honorificSuffix: string | null;
|
|
33
|
-
createdAt: string;
|
|
34
|
-
updatedAt: string;
|
|
35
|
-
};
|
|
36
|
-
addresses: [];
|
|
37
|
-
emails: {
|
|
38
|
-
value: string;
|
|
39
|
-
primary: boolean;
|
|
40
|
-
type: string;
|
|
41
|
-
}[];
|
|
42
|
-
phoneNumbers: [];
|
|
43
|
-
ims: [];
|
|
44
|
-
photos: {
|
|
45
|
-
value: string;
|
|
46
|
-
type: string;
|
|
47
|
-
}[];
|
|
48
34
|
};
|
|
35
|
+
addresses: [];
|
|
36
|
+
emails: {
|
|
37
|
+
value: string;
|
|
38
|
+
primary: boolean;
|
|
39
|
+
type: string;
|
|
40
|
+
}[];
|
|
41
|
+
phoneNumbers: [];
|
|
42
|
+
ims: [];
|
|
43
|
+
photos: {
|
|
44
|
+
value: string;
|
|
45
|
+
type: string;
|
|
46
|
+
}[];
|
|
47
|
+
}
|
|
48
|
+
interface AuthdogUserResponse {
|
|
49
|
+
user: AuthdogUser;
|
|
49
50
|
meta: {
|
|
50
51
|
code: number;
|
|
51
52
|
message: string;
|
|
52
53
|
};
|
|
53
54
|
}
|
|
54
55
|
declare const validatePublicKey: (publicKey: string) => void;
|
|
55
|
-
declare const fetchUserData: (publicKey: string, token: string) => Promise<
|
|
56
|
+
declare const fetchUserData: (publicKey: string, token: string) => Promise<AuthdogUserResponse | null>;
|
|
56
57
|
declare const browserCookiesOptions: {
|
|
57
58
|
maxAge: number;
|
|
58
59
|
path: string;
|
|
@@ -63,4 +64,19 @@ declare const AuthdogProvider: ({ children, }: {
|
|
|
63
64
|
children: React.ReactNode;
|
|
64
65
|
}) => React.JSX.Element;
|
|
65
66
|
|
|
66
|
-
|
|
67
|
+
interface UseAuthResult {
|
|
68
|
+
token: string | null;
|
|
69
|
+
isAuthenticated: boolean;
|
|
70
|
+
isLoading: boolean;
|
|
71
|
+
}
|
|
72
|
+
declare const useAuth: () => UseAuthResult;
|
|
73
|
+
|
|
74
|
+
interface UseUserResult {
|
|
75
|
+
user: AuthdogUser | null;
|
|
76
|
+
isLoading: boolean;
|
|
77
|
+
error: Error | null;
|
|
78
|
+
refetch: () => Promise<void>;
|
|
79
|
+
}
|
|
80
|
+
declare const useUser: () => UseUserResult;
|
|
81
|
+
|
|
82
|
+
export { AuthdogProvider, type UseAuthResult, type UseUserResult, browserCookiesOptions, fetchUserData, getTokenFromUri, useAuth, useUser, validatePublicKey };
|
package/dist/index.d.ts
CHANGED
|
@@ -2,57 +2,58 @@ import React from 'react';
|
|
|
2
2
|
export { P as PublicKeyPayload, g as getPublicKeyPayload } from './commons-CoLIU2e7.js';
|
|
3
3
|
|
|
4
4
|
declare const getTokenFromUri: (url: string) => string | null;
|
|
5
|
-
interface
|
|
6
|
-
|
|
5
|
+
interface AuthdogUser {
|
|
6
|
+
id: string;
|
|
7
|
+
environmentId: string;
|
|
8
|
+
externalId: string;
|
|
9
|
+
userName: string;
|
|
10
|
+
displayName: string;
|
|
11
|
+
nickName: string;
|
|
12
|
+
profileUrl: string;
|
|
13
|
+
title: string;
|
|
14
|
+
userType: string;
|
|
15
|
+
preferredLanguage: string | null;
|
|
16
|
+
locale: string | null;
|
|
17
|
+
timezone: string | null;
|
|
18
|
+
active: boolean;
|
|
19
|
+
provider: string;
|
|
20
|
+
lastLogin: string;
|
|
21
|
+
createdAt: string;
|
|
22
|
+
updatedAt: string;
|
|
23
|
+
names: {
|
|
7
24
|
id: string;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
userType: string;
|
|
16
|
-
preferredLanguage: string | null;
|
|
17
|
-
locale: string | null;
|
|
18
|
-
timezone: string | null;
|
|
19
|
-
active: boolean;
|
|
20
|
-
provider: string;
|
|
21
|
-
lastLogin: string;
|
|
25
|
+
userId: string;
|
|
26
|
+
formatted: string | null;
|
|
27
|
+
familyName: string;
|
|
28
|
+
givenName: string;
|
|
29
|
+
middleName: string | null;
|
|
30
|
+
honorificPrefix: string | null;
|
|
31
|
+
honorificSuffix: string | null;
|
|
22
32
|
createdAt: string;
|
|
23
33
|
updatedAt: string;
|
|
24
|
-
names: {
|
|
25
|
-
id: string;
|
|
26
|
-
userId: string;
|
|
27
|
-
formatted: string | null;
|
|
28
|
-
familyName: string;
|
|
29
|
-
givenName: string;
|
|
30
|
-
middleName: string | null;
|
|
31
|
-
honorificPrefix: string | null;
|
|
32
|
-
honorificSuffix: string | null;
|
|
33
|
-
createdAt: string;
|
|
34
|
-
updatedAt: string;
|
|
35
|
-
};
|
|
36
|
-
addresses: [];
|
|
37
|
-
emails: {
|
|
38
|
-
value: string;
|
|
39
|
-
primary: boolean;
|
|
40
|
-
type: string;
|
|
41
|
-
}[];
|
|
42
|
-
phoneNumbers: [];
|
|
43
|
-
ims: [];
|
|
44
|
-
photos: {
|
|
45
|
-
value: string;
|
|
46
|
-
type: string;
|
|
47
|
-
}[];
|
|
48
34
|
};
|
|
35
|
+
addresses: [];
|
|
36
|
+
emails: {
|
|
37
|
+
value: string;
|
|
38
|
+
primary: boolean;
|
|
39
|
+
type: string;
|
|
40
|
+
}[];
|
|
41
|
+
phoneNumbers: [];
|
|
42
|
+
ims: [];
|
|
43
|
+
photos: {
|
|
44
|
+
value: string;
|
|
45
|
+
type: string;
|
|
46
|
+
}[];
|
|
47
|
+
}
|
|
48
|
+
interface AuthdogUserResponse {
|
|
49
|
+
user: AuthdogUser;
|
|
49
50
|
meta: {
|
|
50
51
|
code: number;
|
|
51
52
|
message: string;
|
|
52
53
|
};
|
|
53
54
|
}
|
|
54
55
|
declare const validatePublicKey: (publicKey: string) => void;
|
|
55
|
-
declare const fetchUserData: (publicKey: string, token: string) => Promise<
|
|
56
|
+
declare const fetchUserData: (publicKey: string, token: string) => Promise<AuthdogUserResponse | null>;
|
|
56
57
|
declare const browserCookiesOptions: {
|
|
57
58
|
maxAge: number;
|
|
58
59
|
path: string;
|
|
@@ -63,4 +64,19 @@ declare const AuthdogProvider: ({ children, }: {
|
|
|
63
64
|
children: React.ReactNode;
|
|
64
65
|
}) => React.JSX.Element;
|
|
65
66
|
|
|
66
|
-
|
|
67
|
+
interface UseAuthResult {
|
|
68
|
+
token: string | null;
|
|
69
|
+
isAuthenticated: boolean;
|
|
70
|
+
isLoading: boolean;
|
|
71
|
+
}
|
|
72
|
+
declare const useAuth: () => UseAuthResult;
|
|
73
|
+
|
|
74
|
+
interface UseUserResult {
|
|
75
|
+
user: AuthdogUser | null;
|
|
76
|
+
isLoading: boolean;
|
|
77
|
+
error: Error | null;
|
|
78
|
+
refetch: () => Promise<void>;
|
|
79
|
+
}
|
|
80
|
+
declare const useUser: () => UseUserResult;
|
|
81
|
+
|
|
82
|
+
export { AuthdogProvider, type UseAuthResult, type UseUserResult, browserCookiesOptions, fetchUserData, getTokenFromUri, useAuth, useUser, validatePublicKey };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";"use client";var
|
|
1
|
+
"use strict";"use client";var M=Object.create;var _=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var B=Object.getPrototypeOf,G=Object.prototype.hasOwnProperty;var X=(e,t)=>{for(var r in t)_(e,r,{get:t[r],enumerable:!0})},O=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of V(t))!G.call(e,a)&&a!==r&&_(e,a,{get:()=>t[a],enumerable:!(s=F(t,a))||s.enumerable});return e};var Y=(e,t,r)=>(r=e!=null?M(B(e)):{},O(t||!e||!e.__esModule?_(r,"default",{value:e,enumerable:!0}):r,e)),z=e=>O(_({},"__esModule",{value:!0}),e);var H={};X(H,{AuthdogProvider:()=>R,browserCookiesOptions:()=>K,fetchUserData:()=>v,getPublicKeyPayload:()=>A,getTokenFromUri:()=>S,useAuth:()=>D,useUser:()=>C,validatePublicKey:()=>U});module.exports=z(H);var A=e=>{if(!e)throw new Error("Public key is not defined");if(!e.startsWith("pk_"))throw new Error("Invalid public key");try{return JSON.parse(Buffer.from(e.replace("pk_",""),"base64").toString("utf-8"))}catch{throw new Error("Failed to parse public key")}};var S=e=>new URL(e).searchParams.get("token"),U=e=>{if(!e)throw new Error("Public key is not defined");if(!e.startsWith("pk_"))throw new Error("Invalid public key")},v=async(e,t)=>{U(e);let r=A(e),s=await fetch(`${r==null?void 0:r.identityHost}/oidc/${r==null?void 0:r.environmentId}/userinfo`,{headers:{authorization:`Bearer ${t}`}});if(!s.ok)throw new Error("Failed to fetch user info");return await s.json()},K={maxAge:60*60*24*7,path:"/",httpOnly:!0};var p=Y(require("react"));var c="token",d="token-updated";var R=({children:e})=>((0,p.useEffect)(()=>{let t=new URLSearchParams(window.location.search).get("token");t&&(localStorage.setItem(c,t),window.dispatchEvent(new Event(d)),window.history.replaceState({},document.title,"/"))},[]),p.default.createElement(p.default.Fragment,null,e));var w=require("react");var D=()=>{let[e,t]=(0,w.useState)(null),[r,s]=(0,w.useState)(!0);return(0,w.useEffect)(()=>{if(typeof window>"u"){t(null),s(!1);return}let a=()=>window.localStorage.getItem(c),l=()=>{let o=a();t(E=>E===o?E:o)};l(),s(!1);let m=()=>{l()},f=o=>{o.key===c&&l()};window.addEventListener(d,m),window.addEventListener("storage",f);let h=0,g=window.setInterval(()=>{h++,l(),h>=10&&window.clearInterval(g)},500);return()=>{window.removeEventListener(d,m),window.removeEventListener("storage",f),window.clearInterval(g)}},[]),{token:e,isAuthenticated:!!e,isLoading:r}};var n=require("react");var b=process.env.NEXT_PUBLIC_PK_AUTHDOG,C=()=>{let[e,t]=(0,n.useState)(null),[r,s]=(0,n.useState)(!1),[a,l]=(0,n.useState)(null),[m,f]=(0,n.useState)(null),[h,g]=(0,n.useState)(!1),o=(0,n.useRef)(!0);(0,n.useEffect)(()=>()=>{o.current=!1},[]),(0,n.useEffect)(()=>{if(typeof window>"u"){t(null),s(!0);return}let i=()=>window.localStorage.getItem(c),u=()=>{let T=i();t(I=>I===T?I:T)};u(),s(!0);let L=()=>{u()},x=T=>{T.key===c&&u()};window.addEventListener(d,L),window.addEventListener("storage",x);let N=0,y=window.setInterval(()=>{N++,u(),N>=10&&window.clearInterval(y)},500);return()=>{window.removeEventListener(d,L),window.removeEventListener("storage",x),window.clearInterval(y)}},[]);let E=(0,n.useCallback)(async()=>{if(!e){o.current&&(l(null),f(null),g(!1));return}if(!b){let i=new Error("NEXT_PUBLIC_PK_AUTHDOG environment variable is not set");throw o.current&&(f(i),l(null)),i}o.current&&g(!0);try{let i=await v(b,e);o.current&&(l((i==null?void 0:i.user)??null),f(null))}catch(i){let u=i instanceof Error?i:new Error("Unexpected error fetching Authdog user");throw process.env.NODE_ENV!=="production"&&console.error("Error fetching Authdog user profile:",u),o.current&&(l(null),f(u)),u}finally{o.current&&g(!1)}},[e]);return(0,n.useEffect)(()=>{r&&E().catch(()=>{})},[E,r]),{user:a,isLoading:!r||h,error:m,refetch:E}};0&&(module.exports={AuthdogProvider,browserCookiesOptions,fetchUserData,getPublicKeyPayload,getTokenFromUri,useAuth,useUser,validatePublicKey});
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/commons.ts","../src/client/session.ts","../src/client/Provider.tsx"],"sourcesContent":["\"use client\";\nexport * from \"./client\";\nexport * from \"./commons\";\n","export interface PublicKeyPayload {\n environmentId: string;\n identityHost: string;\n}\n\nexport const getPublicKeyPayload = (publicKey: string): PublicKeyPayload => {\n if (!publicKey) {\n throw new Error(\"Public key is not defined\");\n }\n\n if (!publicKey.startsWith(\"pk_\")) {\n throw new Error(\"Invalid public key\");\n }\n\n try {\n return JSON.parse(\n Buffer.from(publicKey.replace(\"pk_\", \"\"), \"base64\").toString(\"utf-8\"),\n );\n } catch (e) {\n throw new Error(\"Failed to parse public key\");\n }\n};\n","import { getPublicKeyPayload } from \"../commons\";\n\nexport const getTokenFromUri = (url: string): string | null => {\n return new URL(url).searchParams.get(\"token\");\n};\n\ninterface IFetchUserData {\n user: {\n id: string;\n environmentId: string;\n externalId: string;\n userName: string;\n displayName: string;\n nickName: string;\n profileUrl: string;\n title: string;\n userType: string;\n preferredLanguage: string | null;\n locale: string | null;\n timezone: string | null;\n active: boolean;\n provider: string;\n lastLogin: string;\n createdAt: string;\n updatedAt: string;\n names: {\n id: string;\n userId: string;\n formatted: string | null;\n familyName: string;\n givenName: string;\n middleName: string | null;\n honorificPrefix: string | null;\n honorificSuffix: string | null;\n createdAt: string;\n updatedAt: string;\n };\n addresses: [];\n emails: {\n value: string;\n primary: boolean;\n type: string;\n }[];\n phoneNumbers: [];\n ims: [];\n photos: {\n value: string;\n type: string;\n }[];\n };\n meta: {\n code: number;\n message: string;\n };\n}\n\nexport const validatePublicKey = (publicKey: string) => {\n if (!publicKey) {\n throw new Error(\"Public key is not defined\");\n }\n\n if (!publicKey.startsWith(\"pk_\")) {\n throw new Error(\"Invalid public key\");\n }\n};\n\nexport const fetchUserData = async (\n publicKey: string,\n token: string,\n): Promise<IFetchUserData | null> => {\n validatePublicKey(publicKey);\n const publicKeyObj = getPublicKeyPayload(publicKey);\n const userData = await fetch(\n `${publicKeyObj?.identityHost}/oidc/${publicKeyObj?.environmentId}/userinfo`,\n {\n headers: {\n authorization: `Bearer ${token}`,\n },\n },\n );\n\n if (!userData.ok) {\n throw new Error(\"Failed to fetch user info\");\n }\n\n return await userData.json();\n};\n\nexport const browserCookiesOptions = {\n maxAge: 60 * 60 * 24 * 7, // 1 week\n path: \"/\",\n httpOnly: true,\n};\n","import React, { useEffect } from \"react\";\nexport const AuthdogProvider = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n useEffect(() => {\n const token = new URLSearchParams(window.location.search).get(\"token\");\n if (token) {\n localStorage.setItem(\"token\", token);\n window.history.replaceState({}, document.title, \"/\");\n }\n }, []);\n return <>{children}</>;\n};\n"],"mappings":"ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,EAAA,0BAAAC,EAAA,kBAAAC,EAAA,wBAAAC,EAAA,oBAAAC,EAAA,sBAAAC,IAAA,eAAAC,EAAAR,GCKO,IAAMS,EAAuBC,GAAwC,CAC1E,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,2BAA2B,EAG7C,GAAI,CAACA,EAAU,WAAW,KAAK,EAC7B,MAAM,IAAI,MAAM,oBAAoB,EAGtC,GAAI,CACF,OAAO,KAAK,MACV,OAAO,KAAKA,EAAU,QAAQ,MAAO,EAAE,EAAG,QAAQ,EAAE,SAAS,OAAO,CACtE,CACF,MAAY,CACV,MAAM,IAAI,MAAM,4BAA4B,CAC9C,CACF,ECnBO,IAAMC,EAAmBC,GACvB,IAAI,IAAIA,CAAG,EAAE,aAAa,IAAI,OAAO,EAqDjCC,EAAqBC,GAAsB,CACtD,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,2BAA2B,EAG7C,GAAI,CAACA,EAAU,WAAW,KAAK,EAC7B,MAAM,IAAI,MAAM,oBAAoB,CAExC,EAEaC,EAAgB,MAC3BD,EACAE,IACmC,CACnCH,EAAkBC,CAAS,EAC3B,IAAMG,EAAeC,EAAoBJ,CAAS,EAC5CK,EAAW,MAAM,MACrB,GAAGF,GAAA,YAAAA,EAAc,YAAY,SAASA,GAAA,YAAAA,EAAc,aAAa,YACjE,CACE,QAAS,CACP,cAAe,UAAUD,CAAK,EAChC,CACF,CACF,EAEA,GAAI,CAACG,EAAS,GACZ,MAAM,IAAI,MAAM,2BAA2B,EAG7C,OAAO,MAAMA,EAAS,KAAK,CAC7B,EAEaC,EAAwB,CACnC,OAAQ,GAAK,GAAK,GAAK,EACvB,KAAM,IACN,SAAU,EACZ,EC5FA,IAAAC,EAAiC,oBACpBC,EAAkB,CAAC,CAC9B,SAAAC,CACF,QAGE,aAAU,IAAM,CACd,IAAMC,EAAQ,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAAE,IAAI,OAAO,EACjEA,IACF,aAAa,QAAQ,QAASA,CAAK,EACnC,OAAO,QAAQ,aAAa,CAAC,EAAG,SAAS,MAAO,GAAG,EAEvD,EAAG,CAAC,CAAC,EACE,EAAAC,QAAA,gBAAAA,QAAA,cAAGF,CAAS","names":["index_exports","__export","AuthdogProvider","browserCookiesOptions","fetchUserData","getPublicKeyPayload","getTokenFromUri","validatePublicKey","__toCommonJS","getPublicKeyPayload","publicKey","getTokenFromUri","url","validatePublicKey","publicKey","fetchUserData","token","publicKeyObj","getPublicKeyPayload","userData","browserCookiesOptions","import_react","AuthdogProvider","children","token","React"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/commons.ts","../src/client/session.ts","../src/client/Provider.tsx","../src/client/constants.ts","../src/hooks/use-auth.ts","../src/hooks/use-user.ts"],"sourcesContent":["\"use client\";\nexport * from \"./client\";\nexport * from \"./commons\";\nexport * from \"./hooks\";\n","export interface PublicKeyPayload {\n environmentId: string;\n identityHost: string;\n}\n\nexport const getPublicKeyPayload = (publicKey: string): PublicKeyPayload => {\n if (!publicKey) {\n throw new Error(\"Public key is not defined\");\n }\n\n if (!publicKey.startsWith(\"pk_\")) {\n throw new Error(\"Invalid public key\");\n }\n\n try {\n return JSON.parse(\n Buffer.from(publicKey.replace(\"pk_\", \"\"), \"base64\").toString(\"utf-8\"),\n );\n } catch (e) {\n throw new Error(\"Failed to parse public key\");\n }\n};\n","import { getPublicKeyPayload } from \"../commons\";\n\nexport const getTokenFromUri = (url: string): string | null => {\n return new URL(url).searchParams.get(\"token\");\n};\n\nexport interface AuthdogUser {\n id: string;\n environmentId: string;\n externalId: string;\n userName: string;\n displayName: string;\n nickName: string;\n profileUrl: string;\n title: string;\n userType: string;\n preferredLanguage: string | null;\n locale: string | null;\n timezone: string | null;\n active: boolean;\n provider: string;\n lastLogin: string;\n createdAt: string;\n updatedAt: string;\n names: {\n id: string;\n userId: string;\n formatted: string | null;\n familyName: string;\n givenName: string;\n middleName: string | null;\n honorificPrefix: string | null;\n honorificSuffix: string | null;\n createdAt: string;\n updatedAt: string;\n };\n addresses: [];\n emails: {\n value: string;\n primary: boolean;\n type: string;\n }[];\n phoneNumbers: [];\n ims: [];\n photos: {\n value: string;\n type: string;\n }[];\n}\n\nexport interface AuthdogUserResponse {\n user: AuthdogUser;\n meta: {\n code: number;\n message: string;\n };\n}\n\nexport const validatePublicKey = (publicKey: string) => {\n if (!publicKey) {\n throw new Error(\"Public key is not defined\");\n }\n\n if (!publicKey.startsWith(\"pk_\")) {\n throw new Error(\"Invalid public key\");\n }\n};\n\nexport const fetchUserData = async (\n publicKey: string,\n token: string,\n): Promise<AuthdogUserResponse | null> => {\n validatePublicKey(publicKey);\n const publicKeyObj = getPublicKeyPayload(publicKey);\n const userData = await fetch(\n `${publicKeyObj?.identityHost}/oidc/${publicKeyObj?.environmentId}/userinfo`,\n {\n headers: {\n authorization: `Bearer ${token}`,\n },\n },\n );\n\n if (!userData.ok) {\n throw new Error(\"Failed to fetch user info\");\n }\n\n return await userData.json();\n};\n\nexport const browserCookiesOptions = {\n maxAge: 60 * 60 * 24 * 7, // 1 week\n path: \"/\",\n httpOnly: true,\n};\n","\"use client\";\n\nimport React, { useEffect } from \"react\";\n\nimport { TOKEN_STORAGE_KEY, TOKEN_UPDATED_EVENT } from \"./constants\";\n\nexport const AuthdogProvider = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n useEffect(() => {\n const token = new URLSearchParams(window.location.search).get(\"token\");\n if (token) {\n localStorage.setItem(TOKEN_STORAGE_KEY, token);\n window.dispatchEvent(new Event(TOKEN_UPDATED_EVENT));\n window.history.replaceState({}, document.title, \"/\");\n }\n }, []);\n return <>{children}</>;\n};\n","export const TOKEN_STORAGE_KEY = \"token\";\nexport const TOKEN_UPDATED_EVENT = \"token-updated\";\nexport const TOKEN_POLL_INTERVAL_MS = 500;\nexport const TOKEN_POLL_MAX_ATTEMPTS = 10;\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport {\n TOKEN_POLL_INTERVAL_MS,\n TOKEN_POLL_MAX_ATTEMPTS,\n TOKEN_STORAGE_KEY,\n TOKEN_UPDATED_EVENT,\n} from \"../client/constants\";\n\nexport interface UseAuthResult {\n token: string | null;\n isAuthenticated: boolean;\n isLoading: boolean;\n}\n\nexport const useAuth = (): UseAuthResult => {\n const [token, setToken] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n setToken(null);\n setIsLoading(false);\n return;\n }\n\n const readTokenFromStorage = () =>\n window.localStorage.getItem(TOKEN_STORAGE_KEY);\n\n const syncToken = () => {\n const nextToken = readTokenFromStorage();\n setToken((currentToken) =>\n currentToken === nextToken ? currentToken : nextToken,\n );\n };\n\n syncToken();\n setIsLoading(false);\n\n const handleTokenUpdate = () => {\n syncToken();\n };\n\n const handleStorageChange = (event: StorageEvent) => {\n if (event.key === TOKEN_STORAGE_KEY) {\n syncToken();\n }\n };\n\n window.addEventListener(TOKEN_UPDATED_EVENT, handleTokenUpdate);\n window.addEventListener(\"storage\", handleStorageChange);\n\n let pollCount = 0;\n const pollInterval = window.setInterval(() => {\n pollCount++;\n syncToken();\n\n if (pollCount >= TOKEN_POLL_MAX_ATTEMPTS) {\n window.clearInterval(pollInterval);\n }\n }, TOKEN_POLL_INTERVAL_MS);\n\n return () => {\n window.removeEventListener(TOKEN_UPDATED_EVENT, handleTokenUpdate);\n window.removeEventListener(\"storage\", handleStorageChange);\n window.clearInterval(pollInterval);\n };\n }, []);\n\n return {\n token,\n isAuthenticated: Boolean(token),\n isLoading,\n };\n};\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport {\n TOKEN_POLL_INTERVAL_MS,\n TOKEN_POLL_MAX_ATTEMPTS,\n TOKEN_STORAGE_KEY,\n TOKEN_UPDATED_EVENT,\n} from \"../client/constants\";\nimport { fetchUserData, type AuthdogUser } from \"../client/session\";\n\nconst PUBLIC_KEY = process.env.NEXT_PUBLIC_PK_AUTHDOG;\n\nexport interface UseUserResult {\n user: AuthdogUser | null;\n isLoading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\nexport const useUser = (): UseUserResult => {\n const [token, setToken] = useState<string | null>(null);\n const [isTokenInitialized, setIsTokenInitialized] = useState(false);\n const [user, setUser] = useState<AuthdogUser | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const [isFetching, setIsFetching] = useState(false);\n const isMountedRef = useRef(true);\n\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n setToken(null);\n setIsTokenInitialized(true);\n return;\n }\n\n const readTokenFromStorage = () =>\n window.localStorage.getItem(TOKEN_STORAGE_KEY);\n\n const syncToken = () => {\n const nextToken = readTokenFromStorage();\n setToken((currentToken) =>\n currentToken === nextToken ? currentToken : nextToken,\n );\n };\n\n syncToken();\n setIsTokenInitialized(true);\n\n const handleTokenUpdate = () => {\n syncToken();\n };\n\n const handleStorageChange = (event: StorageEvent) => {\n if (event.key === TOKEN_STORAGE_KEY) {\n syncToken();\n }\n };\n\n window.addEventListener(TOKEN_UPDATED_EVENT, handleTokenUpdate);\n window.addEventListener(\"storage\", handleStorageChange);\n\n let pollCount = 0;\n const pollInterval = window.setInterval(() => {\n pollCount++;\n syncToken();\n\n if (pollCount >= TOKEN_POLL_MAX_ATTEMPTS) {\n window.clearInterval(pollInterval);\n }\n }, TOKEN_POLL_INTERVAL_MS);\n\n return () => {\n window.removeEventListener(TOKEN_UPDATED_EVENT, handleTokenUpdate);\n window.removeEventListener(\"storage\", handleStorageChange);\n window.clearInterval(pollInterval);\n };\n }, []);\n\n const fetchProfile = useCallback(async () => {\n if (!token) {\n if (isMountedRef.current) {\n setUser(null);\n setError(null);\n setIsFetching(false);\n }\n return;\n }\n\n if (!PUBLIC_KEY) {\n const publicKeyError = new Error(\n \"NEXT_PUBLIC_PK_AUTHDOG environment variable is not set\",\n );\n if (isMountedRef.current) {\n setError(publicKeyError);\n setUser(null);\n }\n throw publicKeyError;\n }\n\n if (isMountedRef.current) {\n setIsFetching(true);\n }\n\n try {\n const response = await fetchUserData(PUBLIC_KEY, token);\n if (isMountedRef.current) {\n setUser(response?.user ?? null);\n setError(null);\n }\n } catch (err) {\n const nextError =\n err instanceof Error\n ? err\n : new Error(\"Unexpected error fetching Authdog user\");\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\"Error fetching Authdog user profile:\", nextError);\n }\n if (isMountedRef.current) {\n setUser(null);\n setError(nextError);\n }\n throw nextError;\n } finally {\n if (isMountedRef.current) {\n setIsFetching(false);\n }\n }\n }, [token]);\n\n useEffect(() => {\n if (!isTokenInitialized) {\n return;\n }\n\n fetchProfile().catch(() => {\n /* error is already stored in state */\n });\n }, [fetchProfile, isTokenInitialized]);\n\n return {\n user,\n isLoading: !isTokenInitialized || isFetching,\n error,\n refetch: fetchProfile,\n };\n};\n"],"mappings":"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","names":["index_exports","__export","AuthdogProvider","browserCookiesOptions","fetchUserData","getPublicKeyPayload","getTokenFromUri","useAuth","useUser","validatePublicKey","__toCommonJS","getPublicKeyPayload","publicKey","getTokenFromUri","url","validatePublicKey","publicKey","fetchUserData","token","publicKeyObj","getPublicKeyPayload","userData","browserCookiesOptions","import_react","TOKEN_STORAGE_KEY","TOKEN_UPDATED_EVENT","AuthdogProvider","children","token","TOKEN_STORAGE_KEY","TOKEN_UPDATED_EVENT","React","import_react","useAuth","token","setToken","isLoading","setIsLoading","readTokenFromStorage","TOKEN_STORAGE_KEY","syncToken","nextToken","currentToken","handleTokenUpdate","handleStorageChange","event","TOKEN_UPDATED_EVENT","pollCount","pollInterval","import_react","PUBLIC_KEY","useUser","token","setToken","isTokenInitialized","setIsTokenInitialized","user","setUser","error","setError","isFetching","setIsFetching","isMountedRef","readTokenFromStorage","TOKEN_STORAGE_KEY","syncToken","nextToken","currentToken","handleTokenUpdate","handleStorageChange","event","TOKEN_UPDATED_EVENT","pollCount","pollInterval","fetchProfile","publicKeyError","response","fetchUserData","err","nextError"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";var
|
|
1
|
+
"use client";var x=e=>{if(!e)throw new Error("Public key is not defined");if(!e.startsWith("pk_"))throw new Error("Invalid public key");try{return JSON.parse(Buffer.from(e.replace("pk_",""),"base64").toString("utf-8"))}catch{throw new Error("Failed to parse public key")}};var S=e=>new URL(e).searchParams.get("token"),N=e=>{if(!e)throw new Error("Public key is not defined");if(!e.startsWith("pk_"))throw new Error("Invalid public key")},h=async(e,n)=>{N(e);let t=x(e),i=await fetch(`${t==null?void 0:t.identityHost}/oidc/${t==null?void 0:t.environmentId}/userinfo`,{headers:{authorization:`Bearer ${n}`}});if(!i.ok)throw new Error("Failed to fetch user info");return await i.json()},K={maxAge:60*60*24*7,path:"/",httpOnly:!0};import y,{useEffect as R}from"react";var l="token",u="token-updated";var D=({children:e})=>(R(()=>{let n=new URLSearchParams(window.location.search).get("token");n&&(localStorage.setItem(l,n),window.dispatchEvent(new Event(u)),window.history.replaceState({},document.title,"/"))},[]),y.createElement(y.Fragment,null,e));import{useEffect as b,useState as I}from"react";var C=()=>{let[e,n]=I(null),[t,i]=I(!0);return b(()=>{if(typeof window>"u"){n(null),i(!1);return}let m=()=>window.localStorage.getItem(l),s=()=>{let r=m();n(f=>f===r?f:r)};s(),i(!1);let E=()=>{s()},c=r=>{r.key===l&&s()};window.addEventListener(u,E),window.addEventListener("storage",c);let p=0,d=window.setInterval(()=>{p++,s(),p>=10&&window.clearInterval(d)},500);return()=>{window.removeEventListener(u,E),window.removeEventListener("storage",c),window.clearInterval(d)}},[]),{token:e,isAuthenticated:!!e,isLoading:t}};import{useCallback as M,useEffect as v,useRef as F,useState as g}from"react";var O=process.env.NEXT_PUBLIC_PK_AUTHDOG,V=()=>{let[e,n]=g(null),[t,i]=g(!1),[m,s]=g(null),[E,c]=g(null),[p,d]=g(!1),r=F(!0);v(()=>()=>{r.current=!1},[]),v(()=>{if(typeof window>"u"){n(null),i(!0);return}let o=()=>window.localStorage.getItem(l),a=()=>{let w=o();n(L=>L===w?L:w)};a(),i(!0);let A=()=>{a()},U=w=>{w.key===l&&a()};window.addEventListener(u,A),window.addEventListener("storage",U);let P=0,k=window.setInterval(()=>{P++,a(),P>=10&&window.clearInterval(k)},500);return()=>{window.removeEventListener(u,A),window.removeEventListener("storage",U),window.clearInterval(k)}},[]);let f=M(async()=>{if(!e){r.current&&(s(null),c(null),d(!1));return}if(!O){let o=new Error("NEXT_PUBLIC_PK_AUTHDOG environment variable is not set");throw r.current&&(c(o),s(null)),o}r.current&&d(!0);try{let o=await h(O,e);r.current&&(s((o==null?void 0:o.user)??null),c(null))}catch(o){let a=o instanceof Error?o:new Error("Unexpected error fetching Authdog user");throw process.env.NODE_ENV!=="production"&&console.error("Error fetching Authdog user profile:",a),r.current&&(s(null),c(a)),a}finally{r.current&&d(!1)}},[e]);return v(()=>{t&&f().catch(()=>{})},[f,t]),{user:m,isLoading:!t||p,error:E,refetch:f}};export{D as AuthdogProvider,K as browserCookiesOptions,h as fetchUserData,x as getPublicKeyPayload,S as getTokenFromUri,C as useAuth,V as useUser,N as validatePublicKey};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commons.ts","../src/client/session.ts","../src/client/Provider.tsx"],"sourcesContent":["export interface PublicKeyPayload {\n environmentId: string;\n identityHost: string;\n}\n\nexport const getPublicKeyPayload = (publicKey: string): PublicKeyPayload => {\n if (!publicKey) {\n throw new Error(\"Public key is not defined\");\n }\n\n if (!publicKey.startsWith(\"pk_\")) {\n throw new Error(\"Invalid public key\");\n }\n\n try {\n return JSON.parse(\n Buffer.from(publicKey.replace(\"pk_\", \"\"), \"base64\").toString(\"utf-8\"),\n );\n } catch (e) {\n throw new Error(\"Failed to parse public key\");\n }\n};\n","import { getPublicKeyPayload } from \"../commons\";\n\nexport const getTokenFromUri = (url: string): string | null => {\n return new URL(url).searchParams.get(\"token\");\n};\n\ninterface IFetchUserData {\n user: {\n id: string;\n environmentId: string;\n externalId: string;\n userName: string;\n displayName: string;\n nickName: string;\n profileUrl: string;\n title: string;\n userType: string;\n preferredLanguage: string | null;\n locale: string | null;\n timezone: string | null;\n active: boolean;\n provider: string;\n lastLogin: string;\n createdAt: string;\n updatedAt: string;\n names: {\n id: string;\n userId: string;\n formatted: string | null;\n familyName: string;\n givenName: string;\n middleName: string | null;\n honorificPrefix: string | null;\n honorificSuffix: string | null;\n createdAt: string;\n updatedAt: string;\n };\n addresses: [];\n emails: {\n value: string;\n primary: boolean;\n type: string;\n }[];\n phoneNumbers: [];\n ims: [];\n photos: {\n value: string;\n type: string;\n }[];\n };\n meta: {\n code: number;\n message: string;\n };\n}\n\nexport const validatePublicKey = (publicKey: string) => {\n if (!publicKey) {\n throw new Error(\"Public key is not defined\");\n }\n\n if (!publicKey.startsWith(\"pk_\")) {\n throw new Error(\"Invalid public key\");\n }\n};\n\nexport const fetchUserData = async (\n publicKey: string,\n token: string,\n): Promise<IFetchUserData | null> => {\n validatePublicKey(publicKey);\n const publicKeyObj = getPublicKeyPayload(publicKey);\n const userData = await fetch(\n `${publicKeyObj?.identityHost}/oidc/${publicKeyObj?.environmentId}/userinfo`,\n {\n headers: {\n authorization: `Bearer ${token}`,\n },\n },\n );\n\n if (!userData.ok) {\n throw new Error(\"Failed to fetch user info\");\n }\n\n return await userData.json();\n};\n\nexport const browserCookiesOptions = {\n maxAge: 60 * 60 * 24 * 7, // 1 week\n path: \"/\",\n httpOnly: true,\n};\n","import React, { useEffect } from \"react\";\nexport const AuthdogProvider = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n useEffect(() => {\n const token = new URLSearchParams(window.location.search).get(\"token\");\n if (token) {\n localStorage.setItem(\"token\", token);\n window.history.replaceState({}, document.title, \"/\");\n }\n }, []);\n return <>{children}</>;\n};\n"],"mappings":"aAKO,IAAMA,EAAuBC,GAAwC,CAC1E,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,2BAA2B,EAG7C,GAAI,CAACA,EAAU,WAAW,KAAK,EAC7B,MAAM,IAAI,MAAM,oBAAoB,EAGtC,GAAI,CACF,OAAO,KAAK,MACV,OAAO,KAAKA,EAAU,QAAQ,MAAO,EAAE,EAAG,QAAQ,EAAE,SAAS,OAAO,CACtE,CACF,MAAY,CACV,MAAM,IAAI,MAAM,4BAA4B,CAC9C,CACF,ECnBO,IAAMC,EAAmBC,GACvB,IAAI,IAAIA,CAAG,EAAE,aAAa,IAAI,OAAO,EAqDjCC,EAAqBC,GAAsB,CACtD,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,2BAA2B,EAG7C,GAAI,CAACA,EAAU,WAAW,KAAK,EAC7B,MAAM,IAAI,MAAM,oBAAoB,CAExC,EAEaC,EAAgB,MAC3BD,EACAE,IACmC,CACnCH,EAAkBC,CAAS,EAC3B,IAAMG,EAAeC,EAAoBJ,CAAS,EAC5CK,EAAW,MAAM,MACrB,GAAGF,GAAA,YAAAA,EAAc,YAAY,SAASA,GAAA,YAAAA,EAAc,aAAa,YACjE,CACE,QAAS,CACP,cAAe,UAAUD,CAAK,EAChC,CACF,CACF,EAEA,GAAI,CAACG,EAAS,GACZ,MAAM,IAAI,MAAM,2BAA2B,EAG7C,OAAO,MAAMA,EAAS,KAAK,CAC7B,EAEaC,EAAwB,CACnC,OAAQ,GAAK,GAAK,GAAK,EACvB,KAAM,IACN,SAAU,EACZ,EC5FA,OAAOC,GAAS,aAAAC,MAAiB,QAC1B,IAAMC,EAAkB,CAAC,CAC9B,SAAAC,CACF,KAGEF,EAAU,IAAM,CACd,IAAMG,EAAQ,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAAE,IAAI,OAAO,EACjEA,IACF,aAAa,QAAQ,QAASA,CAAK,EACnC,OAAO,QAAQ,aAAa,CAAC,EAAG,SAAS,MAAO,GAAG,EAEvD,EAAG,CAAC,CAAC,EACEJ,EAAA,cAAAA,EAAA,cAAGG,CAAS","names":["getPublicKeyPayload","publicKey","getTokenFromUri","url","validatePublicKey","publicKey","fetchUserData","token","publicKeyObj","getPublicKeyPayload","userData","browserCookiesOptions","React","useEffect","AuthdogProvider","children","token"]}
|
|
1
|
+
{"version":3,"sources":["../src/commons.ts","../src/client/session.ts","../src/client/Provider.tsx","../src/client/constants.ts","../src/hooks/use-auth.ts","../src/hooks/use-user.ts"],"sourcesContent":["export interface PublicKeyPayload {\n environmentId: string;\n identityHost: string;\n}\n\nexport const getPublicKeyPayload = (publicKey: string): PublicKeyPayload => {\n if (!publicKey) {\n throw new Error(\"Public key is not defined\");\n }\n\n if (!publicKey.startsWith(\"pk_\")) {\n throw new Error(\"Invalid public key\");\n }\n\n try {\n return JSON.parse(\n Buffer.from(publicKey.replace(\"pk_\", \"\"), \"base64\").toString(\"utf-8\"),\n );\n } catch (e) {\n throw new Error(\"Failed to parse public key\");\n }\n};\n","import { getPublicKeyPayload } from \"../commons\";\n\nexport const getTokenFromUri = (url: string): string | null => {\n return new URL(url).searchParams.get(\"token\");\n};\n\nexport interface AuthdogUser {\n id: string;\n environmentId: string;\n externalId: string;\n userName: string;\n displayName: string;\n nickName: string;\n profileUrl: string;\n title: string;\n userType: string;\n preferredLanguage: string | null;\n locale: string | null;\n timezone: string | null;\n active: boolean;\n provider: string;\n lastLogin: string;\n createdAt: string;\n updatedAt: string;\n names: {\n id: string;\n userId: string;\n formatted: string | null;\n familyName: string;\n givenName: string;\n middleName: string | null;\n honorificPrefix: string | null;\n honorificSuffix: string | null;\n createdAt: string;\n updatedAt: string;\n };\n addresses: [];\n emails: {\n value: string;\n primary: boolean;\n type: string;\n }[];\n phoneNumbers: [];\n ims: [];\n photos: {\n value: string;\n type: string;\n }[];\n}\n\nexport interface AuthdogUserResponse {\n user: AuthdogUser;\n meta: {\n code: number;\n message: string;\n };\n}\n\nexport const validatePublicKey = (publicKey: string) => {\n if (!publicKey) {\n throw new Error(\"Public key is not defined\");\n }\n\n if (!publicKey.startsWith(\"pk_\")) {\n throw new Error(\"Invalid public key\");\n }\n};\n\nexport const fetchUserData = async (\n publicKey: string,\n token: string,\n): Promise<AuthdogUserResponse | null> => {\n validatePublicKey(publicKey);\n const publicKeyObj = getPublicKeyPayload(publicKey);\n const userData = await fetch(\n `${publicKeyObj?.identityHost}/oidc/${publicKeyObj?.environmentId}/userinfo`,\n {\n headers: {\n authorization: `Bearer ${token}`,\n },\n },\n );\n\n if (!userData.ok) {\n throw new Error(\"Failed to fetch user info\");\n }\n\n return await userData.json();\n};\n\nexport const browserCookiesOptions = {\n maxAge: 60 * 60 * 24 * 7, // 1 week\n path: \"/\",\n httpOnly: true,\n};\n","\"use client\";\n\nimport React, { useEffect } from \"react\";\n\nimport { TOKEN_STORAGE_KEY, TOKEN_UPDATED_EVENT } from \"./constants\";\n\nexport const AuthdogProvider = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n useEffect(() => {\n const token = new URLSearchParams(window.location.search).get(\"token\");\n if (token) {\n localStorage.setItem(TOKEN_STORAGE_KEY, token);\n window.dispatchEvent(new Event(TOKEN_UPDATED_EVENT));\n window.history.replaceState({}, document.title, \"/\");\n }\n }, []);\n return <>{children}</>;\n};\n","export const TOKEN_STORAGE_KEY = \"token\";\nexport const TOKEN_UPDATED_EVENT = \"token-updated\";\nexport const TOKEN_POLL_INTERVAL_MS = 500;\nexport const TOKEN_POLL_MAX_ATTEMPTS = 10;\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport {\n TOKEN_POLL_INTERVAL_MS,\n TOKEN_POLL_MAX_ATTEMPTS,\n TOKEN_STORAGE_KEY,\n TOKEN_UPDATED_EVENT,\n} from \"../client/constants\";\n\nexport interface UseAuthResult {\n token: string | null;\n isAuthenticated: boolean;\n isLoading: boolean;\n}\n\nexport const useAuth = (): UseAuthResult => {\n const [token, setToken] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n setToken(null);\n setIsLoading(false);\n return;\n }\n\n const readTokenFromStorage = () =>\n window.localStorage.getItem(TOKEN_STORAGE_KEY);\n\n const syncToken = () => {\n const nextToken = readTokenFromStorage();\n setToken((currentToken) =>\n currentToken === nextToken ? currentToken : nextToken,\n );\n };\n\n syncToken();\n setIsLoading(false);\n\n const handleTokenUpdate = () => {\n syncToken();\n };\n\n const handleStorageChange = (event: StorageEvent) => {\n if (event.key === TOKEN_STORAGE_KEY) {\n syncToken();\n }\n };\n\n window.addEventListener(TOKEN_UPDATED_EVENT, handleTokenUpdate);\n window.addEventListener(\"storage\", handleStorageChange);\n\n let pollCount = 0;\n const pollInterval = window.setInterval(() => {\n pollCount++;\n syncToken();\n\n if (pollCount >= TOKEN_POLL_MAX_ATTEMPTS) {\n window.clearInterval(pollInterval);\n }\n }, TOKEN_POLL_INTERVAL_MS);\n\n return () => {\n window.removeEventListener(TOKEN_UPDATED_EVENT, handleTokenUpdate);\n window.removeEventListener(\"storage\", handleStorageChange);\n window.clearInterval(pollInterval);\n };\n }, []);\n\n return {\n token,\n isAuthenticated: Boolean(token),\n isLoading,\n };\n};\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport {\n TOKEN_POLL_INTERVAL_MS,\n TOKEN_POLL_MAX_ATTEMPTS,\n TOKEN_STORAGE_KEY,\n TOKEN_UPDATED_EVENT,\n} from \"../client/constants\";\nimport { fetchUserData, type AuthdogUser } from \"../client/session\";\n\nconst PUBLIC_KEY = process.env.NEXT_PUBLIC_PK_AUTHDOG;\n\nexport interface UseUserResult {\n user: AuthdogUser | null;\n isLoading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\nexport const useUser = (): UseUserResult => {\n const [token, setToken] = useState<string | null>(null);\n const [isTokenInitialized, setIsTokenInitialized] = useState(false);\n const [user, setUser] = useState<AuthdogUser | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const [isFetching, setIsFetching] = useState(false);\n const isMountedRef = useRef(true);\n\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n setToken(null);\n setIsTokenInitialized(true);\n return;\n }\n\n const readTokenFromStorage = () =>\n window.localStorage.getItem(TOKEN_STORAGE_KEY);\n\n const syncToken = () => {\n const nextToken = readTokenFromStorage();\n setToken((currentToken) =>\n currentToken === nextToken ? currentToken : nextToken,\n );\n };\n\n syncToken();\n setIsTokenInitialized(true);\n\n const handleTokenUpdate = () => {\n syncToken();\n };\n\n const handleStorageChange = (event: StorageEvent) => {\n if (event.key === TOKEN_STORAGE_KEY) {\n syncToken();\n }\n };\n\n window.addEventListener(TOKEN_UPDATED_EVENT, handleTokenUpdate);\n window.addEventListener(\"storage\", handleStorageChange);\n\n let pollCount = 0;\n const pollInterval = window.setInterval(() => {\n pollCount++;\n syncToken();\n\n if (pollCount >= TOKEN_POLL_MAX_ATTEMPTS) {\n window.clearInterval(pollInterval);\n }\n }, TOKEN_POLL_INTERVAL_MS);\n\n return () => {\n window.removeEventListener(TOKEN_UPDATED_EVENT, handleTokenUpdate);\n window.removeEventListener(\"storage\", handleStorageChange);\n window.clearInterval(pollInterval);\n };\n }, []);\n\n const fetchProfile = useCallback(async () => {\n if (!token) {\n if (isMountedRef.current) {\n setUser(null);\n setError(null);\n setIsFetching(false);\n }\n return;\n }\n\n if (!PUBLIC_KEY) {\n const publicKeyError = new Error(\n \"NEXT_PUBLIC_PK_AUTHDOG environment variable is not set\",\n );\n if (isMountedRef.current) {\n setError(publicKeyError);\n setUser(null);\n }\n throw publicKeyError;\n }\n\n if (isMountedRef.current) {\n setIsFetching(true);\n }\n\n try {\n const response = await fetchUserData(PUBLIC_KEY, token);\n if (isMountedRef.current) {\n setUser(response?.user ?? null);\n setError(null);\n }\n } catch (err) {\n const nextError =\n err instanceof Error\n ? err\n : new Error(\"Unexpected error fetching Authdog user\");\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\"Error fetching Authdog user profile:\", nextError);\n }\n if (isMountedRef.current) {\n setUser(null);\n setError(nextError);\n }\n throw nextError;\n } finally {\n if (isMountedRef.current) {\n setIsFetching(false);\n }\n }\n }, [token]);\n\n useEffect(() => {\n if (!isTokenInitialized) {\n return;\n }\n\n fetchProfile().catch(() => {\n /* error is already stored in state */\n });\n }, [fetchProfile, isTokenInitialized]);\n\n return {\n user,\n isLoading: !isTokenInitialized || isFetching,\n error,\n refetch: fetchProfile,\n };\n};\n"],"mappings":"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","names":["getPublicKeyPayload","publicKey","getTokenFromUri","url","validatePublicKey","publicKey","fetchUserData","token","publicKeyObj","getPublicKeyPayload","userData","browserCookiesOptions","React","useEffect","TOKEN_STORAGE_KEY","TOKEN_UPDATED_EVENT","AuthdogProvider","children","useEffect","token","TOKEN_STORAGE_KEY","TOKEN_UPDATED_EVENT","React","useEffect","useState","useAuth","token","setToken","useState","isLoading","setIsLoading","useEffect","readTokenFromStorage","TOKEN_STORAGE_KEY","syncToken","nextToken","currentToken","handleTokenUpdate","handleStorageChange","event","TOKEN_UPDATED_EVENT","pollCount","pollInterval","useCallback","useEffect","useRef","useState","PUBLIC_KEY","useUser","token","setToken","useState","isTokenInitialized","setIsTokenInitialized","user","setUser","error","setError","isFetching","setIsFetching","isMountedRef","useRef","useEffect","readTokenFromStorage","TOKEN_STORAGE_KEY","syncToken","nextToken","currentToken","handleTokenUpdate","handleStorageChange","event","TOKEN_UPDATED_EVENT","pollCount","pollInterval","fetchProfile","useCallback","publicKeyError","response","fetchUserData","err","nextError"]}
|
package/dist/index.server.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";"use server";var R=Object.create;var
|
|
1
|
+
"use strict";"use server";var R=Object.create;var l=Object.defineProperty;var _=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var q=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var v=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),I=(e,t)=>{for(var r in t)l(e,r,{get:t[r],enumerable:!0})},d=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of N(t))!b.call(e,o)&&o!==r&&l(e,o,{get:()=>t[o],enumerable:!(i=_(t,o))||i.enumerable});return e};var A=(e,t,r)=>(r=e!=null?R(q(e)):{},d(t||!e||!e.__esModule?l(r,"default",{value:e,enumerable:!0}):r,e)),E=e=>d(l({},"__esModule",{value:!0}),e);var y=v((n,g)=>{"use strict";var s={NextRequest:require("next/dist/server/web/spec-extension/request").NextRequest,NextResponse:require("next/dist/server/web/spec-extension/response").NextResponse,ImageResponse:require("next/dist/server/web/spec-extension/image-response").ImageResponse,userAgentFromString:require("next/dist/server/web/spec-extension/user-agent").userAgentFromString,userAgent:require("next/dist/server/web/spec-extension/user-agent").userAgent,URLPattern:require("next/dist/server/web/spec-extension/url-pattern").URLPattern,after:require("next/dist/server/after").after,connection:require("next/dist/server/request/connection").connection,unstable_rootParams:require("next/dist/server/request/root-params").unstable_rootParams};g.exports=s;n.NextRequest=s.NextRequest;n.NextResponse=s.NextResponse;n.ImageResponse=s.ImageResponse;n.userAgentFromString=s.userAgentFromString;n.userAgent=s.userAgent;n.URLPattern=s.URLPattern;n.after=s.after;n.connection=s.connection;n.unstable_rootParams=s.unstable_rootParams});var H={};I(H,{getServerSidePayloadPublicKey:()=>m,getSessionCookie:()=>h,logoutHandler:()=>S,useAuthMiddleware:()=>k});module.exports=E(H);var P=A(y()),k=e=>{if(!e)throw new Error("Public key is not defined");if(!e.startsWith("pk_"))throw new Error("Invalid public key");let t=JSON.parse(Buffer.from(e.replace("pk_",""),"base64").toString("utf-8"));return async r=>{var p;let i=P.NextResponse.next(),o={maxAge:60*60*24*7,path:"/",httpOnly:!0},a=new URL(r.nextUrl).searchParams.get("token");if(a){let u=await fetch(`${t.identityHost}/oidc/${t.environmentId}/userinfo`,{headers:{authorization:`Bearer ${a}`}});if(!u.ok)throw new Error("Failed to fetch user info");let c=await u.json();((p=c==null?void 0:c.meta)==null?void 0:p.code)===200&&(i.cookies.set({name:`user_session_${t.environmentId}`,value:JSON.stringify(c.user),...o}),i.cookies.set({name:`user_session_hash_${t.environmentId}`,value:a,...o}))}return i}};var x=require("next/headers");var f=e=>{if(!e)throw new Error("Public key is not defined");if(!e.startsWith("pk_"))throw new Error("Invalid public key");try{return JSON.parse(Buffer.from(e.replace("pk_",""),"base64").toString("utf-8"))}catch{throw new Error("Failed to parse public key")}};var h=async e=>{if(!e)throw new Error("Public key is not defined");let t=f(e);return(await(0,x.cookies)()).get(`user_session_${t==null?void 0:t.environmentId}`)};var w=require("next/headers");var m=e=>{if(!e)throw new Error("Public key is not defined");return f(e)};var S=async e=>{let t=await(0,w.cookies)(),r=process.env.PK_AUTHDOG;if(!r)throw new Error("Public key is not defined");let o=(await m(r)).environmentId,a=`user_session_${o}`;t.get(a)&&t.delete(a);let u=`user_session_hash_${o}`;return t.get(u)&&t.delete(u),new Response(JSON.stringify({message:"Logout successfully",success:!0}),{status:200,headers:{"Content-Type":"application/json"}})};0&&(module.exports={getServerSidePayloadPublicKey,getSessionCookie,logoutHandler,useAuthMiddleware});
|
|
2
2
|
//# sourceMappingURL=index.server.js.map
|
package/dist/index.server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/next@15.
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/next@15.4.7_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/server.js","../src/index.server.ts","../src/server/middleware.ts","../src/server/cookies.ts","../src/commons.ts","../src/server/logout.ts","../src/server/publicKey.ts"],"sourcesContent":["const serverExports = {\n NextRequest: require('next/dist/server/web/spec-extension/request')\n .NextRequest,\n NextResponse: require('next/dist/server/web/spec-extension/response')\n .NextResponse,\n ImageResponse: require('next/dist/server/web/spec-extension/image-response')\n .ImageResponse,\n userAgentFromString: require('next/dist/server/web/spec-extension/user-agent')\n .userAgentFromString,\n userAgent: require('next/dist/server/web/spec-extension/user-agent')\n .userAgent,\n URLPattern: require('next/dist/server/web/spec-extension/url-pattern')\n .URLPattern,\n after: require('next/dist/server/after').after,\n connection: require('next/dist/server/request/connection').connection,\n unstable_rootParams: require('next/dist/server/request/root-params')\n .unstable_rootParams,\n}\n\n// https://nodejs.org/api/esm.html#commonjs-namespaces\n// When importing CommonJS modules, the module.exports object is provided as the default export\nmodule.exports = serverExports\n\n// make import { xxx } from 'next/server' work\nexports.NextRequest = serverExports.NextRequest\nexports.NextResponse = serverExports.NextResponse\nexports.ImageResponse = serverExports.ImageResponse\nexports.userAgentFromString = serverExports.userAgentFromString\nexports.userAgent = serverExports.userAgent\nexports.URLPattern = serverExports.URLPattern\nexports.after = serverExports.after\nexports.connection = serverExports.connection\nexports.unstable_rootParams = serverExports.unstable_rootParams\n","\"use server\";\nexport * from \"./server\";\n","import { NextResponse, type NextRequest } from \"next/server\";\n\nexport const useAuthMiddleware = (publicKey: string) => {\n if (!publicKey) {\n throw new Error(\"Public key is not defined\");\n }\n\n if (!publicKey.startsWith(\"pk_\")) {\n throw new Error(\"Invalid public key\");\n }\n\n const publicKeyObj = JSON.parse(\n Buffer.from(publicKey.replace(\"pk_\", \"\"), \"base64\").toString(\"utf-8\"),\n );\n\n return async (request: NextRequest) => {\n const response = NextResponse.next();\n const options = {\n maxAge: 60 * 60 * 24 * 7, // 1 week\n path: \"/\",\n httpOnly: true,\n };\n\n const tokenFromUri = new URL(request.nextUrl).searchParams.get(\"token\");\n\n if (tokenFromUri) {\n const userData = await fetch(\n `${publicKeyObj.identityHost}/oidc/${publicKeyObj.environmentId}/userinfo`,\n {\n headers: {\n authorization: `Bearer ${tokenFromUri}`,\n },\n },\n );\n\n if (!userData.ok) {\n throw new Error(\"Failed to fetch user info\");\n }\n\n const authenticatedUser = await userData.json();\n\n if (authenticatedUser?.meta?.code === 200) {\n // TODO: define object in node-commons\n response.cookies.set({\n name: `user_session_${publicKeyObj.environmentId}`,\n value: JSON.stringify(authenticatedUser.user),\n ...options,\n });\n\n response.cookies.set({\n name: `user_session_hash_${publicKeyObj.environmentId}`,\n value: tokenFromUri,\n ...options,\n });\n }\n }\n // TODO: token from cookies\n\n return response;\n };\n};\n","import { cookies } from \"next/headers\";\nimport { getPublicKeyPayload } from \"../commons\";\n\nexport const getSessionCookie = async (publicKey: string) => {\n if (!publicKey) {\n throw new Error(\"Public key is not defined\");\n }\n const publicKeyObj = getPublicKeyPayload(publicKey);\n const cookieStore = await cookies();\n return cookieStore.get(`user_session_${publicKeyObj?.environmentId}`);\n};\n","export interface PublicKeyPayload {\n environmentId: string;\n identityHost: string;\n}\n\nexport const getPublicKeyPayload = (publicKey: string): PublicKeyPayload => {\n if (!publicKey) {\n throw new Error(\"Public key is not defined\");\n }\n\n if (!publicKey.startsWith(\"pk_\")) {\n throw new Error(\"Invalid public key\");\n }\n\n try {\n return JSON.parse(\n Buffer.from(publicKey.replace(\"pk_\", \"\"), \"base64\").toString(\"utf-8\"),\n );\n } catch (e) {\n throw new Error(\"Failed to parse public key\");\n }\n};\n","import { cookies } from \"next/headers\";\nimport { NextRequest } from \"next/server\";\nimport { getServerSidePayloadPublicKey } from \"./publicKey\";\n\nexport const logoutHandler = async (req: NextRequest) => {\n const cookiesStore = await cookies();\n\n const publicKey = process.env.PK_AUTHDOG as string;\n\n if (!publicKey) {\n throw new Error(\"Public key is not defined\");\n }\n\n const payload = await getServerSidePayloadPublicKey(publicKey);\n\n const environmentId = payload.environmentId;\n const cookieNameSession = `user_session_${environmentId}`;\n\n const cookieValueSession = cookiesStore.get(cookieNameSession);\n\n if (cookieValueSession) {\n cookiesStore.delete(cookieNameSession);\n }\n\n const cookieNameHash = `user_session_hash_${environmentId}`;\n const cookieValueHash = cookiesStore.get(cookieNameHash);\n\n if (cookieValueHash) {\n cookiesStore.delete(cookieNameHash);\n }\n\n return new Response(\n JSON.stringify({\n message: \"Logout successfully\",\n success: true,\n }),\n {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n },\n );\n};\n","import { getPublicKeyPayload } from \"../commons\";\nexport const getServerSidePayloadPublicKey = (publicKey: string) => {\n if (!publicKey) {\n throw new Error(\"Public key is not defined\");\n }\n return getPublicKeyPayload(publicKey);\n};\n"],"mappings":"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","names":["require_server","__commonJSMin","exports","module","serverExports","index_server_exports","__export","getServerSidePayloadPublicKey","getSessionCookie","logoutHandler","useAuthMiddleware","__toCommonJS","import_server","useAuthMiddleware","publicKey","publicKeyObj","request","_a","response","options","tokenFromUri","userData","authenticatedUser","import_headers","getPublicKeyPayload","publicKey","getSessionCookie","publicKey","publicKeyObj","getPublicKeyPayload","import_headers","getServerSidePayloadPublicKey","publicKey","getPublicKeyPayload","logoutHandler","req","cookiesStore","publicKey","environmentId","getServerSidePayloadPublicKey","cookieNameSession","cookieNameHash"]}
|
package/dist/index.server.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use server";var
|
|
1
|
+
"use server";var k=Object.create;var d=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var w=Object.getPrototypeOf,S=Object.prototype.hasOwnProperty;var i=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var R=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var _=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of h(t))!S.call(e,o)&&o!==r&&d(e,o,{get:()=>t[o],enumerable:!(a=x(t,o))||a.enumerable});return e};var N=(e,t,r)=>(r=e!=null?k(w(e)):{},_(t||!e||!e.__esModule?d(r,"default",{value:e,enumerable:!0}):r,e));var y=R((n,g)=>{"use strict";var s={NextRequest:i("next/dist/server/web/spec-extension/request").NextRequest,NextResponse:i("next/dist/server/web/spec-extension/response").NextResponse,ImageResponse:i("next/dist/server/web/spec-extension/image-response").ImageResponse,userAgentFromString:i("next/dist/server/web/spec-extension/user-agent").userAgentFromString,userAgent:i("next/dist/server/web/spec-extension/user-agent").userAgent,URLPattern:i("next/dist/server/web/spec-extension/url-pattern").URLPattern,after:i("next/dist/server/after").after,connection:i("next/dist/server/request/connection").connection,unstable_rootParams:i("next/dist/server/request/root-params").unstable_rootParams};g.exports=s;n.NextRequest=s.NextRequest;n.NextResponse=s.NextResponse;n.ImageResponse=s.ImageResponse;n.userAgentFromString=s.userAgentFromString;n.userAgent=s.userAgent;n.URLPattern=s.URLPattern;n.after=s.after;n.connection=s.connection;n.unstable_rootParams=s.unstable_rootParams});var P=N(y()),q=e=>{if(!e)throw new Error("Public key is not defined");if(!e.startsWith("pk_"))throw new Error("Invalid public key");let t=JSON.parse(Buffer.from(e.replace("pk_",""),"base64").toString("utf-8"));return async r=>{var m;let a=P.NextResponse.next(),o={maxAge:60*60*24*7,path:"/",httpOnly:!0},u=new URL(r.nextUrl).searchParams.get("token");if(u){let c=await fetch(`${t.identityHost}/oidc/${t.environmentId}/userinfo`,{headers:{authorization:`Bearer ${u}`}});if(!c.ok)throw new Error("Failed to fetch user info");let l=await c.json();((m=l==null?void 0:l.meta)==null?void 0:m.code)===200&&(a.cookies.set({name:`user_session_${t.environmentId}`,value:JSON.stringify(l.user),...o}),a.cookies.set({name:`user_session_hash_${t.environmentId}`,value:u,...o}))}return a}};import{cookies as b}from"next/headers";var f=e=>{if(!e)throw new Error("Public key is not defined");if(!e.startsWith("pk_"))throw new Error("Invalid public key");try{return JSON.parse(Buffer.from(e.replace("pk_",""),"base64").toString("utf-8"))}catch{throw new Error("Failed to parse public key")}};var v=async e=>{if(!e)throw new Error("Public key is not defined");let t=f(e);return(await b()).get(`user_session_${t==null?void 0:t.environmentId}`)};import{cookies as I}from"next/headers";var p=e=>{if(!e)throw new Error("Public key is not defined");return f(e)};var A=async e=>{let t=await I(),r=process.env.PK_AUTHDOG;if(!r)throw new Error("Public key is not defined");let o=(await p(r)).environmentId,u=`user_session_${o}`;t.get(u)&&t.delete(u);let c=`user_session_hash_${o}`;return t.get(c)&&t.delete(c),new Response(JSON.stringify({message:"Logout successfully",success:!0}),{status:200,headers:{"Content-Type":"application/json"}})};export{p as getServerSidePayloadPublicKey,v as getSessionCookie,A as logoutHandler,q as useAuthMiddleware};
|
|
2
2
|
//# sourceMappingURL=index.server.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/next@15.
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/next@15.4.7_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/server.js","../src/server/middleware.ts","../src/server/cookies.ts","../src/commons.ts","../src/server/logout.ts","../src/server/publicKey.ts"],"sourcesContent":["const serverExports = {\n NextRequest: require('next/dist/server/web/spec-extension/request')\n .NextRequest,\n NextResponse: require('next/dist/server/web/spec-extension/response')\n .NextResponse,\n ImageResponse: require('next/dist/server/web/spec-extension/image-response')\n .ImageResponse,\n userAgentFromString: require('next/dist/server/web/spec-extension/user-agent')\n .userAgentFromString,\n userAgent: require('next/dist/server/web/spec-extension/user-agent')\n .userAgent,\n URLPattern: require('next/dist/server/web/spec-extension/url-pattern')\n .URLPattern,\n after: require('next/dist/server/after').after,\n connection: require('next/dist/server/request/connection').connection,\n unstable_rootParams: require('next/dist/server/request/root-params')\n .unstable_rootParams,\n}\n\n// https://nodejs.org/api/esm.html#commonjs-namespaces\n// When importing CommonJS modules, the module.exports object is provided as the default export\nmodule.exports = serverExports\n\n// make import { xxx } from 'next/server' work\nexports.NextRequest = serverExports.NextRequest\nexports.NextResponse = serverExports.NextResponse\nexports.ImageResponse = serverExports.ImageResponse\nexports.userAgentFromString = serverExports.userAgentFromString\nexports.userAgent = serverExports.userAgent\nexports.URLPattern = serverExports.URLPattern\nexports.after = serverExports.after\nexports.connection = serverExports.connection\nexports.unstable_rootParams = serverExports.unstable_rootParams\n","import { NextResponse, type NextRequest } from \"next/server\";\n\nexport const useAuthMiddleware = (publicKey: string) => {\n if (!publicKey) {\n throw new Error(\"Public key is not defined\");\n }\n\n if (!publicKey.startsWith(\"pk_\")) {\n throw new Error(\"Invalid public key\");\n }\n\n const publicKeyObj = JSON.parse(\n Buffer.from(publicKey.replace(\"pk_\", \"\"), \"base64\").toString(\"utf-8\"),\n );\n\n return async (request: NextRequest) => {\n const response = NextResponse.next();\n const options = {\n maxAge: 60 * 60 * 24 * 7, // 1 week\n path: \"/\",\n httpOnly: true,\n };\n\n const tokenFromUri = new URL(request.nextUrl).searchParams.get(\"token\");\n\n if (tokenFromUri) {\n const userData = await fetch(\n `${publicKeyObj.identityHost}/oidc/${publicKeyObj.environmentId}/userinfo`,\n {\n headers: {\n authorization: `Bearer ${tokenFromUri}`,\n },\n },\n );\n\n if (!userData.ok) {\n throw new Error(\"Failed to fetch user info\");\n }\n\n const authenticatedUser = await userData.json();\n\n if (authenticatedUser?.meta?.code === 200) {\n // TODO: define object in node-commons\n response.cookies.set({\n name: `user_session_${publicKeyObj.environmentId}`,\n value: JSON.stringify(authenticatedUser.user),\n ...options,\n });\n\n response.cookies.set({\n name: `user_session_hash_${publicKeyObj.environmentId}`,\n value: tokenFromUri,\n ...options,\n });\n }\n }\n // TODO: token from cookies\n\n return response;\n };\n};\n","import { cookies } from \"next/headers\";\nimport { getPublicKeyPayload } from \"../commons\";\n\nexport const getSessionCookie = async (publicKey: string) => {\n if (!publicKey) {\n throw new Error(\"Public key is not defined\");\n }\n const publicKeyObj = getPublicKeyPayload(publicKey);\n const cookieStore = await cookies();\n return cookieStore.get(`user_session_${publicKeyObj?.environmentId}`);\n};\n","export interface PublicKeyPayload {\n environmentId: string;\n identityHost: string;\n}\n\nexport const getPublicKeyPayload = (publicKey: string): PublicKeyPayload => {\n if (!publicKey) {\n throw new Error(\"Public key is not defined\");\n }\n\n if (!publicKey.startsWith(\"pk_\")) {\n throw new Error(\"Invalid public key\");\n }\n\n try {\n return JSON.parse(\n Buffer.from(publicKey.replace(\"pk_\", \"\"), \"base64\").toString(\"utf-8\"),\n );\n } catch (e) {\n throw new Error(\"Failed to parse public key\");\n }\n};\n","import { cookies } from \"next/headers\";\nimport { NextRequest } from \"next/server\";\nimport { getServerSidePayloadPublicKey } from \"./publicKey\";\n\nexport const logoutHandler = async (req: NextRequest) => {\n const cookiesStore = await cookies();\n\n const publicKey = process.env.PK_AUTHDOG as string;\n\n if (!publicKey) {\n throw new Error(\"Public key is not defined\");\n }\n\n const payload = await getServerSidePayloadPublicKey(publicKey);\n\n const environmentId = payload.environmentId;\n const cookieNameSession = `user_session_${environmentId}`;\n\n const cookieValueSession = cookiesStore.get(cookieNameSession);\n\n if (cookieValueSession) {\n cookiesStore.delete(cookieNameSession);\n }\n\n const cookieNameHash = `user_session_hash_${environmentId}`;\n const cookieValueHash = cookiesStore.get(cookieNameHash);\n\n if (cookieValueHash) {\n cookiesStore.delete(cookieNameHash);\n }\n\n return new Response(\n JSON.stringify({\n message: \"Logout successfully\",\n success: true,\n }),\n {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n },\n );\n};\n","import { getPublicKeyPayload } from \"../commons\";\nexport const getServerSidePayloadPublicKey = (publicKey: string) => {\n if (!publicKey) {\n throw new Error(\"Public key is not defined\");\n }\n return getPublicKeyPayload(publicKey);\n};\n"],"mappings":"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","names":["require_server","__commonJSMin","exports","module","serverExports","import_server","useAuthMiddleware","publicKey","publicKeyObj","request","_a","response","options","tokenFromUri","userData","authenticatedUser","cookies","getPublicKeyPayload","publicKey","getSessionCookie","publicKey","publicKeyObj","getPublicKeyPayload","cookies","cookies","getServerSidePayloadPublicKey","publicKey","getPublicKeyPayload","logoutHandler","req","cookiesStore","cookies","publicKey","environmentId","getServerSidePayloadPublicKey","cookieNameSession","cookieNameHash"]}
|