@yeverlibs/ds 1.1.6 → 1.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +53 -1
- package/dist/index.d.ts +53 -1
- package/dist/index.js +314 -27
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +312 -28
- package/dist/index.mjs.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/server.mjs +1 -1
- package/dist/server.mjs.map +1 -1
- package/package.json +1 -1
package/dist/server.js
CHANGED
|
@@ -9,7 +9,7 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
9
9
|
var Cookies__default = /*#__PURE__*/_interopDefault(Cookies);
|
|
10
10
|
|
|
11
11
|
async function getCsrfToken() {
|
|
12
|
-
const baseURL = process.env.NEXT_PUBLIC_API_URL ?? "";
|
|
12
|
+
const baseURL = process.env.NEXT_PUBLIC_API_URL ?? "http://api.yever.local";
|
|
13
13
|
const response = await fetch(`${baseURL}/sanctum/csrf-cookie`, {
|
|
14
14
|
credentials: "include",
|
|
15
15
|
headers: {
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/fetch.ts","../src/utils/parse-parameters-into-url/index.tsx","../src/lib/fetch-server-side/index.ts"],"names":["Cookies","headers","data","redirect"],"mappings":"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","file":"server.js","sourcesContent":["import Cookies from 'js-cookie'\n\nimport { CustomRequestInit, FetchResponse, FetchError } from './type'\n\nasync function getCsrfToken() {\n const baseURL = process.env.NEXT_PUBLIC_API_URL ?? ''\n const response = await fetch(`${baseURL}/sanctum/csrf-cookie`, {\n credentials: 'include',\n headers: {\n 'X-Requested-With': 'XMLHttpRequest',\n },\n })\n\n if (!response.ok) {\n throw new Error('Falha ao obter token CSRF')\n }\n\n await new Promise((resolve) => setTimeout(resolve, 100))\n}\n\nexport async function apiFetch(options: CustomRequestInit): Promise<FetchResponse> {\n const baseURL = process.env.NEXT_PUBLIC_API_URL ?? ''\n const isAbsolute = /^https?:\\/\\//i.test(options.url)\n const url = isAbsolute ? options.url : `${baseURL}${options.url}`\n\n const method = (options.method ?? 'GET').toString().toLowerCase()\n const needsCSRFToken = ['post', 'put', 'delete'].includes(method)\n const hasCSRFCookie = Cookies.get('XSRF-TOKEN')\n\n if (needsCSRFToken && !hasCSRFCookie) {\n await getCsrfToken()\n }\n\n const defaultHeaders: Record<string, string> = {\n 'X-Requested-With': 'XMLHttpRequest',\n Accept: 'application/json',\n }\n\n if (!(options.body instanceof FormData)) {\n defaultHeaders['Content-Type'] = 'application/json'\n }\n\n const finalHeaders = new Headers(defaultHeaders)\n if (options.headers) {\n if (options.headers instanceof Headers) {\n options.headers.forEach((v, k) => finalHeaders.set(k, v))\n } else {\n Object.entries(options.headers).forEach(([k, v]) => {\n if (v !== undefined) finalHeaders.set(k, v)\n })\n }\n }\n\n const csrfToken = Cookies.get('XSRF-TOKEN')\n if (csrfToken) {\n finalHeaders.set('X-XSRF-TOKEN', csrfToken)\n }\n\n let finalOptions = options\n if (options.body) {\n finalOptions = {\n ...options,\n body: options.body instanceof FormData ? options.body : JSON.stringify(options.body),\n }\n }\n\n let response = await fetch(url, {\n credentials: 'include',\n headers: finalHeaders,\n ...finalOptions,\n })\n\n if (response.status === 419) {\n Cookies.remove('XSRF-TOKEN')\n\n await getCsrfToken()\n\n const newToken = Cookies.get('XSRF-TOKEN')\n if (newToken) {\n finalHeaders.set('X-XSRF-TOKEN', newToken)\n }\n\n response = await fetch(url, {\n credentials: 'include',\n headers: finalHeaders,\n ...options,\n })\n\n if (!response.ok) {\n Cookies.remove('XSRF-TOKEN')\n Cookies.remove('yeverClientUser')\n window.location.href = '/login'\n return Promise.reject(new Error('CSRF token expirado'))\n }\n }\n\n const headers: Record<string, string> = {}\n response.headers.forEach((value, key) => {\n headers[key] = value\n })\n\n if (!response.ok) {\n const data = await response.json().catch(() => null)\n const errorMessage =\n typeof data === 'object' && data !== null && 'message' in data\n ? (data as { message: string }).message\n : 'Request failed'\n const error = new Error(errorMessage) as FetchError\n error.status = response.status\n error.response = {\n data,\n status: response.status,\n }\n throw error\n }\n\n let data = null\n if (options.responseType === 'blob') {\n data = await response.blob().catch(() => null)\n } else {\n data = await response.json().catch(() => null)\n }\n\n return {\n status: response.status,\n statusText: response.statusText,\n data,\n headers,\n }\n}\n","const parseParametersIntoUrl = (url: string, query: { [key: string]: string }, filtersAllowed?: string[]) => {\n let urlFiltered = url\n\n for (const key in query) {\n if (query && Object.keys(query).length > 0) {\n urlFiltered = urlFiltered.replace(`/${key}/`, `/${query[key]}/`)\n urlFiltered = urlFiltered.replace(`/${key}`, `/${query[key]}`)\n\n if (filtersAllowed && filtersAllowed.includes(key)) {\n if (urlFiltered.includes('?')) {\n if (key === 'searchNew') {\n urlFiltered = urlFiltered + `&${key}=${atob(query[key])}`\n } else {\n urlFiltered = urlFiltered + `&${key}=${query[key]}`\n }\n } else {\n if (key === 'searchNew') {\n urlFiltered = urlFiltered + `?${key}=${atob(query[key])}`\n } else {\n urlFiltered = urlFiltered + `?${key}=${query[key]}`\n }\n }\n }\n }\n }\n\n return urlFiltered\n}\n\nexport { parseParametersIntoUrl }\n\n","'use server'\n\nimport { headers } from 'next/headers'\nimport { redirect } from 'next/navigation'\n\nimport { PaginatedData } from '@/@types/paginate'\nimport { apiFetch } from '@/lib/fetch'\nimport { parseParametersIntoUrl } from '@/utils/parse-parameters-into-url'\n\nimport { ApiError, fetchServerSideProps } from './type'\n\nexport const fetchServerSide = async <T>({\n urlRequest,\n parseData,\n filtersAllowed,\n method = 'GET',\n body,\n}: fetchServerSideProps<T>) => {\n 'use server'\n\n try {\n const headersObject = Object.fromEntries((await headers()).entries())\n const searchParams = new URLSearchParams(headersObject.referer ? new URL(headersObject.referer).search : '')\n\n const query = Array.from(searchParams.entries()).reduce((acc: { [key: string]: string }, [key, value]) => {\n acc[key] = value\n return acc\n }, {})\n\n const url = parseParametersIntoUrl(urlRequest, query, filtersAllowed)\n const origin = headersObject.host\n const cookie = headersObject.cookie\n\n const xsrfToken = cookie?.match(/XSRF-TOKEN=([^;]+)/)?.[1]\n const requestHeaders: Record<string, string> = {\n Cookie: cookie,\n origin,\n }\n\n if (xsrfToken) {\n requestHeaders['X-XSRF-TOKEN'] = decodeURIComponent(xsrfToken)\n }\n\n let pagination: PaginatedData | undefined\n\n const res = await apiFetch({\n url,\n method: method as 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH',\n body: body as string | FormData | null | undefined,\n headers: requestHeaders,\n cache: 'no-store',\n })\n\n if (res?.data && typeof res.data === 'object' && 'paginate' in res.data) {\n pagination = (res.data as { paginate: PaginatedData }).paginate\n }\n\n const parsedData = parseData ? (parseData(res) as T) : (res as T)\n\n return {\n props: {\n pagination,\n data: parsedData,\n },\n }\n } catch (error) {\n const apiError = error as ApiError\n\n switch (apiError.response?.status) {\n case 401:\n redirect('/login')\n case 403:\n return {\n props: {\n error: {\n status: 403,\n message: 'Você não tem permissão para executar essa ação',\n errors: {},\n },\n data: null,\n },\n }\n case 404:\n return {\n props: {\n error: {\n status: 404,\n message: apiError.response.data?.message || 'Recurso não encontrado',\n errors: apiError.response?.data?.errors || {},\n },\n data: null,\n },\n }\n case 422:\n return {\n props: {\n error: {\n status: 422,\n message: apiError.response.data?.message || 'Erro de validação',\n errors: apiError.response?.data?.errors,\n },\n },\n }\n case 500:\n return {\n props: {\n error: {\n status: 500,\n message:\n apiError.response.data?.message ||\n 'Ocorreu um erro durante o processamento dessa requisição. A Yever foi notificada e estamos atuando para sanar o problema.',\n errors: {},\n },\n },\n }\n default:\n if (apiError.response?.data?.errors || apiError.response?.data?.message) {\n return {\n props: {\n error: {\n status: apiError.response.status,\n message: apiError.response.data?.message,\n errors: apiError.response.data?.errors,\n },\n },\n }\n }\n redirect('/500')\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/fetch.ts","../src/utils/parse-parameters-into-url/index.tsx","../src/lib/fetch-server-side/index.ts"],"names":["Cookies","headers","data","redirect"],"mappings":"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","file":"server.js","sourcesContent":["import Cookies from 'js-cookie'\n\nimport { CustomRequestInit, FetchResponse, FetchError } from './type'\n\nasync function getCsrfToken() {\n const baseURL = process.env.NEXT_PUBLIC_API_URL ?? 'http://api.yever.local'\n const response = await fetch(`${baseURL}/sanctum/csrf-cookie`, {\n credentials: 'include',\n headers: {\n 'X-Requested-With': 'XMLHttpRequest',\n },\n })\n\n if (!response.ok) {\n throw new Error('Falha ao obter token CSRF')\n }\n\n await new Promise((resolve) => setTimeout(resolve, 100))\n}\n\nexport async function apiFetch(options: CustomRequestInit): Promise<FetchResponse> {\n const baseURL = process.env.NEXT_PUBLIC_API_URL ?? ''\n const isAbsolute = /^https?:\\/\\//i.test(options.url)\n const url = isAbsolute ? options.url : `${baseURL}${options.url}`\n\n const method = (options.method ?? 'GET').toString().toLowerCase()\n const needsCSRFToken = ['post', 'put', 'delete'].includes(method)\n const hasCSRFCookie = Cookies.get('XSRF-TOKEN')\n\n if (needsCSRFToken && !hasCSRFCookie) {\n await getCsrfToken()\n }\n\n const defaultHeaders: Record<string, string> = {\n 'X-Requested-With': 'XMLHttpRequest',\n Accept: 'application/json',\n }\n\n if (!(options.body instanceof FormData)) {\n defaultHeaders['Content-Type'] = 'application/json'\n }\n\n const finalHeaders = new Headers(defaultHeaders)\n if (options.headers) {\n if (options.headers instanceof Headers) {\n options.headers.forEach((v, k) => finalHeaders.set(k, v))\n } else {\n Object.entries(options.headers).forEach(([k, v]) => {\n if (v !== undefined) finalHeaders.set(k, v)\n })\n }\n }\n\n const csrfToken = Cookies.get('XSRF-TOKEN')\n if (csrfToken) {\n finalHeaders.set('X-XSRF-TOKEN', csrfToken)\n }\n\n let finalOptions = options\n if (options.body) {\n finalOptions = {\n ...options,\n body: options.body instanceof FormData ? options.body : JSON.stringify(options.body),\n }\n }\n\n let response = await fetch(url, {\n credentials: 'include',\n headers: finalHeaders,\n ...finalOptions,\n })\n\n if (response.status === 419) {\n Cookies.remove('XSRF-TOKEN')\n\n await getCsrfToken()\n\n const newToken = Cookies.get('XSRF-TOKEN')\n if (newToken) {\n finalHeaders.set('X-XSRF-TOKEN', newToken)\n }\n\n response = await fetch(url, {\n credentials: 'include',\n headers: finalHeaders,\n ...options,\n })\n\n if (!response.ok) {\n Cookies.remove('XSRF-TOKEN')\n Cookies.remove('yeverClientUser')\n window.location.href = '/login'\n return Promise.reject(new Error('CSRF token expirado'))\n }\n }\n\n const headers: Record<string, string> = {}\n response.headers.forEach((value, key) => {\n headers[key] = value\n })\n\n if (!response.ok) {\n const data = await response.json().catch(() => null)\n const errorMessage =\n typeof data === 'object' && data !== null && 'message' in data\n ? (data as { message: string }).message\n : 'Request failed'\n const error = new Error(errorMessage) as FetchError\n error.status = response.status\n error.response = {\n data,\n status: response.status,\n }\n throw error\n }\n\n let data = null\n if (options.responseType === 'blob') {\n data = await response.blob().catch(() => null)\n } else {\n data = await response.json().catch(() => null)\n }\n\n return {\n status: response.status,\n statusText: response.statusText,\n data,\n headers,\n }\n}\n","const parseParametersIntoUrl = (url: string, query: { [key: string]: string }, filtersAllowed?: string[]) => {\n let urlFiltered = url\n\n for (const key in query) {\n if (query && Object.keys(query).length > 0) {\n urlFiltered = urlFiltered.replace(`/${key}/`, `/${query[key]}/`)\n urlFiltered = urlFiltered.replace(`/${key}`, `/${query[key]}`)\n\n if (filtersAllowed && filtersAllowed.includes(key)) {\n if (urlFiltered.includes('?')) {\n if (key === 'searchNew') {\n urlFiltered = urlFiltered + `&${key}=${atob(query[key])}`\n } else {\n urlFiltered = urlFiltered + `&${key}=${query[key]}`\n }\n } else {\n if (key === 'searchNew') {\n urlFiltered = urlFiltered + `?${key}=${atob(query[key])}`\n } else {\n urlFiltered = urlFiltered + `?${key}=${query[key]}`\n }\n }\n }\n }\n }\n\n return urlFiltered\n}\n\nexport { parseParametersIntoUrl }\n\n","'use server'\n\nimport { headers } from 'next/headers'\nimport { redirect } from 'next/navigation'\n\nimport { PaginatedData } from '@/@types/paginate'\nimport { apiFetch } from '@/lib/fetch'\nimport { parseParametersIntoUrl } from '@/utils/parse-parameters-into-url'\n\nimport { ApiError, fetchServerSideProps } from './type'\n\nexport const fetchServerSide = async <T>({\n urlRequest,\n parseData,\n filtersAllowed,\n method = 'GET',\n body,\n}: fetchServerSideProps<T>) => {\n 'use server'\n\n try {\n const headersObject = Object.fromEntries((await headers()).entries())\n const searchParams = new URLSearchParams(headersObject.referer ? new URL(headersObject.referer).search : '')\n\n const query = Array.from(searchParams.entries()).reduce((acc: { [key: string]: string }, [key, value]) => {\n acc[key] = value\n return acc\n }, {})\n\n const url = parseParametersIntoUrl(urlRequest, query, filtersAllowed)\n const origin = headersObject.host\n const cookie = headersObject.cookie\n\n const xsrfToken = cookie?.match(/XSRF-TOKEN=([^;]+)/)?.[1]\n const requestHeaders: Record<string, string> = {\n Cookie: cookie,\n origin,\n }\n\n if (xsrfToken) {\n requestHeaders['X-XSRF-TOKEN'] = decodeURIComponent(xsrfToken)\n }\n\n let pagination: PaginatedData | undefined\n\n const res = await apiFetch({\n url,\n method: method as 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH',\n body: body as string | FormData | null | undefined,\n headers: requestHeaders,\n cache: 'no-store',\n })\n\n if (res?.data && typeof res.data === 'object' && 'paginate' in res.data) {\n pagination = (res.data as { paginate: PaginatedData }).paginate\n }\n\n const parsedData = parseData ? (parseData(res) as T) : (res as T)\n\n return {\n props: {\n pagination,\n data: parsedData,\n },\n }\n } catch (error) {\n const apiError = error as ApiError\n\n switch (apiError.response?.status) {\n case 401:\n redirect('/login')\n case 403:\n return {\n props: {\n error: {\n status: 403,\n message: 'Você não tem permissão para executar essa ação',\n errors: {},\n },\n data: null,\n },\n }\n case 404:\n return {\n props: {\n error: {\n status: 404,\n message: apiError.response.data?.message || 'Recurso não encontrado',\n errors: apiError.response?.data?.errors || {},\n },\n data: null,\n },\n }\n case 422:\n return {\n props: {\n error: {\n status: 422,\n message: apiError.response.data?.message || 'Erro de validação',\n errors: apiError.response?.data?.errors,\n },\n },\n }\n case 500:\n return {\n props: {\n error: {\n status: 500,\n message:\n apiError.response.data?.message ||\n 'Ocorreu um erro durante o processamento dessa requisição. A Yever foi notificada e estamos atuando para sanar o problema.',\n errors: {},\n },\n },\n }\n default:\n if (apiError.response?.data?.errors || apiError.response?.data?.message) {\n return {\n props: {\n error: {\n status: apiError.response.status,\n message: apiError.response.data?.message,\n errors: apiError.response.data?.errors,\n },\n },\n }\n }\n redirect('/500')\n }\n }\n}\n"]}
|
package/dist/server.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import { redirect } from 'next/navigation';
|
|
|
3
3
|
import Cookies from 'js-cookie';
|
|
4
4
|
|
|
5
5
|
async function getCsrfToken() {
|
|
6
|
-
const baseURL = process.env.NEXT_PUBLIC_API_URL ?? "";
|
|
6
|
+
const baseURL = process.env.NEXT_PUBLIC_API_URL ?? "http://api.yever.local";
|
|
7
7
|
const response = await fetch(`${baseURL}/sanctum/csrf-cookie`, {
|
|
8
8
|
credentials: "include",
|
|
9
9
|
headers: {
|
package/dist/server.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/fetch.ts","../src/utils/parse-parameters-into-url/index.tsx","../src/lib/fetch-server-side/index.ts"],"names":["headers","data"],"mappings":"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","file":"server.mjs","sourcesContent":["import Cookies from 'js-cookie'\n\nimport { CustomRequestInit, FetchResponse, FetchError } from './type'\n\nasync function getCsrfToken() {\n const baseURL = process.env.NEXT_PUBLIC_API_URL ?? ''\n const response = await fetch(`${baseURL}/sanctum/csrf-cookie`, {\n credentials: 'include',\n headers: {\n 'X-Requested-With': 'XMLHttpRequest',\n },\n })\n\n if (!response.ok) {\n throw new Error('Falha ao obter token CSRF')\n }\n\n await new Promise((resolve) => setTimeout(resolve, 100))\n}\n\nexport async function apiFetch(options: CustomRequestInit): Promise<FetchResponse> {\n const baseURL = process.env.NEXT_PUBLIC_API_URL ?? ''\n const isAbsolute = /^https?:\\/\\//i.test(options.url)\n const url = isAbsolute ? options.url : `${baseURL}${options.url}`\n\n const method = (options.method ?? 'GET').toString().toLowerCase()\n const needsCSRFToken = ['post', 'put', 'delete'].includes(method)\n const hasCSRFCookie = Cookies.get('XSRF-TOKEN')\n\n if (needsCSRFToken && !hasCSRFCookie) {\n await getCsrfToken()\n }\n\n const defaultHeaders: Record<string, string> = {\n 'X-Requested-With': 'XMLHttpRequest',\n Accept: 'application/json',\n }\n\n if (!(options.body instanceof FormData)) {\n defaultHeaders['Content-Type'] = 'application/json'\n }\n\n const finalHeaders = new Headers(defaultHeaders)\n if (options.headers) {\n if (options.headers instanceof Headers) {\n options.headers.forEach((v, k) => finalHeaders.set(k, v))\n } else {\n Object.entries(options.headers).forEach(([k, v]) => {\n if (v !== undefined) finalHeaders.set(k, v)\n })\n }\n }\n\n const csrfToken = Cookies.get('XSRF-TOKEN')\n if (csrfToken) {\n finalHeaders.set('X-XSRF-TOKEN', csrfToken)\n }\n\n let finalOptions = options\n if (options.body) {\n finalOptions = {\n ...options,\n body: options.body instanceof FormData ? options.body : JSON.stringify(options.body),\n }\n }\n\n let response = await fetch(url, {\n credentials: 'include',\n headers: finalHeaders,\n ...finalOptions,\n })\n\n if (response.status === 419) {\n Cookies.remove('XSRF-TOKEN')\n\n await getCsrfToken()\n\n const newToken = Cookies.get('XSRF-TOKEN')\n if (newToken) {\n finalHeaders.set('X-XSRF-TOKEN', newToken)\n }\n\n response = await fetch(url, {\n credentials: 'include',\n headers: finalHeaders,\n ...options,\n })\n\n if (!response.ok) {\n Cookies.remove('XSRF-TOKEN')\n Cookies.remove('yeverClientUser')\n window.location.href = '/login'\n return Promise.reject(new Error('CSRF token expirado'))\n }\n }\n\n const headers: Record<string, string> = {}\n response.headers.forEach((value, key) => {\n headers[key] = value\n })\n\n if (!response.ok) {\n const data = await response.json().catch(() => null)\n const errorMessage =\n typeof data === 'object' && data !== null && 'message' in data\n ? (data as { message: string }).message\n : 'Request failed'\n const error = new Error(errorMessage) as FetchError\n error.status = response.status\n error.response = {\n data,\n status: response.status,\n }\n throw error\n }\n\n let data = null\n if (options.responseType === 'blob') {\n data = await response.blob().catch(() => null)\n } else {\n data = await response.json().catch(() => null)\n }\n\n return {\n status: response.status,\n statusText: response.statusText,\n data,\n headers,\n }\n}\n","const parseParametersIntoUrl = (url: string, query: { [key: string]: string }, filtersAllowed?: string[]) => {\n let urlFiltered = url\n\n for (const key in query) {\n if (query && Object.keys(query).length > 0) {\n urlFiltered = urlFiltered.replace(`/${key}/`, `/${query[key]}/`)\n urlFiltered = urlFiltered.replace(`/${key}`, `/${query[key]}`)\n\n if (filtersAllowed && filtersAllowed.includes(key)) {\n if (urlFiltered.includes('?')) {\n if (key === 'searchNew') {\n urlFiltered = urlFiltered + `&${key}=${atob(query[key])}`\n } else {\n urlFiltered = urlFiltered + `&${key}=${query[key]}`\n }\n } else {\n if (key === 'searchNew') {\n urlFiltered = urlFiltered + `?${key}=${atob(query[key])}`\n } else {\n urlFiltered = urlFiltered + `?${key}=${query[key]}`\n }\n }\n }\n }\n }\n\n return urlFiltered\n}\n\nexport { parseParametersIntoUrl }\n\n","'use server'\n\nimport { headers } from 'next/headers'\nimport { redirect } from 'next/navigation'\n\nimport { PaginatedData } from '@/@types/paginate'\nimport { apiFetch } from '@/lib/fetch'\nimport { parseParametersIntoUrl } from '@/utils/parse-parameters-into-url'\n\nimport { ApiError, fetchServerSideProps } from './type'\n\nexport const fetchServerSide = async <T>({\n urlRequest,\n parseData,\n filtersAllowed,\n method = 'GET',\n body,\n}: fetchServerSideProps<T>) => {\n 'use server'\n\n try {\n const headersObject = Object.fromEntries((await headers()).entries())\n const searchParams = new URLSearchParams(headersObject.referer ? new URL(headersObject.referer).search : '')\n\n const query = Array.from(searchParams.entries()).reduce((acc: { [key: string]: string }, [key, value]) => {\n acc[key] = value\n return acc\n }, {})\n\n const url = parseParametersIntoUrl(urlRequest, query, filtersAllowed)\n const origin = headersObject.host\n const cookie = headersObject.cookie\n\n const xsrfToken = cookie?.match(/XSRF-TOKEN=([^;]+)/)?.[1]\n const requestHeaders: Record<string, string> = {\n Cookie: cookie,\n origin,\n }\n\n if (xsrfToken) {\n requestHeaders['X-XSRF-TOKEN'] = decodeURIComponent(xsrfToken)\n }\n\n let pagination: PaginatedData | undefined\n\n const res = await apiFetch({\n url,\n method: method as 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH',\n body: body as string | FormData | null | undefined,\n headers: requestHeaders,\n cache: 'no-store',\n })\n\n if (res?.data && typeof res.data === 'object' && 'paginate' in res.data) {\n pagination = (res.data as { paginate: PaginatedData }).paginate\n }\n\n const parsedData = parseData ? (parseData(res) as T) : (res as T)\n\n return {\n props: {\n pagination,\n data: parsedData,\n },\n }\n } catch (error) {\n const apiError = error as ApiError\n\n switch (apiError.response?.status) {\n case 401:\n redirect('/login')\n case 403:\n return {\n props: {\n error: {\n status: 403,\n message: 'Você não tem permissão para executar essa ação',\n errors: {},\n },\n data: null,\n },\n }\n case 404:\n return {\n props: {\n error: {\n status: 404,\n message: apiError.response.data?.message || 'Recurso não encontrado',\n errors: apiError.response?.data?.errors || {},\n },\n data: null,\n },\n }\n case 422:\n return {\n props: {\n error: {\n status: 422,\n message: apiError.response.data?.message || 'Erro de validação',\n errors: apiError.response?.data?.errors,\n },\n },\n }\n case 500:\n return {\n props: {\n error: {\n status: 500,\n message:\n apiError.response.data?.message ||\n 'Ocorreu um erro durante o processamento dessa requisição. A Yever foi notificada e estamos atuando para sanar o problema.',\n errors: {},\n },\n },\n }\n default:\n if (apiError.response?.data?.errors || apiError.response?.data?.message) {\n return {\n props: {\n error: {\n status: apiError.response.status,\n message: apiError.response.data?.message,\n errors: apiError.response.data?.errors,\n },\n },\n }\n }\n redirect('/500')\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/fetch.ts","../src/utils/parse-parameters-into-url/index.tsx","../src/lib/fetch-server-side/index.ts"],"names":["headers","data"],"mappings":"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","file":"server.mjs","sourcesContent":["import Cookies from 'js-cookie'\n\nimport { CustomRequestInit, FetchResponse, FetchError } from './type'\n\nasync function getCsrfToken() {\n const baseURL = process.env.NEXT_PUBLIC_API_URL ?? 'http://api.yever.local'\n const response = await fetch(`${baseURL}/sanctum/csrf-cookie`, {\n credentials: 'include',\n headers: {\n 'X-Requested-With': 'XMLHttpRequest',\n },\n })\n\n if (!response.ok) {\n throw new Error('Falha ao obter token CSRF')\n }\n\n await new Promise((resolve) => setTimeout(resolve, 100))\n}\n\nexport async function apiFetch(options: CustomRequestInit): Promise<FetchResponse> {\n const baseURL = process.env.NEXT_PUBLIC_API_URL ?? ''\n const isAbsolute = /^https?:\\/\\//i.test(options.url)\n const url = isAbsolute ? options.url : `${baseURL}${options.url}`\n\n const method = (options.method ?? 'GET').toString().toLowerCase()\n const needsCSRFToken = ['post', 'put', 'delete'].includes(method)\n const hasCSRFCookie = Cookies.get('XSRF-TOKEN')\n\n if (needsCSRFToken && !hasCSRFCookie) {\n await getCsrfToken()\n }\n\n const defaultHeaders: Record<string, string> = {\n 'X-Requested-With': 'XMLHttpRequest',\n Accept: 'application/json',\n }\n\n if (!(options.body instanceof FormData)) {\n defaultHeaders['Content-Type'] = 'application/json'\n }\n\n const finalHeaders = new Headers(defaultHeaders)\n if (options.headers) {\n if (options.headers instanceof Headers) {\n options.headers.forEach((v, k) => finalHeaders.set(k, v))\n } else {\n Object.entries(options.headers).forEach(([k, v]) => {\n if (v !== undefined) finalHeaders.set(k, v)\n })\n }\n }\n\n const csrfToken = Cookies.get('XSRF-TOKEN')\n if (csrfToken) {\n finalHeaders.set('X-XSRF-TOKEN', csrfToken)\n }\n\n let finalOptions = options\n if (options.body) {\n finalOptions = {\n ...options,\n body: options.body instanceof FormData ? options.body : JSON.stringify(options.body),\n }\n }\n\n let response = await fetch(url, {\n credentials: 'include',\n headers: finalHeaders,\n ...finalOptions,\n })\n\n if (response.status === 419) {\n Cookies.remove('XSRF-TOKEN')\n\n await getCsrfToken()\n\n const newToken = Cookies.get('XSRF-TOKEN')\n if (newToken) {\n finalHeaders.set('X-XSRF-TOKEN', newToken)\n }\n\n response = await fetch(url, {\n credentials: 'include',\n headers: finalHeaders,\n ...options,\n })\n\n if (!response.ok) {\n Cookies.remove('XSRF-TOKEN')\n Cookies.remove('yeverClientUser')\n window.location.href = '/login'\n return Promise.reject(new Error('CSRF token expirado'))\n }\n }\n\n const headers: Record<string, string> = {}\n response.headers.forEach((value, key) => {\n headers[key] = value\n })\n\n if (!response.ok) {\n const data = await response.json().catch(() => null)\n const errorMessage =\n typeof data === 'object' && data !== null && 'message' in data\n ? (data as { message: string }).message\n : 'Request failed'\n const error = new Error(errorMessage) as FetchError\n error.status = response.status\n error.response = {\n data,\n status: response.status,\n }\n throw error\n }\n\n let data = null\n if (options.responseType === 'blob') {\n data = await response.blob().catch(() => null)\n } else {\n data = await response.json().catch(() => null)\n }\n\n return {\n status: response.status,\n statusText: response.statusText,\n data,\n headers,\n }\n}\n","const parseParametersIntoUrl = (url: string, query: { [key: string]: string }, filtersAllowed?: string[]) => {\n let urlFiltered = url\n\n for (const key in query) {\n if (query && Object.keys(query).length > 0) {\n urlFiltered = urlFiltered.replace(`/${key}/`, `/${query[key]}/`)\n urlFiltered = urlFiltered.replace(`/${key}`, `/${query[key]}`)\n\n if (filtersAllowed && filtersAllowed.includes(key)) {\n if (urlFiltered.includes('?')) {\n if (key === 'searchNew') {\n urlFiltered = urlFiltered + `&${key}=${atob(query[key])}`\n } else {\n urlFiltered = urlFiltered + `&${key}=${query[key]}`\n }\n } else {\n if (key === 'searchNew') {\n urlFiltered = urlFiltered + `?${key}=${atob(query[key])}`\n } else {\n urlFiltered = urlFiltered + `?${key}=${query[key]}`\n }\n }\n }\n }\n }\n\n return urlFiltered\n}\n\nexport { parseParametersIntoUrl }\n\n","'use server'\n\nimport { headers } from 'next/headers'\nimport { redirect } from 'next/navigation'\n\nimport { PaginatedData } from '@/@types/paginate'\nimport { apiFetch } from '@/lib/fetch'\nimport { parseParametersIntoUrl } from '@/utils/parse-parameters-into-url'\n\nimport { ApiError, fetchServerSideProps } from './type'\n\nexport const fetchServerSide = async <T>({\n urlRequest,\n parseData,\n filtersAllowed,\n method = 'GET',\n body,\n}: fetchServerSideProps<T>) => {\n 'use server'\n\n try {\n const headersObject = Object.fromEntries((await headers()).entries())\n const searchParams = new URLSearchParams(headersObject.referer ? new URL(headersObject.referer).search : '')\n\n const query = Array.from(searchParams.entries()).reduce((acc: { [key: string]: string }, [key, value]) => {\n acc[key] = value\n return acc\n }, {})\n\n const url = parseParametersIntoUrl(urlRequest, query, filtersAllowed)\n const origin = headersObject.host\n const cookie = headersObject.cookie\n\n const xsrfToken = cookie?.match(/XSRF-TOKEN=([^;]+)/)?.[1]\n const requestHeaders: Record<string, string> = {\n Cookie: cookie,\n origin,\n }\n\n if (xsrfToken) {\n requestHeaders['X-XSRF-TOKEN'] = decodeURIComponent(xsrfToken)\n }\n\n let pagination: PaginatedData | undefined\n\n const res = await apiFetch({\n url,\n method: method as 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH',\n body: body as string | FormData | null | undefined,\n headers: requestHeaders,\n cache: 'no-store',\n })\n\n if (res?.data && typeof res.data === 'object' && 'paginate' in res.data) {\n pagination = (res.data as { paginate: PaginatedData }).paginate\n }\n\n const parsedData = parseData ? (parseData(res) as T) : (res as T)\n\n return {\n props: {\n pagination,\n data: parsedData,\n },\n }\n } catch (error) {\n const apiError = error as ApiError\n\n switch (apiError.response?.status) {\n case 401:\n redirect('/login')\n case 403:\n return {\n props: {\n error: {\n status: 403,\n message: 'Você não tem permissão para executar essa ação',\n errors: {},\n },\n data: null,\n },\n }\n case 404:\n return {\n props: {\n error: {\n status: 404,\n message: apiError.response.data?.message || 'Recurso não encontrado',\n errors: apiError.response?.data?.errors || {},\n },\n data: null,\n },\n }\n case 422:\n return {\n props: {\n error: {\n status: 422,\n message: apiError.response.data?.message || 'Erro de validação',\n errors: apiError.response?.data?.errors,\n },\n },\n }\n case 500:\n return {\n props: {\n error: {\n status: 500,\n message:\n apiError.response.data?.message ||\n 'Ocorreu um erro durante o processamento dessa requisição. A Yever foi notificada e estamos atuando para sanar o problema.',\n errors: {},\n },\n },\n }\n default:\n if (apiError.response?.data?.errors || apiError.response?.data?.message) {\n return {\n props: {\n error: {\n status: apiError.response.status,\n message: apiError.response.data?.message,\n errors: apiError.response.data?.errors,\n },\n },\n }\n }\n redirect('/500')\n }\n }\n}\n"]}
|