{"_id":"@duydatpham/notifme-sdk","_rev":"7-8ddbce216803c9c5aaa7fa26411afd2a","name":"@duydatpham/notifme-sdk","dist-tags":{"latest":"1.10.6"},"versions":{"1.10.0":{"name":"@duydatpham/notifme-sdk","version":"1.10.0","description":"Unified notification SDK (emails, SMS, pushes, webpushes...) for Node.js","main":"lib/index.js","repository":{"type":"git","url":"git+https://github.com/notifme/notifme-sdk.git"},"author":{"name":"Notif.me"},"license":"MIT","scripts":{"build":"yarn run clean && babel src --out-dir lib && yarn run build-dot-flow","build-dot-flow":"grep -rwl './src' -e 'export type' | while read filepath; do cp $filepath `echo $filepath | sed 's/\\/src\\//\\/lib\\//g'`.flow; done","clean":"rm -rf lib/ coverage/","demo":"notification-catcher & babel-node examples/with-notification-catcher.js && printf '\n>>> Please visit http://localhost:1080 <<<\n\n'","dev":"nodemon -e js -r babel-register examples/with-notification-catcher.js","lint":"yarn run flow && standard","lint-fix":"standard --fix","run-catcher":"notification-catcher","prepublish":"yarn run build","size":"echo 'Notif.me build size:' && du -hs lib/ && cost-of-modules --yarn","test":"yarn run lint && yarn run testonly","testonly":"jest"},"dependencies":{"babel-runtime":"6.26.0","form-data":"3.0.0","https-proxy-agent":"5.0.0","node-fetch":"2.6.1","node-pushnotifications":"1.4.1","nodemailer":"6.4.12","web-push":"3.4.4","winston":"3.3.3"},"devDependencies":{"babel-cli":"6.26.0","babel-eslint":"10.1.0","babel-jest":"26.3.0","babel-plugin-transform-flow-strip-types":"6.22.0","babel-plugin-transform-runtime":"6.23.0","babel-preset-env":"1.7.0","babel-preset-stage-2":"6.24.1","babel-register":"6.26.0","cost-of-modules":"1.0.1","flow-bin":"0.89.0","jest":"23.6.0","nodemon":"2.0.4","notification-catcher":"1.2.1","regenerator-runtime":"0.13.7","standard":"14.3.4"},"standard":{"parser":"babel-eslint","ignore":["**/node_modules/**","**/lib/**","**/flow/**"]},"jest":{"testEnvironment":"node","collectCoverage":true,"coverageReporters":["text-summary","html","lcov"],"collectCoverageFrom":["**/src/**/*.js","!**/src/providers/push/**","!**/src/util/**"],"coverageThreshold":{"global":{"branches":100,"functions":100,"lines":100,"statements":100}}},"greenkeeper":{"ignore":["flow-bin"]},"bugs":{"url":"https://github.com/notifme/notifme-sdk/issues"},"homepage":"https://github.com/notifme/notifme-sdk#readme","directories":{"doc":"docs","example":"examples","lib":"lib"},"gitHead":"b1911b7f12b11d13f4feb0c261459769499078e4","_id":"@duydatpham/notifme-sdk@1.10.0","_nodeVersion":"10.22.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-xwTBc4PkFoSidiqbvnVWWSdh7SxzzXT+lUIWpjDucRGTFCcFqO4ovyirVyMsTTOEd+zZsgJCCKH4OXs8r+rYIQ==","shasum":"a93a93051a6d7992067bfbec2e3ea7462a6700c1","tarball":"https://registry.npmjs.org/@duydatpham/notifme-sdk/-/notifme-sdk-1.10.0.tgz","fileCount":76,"unpackedSize":229326,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfq4oNCRA9TVsSAnZWagAARaIP/1KCR4ONF815D5V1maU3\ntnTelze98TwansHDpdoXVHYPEp8DWIuCDZW128PD+hqoMHHU5R3u7W4WjRqc\n72X798tJLjKcQXNvDJGECbEKujdQ6mPvxidzBCdb5fvYxgr5oj2/+MLCjrRT\nDNnthAqKjcZ/wTa/mCtTms197zvOwIREQDQEIBd9yKBLW4nDht1+6w1vM+BC\ns1As7jzSysN6Dfr/MJCJ1ZcpBUT/VyvPkKGjA0DO1H39uF3glL/wreaC+XYi\noG50vkY4PFvDPDBlHXNDoqmOh1Yi1X+IFVhqGn/GTJjSkUp2NRD4lSLpsBih\neTbM3d1uBQUOje8IQQbLL6Nx3iFH9mtpQ1xSStoqrKzzrKrZCFVlBHedSYe7\nAhtbt5aE6me9N8MZ84lcvZyTloqvYdZxvQ+4AgSdTkjUJIMOEQSPnuF4sy8J\nFwx4qtLF07oDlr7htqfXXvsum5XaFJZz7orE6qu/tNhUWWt5jjaSZZ79GxzB\n4CCfMRebVZ7KYNYxMRBb5542VVM+FsSy/kZUePPtK4gvzpu27eZr7KRQJlHO\nVZlFnOycNMBdlIDMFkLtPG3ZRPCj7mcohwUx/VY4KX6JExMaAOMWNnsaybcm\n7hSz2HfrkQn77VLYq/T4xIXXQMGVk26IaoIooJC7ptFs5ZRY5XOALamOrjef\nviqa\r\n=AQn9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAzDDMRlL+g2yodZA3+jJmIPQ05HqwJ9QDDz3N/0dZQyAiBIYnTUOmej46Vqo5V4kJ4g8cID7+y5ADfIjN7k5/1/XA=="}]},"_npmUser":{"name":"duydatpham","email":"duydatpham@gmail.com"},"maintainers":[{"name":"duydatpham","email":"duydatpham@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/notifme-sdk_1.10.0_1605077517367_0.34386476904170116"},"_hasShrinkwrap":false},"1.10.1":{"name":"@duydatpham/notifme-sdk","version":"1.10.1","description":"Unified notification SDK (emails, SMS, pushes, webpushes...) for Node.js","main":"lib/index.js","repository":{"type":"git","url":"git+https://github.com/duydatpham/notifme-sdk.git"},"author":{"name":"Notif.me"},"license":"MIT","scripts":{"build":"yarn run clean && babel src --out-dir lib && yarn run build-dot-flow","build-dot-flow":"grep -rwl './src' -e 'export type' | while read filepath; do cp $filepath `echo $filepath | sed 's/\\/src\\//\\/lib\\//g'`.flow; done","clean":"rm -rf lib/ coverage/","demo":"notification-catcher & babel-node examples/with-notification-catcher.js && printf '\n>>> Please visit http://localhost:1080 <<<\n\n'","dev":"nodemon -e js -r babel-register examples/with-notification-catcher.js","lint":"yarn run flow && standard","lint-fix":"standard --fix","run-catcher":"notification-catcher","prepublish":"yarn run build","size":"echo 'Notif.me build size:' && du -hs lib/ && cost-of-modules --yarn","test":"yarn run lint && yarn run testonly","testonly":"jest"},"dependencies":{"babel-runtime":"6.26.0","form-data":"3.0.0","https-proxy-agent":"5.0.0","node-fetch":"2.6.1","node-pushnotifications":"1.4.1","nodemailer":"6.4.12","web-push":"3.4.4","winston":"3.3.3"},"devDependencies":{"babel-cli":"6.26.0","babel-eslint":"10.1.0","babel-jest":"26.3.0","babel-plugin-transform-flow-strip-types":"6.22.0","babel-plugin-transform-runtime":"6.23.0","babel-preset-env":"1.7.0","babel-preset-stage-2":"6.24.1","babel-register":"6.26.0","cost-of-modules":"1.0.1","flow-bin":"0.89.0","jest":"23.6.0","nodemon":"2.0.4","notification-catcher":"1.2.1","regenerator-runtime":"0.13.7","standard":"14.3.4"},"standard":{"parser":"babel-eslint","ignore":["**/node_modules/**","**/lib/**","**/flow/**"]},"jest":{"testEnvironment":"node","collectCoverage":true,"coverageReporters":["text-summary","html","lcov"],"collectCoverageFrom":["**/src/**/*.js","!**/src/providers/push/**","!**/src/util/**"],"coverageThreshold":{"global":{"branches":100,"functions":100,"lines":100,"statements":100}}},"greenkeeper":{"ignore":["flow-bin"]},"bugs":{"url":"https://github.com/duydatpham/notifme-sdk/issues"},"homepage":"https://github.com/duydatpham/notifme-sdk#readme","directories":{"doc":"docs","example":"examples","lib":"lib"},"gitHead":"3c6c6881ae784424d0d7ffca1dabafc38296be39","_id":"@duydatpham/notifme-sdk@1.10.1","_nodeVersion":"10.22.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-EHWla1Cbffz6ZnxGMuatUWH0Fufl7MNhV0sMYNMKI+Nhgls6SBcgxGawYwz5/1nGqH7HF+6UHRdtmWguvEWXzg==","shasum":"e92c4b67c79b7fc7b2133508e269efcfbbb698f4","tarball":"https://registry.npmjs.org/@duydatpham/notifme-sdk/-/notifme-sdk-1.10.1.tgz","fileCount":76,"unpackedSize":229335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfq4swCRA9TVsSAnZWagAAWn4QAI1e4Uct0juVMP2BpcAZ\nyq/0vcbR9gZhzbkmqNpzvB8+FxftLk5X8ZxLDKQ6s1UIIsUxWpovMlGtnBp+\nuPhbYjWzSmvjtFnJcE/GjevyrG/wD/9EJ3U38GQZAe4UQsy2mn8+sI/fflL+\nTckg78PEi6FC2aCvr+H3vqxBbV5YVqoYjTGwc3WbNiNYowgErHBo7/HBtlNG\n0cIjbuD2pjnELiQQLFSlcnoWM/u7PzHRVjDfKB6jvjODdcIsu+5/tjhw6wGd\neMh+o6uy+ME5Tbn66S911yH+Yk4mJfdbybPhTR0zcCnmSFamyxCX8wQqZ25w\nVq6vonJfnOq8ET9ZedZtQnIgc2Au2BmV+Shfer2hFoDrgGjUC0yhmIfBzT/h\naGmm3IeMU+CtLfv41Xhkn7YeTM5W7eBKDsh/0YNi0DNaia/2mTy6/XMKmTxd\nb6jb7hb8hdfwa3BLrlsnq5QGvZgWeDaRPpDA10pzCYDLwCQc5emYsUcx/wuh\nWsvGSuqzjcZQlUha2kaI7UgcCyAF0kL1bVlvmswyWvRxvP/1/zwKBv3f5zpg\nr0IKsb3iAZ9/wm6PoH1IPHENX2o177WJC4D6ZUKc3Q9oY5cdQWNgLH6XGBTO\nJbZx7IuElbuR+I6DVKpiThlhrnL13kcK6UhqmS9enouuerGNe3KMWiziltW8\nBqwv\r\n=PceC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCy9XtvpKIDLaVjNln4c6HnRSu2W0aAEPUhL9ax1mtSYAIgCia2jFcrbbZXnDxbrsznUUsw+8lx26tKNymSDCefMZQ="}]},"_npmUser":{"name":"duydatpham","email":"duydatpham@gmail.com"},"maintainers":[{"name":"duydatpham","email":"duydatpham@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/notifme-sdk_1.10.1_1605077807587_0.8670040659185023"},"_hasShrinkwrap":false},"1.10.2":{"name":"@duydatpham/notifme-sdk","version":"1.10.2","description":"Unified notification SDK (emails, SMS, pushes, webpushes...) for Node.js","main":"lib/index.js","repository":{"type":"git","url":"git+https://github.com/duydatpham/notifme-sdk.git"},"author":{"name":"Notif.me"},"license":"MIT","scripts":{"build":"yarn run clean && babel src --out-dir lib && yarn run build-dot-flow","build-dot-flow":"grep -rwl './src' -e 'export type' | while read filepath; do cp $filepath `echo $filepath | sed 's/\\/src\\//\\/lib\\//g'`.flow; done","clean":"rm -rf lib/ coverage/","demo":"notification-catcher & babel-node examples/with-notification-catcher.js && printf '\n>>> Please visit http://localhost:1080 <<<\n\n'","dev":"nodemon -e js -r babel-register examples/with-notification-catcher.js","lint":"yarn run flow && standard","lint-fix":"standard --fix","run-catcher":"notification-catcher","prepublish":"yarn run build","size":"echo 'Notif.me build size:' && du -hs lib/ && cost-of-modules --yarn","test":"yarn run lint && yarn run testonly","testonly":"jest"},"dependencies":{"babel-runtime":"6.26.0","form-data":"3.0.0","https-proxy-agent":"5.0.0","node-fetch":"2.6.1","node-pushnotifications":"1.4.1","nodemailer":"6.4.12","web-push":"3.4.4","winston":"3.3.3"},"devDependencies":{"babel-cli":"6.26.0","babel-eslint":"10.1.0","babel-jest":"26.3.0","babel-plugin-transform-flow-strip-types":"6.22.0","babel-plugin-transform-runtime":"6.23.0","babel-preset-env":"1.7.0","babel-preset-stage-2":"6.24.1","babel-register":"6.26.0","cost-of-modules":"1.0.1","flow-bin":"0.89.0","jest":"23.6.0","nodemon":"2.0.4","notification-catcher":"1.2.1","regenerator-runtime":"0.13.7","standard":"14.3.4"},"standard":{"parser":"babel-eslint","ignore":["**/node_modules/**","**/lib/**","**/flow/**"]},"jest":{"testEnvironment":"node","collectCoverage":true,"coverageReporters":["text-summary","html","lcov"],"collectCoverageFrom":["**/src/**/*.js","!**/src/providers/push/**","!**/src/util/**"],"coverageThreshold":{"global":{"branches":100,"functions":100,"lines":100,"statements":100}}},"greenkeeper":{"ignore":["flow-bin"]},"bugs":{"url":"https://github.com/duydatpham/notifme-sdk/issues"},"homepage":"https://github.com/duydatpham/notifme-sdk#readme","directories":{"doc":"docs","example":"examples","lib":"lib"},"gitHead":"7c16a0cefc005780d3f0e250c8b17c153991929c","_id":"@duydatpham/notifme-sdk@1.10.2","_nodeVersion":"10.22.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-PGGLFDXrDQd44aAmJRMAgZUZB7UYGpW7p/hB2ymZMBmraKrfnQDzZs3puJDyA7XRVJ/Gdn1e5QhInonoS4NJHA==","shasum":"4a28432dc25cecd645ed7473b74ec6e9ad8bd5d0","tarball":"https://registry.npmjs.org/@duydatpham/notifme-sdk/-/notifme-sdk-1.10.2.tgz","fileCount":76,"unpackedSize":229021,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfq6aTCRA9TVsSAnZWagAA3UsQAICx49SopU1asjN2poO1\nil6Jhe/qisIFVOFfp14e9fcQA1yeqq5DjPVegoNBeBeSwXeP1hFe/bjA2Oif\nnkYl7OFhZpbTTaK4RSOrXA6dOAqLTd/bPu9xRxj2IssvoUwsFQOWPKQUwqpz\n0IUp+OOwyog2iFDbvFS3AnnJ8lXaS26Iu2SVO5qbIteXe25Mc06FKprJnAX/\nQXkSKB4g/DUotd3Xg5duUYstfe1V+X0Fab5rHZZ/81j1nATLn6SyUCuF9mje\nEdHAz8CD/Mlih8mpn9lNxVvpzEGWZq9obg7mroBhPm3YDaZssZSNfncLdjgq\n5Yw43e3W+kdjTwGlCp2ZYsn8HDzJAo1wNQgI+JHnDnjxLtfBKwwbkypC4u+N\n2rFkskyR8ePkwWYWgx1hfMe7hwlbzrjoYIUHcY4Zes9KY+y0BvijhPQuNc9h\nV3mQzuHQVL0CPmnbDU2JYXwno00lawriM8d0QArx7VwhTs7uAKZyrQn1ydYV\nYqGF3vN9sMUkM01XRZcyOwz+04MopntvuTVB31tHFoJhzdN2hsb2LhWpyxwt\nCPTwJplJgdjUl2ggNpd4zwR2LglR6wqjlOvPtJ/usB4211HP3PhDQ18f9K2m\nhrhcJAZZOjcyhRbKHOX/+S/XYuAoLAL8yQmD1oIIFFiiMioatNzxC/av5bL9\n7NYh\r\n=Ji8+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAhq7Fys079MoFetlW/fTa7R9qD7wfh92yRn6841Ba92AiBUQ0l2L90A5KkZMirqmWWXEcWDz1fMU+BQYyh3VlNcRw=="}]},"_npmUser":{"name":"duydatpham","email":"duydatpham@gmail.com"},"maintainers":[{"name":"duydatpham","email":"duydatpham@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/notifme-sdk_1.10.2_1605084818666_0.39165503359213427"},"_hasShrinkwrap":false},"1.10.3":{"name":"@duydatpham/notifme-sdk","version":"1.10.3","description":"Unified notification SDK (emails, SMS, pushes, webpushes...) for Node.js","main":"lib/index.js","repository":{"type":"git","url":"git+https://github.com/duydatpham/notifme-sdk.git"},"author":{"name":"Notif.me"},"license":"MIT","scripts":{"build":"yarn run clean && babel src --out-dir lib && yarn run build-dot-flow","build-dot-flow":"grep -rwl './src' -e 'export type' | while read filepath; do cp $filepath `echo $filepath | sed 's/\\/src\\//\\/lib\\//g'`.flow; done","clean":"rm -rf lib/ coverage/","demo":"notification-catcher & babel-node examples/with-notification-catcher.js && printf '\n>>> Please visit http://localhost:1080 <<<\n\n'","dev":"nodemon -e js -r babel-register examples/with-notification-catcher.js","lint":"yarn run flow && standard","lint-fix":"standard --fix","run-catcher":"notification-catcher","prepublish":"yarn run build","size":"echo 'Notif.me build size:' && du -hs lib/ && cost-of-modules --yarn","test":"yarn run lint && yarn run testonly","testonly":"jest"},"dependencies":{"babel-runtime":"6.26.0","form-data":"3.0.0","https-proxy-agent":"5.0.0","node-fetch":"2.6.1","node-pushnotifications":"1.4.1","nodemailer":"6.4.12","web-push":"3.4.4","winston":"3.3.3"},"devDependencies":{"babel-cli":"6.26.0","babel-eslint":"10.1.0","babel-jest":"26.3.0","babel-plugin-transform-flow-strip-types":"6.22.0","babel-plugin-transform-runtime":"6.23.0","babel-preset-env":"1.7.0","babel-preset-stage-2":"6.24.1","babel-register":"6.26.0","cost-of-modules":"1.0.1","flow-bin":"0.89.0","jest":"23.6.0","nodemon":"2.0.4","notification-catcher":"1.2.1","regenerator-runtime":"0.13.7","standard":"14.3.4"},"standard":{"parser":"babel-eslint","ignore":["**/node_modules/**","**/lib/**","**/flow/**"]},"jest":{"testEnvironment":"node","collectCoverage":true,"coverageReporters":["text-summary","html","lcov"],"collectCoverageFrom":["**/src/**/*.js","!**/src/providers/push/**","!**/src/util/**"],"coverageThreshold":{"global":{"branches":100,"functions":100,"lines":100,"statements":100}}},"greenkeeper":{"ignore":["flow-bin"]},"bugs":{"url":"https://github.com/duydatpham/notifme-sdk/issues"},"homepage":"https://github.com/duydatpham/notifme-sdk#readme","directories":{"doc":"docs","example":"examples","lib":"lib"},"gitHead":"7aa53969a7d17560cd22a72004028f2594d61d97","_id":"@duydatpham/notifme-sdk@1.10.3","_nodeVersion":"10.22.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-PlR7I8YzFznpAHypXMcUfPg+uxfVaB+Y/WYIsIccXNiRNEKsciTCU8biD1CwJXROYd6LTumfqeX509NlB7okWw==","shasum":"5c0c2698b927162365c71f23e3fb5651fcad1ad0","tarball":"https://registry.npmjs.org/@duydatpham/notifme-sdk/-/notifme-sdk-1.10.3.tgz","fileCount":76,"unpackedSize":229022,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftOA8CRA9TVsSAnZWagAAVA4P+wQV9OYMmJWx2EMxAOFW\naCK630kMCW1aYGNR1UI5xedFDo+HZwo7Evy7rh0ZijLsqlT7BKZtD0Du6Xko\ndbTahSg12fpXwrlc4q7PsM2GnP43BG5f9Ic2I3A4m2NQgjVEi4pUWoabn/1H\nEHaCMfCyJ5QkbPzLb2+Wy7pMS8Cbi7UPl/nf5nXimTN8+bd2k99RTfYsg3cy\nQqjz0Oa5KOX6Odt+8BoBJXqYKvbD9rJGWZECKoCIqYdk78qvK0kdx4hRmmUL\nSzBiW1OPkLUjGKvvb1egs/GUtaAM7wq89O+X+J/q8+9QpB3zskTqRB7bQdcS\nwlaAK67t6Gj4dpoW+BxIEkVAPMEoYfBCfmOHh4/zhkJhAw63JYxM7yMWWfaJ\nFKgNOdoNenkL2FqZeQym6htRlXSv3RjI81aetR0SqWm+wclsmOJZI0YQbQSO\nEtvxS9RCqDwVpgj2yTrkQNOrHeAd7jsDyRlY8KOc9NfEMI1ZqkQWlaXHoIT8\nDE4YgZQRKUeX+IlbY0U7UCeA+AQuTeg0R3y7iCsyLYmfJHlJCisrvzVxiPbN\nkJtUhJxFapE4SO2cnVeBFFDnCeUMNQg/3qUmuLbNxgcd0mGX+o6T51OIi/tv\nm3/lcHkLwLDzGMJxQF7nrjDSOfNqBrt9qt+SNzioeUrQBt209cMBqV+vX8tU\n9QNe\r\n=xevC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB63gIS6imLbcrBDn8638NFJaLDD7Cj5/83kJWXMXxRuAiEAh1tMGqh2SC3C4XlCEx8l4/wmybhFna3ZsS+Eom38jXo="}]},"_npmUser":{"name":"duydatpham","email":"duydatpham@gmail.com"},"maintainers":[{"name":"duydatpham","email":"duydatpham@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/notifme-sdk_1.10.3_1605689403991_0.5320953975186307"},"_hasShrinkwrap":false},"1.10.4":{"name":"@duydatpham/notifme-sdk","version":"1.10.4","description":"Unified notification SDK (emails, SMS, pushes, webpushes...) for Node.js","main":"lib/index.js","repository":{"type":"git","url":"git+https://github.com/duydatpham/notifme-sdk.git"},"author":{"name":"Notif.me"},"license":"MIT","scripts":{"build":"yarn run clean && babel src --out-dir lib && yarn run build-dot-flow","build-dot-flow":"grep -rwl './src' -e 'export type' | while read filepath; do cp $filepath `echo $filepath | sed 's/\\/src\\//\\/lib\\//g'`.flow; done","clean":"rm -rf lib/ coverage/","demo":"notification-catcher & babel-node examples/with-notification-catcher.js && printf '\n>>> Please visit http://localhost:1080 <<<\n\n'","dev":"nodemon -e js -r babel-register examples/with-notification-catcher.js","lint":"yarn run flow && standard","lint-fix":"standard --fix","run-catcher":"notification-catcher","prepublish":"yarn run build","size":"echo 'Notif.me build size:' && du -hs lib/ && cost-of-modules --yarn","test":"yarn run lint && yarn run testonly","testonly":"jest"},"dependencies":{"babel-runtime":"6.26.0","form-data":"3.0.0","https-proxy-agent":"5.0.0","node-fetch":"2.6.1","node-pushnotifications":"1.4.1","nodemailer":"6.4.12","web-push":"3.4.4","winston":"3.3.3"},"devDependencies":{"babel-cli":"6.26.0","babel-eslint":"10.1.0","babel-jest":"26.3.0","babel-plugin-transform-flow-strip-types":"6.22.0","babel-plugin-transform-runtime":"6.23.0","babel-preset-env":"1.7.0","babel-preset-stage-2":"6.24.1","babel-register":"6.26.0","cost-of-modules":"1.0.1","flow-bin":"0.89.0","jest":"23.6.0","nodemon":"2.0.4","notification-catcher":"1.2.1","regenerator-runtime":"0.13.7","standard":"14.3.4"},"standard":{"parser":"babel-eslint","ignore":["**/node_modules/**","**/lib/**","**/flow/**"]},"jest":{"testEnvironment":"node","collectCoverage":true,"coverageReporters":["text-summary","html","lcov"],"collectCoverageFrom":["**/src/**/*.js","!**/src/providers/push/**","!**/src/util/**"],"coverageThreshold":{"global":{"branches":100,"functions":100,"lines":100,"statements":100}}},"greenkeeper":{"ignore":["flow-bin"]},"bugs":{"url":"https://github.com/duydatpham/notifme-sdk/issues"},"homepage":"https://github.com/duydatpham/notifme-sdk#readme","directories":{"doc":"docs","example":"examples","lib":"lib"},"gitHead":"ee6cd001e397b1e7ded841a1d7ca1376bae25d1a","_id":"@duydatpham/notifme-sdk@1.10.4","_nodeVersion":"10.22.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-6NWdJh5s6xnRehKtGTGiZYlPTXIvkv3m8peuM3TQXI/FIgoGp5jlUqM4b2PiSk8omiqwRwte1Je7StDKxCvrkQ==","shasum":"5918c06a5d94af9709fddf81d8c426f94b391e3f","tarball":"https://registry.npmjs.org/@duydatpham/notifme-sdk/-/notifme-sdk-1.10.4.tgz","fileCount":76,"unpackedSize":229023,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftOmdCRA9TVsSAnZWagAAxy0P/iF3SlKxn13tgALYJMMg\nhCEwjwKkl+FIDSY3Exd/q9rGvTRd1A3e8kVwx59hJ8gUZ8lFwu5rMa/1E694\nt9CQGXcWZqyiLx+8SJAY5gEzP/lBlR06Gxfuoz8x75DcZRTBz/yRYjOHsq6i\n457epj5m1kQyzS7zioQnLhDbukve5zExGiiKrMmJrXkoIbm5PwgVmKwbA3ge\nMkDFLCx+32Ovka9aUli5hyqlGOTB+vWA/JcHINFZOzRcteC5QKYQVvCurxcl\nYLZf/TMX8Tyyeg5URJBgqLbhfVqzq3lTWoi5qi7u+5s4LEXc8/19IA9OU4Ak\njgy2+Gf5wMdPb3UTY4WBufX1IiAMkLT7YwSL2B3NNFwvdGn9bYEGA//3pabI\nFjz9DO/iQ3OFawWmv81VEwuRPXSwg+vP+rJxNuVkHwJipuf+0qRY7LTF9kan\nituPPPsKtkXH/8kUesVijkwAZaxg5mwCA3N5gURUWdmdMec/H9pjHK3yZgQN\nuPPhA7G3qjAsuoUfgFxDzleYbEshXkkHZRbwTiORNXT1ttlwck8hfpv6iI8g\nlHg0zLE+BXbsPXLSgftJkCsHrpxoubQEjN7tSNIonIynnN0+p6sLNMMWE4mJ\nlONU8OhDRYEg2OESALvdJTdYIM8NGHgXf92Pjiwa5zKsv3dJyyfQgPR29XAL\npo5F\r\n=X0+U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxwGt/qt5Be1LcTdqXVNmDsh1JIBlvFFwVg7DYglXk8QIhAOnhjoE2f2kn4rAUK+Pceta/XTI6NqVI13VD+a5whF8U"}]},"_npmUser":{"name":"duydatpham","email":"duydatpham@gmail.com"},"maintainers":[{"name":"duydatpham","email":"duydatpham@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/notifme-sdk_1.10.4_1605691805406_0.06399082513680998"},"_hasShrinkwrap":false},"1.10.5":{"name":"@duydatpham/notifme-sdk","version":"1.10.5","description":"Unified notification SDK (emails, SMS, pushes, webpushes...) for Node.js","main":"lib/index.js","repository":{"type":"git","url":"git+https://github.com/duydatpham/notifme-sdk.git"},"author":{"name":"Notif.me"},"license":"MIT","scripts":{"build":"yarn run clean && babel src --out-dir lib && yarn run build-dot-flow","build-dot-flow":"grep -rwl './src' -e 'export type' | while read filepath; do cp $filepath `echo $filepath | sed 's/\\/src\\//\\/lib\\//g'`.flow; done","clean":"rm -rf lib/ coverage/","demo":"notification-catcher & babel-node examples/with-notification-catcher.js && printf '\n>>> Please visit http://localhost:1080 <<<\n\n'","dev":"nodemon -e js -r babel-register examples/with-notification-catcher.js","lint":"yarn run flow && standard","lint-fix":"standard --fix","run-catcher":"notification-catcher","prepublish":"yarn run build","prepare":"yarn run build","size":"echo 'Notif.me build size:' && du -hs lib/ && cost-of-modules --yarn","test":"yarn run lint && yarn run testonly","testonly":"jest"},"dependencies":{"babel-runtime":"6.26.0","form-data":"3.0.0","https-proxy-agent":"5.0.0","node-fetch":"2.6.1","node-pushnotifications":"1.4.1","nodemailer":"6.4.12","web-push":"3.4.4","winston":"3.3.3"},"devDependencies":{"babel-cli":"6.26.0","babel-eslint":"10.1.0","babel-jest":"26.3.0","babel-plugin-transform-flow-strip-types":"6.22.0","babel-plugin-transform-runtime":"6.23.0","babel-preset-env":"1.7.0","babel-preset-stage-2":"6.24.1","babel-register":"6.26.0","cost-of-modules":"1.0.1","flow-bin":"0.89.0","jest":"23.6.0","nodemon":"2.0.4","notification-catcher":"1.2.1","regenerator-runtime":"0.13.7","standard":"14.3.4"},"standard":{"parser":"babel-eslint","ignore":["**/node_modules/**","**/lib/**","**/flow/**"]},"jest":{"testEnvironment":"node","collectCoverage":true,"coverageReporters":["text-summary","html","lcov"],"collectCoverageFrom":["**/src/**/*.js","!**/src/providers/push/**","!**/src/util/**"],"coverageThreshold":{"global":{"branches":100,"functions":100,"lines":100,"statements":100}}},"greenkeeper":{"ignore":["flow-bin"]},"bugs":{"url":"https://github.com/duydatpham/notifme-sdk/issues"},"homepage":"https://github.com/duydatpham/notifme-sdk#readme","directories":{"doc":"docs","example":"examples","lib":"lib"},"gitHead":"edc691b684365210c435bb1a6d854bb9aa84648d","_id":"@duydatpham/notifme-sdk@1.10.5","_nodeVersion":"14.17.0","_npmVersion":"6.14.13","dist":{"integrity":"sha512-cdxG4063cEP+NT9Z0aol/9ivl0IcbCQCJnW0n76OcLcqVk8aK1S6Up2zfRhLonALQ+nd2W1nlEfx5ZupOWLSAw==","shasum":"8b33e757a72254828dd811a1ad26d54333c4ae18","tarball":"https://registry.npmjs.org/@duydatpham/notifme-sdk/-/notifme-sdk-1.10.5.tgz","fileCount":76,"unpackedSize":229169,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCSRDqAZnO3ZdWInODvIoIMs1T6PmHv3W0VAfvAbWXk5gIgRWJ3dTZ6RHfYJvStB3tv1NWIhD0M2pZHJEybff3NC9Q="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvQ4hACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq4FQ/7BMfAJyL2Mt8a8Vv5zJB8mUZlmmYLg4S5xOtSZj8/hMqhi0Je\r\nwfs55JUGjREODUbbpXSLAiQWAf36GMw+ilPURouwnxLRyrSCG6D9ORfTfDjl\r\nsooIVEXqphYw+VX67Y1rQwyGTDleogj3rO+j/nE31NBnLRv6rfb8e603wKS6\r\nvNwqlSj1z29VuJGK2LlUkdLk61iXqQBWQBD2eBCZTqzNEHwOLASz6kgeAF6b\r\ndtBDwkoS2SLhOxuhBH3nffWlTYwfAxSI+YbInJM3ThG6naVJ7jFPfyqRULsl\r\n6xC9oK5Iqb2pij9Re9tm/gVxDR6l2HjPayfkUuxtCScjDV9czmLmhkDzkNNx\r\np/S9C5CfnNjF6Xuuj7ur9kKaA61SAlbZUfmU1sZoXpj8gfyBWrCUTa4iEbs1\r\n7MFVkd76RaBgKHIAwB757xj8KInzsM9S3MGGx0IRnugcSOSJHK2SsSo0iI1T\r\nVZFSILg05HKH30FRw6toktn5UOb+zzrMQMCveTmi94KIen8ihrXcQMVhNGDA\r\nuiXcRSI63S14IblL46vVfZUrFdltMcXHkO2JmXUjnSNp/ZFSZyUkeoxjgUY1\r\n6LW0rzouJXsYzIXRD6ruP28gY0abt4c+34LhslUcq8biqf9+HqXqz17/GMqD\r\nBfhPjETroePlJaHg6Vnt3PoL+GaEgndfLRA=\r\n=vF4T\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"duydatpham","email":"duydatpham@gmail.com"},"maintainers":[{"name":"duydatpham","email":"duydatpham@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/notifme-sdk_1.10.5_1673334305363_0.5809123330731101"},"_hasShrinkwrap":false},"1.10.6":{"name":"@duydatpham/notifme-sdk","version":"1.10.6","description":"Unified notification SDK (emails, SMS, pushes, webpushes...) for Node.js","main":"lib/index.js","repository":{"type":"git","url":"git+https://github.com/duydatpham/notifme-sdk.git"},"author":{"name":"Notif.me"},"license":"MIT","scripts":{"build":"yarn run clean && babel src --out-dir lib && yarn run build-dot-flow","build-dot-flow":"grep -rwl './src' -e 'export type' | while read filepath; do cp $filepath `echo $filepath | sed 's/\\/src\\//\\/lib\\//g'`.flow; done","clean":"rm -rf lib/ coverage/","demo":"notification-catcher & babel-node examples/with-notification-catcher.js && printf '\n>>> Please visit http://localhost:1080 <<<\n\n'","dev":"nodemon -e js -r babel-register examples/with-notification-catcher.js","lint":"yarn run flow && standard","lint-fix":"standard --fix","run-catcher":"notification-catcher","prepublish":"yarn run build","prepare":"yarn run build","size":"echo 'Notif.me build size:' && du -hs lib/ && cost-of-modules --yarn","test":"yarn run lint && yarn run testonly","testonly":"jest"},"dependencies":{"babel-runtime":"6.26.0","form-data":"3.0.0","https-proxy-agent":"5.0.0","node-fetch":"2.6.1","node-pushnotifications":"1.4.1","nodemailer":"6.4.12","web-push":"3.4.4","winston":"3.3.3"},"devDependencies":{"babel-cli":"6.26.0","babel-eslint":"10.1.0","babel-jest":"26.3.0","babel-plugin-transform-flow-strip-types":"6.22.0","babel-plugin-transform-runtime":"6.23.0","babel-preset-env":"1.7.0","babel-preset-stage-2":"6.24.1","babel-register":"6.26.0","cost-of-modules":"1.0.1","flow-bin":"0.89.0","jest":"23.6.0","nodemon":"2.0.4","notification-catcher":"1.2.1","regenerator-runtime":"0.13.7","standard":"14.3.4"},"standard":{"parser":"babel-eslint","ignore":["**/node_modules/**","**/lib/**","**/flow/**"]},"jest":{"testEnvironment":"node","collectCoverage":true,"coverageReporters":["text-summary","html","lcov"],"collectCoverageFrom":["**/src/**/*.js","!**/src/providers/push/**","!**/src/util/**"],"coverageThreshold":{"global":{"branches":100,"functions":100,"lines":100,"statements":100}}},"greenkeeper":{"ignore":["flow-bin"]},"bugs":{"url":"https://github.com/duydatpham/notifme-sdk/issues"},"homepage":"https://github.com/duydatpham/notifme-sdk#readme","directories":{"doc":"docs","example":"examples","lib":"lib"},"gitHead":"1acba4b10754ab1ed17b56fd1fd033319606037d","_id":"@duydatpham/notifme-sdk@1.10.6","_nodeVersion":"14.17.0","_npmVersion":"6.14.13","dist":{"integrity":"sha512-87S/HyaAfogptlxOD7cOCPUvEdpZ2e0m3cBA7382XYpP+3LZviRsubtdGMWyP9OJBqdFgeexCv4ELtSFqWqnMQ==","shasum":"c08a54b813b7943bec9dd9345c2b956fda4800c1","tarball":"https://registry.npmjs.org/@duydatpham/notifme-sdk/-/notifme-sdk-1.10.6.tgz","fileCount":76,"unpackedSize":229197,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIByaz+fYCIlgkoaC+5OEu5W6xtXWSMEda3Ig28bcz/kiAiBAhKveceRLxRCpBUujgZpu5i7jYcn37nuxSJXrE7yppQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvQ74ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmohNw/9ESi+0/vEZRdJHUpybRaIe898gQNn6uhQySqqOyLOxDSTOmsH\r\nbYsjwNb0rC97ADca925p8EYNA7EQu9wfRee/ocXaF4DfqlkogX0S1D5yxlNs\r\nMjlsfFv4mHEmexmHu/rUSkVzJMAdQM6TPNqoek5cnMvsNJRDREW0ugtrGwNl\r\nylHliCjAwCsXScnKCEOJQnLSWREHeeCGbZCzwFEEUiG6Z9d+fEnztEV5ARQK\r\n3sesuwGZ//1/i6b9VdqH78VJ9YIE0yQIcQp1UMDI/f/wuymHdRrMXZFVI/Qy\r\njVKqJ3TPSWMwG6dIIMTOt9crz/1l5wTYuoPP085TY/8T4VE3smjeCWGIVztG\r\nhYakSO7XMaiT91V0TI70UUkx4Y74F7bJ5xl1UpIbu2T/1sfZrTanpEnuNBP3\r\nANlY9KtQf434cQkrmnnUZ6+mF7tbQYPn9tzO+fWd5mIRqm0CLyTZbKKwU1Gs\r\n+Wd5TM9iFKVil3+zLy8Ek0Qcsw6OL7AMANA1akWg88RUiFQJRQO3ADtea8R/\r\nEu8NmB6Y4e9w4+TjyyR7Y19z+lBJZuxSh664DzqT7OGO41vK5g6e9xYOxeSf\r\nd0qMhBT+dUxovgGKfIwmZdnDFirFGWBkGLHnZwOVybMUE1aTvZIbte/8bmjv\r\nhbAhSIdl8RiiUaVvI47nzjIUsCaYuKtwRk4=\r\n=3E5b\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"duydatpham","email":"duydatpham@gmail.com"},"maintainers":[{"name":"duydatpham","email":"duydatpham@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/notifme-sdk_1.10.6_1673334520145_0.058673062445224744"},"_hasShrinkwrap":false}},"time":{"created":"2020-11-11T06:51:57.319Z","1.10.0":"2020-11-11T06:51:57.516Z","modified":"2023-01-10T07:08:40.471Z","1.10.1":"2020-11-11T06:56:47.729Z","1.10.2":"2020-11-11T08:53:38.950Z","1.10.3":"2020-11-18T08:50:04.200Z","1.10.4":"2020-11-18T09:30:05.571Z","1.10.5":"2023-01-10T07:05:05.607Z","1.10.6":"2023-01-10T07:08:40.366Z"},"maintainers":[{"name":"duydatpham","email":"duydatpham@gmail.com"}],"description":"Unified notification SDK (emails, SMS, pushes, webpushes...) for Node.js","homepage":"https://github.com/duydatpham/notifme-sdk#readme","repository":{"type":"git","url":"git+https://github.com/duydatpham/notifme-sdk.git"},"author":{"name":"Notif.me"},"bugs":{"url":"https://github.com/duydatpham/notifme-sdk/issues"},"license":"MIT","readme":"<p align=\"center\">\n  <a href=\"https://www.notif.me\">\n    <img alt=\"Notif.me\" src=\"https://notifme.github.io/notifme-sdk/img/logo.png\" />\n  </a>\n</p>\n\n<p align=\"center\">\n  A Node.js library to send all kinds of transactional notifications.\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/notifme-sdk\"><img alt=\"npm-status\" src=\"https://img.shields.io/npm/v/notifme-sdk.svg?style=flat\" /></a>\n  <a href=\"https://travis-ci.org/notifme/notifme-sdk\"><img alt=\"travis-build-status\" src=\"https://api.travis-ci.org/notifme/notifme-sdk.svg\" /></a>\n  <a href=\"https://codeclimate.com/github/notifme/notifme-sdk/test_coverage\"><img src=\"https://api.codeclimate.com/v1/badges/2d2cc6d915094ddb50b7/test_coverage\" /></a>\n  <a href=\"https://david-dm.org/notifme/notifme-sdk\"><img alt=\"dependencies\" src=\"https://david-dm.org/notifme/notifme-sdk.svg\" /></a>\n  <a href=\"https://github.com/notifme/notifme-sdk/blob/master/LICENSE\"><img alt=\"license\" src=\"https://img.shields.io/badge/license-MIT_License-blue.svg?style=flat\" /></a>\n  <a href=\"https://slackin-notifme.now.sh\"><img alt=\"slack\" src=\"https://img.shields.io/badge/Slack-Join_us!-e01563.svg?style=flat\" /></a>\n</p>\n\n- [Features](#features)\n- [Getting started](#getting-started)\n- [How to use](#how-to-use)\n  - [1. General options](#1-general-options)\n  - [2. Providers](#2-providers)\n  - [3. Custom channels](#3-custom-channels)\n  - [4. Send a notification](#4-send-a-notification)\n  - [5. In production](#5-in-production)\n- [Contributing](#contributing)\n- [Need help? Found a bug?](#need-help-found-a-bug)\n- [Related Projects](#related-projects)\n\n## Features\n\n* **Easy channel integration** — Want to start sending `emails` | `SMS` | `pushes` | `webpushes` | `slack`? Do so in no time!\n\n* **Unique documentation** — Don't look everywhere for the parameters you need to pass, just do it once. **Switching provider becomes a no-brainer**.\n\n* **Multiple providers strategies** — Want to use more than one provider? Use `fallback` and `round-robin` strategies out of the box.\n\n* **Tools for local testing** — Run a catcher locally to intercept all your notifications and display them in a web interface.\n\n* **MIT license** — Use it like you want.\n\n## Getting Started\n\n```shell\n$ yarn add notifme-sdk\n```\n\n```javascript\nimport NotifmeSdk from 'notifme-sdk'\n\nconst notifmeSdk = new NotifmeSdk({}) // empty config = all providers are set to console.log\nnotifmeSdk\n  .send({sms: {from: '+15000000000', to: '+15000000001', text: 'Hello, how are you?'}})\n  .then(console.log)\n```\n\n:sparkles: Congratulations, you should see the following lines in your console:\n\n![Getting started SMS log](https://notifme.github.io/notifme-sdk/img/getting-started-sms-log.png)\n<br><br>\n\n### [Recommended] Setup Notification Catcher for your local tests\n\n[Notification Catcher](https://github.com/notifme/catcher) is a web interface for viewing and testing notifications during development.\n\n```shell\n$ yarn add --dev notification-catcher\n$ yarn run notification-catcher\n```\n\n```javascript\nimport NotifmeSdk from 'notifme-sdk'\n\nconst notifmeSdk = new NotifmeSdk({\n  useNotificationCatcher: true // <= this sends all your notifications to the catcher running on port 1025\n})\nnotifmeSdk\n  .send({sms: {from: '+15000000000', to: '+15000000001', text: 'Hello, how are you?'}})\n  .then(console.log)\n```\n\n:heart_eyes_cat: Open [http://localhost:1080](http://localhost:1080) on your favorite browser, you should see the notification:\n\n![Getting started SMS catcher](https://notifme.github.io/notifme-sdk/img/getting-started-sms-catcher.png)\n\n#### Custom connection settings\n\nIf you have the Notification Catcher running on a custom port, domain, or you need to change any other connection setting, set the environment variable `NOTIFME_CATCHER_OPTIONS` with your [custom connection smtp url](https://nodemailer.com/smtp/).\n\n```shell\n$ # Example\n$ NOTIFME_CATCHER_OPTIONS=smtp://127.0.0.1:3025?ignoreTLS=true node your-script-using-notifme.js\n```\n\n## How to use\n\n- [1. General options](#1-general-options)\n- [2. Providers](#2-providers)\n- [3. Custom channels](#3-custom-channels)\n- [4. Send a notification](#4-send-a-notification)\n- [5. In production](#5-in-production)\n\n### 1. General options\n\n```javascript\nnew NotifmeSdk({\n  channels: ..., // Object\n  useNotificationCatcher: ... // boolean\n})\n```\n\n| Option name | Required | Type | Description |\n| --- | --- | --- | --- |\n| `channels` | `false` | `Object` | Define `providers` (`Array`) and `multiProviderStrategy` (`string`) for each channel (email, sms, push, webpush, slack).<br><br>See all details below: [2. Providers](#2-providers). |\n| `useNotificationCatcher` | `false` | `boolean` | If true, all your notifications are sent to the catcher running on localhost:1025 (channels option will be completely ignored!) |\n\n#### Complete examples\n\n```javascript\n// Env: development\nnew NotifmeSdk({\n  useNotificationCatcher: true\n})\n\n// Env: production\nnew NotifmeSdk({\n  channels: {\n    email: {\n      // If \"Provider1\" fails, use \"Provider2\"\n      multiProviderStrategy: 'fallback',\n      providers: [{\n        type: 'Provider1',\n        // ...credentials\n      }, {\n        type: 'Provider2',\n        // ...credentials\n      }]\n    },\n    sms: {\n      // Use \"Provider1\" and \"Provider2\" in turns (and fallback if error)\n      multiProviderStrategy: 'roundrobin',\n      providers: [{\n        type: 'Provider1',\n        // ...credentials\n      }, {\n        type: 'Provider2',\n        // ...credentials\n      }]\n    }\n  }\n})\n```\n\n#### HTTP proxy option\n\nIf you want to use a HTTP proxy, set an environment variable `NOTIFME_HTTP_PROXY`.\n\n```shell\n$ # Example\n$ NOTIFME_HTTP_PROXY=http://127.0.0.1:8580 node your-script-using-notifme.js\n```\n\n### 2. Providers\n\n#### Email providers\n\n<details><summary>Logger <i>(for development)</i></summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    email: {\n      providers: [{\n        type: 'logger'\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>SMTP <i>(can be used for almost all providers)</i></summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    email: {\n      providers: [{\n        type: 'smtp',\n        host: 'smtp.example.com',\n        port: 465,\n        secure: true,\n        auth: {\n          user: 'xxxxx',\n          pass: 'xxxxx'\n        }\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>Sendmail</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    email: {\n      providers: [{\n        type: 'sendmail',\n        sendmail: true,\n        newline: 'unix',\n        path: '/usr/sbin/sendmail'\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>Mailgun</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    email: {\n      providers: [{\n        type: 'mailgun',\n        apiKey: 'xxxxx',\n        domainName: 'example.com'\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>Mandrill</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    email: {\n      providers: [{\n        type: 'mandrill',\n        apiKey: 'xxxxx'\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>Sendgrid</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    email: {\n      providers: [{\n        type: 'sendgrid',\n        apiKey: 'xxxxx'\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>SES</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    email: {\n      providers: [{\n        type: 'ses',\n        region: 'xxxxx',\n        accessKeyId: 'xxxxx',\n        secretAccessKey: 'xxxxx',\n        sessionToken: 'xxxxx' // optional\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>SparkPost</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    email: {\n      providers: [{\n        type: 'sparkpost',\n        apiKey: 'xxxxx'\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>Custom <i>(define your own)</i></summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    email: {\n      providers: [{\n        type: 'custom',\n        id: 'my-custom-email-provider...',\n        send: async (request) => {\n          // Send email\n          return 'id...'\n        }\n      }]\n    }\n  }\n})\n```\n\n`request` being of [the following type](https://github.com/notifme/notifme-sdk/blob/master/src/models/notification-request.js#L8-L31).\n\n</p></details>\n<br>\n\nSee all options: [Email provider options](https://github.com/notifme/notifme-sdk/blob/master/src/models/provider-email.js)\n\n#### SMS providers\n\n<details><summary>Logger <i>(for development)</i></summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    sms: {\n      providers: [{\n        type: 'logger'\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>46elks</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    sms: {\n      providers: [{\n        type: '46elks',\n        apiUsername: 'xxxxx',\n        apiPassword: 'xxxxx'\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>Callr</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    sms: {\n      providers: [{\n        type: 'callr',\n        login: 'xxxxx',\n        password: 'xxxxx'\n      }]\n    }\n  }\n})\n```\n</p></details>\n<details><summary>Clickatell</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    sms: {\n      providers: [{\n        type: 'clickatell',\n        apiKey: 'xxxxx' // One-way integration API key\n      }]\n    }\n  }\n})\n```\n</p></details>\n<details><summary>Infobip</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    sms: {\n      providers: [{\n        type: 'infobip',\n        username: 'xxxxx',\n        password: 'xxxxx'\n      }]\n    }\n  }\n})\n```\n</p></details>\n<details><summary>Nexmo</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    sms: {\n      providers: [{\n        type: 'nexmo',\n        apiKey: 'xxxxx',\n        apiSecret: 'xxxxx'\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>OVH</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    sms: {\n      providers: [{\n        type: 'ovh',\n        appKey: 'xxxxx',\n        appSecret: 'xxxxx',\n        consumerKey: 'xxxxx',\n        account: 'xxxxx',\n        host: 'xxxxx' // https://github.com/ovh/node-ovh/blob/master/lib/endpoints.js\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>Plivo</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    sms: {\n      providers: [{\n        type: 'plivo',\n        authId: 'xxxxx',\n        authToken: 'xxxxx'\n      }]\n    }\n  }\n})\n```\n</p></details>\n<details><summary>Twilio</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    sms: {\n      providers: [{\n        type: 'twilio',\n        accountSid: 'xxxxx',\n        authToken: 'xxxxx'\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>Custom <i>(define your own)</i></summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    sms: {\n      providers: [{\n        type: 'custom',\n        id: 'my-custom-sms-provider...',\n        send: async (request) => {\n          // Send SMS\n          return 'id...'\n        }\n      }]\n    }\n  }\n})\n```\n\n`request` being of [the following type](https://github.com/notifme/notifme-sdk/blob/master/src/models/notification-request.js#L76-L92).\n\n</p></details>\n<br>\n\nSee all options: [SMS provider options](https://github.com/notifme/notifme-sdk/blob/master/src/models/provider-sms.js)\n\n#### Voice providers\n\n<details><summary>Logger <i>(for development)</i></summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    voice: {\n      providers: [{\n        type: 'logger'\n      }]\n    }\n  }\n})\n```\n</p></details>\n<details><summary>Twilio</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    voice: {\n      providers: [{\n        type: 'twilio',\n        accountSid: 'xxxxx',\n        authToken: 'xxxxx'\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>Custom <i>(define your own)</i></summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    voice: {\n      providers: [{\n        type: 'custom',\n        id: 'my-custom-voice-provider...',\n        send: async (request) => {\n          // Send Voice\n          return 'id...'\n        }\n      }]\n    }\n  }\n})\n```\n\n`request` being of [the following type](https://github.com/notifme/notifme-sdk/blob/master/src/models/notification-request.js#L94-L111).\n\n</p></details>\n<br>\n\nSee all options: [Voice provider options](https://github.com/notifme/notifme-sdk/blob/master/src/models/provider-voice.js)\n\n#### Push providers\n\n<details><summary>Logger <i>(for development)</i></summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    push: {\n      providers: [{\n        type: 'logger'\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>APN (Apple Push Notification)</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    push: {\n      providers: [{\n        type: 'apn',\n        token: {\n          key: './certs/key.p8',\n          keyId: 'xxxxx',\n          teamId: 'xxxxx'\n        }\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>FCM (Firebase Cloud Messaging, previously called GCM, Google Cloud Messaging)</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    push: {\n      providers: [{\n        type: 'fcm',\n        id: 'xxxxx'\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>WNS (Windows Push Notification)</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    push: {\n      providers: [{\n        type: 'wns',\n        clientId: 'xxxxx',\n        clientSecret: 'xxxxx',\n        notificationMethod: 'sendTileSquareBlock'\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>ADM (Amazon Device Messaging)</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    push: {\n      providers: [{\n        type: 'adm',\n        clientId: 'xxxxx',\n        clientSecret: 'xxxxx'\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>Custom <i>(define your own)</i></summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    push: {\n      providers: [{\n        type: 'custom',\n        id: 'my-custom-push-provider...',\n        send: async (request) => {\n          // Send push\n          return 'id...'\n        }\n      }]\n    }\n  }\n})\n```\n\n`request` being of [the following type](https://github.com/notifme/notifme-sdk/blob/master/src/models/notification-request.js#L33-L74).\n\n</p></details>\n<br>\n\nSee all options: [Push provider options](https://github.com/notifme/notifme-sdk/blob/master/src/models/provider-push.js)\n\n#### Webpush providers\n\n<details><summary>Logger <i>(for development)</i></summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    webpush: {\n      providers: [{\n        type: 'logger'\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>GCM (Google Cloud Messaging) - uses W3C endpoints if possible</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    webpush: {\n      providers: [{\n        type: 'gcm',\n        gcmAPIKey: 'xxxxx',\n        vapidDetails: {\n          subject: 'mailto: contact@example.com',\n          publicKey: 'xxxxx',\n          privateKey: 'xxxxx'\n        }\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>Custom <i>(define your own)</i></summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    webpush: {\n      providers: [{\n        type: 'custom',\n        id: 'my-custom-webpush-provider...',\n        send: async (request) => {\n          // Send webpush\n          return 'id...'\n        }\n      }]\n    }\n  }\n})\n```\n\n`request` being of [the following type](https://github.com/notifme/notifme-sdk/blob/master/src/models/notification-request.js#L113-L134).\n\n</p></details>\n<br>\n\nSee all options: [Webpush provider options](https://github.com/notifme/notifme-sdk/blob/master/src/models/provider-webpush.js)\n\n#### Slack providers\n\n<details><summary>Logger <i>(for development)</i></summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    slack: {\n      providers: [{\n        type: 'logger'\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>Slack</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    slack: {\n      providers: [{\n        type: 'webhook',\n        webhookUrl: 'https://hooks.slack.com/services/Txxxxxxxx/Bxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxx'\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>Custom <i>(define your own)</i></summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    slack: {\n      providers: [{\n        type: 'custom',\n        id: 'my-custom-slack-provider...',\n        send: async (request) => {\n          // Send slack\n          return 'id...'\n        }\n      }]\n    }\n  }\n})\n```\n\n`request` being of [the following type](https://github.com/notifme/notifme-sdk/blob/master/src/models/notification-request.js#L136-L138).\n\n</p></details>\n<br>\n\nSee all options: [Slack provider options](https://github.com/notifme/notifme-sdk/blob/master/src/models/provider-slack.js)\n#### Telegram providers\n\n<details><summary>Logger <i>(for development)</i></summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    telegram: {\n      providers: [{\n        type: 'logger'\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>Telegram</summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    telegram: {\n      providers: [{\n        type: 'webhook',\n        botToken: \"bot_token\",\n        baseUrl: \"base_url\"\n      }]\n    }\n  }\n})\n```\n\n</p></details>\n<details><summary>Custom <i>(define your own)</i></summary><p>\n\n```javascript\nnew NotifmeSdk({\n  channels: {\n    telegram: {\n      providers: [{\n        type: 'custom',\n        id: 'my-custom-telegram-provider...',\n        send: async (request) => {\n          // Send telegram\n          return 'id...'\n        }\n      }]\n    }\n  }\n})\n```\n\n`request` being of [the following type](https://github.com/notifme/notifme-sdk/blob/master/src/models/notification-request.js#L136-L138).\n\n</p></details>\n<br>\n\nSee all options: [Telegram provider options](https://github.com/notifme/notifme-sdk/blob/master/src/models/provider-telegram.js)\n\n#### Multi-provider strategies\n\nA multi-provider strategy allows you to customize the send process on a channel.\n\n##### Predefined strategies\n\n| Strategy name | Description |\n| --- | --- |\n| `fallback` | If the used provider returns an error, try the next in the list. |\n| `roundrobin` | Use every provider in turns. If one of them returns an error, fallback to the next. |\n| `no-fallback` | Deactivates fallback strategy. |\n\n##### Custom\n\nYou can also provide your own strategy. You have to pass a function implementing:\n\n```javascript\n(Provider[]) => Sender\n// See examples below for more details\n```\n\nExamples:\n\n<details><summary>Random strategy</summary><p>\n\n```javascript\n/*\n * `providers` is an array containing all the instances that were\n * created from your configuration.\n */\nconst randomStrategy = (providers) => async (request) => {\n  // Choose one provider at random\n  const provider = providers[Math.floor(Math.random() * providers.length)];\n\n  try {\n    const id = await provider.send(request)\n    return {id, providerId: provider.id}\n  } catch (error) {\n    error.providerId = provider.id\n    throw error\n  }\n}\n\nnew NotifmeSdk({\n  channels: {\n    email: { // Example for email channel\n      providers: [...],\n      multiProviderStrategy: randomStrategy\n    }\n  }\n})\n```\n</p></details>\n<details><summary>Cheap SMS strategy with fallback</summary><p>\n\n```javascript\nimport strategyFallback from 'notifme-sdk/lib/strategies/fallback'\n\nfunction getCountryFromNumber(number) {\n  // extract the country from a phone number (+33670707070) -> 'fr'\n}\nfunction orderProvidersByPrice(country, providers) {\n  // giving a country return an array of ordered providers by price\n}\n\nconst smsCheapStrategy = (providers) => async (request) => {\n  const country = getCountryFromNumber(request.from)\n  const providersOrdered = orderProvidersByPrice(country, providers)\n\n  return strategyFallback(providersOrdered)(request)\n}\n```\n</p></details>\n<br>\n\n#### Adding a provider or a channel\n\nIf you would like to see another provider or channel, please [upvote the corresponding issue](https://github.com/notifme/notifme-sdk/issues) (or create one if it does not exist yet).\n\n### 3. Custom channels\n\nIf you want to have custom channels (and providers) you can add them.\n\nExample:\n\n<details><summary>Custom channel and provider</summary><p>\n\n```\nnew NotifmeSdk({\n  channels: {\n    socket: {\n      multiProviderStrategy: 'fallback',\n      providers: [\n        {\n          type: 'custom',\n          id: 'my-socket-sender',\n          send: async () => {\n            return 'custom-socket-id'\n          }\n        }\n      ]\n    }\n  }\n})\n```\n\n</p></details>\n\n### 4. Send a notification\n\n#### Parameters\n\n_New: you can check [notifme-template](https://github.com/notifme/notifme-template) to help you define your templates._\n\n<details><summary>Send an email</summary><p>\n\n```javascript\nnotifmeSdk.send({\n  email: {\n    from: 'me@example.com',\n    to: 'john@example.com',\n    subject: 'Hi John',\n    html: '<b>Hello John! How are you?</b>'\n  }\n})\n```\n\nSee [all parameters](https://github.com/notifme/notifme-sdk/blob/master/src/models/notification-request.js#L8).\n\n</p></details>\n<details><summary>Send a SMS</summary><p>\n\n```javascript\nnotifmeSdk.send({\n  sms: {\n    from: '+15000000000',\n    to: '+15000000001',\n    text: 'Hello John! How are you?'\n  }\n})\n```\n\nSee [all parameters](https://github.com/notifme/notifme-sdk/blob/master/src/models/notification-request.js#L76).\n\n</p></details>\n<details><summary>Call using Voice</summary><p>\n\n```javascript\nnotifmeSdk.send({\n  voice: {\n    from: '+15000000000',\n    to: '+15000000001',\n    url: 'http://demo.twilio.com/docs/voice.xml'\n  }\n})\n```\n\nSee [all parameters](https://github.com/notifme/notifme-sdk/blob/master/src/models/notification-request.js#L94).\n\n</p></details>\n<details><summary>Send a push</summary><p>\n\n```javascript\nnotifmeSdk.send({\n  push: {\n    registrationToken: 'xxxxx',\n    title: 'Hi John',\n    body: 'Hello John! How are you?',\n    icon: 'https://notifme.github.io/notifme-sdk/img/icon.png'\n  }\n})\n```\n\nSee [all parameters](https://github.com/notifme/notifme-sdk/blob/master/src/models/notification-request.js#L33).\n\n</p></details>\n<details><summary>Send a webpush</summary><p>\n\n```javascript\nnotifmeSdk.send({\n  webpush: {\n    subscription: {\n      keys: {\n        auth: 'xxxxx',\n        p256dh: 'xxxxx'\n      },\n      endpoint: 'xxxxx'\n    },\n    title: 'Hi John',\n    body: 'Hello John! How are you?',\n    icon: 'https://notifme.github.io/notifme-sdk/img/icon.png'\n  }\n})\n```\n\nSee [all parameters](https://github.com/notifme/notifme-sdk/blob/master/src/models/notification-request.js#L109).\n\n</p></details>\n<details><summary>Send a Slack message</summary><p>\n\n```javascript\nnotifmeSdk.send({\n  slack: {\n    text: 'Slack webhook text'\n  }\n})\n```\n\nSee [all parameters](https://github.com/notifme/notifme-sdk/blob/master/src/models/notification-request.js#L109).\n\n</p></details>\n<details><summary>Send a Telegram message</summary><p>\n\n```javascript\nnotifmeSdk.send({\n  telegram: {\n    chatId: \"chatId\",\n    message: \"message\",\n  }\n})\n```\n\nSee [all parameters](https://github.com/notifme/notifme-sdk/blob/master/src/models/notification-request.js#L132).\n\n</p></details>\n<details><summary>Send a multi-channel notification</summary><p>\n\n```javascript\nnotifmeSdk.send({\n  email: {\n    from: 'me@example.com',\n    to: 'john@example.com',\n    subject: 'Hi John',\n    html: '<b>Hello John! How are you?</b>'\n  },\n  sms: {\n    from: '+15000000000',\n    to: '+15000000001',\n    text: 'Hello John! How are you?'\n  },\n  push: {\n    registrationToken: 'xxxxx',\n    title: 'Hi John',\n    body: 'Hello John! How are you?',\n    icon: 'https://notifme.github.io/notifme-sdk/img/icon.png'\n  },\n  webpush: {\n    subscription: {\n      keys: {\n        auth: 'xxxxx',\n        p256dh: 'xxxxx'\n      },\n      endpoint: 'xxxxx'\n    },\n    title: 'Hi John',\n    body: 'Hello John! How are you?',\n    icon: 'https://notifme.github.io/notifme-sdk/img/icon.png'\n  },\n  slack: {\n    text: 'Slack webhook text'\n  },\n  telegram: {\n    chatId: \"chatId\",\n    message: \"message\",\n  }\n})\n```\n\nSee [all parameters](https://github.com/notifme/notifme-sdk/blob/master/src/models/notification-request.js).\n\n</p></details>\n\n#### Returned type\n\n`send` returns a Promise resolving with an `Object` of the following type:\n\n```javascript\ntype NotificationStatusType = {\n  status: 'success' | 'error',\n  channels?: {[channel: ChannelType]: {\n    id: string,\n    providerId: ?string\n  }},\n  errors?: {[channel: ChannelType]: Error}\n}\n```\n\nExamples:\n\n| Case | Returned JSON |\n| --- | --- |\n| Success<br>(when Promise resolves) | `{status: 'success', channels: {sms: {id: 'id-116561976', providerId: 'sms-default-provider'}}}` |\n| Error<br>(here Notification Catcher is not running) | `{status: 'error', channels: {sms: {id: undefined, providerId: 'sms-notificationcatcher-provider'}}, errors: {sms: 'connect ECONNREFUSED 127.0.0.1:1025'}}` |\n\n### 5. In production\n\n#### Recommended options\n\n| Option name | Usage in production | Comment |\n| --- | --- | --- |\n| useNotificationCatcher | `false` | Don't forget to deactivate notification catcher (it overrides channels configuration). |\n\n#### Logger\n\nThis project uses [winston](https://github.com/winstonjs/winston) as logging library. You can add or remove loggers as you wish.\n\n```javascript\nimport NotifmeSdk from 'notifme-sdk'\nimport winston from 'winston'\n\nconst notifmeSdk = new NotifmeSdk({})\n\n// To deactivate all loggers\nnotifmeSdk.logger.mute()\n\n// Or set the loggers you want\nnotifmeSdk.logger.configure([\n  new (winston.transports.File)({filename: 'somefile.log'})\n])\n```\n\nSee [winston's documentation](https://github.com/winstonjs/winston) for more details.\n\n#### Use a request queue\n\n- RabbitMQ: see [RabbitMQ Notif.me plugin documentation](https://github.com/notifme/notifme-sdk-queue-rabbitmq).\n\n#### Send us a message\n\nSo that we can make a list of people using this library ;)\n\n## Contributing\n\n[![test framework](https://img.shields.io/badge/test_framework-Jest-brightgreen.svg?style=flat)](https://facebook.github.io/jest/)\n[![js-standard-style](https://img.shields.io/badge/codestyle-Standard_JS-brightgreen.svg?style=flat)](https://github.com/standard/standard)\n[![flow-typed](https://img.shields.io/badge/typing-Flow_Type-brightgreen.svg?style=flat)](https://flow.org/)\n[![Greenkeeper badge](https://badges.greenkeeper.io/notifme/notifme-sdk.svg)](https://greenkeeper.io/)\n\nContributions are very welcome!\n\nTo get started: [fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device.\n\n```shell\n$ git clone git@github.com:[YOUR_USERNAME]/notifme-sdk.git && cd notifme-sdk\n$ yarn install\n```\n\nBefore making a [pull request](https://help.github.com/articles/creating-a-pull-request/), check that the code passes all the unit tests, respects the [Standard JS rules](https://standardjs.com/), and the [Flow type checker](https://flow.org/).\n\n```shell\n$ yarn run test\n```\n\n### Next for this project\n\n- Implement other providers for each channel ([ask or vote for a provider](https://github.com/notifme/notifme-sdk/issues))\n- Add other types of notifications based on what people ask (slack, messenger, skype, telegram, kik, spark...)\n- A plugin system (for queues, retry system on error, templating, strategies...)\n\n## Need Help? Found a bug?\n\n[Submit an issue](https://github.com/notifme/notifme-sdk/issues) to the project Github if you need any help.\nAnd, of course, feel free to submit pull requests with bug fixes or changes.\n\n## Related Projects\n\n<p align=\"center\">\n  <a href=\"https://github.com/notifme/notifme-history\">\n    <img alt=\"Notif.me SDK\" src=\"https://notifme.github.io/notifme-history/img/logo.png\" />\n  </a>\n  <br>\n  <em>A pretty history of the conversations with your users.</em>\n</p>\n","readmeFilename":"README.md"}