{"_id":"@1saifj/novu-client","_rev":"10-487fb4126b1638461d570b2bb36e2089","name":"@1saifj/novu-client","dist-tags":{"latest":"1.2.0"},"versions":{"1.0.0":{"name":"@1saifj/novu-client","version":"1.0.0","_id":"@1saifj/novu-client@1.0.0","maintainers":[{"name":"1saifj","email":"saifalialjanahi@gmail.com"}],"dist":{"shasum":"30d17a07cc1180df0ab05a2a62660166db4f1127","tarball":"https://registry.npmjs.org/@1saifj/novu-client/-/novu-client-1.0.0.tgz","fileCount":8,"integrity":"sha512-XbIw6FATdHMYAzAhCRzOnDzlBXQfJpO0cbf/R8Y23lPlOM6hzE0ihHoQjAMhLSZukKo6MZp/wbcwKcQXm5+9lQ==","signatures":[{"sig":"MEUCIGhC1E7H2675vM+YSHEslbdEg7K6wk4pQmq4O7hdMnLjAiEAz14H3UcqCiRe3YiYBcS41PYXCaEoqrKTciTRjNo2tC4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80885},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"0640fa7808d115ce4e7df165c665a2e7a1c18b65","scripts":{"dev":"rollup -c -w","build":"rollup -c","prepublishOnly":"npm run build"},"_npmUser":{"name":"1saifj","email":"saifalialjanahi@gmail.com"},"_npmVersion":"11.2.0","description":"Custom Novu client library for React and Next.js","directories":{},"_nodeVersion":"22.14.0","dependencies":{"socket.io-client":"^4.8.1"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","rollup":"^4.40.2","typescript":"^5.8.3","@types/node":"^22.15.17","@types/react":"^19.1.4","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.3","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.1","rollup-plugin-peer-deps-external":"^2.2.4"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/novu-client_1.0.0_1747117373533_0.27815886915056165","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@1saifj/novu-client","version":"1.0.1","_id":"@1saifj/novu-client@1.0.1","maintainers":[{"name":"1saifj","email":"saifalialjanahi@gmail.com"}],"dist":{"shasum":"c2c14953845106c3e6670126b0214bedf0f62d38","tarball":"https://registry.npmjs.org/@1saifj/novu-client/-/novu-client-1.0.1.tgz","fileCount":13,"integrity":"sha512-iG88EcjXOcmfAO8+i3NlBWA60tkl8UB4Dzl9Qn+smTWwiT0WRBmGlP9BRf3l7rYFomDFp0WG98mdrSwumj+RvA==","signatures":[{"sig":"MEUCIQCnFgp3RpOc7uuCb6391F+O1eUJN+/nvLeruap6xqmh4wIgKTsz0NfYbjCL0vJPqNZs6oo9QIFr5fUz8fIGb5LVpI4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":200918},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"0640fa7808d115ce4e7df165c665a2e7a1c18b65","scripts":{"dev":"rollup -c -w","build":"rollup -c","prepublishOnly":"npm run build"},"_npmUser":{"name":"1saifj","email":"saifalialjanahi@gmail.com"},"_npmVersion":"11.2.0","description":"Custom Novu client library for React and Next.js","directories":{},"_nodeVersion":"22.14.0","dependencies":{"tailwind-merge":"^2.6.0","socket.io-client":"^4.8.1"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","rollup":"^4.40.2","postcss":"^8.4.33","typescript":"^5.8.3","@types/node":"^22.15.17","tailwindcss":"^3.4.1","@types/react":"^19.1.4","autoprefixer":"^10.4.16","@rollup/plugin-babel":"^6.0.4","rollup-plugin-postcss":"^4.0.2","@rollup/plugin-commonjs":"^28.0.3","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.1","rollup-plugin-peer-deps-external":"^2.2.4"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/novu-client_1.0.1_1747119199926_0.9713481420119621","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@1saifj/novu-client","version":"1.0.2","_id":"@1saifj/novu-client@1.0.2","maintainers":[{"name":"1saifj","email":"saifalialjanahi@gmail.com"}],"dist":{"shasum":"df07409d39399de0dba7d64294e50f66c53309ac","tarball":"https://registry.npmjs.org/@1saifj/novu-client/-/novu-client-1.0.2.tgz","fileCount":13,"integrity":"sha512-RN2OsujLmJ/z0rprt6vbyvVEIrSQ5rkkKDxMPKpkdFlojOZbnhvPTVNfKU8rRaqbvhO5ywZ+fTTa6173mM6/JA==","signatures":[{"sig":"MEUCIQDW2exz3xWuVzPWrTGg77wLPXyMbT6VWdGRY2+NvhR9bgIgQAXdE3nyRJ16yejq4jxmy7Vw2hNVLLYBJM5medsEOf8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":200910},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"0640fa7808d115ce4e7df165c665a2e7a1c18b65","scripts":{"dev":"rollup -c -w","build":"rollup -c","prepublishOnly":"npm run build"},"_npmUser":{"name":"1saifj","email":"saifalialjanahi@gmail.com"},"_npmVersion":"11.2.0","description":"Custom Novu client library for React and Next.js","directories":{},"_nodeVersion":"22.14.0","dependencies":{"tailwind-merge":"^2.6.0","socket.io-client":"^4.8.1"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","rollup":"^4.40.2","postcss":"^8.4.33","typescript":"^5.8.3","@types/node":"^22.15.17","tailwindcss":"^3.4.1","@types/react":"^19.1.4","autoprefixer":"^10.4.16","@rollup/plugin-babel":"^6.0.4","rollup-plugin-postcss":"^4.0.2","@rollup/plugin-commonjs":"^28.0.3","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.1","rollup-plugin-peer-deps-external":"^2.2.4"},"peerDependencies":{"react":">=19","react-dom":">=19"},"_npmOperationalInternal":{"tmp":"tmp/novu-client_1.0.2_1747119397607_0.19607141332672073","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@1saifj/novu-client","version":"1.0.3","_id":"@1saifj/novu-client@1.0.3","maintainers":[{"name":"1saifj","email":"saifalialjanahi@gmail.com"}],"dist":{"shasum":"c93621c1e97a7e64b773d5b8f26ecf965cb87f35","tarball":"https://registry.npmjs.org/@1saifj/novu-client/-/novu-client-1.0.3.tgz","fileCount":13,"integrity":"sha512-izrWPhbl1xX+y+hiXG2EXmTLa+UHZ4IzfjW5IfrrORYMKXArE3ArJADc80Vcq8pKYaEfRCR6KPVGpYrReE9JEQ==","signatures":[{"sig":"MEUCIQCkXuG2S2Rwh3NLlKaKF97Az1h/Xo7E6xGJ3ncBsYtLqgIgLUhZwyG7w1Bw2SVqqZS0LYssNiOvlIC0A2GWAXopiFo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":200928},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"0640fa7808d115ce4e7df165c665a2e7a1c18b65","scripts":{"dev":"rollup -c -w","build":"rollup -c","prepublishOnly":"npm run build"},"_npmUser":{"name":"1saifj","email":"saifalialjanahi@gmail.com"},"_npmVersion":"11.2.0","description":"Custom Novu client library for React and Next.js","directories":{},"_nodeVersion":"22.14.0","dependencies":{"tailwind-merge":"^2.6.0","socket.io-client":"^4.8.1"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","rollup":"^4.40.2","postcss":"^8.4.33","typescript":"^5.8.3","@types/node":"^22.15.17","tailwindcss":"^3.4.1","@types/react":"^19.1.4","autoprefixer":"^10.4.16","@rollup/plugin-babel":"^6.0.4","rollup-plugin-postcss":"^4.0.2","@rollup/plugin-commonjs":"^28.0.3","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.1","rollup-plugin-peer-deps-external":"^2.2.4"},"peerDependencies":{"react":">=19.0.0-rc.1","react-dom":">=19.0.0-rc.1"},"_npmOperationalInternal":{"tmp":"tmp/novu-client_1.0.3_1747119493288_0.17196088178621638","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@1saifj/novu-client","version":"1.0.4","_id":"@1saifj/novu-client@1.0.4","maintainers":[{"name":"1saifj","email":"saifalialjanahi@gmail.com"}],"dist":{"shasum":"cd67ef22fc3fc859d88c78e56cc0b6b910e73dbd","tarball":"https://registry.npmjs.org/@1saifj/novu-client/-/novu-client-1.0.4.tgz","fileCount":13,"integrity":"sha512-TV6094GS+i7rVhbaSAKrHp7UQ/9GoLFkkyE/Q+V5/fjg8N5T4saAylN8oFXWNpa3rt//yLZhXgL9L8oieq1Nkw==","signatures":[{"sig":"MEUCICBO+4iJrqJBG3Et/plzAHsl4rsIKh050luafM8d1tmKAiEA082t0/20fMXeboQfOlFaJKueTWx5ScF660cl9zS+DnQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":200918},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"0640fa7808d115ce4e7df165c665a2e7a1c18b65","scripts":{"dev":"rollup -c -w","build":"rollup -c","prepublishOnly":"npm run build"},"_npmUser":{"name":"1saifj","email":"saifalialjanahi@gmail.com"},"_npmVersion":"11.2.0","description":"Custom Novu client library for React and Next.js","directories":{},"_nodeVersion":"22.14.0","dependencies":{"tailwind-merge":"^2.6.0","socket.io-client":"^4.8.1"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","rollup":"^4.40.2","postcss":"^8.4.33","typescript":"^5.8.3","@types/node":"^22.15.17","tailwindcss":"^3.4.1","@types/react":"^19.1.4","autoprefixer":"^10.4.16","@rollup/plugin-babel":"^6.0.4","rollup-plugin-postcss":"^4.0.2","@rollup/plugin-commonjs":"^28.0.3","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.1","rollup-plugin-peer-deps-external":"^2.2.4"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/novu-client_1.0.4_1747119743285_0.05929837599301657","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@1saifj/novu-client","version":"1.0.5","_id":"@1saifj/novu-client@1.0.5","maintainers":[{"name":"1saifj","email":"saifalialjanahi@gmail.com"}],"dist":{"shasum":"72279c71c7b3a73eff0e7f34517359af059de44a","tarball":"https://registry.npmjs.org/@1saifj/novu-client/-/novu-client-1.0.5.tgz","fileCount":13,"integrity":"sha512-ywVUhkbP9L7hlTRUnrI9rFl/gW+n9TN27/70KdNTdkoGkxTo3vvMu/z8vHCE0AeabIJI2zC6CeEiyu3aiLjvzQ==","signatures":[{"sig":"MEYCIQCQap+0fF8wVcYtETuq9YyuT0gJBNk8HXW5LHIuJ2mrYgIhAIcW71UNWk7I3zjpckrPnxndXjNxe4IE388TlPCutLkm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":200918},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"0640fa7808d115ce4e7df165c665a2e7a1c18b65","scripts":{"dev":"rollup -c -w","build":"rollup -c","prepublishOnly":"npm run build"},"_npmUser":{"name":"1saifj","email":"saifalialjanahi@gmail.com"},"_npmVersion":"11.2.0","description":"Custom Novu client library for React and Next.js","directories":{},"_nodeVersion":"22.14.0","dependencies":{"tailwind-merge":"^2.6.0","socket.io-client":"^4.8.1"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","rollup":"^4.40.2","postcss":"^8.4.33","typescript":"^5.8.3","@types/node":"^22.15.17","tailwindcss":"^3.4.1","@types/react":"^19.1.4","autoprefixer":"^10.4.16","@rollup/plugin-babel":"^6.0.4","rollup-plugin-postcss":"^4.0.2","@rollup/plugin-commonjs":"^28.0.3","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.1","rollup-plugin-peer-deps-external":"^2.2.4"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/novu-client_1.0.5_1747119962492_0.23022162837707794","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@1saifj/novu-client","version":"1.0.6","_id":"@1saifj/novu-client@1.0.6","maintainers":[{"name":"1saifj","email":"saifalialjanahi@gmail.com"}],"dist":{"shasum":"0949bfe3c3fa11cfaf59245262e15b7c2b75bb66","tarball":"https://registry.npmjs.org/@1saifj/novu-client/-/novu-client-1.0.6.tgz","fileCount":13,"integrity":"sha512-QlET5Yn8X7zwNGNG3bHnkWhXF+BTGhT3B2lDLuE5nIdzO5zl2WpHYiDKuCYxQX3IifbOJhM6krEJiL5FKt/E2w==","signatures":[{"sig":"MEUCIAJlX1waiZDbN6rBgCBNbX7ij6pmXnPQVRC/LoE8ta2nAiEA3wTGAKtIkUz4KAypGGDDXwPStuckLXo+G3lx/6lGdWg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204674},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"0640fa7808d115ce4e7df165c665a2e7a1c18b65","scripts":{"dev":"rollup -c -w","build":"rollup -c","prepublishOnly":"npm run build"},"_npmUser":{"name":"1saifj","email":"saifalialjanahi@gmail.com"},"_npmVersion":"11.2.0","description":"Custom Novu client library for React and Next.js","directories":{},"_nodeVersion":"22.14.0","dependencies":{"tailwind-merge":"^2.6.0","socket.io-client":"^4.8.1"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","rollup":"^4.40.2","postcss":"^8.4.33","typescript":"^5.8.3","@types/node":"^22.15.17","tailwindcss":"^3.4.1","@types/react":"^19.1.4","autoprefixer":"^10.4.16","@rollup/plugin-babel":"^6.0.4","rollup-plugin-postcss":"^4.0.2","@rollup/plugin-commonjs":"^28.0.3","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.1","rollup-plugin-peer-deps-external":"^2.2.4"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/novu-client_1.0.6_1747120364765_0.7391091679600419","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@1saifj/novu-client","version":"1.1.0","_id":"@1saifj/novu-client@1.1.0","maintainers":[{"name":"1saifj","email":"saifalialjanahi@gmail.com"}],"dist":{"shasum":"87e45b96e1c967947cc7c2cbc3a3c39f113a5fb8","tarball":"https://registry.npmjs.org/@1saifj/novu-client/-/novu-client-1.1.0.tgz","fileCount":14,"integrity":"sha512-B0GdjZF5rSg45kKV6bzgl1kQe4KvGNpMRSS/WuDK+drvECjSYJCRNLY5RlkfPNmbNT0kdYGaJ8JYgdCQKAf+Jw==","signatures":[{"sig":"MEUCIQDG6O77gTe7pGvnRvxPsaajExaR/98Q7InO1JIKLGpDbgIgErlg2e9nr92ZApAFtConwGSP1K5wgIl4+kMDh6gOE5g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":229976},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"4472ebdeb59dd527624e613258292be9a33ad029","scripts":{"dev":"rollup -c -w","build":"rollup -c","prepublishOnly":"npm run build"},"_npmUser":{"name":"1saifj","email":"saifalialjanahi@gmail.com"},"_npmVersion":"11.2.0","description":"Custom Novu client library for React and Next.js","directories":{},"_nodeVersion":"22.14.0","dependencies":{"tailwind-merge":"^2.6.0","socket.io-client":"^4.8.1"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","rollup":"^4.40.2","postcss":"^8.4.33","typescript":"^5.8.3","@types/node":"^22.15.17","tailwindcss":"^3.4.1","@types/react":"^19.1.4","autoprefixer":"^10.4.16","@rollup/plugin-babel":"^6.0.4","rollup-plugin-postcss":"^4.0.2","@rollup/plugin-commonjs":"^28.0.3","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.1","rollup-plugin-peer-deps-external":"^2.2.4"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/novu-client_1.1.0_1747121905650_0.28684907589177877","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@1saifj/novu-client","version":"1.1.1","_id":"@1saifj/novu-client@1.1.1","maintainers":[{"name":"1saifj","email":"saifalialjanahi@gmail.com"}],"dist":{"shasum":"e464b0f710bc27373112e8b9bebb8bfbdcfd2b07","tarball":"https://registry.npmjs.org/@1saifj/novu-client/-/novu-client-1.1.1.tgz","fileCount":14,"integrity":"sha512-/OspyYt//nKphlfXkEs1LjNHEIcTK8JejEk7e9LDs8QnlAhAqDLpEQwAWj22mz6ysFh0xozoPLrGGNDpbo5Kjw==","signatures":[{"sig":"MEUCIQDiXIpjMIKJEzmmiCThllI04hFytG+m9sPdKMp6C3yW+wIgILqSshDEWEIVxzfjyq+y5nLvYetOxlDgoX/zauxx1wQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205833},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"4472ebdeb59dd527624e613258292be9a33ad029","scripts":{"dev":"rollup -c -w","build":"rollup -c","prepublishOnly":"npm run build"},"_npmUser":{"name":"1saifj","email":"saifalialjanahi@gmail.com"},"_npmVersion":"11.2.0","description":"Custom Novu client library for React and Next.js","directories":{},"_nodeVersion":"22.14.0","dependencies":{"tailwind-merge":"^2.6.0","socket.io-client":"^4.8.1"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","rollup":"^4.40.2","postcss":"^8.4.33","typescript":"^5.8.3","@types/node":"^22.15.17","tailwindcss":"^3.4.1","@types/react":"^19.1.4","autoprefixer":"^10.4.16","@rollup/plugin-babel":"^6.0.4","rollup-plugin-postcss":"^4.0.2","@rollup/plugin-commonjs":"^28.0.3","@rollup/plugin-typescript":"^12.1.2","@rollup/plugin-node-resolve":"^16.0.1","rollup-plugin-peer-deps-external":"^2.2.4"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/novu-client_1.1.1_1747124131150_0.23823073666473182","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@1saifj/novu-client","version":"1.2.0","description":"Custom Novu client library for React and Next.js","type":"module","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","scripts":{"build":"rollup -c","dev":"rollup -c -w","prepublishOnly":"npm run build"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"dependencies":{"socket.io-client":"^4.8.1","tailwind-merge":"^2.6.0"},"devDependencies":{"@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.3","@rollup/plugin-node-resolve":"^16.0.1","@rollup/plugin-typescript":"^12.1.2","@types/node":"^22.15.17","@types/react":"^19.1.4","autoprefixer":"^10.4.16","postcss":"^8.4.33","rollup":"^4.40.2","rollup-plugin-peer-deps-external":"^2.2.4","rollup-plugin-postcss":"^4.0.2","tailwindcss":"^3.4.1","tslib":"^2.8.1","typescript":"^5.8.3"},"_id":"@1saifj/novu-client@1.2.0","gitHead":"4472ebdeb59dd527624e613258292be9a33ad029","_nodeVersion":"22.14.0","_npmVersion":"11.2.0","dist":{"integrity":"sha512-yZ0SQPkLKaI2JuFLiTIQRMLxEMrPehzEA/REO0apkfIK3gaCuhNyTvQaa8slu43hQ3DgUaBM2eRowfhKuQd9DQ==","shasum":"0941518524545692619710a1d97b1470780f1540","tarball":"https://registry.npmjs.org/@1saifj/novu-client/-/novu-client-1.2.0.tgz","fileCount":14,"unpackedSize":209081,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFYXlKQXSM5ezeXhLwYDeE4Xjv/TRvDhc49G1wZZrWyTAiAWj5zs8xuwpdhWtsioFr0dhJG6Rfa3omKgjRCezPGpiQ=="}]},"_npmUser":{"name":"1saifj","email":"saifalialjanahi@gmail.com"},"directories":{},"maintainers":[{"name":"1saifj","email":"saifalialjanahi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/novu-client_1.2.0_1747124375699_0.5789726742494019"},"_hasShrinkwrap":false}},"time":{"created":"2025-05-13T06:22:53.416Z","modified":"2025-05-13T08:19:36.048Z","1.0.0":"2025-05-13T06:22:53.721Z","1.0.1":"2025-05-13T06:53:20.126Z","1.0.2":"2025-05-13T06:56:37.784Z","1.0.3":"2025-05-13T06:58:13.462Z","1.0.4":"2025-05-13T07:02:23.494Z","1.0.5":"2025-05-13T07:06:02.677Z","1.0.6":"2025-05-13T07:12:44.939Z","1.1.0":"2025-05-13T07:38:25.834Z","1.1.1":"2025-05-13T08:15:31.329Z","1.2.0":"2025-05-13T08:19:35.859Z"},"description":"Custom Novu client library for React and Next.js","maintainers":[{"name":"1saifj","email":"saifalialjanahi@gmail.com"}],"readme":"# @1saifj/novu-client\n\nA modern React client library for [Novu](https://novu.co) notification infrastructure with a beautiful Tailwind CSS UI and comprehensive theming options.\n\n[![npm version](https://img.shields.io/npm/v/@1saifj/novu-client.svg)](https://www.npmjs.com/package/@1saifj/novu-client)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/1saifj/novu-client-lib/blob/main/LICENSE)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/1saifj/novu-client-lib/pulls)\n\n<p align=\"center\">\n  <img src=\"https://i.imgur.com/YLbGg6h.png\" alt=\"@1saifj/novu-client Preview\" width=\"600\">\n</p>\n\n## 🌟 Features\n\n- **Modern API Client**: Fully typed Novu API client with comprehensive endpoint coverage\n- **Real-time Support**: WebSocket integration for instant notifications\n- **Beautiful UI**: Clean, responsive Tailwind CSS components\n- **Flexible Theming**: CSS variables and provider-based theming system\n- **Customizable UI**: Replace any component with your own custom UI\n- **Pagination Support**: Built-in \"Load More\" functionality\n- **TypeScript Ready**: Full type definitions for a seamless developer experience\n- **React Hooks**: Simple integration with functional components\n\n## 📦 Installation\n\n```bash\nnpm install @1saifj/novu-client\n```\n\n### Peer Dependencies\n\nThis package requires the following peer dependencies:\n\n```bash\nnpm install react react-dom\n```\n\n## 🚀 Quick Start\n\n### Basic Usage\n\n```jsx\nimport React from 'react';\nimport { Inbox, NovuThemeProvider } from '@1saifj/novu-client';\n\nfunction NotificationsComponent() {\n  return (\n    <NovuThemeProvider>\n      <Inbox \n        options={{\n          applicationIdentifier: 'YOUR_NOVU_APP_ID',\n          subscriberId: 'user-123',\n          backendUrl: 'https://api.novu.co/v1',\n          socketUrl: 'wss://ws.novu.co'\n        }}\n        onNotificationClick={(notification) => {\n          console.log('Notification clicked:', notification);\n        }}\n        onUnseenCountChanged={(count) => {\n          console.log('Unseen count:', count);\n        }}\n      />\n    </NovuThemeProvider>\n  );\n}\n```\n\n## 🎨 Theming\n\n### Theme Customization\n\nCustomize the appearance by providing a theme object to the `NovuThemeProvider`:\n\n```jsx\nimport React from 'react';\nimport { Inbox, NovuThemeProvider } from '@1saifj/novu-client';\n\nfunction ThemedNotifications() {\n  const theme = {\n    colors: {\n      primary: '#3B82F6', // Blue theme\n      secondary: '#1F2937',\n      grayLight: '#F9FAFB',\n      grayMedium: '#E5E7EB',\n      grayDark: '#6B7280',\n      success: '#10B981',\n      warning: '#F59E0B',\n      error: '#EF4444'\n    },\n    borderRadius: {\n      md: '0.375rem',\n      lg: '0.5rem',\n    },\n    container: {\n      maxWidth: '32rem',\n      maxHeight: '500px',\n    }\n  };\n\n  return (\n    <NovuThemeProvider theme={theme}>\n      <Inbox \n        options={{\n          applicationIdentifier: 'YOUR_NOVU_APP_ID',\n          subscriberId: 'user-123',\n          backendUrl: 'https://api.novu.co/v1',\n          socketUrl: 'wss://ws.novu.co'\n        }}\n      />\n    </NovuThemeProvider>\n  );\n}\n```\n\n### CSS Variables\n\nYou can also override the CSS variables directly in your CSS:\n\n```css\n:root {\n  --novu-primary: #3B82F6;\n  --novu-secondary: #1F2937;\n  --novu-gray-light: #F9FAFB;\n  --novu-gray-medium: #E5E7EB;\n  --novu-gray-dark: #6B7280;\n  --novu-container-max-width: 32rem;\n  --novu-container-max-height: 500px;\n  --novu-border-radius-lg: 0.5rem;\n}\n```\n\n### Class Name Overrides\n\nAdd custom classes to specific components:\n\n```jsx\nconst theme = {\n  classNameOverrides: {\n    inboxContainer: 'my-custom-inbox-container',\n    notification: 'my-custom-notification',\n    unseenNotification: 'my-custom-unseen',\n    loadingState: 'my-custom-loading',\n    emptyState: 'my-custom-empty',\n    button: 'my-custom-button'\n  }\n};\n```\n\n## 🛠️ Advanced Usage\n\n### Custom UI Components\n\nReplace any part of the Inbox UI with your own components:\n\n```jsx\nimport React from 'react';\nimport { Inbox, NovuThemeProvider } from '@1saifj/novu-client';\n\nfunction CustomizedInbox() {\n  return (\n    <NovuThemeProvider>\n      <Inbox \n        options={{\n          applicationIdentifier: 'YOUR_NOVU_APP_ID',\n          subscriberId: 'user-123',\n          backendUrl: 'https://api.novu.co/v1',\n          socketUrl: 'wss://ws.novu.co'\n        }}\n        headerComponent={\n          <div className=\"flex justify-between items-center p-4 border-b border-gray-200\">\n            <h2 className=\"text-xl font-bold\">My Notifications</h2>\n            <button className=\"text-blue-500 hover:text-blue-700\">\n              Settings\n            </button>\n          </div>\n        }\n        emptyState={\n          <div className=\"flex flex-col items-center justify-center p-8 text-center\">\n            <img src=\"/empty-state.svg\" alt=\"No notifications\" className=\"w-24 h-24 mb-4\" />\n            <p className=\"text-gray-500\">You're all caught up!</p>\n          </div>\n        }\n        footerComponent={\n          <div className=\"p-3 bg-gray-50 border-t border-gray-200 text-center\">\n            <a href=\"/preferences\" className=\"text-sm text-blue-500 hover:underline\">\n              Manage notification preferences\n            </a>\n          </div>\n        }\n      />\n    </NovuThemeProvider>\n  );\n}\n```\n\n### Direct API Usage\n\nUse the Novu client directly for custom integrations:\n\n```jsx\nimport { NovuClient } from '@1saifj/novu-client';\n\nasync function notificationService() {\n  // Initialize client\n  const client = new NovuClient({\n    backendUrl: 'https://api.novu.co/v1',\n    socketUrl: 'wss://ws.novu.co',\n    applicationIdentifier: 'YOUR_NOVU_APP_ID',\n    subscriberId: 'user-123'\n  });\n  \n  // Start session\n  await client.initSession();\n  \n  // Get notifications feed\n  const feed = await client.getNotificationFeed('user-123', { \n    page: 0, \n    limit: 10 \n  });\n  \n  // Mark message as read\n  await client.markMessageAs('user-123', {\n    messageId: 'message-id',\n    mark: { seen: true, read: true }\n  });\n  \n  // Mark all messages as read\n  await client.markAllMessagesAs('user-123', {\n    markAs: 'read'\n  });\n  \n  // Get subscriber preferences\n  const preferences = await client.getSubscriberPreferences('user-123');\n  \n  // Get unseen count\n  const unseenCount = await client.getUnseenCount('user-123');\n  \n  // Listen for real-time notifications\n  client.connectWebSocket();\n  client.onNotification((notification) => {\n    console.log('New notification:', notification);\n  });\n}\n```\n\n### Solving CORS Issues\n\nWhen using the library in a browser environment, you might encounter CORS issues when making requests to the Novu API. To solve this, you can use the `proxyUrl` option which routes requests through your own proxy server:\n\n```jsx\nimport React from 'react';\nimport { Inbox, NovuThemeProvider } from '@1saifj/novu-client';\n\nfunction NotificationsComponent() {\n  return (\n    <NovuThemeProvider>\n      <Inbox \n        options={{\n          applicationIdentifier: 'YOUR_NOVU_APP_ID',\n          subscriberId: 'user-123',\n          backendUrl: 'https://api.novu.co/v1', // Original API URL\n          socketUrl: 'wss://ws.novu.co',\n          proxyUrl: '/api/novu-proxy' // Your proxy endpoint\n        }}\n        onNotificationClick={(notification) => {\n          console.log('Notification clicked:', notification);\n        }}\n      />\n    </NovuThemeProvider>\n  );\n}\n```\n\nYou can implement a simple proxy in Next.js:\n\n```javascript\n// pages/api/novu-proxy/[...path].js\nexport default async function handler(req, res) {\n  const { path } = req.query;\n  const apiUrl = `https://api.novu.co/v1/${path.join('/')}`;\n  \n  try {\n    const response = await fetch(apiUrl, {\n      method: req.method,\n      headers: {\n        ...(req.headers.authorization && { 'Authorization': req.headers.authorization }),\n        'Content-Type': 'application/json'\n      },\n      body: req.method !== 'GET' && req.body ? JSON.stringify(req.body) : undefined\n    });\n    \n    const data = await response.json();\n    return res.status(response.status).json(data);\n  } catch (error) {\n    return res.status(500).json({ error: 'Failed to proxy request' });\n  }\n}\n```\n\n## 📋 API Reference\n\n### Components\n\n#### `<NovuThemeProvider>`\n\nProvides theming context to all Novu components.\n\n| Prop | Type | Description |\n|------|------|-------------|\n| `theme` | `NovuTheme` | Theme configuration object |\n| `children` | `ReactNode` | Child components |\n\n#### `<Inbox>`\n\nThe main notification inbox component.\n\n| Prop | Type | Required | Description |\n|------|------|----------|-------------|\n| `options` | `object` | ✅ | Configuration for the Novu client |\n| `options.applicationIdentifier` | `string` | ✅ | Your Novu application ID |\n| `options.subscriberId` | `string` | ✅ | Current user's subscriber ID |\n| `options.backendUrl` | `string` | ✅ | Novu API URL |\n| `options.socketUrl` | `string` | ✅ | Novu WebSocket URL |\n| `options.proxyUrl` | `string` | | Optional proxy URL to bypass CORS issues |\n| `onNotificationClick` | `function` | | Callback when a notification is clicked |\n| `onUnseenCountChanged` | `function` | | Callback when unseen count changes |\n| `className` | `string` | | Additional CSS class for the inbox container |\n| `headerComponent` | `ReactNode` | | Custom header component |\n| `footerComponent` | `ReactNode` | | Custom footer component |\n| `emptyState` | `ReactNode` | | Custom empty state component |\n| `loadingState` | `ReactNode` | | Custom loading state component |\n\n### Client Methods\n\n#### `NovuClient`\n\n| Method | Parameters | Return Type | Description |\n|--------|------------|-------------|-------------|\n| `constructor` | `NovuOptions` | `NovuClient` | Creates a new client instance with options including `proxyUrl` for CORS handling |\n| `initSession` | `subscriberId?: string` | `Promise<any>` | Initialize a session with the Novu API |\n| `connectWebSocket` | | `any` | Connect to the Novu WebSocket for real-time updates |\n| `onNotification` | `callback: (notification: Message) => void` | `void` | Register a callback for real-time notifications |\n| `getNotificationFeed` | `subscriberId: string, options?: object` | `Promise<FeedResponse>` | Get notification feed for a subscriber |\n| `getUnseenCount` | `subscriberId: string, feedIdentifier?: string` | `Promise<UnseenCountResponse>` | Get count of unseen notifications |\n| `markMessageAs` | `subscriberId: string, options: MarkMessagesOptions` | `Promise<any>` | Mark a message as read/unread or seen/unseen |\n| `markAllMessagesAs` | `subscriberId: string, options: MarkAllMessagesOptions` | `Promise<any>` | Mark all messages with a specific status |\n| `updateOnlineStatus` | `subscriberId: string, status: OnlineStatusUpdate` | `Promise<Subscriber>` | Update subscriber's online status |\n| `getSubscriberPreferences` | `subscriberId: string` | `Promise<Preferences[]>` | Get subscriber's notification preferences |\n| `updateSubscriberPreferences` | `subscriberId: string, templateId: string, preferences: SubscriberPreference` | `Promise<Preferences>` | Update subscriber's preferences |\n\n### Types\n\n#### `NovuTheme`\n\n```typescript\ninterface NovuTheme {\n  colors?: {\n    primary?: string;\n    secondary?: string;\n    grayLight?: string;\n    grayMedium?: string;\n    grayDark?: string;\n    success?: string;\n    warning?: string;\n    error?: string;\n  };\n  spacing?: {\n    1?: string;\n    2?: string;\n    3?: string;\n    4?: string;\n    8?: string;\n  };\n  borderRadius?: {\n    sm?: string;\n    md?: string;\n    lg?: string;\n    full?: string;\n  };\n  typography?: {\n    fontSizeXs?: string;\n    fontSizeSm?: string;\n    fontSizeBase?: string;\n    fontSizeLg?: string;\n    fontWeightNormal?: number;\n    fontWeightMedium?: number;\n    fontWeightSemibold?: number;\n  };\n  shadow?: string;\n  container?: {\n    maxWidth?: string;\n    maxHeight?: string;\n  };\n  classNameOverrides?: {\n    inboxContainer?: string;\n    inboxHeader?: string;\n    notificationsList?: string;\n    notification?: string;\n    unseenNotification?: string;\n    loadingState?: string;\n    emptyState?: string;\n    button?: string;\n  };\n}\n```\n\n#### `Message` (Notification)\n\n```typescript\ninterface Message {\n  _id: string;\n  title?: string;\n  content: string;\n  seen: boolean;\n  read: boolean;\n  createdAt: string;\n  templateId?: string;\n  payload?: Record<string, any>;\n  cta?: {\n    type: string;\n    data: Record<string, any>;\n  };\n  [key: string]: any;\n}\n```\n\n## 💡 Tips & Best Practices\n\n1. **Theme Provider**: Always wrap your Novu components with `NovuThemeProvider` to ensure proper styling, even if you're not customizing the theme.\n\n2. **Error Handling**: Implement proper error handling around API calls to gracefully handle network issues.\n\n3. **Subscriber ID**: Make sure to use consistent subscriber IDs across your application to ensure notifications are properly associated with users.\n\n4. **Performance**: If you have a large number of notifications, consider implementing virtualized lists for better performance.\n\n5. **Authentication**: Ensure you have proper authentication for your Novu API calls in production.\n\n## 🤝 Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add some amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n---\n\nBuilt with ❤️ by [@1saifj](https://github.com/1saifj) ","readmeFilename":"README.md"}