{"_id":"@afidos/nestjs-event-notifications","_rev":"16-3ea21468c88cea09304fccc414cb91ca","name":"@afidos/nestjs-event-notifications","dist-tags":{"latest":"2.2.2"},"versions":{"1.0.0":{"name":"@afidos/nestjs-event-notifications","version":"1.0.0","keywords":["nestjs","events","notifications","typescript"],"author":{"name":"Afidos"},"license":"MIT","_id":"@afidos/nestjs-event-notifications@1.0.0","maintainers":[{"name":"afidoss","email":"fiacre.ayedoun@gmail.com"}],"dist":{"shasum":"fcd11208f8873a0f4c3207a24bbcaf3a15602a71","tarball":"https://registry.npmjs.org/@afidos/nestjs-event-notifications/-/nestjs-event-notifications-1.0.0.tgz","fileCount":110,"integrity":"sha512-KM4IGmogQT+01e6RMw1NlSvJ8PXK/2TXYMLS+gPwkUuqWUTRlawziDXnM3k34+h41H9lBLRgSjKyzYFsFFGyhg==","signatures":[{"sig":"MEYCIQCt70c3NMgHHDh2+JhrpQvrO1YlVjPELM1sCIyXEMwnYQIhANQeVrpZs6QjoNuq4yqoI0rJJ1IX3Nm4UP0SEle/Eem7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":744087},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"0d8dc596bb945980490c05b92a195369f9530e93","scripts":{"lint":"eslint \"src/**/*.ts\" --fix","test":"jest","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf dist coverage .nyc_output","start":"node dist/index.js","format":"prettier --write \"src/**/*.ts\" \"*.{js,json,md}\"","worker":"node scripts/start-worker.js","release":"semantic-release","test:ci":"jest --coverage --ci --watchAll=false --passWithNoTests","cli:sync":"ts-node src/commands/sync-event-types.command.ts","prebuild":"npm run clean","test:cov":"jest --coverage","test:e2e":"jest --config ./tests/jest-e2e.json","start:dev":"ts-node src/index.ts","typecheck":"tsc --noEmit","docs:serve":"serve docs -l 3001","lint:check":"eslint \"src/**/*.ts\"","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","worker:dev":"nodemon --exec \"ts-node -r tsconfig-paths/register\" src/workers/worker-main.ts","build:watch":"tsc -p tsconfig.build.json --watch","example:dev":"npm run build && npm run example:start:dev","release:dry":"semantic-release --dry-run","start:debug":"ts-node --inspect -r tsconfig-paths/register src/main.ts","example:test":"npm --prefix examples/basic-usage test","format:check":"prettier --check \"src/**/*.ts\" \"*.{js,json,md}\"","worker:build":"tsc && node scripts/start-worker.js","docs:generate":"typedoc --options typedoc.json","example:start":"npm --prefix examples/basic-usage run start","prepublishOnly":"npm run build && npm run test:ci","example:install":"npm install","example:start:dev":"npm --prefix examples/basic-usage run start:dev","example:advanced:api":"npm --prefix examples/advanced-usage run start:api","example:advanced:dev":"npm run build && npm run example:advanced:start:dev","example:advanced:start":"npm --prefix examples/advanced-usage run start","example:advanced:worker":"npm --prefix examples/advanced-usage run start:worker","example:advanced:install":"npm --prefix examples/advanced-usage install","example:advanced:start:dev":"npm --prefix examples/advanced-usage run start:dev","example:advanced:monitoring":"npm --prefix examples/advanced-usage run start:monitoring"},"_npmUser":{"name":"afidoss","actor":{"name":"afidoss","type":"user","email":"fiacre.ayedoun@gmail.com"},"email":"fiacre.ayedoun@gmail.com"},"workspaces":["examples/*"],"_npmVersion":"10.8.3","description":"Enterprise-grade event and notification system for NestJS applications","directories":{},"_nodeVersion":"18.17.0","dependencies":{"joi":"^17.9.0","uuid":"^9.0.0","axios":"^1.5.0","@nestjs/config":"^4.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","ts-node":"^10.9.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@types/uuid":"^10.0.0","nest-commander":"^3.11.0","@types/nodemailer":"^6.4.17","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"bull":"^4.10.0","typeorm":"^0.3.0","@nestjs/bull":"^10.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@nestjs/typeorm":"^10.0.0"},"optionalDependencies":{"nodemailer":"^6.9.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-event-notifications_1.0.0_1750236524936_0.40432739128678574","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@afidos/nestjs-event-notifications","version":"1.0.2","keywords":["nestjs","events","notifications","typescript"],"author":{"name":"Afidos"},"license":"MIT","_id":"@afidos/nestjs-event-notifications@1.0.2","maintainers":[{"name":"afidoss","email":"fiacre.ayedoun@gmail.com"}],"dist":{"shasum":"26743e75565d9391ec5a093e86a68993d2aad9ec","tarball":"https://registry.npmjs.org/@afidos/nestjs-event-notifications/-/nestjs-event-notifications-1.0.2.tgz","fileCount":110,"integrity":"sha512-N7TtXXSIzow7SoL8wxUG+tq4whMukNX6f55ggbB/UBcaqMgGGDpY0EyB4cGYdmG6eyW9mB5P53kmKBXf3Q8NtA==","signatures":[{"sig":"MEQCIEc4AZNEAgOXaHcXVwBim+8i7l5mTn8X4fGxIGibdMB5AiAohypZ+dsuQsOnn+k63rjrCHVRz2ZdVCLF/kaxpTM2LA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":744112},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"ae29635db26e3307324223b0fc8cf1bb61155bc6","scripts":{"lint":"eslint \"src/**/*.ts\" --fix","test":"jest","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf dist coverage .nyc_output","start":"node dist/index.js","format":"prettier --write \"src/**/*.ts\" \"*.{js,json,md}\"","worker":"node scripts/start-worker.js","release":"semantic-release","test:ci":"jest --coverage --ci --watchAll=false --passWithNoTests","cli:sync":"ts-node src/commands/sync-event-types.command.ts","prebuild":"npm run clean","test:cov":"jest --coverage","test:e2e":"jest --config ./tests/jest-e2e.json","start:dev":"ts-node src/index.ts","typecheck":"tsc --noEmit","docs:serve":"serve docs -l 3001","lint:check":"eslint \"src/**/*.ts\"","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","worker:dev":"nodemon --exec \"ts-node -r tsconfig-paths/register\" src/workers/worker-main.ts","build:watch":"tsc -p tsconfig.build.json --watch","example:dev":"npm run build && npm run example:start:dev","release:dry":"semantic-release --dry-run","start:debug":"ts-node --inspect -r tsconfig-paths/register src/main.ts","example:test":"npm --prefix examples/basic-usage test","format:check":"prettier --check \"src/**/*.ts\" \"*.{js,json,md}\"","worker:build":"tsc && node scripts/start-worker.js","docs:generate":"typedoc --options typedoc.json","example:start":"npm --prefix examples/basic-usage run start","prepublishOnly":"npm run build && npm run test:ci","example:install":"npm install","example:start:dev":"npm --prefix examples/basic-usage run start:dev","example:advanced:api":"npm --prefix examples/advanced-usage run start:api","example:advanced:dev":"npm run build && npm run example:advanced:start:dev","example:advanced:start":"npm --prefix examples/advanced-usage run start","example:advanced:worker":"npm --prefix examples/advanced-usage run start:worker","example:advanced:install":"npm --prefix examples/advanced-usage install","example:advanced:start:dev":"npm --prefix examples/advanced-usage run start:dev","example:advanced:monitoring":"npm --prefix examples/advanced-usage run start:monitoring"},"_npmUser":{"name":"afidoss","actor":{"name":"afidoss","type":"user","email":"fiacre.ayedoun@gmail.com"},"email":"fiacre.ayedoun@gmail.com"},"workspaces":["examples/*"],"_npmVersion":"10.8.3","description":"Enterprise-grade event and notification system for NestJS applications","directories":{},"_nodeVersion":"18.17.0","dependencies":{"joi":"^17.9.0","uuid":"^9.0.0","axios":"^1.5.0","@nestjs/config":"^4.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","ts-node":"^10.9.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@types/uuid":"^10.0.0","nest-commander":"^3.11.0","@types/nodemailer":"^6.4.17","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"bull":"^4.10.0","typeorm":"^0.3.0","@nestjs/bull":"^10.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@nestjs/typeorm":"^10.0.0"},"optionalDependencies":{"nodemailer":"^6.9.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-event-notifications_1.0.2_1750248750902_0.6432600002871549","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@afidos/nestjs-event-notifications","version":"1.0.3","keywords":["nestjs","events","notifications","typescript"],"author":{"name":"Afidos"},"license":"MIT","_id":"@afidos/nestjs-event-notifications@1.0.3","maintainers":[{"name":"afidoss","email":"fiacre.ayedoun@gmail.com"}],"dist":{"shasum":"b1dda33462eb72eb9d9c6d95dcb1c21553130e8c","tarball":"https://registry.npmjs.org/@afidos/nestjs-event-notifications/-/nestjs-event-notifications-1.0.3.tgz","fileCount":137,"integrity":"sha512-bX7m/MSdiZUkT5ykAH07uGxZv2rdKU54Gykm2C3cyIHoXSZMxl17wBnFxaTeovIZdrugcx73Z9DwyV3gW3pvcw==","signatures":[{"sig":"MEUCIQDWPAn6PiMV1K4dhSqQg7t0zKkzsnABylJE9iELTi/6OAIgcqQs+eDLE4fWRgMh3y2T7Z/a1SQbSu5alUBF7D467F0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":836229},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"c04b18dfc6b8f57f9be93a742a37aa5be8e008e1","scripts":{"lint":"eslint \"src/**/*.ts\" --fix","test":"jest","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf dist coverage .nyc_output","start":"echo 'This is a library. Use examples: npm run example:start'","format":"prettier --write \"src/**/*.ts\" \"*.{js,json,md}\"","worker":"node scripts/start-worker.js","release":"semantic-release","test:ci":"jest --coverage --ci --watchAll=false --passWithNoTests","cli:sync":"ts-node src/commands/sync-event-types.command.ts","prebuild":"npm run clean","test:cov":"jest --coverage","test:e2e":"jest --config ./tests/jest-e2e.json","start:dev":"echo 'This is a library. Use examples: npm run example:start:dev'","typecheck":"tsc --noEmit","docs:serve":"serve docs -l 3001","lint:check":"eslint \"src/**/*.ts\"","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","worker:dev":"nodemon --exec \"ts-node -r tsconfig-paths/register\" src/workers/worker-main.ts","build:watch":"tsc -p tsconfig.build.json --watch","example:dev":"npm run build && npm run example:start:dev","release:dry":"semantic-release --dry-run","start:debug":"echo 'This is a library. Use examples for debugging'","example:test":"npm --prefix examples/basic-usage test","format:check":"prettier --check \"src/**/*.ts\" \"*.{js,json,md}\"","worker:build":"tsc && node scripts/start-worker.js","docs:generate":"typedoc --options typedoc.json","example:start":"npm --prefix examples/basic-usage run start","prepublishOnly":"npm run build && npm run test:ci","example:install":"npm install","example:start:dev":"npm --prefix examples/basic-usage run start:dev"},"_npmUser":{"name":"afidoss","actor":{"name":"afidoss","type":"user","email":"fiacre.ayedoun@gmail.com"},"email":"fiacre.ayedoun@gmail.com"},"workspaces":["examples/*"],"_npmVersion":"10.8.3","description":"Enterprise-grade event and notification system for NestJS applications","directories":{},"_nodeVersion":"18.17.0","dependencies":{"joi":"^17.9.0","uuid":"^9.0.0","axios":"^1.5.0","@nestjs/config":"^4.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","ts-node":"^10.9.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@types/uuid":"^10.0.0","nest-commander":"^3.11.0","@types/nodemailer":"^6.4.17","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"bull":"^4.10.0","typeorm":"^0.3.0","@nestjs/bull":"^10.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@nestjs/typeorm":"^10.0.0"},"optionalDependencies":{"nodemailer":"^6.9.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-event-notifications_1.0.3_1750311953548_0.1138137993687145","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@afidos/nestjs-event-notifications","version":"1.0.4","keywords":["nestjs","events","notifications","typescript"],"author":{"name":"Afidos"},"license":"MIT","_id":"@afidos/nestjs-event-notifications@1.0.4","maintainers":[{"name":"afidoss","email":"fiacre.ayedoun@gmail.com"}],"dist":{"shasum":"bbcae5fe957cecb8b47123a9efb4ddd524d0782c","tarball":"https://registry.npmjs.org/@afidos/nestjs-event-notifications/-/nestjs-event-notifications-1.0.4.tgz","fileCount":143,"integrity":"sha512-/B3ZP59RRPxSBaklfY/JlZZhbK6Y0v5OpXzqp0kgTNmIBd1D5uxYWwIC8fn7KxaykvmsUFEy3ZIq3Ahy7pNkww==","signatures":[{"sig":"MEYCIQCoUWvg9BeW4ZNbwp+mttNYauK/u7A8MURACogtzCJ2DwIhAJDA4J/9Fgi8hc/refDALVQdTbIiNtVpqybm+D2Xx8Ll","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":930386},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"5506754477a621afbc8412391d09fbfa48438af0","scripts":{"lint":"eslint \"src/**/*.ts\" --fix","test":"jest","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf dist coverage .nyc_output","start":"echo 'This is a library. Use examples: npm run example:start'","format":"prettier --write \"src/**/*.ts\" \"*.{js,json,md}\"","worker":"node scripts/start-worker.js","release":"semantic-release","test:ci":"jest --coverage --ci --watchAll=false --passWithNoTests","cli:sync":"ts-node src/commands/sync-event-types.command.ts","prebuild":"npm run clean","test:cov":"jest --coverage","test:e2e":"jest --config ./tests/jest-e2e.json","start:dev":"echo 'This is a library. Use examples: npm run example:start:dev'","typecheck":"tsc --noEmit","docs:serve":"serve docs -l 3001","lint:check":"eslint \"src/**/*.ts\"","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","worker:dev":"nodemon --exec \"ts-node -r tsconfig-paths/register\" src/workers/worker-main.ts","build:watch":"tsc -p tsconfig.build.json --watch","example:dev":"npm run build && npm run example:start:dev","release:dry":"semantic-release --dry-run","start:debug":"echo 'This is a library. Use examples for debugging'","example:test":"npm --prefix examples/basic-usage test","format:check":"prettier --check \"src/**/*.ts\" \"*.{js,json,md}\"","worker:build":"tsc && node scripts/start-worker.js","docs:generate":"typedoc --options typedoc.json","example:start":"npm --prefix examples/basic-usage run start","prepublishOnly":"npm run build && npm run test:ci","example:install":"npm install","example:start:dev":"npm --prefix examples/basic-usage run start:dev"},"_npmUser":{"name":"afidoss","actor":{"name":"afidoss","type":"user","email":"fiacre.ayedoun@gmail.com"},"email":"fiacre.ayedoun@gmail.com"},"workspaces":["examples/*"],"_npmVersion":"10.8.3","description":"Enterprise-grade event and notification system for NestJS applications","directories":{},"_nodeVersion":"18.17.0","dependencies":{"joi":"^17.9.0","uuid":"^9.0.0","axios":"^1.5.0","@nestjs/config":"^4.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","ts-node":"^10.9.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@types/uuid":"^10.0.0","nest-commander":"^3.11.0","@types/nodemailer":"^6.4.17","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"bull":"^4.10.0","typeorm":"^0.3.0","@nestjs/bull":"^10.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@nestjs/typeorm":"^10.0.0"},"optionalDependencies":{"nodemailer":"^6.9.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-event-notifications_1.0.4_1750339553002_0.7205478501452394","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@afidos/nestjs-event-notifications","version":"2.0.0","keywords":["nestjs","events","notifications","typescript"],"author":{"name":"Afidos"},"license":"MIT","_id":"@afidos/nestjs-event-notifications@2.0.0","maintainers":[{"name":"afidoss","email":"fiacre.ayedoun@gmail.com"}],"dist":{"shasum":"b425c437360b9178361b8abed5f1fe07b7907552","tarball":"https://registry.npmjs.org/@afidos/nestjs-event-notifications/-/nestjs-event-notifications-2.0.0.tgz","fileCount":123,"integrity":"sha512-6N4rxJy7KxHgtyIqLIaW/Y9gltsQFSjyL3iNQcf8YGgmgmWe4NA5GJOxxrbuORLZKeazhBKjdkx2N3jg40cXWg==","signatures":[{"sig":"MEQCIBRI1BNzOa/EWkNjbKlvza5rloD2K+o/QmHqbdGIa5CqAiAbrEwvr1Ms5NeSALCNu6Da59OpzW3L8Iqo3KOdrTDZmg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":849602},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"84b5b2aa1fbc9bb81e3d4c5726ab5afcf321b125","scripts":{"lint":"eslint \"src/**/*.ts\" --fix","test":"jest","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf dist coverage .nyc_output","start":"echo 'This is a library. Use examples: npm run example:start'","format":"prettier --write \"src/**/*.ts\" \"*.{js,json,md}\"","worker":"node scripts/start-worker.js","release":"semantic-release","test:ci":"jest --coverage --ci --watchAll=false --passWithNoTests","cli:sync":"ts-node src/commands/sync-event-types.command.ts","prebuild":"npm run clean","test:cov":"jest --coverage","test:e2e":"jest --config ./tests/jest-e2e.json","start:dev":"echo 'This is a library. Use examples: npm run example:start:dev'","typecheck":"tsc --noEmit","docs:serve":"serve docs -l 3001","lint:check":"eslint \"src/**/*.ts\"","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","worker:dev":"nodemon --exec \"ts-node -r tsconfig-paths/register\" src/workers/worker-main.ts","build:watch":"tsc -p tsconfig.build.json --watch","example:dev":"npm run build && npm run example:start:dev","release:dry":"semantic-release --dry-run","start:debug":"echo 'This is a library. Use examples for debugging'","example:test":"npm --prefix examples/basic-usage test","format:check":"prettier --check \"src/**/*.ts\" \"*.{js,json,md}\"","worker:build":"tsc && node scripts/start-worker.js","docs:generate":"typedoc --options typedoc.json","example:start":"npm --prefix examples/basic-usage run start","prepublishOnly":"npm run build && npm run test:ci","example:install":"npm install","example:start:dev":"npm --prefix examples/basic-usage run start:dev"},"_npmUser":{"name":"afidoss","actor":{"name":"afidoss","type":"user","email":"fiacre.ayedoun@gmail.com"},"email":"fiacre.ayedoun@gmail.com"},"workspaces":["examples/*"],"_npmVersion":"10.8.3","description":"Enterprise-grade event and notification system for NestJS applications","directories":{},"_nodeVersion":"18.17.0","dependencies":{"joi":"^17.9.0","uuid":"^9.0.0","axios":"^1.5.0","@nestjs/config":"^4.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","ts-node":"^10.9.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@types/uuid":"^10.0.0","nest-commander":"^3.11.0","@types/nodemailer":"^6.4.17","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"bull":"^4.10.0","typeorm":"^0.3.0","@nestjs/bull":"^10.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@nestjs/typeorm":"^10.0.0"},"optionalDependencies":{"nodemailer":"^6.9.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-event-notifications_2.0.0_1750388094812_0.14393444155920632","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@afidos/nestjs-event-notifications","version":"2.1.0","keywords":["nestjs","events","notifications","typescript"],"author":{"name":"Afidos"},"license":"MIT","_id":"@afidos/nestjs-event-notifications@2.1.0","maintainers":[{"name":"afidoss","email":"fiacre.ayedoun@gmail.com"}],"dist":{"shasum":"97f547203f14d0499c5dd74618727f99ed5545e4","tarball":"https://registry.npmjs.org/@afidos/nestjs-event-notifications/-/nestjs-event-notifications-2.1.0.tgz","fileCount":142,"integrity":"sha512-00wd3GMDMfi/UzzUQNC8BcRLw7aOCn/mkHMpGt3S6HF8CxNAG/PGYcLlNz/gzdG+yQaL8HMMGIgkF4M0a0XGyQ==","signatures":[{"sig":"MEUCIEMyiWiEZOCepuKEBW4Au3cg98Q2Ozzj73eoE5VxE7e7AiEAxvNXekgdc/71niAopLidEQqwStGVVSHXkQ+J3ocXuaQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":903587},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"46ea9fb733ea468c1622f28c798911daa524ed4d","scripts":{"lint":"eslint \"src/**/*.ts\" --fix","test":"jest","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf dist coverage .nyc_output","start":"echo 'This is a library. Use examples: npm run example:start'","format":"prettier --write \"src/**/*.ts\" \"*.{js,json,md}\"","worker":"node scripts/start-worker.js","release":"semantic-release","test:ci":"jest --coverage --ci --watchAll=false --passWithNoTests","cli:sync":"ts-node src/commands/sync-event-types.command.ts","prebuild":"npm run clean","test:cov":"jest --coverage","test:e2e":"jest --config ./tests/jest-e2e.json","start:dev":"echo 'This is a library. Use examples: npm run example:start:dev'","typecheck":"tsc --noEmit","docs:serve":"serve docs -l 3001","lint:check":"eslint \"src/**/*.ts\"","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","worker:dev":"nodemon --exec \"ts-node -r tsconfig-paths/register\" src/workers/worker-main.ts","build:watch":"tsc -p tsconfig.build.json --watch","example:dev":"npm run build && npm run example:start:dev","release:dry":"semantic-release --dry-run","start:debug":"echo 'This is a library. Use examples for debugging'","example:test":"npm --prefix examples/basic-usage test","format:check":"prettier --check \"src/**/*.ts\" \"*.{js,json,md}\"","worker:build":"tsc && node scripts/start-worker.js","docs:generate":"typedoc --options typedoc.json","example:start":"npm --prefix examples/basic-usage run start","prepublishOnly":"npm run build && npm run test:ci","example:install":"npm install","example:start:dev":"npm --prefix examples/basic-usage run start:dev"},"_npmUser":{"name":"afidoss","actor":{"name":"afidoss","type":"user","email":"fiacre.ayedoun@gmail.com"},"email":"fiacre.ayedoun@gmail.com"},"workspaces":["examples/*"],"_npmVersion":"10.8.3","description":"Enterprise-grade event and notification system for NestJS applications","directories":{},"_nodeVersion":"18.17.0","dependencies":{"joi":"^17.9.0","uuid":"^9.0.0","axios":"^1.5.0","@nestjs/config":"^4.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","ts-node":"^10.9.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@types/uuid":"^10.0.0","nest-commander":"^3.11.0","@types/nodemailer":"^6.4.17","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"bull":"^4.10.0","typeorm":"^0.3.0","@nestjs/bull":"^10.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@nestjs/typeorm":"^10.0.0"},"optionalDependencies":{"nodemailer":"^6.9.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-event-notifications_2.1.0_1750444697192_0.048019881035402","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@afidos/nestjs-event-notifications","version":"2.1.1","keywords":["nestjs","events","notifications","typescript"],"author":{"name":"Afidos"},"license":"MIT","_id":"@afidos/nestjs-event-notifications@2.1.1","maintainers":[{"name":"afidoss","email":"fiacre.ayedoun@gmail.com"}],"dist":{"shasum":"f14d046bf85e0685ffb7fd68e8ea4cc70e0c020b","tarball":"https://registry.npmjs.org/@afidos/nestjs-event-notifications/-/nestjs-event-notifications-2.1.1.tgz","fileCount":142,"integrity":"sha512-1uJ8Jy67ZxEzFlCAo4Bz38j1GLwB70a/YUgniyNlLjUYFDo10VL4swjZQLiNec4jw6th5UnQjy/txbq4jQyqxA==","signatures":[{"sig":"MEUCIQC3IBSzUek8yPO44wDM708/0+0svGqRREVkIyGR5iOjKQIgEho5AOEcULwb9EQ7GvlVlnr3GZMX3GotsgZeYYtas1s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":903587},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"56d15970c8ec133392f09221f1bc4fd89eca6658","scripts":{"lint":"eslint \"src/**/*.ts\" --fix","test":"jest","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf dist coverage .nyc_output","start":"echo 'This is a library. Use examples: npm run example:start'","format":"prettier --write \"src/**/*.ts\" \"*.{js,json,md}\"","worker":"node scripts/start-worker.js","release":"semantic-release","test:ci":"jest --coverage --ci --watchAll=false --passWithNoTests","cli:sync":"ts-node src/commands/sync-event-types.command.ts","prebuild":"npm run clean","test:cov":"jest --coverage","test:e2e":"jest --config ./tests/jest-e2e.json","start:dev":"echo 'This is a library. Use examples: npm run example:start:dev'","typecheck":"tsc --noEmit","docs:serve":"serve docs -l 3001","lint:check":"eslint \"src/**/*.ts\"","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","worker:dev":"nodemon --exec \"ts-node -r tsconfig-paths/register\" src/workers/worker-main.ts","build:watch":"tsc -p tsconfig.build.json --watch","example:dev":"npm run build && npm run example:start:dev","release:dry":"semantic-release --dry-run","start:debug":"echo 'This is a library. Use examples for debugging'","example:test":"npm --prefix examples/basic-usage test","format:check":"prettier --check \"src/**/*.ts\" \"*.{js,json,md}\"","worker:build":"tsc && node scripts/start-worker.js","docs:generate":"typedoc --options typedoc.json","example:start":"npm --prefix examples/basic-usage run start","prepublishOnly":"npm run build && npm run test:ci","example:install":"npm install","example:start:dev":"npm --prefix examples/basic-usage run start:dev"},"_npmUser":{"name":"afidoss","actor":{"name":"afidoss","type":"user","email":"fiacre.ayedoun@gmail.com"},"email":"fiacre.ayedoun@gmail.com"},"workspaces":["examples/*"],"_npmVersion":"10.8.3","description":"Enterprise-grade event and notification system for NestJS applications","directories":{},"_nodeVersion":"18.17.0","dependencies":{"joi":"^17.9.0","uuid":"^9.0.0","axios":"^1.5.0","@nestjs/config":"^4.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","ts-node":"^10.9.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@types/uuid":"^10.0.0","nest-commander":"^3.11.0","@types/nodemailer":"^6.4.17","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"bull":"^4.10.0","typeorm":"^0.3.0","@nestjs/bull":"^10.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@nestjs/typeorm":"^10.0.0"},"optionalDependencies":{"nodemailer":"^6.9.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-event-notifications_2.1.1_1750446133796_0.9698898905613371","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"@afidos/nestjs-event-notifications","version":"2.1.2","keywords":["nestjs","events","notifications","typescript"],"author":{"name":"Afidos"},"license":"MIT","_id":"@afidos/nestjs-event-notifications@2.1.2","maintainers":[{"name":"afidoss","email":"fiacre.ayedoun@gmail.com"}],"dist":{"shasum":"d19c854e836f9add28562dcde1f4af3bf1c822ce","tarball":"https://registry.npmjs.org/@afidos/nestjs-event-notifications/-/nestjs-event-notifications-2.1.2.tgz","fileCount":142,"integrity":"sha512-pn+vHK20daTz/9VHxolXMOcqbBW3nDfiRfQEKQVkzetFhmJCEeOtKCaEnLJTkLtZ8zMrWoPMaD3ECx4JECaveg==","signatures":[{"sig":"MEQCIEtMtI2gE7hCk9LNioGoQfz9Nr6ogdnTkZvcCZrtrXsoAiBN+ZJ96h2oIzFs0fUZW2V7SLXWR//6dYxlYwWYo4BJmA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":903587},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"6925d8f596904ae250c2432814d3b4405484e94f","scripts":{"lint":"eslint \"src/**/*.ts\" --fix","test":"jest","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf dist coverage .nyc_output","start":"echo 'This is a library. Use examples: npm run example:start'","format":"prettier --write \"src/**/*.ts\" \"*.{js,json,md}\"","worker":"node scripts/start-worker.js","release":"semantic-release","test:ci":"jest --coverage --ci --watchAll=false --passWithNoTests","cli:sync":"ts-node src/commands/sync-event-types.command.ts","prebuild":"npm run clean","test:cov":"jest --coverage","test:e2e":"jest --config ./tests/jest-e2e.json","start:dev":"echo 'This is a library. Use examples: npm run example:start:dev'","typecheck":"tsc --noEmit","docs:serve":"serve docs -l 3001","lint:check":"eslint \"src/**/*.ts\"","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","worker:dev":"nodemon --exec \"ts-node -r tsconfig-paths/register\" src/workers/worker-main.ts","build:watch":"tsc -p tsconfig.build.json --watch","example:dev":"npm run build && npm run example:start:dev","release:dry":"semantic-release --dry-run","start:debug":"echo 'This is a library. Use examples for debugging'","example:test":"npm --prefix examples/basic-usage test","format:check":"prettier --check \"src/**/*.ts\" \"*.{js,json,md}\"","worker:build":"tsc && node scripts/start-worker.js","docs:generate":"typedoc --options typedoc.json","example:start":"npm --prefix examples/basic-usage run start","prepublishOnly":"npm run build && npm run test:ci","example:install":"npm install","example:start:dev":"npm --prefix examples/basic-usage run start:dev"},"_npmUser":{"name":"afidoss","actor":{"name":"afidoss","type":"user","email":"fiacre.ayedoun@gmail.com"},"email":"fiacre.ayedoun@gmail.com"},"workspaces":["examples/*"],"_npmVersion":"10.8.3","description":"Enterprise-grade event and notification system for NestJS applications","directories":{},"_nodeVersion":"18.17.0","dependencies":{"joi":"^17.9.0","uuid":"^9.0.0","axios":"^1.5.0","@nestjs/config":"^4.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","ts-node":"^10.9.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@types/uuid":"^10.0.0","nest-commander":"^3.11.0","@types/nodemailer":"^6.4.17","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"bull":"^4.10.0","typeorm":"^0.3.0","@nestjs/bull":"^10.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@nestjs/typeorm":"^10.0.0"},"optionalDependencies":{"nodemailer":"^6.9.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-event-notifications_2.1.2_1750446979435_0.5717235405278327","host":"s3://npm-registry-packages-npm-production"}},"2.1.3":{"name":"@afidos/nestjs-event-notifications","version":"2.1.3","keywords":["nestjs","events","notifications","typescript"],"author":{"name":"Afidos"},"license":"MIT","_id":"@afidos/nestjs-event-notifications@2.1.3","maintainers":[{"name":"afidoss","email":"fiacre.ayedoun@gmail.com"}],"dist":{"shasum":"74ab6f4358eee657330d2a6b2b6cf34c116424a9","tarball":"https://registry.npmjs.org/@afidos/nestjs-event-notifications/-/nestjs-event-notifications-2.1.3.tgz","fileCount":60,"integrity":"sha512-JVJC2ROu4qmnrm2PHq6ZTlq21322HMVucK4u8N93b+E+Fm1vee0eN3fMjJM6c/WlSFoHXokHz0OsU4c+1LhzQg==","signatures":[{"sig":"MEUCIGfA62cXyoexe96YImQjkzEYp3m8S+5MYi8o6IMG2b0yAiEA6vlUomEpC7pB8cYj11OMoxKEt/AyVaQsQGrYuvPpnl8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":314078},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"563904b0de707e2aa94e954faad884047eee08f5","scripts":{"lint":"eslint \"src/**/*.ts\" --fix","test":"jest","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf dist coverage .nyc_output","start":"echo 'This is a library. Use examples: npm run example:start'","format":"prettier --write \"src/**/*.ts\" \"*.{js,json,md}\"","worker":"node scripts/start-worker.js","release":"semantic-release","test:ci":"jest --coverage --ci --watchAll=false --passWithNoTests","cli:sync":"ts-node src/commands/sync-event-types.command.ts","prebuild":"npm run clean","test:cov":"jest --coverage","test:e2e":"jest --config ./tests/jest-e2e.json","start:dev":"echo 'This is a library. Use examples: npm run example:start:dev'","typecheck":"tsc --noEmit","docs:serve":"serve docs -l 3001","lint:check":"eslint \"src/**/*.ts\"","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","worker:dev":"nodemon --exec \"ts-node -r tsconfig-paths/register\" src/workers/worker-main.ts","build:watch":"tsc -p tsconfig.build.json --watch","example:dev":"npm run build && npm run example:start:dev","release:dry":"semantic-release --dry-run","start:debug":"echo 'This is a library. Use examples for debugging'","example:test":"npm --prefix examples/basic-usage test","format:check":"prettier --check \"src/**/*.ts\" \"*.{js,json,md}\"","worker:build":"tsc && node scripts/start-worker.js","docs:generate":"typedoc --options typedoc.json","example:start":"npm --prefix examples/basic-usage run start","prepublishOnly":"npm run build && npm run test:ci","example:install":"npm install","example:start:dev":"npm --prefix examples/basic-usage run start:dev"},"_npmUser":{"name":"afidoss","actor":{"name":"afidoss","type":"user","email":"fiacre.ayedoun@gmail.com"},"email":"fiacre.ayedoun@gmail.com"},"workspaces":["examples/*"],"_npmVersion":"10.8.3","description":"Enterprise-grade event and notification system for NestJS applications","directories":{},"_nodeVersion":"18.17.0","dependencies":{"joi":"^17.9.0","uuid":"^9.0.0","axios":"^1.5.0","@nestjs/config":"^4.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","ts-node":"^10.9.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@types/uuid":"^10.0.0","nest-commander":"^3.11.0","@types/nodemailer":"^6.4.17","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"bull":"^4.10.0","typeorm":"^0.3.0","@nestjs/bull":"^10.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@nestjs/typeorm":"^10.0.0"},"optionalDependencies":{"nodemailer":"^6.9.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-event-notifications_2.1.3_1750447483347_0.5772583514002052","host":"s3://npm-registry-packages-npm-production"}},"2.1.4":{"name":"@afidos/nestjs-event-notifications","version":"2.1.4","keywords":["nestjs","events","notifications","typescript"],"author":{"name":"Afidos"},"license":"MIT","_id":"@afidos/nestjs-event-notifications@2.1.4","maintainers":[{"name":"afidoss","email":"fiacre.ayedoun@gmail.com"}],"dist":{"shasum":"8fdafc3e957caf926b2359134b4e312db3a6d552","tarball":"https://registry.npmjs.org/@afidos/nestjs-event-notifications/-/nestjs-event-notifications-2.1.4.tgz","fileCount":60,"integrity":"sha512-VdS3YrPYr9+uWQFoU3DsjOlJIK7lXDu6RfOMTlmVsWdebMab8GECO2eW9zcwcovuVyxBTX3ulYEMtqYQA83pLQ==","signatures":[{"sig":"MEUCIGmrwaeOOGVJE2Du1TOb5zI54cKmfn/qNro1zMPG2aE5AiEA+SiGnHbf+hgDczisWcvCzN8IqhdvEOHCykaLwhEzG+Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":314106},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"a8d45f074ab18393a571d95d20574db032904874","scripts":{"lint":"eslint \"src/**/*.ts\" --fix","test":"jest","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf dist coverage .nyc_output","start":"echo 'This is a library. Use examples: npm run example:start'","format":"prettier --write \"src/**/*.ts\" \"*.{js,json,md}\"","worker":"node scripts/start-worker.js","release":"semantic-release","test:ci":"jest --coverage --ci --watchAll=false --passWithNoTests","cli:sync":"ts-node src/commands/sync-event-types.command.ts","prebuild":"npm run clean","test:cov":"jest --coverage","test:e2e":"jest --config ./tests/jest-e2e.json","start:dev":"echo 'This is a library. Use examples: npm run example:start:dev'","typecheck":"tsc --noEmit","docs:serve":"serve docs -l 3001","lint:check":"eslint \"src/**/*.ts\"","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","worker:dev":"nodemon --exec \"ts-node -r tsconfig-paths/register\" src/workers/worker-main.ts","build:watch":"tsc -p tsconfig.build.json --watch","example:dev":"npm run build && npm run example:start:dev","release:dry":"semantic-release --dry-run","start:debug":"echo 'This is a library. Use examples for debugging'","example:test":"npm --prefix examples/basic-usage test","format:check":"prettier --check \"src/**/*.ts\" \"*.{js,json,md}\"","worker:build":"tsc && node scripts/start-worker.js","docs:generate":"typedoc --options typedoc.json","example:start":"npm --prefix examples/basic-usage run start","prepublishOnly":"npm run build && npm run test:ci","example:install":"npm install","example:start:dev":"npm --prefix examples/basic-usage run start:dev"},"_npmUser":{"name":"afidoss","actor":{"name":"afidoss","type":"user","email":"fiacre.ayedoun@gmail.com"},"email":"fiacre.ayedoun@gmail.com"},"workspaces":["examples/*"],"_npmVersion":"10.8.3","description":"Enterprise-grade event and notification system for NestJS applications","directories":{},"_nodeVersion":"18.17.0","dependencies":{"joi":"^17.9.0","uuid":"^9.0.0","axios":"^1.5.0","@nestjs/config":"^4.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","ts-node":"^10.9.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@types/uuid":"^10.0.0","nest-commander":"^3.11.0","@types/nodemailer":"^6.4.17","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"bull":"^4.10.0","typeorm":"^0.3.0","@nestjs/bull":"^10.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@nestjs/typeorm":"^10.0.0"},"optionalDependencies":{"nodemailer":"^6.9.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-event-notifications_2.1.4_1750448232749_0.17937422233224032","host":"s3://npm-registry-packages-npm-production"}},"2.1.5":{"name":"@afidos/nestjs-event-notifications","version":"2.1.5","keywords":["nestjs","events","notifications","typescript"],"author":{"name":"Afidos"},"license":"MIT","_id":"@afidos/nestjs-event-notifications@2.1.5","maintainers":[{"name":"afidoss","email":"fiacre.ayedoun@gmail.com"}],"dist":{"shasum":"a187b88700f5acd2dab3523702e38808a3a95e30","tarball":"https://registry.npmjs.org/@afidos/nestjs-event-notifications/-/nestjs-event-notifications-2.1.5.tgz","fileCount":100,"integrity":"sha512-pk8UENswjWksl/xC+CImpGc8EajtyJdYowH09ckKVmnfM0WxH7EX7Ga2fQtwH62/NjX4sGCi0lmvteFtkwOtXg==","signatures":[{"sig":"MEUCIQDcxcwiXZncqPy4CKlFjB5lc3tq5qCzA27rB/yGcsLzmgIgcCfgZ1KOyn98XrYojnyY29agcWh28XsJWYj777Pms+0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":458867},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"f6bf8281035c548f62c3ff1efad8eb7646391448","scripts":{"lint":"eslint \"src/**/*.ts\" --fix","test":"jest","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf dist coverage .nyc_output","start":"echo 'This is a library. Use examples: npm run example:start'","format":"prettier --write \"src/**/*.ts\" \"*.{js,json,md}\"","worker":"node scripts/start-worker.js","release":"semantic-release","test:ci":"jest --coverage --ci --watchAll=false --passWithNoTests","cli:sync":"ts-node src/commands/sync-event-types.command.ts","prebuild":"npm run clean","test:cov":"jest --coverage","test:e2e":"jest --config ./tests/jest-e2e.json","start:dev":"echo 'This is a library. Use examples: npm run example:start:dev'","typecheck":"tsc --noEmit","docs:serve":"serve docs -l 3001","lint:check":"eslint \"src/**/*.ts\"","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","worker:dev":"nodemon --exec \"ts-node -r tsconfig-paths/register\" src/workers/worker-main.ts","build:watch":"tsc -p tsconfig.build.json --watch","example:dev":"npm run build && npm run example:start:dev","release:dry":"semantic-release --dry-run","start:debug":"echo 'This is a library. Use examples for debugging'","example:test":"npm --prefix examples/basic-usage test","format:check":"prettier --check \"src/**/*.ts\" \"*.{js,json,md}\"","worker:build":"tsc && node scripts/start-worker.js","docs:generate":"typedoc --options typedoc.json","example:start":"npm --prefix examples/basic-usage run start","prepublishOnly":"npm run build && npm run test:ci","example:install":"npm install","example:start:dev":"npm --prefix examples/basic-usage run start:dev"},"_npmUser":{"name":"afidoss","actor":{"name":"afidoss","type":"user","email":"fiacre.ayedoun@gmail.com"},"email":"fiacre.ayedoun@gmail.com"},"workspaces":["examples/*"],"_npmVersion":"10.8.3","description":"Enterprise-grade event and notification system for NestJS applications","directories":{},"_nodeVersion":"18.17.0","dependencies":{"joi":"^17.9.0","uuid":"^9.0.0","axios":"^1.5.0","@nestjs/config":"^4.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","ts-node":"^10.9.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@types/uuid":"^10.0.0","nest-commander":"^3.11.0","@types/nodemailer":"^6.4.17","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"bull":"^4.10.0","typeorm":"^0.3.0","@nestjs/bull":"^10.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@nestjs/typeorm":"^10.0.0"},"optionalDependencies":{"nodemailer":"^6.9.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-event-notifications_2.1.5_1750549970806_0.06065428723292854","host":"s3://npm-registry-packages-npm-production"}},"2.1.7":{"name":"@afidos/nestjs-event-notifications","version":"2.1.7","keywords":["nestjs","events","notifications","typescript"],"author":{"name":"Afidos"},"license":"MIT","_id":"@afidos/nestjs-event-notifications@2.1.7","maintainers":[{"name":"afidoss","email":"fiacre.ayedoun@gmail.com"}],"dist":{"shasum":"c1846a3153af58c4dee99caf47384e6ce700a25d","tarball":"https://registry.npmjs.org/@afidos/nestjs-event-notifications/-/nestjs-event-notifications-2.1.7.tgz","fileCount":101,"integrity":"sha512-17ih9A2wOOfcZbc40p4zWLdpYnhY3nKQwf/1wvGNARPPcsHCL4YzulK3+QdSfVFxnPpykJADCZw5eP8EXbPpiw==","signatures":[{"sig":"MEYCIQC3pgKOaSCNb+bUo91QC5PeQc2n0Aq1aX/iSTf0Cuck9QIhAMVOqNyamh5nvl3O6/KI7D9prG7bY5ORc9+aEewkmdSw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":454028},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"9d970efd19a1bf9799e18de8dc820018e0510f9d","scripts":{"lint":"eslint \"src/**/*.ts\" --fix","test":"jest","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf dist coverage .nyc_output","start":"echo 'This is a library. Use examples: npm run example:start'","format":"prettier --write \"src/**/*.ts\" \"*.{js,json,md}\"","worker":"node scripts/start-worker.js","release":"semantic-release","test:ci":"jest --coverage --ci --watchAll=false --passWithNoTests","cli:sync":"ts-node src/commands/sync-event-types.command.ts","prebuild":"npm run clean","test:cov":"jest --coverage","test:e2e":"jest --config ./tests/jest-e2e.json","start:dev":"echo 'This is a library. Use examples: npm run example:start:dev'","typecheck":"tsc --noEmit","docs:serve":"serve docs -l 3001","lint:check":"eslint \"src/**/*.ts\"","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","worker:dev":"nodemon --exec \"ts-node -r tsconfig-paths/register\" src/workers/worker-main.ts","build:watch":"tsc -p tsconfig.build.json --watch","example:dev":"npm run build && npm run example:start:dev","release:dry":"semantic-release --dry-run","start:debug":"echo 'This is a library. Use examples for debugging'","example:test":"npm --prefix examples/basic-usage test","format:check":"prettier --check \"src/**/*.ts\" \"*.{js,json,md}\"","worker:build":"tsc && node scripts/start-worker.js","docs:generate":"typedoc --options typedoc.json","example:start":"npm --prefix examples/basic-usage run start","prepublishOnly":"npm run build && npm run test:ci","example:install":"npm install","example:start:dev":"npm --prefix examples/basic-usage run start:dev"},"_npmUser":{"name":"afidoss","actor":{"name":"afidoss","type":"user","email":"fiacre.ayedoun@gmail.com"},"email":"fiacre.ayedoun@gmail.com"},"workspaces":["examples/*"],"_npmVersion":"10.8.3","description":"Enterprise-grade event and notification system for NestJS applications","directories":{},"_nodeVersion":"18.17.0","dependencies":{"joi":"^17.9.0","uuid":"^9.0.0","axios":"^1.5.0","@nestjs/config":"^4.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","ts-node":"^10.9.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@types/uuid":"^10.0.0","nest-commander":"^3.11.0","@types/nodemailer":"^6.4.17","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"bull":"^4.10.0","typeorm":"^0.3.0","@nestjs/bull":"^10.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@nestjs/typeorm":"^10.0.0"},"optionalDependencies":{"nodemailer":"^6.9.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-event-notifications_2.1.7_1751302244687_0.5172475293753813","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"@afidos/nestjs-event-notifications","version":"2.2.1","keywords":["nestjs","events","notifications","typescript"],"author":{"name":"Afidos"},"license":"MIT","_id":"@afidos/nestjs-event-notifications@2.2.1","maintainers":[{"name":"afidoss","email":"fiacre.ayedoun@gmail.com"}],"dist":{"shasum":"83d4e504775c43c536de933161e4b66170fa2809","tarball":"https://registry.npmjs.org/@afidos/nestjs-event-notifications/-/nestjs-event-notifications-2.2.1.tgz","fileCount":113,"integrity":"sha512-MummGI3846h1lNLPemtZdQ10hWZkIR+bhdHsCMjdeXkxeoEZRoSCnj8JgB87SSZHgWOTRr+srYYW5BbkJYkvRA==","signatures":[{"sig":"MEUCIHRhj85uFbjzA93JyeThs8Z9UtJqhG20r32gE+UO71KbAiEAzHjb4mh87IMnWLnQAy7mnUNugm3ybViu5V1REfXXE1Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":544629},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"cb98df210df0153bdb6fcca561e63f1a4beb20d3","scripts":{"lint":"eslint \"src/**/*.ts\" --fix","test":"jest","build":"npm run clean && tsc -p tsconfig.build.json","clean":"rimraf dist coverage .nyc_output","start":"echo 'This is a library. Use examples: npm run example:start'","format":"prettier --write \"src/**/*.ts\" \"*.{js,json,md}\"","worker":"node scripts/start-worker.js","release":"semantic-release","test:ci":"jest --coverage --ci --watchAll=false --passWithNoTests","cli:sync":"ts-node src/commands/sync-event-types.command.ts","prebuild":"npm run clean","test:cov":"jest --coverage","test:e2e":"jest --config ./tests/jest-e2e.json","start:dev":"echo 'This is a library. Use examples: npm run example:start:dev'","typecheck":"tsc --noEmit","docs:serve":"serve docs -l 3001","lint:check":"eslint \"src/**/*.ts\"","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","worker:dev":"ts-node -r tsconfig-paths/register examples/basic-usage/src/worker.ts","build:watch":"tsc -p tsconfig.build.json --watch","example:dev":"npm run build && npm run example:start:dev","release:dry":"semantic-release --dry-run","start:debug":"echo 'This is a library. Use examples for debugging'","example:test":"npm --prefix examples/basic-usage test","format:check":"prettier --check \"src/**/*.ts\" \"*.{js,json,md}\"","worker:build":"tsc && node scripts/start-worker.js","docs:generate":"typedoc --options typedoc.json","example:start":"npm --prefix examples/basic-usage run start","prepublishOnly":"npm run build && npm run test:ci","example:install":"npm install","example:start:dev":"npm --prefix examples/basic-usage run start:dev"},"_npmUser":{"name":"afidoss","actor":{"name":"afidoss","type":"user","email":"fiacre.ayedoun@gmail.com"},"email":"fiacre.ayedoun@gmail.com"},"workspaces":["examples/*"],"_npmVersion":"10.8.3","description":"Enterprise-grade event and notification system for NestJS applications","directories":{},"_nodeVersion":"18.17.0","dependencies":{"joi":"^17.9.0","uuid":"^9.0.0","axios":"^1.5.0","@nestjs/config":"^4.0.2","@nestjs/devtools-integration":"^0.2.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","ts-node":"^10.9.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@types/uuid":"^10.0.0","nest-commander":"^3.11.0","@types/nodemailer":"^6.4.17","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"bull":"^4.10.0","typeorm":"^0.3.0","@nestjs/bull":"^10.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@nestjs/typeorm":"^10.0.0"},"optionalDependencies":{"nodemailer":"^6.9.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-event-notifications_2.2.1_1751460625031_0.12642443379330315","host":"s3://npm-registry-packages-npm-production"}},"2.2.2":{"name":"@afidos/nestjs-event-notifications","version":"2.2.2","description":"Enterprise-grade event and notification system for NestJS applications","main":"dist/index.js","types":"dist/index.d.ts","workspaces":["examples/*"],"scripts":{"build":"npm run clean && tsc -p tsconfig.build.json","build:watch":"tsc -p tsconfig.build.json --watch","clean":"rimraf dist coverage .nyc_output","start":"echo 'This is a library. Use examples: npm run example:start'","start:dev":"echo 'This is a library. Use examples: npm run example:start:dev'","test":"jest","cli:sync":"ts-node src/commands/sync-event-types.command.ts","prebuild":"npm run clean","prepublishOnly":"npm run build && npm run test:ci","test:watch":"jest --watch","test:cov":"jest --coverage","test:e2e":"jest --config ./tests/jest-e2e.json","test:ci":"jest --coverage --ci --watchAll=false --passWithNoTests","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","lint":"eslint \"src/**/*.ts\" --fix","lint:check":"eslint \"src/**/*.ts\"","format":"prettier --write \"src/**/*.ts\" \"*.{js,json,md}\"","format:check":"prettier --check \"src/**/*.ts\" \"*.{js,json,md}\"","typecheck":"tsc --noEmit","start:debug":"echo 'This is a library. Use examples for debugging'","docs:generate":"typedoc --options typedoc.json","docs:serve":"serve docs -l 3001","release":"semantic-release","release:dry":"semantic-release --dry-run","worker":"node scripts/start-worker.js","worker:dev":"cd examples/basic-usage && ts-node -r tsconfig-paths/register src/worker.ts","worker:build":"tsc && node scripts/start-worker.js","example:install":"npm install","example:dev":"npm run build && npm run example:start:dev","example:start":"npm --prefix examples/basic-usage run start","example:start:dev":"npm --prefix examples/basic-usage run start:dev","example:test":"npm --prefix examples/basic-usage test"},"keywords":["nestjs","events","notifications","typescript"],"author":{"name":"Afidos"},"license":"MIT","peerDependencies":{"@nestjs/bull":"^10.0.0","@nestjs/common":"^10.0.0","@nestjs/core":"^10.0.0","@nestjs/typeorm":"^10.0.0","bull":"^4.10.0","typeorm":"^0.3.0"},"dependencies":{"@nestjs/config":"^4.0.2","@nestjs/devtools-integration":"^0.2.0","axios":"^1.5.0","joi":"^17.9.0","uuid":"^9.0.0"},"optionalDependencies":{"nodemailer":"^6.9.0"},"devDependencies":{"@types/jest":"^29.0.0","@types/node":"^20.0.0","@types/nodemailer":"^6.4.17","@types/uuid":"^10.0.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.0.0","jest":"^29.0.0","nest-commander":"^3.11.0","ts-jest":"^29.0.0","ts-node":"^10.9.2","typescript":"^5.0.0"},"_id":"@afidos/nestjs-event-notifications@2.2.2","gitHead":"1c2948ae129046848103d7064bbd7e4db4cbfc24","_nodeVersion":"18.17.0","_npmVersion":"10.8.3","dist":{"integrity":"sha512-z087gfBsV1SZj89/V5UZ2CyTUeKPdlYTrLPN42RRvPj447szFzMHmMJ6eWkFzaaF1SttgQ2FUW9aSmXbqa2+Hw==","shasum":"79e50c579ce80d83daf740c9c750144b7b391a3a","tarball":"https://registry.npmjs.org/@afidos/nestjs-event-notifications/-/nestjs-event-notifications-2.2.2.tgz","fileCount":113,"unpackedSize":547912,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDO5b2dqjwvOZTqXZdk4MjNcuTIewmU/bHxeAKnU7mbswIhAL1nqHtsPb8liwb+sCJlCZmnFmetfHajd4gASFEdXuLP"}]},"_npmUser":{"name":"afidoss","email":"fiacre.ayedoun@gmail.com","actor":{"name":"afidoss","email":"fiacre.ayedoun@gmail.com","type":"user"}},"directories":{},"maintainers":[{"name":"afidoss","email":"fiacre.ayedoun@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nestjs-event-notifications_2.2.2_1751476791396_0.4785752177612965"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-18T08:48:44.854Z","modified":"2025-07-02T17:19:51.808Z","1.0.0":"2025-06-18T08:48:45.157Z","1.0.2":"2025-06-18T12:12:31.107Z","1.0.3":"2025-06-19T05:45:53.752Z","1.0.4":"2025-06-19T13:25:53.183Z","2.0.0":"2025-06-20T02:54:54.971Z","2.1.0":"2025-06-20T18:38:17.502Z","2.1.1":"2025-06-20T19:02:14.004Z","2.1.2":"2025-06-20T19:16:19.616Z","2.1.3":"2025-06-20T19:24:43.569Z","2.1.4":"2025-06-20T19:37:12.998Z","2.1.5":"2025-06-21T23:52:50.996Z","2.1.7":"2025-06-30T16:50:44.947Z","2.2.0":"2025-07-02T12:33:33.405Z","2.2.1":"2025-07-02T12:50:25.211Z","2.2.2":"2025-07-02T17:19:51.580Z"},"author":{"name":"Afidos"},"license":"MIT","keywords":["nestjs","events","notifications","typescript"],"description":"Enterprise-grade event and notification system for NestJS applications","maintainers":[{"name":"afidoss","email":"fiacre.ayedoun@gmail.com"}],"readme":"# NestJS Event Notifications\n\nUne librairie moderne et extensible pour gérer les notifications d'événements dans les applications NestJS.\n\n## 🚀 Caractéristiques\n\n- **🏗️ Architecture ultra-simplifiée** - Providers autonomes sans complexité de drivers\n- **🔒 Extensions d'interface TypeScript** - Type safety garantie avec support des propriétés dynamiques\n- **📧 Providers simplifiés** - Email, Telegram, Webhook, Teams ultra-simples + template providers dédiés\n- **🎯 RecipientLoader** - Résolution dynamique des destinataires\n- **🔍 Auto-découverte** - Décorateurs `@InjectableNotifier` et `@InjectableHandler` pour découverte automatique\n- **⚡ Gestion intelligente des queues** - Modes `api`, `worker`, `hybrid` avec FileQueueProvider (par défaut) ou Redis\n- **⚙️ Configuration simplifiée** - Plus besoin de configuration manuelle des providers\n- **🎯 Event Handler System** - Pattern handlers pour logique métier (analytics, audit, workflows)\n- **🔄 Dual Processing** - Notifications externes + Handlers métier en parallèle\n- **🧪 Tests complets** - Couverture > 80% avec 43 tests unitaires\n- **🚀 Provider Teams** - Support Microsoft Teams avec Adaptive Cards\n- **📁 FileQueueProvider** - Broker simple basé sur fichiers (pas de Redis requis)\n\n\n## 📦 Installation\n\n```bash\nnpm install @afidos/nestjs-event-notifications\n```\n\n## 🆕 Version 2.2.2 - Nouveautés\n\n### 🔧 Améliorations de Configuration\n- **Configuration standardisée** des exemples avec chemins unifiés\n- **Gestion d'environnement améliorée** avec ConfigModule.forRoot()\n- **Nettoyage des configurations** - Suppression des imports dupliqués\n- **Optimisation nest-cli.json** avec tsConfigPath configuré\n- **Exemples Bull/BullMQ** - Modules d'exemple séparés pour chaque provider\n\n### 📁 Structure de Fichiers Optimisée\n- **Suppression des fichiers de base de données** du contrôle de version\n- **Chemins standardisés** : `./db.sqlite` au lieu de `./data/db.sqlite`\n- **Modules d'intégration** dédiés pour Bull et BullMQ\n- **Tests de queue** avec exemples concrets\n\n## 🏗️ Architecture\n\nLa librairie suit une architecture modulaire basée sur les patterns **Event-Driven Architecture**, **Publisher-Subscriber** et **Handler Pattern**. Elle supporte deux approches complémentaires :\n\n### Vue d'ensemble\n\n```mermaid\ngraph TB\n    %% Application Layer\n    subgraph APP[\"🚀 APPLICATION LAYER\"]\n        CTRL[Controllers]\n        SERV[Services]\n        COMP[Components]\n    end\n\n    %% Event Emitter\n    subgraph EMIT[\"📡 EVENT EMISSION\"]\n        EES[EventEmitterService&lt;T&gt;<br/>• emitAsync/emitSync<br/>• Type-safe payloads<br/>• Correlation tracking]\n    end\n\n    %% Processing Layer\n    subgraph PROC[\"⚙️ PROCESSING LAYER\"]\n        subgraph NOTIF[\"📧 NOTIFICATION SYSTEM\"]\n            NOS[NotificationOrchestrator<br/>Service]\n            NPB[NotificationProvider]\n            \n            subgraph PROVIDERS[\"Notification Providers\"]\n                EP[📧 EmailProvider<br/>@InjectableNotifier]\n                TP[📱 TelegramProvider<br/>@InjectableNotifier]\n                WP[🔗 WebhookProvider<br/>@InjectableNotifier]\n                CP[⚡ Custom Providers<br/>@InjectableNotifier]\n            end\n        end\n\n        subgraph HANDLE[\"🎯 EVENT HANDLER SYSTEM\"]\n            EHM[EventHandlerManager<br/>Service]\n            \n            subgraph HANDLERS[\"Event Handlers\"]\n                UH[👤 UserAnalyticsHandler<br/>@InjectableHandler]\n                AH[📋 AuditLogHandler<br/>@InjectableHandler]\n                WH[⚡ WorkflowHandler<br/>@InjectableHandler]\n                CH[🔧 Custom Handlers<br/>@InjectableHandler]\n            end\n        end\n    end\n\n    %% Queue Layer\n    subgraph QUEUE[\"⏱️ QUEUE MANAGEMENT\"]\n        QMS[QueueManagerService<br/>• Notification Queues<br/>• Retry Logic<br/>• Health Monitoring]\n        HQMS[HandlerQueueManager<br/>Service<br/>• Handler-specific Queues<br/>• Priority Management<br/>• Concurrency Control]\n        \n        subgraph REDIS[\"🔴 REDIS QUEUES\"]\n            NQ[Notification Queue]\n            HQ[Handler Queues]\n            CQ[Custom Queues]\n        end\n    end\n\n    %% Transport Layer\n    subgraph TRANSPORT[\"🌐 TRANSPORT LAYER\"]\n        HD[HTTP Driver<br/>• REST APIs<br/>• Webhooks<br/>• Telegram API]\n        SD[SMTP Driver<br/>• Email Transport<br/>• Templates<br/>• Attachments]\n    end\n\n    %% External Systems\n    subgraph EXT[\"🌍 EXTERNAL SYSTEMS\"]\n        EMAIL[📧 Email Servers]\n        TELEGRAM[📱 Telegram Bot API]\n        WEBHOOKS[🔗 Webhook URLs]\n        APIS[⚡ Custom APIs]\n    end\n\n    %% Connections\n    APP --> EMIT\n    EMIT --> PROC\n    \n    PROC --> QUEUE\n    \n    NOTIF --> NPB\n    NPB --> PROVIDERS\n    \n    HANDLE --> HANDLERS\n    \n    QUEUE --> REDIS\n    QMS --> NQ\n    HQMS --> HQ\n    HQMS --> CQ\n    \n    PROVIDERS --> TRANSPORT\n    EP --> SD\n    TP --> HD\n    WP --> HD\n    CP --> HD\n    \n    TRANSPORT --> EXT\n    SD --> EMAIL\n    HD --> TELEGRAM\n    HD --> WEBHOOKS\n    HD --> APIS\n\n    %% Styling\n    classDef appLayer fill:#e1f5fe,stroke:#01579b,stroke-width:2px\n    classDef emitLayer fill:#f3e5f5,stroke:#4a148c,stroke-width:2px\n    classDef procLayer fill:#e8f5e8,stroke:#1b5e20,stroke-width:2px\n    classDef queueLayer fill:#fff3e0,stroke:#e65100,stroke-width:2px\n    classDef transportLayer fill:#fce4ec,stroke:#880e4f,stroke-width:2px\n    classDef extLayer fill:#f1f8e9,stroke:#33691e,stroke-width:2px\n    \n    class APP appLayer\n    class EMIT emitLayer\n    class PROC,NOTIF,HANDLE procLayer\n    class QUEUE,REDIS queueLayer\n    class TRANSPORT transportLayer\n    class EXT extLayer\n```\n\n### 1. Système de Notifications (Communication Externe)\n- **EmailProvider** - Utilise SmtpDriver + `{ email?, firstName?, lastName? }`\n- **TelegramProvider** - Utilise HttpDriver + `{ telegramId?, telegramUsername? }`\n- **WebhookProvider** - Utilise HttpDriver + `{ webhookUrl?, webhookHeaders? }`\n- **Auto-découverte** avec `@InjectableNotifier`\n\n### 2. Système d'Event Handlers (Logique Métier)\n- **UserAnalyticsHandler** - Traitement analytics des événements utilisateur\n- **AuditLogHandler** - Audit et logging de tous les événements  \n- **WorkflowHandler** - Orchestration de workflows métier\n- **Auto-découverte** avec `@InjectableHandler`\n\n### 3. Drivers (Transport)\n- **HttpDriver** - Communications HTTP (APIs, webhooks, Telegram, etc.)\n- **SmtpDriver** - Envoi d'emails avec nodemailer\n\n### 4. Gestion des Queues\n- **Mode `api`** : Traitement immédiat uniquement\n- **Mode `worker`** : Queue Redis obligatoire, traitement différé\n- **Mode `hybrid`** : Queue si disponible, sinon traitement immédiat\n\n### 5. RecipientLoader\nInterface pour résoudre dynamiquement les destinataires selon le type d'événement.\n\n📖 **Documentation complète** : Consultez [ARCHITECTURE.md](./ARCHITECTURE.md) pour une vue détaillée de l'architecture.\n\n## 🚀 Démarrage Rapide\n\n### 1. Configuration des Types d'Événements\n\n```typescript\n// config.ts\nimport { EventPayloads, createEventTypeConfig } from '@afidos/nestjs-event-notifications';\n\nexport interface MyAppEvents extends EventPayloads {\n    'user.created': {\n        id: number;\n        email: string;\n        firstName: string;\n        lastName: string;\n    };\n    'order.shipped': {\n        id: string;\n        userId: number;\n        customerEmail: string;\n        customerName: string;\n        trackingNumber?: string;\n    };\n}\n\nexport const eventTypesConfig = createEventTypeConfig<MyAppEvents>({\n    'user.created': {\n        description: 'Nouvel utilisateur créé',\n        channels: ['email', 'telegram'],  // ← Identifiants des providers\n        defaultProcessing: 'async',\n        retryAttempts: 3\n    },\n    'order.shipped': {\n        description: 'Commande expédiée',\n        channels: ['email', 'telegram'],\n        defaultProcessing: 'async',\n        retryAttempts: 2\n    }\n});\n\n// Configuration du package (simplifiée)\nexport const packageConfig = createPackageConfig<MyAppEvents>({\n    eventTypes: eventTypesConfig,\n    \n    // Plus besoin de configuration providers !\n    // L'auto-découverte via @InjectableNotifier s'en charge\n    \n    queue: {\n        redis: {\n            host: process.env.REDIS_HOST || 'localhost',\n            port: parseInt(process.env.REDIS_PORT || '6379')\n        }\n    },\n    \n    mode: 'hybrid',  // ou 'api', 'worker'\n    \n    global: {\n        defaultTimeout: 30000,\n        enableDetailedLogs: true\n    }\n});\n```\n\n### 2. Configuration du Module\n\n```typescript\n// app.module.ts\nimport { Module } from '@nestjs/common';\nimport {\n    EventNotificationsModule,\n    HttpDriver,\n    SmtpDriver\n} from '@afidos/nestjs-event-notifications';\nimport { EmailProvider } from './providers/email.provider';\nimport { TelegramProvider } from './providers/telegram.provider';\nimport { StaticRecipientLoader } from './loaders/static-recipient.loader';\nimport { eventTypesConfig } from './config';\n\n@Module({\n    imports: [\n        EventNotificationsModule.forRoot<MyAppEvents>({\n            config: packageConfig,\n            recipientLoader: StaticRecipientLoader  // ← Nouvelle API\n        })\n    ],\n    providers: [\n        // Drivers\n        HttpDriver,\n        {\n            provide: SmtpDriver,\n            useFactory: () => new SmtpDriver({\n                host: process.env.SMTP_HOST || 'smtp.gmail.com',\n                port: parseInt(process.env.SMTP_PORT || '587'),\n                auth: {\n                    user: process.env.SMTP_USER,\n                    pass: process.env.SMTP_PASS\n                }\n            })\n        },\n        \n        // Providers avec auto-découverte\n        EmailProvider,     // ← Plus besoin de factory!\n        TelegramProvider,  // ← Auto-découverte via @InjectableNotifier\n        WebhookProvider    // ← Configuration dans le décorateur\n    ]\n})\nexport class AppModule {}\n```\n\n### 3. Variables d'Environnement\n\n```bash\n# Email (SMTP)\nSMTP_HOST=smtp.gmail.com\nSMTP_USER=your-email@gmail.com  \nSMTP_PASS=your-app-password\nSMTP_FROM=noreply@yourapp.com\n\n# Telegram\nTELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz\n\n# Redis (optionnel)\nREDIS_HOST=localhost\nREDIS_PORT=6379\n```\n\n### 4. Créer un Event Handler\n\nLes **Event Handlers** permettent d'exécuter de la logique métier en réaction aux événements (analytics, audit, workflows, etc.). Ils s'exécutent **en parallèle** des notifications.\n\n```typescript\n// handlers/user-analytics.handler.ts\nimport { Injectable, Logger } from '@nestjs/common';\nimport {\n    EventHandler,\n    InjectableHandler,\n    EventHandlerContext\n} from '@afidos/nestjs-event-notifications';\n\n@InjectableHandler({\n    name: 'UserAnalyticsHandler',\n    eventTypes: ['user.created', 'user.updated', 'user.deleted'],\n    priority: 100, // Plus élevé = traité en premier\n    queue: {\n        processing: 'async', // 'sync', 'async', 'delayed'\n        priority: 8,\n        retry: { \n            attempts: 3, \n            backoff: { type: 'exponential', delay: 2000 } \n        },\n        timeout: 30000,\n        concurrency: 5\n    }\n})\n@Injectable()\nexport class UserAnalyticsHandler implements EventHandler {\n    private readonly logger = new Logger(UserAnalyticsHandler.name);\n\n    getName(): string {\n        return 'UserAnalyticsHandler';\n    }\n\n    getEventTypes(): string[] {\n        return ['user.created', 'user.updated', 'user.deleted'];\n    }\n\n    getPriority(): number {\n        return 100;\n    }\n\n    canHandle(eventType: string): boolean {\n        return this.getEventTypes().includes(eventType);\n    }\n\n    async execute(\n        eventType: string, \n        payload: any, \n        context: EventHandlerContext\n    ): Promise<any> {\n        this.logger.log(`Traitement analytics pour ${eventType}`);\n\n        switch (eventType) {\n            case 'user.created':\n                await this.trackUserRegistration(payload);\n                break;\n            case 'user.updated':\n                await this.trackUserUpdate(payload);\n                break;\n            case 'user.deleted':\n                await this.trackUserDeletion(payload);\n                break;\n        }\n\n        return { \n            processed: true, \n            timestamp: new Date(),\n            analytics: 'updated'\n        };\n    }\n\n    // Lifecycle callbacks (optionnels)\n    async beforeQueue(eventType: string, payload: any, context: EventHandlerContext): Promise<void> {\n        this.logger.debug(`Préparation queue pour ${eventType}`);\n    }\n\n    async afterExecute(eventType: string, payload: any, result: any, context: EventHandlerContext): Promise<void> {\n        this.logger.log(`Analytics terminé pour ${eventType}: ${JSON.stringify(result)}`);\n    }\n\n    async onError(error: Error, eventType: string, payload: any, context: EventHandlerContext): Promise<void> {\n        this.logger.error(`Erreur analytics ${eventType}: ${error.message}`);\n        // Optionnel: alerting, fallback logic, etc.\n    }\n\n    async isHealthy(): Promise<boolean> {\n        // Vérification de la santé (connexion DB, API externes, etc.)\n        return true;\n    }\n\n    private async trackUserRegistration(payload: any) {\n        // Logique analytics pour inscription\n        // Ex: envoyer à Google Analytics, Mixpanel, etc.\n    }\n\n    private async trackUserUpdate(payload: any) {\n        // Logique analytics pour modification\n    }\n\n    private async trackUserDeletion(payload: any) {\n        // Logique analytics pour suppression\n    }\n}\n```\n\n### Handler pour Audit (Wildcard)\n\n```typescript\n// handlers/audit-log.handler.ts\n@InjectableHandler({\n    name: 'AuditLogHandler',\n    eventTypes: ['*'], // Traite TOUS les événements\n    priority: 50,\n    queue: {\n        processing: 'sync' // Exécution immédiate pour audit\n    }\n})\n@Injectable()\nexport class AuditLogHandler implements EventHandler {\n    private readonly logger = new Logger(AuditLogHandler.name);\n\n    async execute(eventType: string, payload: any, context: EventHandlerContext): Promise<any> {\n        // Audit sécurisé (sans données sensibles)\n        const auditPayload = this.sanitizePayload(payload);\n        \n        // Enregistrement en base de données\n        await this.auditRepository.save({\n            eventType,\n            payload: auditPayload,\n            correlationId: context.correlationId,\n            timestamp: context.timestamp,\n            userId: auditPayload.userId || null\n        });\n\n        return { audited: true };\n    }\n\n    private sanitizePayload(payload: any): any {\n        // Supprime les données sensibles (mots de passe, tokens, etc.)\n        const { password, token, ...safePayload } = payload;\n        return safePayload;\n    }\n}\n```\n\n### Enregistrement des Handlers\n\n```typescript\n// app.module.ts\n@Module({\n    imports: [\n        EventNotificationsModule.forRoot<MyAppEvents>(packageConfig)\n    ],\n    providers: [\n        // Drivers\n        HttpDriver,\n        SmtpDriver,\n        \n        // Notification Providers (auto-découverte)\n        EmailProvider,\n        TelegramProvider,\n        \n        // Event Handlers (auto-découverte)\n        UserAnalyticsHandler,\n        AuditLogHandler,\n        \n        // Recipient Loader\n        StaticRecipientLoader\n    ]\n})\nexport class AppModule {}\n```\n\n### 5. Créer un Provider (Optionnel)\n\n```typescript\n// providers/email.provider.ts\nimport { Logger } from '@nestjs/common';\nimport {\n    BaseNotificationProvider,  // ← Classe de base avec méthodes communes\n    SmtpDriver,\n    RecipientLoader,\n    Recipient,\n    NotificationResult,\n    NotificationContext,\n    EmailMessage,\n    InjectableNotifier  // ← Nouveau décorateur\n} from '@afidos/nestjs-event-notifications';\n\n// Extension de l'interface Recipient\ndeclare module '@afidos/nestjs-event-notifications' {\n    interface Recipient {\n        email?: string;\n        firstName?: string;\n        lastName?: string;\n    }\n}\n\n@InjectableNotifier({\n    channel: 'email',        // ← Identifiant pour discovery\n    driver: 'smtp',          // ← Driver utilisé\n    description: 'Provider pour notifications email via SMTP'\n})  // ← @InjectableNotifier applique automatiquement @Injectable()\nexport class EmailProvider extends BaseNotificationProvider {  // ← Hérite de BaseNotificationProvider\n\n    constructor(\n        recipientLoader: RecipientLoader,\n        private readonly smtpDriver: SmtpDriver,\n        private readonly fromEmail: string = 'noreply@example.com'\n    ) {\n        super(recipientLoader);  // ← Appel du constructeur parent\n    }\n\n    async send(payload: any, context: NotificationContext): Promise<NotificationResult> {\n        try {\n            // 1. Charger tous les destinataires pour cet événement\n            const allRecipients = await this.recipientLoader.load(context.eventType, payload);\n\n            // 2. Filtrer par la propriété email (méthode héritée)\n            const emailRecipients = this.filterRecipientsByProperty(allRecipients, 'email');\n\n            if (emailRecipients.length === 0) {\n                return this.createSkippedResult(context, 'No email recipients found');  // ← Méthode héritée\n            }\n\n            // 3. Prendre le premier recipient et envoyer\n            const recipient = emailRecipients[0];\n            const address = recipient.email as string;\n            \n            return await this.sendToAddress(address, context.eventType, payload, recipient, context);\n\n        } catch (error) {\n            return this.createFailedResult(context, `Failed to send: ${error.message}`);  // ← Méthode héritée\n        }\n    }\n\n    private async sendToAddress(\n        address: string,\n        eventType: string,\n        payload: any,\n        recipient: Recipient,\n        context: NotificationContext\n    ): Promise<NotificationResult> {\n        try {\n            const message: EmailMessage = {\n                to: address,\n                from: this.fromEmail,\n                subject: this.buildSubject(eventType, payload),\n                html: this.buildHtmlBody(eventType, payload, recipient),\n                text: this.buildTextBody(eventType, payload, recipient)\n            };\n\n            const result = await this.smtpDriver.send(message);\n\n            // Utilise la méthode héritée pour créer le résultat\n            return this.createSentResult(context, {\n                messageId: result.messageId,\n                recipientId: recipient.id,\n                accepted: result.accepted,\n                rejected: result.rejected\n            });\n\n        } catch (error) {\n            // Utilise la méthode héritée pour créer le résultat d'erreur\n            return this.createFailedResult(context, error.message, {\n                recipientId: recipient.id,\n                address\n            });\n        }\n    }\n\n    private buildSubject(eventType: string, payload: any): string {\n        switch (eventType) {\n            case 'user.created': return '🎉 Bienvenue !';\n            case 'order.shipped': return '🚚 Commande expédiée';\n            default: return `Notification: ${eventType}`;\n        }\n    }\n\n    async healthCheck(): Promise<boolean> {\n        return await this.smtpDriver.healthCheck();\n    }\n\n    validateConfig(_config: any): boolean | string[] {\n        return true;\n    }\n\n    // Les méthodes getChannelName() et getProviderName() sont automatiquement héritées !\n}\n```\n\n### 4. Créer un RecipientLoader\n\n```typescript\n// loaders/static-recipient.loader.ts\nimport { Injectable } from '@nestjs/common';\nimport { RecipientLoader, Recipient } from '@afidos/nestjs-event-notifications';\n\n@Injectable()\nexport class StaticRecipientLoader implements RecipientLoader {\n    async load(eventType: string, payload: any): Promise<Recipient[]> {\n        switch (eventType) {\n            case 'user.created':\n                return [{\n                    id: payload.id?.toString(),\n                    email: payload.email,\n                    firstName: payload.firstName,\n                    lastName: payload.lastName,\n                    preferences: { enabled: true }\n                }];\n                \n            case 'order.shipped':\n                return [{\n                    id: payload.userId?.toString(),\n                    email: payload.customerEmail,\n                    firstName: payload.customerName?.split(' ')[0],\n                    preferences: { enabled: true }\n                }];\n                \n            default:\n                return [];\n        }\n    }\n}\n```\n\n### 6. Émettre des Événements\n\n```typescript\n// user.service.ts\nimport { Injectable } from '@nestjs/common';\nimport { EventEmitterService } from '@afidos/nestjs-event-notifications';\nimport { MyAppEvents } from './config';\n\n@Injectable()\nexport class UserService {\n    constructor(\n        private readonly eventEmitter: EventEmitterService<MyAppEvents>\n    ) {}\n\n    async createUser(userData: any) {\n        const user = await this.userRepository.save(userData);\n\n        // Émettre l'événement (traitement dual automatique)\n        const result = await this.eventEmitter.emitAsync('user.created', {\n            id: user.id,\n            email: user.email,\n            firstName: user.firstName,\n            lastName: user.lastName\n        });\n        \n        /* \n        Le système traite automatiquement EN PARALLÈLE :\n        \n        📧 NOTIFICATIONS (Communication externe) :\n        ├─ EmailProvider → Email de bienvenue\n        └─ TelegramProvider → Notification Telegram\n\n        🎯 HANDLERS (Logique métier) :\n        ├─ UserAnalyticsHandler → Tracking analytics\n        ├─ AuditLogHandler → Logging sécurisé\n        └─ WorkflowHandler → Workflow d'onboarding\n        */\n\n        console.log('Résultat dual processing:', result);\n        /*\n        {\n          eventId: \"evt_1234567890\",\n          correlationId: \"corr_abcdefgh\",\n          mode: \"async\",\n          waitedForResult: false,\n          queuedAt: \"2025-01-19T10:30:00.000Z\",\n          results: [\n            // Notifications\n            { provider: \"EmailProvider\", status: \"queued\", jobId: \"job_001\" },\n            { provider: \"TelegramProvider\", status: \"queued\", jobId: \"job_002\" },\n            // Handlers\n            { handler: \"UserAnalyticsHandler\", status: \"queued\", jobId: \"handler_001\" },\n            { handler: \"AuditLogHandler\", status: \"completed\", result: { audited: true } },\n            { handler: \"WorkflowHandler\", status: \"queued\", jobId: \"handler_002\" }\n          ]\n        }\n        */\n\n        return user;\n    }\n}\n```\n\n## 🔧 Configuration\n\n### Variables d'Environnement\n\n```bash\n# Email (SMTP)\nSMTP_HOST=smtp.gmail.com\nSMTP_PORT=587\nSMTP_USER=your-email@gmail.com\nSMTP_PASS=your-password\nSMTP_FROM=noreply@yourapp.com\n\n# Telegram\nTELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz\n\n# Redis (pour les queues)\nREDIS_HOST=localhost\nREDIS_PORT=6379\nREDIS_PASSWORD=optional\n\n# Webhooks\nWEBHOOK_URL=https://your-webhook-url.com\n\n# FileQueueProvider (optionnel)\nQUEUE_DATA_DIR=./custom-queue-data\n```\n\n## 📁 Queue Providers - Approche Modulaire\n\n### 🚀 Nouveauté v2.2.0 - Architecture Sans Conflit de Dépendances\n\nLe système de queue a été conçu pour éviter les **conflits de dépendances** entre providers. Seul le **FileQueueProvider** est exporté par défaut car il ne nécessite aucune dépendance externe.\n\n### 🎯 FileQueueProvider (Par Défaut)\n\nLe **FileQueueProvider** est un broker de queue simple qui utilise le **système de fichiers** pour la persistance des jobs. Il est parfait pour le développement, les tests et les applications avec des charges légères.\n\n### ✨ Avantages\n\n- **🚀 Démarrage immédiat** - Aucune infrastructure externe requise\n- **📁 Debug facile** - Jobs visibles dans des fichiers JSON \n- **🔧 Configuration zéro** - Fonctionne out-of-the-box\n- **📊 Monitoring simple** - Inspection visuelle des queues\n- **🐳 Déploiement léger** - Pas de Redis à gérer\n\n### 🔧 Configuration et Usage\n\n#### Configuration par Défaut\n\nPar défaut, le **FileQueueProvider** est automatiquement utilisé quand aucun provider custom n'est spécifié :\n\n```typescript\n// Utilise automatiquement FileQueueProvider\nEventNotificationsModule.forRoot<MyAppEvents>({\n    config: packageConfig,\n    recipientLoader: StaticRecipientLoader\n    // queueProvider omis = FileQueueProvider par défaut\n})\n```\n\n#### Configuration Personnalisée\n\n```typescript\nimport { FileQueueProvider } from '@afidos/nestjs-event-notifications';\n\nEventNotificationsModule.forRoot<MyAppEvents>({\n    config: packageConfig,\n    recipientLoader: StaticRecipientLoader,\n    queueProvider: FileQueueProvider  // Explicite\n})\n```\n\n#### Variables d'Environnement\n\n```bash\n# Répertoire de stockage des fichiers de queue\nQUEUE_DATA_DIR=./queue-data\n\n# Configuration du nom de queue (optionnel)\nQUEUE_PREFIX=my-app-notifications\n```\n\n### 📊 Structure des Fichiers de Queue\n\nLes jobs sont stockés dans des fichiers JSON :\n\n```json\n// ./queue-data/notifications-queue.json\n[\n  {\n    \"id\": \"file-job-1751458285777-rpd6xekry\",\n    \"name\": \"process-notification\", \n    \"data\": {\n      \"eventId\": \"evt_1751458285777_gzy9p5y10\",\n      \"eventType\": \"user.created\",\n      \"payload\": {\n        \"id\": 123,\n        \"email\": \"user@example.com\",\n        \"firstName\": \"John\",\n        \"lastName\": \"Doe\"\n      },\n      \"correlationId\": \"cor_1751458285777_ifx3p0v2q\"\n    },\n    \"status\": \"completed\",           // waiting, active, completed, failed\n    \"attempts\": 1,\n    \"maxAttempts\": 3,\n    \"createdAt\": \"2025-07-02T12:11:25.777Z\",\n    \"processingStartedAt\": \"2025-07-02T12:11:26.686Z\",\n    \"completedAt\": \"2025-07-02T12:11:29.119Z\",\n    \"result\": [\n      {\n        \"channel\": \"email\",\n        \"provider\": \"EmailProvider\",\n        \"status\": \"sent\",\n        \"sentAt\": \"2025-07-02T12:11:28.435Z\",\n        \"metadata\": {\n          \"messageId\": \"<4f19e25e-f010-4148-6aab-aeed37279fad@example.com>\",\n          \"recipientCount\": 1,\n          \"accepted\": [\"customer@example.com\"]\n        }\n      }\n    ]\n  }\n]\n```\n\n### ⚙️ Fonctionnalités\n\n- **✅ Processing asynchrone** - Jobs traités en arrière-plan\n- **🔄 Retry automatique** - Gestion des tentatives avec backoff\n- **📊 Health checks** - Monitoring de l'état de la queue\n- **📈 Statistiques** - Compteurs waiting/active/completed/failed\n- **🧹 Cleanup** - Nettoyage automatique des anciens jobs\n- **⚡ Concurrence** - Support du processing parallèle\n\n### 🎯 Cas d'Usage Idéaux\n\n#### ✅ Recommandé pour :\n- **🏠 Développement local** - Pas d'infrastructure à installer\n- **🧪 Tests automatisés** - Environnements temporaires\n- **📱 Applications légères** - < 1000 jobs/heure\n- **🎯 Prototypage** - Démarrage rapide\n- **🐳 Containers simples** - Docker sans Redis\n\n#### ⚠️ À éviter pour :\n- **🚀 Production haute charge** - > 10000 jobs/heure\n- **🌐 Applications distribuées** - Plusieurs instances\n- **⚡ Latence critique** - < 100ms processing\n- **🔐 Données sensibles** - Sans chiffrement fichier\n\n## 🔄 Providers Bull et BullMQ (Non Exportés)\n\n### ⚠️ Pourquoi ne sont-ils pas exportés par défaut ?\n\nLes providers **Bull** et **BullMQ** ne sont **pas exportés** dans le fichier `index.ts` pour éviter les **conflits de dépendances** :\n\n- **Bull** et **BullMQ** sont **incompatibles** entre eux dans le même projet\n- Installer les deux créerait des conflits de versions Redis\n- Chaque projet ne devrait utiliser qu'**un seul** provider Redis\n\n### 🎯 Bull Provider (Option 1)\n\nPour utiliser **Bull** dans votre projet :\n\n```bash\n# 1. Installer les dépendances Bull\nnpm install bull @nestjs/bull redis\n```\n\n```typescript\n// 2. Import direct depuis le fichier source\nimport { BullQueueProvider } from '@afidos/nestjs-event-notifications/dist/queue/bull-queue.provider';\nimport { BullModule } from '@nestjs/bull';\n\n@Module({\n  imports: [\n    BullModule.forRoot({\n      redis: {\n        host: 'localhost',\n        port: 6379,\n      },\n    }),\n    EventNotificationsModule.forRoot<MyAppEvents>({\n      config: packageConfig,\n      recipientLoader: StaticRecipientLoader,\n      queueProvider: BullQueueProvider  // ← Import direct\n    })\n  ]\n})\nexport class AppModule {}\n```\n\n### 🚀 BullMQ Provider (Option 2)\n\nPour utiliser **BullMQ** dans votre projet :\n\n```bash\n# 1. Installer les dépendances BullMQ\nnpm install bullmq @nestjs/bullmq redis\n```\n\n```typescript\n// 2. Import direct depuis le fichier source\nimport { BullMQQueueProvider } from '@afidos/nestjs-event-notifications/dist/queue/bullmq-queue.provider';\nimport { BullMQModule } from '@nestjs/bullmq';\n\n@Module({\n  imports: [\n    BullMQModule.forRoot({\n      connection: {\n        host: 'localhost',\n        port: 6379,\n      },\n    }),\n    EventNotificationsModule.forRoot<MyAppEvents>({\n      config: packageConfig,\n      recipientLoader: StaticRecipientLoader,\n      queueProvider: BullMQQueueProvider  // ← Import direct\n    })\n  ]\n})\nexport class AppModule {}\n```\n\n### 📋 Comparaison des Providers\n\n| Provider | Dépendances | Performance | Production | Maintenance |\n|----------|-------------|-------------|------------|-------------|\n| **FileQueueProvider** | ❌ Aucune | 🟡 Légère | ⚠️ < 1K jobs/h | ✅ Active |\n| **BullQueueProvider** | `bull` + `@nestjs/bull` | 🟢 Haute | ✅ Éprouvé | ⚠️ Legacy |\n| **BullMQQueueProvider** | `bullmq` + `@nestjs/bullmq` | 🟢 Très Haute | ✅ Moderne | ✅ Active |\n\n### 🎯 Recommandations d'Usage\n\n#### FileQueueProvider - Développement/Tests\n```typescript\n// ✅ Développement local, tests, prototypage\nEventNotificationsModule.forRoot({\n  config: packageConfig,\n  recipientLoader: StaticRecipientLoader\n  // FileQueueProvider par défaut - aucune dépendance\n})\n```\n\n#### Bull - Production Legacy\n```typescript\n// ✅ Applications existantes avec Bull\nimport { BullQueueProvider } from '@afidos/nestjs-event-notifications/dist/queue/bull-queue.provider';\n\nEventNotificationsModule.forRoot({\n  config: packageConfig,\n  recipientLoader: StaticRecipientLoader,\n  queueProvider: BullQueueProvider\n})\n```\n\n#### BullMQ - Production Moderne\n```typescript\n// ✅ Nouvelles applications production\nimport { BullMQQueueProvider } from '@afidos/nestjs-event-notifications/dist/queue/bullmq-queue.provider';\n\nEventNotificationsModule.forRoot({\n  config: packageConfig,\n  recipientLoader: StaticRecipientLoader,\n  queueProvider: BullMQQueueProvider\n})\n```\n\n## 🆕 Nouvelle API Module (v2.2.0)\n\n### Migration de l'API\n\n**Avant (v2.1.x) :**\n```typescript\nEventNotificationsModule.forRoot<MyAppEvents>(packageConfig)\n```\n\n**Après (v2.2.0) :**\n```typescript\nEventNotificationsModule.forRoot<MyAppEvents>({\n    config: packageConfig,\n    recipientLoader: StaticRecipientLoader,\n    queueProvider?: FileQueueProvider  // Optionnel\n})\n```\n\n### ✨ Avantages de la Nouvelle API\n\n- **🔧 Configuration typée** - Meilleure type safety\n- **📦 Injection automatique** - Plus de tokens manuels\n- **🎯 Flexibilité** - QueueProvider et RecipientLoader configurables\n- **🧹 Code plus propre** - Moins de boilerplate\n\n### 🔒 Interface Recipient Extensible\n\nDéclarez vos propriétés personnalisées :\n\n```typescript\n// Dans votre provider ou loader\ndeclare module '@afidos/nestjs-event-notifications' {\n    interface Recipient {\n        email?: string;\n        firstName?: string;\n        lastName?: string;\n        telegramId?: string;\n        webhookUrl?: string;\n        customProperty?: string;  // ← Vos propriétés\n    }\n}\n```\n\n## 📚 Exemple Complet\n\nConsultez le dossier `examples/basic-usage` pour un exemple complet avec :\n- **Auto-découverte des providers** via `@InjectableNotifier`\n- Configuration TypeScript type-safe\n- Gestion intelligente des queues (`hybrid` mode)\n- Providers Email, Telegram et Webhook\n- RecipientLoader statique\n- Contrôleurs REST pour déclencher des événements\n- Tests unitaires\n\n## 🏃‍♂️ Lancer l'Exemple\n\n```bash\ncd examples/basic-usage\nnpm install\nnpm run build\nnpm run start:dev\n```\n\nPuis testez les endpoints :\n```bash\n# Créer un utilisateur (déclenche user.created)\ncurl -X POST http://localhost:3000/users \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"email\":\"test@example.com\",\"firstName\":\"John\",\"lastName\":\"Doe\",\"password\":\"test123\"}'\n\n# Créer une commande (déclenche order.created)\ncurl -X POST http://localhost:3000/orders \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"customerId\":1,\"items\":[{\"productId\":\"prod1\",\"quantity\":2,\"price\":10.50}]}'\n```\n\n\n## 🤝 Contribution\n\nLes contributions sont les bienvenues ! Pour contribuer :\n\n1. Fork le projet\n2. Créer une branche feature (`git checkout -b feature/amazing-feature`)\n3. Commit les changes (`git commit -m 'Add amazing feature'`)\n4. Push sur la branche (`git push origin feature/amazing-feature`)\n5. Ouvrir une Pull Request\n\n## 📄 Licence\n\n[MIT](LICENSE)\n","readmeFilename":"README.md"}