@payloadcms/ui 3.65.0-internal.d8c3085 → 3.65.0-internal.ef335bd

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Auth/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAM1E,OAAO,KAA+D,MAAM,OAAO,CAAA;AAUnF,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,UAAU,IAAI;IAC1C,+BAA+B;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,CAAC,CAAA;CACR,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,UAAU,IAAI;IACxC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAAA;IAC9C,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACH,WAAW,CAAC,EAAE,oBAAoB,CAAA;IAClC,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/C,kBAAkB,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;IAC7C,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,cAAc,EAAE,CAAC,WAAW,EAAE,oBAAoB,KAAK,IAAI,CAAA;IAC3D,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,CAAA;CAChB,CAAA;AAMD,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,WAAW,CAAC,EAAE,oBAAoB,CAAA;IAClC,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;CACzB,CAAA;AAED,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,WAAW,EAAE,kBAAkB,EAC/B,IAAI,EAAE,WAAW,GAClB,EAAE,KAAK,qBAoSP;AAED,eAAO,MAAM,OAAO,GAAI,CAAC,oBAAmB,WAAW,CAAC,CAAC,CAAmC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Auth/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAM1E,OAAO,KAA+D,MAAM,OAAO,CAAA;AAUnF,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,UAAU,IAAI;IAC1C,+BAA+B;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,CAAC,CAAA;CACR,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,UAAU,IAAI;IACxC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAAA;IAC9C,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACH,WAAW,CAAC,EAAE,oBAAoB,CAAA;IAClC,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/C,kBAAkB,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;IAC7C,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,cAAc,EAAE,CAAC,WAAW,EAAE,oBAAoB,KAAK,IAAI,CAAA;IAC3D,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,CAAA;CAChB,CAAA;AAMD,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,WAAW,CAAC,EAAE,oBAAoB,CAAA;IAClC,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;CACzB,CAAA;AAED,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,WAAW,EAAE,kBAAkB,EAC/B,IAAI,EAAE,WAAW,GAClB,EAAE,KAAK,qBAuSP;AAED,eAAO,MAAM,OAAO,GAAI,CAAC,oBAAmB,WAAW,CAAC,CAAC,CAAmC,CAAA"}
@@ -73,6 +73,14 @@ export function AuthProvider({
73
73
  setTokenExpirationMs(undefined);
74
74
  clearTimeout(refreshTokenTimeoutRef.current);
75
75
  }, []);
