{
  "name": "throttlekit",
  "version": "1.7.0",
  "description": "Rate limiting you can prove: a machine-checked, fleet-size-independent overshoot bound on one small core — pure-function algorithms, one atomic store across in-memory/Redis/Postgres (proven bit-identical), a 169ns sync API, and provable two-tier leasing (GALE/TALE).",
  "type": "module",
  "license": "MIT",
  "author": "Ameya Borkar",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/AmeyaBorkar/throttlekit.git"
  },
  "homepage": "https://github.com/AmeyaBorkar/throttlekit#readme",
  "bugs": {
    "url": "https://github.com/AmeyaBorkar/throttlekit/issues"
  },
  "keywords": [
    "rate-limit",
    "rate-limiter",
    "ratelimit",
    "gcra",
    "token-bucket",
    "leaky-bucket",
    "sliding-window",
    "fixed-window",
    "redis",
    "postgres",
    "postgresql",
    "dynamodb",
    "aws",
    "lua",
    "throttle",
    "backpressure",
    "adaptive-concurrency",
    "express",
    "fastify",
    "koa",
    "hono",
    "nextjs",
    "sveltekit",
    "remix",
    "elysia",
    "trpc",
    "grpc",
    "aws-lambda",
    "middleware",
    "fetch",
    "edge",
    "cloudflare-workers",
    "deno",
    "deno-kv",
    "ddos",
    "llm"
  ],
  "sideEffects": false,
  "engines": {
    "node": ">=18"
  },
  "exports": {
    ".": {
      "import": {
        "types": "./dist/index.d.ts",
        "default": "./dist/index.js"
      },
      "require": {
        "types": "./dist/index.d.cts",
        "default": "./dist/index.cjs"
      }
    },
    "./redis": {
      "import": {
        "types": "./dist/redis.d.ts",
        "default": "./dist/redis.js"
      },
      "require": {
        "types": "./dist/redis.d.cts",
        "default": "./dist/redis.cjs"
      }
    },
    "./postgres": {
      "import": {
        "types": "./dist/postgres.d.ts",
        "default": "./dist/postgres.js"
      },
      "require": {
        "types": "./dist/postgres.d.cts",
        "default": "./dist/postgres.cjs"
      }
    },
    "./dynamodb": {
      "import": {
        "types": "./dist/dynamodb.d.ts",
        "default": "./dist/dynamodb.js"
      },
      "require": {
        "types": "./dist/dynamodb.d.cts",
        "default": "./dist/dynamodb.cjs"
      }
    },
    "./deno": {
      "import": {
        "types": "./dist/deno.d.ts",
        "default": "./dist/deno.js"
      },
      "require": {
        "types": "./dist/deno.d.cts",
        "default": "./dist/deno.cjs"
      }
    },
    "./cloudflare": {
      "import": {
        "types": "./dist/cloudflare.d.ts",
        "default": "./dist/cloudflare.js"
      },
      "require": {
        "types": "./dist/cloudflare.d.cts",
        "default": "./dist/cloudflare.cjs"
      }
    },
    "./express": {
      "import": {
        "types": "./dist/express.d.ts",
        "default": "./dist/express.js"
      },
      "require": {
        "types": "./dist/express.d.cts",
        "default": "./dist/express.cjs"
      }
    },
    "./fetch": {
      "import": {
        "types": "./dist/fetch.d.ts",
        "default": "./dist/fetch.js"
      },
      "require": {
        "types": "./dist/fetch.d.cts",
        "default": "./dist/fetch.cjs"
      }
    },
    "./hono": {
      "import": {
        "types": "./dist/hono.d.ts",
        "default": "./dist/hono.js"
      },
      "require": {
        "types": "./dist/hono.d.cts",
        "default": "./dist/hono.cjs"
      }
    },
    "./next": {
      "import": {
        "types": "./dist/next.d.ts",
        "default": "./dist/next.js"
      },
      "require": {
        "types": "./dist/next.d.cts",
        "default": "./dist/next.cjs"
      }
    },
    "./fastify": {
      "import": {
        "types": "./dist/fastify.d.ts",
        "default": "./dist/fastify.js"
      },
      "require": {
        "types": "./dist/fastify.d.cts",
        "default": "./dist/fastify.cjs"
      }
    },
    "./koa": {
      "import": {
        "types": "./dist/koa.d.ts",
        "default": "./dist/koa.js"
      },
      "require": {
        "types": "./dist/koa.d.cts",
        "default": "./dist/koa.cjs"
      }
    },
    "./grpc": {
      "import": {
        "types": "./dist/grpc.d.ts",
        "default": "./dist/grpc.js"
      },
      "require": {
        "types": "./dist/grpc.d.cts",
        "default": "./dist/grpc.cjs"
      }
    },
    "./lambda": {
      "import": {
        "types": "./dist/lambda.d.ts",
        "default": "./dist/lambda.js"
      },
      "require": {
        "types": "./dist/lambda.d.cts",
        "default": "./dist/lambda.cjs"
      }
    },
    "./sveltekit": {
      "import": {
        "types": "./dist/sveltekit.d.ts",
        "default": "./dist/sveltekit.js"
      },
      "require": {
        "types": "./dist/sveltekit.d.cts",
        "default": "./dist/sveltekit.cjs"
      }
    },
    "./remix": {
      "import": {
        "types": "./dist/remix.d.ts",
        "default": "./dist/remix.js"
      },
      "require": {
        "types": "./dist/remix.d.cts",
        "default": "./dist/remix.cjs"
      }
    },
    "./elysia": {
      "import": {
        "types": "./dist/elysia.d.ts",
        "default": "./dist/elysia.js"
      },
      "require": {
        "types": "./dist/elysia.d.cts",
        "default": "./dist/elysia.cjs"
      }
    },
    "./trpc": {
      "import": {
        "types": "./dist/trpc.d.ts",
        "default": "./dist/trpc.js"
      },
      "require": {
        "types": "./dist/trpc.d.cts",
        "default": "./dist/trpc.cjs"
      }
    },
    "./nest": {
      "import": {
        "types": "./dist/nest.d.ts",
        "default": "./dist/nest.js"
      },
      "require": {
        "types": "./dist/nest.d.cts",
        "default": "./dist/nest.cjs"
      }
    },
    "./otel": {
      "import": {
        "types": "./dist/otel.d.ts",
        "default": "./dist/otel.js"
      },
      "require": {
        "types": "./dist/otel.d.cts",
        "default": "./dist/otel.cjs"
      }
    },
    "./testkit": {
      "import": {
        "types": "./dist/testkit.d.ts",
        "default": "./dist/testkit.js"
      },
      "require": {
        "types": "./dist/testkit.d.cts",
        "default": "./dist/testkit.cjs"
      }
    },
    "./config": {
      "import": {
        "types": "./dist/config.d.ts",
        "default": "./dist/config.js"
      },
      "require": {
        "types": "./dist/config.d.cts",
        "default": "./dist/config.cjs"
      }
    },
    "./twotier": {
      "import": {
        "types": "./dist/twotier.d.ts",
        "default": "./dist/twotier.js"
      },
      "require": {
        "types": "./dist/twotier.d.cts",
        "default": "./dist/twotier.cjs"
      }
    },
    "./federation": {
      "import": {
        "types": "./dist/federation.d.ts",
        "default": "./dist/federation.js"
      },
      "require": {
        "types": "./dist/federation.d.cts",
        "default": "./dist/federation.cjs"
      }
    },
    "./policy": {
      "import": {
        "types": "./dist/policy.d.ts",
        "default": "./dist/policy.js"
      },
      "require": {
        "types": "./dist/policy.d.cts",
        "default": "./dist/policy.cjs"
      }
    },
    "./package.json": "./package.json"
  },
  "main": "./dist/index.cjs",
  "module": "./dist/index.js",
  "types": "./dist/index.d.ts",
  "bin": {
    "throttlekit": "./dist/cli.js"
  },
  "files": ["dist", "README.md", "CHANGELOG.md", "STABILITY.md", "BENCH.md", "LICENSE"],
  "scripts": {
    "build": "tsup",
    "dev": "tsup --watch",
    "typecheck": "tsc --noEmit",
    "test": "vitest run",
    "test:watch": "vitest",
    "test:cov": "vitest run --coverage",
    "mutation": "stryker run",
    "bench": "tsx bench/run.ts",
    "bench:compare": "tsx bench/compare.ts",
    "bench:gate": "tsx bench/gate.ts",
    "bench:baseline": "tsx bench/gate.ts --update",
    "bench:lens": "tsx bench/lens-taps.ts",
    "bench:lease": "tsx bench/lease.ts",
    "bench:fleet": "tsx server/bench/fleet.ts",
    "bench:check": "tsx server/bench/check.ts",
    "wire:vectors": "tsx wire/generate.ts",
    "wire:scripts": "tsx wire/scripts/generate-scripts.ts",
    "wire": "npm run wire:vectors && npm run wire:scripts",
    "wire:lint": "buf lint",
    "wire:breaking": "buf breaking --against wire/throttlekit.baseline.binpb",
    "wire:baseline": "buf build -o wire/throttlekit.baseline.binpb",
    "wire:check": "npm run wire:lint && npm run wire:breaking",
    "lint": "biome check .",
    "lint:fix": "biome check --write .",
    "format": "biome format --write .",
    "publint": "publint",
    "attw": "attw --pack . --profile node16",
    "check": "npm run lint && npm run typecheck && npm run test && npm run check:package",
    "check:package": "npm run build && npm run publint && npm run attw",
    "prepublishOnly": "npm run build"
  },
  "devDependencies": {
    "@arethetypeswrong/cli": "^0.18.3",
    "@biomejs/biome": "^1.9.4",
    "@bufbuild/buf": "^1.70.0",
    "@opentelemetry/api": "^1.9.0",
    "@stryker-mutator/core": "^9.6.1",
    "@stryker-mutator/vitest-runner": "^9.6.1",
    "@types/express": "^4.17.21",
    "@types/koa": "^3.0.3",
    "@types/node": "^22.10.2",
    "@types/pg": "^8.20.0",
    "@vitest/coverage-v8": "^4.1.8",
    "express": "^4.21.2",
    "express-rate-limit": "^8.5.2",
    "fast-check": "^3.23.1",
    "fastify": "^5.8.5",
    "hono": "^4.12.23",
    "ioredis": "^5.4.2",
    "koa": "^3.2.1",
    "pg": "^8.21.0",
    "publint": "^0.3.21",
    "rate-limiter-flexible": "^11.1.0",
    "redis": "^4.7.0",
    "tsup": "^8.3.5",
    "tsx": "^4.19.2",
    "typescript": "^5.7.2",
    "vitest": "^4.1.8"
  },
  "peerDependencies": {
    "@opentelemetry/api": ">=1.7.0",
    "express": ">=4",
    "fastify": ">=4",
    "hono": ">=4",
    "ioredis": ">=5",
    "koa": ">=2",
    "pg": ">=8"
  },
  "peerDependenciesMeta": {
    "@opentelemetry/api": {
      "optional": true
    },
    "express": {
      "optional": true
    },
    "fastify": {
      "optional": true
    },
    "hono": {
      "optional": true
    },
    "ioredis": {
      "optional": true
    },
    "koa": {
      "optional": true
    },
    "pg": {
      "optional": true
    }
  }
}
