UNPKG

stellate

Version:

The CLI you need to work with Stellate from your CLI. See https://docs.stellate.co/docs/cli for the complete documentation.

70 lines (67 loc) 1.93 kB
type TimeWindow = `${number}${'s' | 'm' | 'h'}` | { value: number; unit: 'seconds' | 'minutes' | 'hours'; }; interface EdgeRequest { method: string; path: string; queryString: string; queryParams: Record<string, string | string[]>; headers: Record<string, string | string[]>; ip: string; jwt: Record<string, unknown> | null; operation: 'query' | 'mutation' | 'subscription'; rootFields: { name: string; alias: string | null; args: Record<string, unknown>; }[]; } interface ComplexityLimit { type: 'QueryComplexity'; budget: number; warning?: number; window: TimeWindow; } interface RequestLimit { type: 'RequestCount'; budget: number; warning?: number; window: TimeWindow; } type RateLimitGroupBy = 'ip' | { header: string; } | { cookie: string; } | { jwt: string; } | { consumerIdentifier: string; }; interface BaseRateLimitRule { name: string; description?: string; state?: 'enabled' | 'disabled' | 'dryRun'; allowList?: readonly string[]; limit: ComplexityLimit | RequestLimit; } type DynamicRateLimitRule = BaseRateLimitRule & ({ groupBy: RateLimitGroupBy; } | { group: string | number; }); declare function isQuery(req: EdgeRequest): boolean; declare function isMutation(req: EdgeRequest): boolean; declare function hasRootField(req: EdgeRequest, rootField: string): boolean; type FieldConfigMap = { [rootFieldName: string]: Omit<RequestLimit, 'type'>; }; type OmitLimitKey<Type> = { [Key in keyof Type as Exclude<Key, 'limit'>]: Type[Key]; }; type ByFieldConfig = OmitLimitKey<DynamicRateLimitRule> & { queryFields?: FieldConfigMap; mutationFields?: FieldConfigMap; }; declare function byField(req: EdgeRequest, { queryFields, mutationFields, ...baseConfig }: ByFieldConfig): DynamicRateLimitRule[]; export { byField, hasRootField, isMutation, isQuery };