|
| 1 | +import type { NitroFetchOptions, NitroFetchRequest } from 'nitropack' |
| 2 | + |
| 3 | +export function useRoadizFetch<DefaultR extends NitroFetchRequest = NitroFetchRequest>( |
| 4 | + options?: NitroFetchOptions<DefaultR>, |
| 5 | +) { |
| 6 | + return $fetch.create({ |
| 7 | + onRequest(context) { |
| 8 | + /* |
| 9 | + * Add preview token to every request if preview mode is enabled. |
| 10 | + */ |
| 11 | + const { token, isActive } = useRoadizPreview() |
| 12 | + |
| 13 | + if (isActive.value && token.value) { |
| 14 | + context.options.query = { |
| 15 | + ...context.options.query, |
| 16 | + _preview: '1', |
| 17 | + } |
| 18 | + |
| 19 | + context.options.headers = { |
| 20 | + ...context.options.headers, |
| 21 | + Authorization: `Bearer ${token.value}`, |
| 22 | + } |
| 23 | + } |
| 24 | + /* |
| 25 | + * Add locale to every request if it is not a web response request. |
| 26 | + */ |
| 27 | + if (context.request.toString() !== '/web_response_by_path') { |
| 28 | + const { $i18n } = useNuxtApp() |
| 29 | + |
| 30 | + context.options.query = { |
| 31 | + ...context.options.query, |
| 32 | + _locale: $i18n?.locale.value || $i18n?.defaultLocale?.toString(), |
| 33 | + } |
| 34 | + } |
| 35 | + }, |
| 36 | + onResponseError(context) { |
| 37 | + throw createError({ |
| 38 | + statusCode: context.response.status, |
| 39 | + message: context.response.statusText, |
| 40 | + }) |
| 41 | + }, |
| 42 | + headers: { |
| 43 | + 'accept-encoding': 'gzip, deflate', |
| 44 | + accept: 'application/ld+json', |
| 45 | + }, |
| 46 | + baseURL: useApiUrl(), |
| 47 | + ...options, |
| 48 | + }) |
| 49 | +} |
0 commit comments