UNPKG

1.72 kBJavaScriptView Raw
1import { GraphQLError } from 'graphql';
2export const defaultExtractPersistedOperationId = (params) => {
3 if (params.extensions != null &&
4 typeof params.extensions === 'object' &&
5 params.extensions?.persistedQuery != null &&
6 typeof params.extensions?.persistedQuery === 'object' &&
7 params.extensions?.persistedQuery.version === 1 &&
8 typeof params.extensions?.persistedQuery.sha256Hash === 'string') {
9 return params.extensions?.persistedQuery.sha256Hash;
10 }
11 return null;
12};
13export function usePersistedOperations({ getPersistedOperation, allowArbitraryOperations = false, extractPersistedOperationId = defaultExtractPersistedOperationId, }) {
14 return {
15 async onParams({ request, params, setParams }) {
16 if (params.query) {
17 if ((typeof allowArbitraryOperations === 'boolean'
18 ? allowArbitraryOperations
19 : await allowArbitraryOperations(request)) === false) {
20 throw new GraphQLError('PersistedQueryOnly');
21 }
22 return;
23 }
24 const persistedOperationKey = extractPersistedOperationId(params);
25 if (persistedOperationKey == null) {
26 throw new GraphQLError('PersistedQueryNotFound');
27 }
28 const persistedQuery = await getPersistedOperation(persistedOperationKey);
29 if (persistedQuery == null) {
30 throw new GraphQLError('PersistedQueryNotFound');
31 }
32 setParams({
33 query: persistedQuery,
34 variables: params.variables,
35 extensions: params.extensions,
36 });
37 },
38 };
39}