celestya 0.0.3 → 0.0.5

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/README.md CHANGED
@@ -31,6 +31,7 @@ const config: IConfig = {
31
31
 
32
32
  export const POST = (req: any, opt: IRequestOptions) => Proxy("POST", req, opt, config);
33
33
  export const GET = (req: any, opt: IRequestOptions) => Proxy("GET", req, opt, config);
34
+ export const DELETE = (req: any, opt: IRequestOptions) => Proxy("DELETE", req, opt, config);
34
35
  ```
35
36
 
36
37
  Configure the provider
@@ -88,8 +88,7 @@ var AuthContextProvider = ({
88
88
  body: loginData.data
89
89
  });
90
90
  setIsLoggedIn(true);
91
- if (res.error)
92
- throw new Error(res.message);
91
+ if (res.error) throw new Error(res.message);
93
92
  return loginData.redirect || "/";
94
93
  } catch (e) {
95
94
  return `${loginData.onErrorUrl || "/"}?error=${e.message}`;
@@ -101,8 +100,7 @@ var AuthContextProvider = ({
101
100
  url: registerRoute,
102
101
  body: registerData.data
103
102
  });
104
- if (res.error)
105
- throw new Error(res.message);
103
+ if (res.error) throw new Error(res.message);
106
104
  return `${registerData.redirect || "/"}?success=true`;
107
105
  } catch (e) {
108
106
  return `${registerData.onErrorUrl || "/"}?error=${e.message}`;
@@ -116,8 +114,7 @@ var AuthContextProvider = ({
116
114
  try {
117
115
  const url = new URL(oAuthRoute, "http://localhost/");
118
116
  url.searchParams.set("authUrl", oAuthUrl);
119
- if (state && state !== "/")
120
- url.searchParams.set("state", state);
117
+ if (state && state !== "/") url.searchParams.set("state", state);
121
118
  const response = await gFetch({ url: url.pathname + url.search });
122
119
  return response.data;
123
120
  } catch (e) {
@@ -185,8 +182,7 @@ var AuthContextProvider = ({
185
182
  }
186
183
  };
187
184
  (0, import_react.useEffect)(() => {
188
- if (!ready)
189
- refreshUser();
185
+ if (!ready) refreshUser();
190
186
  }, []);
191
187
  const provider = {
192
188
  ready,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/client/index.ts","../../src/client/contextProvider.tsx","../../src/client/request.ts","../../src/client/useAuth.ts","../../src/client/Logout.tsx"],"sourcesContent":["import AuthContextProvider from \"./contextProvider\";\nimport LogoutComponent from \"./Logout\";\nimport useAuthContext from \"./useAuth\";\n\nexport const AuthProvider = AuthContextProvider;\nexport const Logout = LogoutComponent;\nexport const useAuth = useAuthContext;\n","\"use client\";\n\nimport { createContext, useEffect, useState } from \"react\";\nimport {\n IAuthContext,\n IAuthContextOptions,\n ILoginData,\n IOAuthData,\n IRegisterData,\n ResponseType,\n} from \"../types/internal\";\n\nimport { dFetch, gFetch, pFetch } from \"./request\";\n\nimport { useRouter } from \"next/navigation\";\n/* +\n Frontend context for providing login, logout, register and refresh\n 'use client' needed for using -> client components only\n server components need to use useSession()\n*/\n\nexport const AuthContext = createContext<IAuthContext<any>>(null as any);\n\nconst AuthContextProvider = <IU,>({\n children,\n routePrefix = \"/api\",\n}: IAuthContextOptions) => {\n const [isLoggedIn, setIsLoggedIn] = useState(false);\n const [ready, setReady] = useState(false);\n const [user, setUser] = useState<IU | {}>({});\n\n const router = useRouter();\n\n // POST /session/login\n const loginRoute = routePrefix + \"/login\";\n\n // POST /session/refresh\n const registerRoute = routePrefix + \"/register\";\n\n // GET /session/logout\n const logoutRoute = routePrefix + \"/logout\";\n\n // GET /session\n const userRoute = routePrefix + \"/user\";\n\n // GET /session/oauth/API_OAUTH_URL\n const oAuthRoute = routePrefix + \"/oauth\";\n\n // GET/POST/DELETE /proxy/URL\n const proxyRoute = routePrefix + \"/proxy\";\n\n const login = async (loginData: ILoginData): Promise<string> => {\n try {\n const res = await pFetch({\n url: loginRoute,\n body: loginData.data,\n });\n\n setIsLoggedIn(true);\n\n if (res.error) throw new Error(res.message);\n\n return loginData.redirect || \"/\";\n } catch (e: any) {\n return `${loginData.onErrorUrl || \"/\"}?error=${e.message}`;\n }\n };\n\n const register = async (registerData: IRegisterData): Promise<string> => {\n try {\n const res = await pFetch({\n url: registerRoute,\n body: registerData.data,\n });\n\n if (res.error) throw new Error(res.message);\n\n return `${registerData.redirect || \"/\"}?success=true`;\n } catch (e: any) {\n return `${registerData.onErrorUrl || \"/\"}?error=${e.message}`;\n }\n };\n\n const oAuth = async ({\n state,\n oAuthUrl,\n onErrorUrl,\n }: IOAuthData): Promise<string> => {\n try {\n const url = new URL(oAuthRoute, \"http://localhost/\");\n\n url.searchParams.set(\"authUrl\", oAuthUrl);\n\n if (state && state !== \"/\") url.searchParams.set(\"state\", state);\n\n const response = await gFetch({ url: url.pathname + url.search });\n\n return response.data;\n } catch (e: any) {\n return `${onErrorUrl || \"/\"}?error=${e.message}`;\n }\n };\n\n const logout = async (): Promise<string> => {\n try {\n const data = await gFetch({\n url: logoutRoute,\n options: { cache: \"no-store\" },\n });\n\n setIsLoggedIn(false);\n setUser({});\n\n return data.data;\n } catch (e: any) {\n console.log(e);\n return \"/\";\n }\n };\n\n const refreshUser = async (force?: boolean): Promise<void> => {\n try {\n const data = await gFetch({\n url: `${userRoute}${force ? \"?force=true\" : \"\"}`,\n options: { cache: \"no-store\" },\n });\n\n if (!data.error) {\n setUser(data.data);\n setIsLoggedIn(true);\n } else {\n setUser({});\n setIsLoggedIn(false);\n }\n\n setReady(true);\n\n router.refresh();\n } catch (e) {\n console.log(\"refreshUser error: \", e);\n }\n };\n\n const get = async <T, U>(url: string): Promise<ResponseType<T, U>> => {\n try {\n const r = await gFetch({ url: `${proxyRoute}${url}` });\n\n return r;\n } catch (e: any) {\n return { error: \"getRequestError\", message: e.message };\n }\n };\n\n const post = async <T, U = any>(\n url: string,\n body: any\n ): Promise<ResponseType<T, U>> => {\n try {\n const r = await pFetch({\n url: `${proxyRoute}${url}`,\n body,\n });\n\n return r;\n } catch (e: any) {\n return { error: \"getRequestError\", message: e.message };\n }\n };\n\n const del = async <T, U>(url: string): Promise<ResponseType<T, U>> => {\n try {\n const r = await dFetch({ url: `${proxyRoute}${url}` });\n\n return r;\n } catch (e: any) {\n return { error: \"getRequestError\", message: e.message };\n }\n };\n\n /**\n * Can only be used if user is logged in! and already initialised\n * @param url url for upload\n * @param formData form data\n * @param setProgress progress dispatch\n * @returns object with data or error\n */\n /* const upload = async <T, U = any>(\n url: string,\n formName: string,\n files: File[],\n setProgress: (p: number) => void,\n ): Promise<TRequest<T, U>> => {\n try {\n if (!user.token) throw new Error('user not logged in')\n \n const res: Error | XMLHttpRequest = await new Promise(\n (resolve, reject) => {\n try {\n const xhr = new XMLHttpRequest()\n const formData = new FormData()\n \n for (let i = 0; i < files.length; i++)\n formData.append(formName, files[i])\n \n xhr.open('POST', `${API_URL}${url}`, true)\n xhr.setRequestHeader('Authorization', `Bearer ${user.token}`)\n xhr.upload.onprogress = (ev: ProgressEvent<EventTarget>) => {\n if (ev.lengthComputable) {\n const percentComplete = (ev.loaded / ev.total) * 100\n setProgress(percentComplete)\n }\n }\n \n xhr.onload = function () {\n console.log('break3?', this)\n return this.status === 200\n ? resolve(this)\n : reject(new Error('Error while uploading: ' + this.status))\n }\n \n xhr.onerror = (ev: ProgressEvent<EventTarget>) => {\n console.log('break2', ev.target)\n reject(ev)\n }\n \n xhr.send(formData)\n } catch (e) {\n console.log('break1', e)\n reject(e)\n }\n },\n )\n \n if (res instanceof Error) throw res\n \n const data: any = JSON.parse(res.responseText)\n \n if (data.error) throw new Error(data.data)\n \n return { data: data.data }\n } catch (e) {\n console.log('break4', e)\n return { error: e.message || 'upload error' }\n }\n }\n \n const getContext = () => {\n let context = user.id\n \n if (!user.id) {\n // if not logged in\n const cookie = document.cookie\n .split(';')\n .find((c) => c.includes('cycle_cid'))\n \n if (cookie) {\n // use cookie value\n context = cookie.split('=')[1]\n } else {\n // set new cookie\n context =\n Math.random().toString(36).substring(2, 15) +\n Math.random().toString(36).substring(2, 15)\n \n document.cookie = `cycle_cid=${context};path=/;max-age=31536000`\n }\n }\n \n return context\n }\n \n const event = async (name: string, value?: any): Promise<boolean> => {\n try {\n const contextId = getContext()\n \n const r = await fetch(NOFY_API_URL + '/event', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: 'Basic ' + ANALYTICS_KEY,\n },\n body: JSON.stringify({\n source: IS_PROD ? 'cycle-frontend' : 'cycle-frontend-dev',\n contextId,\n name,\n value,\n }),\n })\n \n const res = await r.json()\n if (res.error) throw new Error(res.error)\n \n return true\n } catch (e) {\n console.log('#> event error: ', e)\n return false\n }\n }\n \n const pageView = async (url: string, referer?: string): Promise<boolean> => {\n try {\n const contextId = getContext()\n \n const r = await fetch(NOFY_API_URL + '/log/count', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: 'Basic ' + ANALYTICS_KEY,\n },\n body: JSON.stringify({\n meta: {\n contextId,\n type: 'pageview',\n },\n referer,\n identifier: url,\n }),\n })\n \n const res = await r.json()\n if (res.error) throw new Error(res.error)\n \n return true\n } catch (e) {\n console.log('#> event error: ', e)\n return false\n }\n } */\n\n useEffect(() => {\n if (!ready) refreshUser();\n }, []);\n\n const provider = {\n ready,\n login,\n register,\n logout,\n isLoggedIn,\n refreshUser,\n user,\n oAuth,\n get,\n post,\n del,\n /* upload, */\n };\n\n return (\n <AuthContext.Provider value={provider}>{children}</AuthContext.Provider>\n );\n};\n\nexport default AuthContextProvider;\n","export async function gFetch({\n url,\n options,\n}: {\n url: string | URL;\n options?: object;\n}) {\n const response: Response = await fetch(url, {\n method: \"GET\",\n ...options,\n });\n\n return await response.json();\n}\n\nexport async function pFetch({\n url,\n body,\n}: {\n url: string | URL;\n body: object;\n}) {\n const response: Response = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n });\n\n return await response.json();\n}\n\nexport async function dFetch({\n url,\n options,\n}: {\n url: string | URL;\n options?: object;\n}) {\n const response: Response = await fetch(url, {\n method: \"DELETE\",\n ...options,\n });\n\n return await response.json();\n}\n","import { useContext } from \"react\";\nimport { AuthContext } from \"./contextProvider\";\n\nconst useAuthContext = () => {\n return useContext(AuthContext);\n};\n\nexport default useAuthContext;\n","'use client'\n\nimport { IChildProps } from \"../types/internal\";\nimport useAuthContext from \"./useAuth\";\n\nexport type LogoutProps = React.FC<React.ComponentProps<'div'> & IChildProps>\n\nconst LogoutComponent: LogoutProps = ({ children, ...props }) => {\n const { logout } = useAuthContext()\n\n const handleLogout = async (e: any) => {\n e.preventDefault()\n await logout()\n }\n\n return (\n <div onClick={handleLogout} {...props}>\n {children}\n </div>\n )\n}\n\nexport default LogoutComponent"],"mappings":"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","names":["import_react","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../../src/client/index.ts","../../src/client/contextProvider.tsx","../../src/client/request.ts","../../src/client/useAuth.ts","../../src/client/Logout.tsx"],"sourcesContent":["import AuthContextProvider from \"./contextProvider\";\nimport LogoutComponent from \"./Logout\";\nimport useAuthContext from \"./useAuth\";\n\nexport const AuthProvider = AuthContextProvider;\nexport const Logout = LogoutComponent;\nexport const useAuth = useAuthContext;\n","\"use client\";\n\nimport { createContext, useEffect, useState } from \"react\";\nimport {\n IAuthContext,\n IAuthContextOptions,\n ILoginData,\n IOAuthData,\n IRegisterData,\n ResponseType,\n} from \"../types/internal\";\n\nimport { dFetch, gFetch, pFetch } from \"./request\";\n\nimport { useRouter } from \"next/navigation\";\n/* +\n Frontend context for providing login, logout, register and refresh\n 'use client' needed for using -> client components only\n server components need to use useSession()\n*/\n\nexport const AuthContext = createContext<IAuthContext<any>>(null as any);\n\nconst AuthContextProvider = <IU,>({\n children,\n routePrefix = \"/api\",\n}: IAuthContextOptions) => {\n const [isLoggedIn, setIsLoggedIn] = useState(false);\n const [ready, setReady] = useState(false);\n const [user, setUser] = useState<IU | {}>({});\n\n const router = useRouter();\n\n // POST /session/login\n const loginRoute = routePrefix + \"/login\";\n\n // POST /session/refresh\n const registerRoute = routePrefix + \"/register\";\n\n // GET /session/logout\n const logoutRoute = routePrefix + \"/logout\";\n\n // GET /session\n const userRoute = routePrefix + \"/user\";\n\n // GET /session/oauth/API_OAUTH_URL\n const oAuthRoute = routePrefix + \"/oauth\";\n\n // GET/POST/DELETE /proxy/URL\n const proxyRoute = routePrefix + \"/proxy\";\n\n const login = async (loginData: ILoginData): Promise<string> => {\n try {\n const res = await pFetch({\n url: loginRoute,\n body: loginData.data,\n });\n\n setIsLoggedIn(true);\n\n if (res.error) throw new Error(res.message);\n\n return loginData.redirect || \"/\";\n } catch (e: any) {\n return `${loginData.onErrorUrl || \"/\"}?error=${e.message}`;\n }\n };\n\n const register = async (registerData: IRegisterData): Promise<string> => {\n try {\n const res = await pFetch({\n url: registerRoute,\n body: registerData.data,\n });\n\n if (res.error) throw new Error(res.message);\n\n return `${registerData.redirect || \"/\"}?success=true`;\n } catch (e: any) {\n return `${registerData.onErrorUrl || \"/\"}?error=${e.message}`;\n }\n };\n\n const oAuth = async ({\n state,\n oAuthUrl,\n onErrorUrl,\n }: IOAuthData): Promise<string> => {\n try {\n const url = new URL(oAuthRoute, \"http://localhost/\");\n\n url.searchParams.set(\"authUrl\", oAuthUrl);\n\n if (state && state !== \"/\") url.searchParams.set(\"state\", state);\n\n const response = await gFetch({ url: url.pathname + url.search });\n\n return response.data;\n } catch (e: any) {\n return `${onErrorUrl || \"/\"}?error=${e.message}`;\n }\n };\n\n const logout = async (): Promise<string> => {\n try {\n const data = await gFetch({\n url: logoutRoute,\n options: { cache: \"no-store\" },\n });\n\n setIsLoggedIn(false);\n setUser({});\n\n return data.data;\n } catch (e: any) {\n console.log(e);\n return \"/\";\n }\n };\n\n const refreshUser = async (force?: boolean): Promise<void> => {\n try {\n const data = await gFetch({\n url: `${userRoute}${force ? \"?force=true\" : \"\"}`,\n options: { cache: \"no-store\" },\n });\n\n if (!data.error) {\n setUser(data.data);\n setIsLoggedIn(true);\n } else {\n setUser({});\n setIsLoggedIn(false);\n }\n\n setReady(true);\n\n router.refresh();\n } catch (e) {\n console.log(\"refreshUser error: \", e);\n }\n };\n\n const get = async <T, U>(url: string): Promise<ResponseType<T, U>> => {\n try {\n const r = await gFetch({ url: `${proxyRoute}${url}` });\n\n return r;\n } catch (e: any) {\n return { error: \"getRequestError\", message: e.message };\n }\n };\n\n const post = async <T, U = any>(\n url: string,\n body: any\n ): Promise<ResponseType<T, U>> => {\n try {\n const r = await pFetch({\n url: `${proxyRoute}${url}`,\n body,\n });\n\n return r;\n } catch (e: any) {\n return { error: \"getRequestError\", message: e.message };\n }\n };\n\n const del = async <T, U>(url: string): Promise<ResponseType<T, U>> => {\n try {\n const r = await dFetch({ url: `${proxyRoute}${url}` });\n\n return r;\n } catch (e: any) {\n return { error: \"getRequestError\", message: e.message };\n }\n };\n\n /**\n * Can only be used if user is logged in! and already initialised\n * @param url url for upload\n * @param formData form data\n * @param setProgress progress dispatch\n * @returns object with data or error\n */\n /* const upload = async <T, U = any>(\n url: string,\n formName: string,\n files: File[],\n setProgress: (p: number) => void,\n ): Promise<TRequest<T, U>> => {\n try {\n if (!user.token) throw new Error('user not logged in')\n \n const res: Error | XMLHttpRequest = await new Promise(\n (resolve, reject) => {\n try {\n const xhr = new XMLHttpRequest()\n const formData = new FormData()\n \n for (let i = 0; i < files.length; i++)\n formData.append(formName, files[i])\n \n xhr.open('POST', `${API_URL}${url}`, true)\n xhr.setRequestHeader('Authorization', `Bearer ${user.token}`)\n xhr.upload.onprogress = (ev: ProgressEvent<EventTarget>) => {\n if (ev.lengthComputable) {\n const percentComplete = (ev.loaded / ev.total) * 100\n setProgress(percentComplete)\n }\n }\n \n xhr.onload = function () {\n console.log('break3?', this)\n return this.status === 200\n ? resolve(this)\n : reject(new Error('Error while uploading: ' + this.status))\n }\n \n xhr.onerror = (ev: ProgressEvent<EventTarget>) => {\n console.log('break2', ev.target)\n reject(ev)\n }\n \n xhr.send(formData)\n } catch (e) {\n console.log('break1', e)\n reject(e)\n }\n },\n )\n \n if (res instanceof Error) throw res\n \n const data: any = JSON.parse(res.responseText)\n \n if (data.error) throw new Error(data.data)\n \n return { data: data.data }\n } catch (e) {\n console.log('break4', e)\n return { error: e.message || 'upload error' }\n }\n }\n \n const getContext = () => {\n let context = user.id\n \n if (!user.id) {\n // if not logged in\n const cookie = document.cookie\n .split(';')\n .find((c) => c.includes('cycle_cid'))\n \n if (cookie) {\n // use cookie value\n context = cookie.split('=')[1]\n } else {\n // set new cookie\n context =\n Math.random().toString(36).substring(2, 15) +\n Math.random().toString(36).substring(2, 15)\n \n document.cookie = `cycle_cid=${context};path=/;max-age=31536000`\n }\n }\n \n return context\n }\n \n const event = async (name: string, value?: any): Promise<boolean> => {\n try {\n const contextId = getContext()\n \n const r = await fetch(NOFY_API_URL + '/event', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: 'Basic ' + ANALYTICS_KEY,\n },\n body: JSON.stringify({\n source: IS_PROD ? 'cycle-frontend' : 'cycle-frontend-dev',\n contextId,\n name,\n value,\n }),\n })\n \n const res = await r.json()\n if (res.error) throw new Error(res.error)\n \n return true\n } catch (e) {\n console.log('#> event error: ', e)\n return false\n }\n }\n \n const pageView = async (url: string, referer?: string): Promise<boolean> => {\n try {\n const contextId = getContext()\n \n const r = await fetch(NOFY_API_URL + '/log/count', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: 'Basic ' + ANALYTICS_KEY,\n },\n body: JSON.stringify({\n meta: {\n contextId,\n type: 'pageview',\n },\n referer,\n identifier: url,\n }),\n })\n \n const res = await r.json()\n if (res.error) throw new Error(res.error)\n \n return true\n } catch (e) {\n console.log('#> event error: ', e)\n return false\n }\n } */\n\n useEffect(() => {\n if (!ready) refreshUser();\n }, []);\n\n const provider = {\n ready,\n login,\n register,\n logout,\n isLoggedIn,\n refreshUser,\n user,\n oAuth,\n get,\n post,\n del,\n /* upload, */\n };\n\n return (\n <AuthContext.Provider value={provider}>{children}</AuthContext.Provider>\n );\n};\n\nexport default AuthContextProvider;\n","export async function gFetch({\n url,\n options,\n}: {\n url: string | URL;\n options?: object;\n}) {\n const response: Response = await fetch(url, {\n method: \"GET\",\n ...options,\n });\n\n return await response.json();\n}\n\nexport async function pFetch({\n url,\n body,\n}: {\n url: string | URL;\n body: object;\n}) {\n const response: Response = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n });\n\n return await response.json();\n}\n\nexport async function dFetch({\n url,\n options,\n}: {\n url: string | URL;\n options?: object;\n}) {\n const response: Response = await fetch(url, {\n method: \"DELETE\",\n ...options,\n });\n\n return await response.json();\n}\n","import { useContext } from \"react\";\nimport { AuthContext } from \"./contextProvider\";\n\nconst useAuthContext = () => {\n return useContext(AuthContext);\n};\n\nexport default useAuthContext;\n","'use client'\n\nimport { IChildProps } from \"../types/internal\";\nimport useAuthContext from \"./useAuth\";\n\nexport type LogoutProps = React.FC<React.ComponentProps<'div'> & IChildProps>\n\nconst LogoutComponent: LogoutProps = ({ children, ...props }) => {\n const { logout } = useAuthContext()\n\n const handleLogout = async (e: any) => {\n e.preventDefault()\n await logout()\n }\n\n return (\n <div onClick={handleLogout} {...props}>\n {children}\n </div>\n )\n}\n\nexport default LogoutComponent"],"mappings":"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","names":["import_react","import_jsx_runtime"]}
