M errors/errors.go => errors/errors.go +2 -0
@@ 37,6 37,7 @@ var (
Unsupported ErrorCode = "ERR_UNSUPPORTED"
Unauthorized ErrorCode = "ERR_UNAUTHORIZED"
InternalError ErrorCode = "ERR_INTERNAL"
+ Timeout ErrorCode = "ERR_TIMEOUT"
)
// Error codes as Go errors
@@ 46,4 47,5 @@ var (
ErrUnsupported = New(Unsupported, "Not supported")
ErrUnauthorized = New(Unauthorized, "Unauthorized")
ErrInternalError = New(InternalError, "Internal server error")
+ ErrTimeout = New(Timeout, "Operation timed out")
)
M server/server.go => server/server.go +9 -0
@@ 5,6 5,7 @@ import (
"database/sql"
"encoding/base64"
"encoding/json"
+ "errors"
"fmt"
"log"
"net"
@@ 33,12 34,14 @@ import (
"github.com/prometheus/client_golang/prometheus/promauto"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/vaughan0/go-ini"
+ "github.com/vektah/gqlparser/v2/gqlerror"
"git.sr.ht/~sircmpwn/core-go/auth"
"git.sr.ht/~sircmpwn/core-go/config"
"git.sr.ht/~sircmpwn/core-go/crypto"
"git.sr.ht/~sircmpwn/core-go/database"
"git.sr.ht/~sircmpwn/core-go/email"
+ coreerrors "git.sr.ht/~sircmpwn/core-go/errors"
"git.sr.ht/~sircmpwn/core-go/feature"
"git.sr.ht/~sircmpwn/core-go/redis"
)
@@ 146,6 149,12 @@ func (server *Server) WithSchema(
MaxMemory: 33554432, // 32 MiB (up to this handled in memory)
MaxUploadSize: 1073741824, // 1 GiB (TODO: configurable?)
})
+ srv.SetErrorPresenter(func(ctx context.Context, err error) *gqlerror.Error {
+ if errors.Is(err, context.DeadlineExceeded) {
+ return coreerrors.ErrTimeout
+ }
+ return graphql.DefaultErrorPresenter(ctx, err)
+ })
if debug {
srv.AroundOperations(func(ctx context.Context, next graphql.OperationHandler) graphql.ResponseHandler {