{"_id":"@donkeylabs/bun-server-core","name":"@donkeylabs/bun-server-core","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@donkeylabs/bun-server-core","version":"0.1.0","description":"Bun server utilities - routing, database, caching, auth, and middleware","type":"module","main":"src/index.ts","module":"src/index.ts","types":"src/index.ts","exports":{".":"./src/index.ts"},"scripts":{"test":"bun test"},"keywords":["bun","server","express","kysely","sqlite","typescript"],"author":{"name":"donkeylabs"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/donkeylabs-io/donkeylabs.git","directory":"packages/bun-server-core"},"devDependencies":{"@types/bun":"^1.3.0","@types/cors":"^2.8.19","@types/express":"^5.0.3","@types/geoip-lite":"^1.4.4","bun-types":"^1.3.0","jsonwebtoken":"^9.0.2","zod":"^4.1.12"},"peerDependencies":{"typescript":"^5.9.3"},"dependencies":{"@donkeylabs/audit-logs":"^0.1.0","@donkeylabs/core":"^0.1.0","@types/jsonwebtoken":"^9.0.10","@types/nodemailer":"^6.4.20","@types/qrcode":"^1.5.5","chalk":"^5.6.2","cors":"^2.8.5","express":"^5.1.0","geoip-lite":"^1.4.10","kysely":"^0.28.8","kysely-bun-sqlite":"^0.4.0","kysely-codegen":"^0.18.5","nodemailer":"^7.0.9","otplib":"^12.0.1","qrcode":"^1.5.4","superjson":"^2.2.2","ua-parser-js":"^2.0.6"},"gitHead":"251335bb027049e9d70c5ae54ac032837a7f5e29","_id":"@donkeylabs/bun-server-core@0.1.0","bugs":{"url":"https://github.com/donkeylabs-io/donkeylabs/issues"},"homepage":"https://github.com/donkeylabs-io/donkeylabs#readme","_nodeVersion":"25.2.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-sp3gUbDC/ePHiA+UuGYfGV6Kg8OuDrpMJpWvw31iKlFP0g4GX96eguLTOYJpg2C0FrkK4LSbtL4hCCtoa7zDpA==","shasum":"611e8024d44355b26ab9d2d1992760fb0407f4a9","tarball":"https://registry.npmjs.org/@donkeylabs/bun-server-core/-/bun-server-core-0.1.0.tgz","fileCount":49,"unpackedSize":192776,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD4UzPACuHE6G4VHeo5R9hsyijT3R6j1MCVMXOp+ZXikwIgBBWsz7+zoDxaT12LMO8ROdq+bziT1dCC17PEecVa/bA="}]},"_npmUser":{"name":"donkey-agent","email":"pacosw@pitsafrp.com"},"directories":{},"maintainers":[{"name":"donkey-agent","email":"pacosw@pitsafrp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/bun-server-core_0.1.0_1766730872667_0.5935365285549972"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-26T06:34:32.575Z","0.1.0":"2025-12-26T06:34:32.818Z","modified":"2025-12-26T06:34:33.111Z"},"maintainers":[{"name":"donkey-agent","email":"pacosw@pitsafrp.com"}],"description":"Bun server utilities - routing, database, caching, auth, and middleware","homepage":"https://github.com/donkeylabs-io/donkeylabs#readme","keywords":["bun","server","express","kysely","sqlite","typescript"],"repository":{"type":"git","url":"git+https://github.com/donkeylabs-io/donkeylabs.git","directory":"packages/bun-server-core"},"author":{"name":"donkeylabs"},"bugs":{"url":"https://github.com/donkeylabs-io/donkeylabs/issues"},"license":"MIT","readme":"# `bun-server-core`\n\nReusable building blocks for Bun-based Express services. The package wraps common infrastructure such as routing, rate limiting, instrumentation, OTP utilities, and caching so that application packages can stay focused on domain logic.\n\n## Features\n\n* **Express bootstrapper** – `Server` wires up JSON parsing, raw body preservation, static assets, CORS, and request logging before attaching routers.【F:packages/bun-server-core/src/server.ts†L1-L46】【F:packages/bun-server-core/src/middleware/index.ts†L1-L87】\n* **Router glue** – `MagikRouter` bridges `core` route definitions to Express handlers, injects contextual metadata, and enforces rate limits per-route via the shared cache.【F:packages/bun-server-core/src/router/index.ts†L1-L70】\n* **Cache & rate limiting** – `SimpleCache` persists JSON payloads in SQLite and powers rate-limiting state with automatic cleanup timers.【F:packages/bun-server-core/src/cache/index.ts†L1-L73】\n* **Database helpers** – `buildDB`, `buildInstrumentedDB`, and `buildMigrator` encapsulate Bun-friendly SQLite/Kysely configuration and log slow queries for observability.【F:packages/bun-server-core/src/db/index.ts†L1-L46】【F:packages/bun-server-core/src/db/instrumentation.ts†L1-L27】\n* **OTP utilities** – Generate and validate TOTP secrets and QR codes for authenticator apps shared between API and frontend packages.【F:packages/bun-server-core/src/otp/otp.ts†L1-L18】\n* **Centralized error handling** – Translate thrown `ApiError`s into HTTP responses and provide sane fallbacks for unexpected failures.【F:packages/bun-server-core/src/middleware/errors.ts†L1-L24】\n\n## Directory overview\n\n```\npackages/bun-server-core\n├── src/\n│   ├── cache/           # SQLite-backed cache + rate limit storage\n│   ├── db/              # BunSqlite dialect helpers, migrations, instrumentation\n│   ├── encryption/      # Symmetric encryption helpers (for secrets at rest)\n│   ├── jwt/             # Token helpers mirrored on the frontend\n│   ├── middleware/      # Logging, rate limiting, and error handling\n│   ├── otp/             # TOTP utilities and QR generation\n│   ├── router/          # MagikRouter implementation\n│   ├── stats/           # Request/system metrics collector\n│   └── test/            # Reusable testing harness for API packages\n└── index.ts             # Barrel exports used by downstream packages\n```\n\n## Scripts\n\nThis package exposes utilities and does not define runtime scripts. Tests are typically executed from downstream packages (such as the API) using the shared helpers.\n\n## Using the router helper\n\n```ts\nimport { Server, MagikRouter } from \"bun-server-core\";\nimport { authRouter } from \"core\";\n\nconst server = new Server(dependencies, allowedOrigins);\nconst auth = new MagikRouter(authRouter, cache);\n\nauth.handle(\"browserAuthentication\", async (input, ctx) => {\n  const session = await authModel.login(input, ctx);\n  ctx.res.json(session);\n});\n\nserver.registerRouter(() => auth);\nserver.listen(8000);\n```\n\nFor advanced usage (instrumented databases, cron-powered services, caching strategies), see the API package README.\n","readmeFilename":"README.md","_rev":"1-e902e237972c682eacc9ee47b6f07d5b"}