GraphQL large integer error: Int cannot represent non 32-bit signed integer value

Viewed 28671

I´m trying to store a UNIX timestamp in MongoDB using GraphQL, but it seens that GraphQL has a limit to handle integers. See the mutation below:

const addUser = {
    type: UserType,
    description: 'Add an user',
    args: {
        data: {
            name: 'data',
            type: new GraphQLNonNull(CompanyInputType)
        }
    },
    resolve(root, params) {

        params.data.creationTimestamp = Date.now();

        const model = new UserModel(params.data);
        const saved = model.save();

        if (!saved)
            throw new Error('Error adding user');

        return saved;
    }
}

Result:

  "errors": [
    {
      "message": "Int cannot represent non 32-bit signed integer value: 1499484833027",
      "locations": [
        {
          "line": 14,
          "column": 5
        }
      ],
      "path": [
        "addUser",
        "creationTimestamp"
      ]
    }

I´m currently using GraphQLInteger for this field on type definition:

creationTimestamp: { 
    type: GraphQLInt
}

How can I solve that situation if there is no larger GraphQLInt available in GraphQL ?

2 Answers

⚠️Not recommended...

... but if you want a quick fix (maybe you don't have the time to implement a custom scalar), you can use the Float type instead of Int.

Related