{"_id":"@api-emulator/core","_rev":"5-68a2d72a44bd733b0f20b808c760f39a","name":"@api-emulator/core","dist-tags":{"latest":"0.9.0"},"versions":{"0.5.2":{"name":"@api-emulator/core","version":"0.5.2","license":"MIT","_id":"@api-emulator/core@0.5.2","maintainers":[{"name":"jsjackson","email":"james.sorley.jackson@gmail.com"}],"homepage":"https://api-emulator.jsj.sh","bugs":{"url":"https://github.com/jsj/api-emulator/issues"},"dist":{"shasum":"3e0f5c813b4940087f3b7ba42ab0e83e8a0a8ffc","tarball":"https://registry.npmjs.org/@api-emulator/core/-/core-0.5.2.tgz","fileCount":8,"integrity":"sha512-nf8/Nk4do9dvvS1NwxJMpt/Wv7GWLhhqvyQAD9XfbgizgLM9T0/cBq07KorlX2i8pJLKYO6t54AqhtGcAo+6sg==","signatures":[{"sig":"MEUCIFKjnn7WmqAWICjKUtSjbE7EIqJKjFn/bfu3X8PPc4LFAiEAyCcBTwwu7ogtsfVZJEJoF6YVl6A/44h03e5miql3nRE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@api-emulator%2fcore@0.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":204943},"main":"./dist/index.js","type":"module","_from":"file:/tmp/api-emulator-core-0.5.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src","test":"vitest run","build":"tsup --clean","clean":"rm -rf dist .turbo","type-check":"tsc --noEmit"},"_npmUser":{"name":"jsjackson","email":"james.sorley.jackson@gmail.com"},"_resolved":"/tmp/api-emulator-core-0.5.2.tgz","_integrity":"sha512-nf8/Nk4do9dvvS1NwxJMpt/Wv7GWLhhqvyQAD9XfbgizgLM9T0/cBq07KorlX2i8pJLKYO6t54AqhtGcAo+6sg==","repository":{"url":"git+https://github.com/jsj/api-emulator.git","type":"git","directory":"packages/@api-emulator/core"},"_npmVersion":"11.11.0","description":"HTTP server, in-memory store, plugin interface, and middleware for emulate service plugins.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"hono":"^4","jose":"^6.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8","vitest":"^4.1.0","typescript":"^5.7"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.2_1778549139292_0.2172264669938926","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@api-emulator/core","version":"0.6.0","license":"MIT","_id":"@api-emulator/core@0.6.0","maintainers":[{"name":"jsjackson","email":"james.sorley.jackson@gmail.com"}],"homepage":"https://api-emulator.jsj.sh","bugs":{"url":"https://github.com/jsj/api-emulator/issues"},"dist":{"shasum":"f7cad78952dffd17d6e656e81475a33013f2ec76","tarball":"https://registry.npmjs.org/@api-emulator/core/-/core-0.6.0.tgz","fileCount":8,"integrity":"sha512-kzGebQMJAlzV0q1W2AbSa5kStVRhjWe1mmulyXnKjerPbwTjvqJW0esdDUm5xqy8ag1A3ewbHjcKUFSF5sKBNQ==","signatures":[{"sig":"MEUCIElYa+1gKe0OGExcaZATGTHfHmGsPBC6lvCwwHYeXfs7AiEAyCwGc+DEAyvrGEuMSinkai31Yr8hYEFJ2W79F5yaghE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@api-emulator%2fcore@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":204899},"main":"./dist/index.js","type":"module","_from":"file:/tmp/api-emulator-core-0.6.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src","test":"vitest run","build":"tsup --clean","clean":"rm -rf dist .turbo","type-check":"tsc --noEmit"},"_npmUser":{"name":"jsjackson","email":"james.sorley.jackson@gmail.com"},"_resolved":"/tmp/api-emulator-core-0.6.0.tgz","_integrity":"sha512-kzGebQMJAlzV0q1W2AbSa5kStVRhjWe1mmulyXnKjerPbwTjvqJW0esdDUm5xqy8ag1A3ewbHjcKUFSF5sKBNQ==","repository":{"url":"git+https://github.com/jsj/api-emulator.git","type":"git","directory":"packages/@api-emulator/core"},"_npmVersion":"11.11.0","description":"HTTP server, in-memory store, plugin interface, and middleware for api-emulator service plugins.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"hono":"^4","jose":"^6.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8","vitest":"^4.1.0","typescript":"^5.7"},"_npmOperationalInternal":{"tmp":"tmp/core_0.6.0_1778636817991_0.3090047775678617","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@api-emulator/core","version":"0.7.0","license":"MIT","_id":"@api-emulator/core@0.7.0","maintainers":[{"name":"jsjackson","email":"james.sorley.jackson@gmail.com"}],"homepage":"https://api-emulator.jsj.sh","bugs":{"url":"https://github.com/jsj/api-emulator/issues"},"dist":{"shasum":"71d888f948b6ad658631693ee72b9cf38a3e6e3f","tarball":"https://registry.npmjs.org/@api-emulator/core/-/core-0.7.0.tgz","fileCount":8,"integrity":"sha512-7cw82IZRcwv1JTo3OdBHuNeWKItHYUeT2wFw89I1HuccFaEW+7b4GsBRDTkQmtX9g/Ck6PF4Sy+gDv+eN3J7NQ==","signatures":[{"sig":"MEQCIG7diS3e/P9EOBghkz9Zalr6i5vmmk3vLRra5nYp71NSAiBV+CRqI00QZAF7ztu1Al60ukxDuvzutYSxF5F8M5IOAg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@api-emulator%2fcore@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":217393},"main":"./dist/index.js","type":"module","_from":"file:/tmp/api-emulator-core-0.7.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src","test":"vitest run","build":"tsup --clean","clean":"rm -rf dist .turbo","type-check":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bb16488e-ef25-4e31-99ff-89c5df4c3ad5"}},"_resolved":"/tmp/api-emulator-core-0.7.0.tgz","_integrity":"sha512-7cw82IZRcwv1JTo3OdBHuNeWKItHYUeT2wFw89I1HuccFaEW+7b4GsBRDTkQmtX9g/Ck6PF4Sy+gDv+eN3J7NQ==","repository":{"url":"git+https://github.com/jsj/api-emulator.git","type":"git","directory":"packages/@api-emulator/core"},"_npmVersion":"11.16.0","description":"HTTP server, in-memory store, plugin interface, and middleware for api-emulator service plugins.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"hono":"^4","jose":"^6.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8","vitest":"^4.1.0","typescript":"^5.7"},"_npmOperationalInternal":{"tmp":"tmp/core_0.7.0_1780761832802_0.19143946771659892","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@api-emulator/core","version":"0.8.0","license":"MIT","_id":"@api-emulator/core@0.8.0","maintainers":[{"name":"jsjackson","email":"james.sorley.jackson@gmail.com"}],"homepage":"https://api-emulator.jsj.sh","bugs":{"url":"https://github.com/jsj/api-emulator/issues"},"dist":{"shasum":"29a667699cd8df6a55924b7a15ed341da0d774e8","tarball":"https://registry.npmjs.org/@api-emulator/core/-/core-0.8.0.tgz","fileCount":8,"integrity":"sha512-DuQw+VKpoIC5DimPg0zxnwf2QaH41rS8tIDOA0/OP/kytNfLzQgAIaUUE9OBzNu4jM1JnJ+5BkuyUj0f5K6Ibg==","signatures":[{"sig":"MEQCICo7Su83psWzSacAKyE5RdkwSEzGYz7GLHMQPiFE4w6xAiAhiMMHDnouniqUYs9UHyl/CqBCabCVEcFeD8mbm0Nx9A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@api-emulator%2fcore@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":218876},"main":"./dist/index.js","type":"module","_from":"file:/tmp/api-emulator-core-0.8.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src","test":"vitest run","build":"tsup --clean","clean":"rm -rf dist .turbo","type-check":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bb16488e-ef25-4e31-99ff-89c5df4c3ad5"}},"_resolved":"/tmp/api-emulator-core-0.8.0.tgz","_integrity":"sha512-DuQw+VKpoIC5DimPg0zxnwf2QaH41rS8tIDOA0/OP/kytNfLzQgAIaUUE9OBzNu4jM1JnJ+5BkuyUj0f5K6Ibg==","repository":{"url":"git+https://github.com/jsj/api-emulator.git","type":"git","directory":"packages/@api-emulator/core"},"_npmVersion":"12.0.2","description":"HTTP server, in-memory store, plugin interface, and middleware for api-emulator service plugins.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"hono":"^4","jose":"^6.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8","vitest":"^4.1.0","typescript":"^5.7"},"_npmOperationalInternal":{"tmp":"tmp/core_0.8.0_1785798581273_0.5017535101800386","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@api-emulator/core","version":"0.9.0","license":"MIT","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"},"./worker-runtime":{"import":"./dist/worker-runtime.js","types":"./dist/worker-runtime.d.ts"}},"homepage":"https://api-emulator.jsj.sh","repository":{"type":"git","url":"git+https://github.com/jsj/api-emulator.git","directory":"packages/@api-emulator/core"},"bugs":{"url":"https://github.com/jsj/api-emulator/issues"},"publishConfig":{"access":"public"},"scripts":{"build":"tsup --clean","dev":"tsup --watch","test":"vitest run","clean":"rm -rf dist .turbo","type-check":"tsc --noEmit","lint":"eslint src"},"dependencies":{"hono":"^4","jose":"^6.2.2"},"devDependencies":{"tsup":"^8","typescript":"^5.7","vitest":"^4.1.0"},"_id":"@api-emulator/core@0.9.0","description":"HTTP server, in-memory store, plugin interface, and middleware for api-emulator service plugins.","_integrity":"sha512-N+FNAdXWnO6XBwrqVd/rU9u85pTiZ6Tv9/WAW4VNlR/qMayA+mtpk1qY8qobnjj4IcSHqLuOTXB4vJxIreswtg==","_resolved":"/tmp/api-emulator-core-0.9.0.tgz","_from":"file:/tmp/api-emulator-core-0.9.0.tgz","_nodeVersion":"24.18.0","_npmVersion":"12.0.2","dist":{"integrity":"sha512-N+FNAdXWnO6XBwrqVd/rU9u85pTiZ6Tv9/WAW4VNlR/qMayA+mtpk1qY8qobnjj4IcSHqLuOTXB4vJxIreswtg==","shasum":"810d94d12800c0c098203c12faf13c8cf0201d7d","tarball":"https://registry.npmjs.org/@api-emulator/core/-/core-0.9.0.tgz","fileCount":14,"unpackedSize":220686,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@api-emulator%2fcore@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDpkIhStKoFFIrPgBTf5ZRdeCn3sIIBsaFMsuayz3Gc5QIgSzjp3eG/iJxEOSHDDyT8y+q9f3mDB9ovPpOTXu0O0PI="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bb16488e-ef25-4e31-99ff-89c5df4c3ad5"}},"directories":{},"maintainers":[{"name":"jsjackson","email":"james.sorley.jackson@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/core_0.9.0_1786480078214_0.3958471859965804"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-12T01:25:39.171Z","modified":"2026-08-11T20:27:58.650Z","0.5.2":"2026-05-12T01:25:39.461Z","0.6.0":"2026-05-13T01:46:58.166Z","0.7.0":"2026-06-06T16:03:52.995Z","0.8.0":"2026-08-03T23:09:41.412Z","0.9.0":"2026-08-11T20:27:58.364Z"},"bugs":{"url":"https://github.com/jsj/api-emulator/issues"},"license":"MIT","homepage":"https://api-emulator.jsj.sh","repository":{"type":"git","url":"git+https://github.com/jsj/api-emulator.git","directory":"packages/@api-emulator/core"},"description":"HTTP server, in-memory store, plugin interface, and middleware for api-emulator service plugins.","maintainers":[{"name":"jsjackson","email":"james.sorley.jackson@gmail.com"}],"readme":"# @api-emulator/core\n\nHTTP server, in-memory store, plugin interface, and middleware for api-emulator service plugins.\n\nPart of [api-emulator](https://github.com/jsj/api-emulator) — local drop-in replacement services for CI and no-network sandboxes.\n\n## Install\n\n```bash\nnpm install @api-emulator/core\n```\n\n## Overview\n\nThe core provides the shared infrastructure that every service plugin builds on:\n\n- **Store** — a generic in-memory store with typed `Collection<T>` instances supporting CRUD, indexing, filtering, and pagination\n- **Server** — Hono-based HTTP server with automatic port management\n- **Middleware** — bearer token auth, error handling, CORS\n- **UI** — shared authorization/consent page rendering with bundled fonts\n- **Persistence** — pluggable save/load adapters for state durability\n\n## Persistence\n\n### File persistence\n\nFor local development, use the built-in file adapter:\n\n```typescript\nimport { filePersistence } from '@api-emulator/core'\n\npersistence: filePersistence('.api-emulator/state.json')\n```\n\n### Custom adapter\n\nAny object with `load` and `save` methods works:\n\n```typescript\nconst kvAdapter = {\n  async load() { return await kv.get('api-emulator-state') },\n  async save(data: string) { await kv.set('api-emulator-state', data) },\n}\n```\n\nThe persistence adapter is called on cold start (load) and after every mutating request (save). Saves are serialized via an internal queue to prevent race conditions.\n\n## Links\n\n- [Full documentation](https://api-emulator.jsj.sh)\n- [GitHub](https://github.com/jsj/api-emulator)\n","readmeFilename":"README.md"}