{"_id":"@eco-foundation/eco-messaging","_rev":"8-4f17cb0fc4438c54e3807d28b6ce27d8","name":"@eco-foundation/eco-messaging","dist-tags":{"latest":"3.0.4"},"versions":{"1.1.0":{"name":"@eco-foundation/eco-messaging","version":"1.1.0","author":{"name":"Eco Engineering","email":"eng@eco.com"},"license":"MIT","_id":"@eco-foundation/eco-messaging@1.1.0","maintainers":[{"name":"mdavid123","email":"mdavid@eco.com"},{"name":"seveyeco","email":"matt@eco.com"},{"name":"paged","email":"dirkpage@hotmail.com"},{"name":"aleph2012","email":"satish@beam.io"},{"name":"carlosfebres","email":"carlosfebres97@gmail.com"}],"homepage":"https://github.com/eco/eco-messaging#readme","bugs":{"url":"https://github.com/eco/eco-messaging/issues"},"dist":{"shasum":"c704bac8ed379cc4c3c12b61a3d31632b33bb555","tarball":"https://registry.npmjs.org/@eco-foundation/eco-messaging/-/eco-messaging-1.1.0.tgz","fileCount":162,"integrity":"sha512-bG1KRv6fodW/c8V7u3j/CXcfYQ+6Jkqb5PX/xudZ3oe13STVyABn30ffQAnuojqAmh4UMuRl6C2O4GEZ7M0TgA==","signatures":[{"sig":"MEQCIEd6EGfEpenN1SYz4+Nqr0RdsLA9l13Tfc67+wnkCoUYAiAsHzlIbJ1vI4Bd/aOwcIGGONnZZ04LH/fq5e4sPKwP4A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":583752},"main":"./dist/index.js","_from":"file:eco-foundation-eco-messaging-1.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","require":"./dist/index.js"},"./otel":{"types":"./dist/otel/index.d.ts","default":"./dist/otel/index.js","require":"./dist/otel/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js","require":"./dist/testing/index.js"}},"scripts":{"build":"tsc -p tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"seveyeco","email":"matt@eco.com"},"_resolved":"/tmp/b7fe36049fb8050e912bdd5830409334/eco-foundation-eco-messaging-1.1.0.tgz","_integrity":"sha512-bG1KRv6fodW/c8V7u3j/CXcfYQ+6Jkqb5PX/xudZ3oe13STVyABn30ffQAnuojqAmh4UMuRl6C2O4GEZ7M0TgA==","repository":{"url":"git+https://github.com/eco/eco-messaging.git","type":"git","directory":"packages/transport"},"_npmVersion":"10.9.8","description":"Hardened NestJS AMQP transport: confirms, outbox, idempotent consume, topology as code","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"typesVersions":{"*":{"otel":["dist/otel/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","amqplib":"^0.10.9","ioredis":"^5.9.0","mongodb":"^6.12.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/amqplib":"^0.10.8","testcontainers":"^12.0.4","@nestjs/testing":"^11.0.1","reflect-metadata":"^0.2.2","@opentelemetry/api":"^1.9.1","amqp-connection-manager":"^5.0.0","@eco-foundation/eco-message-contracts":"1.1.0"},"peerDependencies":{"zod":"^3.25.0 || ^4.0.0","amqplib":"^0.10.0","@nestjs/core":"^10.2.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","testcontainers":"^10.0.0 || ^11.0.0 || ^12.0.0","@opentelemetry/api":"^1.9.0","amqp-connection-manager":"^5.0.0","@eco-foundation/eco-message-contracts":"^1.1.0"},"peerDependenciesMeta":{"testcontainers":{"optional":true},"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eco-messaging_1.1.0_1787585549299_0.2114456734607053","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@eco-foundation/eco-messaging","version":"2.0.0","author":{"name":"Eco Engineering","email":"eng@eco.com"},"license":"MIT","_id":"@eco-foundation/eco-messaging@2.0.0","maintainers":[{"name":"mdavid123","email":"mdavid@eco.com"},{"name":"seveyeco","email":"matt@eco.com"},{"name":"paged","email":"dirkpage@hotmail.com"},{"name":"aleph2012","email":"satish@beam.io"},{"name":"carlosfebres","email":"carlosfebres97@gmail.com"}],"homepage":"https://github.com/eco/eco-messaging#readme","bugs":{"url":"https://github.com/eco/eco-messaging/issues"},"dist":{"shasum":"0b1a536f4839e048ec87d1e937f1394a44937671","tarball":"https://registry.npmjs.org/@eco-foundation/eco-messaging/-/eco-messaging-2.0.0.tgz","fileCount":175,"integrity":"sha512-lG4pJ7lwYeMxG9d9dOqZasWv7mQg0RsP6SKIl4LTbatZREkEz0RoF/JIcDYV84QJL2JV3smqhErJLZPn4efWTA==","signatures":[{"sig":"MEUCIAqJE7M1WomFdS0SNVKOSzoBTNov7NeBksYD5db118SGAiEA0zIQaQ6qarMWlhFRV8ff4zD8sk8+asqpVUubLsHSzBA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":751221},"main":"./dist/index.js","_from":"file:eco-foundation-eco-messaging-2.0.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","require":"./dist/index.js"},"./otel":{"types":"./dist/otel/index.d.ts","default":"./dist/otel/index.js","require":"./dist/otel/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js","require":"./dist/testing/index.js"},"./dashboards/grafana":"./dashboards/eco-messaging.json"},"scripts":{"build":"tsc -p tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"seveyeco","email":"matt@eco.com"},"_resolved":"/tmp/a469c80a6f0860b0c464f5ba4cc0036b/eco-foundation-eco-messaging-2.0.0.tgz","_integrity":"sha512-lG4pJ7lwYeMxG9d9dOqZasWv7mQg0RsP6SKIl4LTbatZREkEz0RoF/JIcDYV84QJL2JV3smqhErJLZPn4efWTA==","repository":{"url":"git+https://github.com/eco/eco-messaging.git","type":"git","directory":"packages/transport"},"_npmVersion":"10.9.8","description":"Hardened NestJS AMQP transport: confirms, outbox, idempotent consume, topology as code","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"typesVersions":{"*":{"otel":["dist/otel/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","amqplib":"^0.10.9","ioredis":"^5.9.0","mongodb":"^6.12.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/amqplib":"^0.10.8","testcontainers":"^12.0.4","@nestjs/testing":"^11.0.1","reflect-metadata":"^0.2.2","@opentelemetry/api":"^1.9.1","amqp-connection-manager":"^5.0.0","@eco-foundation/eco-message-contracts":"1.2.0"},"peerDependencies":{"zod":"^3.25.0 || ^4.0.0","amqplib":"^0.10.0","@nestjs/core":"^10.2.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","testcontainers":"^10.0.0 || ^11.0.0 || ^12.0.0","@opentelemetry/api":"^1.9.0","amqp-connection-manager":"^5.0.0","@eco-foundation/eco-message-contracts":"^1.2.0"},"peerDependenciesMeta":{"testcontainers":{"optional":true},"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eco-messaging_2.0.0_1787674814763_0.5037126005344315","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@eco-foundation/eco-messaging","version":"2.1.0","author":{"name":"Eco Engineering","email":"eng@eco.com"},"license":"MIT","_id":"@eco-foundation/eco-messaging@2.1.0","maintainers":[{"name":"mdavid123","email":"mdavid@eco.com"},{"name":"seveyeco","email":"matt@eco.com"},{"name":"paged","email":"dirkpage@hotmail.com"},{"name":"aleph2012","email":"satish@beam.io"},{"name":"carlosfebres","email":"carlosfebres97@gmail.com"}],"homepage":"https://github.com/eco/eco-messaging#readme","bugs":{"url":"https://github.com/eco/eco-messaging/issues"},"dist":{"shasum":"f4a42a39e5605b0b13acc3926b57b3d24e09e737","tarball":"https://registry.npmjs.org/@eco-foundation/eco-messaging/-/eco-messaging-2.1.0.tgz","fileCount":180,"integrity":"sha512-3D78Jhz1G5bIFAkJ01aCvkhmtYm4d/LGOzcGM4YoiGsy/LM7+1Dl1byLfhuMGsGjN68chzk2NcZmdJwyqeg9sw==","signatures":[{"sig":"MEQCIHQX1xLJq5hDml6XQjkmzFQT4OTmoqHnMJUS9jCgX0lNAiA+7gm1H6oKuNcmrQl87pwf5lGPhMu0Zw+JWYo020XEaw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":770268},"main":"./dist/index.js","_from":"file:eco-foundation-eco-messaging-2.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","require":"./dist/index.js"},"./otel":{"types":"./dist/otel/index.d.ts","default":"./dist/otel/index.js","require":"./dist/otel/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js","require":"./dist/testing/index.js"},"./dashboards/grafana":"./dashboards/eco-messaging.json"},"scripts":{"build":"tsc -p tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"seveyeco","email":"matt@eco.com"},"_resolved":"/tmp/8ba3a66210639c13cc29a64ae5ad56c3/eco-foundation-eco-messaging-2.1.0.tgz","_integrity":"sha512-3D78Jhz1G5bIFAkJ01aCvkhmtYm4d/LGOzcGM4YoiGsy/LM7+1Dl1byLfhuMGsGjN68chzk2NcZmdJwyqeg9sw==","repository":{"url":"git+https://github.com/eco/eco-messaging.git","type":"git","directory":"packages/transport"},"_npmVersion":"10.9.8","description":"Hardened NestJS AMQP transport: confirms, outbox, idempotent consume, topology as code","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"typesVersions":{"*":{"otel":["dist/otel/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","amqplib":"^0.10.9","ioredis":"^5.9.0","mongodb":"^6.12.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/amqplib":"^0.10.8","testcontainers":"^12.0.4","@nestjs/testing":"^11.0.1","reflect-metadata":"^0.2.2","@opentelemetry/api":"^1.9.1","amqp-connection-manager":"^5.0.0","@eco-foundation/eco-message-contracts":"1.3.0"},"peerDependencies":{"zod":"^3.25.0 || ^4.0.0","amqplib":"^0.10.0","@nestjs/core":"^10.2.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","testcontainers":"^10.0.0 || ^11.0.0 || ^12.0.0","@opentelemetry/api":"^1.9.0","amqp-connection-manager":"^5.0.0","@eco-foundation/eco-message-contracts":"^1.3.0"},"peerDependenciesMeta":{"testcontainers":{"optional":true},"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eco-messaging_2.1.0_1787696101519_0.33240979273935145","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@eco-foundation/eco-messaging","version":"3.0.0","author":{"name":"Eco Engineering","email":"eng@eco.com"},"license":"MIT","_id":"@eco-foundation/eco-messaging@3.0.0","maintainers":[{"name":"mdavid123","email":"mdavid@eco.com"},{"name":"seveyeco","email":"matt@eco.com"},{"name":"paged","email":"dirkpage@hotmail.com"},{"name":"aleph2012","email":"satish@beam.io"},{"name":"carlosfebres","email":"carlosfebres97@gmail.com"}],"homepage":"https://github.com/eco/eco-messaging#readme","bugs":{"url":"https://github.com/eco/eco-messaging/issues"},"dist":{"shasum":"4ed2e7b9392dc82d9eaad1d9de144b6349d53941","tarball":"https://registry.npmjs.org/@eco-foundation/eco-messaging/-/eco-messaging-3.0.0.tgz","fileCount":184,"integrity":"sha512-t1jfwh52VcOPnGLFuFt/EDsndja4K7bEfuO6q0HEc2LmH1doCcUile270Rq8N4M1+ybcc7VCBlq2mYb7WqIL+g==","signatures":[{"sig":"MEYCIQDE+SDyINUlx/j9CjTKui1KpC3houwMfdJCnZqcL8oU7wIhAPQHSuNyFKWLYJDGPluUsm1TieesD7nuws9SZADhjCVz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":823636},"main":"./dist/index.js","_from":"file:eco-foundation-eco-messaging-3.0.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","require":"./dist/index.js"},"./otel":{"types":"./dist/otel/index.d.ts","default":"./dist/otel/index.js","require":"./dist/otel/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js","require":"./dist/testing/index.js"},"./dashboards/grafana":"./dashboards/eco-messaging.json"},"scripts":{"build":"tsc -p tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"seveyeco","email":"matt@eco.com"},"_resolved":"/tmp/e1fe249e6a72e8534fbad15d9c718e37/eco-foundation-eco-messaging-3.0.0.tgz","_integrity":"sha512-t1jfwh52VcOPnGLFuFt/EDsndja4K7bEfuO6q0HEc2LmH1doCcUile270Rq8N4M1+ybcc7VCBlq2mYb7WqIL+g==","repository":{"url":"git+https://github.com/eco/eco-messaging.git","type":"git","directory":"packages/transport"},"_npmVersion":"10.9.8","description":"Hardened NestJS AMQP transport: confirms, outbox, idempotent consume, topology as code","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"typesVersions":{"*":{"otel":["dist/otel/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","amqplib":"^0.10.9","ioredis":"^5.9.0","mongodb":"^6.12.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/amqplib":"^0.10.8","testcontainers":"^12.0.4","@nestjs/testing":"^11.0.1","reflect-metadata":"^0.2.2","@opentelemetry/api":"^1.9.1","amqp-connection-manager":"^5.0.0","@eco-foundation/eco-message-contracts":"2.0.0"},"peerDependencies":{"zod":"^3.25.0 || ^4.0.0","amqplib":"^0.10.0","@nestjs/core":"^10.2.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","testcontainers":"^10.0.0 || ^11.0.0 || ^12.0.0","@opentelemetry/api":"^1.9.0","amqp-connection-manager":"^5.0.0","@eco-foundation/eco-message-contracts":"^2.0.0"},"peerDependenciesMeta":{"testcontainers":{"optional":true},"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eco-messaging_3.0.0_1788204915878_0.4580862927256515","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@eco-foundation/eco-messaging","version":"3.0.1","author":{"name":"Eco Engineering","email":"eng@eco.com"},"license":"MIT","_id":"@eco-foundation/eco-messaging@3.0.1","maintainers":[{"name":"mdavid123","email":"mdavid@eco.com"},{"name":"seveyeco","email":"matt@eco.com"},{"name":"paged","email":"dirkpage@hotmail.com"},{"name":"aleph2012","email":"satish@beam.io"},{"name":"carlosfebres","email":"carlosfebres97@gmail.com"}],"homepage":"https://github.com/eco/eco-messaging#readme","bugs":{"url":"https://github.com/eco/eco-messaging/issues"},"dist":{"shasum":"185e7d47dbbd19760c4e3e7a0647540dd2973ec7","tarball":"https://registry.npmjs.org/@eco-foundation/eco-messaging/-/eco-messaging-3.0.1.tgz","fileCount":184,"integrity":"sha512-5F692HHum/eUBPnaOGyPNuW6uRSGa82/fCFoA+kZxDI9+SyPvJfk9UNPzRyPUFlEIcKMTesUW/i7Ng3nyZdBpg==","signatures":[{"sig":"MEYCIQDxBBrePVB86mDi/O7rFGeyEGOlU86dXmpYHTTVofpJ3wIhAKfhLrgl4t6AutC9hO0PZWKF4ReSyZAVjZe+UedbuM0i","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":824466},"main":"./dist/index.js","_from":"file:eco-foundation-eco-messaging-3.0.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","require":"./dist/index.js"},"./otel":{"types":"./dist/otel/index.d.ts","default":"./dist/otel/index.js","require":"./dist/otel/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js","require":"./dist/testing/index.js"},"./dashboards/grafana":"./dashboards/eco-messaging.json"},"scripts":{"build":"tsc -p tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"seveyeco","email":"matt@eco.com"},"_resolved":"/tmp/0d6fadb141200909e0b00fd7c8644e4f/eco-foundation-eco-messaging-3.0.1.tgz","_integrity":"sha512-5F692HHum/eUBPnaOGyPNuW6uRSGa82/fCFoA+kZxDI9+SyPvJfk9UNPzRyPUFlEIcKMTesUW/i7Ng3nyZdBpg==","repository":{"url":"git+https://github.com/eco/eco-messaging.git","type":"git","directory":"packages/transport"},"_npmVersion":"10.9.8","description":"Hardened NestJS AMQP transport: confirms, outbox, idempotent consume, topology as code","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"typesVersions":{"*":{"otel":["dist/otel/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","amqplib":"^0.10.9","ioredis":"^5.9.0","mongodb":"^6.12.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/amqplib":"^0.10.8","testcontainers":"^12.0.4","@nestjs/testing":"^11.0.1","reflect-metadata":"^0.2.2","@opentelemetry/api":"^1.9.1","amqp-connection-manager":"^5.0.0","@eco-foundation/eco-message-contracts":"2.2.0"},"peerDependencies":{"zod":"^3.25.0 || ^4.0.0","amqplib":"^0.10.0","@nestjs/core":"^10.2.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","testcontainers":"^10.0.0 || ^11.0.0 || ^12.0.0","@opentelemetry/api":"^1.9.0","amqp-connection-manager":"^5.0.0","@eco-foundation/eco-message-contracts":"^2.2.0"},"peerDependenciesMeta":{"testcontainers":{"optional":true},"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eco-messaging_3.0.1_1788886811007_0.9689401021924484","host":"s3://npm-registry-packages-npm-production"}},"3.0.2":{"name":"@eco-foundation/eco-messaging","version":"3.0.2","author":{"name":"Eco Engineering","email":"eng@eco.com"},"license":"MIT","_id":"@eco-foundation/eco-messaging@3.0.2","maintainers":[{"name":"mdavid123","email":"mdavid@eco.com"},{"name":"seveyeco","email":"matt@eco.com"},{"name":"paged","email":"dirkpage@hotmail.com"},{"name":"aleph2012","email":"satish@beam.io"},{"name":"carlosfebres","email":"carlosfebres97@gmail.com"}],"homepage":"https://github.com/eco/eco-messaging#readme","bugs":{"url":"https://github.com/eco/eco-messaging/issues"},"dist":{"shasum":"51500596d99125ebbb159d2cdb1f4ecd717ff0ea","tarball":"https://registry.npmjs.org/@eco-foundation/eco-messaging/-/eco-messaging-3.0.2.tgz","fileCount":188,"integrity":"sha512-IxxccaV/uzXBCdpc01lZHIfzf0PrszqfkKwphs6uUz93157hrlz3C+/DZvc1WUnYx18VBevGCRVpUc5goLN0/g==","signatures":[{"sig":"MEYCIQDfgWy3NBw5OhkAzpl07GH2bROLMSCboXqyjrmE5MnxRgIhAIRhANwBRVZbXwbQA+Dy7oCSK/DecLy+Qk3rwhxpgGUN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":866953},"main":"./dist/index.js","_from":"file:eco-foundation-eco-messaging-3.0.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","require":"./dist/index.js"},"./otel":{"types":"./dist/otel/index.d.ts","default":"./dist/otel/index.js","require":"./dist/otel/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js","require":"./dist/testing/index.js"},"./dashboards/grafana":"./dashboards/eco-messaging.json"},"scripts":{"build":"tsc -p tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"seveyeco","email":"matt@eco.com"},"_resolved":"/tmp/8adf3e09fb983ce2258901030b90a145/eco-foundation-eco-messaging-3.0.2.tgz","_integrity":"sha512-IxxccaV/uzXBCdpc01lZHIfzf0PrszqfkKwphs6uUz93157hrlz3C+/DZvc1WUnYx18VBevGCRVpUc5goLN0/g==","repository":{"url":"git+https://github.com/eco/eco-messaging.git","type":"git","directory":"packages/transport"},"_npmVersion":"10.9.8","description":"Hardened NestJS AMQP transport: confirms, outbox, idempotent consume, topology as code","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"typesVersions":{"*":{"otel":["dist/otel/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","amqplib":"^0.10.9","ioredis":"^5.9.0","mongodb":"^6.12.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/amqplib":"^0.10.8","testcontainers":"^12.0.4","@nestjs/testing":"^11.0.1","reflect-metadata":"^0.2.2","@opentelemetry/api":"^1.9.1","amqp-connection-manager":"^5.0.0","@eco-foundation/eco-message-contracts":"2.2.1"},"peerDependencies":{"zod":"^3.25.0 || ^4.0.0","amqplib":"^0.10.0","@nestjs/core":"^10.2.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","testcontainers":"^10.0.0 || ^11.0.0 || ^12.0.0","@opentelemetry/api":"^1.9.0","amqp-connection-manager":"^5.0.0","@eco-foundation/eco-message-contracts":"^2.2.1"},"peerDependenciesMeta":{"testcontainers":{"optional":true},"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eco-messaging_3.0.2_1788898718166_0.28694501263531813","host":"s3://npm-registry-packages-npm-production"}},"3.0.3":{"name":"@eco-foundation/eco-messaging","version":"3.0.3","author":{"name":"Eco Engineering","email":"eng@eco.com"},"license":"MIT","_id":"@eco-foundation/eco-messaging@3.0.3","maintainers":[{"name":"mdavid123","email":"mdavid@eco.com"},{"name":"seveyeco","email":"matt@eco.com"},{"name":"paged","email":"dirkpage@hotmail.com"},{"name":"aleph2012","email":"satish@beam.io"},{"name":"carlosfebres","email":"carlosfebres97@gmail.com"}],"homepage":"https://github.com/eco/eco-messaging#readme","bugs":{"url":"https://github.com/eco/eco-messaging/issues"},"dist":{"shasum":"569c4f5ae446305690aa54fdfca104fef6df4e7e","tarball":"https://registry.npmjs.org/@eco-foundation/eco-messaging/-/eco-messaging-3.0.3.tgz","fileCount":188,"integrity":"sha512-OiDU1fpGPAhX6RR9KdCqvkNYk0n+g7V9bxI++NqSnMZDHDlHDRKzYwItByuG7Z7GPLNu5EhubHt/d0QrshBR3g==","signatures":[{"sig":"MEYCIQD/xOyC019MqccXX19xDPKKdmBvdHy4PEioidml/mtD1QIhAK7wNu85pMYUF33gAvAShSBteZ+aOfWfDg0YwXQFNgmG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDeCaYjLX8bSF5f01J1VbDAx6aSe81kgyjoqfqzuyWiGAIhAJA11l1efgMpZIm+63Sva00SdHkSBXC3YoFA7O0o1/Sg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":867830},"main":"./dist/index.js","_from":"file:eco-foundation-eco-messaging-3.0.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","require":"./dist/index.js"},"./otel":{"types":"./dist/otel/index.d.ts","default":"./dist/otel/index.js","require":"./dist/otel/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js","require":"./dist/testing/index.js"},"./dashboards/grafana":"./dashboards/eco-messaging.json"},"scripts":{"build":"tsc -p tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"seveyeco","email":"matt@eco.com"},"_resolved":"/tmp/3b1cb1643b26ede55d76d88822a3cd1d/eco-foundation-eco-messaging-3.0.3.tgz","_integrity":"sha512-OiDU1fpGPAhX6RR9KdCqvkNYk0n+g7V9bxI++NqSnMZDHDlHDRKzYwItByuG7Z7GPLNu5EhubHt/d0QrshBR3g==","repository":{"url":"git+https://github.com/eco/eco-messaging.git","type":"git","directory":"packages/transport"},"_npmVersion":"10.9.8","description":"Hardened NestJS AMQP transport: confirms, outbox, idempotent consume, topology as code","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"typesVersions":{"*":{"otel":["dist/otel/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","amqplib":"^0.10.9","ioredis":"^5.9.0","mongodb":"^6.12.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/amqplib":"^0.10.8","testcontainers":"^12.0.4","@nestjs/testing":"^11.0.1","reflect-metadata":"^0.2.2","@opentelemetry/api":"^1.9.1","amqp-connection-manager":"^5.0.0","@eco-foundation/eco-message-contracts":"2.2.1"},"peerDependencies":{"zod":"^3.25.0 || ^4.0.0","amqplib":"^0.10.0","@nestjs/core":"^10.2.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","testcontainers":"^10.0.0 || ^11.0.0 || ^12.0.0","@opentelemetry/api":"^1.9.0","amqp-connection-manager":"^5.0.0","@eco-foundation/eco-message-contracts":"^2.2.1"},"peerDependenciesMeta":{"testcontainers":{"optional":true},"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eco-messaging_3.0.3_1789411566706_0.5364553025051704","host":"s3://npm-registry-packages-npm-production"}},"3.0.4":{"_id":"@eco-foundation/eco-messaging@3.0.4","bugs":{"url":"https://github.com/eco/eco-messaging/issues"},"dist":{"shasum":"b67702b021fbbe80efd2aafd4190fa52f131ea88","tarball":"https://registry.npmjs.org/@eco-foundation/eco-messaging/-/eco-messaging-3.0.4.tgz","fileCount":188,"integrity":"sha512-tTlGdli89ugcSqZUruc5Y0tjIdHVsFWdaDMwMrLXafWcDTTVK2fiSMrTTJ27IP05xQ+D3X1kbYGzIid2nxtM0Q==","signatures":[{"sig":"MEQCICZuDbofEz1wXXeIvb0ZRjxeTOR9nQG9ZVoprYXnlsSVAiAt2qOXc8tDoi2agbMiMr4e/ZzUEhz0n72ptA6DlyEKeg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDUHyLnD69Xeqs7+PiqW0JvRDr443qkjDK6G2g+/W3htgIgXP50NP3yreXMyOjRvxHAChTBOUJp7XCggyxFC7GQWSQ="}],"unpackedSize":869472},"main":"./dist/index.js","name":"@eco-foundation/eco-messaging","_from":"file:eco-foundation-eco-messaging-3.0.4.tgz","types":"./dist/index.d.ts","author":{"name":"Eco Engineering","email":"eng@eco.com"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","require":"./dist/index.js"},"./otel":{"types":"./dist/otel/index.d.ts","default":"./dist/otel/index.js","require":"./dist/otel/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js","require":"./dist/testing/index.js"},"./dashboards/grafana":"./dashboards/eco-messaging.json"},"license":"MIT","scripts":{"build":"tsc -p tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo","typecheck":"tsc -p tsconfig.json --noEmit"},"version":"3.0.4","_npmUser":{"name":"seveyeco","email":"matt@eco.com"},"homepage":"https://github.com/eco/eco-messaging#readme","_resolved":"/tmp/4b7608a72f6d19e8b9ba546442c56ed8/eco-foundation-eco-messaging-3.0.4.tgz","_integrity":"sha512-tTlGdli89ugcSqZUruc5Y0tjIdHVsFWdaDMwMrLXafWcDTTVK2fiSMrTTJ27IP05xQ+D3X1kbYGzIid2nxtM0Q==","repository":{"url":"git+https://github.com/eco/eco-messaging.git","type":"git","directory":"packages/transport"},"_npmVersion":"10.9.8","description":"Hardened NestJS AMQP transport: confirms, outbox, idempotent consume, topology as code","directories":{},"maintainers":[{"name":"mdavid123","email":"mdavid@eco.com"},{"name":"seveyeco","email":"matt@eco.com"},{"name":"paged","email":"dirkpage@hotmail.com"},{"name":"aleph2012","email":"satish@beam.io"},{"name":"carlosfebres","email":"carlosfebres97@gmail.com"}],"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"typesVersions":{"*":{"otel":["dist/otel/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","amqplib":"^0.10.9","ioredis":"^5.9.0","mongodb":"^6.12.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/amqplib":"^0.10.8","testcontainers":"^12.0.4","@nestjs/testing":"^11.0.1","reflect-metadata":"^0.2.2","@opentelemetry/api":"^1.9.1","amqp-connection-manager":"^5.0.0","@eco-foundation/eco-message-contracts":"2.3.0"},"peerDependencies":{"zod":"^3.25.0 || ^4.0.0","amqplib":"^0.10.0","@nestjs/core":"^10.2.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","testcontainers":"^10.0.0 || ^11.0.0 || ^12.0.0","@opentelemetry/api":"^1.9.0","amqp-connection-manager":"^5.0.0","@eco-foundation/eco-message-contracts":"^2.3.0"},"peerDependenciesMeta":{"testcontainers":{"optional":true},"@opentelemetry/api":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eco-messaging_3.0.4_1790361478896_0.02249291574506196"}}},"time":{"created":"2026-08-24T15:32:29.090Z","modified":"2026-09-25T18:37:59.189Z","1.1.0":"2026-08-24T15:32:29.438Z","2.0.0":"2026-08-25T16:20:14.954Z","2.1.0":"2026-08-25T22:15:01.655Z","3.0.0":"2026-08-31T19:35:16.063Z","3.0.1":"2026-09-08T17:00:11.181Z","3.0.2":"2026-09-08T20:18:38.328Z","3.0.3":"2026-09-14T18:46:06.870Z","3.0.4":"2026-09-25T18:37:58.994Z"},"bugs":{"url":"https://github.com/eco/eco-messaging/issues"},"author":{"name":"Eco Engineering","email":"eng@eco.com"},"license":"MIT","homepage":"https://github.com/eco/eco-messaging#readme","repository":{"url":"git+https://github.com/eco/eco-messaging.git","type":"git","directory":"packages/transport"},"description":"Hardened NestJS AMQP transport: confirms, outbox, idempotent consume, topology as code","maintainers":[{"name":"mdavid123","email":"mdavid@eco.com"},{"name":"seveyeco","email":"matt@eco.com"},{"name":"paged","email":"dirkpage@hotmail.com"},{"name":"aleph2012","email":"satish@beam.io"},{"name":"carlosfebres","email":"carlosfebres97@gmail.com"}],"readme":"# @eco-foundation/eco-messaging\n\nA hardened NestJS AMQP transport for Eco's services: connection lifecycle, topology as code, a\nconfirm-based publisher, a transactional outbox with relay, and an idempotent consumer host.\nExtracted so that correct publish/consume behaviour is the default rather than something each service\nre-derives and re-reviews on its own.\n\n```sh\npnpm add @eco-foundation/eco-messaging @eco-foundation/eco-message-contracts\n```\n\n[`@eco-foundation/eco-message-contracts`](https://www.npmjs.com/package/@eco-foundation/eco-message-contracts)\nis a **peer**, not a dependency, so installing this package alone leaves an unmet peer — install both\nexplicitly. The remaining peers are things a NestJS service already has, and are peers so this library\nnever pulls a second copy of your framework or AMQP client into the tree: `@nestjs/common`\n(`^10 || ^11`), `@nestjs/core` (`^10.2 || ^11`), `amqplib` (`^0.10`), `amqp-connection-manager` (`^5`),\nand `zod` (`^3.25 || ^4`). `@opentelemetry/api` and `testcontainers` are optional peers, needed only\nif you wire OTel or import the `/testing` subpath.\n\nNote the `zod` floor: `^3.25.0`. A service declaring an older range needs to raise the declared range\neven if its lockfile already resolves something newer.\n\n## The guarantee\n\n**At-least-once delivery plus idempotent consumption.** This library does not provide exactly-once\ndelivery — that primitive does not exist here — so your handler must be safe to run twice. What the\nlibrary provides is that a message is not acknowledged until your handler has resolved, that a\nduplicate delivery of the same message ID is skipped rather than reapplied, and that a failure\nretries through broker topology rather than an in-process sleep.\n\n## Wiring it up\n\n```ts\nimport { Module } from '@nestjs/common';\nimport {\n  EcoMessagingModule,\n  MongoOutbox,\n  MongoIdempotencyLedger,\n} from '@eco-foundation/eco-messaging';\n\n@Module({\n  imports: [\n    EcoMessagingModule.forRoot({\n      url: process.env.RABBITMQ_URL!,\n      exchange: 'my-service.events',\n      sourceService: 'my-service',\n      // Host-supplied, already-connected. The library never opens its own datastore\n      // connection — it piggybacks on yours and owns only its own collections.\n      outbox: MongoOutbox.forConnection(mongooseConnection),\n      ledger: MongoIdempotencyLedger.forConnection(mongooseConnection),\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n`forRoot`/`forRootAsync` (not `register`) on purpose: there is exactly one messaging connection per\nservice, and the method name says so. The module is `@Global` — import it once at the app root.\nImporting it per feature module is how a service ends up with two connections, and heartbeats are\nper-connection, so a publisher on one can look healthy while a consumer on the other is dead.\n\nA publisher-only service can omit `outbox`/`ledger` entirely; an in-memory outbox is wired\nautomatically. Registering a consumer with **no** ledger is a refused configuration — consuming\nwithout dedup is not allowed to boot silently degraded.\n\nPersistence is a port with adapters, and the host chooses: `MemoryOutbox`/`MongoOutbox` and\n`MemoryLedger`/`MongoIdempotencyLedger`/`RedisIdempotencyLedger`. The library never opens its own\ndatastore connection, never calls `mongoose.connect()`, and has no `mongoose` peer dependency — which\nis what lets services on different Mongoose majors share it.\n\n## Publishing\n\nA producer publishes through the outbox by default, and for a `required` contract that is not merely\nrecommended — it is the only admitted path:\n\n```ts\nimport { obligationFromContract } from '@eco-foundation/eco-messaging';\n\nawait outbox.record(\n  obligationFromContract(InventorySnapshot, payload, {\n    now: new Date(),\n    sourceService: 'my-service',\n  }),\n  dbSession, // your own transaction handle, so the record commits atomically with the event\n);\n```\n\n`publisher.publishNowOrThrow(contract, payload)` is the fail-closed direct path: it awaits the\nconfirm and throws on nack, return, timeout, or disconnect rather than queuing anything. It admits a\n`required` contract only when that contract declares `durability: 'caller-ledger'`.\n\nOn failure, `EcoPublishError` answers two **orthogonal** questions. `isRetryablePublicationFailure`\nasks \"can retrying this exact message ever succeed?\"; `wireOutcome` asks \"did the broker ever see\nit?\" — which is what decides whether a failure should spend a finite attempt budget. A caller\nreducing the three wire outcomes to two must cut `not-attempted` vs. everything-else, never\n`broker-verdict` vs. everything-else; the latter lets an ambiguous publish retry without bound.\n\nIf you lease an obligation before publishing, size the lease TTL above\n`maxPublishWallTimeMs(options)`. Past that bound a slow-but-live publish has its lease stolen\nmid-flight and the lease starts _producing_ duplicates.\n\n## Consuming\n\n```ts\nimport { Injectable } from '@nestjs/common';\nimport type { HandlerContext } from '@eco-foundation/eco-messaging';\nimport {\n  EcoConsumer,\n  EcoMessageHandlerProvider,\n  TransientError,\n} from '@eco-foundation/eco-messaging';\n\n@Injectable()\n@EcoConsumer({ queue: 'my-service.snapshots', contracts: [InventorySnapshot] })\nexport class SnapshotHandler implements EcoMessageHandlerProvider {\n  async handle(payload: unknown, context: HandlerContext): Promise<void> {\n    // Your resolve is your durability attestation: the ack happens only after this resolves.\n    // Throw TransientError to retry via topology-based backoff, or PermanentError to park\n    // immediately in the DLQ.\n    if (somethingRecoverable) throw new TransientError('downstream unavailable, retry me');\n  }\n}\n```\n\nRegistering a consumer materializes a **trio** of queues at boot and on every reconnect: `X.v2` (the\nquorum work queue), `X.v2.retry` (TTL, dead-lettering back to work), and `X.v2.dlq` (the parking lot,\nno further dead-lettering). Subscribing without that trio asserted is a refused configuration.\n\nFor a producer-owned, un-enveloped, latest-value feed you do not control, `EcoExternalSnapshotConsumer`\nreads it on the shared connection — a bounded `x-max-length: 1` queue where a failure requeues once\nand then drops, because the message being retried is guaranteed stale.\n\n## Readiness\n\nWire `EcoMessagingHealth.isReady()` into your probe, not `EcoConnectionManager.isConnected()`: a\nconnected client whose queues do not exist is not ready to consume, and reporting ready in that state\nis how a deploy silently black-holes traffic.\n\nReadiness is the conjunction of **named gates**. The library owns `topology`; a service that rebuilds\nin-memory state on boot registers its own, so \"running\" and \"rehydrated\" stay distinguishable:\n\n```ts\nthis.rehydration = health.registerGate('rehydration'); // registered closed\n// ...later\nthis.rehydration.open(`rebuilt ${restored} obligations`);\n```\n\nA closed gate withholds **readiness only** — never consumption, and never the outbox relay's drain.\nBoth are deliberate: a service whose rehydration source is the bus would deadlock otherwise, and an\nobligation committed before a crash must publish regardless of how long the rebuild takes.\n\n`EcoMessagingStatus` is the separate, evented view of connection and publisher state for host\nlifecycle adapters (watchdogs, readiness latches, worker gates). It gates nothing, and credentials are\nredacted before any detail reaches a listener.\n\n## Observability\n\n`ALERT` exports five structured log-line literals. Eco alerting is **log-based** — this library's\ncustom OTLP metrics do not reach Datadog — so those five strings are the only thing that can page an\non-call engineer about a messaging failure. They are pinned byte-for-byte by tests; renaming one is a\nbreaking change.\n\n`METRIC` and `METRIC_KINDS` name the instruments, covering both halves of durability: the transport\n(`publish.*`, `consume.*`, `outbox.*`) and the caller-ledger obligation lifecycle\n(`obligation.state`, `obligation.pending`, `obligation.oldest_age_ms`). A gauge with no measurement\nreports nothing rather than zero.\n\n## Subpath exports\n\n| Subpath                                            | Contents                                                                                                                                                                                              |\n| -------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `@eco-foundation/eco-messaging`                    | the transport, module, ports, and adapters                                                                                                                                                            |\n| `@eco-foundation/eco-messaging/testing`            | conformance suites and fixtures for your own integration tests — **framework-agnostic**: the test API (`describe`/`it`/`expect`) is injected as a parameter, so it works under Jest as well as Vitest |\n| `@eco-foundation/eco-messaging/otel`               | OpenTelemetry metrics and tracing adapters                                                                                                                                                            |\n| `@eco-foundation/eco-messaging/dashboards/grafana` | the Grafana dashboard JSON, versioned with the metric contract                                                                                                                                        |\n\nIf you wire OTel, read the two ordering traps in the\n[repository README](https://github.com/eco/eco-messaging#wiring-opentelemetry-read-this-before-wiring-it)\nfirst — registering the `MeterProvider` after the metrics sink is built silently produces no metrics.\n\n## Upgrading from 1.x\n\n2.0.0 is a major for topology-surface reasons; nothing existing changes behaviour and the new bounds\ndefault to what hosts already had. There is one breaking source change: `RawPublishInput.envelope` is\nnow `Omit<Envelope, 'correlationId'>`, because `publishRawOrThrow` has always minted a fresh\ncorrelation ID per attempt and discarded whatever was passed. A caller passing a full `Envelope`\nobject literal must drop that field. See\n[CHANGELOG.md](https://github.com/eco/eco-messaging/blob/main/packages/transport/CHANGELOG.md) for the\nfull entry.\n\n## Documentation\n\nThese packages are the reference implementation of the standard, not its definition. The definition is\ntwo language-agnostic documents, both machine-checked against this code:\n\n- [Messaging conformance profile](https://github.com/eco/eco-messaging/blob/main/docs/spec/messaging-conformance-profile.md)\n  — envelope, topology, settlement, dedup, ordering, observability.\n- [Persist-before-publish and rehydration](https://github.com/eco/eco-messaging/blob/main/docs/spec/persist-before-publish-and-rehydration.md)\n  — producer durability and readiness.\n- [Alerting](https://github.com/eco/eco-messaging/blob/main/docs/alerting.md) — what each `ALERT`\n  means and its monitor status.\n- [Repository README](https://github.com/eco/eco-messaging#readme) — the full guide, including the\n  `.v2` classic→quorum cutover rule, what is deliberately out of scope, and the accepted residual\n  risks worth reading before you touch connection or consumer lifecycle.\n","readmeFilename":"README.md"}