{"_id":"@dhruvdobariya/notification-provider","_rev":"13-8e5910c53237389d155bfd568913fbce","name":"@dhruvdobariya/notification-provider","dist-tags":{"latest":"3.0.1"},"versions":{"1.0.0":{"name":"@dhruvdobariya/notification-provider","version":"1.0.0","keywords":["notification","push","firebase","twilio","multi-provider"],"author":{"name":"Your Name"},"license":"MIT","_id":"@dhruvdobariya/notification-provider@1.0.0","maintainers":[{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"}],"bin":{"notification-service":"index.js"},"dist":{"shasum":"64093072c449bfd46e59ed4913082799a02b8677","tarball":"https://registry.npmjs.org/@dhruvdobariya/notification-provider/-/notification-provider-1.0.0.tgz","fileCount":17,"integrity":"sha512-0aqjHFhyECnLSWDV1hMRZ6RV9S+TiRhHroIg67CodEcqFdBGX6zuIAPhBxWT7Irk3ADwyvpvrFO9l7p8ZkL0nQ==","signatures":[{"sig":"MEUCIQDa81ptFP+G+cZrdUgFuT7nq8KKa2DPhQ85yJ7vXgYRyQIgWUBExUsFHv+eiar1lNqkwaOBCDM3wp89dZWlJ4tp3Ak=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22611},"main":"index.js","scripts":{"dev":"nodemon server.js","test":"jest","start":"node server.js"},"_npmUser":{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"},"_npmVersion":"11.6.0","description":"Multi-provider notification service with failover","directories":{},"_nodeVersion":"22.17.0","dependencies":{"joi":"^17.9.2","cors":"^2.8.5","axios":"^1.5.0","dotenv":"^16.3.1","helmet":"^7.0.0","pusher":"^5.2.0","twilio":"^4.15.0","express":"^4.18.2","winston":"^3.10.0","firebase-admin":"^11.10.1","express-rate-limit":"^6.10.0","node-pushnotifications":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","nodemon":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/notification-provider_1.0.0_1758174556968_0.5184833137937237","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@dhruvdobariya/notification-provider","version":"1.1.1","keywords":["notification","push","firebase","twilio","multi-provider"],"author":{"name":"Your Name"},"license":"MIT","_id":"@dhruvdobariya/notification-provider@1.1.1","maintainers":[{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"}],"bin":{"notification-service":"index.js"},"dist":{"shasum":"1a6e59d2fbea15ad0123085aee4f97c54b3cf80a","tarball":"https://registry.npmjs.org/@dhruvdobariya/notification-provider/-/notification-provider-1.1.1.tgz","fileCount":17,"integrity":"sha512-WXVvjtp75BL5Q2PgfrTGyVzlt844AGWgFM8h8tjVYplxSasJFNRFoXlg/oTWsMMKewQPKOQ1QnTA3X7JsWaGDw==","signatures":[{"sig":"MEYCIQDZnkvFZRSDx5b9pG2HfDEJ2l02O+3yD2M1gphhy+N0NQIhAKGTjh0+ICNj3sOSvKnwtR3YWIUzDh/jF6gvvh4nnwkC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22611},"main":"index.js","scripts":{"dev":"nodemon server.js","test":"jest","start":"node server.js"},"_npmUser":{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"},"_npmVersion":"11.6.0","description":"Multi-provider notification service with failover","directories":{},"_nodeVersion":"22.17.0","dependencies":{"joi":"^17.9.2","cors":"^2.8.5","axios":"^1.5.0","dotenv":"^16.3.1","helmet":"^7.0.0","pusher":"^5.2.0","twilio":"^4.15.0","express":"^4.18.2","winston":"^3.10.0","firebase-admin":"^11.10.1","express-rate-limit":"^6.10.0","node-pushnotifications":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","nodemon":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/notification-provider_1.1.1_1758178681933_0.32052706007868403","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@dhruvdobariya/notification-provider","version":"1.1.3","keywords":["notification","push","firebase","twilio","multi-provider"],"author":{"name":"Your Name"},"license":"MIT","_id":"@dhruvdobariya/notification-provider@1.1.3","maintainers":[{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"}],"bin":{"notification-service":"index.js"},"dist":{"shasum":"6ba12449ddfe2de897c85ffb8468915b16c88534","tarball":"https://registry.npmjs.org/@dhruvdobariya/notification-provider/-/notification-provider-1.1.3.tgz","fileCount":17,"integrity":"sha512-kTsv1gDCAa3242jdbvNqR8OGe86RFLY+sbV/OBkMst5uTFxorklRE1NhiickOe6pYp5tvL/AJRTNHQifE+5VTw==","signatures":[{"sig":"MEYCIQDyOp1Cilqy+kd8ARP0ubjfS3ifKMfqF6pq90LagCMWvAIhAI7Csb1qwWjBXiB/T2AO6aZ3xaO4qLvJL7uF8z/hLJSW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25490},"main":"index.js","scripts":{"dev":"nodemon server.js","test":"jest","start":"node server.js"},"_npmUser":{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"},"_npmVersion":"11.6.0","description":"Multi-provider notification service with failover","directories":{},"_nodeVersion":"22.17.0","dependencies":{"joi":"^17.9.2","cors":"^2.8.5","axios":"^1.5.0","dotenv":"^16.3.1","helmet":"^7.0.0","pusher":"^5.2.0","twilio":"^4.15.0","express":"^4.18.2","winston":"^3.10.0","firebase-admin":"^11.10.1","express-rate-limit":"^6.10.0","node-pushnotifications":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","nodemon":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/notification-provider_1.1.3_1758178816105_0.3531662194966285","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@dhruvdobariya/notification-provider","version":"2.0.0","keywords":["notification","push","firebase","onesignal","pusher","scheduling","multi-provider"],"author":{"name":"Dhruv Dobariya"},"license":"MIT","_id":"@dhruvdobariya/notification-provider@2.0.0","maintainers":[{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"}],"bin":{"notification-service":"index.js"},"dist":{"shasum":"37dbfe72ff6a3b0e69208d9e90043870c7bc2173","tarball":"https://registry.npmjs.org/@dhruvdobariya/notification-provider/-/notification-provider-2.0.0.tgz","fileCount":15,"integrity":"sha512-M/QBfWwROeUPpqmPjeLcwI58oaC1IgGqSPV+/i0VEiwsTccGXXrVfQB+WrBEQxujj261+VUmqyj93IQ2K4Eyzg==","signatures":[{"sig":"MEQCIHFGNN0lyN+xaqDkumVIlK84G+Sz3ccVS3Ysmgs4RhBXAiAPSxwIVFjmFKw0ojycoF/lzvqRTrdKOqvvdAL5daHHug==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50445},"main":"index.js","gitHead":"34cc3f234d581ac6847d430265762df59984e0ff","scripts":{"dev":"nodemon server.js","test":"jest","start":"node server.js"},"_npmUser":{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"},"_npmVersion":"11.6.0","description":"Multi-provider notification service with failover and scheduling","directories":{},"_nodeVersion":"22.17.0","dependencies":{"joi":"^17.9.2","cors":"^2.8.5","axios":"^1.5.0","dotenv":"^16.3.1","helmet":"^7.0.0","pusher":"^5.1.3","twilio":"^4.15.0","express":"^4.18.2","winston":"^3.10.0","node-cron":"^3.0.3","firebase-admin":"^11.10.1","moment-timezone":"^0.5.43","express-rate-limit":"^6.10.0","node-pushnotifications":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","nodemon":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/notification-provider_2.0.0_1758801378239_0.6802192147613864","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@dhruvdobariya/notification-provider","version":"2.0.1","keywords":["notification","push","firebase","onesignal","pusher","scheduling","multi-provider"],"author":{"name":"Dhruv Dobariya"},"license":"MIT","_id":"@dhruvdobariya/notification-provider@2.0.1","maintainers":[{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"}],"bin":{"notification-service":"index.js"},"dist":{"shasum":"1e291cccd56f85ad59ee8269da5303e561e89ee7","tarball":"https://registry.npmjs.org/@dhruvdobariya/notification-provider/-/notification-provider-2.0.1.tgz","fileCount":15,"integrity":"sha512-leciwP8hfxOpnyvZmtd2OKRUKDnjXUp69rUOdKaG/pigshdjFy4OV6fnRwAOV7qANdIoSAHXJj3mE5BuNrFHMw==","signatures":[{"sig":"MEUCIBp6igugRpmfqM0si8XDsKt8iHHiPbg+lw2Y+pholyX6AiEA1y0y9e7+r98eCiP0/zM9BpvlkUWXQcmchGKdmYnX+Cw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57449},"main":"index.js","gitHead":"34cc3f234d581ac6847d430265762df59984e0ff","scripts":{"dev":"nodemon server.js","test":"jest","start":"node server.js"},"_npmUser":{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"},"_npmVersion":"11.6.0","description":"Multi-provider notification service with failover and scheduling","directories":{},"_nodeVersion":"22.17.0","dependencies":{"joi":"^17.9.2","cors":"^2.8.5","axios":"^1.5.0","dotenv":"^16.3.1","helmet":"^7.0.0","pusher":"^5.1.3","twilio":"^4.15.0","express":"^4.18.2","winston":"^3.10.0","node-cron":"^3.0.3","firebase-admin":"^11.10.1","moment-timezone":"^0.5.43","express-rate-limit":"^6.10.0","node-pushnotifications":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","nodemon":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/notification-provider_2.0.1_1758801611178_0.3028502559757871","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@dhruvdobariya/notification-provider","version":"2.0.2","keywords":["notification","push","firebase","onesignal","pusher","scheduling","multi-provider"],"author":{"name":"Dhruv Dobariya"},"license":"MIT","_id":"@dhruvdobariya/notification-provider@2.0.2","maintainers":[{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"}],"bin":{"notification-service":"index.js"},"dist":{"shasum":"26dcfb3003b31adb464d8097f9551509068cb785","tarball":"https://registry.npmjs.org/@dhruvdobariya/notification-provider/-/notification-provider-2.0.2.tgz","fileCount":15,"integrity":"sha512-okwY4ky4U3UpazblJO/cC6nAK3rvjNlxzgn7s9tMT1JXRyC8yVk2vwAgSN2kNginlGo0/38hfUo44oDQ0ycQzw==","signatures":[{"sig":"MEUCIQDLMe7QTC9TB0DPRnasFoh7R5vTEV3iCWAAZm9sd15YkQIgUjK/PvwuCy1BOjStK5QMka+LQwFjaqY0oRW1Vdj7H8g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57309},"main":"index.js","gitHead":"34cc3f234d581ac6847d430265762df59984e0ff","scripts":{"dev":"nodemon server.js","test":"jest","start":"node server.js"},"_npmUser":{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"},"_npmVersion":"11.6.0","description":"Multi-provider notification service with failover and scheduling","directories":{},"_nodeVersion":"22.17.0","dependencies":{"joi":"^17.9.2","cors":"^2.8.5","axios":"^1.5.0","dotenv":"^16.3.1","helmet":"^7.0.0","pusher":"^5.1.3","twilio":"^4.15.0","express":"^4.18.2","winston":"^3.10.0","node-cron":"^3.0.3","firebase-admin":"^11.10.1","moment-timezone":"^0.5.43","express-rate-limit":"^6.10.0","node-pushnotifications":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","nodemon":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/notification-provider_2.0.2_1758801707450_0.6870474060480471","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"@dhruvdobariya/notification-provider","version":"2.0.3","keywords":["notification","push","firebase","onesignal","pusher","scheduling","multi-provider"],"author":{"name":"Dhruv Dobariya"},"license":"MIT","_id":"@dhruvdobariya/notification-provider@2.0.3","maintainers":[{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"}],"bin":{"notification-service":"index.js"},"dist":{"shasum":"14f7d5bde1d492865c40551c559322c4a7f1e0d2","tarball":"https://registry.npmjs.org/@dhruvdobariya/notification-provider/-/notification-provider-2.0.3.tgz","fileCount":15,"integrity":"sha512-ulWplwstgZTuMcg/dcoMSC5+8ZjOyj+tKzdhLDi9SbOE/+4oeZb1asOu/RMW4/C60XxPXALAPorqm94Zd0xIcw==","signatures":[{"sig":"MEQCICim5Rjhf2+dRKKHF4CsSp0BP5/3ZsGGiPQPj3BkRPmuAiA/qUl+KegwdVEUNtu01LBK72E9M5w7+7ufzg2BAQMpKg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57001},"main":"index.js","gitHead":"34cc3f234d581ac6847d430265762df59984e0ff","scripts":{"dev":"nodemon server.js","test":"jest","start":"node server.js"},"_npmUser":{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"},"_npmVersion":"11.6.0","description":"Multi-provider notification service with failover and scheduling","directories":{},"_nodeVersion":"22.17.0","dependencies":{"joi":"^17.9.2","cors":"^2.8.5","axios":"^1.5.0","dotenv":"^16.3.1","helmet":"^7.0.0","pusher":"^5.1.3","twilio":"^4.15.0","express":"^4.18.2","winston":"^3.10.0","node-cron":"^3.0.3","firebase-admin":"^11.10.1","moment-timezone":"^0.5.43","express-rate-limit":"^6.10.0","node-pushnotifications":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","nodemon":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/notification-provider_2.0.3_1758801820941_0.006632375873903751","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"@dhruvdobariya/notification-provider","version":"2.0.4","keywords":["notification","push","firebase","onesignal","pusher","scheduling","multi-provider"],"author":{"name":"Dhruv Dobariya"},"license":"MIT","_id":"@dhruvdobariya/notification-provider@2.0.4","maintainers":[{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"}],"bin":{"notification-service":"index.js"},"dist":{"shasum":"3ca8d0313477b63367faed4362e1aaa2133eb047","tarball":"https://registry.npmjs.org/@dhruvdobariya/notification-provider/-/notification-provider-2.0.4.tgz","fileCount":15,"integrity":"sha512-58fAG6qlHBeRDi7gMvRLLgykH2Usd9pyhot5+9R4Q6VPSEPgxwp3jmmaq5wcGjVgBoa6G2pIzpbYkwwwQd9L9Q==","signatures":[{"sig":"MEUCIQD4qMrsgPMexug6ZmAq16v+37FoLmydz3NpWfkmxp0WigIgPWEpK3oELS0wBMbrpoEtM3SH2XD1ENs4rMpMj4FRgAI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57027},"main":"index.js","gitHead":"34cc3f234d581ac6847d430265762df59984e0ff","scripts":{"dev":"nodemon server.js","test":"jest","start":"node server.js"},"_npmUser":{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"},"_npmVersion":"11.6.0","description":"Multi-provider notification service with failover and scheduling","directories":{},"_nodeVersion":"22.17.0","dependencies":{"joi":"^17.9.2","cors":"^2.8.5","axios":"^1.5.0","dotenv":"^16.3.1","helmet":"^7.0.0","pusher":"^5.1.3","twilio":"^4.15.0","express":"^4.18.2","winston":"^3.10.0","node-cron":"^3.0.3","firebase-admin":"^11.10.1","moment-timezone":"^0.5.43","express-rate-limit":"^6.10.0","node-pushnotifications":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","nodemon":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/notification-provider_2.0.4_1758801987905_0.11823898643426767","host":"s3://npm-registry-packages-npm-production"}},"2.0.5":{"name":"@dhruvdobariya/notification-provider","version":"2.0.5","keywords":["notification","push","firebase","onesignal","pusher","scheduling","multi-provider"],"author":{"name":"Dhruv Dobariya"},"license":"MIT","_id":"@dhruvdobariya/notification-provider@2.0.5","maintainers":[{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"}],"bin":{"notification-service":"index.js"},"dist":{"shasum":"469e2358a73940534ce7aff4484fde65babf1654","tarball":"https://registry.npmjs.org/@dhruvdobariya/notification-provider/-/notification-provider-2.0.5.tgz","fileCount":15,"integrity":"sha512-yQMAeZHdV3NSSFyTT5oASfjYIPP3PDYCUqEeNFvBNWcQ6pUUfI3j8eHzFKNZrs0PM2L1tByDxYhzLIxG9p5lxQ==","signatures":[{"sig":"MEUCIEp1/gokPYm2Z5EHZlQFVjtTeaCObAziBusRRNwyriWKAiEAp1zcTIXrlQc7mbW+zAacUGnpMUA1PIetzg/tWA7tvZ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55327},"main":"index.js","gitHead":"34cc3f234d581ac6847d430265762df59984e0ff","scripts":{"dev":"nodemon server.js","test":"jest","start":"node server.js"},"_npmUser":{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"},"_npmVersion":"11.6.0","description":"Multi-provider notification service with failover and scheduling","directories":{},"_nodeVersion":"22.17.0","dependencies":{"joi":"^17.9.2","cors":"^2.8.5","axios":"^1.5.0","dotenv":"^16.3.1","helmet":"^7.0.0","pusher":"^5.1.3","twilio":"^4.15.0","express":"^4.18.2","winston":"^3.10.0","node-cron":"^3.0.3","firebase-admin":"^11.10.1","moment-timezone":"^0.5.43","express-rate-limit":"^6.10.0","node-pushnotifications":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","nodemon":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/notification-provider_2.0.5_1758802226866_0.07491497689788051","host":"s3://npm-registry-packages-npm-production"}},"2.0.6":{"name":"@dhruvdobariya/notification-provider","version":"2.0.6","keywords":["notification","push","firebase","onesignal","pusher","scheduling","multi-provider"],"author":{"name":"Dhruv Dobariya"},"license":"MIT","_id":"@dhruvdobariya/notification-provider@2.0.6","maintainers":[{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"}],"bin":{"notification-service":"index.js"},"dist":{"shasum":"deb0d89e54a98e54c7c6c8a7c043e6c6bde19007","tarball":"https://registry.npmjs.org/@dhruvdobariya/notification-provider/-/notification-provider-2.0.6.tgz","fileCount":15,"integrity":"sha512-4DzwD6g3NQlSnyvZgkBCAjRA6LtT388QxMD0Sf74Yissw1D9+ItN3jAVRxQIoLXLp7sWC1W9YSvxm5tJl8OO3Q==","signatures":[{"sig":"MEUCIHMHGDGnvORt5avur1PzWZQfOhz/KBKbb9QUdHGswdn1AiEAtGnZeh1itNyUw6dc2Q98p7HjcZxZqsW1bbtfS6n3HlA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56127},"main":"index.js","gitHead":"34cc3f234d581ac6847d430265762df59984e0ff","scripts":{"dev":"nodemon server.js","test":"jest","start":"node server.js"},"_npmUser":{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"},"_npmVersion":"11.6.0","description":"Multi-provider notification service with failover and scheduling","directories":{},"_nodeVersion":"22.17.0","dependencies":{"joi":"^17.9.2","cors":"^2.8.5","axios":"^1.5.0","dotenv":"^16.3.1","helmet":"^7.0.0","pusher":"^5.1.3","twilio":"^4.15.0","express":"^4.18.2","winston":"^3.10.0","node-cron":"^3.0.3","firebase-admin":"^11.10.1","moment-timezone":"^0.5.43","express-rate-limit":"^6.10.0","node-pushnotifications":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","nodemon":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/notification-provider_2.0.6_1758802866417_0.04661640974294379","host":"s3://npm-registry-packages-npm-production"}},"2.0.7":{"name":"@dhruvdobariya/notification-provider","version":"2.0.7","keywords":["notification","push","firebase","onesignal","pusher","scheduling","multi-provider"],"author":{"name":"Dhruv Dobariya"},"license":"MIT","_id":"@dhruvdobariya/notification-provider@2.0.7","maintainers":[{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"}],"bin":{"notification-service":"index.js"},"dist":{"shasum":"347ff15cac95b069f2b8ddf4c46230df80a45d2f","tarball":"https://registry.npmjs.org/@dhruvdobariya/notification-provider/-/notification-provider-2.0.7.tgz","fileCount":15,"integrity":"sha512-o6p4qYff8YtwDcdt5Wcb9kEao2qky2vk8zjKHkM0Acr5fpMlskCQj7IMqreGm0fIsjKI/YjKDpgVjrNTSc9kUw==","signatures":[{"sig":"MEUCIHUHIUZdBFVECnqvwgIUYP0j8Djh36z1ZcxF24tWN2fXAiEAtQr3DS2znx/w9Q41Vr/j2NXwf2NrPcGcuKDHDS6ZOrQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69933},"main":"index.js","gitHead":"34cc3f234d581ac6847d430265762df59984e0ff","scripts":{"dev":"nodemon server.js","test":"jest","start":"node server.js"},"_npmUser":{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"},"_npmVersion":"11.6.0","description":"Multi-provider notification service with failover and scheduling","directories":{},"_nodeVersion":"22.17.0","dependencies":{"joi":"^17.9.2","cors":"^2.8.5","axios":"^1.5.0","dotenv":"^16.3.1","helmet":"^7.0.0","pusher":"^5.1.3","twilio":"^4.15.0","express":"^4.18.2","winston":"^3.10.0","node-cron":"^3.0.3","firebase-admin":"^11.10.1","moment-timezone":"^0.5.43","express-rate-limit":"^6.10.0","node-pushnotifications":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","nodemon":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/notification-provider_2.0.7_1758803229870_0.25565168195502164","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@dhruvdobariya/notification-provider","version":"3.0.0","keywords":["notification","push","firebase","onesignal","pusher","scheduling","multi-provider"],"author":{"name":"Dhruv Dobariya"},"license":"MIT","_id":"@dhruvdobariya/notification-provider@3.0.0","maintainers":[{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"}],"bin":{"notification-service":"index.js"},"dist":{"shasum":"88693222d7c212a826c7b328c33138b969f40998","tarball":"https://registry.npmjs.org/@dhruvdobariya/notification-provider/-/notification-provider-3.0.0.tgz","fileCount":15,"integrity":"sha512-hhQ2i+YZkO0TIv96ORumVtHtI1XADwv3BW/JbO8EgaxR4HWsDcwDjWY9ur34p3bXXYutlGiy5f0N5CHbUCERvg==","signatures":[{"sig":"MEUCIQCT1RgZ1rNLA0cJ6vSMpkJiDg4L+0NR+CWkViw6yzDjywIgFx0kgqfK64508LsJGPFGPcsGiC6OgE+dfDVdXmUCjNY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69931},"main":"index.js","gitHead":"34cc3f234d581ac6847d430265762df59984e0ff","scripts":{"dev":"nodemon server.js","test":"jest","start":"node server.js"},"_npmUser":{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"},"_npmVersion":"11.6.0","description":"Multi-provider notification service with failover and scheduling","directories":{},"_nodeVersion":"22.17.0","dependencies":{"joi":"^17.9.2","cors":"^2.8.5","axios":"^1.5.0","dotenv":"^16.3.1","helmet":"^7.0.0","pusher":"^5.1.3","twilio":"^4.15.0","express":"^4.18.2","winston":"^3.10.0","node-cron":"^3.0.3","firebase-admin":"^11.10.1","moment-timezone":"^0.5.43","express-rate-limit":"^6.10.0","node-pushnotifications":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","nodemon":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/notification-provider_3.0.0_1758803322866_0.7954312776322656","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@dhruvdobariya/notification-provider","version":"3.0.1","description":"Multi-provider notification service with failover and scheduling","main":"index.js","bin":{"notification-service":"index.js"},"scripts":{"start":"node server.js","dev":"nodemon server.js","test":"jest"},"dependencies":{"express":"^4.18.2","firebase-admin":"^11.10.1","twilio":"^4.15.0","node-pushnotifications":"^3.0.2","axios":"^1.5.0","dotenv":"^16.3.1","joi":"^17.9.2","winston":"^3.10.0","helmet":"^7.0.0","cors":"^2.8.5","express-rate-limit":"^6.10.0","node-cron":"^3.0.3","moment-timezone":"^0.5.43","pusher":"^5.1.3"},"devDependencies":{"nodemon":"^3.0.1","jest":"^29.6.4"},"keywords":["notification","push","firebase","onesignal","pusher","scheduling","multi-provider"],"author":{"name":"Dhruv Dobariya"},"license":"MIT","_id":"@dhruvdobariya/notification-provider@3.0.1","gitHead":"34cc3f234d581ac6847d430265762df59984e0ff","_nodeVersion":"22.17.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-BTzaQorudnSCgsa1Dahb8d0RWDriMg1lhaVloxOmzrimGCxRgQVxn3EZHAccaK/dxDm9YTWWOHg5uSiJ537GeQ==","shasum":"501818e6a528fa339eb06a1b8fd16db87f774c52","tarball":"https://registry.npmjs.org/@dhruvdobariya/notification-provider/-/notification-provider-3.0.1.tgz","fileCount":15,"unpackedSize":60165,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIH9mNQJY6my/9fgn+KLHFQAfw0amQCUPjbLOjtlfAo+qAiEArICChX10VUH5pg9LprE+t542cvrgF6xkJokkIbUeufQ="}]},"_npmUser":{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"},"directories":{},"maintainers":[{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/notification-provider_3.0.1_1758881494590_0.3478626497928572"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-18T05:49:16.904Z","modified":"2025-09-26T10:11:35.004Z","1.0.0":"2025-09-18T05:49:17.125Z","1.1.1":"2025-09-18T06:58:02.126Z","1.1.3":"2025-09-18T07:00:16.309Z","2.0.0":"2025-09-25T11:56:18.465Z","2.0.1":"2025-09-25T12:00:11.388Z","2.0.2":"2025-09-25T12:01:47.620Z","2.0.3":"2025-09-25T12:03:41.111Z","2.0.4":"2025-09-25T12:06:28.117Z","2.0.5":"2025-09-25T12:10:27.051Z","2.0.6":"2025-09-25T12:21:06.610Z","2.0.7":"2025-09-25T12:27:10.040Z","3.0.0":"2025-09-25T12:28:43.038Z","3.0.1":"2025-09-26T10:11:34.831Z"},"author":{"name":"Dhruv Dobariya"},"license":"MIT","keywords":["notification","push","firebase","onesignal","pusher","scheduling","multi-provider"],"description":"Multi-provider notification service with failover and scheduling","maintainers":[{"name":"dhruvdobariya","email":"dhruvdobariya897@gmail.com"}],"readme":"﻿# Multi-Provider Notification Service\r\n\r\nA robust Node.js notification service that supports multiple providers (Firebase, OneSignal, Pusher) with automatic failover, scheduling, and bulk operations.\r\n\r\n## Features\r\n\r\n- **Multi-Provider Support**: Firebase FCM, OneSignal, and Pusher\r\n- **Automatic Failover**: Seamlessly switches between providers if one fails\r\n- **Scheduling**: Send notifications at specific times with timezone support\r\n- **Bulk Operations**: Send multiple notifications efficiently\r\n- **Rate Limiting**: Built-in protection against spam\r\n- **Validation**: Comprehensive input validation with detailed error messages\r\n- **Logging**: Structured logging with Winston\r\n- **RESTful API**: Complete REST API with Express.js\r\n- **Type Safety**: Joi schema validation for all inputs\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install @dhruvdobariya/notification-service\r\n```\r\n\r\n## Quick Start\r\n\r\n### Environment Setup\r\n\r\nCreate a `.env` file with your provider credentials:\r\n\r\n```env\r\n# Server Configuration\r\nPORT=3000\r\nNODE_ENV=development\r\nLOG_LEVEL=info\r\n\r\n# Firebase Configuration\r\nFIREBASE_PROJECT_ID=your-firebase-project-id\r\nFIREBASE_PRIVATE_KEY_ID=your-private-key-id\r\nFIREBASE_PRIVATE_KEY=\"-----BEGIN PRIVATE KEY-----\\nyour-private-key\\n-----END PRIVATE KEY-----\\n\"\r\nFIREBASE_CLIENT_EMAIL=your-service-account@your-project.iam.gserviceaccount.com\r\nFIREBASE_CLIENT_ID=your-client-id\r\n\r\n# OneSignal Configuration\r\nONESIGNAL_APP_ID=your-onesignal-app-id\r\nONESIGNAL_REST_API_KEY=your-onesignal-rest-api-key\r\n\r\n# Pusher Configuration\r\nPUSHER_APP_ID=your-pusher-app-id\r\nPUSHER_KEY=your-pusher-key\r\nPUSHER_SECRET=your-pusher-secret\r\nPUSHER_CLUSTER=your-pusher-cluster\r\n\r\n# Provider Preferences\r\nFIREBASE_ENABLED=true\r\nONESIGNAL_ENABLED=true\r\nPUSHER_ENABLED=true\r\n```\r\n\r\n### Basic Usage\r\n\r\n```javascript\r\nconst {\r\n  firebase,\r\n  onesignal,\r\n  pusher,\r\n  service,\r\n  utils\r\n} = require('@dhruvdobariya/notification-service');\r\n\r\n// Send via specific provider\r\nawait firebase.send({\r\n  title: \"Welcome!\",\r\n  body: \"Thank you for joining our service\",\r\n  token: \"firebase-device-token\"\r\n});\r\n\r\n// Send with automatic failover\r\nawait service.sendNotification({\r\n  title: \"Important Update\",\r\n  body: \"New features are now available\",\r\n  token: \"firebase-token\",\r\n  playerIds: [\"onesignal-player-id\"],\r\n  channel: \"updates\"\r\n});\r\n```\r\n\r\n### Express Server Setup\r\n\r\n```javascript\r\nconst express = require('express');\r\nconst notificationRoutes = require('@dhruvdobariya/notification-service/routes/notificationRoutes');\r\n\r\nconst app = express();\r\napp.use(express.json());\r\napp.use('/api/notifications', notificationRoutes);\r\n\r\napp.listen(3000, () => {\r\n  console.log('Notification service running on port 3000');\r\n});\r\n```\r\n\r\n## API Endpoints\r\n\r\n### Send Immediate Notification\r\n\r\n```bash\r\nPOST /api/notifications/send\r\n```\r\n\r\n```json\r\n{\r\n  \"notification\": {\r\n    \"title\": \"Welcome!\",\r\n    \"body\": \"Thank you for joining our service\",\r\n    \"image\": \"https://example.com/image.jpg\",\r\n    \"data\": { \"type\": \"welcome\", \"userId\": \"123\" },\r\n    \"token\": \"firebase-token\",\r\n    \"playerIds\": [\"onesignal-player-id\"],\r\n    \"channel\": \"user-notifications\"\r\n  },\r\n  \"options\": {\r\n    \"provider\": \"firebase\",\r\n    \"enableFailover\": true\r\n  }\r\n}\r\n```\r\n\r\n### Schedule Notification\r\n\r\n```json\r\n{\r\n  \"notification\": {\r\n    \"title\": \"Daily Reminder\",\r\n    \"body\": \"Don't forget to check your dashboard!\"\r\n  },\r\n  \"schedule\": {\r\n    \"time\": \"09:00\",\r\n    \"timezone\": \"America/New_York\",\r\n    \"frequency\": \"daily\"\r\n  }\r\n}\r\n```\r\n\r\n### Send Bulk Notifications\r\n\r\n```bash\r\nPOST /api/notifications/send/bulk\r\n```\r\n\r\n```json\r\n{\r\n  \"notifications\": [\r\n    {\r\n      \"title\": \"Notification 1\",\r\n      \"body\": \"First message\",\r\n      \"token\": \"firebase-token-1\"\r\n    },\r\n    {\r\n      \"title\": \"Notification 2\",\r\n      \"body\": \"Second message\",\r\n      \"token\": \"firebase-token-2\"\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\n### Provider Management\r\n\r\n```bash\r\n# Get available providers\r\nGET /api/notifications/providers\r\n\r\n# Enable/disable provider\r\nPATCH /api/notifications/providers/firebase\r\n{\r\n  \"enabled\": false\r\n}\r\n```\r\n\r\n### Scheduled Jobs Management\r\n\r\n```bash\r\n# Get all scheduled jobs\r\nGET /api/notifications/scheduled\r\n\r\n# Get specific job\r\nGET /api/notifications/scheduled/{jobId}\r\n\r\n# Cancel scheduled job\r\nDELETE /api/notifications/scheduled/{jobId}\r\n```\r\n\r\n### Validation\r\n\r\n```bash\r\nPOST /api/notifications/validate\r\n```\r\n\r\n```json\r\n{\r\n  \"notification\": {\r\n    \"title\": \"Test\",\r\n    \"body\": \"Test message\",\r\n    \"token\": \"firebase-token\"\r\n  }\r\n}\r\n```\r\n\r\n## Notification Schema\r\n\r\n### Basic Structure\r\n\r\n```javascript\r\n{\r\n  title: \"Required - Notification title (max 200 chars)\",\r\n  body: \"Required - Notification body (max 2000 chars)\",\r\n  image: \"Optional - Image URL\",\r\n  data: { /* Optional - Custom data object */ }\r\n}\r\n```\r\n\r\n### Provider-Specific Fields\r\n\r\n#### Firebase\r\n```javascript\r\n{\r\n  token: \"Single device token\",\r\n  tokens: [\"array\", \"of\", \"device\", \"tokens\"], // Max 500\r\n  topic: \"topic-name\",\r\n  android: { /* Android-specific options */ },\r\n  apns: { /* iOS-specific options */ },\r\n  webpush: { /* Web push options */ }\r\n}\r\n```\r\n\r\n#### OneSignal\r\n```javascript\r\n{\r\n  playerIds: [\"player-id-1\", \"player-id-2\"], // Max 2000\r\n  segments: [\"All\", \"Active Users\"] // User segments\r\n}\r\n```\r\n\r\n#### Pusher\r\n```javascript\r\n{\r\n  channel: \"channel-name\", // Default: \"notifications\"\r\n  event: \"event-name\" // Default: \"new-notification\"\r\n}\r\n```\r\n\r\n## Programmatic Usage\r\n\r\n### Individual Providers\r\n\r\n```javascript\r\nconst { firebase, onesignal, pusher } = require('@dhruvdobariya/notification-service');\r\n\r\n// Firebase\r\nconst firebaseResult = await firebase.send({\r\n  title: \"Firebase Notification\",\r\n  body: \"Sent via Firebase FCM\",\r\n  token: \"device-token\"\r\n});\r\n\r\n// OneSignal\r\nconst onesignalResult = await onesignal.send({\r\n  title: \"OneSignal Notification\",\r\n  body: \"Sent via OneSignal\",\r\n  playerIds: [\"player-id\"]\r\n});\r\n\r\n// Pusher\r\nconst pusherResult = await pusher.send({\r\n  title: \"Pusher Notification\",\r\n  body: \"Sent via Pusher\",\r\n  channel: \"user-updates\"\r\n});\r\n```\r\n\r\n### Unified Service\r\n\r\n```javascript\r\nconst { service } = require('@dhruvdobariya/notification-service');\r\n\r\n// Send with automatic failover\r\nconst result = await service.sendNotification({\r\n  title: \"Multi-Provider Notification\",\r\n  body: \"Will try providers in priority order\",\r\n  token: \"firebase-token\",\r\n  playerIds: [\"onesignal-player-id\"],\r\n  channel: \"pusher-channel\"\r\n});\r\n\r\n// Bulk sending\r\nconst bulkResult = await service.sendBulkNotifications([\r\n  { title: \"Bulk 1\", body: \"Message 1\", token: \"token1\" },\r\n  { title: \"Bulk 2\", body: \"Message 2\", token: \"token2\" }\r\n]);\r\n\r\n// Get provider status\r\nconst providers = service.getAvailableProviders();\r\nconsole.log(providers);\r\n```\r\n\r\n### Utility Functions\r\n\r\n```javascript\r\nconst { utils } = require('@dhruvdobariya/notification-service');\r\n\r\n// Check configuration\r\nconst configStatus = utils.getConfiguredProviders();\r\nconsole.log(`${configStatus.enabledCount}/${configStatus.totalProviders} providers configured`);\r\n\r\n// Validate environment\r\nconst envValidation = utils.validateEnvironment();\r\nif (!envValidation.valid) {\r\n  console.error('Missing env vars:', envValidation.missing);\r\n}\r\n```\r\n\r\n## Scheduling\r\n\r\n### Time Formats\r\n- **Time**: 24-hour format (HH:MM), e.g., \"09:30\", \"14:15\"\r\n- **Timezone**: IANA timezone names, e.g., \"America/New_York\", \"Europe/London\"\r\n- **Frequency**: \"once\" (default) or \"daily\"\r\n\r\n### Examples\r\n\r\n```javascript\r\n// One-time notification\r\n{\r\n  \"schedule\": {\r\n    \"time\": \"15:30\",\r\n    \"timezone\": \"America/New_York\",\r\n    \"frequency\": \"once\"\r\n  }\r\n}\r\n\r\n// Daily recurring notification\r\n{\r\n  \"schedule\": {\r\n    \"time\": \"09:00\",\r\n    \"timezone\": \"UTC\",\r\n    \"frequency\": \"daily\"\r\n  }\r\n}\r\n```\r\n\r\n## Error Handling\r\n\r\nThe service provides comprehensive error handling with detailed error messages:\r\n\r\n```javascript\r\n{\r\n  \"success\": false,\r\n  \"message\": \"Validation error\",\r\n  \"errors\": [\r\n    {\r\n      \"field\": \"notification.title\",\r\n      \"message\": \"\\\"title\\\" is required\",\r\n      \"value\": undefined\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\n## Logging\r\n\r\nStructured logging with Winston:\r\n\r\n- **Error logs**: `logs/error.log`\r\n- **Combined logs**: `logs/combined.log`\r\n- **Notification logs**: `logs/notifications.log`\r\n\r\n## Rate Limiting\r\n\r\nBuilt-in rate limiting (100 requests per 15 minutes per IP) to prevent abuse.\r\n\r\n## Security\r\n\r\n- **Helmet.js**: Security headers\r\n- **CORS**: Cross-origin resource sharing\r\n- **Input validation**: Joi schema validation\r\n- **Error sanitization**: Prevents sensitive data leakage\r\n\r\n## Health Check\r\n\r\n```bash\r\nGET /health\r\n```\r\n\r\nReturns service status and scheduler information.\r\n\r\n## Provider Priority\r\n\r\nProviders are attempted in this order:\r\n1. Firebase (priority 1)\r\n2. OneSignal (priority 2)\r\n3. Pusher (priority 3)\r\n\r\nThe service stops on the first successful delivery.\r\n\r\n## Requirements\r\n\r\n- Node.js 14+\r\n- Active accounts with desired providers\r\n- Valid environment variables\r\n\r\n## Contributing\r\n\r\n1. Fork the repository\r\n2. Create a feature branch\r\n3. Make your changes\r\n4. Add tests\r\n5. Submit a pull request\r\n\r\n## License\r\n\r\nMIT License - see LICENSE file for details.\r\n\r\n## Support\r\n\r\nFor issues and support:\r\n- GitHub Issues: [Create an issue](https://github.com/dhruvdobariya/notification-service/issues)\r\n- Documentation: Check the `/docs` folder for detailed guides\r\n- Examples: See `/examples` folder for implementation examples\r\n\r\n## Changelog\r\n\r\n### v1.0.0\r\n- Initial release with multi-provider support\r\n- Firebase, OneSignal, and Pusher integration\r\n- Scheduling and bulk operations\r\n- RESTful API with validation\r\n\r\n---\r\n\r\n**Author**: Dhruv Dobariya  \r\n**Version**: 3.0.0 \r\n**Keywords**: notification, push, firebase, onesignal, pusher, scheduling, multi-provider\r\n","readmeFilename":"README.md"}