@envelop/resource-limitations
Version:
A rate-limit implementation based on resource limitations and static calculation of the score (similar to GitHub GraphQL API)
48 lines (47 loc) • 1.79 kB
text/typescript
import { ExecutionArgs } from "graphql";
import { Plugin } from "@envelop/core";
import { ExtendedValidationRule } from "@envelop/extended-validation";
//#region src/index.d.ts
declare const defaultNodeCostLimit = 500000;
declare const defaultPaginationArgumentMaximum = 100;
declare const defaultPaginationArgumentMinimum = 1;
type ResourceLimitationValidationRuleParams = {
nodeCostLimit: number;
paginationArgumentMaximum: number;
paginationArgumentMinimum: number;
paginationArgumentTypes?: string[];
reportNodeCost?: (cost: number, executionArgs: ExecutionArgs) => void;
};
/**
* Validate whether a user is allowed to execute a certain GraphQL operation.
*/
declare const ResourceLimitationValidationRule: (params: ResourceLimitationValidationRuleParams) => ExtendedValidationRule;
type UseResourceLimitationsParams = {
/**
* The node cost limit for rejecting a operation.
* @default 500000
*/
nodeCostLimit?: number;
/**
* The custom scalar types accepted for connection arguments.
*/
paginationArgumentScalars?: string[];
/**
* The maximum value accepted for connection arguments.
* @default 100
*/
paginationArgumentMaximum?: number;
/**
* The minimum value accepted for connection arguments.
* @default 1
*/
paginationArgumentMinimum?: number;
/**
* Whether the resourceLimitations.nodeCost field should be included within the execution result extensions map.
* @default false
*/
extensions?: boolean;
};
declare const useResourceLimitations: (params?: UseResourceLimitationsParams) => Plugin;
//#endregion
export { ResourceLimitationValidationRule, ResourceLimitationValidationRuleParams, defaultNodeCostLimit, defaultPaginationArgumentMaximum, defaultPaginationArgumentMinimum, useResourceLimitations };