1 | import { GraphQLError } from 'graphql';
|
2 | export 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 | };
|
13 | export 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 | }
|