@@ -61,8 +61,7 @@ var AuthContextProvider = ({
61
61
  body: loginData.data
62
62
  });
63
63
  setIsLoggedIn(true);
64
- if (res.error)
65
- throw new Error(res.message);
64
+ if (res.error) throw new Error(res.message);
66
65
  return loginData.redirect || "/";
67
66
  } catch (e) {
68
67
  return `${loginData.onErrorUrl || "/"}?error=${e.message}`;
@@ -74,8 +73,7 @@ var AuthContextProvider = ({
74
73
  url: registerRoute,
75
74
  body: registerData.data
76
75
  });
77
- if (res.error)
78
- throw new Error(res.message);
76
+ if (res.error) throw new Error(res.message);
79
77
  return `${registerData.redirect || "/"}?success=true`;
80
78
  } catch (e) {
81
79
  return `${registerData.onErrorUrl || "/"}?error=${e.message}`;
@@ -89,8 +87,7 @@ var AuthContextProvider = ({
89
87
  try {
90
88
  const url = new URL(oAuthRoute, "http://localhost/");
91
89
  url.searchParams.set("authUrl", oAuthUrl);
92
- if (state && state !== "/")
93
- url.searchParams.set("state", state);
90
+ if (state && state !== "/") url.searchParams.set("state", state);
94
91
  const response = await gFetch({ url: url.pathname + url.search });
95
92
  return response.data;
96
93
  } catch (e) {
@@ -158,8 +155,7 @@ var AuthContextProvider = ({
158
155
  }
159
156
  };
160
157
  useEffect(() => {
161
- if (!ready)
162
- refreshUser();
158
+ if (!ready) refreshUser();
163
159
  }, []);
164
160
  const provider = {
165
161
  ready,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/client/contextProvider.tsx","../../src/client/request.ts","../../src/client/useAuth.ts","../../src/client/Logout.tsx","../../src/client/index.ts"],"sourcesContent":["\"use client\";\n\nimport { createContext, useEffect, useState } from \"react\";\nimport {\n IAuthContext,\n IAuthContextOptions,\n ILoginData,\n IOAuthData,\n IRegisterData,\n ResponseType,\n} from \"../types/internal\";\n\nimport { dFetch, gFetch, pFetch } from \"./request\";\n\nimport { useRouter } from \"next/navigation\";\n/* +\n Frontend context for providing login, logout, register and refresh\n 'use client' needed for using -> client components only\n server components need to use useSession()\n*/\n\nexport const AuthContext = createContext<IAuthContext<any>>(null as any);\n\nconst AuthContextProvider = <IU,>({\n children,\n routePrefix = \"/api\",\n}: IAuthContextOptions) => {\n const [isLoggedIn, setIsLoggedIn] = useState(false);\n const [ready, setReady] = useState(false);\n const [user, setUser] = useState<IU | {}>({});\n\n const router = useRouter();\n\n // POST /session/login\n const loginRoute = routePrefix + \"/login\";\n\n // POST /session/refresh\n const registerRoute = routePrefix + \"/register\";\n\n // GET /session/logout\n const logoutRoute = routePrefix + \"/logout\";\n\n // GET /session\n const userRoute = routePrefix + \"/user\";\n\n // GET /session/oauth/API_OAUTH_URL\n const oAuthRoute = routePrefix + \"/oauth\";\n\n // GET/POST/DELETE /proxy/URL\n const proxyRoute = routePrefix + \"/proxy\";\n\n const login = async (loginData: ILoginData): Promise<string> => {\n try {\n const res = await pFetch({\n url: loginRoute,\n body: loginData.data,\n });\n\n setIsLoggedIn(true);\n\n if (res.error) throw new Error(res.message);\n\n return loginData.redirect || \"/\";\n } catch (e: any) {\n return `${loginData.onErrorUrl || \"/\"}?error=${e.message}`;\n }\n };\n\n const register = async (registerData: IRegisterData): Promise<string> => {\n try {\n const res = await pFetch({\n url: registerRoute,\n body: registerData.data,\n });\n\n if (res.error) throw new Error(res.message);\n\n return `${registerData.redirect || \"/\"}?success=true`;\n } catch (e: any) {\n return `${registerData.onErrorUrl || \"/\"}?error=${e.message}`;\n }\n };\n\n const oAuth = async ({\n state,\n oAuthUrl,\n onErrorUrl,\n }: IOAuthData): Promise<string> => {\n try {\n const url = new URL(oAuthRoute, \"http://localhost/\");\n\n url.searchParams.set(\"authUrl\", oAuthUrl);\n\n if (state && state !== \"/\") url.searchParams.set(\"state\", state);\n\n const response = await gFetch({ url: url.pathname + url.search });\n\n return response.data;\n } catch (e: any) {\n return `${onErrorUrl || \"/\"}?error=${e.message}`;\n }\n };\n\n const logout = async (): Promise<string> => {\n try {\n const data = await gFetch({\n url: logoutRoute,\n options: { cache: \"no-store\" },\n });\n\n setIsLoggedIn(false);\n setUser({});\n\n return data.data;\n } catch (e: any) {\n console.log(e);\n return \"/\";\n }\n };\n\n const refreshUser = async (force?: boolean): Promise<void> => {\n try {\n const data = await gFetch({\n url: `${userRoute}${force ? \"?force=true\" : \"\"}`,\n options: { cache: \"no-store\" },\n });\n\n if (!data.error) {\n setUser(data.data);\n setIsLoggedIn(true);\n } else {\n setUser({});\n setIsLoggedIn(false);\n }\n\n setReady(true);\n\n router.refresh();\n } catch (e) {\n console.log(\"refreshUser error: \", e);\n }\n };\n\n const get = async <T, U>(url: string): Promise<ResponseType<T, U>> => {\n try {\n const r = await gFetch({ url: `${proxyRoute}${url}` });\n\n return r;\n } catch (e: any) {\n return { error: \"getRequestError\", message: e.message };\n }\n };\n\n const post = async <T, U = any>(\n url: string,\n body: any\n ): Promise<ResponseType<T, U>> => {\n try {\n const r = await pFetch({\n url: `${proxyRoute}${url}`,\n body,\n });\n\n return r;\n } catch (e: any) {\n return { error: \"getRequestError\", message: e.message };\n }\n };\n\n const del = async <T, U>(url: string): Promise<ResponseType<T, U>> => {\n try {\n const r = await dFetch({ url: `${proxyRoute}${url}` });\n\n return r;\n } catch (e: any) {\n return { error: \"getRequestError\", message: e.message };\n }\n };\n\n /**\n * Can only be used if user is logged in! and already initialised\n * @param url url for upload\n * @param formData form data\n * @param setProgress progress dispatch\n * @returns object with data or error\n */\n /* const upload = async <T, U = any>(\n url: string,\n formName: string,\n files: File[],\n setProgress: (p: number) => void,\n ): Promise<TRequest<T, U>> => {\n try {\n if (!user.token) throw new Error('user not logged in')\n \n const res: Error | XMLHttpRequest = await new Promise(\n (resolve, reject) => {\n try {\n const xhr = new XMLHttpRequest()\n const formData = new FormData()\n \n for (let i = 0; i < files.length; i++)\n formData.append(formName, files[i])\n \n xhr.open('POST', `${API_URL}${url}`, true)\n xhr.setRequestHeader('Authorization', `Bearer ${user.token}`)\n xhr.upload.onprogress = (ev: ProgressEvent<EventTarget>) => {\n if (ev.lengthComputable) {\n const percentComplete = (ev.loaded / ev.total) * 100\n setProgress(percentComplete)\n }\n }\n \n xhr.onload = function () {\n console.log('break3?', this)\n return this.status === 200\n ? resolve(this)\n : reject(new Error('Error while uploading: ' + this.status))\n }\n \n xhr.onerror = (ev: ProgressEvent<EventTarget>) => {\n console.log('break2', ev.target)\n reject(ev)\n }\n \n xhr.send(formData)\n } catch (e) {\n console.log('break1', e)\n reject(e)\n }\n },\n )\n \n if (res instanceof Error) throw res\n \n const data: any = JSON.parse(res.responseText)\n \n if (data.error) throw new Error(data.data)\n \n return { data: data.data }\n } catch (e) {\n console.log('break4', e)\n return { error: e.message || 'upload error' }\n }\n }\n \n const getContext = () => {\n let context = user.id\n \n if (!user.id) {\n // if not logged in\n const cookie = document.cookie\n .split(';')\n .find((c) => c.includes('cycle_cid'))\n \n if (cookie) {\n // use cookie value\n context = cookie.split('=')[1]\n } else {\n // set new cookie\n context =\n Math.random().toString(36).substring(2, 15) +\n Math.random().toString(36).substring(2, 15)\n \n document.cookie = `cycle_cid=${context};path=/;max-age=31536000`\n }\n }\n \n return context\n }\n \n const event = async (name: string, value?: any): Promise<boolean> => {\n try {\n const contextId = getContext()\n \n const r = await fetch(NOFY_API_URL + '/event', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: 'Basic ' + ANALYTICS_KEY,\n },\n body: JSON.stringify({\n source: IS_PROD ? 'cycle-frontend' : 'cycle-frontend-dev',\n contextId,\n name,\n value,\n }),\n })\n \n const res = await r.json()\n if (res.error) throw new Error(res.error)\n \n return true\n } catch (e) {\n console.log('#> event error: ', e)\n return false\n }\n }\n \n const pageView = async (url: string, referer?: string): Promise<boolean> => {\n try {\n const contextId = getContext()\n \n const r = await fetch(NOFY_API_URL + '/log/count', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: 'Basic ' + ANALYTICS_KEY,\n },\n body: JSON.stringify({\n meta: {\n contextId,\n type: 'pageview',\n },\n referer,\n identifier: url,\n }),\n })\n \n const res = await r.json()\n if (res.error) throw new Error(res.error)\n \n return true\n } catch (e) {\n console.log('#> event error: ', e)\n return false\n }\n } */\n\n useEffect(() => {\n if (!ready) refreshUser();\n }, []);\n\n const provider = {\n ready,\n login,\n register,\n logout,\n isLoggedIn,\n refreshUser,\n user,\n oAuth,\n get,\n post,\n del,\n /* upload, */\n };\n\n return (\n <AuthContext.Provider value={provider}>{children}</AuthContext.Provider>\n );\n};\n\nexport default AuthContextProvider;\n","export async function gFetch({\n url,\n options,\n}: {\n url: string | URL;\n options?: object;\n}) {\n const response: Response = await fetch(url, {\n method: \"GET\",\n ...options,\n });\n\n return await response.json();\n}\n\nexport async function pFetch({\n url,\n body,\n}: {\n url: string | URL;\n body: object;\n}) {\n const response: Response = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n });\n\n return await response.json();\n}\n\nexport async function dFetch({\n url,\n options,\n}: {\n url: string | URL;\n options?: object;\n}) {\n const response: Response = await fetch(url, {\n method: \"DELETE\",\n ...options,\n });\n\n return await response.json();\n}\n","import { useContext } from \"react\";\nimport { AuthContext } from \"./contextProvider\";\n\nconst useAuthContext = () => {\n return useContext(AuthContext);\n};\n\nexport default useAuthContext;\n","'use client'\n\nimport { IChildProps } from \"../types/internal\";\nimport useAuthContext from \"./useAuth\";\n\nexport type LogoutProps = React.FC<React.ComponentProps<'div'> & IChildProps>\n\nconst LogoutComponent: LogoutProps = ({ children, ...props }) => {\n const { logout } = useAuthContext()\n\n const handleLogout = async (e: any) => {\n e.preventDefault()\n await logout()\n }\n\n return (\n <div onClick={handleLogout} {...props}>\n {children}\n </div>\n )\n}\n\nexport default LogoutComponent","import AuthContextProvider from \"./contextProvider\";\nimport LogoutComponent from \"./Logout\";\nimport useAuthContext from \"./useAuth\";\n\nexport const AuthProvider = AuthContextProvider;\nexport const Logout = LogoutComponent;\nexport const useAuth = useAuthContext;\n"],"mappings":"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","names":["jsx"]}
1
+ {"version":3,"sources":["../../src/client/contextProvider.tsx","../../src/client/request.ts","../../src/client/useAuth.ts","../../src/client/Logout.tsx","../../src/client/index.ts"],"sourcesContent":["\"use client\";\n\nimport { createContext, useEffect, useState } from \"react\";\nimport {\n IAuthContext,\n IAuthContextOptions,\n ILoginData,\n IOAuthData,\n IRegisterData,\n ResponseType,\n} from \"../types/internal\";\n\nimport { dFetch, gFetch, pFetch } from \"./request\";\n\nimport { useRouter } from \"next/navigation\";\n/* +\n Frontend context for providing login, logout, register and refresh\n 'use client' needed for using -> client components only\n server components need to use useSession()\n*/\n\nexport const AuthContext = createContext<IAuthContext<any>>(null as any);\n\nconst AuthContextProvider = <IU,>({\n children,\n routePrefix = \"/api\",\n}: IAuthContextOptions) => {\n const [isLoggedIn, setIsLoggedIn] = useState(false);\n const [ready, setReady] = useState(false);\n const [user, setUser] = useState<IU | {}>({});\n\n const router = useRouter();\n\n // POST /session/login\n const loginRoute = routePrefix + \"/login\";\n\n // POST /session/refresh\n const registerRoute = routePrefix + \"/register\";\n\n // GET /session/logout\n const logoutRoute = routePrefix + \"/logout\";\n\n // GET /session\n const userRoute = routePrefix + \"/user\";\n\n // GET /session/oauth/API_OAUTH_URL\n const oAuthRoute = routePrefix + \"/oauth\";\n\n // GET/POST/DELETE /proxy/URL\n const proxyRoute = routePrefix + \"/proxy\";\n\n const login = async (loginData: ILoginData): Promise<string> => {\n try {\n const res = await pFetch({\n url: loginRoute,\n body: loginData.data,\n });\n\n setIsLoggedIn(true);\n\n if (res.error) throw new Error(res.message);\n\n return loginData.redirect || \"/\";\n } catch (e: any) {\n return `${loginData.onErrorUrl || \"/\"}?error=${e.message}`;\n }\n };\n\n const register = async (registerData: IRegisterData): Promise<string> => {\n try {\n const res = await pFetch({\n url: registerRoute,\n body: registerData.data,\n });\n\n if (res.error) throw new Error(res.message);\n\n return `${registerData.redirect || \"/\"}?success=true`;\n } catch (e: any) {\n return `${registerData.onErrorUrl || \"/\"}?error=${e.message}`;\n }\n };\n\n const oAuth = async ({\n state,\n oAuthUrl,\n onErrorUrl,\n }: IOAuthData): Promise<string> => {\n try {\n const url = new URL(oAuthRoute, \"http://localhost/\");\n\n url.searchParams.set(\"authUrl\", oAuthUrl);\n\n if (state && state !== \"/\") url.searchParams.set(\"state\", state);\n\n const response = await gFetch({ url: url.pathname + url.search });\n\n return response.data;\n } catch (e: any) {\n return `${onErrorUrl || \"/\"}?error=${e.message}`;\n }\n };\n\n const logout = async (): Promise<string> => {\n try {\n const data = await gFetch({\n url: logoutRoute,\n options: { cache: \"no-store\" },\n });\n\n setIsLoggedIn(false);\n setUser({});\n\n return data.data;\n } catch (e: any) {\n console.log(e);\n return \"/\";\n }\n };\n\n const refreshUser = async (force?: boolean): Promise<void> => {\n try {\n const data = await gFetch({\n url: `${userRoute}${force ? \"?force=true\" : \"\"}`,\n options: { cache: \"no-store\" },\n });\n\n if (!data.error) {\n setUser(data.data);\n setIsLoggedIn(true);\n } else {\n setUser({});\n setIsLoggedIn(false);\n }\n\n setReady(true);\n\n router.refresh();\n } catch (e) {\n console.log(\"refreshUser error: \", e);\n }\n };\n\n const get = async <T, U>(url: string): Promise<ResponseType<T, U>> => {\n try {\n const r = await gFetch({ url: `${proxyRoute}${url}` });\n\n return r;\n } catch (e: any) {\n return { error: \"getRequestError\", message: e.message };\n }\n };\n\n const post = async <T, U = any>(\n url: string,\n body: any\n ): Promise<ResponseType<T, U>> => {\n try {\n const r = await pFetch({\n url: `${proxyRoute}${url}`,\n body,\n });\n\n return r;\n } catch (e: any) {\n return { error: \"getRequestError\", message: e.message };\n }\n };\n\n const del = async <T, U>(url: string): Promise<ResponseType<T, U>> => {\n try {\n const r = await dFetch({ url: `${proxyRoute}${url}` });\n\n return r;\n } catch (e: any) {\n return { error: \"getRequestError\", message: e.message };\n }\n };\n\n /**\n * Can only be used if user is logged in! and already initialised\n * @param url url for upload\n * @param formData form data\n * @param setProgress progress dispatch\n * @returns object with data or error\n */\n /* const upload = async <T, U = any>(\n url: string,\n formName: string,\n files: File[],\n setProgress: (p: number) => void,\n ): Promise<TRequest<T, U>> => {\n try {\n if (!user.token) throw new Error('user not logged in')\n \n const res: Error | XMLHttpRequest = await new Promise(\n (resolve, reject) => {\n try {\n const xhr = new XMLHttpRequest()\n const formData = new FormData()\n \n for (let i = 0; i < files.length; i++)\n formData.append(formName, files[i])\n \n xhr.open('POST', `${API_URL}${url}`, true)\n xhr.setRequestHeader('Authorization', `Bearer ${user.token}`)\n xhr.upload.onprogress = (ev: ProgressEvent<EventTarget>) => {\n if (ev.lengthComputable) {\n const percentComplete = (ev.loaded / ev.total) * 100\n setProgress(percentComplete)\n }\n }\n \n xhr.onload = function () {\n console.log('break3?', this)\n return this.status === 200\n ? resolve(this)\n : reject(new Error('Error while uploading: ' + this.status))\n }\n \n xhr.onerror = (ev: ProgressEvent<EventTarget>) => {\n console.log('break2', ev.target)\n reject(ev)\n }\n \n xhr.send(formData)\n } catch (e) {\n console.log('break1', e)\n reject(e)\n }\n },\n )\n \n if (res instanceof Error) throw res\n \n const data: any = JSON.parse(res.responseText)\n \n if (data.error) throw new Error(data.data)\n \n return { data: data.data }\n } catch (e) {\n console.log('break4', e)\n return { error: e.message || 'upload error' }\n }\n }\n \n const getContext = () => {\n let context = user.id\n \n if (!user.id) {\n // if not logged in\n const cookie = document.cookie\n .split(';')\n .find((c) => c.includes('cycle_cid'))\n \n if (cookie) {\n // use cookie value\n context = cookie.split('=')[1]\n } else {\n // set new cookie\n context =\n Math.random().toString(36).substring(2, 15) +\n Math.random().toString(36).substring(2, 15)\n \n document.cookie = `cycle_cid=${context};path=/;max-age=31536000`\n }\n }\n \n return context\n }\n \n const event = async (name: string, value?: any): Promise<boolean> => {\n try {\n const contextId = getContext()\n \n const r = await fetch(NOFY_API_URL + '/event', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: 'Basic ' + ANALYTICS_KEY,\n },\n body: JSON.stringify({\n source: IS_PROD ? 'cycle-frontend' : 'cycle-frontend-dev',\n contextId,\n name,\n value,\n }),\n })\n \n const res = await r.json()\n if (res.error) throw new Error(res.error)\n \n return true\n } catch (e) {\n console.log('#> event error: ', e)\n return false\n }\n }\n \n const pageView = async (url: string, referer?: string): Promise<boolean> => {\n try {\n const contextId = getContext()\n \n const r = await fetch(NOFY_API_URL + '/log/count', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: 'Basic ' + ANALYTICS_KEY,\n },\n body: JSON.stringify({\n meta: {\n contextId,\n type: 'pageview',\n },\n referer,\n identifier: url,\n }),\n })\n \n const res = await r.json()\n if (res.error) throw new Error(res.error)\n \n return true\n } catch (e) {\n console.log('#> event error: ', e)\n return false\n }\n } */\n\n useEffect(() => {\n if (!ready) refreshUser();\n }, []);\n\n const provider = {\n ready,\n login,\n register,\n logout,\n isLoggedIn,\n refreshUser,\n user,\n oAuth,\n get,\n post,\n del,\n /* upload, */\n };\n\n return (\n <AuthContext.Provider value={provider}>{children}</AuthContext.Provider>\n );\n};\n\nexport default AuthContextProvider;\n","export async function gFetch({\n url,\n options,\n}: {\n url: string | URL;\n options?: object;\n}) {\n const response: Response = await fetch(url, {\n method: \"GET\",\n ...options,\n });\n\n return await response.json();\n}\n\nexport async function pFetch({\n url,\n body,\n}: {\n url: string | URL;\n body: object;\n}) {\n const response: Response = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n });\n\n return await response.json();\n}\n\nexport async function dFetch({\n url,\n options,\n}: {\n url: string | URL;\n options?: object;\n}) {\n const response: Response = await fetch(url, {\n method: \"DELETE\",\n ...options,\n });\n\n return await response.json();\n}\n","import { useContext } from \"react\";\nimport { AuthContext } from \"./contextProvider\";\n\nconst useAuthContext = () => {\n return useContext(AuthContext);\n};\n\nexport default useAuthContext;\n","'use client'\n\nimport { IChildProps } from \"../types/internal\";\nimport useAuthContext from \"./useAuth\";\n\nexport type LogoutProps = React.FC<React.ComponentProps<'div'> & IChildProps>\n\nconst LogoutComponent: LogoutProps = ({ children, ...props }) => {\n const { logout } = useAuthContext()\n\n const handleLogout = async (e: any) => {\n e.preventDefault()\n await logout()\n }\n\n return (\n <div onClick={handleLogout} {...props}>\n {children}\n </div>\n )\n}\n\nexport default LogoutComponent","import AuthContextProvider from \"./contextProvider\";\nimport LogoutComponent from \"./Logout\";\nimport useAuthContext from \"./useAuth\";\n\nexport const AuthProvider = AuthContextProvider;\nexport const Logout = LogoutComponent;\nexport const useAuth = useAuthContext;\n"],"mappings":"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","names":["jsx"]}
package/dist/index.js CHANGED
@@ -90,8 +90,7 @@ async function proxy(method, request, options, config) {
90
90
  options: options.params.endpoint,
91
91
  config
92
92
  };
93
- if (config.debug)
94
- console.log("#> proxy:", parameters);
93
+ if (config.debug) console.log("#> proxy:", parameters);
95
94
  if (rHandler[method][parameters.path])
96
95
  return await rHandler[method][parameters.path](parameters);
97
96
  return invalidEndpoint();
@@ -109,10 +108,8 @@ async function login(request, config) {
109
108
  body: JSON.stringify(formData)
110
109
  });
111
110
  const res = await response.json();
112
- if (config.debug)
113
- console.log("#> login", res);
114
- if (res.error)
115
- return Response.json(res);
111
+ if (config.debug) console.log("#> login", res);
112
+ if (res.error) return Response.json(res);
116
113
  const dec = (0, import_jwt_decode.jwtDecode)(res.data.token);
117
114
  session.token = {
118
115
  jwt: res.data.token,
@@ -126,8 +123,7 @@ async function login(request, config) {
126
123
  }
127
124
  async function getUser(request, config) {
128
125
  const session = await session_default();
129
- if (!session || !session.token)
130
- return sessionError();
126
+ if (!session || !session.token) return sessionError();
131
127
  const force = request.nextUrl.searchParams.get("force") == "true";
132
128
  if (session.user && !force)
133
129
  return Response.json({
@@ -144,10 +140,8 @@ async function getUser(request, config) {
144
140
  }
145
141
  );
146
142
  const res = await response.json();
147
- if (config.debug)
148
- console.log("#> getUser", res);
149
- if (res.error)
150
- return Response.json(res);
143
+ if (config.debug) console.log("#> getUser", res);
144
+ if (res.error) return Response.json(res);
151
145
  session.user = res.data;
152
146
  await session.save();
153
147
  return Response.json({
@@ -156,22 +150,18 @@ async function getUser(request, config) {
156
150
  }
157
151
  async function oauth(request, config) {
158
152
  const authUrl = request.nextUrl.searchParams.get("authUrl");
159
- if (!authUrl)
160
- throw new Error("No authUrl provided");
153
+ if (!authUrl) throw new Error("No authUrl provided");
161
154
  const url = new URL(config.route + "/oauth_callback", config.host);
162
155
  const state = request.nextUrl.searchParams.get("state");
163
- if (state)
164
- url.searchParams.set("state", state);
156
+ if (state) url.searchParams.set("state", state);
165
157
  const response = await fetch(
166
158
  `${config.apiUrl}${authUrl}?returnUrl=${encodeURIComponent(
167
159
  url.toString()
168
160
  )}`
169
161
  );
170
162
  const res = await response.json();
171
- if (config.debug)
172
- console.log("#> oauth", res);
173
- if (res.error)
174
- return Response.json(res);
163
+ if (config.debug) console.log("#> oauth", res);
164
+ if (res.error) return Response.json(res);
175
165
  return Response.json({
176
166
  data: res.data
177
167
  });
@@ -181,8 +171,7 @@ async function oauth_callback(request, config) {
181
171
  const token = request.nextUrl.searchParams.get("token");
182
172
  const refresh = request.nextUrl.searchParams.get("refresh");
183
173
  const state = request.nextUrl.searchParams.get("state");
184
- if (!token)
185
- throw new Error("No token provided");
174
+ if (!token) throw new Error("No token provided");
186
175
  const dec = (0, import_jwt_decode.jwtDecode)(token);
187
176
  session.token = {
188
177
  jwt: token,
@@ -218,16 +207,14 @@ async function proxyFunction(method, request, config, options) {
218
207
  Authorization: "Bearer " + ((_a = session.token) == null ? void 0 : _a.jwt)
219
208
  }
220
209
  };
221
- if (method === "POST")
222
- opts.body = JSON.stringify(await request.json());
210
+ if (method === "POST") opts.body = JSON.stringify(await request.json());
223
211
  options.shift();
224
212
  const response = await fetch(
225
213
  `${config.apiUrl}/${options.join("/")}${request.nextUrl.search}`,
226
214
  opts
227
215
  );
228
216
  const res = await response.json();
229
- if (config.debug)
230
- console.log("#> getProxyFunction", res);
217
+ if (config.debug) console.log("#> getProxyFunction", res);
231
218
  return Response.json(res);
232
219
  }
233
220
 
@@ -242,8 +229,7 @@ var serverSideFetch = async (url, options, config) => {
242
229
  Authorization: "Bearer " + ((_a = session.token) == null ? void 0 : _a.jwt)
243
230
  }
244
231
  };
245
- if (options.body)
246
- opts.body = JSON.stringify(options.body);
232
+ if (options.body) opts.body = JSON.stringify(options.body);
247
233
  const response = await fetch(`${config.apiUrl}${url}`, opts);
248
234
  const res = await response.json();
249
235
  return res;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/server/api.ts","../src/server/errors.ts","../src/server/session.ts","../src/server/fetch.ts","../src/server/test.ts"],"sourcesContent":["import proxy from \"./server/api\";\nimport { serverSideFetch } from \"./server/fetch\";\nimport getSessionServerside from \"./server/session\";\nimport Debug from \"./server/test\";\n\nexport const Proxy = proxy;\nexport const getSession = getSessionServerside;\nexport const debug = Debug;\nexport const apiFetch = serverSideFetch;\n\nimport { IConfig, IRequestOptions, Session } from \"./types\";\n\nexport { IConfig, IRequestOptions, Session };\n","import { NextRequest } from \"next/server\";\nimport { revalidatePath } from \"next/cache\";\nimport { requestError } from \"./errors\";\nimport { invalidEndpoint, sessionError } from \"./errors\";\nimport { jwtDecode } from \"jwt-decode\";\nimport { IConfig, IRequestOptions, RouteHandler } from \"../types\";\nimport getSessionServerside from \"./session\";\n\nconst rHandler: RouteHandler = {\n GET: {\n user: ({ request, config }) => getUser(request, config),\n logout: ({ config }) => logout(config),\n debug: () => debug(),\n oauth: ({ request, config }) => oauth(request, config),\n oauth_callback: ({ request, config }) =>\n oauth_callback(request, config),\n proxy: ({ request, config, options }) =>\n proxyFunction(\"GET\", request, config, options),\n },\n POST: {\n login: ({ request, config }) => login(request, config),\n proxy: ({ request, config, options }) =>\n proxyFunction(\"POST\", request, config, options),\n },\n DELETE: {\n proxy: ({ request, config, options }) =>\n proxyFunction(\"DELETE\", request, config, options),\n },\n};\n\nexport default async function proxy(\n method: string,\n request: NextRequest,\n options: IRequestOptions,\n config: IConfig\n) {\n try {\n const parameters = {\n request,\n path:\n options.params.endpoint[0] ||\n request.nextUrl.pathname.replace(config.route, \"\"),\n options: options.params.endpoint,\n config,\n };\n\n if (config.debug) console.log(\"#> proxy:\", parameters);\n\n //console.log(`[${method}]: /${parameters.path}`);\n\n if (rHandler[method][parameters.path])\n return await rHandler[method][parameters.path](parameters);\n\n return invalidEndpoint();\n } catch (e) {\n console.log(\"#> proxyError:\", e);\n return requestError();\n }\n}\n\nasync function login(request: NextRequest, config: IConfig) {\n const session = await getSessionServerside();\n const formData = await request.json();\n\n const response: Response = await fetch(`${config.apiUrl}/login`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(formData),\n });\n\n const res = await response.json();\n\n if (config.debug) console.log(\"#> login\", res);\n\n if (res.error) return Response.json(res);\n\n const dec: any = jwtDecode(res.data.token);\n\n session.token = {\n jwt: res.data.token,\n refresh: res.data.refresh || \"refresh_token\",\n decoded: dec,\n };\n\n await session.save();\n\n return Response.json({\n redirect: \"/\",\n });\n}\n\nasync function getUser(request: NextRequest, config: IConfig) {\n const session = await getSessionServerside<any>();\n\n if (!session || !session.token) return sessionError();\n\n\n const force = request.nextUrl.searchParams.get(\"force\") == \"true\";\n\n // * User already exists in session\n if (session.user && !force)\n return Response.json({\n data: session.user,\n });\n\n // * User does not exist in session\n const response: Response = await fetch(\n `${config.apiUrl}${config.userEndpoint}`,\n {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer \" + session.token.jwt,\n },\n }\n );\n\n const res = await response.json();\n\n if (config.debug) console.log(\"#> getUser\", res);\n\n if (res.error) return Response.json(res);\n\n session.user = res.data;\n\n await session.save();\n\n return Response.json({\n data: session.user,\n });\n}\n\nasync function oauth(request: NextRequest, config: IConfig) {\n const authUrl = request.nextUrl.searchParams.get(\"authUrl\");\n\n if (!authUrl) throw new Error(\"No authUrl provided\");\n\n const url = new URL(config.route + \"/oauth_callback\", config.host);\n\n const state = request.nextUrl.searchParams.get(\"state\");\n if (state) url.searchParams.set(\"state\", state);\n\n const response: Response = await fetch(\n `${config.apiUrl}${authUrl}?returnUrl=${encodeURIComponent(\n url.toString()\n )}`\n );\n\n const res = await response.json();\n\n if (config.debug) console.log(\"#> oauth\", res);\n\n if (res.error) return Response.json(res);\n\n return Response.json({\n data: res.data,\n });\n}\n\nasync function oauth_callback(request: NextRequest, config: IConfig) {\n const session = await getSessionServerside();\n const token = request.nextUrl.searchParams.get(\"token\");\n const refresh = request.nextUrl.searchParams.get(\"refresh\");\n const state = request.nextUrl.searchParams.get(\"state\");\n\n if (!token) throw new Error(\"No token provided\");\n\n const dec: any = jwtDecode(token);\n\n session.token = {\n jwt: token,\n refresh: refresh || \"refresh_token\",\n decoded: dec,\n };\n\n await session.save();\n\n if (state)\n return Response.redirect(\n state.includes(\"http\") ? state : config.host + state\n );\n\n return Response.redirect(config.host);\n}\n\nasync function logout(config: IConfig) {\n const session = await getSessionServerside();\n\n session.destroy();\n\n revalidatePath(config.host, \"layout\");\n\n //return Response.redirect(config.host);\n\n return Response.json({\n redirect: \"/\",\n });\n}\n\nasync function debug() {\n const session = await getSessionServerside();\n\n return Response.json(session);\n}\n\n// TODO: add refresh logic\n\nasync function proxyFunction(\n method: string,\n request: NextRequest,\n config: IConfig,\n options: string[]\n) {\n const session = await getSessionServerside();\n\n const opts: RequestInit = {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer \" + session.token?.jwt,\n },\n };\n\n if (method === \"POST\") opts.body = JSON.stringify(await request.json());\n\n options.shift();\n const response: Response = await fetch(\n `${config.apiUrl}/${options.join(\"/\")}${request.nextUrl.search}`,\n opts\n );\n\n const res = await response.json();\n\n if (config.debug) console.log(\"#> getProxyFunction\", res);\n\n return Response.json(res);\n}\n","export const requestError = () =>\n Response.json({\n error: \"requestError\",\n message: \"error while sending request through proxy\",\n });\n\nexport const invalidEndpoint = () =>\n Response.json({\n error: \"invalidEndpoint\",\n message: \"invalid endpoint\",\n });\n\nexport const sessionError = () =>\n Response.json({\n error: \"noSession\",\n message: \"no session found\",\n });\n","import { SessionOptions } from \"iron-session\";\nimport { getIronSession } from \"iron-session\";\nimport { cookies } from \"next/headers\";\nimport { ServerSideSession } from \"../types/internal\";\nimport { Session } from \"../types\";\n\ndeclare module \"iron-session\" {\n interface IronSessionData<U, T> {\n user?: U;\n token?: {\n jwt: string;\n refresh: string;\n decoded: T;\n };\n }\n}\n\nexport interface DefaultUser {\n [key: string]: any;\n}\n\nexport interface Token {\n token: string;\n}\n\nexport const sessionOptions: SessionOptions = {\n password: process.env.CELESTYA_SECRET || \"PLEASE_SET_PASSWORD\",\n cookieName: process.env.CELESTYA_COOKIE_NAME || \"PLEASE_SET_COOKIE_NAME\",\n cookieOptions: { secure: process.env.SECURE === \"true\" || false },\n};\n\nconst getSessionServerside = async <U = DefaultUser>() => {\n const session: Session<U> = await getIronSession<ServerSideSession<U>>(\n cookies(),\n sessionOptions\n );\n\n return session;\n};\n\nexport default getSessionServerside;\n","import { IConfig, IServerSideRequestOptions } from \"../types\";\nimport getSessionServerside from \"./session\";\n\nexport const serverSideFetch = async (\n url: string,\n options: IServerSideRequestOptions,\n config: IConfig\n) => {\n const session = await getSessionServerside();\n\n const opts: RequestInit = {\n method: options.method || \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer \" + session.token?.jwt,\n },\n };\n\n if (options.body) opts.body = JSON.stringify(options.body);\n\n const response: Response = await fetch(`${config.apiUrl}${url}`, opts);\n\n const res = await response.json();\n\n return res;\n //return Response.json(res);\n};\n","import { sessionOptions } from \"./session\";\n\nconst Debug = () => {\n console.log(\"#> sessionOptions: \", sessionOptions);\n};\n\nexport default Debug;\n"],"mappings":"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","names":["Proxy","debug","Proxy","debug"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/server/api.ts","../src/server/errors.ts","../src/server/session.ts","../src/server/fetch.ts","../src/server/test.ts"],"sourcesContent":["import proxy from \"./server/api\";\nimport { serverSideFetch } from \"./server/fetch\";\nimport getSessionServerside from \"./server/session\";\nimport Debug from \"./server/test\";\n\nexport const Proxy = proxy;\nexport const getSession = getSessionServerside;\nexport const debug = Debug;\nexport const apiFetch = serverSideFetch;\n\nimport { IConfig, IRequestOptions, Session } from \"./types\";\n\nexport { IConfig, IRequestOptions, Session };\n","import { NextRequest } from \"next/server\";\nimport { revalidatePath } from \"next/cache\";\nimport { requestError } from \"./errors\";\nimport { invalidEndpoint, sessionError } from \"./errors\";\nimport { jwtDecode } from \"jwt-decode\";\nimport { IConfig, IRequestOptions, RouteHandler } from \"../types\";\nimport getSessionServerside from \"./session\";\n\nconst rHandler: RouteHandler = {\n GET: {\n user: ({ request, config }) => getUser(request, config),\n logout: ({ config }) => logout(config),\n debug: () => debug(),\n oauth: ({ request, config }) => oauth(request, config),\n oauth_callback: ({ request, config }) =>\n oauth_callback(request, config),\n proxy: ({ request, config, options }) =>\n proxyFunction(\"GET\", request, config, options),\n },\n POST: {\n login: ({ request, config }) => login(request, config),\n proxy: ({ request, config, options }) =>\n proxyFunction(\"POST\", request, config, options),\n },\n DELETE: {\n proxy: ({ request, config, options }) =>\n proxyFunction(\"DELETE\", request, config, options),\n },\n};\n\nexport default async function proxy(\n method: string,\n request: NextRequest,\n options: IRequestOptions,\n config: IConfig\n) {\n try {\n const parameters = {\n request,\n path:\n options.params.endpoint[0] ||\n request.nextUrl.pathname.replace(config.route, \"\"),\n options: options.params.endpoint,\n config,\n };\n\n if (config.debug) console.log(\"#> proxy:\", parameters);\n\n //console.log(`[${method}]: /${parameters.path}`);\n\n if (rHandler[method][parameters.path])\n return await rHandler[method][parameters.path](parameters);\n\n return invalidEndpoint();\n } catch (e) {\n console.log(\"#> proxyError:\", e);\n return requestError();\n }\n}\n\nasync function login(request: NextRequest, config: IConfig) {\n const session = await getSessionServerside();\n const formData = await request.json();\n\n const response: Response = await fetch(`${config.apiUrl}/login`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(formData),\n });\n\n const res = await response.json();\n\n if (config.debug) console.log(\"#> login\", res);\n\n if (res.error) return Response.json(res);\n\n const dec: any = jwtDecode(res.data.token);\n\n session.token = {\n jwt: res.data.token,\n refresh: res.data.refresh || \"refresh_token\",\n decoded: dec,\n };\n\n await session.save();\n\n return Response.json({\n redirect: \"/\",\n });\n}\n\nasync function getUser(request: NextRequest, config: IConfig) {\n const session = await getSessionServerside<any>();\n\n if (!session || !session.token) return sessionError();\n\n const force = request.nextUrl.searchParams.get(\"force\") == \"true\";\n\n // * User already exists in session\n if (session.user && !force)\n return Response.json({\n data: session.user,\n });\n\n // * User does not exist in session\n const response: Response = await fetch(\n `${config.apiUrl}${config.userEndpoint}`,\n {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer \" + session.token.jwt,\n },\n }\n );\n\n const res = await response.json();\n\n if (config.debug) console.log(\"#> getUser\", res);\n\n if (res.error) return Response.json(res);\n\n session.user = res.data;\n\n await session.save();\n\n return Response.json({\n data: session.user,\n });\n}\n\nasync function oauth(request: NextRequest, config: IConfig) {\n const authUrl = request.nextUrl.searchParams.get(\"authUrl\");\n\n if (!authUrl) throw new Error(\"No authUrl provided\");\n\n const url = new URL(config.route + \"/oauth_callback\", config.host);\n\n const state = request.nextUrl.searchParams.get(\"state\");\n if (state) url.searchParams.set(\"state\", state);\n\n const response: Response = await fetch(\n `${config.apiUrl}${authUrl}?returnUrl=${encodeURIComponent(\n url.toString()\n )}`\n );\n\n const res = await response.json();\n\n if (config.debug) console.log(\"#> oauth\", res);\n\n if (res.error) return Response.json(res);\n\n return Response.json({\n data: res.data,\n });\n}\n\nasync function oauth_callback(request: NextRequest, config: IConfig) {\n const session = await getSessionServerside();\n const token = request.nextUrl.searchParams.get(\"token\");\n const refresh = request.nextUrl.searchParams.get(\"refresh\");\n const state = request.nextUrl.searchParams.get(\"state\");\n\n if (!token) throw new Error(\"No token provided\");\n\n const dec: any = jwtDecode(token);\n\n session.token = {\n jwt: token,\n refresh: refresh || \"refresh_token\",\n decoded: dec,\n };\n\n await session.save();\n\n if (state)\n return Response.redirect(\n state.includes(\"http\") ? state : config.host + state\n );\n\n return Response.redirect(config.host);\n}\n\nasync function logout(config: IConfig) {\n const session = await getSessionServerside();\n\n session.destroy();\n\n revalidatePath(config.host, \"layout\");\n\n //return Response.redirect(config.host);\n\n return Response.json({\n redirect: \"/\",\n });\n}\n\nasync function debug() {\n const session = await getSessionServerside();\n\n return Response.json(session);\n}\n\n// TODO: add refresh logic\n\nasync function proxyFunction(\n method: string,\n request: NextRequest,\n config: IConfig,\n options: string[]\n) {\n const session = await getSessionServerside();\n\n const opts: RequestInit = {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer \" + session.token?.jwt,\n },\n };\n\n if (method === \"POST\") opts.body = JSON.stringify(await request.json());\n\n options.shift();\n const response: Response = await fetch(\n `${config.apiUrl}/${options.join(\"/\")}${request.nextUrl.search}`,\n opts\n );\n\n const res = await response.json();\n\n if (config.debug) console.log(\"#> getProxyFunction\", res);\n\n return Response.json(res);\n}\n","export const requestError = () =>\n Response.json({\n error: \"requestError\",\n message: \"error while sending request through proxy\",\n });\n\nexport const invalidEndpoint = () =>\n Response.json({\n error: \"invalidEndpoint\",\n message: \"invalid endpoint\",\n });\n\nexport const sessionError = () =>\n Response.json({\n error: \"noSession\",\n message: \"no session found\",\n });\n","import { SessionOptions } from \"iron-session\";\nimport { getIronSession } from \"iron-session\";\nimport { cookies } from \"next/headers\";\nimport { ServerSideSession } from \"../types/internal\";\nimport { Session } from \"../types\";\n\ndeclare module \"iron-session\" {\n interface IronSessionData<U, T> {\n user?: U;\n token?: {\n jwt: string;\n refresh: string;\n decoded: T;\n };\n }\n}\n\nexport interface DefaultUser {\n [key: string]: any;\n}\n\nexport interface Token {\n token: string;\n}\n\nexport const sessionOptions: SessionOptions = {\n password: process.env.CELESTYA_SECRET || \"PLEASE_SET_PASSWORD\",\n cookieName: process.env.CELESTYA_COOKIE_NAME || \"PLEASE_SET_COOKIE_NAME\",\n cookieOptions: { secure: process.env.SECURE === \"true\" || false },\n};\n\nconst getSessionServerside = async <U = DefaultUser>() => {\n const session: Session<U> = await getIronSession<ServerSideSession<U>>(\n cookies(),\n sessionOptions\n );\n\n return session;\n};\n\nexport default getSessionServerside;\n","import { IConfig, IServerSideRequestOptions } from \"../types\";\nimport getSessionServerside from \"./session\";\n\nexport const serverSideFetch = async (\n url: string,\n options: IServerSideRequestOptions,\n config: IConfig\n) => {\n const session = await getSessionServerside();\n\n const opts: RequestInit = {\n method: options.method || \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer \" + session.token?.jwt,\n },\n };\n\n if (options.body) opts.body = JSON.stringify(options.body);\n\n const response: Response = await fetch(`${config.apiUrl}${url}`, opts);\n\n const res = await response.json();\n\n return res;\n};\n","import { sessionOptions } from \"./session\";\n\nconst Debug = () => {\n console.log(\"#> sessionOptions: \", sessionOptions);\n};\n\nexport default Debug;\n"],"mappings":"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","names":["Proxy","debug","Proxy","debug"]}
package/dist/index.mjs CHANGED
@@ -61,8 +61,7 @@ async function proxy(method, request, options, config) {
61
61
  options: options.params.endpoint,
62
62
  config
63
63
  };
64
- if (config.debug)
65
- console.log("#> proxy:", parameters);
64
+ if (config.debug) console.log("#> proxy:", parameters);
66
65
  if (rHandler[method][parameters.path])
67
66
  return await rHandler[method][parameters.path](parameters);
68
67
  return invalidEndpoint();
@@ -80,10 +79,8 @@ async function login(request, config) {
80
79
  body: JSON.stringify(formData)
81
80
  });
82
81
  const res = await response.json();
83
- if (config.debug)
84
- console.log("#> login", res);
85
- if (res.error)
86
- return Response.json(res);
82
+ if (config.debug) console.log("#> login", res);
83
+ if (res.error) return Response.json(res);
87
84
  const dec = jwtDecode(res.data.token);
88
85
  session.token = {
89
86
  jwt: res.data.token,
@@ -97,8 +94,7 @@ async function login(request, config) {
97
94
  }
98
95
  async function getUser(request, config) {
99
96
  const session = await session_default();
100
- if (!session || !session.token)
101
- return sessionError();
97
+ if (!session || !session.token) return sessionError();
102
98
  const force = request.nextUrl.searchParams.get("force") == "true";
103
99
  if (session.user && !force)
104
100
  return Response.json({
@@ -115,10 +111,8 @@ async function getUser(request, config) {
115
111
  }
116
112
  );
117
113
  const res = await response.json();
118
- if (config.debug)
119
- console.log("#> getUser", res);
120
- if (res.error)
121
- return Response.json(res);
114
+ if (config.debug) console.log("#> getUser", res);
115
+ if (res.error) return Response.json(res);
122
116
  session.user = res.data;
123
117
  await session.save();
124
118
  return Response.json({
@@ -127,22 +121,18 @@ async function getUser(request, config) {
127
121
  }
128
122
  async function oauth(request, config) {
129
123
  const authUrl = request.nextUrl.searchParams.get("authUrl");
130
- if (!authUrl)
131
- throw new Error("No authUrl provided");
124
+ if (!authUrl) throw new Error("No authUrl provided");
132
125
  const url = new URL(config.route + "/oauth_callback", config.host);
133
126
  const state = request.nextUrl.searchParams.get("state");
134
- if (state)
135
- url.searchParams.set("state", state);
127
+ if (state) url.searchParams.set("state", state);
136
128
  const response = await fetch(
137
129
  `${config.apiUrl}${authUrl}?returnUrl=${encodeURIComponent(
138
130
  url.toString()
139
131
  )}`
140
132
  );
141
133
  const res = await response.json();
142
- if (config.debug)
143
- console.log("#> oauth", res);
144
- if (res.error)
145
- return Response.json(res);
134
+ if (config.debug) console.log("#> oauth", res);
135
+ if (res.error) return Response.json(res);
146
136
  return Response.json({
147
137
  data: res.data
148
138
  });
@@ -152,8 +142,7 @@ async function oauth_callback(request, config) {
152
142
  const token = request.nextUrl.searchParams.get("token");
153
143
  const refresh = request.nextUrl.searchParams.get("refresh");
154
144
  const state = request.nextUrl.searchParams.get("state");
155
- if (!token)
156
- throw new Error("No token provided");
145
+ if (!token) throw new Error("No token provided");
157
146
  const dec = jwtDecode(token);
158
147
  session.token = {
159
148
  jwt: token,
@@ -189,16 +178,14 @@ async function proxyFunction(method, request, config, options) {
189
178
  Authorization: "Bearer " + ((_a = session.token) == null ? void 0 : _a.jwt)
190
179
  }
191
180
  };
192
- if (method === "POST")
193
- opts.body = JSON.stringify(await request.json());
181
+ if (method === "POST") opts.body = JSON.stringify(await request.json());
194
182
  options.shift();
195
183
  const response = await fetch(
196
184
  `${config.apiUrl}/${options.join("/")}${request.nextUrl.search}`,
197
185
  opts
198
186
  );
199
187
  const res = await response.json();
200
- if (config.debug)
201
- console.log("#> getProxyFunction", res);
188
+ if (config.debug) console.log("#> getProxyFunction", res);
202
189
  return Response.json(res);
203
190
  }
204
191
 
@@ -213,8 +200,7 @@ var serverSideFetch = async (url, options, config) => {
213
200
  Authorization: "Bearer " + ((_a = session.token) == null ? void 0 : _a.jwt)
214
201
  }
215
202
  };
216
- if (options.body)
217
- opts.body = JSON.stringify(options.body);
203
+ if (options.body) opts.body = JSON.stringify(options.body);
218
204
  const response = await fetch(`${config.apiUrl}${url}`, opts);
219
205
  const res = await response.json();
220
206
  return res;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server/api.ts","../src/server/errors.ts","../src/server/session.ts","../src/server/fetch.ts","../src/server/test.ts","../src/index.ts"],"sourcesContent":["import { NextRequest } from \"next/server\";\nimport { revalidatePath } from \"next/cache\";\nimport { requestError } from \"./errors\";\nimport { invalidEndpoint, sessionError } from \"./errors\";\nimport { jwtDecode } from \"jwt-decode\";\nimport { IConfig, IRequestOptions, RouteHandler } from \"../types\";\nimport getSessionServerside from \"./session\";\n\nconst rHandler: RouteHandler = {\n GET: {\n user: ({ request, config }) => getUser(request, config),\n logout: ({ config }) => logout(config),\n debug: () => debug(),\n oauth: ({ request, config }) => oauth(request, config),\n oauth_callback: ({ request, config }) =>\n oauth_callback(request, config),\n proxy: ({ request, config, options }) =>\n proxyFunction(\"GET\", request, config, options),\n },\n POST: {\n login: ({ request, config }) => login(request, config),\n proxy: ({ request, config, options }) =>\n proxyFunction(\"POST\", request, config, options),\n },\n DELETE: {\n proxy: ({ request, config, options }) =>\n proxyFunction(\"DELETE\", request, config, options),\n },\n};\n\nexport default async function proxy(\n method: string,\n request: NextRequest,\n options: IRequestOptions,\n config: IConfig\n) {\n try {\n const parameters = {\n request,\n path:\n options.params.endpoint[0] ||\n request.nextUrl.pathname.replace(config.route, \"\"),\n options: options.params.endpoint,\n config,\n };\n\n if (config.debug) console.log(\"#> proxy:\", parameters);\n\n //console.log(`[${method}]: /${parameters.path}`);\n\n if (rHandler[method][parameters.path])\n return await rHandler[method][parameters.path](parameters);\n\n return invalidEndpoint();\n } catch (e) {\n console.log(\"#> proxyError:\", e);\n return requestError();\n }\n}\n\nasync function login(request: NextRequest, config: IConfig) {\n const session = await getSessionServerside();\n const formData = await request.json();\n\n const response: Response = await fetch(`${config.apiUrl}/login`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(formData),\n });\n\n const res = await response.json();\n\n if (config.debug) console.log(\"#> login\", res);\n\n if (res.error) return Response.json(res);\n\n const dec: any = jwtDecode(res.data.token);\n\n session.token = {\n jwt: res.data.token,\n refresh: res.data.refresh || \"refresh_token\",\n decoded: dec,\n };\n\n await session.save();\n\n return Response.json({\n redirect: \"/\",\n });\n}\n\nasync function getUser(request: NextRequest, config: IConfig) {\n const session = await getSessionServerside<any>();\n\n if (!session || !session.token) return sessionError();\n\n\n const force = request.nextUrl.searchParams.get(\"force\") == \"true\";\n\n // * User already exists in session\n if (session.user && !force)\n return Response.json({\n data: session.user,\n });\n\n // * User does not exist in session\n const response: Response = await fetch(\n `${config.apiUrl}${config.userEndpoint}`,\n {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer \" + session.token.jwt,\n },\n }\n );\n\n const res = await response.json();\n\n if (config.debug) console.log(\"#> getUser\", res);\n\n if (res.error) return Response.json(res);\n\n session.user = res.data;\n\n await session.save();\n\n return Response.json({\n data: session.user,\n });\n}\n\nasync function oauth(request: NextRequest, config: IConfig) {\n const authUrl = request.nextUrl.searchParams.get(\"authUrl\");\n\n if (!authUrl) throw new Error(\"No authUrl provided\");\n\n const url = new URL(config.route + \"/oauth_callback\", config.host);\n\n const state = request.nextUrl.searchParams.get(\"state\");\n if (state) url.searchParams.set(\"state\", state);\n\n const response: Response = await fetch(\n `${config.apiUrl}${authUrl}?returnUrl=${encodeURIComponent(\n url.toString()\n )}`\n );\n\n const res = await response.json();\n\n if (config.debug) console.log(\"#> oauth\", res);\n\n if (res.error) return Response.json(res);\n\n return Response.json({\n data: res.data,\n });\n}\n\nasync function oauth_callback(request: NextRequest, config: IConfig) {\n const session = await getSessionServerside();\n const token = request.nextUrl.searchParams.get(\"token\");\n const refresh = request.nextUrl.searchParams.get(\"refresh\");\n const state = request.nextUrl.searchParams.get(\"state\");\n\n if (!token) throw new Error(\"No token provided\");\n\n const dec: any = jwtDecode(token);\n\n session.token = {\n jwt: token,\n refresh: refresh || \"refresh_token\",\n decoded: dec,\n };\n\n await session.save();\n\n if (state)\n return Response.redirect(\n state.includes(\"http\") ? state : config.host + state\n );\n\n return Response.redirect(config.host);\n}\n\nasync function logout(config: IConfig) {\n const session = await getSessionServerside();\n\n session.destroy();\n\n revalidatePath(config.host, \"layout\");\n\n //return Response.redirect(config.host);\n\n return Response.json({\n redirect: \"/\",\n });\n}\n\nasync function debug() {\n const session = await getSessionServerside();\n\n return Response.json(session);\n}\n\n// TODO: add refresh logic\n\nasync function proxyFunction(\n method: string,\n request: NextRequest,\n config: IConfig,\n options: string[]\n) {\n const session = await getSessionServerside();\n\n const opts: RequestInit = {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer \" + session.token?.jwt,\n },\n };\n\n if (method === \"POST\") opts.body = JSON.stringify(await request.json());\n\n options.shift();\n const response: Response = await fetch(\n `${config.apiUrl}/${options.join(\"/\")}${request.nextUrl.search}`,\n opts\n );\n\n const res = await response.json();\n\n if (config.debug) console.log(\"#> getProxyFunction\", res);\n\n return Response.json(res);\n}\n","export const requestError = () =>\n Response.json({\n error: \"requestError\",\n message: \"error while sending request through proxy\",\n });\n\nexport const invalidEndpoint = () =>\n Response.json({\n error: \"invalidEndpoint\",\n message: \"invalid endpoint\",\n });\n\nexport const sessionError = () =>\n Response.json({\n error: \"noSession\",\n message: \"no session found\",\n });\n","import { SessionOptions } from \"iron-session\";\nimport { getIronSession } from \"iron-session\";\nimport { cookies } from \"next/headers\";\nimport { ServerSideSession } from \"../types/internal\";\nimport { Session } from \"../types\";\n\ndeclare module \"iron-session\" {\n interface IronSessionData<U, T> {\n user?: U;\n token?: {\n jwt: string;\n refresh: string;\n decoded: T;\n };\n }\n}\n\nexport interface DefaultUser {\n [key: string]: any;\n}\n\nexport interface Token {\n token: string;\n}\n\nexport const sessionOptions: SessionOptions = {\n password: process.env.CELESTYA_SECRET || \"PLEASE_SET_PASSWORD\",\n cookieName: process.env.CELESTYA_COOKIE_NAME || \"PLEASE_SET_COOKIE_NAME\",\n cookieOptions: { secure: process.env.SECURE === \"true\" || false },\n};\n\nconst getSessionServerside = async <U = DefaultUser>() => {\n const session: Session<U> = await getIronSession<ServerSideSession<U>>(\n cookies(),\n sessionOptions\n );\n\n return session;\n};\n\nexport default getSessionServerside;\n","import { IConfig, IServerSideRequestOptions } from \"../types\";\nimport getSessionServerside from \"./session\";\n\nexport const serverSideFetch = async (\n url: string,\n options: IServerSideRequestOptions,\n config: IConfig\n) => {\n const session = await getSessionServerside();\n\n const opts: RequestInit = {\n method: options.method || \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer \" + session.token?.jwt,\n },\n };\n\n if (options.body) opts.body = JSON.stringify(options.body);\n\n const response: Response = await fetch(`${config.apiUrl}${url}`, opts);\n\n const res = await response.json();\n\n return res;\n //return Response.json(res);\n};\n","import { sessionOptions } from \"./session\";\n\nconst Debug = () => {\n console.log(\"#> sessionOptions: \", sessionOptions);\n};\n\nexport default Debug;\n","import proxy from \"./server/api\";\nimport { serverSideFetch } from \"./server/fetch\";\nimport getSessionServerside from \"./server/session\";\nimport Debug from \"./server/test\";\n\nexport const Proxy = proxy;\nexport const getSession = getSessionServerside;\nexport const debug = Debug;\nexport const apiFetch = serverSideFetch;\n\nimport { IConfig, IRequestOptions, Session } from \"./types\";\n\nexport { IConfig, IRequestOptions, Session };\n"],"mappings":"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","names":["debug"]}
1
+ {"version":3,"sources":["../src/server/api.ts","../src/server/errors.ts","../src/server/session.ts","../src/server/fetch.ts","../src/server/test.ts","../src/index.ts"],"sourcesContent":["import { NextRequest } from \"next/server\";\nimport { revalidatePath } from \"next/cache\";\nimport { requestError } from \"./errors\";\nimport { invalidEndpoint, sessionError } from \"./errors\";\nimport { jwtDecode } from \"jwt-decode\";\nimport { IConfig, IRequestOptions, RouteHandler } from \"../types\";\nimport getSessionServerside from \"./session\";\n\nconst rHandler: RouteHandler = {\n GET: {\n user: ({ request, config }) => getUser(request, config),\n logout: ({ config }) => logout(config),\n debug: () => debug(),\n oauth: ({ request, config }) => oauth(request, config),\n oauth_callback: ({ request, config }) =>\n oauth_callback(request, config),\n proxy: ({ request, config, options }) =>\n proxyFunction(\"GET\", request, config, options),\n },\n POST: {\n login: ({ request, config }) => login(request, config),\n proxy: ({ request, config, options }) =>\n proxyFunction(\"POST\", request, config, options),\n },\n DELETE: {\n proxy: ({ request, config, options }) =>\n proxyFunction(\"DELETE\", request, config, options),\n },\n};\n\nexport default async function proxy(\n method: string,\n request: NextRequest,\n options: IRequestOptions,\n config: IConfig\n) {\n try {\n const parameters = {\n request,\n path:\n options.params.endpoint[0] ||\n request.nextUrl.pathname.replace(config.route, \"\"),\n options: options.params.endpoint,\n config,\n };\n\n if (config.debug) console.log(\"#> proxy:\", parameters);\n\n //console.log(`[${method}]: /${parameters.path}`);\n\n if (rHandler[method][parameters.path])\n return await rHandler[method][parameters.path](parameters);\n\n return invalidEndpoint();\n } catch (e) {\n console.log(\"#> proxyError:\", e);\n return requestError();\n }\n}\n\nasync function login(request: NextRequest, config: IConfig) {\n const session = await getSessionServerside();\n const formData = await request.json();\n\n const response: Response = await fetch(`${config.apiUrl}/login`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(formData),\n });\n\n const res = await response.json();\n\n if (config.debug) console.log(\"#> login\", res);\n\n if (res.error) return Response.json(res);\n\n const dec: any = jwtDecode(res.data.token);\n\n session.token = {\n jwt: res.data.token,\n refresh: res.data.refresh || \"refresh_token\",\n decoded: dec,\n };\n\n await session.save();\n\n return Response.json({\n redirect: \"/\",\n });\n}\n\nasync function getUser(request: NextRequest, config: IConfig) {\n const session = await getSessionServerside<any>();\n\n if (!session || !session.token) return sessionError();\n\n const force = request.nextUrl.searchParams.get(\"force\") == \"true\";\n\n // * User already exists in session\n if (session.user && !force)\n return Response.json({\n data: session.user,\n });\n\n // * User does not exist in session\n const response: Response = await fetch(\n `${config.apiUrl}${config.userEndpoint}`,\n {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer \" + session.token.jwt,\n },\n }\n );\n\n const res = await response.json();\n\n if (config.debug) console.log(\"#> getUser\", res);\n\n if (res.error) return Response.json(res);\n\n session.user = res.data;\n\n await session.save();\n\n return Response.json({\n data: session.user,\n });\n}\n\nasync function oauth(request: NextRequest, config: IConfig) {\n const authUrl = request.nextUrl.searchParams.get(\"authUrl\");\n\n if (!authUrl) throw new Error(\"No authUrl provided\");\n\n const url = new URL(config.route + \"/oauth_callback\", config.host);\n\n const state = request.nextUrl.searchParams.get(\"state\");\n if (state) url.searchParams.set(\"state\", state);\n\n const response: Response = await fetch(\n `${config.apiUrl}${authUrl}?returnUrl=${encodeURIComponent(\n url.toString()\n )}`\n );\n\n const res = await response.json();\n\n if (config.debug) console.log(\"#> oauth\", res);\n\n if (res.error) return Response.json(res);\n\n return Response.json({\n data: res.data,\n });\n}\n\nasync function oauth_callback(request: NextRequest, config: IConfig) {\n const session = await getSessionServerside();\n const token = request.nextUrl.searchParams.get(\"token\");\n const refresh = request.nextUrl.searchParams.get(\"refresh\");\n const state = request.nextUrl.searchParams.get(\"state\");\n\n if (!token) throw new Error(\"No token provided\");\n\n const dec: any = jwtDecode(token);\n\n session.token = {\n jwt: token,\n refresh: refresh || \"refresh_token\",\n decoded: dec,\n };\n\n await session.save();\n\n if (state)\n return Response.redirect(\n state.includes(\"http\") ? state : config.host + state\n );\n\n return Response.redirect(config.host);\n}\n\nasync function logout(config: IConfig) {\n const session = await getSessionServerside();\n\n session.destroy();\n\n revalidatePath(config.host, \"layout\");\n\n //return Response.redirect(config.host);\n\n return Response.json({\n redirect: \"/\",\n });\n}\n\nasync function debug() {\n const session = await getSessionServerside();\n\n return Response.json(session);\n}\n\n// TODO: add refresh logic\n\nasync function proxyFunction(\n method: string,\n request: NextRequest,\n config: IConfig,\n options: string[]\n) {\n const session = await getSessionServerside();\n\n const opts: RequestInit = {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer \" + session.token?.jwt,\n },\n };\n\n if (method === \"POST\") opts.body = JSON.stringify(await request.json());\n\n options.shift();\n const response: Response = await fetch(\n `${config.apiUrl}/${options.join(\"/\")}${request.nextUrl.search}`,\n opts\n );\n\n const res = await response.json();\n\n if (config.debug) console.log(\"#> getProxyFunction\", res);\n\n return Response.json(res);\n}\n","export const requestError = () =>\n Response.json({\n error: \"requestError\",\n message: \"error while sending request through proxy\",\n });\n\nexport const invalidEndpoint = () =>\n Response.json({\n error: \"invalidEndpoint\",\n message: \"invalid endpoint\",\n });\n\nexport const sessionError = () =>\n Response.json({\n error: \"noSession\",\n message: \"no session found\",\n });\n","import { SessionOptions } from \"iron-session\";\nimport { getIronSession } from \"iron-session\";\nimport { cookies } from \"next/headers\";\nimport { ServerSideSession } from \"../types/internal\";\nimport { Session } from \"../types\";\n\ndeclare module \"iron-session\" {\n interface IronSessionData<U, T> {\n user?: U;\n token?: {\n jwt: string;\n refresh: string;\n decoded: T;\n };\n }\n}\n\nexport interface DefaultUser {\n [key: string]: any;\n}\n\nexport interface Token {\n token: string;\n}\n\nexport const sessionOptions: SessionOptions = {\n password: process.env.CELESTYA_SECRET || \"PLEASE_SET_PASSWORD\",\n cookieName: process.env.CELESTYA_COOKIE_NAME || \"PLEASE_SET_COOKIE_NAME\",\n cookieOptions: { secure: process.env.SECURE === \"true\" || false },\n};\n\nconst getSessionServerside = async <U = DefaultUser>() => {\n const session: Session<U> = await getIronSession<ServerSideSession<U>>(\n cookies(),\n sessionOptions\n );\n\n return session;\n};\n\nexport default getSessionServerside;\n","import { IConfig, IServerSideRequestOptions } from \"../types\";\nimport getSessionServerside from \"./session\";\n\nexport const serverSideFetch = async (\n url: string,\n options: IServerSideRequestOptions,\n config: IConfig\n) => {\n const session = await getSessionServerside();\n\n const opts: RequestInit = {\n method: options.method || \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer \" + session.token?.jwt,\n },\n };\n\n if (options.body) opts.body = JSON.stringify(options.body);\n\n const response: Response = await fetch(`${config.apiUrl}${url}`, opts);\n\n const res = await response.json();\n\n return res;\n};\n","import { sessionOptions } from \"./session\";\n\nconst Debug = () => {\n console.log(\"#> sessionOptions: \", sessionOptions);\n};\n\nexport default Debug;\n","import proxy from \"./server/api\";\nimport { serverSideFetch } from \"./server/fetch\";\nimport getSessionServerside from \"./server/session\";\nimport Debug from \"./server/test\";\n\nexport const Proxy = proxy;\nexport const getSession = getSessionServerside;\nexport const debug = Debug;\nexport const apiFetch = serverSideFetch;\n\nimport { IConfig, IRequestOptions, Session } from \"./types\";\n\nexport { IConfig, IRequestOptions, Session };\n"],"mappings":"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","names":["debug"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "celestya",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
4
4
  "description": "Highly opinionated session management tool for NextJS",
5
5
  "main": "./dist/index.js",
6
6
  "exports": {