Skip to main content

Custom Mutations

As a product gets more complicated, the need to eventually add custom mutations to the schema arises. This shows how to do so.

Auth Example

A common thing for a lot of applications is to implement authentication to log the user in. This shows a possible way to implement it:

export class UserAuthInput {
class: 'UserAuthInput',
type: GraphQLString,
emailAddress: string;

class: 'UserAuthInput',
type: GraphQLString,
password: string;

constructor(emailAddress: string, password: string) {
this.emailAddress = emailAddress;
this.password = password;

export class UserAuthPayload {
class: "UserAuthPayload",
type: GraphQLID,
viewerID: ID;

constructor(viewerID: ID) {
this.viewerID = viewerID;

export class AuthResolver {
class: "AuthResolver",
name: "userAuth",
type: UserAuthPayload,
async: true,
args: [
name: "input",
type: "UserAuthInput",
async userAuth(
context: RequestContext,
input: UserAuthInput,
): Promise<UserAuthPayload> {
return new UserAuthPayload("1");

This updates the GraphQL schema as follows:


type Mutation {
userAuth(input: UserAuthInput!): UserAuthPayload!

type UserAuthPayload {
viewerID: ID!

input UserAuthInput {
emailAddress: String!
password: String!

Here's what's happening here:

  • This adds a new input type UserAuthInput to the GraphQLSchema represented by the class UserAuthInput.
  • UserAuthInput object has 2 fields:
    • emailAddress of type String
    • password of type String
  • This adds a new object type UserAuthPayload to the GraphQLSchema represented by the class UserAuthPayload
  • UserAuthPayload object has 1 field:
    • viewerID of type ID
  • New field userAuth added to Mutation Type which takes UserAuthInput input and returns UserAuthPayload.

This uses the following concepts to implement this:


This adds a new field to the GraphQL Mutation type. See example usage above.

Accepts the following options which overlap with gqlField:

  • class for the name of the class the function is defined in.
  • name for the name of the GraphQL field
  • description of the field
  • type: type returned by the field