76
+ // Handler for reminder timeout - uses useEffectEvent to capture latest autoRefresh value
77
+ const handleReminderTimeout = useEffectEvent(() => {
78
+ if (autoRefresh) {
79
+ refreshCookieEvent();
80
+ } else {
81
+ openModal(stayLoggedInModalSlug);
82
+ }
83
+ });
76
84
  const setNewUser = useCallback(userResponse => {
77
85
  clearTimeout(reminderTimeoutRef.current);
78
86
  clearTimeout(forceLogOutTimeoutRef.current);
@@ -84,13 +92,7 @@ export function AuthProvider({
84
92
  if (expiresInMs) {
85
93
  const nextForceLogoutBufferMs = Math.min(60_000, expiresInMs / 2);
86
94
  setForceLogoutBufferMs(nextForceLogoutBufferMs);
87
- reminderTimeoutRef.current = setTimeout(() => {
88
- if (autoRefresh) {
89
- refreshCookieEvent();
90
- } else {
91
- openModal(stayLoggedInModalSlug);
92
- }
93
- }, Math.max(expiresInMs - nextForceLogoutBufferMs, 0));
95
+ reminderTimeoutRef.current = setTimeout(handleReminderTimeout, Math.max(expiresInMs - nextForceLogoutBufferMs, 0));
94
96
  forceLogOutTimeoutRef.current = setTimeout(() => {
95
97
  revokeTokenAndExpire();
96
98
  redirectToInactivityRoute();
@@ -99,7 +101,7 @@ export function AuthProvider({
99
101
  } else {
100
102
  revokeTokenAndExpire();
101
103
  }
102
- }, [autoRefresh, redirectToInactivityRoute, revokeTokenAndExpire, openModal]);
104
+ }, [redirectToInactivityRoute, revokeTokenAndExpire]);
103
105
  const refreshCookie = useCallback(forceRefresh => {
104
106
  if (!id) {
105
107
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useModal","usePathname","useRouter","formatAdminURL","qs","React","createContext","use","useCallback","useEffect","useState","toast","stayLoggedInModalSlug","useEffectEvent","useTranslation","requests","useConfig","useRouteTransition","Context","maxTimeoutMs","AuthProvider","children","permissions","initialPermissions","user","initialUser","pathname","router","config","admin","autoLogin","autoRefresh","routes","inactivity","logoutInactivityRoute","userSlug","adminRoute","api","apiRoute","serverURL","i18n","closeAllModals","openModal","startRouteTransition","setUserInMemory","tokenInMemory","setTokenInMemory","tokenExpirationMs","setTokenExpirationMs","setPermissions","forceLogoutBufferMs","setForceLogoutBufferMs","fetchedUserOnMount","setFetchedUserOnMount","refreshTokenTimeoutRef","useRef","reminderTimeoutRef","forceLogOutTimeoutRef","id","redirectToInactivityRoute","replace","path","window","location","startsWith","encodeURIComponent","revokeTokenAndExpire","undefined","clearTimeout","current","setNewUser","userResponse","token","exp","expiresInMs","Math","max","min","Date","now","nextForceLogoutBufferMs","setTimeout","refreshCookieEvent","refreshCookie","forceRefresh","request","post","headers","language","status","json","e","error","message","refreshCookieAsync","skipSetUser","logOut","collection","_","refreshPermissions","locale","params","stringify","addQueryPrefix","get","Error","fetchFullUser","credentials","fetchFullUserEvent","fetchUserOnMount","prefillOnly","_jsx","value","setUser","useAuth"],"sources":["../../../src/providers/Auth/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientUser, SanitizedPermissions, TypedUser } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { usePathname, useRouter } from 'next/navigation.js'\nimport { formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { createContext, use, useCallback, useEffect, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { stayLoggedInModalSlug } from '../../elements/StayLoggedIn/index.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { useConfig } from '../Config/index.js'\nimport { useRouteTransition } from '../RouteTransition/index.js'\n\nexport type UserWithToken<T = ClientUser> = {\n /** seconds until expiration */\n exp: number\n token: string\n user: T\n}\n\nexport type AuthContext<T = ClientUser> = {\n fetchFullUser: () => Promise<null | TypedUser>\n logOut: () => Promise<boolean>\n /**\n * These are the permissions for the current user from a global scope.\n *\n * When checking for permissions on document specific level, use the `useDocumentInfo` hook instead.\n *\n * @example\n *\n * ```tsx\n * import { useAuth } from 'payload/ui'\n *\n * const MyComponent: React.FC = () => {\n * const { permissions } = useAuth()\n *\n * if (permissions?.collections?.myCollection?.create) {\n * // user can create documents in 'myCollection'\n * }\n *\n * return null\n * }\n * ```\n *\n * with useDocumentInfo:\n *\n * ```tsx\n * import { useDocumentInfo } from 'payload/ui'\n *\n * const MyComponent: React.FC = () => {\n * const { docPermissions } = useDocumentInfo()\n * if (docPermissions?.create) {\n * // user can create this document\n * }\n * return null\n * } ```\n */\n permissions?: SanitizedPermissions\n refreshCookie: (forceRefresh?: boolean) => void\n refreshCookieAsync: () => Promise<ClientUser>\n refreshPermissions: () => Promise<void>\n setPermissions: (permissions: SanitizedPermissions) => void\n setUser: (user: null | UserWithToken<T>) => void\n strategy?: string\n token?: string\n tokenExpirationMs?: number\n user?: null | T\n}\n\nconst Context = createContext({} as AuthContext)\n\nconst maxTimeoutMs = 2147483647\n\ntype Props = {\n children: React.ReactNode\n permissions?: SanitizedPermissions\n user?: ClientUser | null\n}\n\nexport function AuthProvider({\n children,\n permissions: initialPermissions,\n user: initialUser,\n}: Props) {\n const pathname = usePathname()\n const router = useRouter()\n\n const { config } = useConfig()\n\n const {\n admin: {\n autoLogin,\n autoRefresh,\n routes: { inactivity: logoutInactivityRoute },\n user: userSlug,\n },\n routes: { admin: adminRoute, api: apiRoute },\n serverURL,\n } = config\n\n const { i18n } = useTranslation()\n const { closeAllModals, openModal } = useModal()\n const { startRouteTransition } = useRouteTransition()\n\n const [user, setUserInMemory] = useState<ClientUser | null>(initialUser)\n const [tokenInMemory, setTokenInMemory] = useState<string>()\n const [tokenExpirationMs, setTokenExpirationMs] = useState<number>()\n const [permissions, setPermissions] = useState<SanitizedPermissions>(initialPermissions)\n const [forceLogoutBufferMs, setForceLogoutBufferMs] = useState<number>(120_000)\n const [fetchedUserOnMount, setFetchedUserOnMount] = useState(false)\n\n const refreshTokenTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>(null)\n const reminderTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>(null)\n const forceLogOutTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>(null)\n\n const id = user?.id\n\n const redirectToInactivityRoute = useCallback(() => {\n startRouteTransition(() =>\n router.replace(\n formatAdminURL({\n adminRoute,\n path: `${logoutInactivityRoute}${window.location.pathname.startsWith(adminRoute) ? `?redirect=${encodeURIComponent(window.location.pathname)}` : ''}`,\n }),\n ),\n )\n\n closeAllModals()\n }, [router, adminRoute, logoutInactivityRoute, closeAllModals, startRouteTransition])\n\n const revokeTokenAndExpire = useCallback(() => {\n setUserInMemory(null)\n setTokenInMemory(undefined)\n setTokenExpirationMs(undefined)\n clearTimeout(refreshTokenTimeoutRef.current)\n }, [])\n\n const setNewUser = useCallback(\n (userResponse: null | UserWithToken) => {\n clearTimeout(reminderTimeoutRef.current)\n clearTimeout(forceLogOutTimeoutRef.current)\n\n if (userResponse?.user) {\n setUserInMemory(userResponse.user)\n setTokenInMemory(userResponse.token)\n setTokenExpirationMs(userResponse.exp * 1000)\n\n const expiresInMs = Math.max(\n 0,\n Math.min((userResponse.exp ?? 0) * 1000 - Date.now(), maxTimeoutMs),\n )\n\n if (expiresInMs) {\n const nextForceLogoutBufferMs = Math.min(60_000, expiresInMs / 2)\n setForceLogoutBufferMs(nextForceLogoutBufferMs)\n\n reminderTimeoutRef.current = setTimeout(\n () => {\n if (autoRefresh) {\n refreshCookieEvent()\n } else {\n openModal(stayLoggedInModalSlug)\n }\n },\n Math.max(expiresInMs - nextForceLogoutBufferMs, 0),\n )\n\n forceLogOutTimeoutRef.current = setTimeout(() => {\n revokeTokenAndExpire()\n redirectToInactivityRoute()\n }, expiresInMs)\n }\n } else {\n revokeTokenAndExpire()\n }\n },\n [autoRefresh, redirectToInactivityRoute, revokeTokenAndExpire, openModal],\n )\n\n const refreshCookie = useCallback(\n (forceRefresh?: boolean) => {\n if (!id) {\n return\n }\n\n const expiresInMs = Math.max(0, (tokenExpirationMs ?? 0) - Date.now())\n\n if (forceRefresh || (tokenExpirationMs && expiresInMs < forceLogoutBufferMs * 2)) {\n clearTimeout(refreshTokenTimeoutRef.current)\n refreshTokenTimeoutRef.current = setTimeout(async () => {\n try {\n const request = await requests.post(\n `${serverURL}${apiRoute}/${userSlug}/refresh-token?refresh`,\n {\n headers: {\n 'Accept-Language': i18n.language,\n },\n },\n )\n\n if (request.status === 200) {\n const json: UserWithToken = await request.json()\n setNewUser(json)\n } else {\n setNewUser(null)\n redirectToInactivityRoute()\n }\n } catch (e) {\n toast.error(e.message)\n }\n }, 1000)\n }\n },\n [\n apiRoute,\n i18n.language,\n redirectToInactivityRoute,\n serverURL,\n setNewUser,\n tokenExpirationMs,\n userSlug,\n forceLogoutBufferMs,\n id,\n ],\n )\n\n const refreshCookieAsync = useCallback(\n async (skipSetUser?: boolean): Promise<ClientUser> => {\n try {\n const request = await requests.post(`${serverURL}${apiRoute}/${userSlug}/refresh-token`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: UserWithToken = await request.json()\n if (!skipSetUser) {\n setNewUser(json)\n }\n return json.user\n }\n\n if (user) {\n setNewUser(null)\n redirectToInactivityRoute()\n }\n } catch (e) {\n toast.error(`Refreshing token failed: ${e.message}`)\n }\n return null\n },\n [apiRoute, i18n.language, redirectToInactivityRoute, serverURL, setNewUser, userSlug, user],\n )\n\n const logOut = useCallback(async () => {\n try {\n if (user && user.collection) {\n setNewUser(null)\n await requests.post(`${serverURL}${apiRoute}/${user.collection}/logout`)\n }\n } catch (_) {\n // fail silently and log the user out in state\n }\n\n return true\n }, [apiRoute, serverURL, setNewUser, user])\n\n const refreshPermissions = useCallback(\n async ({ locale }: { locale?: string } = {}) => {\n const params = qs.stringify(\n {\n locale,\n },\n {\n addQueryPrefix: true,\n },\n )\n\n try {\n const request = await requests.get(`${serverURL}${apiRoute}/access${params}`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: SanitizedPermissions = await request.json()\n setPermissions(json)\n } else {\n throw new Error(`Fetching permissions failed with status code ${request.status}`)\n }\n } catch (e) {\n toast.error(`Refreshing permissions failed: ${e.message}`)\n }\n },\n [serverURL, apiRoute, i18n],\n )\n\n const fetchFullUser = React.useCallback(async () => {\n try {\n const request = await requests.get(`${serverURL}${apiRoute}/${userSlug}/me`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: UserWithToken = await request.json()\n setNewUser(json)\n return json?.user || null\n }\n } catch (e) {\n toast.error(`Fetching user failed: ${e.message}`)\n }\n\n return null\n }, [serverURL, apiRoute, userSlug, i18n.language, setNewUser])\n\n const refreshCookieEvent = useEffectEvent(refreshCookie)\n useEffect(() => {\n // when location changes, refresh cookie\n refreshCookieEvent()\n }, [pathname])\n\n const fetchFullUserEvent = useEffectEvent(fetchFullUser)\n useEffect(() => {\n async function fetchUserOnMount() {\n await fetchFullUserEvent()\n setFetchedUserOnMount(true)\n }\n\n void fetchUserOnMount()\n }, [])\n\n useEffect(() => {\n if (!user && autoLogin && !autoLogin.prefillOnly) {\n void fetchFullUserEvent()\n }\n }, [user, autoLogin])\n\n useEffect(\n () => () => {\n // remove all timeouts on unmount\n clearTimeout(refreshTokenTimeoutRef.current)\n clearTimeout(reminderTimeoutRef.current)\n clearTimeout(forceLogOutTimeoutRef.current)\n },\n [],\n )\n\n if (!user && !fetchedUserOnMount) {\n return null\n }\n\n return (\n <Context\n value={{\n fetchFullUser,\n logOut,\n permissions,\n refreshCookie,\n refreshCookieAsync,\n refreshPermissions,\n setPermissions,\n setUser: setNewUser,\n token: tokenInMemory,\n tokenExpirationMs,\n user,\n }}\n >\n {children}\n </Context>\n )\n}\n\nexport const useAuth = <T = ClientUser,>(): AuthContext<T> => use(Context) as AuthContext<T>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useModal","usePathname","useRouter","formatAdminURL","qs","React","createContext","use","useCallback","useEffect","useState","toast","stayLoggedInModalSlug","useEffectEvent","useTranslation","requests","useConfig","useRouteTransition","Context","maxTimeoutMs","AuthProvider","children","permissions","initialPermissions","user","initialUser","pathname","router","config","admin","autoLogin","autoRefresh","routes","inactivity","logoutInactivityRoute","userSlug","adminRoute","api","apiRoute","serverURL","i18n","closeAllModals","openModal","startRouteTransition","setUserInMemory","tokenInMemory","setTokenInMemory","tokenExpirationMs","setTokenExpirationMs","setPermissions","forceLogoutBufferMs","setForceLogoutBufferMs","fetchedUserOnMount","setFetchedUserOnMount","refreshTokenTimeoutRef","useRef","reminderTimeoutRef","forceLogOutTimeoutRef","id","redirectToInactivityRoute","replace","path","window","location","startsWith","encodeURIComponent","revokeTokenAndExpire","undefined","clearTimeout","current","handleReminderTimeout","refreshCookieEvent","setNewUser","userResponse","token","exp","expiresInMs","Math","max","min","Date","now","nextForceLogoutBufferMs","setTimeout","refreshCookie","forceRefresh","request","post","headers","language","status","json","e","error","message","refreshCookieAsync","skipSetUser","logOut","collection","_","refreshPermissions","locale","params","stringify","addQueryPrefix","get","Error","fetchFullUser","credentials","fetchFullUserEvent","fetchUserOnMount","prefillOnly","_jsx","value","setUser","useAuth"],"sources":["../../../src/providers/Auth/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientUser, SanitizedPermissions, TypedUser } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { usePathname, useRouter } from 'next/navigation.js'\nimport { formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { createContext, use, useCallback, useEffect, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { stayLoggedInModalSlug } from '../../elements/StayLoggedIn/index.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { useConfig } from '../Config/index.js'\nimport { useRouteTransition } from '../RouteTransition/index.js'\n\nexport type UserWithToken<T = ClientUser> = {\n /** seconds until expiration */\n exp: number\n token: string\n user: T\n}\n\nexport type AuthContext<T = ClientUser> = {\n fetchFullUser: () => Promise<null | TypedUser>\n logOut: () => Promise<boolean>\n /**\n * These are the permissions for the current user from a global scope.\n *\n * When checking for permissions on document specific level, use the `useDocumentInfo` hook instead.\n *\n * @example\n *\n * ```tsx\n * import { useAuth } from 'payload/ui'\n *\n * const MyComponent: React.FC = () => {\n * const { permissions } = useAuth()\n *\n * if (permissions?.collections?.myCollection?.create) {\n * // user can create documents in 'myCollection'\n * }\n *\n * return null\n * }\n * ```\n *\n * with useDocumentInfo:\n *\n * ```tsx\n * import { useDocumentInfo } from 'payload/ui'\n *\n * const MyComponent: React.FC = () => {\n * const { docPermissions } = useDocumentInfo()\n * if (docPermissions?.create) {\n * // user can create this document\n * }\n * return null\n * } ```\n */\n permissions?: SanitizedPermissions\n refreshCookie: (forceRefresh?: boolean) => void\n refreshCookieAsync: () => Promise<ClientUser>\n refreshPermissions: () => Promise<void>\n setPermissions: (permissions: SanitizedPermissions) => void\n setUser: (user: null | UserWithToken<T>) => void\n strategy?: string\n token?: string\n tokenExpirationMs?: number\n user?: null | T\n}\n\nconst Context = createContext({} as AuthContext)\n\nconst maxTimeoutMs = 2147483647\n\ntype Props = {\n children: React.ReactNode\n permissions?: SanitizedPermissions\n user?: ClientUser | null\n}\n\nexport function AuthProvider({\n children,\n permissions: initialPermissions,\n user: initialUser,\n}: Props) {\n const pathname = usePathname()\n const router = useRouter()\n\n const { config } = useConfig()\n\n const {\n admin: {\n autoLogin,\n autoRefresh,\n routes: { inactivity: logoutInactivityRoute },\n user: userSlug,\n },\n routes: { admin: adminRoute, api: apiRoute },\n serverURL,\n } = config\n\n const { i18n } = useTranslation()\n const { closeAllModals, openModal } = useModal()\n const { startRouteTransition } = useRouteTransition()\n\n const [user, setUserInMemory] = useState<ClientUser | null>(initialUser)\n const [tokenInMemory, setTokenInMemory] = useState<string>()\n const [tokenExpirationMs, setTokenExpirationMs] = useState<number>()\n const [permissions, setPermissions] = useState<SanitizedPermissions>(initialPermissions)\n const [forceLogoutBufferMs, setForceLogoutBufferMs] = useState<number>(120_000)\n const [fetchedUserOnMount, setFetchedUserOnMount] = useState(false)\n\n const refreshTokenTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>(null)\n const reminderTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>(null)\n const forceLogOutTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>(null)\n\n const id = user?.id\n\n const redirectToInactivityRoute = useCallback(() => {\n startRouteTransition(() =>\n router.replace(\n formatAdminURL({\n adminRoute,\n path: `${logoutInactivityRoute}${window.location.pathname.startsWith(adminRoute) ? `?redirect=${encodeURIComponent(window.location.pathname)}` : ''}`,\n }),\n ),\n )\n\n closeAllModals()\n }, [router, adminRoute, logoutInactivityRoute, closeAllModals, startRouteTransition])\n\n const revokeTokenAndExpire = useCallback(() => {\n setUserInMemory(null)\n setTokenInMemory(undefined)\n setTokenExpirationMs(undefined)\n clearTimeout(refreshTokenTimeoutRef.current)\n }, [])\n\n // Handler for reminder timeout - uses useEffectEvent to capture latest autoRefresh value\n const handleReminderTimeout = useEffectEvent(() => {\n if (autoRefresh) {\n refreshCookieEvent()\n } else {\n openModal(stayLoggedInModalSlug)\n }\n })\n\n const setNewUser = useCallback(\n (userResponse: null | UserWithToken) => {\n clearTimeout(reminderTimeoutRef.current)\n clearTimeout(forceLogOutTimeoutRef.current)\n\n if (userResponse?.user) {\n setUserInMemory(userResponse.user)\n setTokenInMemory(userResponse.token)\n setTokenExpirationMs(userResponse.exp * 1000)\n\n const expiresInMs = Math.max(\n 0,\n Math.min((userResponse.exp ?? 0) * 1000 - Date.now(), maxTimeoutMs),\n )\n\n if (expiresInMs) {\n const nextForceLogoutBufferMs = Math.min(60_000, expiresInMs / 2)\n setForceLogoutBufferMs(nextForceLogoutBufferMs)\n\n reminderTimeoutRef.current = setTimeout(\n handleReminderTimeout,\n Math.max(expiresInMs - nextForceLogoutBufferMs, 0),\n )\n\n forceLogOutTimeoutRef.current = setTimeout(() => {\n revokeTokenAndExpire()\n redirectToInactivityRoute()\n }, expiresInMs)\n }\n } else {\n revokeTokenAndExpire()\n }\n },\n [redirectToInactivityRoute, revokeTokenAndExpire],\n )\n\n const refreshCookie = useCallback(\n (forceRefresh?: boolean) => {\n if (!id) {\n return\n }\n\n const expiresInMs = Math.max(0, (tokenExpirationMs ?? 0) - Date.now())\n\n if (forceRefresh || (tokenExpirationMs && expiresInMs < forceLogoutBufferMs * 2)) {\n clearTimeout(refreshTokenTimeoutRef.current)\n refreshTokenTimeoutRef.current = setTimeout(async () => {\n try {\n const request = await requests.post(\n `${serverURL}${apiRoute}/${userSlug}/refresh-token?refresh`,\n {\n headers: {\n 'Accept-Language': i18n.language,\n },\n },\n )\n\n if (request.status === 200) {\n const json: UserWithToken = await request.json()\n setNewUser(json)\n } else {\n setNewUser(null)\n redirectToInactivityRoute()\n }\n } catch (e) {\n toast.error(e.message)\n }\n }, 1000)\n }\n },\n [\n apiRoute,\n i18n.language,\n redirectToInactivityRoute,\n serverURL,\n setNewUser,\n tokenExpirationMs,\n userSlug,\n forceLogoutBufferMs,\n id,\n ],\n )\n\n const refreshCookieAsync = useCallback(\n async (skipSetUser?: boolean): Promise<ClientUser> => {\n try {\n const request = await requests.post(`${serverURL}${apiRoute}/${userSlug}/refresh-token`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: UserWithToken = await request.json()\n if (!skipSetUser) {\n setNewUser(json)\n }\n return json.user\n }\n\n if (user) {\n setNewUser(null)\n redirectToInactivityRoute()\n }\n } catch (e) {\n toast.error(`Refreshing token failed: ${e.message}`)\n }\n return null\n },\n [apiRoute, i18n.language, redirectToInactivityRoute, serverURL, setNewUser, userSlug, user],\n )\n\n const logOut = useCallback(async () => {\n try {\n if (user && user.collection) {\n setNewUser(null)\n await requests.post(`${serverURL}${apiRoute}/${user.collection}/logout`)\n }\n } catch (_) {\n // fail silently and log the user out in state\n }\n\n return true\n }, [apiRoute, serverURL, setNewUser, user])\n\n const refreshPermissions = useCallback(\n async ({ locale }: { locale?: string } = {}) => {\n const params = qs.stringify(\n {\n locale,\n },\n {\n addQueryPrefix: true,\n },\n )\n\n try {\n const request = await requests.get(`${serverURL}${apiRoute}/access${params}`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: SanitizedPermissions = await request.json()\n setPermissions(json)\n } else {\n throw new Error(`Fetching permissions failed with status code ${request.status}`)\n }\n } catch (e) {\n toast.error(`Refreshing permissions failed: ${e.message}`)\n }\n },\n [serverURL, apiRoute, i18n],\n )\n\n const fetchFullUser = React.useCallback(async () => {\n try {\n const request = await requests.get(`${serverURL}${apiRoute}/${userSlug}/me`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: UserWithToken = await request.json()\n setNewUser(json)\n return json?.user || null\n }\n } catch (e) {\n toast.error(`Fetching user failed: ${e.message}`)\n }\n\n return null\n }, [serverURL, apiRoute, userSlug, i18n.language, setNewUser])\n\n const refreshCookieEvent = useEffectEvent(refreshCookie)\n useEffect(() => {\n // when location changes, refresh cookie\n refreshCookieEvent()\n }, [pathname])\n\n const fetchFullUserEvent = useEffectEvent(fetchFullUser)\n useEffect(() => {\n async function fetchUserOnMount() {\n await fetchFullUserEvent()\n setFetchedUserOnMount(true)\n }\n\n void fetchUserOnMount()\n }, [])\n\n useEffect(() => {\n if (!user && autoLogin && !autoLogin.prefillOnly) {\n void fetchFullUserEvent()\n }\n }, [user, autoLogin])\n\n useEffect(\n () => () => {\n // remove all timeouts on unmount\n clearTimeout(refreshTokenTimeoutRef.current)\n clearTimeout(reminderTimeoutRef.current)\n clearTimeout(forceLogOutTimeoutRef.current)\n },\n [],\n )\n\n if (!user && !fetchedUserOnMount) {\n return null\n }\n\n return (\n <Context\n value={{\n fetchFullUser,\n logOut,\n permissions,\n refreshCookie,\n refreshCookieAsync,\n refreshPermissions,\n setPermissions,\n setUser: setNewUser,\n token: tokenInMemory,\n tokenExpirationMs,\n user,\n }}\n >\n {children}\n </Context>\n )\n}\n\nexport const useAuth = <T = ClientUser,>(): AuthContext<T> => use(Context) as AuthContext<T>\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/ui",
3
- "version": "3.65.0-internal.d8c3085",
3
+ "version": "3.65.0-internal.ef335bd",
4
4
  "homepage": "https://payloadcms.com",
5
5
  "repository": {
6
6
  "type": "git",
@@ -136,7 +136,7 @@
136
136
  "ts-essentials": "10.0.3",
137
137
  "use-context-selector": "2.0.0",
138
138
  "uuid": "10.0.0",
139
- "@payloadcms/translations": "3.65.0-internal.d8c3085"
139
+ "@payloadcms/translations": "3.65.0-internal.ef335bd"
140
140
  },
141
141
  "devDependencies": {
142
142
  "@babel/cli": "7.27.2",
@@ -151,14 +151,14 @@
151
151
  "babel-plugin-react-compiler": "19.1.0-rc.3",
152
152
  "esbuild": "0.25.5",
153
153
  "esbuild-sass-plugin": "3.3.1",
154
- "payload": "3.65.0-internal.d8c3085",
155
- "@payloadcms/eslint-config": "3.28.0"
154
+ "@payloadcms/eslint-config": "3.28.0",
155
+ "payload": "3.65.0-internal.ef335bd"
156
156
  },
157
157
  "peerDependencies": {
158
158
  "next": "^15.2.3",
159
159
  "react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
160
160
  "react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
161
- "payload": "3.65.0-internal.d8c3085"
161
+ "payload": "3.65.0-internal.ef335bd"
162
162
  },
163
163
  "engines": {
164
164
  "node": "^18.20.2 || >=20.9.0"