diff --git a/src/runtime/composables/gql-async-query.ts b/src/runtime/composables/gql-async-query.ts index 8583fdf..a8ca591 100644 --- a/src/runtime/composables/gql-async-query.ts +++ b/src/runtime/composables/gql-async-query.ts @@ -8,6 +8,7 @@ import { hashPasswords } from '../functions/graphql-meta'; import { useAuthState } from '../states/auth'; import { useAuth } from './use-auth'; import { useHelper } from './use-helper'; +import { useRequestOptions } from './use-request-options'; export async function gqlAsyncQuery(method: string, options: IGraphQLOptions = {}): Promise> { const { $graphql, _meta } = useNuxtApp(); @@ -15,6 +16,7 @@ export async function gqlAsyncQuery(method: string, options: IGraphQLOp const { accessTokenState } = useAuthState(); const { checkTokenAndRenew } = useAuth(); const { generateUniqueHash } = useHelper(); + const { getHeaders } = useRequestOptions(); // Check parameters if (!method) { @@ -123,8 +125,9 @@ export async function gqlAsyncQuery(method: string, options: IGraphQLOp await callWithNuxt(_nuxtApp, checkTokenAndRenew); const requestHeaders: Record = { - authorization: `Bearer ${accessTokenState.value}`, + ...getHeaders(), ...(options.headers || {}), + authorization: `Bearer ${accessTokenState.value}`, }; let result = await $graphql.default.request(documentNode, variables, requestHeaders); diff --git a/src/runtime/composables/gql-mutation.ts b/src/runtime/composables/gql-mutation.ts index c14a2b8..3d09c6c 100644 --- a/src/runtime/composables/gql-mutation.ts +++ b/src/runtime/composables/gql-mutation.ts @@ -8,12 +8,14 @@ import type { IGraphQLOptions } from '../interfaces/graphql-options.interface'; import { hashPasswords } from '../functions/graphql-meta'; import { useAuthState } from '../states/auth'; import { useAuth } from './use-auth'; +import { useRequestOptions } from './use-request-options'; export async function gqlMutation(method: string, options: IGraphQLOptions = {}): Promise<{ data: T; error: GraphqlError }> { const { $graphql, _meta } = useNuxtApp(); const _nuxtApp = useNuxtApp(); const { accessTokenState, refreshTokenState } = useAuthState(); const { checkTokenAndRenew } = useAuth(); + const { getHeaders } = useRequestOptions(); // Check parameters if (!method) { @@ -133,8 +135,9 @@ export async function gqlMutation(method: string, options: IGraphQLOpti } const requestHeaders: Record = { - authorization: `Bearer ${method === 'refreshToken' ? refreshTokenState.value : accessTokenState.value}`, + ...getHeaders(), ...(options.headers || {}), + authorization: `Bearer ${method === 'refreshToken' ? refreshTokenState.value : accessTokenState.value}`, }; let data; diff --git a/src/runtime/composables/gql-query.ts b/src/runtime/composables/gql-query.ts index 36de856..62f3dfe 100644 --- a/src/runtime/composables/gql-query.ts +++ b/src/runtime/composables/gql-query.ts @@ -8,12 +8,14 @@ import type { IGraphQLOptions } from '../interfaces/graphql-options.interface'; import { hashPasswords } from '../functions/graphql-meta'; import { useAuthState } from '../states/auth'; import { useAuth } from './use-auth'; +import { useRequestOptions } from './use-request-options'; export async function gqlQuery(method: string, options: IGraphQLOptions = {}): Promise<{ data: T; error: GraphqlError | null }> { const { $graphql, _meta } = useNuxtApp(); const _nuxtApp = useNuxtApp(); const { accessTokenState } = useAuthState(); const { checkTokenAndRenew } = useAuth(); + const { getHeaders } = useRequestOptions(); // Check parameters if (!method) { @@ -122,8 +124,9 @@ export async function gqlQuery(method: string, options: IGraphQLOptions await callWithNuxt(_nuxtApp, checkTokenAndRenew); const requestHeaders: Record = { - authorization: `Bearer ${accessTokenState.value}`, + ...getHeaders(), ...(options.headers || {}), + authorization: `Bearer ${accessTokenState.value}`, }; let data = null; diff --git a/src/runtime/composables/use-auth-fetch.ts b/src/runtime/composables/use-auth-fetch.ts index a57c70f..96fba9b 100644 --- a/src/runtime/composables/use-auth-fetch.ts +++ b/src/runtime/composables/use-auth-fetch.ts @@ -4,6 +4,7 @@ import { useRuntimeConfig } from 'nuxt/app'; import { useAuthState } from '../states/auth'; import { useAuth } from './use-auth'; +import { useRequestOptions } from './use-request-options'; export function useAuthFetch< DefaultT = unknown, @@ -14,6 +15,7 @@ export function useAuthFetch< >(request: R, opts?: O): Promise>> { const { requestNewToken } = useAuth(); const { accessTokenState } = useAuthState(); + const { getHeaders } = useRequestOptions(); const config = useRuntimeConfig(); // @ts-expect-error - because of nice types from ofetch <3 @@ -23,6 +25,7 @@ export function useAuthFetch< async onRequest(data: any) { if (accessTokenState.value) { data.options.headers = { + ...getHeaders(), ...data.options.headers, Authorization: `Bearer ${accessTokenState.value}`, }; diff --git a/src/runtime/composables/use-request-options.ts b/src/runtime/composables/use-request-options.ts new file mode 100644 index 0000000..26312c1 --- /dev/null +++ b/src/runtime/composables/use-request-options.ts @@ -0,0 +1,14 @@ +export function useRequestOptions() { + let headers: Record = {}; + const setHeaders = (newHeaders: Record) => { + headers = newHeaders; + }; + const getHeaders = () => { + return headers; + }; + + return { + getHeaders, + setHeaders, + }; +} diff --git a/src/runtime/plugins/ws.client.ts b/src/runtime/plugins/ws.client.ts index 0692501..1b4c085 100644 --- a/src/runtime/plugins/ws.client.ts +++ b/src/runtime/plugins/ws.client.ts @@ -3,6 +3,8 @@ import { createClient } from 'graphql-ws'; import { defineNuxtPlugin, useNuxtApp, useRuntimeConfig } from 'nuxt/app'; import { reactive } from 'vue'; +import { useRequestOptions } from '../composables/use-request-options'; + export const wsHeaders = reactive>({}); export default defineNuxtPlugin({ @@ -10,12 +12,14 @@ export default defineNuxtPlugin({ async setup() { const nuxtApp = useNuxtApp(); const { wsUrl } = useRuntimeConfig().public; + const { getHeaders } = useRequestOptions(); const client = createClient({ connectionParams: async () => { const { accessTokenState } = useAuthState(); return { Authorization: 'Bearer ' + accessTokenState.value, + ...getHeaders(), ...wsHeaders, }; },