@authdog/nextjs-app 1.0.1 → 1.0.2
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.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.map +1 -1
- package/dist/index.server.mjs.map +1 -1
- package/package.json +3 -2
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
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()
|
|
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()},[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","../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"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/commons.ts","../src/client/session.ts","../src/client/Provider.tsx","../src/client/constants.ts","../src/hooks/useAuth.ts","../src/hooks/useUser.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()\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 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()
|
|
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()},[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","../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"]}
|
|
1
|
+
{"version":3,"sources":["../src/commons.ts","../src/client/session.ts","../src/client/Provider.tsx","../src/client/constants.ts","../src/hooks/useAuth.ts","../src/hooks/useUser.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()\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.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/next@15.4.
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/next@15.4.8_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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/next@15.4.
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/next@15.4.8_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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@authdog/nextjs-app",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Authdog Next.js SDK",
|
|
5
5
|
"source": "src/index.ts",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"dist/"
|
|
22
22
|
],
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"next": "^15.
|
|
24
|
+
"next": "^15.4.8",
|
|
25
25
|
"react": "^19.1.0"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"type-check": "tsc",
|
|
44
44
|
"clean": "rm -rf dist",
|
|
45
45
|
"build": "pnpm clean && tsup",
|
|
46
|
+
"test": "vitest run",
|
|
46
47
|
"ship": "pnpm build && pnpm publish --access public --no-git-checks"
|
|
47
48
|
}
|
|
48
49
|
}
|