Nice Pottery Mug

    @envelop/rate-limiter
    TypeScript icon, indicating that this package has built-in type declarations

    4.0.4 • Public • Published

    @envelop/rate-limiter

    This plugins uses graphql-rate-limit in order to limit the rate of calling queries and mutations.

    Getting Started

    yarn add @envelop/rate-limiter
    

    Usage Example

    import { parse, validate, specifiedRules, execute, subscribe } from 'graphql'
    import { envelop, useEngine } from '@envelop/core'
    import { useRateLimiter, IdentifyFn } from '@envelop/rate-limiter'
    
    const identifyFn: IdentifyFn = async context => {
      return context.request.ip
    }
    
    const getEnveloped = envelop({
      plugins: [
        useEngine({ parse, validate, specifiedRules, execute, subscribe }),
        // ... other plugins ...
        useRateLimiter({
          identifyFn
        })
      ]
    })

    By default, we assume that you have the GraphQL directive definition as part of your GraphQL schema (directive @rateLimit(max: Int, window: String, message: String) on FIELD_DEFINITION).

    Then, in your GraphQL schema SDL, you can add @rateLimit directive to your fields, and the limiter will get called only while resolving that specific field:

    type Query {
      posts: [Post]! @rateLimit(
        window: "5s", // time interval window for request limit quota
        max: 10,  // maximum requests allowed in time window
        message: "Too many calls!"  // quota reached error message
      )
      # unlimitedField: String
    }

    You can apply that directive to any GraphQL field definition, not only to root fields.

    Error message interpolation

    The message argument of the @rateLimit directive can be dynamic. You {{var}} or {{ var }} syntax to interpolate variables.

    type Query {
      posts: [Post]! @rateLimit(window: "5s", max: 10, message: "Too many calls made by {{ id }}")
    }

    The only available variable so far is id.

    Notes

    You can find more details here: hhttps://github.com/teamplanes/graphql-rate-limit#readme

    Keywords

    none

    Install

    npm i @envelop/rate-limiter

    DownloadsWeekly Downloads

    704

    Version

    4.0.4

    License

    MIT

    Unpacked Size

    12.3 kB

    Total Files

    11

    Last publish

    Collaborators

    • dotansimha