{"_id":"@cobranza-apps/events-toolkit","_rev":"27-1a55fafdc902ff20b42e5a410463a27d","name":"@cobranza-apps/events-toolkit","dist-tags":{"latest":"0.15.1"},"versions":{"0.7.0":{"name":"@cobranza-apps/events-toolkit","version":"0.7.0","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.7.0","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"71860c30c271198e07af5614d0fa475f3ea0f791","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.7.0.tgz","fileCount":250,"integrity":"sha512-KXUZtW623nvYphhN37hR6zmHfgZxVSsxYtzx21Cov3f3ckkdDcQyQG1M39VtylleoLrfR1lcTohAMIH301tQqQ==","signatures":[{"sig":"MEYCIQDLDjCUoiYYu5B2wRd8+um6TekAykQVMhtvuMU0w2WTeAIhAJz5rJc7kOa1dI+H0FyeC4038euPXuwIxrvm0VvDU64B","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":440890},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"4b7c2ceb5c42d99d9fc4af710db4f0a3e0b6667c","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^10.0.0","winston":"^3.0.0","better-sqlite3":"^9.6.0","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@types/uuid":"^10.0.0","@jest/globals":"^29.7.0","@nestjs/testing":"^11.0.0","@types/better-sqlite3":"^7.0.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","class-validator-jsonschema":"^5.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"nats":"^2.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.0","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.7.0_1781827130134_0.6883556288951689","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@cobranza-apps/events-toolkit","version":"0.7.1","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.7.1","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"736c07632217cbb5ba9dfbd6e18f42877127e7a7","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.7.1.tgz","fileCount":249,"integrity":"sha512-T+anHAb8CystTBRUuIGIX4BpdsAC4IB2wm7XDptnlAVXfM3LUe5f6RgvDGggYxOZMcs5mQ7h0rPib+48iv8K0g==","signatures":[{"sig":"MEUCIQD6/irepq1G+sxj0SYfdbK6bfhrm0hukvXA7VCdJDQ2qAIgC6pAKmh4JmJ8bWYGgt5UCvt0q/beybvg+R3hGnK2yps=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":440790},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"ce1f1da2dea686d2b2513fa9430aaea703b657b7","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^10.0.0","winston":"^3.0.0","better-sqlite3":"^9.6.0","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@types/uuid":"^10.0.0","@jest/globals":"^29.7.0","@nestjs/testing":"^11.0.0","@types/better-sqlite3":"^7.0.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","class-validator-jsonschema":"^5.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"nats":"^2.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.0","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.7.1_1781882144357_0.40414626869618897","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"@cobranza-apps/events-toolkit","version":"0.7.3","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.7.3","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"569ae5d1cd3b7d1613cfcc9a2060ddb80318ca66","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.7.3.tgz","fileCount":249,"integrity":"sha512-KKpGNOSRLQnsex34FSpQPNEQ0EWCQC029elmIjYm33qtvJTwCZ9wcQ4CxrCzBWkcRckIeO+UsrLa9jpmHOvHSg==","signatures":[{"sig":"MEUCIHfjG9y/I0cE5EC65+Mn/j1+6iyefApwnNpFYuZA/EefAiEAyNKH+FashW1/MfrtnMFiXcbJnf1Vwhxjh8ffXBtWDD8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":440763},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"3df9eb23f3dd869377aa52dad79ea0a2bf686793","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.7.3_1782143071664_0.9688405358678478","host":"s3://npm-registry-packages-npm-production"}},"0.7.4":{"name":"@cobranza-apps/events-toolkit","version":"0.7.4","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.7.4","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"9b32792ba65cda14557a57ce23603396dc465ed9","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.7.4.tgz","fileCount":250,"integrity":"sha512-9sIEi6D2eowzrvbCtk0e7Jv+zM43QiknZudxb0qXNMHRBTf+eBmZautYzDHpNbSc76PKeiR9y4HrclOujI13cQ==","signatures":[{"sig":"MEUCIDQNRPId2lvqe37nlqf2DZMPGqGuk0+e/ixw8sNPb86YAiEA7rwp7lUmhf+FMxG4LcTQtBrPwCDFhHNX2kaBokSysbs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":442293},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"ff93393f1154b2de5894df474e19018d308b9285","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.7.4_1782607378422_0.0360234291562318","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@cobranza-apps/events-toolkit","version":"0.8.0","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.8.0","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"64fc26b4f9dd49256d3af3b15bddcba7eb05756a","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.8.0.tgz","fileCount":250,"integrity":"sha512-gANp3LaHize9jdgLkK4EgPd4wyCykZB23pzhK5fYCjc91nRfRc53ZdWQqc3a7ClxDycch+O+/rzB4CZJZIlZag==","signatures":[{"sig":"MEUCIQDfFk+GginZs3I+3xTHPRqoVdRsMueaiZm6VQM7ckBy7AIgT0+loQ7bztrY3qMCALfqspbUX3F0APPYXUpadVFy5Zc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":461355},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"8fa34c6b1c91cbb015e01a5267ac31b6b63acc74","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.8.0_1782789909844_0.8758023925523415","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@cobranza-apps/events-toolkit","version":"0.9.0","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.9.0","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"ef18b9331c29de36ceee3fb75174c40485de35ed","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.9.0.tgz","fileCount":257,"integrity":"sha512-VAqAPyLqsvwS9S/VVM0VpwMQejBkSwDBWkyPxf+w8onkTdD534QkfOW8cRUxCQ3LE/kbvvmExAcHVkZff8Q/KQ==","signatures":[{"sig":"MEQCIQCYmH2WvUosZO4fXMPJEstlTE5XSZtObP4q2NnzWD3eigIfAzclqOKZrUJ9QjoSnKtPTGKpoYUmnOUqn+qiDo4cIg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":472740},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"fb2ee6855101cc8e28a085f5db5d318316994900","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.9.0_1783109725772_0.33728471755541545","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@cobranza-apps/events-toolkit","version":"0.10.0","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.10.0","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"88b812160f8dcb242dc7c23341c273cadc91071e","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.10.0.tgz","fileCount":257,"integrity":"sha512-g4VlKoL2dBGGQpUoXfOKxi0lxqypXEkN2Te1iqozqVGNAcp6cTZqyavFU+suS+5EDQa+tchvyui4HQ6HEGJHZA==","signatures":[{"sig":"MEUCIBQWt+yS+7RSvvQoNm1/9YAtBrlMPbLdwZzziFRvGYpfAiEAxqFE+pK6SObDbJCFFvOcmQ+RORYQjlUMCW6kJQhSaig=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":473995},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"8efe2bf3f85ee815f4979dc4f0ed7fff322d484b","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","pretest":"npm run build","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.10.0_1783269506934_0.5974163733697597","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"@cobranza-apps/events-toolkit","version":"0.10.1","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.10.1","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"32bf1fff1941322296eaa4f9a0aafd1122793d17","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.10.1.tgz","fileCount":259,"integrity":"sha512-th36cTOQVxFHd4/qRpID3ftVkeg6Iqkg0bsWqofWIw82FupXSE13b/As7R2WK2z9NGdmvEJO0z8QpZgwFkVp8Q==","signatures":[{"sig":"MEQCIHBTY8SUKCaYdQTiiYVQfNRvvpwp9DdmRn01qFZj+La1AiBtwAHQihN1Zn5hn2pymEhWtERFVBWMTJnIOwWzEuTYAA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":475450},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"5bc27f94eecaa42c969cc8dcd3e48d94af4d6136","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","pretest":"npm run build","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.10.1_1783880443194_0.9041496530923547","host":"s3://npm-registry-packages-npm-production"}},"0.10.2":{"name":"@cobranza-apps/events-toolkit","version":"0.10.2","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.10.2","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"62973be866ffa5b80778bca7f78cb42d4a4151e0","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.10.2.tgz","fileCount":259,"integrity":"sha512-9sFlZH5vM86SAmQjAsQ/Tc/v18B4foeg8VBURM/4r+uSwwFIT1XeYLJwMKpWmqpNqiEX23pNzkYR/OTqdOe6JA==","signatures":[{"sig":"MEQCIBbHhsTFwEe0LNAnIuniPVQQhYxgwtIaLtJPhCh0+MV6AiBVxwXJ9zn10YgEgLpGYeObO2/Y/iydaYSe8tK5saYM/Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":476473},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"ace34eb05dd680b33cd8ab5ad00a1cb60ebfd6a1","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","pretest":"npm run build","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.10.2_1783971716454_0.12129367275095237","host":"s3://npm-registry-packages-npm-production"}},"0.10.3":{"name":"@cobranza-apps/events-toolkit","version":"0.10.3","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.10.3","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"d6567bb5f760a1af2ac09e46306661bf8c20e2e7","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.10.3.tgz","fileCount":259,"integrity":"sha512-uPyeFd0NYWJe6pABmPeszankUOC4h2lLtzKeBqVhcGmBCnHufTII9AvsjMX45IDlGm15UysdrnvUi2AVvmGGdQ==","signatures":[{"sig":"MEUCIQCcXKDyl5G2fBn9OXFvTMwI+a3YtZI/7mCC29FHhb8tKQIgGEmf5RR3X5Zg4M6DmZkGP7VW2Id/OrvMZ/7RUeQ6Pww=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":477761},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"572a833d65214b46715fdbac2922d7e0d1d94f4c","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","pretest":"npm run build","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.10.3_1783989836945_0.017185899353297174","host":"s3://npm-registry-packages-npm-production"}},"0.10.4":{"name":"@cobranza-apps/events-toolkit","version":"0.10.4","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.10.4","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"1db0ea7b403d52a13b0a7ff322ef9379dac56e4e","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.10.4.tgz","fileCount":263,"integrity":"sha512-9AMQydmRGGOEtnbj3dJlJBOfZR7IfBj2aeei+o/kKi7f9QC6kwKwA1X3SggYqtARgbok8R7TVJD/hIEYQhRhNg==","signatures":[{"sig":"MEUCICJl7n9fHhzgKGyEWCnUO2C5neXq0yZZtTSvNgD4aBp3AiEA6WGCPKpQUsLiCETv+Jc2iOLYW/k2imgDZwyMGBI3B2w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":487304},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"358cdfd412774d1725af393b18a6d89de350b998","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","pretest":"npm run build","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.10.4_1783996817383_0.8101901301195096","host":"s3://npm-registry-packages-npm-production"}},"0.10.5":{"name":"@cobranza-apps/events-toolkit","version":"0.10.5","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.10.5","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"bd47873332f884f7e90c6d3f34a2f84b176ce968","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.10.5.tgz","fileCount":263,"integrity":"sha512-VBPZO3VYpbEczZrHCedzT6JMcCHJJ9eThCJ2tBrxHVkQtVTuxscu8ltZc/UVkFkfw3UNWrRxbWrfUukCrPp2PQ==","signatures":[{"sig":"MEUCIQDgoLgQYzznlrmD7D1Nax/2JtMoWblSk/oZMDZcNBpglgIgd19qEoO2VH/n+05GVl/eGlaGajKtZK2dJuhKNqQbpXg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":490742},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"6f66088ccd1aa323cd88a078a8bb11dbf06de6cb","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","pretest":"npm run build","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.10.5_1784002323928_0.024820166361883444","host":"s3://npm-registry-packages-npm-production"}},"0.10.6":{"name":"@cobranza-apps/events-toolkit","version":"0.10.6","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.10.6","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"51792a8f3f73ccd0fb68739773ca7153e94384c6","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.10.6.tgz","fileCount":263,"integrity":"sha512-lPws9QAJggPEFPY7+wgck6JdX+ZURRTTgOwlVSgdbqgSrssUYwR92bytCUqNp/zIpUkKEIqI3WUzv2HEHe9maA==","signatures":[{"sig":"MEUCIQC9R0mMdAeWDo+ifG55ecE8MdW2nud/u0wUi+gUWOSiowIgeVluZUbhYuGHZWHSxKJyez8HuCT4qT4nCvLbEzv77fg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":492346},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"f35eb038051886b6117f5319567630e7968015b9","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","pretest":"npm run build","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.10.6_1784043139130_0.6788326420829061","host":"s3://npm-registry-packages-npm-production"}},"0.10.7":{"name":"@cobranza-apps/events-toolkit","version":"0.10.7","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.10.7","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"a8c0f6da73c086f825d53766407583b64b6e6caf","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.10.7.tgz","fileCount":267,"integrity":"sha512-g9Bg7eP7Q4++CMIMyA7m4IXOr0ZxgazcNCMXqUNsw6JYHFvv7LpY51Q7RWAiFEK70Nr+llay6I/WO1Iz21VffA==","signatures":[{"sig":"MEUCIDT9KvtfCPNbtF7kf1rFk2oP728KBXqge5j++JScI5JiAiEA9ZhzsOb+5HzuDwumVE8lzqwlvsDuNz1MbV31hd7zHfU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":503009},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"83e71ab5e700aeadc1346b29cd5832ae504184d3","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","pretest":"npm run build","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.10.7_1784051323070_0.5597738554276099","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@cobranza-apps/events-toolkit","version":"0.11.0","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.11.0","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"40d17c052146679c69430ee1c04346a8a733c064","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.11.0.tgz","fileCount":278,"integrity":"sha512-b1mOj2JTjnyDif2b6SJuLfQARVqUXF8YOX2xZxQV85mxcKw6t3+qL4otySf377Gl3WL65XyxT4j1Cg0SinuIvQ==","signatures":[{"sig":"MEUCIFSfe0pncOGsqYZD8KO9JM/rlfo/3w6KLlrrDRUhzGTBAiEAtajajI6tmxcbjklrlqw0kSN7KzfaSgZOBuNF6jMuYfs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":525361},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"3538acef69e53ee4f9ba1eb844f9cda4e7f5e915","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","pretest":"npm run build","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.11.0_1784065945067_0.8978561829007632","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"name":"@cobranza-apps/events-toolkit","version":"0.11.1","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.11.1","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"1921fc08afa6e5b65808c89842a8e37fa7ae0615","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.11.1.tgz","fileCount":278,"integrity":"sha512-uhJnhEak2R5Aetj4P1AhdZPy0zjjav5puimlm4HRsjvuSlMqkzYF7T4VJLs5GtbeIfGex+6Rh+DuYd/AqxQPvQ==","signatures":[{"sig":"MEUCIQDcPb1RDelP32o5ude9EKFsG9WkTKP71tLx7Y67ryCepQIgZuklUZG5Yg+85TtLkkgMU53iIPT8n1lpmcDkwB/MsE0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":527378},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"03e2099307d6ddcf0e7d4b663101e9903d66e8a6","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","pretest":"npm run build","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.11.1_1784071020467_0.21385632306959268","host":"s3://npm-registry-packages-npm-production"}},"0.11.2":{"name":"@cobranza-apps/events-toolkit","version":"0.11.2","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.11.2","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"57ad8d61f904bd3865f21df35b9383a955cce3df","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.11.2.tgz","fileCount":278,"integrity":"sha512-qjswrVtwrz6BbZ4Xk+kuH66B7N7OuxPU/ixdbhMf/sJSwa3QOWLp7ZHnDPbpXPc3Yga8sq4NgWJCVtyTqUVBIA==","signatures":[{"sig":"MEUCIQD6k6aANvqLjrHhGxmvkfdMPrLMDxqfOyrZ+/IqUDO4pgIgL96ocGpkWroY9ngLBlaWmjH7lN/yaFHrPR42kqLf+aE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":530072},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"a1980919c61fd62aefc62421d8a1d972006361b9","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","pretest":"npm run build","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.11.2_1784081236300_0.658592599261612","host":"s3://npm-registry-packages-npm-production"}},"0.11.3":{"name":"@cobranza-apps/events-toolkit","version":"0.11.3","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.11.3","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"c42c9924a76e72d6837794f3af6bea189ba4a8b9","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.11.3.tgz","fileCount":280,"integrity":"sha512-O0xI+4EeJ5gkzcP3KPeXN/hzG+bT2Rj9x9zEErYQvKShuqLRMF1A7/9lEypwQWi1nfSTNHOXAHsmqXCJW0PW7g==","signatures":[{"sig":"MEUCIQD+g3dB4rvi3/lGQ9EfqGAEojMbghOPfkmFs/rBMBYkEwIgbsbsMyQPUTfvaWPuyvgD1ljwUSON54ACvUNlyU7bzCc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":536271},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"a25344005094275fc366f41e4973278711ed476c","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","pretest":"npm run build","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.11.3_1784218875503_0.8818405562801539","host":"s3://npm-registry-packages-npm-production"}},"0.11.4":{"name":"@cobranza-apps/events-toolkit","version":"0.11.4","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.11.4","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"4ee30acf09404a6ff2343c1b2959801008909785","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.11.4.tgz","fileCount":280,"integrity":"sha512-l7nOm8o/VR/4BY/GbLLOFmV9kqBHqpxcGZ5FeKSuCjic3VGK9Q5dUSv6VX5s0qUxebkk85aQDUwakLetThi9Mw==","signatures":[{"sig":"MEUCIQCbPLf4Uz6C/hcPJjnj5a5a4cxTF3wekLn1JN+9uuDjTAIgQJzyHTNk/Z0wso3F5ISlW1BAI9lILv37FPmSvZUGUzM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":538790},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"9f57be56e31b2113defd2353f5035d9a72ecfca7","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","pretest":"npm run build","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.11.4_1784244011150_0.28211305168579215","host":"s3://npm-registry-packages-npm-production"}},"0.11.5":{"name":"@cobranza-apps/events-toolkit","version":"0.11.5","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.11.5","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"517571c079279d197fc0fb1d1d2a7dfb5e4a246b","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.11.5.tgz","fileCount":280,"integrity":"sha512-jkEK+2RqBpqRkcgW11qYFiF6wNHGY+E4v4mmP7hCsYtuhoa8xzupSMg3EeQFtuf/z/BcXTfF4d7SSGlXKuVw8g==","signatures":[{"sig":"MEUCIQDIdZKbILY1tcC2bNwEIuCiv4F7O9iQrwH2liehN9BNBAIgLHEfNj8AxF0zVovQN+tXzndrtlXsrRpjP9CFvd9ye2M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":538790},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"810d05e41849211e39a37db4ad1a15e0a48d9458","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","pretest":"npm run build","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.11.5_1784244684609_0.5661712293062284","host":"s3://npm-registry-packages-npm-production"}},"0.11.6":{"name":"@cobranza-apps/events-toolkit","version":"0.11.6","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.11.6","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"017cbbad852b51a2cf68911cf566f113b73b5a23","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.11.6.tgz","fileCount":280,"integrity":"sha512-43e3vl5UNAvT55x2/25ObjnhKj9tX4j5hTOP3jW3+fGC7ATG+3gWZ+JZ68azXpQL8kndyPkfCx8ekIPg2XgeZg==","signatures":[{"sig":"MEQCIBGwxwFht3RjjfQq6Dpn3ioZkOFWJEAfnez0NZagJNNDAiARL6/83znzLj7kkz6/BFjF0/tw0uZGKMfuZkM9aAk3Sg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":539056},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"c0df0f30aaaa7ae6cc02891e56dd4bd0c6a4e73a","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","pretest":"npm run build","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.11.6_1784248749648_0.2236112802860497","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@cobranza-apps/events-toolkit","version":"0.12.0","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.12.0","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"5c3d3d3bc58f70a0b5bbbd0ec2ae653f215fa9f6","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.12.0.tgz","fileCount":307,"integrity":"sha512-PFPfFb854Hx7qxbXYJtnYOd3Rbs7cj3WRd2HUbFbPoHVNoC9pw06C2LJnvS5eApTIVJUQ2BZJx9Yt3O3wVPW4w==","signatures":[{"sig":"MEUCICKfNsjuL4Echs8s27fHGit8HJ854F2SFl0uVgH/mTqlAiEAnRurP6+xAkO+u2kQdOoJzLmOAbAevmlU2fifWrSPjq4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":584503},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"1966c93ff1488d8195af4f88f2a4176bd80c76ff","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","pretest":"npm run build","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.12.0_1784337450745_0.7111965293163895","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@cobranza-apps/events-toolkit","version":"0.13.0","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.13.0","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"a5c0e106efa69d5f459c4af71ade8ac3a05af888","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.13.0.tgz","fileCount":307,"integrity":"sha512-sUr808pouKqICEiNaht45tjLWTSwwh8FiEsolei7mpR8UeU2ZKsBcH4M9jP9odUOy1mLD6pJqLw9JsOIAdzz7A==","signatures":[{"sig":"MEQCIElRGp48oI0g4gWic/HgkH01d7zpxmBOtlbXtDXjMcdnAiBJQ/PO1HGbOZG53BYOxSidyoSq/AuplNSCPip6yKENmw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":589223},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"54d5b60babfe8cabd543d3c36fea9dc7dc76d9b1","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","pretest":"npm run build","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.13.0_1784740102376_0.23508942737526972","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@cobranza-apps/events-toolkit","version":"0.14.0","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.14.0","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"9e881a7729c5a60ffe07659c1e9f07813b81f86a","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.14.0.tgz","fileCount":315,"integrity":"sha512-6tuBAkIoEezYnYPrfNhwiV+YeniZs3N6Vv0/994Pdh3oxX3n3yMPYTj1AvKZQeXKbqkPZqJi4mPpNSNC+evX5Q==","signatures":[{"sig":"MEYCIQD6PybDEE/DvExxG0K9H7PjPa9+PpWD0NQc1ygqiSIhfgIhAOOjbkE+ssRXwO28IA1uiy3u1CO/z133TiBQK+JSklSJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":605989},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"a3827de7179671d2114e79d2e1470a754c91baa6","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","pretest":"npm run build","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.14.0_1784774786653_0.4455677106225777","host":"s3://npm-registry-packages-npm-production"}},"0.14.1":{"name":"@cobranza-apps/events-toolkit","version":"0.14.1","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.14.1","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"e42b6ece7233d4e3518cbc0fd56e300de37c20e8","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.14.1.tgz","fileCount":315,"integrity":"sha512-q86m9AJn5mPq83TnXyBNEo66TDv6Uia0wKqlQN3mW1Jafg/J431GZNFzJdrpkeYmtlHv7Wsp292D6UwD/3u2AQ==","signatures":[{"sig":"MEUCIQCgorwl6xzMzHCrQAYiNpfc17DcfTTT9+E01fkuOGG06gIgaVoDP0j+Au/lJNRZt0G5O0LgYL5zXnd7kWNSFc3glQQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":606060},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"de4de0de698bc6afa5bf2f55534bae6fe20e1d5e","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","pretest":"npm run build","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.14.1_1784819503462_0.7698322866257057","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@cobranza-apps/events-toolkit","version":"0.15.0","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"author":{"name":"kazuyakuza"},"license":"Unlicense","_id":"@cobranza-apps/events-toolkit@0.15.0","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"dist":{"shasum":"3b65bffe96a3706d3d187b3ed044eba3df96af72","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.15.0.tgz","fileCount":346,"integrity":"sha512-ggxmj2x+MrfEXmB64rLcAFL2LZGFeUVQkArPX5dz+VFaazsEXKtiyj01stCyvbGa7G3WPDneAgVKGUz9kppXIg==","signatures":[{"sig":"MEUCIAQNFGuucWQkCjQSB6U1AEBHXV0Anuz0Nj3Hag0VTqHMAiEAxGNYW+EQUotLHhPTIcnw5LlzYC06RNuRiDN52r+Y1O4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":669000},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"49906c1a43f422fe8b27f0c0d03165b1a523799e","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist/","format":"prettier --write \"src/**/*.ts\"","pretest":"npm run build","lint:fix":"eslint \"src/**/*.ts\" --fix","prebuild":"npm run clean","test:e2e":"jest --config jest.e2e.config.js","typecheck":"tsc --noEmit","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.ts\"","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"repository":{"url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^14.0.1","winston":"^3.19.0","better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^8.57.0","rimraf":"^6.1.3","ts-jest":"^29.4.11","prettier":"^3.8.4","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^22.0.0","@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","@typescript-eslint/parser":"^8.61.1","class-validator-jsonschema":"^5.1.0","@typescript-eslint/eslint-plugin":"^8.61.1"},"peerDependencies":{"nats":"^2.29.3","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.14.0","class-transformer":"^0.5.1","@nestjs/microservices":"^11.0.0","class-validator-jsonschema":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/events-toolkit_0.15.0_1784838826034_0.6901681017323946","host":"s3://npm-registry-packages-npm-production"}},"0.15.1":{"name":"@cobranza-apps/events-toolkit","version":"0.15.1","description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"repository":{"type":"git","url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git"},"license":"Unlicense","author":{"name":"kazuyakuza"},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"scripts":{"build":"tsc -p tsconfig.build.json","pretest":"npm run build","test":"jest","test:e2e":"jest --config jest.e2e.config.js","test:watch":"jest --watch","test:coverage":"jest --coverage","lint":"eslint \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","format":"prettier --write \"src/**/*.ts\"","format:check":"prettier --check \"src/**/*.ts\"","typecheck":"tsc --noEmit","clean":"rimraf dist/","prebuild":"npm run clean","prepublishOnly":"npm run build"},"peerDependencies":{"@nestjs/common":"^11.0.0","@nestjs/core":"^11.0.0","@nestjs/microservices":"^11.0.0","class-transformer":"^0.5.1","class-validator":"^0.14.0","class-validator-jsonschema":"^5.1.0","nats":"^2.29.3"},"dependencies":{"better-sqlite3":"^12.11.1","reflect-metadata":"^0.2.2","uuid":"^14.0.1","winston":"^3.19.0"},"devDependencies":{"@jest/globals":"^30.4.1","@nestjs/testing":"^11.1.27","@types/better-sqlite3":"^7.6.13","class-validator-jsonschema":"^5.1.0","@types/jest":"^30.0.0","@types/node":"^22.0.0","@typescript-eslint/eslint-plugin":"^8.61.1","@typescript-eslint/parser":"^8.61.1","eslint":"^8.57.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6","jest":"^30.0.0","prettier":"^3.8.4","rimraf":"^6.1.3","ts-jest":"^29.4.11","typescript":"^5.9.3"},"engines":{"node":">=20.0.0"},"publishConfig":{"access":"public"},"_id":"@cobranza-apps/events-toolkit@0.15.1","gitHead":"489bfad0b13067f24ff14951fd0d03647aa3064f","bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-D4sBNAewaNdtaV2aA1zppc7bO+SJbB+f8cFQV44ojni5I7Dhr3V6O+r7EfRT+LPHuLVzbUBLv0mUa3XyVvdf5Q==","shasum":"fef88545b577e0aa39dc548e3ce6d7125a09b200","tarball":"https://registry.npmjs.org/@cobranza-apps/events-toolkit/-/events-toolkit-0.15.1.tgz","fileCount":348,"unpackedSize":682453,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDPw2XpdeuLlY9PYmO+OfR3VCG0Jp0a3v7mquWq0hrFTAIgCiG4cbq+TX0UYuEwZ4JLpt0ANDiJ+Olljmdps7WXqjA="}]},"_npmUser":{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"},"directories":{},"maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/events-toolkit_0.15.1_1784847195841_0.22618088473307885"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-18T23:58:49.952Z","modified":"2026-07-23T22:53:16.173Z","0.7.0":"2026-06-18T23:58:50.307Z","0.7.1":"2026-06-19T15:15:44.517Z","0.7.3":"2026-06-22T15:44:31.801Z","0.7.4":"2026-06-28T00:42:58.579Z","0.8.0":"2026-06-30T03:25:09.994Z","0.9.0":"2026-07-03T20:15:25.912Z","0.10.0":"2026-07-05T16:38:27.077Z","0.10.1":"2026-07-12T18:20:43.363Z","0.10.2":"2026-07-13T19:41:56.590Z","0.10.3":"2026-07-14T00:43:57.113Z","0.10.4":"2026-07-14T02:40:17.540Z","0.10.5":"2026-07-14T04:12:04.078Z","0.10.6":"2026-07-14T15:32:19.356Z","0.10.7":"2026-07-14T17:48:43.226Z","0.11.0":"2026-07-14T21:52:25.208Z","0.11.1":"2026-07-14T23:17:00.623Z","0.11.2":"2026-07-15T02:07:16.459Z","0.11.3":"2026-07-16T16:21:15.809Z","0.11.4":"2026-07-16T23:20:11.299Z","0.11.5":"2026-07-16T23:31:24.774Z","0.11.6":"2026-07-17T00:39:09.833Z","0.12.0":"2026-07-18T01:17:30.902Z","0.13.0":"2026-07-22T17:08:22.539Z","0.14.0":"2026-07-23T02:46:26.803Z","0.14.1":"2026-07-23T15:11:43.611Z","0.15.0":"2026-07-23T20:33:46.220Z","0.15.1":"2026-07-23T22:53:16.016Z"},"bugs":{"url":"https://github.com/kazuyakuza/cobranza-app_events-toolkit/issues"},"author":{"name":"kazuyakuza"},"license":"Unlicense","homepage":"https://github.com/kazuyakuza/cobranza-app_events-toolkit#readme","keywords":["nestjs","nats","jetstream","events","messaging","microservices","cobranza-app"],"repository":{"type":"git","url":"git+https://github.com/kazuyakuza/cobranza-app_events-toolkit.git"},"description":"NestJS library for standardized NATS+JetStream event handling across Cobranza App microservices","maintainers":[{"name":"kazuyakuza","email":"kazuya_otaku.clan@hotmail.com"}],"readme":"# @cobranza-apps/events-toolkit\n\nNATS + JetStream event handling library for the Cobranza App microservices platform.\n\n[![NestJS](https://img.shields.io/badge/NestJS-11.x-E0234E?logo=nestjs)](https://nestjs.com)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.x-3178C6?logo=typescript)](https://www.typescriptlang.org)\n[![Node.js](https://img.shields.io/badge/Node.js-%3E%3D20-339933?logo=node.js)](https://nodejs.org)\n[![License](https://img.shields.io/badge/license-Unlicense-blue.svg)](LICENSE)\n\n## Table of Contents\n\n- [Quickstart (for AI agents)](#quickstart-for-ai-agents)\n- [Onboarding Flow](#onboarding-flow)\n- [Overview](#overview)\n- [Installation](#installation)\n- [Core Concepts](#core-concepts)\n- [Usage](#usage)\n- [Architecture](#architecture)\n- [Guidelines for AI Agents](#guidelines-for-ai-agents)\n- [Development](#development)\n- [Deployment](#deployment)\n- [Related Documentation](#related-documentation)\n- [License](#license)\n\n## Quickstart (for AI agents)\n\n1. `npm install @cobranza-apps/events-toolkit`\n2. Register NATS + subsystems in `AppModule`:\n\n   ```ts\n   EventsToolkitModule.forRoot({\n     nats: { servers: ['nats://localhost:4222'] },\n     discovery: { enabled: true, registerOnStartup: true, service: { name: 'payment-service', version: '1.0.0' } },\n   })\n   ```\n\n3. Define an event DTO — extend `EventEnvelope<T>`, decorate every field with `class-validator`.\n4. Emit: decorate a service method with `@EmitEvent('domain.entity.action', { version, description, payloadExample })`.\n5. Consume: decorate a handler with `@OnEvent('domain.entity.action', { version, description, payloadExample })`.\n6. Run: `npm run start`.\n\nSee the [Onboarding Flow](#onboarding-flow) section for the full 12-step path (architecture → deploy).\n\n## Onboarding Flow\n\n1. **Architecture** — NATS + JetStream, event envelope, actors, tenant isolation → [Core Concepts](#core-concepts)\n2. **Install & configure** — `EventsToolkitModule.forRoot()` → [Installation](#installation) · [Setup (Unified Module)](#setup-unified-module)\n3. **Define an event DTO** — `EventEnvelope<T>` + `class-validator` → [Defining an Event](#defining-an-event)\n4. **Produce an event** — `@EmitEvent()` · `ProducerService.emit()` → [Producer](#producer-publishing-events)\n5. **Consume an event** — `@OnEvent()` · DLQ routing → [Consumer](#consumer-subscribing-to-events) · [Error Handling & DLQ](#error-handling--dlq)\n6. **Request-reply** — `request()` / `sendRequest()` + `@OnRequestReply()` → [Request-Reply Pattern](#request-reply-pattern)\n7. **Outbox** — `OutboxService.saveToOutbox()` · `sendAsyncRequestThroughOutbox()` → [Outbox Pattern](#outbox-pattern)\n8. **Idempotency** — `IdempotencyService` · `@OnEvent({ idempotent: true })` · SQLite/PostgreSQL backends → [Idempotency](#idempotency-pattern)\n9. **Service discovery** — manifests · `GET /discovery/manifest` · platform events → [Discovery](#discovery)\n10. **Schema generation** — auto JSON Schema from DTOs · `payloadSchemaRef` → [Event Discovery & Service Registry](docs/event-discovery-and-service-registry.md)\n11. **Testing** — `EventsToolkitTestModule` · mock services · assertion helpers → [Testing Utilities](#testing-utilities)\n12. **Deployment** — JetStream stream config · env vars · health checks → [Deployment](#deployment) *(new section)*\n\n---\n\n## Overview\n\n`events-toolkit` encapsulates all NATS/JetStream event infrastructure concerns into reusable NestJS modules, services, and decorators. It enforces the [Event & Messaging Convention](docs/event-messaging-convention.md) at compile-time and runtime, ensuring every microservice in the platform produces and consumes events consistently.\n\n### What it provides\n\n- **Event Envelope**: Strongly typed `EventEnvelope<T>` extending abstract `EventBase` with built-in `class-validator` validation\n- **Subject Builder**: Single entry point for all NATS subject generation following the convention\n- **Producer Module**: `@EmitEvent()` decorator and `ProducerService` for fire-and-forget publishing\n- **Consumer Module**: `@OnEvent()` decorator with automatic validation, error handling, and DLQ routing\n- **Request-Reply**: `RequestReplyService` for sync (`request()`) and async (`sendRequest()` + `@OnRequestReply`) request-reply patterns\n- **Outbox Module**: Persistent outbox with SQLite or PostgreSQL backends, background processor for transactional safety\n- **Idempotency Module**: Deduplication guard with SQLite, PostgreSQL, or in-memory backends; `IdempotencyService` (`isDuplicate`, `markAsProcessed`, `executeIfNotProcessed`) and automatic `@OnEvent({ idempotent: true })` handler wrapping\n- **Event Logger**: Winston-based structured logging with trace and correlation IDs\n- **Discovery Module**: `DiscoveryModule`, `DiscoveryService`, `@EmitEvent/@OnEvent/@OnRequestReply` manifest annotation, schema auto-generation from class-validator DTOs, service registration via `platform.service.register.v1` events, periodic heartbeats, and HTTP endpoints for manifest/schema retrieval\n\n### Non-goals\n\n- Does NOT define domain-specific event payloads — each microservice owns its events.\n- Does NOT replace the main PostgreSQL outbox in `ms-db-gateway` — it supplements with SQLite for other services. However, a shared PostgreSQL backend is available for services that already have one.\n- Is NOT a standalone service — it is a library consumed by NestJS microservices.\n\n---\n\n## Installation\n\n```bash\nnpm install @cobranza-apps/events-toolkit\n```\n\n### Peer Dependencies\n\nThe following must be installed in the consuming microservice:\n\n```json\n{\n  \"@nestjs/common\": \"^11.1.0\",\n  \"@nestjs/core\": \"^11.1.0\",\n  \"@nestjs/microservices\": \"^11.1.0\",\n  \"class-transformer\": \"^0.5.1\",\n  \"class-validator\": \"^0.14.0\",\n  \"nats\": \"^2.29.0\"\n}\n```\n\n### Requirements\n\n- Node.js >= 20\n- NATS server >= 2.10 with JetStream enabled\n\n---\n\n## Core Concepts\n\n### Event Envelope\n\nAll messages follow a standardized envelope structure. The toolkit provides `EventBase` as the abstract base class defining common envelope fields, and `EventEnvelope<T>` as the concrete generic class that extends it with a typed `data` payload:\n\n```json\n{\n  \"id\": \"evt_01JXYZABC123456789012345\",\n  \"type\": \"payment.proof.uploaded\",\n  \"version\": \"1.0.0\",\n  \"produced_at\": \"2025-06-08T16:45:12.345Z\",\n  \"producer\": \"payment-service\",\n  \"company_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n  \"actor_type\": \"client\",\n  \"actor_id\": \"clt_123e4567-e89b-12d3-a456-426614174000\",\n  \"correlation_id\": \"987fcdeb-51a2-43e8-9c4f-123456789abc\",\n  \"causation_id\": \"evt_01JXYZABC987654321098765\",\n  \"trace_id\": \"00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01\",\n  \"reply_to\": null,\n  \"data\": { }\n}\n```\n\nKey fields:\n\n- `id` — UUIDv7 with `evt_` prefix\n- `company_id` — UUID for tenant isolation (mandatory)\n- `actor_type` / `actor_id` — who performed the action (mandatory for audit)\n- `correlation_id` — links events across a transaction chain\n- `data` — domain-specific payload (typed per microservice)\n\n> The toolkit also provides a tenant-less variant, `GlobalEventEnvelope<T>`, which omits `company_id` entirely for operations not scoped to a single tenant (company/user/role lifecycle, system-wide config). See [Global Events](docs/global-events.md).\n\n### Subject Naming Convention\n\nAll NATS subjects follow this pattern:\n\n```text\ncompany.{company_id}.{domain}.{entity}.{action}.v{version}\n```\n\n| Token | Description | Example |\n| ----- | ----------- | ------ |\n| `company_id` | UUID without dashes | `550e8400e29b41d4a716446655440000` |\n| `domain` | Business domain | `payment`, `debt`, `bank`, `notification` |\n| `entity` | Main entity | `proof`, `statement`, `schedule` |\n| `action` | Past-tense verb | `uploaded`, `created`, `processed`, `sent` |\n| `version` | Major version | `v1`, `v2` |\n\nExamples:\n\n- `company.550e8400e29b41d4a716446655440000.debt.created.v1`\n- `company.550e8400e29b41d4a716446655440000.payment.proof.uploaded.v1`\n- `company.550e8400e29b41d4a716446655440000.bank.statement.processed.v1`\n\nGlobal (tenant-less) subjects omit the `company_id` segment:\n\n```text\nglobal.{domain}.{entity}.{action}.v{version}\n// e.g. global.iam.company.created.v1\n```\n\nBuild with `SubjectBuilder.buildGlobal()` / `buildGlobalSubject()`. See [Global Events](docs/global-events.md) for when to use this format.\n\nFor **Request then Async Response**: append `.response` to the base subject:\n\n- Request: `company.{id}.payment.proof.uploaded.v1`\n- Response: `company.{id}.payment.proof.uploaded.response.v1`\n\n### Actor Types\n\n```typescript\nenum ActorType {\n  CLIENT = \"client\",\n  COMPANY_USER = \"company_user\",\n  SYSTEM = \"system\",\n  SCHEDULER = \"scheduler\",\n  EXTERNAL_API = \"external_api\"\n}\n```\n\n### Event Context\n\nThe `EventContext` provides the identity and traceability metadata required by every event. When constructing or factory-creating an event, you pass an `EventContext` object:\n\n```typescript\ninterface EventContext {\n  type: string;            // Event type in dot-notation (e.g. 'payment.proof.uploaded')\n  version: string;         // Schema version (e.g. '1.0.0')\n  producer: string;        // Name of the producing microservice (e.g. 'payment-service')\n  companyId: string;      // Tenant UUID (mandatory)\n  actorType: ActorType;    // Who performed the action\n  actorId: string;         // Identifier of the actor\n  correlationId: string;   // Links events across a transaction chain\n  causationId?: string;   // ID of the event that caused this one\n  traceId?: string;        // Distributed tracing ID\n  replyTo?: string;        // Subject for request-reply responses\n}\n```\n\n> `EventContext.companyId` is required for tenant events. For tenant-less events use `GlobalEventContext` (no `companyId`). `actorId` is optional for `system`, `scheduler`, and `external_api` actor types; required only for `client` and `company_user`. See [Global Events](docs/global-events.md).\n\nThe toolkit propagates `companyId`, `actorType`, and `actorId` into the envelope fields `company_id`, `actor_type`, and `actor_id`.\n\n---\n\n## Usage\n\n### Setup (Individual Modules)\n\nImport the modules you need in your NestJS application:\n\n```typescript\nimport { Module } from '@nestjs/common';\nimport { ProducerModule, ConsumerModule } from '@cobranza-apps/events-toolkit';\nimport { connect } from 'nats';\n\nconst natsConnection = await connect({ servers: ['nats://localhost:4222'] });\n\n@Module({\n  imports: [\n    ProducerModule.forRoot({ connection: natsConnection }),\n    ConsumerModule.forRoot({ connection: natsConnection }),\n  ]\n})\nexport class AppModule {}\n```\n\n### Setup (Unified Module)\n\nUse `EventsToolkitModule.forRoot()` to configure all subsystems in a single call:\n\n```typescript\nimport { Module } from '@nestjs/common';\nimport { EventsToolkitModule } from '@cobranza-apps/events-toolkit';\n\n@Module({\n  imports: [\n    EventsToolkitModule.forRoot({\n      nats: { servers: ['nats://localhost:4222'] },\n      outbox: {\n        type: 'sqlite',\n        sqlitePath: '/data/outbox.sqlite',\n        serviceOptions: { maxRetries: 3 },\n      },\n      logging: { level: 'info' },\n      requestReply: { defaultTimeoutMs: 10000 },\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n#### Configuration Options\n\n| Option | Type | Required | Description |\n|--------|------|----------|-------------|\n| `nats` | `EventsToolkitNatsOptions` | Yes | NATS connection settings — provide either `servers` (creates new connection) or `connection` (reuses existing). |\n| `outbox` | `EventsToolkitOutboxOptions` | No | Outbox persistence config (`sqlite` or `postgres`). Omit to disable the outbox subsystem. |\n| `idempotency` | `EventsToolkitIdempotencyOptions` | No | Idempotency config (`sqlite`, `postgres`, or `memory`). Omit to disable the idempotency subsystem. |\n| `logging` | `EventsToolkitLoggingOptions` | No | Winston logger config (`level`, `transports`). Defaults to `info` + Console transport. |\n| `consumer` | `EventsToolkitConsumerOptions` | No | Consumer subsystem config: `enable`, `dlqSubjectBuilder`, `autoCreateStreams`, `streamConfig`, `durableName`, `consumerOpts`, `deliverPolicy`, `ackPolicy`, `maxDeliver`, `replayPolicy`. Set `enable: false` to skip consumer registration. |\n| `discovery` | `EventsToolkitDiscoveryOptions` | No | Service discovery config (manifest, heartbeat, schema publishing). Set `enabled: false` to skip. |\n| `requestReply` | `Partial<RequestReplyConfig>` | No | Request-reply defaults. Set `defaultTimeoutMs` to override the 5000ms sync timeout. |\n| `requestReply.fallbackToCoreNatsOnInbox` | `boolean` | No | When `true`, responses to INBOX subjects use core NATS instead of JetStream. Default: `false`. |\n| `requestReply.coreNatsFallbackPattern` | `string` | No | Regex pattern for matching subjects that should use core NATS fallback. Default: `'^_?INBOX\\\\.'`. |\n\n### Defining an Event\n\nExtend `EventEnvelope<T>` with your domain-specific data type:\n\n```typescript\nimport { EventEnvelope } from '@cobranza-apps/events-toolkit';\nimport { IsUUID, IsUrl, IsNumber, IsEnum } from 'class-validator';\n\nenum Currency {\n  USD = 'USD',\n  MXN = 'MXN',\n  COP = 'COP'\n}\n\nclass PaymentProofUploadedData {\n  @IsUUID()\n  paymentAttemptId: string;\n\n  @IsUrl()\n  fileUrl: string;\n\n  @IsNumber()\n  amount: number;\n\n  @IsEnum(Currency)\n  currency: Currency;\n}\n\nclass PaymentProofUploadedEvent extends EventEnvelope<PaymentProofUploadedData> {\n  readonly type = 'payment.proof.uploaded';\n  readonly version = '1.0.0';\n}\n```\n\n### Producer (Publishing Events)\n\n#### Option 1 — Decorator-based (`@EmitEvent()`)\n\n```typescript\nimport { EmitEvent, SubjectBuilder, EventContext } from '@cobranza-apps/events-toolkit';\n\nclass PaymentController {\n  constructor(private readonly subjectBuilder: SubjectBuilder) {}\n\n  @EmitEvent('payment.proof.uploaded', {\n    version: '1',\n    description: 'A payment proof file was uploaded',\n    payloadExample: { paymentAttemptId: 'uuid', fileUrl: 'https://...', amount: 100, currency: 'MXN' },\n  })\n  async handleUpload(dto: UploadDto, context: EventContext): Promise<PaymentProofUploadedData> {\n    return new PaymentProofUploadedData({ paymentAttemptId, fileUrl, amount });\n  }\n}\n```\n\n#### Option 2 — Direct service injection\n\n```typescript\nimport { createEvent, ProducerService, SubjectBuilder } from '@cobranza-apps/events-toolkit';\n\nclass PaymentService {\n  constructor(\n    private readonly producerService: ProducerService,\n    private readonly subjectBuilder: SubjectBuilder\n  ) {}\n\n  async processUpload(data: PaymentProofUploadedData, context: EventContext): Promise<void> {\n    const subject = this.subjectBuilder.build({\n      companyId: context.companyId,\n      domain: 'payment',\n      entity: 'proof',\n      action: 'uploaded',\n      version: '1'\n    });\n\n    const event = createEvent(data, context);\n    await this.producerService.publish(subject, event);\n  }\n}\n```\n\n### Consumer (Subscribing to Events)\n\n```typescript\nimport { OnEvent, EventEnvelope } from '@cobranza-apps/events-toolkit';\n\nclass PaymentProofConsumer {\n  @OnEvent('payment.proof.uploaded', {\n    version: '1',\n    description: 'Handles payment proof upload events',\n    payloadExample: { paymentAttemptId: 'uuid', fileUrl: 'https://...', amount: 100, currency: 'MXN' },\n  })\n  async onProofUploaded(event: EventEnvelope<PaymentProofUploadedData>): Promise<void> {\n    const { data, company_id, correlation_id } = event;\n    // Business logic — toolkit handles parsing, validation, acknowledgment\n    await this.processProof(data);\n  }\n}\n```\n\n### Durable Consumers (Recommended for Production)\n\nSet `durableName` in the consumer options to persist the consumer's ack position across reconnects. Without it, the toolkit creates ephemeral consumers that replay the entire stream history on every restart.\n\n```typescript\nEventsToolkitModule.forRoot({\n  nats: { servers: ['nats://localhost:4222'] },\n  consumer: {\n    enable: true,\n    autoCreateStreams: true,\n    durableName: 'my-service-processor',  // Resumes from last ack on reconnect\n  },\n})\n```\n\nFor full control over consumer configuration (delivery policy, ack policy, max deliver, etc.), see [Durable Consumers](docs/nats-jetstream-configuration.md#durable-consumers).\n\n### Error Handling & DLQ\n\nThrow `EventConsumerException` to route a message to the Dead Letter Queue. The consumer service catches this exception and forwards the failed message to the DLQ subject (`dlq.company.{company_id}.{domain}.{entity}.{action}.v{version}`):\n\n```typescript\nimport { EventConsumerException } from '@cobranza-apps/events-toolkit';\n\n@OnEvent('payment.proof.uploaded', {\n    version: '1',\n    description: 'Handles payment proof upload events',\n    payloadExample: { paymentAttemptId: 'uuid', fileUrl: 'https://...', amount: 100, currency: 'MXN' },\n  })\nasync onProofUploaded(event: EventEnvelope<PaymentProofUploadedData>): Promise<void> {\n  if (event.data.amount <= 0) {\n    throw new EventConsumerException({\n      message: 'Invalid amount',\n      eventId: event.id,\n      eventType: event.type,\n      correlationId: event.correlation_id,\n    });\n  }\n  // Process valid event\n}\n```\n\n### Structured Logging\n\n`EventLoggerService` provides Winston-based structured logging for all event operations. It accepts optional custom transports, enabling microservices to integrate with existing logging infrastructure:\n\n```typescript\nimport { EventLoggerService } from '@cobranza-apps/events-toolkit';\nimport * as winston from 'winston';\n\nconst logger = new EventLoggerService({\n  transports: [new winston.transports.Console()],\n  level: 'info',\n});\n\nlogger.logEventEmitted({\n  eventId: event.id,\n  eventType: event.type,\n  subject: 'company.550e8400e29b...payment.proof.uploaded.v1',\n  correlationId: event.correlation_id,\n});\n```\n\n### Request-Reply Pattern\n\nThe toolkit supports two request-reply patterns. For the full guide, see [Request-Reply Patterns](docs/request-reply-patterns.md). For guidance on choosing between sync and async patterns, see [Request-Reply Guidelines](docs/request-reply-guidelines.md).\n\n> **Full examples:** See [Sync Request-Reply Example](docs/examples/sync-request-reply.example.ts) and [Async Request-Reply Example](docs/examples/async-request-reply.example.ts) for complete, runnable code samples.\n\n#### Sync — `request()`\n\nBlocks until a response arrives or a timeout expires:\n\n```typescript\nimport { RequestReplyService, SubjectBuilder, EventContext } from '@cobranza-apps/events-toolkit';\n\nclass PaymentService {\n  constructor(\n    private readonly requestReply: RequestReplyService,\n    private readonly subjectBuilder: SubjectBuilder\n  ) {}\n\n  async requestProofStatus(companyId: string, paymentId: string, context: EventContext): Promise<ProofResponse> {\n    const subject = this.subjectBuilder.build({\n      companyId,\n      domain: 'payment',\n      entity: 'proof',\n      action: 'requested',\n      version: '1'\n    });\n\n    const payload = new ProofRequestedData({ paymentId });\n\n    const response = await this.requestReply.request<ProofRequestedData, ProofResponse>(\n      subject,\n      payload,\n      { context, timeoutMs: 10000 }\n    );\n\n    return response.data;\n  }\n}\n```\n\n#### Async — `sendRequest()` + `@OnRequestReply`\n\nNon-blocking: publish a request with `reply_to`, receive the response in a decorated handler:\n\n```typescript\n// ── Requester: send async request ──\nimport {\n  RequestReplyService, SubjectBuilder, EventContext,\n  ActorType,\n} from '@cobranza-apps/events-toolkit';\n\nclass DebtService {\n  constructor(\n    private readonly requestReply: RequestReplyService,\n    private readonly subjectBuilder: SubjectBuilder,\n  ) {}\n\n  async requestCreditCheck(clientId: string, companyId: string): Promise<string> {\n    const replySubject = this.subjectBuilder.build({\n      companyId, domain: 'credit', entity: 'check',\n      action: 'completed', version: '1',\n    });\n\n    const context: EventContext = {\n      type: 'credit.check.requested',\n      version: '1.0.0',\n      producer: 'debt-service',\n      companyId,\n      actorType: ActorType.SYSTEM,\n      actorId: 'debt-service',\n      correlationId: '987fcdeb-51a2-43e8-9c4f-123456789abc',\n      replyTo: replySubject,\n    };\n\n    const result = await this.requestReply.sendRequest({\n      subject: this.subjectBuilder.build({\n        companyId, domain: 'credit', entity: 'check',\n        action: 'requested', version: '1',\n      }),\n      payload: new CreditCheckRequestedData({ clientId }),\n      context,\n    });\n\n    return result.correlationId;\n  }\n}\n\n// ── Responder: handle request, send response ──\nclass CreditCheckConsumer {\n  constructor(private readonly requestReply: RequestReplyService) {}\n\n  @OnEvent('credit.check.requested', {\n    version: '1',\n    description: 'Handles incoming credit check requests',\n    payloadExample: { clientId: 'uuid', fullName: 'Jane Doe' },\n  })\n  async onCreditCheckRequested(event: EventEnvelope<CreditCheckRequestedData>): Promise<void> {\n    if (!this.requestReply.isRequestReplyMessage(event)) { return; }\n\n    const responseEvent = this.requestReply.buildResponseEnvelope({\n      requestEvent: event,\n      responseContext: {\n        type: 'credit.check.completed', version: '1.0.0',\n        producer: 'credit-service', companyId: event.company_id,\n        actorType: ActorType.SYSTEM, actorId: 'credit-service',\n        correlationId: event.correlation_id,\n        replyTo: event.reply_to,\n      },\n      responseData: await this.performCheck(event.data),\n    });\n\n    await this.requestReply.sendResponse(event.correlation_id, responseEvent);\n  }\n}\n\n// ── Requester: handle async response ──\nclass DebtServiceResponseHandler {\n  @OnRequestReply('credit.check.completed', {\n    description: 'Handles credit check completion responses',\n    payloadExample: { clientId: 'uuid', score: 750, approved: true },\n  })\n  async handleCreditCheckResponse(\n    event: EventEnvelope<CreditCheckResultData>,\n    context: EventContext,\n  ): Promise<void> {\n    await this.processCreditResult(event.data, event.correlation_id);\n  }\n}\n```\n\n### Outbox Pattern\n\nFor a decision-making guide on when to use the outbox, which backend to choose, and transactional vs normal persistence, see [Outbox Usage Guidelines](docs/outbox-usage-guidelines.md).\n\nFor transactional safety, the Outbox module persists events before publishing. It supports two backends:\n\n| Backend  | Use Case                        | Service Type                                       |\n| -------- | ------------------------------- | -------------------------------------------------- |\n| SQLite   | Lightweight, self-contained     | Services without their own database                |\n| Postgres | Shares main application DB      | `ms-db-gateway` and services with existing TypeORM |\n\nFor detailed configuration, see [`docs/outbox-configuration.md`](docs/outbox-configuration.md).\n\n```typescript\nimport { createEvent, OutboxService, SubjectBuilder } from '@cobranza-apps/events-toolkit';\n\nclass PaymentService {\n  constructor(\n    private readonly outboxService: OutboxService,\n    private readonly subjectBuilder: SubjectBuilder,\n  ) {}\n\n  async processWithOutbox(data: PaymentProofUploadedData, context: EventContext): Promise<void> {\n    const subject = this.subjectBuilder.build({\n      companyId: context.companyId,\n      domain: 'payment',\n      entity: 'proof',\n      action: 'uploaded',\n      version: '1',\n    });\n    const event = createEvent(data, context);\n    // Persisted to outbox, published by background processor\n    await this.outboxService.saveToOutbox(event, subject);\n  }\n}\n```\n\nSQLite configuration:\n\n```typescript\nOutboxModule.forRoot({\n  type: 'sqlite',\n  sqlite: { dbPath: '/data/outbox.sqlite' },  // Use Docker volume path\n  serviceOptions: {\n    processorIntervalMs: 5000,  // Background processor interval (ms)\n    maxRetries: 3,              // Max publish retries before DLQ routing\n  },\n})\n```\n\nPostgreSQL configuration:\n\n```typescript\nOutboxModule.forRoot({\n  type: 'postgres',\n  postgres: { entityManager: myTypeOrmEntityManager },\n  serviceOptions: { maxRetries: 3 },\n})\n```\n\n> **Transactional outbox:** For PostgreSQL + TypeORM services, `saveInTransaction` inserts outbox events within the caller's active database transaction, ensuring atomicity with business writes. See [Transactional Outbox Usage Guide](docs/outbox-transactional-usage.md) for details and examples.\n\n#### Request-Reply Through the Outbox\n\nThe outbox module supports async request-reply patterns through two APIs.\n\n##### Low-Level API — `sendRequestThroughOutbox`\n\nFor cases where you already have a pre-built envelope, use `sendRequestThroughOutbox`:\n\n```typescript\nimport {\n  createEvent, OutboxService, SubjectBuilder, EventContext,\n  ActorType,\n} from '@cobranza-apps/events-toolkit';\n\nclass DebtService {\n  constructor(\n    private readonly outboxService: OutboxService,\n    private readonly subjectBuilder: SubjectBuilder,\n  ) {}\n\n  async requestCreditCheck(clientId: string, companyId: string): Promise<void> {\n    const context: EventContext = {\n      type: 'credit.check.requested',\n      version: '1.0.0',\n      producer: 'debt-service',\n      companyId,\n      actorType: ActorType.SYSTEM,\n      actorId: 'debt-service',\n      correlationId: '987fcdeb-51a2-43e8-9c4f-123456789abc',\n      replyTo: this.subjectBuilder.build({\n        companyId, domain: 'credit', entity: 'check',\n        action: 'completed', version: '1',\n      }),\n    };\n\n    const event = createEvent({ clientId }, context);\n    await this.outboxService.sendRequestThroughOutbox(\n      event,\n      this.subjectBuilder.build({\n        companyId, domain: 'credit', entity: 'check',\n        action: 'requested', version: '1',\n      }),\n    );\n  }\n}\n```\n\n##### High-Level API — `sendAsyncRequestThroughOutbox`\n\nFor a simpler API that builds the envelope for you, use `sendAsyncRequestThroughOutbox`:\n\n```typescript\nimport {\n  OutboxService, SubjectBuilder, EventContext,\n  ActorType, generateUuidV7,\n} from '@cobranza-apps/events-toolkit';\n\nclass DebtService {\n  constructor(\n    private readonly outboxService: OutboxService,\n    private readonly subjectBuilder: SubjectBuilder,\n  ) {}\n\n  async requestCreditCheck(clientId: string, companyId: string): Promise<string> {\n    const requestSubject = this.subjectBuilder.build({\n      companyId, domain: 'credit', entity: 'check', action: 'requested', version: '1',\n    });\n\n    const replySubject = this.subjectBuilder.build({\n      companyId, domain: 'credit', entity: 'check', action: 'completed', version: '1',\n    });\n\n    const result = await this.outboxService.sendAsyncRequestThroughOutbox({\n      subject: requestSubject,\n      payload: { clientId },\n      context: {\n        type: 'credit.check.requested',\n        version: '1.0.0',\n        producer: 'debt-service',\n        companyId,\n        actorType: ActorType.SYSTEM,\n        actorId: 'debt-service',\n        correlationId: generateUuidV7(),\n        replyTo: replySubject,\n      },\n    });\n\n    return result.correlationId;\n  }\n}\n```\n\n##### Recommended Patterns\n\n| Pattern | Approach |\n|---------|----------|\n| **Sync Request-Reply** (`request()`) | Bypass the outbox for the request — you're waiting for the response anyway. Use the outbox only for side effects triggered by the response. |\n| **Async Request-Reply** (`sendRequest()` / `sendAsyncRequestThroughOutbox`) | Route the initial request through the outbox to guarantee delivery, even if the service restarts. Use `sendAsyncRequestThroughOutbox` for the simplest API, or `sendRequestThroughOutbox` if you need to build the envelope manually. |\n\nSee [Request-Reply Patterns](docs/request-reply-patterns.md) for full async pattern documentation and [Outbox Configuration](docs/outbox-configuration.md) for request-reply outbox guidance.\n\n### Idempotency Pattern\n\nFor consumer-side deduplication, the Idempotency module records processed event keys so redelivery is skipped. It supports the same backends as the Outbox module (SQLite, PostgreSQL, memory for tests) and is configured via `EventsToolkitModule.forRoot()`.\n\nFor detailed configuration, key generation, and manual vs automatic usage, see [`docs/idempotency.md`](docs/idempotency.md).\n\n```typescript\nimport { EventsToolkitModule } from '@cobranza-apps/events-toolkit';\n\nEventsToolkitModule.forRoot({\n  nats: { servers: ['nats://localhost:4222'] },\n  idempotency: {\n    type: 'sqlite',\n    sqlitePath: '/data/idempotency.sqlite',\n    serviceOptions: { defaultTtlSeconds: 86400 },\n  },\n})\n```\n\n**Manual usage:**\n\n```typescript\nimport { IdempotencyService } from '@cobranza-apps/events-toolkit';\nimport { AnyEventEnvelope } from '@cobranza-apps/events-toolkit';\n\nclass MyConsumer {\n  constructor(private readonly idempotency: IdempotencyService) {}\n\n  async handle(event: AnyEventEnvelope<MyData>): Promise<void> {\n    if (await this.idempotency.isDuplicate(event)) return;\n    await this.process(event.data);\n    await this.idempotency.markAsProcessed(event);\n  }\n}\n```\n\n**Automatic usage (recommended for simple handlers):**\n\n```typescript\nimport { OnEvent } from '@cobranza-apps/events-toolkit';\nimport { AnyEventEnvelope } from '@cobranza-apps/events-toolkit';\n\nclass MyConsumer {\n  @OnEvent('payment.proof.uploaded', {\n    version: '1',\n    description: 'Handles payment proof uploads',\n    payloadExample: { paymentAttemptId: 'uuid', amount: 100 },\n    idempotent: true,\n  })\n  async onProofUploaded(event: AnyEventEnvelope<PaymentProofUploadedData>): Promise<void> {\n    await this.process(event.data);\n  }\n}\n```\n\nThe same flag works on `@OnRequestReply` response handlers (v0.15.1), automatically skipping duplicate response deliveries:\n\n```typescript\nimport { OnRequestReply } from '@cobranza-apps/events-toolkit';\nimport { EventEnvelope, EventContext } from '@cobranza-apps/events-toolkit';\n\nclass MyResponseHandler {\n  @OnRequestReply('payment.proof.uploaded', {\n    companyId: '550e8400-e29b-41d4-a716-446655440000',\n    description: 'Handles payment proof upload responses',\n    payloadExample: { proofId: 'uuid' },\n    idempotent: true,\n  })\n  async handleResponse(\n    event: EventEnvelope<PaymentProofData>,\n    context: EventContext,\n  ): Promise<void> {\n    await this.process(event.data);\n  }\n}\n```\n\n### Subject Builder\n\nThe `SubjectBuilder` is the single entry point for subject generation:\n\n```typescript\nimport { SubjectBuilder } from '@cobranza-apps/events-toolkit';\n\nconst subject = subjectBuilder.build({\n  companyId: '550e8400e29b41d4a716446655440000',\n  domain: 'payment',\n  entity: 'proof',\n  action: 'uploaded',\n  version: '1'\n});\n// Result: \"company.550e8400e29b41d4a716446655440000.payment.proof.uploaded.v1\"\n```\n\n### Discovery\n\nConfigure the discovery subsystem to auto-register your service and generate JSON Schemas:\n\n```typescript\nimport { EventsToolkitModule } from '@cobranza-apps/events-toolkit';\n\nEventsToolkitModule.forRoot({\n  nats: { servers: ['nats://localhost:4222'] },\n  discovery: {\n    enabled: true,\n    registerOnStartup: true,\n    heartbeatIntervalMinutes: 5,\n    service: { name: 'payment-service', version: '1.0.0' },\n  },\n})\n```\n\nFor the full guide, see [Event Discovery & Service Registry](docs/event-discovery-and-service-registry.md).\n\n### Event Factory\n\nCreate validated event instances without the `new` keyword. The factory accepts the data payload and an `EventContext`, and returns a fully-populated `EventEnvelope`:\n\n```typescript\nimport { createEvent, ActorType } from '@cobranza-apps/events-toolkit';\n\nconst eventContext: EventContext = {\n  type: 'payment.proof.uploaded',\n  version: '1.0.0',\n  producer: 'payment-service',\n  companyId: '550e8400-e29b-41d4-a716-446655440000',\n  actorType: ActorType.CLIENT,\n  actorId: 'clt_123e4567-e89b-12d3-a456-426614174000',\n  correlationId: '987fcdeb-51a2-43e8-9c4f-123456789abc',\n};\n\nconst event = createEvent(paymentData, eventContext);\n```\n\n---\n\n## Architecture\n\n```text\nsrc/\n├── index.ts                    # Public API barrel exports\n├── common/                     # Shared across all modules\n│   ├── constants.ts            # Magic strings, defaults\n│   ├── envelope/               # EventEnvelope<T>, ActorType, EventBase\n│   │   └── validators/         # Custom class-validator decorators\n│   ├── dto/                    # BuildSubjectDto\n│   ├── utils/                  # SubjectBuilder, EventFactory, uuid.utils, date utils\n│   └── errors/                 # EventConsumerException\n├── producer/\n│   ├── decorators/             # @EmitEvent(), EmitEventInterceptor\n│   ├── producer.module.ts\n│   └── producer.service.ts\n├── consumer/\n│   ├── decorators/             # @OnEvent(), @OnRequestReply(), explorers\n│   ├── consumer.module.ts\n│   ├── consumer.service.ts\n│   └── jetstream-consumer.service.ts\n├── discovery/                    # Service discovery, manifest generation, schema publishing\n│   ├── dto/                      # Manifest DTOs (ServiceManifestDto, ManifestConsumeEntry, etc.)\n│   ├── events/                   # DiscoveryEventPublisher, platform subjects and event types\n│   ├── utils/                    # SchemaGenerator, SchemaPersister\n│   ├── discovery.controller.ts   # HTTP endpoints: GET /discovery/manifest, GET /discovery/schemas\n│   ├── discovery.service.ts      # Orchestrates manifest generation, heartbeat, shutdown\n│   ├── discovery.module.ts       # DiscoveryModule DynamicModule\n│   ├── manifest.service.ts       # Scans decorators, builds ServiceManifestDto\n│   └── manifest-entry.builder.ts # Builds manifest entries, resolves payloadSchemaRef\n├── request-reply/              # RequestReplyService\n├── outbox/                     # OutboxModule, OutboxService, SqliteOutboxRepository, PostgresOutboxRepository\n└── logging/                    # EventLoggerService (Winston)\n```\n\nEach concern is a separate NestJS `DynamicModule` — microservices import only what they need.\n\n---\n\n## Guidelines for AI Agents\n\nWhen generating event-related code in microservices using this toolkit, follow these rules:\n\n1. **Subject naming**: Always use `SubjectBuilder.build()` — never concatenate subject strings manually.\n2. **Event IDs**: Use `generateEventId()` from the toolkit, which returns a UUIDv7 prefixed with `evt_`.\n3. **Validation**: Always decorate event data classes with `class-validator` decorators.\n4. **Actor context**: Always populate `actor_type`. Provide `actor_id` for `client` and `company_user`; it is optional for `system`, `scheduler`, and `external_api` actor types.\n5. **Tenant isolation**: `company_id` is mandatory in tenant event envelopes (`EventEnvelope`). For tenant-less operations use `GlobalEventEnvelope` (no `company_id`) and `global.*` subjects — see [Global Events](docs/global-events.md).\n6. **Idempotency**: Consumers must be idempotent — use `id` + `correlation_id` for deduplication via `IdempotencyService`, `@OnEvent({ idempotent: true })`, or `@OnRequestReply({ idempotent: true })`. See [Idempotency](docs/idempotency.md).\n7. **Past-tense actions**: Action names must use past tense (`created`, `uploaded`, `processed`).\n8. **Consumer errors**: Throw `EventConsumerException` for business errors that should route to DLQ.\n9. **References over objects**: Prefer IDs over full object graphs in event payloads.\n10. **Events under 256KB**: Keep event payloads small.\n\nFor step-by-step instructions on creating events, naming subjects, and common pitfalls, see [`docs/ai-agent-guidelines.md`](docs/ai-agent-guidelines.md).\n\nFor the full convention specification, see [`docs/event-messaging-convention.md`](docs/event-messaging-convention.md).\n\n---\n\n## Development\n\n### Local Development Setup\n\n```bash\ngit clone <repo-url>\ncd events-toolkit\nnpm install\n```\n\n### Scripts\n\n```bash\nnpm run build       # Compile TypeScript to dist/\nnpm test            # Run unit tests (Jest)\nnpm run test:e2e    # Run integration tests (requires NATS)\nnpm run lint        # ESLint\nnpm run format      # Prettier\n```\n\n### Local NATS for testing\n\n```bash\ndocker run -p 4222:4222 nats:latest -js\n```\n\n### Testing Utilities\n\nThe toolkit provides mock services, a NestJS test module, and Jest assertion helpers for unit-testing microservices that depend on events-toolkit — no NATS connection required.\n\n```typescript\nimport { Test } from '@nestjs/testing';\nimport {\n  EventsToolkitTestModule,\n  MockProducerService,\n  expectEventPublished,\n} from '@cobranza-apps/events-toolkit/testing';\n```\n\n> Testing utilities (mocks + assertion helpers) must be imported from the `@cobranza-apps/events-toolkit/testing` subpath — they depend on `@jest/globals` and are not exported from the main entry.\n\n```typescript\ndescribe('PaymentService', () => {\n  let service: PaymentService;\n  let mockProducer: MockProducerService;\n\n  beforeEach(async () => {\n    const module = await Test.createTestingModule({\n      imports: [EventsToolkitTestModule.forRoot()],\n      providers: [PaymentService],\n    }).compile();\n\n    service = module.get(PaymentService);\n    mockProducer = module.get(MockProducerService);\n  });\n\n  it('should publish an event', async () => {\n    await service.uploadProof({ companyId: '...', amount: 250 });\n    expectEventPublished(mockProducer, 'company.550e.payment.proof.uploaded.v1');\n  });\n});\n```\n\nFull documentation: [`docs/testing-utilities.md`](docs/testing-utilities.md)\n\n---\n\n## Deployment\n\n### JetStream Stream Configuration\n\nConfigure event, DLQ, and platform streams with JetStream. Streams can be created manually (CLI or programmatic) or auto-created by enabling `consumer.autoCreateStreams`.\n\nFor the full guide — server requirements, stream auto-creation, manual setup, resource limits, authentication, clustering, monitoring, and backup/restore — see [NATS JetStream Configuration](docs/nats-jetstream-configuration.md).\n\n### Environment Variables\n\n| Variable | Description | Example |\n|----------|-------------|---------|\n| `NATS_URLS` | Comma-separated NATS server URLs | `nats://localhost:4222` |\n| `SERVICE_NAME` | Microservice name for discovery | `payment-service` |\n| `SERVICE_VERSION` | Microservice version for discovery | `1.0.0` |\n| `OUTBOX_DB_PATH` | SQLite file path (SQLite outbox only) | `/data/outbox.sqlite` |\n| `IDEMPOTENCY_DB_PATH` | SQLite file path (SQLite idempotency only) | `/data/idempotency.sqlite` |\n\n### Health Checks\n\n- **Liveness probe**: `GET /discovery/manifest` — returns the service manifest JSON. A 200 response indicates the service is healthy and the discovery subsystem is active.\n- **Heartbeat**: Set `heartbeatIntervalMinutes` in discovery options to enable periodic platform heartbeat events (`platform.service.heartbeat.v1`). Default: 5 minutes.\n- **SQLite persistence**: When using the SQLite outbox backend in Docker, mount a persistent volume at the `OUTBOX_DB_PATH` directory to survive container restarts. See [Outbox Configuration](docs/outbox-configuration.md). When using the SQLite idempotency backend, mount the same persistent volume (or path under it) — see [Idempotency](docs/idempotency.md).\n\n---\n\n## Related Documentation\n\n- [Changelog](CHANGELOG.md) — Notable release changes and upgrade notes\n- [Event & Messaging Convention](docs/event-messaging-convention.md) — Full event standard specification\n- [Idempotency](docs/idempotency.md) — SQLite/PostgreSQL/memory backends, manual vs automatic usage, key generation, TTL, and MockIdempotencyService testing\n- [Outbox Configuration](docs/outbox-configuration.md) — SQLite vs Postgres setup, service options, and migration guide\n- [Outbox Usage Guidelines](docs/outbox-usage-guidelines.md) — Decision trees for outbox backend, transactional vs normal, and request-reply patterns\n- [Transactional Outbox Usage](docs/outbox-transactional-usage.md) — TypeORM transaction examples and saveInTransaction guide\n- [AI Agent Guidelines](docs/ai-agent-guidelines.md) — Step-by-step event creation, naming, correlation/causation, and common mistakes\n- [Global Events](docs/global-events.md) — When to use tenant (`EventEnvelope`) vs global (`GlobalEventEnvelope`) events\n- [Event Discovery & Service Registry](docs/event-discovery-and-service-registry.md) — Service manifest, schema generation, platform events, and discovery module setup\n- [Request-Reply Patterns](docs/request-reply-patterns.md) — Sync vs async patterns, correlation, timeouts, and error handling\n- [Request-Reply Guidelines](docs/request-reply-guidelines.md) — Decision tree, timeout recommendations, performance trade-offs, and best practices\n- [Request-Reply Examples](docs/examples/) — Complete code examples for sync, async, and outbox request-reply patterns\n- [Testing Utilities](docs/testing-utilities.md) — Mock services, test module, and assertion helpers\n- [NATS JetStream Configuration](docs/nats-jetstream-configuration.md) — Server requirements, stream auto-creation, manual setup, and production recommendations\n- [Architecture](.agent/project-info/architecture.md) — Module design and data flows\n- [Tech Stack](.agent/project-info/tech.md) — Technology choices and development setup\n- [Product Overview](.agent/project-info/product.md) — Problem definition and goals\n\n---\n\n## License\n\nUnlicense\n","readmeFilename":"README.md"}