{"_id":"npm-package-nodejs-utils-lda","_rev":"184-c1e0d8db36efd1779c665b26eb3e4278","name":"npm-package-nodejs-utils-lda","dist-tags":{"latest":"1.0.89"},"versions":{"1.0.83":{"name":"npm-package-nodejs-utils-lda","version":"1.0.83","keywords":["lda"],"author":{"name":"LUIS_DAS_ARTIMANHAS"},"license":"ISC","_id":"npm-package-nodejs-utils-lda@1.0.83","maintainers":[{"name":"luisdasartimanhas","email":"luisaugustodesouza785@gmail.com"}],"homepage":"https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils","bugs":{"url":"https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils/issues"},"dist":{"shasum":"cbe7f5ab2733f8a27c8943b3486aa8cbb8a0682b","tarball":"https://registry.npmjs.org/npm-package-nodejs-utils-lda/-/npm-package-nodejs-utils-lda-1.0.83.tgz","fileCount":170,"integrity":"sha512-POHx7s95oIU0Hff5HKHrfNnV/71j2e3x/AsGRqhOrXXmbInde0DxF8l77C9jGZoyGyNDkTtx7i5dXysg7IAD3w==","signatures":[{"sig":"MEYCIQDS1m5qy2WDFY8c61K3UhpzBpnvcZ3YxDCszyOEjzPKSQIhAMakwWF/+rskGd/jH4rbHR+5+/pke5A3+vQCKY+eiNAf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1963302},"exports":{".":{"import":"./src/esm/index.mjs","require":"./src/cjs/index.cjs"}},"gitHead":"6b542af1b2ea810989ecb95ee02fa2af230caf65","scripts":{"test":"jest","update":"npx npm-check-updates -u && npm install","structure":"npx tree -a -I \"node_modules|.git\" > structure.txt"},"_npmUser":{"name":"luisdasartimanhas","email":"luisaugustodesouza785@gmail.com"},"repository":{"url":"git+https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils.git","type":"git"},"_npmVersion":"11.12.1","description":"Este projeto tem como fins de criar e abstrair módulos basicos e utilidades para o node js","directories":{},"_nodeVersion":"24.15.0","dependencies":{"os":"^0.1.2","ws":"^8.20.0","url":"^0.11.4","xss":"^1.0.15","cors":"^2.8.6","path":"^0.12.7","uuid":"^14.0.0","dotenv":"^17.4.2","figlet":"^1.11.0","helmet":"^8.1.0","multer":"^2.1.1","express":"^5.2.1","mongodb":"^7.2.0","form-data":"^4.0.5","discord.js":"^14.26.3","node-fetch":"3.3.2","node-forge":"^1.4.0","nodemailer":"^8.0.7","@google/genai":"^2.0.0","child_process":"^1.0.2","@discordjs/rest":"^2.6.1","@discordjs/builders":"^1.14.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-package-nodejs-utils-lda_1.0.83_1779062827810_0.9664965204680016","host":"s3://npm-registry-packages-npm-production"}},"1.0.84":{"name":"npm-package-nodejs-utils-lda","version":"1.0.84","keywords":["lda"],"author":{"name":"LUIS_DAS_ARTIMANHAS"},"license":"ISC","_id":"npm-package-nodejs-utils-lda@1.0.84","maintainers":[{"name":"luisdasartimanhas","email":"luisaugustodesouza785@gmail.com"}],"homepage":"https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils","bugs":{"url":"https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils/issues"},"dist":{"shasum":"3a5d2348d590369b38fc6ed34c135bb25071a641","tarball":"https://registry.npmjs.org/npm-package-nodejs-utils-lda/-/npm-package-nodejs-utils-lda-1.0.84.tgz","fileCount":171,"integrity":"sha512-BZT7PWasqcavUiC3nwg/ViuyxBGRH8om+UFkCqZglHStdO4eHQ+izKTuWdIORLWiFQ1yam/E4OXXrS2S/jeM1Q==","signatures":[{"sig":"MEYCIQDZw9pSkhLt10hMri0jck3w2kxfMz5YFHMqD8mYhzGNlAIhAPhQYW89GQuE0ZV4RkcFz9SoYI9rEveTfbYnm4wRaBdv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1965718},"exports":{".":{"import":"./src/esm/index.mjs","require":"./src/cjs/index.cjs"}},"gitHead":"55ac4420e8c5eced3fded1fb04fe04bb4daa0d3a","scripts":{"test":"jest","update":"npx npm-check-updates -u && npm install","structure":"npx tree -a -I \"node_modules|.git\" > structure.txt"},"_npmUser":{"name":"luisdasartimanhas","email":"luisaugustodesouza785@gmail.com"},"repository":{"url":"git+https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils.git","type":"git"},"_npmVersion":"11.13.0","description":"Este projeto tem como fins de criar e abstrair módulos basicos e utilidades para o node js","directories":{},"_nodeVersion":"24.16.0","dependencies":{"os":"^0.1.2","ws":"^8.20.0","url":"^0.11.4","xss":"^1.0.15","cors":"^2.8.6","path":"^0.12.7","uuid":"^14.0.0","dotenv":"^17.4.2","figlet":"^1.11.0","helmet":"^8.1.0","multer":"^2.1.1","express":"^5.2.1","mongodb":"^7.2.0","form-data":"^4.0.5","discord.js":"^14.26.3","node-fetch":"3.3.2","node-forge":"^1.4.0","nodemailer":"^8.0.7","@google/genai":"^2.0.0","child_process":"^1.0.2","@discordjs/rest":"^2.6.1","@discordjs/builders":"^1.14.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-package-nodejs-utils-lda_1.0.84_1780112316806_0.0009802410776589277","host":"s3://npm-registry-packages-npm-production"}},"1.0.85":{"name":"npm-package-nodejs-utils-lda","version":"1.0.85","keywords":["lda"],"author":{"name":"LUIS_DAS_ARTIMANHAS"},"license":"ISC","_id":"npm-package-nodejs-utils-lda@1.0.85","maintainers":[{"name":"luisdasartimanhas","email":"luisaugustodesouza785@gmail.com"}],"homepage":"https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils","bugs":{"url":"https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils/issues"},"dist":{"shasum":"ed7a84fcd6829ab27873eccf5f84377f47d094b8","tarball":"https://registry.npmjs.org/npm-package-nodejs-utils-lda/-/npm-package-nodejs-utils-lda-1.0.85.tgz","fileCount":172,"integrity":"sha512-lRnHW3q6rkY2n9E5S6u/p2qHvQIAdT+05tifZHMuyFGUrqUpsyZmg34zjBwvxbJAMEtLTZuZUEWqSt6k0hg10g==","signatures":[{"sig":"MEQCIBDCmL9jZ94HCXXQMHa62VnvP1xSpQ5XZwaHrlRN0xWGAiBWQm7I7jQxAuuoUpcuNW8Bqra4v8HSvIYwVJq29kK53g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1976234},"exports":{".":{"import":"./src/esm/index.mjs","require":"./src/cjs/index.cjs"}},"gitHead":"80403a7e1e6ff842144146e477e4f9dfb4267abb","scripts":{"test":"jest","update":"npx npm-check-updates -u && npm install","structure":"npx tree -a -I \"node_modules|.git\" > structure.txt"},"_npmUser":{"name":"luisdasartimanhas","email":"luisaugustodesouza785@gmail.com"},"repository":{"url":"git+https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils.git","type":"git"},"_npmVersion":"11.13.0","description":"Este projeto tem como fins de criar e abstrair módulos basicos e utilidades para o node js","directories":{},"_nodeVersion":"24.16.0","dependencies":{"os":"^0.1.2","ws":"^8.20.0","url":"^0.11.4","xss":"^1.0.15","cors":"^2.8.6","path":"^0.12.7","uuid":"^14.0.0","dotenv":"^17.4.2","figlet":"^1.11.0","helmet":"^8.1.0","multer":"^2.1.1","express":"^5.2.1","mongodb":"^7.2.0","form-data":"^4.0.5","discord.js":"^14.26.3","node-fetch":"3.3.2","node-forge":"^1.4.0","nodemailer":"^8.0.7","@google/genai":"^2.0.0","child_process":"^1.0.2","@discordjs/rest":"^2.6.1","@discordjs/builders":"^1.14.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0"},"_npmOperationalInternal":{"tmp":"tmp/npm-package-nodejs-utils-lda_1.0.85_1780411189561_0.2021332654922703","host":"s3://npm-registry-packages-npm-production"}},"1.0.86":{"name":"npm-package-nodejs-utils-lda","version":"1.0.86","keywords":["lda"],"author":{"name":"LUIS_DAS_ARTIMANHAS"},"license":"ISC","_id":"npm-package-nodejs-utils-lda@1.0.86","maintainers":[{"name":"luisdasartimanhas","email":"luisaugustodesouza785@gmail.com"}],"homepage":"https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils","bugs":{"url":"https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils/issues"},"dist":{"shasum":"c6f4b651026ff7db04cdfa8a94689abed2ad20e6","tarball":"https://registry.npmjs.org/npm-package-nodejs-utils-lda/-/npm-package-nodejs-utils-lda-1.0.86.tgz","fileCount":174,"integrity":"sha512-5ZUNdw1P+bGTCDT8jecjB0rSo2mhNvqDJ5Lax1zAw7keB86/ol5+KpdgbhV9wGrb0MkifLnR/daIgN8CMVklAQ==","signatures":[{"sig":"MEUCIEZEw+d4q7pUsfKF4h7L3L6DB/xp6m0FtOIjLv54HeL+AiEAwJNUajRTbNEzhmheXg5wnqFqOAn3XFJiQAWtkS/inbg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1980039},"exports":{".":{"import":"./src/esm/index.mjs","require":"./src/cjs/index.cjs"}},"gitHead":"eeb972f99e3e91108a59453587d9478520a51711","scripts":{"test":"jest","update":"npx npm-check-updates -u && npm install","structure":"npx tree -a -I \"node_modules|.git\" > structure.txt"},"_npmUser":{"name":"luisdasartimanhas","email":"luisaugustodesouza785@gmail.com"},"repository":{"url":"git+https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils.git","type":"git"},"_npmVersion":"11.13.0","description":"Este projeto tem como fins de criar e abstrair módulos basicos e utilidades para o node js","directories":{},"_nodeVersion":"24.16.0","dependencies":{"os":"^0.1.2","ws":"^8.21.0","url":"^0.11.4","xss":"^1.0.15","cors":"^2.8.6","path":"^0.12.7","uuid":"^14.0.1","dotenv":"^17.4.2","figlet":"^1.11.0","helmet":"^8.2.0","multer":"^2.2.0","express":"^5.2.1","mongodb":"^7.4.0","form-data":"^4.0.6","discord.js":"^14.26.4","node-fetch":"3.3.2","node-forge":"^1.4.0","nodemailer":"^9.0.1","@google/genai":"^2.10.0","child_process":"^1.0.2","@discordjs/rest":"^2.6.1","@discordjs/builders":"^1.14.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2"},"_npmOperationalInternal":{"tmp":"tmp/npm-package-nodejs-utils-lda_1.0.86_1782766769506_0.2264517019174277","host":"s3://npm-registry-packages-npm-production"}},"1.0.87":{"name":"npm-package-nodejs-utils-lda","version":"1.0.87","keywords":["lda"],"author":{"name":"LUIS_DAS_ARTIMANHAS"},"license":"ISC","_id":"npm-package-nodejs-utils-lda@1.0.87","maintainers":[{"name":"luisdasartimanhas","email":"luisaugustodesouza785@gmail.com"}],"homepage":"https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils","bugs":{"url":"https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils/issues"},"dist":{"shasum":"33ab867b5163f2e52a5658c9242edc83a2923ce3","tarball":"https://registry.npmjs.org/npm-package-nodejs-utils-lda/-/npm-package-nodejs-utils-lda-1.0.87.tgz","fileCount":175,"integrity":"sha512-HQL9Tb80mra+mXKbFI62xTNEmxYHrJasfBX3QK6NSV7boE6iLrOoz4Ewv4mjaOwKD/iYFCphX6DAZoijJKzC2w==","signatures":[{"sig":"MEUCIQDl2sjDHEURH8euBnIAqANrZwWdBN4nCkPxv5tJzpy71gIgEB+l/gQtNRpewiJP75dVXRLb71Je2thokF+zHIgGkXg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1990180},"exports":{".":{"import":"./src/esm/index.mjs","require":"./src/cjs/index.cjs"}},"gitHead":"e73c4c33eeb532dc9bd3d19361b7827844d4d715","scripts":{"test":"jest","update":"npx npm-check-updates -u && npm install","structure":"npx tree -a -I \"node_modules|.git\" > structure.txt"},"_npmUser":{"name":"luisdasartimanhas","email":"luisaugustodesouza785@gmail.com"},"repository":{"url":"git+https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils.git","type":"git"},"_npmVersion":"11.13.0","description":"Este projeto tem como fins de criar e abstrair módulos basicos e utilidades para o node js","directories":{},"_nodeVersion":"24.16.0","dependencies":{"os":"^0.1.2","ws":"^8.21.0","url":"^0.11.4","xss":"^1.0.15","cors":"^2.8.6","path":"^0.12.7","uuid":"^14.0.1","dotenv":"^17.4.2","figlet":"^1.11.0","helmet":"^8.2.0","multer":"^2.2.0","express":"^5.2.1","mongodb":"^7.4.0","form-data":"^4.0.6","discord.js":"^14.26.4","node-fetch":"3.3.2","node-forge":"^1.4.0","nodemailer":"^9.0.1","@google/genai":"^2.10.0","child_process":"^1.0.2","@discordjs/rest":"^2.6.1","@discordjs/builders":"^1.14.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2"},"_npmOperationalInternal":{"tmp":"tmp/npm-package-nodejs-utils-lda_1.0.87_1783364963938_0.9852427264639594","host":"s3://npm-registry-packages-npm-production"}},"1.0.88":{"name":"npm-package-nodejs-utils-lda","version":"1.0.88","keywords":["lda"],"author":{"name":"LUIS_DAS_ARTIMANHAS"},"license":"ISC","_id":"npm-package-nodejs-utils-lda@1.0.88","maintainers":[{"name":"luisdasartimanhas","email":"luisaugustodesouza785@gmail.com"}],"homepage":"https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils","bugs":{"url":"https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils/issues"},"dist":{"shasum":"433ef0b0b4461bf1f3e82b3ae82b70aa284abfcc","tarball":"https://registry.npmjs.org/npm-package-nodejs-utils-lda/-/npm-package-nodejs-utils-lda-1.0.88.tgz","fileCount":175,"integrity":"sha512-f+hwIQQdSmBjiWov2gMW3UmfM6U0gaTFlKpVSfwfIf3RkS0q5YanlXBMK3oMFMTxa/trayBbJ52NrL2XnNS1UA==","signatures":[{"sig":"MEYCIQD+VlSJbeQekfO2FSytH3TzVs4dH2qMzXV1zPY/Mx2xRQIhAMZ01IiJndtohJtzK0/8xPARyPjdFrRq0f7PIJOuul3k","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1990272},"exports":{".":{"import":"./src/esm/index.mjs","require":"./src/cjs/index.cjs"}},"gitHead":"563745ef6b19a8ab823c7752bf276e55d072dcf4","scripts":{"test":"jest","update":"npx npm-check-updates -u && npm install","structure":"npx tree -a -I \"node_modules|.git\" > structure.txt"},"_npmUser":{"name":"luisdasartimanhas","email":"luisaugustodesouza785@gmail.com"},"repository":{"url":"git+https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils.git","type":"git"},"_npmVersion":"11.13.0","description":"Este projeto tem como fins de criar e abstrair módulos basicos e utilidades para o node js","directories":{},"_nodeVersion":"24.16.0","dependencies":{"os":"^0.1.2","ws":"^8.21.0","url":"^0.11.4","xss":"^1.0.15","cors":"^2.8.6","path":"^0.12.7","uuid":"^14.0.1","dotenv":"^17.4.2","figlet":"^1.11.0","helmet":"^8.2.0","multer":"^2.2.0","express":"^5.2.1","mongodb":"^7.5.0","form-data":"^4.0.6","discord.js":"^14.26.4","node-fetch":"3.3.2","node-forge":"^1.4.0","nodemailer":"^9.0.3","@google/genai":"^2.11.0","child_process":"^1.0.2","@discordjs/rest":"^2.6.1","@discordjs/builders":"^1.14.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2"},"_npmOperationalInternal":{"tmp":"tmp/npm-package-nodejs-utils-lda_1.0.88_1783636128031_0.9071794678110574","host":"s3://npm-registry-packages-npm-production"}},"1.0.89":{"name":"npm-package-nodejs-utils-lda","version":"1.0.89","description":"Este projeto tem como fins de criar e abstrair módulos basicos e utilidades para o node js","exports":{".":{"require":"./src/cjs/index.cjs","import":"./src/esm/index.mjs"}},"homepage":"https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils","scripts":{"test":"jest","update":"npx npm-check-updates -u && npm install","structure":"npx tree -a -I \"node_modules|.git\" > structure.txt"},"repository":{"type":"git","url":"git+https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils.git"},"keywords":["lda"],"author":{"name":"LUIS_DAS_ARTIMANHAS"},"license":"ISC","bugs":{"url":"https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils/issues"},"dependencies":{"@discordjs/builders":"^1.14.1","@discordjs/rest":"^2.6.1","@google/genai":"^2.11.0","child_process":"^1.0.2","cors":"^2.8.6","discord.js":"^14.26.4","dotenv":"^17.4.2","express":"^5.2.1","figlet":"^1.11.0","form-data":"^4.0.6","helmet":"^8.2.0","mongodb":"^7.5.0","multer":"^2.2.0","node-fetch":"3.3.2","node-forge":"^1.4.0","nodemailer":"^9.0.3","os":"^0.1.2","path":"^0.12.7","url":"^0.11.4","uuid":"^14.0.1","ws":"^8.21.0","xss":"^1.0.15"},"devDependencies":{"jest":"^30.4.2"},"gitHead":"cb133819df2e5e8590b9aa94e1b19ca001a4890f","_id":"npm-package-nodejs-utils-lda@1.0.89","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-wDiNlzIot26GKI1EkEoZM4899gpW2TUGz8p3LnXfNedhHdVcTk3oJtxbS4Br+FeFevEK0qBdbj7koVGHIFAteA==","shasum":"3ad411c728f949c16cdbbc589180c5f59e61746e","tarball":"https://registry.npmjs.org/npm-package-nodejs-utils-lda/-/npm-package-nodejs-utils-lda-1.0.89.tgz","fileCount":177,"unpackedSize":1995521,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDmVYUms5HjlBTlp061EbHi+Tvq6cGg8cBAg0RJHzLMOAIhAORuwNpu4VvtRIkJjRQgCZiIahSWmu2j3PN9xmncew/u"}]},"_npmUser":{"name":"luisdasartimanhas","email":"luisaugustodesouza785@gmail.com"},"directories":{},"maintainers":[{"name":"luisdasartimanhas","email":"luisaugustodesouza785@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/npm-package-nodejs-utils-lda_1.0.89_1783804254047_0.7423682086940346"},"_hasShrinkwrap":false}},"time":{"created":"2024-10-15T14:47:23.703Z","modified":"2026-07-11T21:10:54.434Z","1.0.0":"2024-10-10T15:37:43.866Z","1.0.1":"2024-10-10T15:57:54.564Z","1.0.2":"2024-10-10T16:35:28.552Z","1.0.3":"2024-10-10T16:47:04.971Z","1.0.4":"2024-10-10T17:56:22.453Z","1.0.5":"2024-10-10T18:06:58.778Z","1.0.6":"2024-10-10T19:06:02.073Z","1.0.7":"2024-10-15T14:47:23.887Z","1.0.8":"2024-10-15T17:11:22.206Z","1.0.9":"2024-12-10T18:54:55.148Z","1.0.10":"2024-12-11T23:27:00.521Z","1.0.11":"2024-12-12T00:50:30.266Z","1.0.12":"2024-12-13T14:36:25.155Z","1.0.13":"2024-12-13T14:44:35.567Z","1.0.14":"2024-12-14T00:15:17.156Z","1.0.15":"2024-12-14T00:31:55.375Z","1.0.16":"2024-12-14T01:20:34.309Z","1.0.17":"2024-12-14T01:52:28.764Z","1.0.18":"2024-12-14T03:34:28.310Z","1.0.19":"2024-12-16T03:32:04.683Z","1.0.20":"2024-12-24T15:37:52.513Z","1.0.21":"2024-12-24T16:55:26.136Z","1.0.22":"2025-02-03T01:23:23.269Z","1.0.23":"2025-02-03T18:28:43.621Z","1.0.24":"2025-02-15T22:36:38.551Z","1.0.25":"2025-02-15T23:53:07.097Z","1.0.26":"2025-02-22T14:17:28.823Z","1.0.27":"2025-02-22T18:56:15.337Z","1.0.28":"2025-02-23T17:35:32.395Z","1.0.29":"2025-03-01T19:18:46.347Z","1.0.31":"2025-03-01T20:01:06.212Z","1.0.31-beta.1":"2025-03-01T20:42:44.714Z","1.0.29-beta.2":"2025-03-01T20:54:39.659Z","1.0.30":"2025-03-01T20:58:40.527Z","1.0.31-beta.3":"2025-03-01T21:51:53.145Z","1.0.31-beta.4":"2025-03-01T22:10:07.859Z","1.0.31-beta.5":"2025-03-01T22:24:11.879Z","1.0.33":"2025-03-25T16:00:12.566Z","1.0.34":"2025-03-25T19:44:26.438Z","1.0.35":"2025-03-25T19:48:41.137Z","1.0.36":"2025-04-21T16:05:50.161Z","1.0.36-beta-01":"2025-04-21T16:09:19.014Z","1.0.37":"2025-04-27T00:42:23.560Z","1.0.37-beta-1":"2025-05-02T14:52:56.691Z","1.0.37-beta-2":"2025-05-02T18:17:05.973Z","1.0.38":"2025-05-02T20:28:21.795Z","1.0.38-beta-01":"2025-05-09T14:51:36.006Z","1.0.39":"2025-07-04T21:16:28.982Z","1.0.40":"2025-07-04T22:18:48.439Z","1.0.41":"2025-07-05T17:41:26.761Z","1.0.42":"2025-07-07T00:53:01.617Z","1.0.43":"2025-07-26T18:21:59.884Z","1.0.44":"2025-09-18T16:24:18.336Z","1.0.45":"2025-10-04T15:03:05.059Z","1.0.46":"2025-10-05T21:09:20.053Z","1.0.47":"2025-12-15T11:36:27.781Z","1.0.48":"2025-12-21T20:34:31.159Z","1.0.49":"2025-12-21T22:29:53.575Z","1.0.50":"2025-12-21T22:34:43.565Z","1.0.51":"2025-12-21T22:45:48.821Z","1.0.52":"2025-12-21T23:15:44.709Z","1.0.53":"2026-01-20T00:22:18.852Z","1.0.54":"2026-01-20T15:02:34.845Z","1.0.55":"2026-01-20T15:20:57.124Z","1.0.56":"2026-01-29T17:48:10.981Z","1.0.57":"2026-01-29T18:55:54.131Z","1.0.58":"2026-02-02T17:06:12.205Z","1.0.59":"2026-02-03T20:13:50.852Z","1.0.60":"2026-02-13T00:44:00.498Z","1.0.61":"2026-02-13T17:18:36.025Z","1.0.62":"2026-02-21T01:31:53.441Z","1.0.63":"2026-02-24T18:44:30.007Z","1.0.64":"2026-02-26T20:34:50.994Z","1.0.65":"2026-03-04T21:48:41.048Z","1.0.66":"2026-03-04T22:12:44.271Z","1.0.67":"2026-03-04T22:41:33.765Z","1.0.68":"2026-03-04T22:49:56.545Z","1.0.69":"2026-03-07T23:52:55.234Z","1.0.70":"2026-03-08T01:36:23.806Z","1.0.71":"2026-03-14T16:52:21.393Z","1.0.72":"2026-03-20T02:15:09.642Z","1.0.73":"2026-03-23T21:05:47.711Z","1.0.74":"2026-03-30T02:30:03.416Z","1.0.75":"2026-04-08T03:01:12.769Z","1.0.76":"2026-04-08T03:47:44.640Z","1.0.77":"2026-04-14T15:37:53.392Z","1.0.78":"2026-04-30T18:43:33.143Z","1.0.79":"2026-05-09T21:32:08.564Z","1.0.80":"2026-05-10T00:59:20.075Z","1.0.81":"2026-05-11T20:16:32.536Z","1.0.82":"2026-05-16T20:26:45.190Z","1.0.83":"2026-05-18T00:07:08.005Z","1.0.84":"2026-05-30T03:38:37.049Z","1.0.85":"2026-06-02T14:39:49.741Z","1.0.86":"2026-06-29T20:59:29.674Z","1.0.87":"2026-07-06T19:09:24.180Z","1.0.88":"2026-07-09T22:28:48.337Z","1.0.89":"2026-07-11T21:10:54.306Z"},"bugs":{"url":"https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils/issues"},"author":{"name":"LUIS_DAS_ARTIMANHAS"},"license":"ISC","homepage":"https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils","keywords":["lda"],"repository":{"type":"git","url":"git+https://github.com/LUISDASARTIMANHAS/npm-package-nodejs-utils.git"},"description":"Este projeto tem como fins de criar e abstrair módulos basicos e utilidades para o node js","maintainers":[{"name":"luisdasartimanhas","email":"luisaugustodesouza785@gmail.com"}],"readme":"# npm-package-nodejs-utils\r\nEste projeto tem como fins de criar e abstrair módulos basicos e utilidades para o node js\r\n\r\nrequires\r\n.env file\r\nconfig.json file\r\ndata folder\r\n\r\nautomatic create requires folders and files.\r\nautomatic generation of AES + RSA KEYS FOR ENCRYPTION\r\n\r\n## Functions\r\n[FUNCTIONS](./functionsList.md)\r\n\r\n# Discord Utils\r\n\r\n[DiscordUtils](./discordUtils.md)\r\n\r\n## self-hosted status dashboard\r\n\r\nThe dashboard uses the /status route, automatically created with the function StatusDashboard(app). This means you can also use the endpoint, but don't overwrite it.\r\n\r\n// PT-BR\r\n\r\nO dashboard utiliza a rota /status, criado automaticamente com function StatusDashboard(app), isso significa que voce tambem pode usar o endpoint mas não o sobrescreva\r\n\r\n![StatusDashboard - app](./StatusDashboard%20-%20app.png)\r\n\r\n## self-hosted Logs dashboard\r\n\r\nThe dashboard is automatically rendered using the logsDashboard(app) function. The dashboard uses the logs folder automatically generated by the library and the parameters of \"requestLogger\": { \"enabled\": true } in config.json.\r\n\r\n// PT-BR\r\n\r\nO dashboard e renderizado automaticamente usando a função logsDashboard(app). o dashboard usa a pasta logs gerada automaticamente pela blibioteca e os parametros de \"requestLogger\": { \"enabled\": true } em config.json\r\n\r\n![LogsDasboard - app](./logs%20dashboard%20-%20app.png)\r\n\r\nEste arquivo implementa um canal criptográfico seguro no nível da aplicação, funcionando como um mini-TLS customizado, porém controlado totalmente por código.\r\nUsa padrões modernos e seguros\r\n\r\n- RSA-OAEP com SHA-256 (correto)\r\n\r\n- AES-256-GCM (estado da arte)\r\n\r\n- Proteção contra replay\r\n\r\n- Separação clara de responsabilidades\r\n\r\n\r\n### Casos de uso reais\r\n\r\n  - APIs seguras entre servidores\r\n\r\n  - Comunicação cliente ↔ backend sensível\r\n\r\n  - Sistemas financeiros\r\n\r\n  - Troca de credenciais\r\n\r\n  - Licenciamento de software\r\n\r\n  - Autenticação forte sem TLS customizado\r\n\r\n  - Comunicação entre containers isolados\r\n\r\n# usage\r\n```js\r\nimport express from 'express';\r\nimport { encryptedPayloadMiddleware } from 'npm-package-nodejs-utils-lda';\r\n\r\nconst app = express();\r\napp.use(express.json());\r\n\r\napp.post('/secure-endpoint', encryptedPayloadMiddleware, (req, res) => {\r\n  res.json({ received: req.decryptedBody });\r\n});\r\n\r\napp.listen(3000, () => console.log('Servidor rodando na porta 3000'));\r\n```\r\n\r\n# client mode\r\n\r\n🔑 Crypto Client Implementation (Front-end/Node.js)\r\nPara que o cliente (browser, React, ou outro servidor) possa se comunicar com segurança, ele deve:\r\n\r\nBuscar a chave RSA pública do servidor (/public-keys/public_key.pem).\r\n\r\nGerar uma chave AES efêmera.\r\n\r\nCriptografar a chave AES com a chave RSA pública (Key Exchange).\r\n\r\nCriptografar o payload da mensagem com a chave AES (Data Encryption).\r\n\r\nEnviar o pacote completo (AES key, IV, AuthTag, Timestamp, Nonce) ao endpoint seguro.\r\n\r\nExemplo de Código do Lado do Cliente (Browser/Web Crypto API)\r\n\r\n```js\r\n// crypto_client.js (Implementação de referência)\r\n\r\n// 1. Defina a URL da chave pública (deve ser a rota que você expôs)\r\nconst PUBLIC_KEY_URL = '/public-keys/public_key.pem';\r\nconst API_URL = '/secure-endpoint';\r\n\r\n/**\r\n * Converte um buffer para string Base64 (Web-Safe)\r\n * @param {ArrayBuffer} buffer\r\n * @returns {string} Base64 Web-Safe string.\r\n */\r\nfunction arrayBufferToBase64(buffer) {\r\n    let binary = '';\r\n    const bytes = new Uint8Array(buffer);\r\n    for (let i = 0; i < bytes.byteLength; i++) {\r\n        binary += String.fromCharCode(bytes[i]);\r\n    }\r\n    return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\r\n}\r\n\r\n/**\r\n * Busca e importa a chave RSA pública do servidor.\r\n * @returns {Promise<CryptoKey>} Chave RSA importada.\r\n */\r\nasync function getPublicKey() {\r\n    const response = await fetch(PUBLIC_KEY_URL);\r\n    if (!response.ok) throw new Error('Falha ao buscar chave pública do servidor.');\r\n    \r\n    const pem = await response.text();\r\n    \r\n    // Remove cabeçalho e rodapé PEM e trata Base64\r\n    const base64 = pem\r\n        .replace('-----BEGIN PUBLIC KEY-----', '')\r\n        .replace('-----END PUBLIC KEY-----', '')\r\n        .replace(/\\s/g, ''); \r\n        \r\n    const binaryDer = Uint8Array.from(atob(base64), c => c.charCodeAt(0));\r\n    \r\n    // Importa a chave pública para a Web Crypto API\r\n    return crypto.subtle.importKey(\r\n        'spki',\r\n        binaryDer,\r\n        {\r\n            name: \"RSA-OAEP\",\r\n            hash: \"SHA-256\",\r\n        },\r\n        true,\r\n        [\"wrapKey\"]\r\n    );\r\n}\r\n\r\n/**\r\n * Criptografa o payload para ser enviado ao servidor.\r\n * @param {object} data - O objeto JSON a ser criptografado.\r\n * @returns {Promise<object>} O payload criptografado pronto para envio.\r\n */\r\nexport async function encryptAndSend(data) {\r\n    const rsaPublicKey = await getPublicKey();\r\n\r\n    // 1. Gerar Chave AES-256-GCM (Chave Secreta Efêmera)\r\n    const aesKey = await crypto.subtle.generateKey(\r\n        { name: \"AES-GCM\", length: 256 },\r\n        true,\r\n        [\"encrypt\", \"decrypt\", \"wrapKey\", \"unwrapKey\"]\r\n    );\r\n\r\n    // 2. Criptografar (Wrap) a Chave AES com a Chave RSA Pública (RSA-OAEP)\r\n    const encryptedKeyBuffer = await crypto.subtle.wrapKey(\r\n        \"raw\",\r\n        aesKey,\r\n        rsaPublicKey,\r\n        { name: \"RSA-OAEP\" }\r\n    );\r\n\r\n    // 3. Criptografar o Payload (AES-256-GCM)\r\n    const iv = crypto.getRandomValues(new Uint8Array(12)); // Initialization Vector (IV)\r\n    const plaintext = JSON.stringify(data);\r\n    const encodedData = new TextEncoder().encode(plaintext);\r\n    \r\n    const cipherBuffer = await crypto.subtle.encrypt(\r\n        { name: \"AES-GCM\", iv: iv },\r\n        aesKey,\r\n        encodedData\r\n    );\r\n\r\n    // O AES-GCM anexa o AuthTag ao final do ciphertext\r\n    const authTagLength = 16; // 16 bytes para GCM\r\n    const encryptedDataBuffer = cipherBuffer.slice(0, cipherBuffer.byteLength - authTagLength);\r\n    const authTagBuffer = cipherBuffer.slice(cipherBuffer.byteLength - authTagLength);\r\n\r\n    // Gerar Timestamp e Nonce para Proteção Anti-Replay\r\n    const timestamp = Date.now();\r\n    const nonce = arrayBufferToBase64(crypto.getRandomValues(new Uint8Array(16)));\r\n\r\n    // 4. Preparar o Pacote Final\r\n    const payload = {\r\n        encryptedData: arrayBufferToBase64(encryptedDataBuffer),\r\n        encryptedKey: arrayBufferToBase64(encryptedKeyBuffer),\r\n        iv: arrayBufferToBase64(iv.buffer),\r\n        authTag: arrayBufferToBase64(authTagBuffer),\r\n        timestamp: timestamp,\r\n        nonce: nonce\r\n    };\r\n\r\n    // 5. Enviar para o Servidor\r\n    const response = await fetch(API_URL, {\r\n        method: 'POST',\r\n        headers: { 'Content-Type': 'application/json' },\r\n        body: JSON.stringify(payload)\r\n    });\r\n    \r\n    return response.json();\r\n}\r\n\r\n// Exemplo de uso:\r\n/*\r\nencryptAndSend({ nome: \"Luis das Artimanhas\", valor: 500.00 })\r\n    .then(res => console.log(\"Resposta do Servidor:\", res))\r\n    .catch(err => console.error(\"Erro na comunicação segura:\", err));\r\n*/\r\n```\r\n\r\n***\r\n\r\n# user system\r\n```js\r\ninsertUser(name,userdata);\r\nreturn userdata saved\r\nselectUser(ID);\r\nreturn userdata\r\nusersList();\r\nreturn users ID,name\r\ndeleteUser(ID);\r\nalterUser(ID, name, newUserData);\r\ndisableUser(ID);\r\nreactivateUser(ID);\r\n```\r\n\r\n# STORAGE\r\n\r\nExpress (ESM)\r\n\r\n```js\r\nimport express from \"express\";\r\nimport { saveFile, saveBot } from \"npm-package-nodejs-utils-lda\";\r\n\r\nconst app = express();\r\n\r\napp.post(\"/upload/page\", saveFile.single(\"file\"), (req, res) => {\r\n  res.json({ ok: true, file: req.file });\r\n});\r\n\r\napp.post(\"/upload/bot\", saveBot.single(\"file\"), (req, res) => {\r\n  res.json({ ok: true, file: req.file });\r\n});\r\n```\r\n\r\n# mongo DB\r\n[MongoDB Utils Functions](./mongoUtils.md)\r\n\r\n```js\r\nimport { connectMongo, findDocuments, insertDocument } from 'npm-package-nodejs-utils-lda';\r\n\r\n// SET 'MONGO_CONNECTION_STRING' VARIABLE IN .ENV FILE FOR SECURE AND AUTOMATIC CONNECTION\r\nconst client = await connectMongo();\r\n\r\nconst docs = await findDocuments('myDB', 'myCollection', { status: 'active' });\r\nconst result = await insertDocument('myDB', 'myCollection', { name: 'New Doc' });\r\n```\r\n\r\n# AUTH\r\n```js\r\nconst { requestAuthCode } = require(\"npm-package-nodejs-utils-lda\");\r\n\r\n/**\r\n * POST /api/auth/request-code\r\n * Body: { email: string }\r\n */\r\nrouter.post(\"/request-code\", async (req, res) => {\r\n  try {\r\n    const { email } = req.body;\r\n\r\n    if (!email) {\r\n      return res.status(400).json({ error: \"Email é obrigatório\" });\r\n    }\r\n\r\n    await requestAuthCode(email);\r\n\r\n    return res.status(200).json({\r\n      success: true,\r\n      message: \"Código enviado para o email\",\r\n    });\r\n  } catch (err) {\r\n    console.error(err);\r\n    return res.status(500).json({\r\n      error: \"Erro ao enviar código\",\r\n    });\r\n  }\r\n});\r\n\r\nmodule.exports = router;\r\n```\r\n\r\n## verify codes\r\n```js\r\nconst { verifyAuthCode } = require(\"npm-package-nodejs-utils-lda\");\r\n\r\napp.post(\"/api/auth/verify-code\", async (req, res) => {\r\n  try {\r\n    const { email, code } = req.body;\r\n\r\n    await verifyAuthCode(email, code);\r\n\r\n    res.json({ success: true });\r\n  } catch (err) {\r\n    res.status(401).json({ error: err.message });\r\n  }\r\n});\r\n```\r\n\r\n## Generals Usage\r\n\r\n````js\r\nimport { fopen, fwrite, generateToken, fetchGet } from \"npm-package-nodejs-utils-lda\";\r\nconst filePath = \"database.json\"\r\n// Usando as funções\r\nconst data = fopen(filePath);\r\n\r\ndata.push(\"X\");\r\n\r\nfwrite(filePath, data);\r\nconst token = generateToken();\r\nfetchGet(\"https://example.com\",null, (onError,data)=>{\r\n    if(onError){\r\n        res.send(error);\r\n    }\r\n    res.send(data);\r\n});\r\n\r\n\r\napp.get(\"/baixar\", (req, res) => {\r\n  const fileUrl = \"https://exemplo.com/arquivo.zip\"; // URL do arquivo\r\n\r\n  fetchDownloadStream(fileUrl, (err, fileStream) => {\r\n    if (err) {\r\n      return res.status(500).send(\"Erro ao baixar o arquivo.\");\r\n    }\r\n\r\n    // Define o cabeçalho para download\r\n    res.setHeader(\"Content-Disposition\", 'attachment; filename=\"arquivo.zip\"');\r\n    res.setHeader(\"Content-Type\", \"application/octet-stream\");\r\n\r\n    // Envia o stream do arquivo para o cliente\r\n    fileStream.pipe(res);\r\n  });\r\n});\r\n\r\n\r\n# WSChat\r\n\r\n## With Express (recommended)\r\n\r\nIf you already have an Express server, just pass the app instance to WSChat:\r\n\r\n````js\r\nimport express from \"express\";\r\nimport WSChat from \"./WSchat.lib.mjs\"; // or require() for CommonJS\r\n\r\nconst app = express();\r\n\r\nconst server = WSChat(app, {\r\n  welcomeMessage: \"Hello! Welcome to the chat.\"\r\n});\r\n\r\nserver.listen(3000, () => {\r\n  console.log(\"Server running on port 3000\");\r\n});\r\n````\r\n\r\nThis creates the HTTP + WebSocket server using the same Express server.\r\n\r\n## Without Express (standalone WebSocket server)\r\n\r\nIf you want to run WSChat alone, without Express:\r\n\r\n````js\r\nimport WSChat from \"./WSchat.lib.mjs\";\r\n\r\nWSChat(null, { port: 8080 }); // starts HTTP + WS server on port 8080\r\n````\r\n\r\n---\r\n\r\n## Options\r\n\r\nThe second argument is an optional object with the following properties:\r\n\r\n````js\r\n{\r\n  port: 8080,               // Number - Port to listen on if WSChat creates its own HTTP server (default 8080)\r\n  welcomeMessage: \"Welcome to WSChat!\" // String - Message sent to clients immediately after connection\r\n}\r\n````\r\n","readmeFilename":"README.md"}