{"_id":"@jarenjs/contract","_rev":"24-ad2286363e838186f6d432fb8976949e","name":"@jarenjs/contract","dist-tags":{"latest":"0.91.4"},"versions":{"0.43.1":{"name":"@jarenjs/contract","version":"0.43.1","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.43.1","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"9cac94bc2425b1b115d602c3e424057feed14ca1","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.43.1.tgz","fileCount":84,"integrity":"sha512-JEM8hdDCBIGoxpOyFhcyqa1DT6crA05bMPV2E240lHWMaLRJnzOx6A76s7nJpGi0StKy3pgCQnGlkj4zg9uk8A==","signatures":[{"sig":"MEUCIQDhNZbWeuxQlsg1qmuiYMyKzL/jPeHcB3hGLzbmL316GAIgDe1JATB1vsKk0urcnKCzfvNAfVL0RCMVT7z0WD5+Zbw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":859110},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json"},"gitHead":"6e03d18fb68dd79a80c58f04f47901641901a2ec","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"@jarenjs/core":"^0.43.1","@jarenjs/emit":"^0.43.1","@jarenjs/json":"^0.43.1","@jarenjs/validate":"^0.43.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.43.1_1787481685009_0.3411243018880161","host":"s3://npm-registry-packages-npm-production"}},"0.43.3":{"name":"@jarenjs/contract","version":"0.43.3","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.43.3","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"1bd90e46c298404f424eb06e0ae813d1c4e16228","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.43.3.tgz","fileCount":84,"integrity":"sha512-371p5OYfiSABZU8VXFH6MDEJB0aW+drWGGCUjCVmik3v8Ya7LmhVbGgylqOs9NNoPGZ/tP1K3J0dgMe5CyF0WA==","signatures":[{"sig":"MEQCIBf/eNr3Wz+gwvwSjROkCkK7gOnmIeHSdOAX2UyhV1vvAiAZOe8vwykRnX0NQD7u+FToCaDOjp4xosca0cRrhj48iQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":882151},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json"},"gitHead":"efd18dec49c026ddd9dd301cb17eb97e5feb1288","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"@jarenjs/core":"^0.43.3","@jarenjs/emit":"^0.43.3","@jarenjs/json":"^0.43.3","@jarenjs/validate":"^0.43.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.43.3_1787588971705_0.47563874767828485","host":"s3://npm-registry-packages-npm-production"}},"0.46.4":{"name":"@jarenjs/contract","version":"0.46.4","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.46.4","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"158f5e61700fe181cc227dff5fe5839e4c2d1dc7","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.46.4.tgz","fileCount":84,"integrity":"sha512-NnNgzCoTD8X8gHgY14xS78Ym6WG2MhRdYWC0kI8hR9WqJGiMi6tNta1XLLY+Bs8tq151UKXLe5pZdQfAFh3v0g==","signatures":[{"sig":"MEUCIQDOwp/snu7ZSxE89tQXYfq/IpYo5yFtra5lzceuZqLVtQIgfbkyQadYHdcQyS9YOOrd2ztM6pE62wB1lK3mjzBgwk8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":885554},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json"},"gitHead":"e1dc4417ddc0acc42402e7486f45bbc5bff2cb41","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"@jarenjs/core":"^0.46.4","@jarenjs/emit":"^0.46.4","@jarenjs/json":"^0.46.4","@jarenjs/validate":"^0.46.4"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.46.4_1787728810458_0.33161058236867014","host":"s3://npm-registry-packages-npm-production"}},"0.46.5":{"name":"@jarenjs/contract","version":"0.46.5","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.46.5","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"b4044f58e5eb53a980bf1b95ca97278e8596355b","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.46.5.tgz","fileCount":84,"integrity":"sha512-ubW51eP31VK7x529eJy3T+z0U2HBYyVjTrVm0A+x7RZBGEEbDre8gsBVEjH7hYfAP6/zgCs3XrB5+PZekl3Mwg==","signatures":[{"sig":"MEQCIHQIrVdqplaSAo3x2eh4ybuhWUTLOUyWSSHKe7B9QCEDAiB1HmyHQoeVbhTFvpviT6qBh1eG8Y+BfWjvSWRP6w9wKQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":885554},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json"},"gitHead":"0df1ef3a27b39e1408acf1ba2e63eed34b1c8621","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"@jarenjs/core":"^0.46.5","@jarenjs/emit":"^0.46.5","@jarenjs/json":"^0.46.5","@jarenjs/validate":"^0.46.5"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.46.5_1787734451032_0.6485453647764872","host":"s3://npm-registry-packages-npm-production"}},"0.49.2":{"name":"@jarenjs/contract","version":"0.49.2","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.49.2","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"9df3c68afd6cea90d20251464e9e566dc2e18d7b","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.49.2.tgz","fileCount":84,"integrity":"sha512-7TgKjypJnEbwuS2p5pDhtXu8FdnBuxvDJhgieIcDfKy47maKk+gWJe8v86O6K9FoxX4WZjhbfxPwOLYnTVuHMg==","signatures":[{"sig":"MEUCIA4GBMegblBG18bydEZh6mzxINXwKSIPjhXK1SEFEBS/AiEAtQtegSOJSSgTyPrFEeBKRulEH9CeBkogOIr4mQ4floo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":885554},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json"},"gitHead":"15e048f0cba387991c17758f689e8fd3b306dea8","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"@jarenjs/core":"^0.49.2","@jarenjs/emit":"^0.49.2","@jarenjs/json":"^0.49.2","@jarenjs/validate":"^0.49.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.49.2_1787775764782_0.0749872775501248","host":"s3://npm-registry-packages-npm-production"}},"0.56.0":{"name":"@jarenjs/contract","version":"0.56.0","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.56.0","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"b39383eed3a5702c6a5823dca6d403d16322c307","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.56.0.tgz","fileCount":84,"integrity":"sha512-FfWJwqsGbnyu13N+mc8pk99/39pXMhmz4dEMi3crF5w9nVIo4XZh4d71TcLZo3kB9z6pmFVqQyDmLqdEPLVhsg==","signatures":[{"sig":"MEYCIQDBqNSNNPfQwkuFKCDZuRgwFrtNYhUxIN3tbxEWE63TCgIhAKgZkBWX+7n4H931sd/2GaytM/pC1omMtJAMYlZPEP9e","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":893669},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json"},"gitHead":"74f70f52b57410763dab4c52173cf037da601e70","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"@jarenjs/core":"^0.56.0","@jarenjs/emit":"^0.56.0","@jarenjs/json":"^0.56.0","@jarenjs/validate":"^0.56.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.56.0_1788053690297_0.896223363773341","host":"s3://npm-registry-packages-npm-production"}},"0.66.1":{"name":"@jarenjs/contract","version":"0.66.1","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.66.1","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"e9ae1972f15c3b136afb5ed011c6c28037131420","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.66.1.tgz","fileCount":90,"integrity":"sha512-hmTSgRazGHHPcIAk3yr4NRgo71yPUjUlT0NROBtmdwdwMUmVVDQOEOUfA641mUgcB14PlklnYgk0/kII6EhAIw==","signatures":[{"sig":"MEUCICdc4SjDtGLqYks80iwVAoBJQ9TOTBzwhBKw45DdNLs+AiEAu50NDEqPOA/1YWtGZBJhWwR6Hpc9Im1w0eNjBJ/KsH0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1090632},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json"},"gitHead":"38bd730da099aff22b13944f85b691b0bd399bec","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@jarenjs/core":"^0.66.1","@jarenjs/emit":"^0.66.1","@jarenjs/json":"^0.66.1","@jarenjs/validate":"^0.66.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.66.1_1788890796986_0.6915348771844543","host":"s3://npm-registry-packages-npm-production"}},"0.67.0":{"name":"@jarenjs/contract","version":"0.67.0","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.67.0","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"1cc10b132665a85e74862c6ba1bfd549bc118bf5","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.67.0.tgz","fileCount":90,"integrity":"sha512-d+oWkrz+xNo7m/um27g6xNfQX+Gr2Nbgpx9RmnfX1Y7QJ8h3ILE0CyFRqN7QpYFcnSCsDQAwq4YDfGzMS39ltA==","signatures":[{"sig":"MEYCIQCQoUKoWDqgR/R3hzTq7WWjEBn6F9hT9F7c+R0SEsWXbQIhAN+vs7Q/+4wqgcYP1054PPaiCwtOVyNDR0KSrdVjnOVu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1090632},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json"},"gitHead":"78082760da582ed92ccb3f4dedbf550090f1f18f","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@jarenjs/core":"^0.67.0","@jarenjs/emit":"^0.67.0","@jarenjs/json":"^0.67.0","@jarenjs/validate":"^0.67.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.67.0_1788896666264_0.557739921171486","host":"s3://npm-registry-packages-npm-production"}},"0.72.0":{"name":"@jarenjs/contract","version":"0.72.0","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.72.0","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"c156885f189c2ce402aea3d66424de37b50e612c","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.72.0.tgz","fileCount":90,"integrity":"sha512-flj5y9UWmbr11ol45rH5ao2vQI0X3mvLMDn3Y6ClSJTNMUXMcBzd9dMbAaaGU+nO5BCdI9X3nqUc1+UTVSwx+g==","signatures":[{"sig":"MEUCIFzmfAhCZ3HMBT3gb79yHFcCpxop9pn7HUbNlKDA4yJTAiEAl3j2LpdiNmHGktYXGVMQrn6Tr6xr43l3X5yVaoKo7gQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1090830},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json"},"gitHead":"661647bcd8ec149b3d466d3929ba3b5e7a2d267d","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@jarenjs/core":"^0.72.0","@jarenjs/emit":"^0.72.0","@jarenjs/json":"^0.72.0","@jarenjs/validate":"^0.72.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.72.0_1788952132099_0.5297403949929986","host":"s3://npm-registry-packages-npm-production"}},"0.72.2":{"name":"@jarenjs/contract","version":"0.72.2","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.72.2","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"22ac5cd2ba2c975850698bb4b9301105cfa7b00a","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.72.2.tgz","fileCount":90,"integrity":"sha512-fDPiaHSz7d6WyAam3owm09hKt+yyuf9nNKzusJ7W/RjaFdf0iQQ63ZZpi3SzS1i55sWS2GwYxEcZr0eyQGHHig==","signatures":[{"sig":"MEQCIHaxURn8z69s6cZUPdHPvc4v8lY0VteZ2uY3Z96fCf/RAiBxbgbxYF0KNqYe0S6CMhK/ggbvF5/SDmm9j2l4nCMUKg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1090830},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json"},"gitHead":"fe4a5f69ee8d59552c53795c279c46091aa3ff8c","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@jarenjs/core":"^0.72.2","@jarenjs/emit":"^0.72.2","@jarenjs/json":"^0.72.2","@jarenjs/validate":"^0.72.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.72.2_1788964321480_0.10518792998876059","host":"s3://npm-registry-packages-npm-production"}},"0.72.3":{"name":"@jarenjs/contract","version":"0.72.3","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.72.3","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"1638045ac280c38d9ca5cb0974e4151eabfb283e","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.72.3.tgz","fileCount":90,"integrity":"sha512-8l2ntUMgXFhR6V4F8Oy8fDKsB1RpeHihctOhXGTp7YO7gnsx3TtVgAI+zikx5HwG8hrOMoRZGiDrMe90DPB7sg==","signatures":[{"sig":"MEYCIQD8s8APQ4VELdbhVTOPgV5HprOgotnLKDrs5ukgohXfrAIhAITnxo3VR1QBOZNQKjM3ZbwqObafp6WOpUttyqmfKK+L","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1091430},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json"},"gitHead":"a5ef0d342fdb56b58f5bd1301af4a23d0cc3ec00","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@jarenjs/core":"^0.72.3","@jarenjs/emit":"^0.72.3","@jarenjs/json":"^0.72.3","@jarenjs/validate":"^0.72.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.72.3_1788973968488_0.546559704853637","host":"s3://npm-registry-packages-npm-production"}},"0.73.0":{"name":"@jarenjs/contract","version":"0.73.0","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.73.0","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"e010eb66f6ccf3afc51fdd50df3590d810baf351","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.73.0.tgz","fileCount":90,"integrity":"sha512-JS++lcWns1maejL89WmXz/TLvnE93fu1VzTrWPF6iqscOq6b9Tc3cKPyDu40h35Xx7pbE0wF3LV8nnlTExU45g==","signatures":[{"sig":"MEYCIQDLLSwtWMdEYm1JMgcjbMUI8c5My2HHANZ9u93/C1OIMQIhAJ9J1jI2FQYWoZTUNLY92CXrn+/Gv84ffIN20zYenPvd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1091430},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json"},"gitHead":"7f700942ad404a8203452f3b263b05c2aec2fe05","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@jarenjs/core":"^0.73.0","@jarenjs/emit":"^0.73.0","@jarenjs/json":"^0.73.0","@jarenjs/validate":"^0.73.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.73.0_1788980311131_0.051605656610495876","host":"s3://npm-registry-packages-npm-production"}},"0.75.0":{"name":"@jarenjs/contract","version":"0.75.0","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.75.0","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"43fb0580bb103f72bc6306d04ff089ef5085b585","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.75.0.tgz","fileCount":90,"integrity":"sha512-Mhnnp7JN3C33PoiBO+JuXazfll/5Nq+VN70UzezgEabUiAxhHjdnE348RIuBZr7trFER4MWzLd5JeA5qvjLRuw==","signatures":[{"sig":"MEUCIQCo0rJFjcYeHEfp2DiQk1zH4is9pTH6BktcofeIqiM+4gIgJALqGNZcqCbD1A/zjmbezGiKRhNMAGmf8cil2C3ZjxA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1097989},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json"},"gitHead":"a50e9c57bc3e867529c18433a448178559d20c85","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@jarenjs/core":"^0.75.0","@jarenjs/emit":"^0.75.0","@jarenjs/json":"^0.75.0","@jarenjs/validate":"^0.75.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.75.0_1788994277454_0.00643150255791336","host":"s3://npm-registry-packages-npm-production"}},"0.83.2":{"name":"@jarenjs/contract","version":"0.83.2","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.83.2","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"6719399065e5060a7d58bcb68e22fe2582515bde","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.83.2.tgz","fileCount":102,"integrity":"sha512-Kdht+qTGQuLH/dv3hzCo90IIefCSpMSx62TYtS2j6VZmYeaB2zS7FAJz0HCbN45vSYc20AZsewOZuJ2lJnuHZA==","signatures":[{"sig":"MEUCICAsOHXPiKmD0M9KRIYeNGa/bm4unDlgsXoISR+kSsJ1AiEAustMrPxXIYUctbBHdPMU5rozccxpM5Qct5b2qF1tQIQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1163873},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./command":{"types":"./dist/types/command.d.ts","default":"./src/command.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./provider":{"types":"./dist/types/provider/index.d.ts","default":"./src/provider/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json"},"gitHead":"f21b18fa123a6c72a0ca31dbad374ec5a8bf78ff","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@jarenjs/core":"^0.83.2","@jarenjs/emit":"^0.83.2","@jarenjs/json":"^0.83.2","@jarenjs/validate":"^0.83.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.83.2_1789113178236_0.8085953359400755","host":"s3://npm-registry-packages-npm-production"}},"0.83.3":{"name":"@jarenjs/contract","version":"0.83.3","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.83.3","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"6b5ea76e0b20932bbdf31aa2bcfd83210afbeac2","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.83.3.tgz","fileCount":102,"integrity":"sha512-9IpwMGcZzldlrCG8q8GjELXQ2rgs2YcgpzPVvgxk7fuO8iTywoNDtT2sUErZxsoFspfbJSH680f8B6d3TFTY7g==","signatures":[{"sig":"MEQCICStkzPjPd+L0mwhPsUtC3YHljq47ZFZt8rI2NFbwU5RAiBltECgeneZzVV0muTiC9iuloEVSWr9Ng7UOfbvZQlBfw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1163873},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./command":{"types":"./dist/types/command.d.ts","default":"./src/command.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./provider":{"types":"./dist/types/provider/index.d.ts","default":"./src/provider/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json"},"gitHead":"3491513e164dc30e429c84e709bd738841f4df16","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@jarenjs/core":"^0.83.3","@jarenjs/emit":"^0.83.3","@jarenjs/json":"^0.83.3","@jarenjs/validate":"^0.83.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.83.3_1789132086640_0.9874173708887273","host":"s3://npm-registry-packages-npm-production"}},"0.84.3":{"name":"@jarenjs/contract","version":"0.84.3","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.84.3","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"0b6c86216395f13c88da4c3f815c46c03f0d6ab2","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.84.3.tgz","fileCount":104,"integrity":"sha512-1hsBl8osUk0ePiLI2m7s8xRE9VNsnO3Hgtwm4aRqHziLm7eK0QBMwOH0az3FHQcECYRusedyBeIG2vm7xLegGA==","signatures":[{"sig":"MEQCIAbIUwMJRFAxlLu5RfxtfgP3bnZc6t+rRgbTm4x+l1J9AiBWKyElyIAfJQuA34YjKBEqMopmQFvFoFnELkyeh5Bcuw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1177308},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./webmcp":{"types":"./dist/types/webmcp.d.ts","default":"./src/webmcp.js"},"./command":{"types":"./dist/types/command.d.ts","default":"./src/command.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./provider":{"types":"./dist/types/provider/index.d.ts","default":"./src/provider/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json"},"gitHead":"ac8749711f5d058251f72842ce7e0095b389403f","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@jarenjs/core":"^0.84.3","@jarenjs/emit":"^0.84.3","@jarenjs/json":"^0.84.3","@jarenjs/validate":"^0.84.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.84.3_1789191873029_0.06150824240890285","host":"s3://npm-registry-packages-npm-production"}},"0.85.0":{"name":"@jarenjs/contract","version":"0.85.0","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.85.0","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"1a0417048af7d93b947fd14de95dc02454ab072c","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.85.0.tgz","fileCount":104,"integrity":"sha512-0TANbVr7l1X/dm6vdxlkEl3XIpoRjnu7oFNWQemSm7jBTam9KuAFp2VgbTR2hM/66EuMaT0D7cQMmKFhQ/Zmqg==","signatures":[{"sig":"MEUCIQCGm4JieMvQbszLctBwm4Z30hsCmGcC3lffxbFPasW87wIgOQAT2SfVPCC8BirbHwwA7Ze76jlJKcEo3GZKhlss3P4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1177308},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./webmcp":{"types":"./dist/types/webmcp.d.ts","default":"./src/webmcp.js"},"./command":{"types":"./dist/types/command.d.ts","default":"./src/command.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./provider":{"types":"./dist/types/provider/index.d.ts","default":"./src/provider/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json"},"gitHead":"5765fba5ab5c1d390dc28316a4255b47cd0f6f8a","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@jarenjs/core":"^0.85.0","@jarenjs/emit":"^0.85.0","@jarenjs/json":"^0.85.0","@jarenjs/validate":"^0.85.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.85.0_1789213869692_0.1470585118339811","host":"s3://npm-registry-packages-npm-production"}},"0.86.0":{"name":"@jarenjs/contract","version":"0.86.0","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.86.0","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"f3bad0c6ad5caf365d3970e4df0e6a8e51f17001","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.86.0.tgz","fileCount":104,"integrity":"sha512-lII1XLn4aEMii42VXbH2Xk3hdGujlKSm1ms33R8IVQ+TDg8PhRJE9mNaqw39AlgVnrcxwGUTetCLT6D5sX667g==","signatures":[{"sig":"MEYCIQCt/V3Z4sMAj1p3c7z0Yhaor6BztENoTokbbmRWk2gtlQIhAI1zPX4BSpt3D2UuuoocKdb7hn/MBI6T3Dwg1M9cZh01","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1177308},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./webmcp":{"types":"./dist/types/webmcp.d.ts","default":"./src/webmcp.js"},"./command":{"types":"./dist/types/command.d.ts","default":"./src/command.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./provider":{"types":"./dist/types/provider/index.d.ts","default":"./src/provider/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json"},"gitHead":"ce489546f21a176a2574169b65b95f9dc15461f7","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@jarenjs/core":"^0.86.0","@jarenjs/emit":"^0.86.0","@jarenjs/json":"^0.86.0","@jarenjs/validate":"^0.86.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.86.0_1789221846483_0.5664565281365692","host":"s3://npm-registry-packages-npm-production"}},"0.87.0":{"name":"@jarenjs/contract","version":"0.87.0","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.87.0","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"c2c48fc3e7d06b0a5563daa37322f28adf6c2a3f","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.87.0.tgz","fileCount":104,"integrity":"sha512-51N8aQ6U2W+/oxGVY5rNQeVHzwKRvBd7MW9iZFF2dNm99Y/qknwaojGMEx8+QHLC2+tpNNpC4T7bUuA3WJ/dkQ==","signatures":[{"sig":"MEYCIQCk0q1kOjQlcH4rFESuUG7ptiWrpL22Z/Z4kMEh0q7wJgIhAOqj3QRYkQik9YXTOq0shaVEYpeqEbT0WfSZ6se8qg12","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1177308},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./webmcp":{"types":"./dist/types/webmcp.d.ts","default":"./src/webmcp.js"},"./command":{"types":"./dist/types/command.d.ts","default":"./src/command.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./provider":{"types":"./dist/types/provider/index.d.ts","default":"./src/provider/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json"},"gitHead":"9b67ed8cb88d2dbe95cb3eb5fe0ac88cfb70f347","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@jarenjs/core":"^0.87.0","@jarenjs/emit":"^0.87.0","@jarenjs/json":"^0.87.0","@jarenjs/validate":"^0.87.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.87.0_1789243259806_0.3418735345808297","host":"s3://npm-registry-packages-npm-production"}},"0.89.0":{"name":"@jarenjs/contract","version":"0.89.0","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.89.0","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"317c1f8fe023af198e038f72e1246354855dfdd2","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.89.0.tgz","fileCount":104,"integrity":"sha512-6ejeRwrkilp8XOlHgSOtpe04ybvfqsoWoYINprHBGeGmljECydkFXq+LQE99ZpbZcfxfU4yVJzTlo/wWqDXoqA==","signatures":[{"sig":"MEYCIQDLC46IPZQ1ay9tzUw1otgSavLSyfQNbNSlDVUMGERZNwIhAITMspeqkWyrzPxpLsZCv5WAp0Ygo8vVl2l5VvI+YsHP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1177308},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./webmcp":{"types":"./dist/types/webmcp.d.ts","default":"./src/webmcp.js"},"./command":{"types":"./dist/types/command.d.ts","default":"./src/command.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./provider":{"types":"./dist/types/provider/index.d.ts","default":"./src/provider/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json"},"gitHead":"41f5a36eccd43591d7c04d9116a6d210617e9146","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@jarenjs/core":"^0.89.0","@jarenjs/emit":"^0.89.0","@jarenjs/json":"^0.89.0","@jarenjs/validate":"^0.89.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.89.0_1789288678579_0.7688282422400663","host":"s3://npm-registry-packages-npm-production"}},"0.90.6":{"name":"@jarenjs/contract","version":"0.90.6","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.90.6","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"e9ac1deea82aca5678dc1491c98aa8c66643ca92","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.90.6.tgz","fileCount":107,"integrity":"sha512-cojcLccvAen4ht5fd6LVVr5zJuQhugw7DmPB7n9r1P+WJZLUktBM0YUjhUkwQb1b6lfiWTqdqnrPDMTiwuVILA==","signatures":[{"sig":"MEYCIQCgKIS40h84Yee3Qy/N/ifmgPHoH4kKnzNNkLqiF2l5DAIhAOJYAJxL7m8l3sjUB+PS0lYubXD6grsl5/WoULvZuCuz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCmfnt/0rAwU6lam+Ty/263VownYssqkaGtg7IGQWf+RAIhAMnsD2p5CGJLArP9g3wKmrpn9XVnJzMcVDdnRlcztjSh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1193912},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./webmcp":{"types":"./dist/types/webmcp.d.ts","default":"./src/webmcp.js"},"./command":{"types":"./dist/types/command.d.ts","default":"./src/command.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./provider":{"types":"./dist/types/provider/index.d.ts","default":"./src/provider/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json","./continuation-node":{"types":"./dist/types/continuation-node.d.ts","default":"./src/continuation-node.js"}},"gitHead":"37ba1676dab7868b168858b413a3ec647eebefdd","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@jarenjs/core":"^0.90.6","@jarenjs/emit":"^0.90.6","@jarenjs/json":"^0.90.6","@jarenjs/validate":"^0.90.6"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.90.6_1789444535460_0.48676020283684185","host":"s3://npm-registry-packages-npm-production"}},"0.91.2":{"name":"@jarenjs/contract","version":"0.91.2","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.91.2","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"19b0470804588fffda3b4ee7bdd8d6474c8951ec","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.91.2.tgz","fileCount":107,"integrity":"sha512-eCvJtqdEZr4WcVkndXoFlpwq5P3FuAXI5YkSBgCGM1DYkA0uw2QMOeJf0cAVR0/N2/tAMSHZfNjhR6vxCtXEdw==","signatures":[{"sig":"MEYCIQD7mrkHQFEX1rqWCvPCzmMDzrtoc8xpPuFfxqkdNO6O+AIhAMspVXOnihTn5nPvaU1LeQX+ItkZxtRJ6XgG8243Qxjy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEiEPCPqfgHpNi7596d9lUTNIuAZVHNnDi0rWLc9GJGqAiAo4x+4+pQWIsYZHwnoRFgUaK4upcUE6d4cZku3o5M+CA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1193912},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./webmcp":{"types":"./dist/types/webmcp.d.ts","default":"./src/webmcp.js"},"./command":{"types":"./dist/types/command.d.ts","default":"./src/command.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./provider":{"types":"./dist/types/provider/index.d.ts","default":"./src/provider/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json","./continuation-node":{"types":"./dist/types/continuation-node.d.ts","default":"./src/continuation-node.js"}},"gitHead":"74036c063c5a4efa8c41aa878713d405223cc464","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@jarenjs/core":"^0.91.2","@jarenjs/emit":"^0.91.2","@jarenjs/json":"^0.91.2","@jarenjs/validate":"^0.91.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.91.2_1789572506943_0.05445882800754687","host":"s3://npm-registry-packages-npm-production"}},"0.91.3":{"name":"@jarenjs/contract","version":"0.91.3","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"author":{"name":"joham"},"license":"MIT","_id":"@jarenjs/contract@0.91.3","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"homepage":"https://github.com/jklarenbeek/jarenjs#readme","bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"bin":{"jaren-contract":"src/cli.js"},"dist":{"shasum":"995bc5b581df8920853453d5a9df9601494dd975","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.91.3.tgz","fileCount":109,"integrity":"sha512-J6OKecVYtndiltEAxlINCXt9ySnATBPbqJGy10ODUGylbAb+GOGsS+/36Ndgny2KNF2G9jkMVcq6ZpkqD2zBAA==","signatures":[{"sig":"MEQCIA0WU4+xmVPYWQSp9sLJk4NwND8PiLQIp79EkJroaqglAiBdwRHkrJtSNUk72Astd9wokuDuXBkaLKRbTZPCwGcfOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCKGBKKxe7ERLcoAADSQmPI7LYnoULpYvgmvnuWp3iNcQIhAK8Aj/P8AqkYFWgqrX+ctlshTzRGmmPSLz3mEYaZhZ/O","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1209131},"main":"./src/index.js","type":"module","types":"./dist/types/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./webmcp":{"types":"./dist/types/webmcp.d.ts","default":"./src/webmcp.js"},"./command":{"types":"./dist/types/command.d.ts","default":"./src/command.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./provider":{"types":"./dist/types/provider/index.d.ts","default":"./src/provider/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json","./continuation-node":{"types":"./dist/types/continuation-node.d.ts","default":"./src/continuation-node.js"}},"gitHead":"1577600d98b9ef23381843911958aab10728707f","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@jarenjs/core":"^0.91.3","@jarenjs/emit":"^0.91.3","@jarenjs/json":"^0.91.3","@jarenjs/validate":"^0.91.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/contract_0.91.3_1789659450689_0.8911870067701242","host":"s3://npm-registry-packages-npm-production"}},"0.91.4":{"_id":"@jarenjs/contract@0.91.4","bin":{"jaren-contract":"src/cli.js"},"bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"dist":{"shasum":"fe4b1a1b0e99f1d1cf23e7144c7dc58b0b3c5f03","tarball":"https://registry.npmjs.org/@jarenjs/contract/-/contract-0.91.4.tgz","fileCount":109,"integrity":"sha512-yx5z21gJlkl8cVfUn5DPDU9GU45qZrUPrMEUpTZZBIyT02tp79WZL2OaaGIG2x4JOhEfyUrKXOcexD+/+KXIDA==","signatures":[{"sig":"MEUCIE+PaUaZNbY+5Doen2kK+0BSlX40uniANl15uRIIS0/YAiEAxAxIgxt/OCStlhzmUBARSdi4JRAUTQv0nTIN2wf2nIk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCXv8LygZkw4eQI/Rz3+4fNuCD7RZGxE+MvpZSLjKpHdgIgSJlh+dL9rz33diU/c22nrMJJg3lveDPJnBtnyD1hfD4="}],"unpackedSize":1209131},"main":"./src/index.js","name":"@jarenjs/contract","type":"module","types":"./dist/types/index.d.ts","author":{"name":"joham"},"engines":{"node":">=24"},"exports":{".":{"types":"./dist/types/index.d.ts","default":"./src/index.js"},"./app":{"types":"./dist/types/app/index.d.ts","default":"./src/app/index.js"},"./diff":{"types":"./dist/types/diff.d.ts","default":"./src/diff.js"},"./http":{"types":"./dist/types/http/serve.d.ts","default":"./src/http/serve.js"},"./node":{"types":"./dist/types/adapters/node.d.ts","default":"./src/adapters/node.js"},"./port":{"types":"./dist/types/port/serve.d.ts","default":"./src/port/serve.js"},"./fetch":{"types":"./dist/types/adapters/fetch.d.ts","default":"./src/adapters/fetch.js"},"./local":{"types":"./dist/types/local/index.d.ts","default":"./src/local/index.js"},"./client":{"types":"./dist/types/client/http.d.ts","default":"./src/client/http.js"},"./ledger":{"types":"./dist/types/ledger.d.ts","default":"./src/ledger.js"},"./stream":{"types":"./dist/types/stream/server.d.ts","default":"./src/stream/server.js"},"./webmcp":{"types":"./dist/types/webmcp.d.ts","default":"./src/webmcp.js"},"./command":{"types":"./dist/types/command.d.ts","default":"./src/command.js"},"./project":{"types":"./dist/types/project/index.d.ts","default":"./src/project/index.js"},"./provider":{"types":"./dist/types/provider/index.d.ts","default":"./src/provider/index.js"},"./schemas/*":"./schemas/*","./package.json":"./package.json","./continuation-node":{"types":"./dist/types/continuation-node.d.ts","default":"./src/continuation-node.js"}},"gitHead":"30ec046081c02c80ad1916569c45e134e33fb82b","license":"MIT","private":false,"scripts":{"build":"npm run build:types","prepack":"npm run build:types","build:types":"tsc -p tsconfig.json"},"version":"0.91.4","_npmUser":{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"},"homepage":"https://github.com/jklarenbeek/jarenjs#readme","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"_npmVersion":"11.12.1","description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","directories":{},"maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@jarenjs/core":"^0.91.4","@jarenjs/emit":"^0.91.4","@jarenjs/json":"^0.91.4","@jarenjs/validate":"^0.91.4"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/contract_0.91.4_1789820688780_0.5264685714758712"}}},"time":{"created":"2026-08-23T10:41:24.880Z","modified":"2026-09-19T12:24:49.332Z","0.43.1":"2026-08-23T10:41:25.163Z","0.43.3":"2026-08-24T16:29:31.878Z","0.46.4":"2026-08-26T07:20:10.624Z","0.46.5":"2026-08-26T08:54:11.229Z","0.49.2":"2026-08-26T20:22:44.958Z","0.56.0":"2026-08-30T01:34:50.448Z","0.66.1":"2026-09-08T18:06:37.148Z","0.67.0":"2026-09-08T19:44:26.409Z","0.72.0":"2026-09-09T11:08:52.224Z","0.72.2":"2026-09-09T14:32:01.614Z","0.72.3":"2026-09-09T17:12:48.701Z","0.73.0":"2026-09-09T18:58:31.326Z","0.75.0":"2026-09-09T22:51:17.611Z","0.83.2":"2026-09-11T07:52:58.391Z","0.83.3":"2026-09-11T13:08:07.028Z","0.84.3":"2026-09-12T05:44:33.172Z","0.85.0":"2026-09-12T11:51:09.844Z","0.86.0":"2026-09-12T14:04:06.631Z","0.87.0":"2026-09-12T20:00:59.967Z","0.89.0":"2026-09-13T08:37:58.712Z","0.90.6":"2026-09-15T03:55:35.569Z","0.91.2":"2026-09-16T15:28:27.049Z","0.91.3":"2026-09-17T15:37:30.840Z","0.91.4":"2026-09-19T12:24:48.878Z"},"bugs":{"url":"https://github.com/jklarenbeek/jarenjs/issues"},"author":{"name":"joham"},"license":"MIT","homepage":"https://github.com/jklarenbeek/jarenjs#readme","keywords":["jaren","json","json-schema","contract","api","rest","router","openapi","typescript","idempotency","client","outcome"],"repository":{"url":"git+https://github.com/jklarenbeek/jarenjs.git","type":"git","directory":"packages/contract"},"description":"Operation contracts for the Jaren suite: the jaren-contract document declares JSON-in/JSON-out operations with kind, policy and an HTTP binding, compiled once into per-operation validators, transport normalizers and a static-beats-variable path matcher, s","maintainers":[{"name":"jklarenbeek","email":"jklarenbeek@gmail.com"}],"readme":"# @jarenjs/contract\n\nProviders and permanent commands compose with injected transport, authority and receipt repositories. The [adoption evidence ledger](../../docs/ADOPTION-EVIDENCE.md) separates synthetic qualification from actual provider guarantees; unknown single-send outcomes require explicit reconciliation.\n\nOperation contracts for the Jaren suite. A **`$contract` document** — the\nsibling of `$model`, `$fsm` and `jaren-app` — declares the operations two\nJaren ends may exchange: JSON in, JSON out, each with a *kind* (`read` or\n`command`), an input object schema, an output schema, declared errors, a\nbehavior *policy* and an HTTP *binding*. `compileContract` compiles it\n**once** into per-operation validators, transport normalizers and a path\nmatcher whose static segments beat variables regardless of registration\norder; `serveHttp` puts it behind HTTP as a **total** dispatch pipeline —\nplain request in, plain response out, every request-caused failure a\ncoded response — with a `fetch` and a `node` adapter and idempotency\nthrough a ledger interface; `openHttpClient` calls it from the other end\nwith the same validator and resolves a JSON **outcome** for everything a\nserver or a network can do; `contractAppBinding` + `createContractEffect`\nlet a `@jarenjs/app` document call every operation through one generated\ntask slot per operation and one registered effect; and the\n**projections** turn the same compiled contract into every artifact a\nconsumer wants beside the runtime — a browser-safe public subset that is\nitself a `$contract` document, a valid OpenAPI 3.1 document, TypeScript\ndeclarations with a typed operation map, Markdown reference docs and\nplain operation definitions — with a `jaren-contract` CLI whose\n`--check` fails CI the moment an artifact drifts. The contract knows its\nown identity: `contract.revision()` is the SHA-256 of the canonical\npublic projection, served at the well-known path and carried in every\noutcome's `meta.revision`, and `diffContracts(a, b)` classifies what\nchanged between two versions — breaking, additive, neutral or honestly\n**unknown** — by a published rule table, with `jaren-contract diff\n--fail-on breaking` as the CI gate. A `subscribe` operation streams a\n`@jarenjs/db` `live()`-shaped subscription — the snapshot, then\nLIVE-FORMAT `{ patch, seq }` emissions — as Server-Sent Events over\nhttp and as push frames over port, resumable by seq. Every wire error\nspeaks twelve languages: the `contract/*` message catalog ships English\nin-package and all eleven `@jarenjs/locales` packs carry it, key for\nkey, enforced by the repository's parity tests.\n\nZero dependencies outside the suite: `@jarenjs/core`, `@jarenjs/json`,\n`@jarenjs/validate`, and — reached only from the `./project` subpath, so\na bundle that never projects never carries it — `@jarenjs/emit`. No\n`eval`, CSP-safe; the adapters need only the\nplatform's `Request`/`Response` or Node's `(req, res)`. The normative contract is\n[docs/CONTRACT-FORMAT.md](docs/CONTRACT-FORMAT.md); the grammar is\npublished as JSON Schema in\n[`schemas/jaren-contract.schema.json`](schemas/jaren-contract.schema.json)\n(with a mechanically derived draft-07 twin).\n\n## The document in one glance\n\n```json\n{\n  \"$contract\": \"0.1\",\n  \"id\": \"shop\",\n  \"$defs\": {\n    \"Product\": { \"type\": \"object\",\n                 \"properties\": { \"id\": { \"type\": \"integer\" }, \"name\": { \"type\": \"string\" } },\n                 \"required\": [\"id\", \"name\"] }\n  },\n  \"operations\": {\n    \"catalog.load\": {\n      \"kind\": \"read\",\n      \"input\":  { \"type\": \"object\", \"properties\": { \"since\": { \"type\": \"string\", \"format\": \"date-time\" } } },\n      \"output\": { \"type\": \"array\", \"items\": { \"$ref\": \"#/$defs/Product\" } },\n      \"policy\": { \"task\": \"switch\", \"cache\": \"revision\" },\n      \"http\":   { \"method\": \"GET\", \"path\": \"/api/catalog\" }\n    },\n    \"product.save\": {\n      \"kind\": \"command\",\n      \"input\":  { \"type\": \"object\", \"properties\": {\n                  \"id\": { \"type\": \"integer\" }, \"revision\": { \"type\": \"integer\" },\n                  \"product\": { \"$ref\": \"#/$defs/Product\" } },\n                  \"required\": [\"id\", \"revision\", \"product\"] },\n      \"output\": { \"$ref\": \"#/$defs/Product\" },\n      \"errors\": { \"conflict\": { \"status\": 409 }, \"not-found\": { \"status\": 404 } },\n      \"policy\": { \"idempotency\": \"required\", \"revision\": \"input:/revision\" },\n      \"http\":   { \"method\": \"PUT\", \"path\": \"/api/products/{id}/master\" }\n    },\n    \"image.bytes\": {\n      \"kind\": \"read\",\n      \"input\":  { \"type\": \"object\", \"properties\": { \"id\": { \"type\": \"integer\" } }, \"required\": [\"id\"] },\n      \"output\": true,\n      \"http\":   { \"method\": \"GET\", \"path\": \"/api/images/{id}\", \"media\": \"application/octet-stream\" }\n    }\n  }\n}\n```\n\nOne input schema per operation; the binding only says **where** its\nmembers travel (`path` variables, then `query` for a read and `body` for\na command by default, or an explicit `in` map). Path and query strings\nare decoded by a normalizer compiled over exactly those members; body\nmembers are never coerced. An operation without `http` is bound to the\ncanonical `POST /<op-id>`. A non-JSON `media` marks an operation\n*opaque*: routed and matched, never validated as JSON, its bytes\nstreamed both ways — the handler pulls the upload chunk by chunk and\nmay answer a stream, and the HTTP client reaches it through `bytes()`.\n\n## The same document, by code\n\n`@jarenjs/linq/contract` is the pen that writes this format. The\nbuilders are the schema pen's, every `named()` schema is hoisted into\nthe contract's `$defs`, the members land in the order §12.1 fixes, and\nno default is written — so the document below is byte for byte the one\nabove:\n\n```js\nimport * as s from '@jarenjs/linq/schema';\nimport { command, defineContract, error, http, read } from '@jarenjs/linq/contract';\n\nconst Product = s.named('Product', s.object({ id: s.integer(), name: s.string() }).open());\n\nexport const shop = defineContract({ id: 'shop' }, {\n  'catalog.load': read({\n    input: s.object({ since: s.string().format('date-time').optional() }).open(),\n    output: s.array(Product),\n    policy: { task: 'switch', cache: 'revision' },\n    http: http({ method: 'GET', path: '/api/catalog' }),\n  }),\n  'product.save': command({\n    input: s.object({ id: s.integer(), revision: s.integer(), product: Product }).open(),\n    output: Product,\n    errors: { conflict: error({ status: 409 }), 'not-found': error({ status: 404 }) },\n    policy: { idempotency: 'required', revision: 'input:/revision' },\n    http: http({ method: 'PUT', path: '/api/products/{id}/master' }),\n  }),\n  'image.bytes': read({\n    input: s.object({ id: s.integer() }).open(),\n    output: true,\n    http: http({ method: 'GET', path: '/api/images/{id}', media: 'application/octet-stream' }),\n  }),\n});\n\ncompileContract(shop.document);                    // the same compile, the same errors\n```\n\nThe types come with it, without the `types` projection: `ContractOf<typeof\nshop>` is the operation map, and `typedClient`, `typedHandlers` and\n`typedTools` carry it onto a client, a handler table and an AI toolbox.\nThe pen's document is\n[CONTRACT-PEN.md](../linq/docs/CONTRACT-PEN.md); it imports nothing of\nthis package.\n\n## Compile once, use everywhere\n\n```js\nimport { compileContract } from '@jarenjs/contract';\n\nconst contract = compileContract(doc);            // ContractCompileError (JC00xx, with docPath) on a bad document\n\nconst hit = contract.match('PUT', '/api/products/12/master');\nhit.op.id;                                         // 'product.save'\nhit.params;                                        // { id: '12' }  — decoded strings\n\nconst op = contract.operations['product.save'];\nop.http.in;                                        // { id: 'path', revision: 'body', product: 'body' }\nop.input.transport.normalize({ id: '12' });        // { id: 12 }   — path/query strings → declared types\nop.input.validate({ id: 12, revision: 3, product: { id: 12, name: 'x' } }).valid;   // true\nop.output.validate({ id: 12 }).valid;              // false — the validator's collect-errors contract\nop.policy;                                         // every default materialized\nop.errors.conflict.status;                         // 409\n\ncontract.describe();                               // pure JSON: resolved bindings + policy, defaults marked `inferred`\n```\n\nThe compile is synchronous and total for a hostile document: an\nunresolved `$ref`, an unknown member (the vocabulary is closed), a\n`GET` with a body, two operations sharing a route shape, a reserved\ntemplate form — each is a `ContractCompileError` with a stable code and\nthe JSON Pointer of the member at fault, at compile, never at request\ntime.\n\n## Serve it over HTTP\n\n```js\nimport { compileContract } from '@jarenjs/contract';\nimport { serveHttp } from '@jarenjs/contract/http';\nimport { toNodeHandler } from '@jarenjs/contract/node';     // or toFetchHandler from '@jarenjs/contract/fetch'\nimport { createMemoryLedger } from '@jarenjs/contract/ledger';\nimport http from 'node:http';\n\nconst server = serveHttp(compileContract(doc), {\n  'catalog.load': async (input, ctx) => {                     // input = { since? } — query strings already coerced\n    const catalog = await loadCatalog(input.since);\n    ctx.etag(String(catalog.revision));                       // 304 on a matching If-None-Match, etag: W/\"…\" otherwise\n    return catalog;                                           // validated against the output schema before it leaves\n  },\n  'product.save': async (input, ctx) => {                     // input = { id, revision, product } — path + body assembled\n    const saved = await save(input);\n    return saved ?? ctx.fail('conflict', {}, { current: await current(input.id) });   // 409, the declared code on the wire\n  },\n  'image.bytes': (input, ctx) => ({ status: 200, headers: { 'content-type': 'image/png' }, body: bytes(input.id) }),   // opaque: raw\n}, { ledger: createMemoryLedger() });                         // required: product.save declares idempotency\n\nhttp.createServer(toNodeHandler(server)).listen(8080);\n\n// or drive it directly — a pure function over plain objects, no socket needed\nconst response = await server.dispatch({ method: 'GET', url: '/api/catalog?since=2026-01-01T00:00:00Z', headers: {}, body: null });\nresponse.status;                                             // 200\nresponse.headers['x-jaren-trace'];                           // the server trace of this request\nJSON.parse(response.body);                                   // the catalog\n```\n\nEvery option has a default. The host facts among them come from a\n`runtime` record (`@jarenjs/core/runtime`) when one is given — and every\nbinding takes one: `serveHttp`, `servePort` and `openLocalClient` mint\ntheir trace from its `uuid`, `openPortClient` its client id, `openHttpClient`\nits idempotency keys (its `now` stamps the key records and its `random`\ndraws the retry jitter), and `createMemoryLedger` stamps claims with its\n`now`. So a server, its ledger, a client, a store and a job queue share\none record and a deterministic run is configured once; an explicit `trace`,\n`keys` or `now` still wins over the record's member, and with no record\nevery binding reads the platform as it always did. Give the server and its\nledger the SAME record: a ledger built without a clock follows the\nbinding's instants, and one built with its own clock must not disagree\nwith the server that stamps its claims.\n\nThe pipeline routes (404/405 with `Allow`), enforces the body limit\n(413) before reading, checks the media (415), parses (400), assembles the\ninput from path, query and headers through a prototype-safe setter,\nnormalizes the transport strings, validates (400 with `details` by\n`policy.errors.details`), claims the idempotency key, decides a declared\nprecondition, calls the handler through one promise boundary, validates\nthe output (500 — the server broke the contract), applies\n`If-Match`/`If-None-Match`, serializes.\nEvery non-2xx body is `{ code, message, requestId, details?, retryable }`\nwith `x-jaren-trace` on the response; a handler's thrown error never\nreaches the wire (`onError` sees it). `server.capabilities` says what\nthe binding carries — `head`, `etag`, `idempotency`, `validatedOutput` —\nand never degrades silently: an idempotent operation without a `ledger`\nis refused at construction. `GET /.well-known/jaren-contract` answers\n`describe()`. The normative pipeline, taxonomy and ledger interface are\n[CONTRACT-FORMAT.md §7–§9](docs/CONTRACT-FORMAT.md#7-the-http-server-binding).\n\n**The host lifecycle.** Every server binding takes the same two hooks\n([§7.7](docs/CONTRACT-FORMAT.md#77-the-host-lifecycle-identify-acquire-release-settle)):\n`identify(meta)` runs after the route resolved and before a byte of the\nbody is read, and answers `{ host, release? }` — the host `scope(ctx)`\nsees; `acquire(input, identity, enter)` runs after the input validated\nand after a new idempotency claim, and calls `enter({ host, release?,\nsettlement? })` once — the host the handler sees as `ctx.host`, frozen\nbeside it. A host that opens a transaction around `enter` commits it\nwhen `enter` resolves and rolls it back when it rejects, and a lease\nwhose `settlement` is `{ ledger: createDbLedger(tx), required: true }`\nhas the claim recorded inside `enter`, so the domain write and the\nreceipt commit together or not at all. Releases run once each, acquired\nbefore identity, before the response is exposed — or when an opaque\nbody or an SSE stream is done. A hook fault is the host's (`JC2008`,\nobserved), a hook's `meta.fail(code)` a declared failure. The generated\n`HandlerContext<Host, Carrier>` carries `ctx.host` and `ctx.carrier`;\nport and local contexts spell the HTTP-only members as `null`.\n\n```js\nconst server = serveHttp(contract, handlers, {\n  ledger: createDbLedger(db),\n  identify: (meta) => ({ host: { tenant: meta.headers['x-tenant'] ?? null } }),\n  acquire: (input, identity, enter) => db.transaction(\n    (tx) => enter({ host: { db: tx }, settlement: { ledger: createDbLedger(tx), required: true } }),\n    { mode: 'immediate' }),\n});\n```\n\nWithout a declared resolver, `If-Match`/`If-None-Match` are applied\n**after** the handler and only when it armed a tag — a cache device,\n**never a write guard**. The `preconditions` option is the write guard:\na per-operation resolver of the CURRENT entity tag, decided before the\nhandler, so a stale `If-Match` refuses 412 with zero handler runs and a\nmatching `If-None-Match` read answers 304 without computing the\nrepresentation.\n\n```js\nconst server = serveHttp(contract, handlers, {\n  ledger: createMemoryLedger(),\n  preconditions: {\n    'product.save': (input) => `r${revisionOf(input.id)}`,   // a bare string is a STRONG tag; null = no representation\n  },\n});\n```\n\n### Recipes: Fastify, Hono, Express\n\nNone of these is a dependency; each recipe is executed by a test that\nimports the framework from the benchmark workspace.\n\n```js\n// Fastify — hijack before parsing; the node adapter carries body limits, SSE and abort\nconst app = fastify();\nconst handler = toNodeHandler(server);\napp.all('/*', {\n  onRequest: (req, reply, done) => { reply.hijack(); handler(req.raw, reply.raw); done(); },\n}, () => {});\n```\n\n`reply.hijack()` hands the untouched socket to the node adapter before\nany parser runs, so the recipe coexists with an existing app: routes\nregistered beside it keep their parsers and parsed bodies, static paths\nbeat the wildcard, and Fastify's own `bodyLimit` never answers — the\noperation's `policy.limits.maxBodyBytes` is the single body ceiling,\nrefusing as the contract's coded `JC2003` instead of Fastify's\n`FST_ERR_CTP_BODY_TOO_LARGE`. Subscribe operations stream (the adapter\ncalls `response.stream`, writing each event only after the previous one\ndrained — a slow reader parks the source instead of growing a buffer)\nand a dropped peer reaches the handler as `ctx.signal` — the earlier\nbuffer-parser recipe carried neither. To\nconfine the contract, register the same route in an encapsulated plugin\nwith `{ prefix }`; the prefix must then prefix the contract's declared\npaths (canonical bindings and the well-known path included). One\nshutdown note: a hijacked request never completes in Fastify's own\nbookkeeping, so its keep-alive socket never counts as idle — close the\ndispatcher first, then `app.server.closeAllConnections()` before\n`app.close()`.\n\n```js\n// Hono — the fetch handler is the whole app (Bun.serve, Deno, workers alike)\nconst app = new Hono();\napp.all('*', (c) => toFetchHandler(server)(c.req.raw));\n```\n\n```js\n// Express — the node handler is middleware\nconst app = express();\napp.use(toNodeHandler(server));\n```\n\n### Recipe: large outputs — validate on rebuild, serve by revision\n\n`validateOutput: \"always\"` proves every response against the contract\nand is the right default; on a multi-megabyte cached representation it\nis also the measured heavy share of the hot row (the benchmark's fourth\ncolumn keeps it visible — docs/ROADMAP.md). The honest downgrade is not\n\"skip validation\" but \"validate once per REVISION instead of once per\nrequest\": prove the snapshot when it is rebuilt, arm its revision as the\ntag, and let `preconditions` answer 304 before the handler even runs.\n\n```js\nconst validateCatalog = contract.operations['catalog.load'].output.validate;\nconst cache = { revision: 0, value: null };\nfunction rebuild(next) {                 // on every write to the source\n  const v = validateCatalog(next);       // the JC2010 caught at build time, once\n  if (!(v === true || v?.valid === true)) throw new Error('the snapshot breaks the contract');\n  cache.revision += 1;\n  cache.value = next;\n}\nconst server = serveHttp(contract, {\n  ...handlers,\n  'catalog.load': (input, ctx) => { ctx.etag(`r${cache.revision}`, { strong: true }); return cache.value; },\n}, {\n  validateOutput: 'never',               // declared: capabilities.validatedOutput === false\n  preconditions: { 'catalog.load': () => `r${cache.revision}` },   // 304 BEFORE the handler\n});\n```\n\nThe tradeoff is declared, never silent: `validateOutput` is server-wide,\nso `capabilities.validatedOutput === false` tells every consumer the\nper-request guarantee moved to the rebuild path — keep that path the\nonly writer of the cache, or the guarantee is gone.\n\n## Call it from the other end\n\n```js\nimport { openHttpClient } from '@jarenjs/contract/client';\n\nconst client = openHttpClient(contract, { baseUrl: 'https://shop.example', timeoutMs: 5000 });\n\nconst loaded = await client.invoke('catalog.load', { since: '2026-01-01T00:00:00Z' }, { attempt: 1 });\n// { ok: true, value: [...], meta: { op, attempt: 1, trace: '<x-jaren-trace>', revision, etag: 'W/\"…\"', notModified: false } }\n// meta.revision is the server's contract revision once negotiate() has learned it, null before\n\nconst saved = await client.invoke('product.save', { id: 12, revision: 3, product });   // validated with the SAME validator the server runs, then PUT /api/products/12/master with the body members as JSON and a generated Idempotency-Key\nif (!saved.ok) {\n  saved.kind;            // 'failure' (a declared error or a JC2xxx the server answered) | 'network' | 'contract' | 'cancelled'\n  saved.error;           // { code: 'conflict', message, status: 409, details: { current }, retryable: false } — JSON, never an Error\n}\nclient.url('image.bytes', { id: 7 });         // 'https://shop.example/api/images/7' — an opaque operation is a URL, not an invoke\nawait client.negotiate();                     // { compatible, reason: 'same-version' | 'server-accepts' | 'client-accepts' | 'version-mismatch' | 'unreachable' | 'not-a-contract', server, error }\n```\n\n`invoke` **never rejects** for anything a server or a network can do —\ninvalid input is refused before anything is sent (`JC2050`), a transport\nfailure is `network` (`JC2051`, the error's name only — never its text),\nan abort is `cancelled` (`JC2052`), an invalid or undeclared response is\n`contract` (`JC2053`/`JC2055`); it throws only for the host's own\nmistake (`JC1005`: an unknown or opaque operation). The three identities\nstay apart by construction: `meta.attempt` is the caller's and is never\nread from a response, `meta.trace` is the server's `x-jaren-trace`, and\nthe idempotency key is generated here (`keys`, or `ctx.idempotencyKey`)\nand travels only as `Idempotency-Key` — with a durable `storage` it is\nrecorded without the input and `client.pending()` lists what a restart\nmust reconcile. Retry runs only under a declared `policy.retry`. The\nnormative client is [CONTRACT-FORMAT.md §10](docs/CONTRACT-FORMAT.md#10-the-http-client-binding).\n\n## Bindings: the same contract with no wire, or a message channel\n\nHTTP is one of three bindings; the other two carry the SAME operations,\nhandlers and outcomes where no HTTP exists. **`local`** is the pipeline\nin-process — the test seam, SSR, a CLI calling its own operations — with\nthe client and the server as one object:\n\n```js\nimport { openLocalClient } from '@jarenjs/contract/local';   // serveLocal is the same factory\n\nconst client = openLocalClient(contract, handlers);          // the serveHttp handler table, reused verbatim\nconst saved = await client.invoke('product.save', { id: 12, revision: 3, product });\n// a declared failure: { ok: false, kind: 'failure', error: { code: 'conflict', …, status: null, … } }\n// — status is null and PRESENT: this binding carries no statuses and says so, never omits the member\n```\n\nThe jaren website runs its whole data plane on this binding: a compiled\n`$contract` declares the reads for its package census, build provenance,\nbenchmark artifacts and repository documents, the browser resolves every one\nof them through `openLocalClient` with output validation on, and the build's\ngenerators prove what they write against the output schema of the operation\nthe page will read it through. It is a static site — there is no server to\ntalk to — so the contract buys shape rather than transport: a drifted\nartifact settles as a typed refusal instead of a wrong render.\n\n**`port`** is request/response over a `MessagePort`, a `Worker`, a\n`BroadcastChannel` or a worker's own `self` — JSON frames marked\n`jaren: \"contract/0.1\"` (the grammar ships as\n`schemas/jaren-contract-port.schema.json`), so contract traffic shares a\nchannel with anything else without touching it:\n\n```js\n// inside the worker\nimport { servePort } from '@jarenjs/contract/port';\nservePort(contract, handlers, { channel: self });\n\n// in the page\nimport { openPortClient } from '@jarenjs/contract/port';\nconst client = openPortClient(contract, { channel: worker, timeoutMs: 15_000 });\nconst rows = await client.invoke('data.rows', { collection: 'notes' });\n```\n\nRequest ids are `\"<clientId>:<seq>\"` with a UUID per client instance,\nand a client ignores every frame outside its own prefix — so two tabs\non one shared channel can never settle each other's requests, whatever\nthey fire concurrently (the repository's own data studio runs its\ncross-tab db-owner protocol on exactly this). A handler fault answers\n`JC2070` (kind `contract` — never dressed as a declared failure), an\nunanswered request is `JC2072` after `timeoutMs`, cancellation crosses\nas a `cancel` frame with the id scoping as the guarantee.\n`createContractEffect` and `contractTools` take these clients unchanged\n— they read `invoke` and nothing else. What each binding carries, from\nits frozen `capabilities`:\n\n| capability | `http` server / client | `local` | `port` |\n|---|---|---|---|\n| `status` | yes | no (`error.status: null`) | no (`error.status: null`) |\n| `headers` | yes | no | no |\n| `media` (opaque operations) | yes — streamed both ways; `client.bytes()` | no (`JC1005` at invoke) | no (`JC1005`; `JC2071` to a foreign asker) |\n| `etag` | yes | no | no |\n| `idempotency` | with a `ledger` / always sent | no — declared policy inert, stated | no — `key` reserved in the frame grammar |\n| `stream` (`subscribe`) | yes — SSE, `Last-Event-ID` resumption (paged replay, bounded queue) | no (`JC1005` at invoke) | yes — push frames, per-client streams (the same replay and bounds) |\n| `cancel` | `'signal'` | `'signal'` | `'message'` |\n\nThe normative bindings are [CONTRACT-FORMAT.md §15–§16](docs/CONTRACT-FORMAT.md#15-the-local-binding),\nthe stream wire [§17–§19](docs/CONTRACT-FORMAT.md#17-subscribe-operations).\n\n## Call it from a @jarenjs/app document\n\n```js\nimport { createApp, createTaskEffect } from '@jarenjs/app';\nimport { contractAppBinding, createContractEffect } from '@jarenjs/contract/app';\n\nconst { slice, actions, schema } = contractAppBinding(contract, { ops: ['catalog.load', 'product.save'] });\n// slice   → { 'catalog.load': { id: 0, status: 'idle', kind: null, value: null, error: null, meta: null }, … }   pure JSON, mount at /contract\n// actions → 'contract/catalog.load/start' + '/done' + '/reset' per operation — the TASKS.md id guard built in\n// schema  → the slice's JSON Schema for validateState (value = the output schema or null)\n\nconst app = createApp({ state: { contract: slice }, view, actions: { ...actions, ...own } }, {\n  effects: { contract: createContractEffect(client, { createTaskEffect }) },   // ONE effect; the task mode comes from policy.task\n});\napp.dispatch('contract/catalog.load/start', { since: '2026-01-01T00:00:00Z' });\n```\n\nA `subscribe` operation becomes a **subscription** instead of a task:\nthe binding additionally returns `subs` (spread into the app document)\nand `createContractSubscription(client)` is the one `contract-stream`\nhandler they run — `start` flips the slot live, the snapshot and every\npatch land id- and seq-guarded, and the maintained document keeps\nLIVE's structural sharing because the handler applies the emissions\nwith `@jarenjs/json/patch` ([CONTRACT-FORMAT.md §11.4](docs/CONTRACT-FORMAT.md#114-subscribe-operations-the-generated-subscription)).\n\nNo route strings, no hand-written wrappers, and no import of\n`@jarenjs/app` from this package — the documents cross as JSON and the\ntask-effect factory crosses as a function the host passes in. A\nsuperseded read dispatches once with the newer result, an out-of-order\nolder response is rejected by the id guard, a double-dispatched command\nruns once and its result lands, a slot can always be released with\n`reset`, and every failure lands in state as the same outcome shape with\nits kind beside it.\nThe runnable walkthrough is [docs/APP-INTEGRATION.md](docs/APP-INTEGRATION.md);\nthe normative binding is [CONTRACT-FORMAT.md §11](docs/CONTRACT-FORMAT.md#11-the-app-binding).\n\n## Project it to everything else\n\nOne compiled contract, five artifacts — every one deterministic, every\none checkable in CI (`@jarenjs/contract/project`):\n\n```js\nimport { publicProjection, toOpenApi, toTypeScript, toMarkdown, contractTools } from '@jarenjs/contract/project';\n\npublicProjection(contract);   // the browser-safe subset — ITSELF a valid $contract document\n                              // (server-audience operations, limits and error detail levels stripped;\n                              //  operations with `policy: { audience: 'server' }` never leave the server)\ntoOpenApi(contract, { info: { title: 'Shop', version: '5' } });\n                              // → { document, dropped }: OpenAPI 3.1, validated in this repo against the\n                              //   official meta-schema; declared errors become enum-pinned wire-error\n                              //   schemas; policy rides along as x-jaren-policy; every keyword the dialect\n                              //   cannot carry is refused (JC0060) or — under lenient — dropped and REPORTED\ntoTypeScript(contract);       // one .d.ts: CatalogLoadInput/Output per operation, a typed Operations map,\n                              //   Outcome<T>/Meta/WireError exactly as every binding builds them, and a\n                              //   typed Client and Handlers — invoke('product.save', …) is fully typed\ntoMarkdown(contract);         // reference docs: operations table, per-operation sections, the type tables\ncontractTools(contract, client);\n                              // plain ToolDefs for the shared WebMCP adapter:\n                              //   name 'product_save', a self-contained inputSchema, execute → the outcome\n```\n\nAnd on the command line, the drift gate:\n\n```sh\njaren-contract openapi --contract shop.json --out api/ --info-title Shop\njaren-contract types   --contract shop.js   --out src/shop.d.ts --check   # exit 1 when stale; the module IS the source\njaren-contract docs    --contract shop.json --out docs/\njaren-contract diff    --from api/v1.json --to shop.js --fail-on breaking\n```\n\nEvery document flag — `--contract`, `--from`, `--to` — takes a `.json`\nfile or a pure module (`.js`, `.mjs`, `.cjs`, and `.ts`/`.mts`/`.cts`\nwhere Node strips types) whose `default` or `contract` export is the\ndocument or a `@jarenjs/linq/contract` pen (its `toJSON()` is the\nemission); the module is evaluated twice and refused (exit 2) when the\ntwo emissions differ, so a clock or randomness in a contract module\nnever projects two different declarations. The loader is\n`@jarenjs/json/node`, the Node-only subpath `jaren-db` shares — this\npackage imports neither `linq` nor `db`. `types --out … --check` against\nthe module is the types twin CI runs: exit 1 when the declaration is\nmissing or stale, 0 when current, and an ordinary run rewrites nothing\nthat did not change.\n\n`describe` and `public` print JSON; exit 0 current/written, 1 drift\nunder `--check`, 2 on a compile refusal printed as `code docPath reason`\nor an unreadable, impure or undocumented input.\nThe normative projection rules — the public projection's member order\n(the revision hashes those bytes), the OpenAPI mapping and keyword\npolicy, the tool naming — are\n[CONTRACT-FORMAT.md §12](docs/CONTRACT-FORMAT.md#12-projections).\n\n## Know what changed: revision and diff\n\n```js\nimport { diffContracts, isCompatible } from '@jarenjs/contract/diff';\n\nawait contract.revision();\n// 64 lowercase hex: the SHA-256 over the RFC 8785 canonical bytes of the\n// public projection — memoized, so it is computed at most once per process.\n// Two compiles of equal documents agree across machines; a change a client\n// can observe moves it; a server-audience operation or a policy.limits\n// value does not. GET /.well-known/jaren-contract answers it (computed\n// lazily on the first request), negotiate() learns it, and every outcome\n// after that carries it in meta.revision — correlation data, never the\n// compatibility decision.\n\nconst { breaking, additive, neutral, unknown } = diffContracts(v1, v2);\n// every change classified by the CONTRACT-FORMAT §13 rule table (R1–R15):\n//   breaking — an operation or error removed, a binding member moved, a new\n//              required input member, a narrowed input, a removed/optional-\n//              ized/narrowed output member, idempotency now required, an\n//              operation withdrawn to audience: server\n//   additive — an operation/error added, an optional input member, a widened\n//              schema, a relaxed idempotency\n//   neutral  — task mode, retry, cache, policy.revision, doc\n//   unknown  — what the checker does not model (anyOf/if/not, a CHANGED\n//              pattern, an external $ref, an error details schema):\n//              REPORTED, never silently classed\n// each Change = { kind, op, docPath, from?, to?, rule } — the docPath a\n// validator error would name, $refs resolved\n\nisCompatible(clientContract, serverContract);\n// the negotiation rule as a pure function (same version, or either end's\n// compat names the other's) — the SAME implementation negotiate() runs,\n// exported so a server can refuse an incompatible peer too\n```\n\n```sh\njaren-contract diff --from api/v1.json --to api/v2.json --fail-on breaking   # exit 1 on a breaking change\n```\n\n`--fail-on` requires at least one change class; a missing or empty value is a\nusage error (exit 2), so an unset CI variable cannot silently disable the gate.\n\nThe revision answers \"is this byte-for-byte the contract I compiled\nagainst?\"; `version`/`compat` answer \"do the authors claim we speak?\";\nthe diff answers \"what exactly moved, and does it break me?\". They are\nthree different questions and none is derived from another —\n[CONTRACT-FORMAT.md §13–§14](docs/CONTRACT-FORMAT.md#13-the-breaking-change-diff).\n\n## Benchmarks\n\nMeasured on the committed suite (`npm run benchmark:contract` — a real\n123-route table, 47 GET; recipes, fairness decisions and the correctness\ngates are in the file's header), published through the repository's\nbenchmark-figure gate so no number here is typed by hand:\n\n- **Route match**: the compiled matcher resolves the probe mix —\n  static hot paths, variables, the static-beats-variable case, a miss —\n  at <!--fact:contract.match.vs-fmw-->172 ns per lookup vs find-my-way's 185 ns<!--/fact-->;\n  hono's TrieRouter is <!--fact:contract.match.vs-hono-->1.9x<!--/fact--> behind, and its RegExpRouter refuses this\n  route table outright (a static path registered after a param sibling).\n- **Dispatch, in-process**: the whole pipeline (route, decode, validate\n  input, handler, validate output,\n  serialize) is <!--fact:contract.dispatch.vs-fastify-->2.8–11.9x<!--/fact-->\n  faster than Fastify driven through its own `inject` — a number that\n  includes Fastify's mock-stream harness, which is why the next row\n  exists.\n- **The honest loss**: the bare pieces Fastify composes — find-my-way +\n  Ajv + fast-json-stringify, called directly with no harness and no\n  response validation\n  — are <!--fact:contract.dispatch.losses-->2.5–11.4x<!--/fact--> faster than\n  this pipeline. The wide end of that band is the bare `{ok:true}`\n  route, where the rival's compiled serializer answers in ~200 ns and\n  there is almost no work to amortize the pipeline against; on the\n  request shapes with real bodies and validation the loss sits at the\n  narrow end. That is the measured price of a total dispatch (every\n  hostile input settles into a coded response) that also proves the\n  server kept its own contract before a byte leaves. Over a real\n  loopback socket the two stacks are level: the socket dominates both.\n- **The optimization trigger**: on the heaviest in-process row (the\n  5×4-body PUT), response serialization is <!--fact:contract.serialization.share-->11.5%<!--/fact-->\n  of the request and output validation is <!--fact:contract.validateOutput.share-->29%<!--/fact-->.\n  A schema-driven serializer stays unscheduled while serialization is below\n  25%: even making that stage free would move the whole request by only about a\n  tenth. The suite republishes both shares on every measured run; for a large\n  cached representation, validate on rebuild and serve by revision instead of\n  paying validation on every request.\n- **Revision**: computing it\n  costs <!--fact:contract.revision.ms-->2.8 ms<!--/fact--> for the 123-operation\n  contract, once per process.\n\n## What it is not\n\nBoundaries, stated as plainly as the capabilities — each one a\ndeliberate decision, not a gap:\n\n- **Not a server framework.** No process manager, no middleware stack,\n  no plugin system, no logger. The server binding is a pure dispatch\n  pipeline over plain request/response objects; bring `node:http`,\n  `Bun.serve`, or any framework through the ≤15-line adapter recipes\n  above.\n- **No authentication or authorization.** A request that reaches the\n  pipeline is dispatched by route alone. Compose auth in front of the\n  handler table (the adapter seam is where a host's middleware already\n  runs) — the contract declares what may be said, not who may say it.\n- **No transport encryption.** TLS belongs to the server or proxy that\n  terminates the socket.\n- **No replay protection beyond idempotency keys.** `Idempotency-Key`\n  deduplicates a declared command through the host's ledger; it is not\n  a nonce scheme and does not authenticate the sender.\n- **Bytes are not JSON.** A non-JSON `media` marks an operation opaque:\n  routed and matched, path and query still decoded and validated, the\n  body streamed to the handler as a pull source that never yields past\n  the declared limit, and never modeled. `client.bytes()` is its typed\n  door — a live response stream, never a JSON value — and `invoke`\n  refuses it. Images and OAuth redirects are host paths, not JSON\n  operations.\n- **No replication, and no storage of its own.** The ledger and the\n  command lifecycle ship as JSON documents (`$model`, `$fsm`); the\n  in-memory ledger is for tests and single-process hosts. A durable\n  ledger is one import away and adds no dependency here:\n  `createDbLedger` in `@jarenjs/linq/db` implements the ledger over a\n  `@jarenjs/db` store (immediate claims, a persisted generation fence,\n  settlement inside the host's transaction), and\n  [CONTRACT-FORMAT.md §8.1](docs/CONTRACT-FORMAT.md#81-a-durable-ledger-over-nodesqlite--an-example-not-an-export)\n  is a complete, tested ~60-line ledger over `node:sqlite` (built into\n  Node ≥ 24) for a host without the store — an example, not an export.\n- **Reconnect is opt-in, HTTP-only, and network-only.**\n  `subscribe(op, input, { reconnect: { max } })` re-establishes a\n  stream after a network loss — a rejected request, a missed heartbeat,\n  the server's `JC2096`, a body that ends before `end` — from the last\n  delivered seq under the retry backoff, and ends with one `JC2097`\n  when the budget is spent; a declared failure, a contract outcome or\n  the server's `end` never reconnects, and the port client has no\n  network loss to reconnect from. Absent, a `network` outcome is\n  delivered as is and the host re-enters `subscribe` with the\n  subscription's `lastSeq`.\n\n## What is here\n\nHere: the document and its grammar, `compileContract`, `contract.match`,\n`describe()`, the `JC0001–JC0017` compile errors; the HTTP server binding\n(`serveHttp`, the `JC2001–JC2015` wire taxonomy with its English catalog,\n`fetch` and `node` adapters, the ledger interface with `createMemoryLedger`\nand the `idempotencyLedgerModel`/`commandLifecycleFsm` documents); the HTTP\nclient (`openHttpClient`, the D6 outcomes with the `JC2050–JC2058` client\ncodes, the client half of idempotency, retry, `negotiate`, and `bytes`\nfor the opaque operations — a live response stream and a streamed\nupload, typed as `HttpClient`/`ByteOperations` by the projection and\n`typedHttpClient`/`OpaqueOf` by the pen); the app\nbinding (`contractAppBinding`, `createContractEffect`); the projections\n(`publicProjection`, `toOpenApi` with `JC0060`, `toTypeScript`,\n`toMarkdown`, `contractTools`); `contract.revision()` with `JC0061`,\n`diffContracts`/`isCompatible` and the `jaren-contract` CLI with `diff\n--fail-on`; the `local` and `port` bindings (`openLocalClient`/`serveLocal`,\n`servePort`/`openPortClient`, the `JC2070–JC2074` codes and the\n`jaren-contract-port` frame grammar with collision-free client-scoped\nrequest ids); the `subscribe` kind with the `stream` binding\n(`client.subscribe` over SSE and port push frames carrying LIVE-FORMAT\npatches, `JC2090–JC2095`, the generated app subscription with\n`createContractSubscription`, and the one SSE codec of the suite in\n`@jarenjs/core/text/sse`); and the `contract/*` locale packs in all\neleven `@jarenjs/locales` languages, key parity enforced by test.\n\n## Exports\n\nEvery subpath a consumer can import, derived from the manifest by\n`npm run docs:derive` (`npm run docs:check` fails when the two drift):\n\n<!--fact:exports.contract-->\n| Import | Kind | Declarations |\n|---|---|---|\n| `@jarenjs/contract` | JavaScript | declared |\n| `@jarenjs/contract/http` | JavaScript | declared |\n| `@jarenjs/contract/fetch` | JavaScript | declared |\n| `@jarenjs/contract/node` | JavaScript | declared |\n| `@jarenjs/contract/continuation-node` | JavaScript | declared |\n| `@jarenjs/contract/ledger` | JavaScript | declared |\n| `@jarenjs/contract/diff` | JavaScript | declared |\n| `@jarenjs/contract/client` | JavaScript | declared |\n| `@jarenjs/contract/local` | JavaScript | declared |\n| `@jarenjs/contract/port` | JavaScript | declared |\n| `@jarenjs/contract/stream` | JavaScript | declared |\n| `@jarenjs/contract/app` | JavaScript | declared |\n| `@jarenjs/contract/project` | JavaScript | declared |\n| `@jarenjs/contract/schemas/continuation.schema.json` | schema | — |\n| `@jarenjs/contract/schemas/jaren-contract-port.draft-07.schema.json` | schema | — |\n| `@jarenjs/contract/schemas/jaren-contract-port.schema.json` | schema | — |\n| `@jarenjs/contract/schemas/jaren-contract.draft-07.schema.json` | schema | — |\n| `@jarenjs/contract/schemas/jaren-contract.schema.json` | schema | — |\n| `@jarenjs/contract/package.json` | metadata | — |\n| `@jarenjs/contract/provider` | JavaScript | declared |\n| `@jarenjs/contract/command` | JavaScript | declared |\n| `@jarenjs/contract/webmcp` | JavaScript | declared |\n<!--/fact-->\n\nAuthor JSON template catalogs and MessageSpec references with the\n[messages pen](../linq/docs/MESSAGES-PEN.md); existing locale render functions\nretain their pluralization and formatting behavior.\n\n## Structured query inputs and app reconnect\n\nObject- and array-typed query members use one JSON-encoded parameter,\nincluding empty arrays, nulls and nested values. Scalar strings stay\nliteral; parsed JSON is validated without coercion. The client, URL\nbuilder, server dispatcher and OpenAPI projection share this codec.\nMalformed or repeated JSON members are `JC2012`. Handwritten callers\nmust migrate repeated array keys (`tag=a&tag=b`) to one encoded JSON array;\ndeploy matching client/server versions and revise the contract's `version`\nfor revision negotiation. See [the wire rules](docs/CONTRACT-FORMAT.md#4-the-http-binding-and-member-locations).\n\nOpt into HTTP subscription recovery per operation:\n\n```javascript\nconst binding = contractAppBinding(contract, {\n  subs: { 'board.feed': { reconnect: { max: 2 } } },\n});\n```\n\nThe generated subscription forwards the option to `client.subscribe`.\nThe slot stays live with its id and last value while reconnecting; replay\ncontinues from the last delivered sequence. Exhaustion surfaces `JC2097`.\nStop, reset and app destruction stop recovery. Without the option,\nnetwork loss is surfaced immediately; an explicit server end remains\nterminal. Port and local channel lifecycles are unchanged.\n\nThe fixed-heap host-seam test measures the Node response's writable queue\nand the producer's unwritten chunk separately from bytes already accepted\nby TCP. The in-process Fetch leg can measure produced-minus-consumed\nbytes directly. Complete-byte hashes, cursor pulls and cancellation\nfinalizers remain part of the same end-to-end test.\n\n`@jarenjs/contract/provider` supplies bounded provider execution, compiled JSON\nREST/GraphQL dialects and private run authority. Partial observations retain\nwire text and never become complete snapshots. See\n[provider descriptors and ingestion](docs/PROVIDER-FORMAT.md).\n\n## Browser operation registration\n\n`@jarenjs/contract/webmcp` exports `registerWebMcp` for plain invokable tool\ndefinitions. Its browser boundary needs no assistant, provider or model. Supply\noperations that already validate their inputs, for example projected contract\noperations. Importing the module does not inspect browser globals.\n\n```js\nimport { registerWebMcp } from '@jarenjs/contract/webmcp';\nconst binding = registerWebMcp(tools, { realm: window });\nconst outcome = await binding.ready;\n// On host teardown:\nawait binding.dispose();\n```\n\nAn explicitly supplied `context` is authoritative, including null or undefined.\nOtherwise the adapter discovers a usable `document.modelContext`, then\n`navigator.modelContext`, preserving method receivers and registering through\nonly one context. Missing/inaccessible objects and non-callable methods do not\nmask the other root. `registerTool` takes precedence over legacy `provideContext`\non either root. Only the explicit `WEBMCP_UNSUPPORTED` sentinel permits fallback\nafter invoking a method; an injected implementation may return it only before\nany mutation. Exceptions, permission refusals and partial registration never\ntrigger a second registration attempt.\n\nThe binding immediately exposes `ready`, `status` and `dispose`. `ready` resolves\nto `registered`, `unavailable`, `failed` or `disposed` with counts, the selected\nroot/method and diagnostics; starting a promise does not report completion.\nBrowser failures retain their original error and separate cleanup errors.\nDispose deactivates callbacks immediately, then waits for pending registration\nand removes only owned successful registrations. Repeated disposal is harmless.\n\nRemoval uses a returned cleanup handle or `unregisterTool` where available.\nRegistration always receives an abort signal. Set `lifecycle: 'abort'` only for\na host qualified to support it; otherwise native removal without a handle or\nunregister method is explicitly `unverified`, while owned callbacks are inert.\nLegacy `clearContext` is used only with `exclusiveLegacyContext: true`, a host\nguarantee that this binding owns the whole catalog, and only for its current\nowner. Shared legacy catalogs are never cleared. Later explicit mounts discover\ncapabilities again. Unknown future method shapes fail visibly without breaking\nordinary application operations.\n","readmeFilename":"README.md"}