{"_id":"namune","_rev":"27-e0f5fc147bdc8482c4bb8244a58987d6","name":"namune","dist-tags":{"latest":"1.0.27"},"versions":{"1.0.0":{"name":"namune","version":"1.0.0","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.0","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"dist":{"shasum":"c5a4f2f6831215e012a0dcc001e17ea33f705733","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.0.tgz","fileCount":14,"integrity":"sha512-RHotwoTNBZ4c545EkNJB5kl2Nq01Z96JFnDgYAJrmhbX7CBNg8Ngq5jE4gsCHSQ3gwzLJb45xwUVzVT4nAjGcw==","signatures":[{"sig":"MEYCIQD0+kVxeHbdmw1z0jHNwPQ0+7B2Ufa3k0I69zgoUgkXAgIhAJGRs4WlDvW2/ni5J2hq0ffaFeqsyAGBhS/xuhSTXAqT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32743},"main":"index.js","gitHead":"fe1820b82dbec4a473eb2274dbbbcba12d229718","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"dotenv":"^16.5.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.0_1749418256841_0.81495608433962","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"namune","version":"1.0.2","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.2","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"3ba540cde6aae2f6b12ec0edb231b4dca450b577","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.2.tgz","fileCount":15,"integrity":"sha512-2Hamqw3zgJ7+KlfAcPA+NXFfKP6Pcy39mfLBGjTbgoVjo9LhCXVsutCInP1F6BdLTn6SlX623npvOcA/XkWXPQ==","signatures":[{"sig":"MEUCIQDQkiQp8IMnhDoCAfN0GbcH1j+/8CaXo7DSNhHST4lSwgIgd/weC7mGa3y1e+aK2BmAtc2OnEGI8DqiuehiFagIsdg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34539},"main":"index.js","gitHead":"4ea9461a89a3df248cfbec89cd79883bb7501bb9","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"dotenv":"^16.5.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.2_1749422072509_0.9084082736768695","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"namune","version":"1.0.3","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.3","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"00f010583b8b7309e0d5aab92f0040cbba8e27ae","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.3.tgz","fileCount":15,"integrity":"sha512-oijS5O79lYre1GAl3m5EAaA/hhEvvt+gAk7YQWQjXjbW9D23uZATPrTInMoGL0r4ZsqqCkUM9qyx6IMm5TYkCQ==","signatures":[{"sig":"MEYCIQC+U6udSbALea59SptICwkUv3oilIAXfihMxs9C96/adAIhAPYs2FX/Lq9RBXh/uZWVPG25hZw1Reve6vN3JQBaH2O6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36272},"main":"index.js","gitHead":"1a00047bb5d6289f65b3b2a2f03a3a55e3680a9e","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"dotenv":"^16.5.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.3_1749425511058_0.5165657601418121","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"namune","version":"1.0.4","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.4","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"b4f6627d29f9bfd00759f4e62462ebacfdef2e8d","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.4.tgz","fileCount":15,"integrity":"sha512-bVgYH+52sLthEEZaTBoXMr1AttOZS3Xr64bLu8Qw7WTuAN3NxmdLRJ/2sKPuLsg0FglK/Ae73tD5HhDQtcIlRw==","signatures":[{"sig":"MEUCIQDd/zOrs7VeRWx7PgjR708gzTJ/jSEqkX4k3OodSDHOLQIgNWBYLVeKS2i0X+ODGp46ykcDjiEEnDCQNHASCiH2XHs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36789},"main":"index.js","gitHead":"6889a9dbeacc035a42b786307246baa08213254e","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"dotenv":"^16.5.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.4_1749426053902_0.8719742454151154","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"namune","version":"1.0.5","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.5","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"39e16570689cfae63273e5e9f107ede6bfbda3dd","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.5.tgz","fileCount":15,"integrity":"sha512-xMlcpt1opQcbA8t5pPmKNwc+WjYXF8B3PGKfFo1PZU1BLMF2g3/pLhiSN6k1DarmzqRUpLJ5Ab7VobdzSbkjLQ==","signatures":[{"sig":"MEUCIQCJDs7pa2no+7rU3KUkCt5r0lfF1q4oE7XcnQPpn3NPrwIgEuNFiet8SK7spEf21N8FIAXvtxeO2pkOG6DxIzWqJys=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36834},"main":"index.js","gitHead":"36114789057dee87f5f88187f685be88344d6d5a","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"dotenv":"^16.5.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.5_1749426524194_0.024566611540400185","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"namune","version":"1.0.6","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.6","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"d1132d5383f88c02dc95c7fdb2ad739b688a4eb3","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.6.tgz","fileCount":15,"integrity":"sha512-uKSdF5BPQndr8ALYQSyG+/60tLq7d2rbYar11uq6sj7Sbubx9DLRD9YcMg8yEXiBgAcL1MWmP1tdkE8W0bF3JA==","signatures":[{"sig":"MEMCH0oboZ7MNFypF1pKK04ArQtRuiIUQSvCcBLaT3UTKCYCIFs4aUaExbnBBA837vvxOys3+zSld6uJ9m3c2LzK4Ut4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37248},"main":"index.js","gitHead":"18df6bc201d42ca1ef830d17773fa87b1c01c01f","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"dotenv":"^16.5.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.6_1749427051784_0.5190853092757841","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"namune","version":"1.0.7","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.7","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"599a4376c24a1e95fb56b10aa452e03e52c3936f","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.7.tgz","fileCount":15,"integrity":"sha512-VHjQ/o8s53kgFyCaT7hYAJfhWs+D6z7LxfdNcEe69D1FwqTc5Ylv4GvjDHdkUG6UvpvMRU89Rm86/KhRC2iUWQ==","signatures":[{"sig":"MEYCIQCBrvkH/3fnSsGKO+pbFkxTI9005nBj0G1vZI50gXvjAgIhAJK9nWQxXAU4NrmK/xDbGILMMsxSN1RCkd4Zf+q7B0MO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36824},"main":"index.js","gitHead":"9fedc9a36628a6504f1fa373747f9a480c973495","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"dotenv":"^16.5.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.7_1749428463047_0.2033575232184892","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"namune","version":"1.0.8","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.8","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"0f7bd43d06346e1e627a90735f4ec80579444ab3","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.8.tgz","fileCount":15,"integrity":"sha512-nVhptZojj6GQ4uEERUnpWfwpKqlyJcpgIcORJiOJ7aQgot31s/EMqngHIdrDqjt8gk6kRvSINKdM/Tmkrg9pEg==","signatures":[{"sig":"MEUCIQDBYCkqqZpQzhMFw+KiYlLmyk5/F4x9Io+qjgZcGOzXJQIgAV+f+4VtU58T4teM31bx4Y0KAIRRRZY1d6cH5Zgoebg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36855},"main":"index.js","gitHead":"c7d15f0d51e48fa57bc034610199d936c275a10c","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"dotenv":"^16.5.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.8_1749428626513_0.3483940209532894","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"namune","version":"1.0.9","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.9","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"41a80d29b7ca1d050d5334c25c6b376748223059","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.9.tgz","fileCount":15,"integrity":"sha512-ca95PbQJXAik+OHltE1S4c32tbbQSZGVHqUCv1BMnz+v3I3Abu4rSk15iDSsNEBG0NwIaG4L03aUwIMrABmE4A==","signatures":[{"sig":"MEYCIQCHWQuJLNEs0vd6Jg+TcRc3w6ylMudTwz+p2ygEB3vKJwIhAMBmYvflDTmmBxcyqAHSnAPnXTmjXD1rQkoTNFQJP/Z6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36998},"main":"index.js","gitHead":"970e2a49002875304aebb8f7257b191abb07cb50","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"dotenv":"^16.5.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.9_1749429098702_0.4330438138761612","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"namune","version":"1.0.10","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.10","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"96bf471d7e5b26e55bac98ad85bf000d8787c2cb","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.10.tgz","fileCount":15,"integrity":"sha512-YpndHDNgN/YL3uwsk1+YNVk9zpTngmknH9FoJedJO3WnPg2GBbUlbs4AHjkhMan17SEywJVdLwKFaF2sInq7tQ==","signatures":[{"sig":"MEUCIQDFVNculSmg8e67QLo66g4Sj99QJXS8VNjSXw1UKjSqWwIgRRZGL4webNlIverK7n4eyZuDLzr/nNnIysG1oNHxZSQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37045},"main":"index.js","gitHead":"283bdc3fc7d1b8c1a98da0fa690849a14fdd93b9","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"dotenv":"^16.5.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.10_1749429378078_0.5561548776262979","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"namune","version":"1.0.11","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.11","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"efd33a2fe18f156771169520bae5cf81dda07773","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.11.tgz","fileCount":15,"integrity":"sha512-p3YfoXTeJuwyLYdKx9W4Byl2Ydm3LCbbM+6UuNYUDTXhGzVrZ77GTwTLx5M++4NBcnV2Q49X3VZY3HwvYUQSqA==","signatures":[{"sig":"MEUCIBjsekCbJaRmLuKMRbngRp8zLjByQBgic8BqUOe0R/hkAiEA5V1mjWP6JimBo1N6ApdBwHigDFdnO6L92Vt/dLvTLvs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37045},"main":"index.js","gitHead":"aa9e85867a8070356ee2820f765a26cc57afc4ea","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"dotenv":"^16.5.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.11_1749429514710_0.4380181804338614","host":"s3://npm-registry-packages-npm-production"}},"1.0.12":{"name":"namune","version":"1.0.12","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.12","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"b3fb4005808ffef59fab6e3a4da0801381d50f18","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.12.tgz","fileCount":15,"integrity":"sha512-S7N65QLzQ4Z+BORDNKg8yFQkPHyfFRa8qDOMy5EJ4OCYRb8mZppE6aKV813H/KwvPM7trLNWLijhz09K2PfgSg==","signatures":[{"sig":"MEQCIGqByD0wGEudxx6OQJkLomV0grp5vfhWb5Fr3zYXRqzdAiB0d+e9ndhbIQ91vQOE75tESysM8/nAectMEmbxsY79FQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37470},"main":"index.js","gitHead":"99cf915b6c94eaeb56a893379fcb28bec87287b2","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"dotenv":"^16.5.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.12_1749432538150_0.287565248888092","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"namune","version":"1.0.13","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.13","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"36098c7cfa612c060fc46fd540b06c24a759ac02","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.13.tgz","fileCount":15,"integrity":"sha512-xxgvnX5Qpb9qooyXPvdGpNy2cy8ZLdHTcDEo62IzDf2yZjlr1UpYPwbgsw5FO+Jw1PJ5xGnxdEonzibquT33kA==","signatures":[{"sig":"MEUCIAmMLqkdGOl9SSrDIvVeaLwj6ckJ0g9ulHMIMPHjD7GWAiEA2dvygZ0Ha5mlRaNSggtLtPSYyCj7IDXRrvVpgT8RBXw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38254},"main":"index.js","gitHead":"4b68830b3d3d614c253b34a3f1e8fe756564ba8c","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"dotenv":"^16.5.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.13_1749433584948_0.1623998032448859","host":"s3://npm-registry-packages-npm-production"}},"1.0.14":{"name":"namune","version":"1.0.14","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.14","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"6f087b8310ba53e7aad31228831367b55d9188f0","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.14.tgz","fileCount":15,"integrity":"sha512-cDotoYm8B3ZCagv1W7JIe0aohXMy6k4shDWhGnjE/2MjmBMR7NZF1jDS8PRoqE4JtFdzIuUZ3s9WtBVBITz+OQ==","signatures":[{"sig":"MEUCIQCg2TNet5LOyeojPtcbSeoZ/uI8frvzdcQ9VfJY0JCSaAIgXWMgaWlBMYLIMXjd6DS3P/4MGC9ddfBjY8VBLRTOHEM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38259},"main":"index.js","gitHead":"907300727d21cc32a89b3951d665ddc6ef4ecb69","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"dotenv":"^16.5.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.14_1749433737722_0.4258839125542522","host":"s3://npm-registry-packages-npm-production"}},"1.0.15":{"name":"namune","version":"1.0.15","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.15","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"9564a8e6b850d6058f9ff59394fe60a38afc3e54","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.15.tgz","fileCount":15,"integrity":"sha512-f/6EF0P1910dttZel5+k/S7RiOi8DYEimBhXMjPwdQTJdh1phcu3tFQb6lKwUWd0fTCLCma0Pe7xvJRygmAhCw==","signatures":[{"sig":"MEUCIQC1lcbp7oh5hmx1a8hqcrlTCMSae5edaLX2bs8zNcVkuQIgDth08/hZwUf89j9VroQG7igAIxjO+zIgNMy9jPuxv2k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38243},"main":"index.js","gitHead":"5c39b3b078d223fc53abc20fe02892642d9e704b","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"dotenv":"^16.5.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.15_1749433909670_0.38171299797227976","host":"s3://npm-registry-packages-npm-production"}},"1.0.16":{"name":"namune","version":"1.0.16","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.16","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"5f973c0a89a16cb635d60636f4a4d7d328cd84c7","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.16.tgz","fileCount":15,"integrity":"sha512-GVtsLc61G4qR1/VGQ8gg0MPU5hdxJRAsQjWjB5pkszcKYxSpRFwAG4FBZev9ou6q5V+PwGo7ONYzDmSZfjj5vQ==","signatures":[{"sig":"MEQCIFqUn53CSyhn8YKGAzxIbGvZw2l3DF95qFZs9G0y9JehAiB3PajgOhYzhWJoEQLqPLCCIW0I5UAc2XfUOzhfUcHh1w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38240},"main":"index.js","gitHead":"efa2df11116c1debd1239c146b0366382d5f56d4","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"dotenv":"^16.5.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.16_1749434029825_0.3905115714414571","host":"s3://npm-registry-packages-npm-production"}},"1.0.17":{"name":"namune","version":"1.0.17","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.17","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"ebe063bd29320045398f4737583fc4c9c950cf06","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.17.tgz","fileCount":15,"integrity":"sha512-GZuPaWSOQo62O74nmpELaQ0gJFEaoy5wxcS7t/0maz6X6DtIVUc0tfYOhtavaFXA/YM4BDnkJO8sfavziDyp4w==","signatures":[{"sig":"MEUCIGKLhMMLaN4mFjw/IetO9VO+wNObauk6Gl+KDyrSj7GfAiEA86N1LkoKZy/qleOfc4Ep7dUwQSvC9zZueg/7eE6CrkQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38242},"main":"index.js","gitHead":"e3877f2e8c28dcb68bbc9c9e677f6cc3f56ab4f8","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"dotenv":"^16.5.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.17_1749434417628_0.1412799769771127","host":"s3://npm-registry-packages-npm-production"}},"1.0.18":{"name":"namune","version":"1.0.18","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.18","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"bde8e1687917f14b08dfed4f2722026f0ccaf5d0","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.18.tgz","fileCount":15,"integrity":"sha512-V84VtZTYCgMoXs0O1wz5Bz04yXBBs1Zsj589ylIMDD4KThvTOhI0pX+0VZWUksiPS7uD84j6lTSHryQ0AalTgQ==","signatures":[{"sig":"MEQCIDWXzhx/wWpWeUruc1/tSB94JFisvwtvWUyS1HfkVTcWAiB4WOSQ8edfUVoyktYG1HPNVOzlI45n3Zh9RRH9kJAmGg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38203},"main":"index.js","gitHead":"6b7c58187ad66cf9e2c09e7649f86eb4df0328ea","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"dotenv":"^16.5.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.18_1749436512074_0.6681969781270194","host":"s3://npm-registry-packages-npm-production"}},"1.0.19":{"name":"namune","version":"1.0.19","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.19","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"90c114daaf7e4f632d0ca82af22c5ed1228fcafa","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.19.tgz","fileCount":14,"integrity":"sha512-7G6dJkNUh8DWWPP9mCZ4NGVtiEGecf/5bAIDLPUdFZnLOjir3LyhvBgCIVuj/fU7LEjRDriWUORJ8e2huWx1rA==","signatures":[{"sig":"MEUCIQDF4MR5vKwBRlxedn3QqawuEt5CKK/L8YA+1MQSVPeaYgIgA7P1bI4kANw8S4KTzOPzG/xB6KnfUDSVx3ScYFcbNBs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44086},"main":"index.js","gitHead":"f1cb9e5ae34b6ea5994008a03998b6abd2acb1fc","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"dotenv":"^16.5.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.19_1749497486482_0.2769911464768533","host":"s3://npm-registry-packages-npm-production"}},"1.0.20":{"name":"namune","version":"1.0.20","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.20","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"4227b4234f9757f3d5081776662a0fa8fd1d9d0f","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.20.tgz","fileCount":18,"integrity":"sha512-9ExMa+8Bd79TEfxQsOoCfKgZTro3a7q7feA+WkhovTCCbJXEi1vIsa0s8qvDcM5zZQl9y2g71CmfGBZHR4oi6w==","signatures":[{"sig":"MEUCIGBbB/pYq8tprWM58u/QbZOdfollMYLk4laDA+trUvIuAiEAs0FnmeunpPExXh37KqKSK4p962P7AfBq23p/zbvfz0M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45276},"main":"index.js","gitHead":"534364d5bca5623a2c6fdd157bdff5cf3cad666e","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"dotenv":"^16.5.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.20_1749501756231_0.2566986997984897","host":"s3://npm-registry-packages-npm-production"}},"1.0.21":{"name":"namune","version":"1.0.21","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.21","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"8811c3a0b24b3b6e9975bb012a518798c51da5d8","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.21.tgz","fileCount":17,"integrity":"sha512-gL7pNT7rj6bq+3wqtahq6qGNb3ecauCgRKI2VSvTitgPHwGf/cSvLaAb3bS4hM4cb7jqe7P8E7t96h+9zy2Diw==","signatures":[{"sig":"MEUCIEOqqHEtTX8c6LwyN+31nChYEFXd3wmvuLRQT0u3hIcaAiEAgypjfuLQDpApz0bQEbYYwjrmVREBSAdkbnpEI3J8UhE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45166},"main":"index.js","gitHead":"6f199247ae6b53b752a9033ab79ed343cd3a9d3c","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"dotenv":"^16.5.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.21_1749504917914_0.3088849862086944","host":"s3://npm-registry-packages-npm-production"}},"1.0.22":{"name":"namune","version":"1.0.22","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.22","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"ff565fb9d3109f96ee3216ec51d2275f9655a525","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.22.tgz","fileCount":25,"integrity":"sha512-YG0MltguKl7UcNU8ggU/30/Qh1yELnhaIHA8wSj+b3gBGqJJOLD7JqyOeTRJn7nE7Wa3mlocsSDzoHqAMyuBkA==","signatures":[{"sig":"MEUCIBhnfM7GH5/VZiUbO6SQjvEEb9Y/NebjmT6kZNJuFFnzAiEAtJDnDi9vjnLA+YuGJzm+6UMs3RkiknePmIR2x371UPQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70081},"main":"index.js","gitHead":"13aac1facba19624989a25a8bf8f3ce71f33a9d2","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"axios":"^1.9.0","dotenv":"^16.5.0","aws-sdk":"^2.1692.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","nodemailer":"^7.0.3","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.22_1749668191781_0.366283096892271","host":"s3://npm-registry-packages-npm-production"}},"1.0.23":{"name":"namune","version":"1.0.23","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.23","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"db8c7ecb34a3ba8da26832d715733ced6331884d","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.23.tgz","fileCount":25,"integrity":"sha512-ei3rnOZzYAZeYv7dPfUW1yB/YhEwQFwk6ckaFm7illS644RCCGGgLkYICm+FYFaIF+M9MScFcXS5jUNBH+VWww==","signatures":[{"sig":"MEUCIQDMy5cXeFr8aRVnBQdGBmSD1SgmMHoFBaLy9PRnDAT2EwIgYLsfdqv7b4wHuuRvB4wg7cqmxyxGPI/S/4ZGGP5tJhY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70175},"main":"index.js","gitHead":"53477c1589648bd825707995042355ff4be97945","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"axios":"^1.9.0","dotenv":"^16.5.0","aws-sdk":"^2.1692.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","nodemailer":"^7.0.3","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.23_1749674370767_0.9367561619350488","host":"s3://npm-registry-packages-npm-production"}},"1.0.24":{"name":"namune","version":"1.0.24","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.24","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"e03f3ffa540f18fd176cb93326052dc03fe707c9","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.24.tgz","fileCount":26,"integrity":"sha512-ZTVJrZF2WrlNTh/dVPKWw1pqWnCEw/YnWb8Jkc1EgcY65EWG/IJTNjoFdLUdmQIWu60NUtGtHEO9MCZZZgXlpQ==","signatures":[{"sig":"MEUCIQD099aBRYzQA5wtxh7HWvYytrgwhAb098Cpw3mEVGMAPAIgTr48yo1k4JIymgw+nOtu6UPJg+j7p0SRGpiyJ/r3Gdo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75022},"main":"index.js","gitHead":"f55a3dea263c6a674eb81d5c75157bd380792142","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"axios":"^1.9.0","dotenv":"^16.5.0","aws-sdk":"^2.1692.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","nodemailer":"^7.0.3","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.24_1749681822145_0.9250026075666078","host":"s3://npm-registry-packages-npm-production"}},"1.0.25":{"name":"namune","version":"1.0.25","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.25","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"3b2c0a3d754b44dbfaf240a5b83d7fca464496e6","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.25.tgz","fileCount":26,"integrity":"sha512-zxS2Dcs14pzpt6QONhcqY5bZ6wqlHPD7tbuhfeMZ6ZQbz+xH31yhGg1OEAlVp31eElBH4YqGEg3eaaa4Yqbrjw==","signatures":[{"sig":"MEYCIQDnqc0qY9Az30WVnYo80lY5tI7Yh6mcg7b8btVCni7DegIhAMhxSSu0bgZOa/l0Shj7xIXZmQx5oE94vvCCBzUXybJ4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76906},"main":"index.js","gitHead":"702b042bee8940aea08de1424881d9528dff4c9f","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"axios":"^1.9.0","dotenv":"^16.5.0","aws-sdk":"^2.1692.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","nodemailer":"^7.0.3","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.25_1750095429641_0.27534633475993364","host":"s3://npm-registry-packages-npm-production"}},"1.0.26":{"name":"namune","version":"1.0.26","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","_id":"namune@1.0.26","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"homepage":"https://github.com/Katwave/namune#readme","bugs":{"url":"https://github.com/Katwave/namune/issues"},"bin":{"nmn":"bin/nmn.js"},"dist":{"shasum":"8c6bb7efebfde25fc97094031d47f968e481331a","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.26.tgz","fileCount":26,"integrity":"sha512-YCsECkiho2mipDJV14bgS19kQ31zReeLqX+V9aYi11IRjrOD7AFL30gt0hr45RUhECXtJQLeptKCR8EO4mb/kA==","signatures":[{"sig":"MEYCIQCXK5jCdaDg91tPmyRMuptM67Frkmzh+hXjYKS/6cqduwIhALhrN0Tt9OWdub6Bp21O2IQYjBxzp699bO3T6zvJrRKk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76787},"main":"index.js","gitHead":"99a359e356a64530abe6d82dfbbe6dea1e98f289","scripts":{"dev":"nodemon index.js","test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"},"repository":{"url":"git+https://github.com/Katwave/namune.git","type":"git"},"_npmVersion":"10.2.3","description":"A Quick Setup Express API.","directories":{},"_nodeVersion":"20.10.0","dependencies":{"axios":"^1.9.0","dotenv":"^16.5.0","aws-sdk":"^2.1692.0","express":"^5.1.0","nodemon":"^3.1.10","bcryptjs":"^3.0.2","mongoose":"^8.15.1","passport":"^0.7.0","nodemailer":"^7.0.3","body-parser":"^2.2.0","randomstring":"^1.3.1","connect-mongo":"^5.1.0","passport-local":"^1.0.0","express-session":"^1.18.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/namune_1.0.26_1750096758283_0.7473865465934797","host":"s3://npm-registry-packages-npm-production"}},"1.0.27":{"name":"namune","version":"1.0.27","description":"A Quick Setup Express API.","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1","start":"node index.js","dev":"nodemon index.js"},"keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/Katwave/namune.git"},"license":"MIT","dependencies":{"aws-sdk":"^2.1692.0","axios":"^1.9.0","bcryptjs":"^3.0.2","body-parser":"^2.2.0","connect-mongo":"^5.1.0","dotenv":"^16.5.0","express":"^5.1.0","express-session":"^1.18.1","mongoose":"^8.15.1","nodemailer":"^7.0.3","nodemon":"^3.1.10","passport":"^0.7.0","passport-local":"^1.0.0","randomstring":"^1.3.1"},"bin":{"nmn":"bin/nmn.js"},"_id":"namune@1.0.27","gitHead":"f82f4d6c7d459180bd03e15788ce7e16d658becf","bugs":{"url":"https://github.com/Katwave/namune/issues"},"homepage":"https://github.com/Katwave/namune#readme","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-is8O6Ukn3wLEzYDh4QJwQotbjmyork+VsyleIUF+/oAyi6+DdxURphQNwdIPQSHnrwiykPX7KNaGoDtipmTW7w==","shasum":"bead5d95428e15e905f36b3316bd5c3275dc6fca","tarball":"https://registry.npmjs.org/namune/-/namune-1.0.27.tgz","fileCount":26,"unpackedSize":77170,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDKPyqplVlqk5ZHHEMbLBP+batM+jEeMt158kwSqtJwGQIhANInD3YVrB1enAMhuKxzoKGVgfuXLzQxyQQVBoDhASkw"}]},"_npmUser":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com","actor":{"name":"katwave","email":"Katlegokatwavebeats@gmail.com","type":"user"}},"directories":{},"maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/namune_1.0.27_1750481439639_0.24279310326685488"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-08T21:30:56.840Z","modified":"2025-06-21T04:50:40.410Z","1.0.0":"2025-06-08T21:30:57.033Z","1.0.2":"2025-06-08T22:34:32.714Z","1.0.3":"2025-06-08T23:31:51.247Z","1.0.4":"2025-06-08T23:40:54.064Z","1.0.5":"2025-06-08T23:48:44.414Z","1.0.6":"2025-06-08T23:57:32.000Z","1.0.7":"2025-06-09T00:21:03.227Z","1.0.8":"2025-06-09T00:23:46.747Z","1.0.9":"2025-06-09T00:31:38.898Z","1.0.10":"2025-06-09T00:36:18.306Z","1.0.11":"2025-06-09T00:38:34.919Z","1.0.12":"2025-06-09T01:28:58.319Z","1.0.13":"2025-06-09T01:46:25.125Z","1.0.14":"2025-06-09T01:48:57.893Z","1.0.15":"2025-06-09T01:51:49.846Z","1.0.16":"2025-06-09T01:53:49.995Z","1.0.17":"2025-06-09T02:00:17.815Z","1.0.18":"2025-06-09T02:35:12.260Z","1.0.19":"2025-06-09T19:31:26.732Z","1.0.20":"2025-06-09T20:42:36.421Z","1.0.21":"2025-06-09T21:35:18.233Z","1.0.22":"2025-06-11T18:56:31.961Z","1.0.23":"2025-06-11T20:39:30.940Z","1.0.24":"2025-06-11T22:43:42.335Z","1.0.25":"2025-06-16T17:37:09.812Z","1.0.26":"2025-06-16T17:59:18.492Z","1.0.27":"2025-06-21T04:50:39.849Z"},"bugs":{"url":"https://github.com/Katwave/namune/issues"},"author":{"name":"Katlego Mangoale","email":"katdevcom@gmail.com"},"license":"MIT","homepage":"https://github.com/Katwave/namune#readme","keywords":["library","express","javascript","backend","web","http","rest","restful","router","app","api"],"repository":{"type":"git","url":"git+https://github.com/Katwave/namune.git"},"description":"A Quick Setup Express API.","maintainers":[{"name":"katwave","email":"Katlegokatwavebeats@gmail.com"}],"readme":"# namune\r\n\r\n[![npm version](https://img.shields.io/npm/v/namune)](https://www.npmjs.com/package/namune)\r\n[![license: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\r\n\r\n**A production-ready Express.js library with built-in authentication, middleware configuration, and route management.**\r\n\r\n---\r\n\r\n## Features\r\n\r\n- 🔐 Built-in authentication system (register, login, logout, verification)\r\n- ⚙️ Configurable middleware stack (CORS, sessions, body parsing)\r\n- 🗃️ MongoDB integration with Mongoose\r\n- 🛣️ Automatic route loading and management\r\n- 🔒 Passport.js integration for local authentication\r\n- 🚀 Production-ready error handling and security practices\r\n- 🧩 Modular architecture for easy extension\r\n- 🖂 Mail Sending\r\n- < > Advanced Pagination\r\n- 💳 Payments with payfast\r\n- 📁 Cloud File Uploads (To AWS S3)\r\n\r\n---\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install -g namune\r\n# or\r\nyarn global add namune\r\n```\r\n\r\n---\r\n\r\n## Quick Start\r\n\r\n```bash\r\nnmn create\r\n# or\r\nnmn create myproject\r\n```\r\n\r\n```bash\r\n# For hot reload when you save changes\r\nnpm run dev\r\n# or for manual reload\r\nnpm start\r\n```\r\n\r\n---\r\n\r\n## API Reference\r\n\r\n### Middleware Configuration (`MidsConfigs`)\r\n\r\n#### `new MidsConfigs(app)`\r\n\r\n- `app` (Express): Express application instance\r\n\r\n#### Methods\r\n\r\n##### `registerMiddlewares(options)`\r\n\r\nRegisters all middleware.\r\n\r\n```javascript\r\noptions = {\r\n  dbConfig: { database_name: \"myapp\" },\r\n  usePassportLogin: true,\r\n  passportConfig: {\r\n    // Add your seperate custom local strategies for login authentication to the list\r\n    // Make sure to seperate strategyName with one dash (e.g user-local)\r\n    strategyList: [\r\n      {\r\n        strategyName: \"user-local\",\r\n        model: sharedDependencies.models.User, // Make sure this is included in shared.deps.js file\r\n        usernameField: \"email\", // Change relevant logic in routes/auth/api.routes.js to match your username field\r\n        verifyAccount: (user) => {\r\n          if (!user.accountActive) return \"Please verify your email first.\";\r\n          return null;\r\n        },\r\n      },\r\n    ],\r\n  },\r\n};\r\n```\r\n\r\n### Authentication Middleware\r\n\r\n#### `ensureAuthenticated(req, res, next)`\r\n\r\nMiddleware that checks if a user is authenticated. Returns 401 if not.\r\n\r\n### Authentication Routes (Can't be overwritten)\r\n\r\n- `POST /v1/auth/register` - User registration\r\n- `POST /v1/auth/verify/account` - Account verification\r\n- `POST /v1/auth/login` - User login\r\n- `GET /v1/auth/logout` - User logout\r\n- `POST /v1/auth/verify-email` - Email verification for password reset\r\n- `POST /v1/auth/reset-password` - Password reset\r\n- `POST /v1/auth/delete-account` - Account deletion\r\n\r\n---\r\n\r\n### Hooks\r\n\r\n##### AUTH Hooks: Returns a response\r\n\r\nResponse Structure: {success: boolean, message: string, data: any}\r\n\r\n##### `onSuccessRegister`\r\n\r\n##### `onFailRegister`\r\n\r\n##### `onSuccessVerifyUser`\r\n\r\n##### `onFailVerifyUser`\r\n\r\n##### `onSuccessLogin`\r\n\r\n##### `onFailLogin`\r\n\r\n##### `onSuccessLogout`\r\n\r\n##### `onFailLogout`\r\n\r\n##### `onSuccessDeleteUser`\r\n\r\n##### `onFailDeleteUser`\r\n\r\n##### `onSuccessVerify`\r\n\r\n##### `onFailVerify`\r\n\r\n##### `onSuccessChangePassword`\r\n\r\n##### `onFailChangePassword`\r\n\r\nExample\r\n\r\n```javascript\r\n// deps.js\r\nmodule.exports = {\r\n  global: {},\r\n  models: {},\r\n  utils: {},\r\n  hooks: {\r\n    onSuccessRegister: yourCustomFunction, // Fires when user successfully registers (/auth/register)\r\n    onFailRegister: yourCustomFunction, // Fires when user fails to register (/auth/register)\r\n  },\r\n};\r\n```\r\n\r\n## Route Management\r\n\r\nRoutes are automatically loaded from the `routes` directory. Use this pattern:\r\n\r\n```javascript\r\n// routes/example/api.routes.js\r\nclass ExampleRoute {\r\n  constructor(router, dependencies) {\r\n    this.router = router;\r\n    this.dependencies = dependencies;\r\n  }\r\n\r\n  exampleHandler(req, res) {\r\n    res.json({ message: \"Success\" });\r\n  }\r\n\r\n  registerRoutes() {\r\n    this.router.get(\"/\", this.exampleHandler);\r\n  }\r\n}\r\n\r\nmodule.exports = ExampleRoute;\r\n```\r\n\r\n---\r\n\r\n## Configuration\r\n\r\n### Environment Variables\r\n\r\n##### GENERAL\r\n\r\n| Variable        | Default                   | Description                              |\r\n| --------------- | ------------------------- | ---------------------------------------- |\r\n| `PORT`          | 8000                      | Server port                              |\r\n| `MONGODB_URI`   | mongodb://localhost:27017 | MongoDB connection string                |\r\n| `DATABASE_NAME` | example-db                | Database name                            |\r\n| `NODE_ENV`      | development               | Runtime environment                      |\r\n| `STAGING_ENV`   | undefined                 | Runtime environment                      |\r\n| `STAGING_URL`   | undefined                 | URL for your staging client/frontend     |\r\n| `PROD_URL`      | undefined                 | URL for your production client/frontend  |\r\n| `DEV_URL`       | http://localhost:3000     | URL for your development client/frontend |\r\n\r\n##### PAYMENTS (Using Payfast)\r\n\r\n| Variable                             | Default                  | Description                           |\r\n| ------------------------------------ | ------------------------ | ------------------------------------- |\r\n| `NGROK_SERVER_URL`                   | http://localhost:8000/v1 | ngrok server url                      |\r\n| `NGROK_CLIENT_URL`                   | http://localhost:3000    | ngrok client url                      |\r\n| `PAYFAST_PASS_PHRASE`                | undefined                | Payfast Pass Phrase                   |\r\n| `PAYFAST_MERCHANT_ID`                | 10000100                 | Payfast Merchant ID                   |\r\n| `PAYFAST_MERCHANT_KEY`               | 46f0cd694581a            | Payfast Merchant Key                  |\r\n| `PROD_API_URL`                       | undefined                | Production Api URL                    |\r\n| `PAYFAST_PAYMENT_CONFIRM_EMAIL`      | undefined                | Email to send payment confirmation to |\r\n| `process.env.PAYFAST_PAYMENT_METHOD` | cc                       | Payfast Payment method                |\r\n\r\n### Middleware Options\r\n\r\nYou can configure:\r\n\r\n- Database name\r\n- Passport.js integration\r\n- Session storage\r\n- CORS settings\r\n- Body parser limits\r\n\r\n---\r\n\r\n## Error Handling\r\n\r\n- Authentication failures return `401`\r\n- Database errors return `500`\r\n- Invalid requests return `400`\r\n- Route not found returns `404`\r\n- JSON responses include `success` and `message` fields\r\n- Detailed errors in `development` environment\r\n\r\n---\r\n\r\n## Examples\r\n\r\n### Custom Route Implementation\r\n\r\n```javascript\r\n// routes/custom/api.routes.js\r\nconst { Router } = require(\"express\");\r\n\r\nclass CustomRoute {\r\n  constructor(router, dependencies) {\r\n    this.router = router;\r\n    this.dependencies = dependencies;\r\n  }\r\n\r\n  getData(req, res) {\r\n    res.json({ data: \"Protected resource\", user: req.user });\r\n  }\r\n\r\n  registerRoutes() {\r\n    const { authenticate } = this.dependencies.global;\r\n    this.router.get(\"/data\", authenticate, this.getData);\r\n  }\r\n}\r\n\r\nmodule.exports = CustomRoute;\r\n```\r\n\r\n### Generating Hash (for any string)\r\n\r\n```javascript\r\n// namune/utils/gen-hash.js\r\nconst genHash = require(\"namune/utils/gen-hash.js\");\r\nconst hash = genHash({ password: \"12345\" });\r\n```\r\n\r\n### Send an email (Uses nodemailer)\r\n\r\n```javascript\r\n// namune/utils/sendMail.js\r\nconst sendMail = require(\"namune/utils/sendMail.js\");\r\n\r\n// Optional: Transport options. (Below is the dafault setup)\r\nconst transportOptions = {\r\n  host: \"mail.smtp2go.com\",\r\n  port: 80, // 25, 587, and 8025 can also be used (or 2525).\r\n};\r\n\r\n// IMPRTANT:\r\n// Make sure you have USER and PASS in the .env file for authenticating your email for transport\r\n\r\n// Options\r\nconst from = \"fromexample@gmail.co\";\r\nconst to = \"toexample@gmail.co\";\r\nconst subject = \"Verify account\";\r\nconst subject = \"Verify account\";\r\nconst attachments = [\r\n  {\r\n    filename: \"emailBanner.png\",\r\n    path: process.cwd() + \"/public/img/emailBanner.png\",\r\n    cid: \"emailBanner@domiher.com\",\r\n  },\r\n];\r\nconst html = \"<h1> Hi, please verify your account </h1>\";\r\n\r\nconst mailOptions = {\r\n  from,\r\n  to,\r\n  subject,\r\n  attachments,\r\n  html,\r\n};\r\n\r\nsendMail(mailOptions);\r\n```\r\n\r\n### Lazy-Load Dependencies to avoid circular loop errors\r\n\r\n```javascript\r\nmodule.exports = {\r\n  global: {},\r\n  models: {},\r\n  utils: {\r\n    get myUtil() {\r\n      return require(\"./utils/myUtil\");\r\n    },\r\n  },\r\n  hooks: {\r\n    get onFailRegister() {\r\n      return require(\"./hooks/register.fail\");\r\n    },\r\n  },\r\n};\r\n```\r\n\r\n### Pagination\r\n\r\n##### Input\r\n\r\n```javascript\r\n// For non-routes\r\nconst paginate = require('namune/utils/paginate');\r\n\r\n// For routes (api.routes.js)\r\n// const paginate = this.dependencies.utils.paginate\r\n\r\nconst data = [\r\n  { user: { name: \"Alice\" }, score: 91 },\r\n  { user: { name: \"Charlie\" }, score: 82 },\r\n  { user: { name: \"Bob\" }, score: 75 },\r\n];\r\n\r\n// Sort by nested property `user.name`\r\nconst result = paginate(data, {\r\n  page: 1,\r\n  limit: 2,\r\n  sortBy: 'user.name',\r\n  order: 'asc'\r\n  filterFn: (item) => item.score > 50\r\n});\r\n\r\nconsole.log(result);\r\n```\r\n\r\n##### ✅ Output Sample\r\n\r\n```bash\r\n{\r\n  data: [\r\n    { user: { name: \"Alice\" }, score: 91 },\r\n    { user: { name: \"Bob\" }, score: 75 }\r\n  ],\r\n  paginationMeta: {\r\n    page: 1,\r\n    limit: 2,\r\n    totalItems: 3,\r\n    totalPages: 2,\r\n    hasNext: true,\r\n    hasPrevious: false,\r\n    nextPage: 2,\r\n    previousPage: null\r\n  }\r\n}\r\n```\r\n\r\n###### Options\r\n\r\n`page: Number` Page to go to - Optional (Default is 0)\r\n`limit: Number` Number of items - Optional (Default is 10)\r\n`sortBy: String` Sort the data. Allows for nested properties - Optional (Default is null)\r\n`order` Order the Items by \"asc\" or \"desc\" - Optional (Default is \"asc\")\r\n`filterFn` Filter Function to filter data - Optional (Default is null)\r\n\r\n### Upload Files to cloud (Uses AWS S3)\r\n\r\n```javascript\r\n// Non routes\r\nconst { uploadBase64ImageToS3 } = require(\"namune/utils/cloudFileUpload\");\r\n\r\n// For routes (api.routes.js)\r\n// const {uploadBase64ImageToS3} = this.dependencies.utils.cloudFileUpload\r\n\r\nlet base64 = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA...\"; // A base64 image\r\nuploadBase64ImageToS3(base64).then(console.log);\r\n```\r\n\r\n##### Options (Second Parameter after base64)\r\n\r\n`ACL: String` For Access Control - Optional (Default is \"public-read\")\r\n`appendKey: String` Folder in bucket - Optional (Default is \"image-upload\")\r\n`region: String` Your S3 bucket region - Optional (Default is \"eu-north-1\")\r\n\r\n#### Other functions (supports multipart/form-data)\r\n\r\n`uploadImage`\r\n`uploadVideo`\r\n`uploadAudio`\r\n\r\nExample\r\n\r\n```javascript\r\nconst multer = require(\"multer\");\r\nconst upload = multer(); // memoryStorage by default\r\n\r\n// ... Class logic for routes\r\nregisterRoutes(){\r\n  this.router.post(\"/upload/image\", upload.single(\"file\"), async (req, res) => {\r\n    const result = await this.dependencies.utils.cloudFileUpload.uploadImage(req.file);\r\n    res.json(result);\r\n  });\r\n\r\n  this.router.post(\"/upload/video\", upload.single(\"file\"), async (req, res) => {\r\n    const result = await this.dependencies.utils.cloudFileUpload.uploadVideo(req.file);\r\n    res.json(result);\r\n  });\r\n\r\n  this.router.post(\"/upload/audio\", upload.single(\"file\"), async (req, res) => {\r\n    const result = await this.dependencies.utils.cloudFileUpload.uploadAudio(req.file);\r\n    res.json(result);\r\n  });\r\n}\r\n```\r\n\r\n##### Options for the above functions:\r\n\r\n`buffer: Buffer` - File buffer\r\n`originalName: String` - Original file name (e.g. image.jpg)\r\n`folder: String` - Folder in bucket (e.g. images, audio, videos)\r\n`options: {ACL: String, ContentType: String}` - Optional: ACL, ContentType\r\n\r\n#### Delete uploaded files\r\n\r\n`deleteFile` - Expects a file param\r\n`deleteMultipleFiles` - Expects an array of AWS keys (e.g. ['images/image.jpg', 'images/image2.jpg'])\r\n`deleteAllFilesInFolder` - Expects a prefix (e.g. \"images/user123/\")\r\n\r\n##### Options\r\n\r\n`file: {Key: String, VersionId: any, Location: String}` - File object uploaded. versionId is optional\r\n`keys: String[]` - Array of Keys\r\n\r\nExample\r\n\r\n```js\r\n// Delete specific files\r\nawait deleteMultipleFiles([\"images/abc.jpg\", \"videos/test.mp4\"]);\r\n\r\n// Delete everything under a folder\r\nawait deleteAllFilesInFolder(\"images/user123/\");\r\n```\r\n\r\n### Payments Using Payfast\r\n\r\nExample\r\n\r\n```js\r\n// In Routes context\r\n\r\n// Making the payment signature\r\nthis.router.get(\"/order\", (req, res) => {\r\n  const payfast = this.dependencies.utils.payfast;\r\n\r\n  const { data, html } = payfast.sig({\r\n    firstname: order.customerFirstName, // Required\r\n    lastname: order.customerLastName, // Required\r\n    email: order.customerEmail, // Required\r\n    payment_id: `${order.orderNumber}`, // Required\r\n    amount: `${order.totalPrice}`, // Required\r\n    order_num: `#${order.orderNumber}`, // Required\r\n    phone: order.customerPhoneNumber, // Optional\r\n    address: order.customerAddress, // Optional\r\n  });\r\n\r\n  return res.status(200).json({\r\n    success: true,\r\n    message: \"Successful!\",\r\n    data: { data, html },\r\n  });\r\n\r\n  /* Data returned from payfast.sig:\r\n  merchant_id,\r\n  merchant_key,\r\n  return_url,\r\n  cancel_url,\r\n  notify_url,\r\n  name_first,\r\n  name_last,\r\n  email_address,\r\n  m_payment_id,\r\n  amount,\r\n  item_name,\r\n  email_confirmation,\r\n  confirmation_address,\r\n  payment_method,\r\n  signature\r\n  */\r\n});\r\n\r\n// Request from Payfast after cancellation or successful payment\r\nthis.router.post(\"/notify\", async (req, res) => {\r\n  const { m_payment_id, amount_gross } = await req.body;\r\n  const payfast = this.dependencies.utils.payfast;\r\n\r\n  // Notify/Confirmation\r\n  payfast.confirm(req, amount_gross);\r\n\r\n  return res.status(200).json({\r\n    success: true,\r\n    message: \"Successful!\",\r\n    data: null,\r\n  });\r\n});\r\n```\r\n\r\n### Minimal Working Example\r\n\r\n```javascript\r\n// server.js\r\nrequire(\"dotenv\").config();\r\nconst express = require(\"express\");\r\nconst app = express();\r\nconst http = require(\"http\").createServer(app);\r\nconst MidsConfigs = require(\"namune/config/mids-configs\");\r\n\r\nconst mids = new MidsConfigs(app);\r\nmids.registerMiddlewares({\r\n  dbConfig: { database_name: \"myapp\" },\r\n  usePassportLogin: true,\r\n  passportConfig: {\r\n    userModel: require(\"./models/User\"),\r\n    usernameField: \"email\",\r\n  },\r\n});\r\n\r\napp.use(\"/api\", require(\"namune/routes/api\"));\r\n\r\nconst PORT = process.env.PORT || 8000;\r\nhttp.listen(PORT, () => console.log(`Server running on port ${PORT}`));\r\n```\r\n\r\n---\r\n\r\n## Contributing\r\n\r\nContributions are welcome!\r\n\r\n1. Fork the repository\r\n2. Create your feature branch: `git checkout -b feature/your-feature`\r\n3. Commit your changes: `git commit -am 'Add some feature'`\r\n4. Push to the branch: `git push origin feature/your-feature`\r\n5. Open a pull request\r\n\r\n---\r\n\r\n## License\r\n\r\nThis project is licensed under the [MIT License](LICENSE).\r\n","readmeFilename":"README.md"}