Custom GraphQL Resolvers
You can extend the GraphQL API generated by OpenReader with custom queries. To do that, define GraphQL query resolvers in the designated modulesrc/server-extension/resolvers.
All resolver classes (including any additional types) must be exported by
src/server-extension/resolvers/index.ts.type-graphql dependency, add it with:
Examples
Simple entity counter
evm template:
1
Grab a test squid
Follow the instructions in squid development guide.
2
Install type-graphql
3
Save the example code
Save the example code to
src/server-extension/resolver.ts.4
Re-export CountResolver
Re-export
CountResolver at src/server-extension/resolvers/index.ts:5
Rebuild and restart
Rebuild the squid with
npm run build and (re)start the GraphQL server with npx squid-graphql-server.totalBurns selection will appear in the GraphiQL playground.
Custom SQL query
More examples
Some great examples of@subsquid/graphql-server-based custom resolvers can be spotted in the wild in the Rubick repo by KodaDot.
For more examples of resolvers, see TypeGraphQL examples repo.
Logging
To keep logging consistent across the entire GraphQL server, use@subsquid/logger:
LOG here is a logger object identical to ctx.log interface-wise.
Interaction with global settings
--max-response-sizeused for DoS protection is ignored in custom resolvers.- Caching works on custom queries in exactly the same way as it does on the schema-derived queries.
Troubleshooting
Reflect.getMetadata is not a function
Add import 'reflect-metadata' on top of your custom resolver module and install the package if necessary.
